@skyux/modals 10.31.0 → 10.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-modals-testing.mjs","sources":["../../../../../libs/components/modals/testing/src/modal-fixture.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-button-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.controller.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.service.ts","../../../../../libs/components/modals/testing/src/confirm/provide-confirm-testing.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.module.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.controller.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.service.ts","../../../../../libs/components/modals/testing/src/modal/controller/provide-modal-testing.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.module.ts","../../../../../libs/components/modals/testing/src/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 * @internal\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\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 HarnessPredicate.stringMatches(await harness.getText(), text),\n )\n .addOption('styleType', filters.styleType, async (harness, styleType) =>\n HarnessPredicate.stringMatches(await harness.getStyleType(), styleType),\n );\n }\n\n /**\n * Clicks the confirm button.\n */\n public async click(): Promise<void> {\n return (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 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 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 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 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 this.#getMessageEl()).hasClass(\n 'sky-confirm-preserve-white-space',\n );\n }\n\n /**\n * Returns child harnesses.\n */\n async #queryHarnesses<T extends ComponentHarness>(\n harness: HarnessQuery<T>,\n ): Promise<T[]> {\n return this.locatorForAll(harness)();\n }\n}\n","/* eslint-disable @nx/enforce-module-boundaries */\nimport { 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","/* eslint-disable @nx/enforce-module-boundaries */\nimport {\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","/* eslint-disable @nx/enforce-module-boundaries */\nimport { 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';\n// eslint-disable-next-line @nx/enforce-module-boundaries\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';\n\n/* eslint-disable-next-line @nx/enforce-module-boundaries */\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);\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';\n\n/* eslint-disable-next-line @nx/enforce-module-boundaries */\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';\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\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 * Gets the aria-describedBy property of the modal\n */\n public async getAriaDescribedBy(): Promise<string | null> {\n return (await this.#getModalDialog()).getAttribute('aria-describedby');\n }\n\n /**\n * Gets the aria-labelledBy property of the modal\n */\n public async getAriaLabelledBy(): Promise<string | null> {\n return (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 this.#getModalDialog()).getAttribute('role');\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 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skyux-modals-testing.mjs","sources":["../../../../../libs/components/modals/testing/src/modal-fixture.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-button-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-harness.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.controller.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.service.ts","../../../../../libs/components/modals/testing/src/confirm/provide-confirm-testing.ts","../../../../../libs/components/modals/testing/src/confirm/confirm-testing.module.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.controller.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.service.ts","../../../../../libs/components/modals/testing/src/modal/controller/provide-modal-testing.ts","../../../../../libs/components/modals/testing/src/modal/controller/modal-testing.module.ts","../../../../../libs/components/modals/testing/src/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 * @internal\n */\nexport class SkyConfirmButtonHarness extends ComponentHarness {\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 HarnessPredicate.stringMatches(await harness.getText(), text),\n )\n .addOption('styleType', filters.styleType, async (harness, styleType) =>\n HarnessPredicate.stringMatches(await harness.getStyleType(), styleType),\n );\n }\n\n /**\n * Clicks the confirm button.\n */\n public async click(): Promise<void> {\n return (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 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 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 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 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 this.#getMessageEl()).hasClass(\n 'sky-confirm-preserve-white-space',\n );\n }\n\n /**\n * Returns child harnesses.\n */\n async #queryHarnesses<T extends ComponentHarness>(\n harness: HarnessQuery<T>,\n ): Promise<T[]> {\n return this.locatorForAll(harness)();\n }\n}\n","/* eslint-disable @nx/enforce-module-boundaries */\nimport { 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","/* eslint-disable @nx/enforce-module-boundaries */\nimport {\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","/* eslint-disable @nx/enforce-module-boundaries */\nimport { 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';\n// eslint-disable-next-line @nx/enforce-module-boundaries\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';\n\n/* eslint-disable-next-line @nx/enforce-module-boundaries */\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);\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';\n\n/* eslint-disable-next-line @nx/enforce-module-boundaries */\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 { TemplateRef } from '@angular/core';\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 return (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 this.#getModalDialog()).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 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 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 this.#getModalHeading()).text();\n }\n\n /**\n * Gets the help popover content.\n */\n public async getHelpPopoverContent(): Promise<\n TemplateRef<unknown> | string | undefined\n > {\n return (await this.#getHelpInline()).getPopoverContent();\n }\n\n /**\n * Gets the help popover title.\n */\n public async getHelpPopoverTitle(): Promise<string | undefined> {\n return (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 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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"}
@@ -1,16 +1,18 @@
1
1
  import { ReplaySubject, Subject, BehaviorSubject } from 'rxjs';
2
2
  import * as i0 from '@angular/core';
3
3
  import { NgModule, InjectionToken, Component, ViewEncapsulation, Injectable, EventEmitter, inject, ElementRef, NgZone, Directive, Output, HostListener, ChangeDetectorRef, HostBinding, Input, ViewChild, Inject, EnvironmentInjector, ViewContainerRef } from '@angular/core';
4
- import * as i1$1 from '@angular/common';
4
+ import * as i1$2 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
6
6
  import * as i1 from '@skyux/core';
7
- import { SkyMutationObserverService, SkyCoreAdapterService, SkyDockService, SkyLiveAnnouncerService, SkyResizeObserverMediaQueryService, SkyAppWindowRef, SkyDockLocation, SkyIdModule, SkyIdService, SkyDynamicComponentService, SkyMediaQueryService, SKY_STACKING_CONTEXT, SkyTrimModule } from '@skyux/core';
8
- import * as i4 from '@skyux/i18n';
7
+ import { SkyTrimModule, SkyMutationObserverService, SkyCoreAdapterService, SkyDockService, SkyLiveAnnouncerService, SkyResizeObserverMediaQueryService, SkyAppWindowRef, SkyDockLocation, SkyIdModule, SkyIdService, SkyDynamicComponentService, SkyMediaQueryService, SKY_STACKING_CONTEXT } from '@skyux/core';
8
+ import * as i5 from '@skyux/i18n';
9
9
  import { SkyLibResourcesService, getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS } from '@skyux/i18n';
10
- import * as i3 from '@skyux/theme';
11
- import { SkyThemeService, SkyTheme, SkyThemeModule } from '@skyux/theme';
10
+ import * as i1$1 from '@skyux/theme';
11
+ import { SkyThemeModule, SkyThemeService, SkyTheme } from '@skyux/theme';
12
12
  import { takeUntil, takeWhile } from 'rxjs/operators';
13
- import * as i2 from '@skyux/icon';
13
+ import * as i2 from '@skyux/help-inline';
14
+ import { SkyHelpInlineModule } from '@skyux/help-inline';
15
+ import * as i3 from '@skyux/icon';
14
16
  import { SkyIconModule } from '@skyux/icon';
15
17
  import { Router, NavigationStart, RouterModule } from '@angular/router';
16
18
  import * as i2$1 from '@skyux/indicators';
@@ -134,6 +136,7 @@ class SkyModalInstance {
134
136
  * An event that the modal instance emits when users click
135
137
  * the <i class="fa fa-question-circle" aria-hidden="true"></i> button.
136
138
  * If a `helpKey` parameter was specified, the `helpOpened` event broadcasts the `helpKey`.
139
+ * @deprecated
137
140
  */
138
141
  get helpOpened() {
139
142
  return this.#_helpOpened;
@@ -155,6 +158,9 @@ class SkyModalInstance {
155
158
  }
156
159
  #_beforeClose = new Subject();
157
160
  #_closed = new Subject();
161
+ /**
162
+ * @deprecated
163
+ */
158
164
  #_helpOpened = new Subject();
159
165
  #adapter;
160
166
  #elementRef;
@@ -204,6 +210,7 @@ class SkyModalInstance {
204
210
  * @param helpKey Specifies a string to emit to subscribers of
205
211
  * the modal instance's `helpOpened` event. Consumers can inject the `SkyModalInstance` provider
206
212
  * into a component's constructor to call the `openHelp` function in the modal template.
213
+ * @deprecated
207
214
  */
208
215
  openHelp(helpKey) {
209
216
  this.#_helpOpened.next(helpKey);
@@ -419,6 +426,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
419
426
  type: Injectable
420
427
  }], ctorParameters: () => [] });
421
428
 
429
+ /**
430
+ * Specifies a header for the modal.
431
+ */
432
+ class SkyModalHeaderComponent {
433
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
434
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalHeaderComponent, isStandalone: true, selector: "sky-modal-header", ngImport: i0, template: "<h2\n class=\"sky-modal-heading sky-font-emphasized\"\n [skyThemeClass]=\"{\n 'sky-font-heading-4': 'default',\n 'sky-font-display-3': 'modern'\n }\"\n skyTrim\n>\n <ng-content />\n</h2>\n<span class=\"sky-control-help-container\" skyTrim\n ><ng-content select=\".sky-control-help\"></ng-content\n></span>\n", styles: ["h2{margin:0;line-height:1.2;display:inline}:host-context(.sky-theme-modern.sky-theme-mode-dark) h2{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark h2{color:#fbfcfe}\n"], dependencies: [{ kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "ngmodule", type: SkyTrimModule }, { kind: "directive", type: i1.λ4, selector: "[skyTrim]" }] }); }
435
+ }
436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHeaderComponent, decorators: [{
437
+ type: Component,
438
+ args: [{ standalone: true, selector: 'sky-modal-header', imports: [SkyThemeModule, SkyTrimModule], template: "<h2\n class=\"sky-modal-heading sky-font-emphasized\"\n [skyThemeClass]=\"{\n 'sky-font-heading-4': 'default',\n 'sky-font-display-3': 'modern'\n }\"\n skyTrim\n>\n <ng-content />\n</h2>\n<span class=\"sky-control-help-container\" skyTrim\n ><ng-content select=\".sky-control-help\"></ng-content\n></span>\n", styles: ["h2{margin:0;line-height:1.2;display:inline}:host-context(.sky-theme-modern.sky-theme-mode-dark) h2{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark h2{color:#fbfcfe}\n"] }]
439
+ }] });
440
+
422
441
  const BASE_Z_INDEX = 1040;
