UNPKG

@skyux/modals

Version:

This library was generated with [Nx](https://nx.dev).

1 lines 40.7 kB
{"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":"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"}