{"version":3,"file":"skyux-modals-testing.mjs","sources":["../../../../../libs/components/modals/testing/src/legacy/modal-fixture.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-button-harness.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-harness.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.controller.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.service.ts","../../../../../libs/components/modals/testing/src/modules/confirm/provide-confirm-testing.ts","../../../../../libs/components/modals/testing/src/modules/confirm/confirm-testing.module.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.controller.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.service.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/provide-modal-testing.ts","../../../../../libs/components/modals/testing/src/modules/modal/controller/modal-testing.module.ts","../../../../../libs/components/modals/testing/src/modules/modal/modal-harness.ts","../../../../../libs/components/modals/testing/src/skyux-modals-testing.ts"],"sourcesContent":["import { ComponentFixture } from '@angular/core/testing';\n\n/**\n * Allows interaction with a SKY UX modal component.\n * @internal\n */\nexport class SkyModalFixture {\n  #modalElement: HTMLElement;\n\n  #fixture: ComponentFixture<unknown>;\n\n  constructor(fixture: ComponentFixture<unknown>, skyTestId: string) {\n    this.#fixture = fixture;\n    const modalElement = document.querySelector(\n      'sky-modal[data-sky-id=\"' + skyTestId + '\"]',\n    ) as HTMLElement;\n\n    if (!modalElement) {\n      throw new Error(\n        `No element was found with a \\`data-sky-id\\` value of \"${skyTestId}\".`,\n      );\n    }\n\n    this.#modalElement = modalElement;\n  }\n\n  /**\n   * The modal component's ARIA describedby attribute.\n   */\n  public get ariaDescribedBy(): string | undefined {\n    const modalDialogElement = this.#getModalDialogElement();\n    /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n    const describedByAttribute =\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      modalDialogElement.getAttribute('aria-describedby')!;\n    return describedByAttribute;\n  }\n\n  /**\n   * The modal component's ARIA labelledby attribute.\n   */\n  public get ariaLabelledBy(): string | undefined {\n    const modalDialogElement = this.#getModalDialogElement();\n    /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n    const labelledByAttribute =\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      modalDialogElement.getAttribute('aria-labelledby')!;\n\n    return labelledByAttribute;\n  }\n\n  /**\n   * The modal component's role attribute.\n   */\n  public get ariaRole(): string | undefined {\n    const modalDialogElement = this.#getModalDialogElement();\n    /* Non-null assertion as our component has a default for if the user does not provide this attribute or if they provide \"undefined\" */\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const roleAttribute = modalDialogElement.getAttribute('role')!;\n    return roleAttribute;\n  }\n\n  /**\n   * Whether or not the modal is a full page modal.\n   */\n  public get fullPage(): boolean {\n    const modalDivElement = this.getModalDiv();\n    return modalDivElement.classList.contains('sky-modal-full-page');\n  }\n\n  /**\n   * The size of the modal.\n   */\n  public get size(): string | undefined {\n    const modalDivElement = this.getModalDiv();\n    const possibleSizes = ['small', 'medium', 'large'];\n\n    for (const size of possibleSizes) {\n      if (modalDivElement.classList.contains('sky-modal-' + size)) {\n        return size;\n      }\n    }\n\n    return;\n  }\n\n  /**\n   * Whether or not the modal is set up for tiled content.\n   */\n  public get tiledBody(): boolean {\n    const modalDivElement = this.getModalDiv();\n    return modalDivElement.classList.contains('sky-modal-tiled');\n  }\n\n  /**\n   * Clicks the modal header's \"close\" button.\n   */\n  public clickHeaderCloseButton(): void {\n    this.#checkModalElement();\n    const closeButton: HTMLElement | null = this.#modalElement.querySelector(\n      '.sky-modal .sky-modal-btn-close',\n    );\n\n    if (\n      closeButton &&\n      window.getComputedStyle(closeButton).display !== 'none'\n    ) {\n      closeButton.click();\n      this.#fixture.detectChanges();\n    } else {\n      throw new Error(`No header close button exists.`);\n    }\n  }\n\n  /**\n   * Clicks the modal header's \"help\" button.\n   */\n  public clickHelpButton(): void {\n    this.#checkModalElement();\n    const helpButton: HTMLElement | null = this.#modalElement.querySelector(\n      '.sky-modal .sky-modal-header-buttons button[name=\"help-button\"]',\n    );\n\n    if (helpButton && window.getComputedStyle(helpButton).display !== 'none') {\n      helpButton.click();\n      this.#fixture.detectChanges();\n    } else {\n      throw new Error(`No help button exists.`);\n    }\n  }\n\n  /**\n   * Returns the main modal element.\n   */\n  public getModalDiv(): any {\n    this.#checkModalElement();\n    return this.#modalElement.querySelector('.sky-modal');\n  }\n\n  /**\n   * Returns the modal's content element.\n   */\n  public getModalContentEl(): any {\n    this.#checkModalElement();\n    return this.#modalElement.querySelector('.sky-modal-content');\n  }\n\n  /**\n   * Returns the modal's footer element.\n   */\n  public getModalFooterEl(): any {\n    this.#checkModalElement();\n    return this.#modalElement.querySelector('.sky-modal-footer');\n  }\n\n  /**\n   * Returns the modal's header element.\n   */\n  public getModalHeaderEl(): any {\n    this.#checkModalElement();\n    return this.#modalElement.querySelector('.sky-modal-header');\n  }\n\n  #checkModalElement(): void {\n    if (!document.contains(this.#modalElement)) {\n      throw new Error('Modal element no longer exists. Was the modal closed?');\n    }\n  }\n\n  #getModalDialogElement(): HTMLElement {\n    this.#checkModalElement();\n    // We can always know that the dialog element will exist if the modal is open and exists.\n    return this.#modalElement.querySelector('.sky-modal-dialog')!;\n  }\n}\n","import { ComponentHarness, HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyConfirmButtonStyleType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = '.sky-confirm-buttons .sky-btn';\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyConfirmButtonHarness` that meets certain criteria.\n   */\n  public static with(\n    filters: SkyConfirmButtonHarnessFilters,\n  ): HarnessPredicate<SkyConfirmButtonHarness> {\n    return new HarnessPredicate(SkyConfirmButtonHarness, filters)\n      .addOption('text', filters.text, async (harness, text) => {\n        const buttonText = await harness.getText();\n        return await HarnessPredicate.stringMatches(buttonText, text);\n      })\n      .addOption('styleType', filters.styleType, async (harness, styleType) => {\n        const buttonStyleType = await harness.getStyleType();\n        return await HarnessPredicate.stringMatches(buttonStyleType, styleType);\n      });\n  }\n\n  /**\n   * Clicks the confirm button.\n   */\n  public async click(): Promise<void> {\n    await (await this.host()).click();\n  }\n\n  /**\n   * Gets the button style of the confirm button.\n   */\n  public async getStyleType(): Promise<SkyConfirmButtonStyleType> {\n    const hostEl = await this.host();\n\n    if (await hostEl.hasClass('sky-btn-primary')) {\n      return 'primary';\n    } else if (await hostEl.hasClass('sky-btn-link')) {\n      return 'link';\n    } else if (await hostEl.hasClass('sky-btn-danger')) {\n      return 'danger';\n    }\n    return 'default';\n  }\n\n  /**\n   * Gets the text content of the confirm button.\n   */\n  public async getText(): Promise<string> {\n    return await (await this.host()).text();\n  }\n}\n","import { ComponentHarness, HarnessQuery } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyConfirmType } from '@skyux/modals';\n\nimport { SkyConfirmButtonHarness } from './confirm-button-harness';\nimport { SkyConfirmButtonHarnessFilters } from './confirm-button-harness-filters';\n\n/**\n * Harness for interacting with a confirm component in tests.\n */\nexport class SkyConfirmHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-confirm';\n\n  #getBodyEl = this.locatorForOptional('.sky-confirm-body');\n  #getButtons = this.locatorForAll(SkyConfirmButtonHarness);\n  #getConfirmEl = this.locatorFor('.sky-confirm');\n  #getMessageEl = this.locatorFor('.sky-confirm-message');\n\n  /**\n   * Clicks a confirm button.\n   */\n  public async clickCustomButton(\n    filters: SkyConfirmButtonHarnessFilters,\n  ): Promise<void> {\n    const buttons = await this.getCustomButtons(filters);\n\n    if (buttons.length > 1) {\n      if (filters.text instanceof RegExp) {\n        filters.text = filters.text.toString();\n      }\n      throw new Error(\n        `More than one button matches the filter(s): ${JSON.stringify(\n          filters,\n        )}.`,\n      );\n    }\n    await buttons[0].click();\n  }\n\n  /**\n   * Clicks a confirm button.\n   */\n  public async clickOkButton(): Promise<void> {\n    const type = await this.getType();\n\n    if (type === SkyConfirmType.Custom) {\n      throw new Error('Cannot click OK button on a confirm of type custom.');\n    }\n    const buttons = await this.#getButtons();\n    await buttons[0].click();\n  }\n\n  /**\n   * Gets the body of the confirm component.\n   */\n  public async getBodyText(): Promise<string | undefined> {\n    return await (await this.#getBodyEl())?.text();\n  }\n\n  /**\n   * Gets the confirm component's custom buttons.\n   */\n  public async getCustomButtons(\n    filters?: SkyConfirmButtonHarnessFilters,\n  ): Promise<SkyConfirmButtonHarness[]> {\n    const confirmType = await this.getType();\n\n    if (confirmType === SkyConfirmType.OK) {\n      throw new Error('Cannot get custom buttons for confirm of type OK.');\n    }\n\n    const harnesses = await this.#queryHarnesses(\n      SkyConfirmButtonHarness.with(filters || {}),\n    );\n\n    if (filters && harnesses.length === 0) {\n      // Stringify the regular expression so that it's readable in the console log.\n      if (filters.text instanceof RegExp) {\n        filters.text = filters.text.toString();\n      }\n\n      throw new Error(\n        `Could not find buttons matching filter(s): ${JSON.stringify(\n          filters,\n        )}.`,\n      );\n    }\n\n    return harnesses;\n  }\n\n  /**\n   * Gets the message of the confirm component.\n   */\n  public async getMessageText(): Promise<string> {\n    return await (await this.#getMessageEl()).text();\n  }\n\n  /**\n   * Gets the type of the confirm component.\n   */\n  public async getType(): Promise<SkyConfirmType> {\n    const confirmEl = await this.#getConfirmEl();\n    if (await confirmEl.hasClass('sky-confirm-type-ok')) {\n      return SkyConfirmType.OK;\n    }\n\n    return SkyConfirmType.Custom;\n  }\n\n  /**\n   * Whether the whitespace is preserved on the confirm component.\n   */\n  public async isWhiteSpacePreserved(): Promise<boolean> {\n    return await (\n      await this.#getMessageEl()\n    ).hasClass('sky-confirm-preserve-white-space');\n  }\n\n  /**\n   * Returns child harnesses.\n   */\n  async #queryHarnesses<T extends ComponentHarness>(\n    harness: HarnessQuery<T>,\n  ): Promise<T[]> {\n    return await this.locatorForAll(harness)();\n  }\n}\n","import { SkyConfirmCloseEventArgs, SkyConfirmConfig } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the confirm service\n * and handles interactions with confirm dialogs.\n */\nexport abstract class SkyConfirmTestingController {\n  /**\n   * Closes the confirm dialog with the \"cancel\" action.\n   */\n  public abstract cancel(): void;\n  /**\n   * Throws if a confirm dialog is open.\n   */\n  public abstract expectNone(): void;\n  /**\n   * Throws if the open confirm dialog does not match the provided configuration.\n   * @param config\n   */\n  public abstract expectOpen(config: SkyConfirmConfig): void;\n  /**\n   * Closes the confirm dialog with the provided action.\n   */\n  public abstract close(args: SkyConfirmCloseEventArgs): void;\n  /**\n   * Closes the confirm dialog with the \"ok\" action.\n   */\n  public abstract ok(): void;\n}\n","import {\n  SkyConfirmButtonConfig,\n  SkyConfirmCloseEventArgs,\n  SkyConfirmConfig,\n  SkyConfirmInstance,\n  SkyConfirmServiceInterface,\n  SkyConfirmType,\n} from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\n\ninterface TestSubject {\n  buttons: SkyConfirmButtonConfig[];\n  config: SkyConfirmConfig;\n  instance: SkyConfirmInstance;\n}\n\nfunction assertConfirmOpen(\n  value: TestSubject | undefined,\n): asserts value is TestSubject {\n  if (value === undefined) {\n    throw new Error('A confirm dialog is expected to be open but is closed.');\n  }\n\n  return;\n}\n\nfunction assertConfirmClosed(\n  value: TestSubject | undefined,\n): asserts value is undefined {\n  if (value !== undefined) {\n    throw new Error('A confirm dialog is expected to be closed but is open.');\n  }\n\n  return;\n}\n\nfunction isButtonConfigArray(val: unknown): val is SkyConfirmButtonConfig[] {\n  return (\n    Array.isArray(val) && (val.length === 0 || val[0].action !== undefined)\n  );\n}\n\nfunction buttonConfigMatches(\n  actual: SkyConfirmButtonConfig,\n  expected: SkyConfirmButtonConfig,\n): boolean {\n  return (\n    expected.action === actual.action &&\n    expected.text === actual.text &&\n    expected.styleType === actual.styleType\n  );\n}\n\n/**\n * @internal\n */\nexport class SkyConfirmTestingService\n  extends SkyConfirmTestingController\n  implements SkyConfirmServiceInterface\n{\n  #testSubject: TestSubject | undefined;\n\n  public cancel(): void {\n    this.close({ action: 'cancel' });\n  }\n\n  public ok(): void {\n    this.close({ action: 'ok' });\n  }\n\n  public close(args: SkyConfirmCloseEventArgs): void {\n    assertConfirmOpen(this.#testSubject);\n\n    const isActionPermitted = this.#testSubject?.buttons.some(\n      (b) => b.action === args.action,\n    );\n\n    if (isActionPermitted) {\n      this.#testSubject.instance.close(args);\n      this.#testSubject = undefined;\n    } else {\n      throw new Error(\n        `The confirm dialog does not have a button configured for the \"${args.action}\" action.`,\n      );\n    }\n  }\n\n  public expectNone(): void {\n    assertConfirmClosed(this.#testSubject);\n  }\n\n  public expectOpen(expectedConfig: SkyConfirmConfig): void {\n    assertConfirmOpen(this.#testSubject);\n\n    const actualConfig = this.#testSubject.config;\n\n    for (const [key, expectedValue] of Object.entries(expectedConfig)) {\n      const k = key as keyof typeof expectedConfig;\n      const actualValue = actualConfig[k];\n\n      if (\n        isButtonConfigArray(expectedValue) &&\n        isButtonConfigArray(actualValue)\n      ) {\n        if (expectedValue.length !== actualValue.length) throwDetailedError();\n\n        expectedValue.forEach((expectedButton, index) => {\n          if (!buttonConfigMatches(expectedButton, actualValue[index])) {\n            throwDetailedError();\n          }\n        });\n      } else if (actualValue !== expectedValue) {\n        throwDetailedError();\n      }\n    }\n\n    function throwDetailedError(): never {\n      throw new Error(`Expected a confirm dialog to be open with a specific configuration.\nExpected:\n${JSON.stringify(expectedConfig, undefined, 2)}\nActual:\n${JSON.stringify(actualConfig, undefined, 2)}\n`);\n    }\n  }\n\n  public open(config: SkyConfirmConfig): SkyConfirmInstance {\n    assertConfirmClosed(this.#testSubject);\n\n    const instance = new SkyConfirmInstance();\n    const testSubject: TestSubject = {\n      buttons: [],\n      config,\n      instance,\n    };\n\n    switch (config.type) {\n      case SkyConfirmType.Custom:\n        config.buttons?.forEach((b) => {\n          testSubject.buttons.push({ action: b.action, text: b.text });\n        });\n        break;\n\n      case SkyConfirmType.OK:\n      default:\n        testSubject.buttons.push({ action: 'ok', text: 'Ok' });\n        testSubject.buttons.push({ action: 'cancel', text: 'Cancel' });\n        break;\n    }\n\n    this.#testSubject = testSubject;\n\n    return instance;\n  }\n}\n","import { Provider } from '@angular/core';\nimport { SkyConfirmService } from '@skyux/modals';\n\nimport { SkyConfirmTestingController } from './confirm-testing.controller';\nimport { SkyConfirmTestingService } from './confirm-testing.service';\n\n/**\n * @internal\n */\nexport function provideConfirmTesting(): Provider[] {\n  return [\n    SkyConfirmTestingService,\n    {\n      provide: SkyConfirmService,\n      useExisting: SkyConfirmTestingService,\n    },\n    {\n      provide: SkyConfirmTestingController,\n      useExisting: SkyConfirmTestingService,\n    },\n  ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideConfirmTesting } from './provide-confirm-testing';\n\n/**\n * Configures the `SkyConfirmTestingController` as the backend for the `SkyConfirmService`.\n */\n@NgModule({\n  providers: [provideConfirmTesting()],\n})\nexport class SkyConfirmTestingModule {}\n","import { Type } from '@angular/core';\nimport { SkyModalCloseArgs } from '@skyux/modals';\n\n/**\n * A controller to be injected into tests, which mocks the modal service\n * and handles interactions with modal instances. For testing interactions\n * with the modal component itself, use the `SkyModalHarness`.\n */\nexport abstract class SkyModalTestingController {\n  /**\n   * Closes the topmost modal with the provided arguments.\n   * @param args Arguments to pass to the modal's close event.\n   */\n  public abstract closeTopModal(args?: SkyModalCloseArgs): void;\n\n  /**\n   * Throws if the provided value does not match the number of open modals.\n   */\n  public abstract expectCount(value: number): void;\n\n  /**\n   * Throws if modals are open.\n   */\n  public abstract expectNone(): void;\n\n  /**\n   * Throws if the given criteria does not match the topmost open modal.\n   */\n  public abstract expectOpen<TComponent>(component: Type<TComponent>): void;\n}\n","import { Injectable, OnDestroy, StaticProvider, Type } from '@angular/core';\nimport {\n  SkyModalCloseArgs,\n  SkyModalConfigurationInterface,\n  SkyModalInstance,\n  SkyModalServiceInterface,\n} from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\n\ninterface TestSubject<T = unknown> {\n  component: Type<T>;\n  config: SkyModalConfigurationInterface | StaticProvider[] | undefined;\n  instance: SkyModalInstance;\n}\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyModalTestingService\n  extends SkyModalTestingController\n  implements OnDestroy, SkyModalServiceInterface\n{\n  readonly #modals = new Map<SkyModalInstance, TestSubject>();\n\n  public ngOnDestroy(): void {\n    for (const instance of this.#modals.keys()) {\n      instance.close();\n    }\n  }\n\n  public closeTopModal(args?: SkyModalCloseArgs): void {\n    const modal = this.#getTopmostModal();\n    if (!modal) {\n      throw new Error(\n        'Expected to close the topmost modal, but no modals are open.',\n      );\n    }\n\n    modal.instance.close(args?.data, args?.reason);\n  }\n\n  public expectCount(value: number): void {\n    const count = this.#modals.size;\n    if (count !== value) {\n      throw new Error(\n        `Expected ${value} open ${value === 1 ? 'modal' : 'modals'}, but ${count} ${count === 1 ? 'is' : 'are'} open.`,\n      );\n    }\n  }\n\n  public expectNone(): void {\n    const count = this.#modals.size;\n    if (count > 0) {\n      throw new Error(\n        `Expected no modals to be open, but there ${count === 1 ? 'is' : 'are'} ${count} open.`,\n      );\n    }\n  }\n\n  public expectOpen<TComponent>(component: Type<TComponent>): void {\n    const modal = this.#getTopmostModal();\n    if (!modal) {\n      throw new Error(\n        'A modal is expected to be open, but no modals are open.',\n      );\n    }\n\n    if (modal.component !== component) {\n      throw new Error(\n        `Expected the topmost modal to be of type ${component.name}, but it is of type ${modal.component.name}.`,\n      );\n    }\n  }\n\n  public open<TComponent>(\n    component: Type<TComponent>,\n    config?: SkyModalConfigurationInterface | StaticProvider[],\n  ): SkyModalInstance {\n    const instance = new SkyModalInstance();\n\n    instance.closed.subscribe(() => {\n      this.#modals.delete(instance);\n    });\n\n    this.#modals.set(instance, { component, config, instance });\n\n    return instance;\n  }\n\n  #getTopmostModal(): TestSubject | undefined {\n    return Array.from(this.#modals.values()).pop();\n  }\n}\n","import { Provider } from '@angular/core';\nimport { SkyModalService } from '@skyux/modals';\n\nimport { SkyModalTestingController } from './modal-testing.controller';\nimport { SkyModalTestingService } from './modal-testing.service';\n\n/**\n * @internal\n */\nexport function provideModalTesting(): Provider[] {\n  return [\n    SkyModalTestingService,\n    {\n      provide: SkyModalService,\n      useExisting: SkyModalTestingService,\n    },\n    {\n      provide: SkyModalTestingController,\n      useExisting: SkyModalTestingService,\n    },\n  ];\n}\n","import { NgModule } from '@angular/core';\n\nimport { provideModalTesting } from './provide-modal-testing';\n\n/**\n * Configures the `SkyModalTestingController` as the implementation for the `SkyModalService`.\n */\n@NgModule({\n  providers: [provideModalTesting()],\n})\nexport class SkyModalTestingModule {}\n","import { HarnessPredicate } from '@angular/cdk/testing';\nimport { SkyComponentHarness } from '@skyux/core/testing';\nimport { SkyHelpInlineHarness } from '@skyux/help-inline/testing';\n\nimport { SkyModalHarnessFilters } from './modal-harness-filters';\n\n/**\n * Harness for interacting with a modal component in tests.\n */\nexport class SkyModalHarness extends SkyComponentHarness {\n  /**\n   * @internal\n   */\n  public static hostSelector = 'sky-modal';\n\n  #getModal = this.locatorFor('.sky-modal');\n  #getModalDialog = this.locatorFor('.sky-modal-dialog');\n  #getModalHeading = this.locatorFor('.sky-modal-heading');\n\n  /**\n   * Gets a `HarnessPredicate` that can be used to search for a\n   * `SkyModalHarness` that meets certain criteria\n   */\n  public static with(\n    filters: SkyModalHarnessFilters,\n  ): HarnessPredicate<SkyModalHarness> {\n    return SkyModalHarness.getDataSkyIdPredicate(filters);\n  }\n\n  /**\n   * Clicks the help inline button.\n   */\n  public async clickHelpInline(): Promise<void> {\n    await (await this.#getHelpInline()).click();\n  }\n\n  /**\n   * Gets the aria-describedBy property of the modal.\n   * @deprecated\n   */\n  public async getAriaDescribedBy(): Promise<string | null> {\n    return await (\n      await this.#getModalDialog()\n    ).getAttribute('aria-describedby');\n  }\n\n  /**\n   * Gets the aria-labelledBy property of the modal.\n   * @deprecated\n   */\n  public async getAriaLabelledBy(): Promise<string | null> {\n    return await (await this.#getModalDialog()).getAttribute('aria-labelledby');\n  }\n\n  /**\n   * Gets the role of the modal.\n   */\n  public async getAriaRole(): Promise<string | null> {\n    return await (await this.#getModalDialog()).getAttribute('role');\n  }\n\n  /**\n   * Gets the modal's heading text.\n   */\n  public async getHeadingText(): Promise<string | undefined> {\n    return await (await this.#getModalHeading()).text();\n  }\n\n  /**\n   * Gets the help popover content.\n   */\n  public async getHelpPopoverContent(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverContent();\n  }\n\n  /**\n   * Gets the help popover title.\n   */\n  public async getHelpPopoverTitle(): Promise<string | undefined> {\n    return await (await this.#getHelpInline()).getPopoverTitle();\n  }\n\n  /**\n   * Gets the modal size.\n   */\n  public async getSize(): Promise<string> {\n    if (await this.isFullPage()) {\n      throw new Error(\n        'Size cannot be determined because size property is overridden when modal is full page',\n      );\n    }\n\n    const modal = await this.#getModal();\n\n    if (await modal.hasClass('sky-modal-small')) {\n      return 'small';\n    }\n\n    if (await modal.hasClass('sky-modal-large')) {\n      return 'large';\n    }\n\n    return 'medium';\n  }\n\n  /**\n   * Gets the wrapper class of the modal.\n   */\n  public async getWrapperClass(): Promise<string | undefined> {\n    return await (await this.host()).getProperty('className');\n  }\n\n  /**\n   * Whether the modal is full page.\n   */\n  public async isFullPage(): Promise<boolean> {\n    const modal = this.#getModal();\n    return await (await modal).hasClass('sky-modal-full-page');\n  }\n\n  /**\n   * Whether the modal has {@link SkyModalIsDirtyDirective.isDirty} set to dirty.\n   */\n  public async isDirty(): Promise<boolean> {\n    const modalHost = await this.host();\n    const isDirtyAttribute = await modalHost.getAttribute(\n      'data-sky-modal-is-dirty',\n    );\n    return isDirtyAttribute === 'true';\n  }\n\n  async #getHelpInline(): Promise<SkyHelpInlineHarness> {\n    const harness = await this.locatorForOptional(SkyHelpInlineHarness)();\n\n    if (harness) {\n      return harness;\n    }\n\n    throw Error('No help inline found.');\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAEA;;;AAGG;MACU,eAAe,CAAA;AAC1B,IAAA,aAAa;AAEb,IAAA,QAAQ;IAER,WAAA,CAAY,OAAkC,EAAE,SAAiB,EAAA;AAC/D,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,yBAAyB,GAAG,SAAS,GAAG,IAAI,CAC9B;QAEhB,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CACb,yDAAyD,SAAS,CAAA,EAAA,CAAI,CACvE;;AAGH,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;;AAGnC;;AAEG;AACH,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE;;AAExD,QAAA,MAAM,oBAAoB;;AAExB,QAAA,kBAAkB,CAAC,YAAY,CAAC,kBAAkB,CAAE;AACtD,QAAA,OAAO,oBAAoB;;AAG7B;;AAEG;AACH,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE;;AAExD,QAAA,MAAM,mBAAmB;;AAEvB,QAAA,kBAAkB,CAAC,YAAY,CAAC,iBAAiB,CAAE;AAErD,QAAA,OAAO,mBAAmB;;AAG5B;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE;;;QAGxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAE;AAC9D,QAAA,OAAO,aAAa;;AAGtB;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE;QAC1C,OAAO,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC;;AAGlE;;AAEG;AACH,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE;QAC1C,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AAElD,QAAA,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;YAChC,IAAI,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE;AAC3D,gBAAA,OAAO,IAAI;;;QAIf;;AAGF;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE;QAC1C,OAAO,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;;AAG9D;;AAEG;IACI,sBAAsB,GAAA;QAC3B,IAAI,CAAC,kBAAkB,EAAE;QACzB,MAAM,WAAW,GAAuB,IAAI,CAAC,aAAa,CAAC,aAAa,CACtE,iCAAiC,CAClC;AAED,QAAA,IACE,WAAW;YACX,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,KAAK,MAAM,EACvD;YACA,WAAW,CAAC,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;;aACxB;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,CAAgC,CAAC;;;AAIrD;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,kBAAkB,EAAE;QACzB,MAAM,UAAU,GAAuB,IAAI,CAAC,aAAa,CAAC,aAAa,CACrE,iEAAiE,CAClE;AAED,QAAA,IAAI,UAAU,IAAI,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,OAAO,KAAK,MAAM,EAAE;YACxE,UAAU,CAAC,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;;aACxB;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,CAAwB,CAAC;;;AAI7C;;AAEG;IACI,WAAW,GAAA;QAChB,IAAI,CAAC,kBAAkB,EAAE;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC;;AAGvD;;AAEG;IACI,iBAAiB,GAAA;QACtB,IAAI,CAAC,kBAAkB,EAAE;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,oBAAoB,CAAC;;AAG/D;;AAEG;IACI,gBAAgB,GAAA;QACrB,IAAI,CAAC,kBAAkB,EAAE;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;;AAG9D;;AAEG;IACI,gBAAgB,GAAA;QACrB,IAAI,CAAC,kBAAkB,EAAE;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAC;;IAG9D,kBAAkB,GAAA;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAC1C,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;;;IAI5E,sBAAsB,GAAA;QACpB,IAAI,CAAC,kBAAkB,EAAE;;QAEzB,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,mBAAmB,CAAE;;AAEhE;;ACzKD;;AAEG;AACG,MAAO,uBAAwB,SAAQ,gBAAgB,CAAA;AAC3D;;AAEG;aACW,IAAA,CAAA,YAAY,GAAG,+BAA+B,CAAC;AAE7D;;;AAGG;IACI,OAAO,IAAI,CAChB,OAAuC,EAAA;AAEvC,QAAA,OAAO,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,OAAO;AACzD,aAAA,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,OAAO,EAAE,IAAI,KAAI;AACvD,YAAA,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE;YAC1C,OAAO,MAAM,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;AAC/D,SAAC;AACA,aAAA,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,OAAO,EAAE,SAAS,KAAI;AACtE,YAAA,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;YACpD,OAAO,MAAM,gBAAgB,CAAC,aAAa,CAAC,eAAe,EAAE,SAAS,CAAC;AACzE,SAAC,CAAC;;AAGN;;AAEG;AACI,IAAA,MAAM,KAAK,GAAA;QAChB,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE;;AAGnC;;AAEG;AACI,IAAA,MAAM,YAAY,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;QAEhC,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AAC5C,YAAA,OAAO,SAAS;;aACX,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAChD,YAAA,OAAO,MAAM;;aACR,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAClD,YAAA,OAAO,QAAQ;;AAEjB,QAAA,OAAO,SAAS;;AAGlB;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;QAClB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;;;;ACpD3C;;AAEG;AACG,MAAO,iBAAkB,SAAQ,mBAAmB,CAAA;AACxD;;AAEG;aACW,IAAA,CAAA,YAAY,GAAG,aAAa,CAAC;AAE3C,IAAA,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;AACzD,IAAA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;AACzD,IAAA,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;AAC/C,IAAA,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;AAEvD;;AAEG;IACI,MAAM,iBAAiB,CAC5B,OAAuC,EAAA;QAEvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAEpD,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,OAAO,CAAC,IAAI,YAAY,MAAM,EAAE;gBAClC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAExC,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,4CAAA,EAA+C,IAAI,CAAC,SAAS,CAC3D,OAAO,CACR,CAAA,CAAA,CAAG,CACL;;AAEH,QAAA,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;;AAG1B;;AAEG;AACI,IAAA,MAAM,aAAa,GAAA;AACxB,QAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AAEjC,QAAA,IAAI,IAAI,KAAK,cAAc,CAAC,MAAM,EAAE;AAClC,YAAA,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC;;AAExE,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE;AACxC,QAAA,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;;AAG1B;;AAEG;AACI,IAAA,MAAM,WAAW,GAAA;QACtB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE;;AAGhD;;AAEG;IACI,MAAM,gBAAgB,CAC3B,OAAwC,EAAA;AAExC,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AAExC,QAAA,IAAI,WAAW,KAAK,cAAc,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;;AAGtE,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAC1C,uBAAuB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAC5C;QAED,IAAI,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;;AAErC,YAAA,IAAI,OAAO,CAAC,IAAI,YAAY,MAAM,EAAE;gBAClC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAGxC,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,2CAAA,EAA8C,IAAI,CAAC,SAAS,CAC1D,OAAO,CACR,CAAA,CAAA,CAAG,CACL;;AAGH,QAAA,OAAO,SAAS;;AAGlB;;AAEG;AACI,IAAA,MAAM,cAAc,GAAA;QACzB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE;;AAGlD;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;QAC5C,IAAI,MAAM,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;YACnD,OAAO,cAAc,CAAC,EAAE;;QAG1B,OAAO,cAAc,CAAC,MAAM;;AAG9B;;AAEG;AACI,IAAA,MAAM,qBAAqB,GAAA;AAChC,QAAA,OAAO,MAAM,CACX,MAAM,IAAI,CAAC,aAAa,EAAE,EAC1B,QAAQ,CAAC,kCAAkC,CAAC;;AAGhD;;AAEG;IACH,MAAM,eAAe,CACnB,OAAwB,EAAA;QAExB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;;;;AC9H9C;;;AAGG;MACmB,2BAA2B,CAAA;AAsBhD;;ACXD,SAAS,iBAAiB,CACxB,KAA8B,EAAA;AAE9B,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;;IAG3E;AACF;AAEA,SAAS,mBAAmB,CAC1B,KAA8B,EAAA;AAE9B,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;;IAG3E;AACF;AAEA,SAAS,mBAAmB,CAAC,GAAY,EAAA;IACvC,QACE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;AAE3E;AAEA,SAAS,mBAAmB,CAC1B,MAA8B,EAC9B,QAAgC,EAAA;AAEhC,IAAA,QACE,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;AACjC,QAAA,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;AAC7B,QAAA,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;AAE3C;AAEA;;AAEG;AACG,MAAO,wBACX,SAAQ,2BAA2B,CAAA;AAGnC,IAAA,YAAY;IAEL,MAAM,GAAA;QACX,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;;IAG3B,EAAE,GAAA;QACP,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;AAGvB,IAAA,KAAK,CAAC,IAA8B,EAAA;AACzC,QAAA,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;QAEpC,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CACvD,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAChC;QAED,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;;aACxB;YACL,MAAM,IAAI,KAAK,CACb,CAAA,8DAAA,EAAiE,IAAI,CAAC,MAAM,CAAA,SAAA,CAAW,CACxF;;;IAIE,UAAU,GAAA;AACf,QAAA,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;;AAGjC,IAAA,UAAU,CAAC,cAAgC,EAAA;AAChD,QAAA,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC;AAEpC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AAE7C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YACjE,MAAM,CAAC,GAAG,GAAkC;AAC5C,YAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;YAEnC,IACE,mBAAmB,CAAC,aAAa,CAAC;AAClC,gBAAA,mBAAmB,CAAC,WAAW,CAAC,EAChC;AACA,gBAAA,IAAI,aAAa,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;AAAE,oBAAA,kBAAkB,EAAE;gBAErE,aAAa,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,KAAK,KAAI;oBAC9C,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;AAC5D,wBAAA,kBAAkB,EAAE;;AAExB,iBAAC,CAAC;;AACG,iBAAA,IAAI,WAAW,KAAK,aAAa,EAAE;AACxC,gBAAA,kBAAkB,EAAE;;;AAIxB,QAAA,SAAS,kBAAkB,GAAA;YACzB,MAAM,IAAI,KAAK,CAAC,CAAA;;EAEpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;;EAE5C,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3C,CAAA,CAAC;;;AAIO,IAAA,IAAI,CAAC,MAAwB,EAAA;AAClC,QAAA,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC;AAEtC,QAAA,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE;AACzC,QAAA,MAAM,WAAW,GAAgB;AAC/B,YAAA,OAAO,EAAE,EAAE;YACX,MAAM;YACN,QAAQ;SACT;AAED,QAAA,QAAQ,MAAM,CAAC,IAAI;YACjB,KAAK,cAAc,CAAC,MAAM;gBACxB,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;AAC5B,oBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9D,iBAAC,CAAC;gBACF;YAEF,KAAK,cAAc,CAAC,EAAE;AACtB,YAAA;AACE,gBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACtD,gBAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC9D;;AAGJ,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAE/B,QAAA,OAAO,QAAQ;;AAElB;;ACrJD;;AAEG;SACa,qBAAqB,GAAA;IACnC,OAAO;QACL,wBAAwB;AACxB,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,wBAAwB;AACtC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,WAAW,EAAE,wBAAwB;AACtC,SAAA;KACF;AACH;;ACjBA;;AAEG;MAIU,uBAAuB,CAAA;+GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAvB,uBAAuB,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,SAAA,EAFvB,CAAC,qBAAqB,EAAE,CAAC,EAAA,CAAA,CAAA;;4FAEzB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE,CAAC,qBAAqB,EAAE,CAAC;AACrC,iBAAA;;;ACND;;;;AAIG;MACmB,yBAAyB,CAAA;AAqB9C;;ACbD;;AAEG;AAEG,MAAO,sBACX,SAAQ,yBAAyB,CAAA;AAGxB,IAAA,OAAO,GAAG,IAAI,GAAG,EAAiC;IAEpD,WAAW,GAAA;QAChB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;YAC1C,QAAQ,CAAC,KAAK,EAAE;;;AAIb,IAAA,aAAa,CAAC,IAAwB,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D;;AAGH,QAAA,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;;AAGzC,IAAA,WAAW,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;AAC/B,QAAA,IAAI,KAAK,KAAK,KAAK,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,SAAA,EAAY,KAAK,CAAA,MAAA,EAAS,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA,MAAA,CAAQ,CAC/G;;;IAIE,UAAU,GAAA;AACf,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CACb,4CAA4C,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,KAAK,CAAA,MAAA,CAAQ,CACxF;;;AAIE,IAAA,UAAU,CAAa,SAA2B,EAAA;AACvD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D;;AAGH,QAAA,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,yCAAA,EAA4C,SAAS,CAAC,IAAI,CAAA,oBAAA,EAAuB,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA,CAAA,CAAG,CACzG;;;IAIE,IAAI,CACT,SAA2B,EAC3B,MAA0D,EAAA;AAE1D,QAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE;AAEvC,QAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAE3D,QAAA,OAAO,QAAQ;;IAGjB,gBAAgB,GAAA;AACd,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;;+GAxErC,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAtB,sBAAsB,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACbD;;AAEG;SACa,mBAAmB,GAAA;IACjC,OAAO;QACL,sBAAsB;AACtB,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,WAAW,EAAE,sBAAsB;AACpC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,yBAAyB;AAClC,YAAA,WAAW,EAAE,sBAAsB;AACpC,SAAA;KACF;AACH;;ACjBA;;AAEG;MAIU,qBAAqB,CAAA;+GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAArB,qBAAqB,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,SAAA,EAFrB,CAAC,mBAAmB,EAAE,CAAC,EAAA,CAAA,CAAA;;4FAEvB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE,CAAC,mBAAmB,EAAE,CAAC;AACnC,iBAAA;;;ACHD;;AAEG;AACG,MAAO,eAAgB,SAAQ,mBAAmB,CAAA;AACtD;;AAEG;aACW,IAAA,CAAA,YAAY,GAAG,WAAW,CAAC;AAEzC,IAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AACzC,IAAA,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;AACtD,IAAA,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAExD;;;AAGG;IACI,OAAO,IAAI,CAChB,OAA+B,EAAA;AAE/B,QAAA,OAAO,eAAe,CAAC,qBAAqB,CAAC,OAAO,CAAC;;AAGvD;;AAEG;AACI,IAAA,MAAM,eAAe,GAAA;QAC1B,MAAM,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE;;AAG7C;;;AAGG;AACI,IAAA,MAAM,kBAAkB,GAAA;AAC7B,QAAA,OAAO,MAAM,CACX,MAAM,IAAI,CAAC,eAAe,EAAE,EAC5B,YAAY,CAAC,kBAAkB,CAAC;;AAGpC;;;AAGG;AACI,IAAA,MAAM,iBAAiB,GAAA;AAC5B,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,iBAAiB,CAAC;;AAG7E;;AAEG;AACI,IAAA,MAAM,WAAW,GAAA;AACtB,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC;;AAGlE;;AAEG;AACI,IAAA,MAAM,cAAc,GAAA;QACzB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE;;AAGrD;;AAEG;AACI,IAAA,MAAM,qBAAqB,GAAA;QAChC,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,iBAAiB,EAAE;;AAGhE;;AAEG;AACI,IAAA,MAAM,mBAAmB,GAAA;QAC9B,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE;;AAG9D;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3B,YAAA,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF;;AAGH,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QAEpC,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AAC3C,YAAA,OAAO,OAAO;;QAGhB,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;AAC3C,YAAA,OAAO,OAAO;;AAGhB,QAAA,OAAO,QAAQ;;AAGjB;;AAEG;AACI,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC;;AAG3D;;AAEG;AACI,IAAA,MAAM,UAAU,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;QAC9B,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,QAAQ,CAAC,qBAAqB,CAAC;;AAG5D;;AAEG;AACI,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;QACnC,MAAM,gBAAgB,GAAG,MAAM,SAAS,CAAC,YAAY,CACnD,yBAAyB,CAC1B;QACD,OAAO,gBAAgB,KAAK,MAAM;;AAGpC,IAAA,MAAM,cAAc,GAAA;QAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,EAAE;QAErE,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO;;AAGhB,QAAA,MAAM,KAAK,CAAC,uBAAuB,CAAC;;;;AC1IxC;;AAEG;;;;"}