423
442
  const modalHosts = [];
424
443
  /**
@@ -442,6 +461,9 @@ class SkyModalHostService {
442
461
  constructor() {
443
462
  this.close = new Subject();
444
463
  this.fullPage = false;
464
+ /**
465
+ * @deprecated
466
+ */
445
467
  this.openHelp = new Subject();
446
468
  this.zIndex = this.#calculateZIndex();
447
469
  modalHosts.push(this);
@@ -452,6 +474,9 @@ class SkyModalHostService {
452
474
  onClose() {
453
475
  this.close.next();
454
476
  }
477
+ /**
478
+ * @deprecated
479
+ */
455
480
  onOpenHelp(helpKey) {
456
481
  this.openHelp.next(helpKey);
457
482
  }
@@ -613,12 +638,15 @@ class SkyModalComponent {
613
638
  this.#errorsSvc.updateErrors(value);
614
639
  }
615
640
  /**
641
+ * Used by the confirm component to set a different role for the modal.
616
642
  * @internal
617
643
  */
618
644
  set ariaRole(value) {
619
645
  this.ariaRoleOrDefault = value || ARIA_ROLE_DEFAULT;
620
646
  }
621
647
  /**
648
+ * Used by the confirm component to set descriptive text without using a
649
+ * modal header.
622
650
  * @internal
623
651
  */
624
652
  set ariaDescribedBy(id) {
@@ -628,6 +656,8 @@ class SkyModalComponent {
628
656
  return this.#_ariaDescribedBy;
629
657
  }
630
658
  /**
659
+ * Used by the confirm component to set descriptive text without using a
660
+ * modal header.
631
661
  * @internal
632
662
  */
633
663
  set ariaLabelledBy(id) {
@@ -684,7 +714,7 @@ class SkyModalComponent {
684
714
  this.ariaDescribedBy = this.#config.ariaDescribedBy;
685
715
  this.ariaLabelledBy = this.#config.ariaLabelledBy;
686
716
  this.ariaRole = this.#config.ariaRole;
687
- this.helpKey = this.#config.helpKey;
717
+ this.legacyHelpKey = this.#config.helpKey;
688
718
  this.tiledBody = this.#config.tiledBody;
689
719
  this.wrapperClass = this.#config.wrapperClass;
690
720
  this.size = this.#config.fullPage
@@ -772,9 +802,12 @@ class SkyModalComponent {
772
802
  this.#ngUnsubscribe.next();
773
803
  this.#ngUnsubscribe.complete();
774
804
  }
805
+ /**
806
+ * @deprecated
807
+ */
775
808
  helpButtonClick() {
776
- if (this.helpKey) {
777
- this.#hostService.onOpenHelp(this.helpKey);
809
+ if (this.legacyHelpKey) {
810
+ this.#hostService.onOpenHelp(this.legacyHelpKey);
778
811
  }
779
812
  }
780
813
  closeButtonClick() {
@@ -790,11 +823,11 @@ class SkyModalComponent {
790
823
  return this.#componentAdapter.modalContentHasDirectChildViewkeeper(this.#elRef);
791
824
  }
792
825
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
793
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalComponent, isStandalone: true, selector: "sky-modal", inputs: { formErrors: "formErrors", ariaRole: "ariaRole", tiledBody: "tiledBody", ariaDescribedBy: "ariaDescribedBy", ariaLabelledBy: "ariaLabelledBy" }, host: { listeners: { "document:keyup": "onDocumentKeyUp($event)", "document:keydown": "onDocumentKeyDown($event)" }, properties: { "class": "this.wrapperClass" } }, providers: [
826
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.4", type: SkyModalComponent, isStandalone: true, selector: "sky-modal", inputs: { formErrors: "formErrors", headingText: "headingText", helpKey: "helpKey", helpPopoverContent: "helpPopoverContent", helpPopoverTitle: "helpPopoverTitle", ariaRole: "ariaRole", tiledBody: "tiledBody", ariaDescribedBy: "ariaDescribedBy", ariaLabelledBy: "ariaLabelledBy" }, host: { listeners: { "document:keyup": "onDocumentKeyUp($event)", "document:keydown": "onDocumentKeyDown($event)" }, properties: { "class": "this.wrapperClass" } }, providers: [
794
827
  SkyModalComponentAdapterService,
795
828
  SkyModalErrorsService,
796
829
  SkyDockService,
797
- ], viewQueries: [{ propertyName: "modalContentWrapperElement", first: true, predicate: ["modalContentWrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-modal-dialog\"\n aria-modal=\"true\"\n [attr.aria-describedby]=\"ariaDescribedBy || modalContentId.id\"\n [attr.aria-labelledby]=\"ariaLabelledBy || headerId.id\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.role]=\"ariaRoleOrDefault\"\n (window:resize)=\"windowResize()\"\n>\n <div\n class=\"sky-modal sky-shadow sky-box sky-elevation-16 sky-modal-{{ size }}\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-modal-tiled': tiledBody,\n 'sky-modal-viewkeeper': viewkeeperEnabled()\n }\"\n [ngStyle]=\"{\n zIndex: modalZIndex\n }\"\n >\n <div\n class=\"sky-modal-header\"\n [hidden]=\"!headerContent || !headerContent.children || headerContent.children.length &lt; 1\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.topShadow\n }\"\n >\n <div\n class=\"sky-modal-header-content\"\n skyId\n [ngClass]=\"{\n 'sky-font-heading-2': size === 'full-page'\n }\"\n #headerContent\n #headerId=\"skyId\"\n >\n <ng-content select=\"sky-modal-header\" />\n </div>\n <div class=\"sky-modal-header-buttons\">\n <button\n *ngIf=\"helpKey\"\n class=\"sky-btn sky-modal-btn-help\"\n name=\"help-button\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_modal_open_help' | skyLibResources\"\n (click)=\"helpButtonClick()\"\n >\n <sky-icon icon=\"question-circle\" />\n </button>\n\n <button\n type=\"button\"\n class=\"sky-btn sky-modal-btn-close\"\n [attr.aria-label]=\"'skyux_modal_close' | skyLibResources\"\n (click)=\"closeButtonClick()\"\n >\n <sky-icon icon=\"close\" />\n </button>\n </div>\n </div>\n <div\n class=\"sky-modal-content sky-padding-even-large\"\n role=\"region\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"headerId.id\"\n (skyModalScrollShadow)=\"scrollShadowChange($event)\"\n #modalContentId=\"skyId\"\n #modalContentWrapper\n >\n <ng-content select=\"sky-modal-content\" />\n </div>\n <div\n class=\"sky-modal-footer\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.bottomShadow\n }\"\n >\n <ng-content select=\"sky-modal-footer\" />\n </div>\n </div>\n</div>\n", styles: [".sky-modal{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;position:fixed;width:auto;left:0;right:0;top:20px;margin:10px;display:flex;flex-direction:column;overflow:hidden}.sky-modal:focus{outline:none}@media (min-width: 768px){.sky-modal:not(.sky-modal-large){margin:0 auto}.sky-modal-small{width:300px}.sky-modal-small .sky-modal-content,.sky-modal-small .sky-modal-header,.sky-modal-small .sky-modal-footer{max-width:300px}.sky-modal-medium{width:600px}.sky-modal-medium .sky-modal-content,.sky-modal-medium .sky-modal-header,.sky-modal-medium .sky-modal-footer{max-width:600px}}@media (min-width: 920px){.sky-modal-large{margin:0 auto;width:900px}.sky-modal-large .sky-modal-content,.sky-modal-large .sky-modal-header,.sky-modal-large .sky-modal-footer{max-width:900px}}.sky-modal-content{background-color:#fff;--sky-background-color-page-default: #fff}.sky-modal-content:focus{outline-style:dotted;outline-width:thin;outline-offset:-1px}.sky-modal-tiled .sky-modal-content{background-color:#eeeeef;--sky-background-color-page-default: $sky-background-color-neutral-light}.sky-modal-tiled .sky-modal-content ::ng-deep .sky-tile-title{font-family:BLKB Sans,Helvetica Neue,Arial,sans-serif;color:var(--sky-text-color-deemphasized);font-weight:300;font-size:19px}.sky-modal-header{padding:9px 3px 9px 15px;background-color:#fff;display:flex;align-items:baseline;border-bottom:1px solid #e2e3e4}.sky-modal-header-buttons{flex-shrink:.0001}.sky-modal-header-buttons .sky-btn{border:none;color:#cdcfd2;cursor:pointer}.sky-modal-header-buttons .sky-btn:hover{color:#979ba2;transition:color .15s}.sky-modal-header-content{flex-grow:1}.sky-modal-header{flex-shrink:0;z-index:2}.sky-modal-content{overflow-y:auto}.sky-modal-footer{flex-shrink:0;z-index:2}.sky-modal-full-page{width:100%;top:0;margin:0}.sky-modal-full-page .sky-modal-header-buttons sky-icon[icon=close]{font-size:20px}.sky-modal-full-page .sky-modal-content{flex-grow:1}.sky-modal-content>::ng-deep sky-dock{bottom:-15px;margin-left:-15px;margin-bottom:-15px;padding-top:15px;width:calc(100% + 30px)}:host-context(.sky-theme-modern) .sky-modal-header{border:none;padding:20px 30px}:host-context(.sky-theme-modern) .sky-modal-btn-help,:host-context(.sky-theme-modern) .sky-modal-btn-close{display:none}:host-context(.sky-theme-modern) .sky-modal-content{padding:0}:host-context(.sky-theme-modern) .sky-modal-full-page{width:calc(100% - 60px);margin:30px}:host-context(.sky-theme-modern) .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}.sky-theme-modern .sky-modal-header{border:none;padding:20px 30px}.sky-theme-modern .sky-modal-btn-help,.sky-theme-modern .sky-modal-btn-close{display:none}.sky-theme-modern .sky-modal-content{padding:0}.sky-theme-modern .sky-modal-full-page{width:calc(100% - 60px);margin:30px}.sky-theme-modern .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal{border-color:#121212}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header{color:#fbfcfe}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}.sky-theme-modern.sky-theme-mode-dark .sky-modal{border-color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header,.sky-theme-modern.sky-theme-mode-dark .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i2.λ1, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "directive", type: SkyModalScrollShadowDirective, selector: "[skyModalScrollShadow]", outputs: ["skyModalScrollShadow"] }, { kind: "ngmodule", type: SkyModalsResourcesModule }, { kind: "pipe", type: i4.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
830
+ ], viewQueries: [{ propertyName: "modalContentWrapperElement", first: true, predicate: ["modalContentWrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"sky-modal-dialog\"\n aria-modal=\"true\"\n [attr.aria-describedby]=\"ariaDescribedBy || modalContentId.id\"\n [attr.aria-labelledby]=\"ariaLabelledBy || headerId.id\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.role]=\"ariaRoleOrDefault\"\n (window:resize)=\"windowResize()\"\n>\n <div\n class=\"sky-modal sky-shadow sky-box sky-elevation-16 sky-modal-{{ size }}\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-modal-tiled': tiledBody,\n 'sky-modal-viewkeeper': viewkeeperEnabled()\n }\"\n [ngStyle]=\"{\n zIndex: modalZIndex\n }\"\n >\n <div\n class=\"sky-modal-header\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.topShadow\n }\"\n >\n <div\n class=\"sky-modal-header-content\"\n skyId\n [ngClass]=\"{\n 'sky-font-heading-2': size === 'full-page'\n }\"\n #headerId=\"skyId\"\n >\n @if (headingText) {\n <sky-modal-header>\n {{ headingText }}\n @if (helpKey || helpPopoverContent) {\n <sky-help-inline\n class=\"sky-control-help\"\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n }\n </sky-modal-header>\n } @else {\n <ng-content select=\"sky-modal-header\" />\n }\n </div>\n <div class=\"sky-modal-header-buttons\">\n <button\n *ngIf=\"legacyHelpKey\"\n class=\"sky-btn sky-modal-btn-help\"\n name=\"help-button\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_modal_open_help' | skyLibResources\"\n (click)=\"helpButtonClick()\"\n >\n <sky-icon icon=\"question-circle\" />\n </button>\n\n <button\n type=\"button\"\n class=\"sky-btn sky-modal-btn-close\"\n [attr.aria-label]=\"'skyux_modal_close' | skyLibResources\"\n (click)=\"closeButtonClick()\"\n >\n <sky-icon icon=\"close\" />\n </button>\n </div>\n </div>\n <div\n class=\"sky-modal-content sky-padding-even-large\"\n role=\"region\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"headerId.id\"\n (skyModalScrollShadow)=\"scrollShadowChange($event)\"\n #modalContentId=\"skyId\"\n #modalContentWrapper\n >\n <ng-content select=\"sky-modal-content\" />\n </div>\n <div\n class=\"sky-modal-footer\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.bottomShadow\n }\"\n >\n <ng-content select=\"sky-modal-footer\" />\n </div>\n </div>\n</div>\n", styles: [".sky-modal{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;position:fixed;width:auto;left:0;right:0;top:20px;margin:10px;display:flex;flex-direction:column;overflow:hidden}.sky-modal:focus{outline:none}.sky-modal-header:has(.sky-modal-header-content:empty){display:none}@media (min-width: 768px){.sky-modal:not(.sky-modal-large){margin:0 auto}.sky-modal-small{width:300px}.sky-modal-small .sky-modal-content,.sky-modal-small .sky-modal-header,.sky-modal-small .sky-modal-footer{max-width:300px}.sky-modal-medium{width:600px}.sky-modal-medium .sky-modal-content,.sky-modal-medium .sky-modal-header,.sky-modal-medium .sky-modal-footer{max-width:600px}}@media (min-width: 920px){.sky-modal-large{margin:0 auto;width:900px}.sky-modal-large .sky-modal-content,.sky-modal-large .sky-modal-header,.sky-modal-large .sky-modal-footer{max-width:900px}}.sky-modal-content{background-color:#fff;--sky-background-color-page-default: #fff}.sky-modal-content:focus{outline-style:dotted;outline-width:thin;outline-offset:-1px}.sky-modal-tiled .sky-modal-content{background-color:#eeeeef;--sky-background-color-page-default: $sky-background-color-neutral-light}.sky-modal-tiled .sky-modal-content ::ng-deep .sky-tile-title{font-family:BLKB Sans,Helvetica Neue,Arial,sans-serif;color:var(--sky-text-color-deemphasized);font-weight:300;font-size:19px}.sky-modal-header{padding:9px 3px 9px 15px;background-color:#fff;display:flex;align-items:baseline;border-bottom:1px solid #e2e3e4}.sky-modal-header-buttons{flex-shrink:.0001}.sky-modal-header-buttons .sky-btn{border:none;color:#cdcfd2;cursor:pointer}.sky-modal-header-buttons .sky-btn:hover{color:#979ba2;transition:color .15s}.sky-modal-header-content{flex-grow:1}.sky-modal-header{flex-shrink:0;z-index:2}.sky-modal-content{overflow-y:auto}.sky-modal-footer{flex-shrink:0;z-index:2}.sky-modal-full-page{width:100%;top:0;margin:0}.sky-modal-full-page .sky-modal-header-buttons sky-icon[icon=close]{font-size:20px}.sky-modal-full-page .sky-modal-content{flex-grow:1}.sky-modal-content>::ng-deep sky-dock{bottom:-15px;margin-left:-15px;margin-bottom:-15px;padding-top:15px;width:calc(100% + 30px)}:host-context(.sky-theme-modern) .sky-modal-header{border:none;padding:20px 30px}:host-context(.sky-theme-modern) .sky-modal-btn-help,:host-context(.sky-theme-modern) .sky-modal-btn-close{display:none}:host-context(.sky-theme-modern) .sky-modal-content{padding:0}:host-context(.sky-theme-modern) .sky-modal-full-page{width:calc(100% - 60px);margin:30px}:host-context(.sky-theme-modern) .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}.sky-theme-modern .sky-modal-header{border:none;padding:20px 30px}.sky-theme-modern .sky-modal-btn-help,.sky-theme-modern .sky-modal-btn-close{display:none}.sky-theme-modern .sky-modal-content{padding:0}.sky-theme-modern .sky-modal-full-page{width:calc(100% - 60px);margin:30px}.sky-theme-modern .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal{border-color:#121212}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header{color:#fbfcfe}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}.sky-theme-modern.sky-theme-mode-dark .sky-modal{border-color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header,.sky-theme-modern.sky-theme-mode-dark .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SkyHelpInlineModule }, { kind: "component", type: i2.λ1, selector: "sky-help-inline", inputs: ["ariaControls", "ariaExpanded", "ariaLabel", "labelledBy", "labelText", "popoverContent", "popoverTitle", "helpKey"], outputs: ["actionClick"] }, { kind: "ngmodule", type: SkyIconModule }, { kind: "component", type: i3.λ1, selector: "sky-icon", inputs: ["icon", "iconType", "size", "fixedWidth", "variant"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: SkyModalHeaderComponent, selector: "sky-modal-header" }, { kind: "directive", type: SkyModalScrollShadowDirective, selector: "[skyModalScrollShadow]", outputs: ["skyModalScrollShadow"] }, { kind: "ngmodule", type: SkyModalsResourcesModule }, { kind: "pipe", type: i5.SkyLibResourcesPipe, name: "skyLibResources" }] }); }
798
831
  }
799
832
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalComponent, decorators: [{
800
833
  type: Component,
@@ -804,16 +837,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
804
837
  SkyDockService,
805
838
  ], imports: [
806
839
  CommonModule,
840
+ SkyHelpInlineModule,
807
841
  SkyIconModule,
808
842
  SkyIdModule,
843
+ SkyModalHeaderComponent,
809
844
  SkyModalScrollShadowDirective,
810
845
  SkyModalsResourcesModule,
811
- ], template: "<div\n class=\"sky-modal-dialog\"\n aria-modal=\"true\"\n [attr.aria-describedby]=\"ariaDescribedBy || modalContentId.id\"\n [attr.aria-labelledby]=\"ariaLabelledBy || headerId.id\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.role]=\"ariaRoleOrDefault\"\n (window:resize)=\"windowResize()\"\n>\n <div\n class=\"sky-modal sky-shadow sky-box sky-elevation-16 sky-modal-{{ size }}\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-modal-tiled': tiledBody,\n 'sky-modal-viewkeeper': viewkeeperEnabled()\n }\"\n [ngStyle]=\"{\n zIndex: modalZIndex\n }\"\n >\n <div\n class=\"sky-modal-header\"\n [hidden]=\"!headerContent || !headerContent.children || headerContent.children.length &lt; 1\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.topShadow\n }\"\n >\n <div\n class=\"sky-modal-header-content\"\n skyId\n [ngClass]=\"{\n 'sky-font-heading-2': size === 'full-page'\n }\"\n #headerContent\n #headerId=\"skyId\"\n >\n <ng-content select=\"sky-modal-header\" />\n </div>\n <div class=\"sky-modal-header-buttons\">\n <button\n *ngIf=\"helpKey\"\n class=\"sky-btn sky-modal-btn-help\"\n name=\"help-button\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_modal_open_help' | skyLibResources\"\n (click)=\"helpButtonClick()\"\n >\n <sky-icon icon=\"question-circle\" />\n </button>\n\n <button\n type=\"button\"\n class=\"sky-btn sky-modal-btn-close\"\n [attr.aria-label]=\"'skyux_modal_close' | skyLibResources\"\n (click)=\"closeButtonClick()\"\n >\n <sky-icon icon=\"close\" />\n </button>\n </div>\n </div>\n <div\n class=\"sky-modal-content sky-padding-even-large\"\n role=\"region\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"headerId.id\"\n (skyModalScrollShadow)=\"scrollShadowChange($event)\"\n #modalContentId=\"skyId\"\n #modalContentWrapper\n >\n <ng-content select=\"sky-modal-content\" />\n </div>\n <div\n class=\"sky-modal-footer\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.bottomShadow\n }\"\n >\n <ng-content select=\"sky-modal-footer\" />\n </div>\n </div>\n</div>\n", styles: [".sky-modal{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;position:fixed;width:auto;left:0;right:0;top:20px;margin:10px;display:flex;flex-direction:column;overflow:hidden}.sky-modal:focus{outline:none}@media (min-width: 768px){.sky-modal:not(.sky-modal-large){margin:0 auto}.sky-modal-small{width:300px}.sky-modal-small .sky-modal-content,.sky-modal-small .sky-modal-header,.sky-modal-small .sky-modal-footer{max-width:300px}.sky-modal-medium{width:600px}.sky-modal-medium .sky-modal-content,.sky-modal-medium .sky-modal-header,.sky-modal-medium .sky-modal-footer{max-width:600px}}@media (min-width: 920px){.sky-modal-large{margin:0 auto;width:900px}.sky-modal-large .sky-modal-content,.sky-modal-large .sky-modal-header,.sky-modal-large .sky-modal-footer{max-width:900px}}.sky-modal-content{background-color:#fff;--sky-background-color-page-default: #fff}.sky-modal-content:focus{outline-style:dotted;outline-width:thin;outline-offset:-1px}.sky-modal-tiled .sky-modal-content{background-color:#eeeeef;--sky-background-color-page-default: $sky-background-color-neutral-light}.sky-modal-tiled .sky-modal-content ::ng-deep .sky-tile-title{font-family:BLKB Sans,Helvetica Neue,Arial,sans-serif;color:var(--sky-text-color-deemphasized);font-weight:300;font-size:19px}.sky-modal-header{padding:9px 3px 9px 15px;background-color:#fff;display:flex;align-items:baseline;border-bottom:1px solid #e2e3e4}.sky-modal-header-buttons{flex-shrink:.0001}.sky-modal-header-buttons .sky-btn{border:none;color:#cdcfd2;cursor:pointer}.sky-modal-header-buttons .sky-btn:hover{color:#979ba2;transition:color .15s}.sky-modal-header-content{flex-grow:1}.sky-modal-header{flex-shrink:0;z-index:2}.sky-modal-content{overflow-y:auto}.sky-modal-footer{flex-shrink:0;z-index:2}.sky-modal-full-page{width:100%;top:0;margin:0}.sky-modal-full-page .sky-modal-header-buttons sky-icon[icon=close]{font-size:20px}.sky-modal-full-page .sky-modal-content{flex-grow:1}.sky-modal-content>::ng-deep sky-dock{bottom:-15px;margin-left:-15px;margin-bottom:-15px;padding-top:15px;width:calc(100% + 30px)}:host-context(.sky-theme-modern) .sky-modal-header{border:none;padding:20px 30px}:host-context(.sky-theme-modern) .sky-modal-btn-help,:host-context(.sky-theme-modern) .sky-modal-btn-close{display:none}:host-context(.sky-theme-modern) .sky-modal-content{padding:0}:host-context(.sky-theme-modern) .sky-modal-full-page{width:calc(100% - 60px);margin:30px}:host-context(.sky-theme-modern) .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}.sky-theme-modern .sky-modal-header{border:none;padding:20px 30px}.sky-theme-modern .sky-modal-btn-help,.sky-theme-modern .sky-modal-btn-close{display:none}.sky-theme-modern .sky-modal-content{padding:0}.sky-theme-modern .sky-modal-full-page{width:calc(100% - 60px);margin:30px}.sky-theme-modern .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal{border-color:#121212}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header{color:#fbfcfe}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}.sky-theme-modern.sky-theme-mode-dark .sky-modal{border-color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header,.sky-theme-modern.sky-theme-mode-dark .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}\n"] }]
846
+ ], template: "<div\n class=\"sky-modal-dialog\"\n aria-modal=\"true\"\n [attr.aria-describedby]=\"ariaDescribedBy || modalContentId.id\"\n [attr.aria-labelledby]=\"ariaLabelledBy || headerId.id\"\n [attr.aria-owns]=\"ariaOwns\"\n [attr.role]=\"ariaRoleOrDefault\"\n (window:resize)=\"windowResize()\"\n>\n <div\n class=\"sky-modal sky-shadow sky-box sky-elevation-16 sky-modal-{{ size }}\"\n tabindex=\"-1\"\n [ngClass]=\"{\n 'sky-modal-tiled': tiledBody,\n 'sky-modal-viewkeeper': viewkeeperEnabled()\n }\"\n [ngStyle]=\"{\n zIndex: modalZIndex\n }\"\n >\n <div\n class=\"sky-modal-header\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.topShadow\n }\"\n >\n <div\n class=\"sky-modal-header-content\"\n skyId\n [ngClass]=\"{\n 'sky-font-heading-2': size === 'full-page'\n }\"\n #headerId=\"skyId\"\n >\n @if (headingText) {\n <sky-modal-header>\n {{ headingText }}\n @if (helpKey || helpPopoverContent) {\n <sky-help-inline\n class=\"sky-control-help\"\n [helpKey]=\"helpKey\"\n [labelText]=\"headingText\"\n [popoverContent]=\"helpPopoverContent\"\n [popoverTitle]=\"helpPopoverTitle\"\n />\n }\n </sky-modal-header>\n } @else {\n <ng-content select=\"sky-modal-header\" />\n }\n </div>\n <div class=\"sky-modal-header-buttons\">\n <button\n *ngIf=\"legacyHelpKey\"\n class=\"sky-btn sky-modal-btn-help\"\n name=\"help-button\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_modal_open_help' | skyLibResources\"\n (click)=\"helpButtonClick()\"\n >\n <sky-icon icon=\"question-circle\" />\n </button>\n\n <button\n type=\"button\"\n class=\"sky-btn sky-modal-btn-close\"\n [attr.aria-label]=\"'skyux_modal_close' | skyLibResources\"\n (click)=\"closeButtonClick()\"\n >\n <sky-icon icon=\"close\" />\n </button>\n </div>\n </div>\n <div\n class=\"sky-modal-content sky-padding-even-large\"\n role=\"region\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"headerId.id\"\n (skyModalScrollShadow)=\"scrollShadowChange($event)\"\n #modalContentId=\"skyId\"\n #modalContentWrapper\n >\n <ng-content select=\"sky-modal-content\" />\n </div>\n <div\n class=\"sky-modal-footer\"\n [ngStyle]=\"{\n 'box-shadow': scrollShadow?.bottomShadow\n }\"\n >\n <ng-content select=\"sky-modal-footer\" />\n </div>\n </div>\n</div>\n", styles: [".sky-modal{border-top:1px solid #cdcfd2;border-bottom:1px solid #cdcfd2;border-left:1px solid #cdcfd2;border-right:1px solid #cdcfd2;position:fixed;width:auto;left:0;right:0;top:20px;margin:10px;display:flex;flex-direction:column;overflow:hidden}.sky-modal:focus{outline:none}.sky-modal-header:has(.sky-modal-header-content:empty){display:none}@media (min-width: 768px){.sky-modal:not(.sky-modal-large){margin:0 auto}.sky-modal-small{width:300px}.sky-modal-small .sky-modal-content,.sky-modal-small .sky-modal-header,.sky-modal-small .sky-modal-footer{max-width:300px}.sky-modal-medium{width:600px}.sky-modal-medium .sky-modal-content,.sky-modal-medium .sky-modal-header,.sky-modal-medium .sky-modal-footer{max-width:600px}}@media (min-width: 920px){.sky-modal-large{margin:0 auto;width:900px}.sky-modal-large .sky-modal-content,.sky-modal-large .sky-modal-header,.sky-modal-large .sky-modal-footer{max-width:900px}}.sky-modal-content{background-color:#fff;--sky-background-color-page-default: #fff}.sky-modal-content:focus{outline-style:dotted;outline-width:thin;outline-offset:-1px}.sky-modal-tiled .sky-modal-content{background-color:#eeeeef;--sky-background-color-page-default: $sky-background-color-neutral-light}.sky-modal-tiled .sky-modal-content ::ng-deep .sky-tile-title{font-family:BLKB Sans,Helvetica Neue,Arial,sans-serif;color:var(--sky-text-color-deemphasized);font-weight:300;font-size:19px}.sky-modal-header{padding:9px 3px 9px 15px;background-color:#fff;display:flex;align-items:baseline;border-bottom:1px solid #e2e3e4}.sky-modal-header-buttons{flex-shrink:.0001}.sky-modal-header-buttons .sky-btn{border:none;color:#cdcfd2;cursor:pointer}.sky-modal-header-buttons .sky-btn:hover{color:#979ba2;transition:color .15s}.sky-modal-header-content{flex-grow:1}.sky-modal-header{flex-shrink:0;z-index:2}.sky-modal-content{overflow-y:auto}.sky-modal-footer{flex-shrink:0;z-index:2}.sky-modal-full-page{width:100%;top:0;margin:0}.sky-modal-full-page .sky-modal-header-buttons sky-icon[icon=close]{font-size:20px}.sky-modal-full-page .sky-modal-content{flex-grow:1}.sky-modal-content>::ng-deep sky-dock{bottom:-15px;margin-left:-15px;margin-bottom:-15px;padding-top:15px;width:calc(100% + 30px)}:host-context(.sky-theme-modern) .sky-modal-header{border:none;padding:20px 30px}:host-context(.sky-theme-modern) .sky-modal-btn-help,:host-context(.sky-theme-modern) .sky-modal-btn-close{display:none}:host-context(.sky-theme-modern) .sky-modal-content{padding:0}:host-context(.sky-theme-modern) .sky-modal-full-page{width:calc(100% - 60px);margin:30px}:host-context(.sky-theme-modern) .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}:host-context(.sky-theme-modern) .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}.sky-theme-modern .sky-modal-header{border:none;padding:20px 30px}.sky-theme-modern .sky-modal-btn-help,.sky-theme-modern .sky-modal-btn-close{display:none}.sky-theme-modern .sky-modal-content{padding:0}.sky-theme-modern .sky-modal-full-page{width:calc(100% - 60px);margin:30px}.sky-theme-modern .sky-modal-content>::ng-deep sky-dock{bottom:0;margin-left:initial;margin-bottom:initial;padding-top:initial;width:100%}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-header{box-shadow:none!important}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed{box-shadow:0 4px 8px -4px #0000004d}.sky-theme-modern .sky-modal-viewkeeper .sky-modal-content ::ng-deep sky-modal-content>.sky-viewkeeper-fixed>sky-toolbar .sky-toolbar-container{background-color:#fff;--sky-background-color-page-default: #fff;padding-left:30px;padding-right:30px}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal{border-color:#121212}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header{color:#fbfcfe}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-header,:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}.sky-theme-modern.sky-theme-mode-dark .sky-modal{border-color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark .sky-modal-header,.sky-theme-modern.sky-theme-mode-dark .sky-modal-content{background-color:transparent;--sky-background-color-page-default: $sky-theme-modern-mode-dark-background-color-page-default}\n"] }]
812
847
  }], ctorParameters: () => [], propDecorators: { wrapperClass: [{
813
848
  type: HostBinding,
814
849
  args: ['class']
815
850
  }], formErrors: [{
816
851
  type: Input
852
+ }], headingText: [{
853
+ type: Input
854
+ }], helpKey: [{
855
+ type: Input
856
+ }], helpPopoverContent: [{
857
+ type: Input
858
+ }], helpPopoverTitle: [{
859
+ type: Input
817
860
  }], ariaRole: [{
818
861
  type: Input
819
862
  }], tiledBody: [{
@@ -949,7 +992,7 @@ class SkyConfirmComponent {
949
992
  }));
950
993
  }
951
994
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
952
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyConfirmComponent, isStandalone: true, selector: "sky-confirm", ngImport: i0, template: "<div class=\"sky-confirm\" [ngClass]=\"{ 'sky-confirm-type-ok': isOkType }\">\n <sky-modal\n ariaRole=\"alertdialog\"\n [ariaLabelledBy]=\"confirmMessage.id\"\n [ariaDescribedBy]=\"body ? bodyId : undefined\"\n >\n <sky-modal-content class=\"sky-confirm-content\">\n <!--\n The following \"magic comment\" keeps Prettier from adding line breaks\n inside the div and causing leading and trailing whitespace when\n `preserveWhiteSpace` is `true`.\n https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting\n -->\n <!-- display: inline -->\n <div\n class=\"sky-confirm-message\"\n [ngClass]=\"{\n 'sky-confirm-preserve-white-space': preserveWhiteSpace\n }\"\n [skyThemeClass]=\"{\n 'sky-font-display-4': 'default',\n 'sky-font-heading-1 sky-font-display-3': 'modern'\n }\"\n skyId\n #confirmMessage=\"skyId\"\n >{{ message }}</div\n >\n\n <!--\n The following \"magic comment\" keeps Prettier from adding line breaks\n inside the div and causing leading and trailing whitespace when\n `preserveWhiteSpace` is `true`.\n https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting\n -->\n <!-- display: inline -->\n <div\n *ngIf=\"body\"\n class=\"sky-confirm-body\"\n [id]=\"bodyId\"\n [ngClass]=\"{\n 'sky-confirm-preserve-white-space': preserveWhiteSpace\n }\"\n >{{ body }}</div\n >\n\n <div class=\"sky-confirm-buttons\">\n <button\n *ngFor=\"let button of buttons\"\n type=\"button\"\n class=\"sky-btn\"\n [ngClass]=\"'sky-btn-' + button.styleType\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern',\n 'sky-margin-inline-compact': 'default'\n }\"\n (click)=\"close(button)\"\n [attr.autofocus]=\"button.autofocus ? 'autofocus' : null\"\n >\n {{ button.text }}\n </button>\n </div>\n </sky-modal-content>\n </sky-modal>\n</div>\n", styles: [".sky-confirm{--sky-confirm-body-margin-top: var(--sky-margin-stacked-sm);--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-xl);--sky-confirm-content-padding: 0;--sky-confirm-message-padding-bottom: 0}:host-context(.sky-theme-modern) .sky-confirm{--sky-confirm-body-margin-top: 0;--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-lg);--sky-confirm-content-padding: var(--sky-margin-stacked-lg) var(--sky-margin-inline-xl);--sky-confirm-message-padding-bottom: var(--sky-margin-stacked-lg)}.sky-theme-modern .sky-confirm{--sky-confirm-body-margin-top: 0;--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-lg);--sky-confirm-content-padding: var(--sky-margin-stacked-lg) var(--sky-margin-inline-xl);--sky-confirm-message-padding-bottom: var(--sky-margin-stacked-lg)}.sky-confirm-content{padding:var(--sky-confirm-content-padding)}.sky-confirm-message{margin-top:var(--sky-margin-stacked-xs);padding-bottom:var(--sky-confirm-message-padding-bottom)}.sky-confirm-body{margin-top:var(--sky-confirm-body-margin-top)}.sky-confirm-buttons{margin-top:var(--sky-confirm-buttons-margin-top)}.sky-confirm-preserve-white-space{white-space:pre-wrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: SkyModalComponent, selector: "sky-modal", inputs: ["formErrors", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy"] }, { kind: "component", type: SkyModalContentComponent, selector: "sky-modal-content" }, { kind: "ngmodule", type: SkyModalsResourcesModule }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i3.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }] }); }
995
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyConfirmComponent, isStandalone: true, selector: "sky-confirm", ngImport: i0, template: "<div class=\"sky-confirm\" [ngClass]=\"{ 'sky-confirm-type-ok': isOkType }\">\n <sky-modal\n ariaRole=\"alertdialog\"\n [ariaLabelledBy]=\"confirmMessage.id\"\n [ariaDescribedBy]=\"body ? bodyId : undefined\"\n >\n <sky-modal-content class=\"sky-confirm-content\">\n <!--\n The following \"magic comment\" keeps Prettier from adding line breaks\n inside the div and causing leading and trailing whitespace when\n `preserveWhiteSpace` is `true`.\n https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting\n -->\n <!-- display: inline -->\n <div\n class=\"sky-confirm-message\"\n [ngClass]=\"{\n 'sky-confirm-preserve-white-space': preserveWhiteSpace\n }\"\n [skyThemeClass]=\"{\n 'sky-font-display-4': 'default',\n 'sky-font-heading-1 sky-font-display-3': 'modern'\n }\"\n skyId\n #confirmMessage=\"skyId\"\n >{{ message }}</div\n >\n\n <!--\n The following \"magic comment\" keeps Prettier from adding line breaks\n inside the div and causing leading and trailing whitespace when\n `preserveWhiteSpace` is `true`.\n https://prettier.io/blog/2018/11/07/1.15.0.html#whitespace-sensitive-formatting\n -->\n <!-- display: inline -->\n <div\n *ngIf=\"body\"\n class=\"sky-confirm-body\"\n [id]=\"bodyId\"\n [ngClass]=\"{\n 'sky-confirm-preserve-white-space': preserveWhiteSpace\n }\"\n >{{ body }}</div\n >\n\n <div class=\"sky-confirm-buttons\">\n <button\n *ngFor=\"let button of buttons\"\n type=\"button\"\n class=\"sky-btn\"\n [ngClass]=\"'sky-btn-' + button.styleType\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern',\n 'sky-margin-inline-compact': 'default'\n }\"\n (click)=\"close(button)\"\n [attr.autofocus]=\"button.autofocus ? 'autofocus' : null\"\n >\n {{ button.text }}\n </button>\n </div>\n </sky-modal-content>\n </sky-modal>\n</div>\n", styles: [".sky-confirm{--sky-confirm-body-margin-top: var(--sky-margin-stacked-sm);--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-xl);--sky-confirm-content-padding: 0;--sky-confirm-message-padding-bottom: 0}:host-context(.sky-theme-modern) .sky-confirm{--sky-confirm-body-margin-top: 0;--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-lg);--sky-confirm-content-padding: var(--sky-margin-stacked-lg) var(--sky-margin-inline-xl);--sky-confirm-message-padding-bottom: var(--sky-margin-stacked-lg)}.sky-theme-modern .sky-confirm{--sky-confirm-body-margin-top: 0;--sky-confirm-buttons-margin-top: var(--sky-margin-stacked-lg);--sky-confirm-content-padding: var(--sky-margin-stacked-lg) var(--sky-margin-inline-xl);--sky-confirm-message-padding-bottom: var(--sky-margin-stacked-lg)}.sky-confirm-content{padding:var(--sky-confirm-content-padding)}.sky-confirm-message{margin-top:var(--sky-margin-stacked-xs);padding-bottom:var(--sky-confirm-message-padding-bottom)}.sky-confirm-body{margin-top:var(--sky-confirm-body-margin-top)}.sky-confirm-buttons{margin-top:var(--sky-confirm-buttons-margin-top)}.sky-confirm-preserve-white-space{white-space:pre-wrap}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: SkyIdModule }, { kind: "directive", type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }, { kind: "component", type: SkyModalComponent, selector: "sky-modal", inputs: ["formErrors", "headingText", "helpKey", "helpPopoverContent", "helpPopoverTitle", "ariaRole", "tiledBody", "ariaDescribedBy", "ariaLabelledBy"] }, { kind: "component", type: SkyModalContentComponent, selector: "sky-modal-content" }, { kind: "ngmodule", type: SkyModalsResourcesModule }, { kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i1$1.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }] }); }
953
996
  }
954
997
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyConfirmComponent, decorators: [{
955
998
  type: Component,
@@ -1202,7 +1245,7 @@ class SkyModalHostComponent {
1202
1245
  }
1203
1246
  }
1204
1247
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalHostComponent, isStandalone: true, selector: "sky-modal-host", viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-modal-host-backdrop\"\n [hidden]=\"!modalOpen\"\n [ngStyle]=\"{\n zIndex: backdropZIndex\n }\"\n></div>\n<div #target></div>\n", styles: [".sky-modal-host-backdrop{background-color:#00000080;position:fixed;inset:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: SkyModalsResourcesModule }], viewProviders: [SkyModalAdapterService] }); }
1248
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalHostComponent, isStandalone: true, selector: "sky-modal-host", viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-modal-host-backdrop\"\n [hidden]=\"!modalOpen\"\n [ngStyle]=\"{\n zIndex: backdropZIndex\n }\"\n></div>\n<div #target></div>\n", styles: [".sky-modal-host-backdrop{background-color:#00000080;position:fixed;inset:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: SkyModalsResourcesModule }], viewProviders: [SkyModalAdapterService] }); }
1206
1249
  }
1207
1250
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHostComponent, decorators: [{
1208
1251
  type: Component,
@@ -1373,25 +1416,13 @@ class SkyModalFooterComponent {
1373
1416
  this.errorsSvc = inject(SkyModalErrorsService);
1374
1417
  }
1375
1418
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1376
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalFooterComponent, isStandalone: true, selector: "sky-modal-footer", ngImport: i0, template: "<div class=\"sky-modal-footer-container sky-padding-even-large\">\n <div aria-live=\"polite\">\n <div\n *ngIf=\"errorsSvc.formErrors | async as formErrors\"\n class=\"sky-modal-footer-errors sky-margin-stacked-lg\"\n >\n <sky-status-indicator\n *ngFor=\"let formError of formErrors\"\n [ngClass]=\"{\n 'sky-margin-stacked-lg':\n formErrors.indexOf(formError) < formErrors.length - 1,\n 'footer-error': true\n }\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n >\n {{ formError.message }}\n </sky-status-indicator>\n </div>\n </div>\n <ng-content />\n</div>\n", styles: [".sky-modal-footer-container{background-color:#fff;border-top:1px solid #e2e3e4}.sky-modal-footer-container .sky-btn-link:first-child{margin-left:-12px}.sky-modal-footer-container .sky-btn+.sky-btn{margin-left:10px}.sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:-2px}.sky-modal-footer-container .sky-modal-footer-errors{max-height:100px;overflow-y:auto}.sky-modal-footer-container .sky-modal-footer-errors .footer-error{display:block}.sky-theme-modern .sky-modal-footer-container{border-top:none;padding:20px 30px}.sky-theme-modern .sky-modal-footer-container .sky-btn-link:first-child{margin-left:0}.sky-theme-modern .sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:var(--sky-compat-modal-footer-adjacent-btn-btn-link-margin, 10px)}.sky-theme-modern-dark .sky-modal-footer-container{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: SkyStatusIndicatorModule }, { kind: "component", type: i2$1.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription"] }], encapsulation: i0.ViewEncapsulation.None }); }
1419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalFooterComponent, isStandalone: true, selector: "sky-modal-footer", ngImport: i0, template: "<div class=\"sky-modal-footer-container sky-padding-even-large\">\n <div aria-live=\"polite\">\n <div\n *ngIf=\"errorsSvc.formErrors | async as formErrors\"\n class=\"sky-modal-footer-errors sky-margin-stacked-lg\"\n >\n <sky-status-indicator\n *ngFor=\"let formError of formErrors\"\n [ngClass]=\"{\n 'sky-margin-stacked-lg':\n formErrors.indexOf(formError) < formErrors.length - 1,\n 'footer-error': true\n }\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n >\n {{ formError.message }}\n </sky-status-indicator>\n </div>\n </div>\n <ng-content />\n</div>\n", styles: [".sky-modal-footer-container{background-color:#fff;border-top:1px solid #e2e3e4}.sky-modal-footer-container .sky-btn-link:first-child{margin-left:-12px}.sky-modal-footer-container .sky-btn+.sky-btn{margin-left:10px}.sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:-2px}.sky-modal-footer-container .sky-modal-footer-errors{max-height:100px;overflow-y:auto}.sky-modal-footer-container .sky-modal-footer-errors .footer-error{display:block}.sky-theme-modern .sky-modal-footer-container{border-top:none;padding:20px 30px}.sky-theme-modern .sky-modal-footer-container .sky-btn-link:first-child{margin-left:0}.sky-theme-modern .sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:var(--sky-compat-modal-footer-adjacent-btn-btn-link-margin, 10px)}.sky-theme-modern-dark .sky-modal-footer-container{background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: SkyStatusIndicatorModule }, { kind: "component", type: i2$1.λ10, selector: "sky-status-indicator", inputs: ["indicatorType", "descriptionType", "customDescription", "helpPopoverContent", "helpPopoverTitle", "helpKey"] }], encapsulation: i0.ViewEncapsulation.None }); }
1377
1420
  }
1378
1421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalFooterComponent, decorators: [{
1379
1422
  type: Component,
1380
1423
  args: [{ standalone: true, selector: 'sky-modal-footer', encapsulation: ViewEncapsulation.None, imports: [CommonModule, SkyStatusIndicatorModule], template: "<div class=\"sky-modal-footer-container sky-padding-even-large\">\n <div aria-live=\"polite\">\n <div\n *ngIf=\"errorsSvc.formErrors | async as formErrors\"\n class=\"sky-modal-footer-errors sky-margin-stacked-lg\"\n >\n <sky-status-indicator\n *ngFor=\"let formError of formErrors\"\n [ngClass]=\"{\n 'sky-margin-stacked-lg':\n formErrors.indexOf(formError) < formErrors.length - 1,\n 'footer-error': true\n }\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n >\n {{ formError.message }}\n </sky-status-indicator>\n </div>\n </div>\n <ng-content />\n</div>\n", styles: [".sky-modal-footer-container{background-color:#fff;border-top:1px solid #e2e3e4}.sky-modal-footer-container .sky-btn-link:first-child{margin-left:-12px}.sky-modal-footer-container .sky-btn+.sky-btn{margin-left:10px}.sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:-2px}.sky-modal-footer-container .sky-modal-footer-errors{max-height:100px;overflow-y:auto}.sky-modal-footer-container .sky-modal-footer-errors .footer-error{display:block}.sky-theme-modern .sky-modal-footer-container{border-top:none;padding:20px 30px}.sky-theme-modern .sky-modal-footer-container .sky-btn-link:first-child{margin-left:0}.sky-theme-modern .sky-modal-footer-container .sky-btn+.sky-btn-link{margin-left:var(--sky-compat-modal-footer-adjacent-btn-btn-link-margin, 10px)}.sky-theme-modern-dark .sky-modal-footer-container{background-color:transparent}\n"] }]
1381
1424
  }] });
1382
1425
 
1383
- /**
1384
- * Specifies a header for the modal.
1385
- */
1386
- class SkyModalHeaderComponent {
1387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1388
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: SkyModalHeaderComponent, isStandalone: true, selector: "sky-modal-header", ngImport: i0, template: "<h2\n class=\"sky-font-emphasized\"\n [skyThemeClass]=\"{\n 'sky-font-heading-4': 'default',\n 'sky-font-display-3': 'modern'\n }\"\n skyTrim\n>\n <ng-content />\n</h2>\n<span class=\"sky-control-help-container\" skyTrim\n ><ng-content select=\".sky-control-help\"></ng-content\n></span>\n", styles: ["h2{margin:0;line-height:1.2;display:inline}:host-context(.sky-theme-modern.sky-theme-mode-dark) h2{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark h2{color:#fbfcfe}\n"], dependencies: [{ kind: "ngmodule", type: SkyThemeModule }, { kind: "directive", type: i3.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { kind: "ngmodule", type: SkyTrimModule }, { kind: "directive", type: i1.λ4, selector: "[skyTrim]" }] }); }
1389
- }
1390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: SkyModalHeaderComponent, decorators: [{
1391
- type: Component,
1392
- args: [{ standalone: true, selector: 'sky-modal-header', imports: [SkyThemeModule, SkyTrimModule], template: "<h2\n class=\"sky-font-emphasized\"\n [skyThemeClass]=\"{\n 'sky-font-heading-4': 'default',\n 'sky-font-display-3': 'modern'\n }\"\n skyTrim\n>\n <ng-content />\n</h2>\n<span class=\"sky-control-help-container\" skyTrim\n ><ng-content select=\".sky-control-help\"></ng-content\n></span>\n", styles: ["h2{margin:0;line-height:1.2;display:inline}:host-context(.sky-theme-modern.sky-theme-mode-dark) h2{color:#fbfcfe}.sky-theme-modern.sky-theme-mode-dark h2{color:#fbfcfe}\n"] }]
1393
- }] });
1394
-
1395
1426
  /**
1396
1427
  * Provides a way to mark a modal as "dirty" and displays a confirmation
1397
1428
  * message when a user closes the modal without saving.