@kirbydesign/designsystem 11.4.0 → 11.4.1
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.
- package/action-group/index.d.ts.map +1 -1
- package/badge/index.d.ts.map +1 -1
- package/button/index.d.ts.map +1 -1
- package/calendar/index.d.ts.map +1 -1
- package/card/index.d.ts.map +1 -1
- package/chart/index.d.ts.map +1 -1
- package/config/index.d.ts.map +1 -1
- package/dropdown/index.d.ts +2 -2
- package/dropdown/index.d.ts.map +1 -1
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +16 -16
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-config.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +16 -14
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +28 -28
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-list.mjs +42 -42
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +42 -42
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +40 -40
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-radio.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +8 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +18 -18
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +8 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +5 -4
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem.mjs +32 -29
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/flag/index.d.ts.map +1 -1
- package/form-field/index.d.ts.map +1 -1
- package/icon/index.d.ts.map +1 -1
- package/index.d.ts +3 -1
- package/index.d.ts.map +1 -1
- package/item-sliding/index.d.ts.map +1 -1
- package/list/index.d.ts.map +1 -1
- package/modal/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/page/index.d.ts.map +1 -1
- package/radio/index.d.ts +2 -2
- package/radio/index.d.ts.map +1 -1
- package/range/index.d.ts +3 -2
- package/range/index.d.ts.map +1 -1
- package/shared/floating/index.d.ts.map +1 -1
- package/shared/index.d.ts.map +1 -1
- package/slide/index.d.ts.map +1 -1
- package/testing/index.d.ts.map +1 -1
- package/testing-base/index.d.ts.map +1 -1
- package/toast/index.d.ts.map +1 -1
- package/toggle/index.d.ts.map +1 -1
- package/toggle-button/index.d.ts.map +1 -1
- package/types/index.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-modal.mjs","sources":["../tmp-esm2022/modal/modal.interfaces.js","../tmp-esm2022/modal/modal-wrapper/config/modal-config.helper.js","../tmp-esm2022/modal/modal-wrapper/modal-elements-mover.delegate.js","../tmp-esm2022/modal/modal/alert/alert.component.js","../tmp-esm2022/modal/modal/services/alert.helper.js","../tmp-esm2022/modal/modal/services/can-dismiss.helper.js","../tmp-esm2022/modal/modal-wrapper/modal-wrapper.component.js","../tmp-esm2022/modal/modal-wrapper/config/drawer-supplementary-action.js","../tmp-esm2022/modal/modal-wrapper/compact/modal-compact-wrapper.component.js","../tmp-esm2022/modal/modal/services/modal-animation-builder.service.js","../tmp-esm2022/modal/modal-navigation.service.js","../tmp-esm2022/modal/modal/services/modal.helper.js","../tmp-esm2022/modal/modal/action-sheet/action-sheet.component.js","../tmp-esm2022/modal/modal/services/action-sheet.helper.js","../tmp-esm2022/modal/modal/services/modal.controller.js","../tmp-esm2022/modal/modal/services/can-dismiss-modal-guard.js","../tmp-esm2022/modal/modal/modal-component/modal.component.js","../tmp-esm2022/modal/modal/footer/modal-footer.component.js","../tmp-esm2022/modal/kirbydesign-designsystem-modal.js"],"sourcesContent":["import { Component, Optional } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class Modal {\n}\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\nexport var ModalElementType;\n(function (ModalElementType) {\n ModalElementType[ModalElementType[\"PAGE_PROGRESS\"] = 0] = \"PAGE_PROGRESS\";\n ModalElementType[ModalElementType[\"FOOTER\"] = 1] = \"FOOTER\";\n ModalElementType[ModalElementType[\"TITLE\"] = 2] = \"TITLE\";\n})(ModalElementType || (ModalElementType = {}));\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\nexport class ModalElementsAdvertiser {\n}\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\nexport class ModalElementComponent {\n get isContainedInModal() {\n return this.modalElementsAdvertiser !== null;\n }\n constructor(modalElementType, elementRef, modalElementsAdvertiser) {\n this.modalElementType = modalElementType;\n this.elementRef = elementRef;\n this.modalElementsAdvertiser = modalElementsAdvertiser;\n }\n ngAfterViewInit() {\n if (this.isContainedInModal) {\n this.modalElementsAdvertiser.addModalElement(this.modalElementType, this.elementRef);\n }\n }\n ngOnDestroy() {\n if (this.isContainedInModal) {\n this.modalElementsAdvertiser.removeModalElement(this.modalElementType, this.elementRef);\n }\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalElementComponent, deps: [{ token: ModalElementType }, { token: i0.ElementRef }, { token: ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: ModalElementComponent, isStandalone: false, selector: \"ng-component\", ngImport: i0, template: '', isInline: true }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalElementComponent, decorators: [{\n type: Component,\n args: [{\n template: '',\n standalone: false,\n }]\n }], ctorParameters: () => [{ type: ModalElementType }, { type: i0.ElementRef }, { type: ModalElementsAdvertiser, decorators: [{\n type: Optional\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUF5QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBc0IxRixNQUFNLE9BQWdCLEtBQUs7Q0FTMUI7QUFDRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUlYO0FBSkQsV0FBWSxnQkFBZ0I7SUFDMUIseUVBQWEsQ0FBQTtJQUNiLDJEQUFNLENBQUE7SUFDTix5REFBSyxDQUFBO0FBQ1AsQ0FBQyxFQUpXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFJM0I7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBZ0IsdUJBQXVCO0NBRzVDO0FBRUQ7O0dBRUc7QUFLSCxNQUFNLE9BQWdCLHFCQUFxQjtJQUN6QyxJQUFZLGtCQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFlBQ1UsZ0JBQWtDLEVBQ2xDLFVBQW1DLEVBQ3ZCLHVCQUFnRDtRQUY1RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ3ZCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7SUFDbkUsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFGLENBQUM7SUFDSCxDQUFDO2tJQXJCbUIscUJBQXFCO3NIQUFyQixxQkFBcUIseUVBSC9CLEVBQUU7OzRGQUdRLHFCQUFxQjtrQkFKMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsS0FBSztpQkFDbEI7OzBCQVNJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgS2lyYnlBbmltYXRpb24gfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuaW1wb3J0IHsgU2hvd0FsZXJ0Q2FsbGJhY2sgfSBmcm9tICcuL3B1YmxpY19hcGknO1xuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5RXZlbnREZXRhaWw8VCA9IGFueT4ge1xuICBkYXRhPzogVDtcbiAgcm9sZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPdmVybGF5IHtcbiAgZGlzbWlzczogKGRhdGE/OiBhbnkpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIG9uV2lsbERpc21pc3M6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPjtcbiAgb25EaWREaXNtaXNzOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbD47XG4gIGlzRGlzbWlzc2luZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kYWxSb3V0ZUFjdGl2YXRpb24ge1xuICByb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gIGlzTmV3TW9kYWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbCB7XG4gIGRpZFByZXNlbnQ6IFByb21pc2U8dm9pZD47XG4gIHdpbGxDbG9zZTogUHJvbWlzZTx2b2lkPjtcbiAgY2xvc2U6IChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzY3JvbGxUb1RvcDogKHNjcm9sbER1cmF0aW9uPzogS2lyYnlBbmltYXRpb24uRHVyYXRpb24pID0+IHZvaWQ7XG4gIHNjcm9sbFRvQm90dG9tOiAoc2Nyb2xsRHVyYXRpb24/OiBLaXJieUFuaW1hdGlvbi5EdXJhdGlvbikgPT4gdm9pZDtcbiAgc2Nyb2xsRGlzYWJsZWQ6IGJvb2xlYW47XG4gIGNhbkRpc21pc3M6IFNob3dBbGVydENhbGxiYWNrO1xuICBmb2N1c1RpdGxlPzogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogV0FSTklORzogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIEtpcmJ5LlxuICovXG5leHBvcnQgZW51bSBNb2RhbEVsZW1lbnRUeXBlIHtcbiAgUEFHRV9QUk9HUkVTUyxcbiAgRk9PVEVSLFxuICBUSVRMRSxcbn1cblxuLyoqXG4gKiBXQVJOSU5HOiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgS2lyYnkuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlciB7XG4gIGFkZE1vZGFsRWxlbWVudDogKHR5cGU6IE1vZGFsRWxlbWVudFR5cGUsIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSA9PiB2b2lkO1xuICByZW1vdmVNb2RhbEVsZW1lbnQ6ICh0eXBlOiBNb2RhbEVsZW1lbnRUeXBlLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PikgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBXQVJOSU5HOiBUaGlzIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgS2lyYnkuXG4gKi9cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogJycsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGdldCBpc0NvbnRhaW5lZEluTW9kYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxFbGVtZW50c0FkdmVydGlzZXIgIT09IG51bGw7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsRWxlbWVudFR5cGU6IE1vZGFsRWxlbWVudFR5cGUsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlclxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVkSW5Nb2RhbCkge1xuICAgICAgdGhpcy5tb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlci5hZGRNb2RhbEVsZW1lbnQodGhpcy5tb2RhbEVsZW1lbnRUeXBlLCB0aGlzLmVsZW1lbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVkSW5Nb2RhbCkge1xuICAgICAgdGhpcy5tb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlci5yZW1vdmVNb2RhbEVsZW1lbnQodGhpcy5tb2RhbEVsZW1lbnRUeXBlLCB0aGlzLmVsZW1lbnRSZWYpO1xuICAgIH1cbiAgfVxufVxuIl19","import { InjectionToken } from '@angular/core';\nexport const COMPONENT_PROPS = new InjectionToken('componentProps');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC13cmFwcGVyL2NvbmZpZy9tb2RhbC1jb25maWcuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFTLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX1BST1BTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ2NvbXBvbmVudFByb3BzJyk7XG4iXX0=","import { ElementRef } from '@angular/core';\n/*\n The ModalWrapperComponent class was growing large.\n\n Hence the functions responsible for moving modal elements around\n has been encapsulated in this class.\n*/\nexport class ModalElementsMoverDelegate {\n constructor(renderer, elementRef) {\n this.renderer = renderer;\n this.elementRef = elementRef;\n }\n addFooter(footerElementRef) {\n // Move the footer next to ion-content\n this.moveChild(footerElementRef, this.elementRef);\n }\n removeFooter(footerElementRef) {\n this.removeChild(footerElementRef);\n }\n addPageProgress(pageProgressElementRef, ionToolbarElement) {\n this.moveChild(pageProgressElementRef, ionToolbarElement);\n }\n removePageProgress(pageProgressElementRef) {\n this.removeChild(pageProgressElementRef);\n }\n /*\n contentTitleElement & ionTitleElement has to be passed\n as arguments to the method; not part of the constructor, as they\n might reference completely different elements between calls.\n \n For example in a multi-page routed modal where the elements are destroyed\n and recreated.\n */\n addTitle(titleElementRef, contentTitleElement, hasCollapsibleTitle, ionTitleElement) {\n this.moveChild(titleElementRef, ionTitleElement);\n // If title is collapsible append it to content area; required by ionic implementation.\n if (hasCollapsibleTitle) {\n const titleElementClone = titleElementRef.nativeElement.cloneNode(true);\n this.moveChild(new ElementRef(titleElementClone), contentTitleElement);\n }\n }\n removeTitle(titleElementRef, hasCollapsibleTitle, contentTitleElement) {\n this.removeChild(titleElementRef);\n if (hasCollapsibleTitle) {\n const kirbyPageTitleElement = contentTitleElement.nativeElement.querySelector('kirby-page-title');\n this.removeChild(new ElementRef(kirbyPageTitleElement));\n }\n }\n moveChild(childElementRef, newParentElementRef) {\n const child = childElementRef.nativeElement;\n const newParent = newParentElementRef.nativeElement;\n this.renderer.removeChild(child.parentElement, child);\n this.renderer.appendChild(newParent, child);\n }\n removeChild(childElementRef, parentElement) {\n const child = childElementRef.nativeElement;\n if (child) {\n this.renderer.removeChild(parentElement || child.parentElement, child);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZWxlbWVudHMtbW92ZXIuZGVsZWdhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2RhbC9zcmMvbW9kYWwtd3JhcHBlci9tb2RhbC1lbGVtZW50cy1tb3Zlci5kZWxlZ2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXREOzs7OztFQUtFO0FBRUYsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUNVLFFBQW1CLEVBQ25CLFVBQW1DO1FBRG5DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7SUFDMUMsQ0FBQztJQUVHLFNBQVMsQ0FBQyxnQkFBeUM7UUFDeEQsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxZQUFZLENBQUMsZ0JBQXlDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sZUFBZSxDQUNwQixzQkFBK0MsRUFDL0MsaUJBQW9EO1FBRXBELElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsc0JBQStDO1FBQ3ZFLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7TUFPRTtJQUNLLFFBQVEsQ0FDYixlQUF3QyxFQUN4QyxtQkFBNEMsRUFDNUMsbUJBQTRCLEVBQzVCLGVBQWdEO1FBRWhELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2pELHVGQUF1RjtRQUN2RixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWdCLENBQUM7WUFDdkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFTSxXQUFXLENBQ2hCLGVBQXdDLEVBQ3hDLG1CQUE0QixFQUM1QixtQkFBNEM7UUFFNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsQyxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDeEIsTUFBTSxxQkFBcUIsR0FDekIsbUJBQW1CLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRU8sU0FBUyxDQUNmLGVBQXdDLEVBQ3hDLG1CQUE0QztRQUU1QyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8sV0FBVyxDQUNqQixlQUF3QyxFQUN4QyxhQUFxRDtRQUVyRCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQzVDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qXG4gIFRoZSBNb2RhbFdyYXBwZXJDb21wb25lbnQgY2xhc3Mgd2FzIGdyb3dpbmcgbGFyZ2UuIFxuXG4gIEhlbmNlIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUgZm9yIG1vdmluZyBtb2RhbCBlbGVtZW50cyBhcm91bmQgXG4gIGhhcyBiZWVuIGVuY2Fwc3VsYXRlZCBpbiB0aGlzIGNsYXNzLiBcbiovXG5cbmV4cG9ydCBjbGFzcyBNb2RhbEVsZW1lbnRzTW92ZXJEZWxlZ2F0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge31cblxuICBwdWJsaWMgYWRkRm9vdGVyKGZvb3RlckVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgLy8gTW92ZSB0aGUgZm9vdGVyIG5leHQgdG8gaW9uLWNvbnRlbnRcbiAgICB0aGlzLm1vdmVDaGlsZChmb290ZXJFbGVtZW50UmVmLCB0aGlzLmVsZW1lbnRSZWYpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZvb3Rlcihmb290ZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQoZm9vdGVyRWxlbWVudFJlZik7XG4gIH1cblxuICBwdWJsaWMgYWRkUGFnZVByb2dyZXNzKFxuICAgIHBhZ2VQcm9ncmVzc0VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIGlvblRvb2xiYXJFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJb25Ub29sYmFyRWxlbWVudD5cbiAgKSB7XG4gICAgdGhpcy5tb3ZlQ2hpbGQocGFnZVByb2dyZXNzRWxlbWVudFJlZiwgaW9uVG9vbGJhckVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVBhZ2VQcm9ncmVzcyhwYWdlUHJvZ3Jlc3NFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQocGFnZVByb2dyZXNzRWxlbWVudFJlZik7XG4gIH1cblxuICAvKiBcbiAgICAgY29udGVudFRpdGxlRWxlbWVudCAmIGlvblRpdGxlRWxlbWVudCBoYXMgdG8gYmUgcGFzc2VkXG4gICAgIGFzIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kOyBub3QgcGFydCBvZiB0aGUgY29uc3RydWN0b3IsIGFzIHRoZXkgXG4gICAgIG1pZ2h0IHJlZmVyZW5jZSBjb21wbGV0ZWx5IGRpZmZlcmVudCBlbGVtZW50cyBiZXR3ZWVuIGNhbGxzLiBcblxuICAgICBGb3IgZXhhbXBsZSBpbiBhIG11bHRpLXBhZ2Ugcm91dGVkIG1vZGFsIHdoZXJlIHRoZSBlbGVtZW50cyBhcmUgZGVzdHJveWVkIFxuICAgICBhbmQgcmVjcmVhdGVkLlxuICAqL1xuICBwdWJsaWMgYWRkVGl0bGUoXG4gICAgdGl0bGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBjb250ZW50VGl0bGVFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBoYXNDb2xsYXBzaWJsZVRpdGxlOiBib29sZWFuLFxuICAgIGlvblRpdGxlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVGl0bGVFbGVtZW50PlxuICApIHtcbiAgICB0aGlzLm1vdmVDaGlsZCh0aXRsZUVsZW1lbnRSZWYsIGlvblRpdGxlRWxlbWVudCk7XG4gICAgLy8gSWYgdGl0bGUgaXMgY29sbGFwc2libGUgYXBwZW5kIGl0IHRvIGNvbnRlbnQgYXJlYTsgcmVxdWlyZWQgYnkgaW9uaWMgaW1wbGVtZW50YXRpb24uXG4gICAgaWYgKGhhc0NvbGxhcHNpYmxlVGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlRWxlbWVudENsb25lID0gdGl0bGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgdGhpcy5tb3ZlQ2hpbGQobmV3IEVsZW1lbnRSZWYodGl0bGVFbGVtZW50Q2xvbmUpLCBjb250ZW50VGl0bGVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVGl0bGUoXG4gICAgdGl0bGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBoYXNDb2xsYXBzaWJsZVRpdGxlOiBib29sZWFuLFxuICAgIGNvbnRlbnRUaXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIHRoaXMucmVtb3ZlQ2hpbGQodGl0bGVFbGVtZW50UmVmKTtcbiAgICBpZiAoaGFzQ29sbGFwc2libGVUaXRsZSkge1xuICAgICAgY29uc3Qga2lyYnlQYWdlVGl0bGVFbGVtZW50OiBIVE1MRWxlbWVudCA9XG4gICAgICAgIGNvbnRlbnRUaXRsZUVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdraXJieS1wYWdlLXRpdGxlJyk7XG4gICAgICB0aGlzLnJlbW92ZUNoaWxkKG5ldyBFbGVtZW50UmVmKGtpcmJ5UGFnZVRpdGxlRWxlbWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUNoaWxkKFxuICAgIGNoaWxkRWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgbmV3UGFyZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBuZXdQYXJlbnQgPSBuZXdQYXJlbnRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChjaGlsZC5wYXJlbnRFbGVtZW50LCBjaGlsZCk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChuZXdQYXJlbnQsIGNoaWxkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQ2hpbGQoXG4gICAgY2hpbGRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwYXJlbnRFbGVtZW50PzogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICBjb25zdCBjaGlsZCA9IGNoaWxkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChwYXJlbnRFbGVtZW50IHx8IGNoaWxkLnBhcmVudEVsZW1lbnQsIGNoaWxkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewChild, } from '@angular/core';\nimport { of } from 'rxjs';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { EmptyStateComponent } from '@kirbydesign/designsystem/empty-state';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@kirbydesign/designsystem/types\";\nimport * as i2 from \"@angular/common\";\nexport class AlertComponent {\n set title(title) {\n this.title$ = typeof title === 'string' ? of(title) : title;\n }\n set message(message) {\n this.message$ = typeof message === 'string' ? of(message) : message;\n }\n set okBtn(okBtn) {\n this.okBtn$ = typeof okBtn === 'string' ? of(okBtn) : okBtn;\n }\n set cancelBtn(cancelBtn) {\n this.cancelBtn$ = typeof cancelBtn === 'string' ? of(cancelBtn) : cancelBtn;\n }\n constructor(elementRef, windowRef) {\n this.elementRef = elementRef;\n this.windowRef = windowRef;\n this.BLUR_WRAPPER_DELAY_IN_MS = 50;\n this.scrollY = Math.abs(this.windowRef.nativeWindow.scrollY);\n }\n ngAfterViewInit() {\n setTimeout(() => {\n this.alertWrapper.nativeElement.focus();\n this.alertWrapper.nativeElement.blur();\n }, this.BLUR_WRAPPER_DELAY_IN_MS);\n }\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n onCancel() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement?.dismiss(false);\n }\n onOk() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement?.dismiss(true);\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: AlertComponent, deps: [{ token: i0.ElementRef }, { token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.13\", type: AlertComponent, isStandalone: true, selector: \"kirby-alert\", inputs: { title: \"title\", message: \"message\", iconName: \"iconName\", iconThemeColor: \"iconThemeColor\", okBtn: \"okBtn\", okBtnIsDestructive: \"okBtnIsDestructive\", cancelBtn: \"cancelBtn\" }, host: { properties: { \"class.ion-page\": \"false\" } }, viewQueries: [{ propertyName: \"alertWrapper\", first: true, predicate: [\"alertWrapper\"], descendants: true, static: true }], ngImport: i0, template: \"<article #alertWrapper>\\n <kirby-empty-state\\n [iconName]=\\\"iconName\\\"\\n [themeColor]=\\\"iconThemeColor\\\"\\n [title]=\\\"title$ | async\\\"\\n [subtitle]=\\\"message$ | async\\\"\\n ></kirby-empty-state>\\n <div class=\\\"buttongroup\\\">\\n @if (cancelBtn$ | async; as cancelBtn) {\\n <button kirby-button attentionLevel=\\\"3\\\" class=\\\"cancel-btn\\\" (click)=\\\"onCancel()\\\">\\n {{ cancelBtn }}\\n </button>\\n }\\n <button\\n kirby-button\\n [size]=\\\"(cancelBtn$ | async) ? null : 'lg'\\\"\\n attentionLevel=\\\"1\\\"\\n class=\\\"ok-btn\\\"\\n [class.destructive]=\\\"okBtnIsDestructive\\\"\\n (click)=\\\"onOk()\\\"\\n >\\n {{ okBtn$ | async }}\\n </button>\\n </div>\\n</article>\\n\", styles: [\"article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\\n\"], dependencies: [{ kind: \"component\", type: EmptyStateComponent, selector: \"kirby-empty-state\", inputs: [\"iconName\", \"title\", \"subtitle\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kirby-button],Button[kirby-button],a[kirby-button]\", inputs: [\"attentionLevel\", \"noDecoration\", \"themeColor\", \"expand\", \"isFloating\", \"size\", \"showIconOnly\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: ThemeColorDirective, selector: \"kirby-avatar[themeColor], kirby-card[themeColor], kirby-icon[themeColor], kirby-progress-circle-ring[themeColor], kirby-modal-footer[themeColor], kirby-empty-state[themeColor]\", inputs: [\"themeColor\"] }, { kind: \"pipe\", type: i2.AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: AlertComponent, decorators: [{\n type: Component,\n args: [{ imports: [IconComponent, EmptyStateComponent, ButtonComponent, CommonModule, ThemeColorDirective], selector: 'kirby-alert', host: { '[class.ion-page]': 'false' }, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<article #alertWrapper>\\n <kirby-empty-state\\n [iconName]=\\\"iconName\\\"\\n [themeColor]=\\\"iconThemeColor\\\"\\n [title]=\\\"title$ | async\\\"\\n [subtitle]=\\\"message$ | async\\\"\\n ></kirby-empty-state>\\n <div class=\\\"buttongroup\\\">\\n @if (cancelBtn$ | async; as cancelBtn) {\\n <button kirby-button attentionLevel=\\\"3\\\" class=\\\"cancel-btn\\\" (click)=\\\"onCancel()\\\">\\n {{ cancelBtn }}\\n </button>\\n }\\n <button\\n kirby-button\\n [size]=\\\"(cancelBtn$ | async) ? null : 'lg'\\\"\\n attentionLevel=\\\"1\\\"\\n class=\\\"ok-btn\\\"\\n [class.destructive]=\\\"okBtnIsDestructive\\\"\\n (click)=\\\"onOk()\\\"\\n >\\n {{ okBtn$ | async }}\\n </button>\\n </div>\\n</article>\\n\", styles: [\"article{overflow:hidden;padding:24px 16px 16px}@media (max-width: 320px){article{padding:8px}}.buttongroup{display:flex;justify-content:center;column-gap:8px}.buttongroup button{flex:1 1 50%;margin-inline:0}.buttongroup button:only-child{flex-grow:0}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.WindowRef }], propDecorators: { alertWrapper: [{\n type: ViewChild,\n args: ['alertWrapper', { static: true }]\n }], title: [{\n type: Input\n }], message: [{\n type: Input\n }], iconName: [{\n type: Input\n }], iconThemeColor: [{\n type: Input\n }], okBtn: [{\n type: Input\n }], okBtnIsDestructive: [{\n type: Input\n }], cancelBtn: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9hbGVydC9hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7QUFVbkUsTUFBTSxPQUFPLGNBQWM7SUFNekIsSUFDSSxLQUFLLENBQUMsS0FBa0M7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFHRCxJQUNJLE9BQU8sQ0FBQyxPQUFvQztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDdEUsQ0FBQztJQU1ELElBQ0ksS0FBSyxDQUFDLEtBQWtDO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBSUQsSUFDSSxTQUFTLENBQUMsU0FBc0M7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlFLENBQUM7SUFFRCxZQUNVLFVBQW1DLEVBQ25DLFNBQW9CO1FBRHBCLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBQ25DLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFsQ3JCLDZCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUUvQixZQUFPLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQWlDckUsQ0FBQztJQUVKLGVBQWU7UUFDYixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRSxlQUFlLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNFLGVBQWUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztrSUExRFUsY0FBYztzSEFBZCxjQUFjLGtiQ3pCM0IsMnNCQXlCQSxzVERQMkIsbUJBQW1CLHlHQUFFLGVBQWUsK01BQUUsWUFBWSwrQkFBRSxtQkFBbUI7OzRGQU9yRixjQUFjO2tCQVIxQixTQUFTOzhCQUNDLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsWUFDdkYsYUFBYSxRQUdqQixFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs7c0JBSTlDLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7c0JBSTFDLEtBQUs7O3NCQU1MLEtBQUs7O3NCQUtMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUlMLEtBQUs7O3NCQUdMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9pY29uJztcbmltcG9ydCB7IFRoZW1lQ29sb3IgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuaW1wb3J0IHsgVGhlbWVDb2xvckRpcmVjdGl2ZSB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vc2hhcmVkJztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2VtcHR5LXN0YXRlJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vYnV0dG9uJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtJY29uQ29tcG9uZW50LCBFbXB0eVN0YXRlQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnQsIENvbW1vbk1vZHVsZSwgVGhlbWVDb2xvckRpcmVjdGl2ZV0sXG4gIHNlbGVjdG9yOiAna2lyYnktYWxlcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxlcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hbGVydC5jb21wb25lbnQuc2NzcyddLFxuICBob3N0OiB7ICdbY2xhc3MuaW9uLXBhZ2VdJzogJ2ZhbHNlJyB9LCAvL0Vuc3VyZSBpb24tcGFnZSBjbGFzcyBkb2Vzbid0IGdldCBhcHBsaWVkIGJ5IElvbmljIE1vZGFsIENvbnRyb2xsZXJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHJlYWRvbmx5IEJMVVJfV1JBUFBFUl9ERUxBWV9JTl9NUyA9IDUwO1xuICBAVmlld0NoaWxkKCdhbGVydFdyYXBwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGFsZXJ0V3JhcHBlcjogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBzY3JvbGxZOiBudW1iZXIgPSBNYXRoLmFicyh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuc2Nyb2xsWSk7XG5cbiAgdGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBJbnB1dCgpXG4gIHNldCB0aXRsZSh0aXRsZTogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy50aXRsZSQgPSB0eXBlb2YgdGl0bGUgPT09ICdzdHJpbmcnID8gb2YodGl0bGUpIDogdGl0bGU7XG4gIH1cblxuICBtZXNzYWdlJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBASW5wdXQoKVxuICBzZXQgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcbiAgICB0aGlzLm1lc3NhZ2UkID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gb2YobWVzc2FnZSkgOiBtZXNzYWdlO1xuICB9XG5cbiAgQElucHV0KCkgaWNvbk5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgaWNvblRoZW1lQ29sb3I6IFRoZW1lQ29sb3IgfCBgJHtUaGVtZUNvbG9yfWA7XG5cbiAgb2tCdG4kOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBJbnB1dCgpXG4gIHNldCBva0J0bihva0J0bjogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgdGhpcy5va0J0biQgPSB0eXBlb2Ygb2tCdG4gPT09ICdzdHJpbmcnID8gb2Yob2tCdG4pIDogb2tCdG47XG4gIH1cbiAgQElucHV0KCkgb2tCdG5Jc0Rlc3RydWN0aXZlOiBib29sZWFuO1xuXG4gIGNhbmNlbEJ0biQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgQElucHV0KClcbiAgc2V0IGNhbmNlbEJ0bihjYW5jZWxCdG46IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuICAgIHRoaXMuY2FuY2VsQnRuJCA9IHR5cGVvZiBjYW5jZWxCdG4gPT09ICdzdHJpbmcnID8gb2YoY2FuY2VsQnRuKSA6IGNhbmNlbEJ0bjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hbGVydFdyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5hbGVydFdyYXBwZXIubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfSwgdGhpcy5CTFVSX1dSQVBQRVJfREVMQVlfSU5fTVMpO1xuICB9XG5cbiAgb25Gb2N1c0NoYW5nZSgpIHtcbiAgICAvLyBUaGlzIGZpeGVzIGFuIHVuZGVzaXJlZCBzY3JvbGwgYmVoYXZpb3VyIG9jY3VycmluZyBvbiBrZXlib2FyZC10YWJiaW5nXG4gICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LnNjcm9sbFRvKHsgdG9wOiB0aGlzLnNjcm9sbFkgfSk7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICBjb25zdCBpb25Nb2RhbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdpb24tbW9kYWwnKTtcbiAgICBpb25Nb2RhbEVsZW1lbnQ/LmRpc21pc3MoZmFsc2UpO1xuICB9XG5cbiAgb25PaygpIHtcbiAgICBjb25zdCBpb25Nb2RhbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdpb24tbW9kYWwnKTtcbiAgICBpb25Nb2RhbEVsZW1lbnQ/LmRpc21pc3ModHJ1ZSk7XG4gIH1cbn1cbiIsIjxhcnRpY2xlICNhbGVydFdyYXBwZXI+XG4gIDxraXJieS1lbXB0eS1zdGF0ZVxuICAgIFtpY29uTmFtZV09XCJpY29uTmFtZVwiXG4gICAgW3RoZW1lQ29sb3JdPVwiaWNvblRoZW1lQ29sb3JcIlxuICAgIFt0aXRsZV09XCJ0aXRsZSQgfCBhc3luY1wiXG4gICAgW3N1YnRpdGxlXT1cIm1lc3NhZ2UkIHwgYXN5bmNcIlxuICA+PC9raXJieS1lbXB0eS1zdGF0ZT5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbmdyb3VwXCI+XG4gICAgQGlmIChjYW5jZWxCdG4kIHwgYXN5bmM7IGFzIGNhbmNlbEJ0bikge1xuICAgICAgPGJ1dHRvbiBraXJieS1idXR0b24gYXR0ZW50aW9uTGV2ZWw9XCIzXCIgY2xhc3M9XCJjYW5jZWwtYnRuXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5cbiAgICAgICAge3sgY2FuY2VsQnRuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPGJ1dHRvblxuICAgICAga2lyYnktYnV0dG9uXG4gICAgICBbc2l6ZV09XCIoY2FuY2VsQnRuJCB8IGFzeW5jKSA/IG51bGwgOiAnbGcnXCJcbiAgICAgIGF0dGVudGlvbkxldmVsPVwiMVwiXG4gICAgICBjbGFzcz1cIm9rLWJ0blwiXG4gICAgICBbY2xhc3MuZGVzdHJ1Y3RpdmVdPVwib2tCdG5Jc0Rlc3RydWN0aXZlXCJcbiAgICAgIChjbGljayk9XCJvbk9rKClcIlxuICAgID5cbiAgICAgIHt7IG9rQnRuJCB8IGFzeW5jIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9hcnRpY2xlPlxuIl19","import { Injectable } from '@angular/core';\nimport { isObservable } from 'rxjs';\nimport { AlertComponent } from '../alert/alert.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ionic/angular/standalone\";\nexport class AlertHelper {\n constructor(ionicModalController) {\n this.ionicModalController = ionicModalController;\n }\n async showAlert(config) {\n const ionModal = await this.ionicModalController.create({\n component: AlertComponent,\n componentProps: this.getComponentProps(config),\n cssClass: ['kirby-overlay', 'kirby-alert'],\n mode: 'ios',\n backdropDismiss: false,\n });\n await ionModal.present();\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n getComponentProps(config) {\n return {\n ...config,\n okBtn: this.getOkBtn(config),\n okBtnIsDestructive: this.getOkBtnIsDestructive(config),\n iconName: config.icon && config.icon.name,\n iconThemeColor: config.icon && config.icon.themeColor,\n };\n }\n getOkBtn(config) {\n let text;\n if (config.okBtn) {\n if (typeof config.okBtn === 'string' || isObservable(config.okBtn)) {\n text = config.okBtn;\n }\n else {\n text = config.okBtn?.text;\n }\n }\n return text;\n }\n getOkBtnIsDestructive(config) {\n return typeof config.okBtn === 'object' ? config.okBtn.isDestructive : undefined;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: AlertHelper, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: AlertHelper }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: AlertHelper, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.ModalController }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsL3NlcnZpY2VzL2FsZXJ0LmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJMUQsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFBb0Isb0JBQXFDO1FBQXJDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBaUI7SUFBRyxDQUFDO0lBRXRELEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBbUI7UUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO1lBQ3RELFNBQVMsRUFBRSxjQUFjO1lBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1lBQzlDLFFBQVEsRUFBRSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUM7WUFDMUMsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QixPQUFPO1lBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUN2QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRTtTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQW1CO1FBQzNDLE9BQU87WUFDTCxHQUFHLE1BQU07WUFDVCxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztZQUN0RCxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDekMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBRU8sUUFBUSxDQUFDLE1BQW1CO1FBQ2xDLElBQUksSUFBaUMsQ0FBQztRQUV0QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuRSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBTTtRQUMxQixPQUFPLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkYsQ0FBQztrSUE5Q1UsV0FBVztzSUFBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9tb2RhbC5pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWxlcnRDb21wb25lbnQgfSBmcm9tICcuLi9hbGVydC9hbGVydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnRDb25maWcgfSBmcm9tICcuLi9hbGVydC9jb25maWcvYWxlcnQtY29uZmlnJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFsZXJ0SGVscGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpb25pY01vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7fVxuXG4gIHB1YmxpYyBhc3luYyBzaG93QWxlcnQoY29uZmlnOiBBbGVydENvbmZpZyk6IFByb21pc2U8T3ZlcmxheT4ge1xuICAgIGNvbnN0IGlvbk1vZGFsID0gYXdhaXQgdGhpcy5pb25pY01vZGFsQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBbGVydENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB0aGlzLmdldENvbXBvbmVudFByb3BzKGNvbmZpZyksXG4gICAgICBjc3NDbGFzczogWydraXJieS1vdmVybGF5JywgJ2tpcmJ5LWFsZXJ0J10sXG4gICAgICBtb2RlOiAnaW9zJyxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBpb25Nb2RhbC5wcmVzZW50KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc21pc3M6IGlvbk1vZGFsLmRpc21pc3MuYmluZChpb25Nb2RhbCksXG4gICAgICBvbldpbGxEaXNtaXNzOiBpb25Nb2RhbC5vbldpbGxEaXNtaXNzKCksXG4gICAgICBvbkRpZERpc21pc3M6IGlvbk1vZGFsLm9uRGlkRGlzbWlzcygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudFByb3BzKGNvbmZpZzogQWxlcnRDb25maWcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgb2tCdG46IHRoaXMuZ2V0T2tCdG4oY29uZmlnKSxcbiAgICAgIG9rQnRuSXNEZXN0cnVjdGl2ZTogdGhpcy5nZXRPa0J0bklzRGVzdHJ1Y3RpdmUoY29uZmlnKSxcbiAgICAgIGljb25OYW1lOiBjb25maWcuaWNvbiAmJiBjb25maWcuaWNvbi5uYW1lLFxuICAgICAgaWNvblRoZW1lQ29sb3I6IGNvbmZpZy5pY29uICYmIGNvbmZpZy5pY29uLnRoZW1lQ29sb3IsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2tCdG4oY29uZmlnOiBBbGVydENvbmZpZyk6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgbGV0IHRleHQ6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICAgIGlmIChjb25maWcub2tCdG4pIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9rQnRuID09PSAnc3RyaW5nJyB8fCBpc09ic2VydmFibGUoY29uZmlnLm9rQnRuKSkge1xuICAgICAgICB0ZXh0ID0gY29uZmlnLm9rQnRuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dCA9IGNvbmZpZy5va0J0bj8udGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIGdldE9rQnRuSXNEZXN0cnVjdGl2ZShjb25maWcpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbmZpZy5va0J0biA9PT0gJ29iamVjdCcgPyBjb25maWcub2tCdG4uaXNEZXN0cnVjdGl2ZSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./alert.helper\";\nexport class CanDismissHelper {\n constructor(alertHelper) {\n this.alertHelper = alertHelper;\n }\n getCanDismissCallback(callback) {\n return async () => {\n const result = await callback();\n if (typeof result === 'boolean')\n return result;\n const canCloseModal = await this.showAlert(result);\n return canCloseModal;\n };\n }\n async showAlert(config) {\n const alert = await this.alertHelper.showAlert(config);\n const result = await alert.onWillDismiss;\n return result.data;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: CanDismissHelper, deps: [{ token: i1.AlertHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: CanDismissHelper }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: CanDismissHelper, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.AlertHelper }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWRpc21pc3MuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsL3NlcnZpY2VzL2Nhbi1kaXNtaXNzLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFHLENBQUM7SUFFekMscUJBQXFCLENBQUMsUUFBMkI7UUFDdEQsT0FBTyxLQUFLLElBQUksRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsRUFBRSxDQUFDO1lBRWhDLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUztnQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUUvQyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkQsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBbUI7UUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7a0lBbEJVLGdCQUFnQjtzSUFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2hvd0FsZXJ0Q2FsbGJhY2sgfSBmcm9tICcuLi8uLi9tb2RhbC13cmFwcGVyL2NvbmZpZyc7XG5pbXBvcnQgeyBBbGVydENvbmZpZyB9IGZyb20gJy4uL2FsZXJ0JztcbmltcG9ydCB7IEFsZXJ0SGVscGVyIH0gZnJvbSAnLi9hbGVydC5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2FuRGlzbWlzc0hlbHBlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxlcnRIZWxwZXI6IEFsZXJ0SGVscGVyKSB7fVxuXG4gIHB1YmxpYyBnZXRDYW5EaXNtaXNzQ2FsbGJhY2soY2FsbGJhY2s6IFNob3dBbGVydENhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGxiYWNrKCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgIGNvbnN0IGNhbkNsb3NlTW9kYWwgPSBhd2FpdCB0aGlzLnNob3dBbGVydChyZXN1bHQpO1xuICAgICAgcmV0dXJuIGNhbkNsb3NlTW9kYWw7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93QWxlcnQoY29uZmlnOiBBbGVydENvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydEhlbHBlci5zaG93QWxlcnQoY29uZmlnKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhbGVydC5vbldpbGxEaXNtaXNzO1xuICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgfVxufVxuIl19","import { Component, ContentChild, ElementRef, HostBinding, HostListener, Injector, Input, RendererStyleFlags2, TemplateRef, ViewChild, ViewChildren, } from '@angular/core';\nimport { RouterModule, RouterOutlet } from '@angular/router';\nimport { firstValueFrom, merge, Subject } from 'rxjs';\nimport { debounceTime, first, map, takeUntil } from 'rxjs/operators';\nimport { DesignTokenHelper, getIonModalDialogAncestor } from '@kirbydesign/designsystem/helpers';\nimport { observeContent } from '@kirbydesign/designsystem/helpers';\nimport { CommonModule } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { IonButtons, IonContent, IonHeader, IonTitle, IonToolbar, } from '@ionic/angular/standalone';\nimport { Modal, ModalElementsAdvertiser, ModalElementType } from '../modal.interfaces';\nimport { COMPONENT_PROPS } from './config/modal-config.helper';\nimport { ModalElementsMoverDelegate } from './modal-elements-mover.delegate';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@kirbydesign/designsystem/shared\";\nimport * as i2 from \"@kirbydesign/designsystem/types\";\nimport * as i3 from \"@kirbydesign/designsystem/helpers\";\nimport * as i4 from \"../modal/services/can-dismiss.helper\";\nimport * as i5 from \"@angular/router\";\nimport * as i6 from \"@angular/common\";\nconst contentScrollDebounceTimeInMS = 10;\nconst contentScrolledOffsetInPixels = 4;\nexport class ModalWrapperComponent {\n get _hasCollapsibleTitle() {\n return !!this.config?.collapseTitle;\n }\n static { this.KEYBOARD_HIDE_DELAY_IN_MS = 100; }\n set scrollDisabled(disabled) {\n this.ionContent.scrollY = !disabled;\n }\n set canDismiss(callback) {\n this.ionModalElement.canDismiss = this.canDismissHelper.getCanDismissCallback(callback);\n }\n get contentTitleElement() {\n /*\n contentTitleElement has ngIf directive dependent on _hasCollapsibleTitle; trigger CD to make sure element has been queried.\n Solution taken from: https://danieleyassu.com/angular-viewchild-and-ngif/\n */\n if (!this._contentTitleElement && this._hasCollapsibleTitle) {\n this.changeDetector.detectChanges();\n }\n return this._contentTitleElement;\n }\n get intersectionObserver() {\n if (!this._intersectionObserver) {\n this._intersectionObserver = this.createModalWrapperIntersectionObserver();\n }\n return this._intersectionObserver;\n }\n get _isDrawer() {\n return this.config.flavor === 'drawer';\n }\n constructor(changeDetector, injector, elementRef, renderer, zone, resizeObserverService, windowRef, platform, canDismissHelper, environmentInjector, translations) {\n this.changeDetector = changeDetector;\n this.injector = injector;\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.zone = zone;\n this.resizeObserverService = resizeObserverService;\n this.windowRef = windowRef;\n this.platform = platform;\n this.canDismissHelper = canDismissHelper;\n this.environmentInjector = environmentInjector;\n this.translations = translations;\n this.scrollY = Math.abs(this.windowRef.nativeWindow.scrollY);\n this.VIEWPORT_RESIZE_DEBOUNCE_TIME = 100;\n this.keyboardVisible = false;\n this.toolbarButtons = [];\n this.delayedClose = () => { };\n this.viewportResized = false;\n this.ionModalDidPresent = new Subject();\n this.didPresent = firstValueFrom(this.ionModalDidPresent);\n this.ionModalWillDismiss = new Subject();\n this.willClose = firstValueFrom(this.ionModalWillDismiss);\n this.viewportResize = new Subject();\n this.viewportResize$ = this.viewportResize\n .asObservable()\n .pipe(debounceTime(this.VIEWPORT_RESIZE_DEBOUNCE_TIME));\n this.destroy$ = new Subject();\n this.willClose$ = this.ionModalWillDismiss.pipe(first());\n this._currentFooter = null;\n this.setAriaLabelFromTitleContent = () => {\n const titleTextContent = this.ionTitleElement?.nativeElement.textContent;\n if (this.ionModalDialog && titleTextContent) {\n this.renderer.setAttribute(this.ionModalDialog, 'aria-label', titleTextContent);\n }\n };\n this.setViewportHeight();\n this.observeViewportResize();\n this.modalElementsMoverDelegate = new ModalElementsMoverDelegate(renderer, elementRef);\n }\n ngOnInit() {\n this.ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n this.ionModalDialog = getIonModalDialogAncestor(this.elementRef.nativeElement);\n this.initializeSizing();\n this.initializeModalRoute();\n this.listenForIonModalDidPresent();\n this.listenForIonModalWillDismiss();\n this.listenForScroll();\n this.initializeResizeModalToModalWrapper();\n this.focusTitleOnDidPresent();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n this.modalWrapperInjector = Injector.create({\n providers: [{ provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent }],\n parent: this.injector,\n });\n }\n ngAfterViewInit() {\n if (this.toolbarButtonsQuery) {\n this.toolbarButtons = this.toolbarButtonsQuery.map((buttonRef) => buttonRef.nativeElement);\n }\n this.setAriaLabel();\n }\n set currentFooter(footer) {\n if (this._currentFooter) {\n this.resizeObserverService.unobserve(this._currentFooter);\n }\n this._currentFooter = footer;\n if (footer !== null) {\n this.resizeObserverService.observe(footer, (entry) => {\n const [property, pixelValue] = [\n '--footer-height',\n `${Math.floor(entry.contentRect.height)}px`,\n ];\n this.setCssVar(this.elementRef.nativeElement, property, pixelValue);\n });\n }\n this._currentFooter = footer;\n }\n get currentFooter() {\n return this._currentFooter;\n }\n addModalElement(type, modalElement) {\n const addModalElementFn = {\n [ModalElementType.FOOTER]: () => {\n this.modalElementsMoverDelegate.addFooter(modalElement);\n this.currentFooter = modalElement.nativeElement;\n },\n [ModalElementType.TITLE]: () => this.modalElementsMoverDelegate.addTitle(modalElement, this.contentTitleElement, this._hasCollapsibleTitle, this.ionTitleElement),\n [ModalElementType.PAGE_PROGRESS]: () => this.modalElementsMoverDelegate.addPageProgress(modalElement, this.ionToolbarElement),\n }[type];\n addModalElementFn();\n }\n removeModalElement(type, modalElement) {\n const removeModalElementFn = {\n [ModalElementType.FOOTER]: () => {\n this.modalElementsMoverDelegate.removeFooter(modalElement);\n this.currentFooter = null;\n },\n [ModalElementType.TITLE]: () => this.modalElementsMoverDelegate.removeTitle(modalElement, this._hasCollapsibleTitle, this.contentTitleElement),\n [ModalElementType.PAGE_PROGRESS]: () => this.modalElementsMoverDelegate.removePageProgress(modalElement),\n }[type];\n removeModalElementFn();\n }\n initializeResizeModalToModalWrapper() {\n if (this.config.flavor === 'drawer' && this.config.interactWithBackground) {\n merge(this.ionModalDidPresent, this.viewportResize$)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n // wait for template to render\n setTimeout(() => {\n const domRect = this.elementRef.nativeElement.getBoundingClientRect();\n const document = this.windowRef.nativeWindow.document.documentElement;\n const right = document.clientWidth - domRect.right;\n this.renderer.setStyle(this.ionModalElement, 'top', `${domRect.top}px`);\n this.renderer.setStyle(this.ionModalElement, 'left', `${domRect.left}px`);\n this.renderer.setStyle(this.ionModalElement, 'right', `${right}px`);\n });\n });\n }\n }\n initializeSizing() {\n if (this.config.size === 'full-height')\n return;\n this.patchScrollElementSize();\n this.observeHeaderResize();\n this.observeModalFullHeight();\n }\n initializeModalRoute() {\n if (this.config.modalRoute) {\n this.onSiblingModalRouteActivated(this.config.siblingModalRouteActivated$);\n // Load component from modal-route inside router-outlet:\n this.routerOutlet.activateWith(this.config.modalRoute, this.environmentInjector);\n }\n }\n onSiblingModalRouteActivated(siblingModalRouteActivated$) {\n if (!siblingModalRouteActivated$)\n return;\n siblingModalRouteActivated$.pipe(takeUntil(this.willClose$)).subscribe((route) => {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n this.routerOutlet.activateWith(route, this.environmentInjector);\n this.focusTitle();\n });\n }\n patchScrollElementSize() {\n const supportsCssShadowParts = 'part' in HTMLElement.prototype;\n if (supportsCssShadowParts)\n return;\n this.ionContent.getScrollElement().then((scrollElement) => {\n this.renderer.setStyle(scrollElement, 'height', '100%');\n this.renderer.setStyle(scrollElement, 'position', 'relative');\n if (this.config.flavor === 'drawer') {\n this.renderer.setStyle(scrollElement, 'transition', 'padding-bottom ' + DesignTokenHelper.softKeyboardTransitionLeave);\n }\n });\n }\n observeModalFullHeight() {\n const ionModalWrapper = this.getIonModalWrapperElement();\n if (!ionModalWrapper)\n return;\n // Start observing when modal has finished animating:\n this.didPresent.then(() => {\n this.intersectionObserver.observe(ionModalWrapper);\n });\n }\n // Extracted into function for ease of testing\n getIonModalWrapperElement() {\n return this.ionModalElement.shadowRoot.querySelector('.modal-wrapper');\n }\n observeHeaderResize() {\n this.resizeObserverService.observe(this.ionHeaderElement.nativeElement, (entry) => {\n const [property, pixelValue] = ['--header-height', `${entry.contentRect.height}px`];\n this.setCssVar(this.elementRef.nativeElement, property, pixelValue);\n });\n }\n listenForIonModalDidPresent() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalDidPresent', () => {\n this.ionModalDidPresent.next();\n this.ionModalDidPresent.complete();\n });\n }\n }\n listenForIonModalWillDismiss() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalWillDismiss', () => {\n this.ionModalWillDismiss.next();\n this.ionModalWillDismiss.complete();\n });\n }\n }\n listenForScroll() {\n const query = `(min-width: ${DesignTokenHelper.breakpoints.medium})`;\n const mediaQuery = this.windowRef.nativeWindow.matchMedia(query);\n const enableScrollEvents = (listOrEvent) => {\n const isDesktop = listOrEvent.matches;\n this.scrollEventsEnabled = !isDesktop;\n };\n enableScrollEvents(mediaQuery);\n mediaQuery.onchange = enableScrollEvents;\n // Runs scroll subscription outside zone to avoid excessive amount of CD cycles\n // when ionScroll emits.\n this.zone.runOutsideAngular(() => {\n // Always subscribe as ionScroll only emits when scrollEventsEnabled is true\n this.ionContent.ionScroll\n .pipe(debounceTime(contentScrollDebounceTimeInMS), map((event) => event.detail), takeUntil(this.destroy$))\n .subscribe((scrollInfo) => {\n const contentScrolledPastOffset = scrollInfo.scrollTop > contentScrolledOffsetInPixels;\n if (contentScrolledPastOffset !== this.isContentScrolled) {\n this.isContentScrolled = contentScrolledPastOffset;\n this.changeDetector.detectChanges();\n }\n });\n });\n }\n observeTitleContentChanges() {\n this.mutationObserverUnobserveFn = observeContent(this.ionTitleElement.nativeElement, this.setAriaLabelFromTitleContent);\n }\n setAriaLabel() {\n const ariaLabel = this.config.htmlAttributes?.['aria-label'];\n const ionModalElementDialog = getIonModalDialogAncestor(this.ionModalElement);\n if (ionModalElementDialog && ariaLabel) {\n this.renderer.setAttribute(ionModalElementDialog, 'aria-label', ariaLabel);\n }\n else {\n this.setAriaLabelFromTitleContent();\n this.observeTitleContentChanges();\n }\n }\n focusTitleOnDidPresent() {\n this.ionModalDidPresent.pipe(takeUntil(this.willClose$)).subscribe(() => {\n this.focusTitle();\n });\n }\n focusTitle() {\n // Use queueMicrotask to defer our focus until after Ionic has saved a reference\n // to the element that should have focus restored when modal is closed.\n // https://github.com/ionic-team/ionic-framework/blob/v8.6.1/core/src/utils/overlays.ts#L592\n queueMicrotask(() => {\n const focusAlreadyInModalContent = this.ionContentElement?.nativeElement.contains(document.activeElement);\n if (focusAlreadyInModalContent)\n return;\n this.ionTitleElement?.nativeElement.focus();\n });\n }\n scrollToTop(scrollDuration) {\n this.ionContent.scrollToTop(scrollDuration || 0);\n }\n scrollToBottom(scrollDuration) {\n this.ionContent.scrollToBottom(scrollDuration || 0);\n }\n async close(data) {\n if (!this.ionModalElement) {\n return;\n }\n if (!this.keyboardVisible || !this.viewportResized) {\n // No keyboard visible or viewport not resized:\n // Dismiss modal and return:\n clearTimeout(this.delayedCloseTimeoutId);\n await this.ionModalElement.dismiss(data);\n return;\n }\n // Keyboard visible:\n // Blur active element and wait for keyboard to hide,\n // then dismiss modal and return:\n this.blurActiveElement();\n return new Promise((resolve) => {\n this.delayedClose = async () => {\n await this.ionModalElement.dismiss(data);\n resolve();\n };\n this.delayedCloseTimeoutId = setTimeout(this.delayedClose, ModalWrapperComponent.KEYBOARD_HIDE_DELAY_IN_MS);\n });\n }\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing backwards (with shift+tab):\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n _onKeyboardShow(keyboardHeight) {\n this.setKeyboardVisibility(keyboardHeight);\n }\n _onKeyboardHide() {\n this.setKeyboardVisibility(0);\n }\n toggleContentMaxHeight(freeze) {\n const shouldToggleMaxHeight = this.config.flavor === 'modal' && this.platform.isPhabletOrBigger();\n if (!shouldToggleMaxHeight)\n return;\n const style = 'max-height';\n const contentElement = this.ionContentElement.nativeElement;\n this.zone.run(() => {\n if (freeze) {\n const contentHeight = contentElement.offsetHeight;\n this.renderer.setStyle(contentElement, style, `${contentHeight}px`);\n }\n else {\n this.renderer.removeStyle(contentElement, style);\n }\n });\n }\n setKeyboardVisibility(keyboardHeight) {\n const keyboardAlreadyVisible = keyboardHeight > 0 && this.keyboardVisible;\n const keyboardAlreadyHidden = keyboardHeight === 0 && !this.keyboardVisible;\n if (keyboardAlreadyVisible || keyboardAlreadyHidden)\n return;\n this.keyboardVisible = keyboardHeight > 0;\n this.toggleContentMaxHeight(this.keyboardVisible);\n this.setKeyboardOverlap(keyboardHeight);\n }\n getKeyboardOverlap(keyboardHeight, element) {\n if (keyboardHeight <= 0 || !element)\n return 0;\n const distanceFromViewportBottomToElement = Math.floor(this.windowRef.nativeWindow.innerHeight - element.getBoundingClientRect().bottom);\n return Math.max(keyboardHeight - distanceFromViewportBottomToElement, 0);\n }\n setCssVar(element, property, value) {\n this.zone.run(() => this.renderer.setStyle(element, property, value, RendererStyleFlags2.DashCase));\n }\n toggleCssClass(element, klass, condition) {\n this.zone.run(() => condition ? this.renderer.addClass(element, klass) : this.renderer.removeClass(element, klass));\n }\n setKeyboardOverlap(keyboardHeight) {\n this.toggleCssClass(this.elementRef.nativeElement, 'keyboard-visible', keyboardHeight > 0);\n const keyboardOverlap = this.getKeyboardOverlap(keyboardHeight, this.elementRef.nativeElement);\n let snapFooterToKeyboard = false;\n const embeddedFooterElement = this.currentFooter;\n if (embeddedFooterElement) {\n this.setCssVar(embeddedFooterElement, '--keyboard-offset', `${keyboardOverlap}px`);\n snapFooterToKeyboard = embeddedFooterElement.classList.contains('snap-to-keyboard');\n }\n const contentElement = this.ionContentElement.nativeElement;\n const contentKeyboardOffset = snapFooterToKeyboard\n ? keyboardOverlap\n : this.getKeyboardOverlap(keyboardHeight, contentElement);\n this.setCssVar(contentElement, '--keyboard-offset', `${contentKeyboardOffset}px`);\n }\n onHeaderTouchStart(event) {\n if (this.keyboardVisible) {\n const isToolbarButtonTouch = this.toolbarButtons.some((button) => {\n return (event.target instanceof HTMLElement &&\n (event.target === button || button.contains(event.target)));\n });\n // Prevent blur if event target is a toolbar button\n // (to allow tap event to fire):\n if (!isToolbarButtonTouch) {\n this.blurActiveElement();\n }\n }\n }\n _onWindowResize() {\n this.setViewportHeight();\n }\n setViewportHeight() {\n const vh = (this.windowRef.nativeWindow.innerHeight * 0.01).toFixed(2);\n this.setCssVar(this.elementRef.nativeElement, '--vh', `${vh}px`);\n }\n observeViewportResize() {\n this.resizeObserverService.observe(this.windowRef.nativeWindow.document.body, (entry) => this.onViewportResize(entry));\n }\n onViewportResize(entry) {\n if (!this.initialViewportHeight) {\n // Initial observe callback, register initial height:\n this.initialViewportHeight = entry.contentRect.height;\n return;\n }\n this.viewportResized = entry.contentRect.height !== this.initialViewportHeight;\n if (!this.viewportResized) {\n // We are back to initial view port height, check for pending close func:\n if (this.delayedCloseTimeoutId) {\n clearTimeout(this.delayedCloseTimeoutId);\n this.delayedClose();\n }\n }\n this.viewportResize.next();\n }\n blurActiveElement() {\n const BLUR_TARGET_SELECTOR = 'input, textarea';\n if (this.keyboardVisible) {\n if (document.activeElement instanceof HTMLElement &&\n document.activeElement.matches(BLUR_TARGET_SELECTOR)) {\n document.activeElement.blur();\n }\n }\n }\n createModalWrapperIntersectionObserver() {\n const callback = (entries) => {\n const entry = entries[0];\n const isTouchingViewport = entry.intersectionRatio < 1;\n if (isTouchingViewport) {\n this.ionModalElement.classList.add('full-height');\n }\n else {\n this.ionModalElement.classList.remove('full-height');\n }\n };\n // Set explicit viewport root if within iframe:\n const root = this.windowRef.nativeWindow.frameElement\n ? this.windowRef.nativeWindow.document // Cast to `any` as Typescript lib.d.ts doesnt support Document type yet\n : undefined;\n const options = {\n rootMargin: '0px 0px -1px 0px', // `bottom: -1px` allows checking when the modal bottom is touching the viewport\n root,\n threshold: [0.99, 1],\n };\n return new IntersectionObserver(callback, options);\n }\n ngOnDestroy() {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n //clean up the observer\n this.mutationObserverUnobserveFn?.();\n this.intersectionObserver.disconnect();\n delete this._intersectionObserver;\n if (this.resizeObserverService) {\n this.resizeObserverService.unobserve(this.windowRef.nativeWindow.document.body);\n this.resizeObserverService.unobserve(this.ionHeaderElement.nativeElement);\n this.resizeObserverService.unobserve(this.currentFooter);\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.ResizeObserverService }, { token: i2.WindowRef }, { token: i3.PlatformService }, { token: i4.CanDismissHelper }, { token: i0.EnvironmentInjector }, { token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.13\", type: ModalWrapperComponent, isStandalone: true, selector: \"kirby-modal-wrapper\", inputs: { scrollDisabled: \"scrollDisabled\", config: \"config\", content: \"content\" }, host: { listeners: { \"window:focus\": \"onFocusChange()\", \"window:focusout\": \"onFocusChange()\", \"window:ionKeyboardDidShow\": \"_onKeyboardShow($event.detail.keyboardHeight)\", \"window:keyboardWillShow\": \"_onKeyboardShow($event.keyboardHeight)\", \"window:ionKeyboardDidHide\": \"_onKeyboardHide()\", \"window:keyboardWillHide\": \"_onKeyboardHide()\", \"window:resize\": \"_onWindowResize()\" }, properties: { \"class.collapsible-title\": \"this._hasCollapsibleTitle\", \"class.drawer\": \"this._isDrawer\" } }, providers: [\n { provide: Modal, useExisting: ModalWrapperComponent },\n { provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },\n ], queries: [{ propertyName: \"templateRef\", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: \"ionContent\", first: true, predicate: IonContent, descendants: true, static: true }, { propertyName: \"ionContentElement\", first: true, predicate: IonContent, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionHeaderElement\", first: true, predicate: IonHeader, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionToolbarElement\", first: true, predicate: IonToolbar, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionTitleElement\", first: true, predicate: IonTitle, descendants: true, read: ElementRef, static: true }, { propertyName: \"routerOutlet\", first: true, predicate: RouterOutlet, descendants: true, static: true }, { propertyName: \"_contentTitleElement\", first: true, predicate: [\"contentTitle\"], descendants: true, read: ElementRef }, { propertyName: \"toolbarButtonsQuery\", predicate: ButtonComponent, descendants: true, read: ElementRef }], ngImport: i0, template: \"<ion-header\\n role=\\\"presentation\\\"\\n [class.content-scrolled]=\\\"isContentScrolled\\\"\\n (touchstart)=\\\"onHeaderTouchStart($event)\\\"\\n>\\n <ion-toolbar>\\n <ion-title role=\\\"heading\\\" aria-level=\\\"2\\\" tabindex=\\\"-1\\\"></ion-title>\\n @if (config.flavor === 'drawer' && config.drawerSupplementaryAction) {\\n <ion-buttons slot=\\\"secondary\\\">\\n <button\\n kirby-button\\n attentionLevel=\\\"3\\\"\\n size=\\\"md\\\"\\n (click)=\\\"config.drawerSupplementaryAction.action($event)\\\"\\n >\\n <kirby-icon [name]=\\\"config.drawerSupplementaryAction.iconName\\\"></kirby-icon>\\n </button>\\n </ion-buttons>\\n }\\n <ion-buttons slot=\\\"primary\\\">\\n <button\\n kirby-button\\n attentionLevel=\\\"3\\\"\\n size=\\\"md\\\"\\n [noDecoration]=\\\"config.interactWithBackground\\\"\\n [attr.aria-label]=\\\"translations.get('close')\\\"\\n (click)=\\\"close()\\\"\\n >\\n <kirby-icon name=\\\"close\\\"></kirby-icon>\\n </button>\\n </ion-buttons>\\n </ion-toolbar>\\n</ion-header>\\n\\n<ion-content [scrollEvents]=\\\"scrollEventsEnabled\\\">\\n @if (_hasCollapsibleTitle) {\\n <ion-header collapse=\\\"condense\\\">\\n <ion-toolbar>\\n <span class=\\\"kirby-text-xlarge\\\" #contentTitle></span>\\n </ion-toolbar>\\n </ion-header>\\n }\\n\\n <!-- Outlet for ModalController -->\\n <ng-container\\n *ngComponentOutlet=\\\"config.component; injector: componentPropsInjector\\\"\\n ></ng-container>\\n\\n <!-- Outlet for projected content -->\\n <ng-container *ngTemplateOutlet=\\\"content; injector: modalWrapperInjector\\\"></ng-container>\\n\\n <!-- Outlet for route-based modal -->\\n <router-outlet\\n name=\\\"kirbyModalWrapperOutlet\\\"\\n [style.visibility]=\\\"config.modalRoute ? 'visible' : 'hidden'\\\"\\n ></router-outlet>\\n</ion-content>\\n\", styles: [\"ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\\\"100%\\\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\\\"100%\\\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top, 0)}@media (min-width: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\\n\"], dependencies: [{ kind: \"ngmodule\", type: RouterModule }, { kind: \"directive\", type: i5.RouterOutlet, selector: \"router-outlet\", inputs: [\"name\", \"routerOutletData\"], outputs: [\"activate\", \"deactivate\", \"attach\", \"detach\"], exportAs: [\"outlet\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kirby-button],Button[kirby-button],a[kirby-button]\", inputs: [\"attentionLevel\", \"noDecoration\", \"themeColor\", \"expand\", \"isFloating\", \"size\", \"showIconOnly\"] }, { kind: \"component\", type: IconComponent, selector: \"kirby-icon\", inputs: [\"size\", \"name\"] }, { kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i6.NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }, { kind: \"directive\", type: i6.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: IonHeader, selector: \"ion-header\", inputs: [\"collapse\", \"mode\", \"translucent\"] }, { kind: \"component\", type: IonToolbar, selector: \"ion-toolbar\", inputs: [\"color\", \"mode\"] }, { kind: \"component\", type: IonTitle, selector: \"ion-title\", inputs: [\"color\", \"size\"] }, { kind: \"component\", type: IonButtons, selector: \"ion-buttons\", inputs: [\"collapse\"] }, { kind: \"component\", type: IonContent, selector: \"ion-content\", inputs: [\"color\", \"fixedSlotPlacement\", \"forceOverscroll\", \"fullscreen\", \"scrollEvents\", \"scrollX\", \"scrollY\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalWrapperComponent, decorators: [{\n type: Component,\n args: [{ imports: [\n RouterModule,\n ButtonComponent,\n IconComponent,\n CommonModule,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonButtons,\n IonContent,\n ], selector: 'kirby-modal-wrapper', providers: [\n { provide: Modal, useExisting: ModalWrapperComponent },\n { provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },\n ], template: \"<ion-header\\n role=\\\"presentation\\\"\\n [class.content-scrolled]=\\\"isContentScrolled\\\"\\n (touchstart)=\\\"onHeaderTouchStart($event)\\\"\\n>\\n <ion-toolbar>\\n <ion-title role=\\\"heading\\\" aria-level=\\\"2\\\" tabindex=\\\"-1\\\"></ion-title>\\n @if (config.flavor === 'drawer' && config.drawerSupplementaryAction) {\\n <ion-buttons slot=\\\"secondary\\\">\\n <button\\n kirby-button\\n attentionLevel=\\\"3\\\"\\n size=\\\"md\\\"\\n (click)=\\\"config.drawerSupplementaryAction.action($event)\\\"\\n >\\n <kirby-icon [name]=\\\"config.drawerSupplementaryAction.iconName\\\"></kirby-icon>\\n </button>\\n </ion-buttons>\\n }\\n <ion-buttons slot=\\\"primary\\\">\\n <button\\n kirby-button\\n attentionLevel=\\\"3\\\"\\n size=\\\"md\\\"\\n [noDecoration]=\\\"config.interactWithBackground\\\"\\n [attr.aria-label]=\\\"translations.get('close')\\\"\\n (click)=\\\"close()\\\"\\n >\\n <kirby-icon name=\\\"close\\\"></kirby-icon>\\n </button>\\n </ion-buttons>\\n </ion-toolbar>\\n</ion-header>\\n\\n<ion-content [scrollEvents]=\\\"scrollEventsEnabled\\\">\\n @if (_hasCollapsibleTitle) {\\n <ion-header collapse=\\\"condense\\\">\\n <ion-toolbar>\\n <span class=\\\"kirby-text-xlarge\\\" #contentTitle></span>\\n </ion-toolbar>\\n </ion-header>\\n }\\n\\n <!-- Outlet for ModalController -->\\n <ng-container\\n *ngComponentOutlet=\\\"config.component; injector: componentPropsInjector\\\"\\n ></ng-container>\\n\\n <!-- Outlet for projected content -->\\n <ng-container *ngTemplateOutlet=\\\"content; injector: modalWrapperInjector\\\"></ng-container>\\n\\n <!-- Outlet for route-based modal -->\\n <router-outlet\\n name=\\\"kirbyModalWrapperOutlet\\\"\\n [style.visibility]=\\\"config.modalRoute ? 'visible' : 'hidden'\\\"\\n ></router-outlet>\\n</ion-content>\\n\", styles: [\"ion-header{box-sizing:border-box}ion-header ion-toolbar{--padding-start: 8px;--padding-end: 8px;--padding-bottom: 7px;--padding-top: 8px;--border-width: 0;--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));border-bottom:1px solid transparent;transition:border-color .2s linear}@media (min-width: 768px){ion-header ion-toolbar{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-header ion-toolbar button{color:var(--color)}:host{--vh100: var(--vh, 1vh) * 100;--header-height: 0px;--footer-height: 0px}@media (max-width: 767px){:host.drawer ion-header ion-toolbar{--padding-top: 16px}:host.drawer ion-header ion-toolbar:first-of-type{padding-top:0}}@media (min-width: 768px){ion-header ion-toolbar{border-bottom-color:var(--kirby-medium)}}ion-header.content-scrolled ion-toolbar{border-bottom-color:var(--kirby-medium)}:host-context(ion-modal.no-header-area-border) ion-header ion-toolbar{border-bottom-color:transparent}@media (max-width: 767px){:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)) ion-content::part(scroll){height:\\\"100%\\\";position:relative}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer:not(.kirby-modal-full-height)).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}}:host-context(ion-modal.kirby-drawer.interact-with-background){padding-top:0;position:relative;contain:inherit;min-height:min(var(--min-height),var(--vh100) - var(--kirby-modal-padding-top, 0px))}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-content{contain:content;max-height:calc(var(--vh100) - var(--kirby-modal-padding-top, 0px) - var(--header-height) - var(--footer-height))}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-content::part(scroll){height:\\\"100%\\\";position:relative}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer ion-content::part(scroll){transition:padding-bottom .15s ease-out}:host-context(ion-modal.kirby-drawer.interact-with-background).drawer.keyboard-visible ion-content::part(scroll){transition:padding-bottom .25s ease-out 1ms}:host-context(ion-modal.kirby-drawer.interact-with-background) ion-header ion-toolbar{border-bottom-color:transparent}:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{padding-top:var(--kirby-safe-area-top, 0)}@media (min-width: 768px){:host-context(ion-modal.modal-card:not(.kirby-drawer)) ion-header ion-toolbar:first-of-type{--padding-start: 24px;--padding-end: 24px;--padding-bottom: 23px;--padding-top: 24px;padding-inline:0}}ion-title{box-sizing:border-box;padding-inline:calc(48px + var(--padding-start)) calc(48px + var(--padding-end));font-size:16px;font-weight:700}ion-content{--background: transparent;--color: var(--kirby-modal-color, var(--kirby-black));--padding-top: 24px;--padding-bottom: 24px;--padding-start: 16px;--padding-end: 16px;display:flex;flex-direction:column;height:calc(var(--height) - var(--header-height) - var(--footer-height));max-height:calc(var(--max-height) - var(--header-height) - var(--footer-height))}ion-content ::ng-deep>*{box-sizing:border-box;display:block}@media (min-width: 768px){ion-content{--padding-start: 48px;--padding-end: 48px}}:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-top: 0px;--padding-bottom: 32px;--padding-start: 8px;--padding-end: 8px;border:none}@media (min-width: 768px){:host(.collapsible-title) ion-content ion-toolbar:first-of-type{--padding-start: 16px;--padding-end: 16px}}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.ResizeObserverService }, { type: i2.WindowRef }, { type: i3.PlatformService }, { type: i4.CanDismissHelper }, { type: i0.EnvironmentInjector }, { type: i1.TranslationService }], propDecorators: { _hasCollapsibleTitle: [{\n type: HostBinding,\n args: ['class.collapsible-title']\n }], scrollDisabled: [{\n type: Input\n }], config: [{\n type: Input\n }], content: [{\n type: Input\n }], templateRef: [{\n type: ContentChild,\n args: [TemplateRef]\n }], toolbarButtonsQuery: [{\n type: ViewChildren,\n args: [ButtonComponent, { read: ElementRef }]\n }], ionContent: [{\n type: ViewChild,\n args: [IonContent, { static: true }]\n }], ionContentElement: [{\n type: ViewChild,\n args: [IonContent, { static: true, read: ElementRef }]\n }], ionHeaderElement: [{\n type: ViewChild,\n args: [IonHeader, { static: true, read: ElementRef }]\n }], ionToolbarElement: [{\n type: ViewChild,\n args: [IonToolbar, { static: true, read: ElementRef }]\n }], ionTitleElement: [{\n type: ViewChild,\n args: [IonTitle, { static: true, read: ElementRef }]\n }], routerOutlet: [{\n type: ViewChild,\n args: [RouterOutlet, { static: true }]\n }], _contentTitleElement: [{\n type: ViewChild,\n args: ['contentTitle', { read: ElementRef }]\n }], _isDrawer: [{\n type: HostBinding,\n args: ['class.drawer']\n }], onFocusChange: [{\n type: HostListener,\n args: ['window:focus']\n }, {\n type: HostListener,\n args: ['window:focusout']\n }], _onKeyboardShow: [{\n type: HostListener,\n args: ['window:ionKeyboardDidShow', ['$event.detail.keyboardHeight']]\n }, {\n type: HostListener,\n args: ['window:keyboardWillShow', ['$event.keyboardHeight']]\n }], _onKeyboardHide: [{\n type: HostListener,\n args: ['window:ionKeyboardDidHide']\n }, {\n type: HostListener,\n args: ['window:keyboardWillHide']\n }], _onWindowResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2RhbC9zcmMvbW9kYWwtd3JhcHBlci9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC13cmFwcGVyL21vZGFsLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUVWLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFNTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFrQixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUlqRyxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLG1DQUFtQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFDTCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFNBQVMsRUFDVCxRQUFRLEVBQ1IsVUFBVSxHQUVYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEtBQUssRUFB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WTt1QkFBQyxjQUFjOztzQkFDM0IsWUFBWTt1QkFBQyxpQkFBaUI7O3NCQU05QixZQUFZO3VCQUFDLDJCQUEyQixFQUFFLENBQUMsOEJBQThCLENBQUM7O3NCQUMxRSxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsdUJBQXVCLENBQUM7O3NCQUtqRSxZQUFZO3VCQUFDLDJCQUEyQjs7c0JBQ3hDLFlBQVk7dUJBQUMseUJBQXlCOztzQkFtRnRDLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlyc3QsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEZXNpZ25Ub2tlbkhlbHBlciwgZ2V0SW9uTW9kYWxEaWFsb2dBbmNlc3RvciB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5cbmltcG9ydCB7IFJlc2l6ZU9ic2VydmVyU2VydmljZSwgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVW5vYnNlcnZlRm4sIFdpbmRvd1JlZiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdHlwZXMnO1xuaW1wb3J0IHsgb2JzZXJ2ZUNvbnRlbnQsIFBsYXRmb3JtU2VydmljZSB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaWNvbic7XG5pbXBvcnQgeyBLaXJieUFuaW1hdGlvbiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2J1dHRvbic7XG5cbmltcG9ydCB7XG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uVGl0bGUsXG4gIElvblRvb2xiYXIsXG4gIFNjcm9sbERldGFpbCxcbn0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBNb2RhbCwgTW9kYWxFbGVtZW50c0FkdmVydGlzZXIsIE1vZGFsRWxlbWVudFR5cGUgfSBmcm9tICcuLi9tb2RhbC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IENhbkRpc21pc3NIZWxwZXIgfSBmcm9tICcuLi9tb2RhbC9zZXJ2aWNlcy9jYW4tZGlzbWlzcy5oZWxwZXInO1xuaW1wb3J0IHsgTW9kYWxDb25maWcsIFNob3dBbGVydENhbGxiYWNrIH0gZnJvbSAnLi9jb25maWcvbW9kYWwtY29uZmlnJztcbmltcG9ydCB7IENPTVBPTkVOVF9QUk9QUyB9IGZyb20gJy4vY29uZmlnL21vZGFsLWNvbmZpZy5oZWxwZXInO1xuaW1wb3J0IHsgTW9kYWxFbGVtZW50c01vdmVyRGVsZWdhdGUgfSBmcm9tICcuL21vZGFsLWVsZW1lbnRzLW1vdmVyLmRlbGVnYXRlJztcblxuY29uc3QgY29udGVudFNjcm9sbERlYm91bmNlVGltZUluTVMgPSAxMDtcbmNvbnN0IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzID0gNDtcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEljb25Db21wb25lbnQsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvblRpdGxlLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQ29udGVudCxcbiAgXSxcbiAgc2VsZWN0b3I6ICdraXJieS1tb2RhbC13cmFwcGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC13cmFwcGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogTW9kYWwsIHVzZUV4aXN0aW5nOiBNb2RhbFdyYXBwZXJDb21wb25lbnQgfSxcbiAgICB7IHByb3ZpZGU6IE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLCB1c2VFeGlzdGluZzogTW9kYWxXcmFwcGVyQ29tcG9uZW50IH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsV3JhcHBlckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE1vZGFsLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgTW9kYWxFbGVtZW50c0FkdmVydGlzZXJcbntcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2xsYXBzaWJsZS10aXRsZScpXG4gIGdldCBfaGFzQ29sbGFwc2libGVUaXRsZSgpIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZz8uY29sbGFwc2VUaXRsZTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBLRVlCT0FSRF9ISURFX0RFTEFZX0lOX01TID0gMTAwO1xuXG4gIHNjcm9sbFk6IG51bWJlciA9IE1hdGguYWJzKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5zY3JvbGxZKTtcbiAgcHJpdmF0ZSByZWFkb25seSBWSUVXUE9SVF9SRVNJWkVfREVCT1VOQ0VfVElNRSA9IDEwMDtcblxuICBASW5wdXQoKSBzZXQgc2Nyb2xsRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlvbkNvbnRlbnQuc2Nyb2xsWSA9ICFkaXNhYmxlZDtcbiAgfVxuXG4gIHNldCBjYW5EaXNtaXNzKGNhbGxiYWNrOiBTaG93QWxlcnRDYWxsYmFjaykge1xuICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50LmNhbkRpc21pc3MgPSB0aGlzLmNhbkRpc21pc3NIZWxwZXIuZ2V0Q2FuRGlzbWlzc0NhbGxiYWNrKGNhbGxiYWNrKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNvbmZpZzogTW9kYWxDb25maWc7XG4gIEBJbnB1dCgpIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29tcG9uZW50UHJvcHNJbmplY3RvcjogSW5qZWN0b3I7XG4gIG1vZGFsV3JhcHBlckluamVjdG9yOiBJbmplY3RvcjtcblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkcmVuKEJ1dHRvbkNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgdG9vbGJhckJ1dHRvbnNRdWVyeTogUXVlcnlMaXN0PFxuICAgIEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+XG4gID47XG4gIEBWaWV3Q2hpbGQoSW9uQ29udGVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAVmlld0NoaWxkKElvbkNvbnRlbnQsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uQ29udGVudEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTElvbkNvbnRlbnRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25IZWFkZXIsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgaW9uSGVhZGVyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uSGVhZGVyRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoSW9uVG9vbGJhciwgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBpb25Ub29sYmFyRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVG9vbGJhckVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKElvblRpdGxlLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIGlvblRpdGxlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uVGl0bGVFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChSb3V0ZXJPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcm91dGVyT3V0bGV0OiBSb3V0ZXJPdXRsZXQ7XG5cbiAgQFZpZXdDaGlsZCgnY29udGVudFRpdGxlJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHByaXZhdGUgX2NvbnRlbnRUaXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIGdldCBjb250ZW50VGl0bGVFbGVtZW50KCk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHtcbiAgICAvKlxuICAgICAgICBjb250ZW50VGl0bGVFbGVtZW50IGhhcyBuZ0lmIGRpcmVjdGl2ZSBkZXBlbmRlbnQgb24gX2hhc0NvbGxhcHNpYmxlVGl0bGU7IHRyaWdnZXIgQ0QgdG8gbWFrZSBzdXJlIGVsZW1lbnQgaGFzIGJlZW4gcXVlcmllZC5cbiAgICAgICAgU29sdXRpb24gdGFrZW4gZnJvbTogaHR0cHM6Ly9kYW5pZWxleWFzc3UuY29tL2FuZ3VsYXItdmlld2NoaWxkLWFuZC1uZ2lmL1xuICAgICAgKi9cbiAgICBpZiAoIXRoaXMuX2NvbnRlbnRUaXRsZUVsZW1lbnQgJiYgdGhpcy5faGFzQ29sbGFwc2libGVUaXRsZSkge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb250ZW50VGl0bGVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBrZXlib2FyZFZpc2libGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b29sYmFyQnV0dG9uczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZSA9ICgpID0+IHt9O1xuICBwcml2YXRlIGRlbGF5ZWRDbG9zZVRpbWVvdXRJZDtcbiAgcHJpdmF0ZSBpbml0aWFsVmlld3BvcnRIZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpb25Nb2RhbEVsZW1lbnQ/OiBIVE1MSW9uTW9kYWxFbGVtZW50O1xuICBwcml2YXRlIGlvbk1vZGFsRGlhbG9nPzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9uTW9kYWxEaWRQcmVzZW50ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgZGlkUHJlc2VudCA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb25Nb2RhbFdpbGxEaXNtaXNzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzKTtcbiAgcHJpdmF0ZSB2aWV3cG9ydFJlc2l6ZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdmlld3BvcnRSZXNpemUkID0gdGhpcy52aWV3cG9ydFJlc2l6ZVxuICAgIC5hc09ic2VydmFibGUoKVxuICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLlZJRVdQT1JUX1JFU0laRV9ERUJPVU5DRV9USU1FKSk7XG4gIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlclVub2JzZXJ2ZUZuOiBVbm9ic2VydmVGbjtcbiAgcHJpdmF0ZSBfaW50ZXJzZWN0aW9uT2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIGdldCBpbnRlcnNlY3Rpb25PYnNlcnZlcigpOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgaWYgKCF0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5faW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSB0aGlzLmNyZWF0ZU1vZGFsV3JhcHBlckludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgfVxuICBzY3JvbGxFdmVudHNFbmFibGVkOiBib29sZWFuO1xuICBpc0NvbnRlbnRTY3JvbGxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kcmF3ZXInKVxuICBnZXQgX2lzRHJhd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInO1xuICB9XG5cbiAgd2lsbENsb3NlJCA9IHRoaXMuaW9uTW9kYWxXaWxsRGlzbWlzcy5waXBlKGZpcnN0KCkpO1xuXG4gIHByaXZhdGUgbW9kYWxFbGVtZW50c01vdmVyRGVsZWdhdGU6IE1vZGFsRWxlbWVudHNNb3ZlckRlbGVnYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZixcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYW5EaXNtaXNzSGVscGVyOiBDYW5EaXNtaXNzSGVscGVyLFxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBwdWJsaWMgdHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zZXRWaWV3cG9ydEhlaWdodCgpO1xuICAgIHRoaXMub2JzZXJ2ZVZpZXdwb3J0UmVzaXplKCk7XG4gICAgdGhpcy5tb2RhbEVsZW1lbnRzTW92ZXJEZWxlZ2F0ZSA9IG5ldyBNb2RhbEVsZW1lbnRzTW92ZXJEZWxlZ2F0ZShyZW5kZXJlciwgZWxlbWVudFJlZik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlvbk1vZGFsRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2lvbi1tb2RhbCcpO1xuICAgIHRoaXMuaW9uTW9kYWxEaWFsb2cgPSBnZXRJb25Nb2RhbERpYWxvZ0FuY2VzdG9yKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLmluaXRpYWxpemVTaXppbmcoKTtcbiAgICB0aGlzLmluaXRpYWxpemVNb2RhbFJvdXRlKCk7XG4gICAgdGhpcy5saXN0ZW5Gb3JJb25Nb2RhbERpZFByZXNlbnQoKTtcbiAgICB0aGlzLmxpc3RlbkZvcklvbk1vZGFsV2lsbERpc21pc3MoKTtcbiAgICB0aGlzLmxpc3RlbkZvclNjcm9sbCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZU1vZGFsVG9Nb2RhbFdyYXBwZXIoKTtcbiAgICB0aGlzLmZvY3VzVGl0bGVPbkRpZFByZXNlbnQoKTtcbiAgICB0aGlzLmNvbXBvbmVudFByb3BzSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDT01QT05FTlRfUFJPUFMsIHVzZVZhbHVlOiB0aGlzLmNvbmZpZy5jb21wb25lbnRQcm9wcyB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcblxuICAgIHRoaXMubW9kYWxXcmFwcGVySW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlciwgdXNlRXhpc3Rpbmc6IE1vZGFsV3JhcHBlckNvbXBvbmVudCB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sYmFyQnV0dG9uc1F1ZXJ5KSB7XG4gICAgICB0aGlzLnRvb2xiYXJCdXR0b25zID0gdGhpcy50b29sYmFyQnV0dG9uc1F1ZXJ5Lm1hcCgoYnV0dG9uUmVmKSA9PiBidXR0b25SZWYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRBcmlhTGFiZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2N1cnJlbnRGb290ZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzZXQgY3VycmVudEZvb3Rlcihmb290ZXI6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50Rm9vdGVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5fY3VycmVudEZvb3Rlcik7XG4gICAgfVxuICAgIHRoaXMuX2N1cnJlbnRGb290ZXIgPSBmb290ZXI7XG4gICAgaWYgKGZvb3RlciAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZShmb290ZXIsIChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBbcHJvcGVydHksIHBpeGVsVmFsdWVdID0gW1xuICAgICAgICAgICctLWZvb3Rlci1oZWlnaHQnLFxuICAgICAgICAgIGAke01hdGguZmxvb3IoZW50cnkuY29udGVudFJlY3QuaGVpZ2h0KX1weGAsXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuc2V0Q3NzVmFyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwcm9wZXJ0eSwgcGl4ZWxWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50Rm9vdGVyID0gZm9vdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZvb3RlcigpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50Rm9vdGVyO1xuICB9XG5cbiAgcHVibGljIGFkZE1vZGFsRWxlbWVudCh0eXBlOiBNb2RhbEVsZW1lbnRUeXBlLCBtb2RhbEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgYWRkTW9kYWxFbGVtZW50Rm4gPSB7XG4gICAgICBbTW9kYWxFbGVtZW50VHlwZS5GT09URVJdOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxFbGVtZW50c01vdmVyRGVsZWdhdGUuYWRkRm9vdGVyKG1vZGFsRWxlbWVudCk7XG4gICAgICAgIHRoaXMuY3VycmVudEZvb3RlciA9IG1vZGFsRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgfSxcbiAgICAgIFtNb2RhbEVsZW1lbnRUeXBlLlRJVExFXTogKCkgPT5cbiAgICAgICAgdGhpcy5tb2RhbEVsZW1lbnRzTW92ZXJEZWxlZ2F0ZS5hZGRUaXRsZShcbiAgICAgICAgICBtb2RhbEVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5jb250ZW50VGl0bGVFbGVtZW50LFxuICAgICAgICAgIHRoaXMuX2hhc0NvbGxhcHNpYmxlVGl0bGUsXG4gICAgICAgICAgdGhpcy5pb25UaXRsZUVsZW1lbnRcbiAgICAgICAgKSxcbiAgICAgIFtNb2RhbEVsZW1lbnRUeXBlLlBBR0VfUFJPR1JFU1NdOiAoKSA9PlxuICAgICAgICB0aGlzLm1vZGFsRWxlbWVudHNNb3ZlckRlbGVnYXRlLmFkZFBhZ2VQcm9ncmVzcyhtb2RhbEVsZW1lbnQsIHRoaXMuaW9uVG9vbGJhckVsZW1lbnQpLFxuICAgIH1bdHlwZV07XG5cbiAgICBhZGRNb2RhbEVsZW1lbnRGbigpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZU1vZGFsRWxlbWVudCh0eXBlOiBNb2RhbEVsZW1lbnRUeXBlLCBtb2RhbEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgY29uc3QgcmVtb3ZlTW9kYWxFbGVtZW50Rm4gPSB7XG4gICAgICBbTW9kYWxFbGVtZW50VHlwZS5GT09URVJdOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubW9kYWxFbGVtZW50c01vdmVyRGVsZWdhdGUucmVtb3ZlRm9vdGVyKG1vZGFsRWxlbWVudCk7XG4gICAgICAgIHRoaXMuY3VycmVudEZvb3RlciA9IG51bGw7XG4gICAgICB9LFxuICAgICAgW01vZGFsRWxlbWVudFR5cGUuVElUTEVdOiAoKSA9PlxuICAgICAgICB0aGlzLm1vZGFsRWxlbWVudHNNb3ZlckRlbGVnYXRlLnJlbW92ZVRpdGxlKFxuICAgICAgICAgIG1vZGFsRWxlbWVudCxcbiAgICAgICAgICB0aGlzLl9oYXNDb2xsYXBzaWJsZVRpdGxlLFxuICAgICAgICAgIHRoaXMuY29udGVudFRpdGxlRWxlbWVudFxuICAgICAgICApLFxuICAgICAgW01vZGFsRWxlbWVudFR5cGUuUEFHRV9QUk9HUkVTU106ICgpID0+XG4gICAgICAgIHRoaXMubW9kYWxFbGVtZW50c01vdmVyRGVsZWdhdGUucmVtb3ZlUGFnZVByb2dyZXNzKG1vZGFsRWxlbWVudCksXG4gICAgfVt0eXBlXTtcblxuICAgIHJlbW92ZU1vZGFsRWxlbWVudEZuKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVSZXNpemVNb2RhbFRvTW9kYWxXcmFwcGVyKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdkcmF3ZXInICYmIHRoaXMuY29uZmlnLmludGVyYWN0V2l0aEJhY2tncm91bmQpIHtcbiAgICAgIG1lcmdlKHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50LCB0aGlzLnZpZXdwb3J0UmVzaXplJClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAvLyB3YWl0IGZvciB0ZW1wbGF0ZSB0byByZW5kZXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRvbVJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50ID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZG9jdW1lbnQuY2xpZW50V2lkdGggLSBkb21SZWN0LnJpZ2h0O1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmlvbk1vZGFsRWxlbWVudCwgJ3RvcCcsIGAke2RvbVJlY3QudG9wfXB4YCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW9uTW9kYWxFbGVtZW50LCAnbGVmdCcsIGAke2RvbVJlY3QubGVmdH1weGApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmlvbk1vZGFsRWxlbWVudCwgJ3JpZ2h0JywgYCR7cmlnaHR9cHhgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU2l6aW5nKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5zaXplID09PSAnZnVsbC1oZWlnaHQnKSByZXR1cm47XG4gICAgdGhpcy5wYXRjaFNjcm9sbEVsZW1lbnRTaXplKCk7XG4gICAgdGhpcy5vYnNlcnZlSGVhZGVyUmVzaXplKCk7XG4gICAgdGhpcy5vYnNlcnZlTW9kYWxGdWxsSGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVNb2RhbFJvdXRlKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5tb2RhbFJvdXRlKSB7XG4gICAgICB0aGlzLm9uU2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQodGhpcy5jb25maWcuc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkKTtcbiAgICAgIC8vIExvYWQgY29tcG9uZW50IGZyb20gbW9kYWwtcm91dGUgaW5zaWRlIHJvdXRlci1vdXRsZXQ6XG4gICAgICB0aGlzLnJvdXRlck91dGxldC5hY3RpdmF0ZVdpdGgodGhpcy5jb25maWcubW9kYWxSb3V0ZSwgdGhpcy5lbnZpcm9ubWVudEluamVjdG9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uU2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQoc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkPzogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZT4pIHtcbiAgICBpZiAoIXNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJCkgcmV0dXJuO1xuICAgIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJC5waXBlKHRha2VVbnRpbCh0aGlzLndpbGxDbG9zZSQpKS5zdWJzY3JpYmUoKHJvdXRlKSA9PiB7XG4gICAgICBpZiAodGhpcy5yb3V0ZXJPdXRsZXQuaXNBY3RpdmF0ZWQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuZGVhY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5yb3V0ZXJPdXRsZXQuYWN0aXZhdGVXaXRoKHJvdXRlLCB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpO1xuICAgICAgdGhpcy5mb2N1c1RpdGxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhdGNoU2Nyb2xsRWxlbWVudFNpemUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3VwcG9ydHNDc3NTaGFkb3dQYXJ0cyA9ICdwYXJ0JyBpbiBIVE1MRWxlbWVudC5wcm90b3R5cGU7XG4gICAgaWYgKHN1cHBvcnRzQ3NzU2hhZG93UGFydHMpIHJldHVybjtcbiAgICB0aGlzLmlvbkNvbnRlbnQuZ2V0U2Nyb2xsRWxlbWVudCgpLnRoZW4oKHNjcm9sbEVsZW1lbnQpID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc2Nyb2xsRWxlbWVudCwgJ2hlaWdodCcsICcxMDAlJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHNjcm9sbEVsZW1lbnQsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICBzY3JvbGxFbGVtZW50LFxuICAgICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAgICAncGFkZGluZy1ib3R0b20gJyArIERlc2lnblRva2VuSGVscGVyLnNvZnRLZXlib2FyZFRyYW5zaXRpb25MZWF2ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnNlcnZlTW9kYWxGdWxsSGVpZ2h0KCkge1xuICAgIGNvbnN0IGlvbk1vZGFsV3JhcHBlciA9IHRoaXMuZ2V0SW9uTW9kYWxXcmFwcGVyRWxlbWVudCgpO1xuXG4gICAgaWYgKCFpb25Nb2RhbFdyYXBwZXIpIHJldHVybjtcbiAgICAvLyBTdGFydCBvYnNlcnZpbmcgd2hlbiBtb2RhbCBoYXMgZmluaXNoZWQgYW5pbWF0aW5nOlxuICAgIHRoaXMuZGlkUHJlc2VudC50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShpb25Nb2RhbFdyYXBwZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRXh0cmFjdGVkIGludG8gZnVuY3Rpb24gZm9yIGVhc2Ugb2YgdGVzdGluZ1xuICBwcml2YXRlIGdldElvbk1vZGFsV3JhcHBlckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmlvbk1vZGFsRWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC13cmFwcGVyJyk7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVIZWFkZXJSZXNpemUoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLmlvbkhlYWRlckVsZW1lbnQubmF0aXZlRWxlbWVudCwgKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBbcHJvcGVydHksIHBpeGVsVmFsdWVdID0gWyctLWhlYWRlci1oZWlnaHQnLCBgJHtlbnRyeS5jb250ZW50UmVjdC5oZWlnaHR9cHhgXTtcbiAgICAgIHRoaXMuc2V0Q3NzVmFyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBwcm9wZXJ0eSwgcGl4ZWxWYWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklvbk1vZGFsRGlkUHJlc2VudCgpIHtcbiAgICBpZiAodGhpcy5pb25Nb2RhbEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaW9uTW9kYWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lvbk1vZGFsRGlkUHJlc2VudCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5pb25Nb2RhbERpZFByZXNlbnQubmV4dCgpO1xuICAgICAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JJb25Nb2RhbFdpbGxEaXNtaXNzKCkge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uTW9kYWxXaWxsRGlzbWlzcycsICgpID0+IHtcbiAgICAgICAgdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLm5leHQoKTtcbiAgICAgICAgdGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzLmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvclNjcm9sbCgpIHtcbiAgICBjb25zdCBxdWVyeSA9IGAobWluLXdpZHRoOiAke0Rlc2lnblRva2VuSGVscGVyLmJyZWFrcG9pbnRzLm1lZGl1bX0pYDtcbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93Lm1hdGNoTWVkaWEocXVlcnkpO1xuICAgIGNvbnN0IGVuYWJsZVNjcm9sbEV2ZW50cyA9IChsaXN0T3JFdmVudDogTWVkaWFRdWVyeUxpc3QgfCBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBpc0Rlc2t0b3AgPSBsaXN0T3JFdmVudC5tYXRjaGVzO1xuICAgICAgdGhpcy5zY3JvbGxFdmVudHNFbmFibGVkID0gIWlzRGVza3RvcDtcbiAgICB9O1xuXG4gICAgZW5hYmxlU2Nyb2xsRXZlbnRzKG1lZGlhUXVlcnkpO1xuICAgIG1lZGlhUXVlcnkub25jaGFuZ2UgPSBlbmFibGVTY3JvbGxFdmVudHM7XG5cbiAgICAvLyBSdW5zIHNjcm9sbCBzdWJzY3JpcHRpb24gb3V0c2lkZSB6b25lIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBhbW91bnQgb2YgQ0QgY3ljbGVzXG4gICAgLy8gd2hlbiBpb25TY3JvbGwgZW1pdHMuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIEFsd2F5cyBzdWJzY3JpYmUgYXMgaW9uU2Nyb2xsIG9ubHkgZW1pdHMgd2hlbiBzY3JvbGxFdmVudHNFbmFibGVkIGlzIHRydWVcbiAgICAgIHRoaXMuaW9uQ29udGVudC5pb25TY3JvbGxcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKGNvbnRlbnRTY3JvbGxEZWJvdW5jZVRpbWVJbk1TKSxcbiAgICAgICAgICBtYXAoKGV2ZW50KSA9PiBldmVudC5kZXRhaWwpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbEluZm86IFNjcm9sbERldGFpbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRTY3JvbGxlZFBhc3RPZmZzZXQgPSBzY3JvbGxJbmZvLnNjcm9sbFRvcCA+IGNvbnRlbnRTY3JvbGxlZE9mZnNldEluUGl4ZWxzO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnRTY3JvbGxlZFBhc3RPZmZzZXQgIT09IHRoaXMuaXNDb250ZW50U2Nyb2xsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNDb250ZW50U2Nyb2xsZWQgPSBjb250ZW50U2Nyb2xsZWRQYXN0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVRpdGxlQ29udGVudENoYW5nZXMoKSB7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyVW5vYnNlcnZlRm4gPSBvYnNlcnZlQ29udGVudChcbiAgICAgIHRoaXMuaW9uVGl0bGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnNldEFyaWFMYWJlbEZyb21UaXRsZUNvbnRlbnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBcmlhTGFiZWxGcm9tVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRpdGxlVGV4dENvbnRlbnQgPSB0aGlzLmlvblRpdGxlRWxlbWVudD8ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcbiAgICBpZiAodGhpcy5pb25Nb2RhbERpYWxvZyAmJiB0aXRsZVRleHRDb250ZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmlvbk1vZGFsRGlhbG9nLCAnYXJpYS1sYWJlbCcsIHRpdGxlVGV4dENvbnRlbnQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHNldEFyaWFMYWJlbCgpIHtcbiAgICBjb25zdCBhcmlhTGFiZWwgPSB0aGlzLmNvbmZpZy5odG1sQXR0cmlidXRlcz8uWydhcmlhLWxhYmVsJ107XG4gICAgY29uc3QgaW9uTW9kYWxFbGVtZW50RGlhbG9nID0gZ2V0SW9uTW9kYWxEaWFsb2dBbmNlc3Rvcih0aGlzLmlvbk1vZGFsRWxlbWVudCk7XG5cbiAgICBpZiAoaW9uTW9kYWxFbGVtZW50RGlhbG9nICYmIGFyaWFMYWJlbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW9uTW9kYWxFbGVtZW50RGlhbG9nLCAnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0QXJpYUxhYmVsRnJvbVRpdGxlQ29udGVudCgpO1xuICAgICAgdGhpcy5vYnNlcnZlVGl0bGVDb250ZW50Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNUaXRsZU9uRGlkUHJlc2VudCgpIHtcbiAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5waXBlKHRha2VVbnRpbCh0aGlzLndpbGxDbG9zZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c1RpdGxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBmb2N1c1RpdGxlKCkge1xuICAgIC8vIFVzZSBxdWV1ZU1pY3JvdGFzayB0byBkZWZlciBvdXIgZm9jdXMgdW50aWwgYWZ0ZXIgSW9uaWMgaGFzIHNhdmVkIGEgcmVmZXJlbmNlXG4gICAgLy8gdG8gdGhlIGVsZW1lbnQgdGhhdCBzaG91bGQgaGF2ZSBmb2N1cyByZXN0b3JlZCB3aGVuIG1vZGFsIGlzIGNsb3NlZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvYmxvYi92OC42LjEvY29yZS9zcmMvdXRpbHMvb3ZlcmxheXMudHMjTDU5MlxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGNvbnN0IGZvY3VzQWxyZWFkeUluTW9kYWxDb250ZW50ID0gdGhpcy5pb25Db250ZW50RWxlbWVudD8ubmF0aXZlRWxlbWVudC5jb250YWlucyhcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChmb2N1c0FscmVhZHlJbk1vZGFsQ29udGVudCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLmlvblRpdGxlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9Ub3Aoc2Nyb2xsRHVyYXRpb24/OiBLaXJieUFuaW1hdGlvbi5EdXJhdGlvbikge1xuICAgIHRoaXMuaW9uQ29udGVudC5zY3JvbGxUb1RvcChzY3JvbGxEdXJhdGlvbiB8fCAwKTtcbiAgfVxuXG4gIHNjcm9sbFRvQm90dG9tKHNjcm9sbER1cmF0aW9uPzogS2lyYnlBbmltYXRpb24uRHVyYXRpb24pIHtcbiAgICB0aGlzLmlvbkNvbnRlbnQuc2Nyb2xsVG9Cb3R0b20oc2Nyb2xsRHVyYXRpb24gfHwgMCk7XG4gIH1cblxuICBhc3luYyBjbG9zZShkYXRhPzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMua2V5Ym9hcmRWaXNpYmxlIHx8ICF0aGlzLnZpZXdwb3J0UmVzaXplZCkge1xuICAgICAgLy8gTm8ga2V5Ym9hcmQgdmlzaWJsZSBvciB2aWV3cG9ydCBub3QgcmVzaXplZDpcbiAgICAgIC8vIERpc21pc3MgbW9kYWwgYW5kIHJldHVybjpcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5ZWRDbG9zZVRpbWVvdXRJZCk7XG4gICAgICBhd2FpdCB0aGlzLmlvbk1vZGFsRWxlbWVudC5kaXNtaXNzKGRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIHZpc2libGU6XG4gICAgLy8gQmx1ciBhY3RpdmUgZWxlbWVudCBhbmQgd2FpdCBmb3Iga2V5Ym9hcmQgdG8gaGlkZSxcbiAgICAvLyB0aGVuIGRpc21pc3MgbW9kYWwgYW5kIHJldHVybjpcbiAgICB0aGlzLmJsdXJBY3RpdmVFbGVtZW50KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmRlbGF5ZWRDbG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pb25Nb2RhbEVsZW1lbnQuZGlzbWlzcyhkYXRhKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgdGhpcy5kZWxheWVkQ2xvc2UsXG4gICAgICAgIE1vZGFsV3JhcHBlckNvbXBvbmVudC5LRVlCT0FSRF9ISURFX0RFTEFZX0lOX01TXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3VzJylcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmZvY3Vzb3V0JylcbiAgb25Gb2N1c0NoYW5nZSgpIHtcbiAgICAvLyBUaGlzIGZpeGVzIGFuIHVuZGVzaXJlZCBzY3JvbGwgYmVoYXZpb3VyIG9jY3VycmluZyBvbiBrZXlib2FyZC10YWJiaW5nIGJhY2t3YXJkcyAod2l0aCBzaGlmdCt0YWIpOlxuICAgIHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdGhpcy5zY3JvbGxZIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmlvbktleWJvYXJkRGlkU2hvdycsIFsnJGV2ZW50LmRldGFpbC5rZXlib2FyZEhlaWdodCddKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5Ym9hcmRXaWxsU2hvdycsIFsnJGV2ZW50LmtleWJvYXJkSGVpZ2h0J10pXG4gIF9vbktleWJvYXJkU2hvdyhrZXlib2FyZEhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRLZXlib2FyZFZpc2liaWxpdHkoa2V5Ym9hcmRIZWlnaHQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmlvbktleWJvYXJkRGlkSGlkZScpXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlib2FyZFdpbGxIaWRlJylcbiAgX29uS2V5Ym9hcmRIaWRlKCkge1xuICAgIHRoaXMuc2V0S2V5Ym9hcmRWaXNpYmlsaXR5KDApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVDb250ZW50TWF4SGVpZ2h0KGZyZWV6ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IHNob3VsZFRvZ2dsZU1heEhlaWdodCA9XG4gICAgICB0aGlzLmNvbmZpZy5mbGF2b3IgPT09ICdtb2RhbCcgJiYgdGhpcy5wbGF0Zm9ybS5pc1BoYWJsZXRPckJpZ2dlcigpO1xuICAgIGlmICghc2hvdWxkVG9nZ2xlTWF4SGVpZ2h0KSByZXR1cm47XG4gICAgY29uc3Qgc3R5bGUgPSAnbWF4LWhlaWdodCc7XG4gICAgY29uc3QgY29udGVudEVsZW1lbnQgPSB0aGlzLmlvbkNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAoZnJlZXplKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBjb250ZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY29udGVudEVsZW1lbnQsIHN0eWxlLCBgJHtjb250ZW50SGVpZ2h0fXB4YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKGNvbnRlbnRFbGVtZW50LCBzdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEtleWJvYXJkVmlzaWJpbGl0eShrZXlib2FyZEhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3Qga2V5Ym9hcmRBbHJlYWR5VmlzaWJsZSA9IGtleWJvYXJkSGVpZ2h0ID4gMCAmJiB0aGlzLmtleWJvYXJkVmlzaWJsZTtcbiAgICBjb25zdCBrZXlib2FyZEFscmVhZHlIaWRkZW4gPSBrZXlib2FyZEhlaWdodCA9PT0gMCAmJiAhdGhpcy5rZXlib2FyZFZpc2libGU7XG4gICAgaWYgKGtleWJvYXJkQWxyZWFkeVZpc2libGUgfHwga2V5Ym9hcmRBbHJlYWR5SGlkZGVuKSByZXR1cm47XG4gICAgdGhpcy5rZXlib2FyZFZpc2libGUgPSBrZXlib2FyZEhlaWdodCA+IDA7XG4gICAgdGhpcy50b2dnbGVDb250ZW50TWF4SGVpZ2h0KHRoaXMua2V5Ym9hcmRWaXNpYmxlKTtcbiAgICB0aGlzLnNldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIGdldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodDogbnVtYmVyLCBlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgaWYgKGtleWJvYXJkSGVpZ2h0IDw9IDAgfHwgIWVsZW1lbnQpIHJldHVybiAwO1xuICAgIGNvbnN0IGRpc3RhbmNlRnJvbVZpZXdwb3J0Qm90dG9tVG9FbGVtZW50ID0gTWF0aC5mbG9vcihcbiAgICAgIHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5pbm5lckhlaWdodCAtIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tXG4gICAgKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoa2V5Ym9hcmRIZWlnaHQgLSBkaXN0YW5jZUZyb21WaWV3cG9ydEJvdHRvbVRvRWxlbWVudCwgMCk7XG4gIH1cblxuICBwcml2YXRlIHNldENzc1ZhcihlbGVtZW50OiBFbGVtZW50LCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PlxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCBwcm9wZXJ0eSwgdmFsdWUsIFJlbmRlcmVyU3R5bGVGbGFnczIuRGFzaENhc2UpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlQ3NzQ2xhc3MoZWxlbWVudDogRWxlbWVudCwga2xhc3M6IHN0cmluZywgY29uZGl0aW9uOiBib29sZWFuKSB7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PlxuICAgICAgY29uZGl0aW9uID8gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCBrbGFzcykgOiB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsZW1lbnQsIGtsYXNzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEtleWJvYXJkT3ZlcmxhcChrZXlib2FyZEhlaWdodDogbnVtYmVyKSB7XG4gICAgdGhpcy50b2dnbGVDc3NDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2tleWJvYXJkLXZpc2libGUnLCBrZXlib2FyZEhlaWdodCA+IDApO1xuICAgIGNvbnN0IGtleWJvYXJkT3ZlcmxhcCA9IHRoaXMuZ2V0S2V5Ym9hcmRPdmVybGFwKGtleWJvYXJkSGVpZ2h0LCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgbGV0IHNuYXBGb290ZXJUb0tleWJvYXJkID0gZmFsc2U7XG4gICAgY29uc3QgZW1iZWRkZWRGb290ZXJFbGVtZW50ID0gdGhpcy5jdXJyZW50Rm9vdGVyO1xuICAgIGlmIChlbWJlZGRlZEZvb3RlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0Q3NzVmFyKGVtYmVkZGVkRm9vdGVyRWxlbWVudCwgJy0ta2V5Ym9hcmQtb2Zmc2V0JywgYCR7a2V5Ym9hcmRPdmVybGFwfXB4YCk7XG4gICAgICBzbmFwRm9vdGVyVG9LZXlib2FyZCA9IGVtYmVkZGVkRm9vdGVyRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NuYXAtdG8ta2V5Ym9hcmQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50RWxlbWVudCA9IHRoaXMuaW9uQ29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjb250ZW50S2V5Ym9hcmRPZmZzZXQgPSBzbmFwRm9vdGVyVG9LZXlib2FyZFxuICAgICAgPyBrZXlib2FyZE92ZXJsYXBcbiAgICAgIDogdGhpcy5nZXRLZXlib2FyZE92ZXJsYXAoa2V5Ym9hcmRIZWlnaHQsIGNvbnRlbnRFbGVtZW50KTtcbiAgICB0aGlzLnNldENzc1Zhcihjb250ZW50RWxlbWVudCwgJy0ta2V5Ym9hcmQtb2Zmc2V0JywgYCR7Y29udGVudEtleWJvYXJkT2Zmc2V0fXB4YCk7XG4gIH1cblxuICBvbkhlYWRlclRvdWNoU3RhcnQoZXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICBpZiAodGhpcy5rZXlib2FyZFZpc2libGUpIHtcbiAgICAgIGNvbnN0IGlzVG9vbGJhckJ1dHRvblRvdWNoID0gdGhpcy50b29sYmFyQnV0dG9ucy5zb21lKChidXR0b24pID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAgIChldmVudC50YXJnZXQgPT09IGJ1dHRvbiB8fCBidXR0b24uY29udGFpbnMoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgLy8gUHJldmVudCBibHVyIGlmIGV2ZW50IHRhcmdldCBpcyBhIHRvb2xiYXIgYnV0dG9uXG4gICAgICAvLyAodG8gYWxsb3cgdGFwIGV2ZW50IHRvIGZpcmUpOlxuICAgICAgaWYgKCFpc1Rvb2xiYXJCdXR0b25Ub3VjaCkge1xuICAgICAgICB0aGlzLmJsdXJBY3RpdmVFbGVtZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIF9vbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLnNldFZpZXdwb3J0SGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgIGNvbnN0IHZoID0gKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5pbm5lckhlaWdodCAqIDAuMDEpLnRvRml4ZWQoMik7XG4gICAgdGhpcy5zZXRDc3NWYXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICctLXZoJywgYCR7dmh9cHhgKTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVZpZXdwb3J0UmVzaXplKCkge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHksIChlbnRyeSkgPT5cbiAgICAgIHRoaXMub25WaWV3cG9ydFJlc2l6ZShlbnRyeSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvblZpZXdwb3J0UmVzaXplKGVudHJ5OiBSZXNpemVPYnNlcnZlckVudHJ5KSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxWaWV3cG9ydEhlaWdodCkge1xuICAgICAgLy8gSW5pdGlhbCBvYnNlcnZlIGNhbGxiYWNrLCByZWdpc3RlciBpbml0aWFsIGhlaWdodDpcbiAgICAgIHRoaXMuaW5pdGlhbFZpZXdwb3J0SGVpZ2h0ID0gZW50cnkuY29udGVudFJlY3QuaGVpZ2h0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpZXdwb3J0UmVzaXplZCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodCAhPT0gdGhpcy5pbml0aWFsVmlld3BvcnRIZWlnaHQ7XG4gICAgaWYgKCF0aGlzLnZpZXdwb3J0UmVzaXplZCkge1xuICAgICAgLy8gV2UgYXJlIGJhY2sgdG8gaW5pdGlhbCB2aWV3IHBvcnQgaGVpZ2h0LCBjaGVjayBmb3IgcGVuZGluZyBjbG9zZSBmdW5jOlxuICAgICAgaWYgKHRoaXMuZGVsYXllZENsb3NlVGltZW91dElkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5ZWRDbG9zZVRpbWVvdXRJZCk7XG4gICAgICAgIHRoaXMuZGVsYXllZENsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmlld3BvcnRSZXNpemUubmV4dCgpO1xuICB9XG5cbiAgYmx1ckFjdGl2ZUVsZW1lbnQoKSB7XG4gICAgY29uc3QgQkxVUl9UQVJHRVRfU0VMRUNUT1IgPSAnaW5wdXQsIHRleHRhcmVhJztcbiAgICBpZiAodGhpcy5rZXlib2FyZFZpc2libGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubWF0Y2hlcyhCTFVSX1RBUkdFVF9TRUxFQ1RPUilcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVNb2RhbFdyYXBwZXJJbnRlcnNlY3Rpb25PYnNlcnZlcigpOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgY29uc3QgY2FsbGJhY2s6IEludGVyc2VjdGlvbk9ic2VydmVyQ2FsbGJhY2sgPSAoZW50cmllcykgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgY29uc3QgaXNUb3VjaGluZ1ZpZXdwb3J0ID0gZW50cnkuaW50ZXJzZWN0aW9uUmF0aW8gPCAxO1xuICAgICAgaWYgKGlzVG91Y2hpbmdWaWV3cG9ydCkge1xuICAgICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmdWxsLWhlaWdodCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1oZWlnaHQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU2V0IGV4cGxpY2l0IHZpZXdwb3J0IHJvb3QgaWYgd2l0aGluIGlmcmFtZTpcbiAgICBjb25zdCByb290ID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmZyYW1lRWxlbWVudFxuICAgICAgPyAodGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50IGFzIGFueSkgLy8gQ2FzdCB0byBgYW55YCBhcyBUeXBlc2NyaXB0IGxpYi5kLnRzIGRvZXNudCBzdXBwb3J0IERvY3VtZW50IHR5cGUgeWV0XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvcHRpb25zOiBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXQgPSB7XG4gICAgICByb290TWFyZ2luOiAnMHB4IDBweCAtMXB4IDBweCcsIC8vIGBib3R0b206IC0xcHhgIGFsbG93cyBjaGVja2luZyB3aGVuIHRoZSBtb2RhbCBib3R0b20gaXMgdG91Y2hpbmcgdGhlIHZpZXdwb3J0XG4gICAgICByb290LFxuICAgICAgdGhyZXNob2xkOiBbMC45OSwgMV0sXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucm91dGVyT3V0bGV0LmlzQWN0aXZhdGVkKSB7XG4gICAgICB0aGlzLnJvdXRlck91dGxldC5kZWFjdGl2YXRlKCk7XG4gICAgfVxuICAgIC8vY2xlYW4gdXAgdGhlIG9ic2VydmVyXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyVW5vYnNlcnZlRm4/LigpO1xuICAgIHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIGRlbGV0ZSB0aGlzLl9pbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLnVub2JzZXJ2ZSh0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5pb25IZWFkZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2UudW5vYnNlcnZlKHRoaXMuY3VycmVudEZvb3Rlcik7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXJcbiAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gIFtjbGFzcy5jb250ZW50LXNjcm9sbGVkXT1cImlzQ29udGVudFNjcm9sbGVkXCJcbiAgKHRvdWNoc3RhcnQpPVwib25IZWFkZXJUb3VjaFN0YXJ0KCRldmVudClcIlxuPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi10aXRsZSByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGV2ZWw9XCIyXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLXRpdGxlPlxuICAgIEBpZiAoY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicgJiYgY29uZmlnLmRyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb24pIHtcbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic2Vjb25kYXJ5XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBraXJieS1idXR0b25cbiAgICAgICAgICBhdHRlbnRpb25MZXZlbD1cIjNcIlxuICAgICAgICAgIHNpemU9XCJtZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbmZpZy5kcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uLmFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxraXJieS1pY29uIFtuYW1lXT1cImNvbmZpZy5kcmF3ZXJTdXBwbGVtZW50YXJ5QWN0aW9uLmljb25OYW1lXCI+PC9raXJieS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgfVxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwicHJpbWFyeVwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBraXJieS1idXR0b25cbiAgICAgICAgYXR0ZW50aW9uTGV2ZWw9XCIzXCJcbiAgICAgICAgc2l6ZT1cIm1kXCJcbiAgICAgICAgW25vRGVjb3JhdGlvbl09XCJjb25maWcuaW50ZXJhY3RXaXRoQmFja2dyb3VuZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidHJhbnNsYXRpb25zLmdldCgnY2xvc2UnKVwiXG4gICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGtpcmJ5LWljb24gbmFtZT1cImNsb3NlXCI+PC9raXJieS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IFtzY3JvbGxFdmVudHNdPVwic2Nyb2xsRXZlbnRzRW5hYmxlZFwiPlxuICBAaWYgKF9oYXNDb2xsYXBzaWJsZVRpdGxlKSB7XG4gICAgPGlvbi1oZWFkZXIgY29sbGFwc2U9XCJjb25kZW5zZVwiPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImtpcmJ5LXRleHQteGxhcmdlXCIgI2NvbnRlbnRUaXRsZT48L3NwYW4+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgfVxuXG4gIDwhLS0gT3V0bGV0IGZvciBNb2RhbENvbnRyb2xsZXIgLS0+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJjb25maWcuY29tcG9uZW50OyBpbmplY3RvcjogY29tcG9uZW50UHJvcHNJbmplY3RvclwiXG4gID48L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIE91dGxldCBmb3IgcHJvamVjdGVkIGNvbnRlbnQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50OyBpbmplY3RvcjogbW9kYWxXcmFwcGVySW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIE91dGxldCBmb3Igcm91dGUtYmFzZWQgbW9kYWwgLS0+XG4gIDxyb3V0ZXItb3V0bGV0XG4gICAgbmFtZT1cImtpcmJ5TW9kYWxXcmFwcGVyT3V0bGV0XCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJjb25maWcubW9kYWxSb3V0ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgPjwvcm91dGVyLW91dGxldD5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=","export class DrawerSupplementaryAction {\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLXN1cHBsZW1lbnRhcnktYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsLXdyYXBwZXIvY29uZmlnL2RyYXdlci1zdXBwbGVtZW50YXJ5LWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8seUJBQXlCO0NBSXJDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIERyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb24ge1xuICBpY29uTmFtZTogc3RyaW5nO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1mdW5jdGlvbi10eXBlXG4gIGFjdGlvbjogRnVuY3Rpb247XG59XG4iXX0=","import { Component, HostListener, Injector, Input, } from '@angular/core';\nimport { firstValueFrom, Subject } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { getIonModalDialogAncestor } from '@kirbydesign/designsystem/helpers';\nimport { COMPONENT_PROPS } from '../config/modal-config.helper';\nimport { Modal } from '../../modal.interfaces';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@kirbydesign/designsystem/types\";\nimport * as i2 from \"../../modal/services/can-dismiss.helper\";\nimport * as i3 from \"@angular/common\";\nexport class ModalCompactWrapperComponent {\n constructor(injector, elementRef, windowRef, canDismissHelper, renderer) {\n this.injector = injector;\n this.elementRef = elementRef;\n this.windowRef = windowRef;\n this.canDismissHelper = canDismissHelper;\n this.renderer = renderer;\n this.scrollY = Math.abs(this.windowRef.nativeWindow.scrollY);\n this.scrollDisabled = false;\n this.ionModalDidPresent = new Subject();\n this.ionModalWillDismiss = new Subject();\n this.didPresent = firstValueFrom(this.ionModalDidPresent);\n this.willClose = firstValueFrom(this.ionModalWillDismiss);\n }\n ngOnInit() {\n this.ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n this.setAriaLabel();\n this.listenForIonModalDidPresent();\n this.listenForIonModalWillDismiss();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n }\n listenForIonModalDidPresent() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalDidPresent', () => {\n this.ionModalDidPresent.next();\n this.ionModalDidPresent.complete();\n });\n }\n }\n listenForIonModalWillDismiss() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalWillDismiss', () => {\n this.ionModalWillDismiss.next();\n this.ionModalWillDismiss.complete();\n });\n }\n }\n setAriaLabel() {\n const ionModalElementDialog = getIonModalDialogAncestor(this.ionModalElement);\n const ariaLabel = this.config.htmlAttributes?.['aria-label'];\n if (ionModalElementDialog && ariaLabel) {\n this.renderer.setAttribute(ionModalElementDialog, 'aria-label', ariaLabel);\n }\n }\n async close(data) {\n if (this.ionModalElement) {\n await this.ionModalElement.dismiss(data);\n }\n }\n set canDismiss(callback) {\n this.ionModalElement.canDismiss = this.canDismissHelper.getCanDismissCallback(callback);\n }\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing backwards (with shift+tab):\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalCompactWrapperComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.WindowRef }, { token: i2.CanDismissHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: ModalCompactWrapperComponent, isStandalone: true, selector: \"kirby-modal-compact-wrapper\", inputs: { config: \"config\", content: \"content\" }, host: { listeners: { \"window:focus\": \"onFocusChange()\", \"window:focusout\": \"onFocusChange()\" }, properties: { \"class.ion-page\": \"false\" } }, providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], ngImport: i0, template: \"<!-- Outlet for ModalController -->\\n<ng-container\\n *ngComponentOutlet=\\\"config.component; injector: componentPropsInjector\\\"\\n></ng-container>\\n\\n<!-- Outlet for projected content -->\\n<ng-container *ngTemplateOutlet=\\\"content\\\"></ng-container>\\n\", styles: [\":host{display:block;padding:24px 16px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i3.NgComponentOutlet, selector: \"[ngComponentOutlet]\", inputs: [\"ngComponentOutlet\", \"ngComponentOutletInputs\", \"ngComponentOutletInjector\", \"ngComponentOutletEnvironmentInjector\", \"ngComponentOutletContent\", \"ngComponentOutletNgModule\", \"ngComponentOutletNgModuleFactory\"], exportAs: [\"ngComponentOutlet\"] }, { kind: \"directive\", type: i3.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalCompactWrapperComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-modal-compact-wrapper', providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }], imports: [CommonModule], host: { '[class.ion-page]': 'false' }, template: \"<!-- Outlet for ModalController -->\\n<ng-container\\n *ngComponentOutlet=\\\"config.component; injector: componentPropsInjector\\\"\\n></ng-container>\\n\\n<!-- Outlet for projected content -->\\n<ng-container *ngTemplateOutlet=\\\"content\\\"></ng-container>\\n\", styles: [\":host{display:block;padding:24px 16px}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i1.WindowRef }, { type: i2.CanDismissHelper }, { type: i0.Renderer2 }], propDecorators: { config: [{\n type: Input\n }], content: [{\n type: Input\n }], onFocusChange: [{\n type: HostListener,\n args: ['window:focus']\n }, {\n type: HostListener,\n args: ['window:focusout']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC13cmFwcGVyL2NvbXBhY3QvbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC13cmFwcGVyL2NvbXBhY3QvbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEdBSU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBVy9DLE1BQU0sT0FBTyw0QkFBNEI7SUFjdkMsWUFDVSxRQUFrQixFQUNsQixVQUFtQyxFQUNuQyxTQUFvQixFQUNwQixnQkFBa0MsRUFDbEMsUUFBbUI7UUFKbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWY3QixZQUFPLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxtQkFBYyxHQUFH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QTRCLEVBQUUsQ0FBQywwQkN4QjVFLDJQQU9BLGlHRGtCWSxZQUFZOzs0RkFHWCw0QkFBNEI7a0JBUnhDLFNBQVM7K0JBQ0UsNkJBQTZCLGFBRzVCLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsOEJBQThCLEVBQUUsQ0FBQyxXQUNqRSxDQUFDLFlBQVksQ0FBQyxRQUNqQixFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRTs7c0JBR3BDLEtBQUs7O3NCQUNMLEtBQUs7O3NCQXVFTCxZQUFZO3VCQUFDLGNBQWM7O3NCQUMzQixZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS90eXBlcyc7XG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRJb25Nb2RhbERpYWxvZ0FuY2VzdG9yIH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9oZWxwZXJzJztcbmltcG9ydCB7IE1vZGFsQ29uZmlnLCBTaG93QWxlcnRDYWxsYmFjayB9IGZyb20gJy4uL2NvbmZpZy9tb2RhbC1jb25maWcnO1xuaW1wb3J0IHsgQ09NUE9ORU5UX1BST1BTIH0gZnJvbSAnLi4vY29uZmlnL21vZGFsLWNvbmZpZy5oZWxwZXInO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuLi8uLi9tb2RhbC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IENhbkRpc21pc3NIZWxwZXIgfSBmcm9tICcuLi8uLi9tb2RhbC9zZXJ2aWNlcy9jYW4tZGlzbWlzcy5oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdraXJieS1tb2RhbC1jb21wYWN0LXdyYXBwZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kYWwtY29tcGFjdC13cmFwcGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTW9kYWwsIHVzZUV4aXN0aW5nOiBNb2RhbENvbXBhY3RXcmFwcGVyQ29tcG9uZW50IH1dLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgaG9zdDogeyAnW2NsYXNzLmlvbi1wYWdlXSc6ICdmYWxzZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wYWN0V3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE1vZGFsLCBPbkluaXQge1xuICBASW5wdXQoKSBjb25maWc6IE1vZGFsQ29uZmlnO1xuICBASW5wdXQoKSBjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHNjcm9sbFk6IG51bWJlciA9IE1hdGguYWJzKHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5zY3JvbGxZKTtcbiAgc2Nyb2xsRGlzYWJsZWQgPSBmYWxzZTtcbiAgY29tcG9uZW50UHJvcHNJbmplY3RvcjogSW5qZWN0b3I7XG5cbiAgcHJpdmF0ZSBpb25Nb2RhbEVsZW1lbnQ6IEhUTUxJb25Nb2RhbEVsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW9uTW9kYWxEaWRQcmVzZW50ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpb25Nb2RhbFdpbGxEaXNtaXNzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgZGlkUHJlc2VudCA9IGZpcnN0VmFsdWVGcm9tKHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50KTtcbiAgcmVhZG9ubHkgd2lsbENsb3NlID0gZmlyc3RWYWx1ZUZyb20odGhpcy5pb25Nb2RhbFdpbGxEaXNtaXNzKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgd2luZG93UmVmOiBXaW5kb3dSZWYsXG4gICAgcHJpdmF0ZSBjYW5EaXNtaXNzSGVscGVyOiBDYW5EaXNtaXNzSGVscGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdpb24tbW9kYWwnKTtcbiAgICB0aGlzLnNldEFyaWFMYWJlbCgpO1xuXG4gICAgdGhpcy5saXN0ZW5Gb3JJb25Nb2RhbERpZFByZXNlbnQoKTtcbiAgICB0aGlzLmxpc3RlbkZvcklvbk1vZGFsV2lsbERpc21pc3MoKTtcbiAgICB0aGlzLmNvbXBvbmVudFByb3BzSW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDT01QT05FTlRfUFJPUFMsIHVzZVZhbHVlOiB0aGlzLmNvbmZpZy5jb21wb25lbnRQcm9wcyB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW9uTW9kYWxEaWRQcmVzZW50KCkge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgdGhpcy5pb25Nb2RhbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW9uTW9kYWxEaWRQcmVzZW50JywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsRGlkUHJlc2VudC5uZXh0KCk7XG4gICAgICAgIHRoaXMuaW9uTW9kYWxEaWRQcmVzZW50LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklvbk1vZGFsV2lsbERpc21pc3MoKSB7XG4gICAgaWYgKHRoaXMuaW9uTW9kYWxFbGVtZW50KSB7XG4gICAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpb25Nb2RhbFdpbGxEaXNtaXNzJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MubmV4dCgpO1xuICAgICAgICB0aGlzLmlvbk1vZGFsV2lsbERpc21pc3MuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0QXJpYUxhYmVsKCkge1xuICAgIGNvbnN0IGlvbk1vZGFsRWxlbWVudERpYWxvZyA9IGdldElvbk1vZGFsRGlhbG9nQW5jZXN0b3IodGhpcy5pb25Nb2RhbEVsZW1lbnQpO1xuICAgIGNvbnN0IGFyaWFMYWJlbCA9IHRoaXMuY29uZmlnLmh0bWxBdHRyaWJ1dGVzPy5bJ2FyaWEtbGFiZWwnXTtcbiAgICBpZiAoaW9uTW9kYWxFbGVtZW50RGlhbG9nICYmIGFyaWFMYWJlbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaW9uTW9kYWxFbGVtZW50RGlhbG9nLCAnYXJpYS1sYWJlbCcsIGFyaWFMYWJlbCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xvc2UoZGF0YT86IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlvbk1vZGFsRWxlbWVudCkge1xuICAgICAgYXdhaXQgdGhpcy5pb25Nb2RhbEVsZW1lbnQuZGlzbWlzcyhkYXRhKTtcbiAgICB9XG4gIH1cblxuICBzZXQgY2FuRGlzbWlzcyhjYWxsYmFjazogU2hvd0FsZXJ0Q2FsbGJhY2spIHtcbiAgICB0aGlzLmlvbk1vZGFsRWxlbWVudC5jYW5EaXNtaXNzID0gdGhpcy5jYW5EaXNtaXNzSGVscGVyLmdldENhbkRpc21pc3NDYWxsYmFjayhjYWxsYmFjayk7XG4gIH1cblxuICBzY3JvbGxUb1RvcDogKF8/OiBhbnkpID0+IHZvaWQ7XG4gIHNjcm9sbFRvQm90dG9tOiAoXz86IGFueSkgPT4gdm9pZDtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXMnKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6Zm9jdXNvdXQnKVxuICBvbkZvY3VzQ2hhbmdlKCkge1xuICAgIC8vIFRoaXMgZml4ZXMgYW4gdW5kZXNpcmVkIHNjcm9sbCBiZWhhdmlvdXIgb2NjdXJyaW5nIG9uIGtleWJvYXJkLXRhYmJpbmcgYmFja3dhcmRzICh3aXRoIHNoaWZ0K3RhYik6XG4gICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LnNjcm9sbFRvKHsgdG9wOiB0aGlzLnNjcm9sbFkgfSk7XG4gIH1cbn1cbiIsIjwhLS0gT3V0bGV0IGZvciBNb2RhbENvbnRyb2xsZXIgLS0+XG48bmctY29udGFpbmVyXG4gICpuZ0NvbXBvbmVudE91dGxldD1cImNvbmZpZy5jb21wb25lbnQ7IGluamVjdG9yOiBjb21wb25lbnRQcm9wc0luamVjdG9yXCJcbj48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBPdXRsZXQgZm9yIHByb2plY3RlZCBjb250ZW50IC0tPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { createAnimation } from '@ionic/angular/standalone';\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@kirbydesign/designsystem/helpers\";\nexport class ModalAnimationBuilderService {\n constructor(platform) {\n this.platform = platform;\n this.easingEnter = KirbyAnimation.Easing.modal.enter;\n this.easingLeave = KirbyAnimation.Easing.modal.exit;\n this.duration = KirbyAnimation.Duration.LONG;\n this.SwipeToCloseDefaults = {\n MIN_PRESENTING_SCALE: 0.93,\n };\n this.createEnterAnimation = () => {\n const backdropAnimation = createAnimation()\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .beforeStyles({\n 'pointer-events': 'none',\n })\n .afterClearStyles(['pointer-events']);\n const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');\n return { backdropAnimation, wrapperAnimation };\n };\n this.createLeaveAnimation = () => {\n const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);\n const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');\n return { backdropAnimation, wrapperAnimation };\n };\n /**\n * Gets the root context of a shadow dom element\n * On newer browsers this will be the shadowRoot,\n * but for older browser this may just be the\n * element itself.\n *\n * Useful for whenever you need to explicitly\n * do \"myElement.shadowRoot!.querySelector(...)\".\n */\n this.getElementRoot = (el, fallback = el) => {\n return el.shadowRoot || fallback;\n };\n }\n enterAnimation(currentBackdrop) {\n return (baseEl, opts) => {\n const { presentingEl } = opts;\n const root = this.getElementRoot(baseEl);\n const { wrapperAnimation, backdropAnimation } = this.createEnterAnimation();\n backdropAnimation.addElement(root.querySelector('ion-backdrop'));\n wrapperAnimation\n .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))\n .beforeStyles({ opacity: 1 });\n const baseAnimation = createAnimation('entering-base')\n .addElement(baseEl)\n .easing(this.easingEnter)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n let currentBackdropAnimation;\n if (currentBackdrop) {\n currentBackdropAnimation = createAnimation()\n .addElement(currentBackdrop)\n .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);\n }\n if (presentingEl) {\n const isMobile = !this.platform.isPhabletOrBigger();\n const hasCardModal = presentingEl.tagName === 'ION-MODAL' &&\n presentingEl.presentingElement !== undefined;\n const presentingElRoot = this.getElementRoot(presentingEl);\n const presentingAnimation = createAnimation().beforeStyles({\n transform: 'translateY(0)',\n 'transform-origin': 'top center',\n overflow: 'hidden',\n });\n const bodyEl = document.body;\n if (isMobile) {\n /**\n * Fallback for browsers that does not support `max()` (ex: Firefox)\n * No need to worry about statusbar padding since engines like Gecko\n * are not used as the engine for standalone Cordova/Capacitor apps\n */\n const transformOffset = !CSS.supports('width', 'max(0px, 1px)')\n ? '30px'\n : 'max(30px, var(--ion-safe-area-top))';\n const modalTransform = hasCardModal ? '-10px' : transformOffset;\n const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;\n const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;\n presentingAnimation\n .afterStyles({\n transform: finalTransform,\n })\n .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))\n .addElement(presentingEl)\n .keyframes([\n {\n offset: 0,\n filter: 'contrast(1)',\n transform: 'translateY(0px) scale(1)',\n borderRadius: '0px',\n },\n {\n offset: 1,\n filter: 'contrast(0.85)',\n transform: finalTransform,\n borderRadius: '10px 10px 0 0',\n },\n ]);\n baseAnimation.addAnimation(presentingAnimation);\n }\n else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n if (!hasCardModal) {\n wrapperAnimation.fromTo('opacity', '0', '1');\n }\n else {\n const toPresentingScale = hasCardModal\n ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE\n : 1;\n const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;\n presentingAnimation\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingElRoot.querySelector('.modal-wrapper'))\n .keyframes([\n { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },\n { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },\n ]);\n const shadowAnimation = createAnimation()\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingElRoot.querySelector('.modal-shadow'))\n .keyframes([\n { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },\n { offset: 1, opacity: '0', transform: finalTransform },\n ]);\n baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);\n }\n }\n }\n else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n }\n return baseAnimation;\n };\n }\n leaveAnimation(currentBackdrop) {\n return (baseEl, opts, duration = this.duration) => {\n const { presentingEl } = opts;\n const root = this.getElementRoot(baseEl);\n const { wrapperAnimation, backdropAnimation } = this.createLeaveAnimation();\n backdropAnimation.addElement(root.querySelector('ion-backdrop'));\n wrapperAnimation\n .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))\n .beforeStyles({ opacity: 1 });\n const baseAnimation = createAnimation('leaving-base')\n .addElement(baseEl)\n .easing(this.easingLeave)\n .duration(duration)\n .addAnimation(wrapperAnimation);\n let currentBackdropAnimation;\n if (currentBackdrop) {\n currentBackdropAnimation = createAnimation()\n .addElement(currentBackdrop)\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .afterStyles({ opacity: 'var(--backdrop-opacity)' }); //Ensures backdrop is reset to default opacity after swipe to close\n }\n if (presentingEl) {\n const isMobile = !this.platform.isPhabletOrBigger();\n const hasCardModal = presentingEl.tagName === 'ION-MODAL' &&\n presentingEl.presentingElement !== undefined;\n const presentingElRoot = this.getElementRoot(presentingEl);\n const presentingAnimation = createAnimation()\n .beforeClearStyles(['transform'])\n .afterClearStyles(['transform'])\n .onFinish((currentStep) => {\n // only reset background color if this is the last card-style modal\n if (currentStep !== 1) {\n return;\n }\n presentingEl.style.setProperty('overflow', '');\n const numModals = Array.from(bodyEl.querySelectorAll('ion-modal')).filter((m) => m.presentingElement !== undefined).length;\n if (numModals <= 1) {\n bodyEl.style.setProperty('background-color', '');\n }\n });\n const bodyEl = document.body;\n if (isMobile) {\n const transformOffset = !CSS.supports('width', 'max(0px, 1px)')\n ? '30px'\n : 'max(30px, var(--ion-safe-area-top))';\n const modalTransform = hasCardModal ? '-10px' : transformOffset;\n const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;\n const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;\n presentingAnimation.addElement(presentingEl).keyframes([\n {\n offset: 0,\n filter: 'contrast(0.85)',\n transform: finalTransform,\n borderRadius: '10px 10px 0 0',\n },\n {\n offset: 1,\n filter: 'contrast(1)',\n transform: 'translateY(0px) scale(1)',\n borderRadius: '0px',\n },\n ]);\n baseAnimation.addAnimation(presentingAnimation);\n }\n else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n if (!hasCardModal) {\n wrapperAnimation.fromTo('opacity', '1', '0');\n }\n else {\n const toPresentingScale = hasCardModal\n ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE\n : 1;\n const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;\n presentingAnimation\n .addElement(presentingElRoot.querySelector('.modal-wrapper'))\n .afterStyles({\n transform: 'translate3d(0, 0, 0)',\n })\n .keyframes([\n { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },\n { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },\n ]);\n const shadowAnimation = createAnimation()\n .addElement(presentingElRoot.querySelector('.modal-shadow'))\n .afterStyles({\n transform: 'translateY(0) scale(1)',\n })\n .keyframes([\n { offset: 0, opacity: '0', transform: finalTransform },\n { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },\n ]);\n baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);\n }\n }\n }\n else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n }\n return baseAnimation;\n };\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalAnimationBuilderService, deps: [{ token: i1.PlatformService }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalAnimationBuilderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalAnimationBuilderService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.PlatformService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYW5pbWF0aW9uLWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9zZXJ2aWNlcy9tb2RhbC1hbmltYXRpb24tYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUduRSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQW9CLFFBQXlCO1FBQXpCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBRTVCLGdCQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2hELGdCQUFXLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQy9DLGFBQVEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4Qyx5QkFBb0IsR0FBRztZQUN0QyxvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUM7UUFnUU0seUJBQW9CLEdBQUcsR0FBRyxFQUFFO1lBQ2xDLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxFQUFFO2lCQUN4QyxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSx5QkFBeUIsQ0FBQztpQkFDbEQsWUFBWSxDQUFDO2dCQUNaLGdCQUFnQixFQUFFLE1BQU07YUFDekIsQ0FBQztpQkFDRCxnQkFBZ0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUV4QyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FDL0MsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixpQkFBaUIsQ0FDbEIsQ0FBQztZQUVGLE9BQU8s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ckUsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDOUMsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO29CQUM3QixhQUFhLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztrSUF0UVUsNEJBQTRCO3NJQUE1Qiw0QkFBNEIsY0FEZixNQUFNOzs0RkFDbkIsNEJBQTRCO2tCQUR4QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuaW1hdGlvbiwgQW5pbWF0aW9uQnVpbGRlciwgY3JlYXRlQW5pbWF0aW9uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuXG5pbXBvcnQgeyBLaXJieUFuaW1hdGlvbiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaGVscGVycyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTW9kYWxBbmltYXRpb25CdWlsZGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSkge31cblxuICBwcml2YXRlIHJlYWRvbmx5IGVhc2luZ0VudGVyID0gS2lyYnlBbmltYXRpb24uRWFzaW5nLm1vZGFsLmVudGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVhc2luZ0xlYXZlID0gS2lyYnlBbmltYXRpb24uRWFzaW5nLm1vZGFsLmV4aXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHVyYXRpb24gPSBLaXJieUFuaW1hdGlvbi5EdXJhdGlvbi5MT05HO1xuICBwcml2YXRlIHJlYWRvbmx5IFN3aXBlVG9DbG9zZURlZmF1bHRzID0ge1xuICAgIE1JTl9QUkVTRU5USU5HX1NDQUxFOiAwLjkzLFxuICB9O1xuXG4gIHB1YmxpYyBlbnRlckFuaW1hdGlvbihjdXJyZW50QmFja2Ryb3A/OiBIVE1MSW9uQmFja2Ryb3BFbGVtZW50KTogQW5pbWF0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIChiYXNlRWw6IEhUTUxFbGVtZW50LCBvcHRzOiB7IHByZXNlbnRpbmdFbD86IEhUTUxFbGVtZW50IH0pOiBBbmltYXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBwcmVzZW50aW5nRWwgfSA9IG9wdHM7XG4gICAgICBjb25zdCByb290ID0gdGhpcy5nZXRFbGVtZW50Um9vdChiYXNlRWwpO1xuICAgICAgY29uc3QgeyB3cmFwcGVyQW5pbWF0aW9uLCBiYWNrZHJvcEFuaW1hdGlvbiB9ID0gdGhpcy5jcmVhdGVFbnRlckFuaW1hdGlvbigpO1xuXG4gICAgICBiYWNrZHJvcEFuaW1hdGlvbi5hZGRFbGVtZW50KHJvb3QucXVlcnlTZWxlY3RvcignaW9uLWJhY2tkcm9wJykhKTtcblxuICAgICAgd3JhcHBlckFuaW1hdGlvblxuICAgICAgICAuYWRkRWxlbWVudChyb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbC13cmFwcGVyLCAubW9kYWwtc2hhZG93JykhKVxuICAgICAgICAuYmVmb3JlU3R5bGVzKHsgb3BhY2l0eTogMSB9KTtcblxuICAgICAgY29uc3QgYmFzZUFuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbignZW50ZXJpbmctYmFzZScpXG4gICAgICAgIC5hZGRFbGVtZW50KGJhc2VFbClcbiAgICAgICAgLmVhc2luZyh0aGlzLmVhc2luZ0VudGVyKVxuICAgICAgICAuZHVyYXRpb24odGhpcy5kdXJhdGlvbilcbiAgICAgICAgLmFkZEFuaW1hdGlvbih3cmFwcGVyQW5pbWF0aW9uKTtcblxuICAgICAgbGV0IGN1cnJlbnRCYWNrZHJvcEFuaW1hdGlvbjogQW5pbWF0aW9uO1xuICAgICAgaWYgKGN1cnJlbnRCYWNrZHJvcCkge1xuICAgICAgICBjdXJyZW50QmFja2Ryb3BBbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24oKVxuICAgICAgICAgIC5hZGRFbGVtZW50KGN1cnJlbnRCYWNrZHJvcClcbiAgICAgICAgICAuZnJvbVRvKCdvcGFjaXR5JywgJ3ZhcigtLWJhY2tkcm9wLW9wYWNpdHkpJywgMC4wMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVzZW50aW5nRWwpIHtcbiAgICAgICAgY29uc3QgaXNNb2JpbGUgPSAhdGhpcy5wbGF0Zm9ybS5pc1BoYWJsZXRPckJpZ2dlcigpO1xuICAgICAgICBjb25zdCBoYXNDYXJkTW9kYWwgPVxuICAgICAgICAgIHByZXNlbnRpbmdFbC50YWdOYW1lID09PSAnSU9OLU1PREFMJyAmJlxuICAgICAgICAgIChwcmVzZW50aW5nRWwgYXMgSFRNTElvbk1vZGFsRWxlbWVudCkucHJlc2VudGluZ0VsZW1lbnQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcHJlc2VudGluZ0VsUm9vdCA9IHRoaXMuZ2V0RWxlbWVudFJvb3QocHJlc2VudGluZ0VsKTtcblxuICAgICAgICBjb25zdCBwcmVzZW50aW5nQW5pbWF0aW9uID0gY3JlYXRlQW5pbWF0aW9uKCkuYmVmb3JlU3R5bGVzKHtcbiAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICAgICAgICAndHJhbnNmb3JtLW9yaWdpbic6ICd0b3AgY2VudGVyJyxcbiAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGJvZHlFbCA9IGRvY3VtZW50LmJvZHk7XG5cbiAgICAgICAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogRmFsbGJhY2sgZm9yIGJyb3dzZXJzIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBgbWF4KClgIChleDogRmlyZWZveClcbiAgICAgICAgICAgKiBObyBuZWVkIHRvIHdvcnJ5IGFib3V0IHN0YXR1c2JhciBwYWRkaW5nIHNpbmNlIGVuZ2luZXMgbGlrZSBHZWNrb1xuICAgICAgICAgICAqIGFyZSBub3QgdXNlZCBhcyB0aGUgZW5naW5lIGZvciBzdGFuZGFsb25lIENvcmRvdmEvQ2FwYWNpdG9yIGFwcHNcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1PZmZzZXQgPSAhQ1NTLnN1cHBvcnRzKCd3aWR0aCcsICdtYXgoMHB4LCAxcHgpJylcbiAgICAgICAgICAgID8gJzMwcHgnXG4gICAgICAgICAgICA6ICdtYXgoMzBweCwgdmFyKC0taW9uLXNhZmUtYXJlYS10b3ApKSc7XG4gICAgICAgICAgY29uc3QgbW9kYWxUcmFuc2Zvcm0gPSBoYXNDYXJkTW9kYWwgPyAnLTEwcHgnIDogdHJhbnNmb3JtT2Zmc2V0O1xuICAgICAgICAgIGNvbnN0IHRvUHJlc2VudGluZ1NjYWxlID0gdGhpcy5Td2lwZVRvQ2xvc2VEZWZhdWx0cy5NSU5fUFJFU0VOVElOR19TQ0FMRTtcbiAgICAgICAgICBjb25zdCBmaW5hbFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7bW9kYWxUcmFuc2Zvcm19KSBzY2FsZSgke3RvUHJlc2VudGluZ1NjYWxlfSlgO1xuXG4gICAgICAgICAgcHJlc2VudGluZ0FuaW1hdGlvblxuICAgICAgICAgICAgLmFmdGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBmaW5hbFRyYW5zZm9ybSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYmVmb3JlQWRkV3JpdGUoKCkgPT4gYm9keUVsLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2JsYWNrJykpXG4gICAgICAgICAgICAuYWRkRWxlbWVudChwcmVzZW50aW5nRWwpXG4gICAgICAgICAgICAua2V5ZnJhbWVzKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6ICdjb250cmFzdCgxKScsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcwcHgnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogJ2NvbnRyYXN0KDAuODUpJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGZpbmFsVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEwcHggMTBweCAwIDAnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihwcmVzZW50aW5nQW5pbWF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihiYWNrZHJvcEFuaW1hdGlvbik7XG5cbiAgICAgICAgICBpZiAoY3VycmVudEJhY2tkcm9wQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihjdXJyZW50QmFja2Ryb3BBbmltYXRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaGFzQ2FyZE1vZGFsKSB7XG4gICAgICAgICAgICB3cmFwcGVyQW5pbWF0aW9uLmZyb21Ubygnb3BhY2l0eScsICcwJywgJzEnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9QcmVzZW50aW5nU2NhbGUgPSBoYXNDYXJkTW9kYWxcbiAgICAgICAgICAgICAgPyB0aGlzLlN3aXBlVG9DbG9zZURlZmF1bHRzLk1JTl9QUkVTRU5USU5HX1NDQUxFXG4gICAgICAgICAgICAgIDogMTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoLTEwcHgpIHNjYWxlKCR7dG9QcmVzZW50aW5nU2NhbGV9KWA7XG5cbiAgICAgICAgICAgIHByZXNlbnRpbmdBbmltYXRpb25cbiAgICAgICAgICAgICAgLmFmdGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGZpbmFsVHJhbnNmb3JtLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYWRkRWxlbWVudChwcmVzZW50aW5nRWxSb290LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC13cmFwcGVyJykhKVxuICAgICAgICAgICAgICAua2V5ZnJhbWVzKFtcbiAgICAgICAgICAgICAgICB7IG9mZnNldDogMCwgZmlsdGVyOiAnY29udHJhc3QoMSknLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApIHNjYWxlKDEpJyB9LFxuICAgICAgICAgICAgICAgIHsgb2Zmc2V0OiAxLCBmaWx0ZXI6ICdjb250cmFzdCgwLjg1KScsIHRyYW5zZm9ybTogZmluYWxUcmFuc2Zvcm0gfSxcbiAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd0FuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbigpXG4gICAgICAgICAgICAgIC5hZnRlclN0eWxlcyh7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBmaW5hbFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmFkZEVsZW1lbnQocHJlc2VudGluZ0VsUm9vdC5xdWVyeVNlbGVjdG9yKCcubW9kYWwtc2hhZG93JykhKVxuICAgICAgICAgICAgICAua2V5ZnJhbWVzKFtcbiAgICAgICAgICAgICAgICB7IG9mZnNldDogMCwgb3BhY2l0eTogJzEnLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApIHNjYWxlKDEpJyB9LFxuICAgICAgICAgICAgICAgIHsgb2Zmc2V0OiAxLCBvcGFjaXR5OiAnMCcsIHRyYW5zZm9ybTogZmluYWxUcmFuc2Zvcm0gfSxcbiAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGJhc2VBbmltYXRpb24uYWRkQW5pbWF0aW9uKFtwcmVzZW50aW5nQW5pbWF0aW9uLCBzaGFkb3dBbmltYXRpb25dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2VBbmltYXRpb24uYWRkQW5pbWF0aW9uKGJhY2tkcm9wQW5pbWF0aW9uKTtcbiAgICAgICAgaWYgKGN1cnJlbnRCYWNrZHJvcEFuaW1hdGlvbikge1xuICAgICAgICAgIGJhc2VBbmltYXRpb24uYWRkQW5pbWF0aW9uKGN1cnJlbnRCYWNrZHJvcEFuaW1hdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhc2VBbmltYXRpb247XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBsZWF2ZUFuaW1hdGlvbihjdXJyZW50QmFja2Ryb3A/OiBIVE1MSW9uQmFja2Ryb3BFbGVtZW50KTogQW5pbWF0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIGJhc2VFbDogSFRNTEVsZW1lbnQsXG4gICAgICBvcHRzOiB7IHByZXNlbnRpbmdFbD86IEhUTUxFbGVtZW50IH0sXG4gICAgICBkdXJhdGlvbiA9IHRoaXMuZHVyYXRpb25cbiAgICApOiBBbmltYXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBwcmVzZW50aW5nRWwgfSA9IG9wdHM7XG4gICAgICBjb25zdCByb290ID0gdGhpcy5nZXRFbGVtZW50Um9vdChiYXNlRWwpO1xuICAgICAgY29uc3QgeyB3cmFwcGVyQW5pbWF0aW9uLCBiYWNrZHJvcEFuaW1hdGlvbiB9ID0gdGhpcy5jcmVhdGVMZWF2ZUFuaW1hdGlvbigpO1xuXG4gICAgICBiYWNrZHJvcEFuaW1hdGlvbi5hZGRFbGVtZW50KHJvb3QucXVlcnlTZWxlY3RvcignaW9uLWJhY2tkcm9wJykhKTtcblxuICAgICAgd3JhcHBlckFuaW1hdGlvblxuICAgICAgICAuYWRkRWxlbWVudChyb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbC13cmFwcGVyLCAubW9kYWwtc2hhZG93JykhKVxuICAgICAgICAuYmVmb3JlU3R5bGVzKHsgb3BhY2l0eTogMSB9KTtcblxuICAgICAgY29uc3QgYmFzZUFuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbignbGVhdmluZy1iYXNlJylcbiAgICAgICAgLmFkZEVsZW1lbnQoYmFzZUVsKVxuICAgICAgICAuZWFzaW5nKHRoaXMuZWFzaW5nTGVhdmUpXG4gICAgICAgIC5kdXJhdGlvbihkdXJhdGlvbilcbiAgICAgICAgLmFkZEFuaW1hdGlvbih3cmFwcGVyQW5pbWF0aW9uKTtcblxuICAgICAgbGV0IGN1cnJlbnRCYWNrZHJvcEFuaW1hdGlvbjogQW5pbWF0aW9uO1xuICAgICAgaWYgKGN1cnJlbnRCYWNrZHJvcCkge1xuICAgICAgICBjdXJyZW50QmFja2Ryb3BBbmltYXRpb24gPSBjcmVhdGVBbmltYXRpb24oKVxuICAgICAgICAgIC5hZGRFbGVtZW50KGN1cnJlbnRCYWNrZHJvcClcbiAgICAgICAgICAuZnJvbVRvKCdvcGFjaXR5JywgMC4wMSwgJ3ZhcigtLWJhY2tkcm9wLW9wYWNpdHkpJylcbiAgICAgICAgICAuYWZ0ZXJTdHlsZXMoeyBvcGFjaXR5OiAndmFyKC0tYmFja2Ryb3Atb3BhY2l0eSknIH0pOyAvL0Vuc3VyZXMgYmFja2Ryb3AgaXMgcmVzZXQgdG8gZGVmYXVsdCBvcGFjaXR5IGFmdGVyIHN3aXBlIHRvIGNsb3NlXG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVzZW50aW5nRWwpIHtcbiAgICAgICAgY29uc3QgaXNNb2JpbGUgPSAhdGhpcy5wbGF0Zm9ybS5pc1BoYWJsZXRPckJpZ2dlcigpO1xuICAgICAgICBjb25zdCBoYXNDYXJkTW9kYWwgPVxuICAgICAgICAgIHByZXNlbnRpbmdFbC50YWdOYW1lID09PSAnSU9OLU1PREFMJyAmJlxuICAgICAgICAgIChwcmVzZW50aW5nRWwgYXMgSFRNTElvbk1vZGFsRWxlbWVudCkucHJlc2VudGluZ0VsZW1lbnQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcHJlc2VudGluZ0VsUm9vdCA9IHRoaXMuZ2V0RWxlbWVudFJvb3QocHJlc2VudGluZ0VsKTtcblxuICAgICAgICBjb25zdCBwcmVzZW50aW5nQW5pbWF0aW9uID0gY3JlYXRlQW5pbWF0aW9uKClcbiAgICAgICAgICAuYmVmb3JlQ2xlYXJTdHlsZXMoWyd0cmFuc2Zvcm0nXSlcbiAgICAgICAgICAuYWZ0ZXJDbGVhclN0eWxlcyhbJ3RyYW5zZm9ybSddKVxuICAgICAgICAgIC5vbkZpbmlzaCgoY3VycmVudFN0ZXApID0+IHtcbiAgICAgICAgICAgIC8vIG9ubHkgcmVzZXQgYmFja2dyb3VuZCBjb2xvciBpZiB0aGlzIGlzIHRoZSBsYXN0IGNhcmQtc3R5bGUgbW9kYWxcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RlcCAhPT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXNlbnRpbmdFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG51bU1vZGFscyA9IEFycmF5LmZyb20oYm9keUVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lvbi1tb2RhbCcpKS5maWx0ZXIoXG4gICAgICAgICAgICAgIChtKSA9PiBtLnByZXNlbnRpbmdFbGVtZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICkubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG51bU1vZGFscyA8PSAxKSB7XG4gICAgICAgICAgICAgIGJvZHlFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZC1jb2xvcicsICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBib2R5RWwgPSBkb2N1bWVudC5ib2R5O1xuXG4gICAgICAgIGlmIChpc01vYmlsZSkge1xuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybU9mZnNldCA9ICFDU1Muc3VwcG9ydHMoJ3dpZHRoJywgJ21heCgwcHgsIDFweCknKVxuICAgICAgICAgICAgPyAnMzBweCdcbiAgICAgICAgICAgIDogJ21heCgzMHB4LCB2YXIoLS1pb24tc2FmZS1hcmVhLXRvcCkpJztcbiAgICAgICAgICBjb25zdCBtb2RhbFRyYW5zZm9ybSA9IGhhc0NhcmRNb2RhbCA/ICctMTBweCcgOiB0cmFuc2Zvcm1PZmZzZXQ7XG4gICAgICAgICAgY29uc3QgdG9QcmVzZW50aW5nU2NhbGUgPSB0aGlzLlN3aXBlVG9DbG9zZURlZmF1bHRzLk1JTl9QUkVTRU5USU5HX1NDQUxFO1xuICAgICAgICAgIGNvbnN0IGZpbmFsVHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHttb2RhbFRyYW5zZm9ybX0pIHNjYWxlKCR7dG9QcmVzZW50aW5nU2NhbGV9KWA7XG5cbiAgICAgICAgICBwcmVzZW50aW5nQW5pbWF0aW9uLmFkZEVsZW1lbnQocHJlc2VudGluZ0VsKS5rZXlmcmFtZXMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2NvbnRyYXN0KDAuODUpJyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBmaW5hbFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTBweCAxMHB4IDAgMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2NvbnRyYXN0KDEpJyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMHB4JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihwcmVzZW50aW5nQW5pbWF0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihiYWNrZHJvcEFuaW1hdGlvbik7XG4gICAgICAgICAgaWYgKGN1cnJlbnRCYWNrZHJvcEFuaW1hdGlvbikge1xuICAgICAgICAgICAgYmFzZUFuaW1hdGlvbi5hZGRBbmltYXRpb24oY3VycmVudEJhY2tkcm9wQW5pbWF0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWhhc0NhcmRNb2RhbCkge1xuICAgICAgICAgICAgd3JhcHBlckFuaW1hdGlvbi5mcm9tVG8oJ29wYWNpdHknLCAnMScsICcwJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRvUHJlc2VudGluZ1NjYWxlID0gaGFzQ2FyZE1vZGFsXG4gICAgICAgICAgICAgID8gdGhpcy5Td2lwZVRvQ2xvc2VEZWZhdWx0cy5NSU5fUFJFU0VOVElOR19TQ0FMRVxuICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBjb25zdCBmaW5hbFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZSgke3RvUHJlc2VudGluZ1NjYWxlfSlgO1xuXG4gICAgICAgICAgICBwcmVzZW50aW5nQW5pbWF0aW9uXG4gICAgICAgICAgICAgIC5hZGRFbGVtZW50KHByZXNlbnRpbmdFbFJvb3QucXVlcnlTZWxlY3RvcignLm1vZGFsLXdyYXBwZXInKSEpXG4gICAgICAgICAgICAgIC5hZnRlclN0eWxlcyh7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMCwgMCknLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAua2V5ZnJhbWVzKFtcbiAgICAgICAgICAgICAgICB7IG9mZnNldDogMCwgZmlsdGVyOiAnY29udHJhc3QoMC44NSknLCB0cmFuc2Zvcm06IGZpbmFsVHJhbnNmb3JtIH0sXG4gICAgICAgICAgICAgICAgeyBvZmZzZXQ6IDEsIGZpbHRlcjogJ2NvbnRyYXN0KDEpJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKSBzY2FsZSgxKScgfSxcbiAgICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd0FuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbigpXG4gICAgICAgICAgICAgIC5hZGRFbGVtZW50KHByZXNlbnRpbmdFbFJvb3QucXVlcnlTZWxlY3RvcignLm1vZGFsLXNoYWRvdycpISlcbiAgICAgICAgICAgICAgLmFmdGVyU3R5bGVzKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApIHNjYWxlKDEpJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgeyBvZmZzZXQ6IDAsIG9wYWNpdHk6ICcwJywgdHJhbnNmb3JtOiBmaW5hbFRyYW5zZm9ybSB9LFxuICAgICAgICAgICAgICAgIHsgb2Zmc2V0OiAxLCBvcGFjaXR5OiAnMScsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCkgc2NhbGUoMSknIH0sXG4gICAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihbcHJlc2VudGluZ0FuaW1hdGlvbiwgc2hhZG93QW5pbWF0aW9uXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihiYWNrZHJvcEFuaW1hdGlvbik7XG4gICAgICAgIGlmIChjdXJyZW50QmFja2Ryb3BBbmltYXRpb24pIHtcbiAgICAgICAgICBiYXNlQW5pbWF0aW9uLmFkZEFuaW1hdGlvbihjdXJyZW50QmFja2Ryb3BBbmltYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYXNlQW5pbWF0aW9uO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudGVyQW5pbWF0aW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tkcm9wQW5pbWF0aW9uID0gY3JlYXRlQW5pbWF0aW9uKClcbiAgICAgIC5mcm9tVG8oJ29wYWNpdHknLCAwLjAxLCAndmFyKC0tYmFja2Ryb3Atb3BhY2l0eSknKVxuICAgICAgLmJlZm9yZVN0eWxlcyh7XG4gICAgICAgICdwb2ludGVyLWV2ZW50cyc6ICdub25lJyxcbiAgICAgIH0pXG4gICAgICAuYWZ0ZXJDbGVhclN0eWxlcyhbJ3BvaW50ZXItZXZlbnRzJ10pO1xuXG4gICAgY29uc3Qgd3JhcHBlckFuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbigpLmZyb21UbyhcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgJ3RyYW5zbGF0ZVkoMTAwdmgpJyxcbiAgICAgICd0cmFuc2xhdGVZKDB2aCknXG4gICAgKTtcblxuICAgIHJldHVybiB7IGJhY2tkcm9wQW5pbWF0aW9uLCB3cmFwcGVyQW5pbWF0aW9uIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVMZWF2ZUFuaW1hdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBiYWNrZHJvcEFuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbigpLmZyb21Ubygnb3BhY2l0eScsICd2YXIoLS1iYWNrZHJvcC1vcGFjaXR5KScsIDApO1xuXG4gICAgY29uc3Qgd3JhcHBlckFuaW1hdGlvbiA9IGNyZWF0ZUFuaW1hdGlvbigpLmZyb21UbyhcbiAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgJ3RyYW5zbGF0ZVkoMHZoKScsXG4gICAgICAndHJhbnNsYXRlWSgxMDB2aCknXG4gICAgKTtcblxuICAgIHJldHVybiB7IGJhY2tkcm9wQW5pbWF0aW9uLCB3cmFwcGVyQW5pbWF0aW9uIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvb3QgY29udGV4dCBvZiBhIHNoYWRvdyBkb20gZWxlbWVudFxuICAgKiBPbiBuZXdlciBicm93c2VycyB0aGlzIHdpbGwgYmUgdGhlIHNoYWRvd1Jvb3QsXG4gICAqIGJ1dCBmb3Igb2xkZXIgYnJvd3NlciB0aGlzIG1heSBqdXN0IGJlIHRoZVxuICAgKiBlbGVtZW50IGl0c2VsZi5cbiAgICpcbiAgICogVXNlZnVsIGZvciB3aGVuZXZlciB5b3UgbmVlZCB0byBleHBsaWNpdGx5XG4gICAqIGRvIFwibXlFbGVtZW50LnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoLi4uKVwiLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50Um9vdCA9IChlbDogSFRNTEVsZW1lbnQsIGZhbGxiYWNrOiBIVE1MRWxlbWVudCA9IGVsKSA9PiB7XG4gICAgcmV0dXJuIGVsLnNoYWRvd1Jvb3QgfHwgZmFsbGJhY2s7XG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { NavigationEnd, NavigationStart, } from '@angular/router';\nimport { EMPTY, firstValueFrom } from 'rxjs';\nimport { filter, map, pairwise, skipUntil, startWith, takeUntil } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/router\";\nexport class ModalNavigationService {\n constructor(router, route) {\n this.router = router;\n this.route = route;\n this.navigationEndListener$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));\n }\n isModalRoute(url) {\n return url.includes('(modal:');\n }\n getCurrentActivatedRoute() {\n let childRoute = this.route.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n return childRoute;\n }\n async getModalRoutes(routeConfig, moduleRootRoutePath) {\n const flattenedRoutes = [].concat(...routeConfig);\n let modalRoutes = [];\n const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);\n if (moduleRootPaths) {\n modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);\n }\n return modalRoutes;\n }\n async getModuleRootPath(routes, moduleRootRoutePath) {\n if (moduleRootRoutePath) {\n const trimmedPaths = moduleRootRoutePath\n .trim()\n .split('/')\n .filter((path) => !!path);\n const rootPath = [''];\n return rootPath.concat(trimmedPaths);\n }\n const currentRoutePaths = await this.getCurrentRoutePaths();\n const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);\n return moduleRootPaths;\n }\n async getCurrentRoutePaths() {\n const rootPath = [''];\n const currentNavigation = this.router.getCurrentNavigation();\n if (!this.router.navigated && !currentNavigation) {\n // If router hasn't navigated yet and we are not in the middle of navigating, assume root:\n return rootPath;\n }\n if (currentNavigation) {\n // Wait for current navigation to finish:\n await firstValueFrom(this.navigationEndListener$);\n }\n let childRoute = this.route.snapshot.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n const currentBackdropRoutePath = childRoute.pathFromRoot.filter((route) => route.outlet !== 'modal');\n return rootPath.concat(...currentBackdropRoutePath.map((route) => route.url.filter((segment) => !!segment.path).map((segment) => segment.path)));\n }\n getRoutePathsWithoutChildSegments(routePaths, routes) {\n if (!routePaths.length)\n return routePaths;\n const matchedChildRoute = this.findChildRouteForUrl(routePaths.join('/'), routes);\n if (!matchedChildRoute)\n return routePaths;\n const startSlashRegex = /^\\//;\n const relativeChildRoute = matchedChildRoute.replace(startSlashRegex, '');\n const childSegmentCount = relativeChildRoute.split('/').length;\n const routePathsWithoutChildSegments = routePaths.slice(0, -childSegmentCount); // Remove child segments from end of route path array\n return routePathsWithoutChildSegments;\n }\n findChildRouteForUrl(url, routes) {\n const moduleRelativePaths = this.getRoutePaths(routes, ['']).sort().reverse(); // Ensure child paths are evaluated first\n let matchedChildRoute = moduleRelativePaths.find((path) => url.endsWith(path));\n if (!matchedChildRoute) {\n // No static child route found matching current route - look for child route with url params:\n const exactMatch = false;\n matchedChildRoute = moduleRelativePaths.find((path) => path.includes('/:') && this.pathContainsChildRouteWithUrlParams(url, path, exactMatch));\n }\n return matchedChildRoute;\n }\n pathContainsChildRouteWithUrlParams(path, childRouteWithUrlParams, exactMatch) {\n const pathSegments = path.split('/');\n const startSlashRegex = /^\\//;\n let childRouteToMatch = childRouteWithUrlParams;\n if (!exactMatch) {\n const relativeChildRoute = childRouteWithUrlParams.replace(startSlashRegex, '');\n childRouteToMatch = relativeChildRoute;\n }\n const childRouteSegments = childRouteToMatch.split('/');\n // Match each child route segment against url\n // Match backwards from end to start of child route, i.e. \"url ends with child route\":\n const pathContainsChildRoute = childRouteSegments.reverse().every((childRouteSegment) => {\n const pathSegment = pathSegments.pop();\n // url params (e.g. `/:id/`) are treated as a match:\n return childRouteSegment.startsWith(':') || childRouteSegment === pathSegment;\n });\n if (exactMatch) {\n // Only match if we've reached the start of the url to match against:\n return pathSegments.length === 0 && pathContainsChildRoute;\n }\n return pathContainsChildRoute;\n }\n getRoutePaths(routes, parentPath) {\n return Array.isArray(routes)\n ? [].concat(...routes.map((route) => this.getRoutePath(route, parentPath)))\n : [];\n }\n getRoutePath(route, parentPath) {\n const routes = [];\n if (route.outlet)\n return routes; // Don't return relative paths for outlet routes\n const currentPath = [...parentPath];\n if (route.path) {\n currentPath.push(route.path);\n routes.push(currentPath.join('/'));\n }\n return routes.concat(this.getRoutePaths(route.children, currentPath));\n }\n getModalRoutePath(route, parentPath) {\n const modalOutletName = 'modal';\n if (!!route.path && route.outlet === modalOutletName) {\n const modalOutletPath = `(${modalOutletName}:${route.path})`;\n const modalRoutePath = [...parentPath, modalOutletPath].join('/');\n return [modalRoutePath];\n }\n const currentPath = [...parentPath];\n if (route.path) {\n currentPath.push(route.path);\n }\n return [].concat(...this.getModalRoutePaths(route.children, currentPath));\n }\n getModalRoutePaths(routes, parentPath) {\n return Array.isArray(routes)\n ? [].concat(...routes.map((route) => this.getModalRoutePath(route, parentPath)))\n : [];\n }\n isNewModalWindow(navigationEnd) {\n const currentNavigation = this.router.getCurrentNavigation();\n if (!currentNavigation || !currentNavigation.previousNavigation) {\n return true;\n }\n const previousRoutePath = (currentNavigation.previousNavigation.finalUrl ||\n currentNavigation.previousNavigation.extractedUrl).toString();\n const wasModalRoute = this.isModalRoute(previousRoutePath);\n const isModalRoute = this.isModalRoute(navigationEnd.urlAfterRedirects);\n if (!wasModalRoute && isModalRoute) {\n return true;\n }\n const currentModalRouteParent = navigationEnd.urlAfterRedirects.split('/(modal:')[0];\n const previousModalRouteParent = previousRoutePath.split('/(modal:')[0];\n return previousModalRouteParent !== currentModalRouteParent;\n }\n async waitForCurrentThenGetNavigationEndStream() {\n if (this.router.getCurrentNavigation()) {\n const currentNavigationEnd = await firstValueFrom(this.navigationEndListener$);\n return this.navigationEndListener$.pipe(startWith(currentNavigationEnd));\n }\n return this.navigationEndListener$;\n }\n modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {\n return navigationEnd$.pipe(filter((navigationEnd) => this.modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams)), map((navigationEnd) => {\n return {\n route: this.getCurrentActivatedRoute(),\n isNewModal: this.isNewModalWindow(navigationEnd),\n };\n }));\n }\n modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams) {\n return navigationEnd$.pipe(pairwise(), \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n filter(([prevNavigation, _]) => this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)), // Only emit if previous route was modal\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n map(([_, currentNavigation]) => {\n const isNewModalRoute = this.isModalRoute(currentNavigation.urlAfterRedirects);\n // Deactivate modal route if new route is NOT modal OR is outside current parent route:\n return !isNewModalRoute || this.isNewModalWindow(currentNavigation);\n }), filter((isDeactivation) => isDeactivation));\n }\n modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams) {\n const pathname = navigationEnd.urlAfterRedirects.split('?')[0];\n let hasRoute = modalRouteSet.has(pathname);\n if (!hasRoute && modalRoutesContainsUrlParams) {\n // Use `for ... of` instead of `forEach` so we can break out of the loop if route is found:\n for (const route of modalRouteSet) {\n const exactMatch = true;\n const routeMatchesPath = this.pathContainsChildRouteWithUrlParams(pathname, route, exactMatch);\n if (routeMatchesPath) {\n hasRoute = true;\n break;\n }\n }\n }\n return hasRoute;\n }\n async getModalNavigation(routeConfig, moduleRootRoutePath) {\n if (Array.isArray(routeConfig)) {\n const navigationEnd$ = await this.waitForCurrentThenGetNavigationEndStream();\n const modalRoutes = await this.getModalRoutes(routeConfig, moduleRootRoutePath);\n const hasModalRoutes = modalRoutes.length > 0;\n if (hasModalRoutes) {\n const modalRoutesContainsUrlParams = modalRoutes.some((route) => route.includes('/:'));\n const modalRouteSet = new Set(modalRoutes);\n const activated$ = this.modalRouteActivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);\n const deactivated$ = this.modalRouteDeactivatedFor(navigationEnd$, modalRouteSet, modalRoutesContainsUrlParams);\n return { activated$, deactivated$ };\n }\n }\n return { activated$: EMPTY, deactivated$: EMPTY };\n }\n async navigateToModal(path, queryParams) {\n const commands = Array.isArray(path) ? [...path] : path.split('/');\n const childPath = commands.pop();\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n return result;\n }\n async navigateWithinModal(relativePath, queryParams) {\n return this.router.navigate([relativePath], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n }\n async navigateOutOfModalOutlet() {\n const currentActivatedRoute = this.getCurrentActivatedRoute();\n const currentNavigationFinalUrl = this.router.getCurrentNavigation()?.finalUrl?.toString();\n const isCurrentlyNavigatingOutOfModalOutlet = currentNavigationFinalUrl && !this.isModalRoute(currentNavigationFinalUrl);\n if (currentActivatedRoute.outlet !== 'modal' || isCurrentlyNavigatingOutOfModalOutlet) {\n // Nothing to do here, bail out:\n return Promise.resolve(true);\n }\n const parentRoute = this.getBackdropRoute(currentActivatedRoute);\n return this.router.navigate(['./'], {\n relativeTo: parentRoute,\n });\n }\n getBackdropRoute(currentActivatedRoute) {\n let parentRoute = currentActivatedRoute.parent;\n while (parentRoute && !parentRoute.component && !!parentRoute.parent) {\n parentRoute = parentRoute.parent;\n }\n return parentRoute;\n }\n handleBrowserBackButton(modal) {\n const popstateNavigationStart$ = this.router.events.pipe(filter((event) => event instanceof NavigationStart && event.navigationTrigger === 'popstate'));\n const navigationEnd$ = this.router.events.pipe(filter((event) => event instanceof NavigationEnd));\n navigationEnd$\n .pipe(skipUntil(popstateNavigationStart$), takeUntil(modal.onWillDismiss()))\n .subscribe(() => {\n modal.dismiss();\n });\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalNavigationService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalNavigationService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalNavigationService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtbmF2aWdhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFFTCxhQUFhLEVBQ2IsZUFBZSxHQUtoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLeEYsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLE1BQWMsRUFDZCxLQUFxQjtRQURyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUEyTHZCLDJCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEQsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUEwQixFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsQ0FBQyxDQUMxRSxDQUFDO0lBNUxDLENBQUM7SUFFSixZQUFZLENBQUMsR0FBVztRQUN0QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNqQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxj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Q0FBQyxDQUFDO2FBQzNFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO2tJQS9WVSxzQkFBc0I7c0lBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUGFyYW1zLFxuICBSb3V0ZSxcbiAgUm91dGVyLFxuICBSb3V0ZXMsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBFTVBUWSwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBwYWlyd2lzZSwgc2tpcFVudGlsLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTW9kYWxSb3V0ZUFjdGl2YXRpb24gfSBmcm9tICcuL21vZGFsLmludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1vZGFsTmF2aWdhdGlvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBpc01vZGFsUm91dGUodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXJsLmluY2x1ZGVzKCcobW9kYWw6Jyk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRBY3RpdmF0ZWRSb3V0ZSgpOiBBY3RpdmF0ZWRSb3V0ZSB7XG4gICAgbGV0IGNoaWxkUm91dGUgPSB0aGlzLnJvdXRlLnJvb3Q7XG4gICAgd2hpbGUgKGNoaWxkUm91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgY2hpbGRSb3V0ZSA9IGNoaWxkUm91dGUuZmlyc3RDaGlsZDtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkUm91dGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE1vZGFsUm91dGVzKFxuICAgIHJvdXRlQ29uZmlnOiBSb3V0ZXNbXSxcbiAgICBtb2R1bGVSb290Um91dGVQYXRoPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBmbGF0dGVuZWRSb3V0ZXM6IFJvdXRlcyA9IFtdLmNvbmNhdCguLi5yb3V0ZUNvbmZpZyk7XG4gICAgbGV0IG1vZGFsUm91dGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG1vZHVsZVJvb3RQYXRocyA9IGF3YWl0IHRoaXMuZ2V0TW9kdWxlUm9vdFBhdGgoZmxhdHRlbmVkUm91dGVzLCBtb2R1bGVSb290Um91dGVQYXRoKTtcbiAgICBpZiAobW9kdWxlUm9vdFBhdGhzKSB7XG4gICAgICBtb2RhbFJvdXRlcyA9IHRoaXMuZ2V0TW9kYWxSb3V0ZVBhdGhzKGZsYXR0ZW5lZFJvdXRlcywgbW9kdWxlUm9vdFBhdGhzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGFsUm91dGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRNb2R1bGVSb290UGF0aChyb3V0ZXM6IFJvdXRlcywgbW9kdWxlUm9vdFJvdXRlUGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAobW9kdWxlUm9vdFJvdXRlUGF0aCkge1xuICAgICAgY29uc3QgdHJpbW1lZFBhdGhzID0gbW9kdWxlUm9vdFJvdXRlUGF0aFxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgIC5maWx0ZXIoKHBhdGgpID0+ICEhcGF0aCk7XG4gICAgICBjb25zdCByb290UGF0aCA9IFsnJ107XG4gICAgICByZXR1cm4gcm9vdFBhdGguY29uY2F0KHRyaW1tZWRQYXRocyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFJvdXRlUGF0aHMgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRSb3V0ZVBhdGhzKCk7XG4gICAgY29uc3QgbW9kdWxlUm9vdFBhdGhzID0gdGhpcy5nZXRSb3V0ZVBhdGhzV2l0aG91dENoaWxkU2VnbWVudHMoY3VycmVudFJvdXRlUGF0aHMsIHJvdXRlcyk7XG4gICAgcmV0dXJuIG1vZHVsZVJvb3RQYXRocztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VycmVudFJvdXRlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJvb3RQYXRoID0gWycnXTtcbiAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvbiA9IHRoaXMucm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCk7XG5cbiAgICBpZiAoIXRoaXMucm91dGVyLm5hdmlnYXRlZCAmJiAhY3VycmVudE5hdmlnYXRpb24pIHtcbiAgICAgIC8vIElmIHJvdXRlciBoYXNuJ3QgbmF2aWdhdGVkIHlldCBhbmQgd2UgYXJlIG5vdCBpbiB0aGUgbWlkZGxlIG9mIG5hdmlnYXRpbmcsIGFzc3VtZSByb290OlxuICAgICAgcmV0dXJuIHJvb3RQYXRoO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TmF2aWdhdGlvbikge1xuICAgICAgLy8gV2FpdCBmb3IgY3VycmVudCBuYXZpZ2F0aW9uIHRvIGZpbmlzaDpcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmF2aWdhdGlvbkVuZExpc3RlbmVyJCk7XG4gICAgfVxuXG4gICAgbGV0IGNoaWxkUm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnJvb3Q7XG4gICAgd2hpbGUgKGNoaWxkUm91dGUuZmlyc3RDaGlsZCkge1xuICAgICAgY2hpbGRSb3V0ZSA9IGNoaWxkUm91dGUuZmlyc3RDaGlsZDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEJhY2tkcm9wUm91dGVQYXRoID0gY2hpbGRSb3V0ZS5wYXRoRnJvbVJvb3QuZmlsdGVyKFxuICAgICAgKHJvdXRlKSA9PiByb3V0ZS5vdXRsZXQgIT09ICdtb2RhbCdcbiAgICApO1xuXG4gICAgcmV0dXJuIHJvb3RQYXRoLmNvbmNhdChcbiAgICAgIC4uLmN1cnJlbnRCYWNrZHJvcFJvdXRlUGF0aC5tYXAoKHJvdXRlKSA9PlxuICAgICAgICByb3V0ZS51cmwuZmlsdGVyKChzZWdtZW50KSA9PiAhIXNlZ21lbnQucGF0aCkubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91dGVQYXRoc1dpdGhvdXRDaGlsZFNlZ21lbnRzKHJvdXRlUGF0aHM6IHN0cmluZ1tdLCByb3V0ZXM6IFJvdXRlcyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXJvdXRlUGF0aHMubGVuZ3RoKSByZXR1cm4gcm91dGVQYXRocztcblxuICAgIGNvbnN0IG1hdGNoZWRDaGlsZFJvdXRlID0gdGhpcy5maW5kQ2hpbGRSb3V0ZUZvclVybChyb3V0ZVBhdGhzLmpvaW4oJy8nKSwgcm91dGVzKTtcblxuICAgIGlmICghbWF0Y2hlZENoaWxkUm91dGUpIHJldHVybiByb3V0ZVBhdGhzO1xuXG4gICAgY29uc3Qgc3RhcnRTbGFzaFJlZ2V4ID0gL15cXC8vO1xuICAgIGNvbnN0IHJlbGF0aXZlQ2hpbGRSb3V0ZSA9IG1hdGNoZWRDaGlsZFJvdXRlLnJlcGxhY2Uoc3RhcnRTbGFzaFJlZ2V4LCAnJyk7XG4gICAgY29uc3QgY2hpbGRTZWdtZW50Q291bnQgPSByZWxhdGl2ZUNoaWxkUm91dGUuc3BsaXQoJy8nKS5sZW5ndGg7XG4gICAgY29uc3Qgcm91dGVQYXRoc1dpdGhvdXRDaGlsZFNlZ21lbnRzID0gcm91dGVQYXRocy5zbGljZSgwLCAtY2hpbGRTZWdtZW50Q291bnQpOyAvLyBSZW1vdmUgY2hpbGQgc2VnbWVudHMgZnJvbSBlbmQgb2Ygcm91dGUgcGF0aCBhcnJheVxuICAgIHJldHVybiByb3V0ZVBhdGhzV2l0aG91dENoaWxkU2VnbWVudHM7XG4gIH1cblxuICBwcml2YXRlIGZpbmRDaGlsZFJvdXRlRm9yVXJsKHVybDogc3RyaW5nLCByb3V0ZXM6IFJvdXRlcykge1xuICAgIGNvbnN0IG1vZHVsZVJlbGF0aXZlUGF0aHMgPSB0aGlzLmdldFJvdXRlUGF0aHMocm91dGVzLCBbJyddKS5zb3J0KCkucmV2ZXJzZSgpOyAvLyBFbnN1cmUgY2hpbGQgcGF0aHMgYXJlIGV2YWx1YXRlZCBmaXJzdFxuICAgIGxldCBtYXRjaGVkQ2hpbGRSb3V0ZSA9IG1vZHVsZVJlbGF0aXZlUGF0aHMuZmluZCgocGF0aCkgPT4gdXJsLmVuZHNXaXRoKHBhdGgpKTtcbiAgICBpZiAoIW1hdGNoZWRDaGlsZFJvdXRlKSB7XG4gICAgICAvLyBObyBzdGF0aWMgY2hpbGQgcm91dGUgZm91bmQgbWF0Y2hpbmcgY3VycmVudCByb3V0ZSAtIGxvb2sgZm9yIGNoaWxkIHJvdXRlIHdpdGggdXJsIHBhcmFtczpcbiAgICAgIGNvbnN0IGV4YWN0TWF0Y2ggPSBmYWxzZTtcbiAgICAgIG1hdGNoZWRDaGlsZFJvdXRlID0gbW9kdWxlUmVsYXRpdmVQYXRocy5maW5kKFxuICAgICAgICAocGF0aCkgPT5cbiAgICAgICAgICBwYXRoLmluY2x1ZGVzKCcvOicpICYmIHRoaXMucGF0aENvbnRhaW5zQ2hpbGRSb3V0ZVdpdGhVcmxQYXJhbXModXJsLCBwYXRoLCBleGFjdE1hdGNoKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZWRDaGlsZFJvdXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRoQ29udGFpbnNDaGlsZFJvdXRlV2l0aFVybFBhcmFtcyhcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY2hpbGRSb3V0ZVdpdGhVcmxQYXJhbXM6IHN0cmluZyxcbiAgICBleGFjdE1hdGNoOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBjb25zdCBzdGFydFNsYXNoUmVnZXggPSAvXlxcLy87XG4gICAgbGV0IGNoaWxkUm91dGVUb01hdGNoID0gY2hpbGRSb3V0ZVdpdGhVcmxQYXJhbXM7XG4gICAgaWYgKCFleGFjdE1hdGNoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZUNoaWxkUm91dGUgPSBjaGlsZFJvdXRlV2l0aFVybFBhcmFtcy5yZXBsYWNlKHN0YXJ0U2xhc2hSZWdleCwgJycpO1xuICAgICAgY2hpbGRSb3V0ZVRvTWF0Y2ggPSByZWxhdGl2ZUNoaWxkUm91dGU7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVTZWdtZW50cyA9IGNoaWxkUm91dGVUb01hdGNoLnNwbGl0KCcvJyk7XG4gICAgLy8gTWF0Y2ggZWFjaCBjaGlsZCByb3V0ZSBzZWdtZW50IGFnYWluc3QgdXJsXG4gICAgLy8gTWF0Y2ggYmFja3dhcmRzIGZyb20gZW5kIHRvIHN0YXJ0IG9mIGNoaWxkIHJvdXRlLCBpLmUuIFwidXJsIGVuZHMgd2l0aCBjaGlsZCByb3V0ZVwiOlxuICAgIGNvbnN0IHBhdGhDb250YWluc0NoaWxkUm91dGUgPSBjaGlsZFJvdXRlU2VnbWVudHMucmV2ZXJzZSgpLmV2ZXJ5KChjaGlsZFJvdXRlU2VnbWVudCkgPT4ge1xuICAgICAgY29uc3QgcGF0aFNlZ21lbnQgPSBwYXRoU2VnbWVudHMucG9wKCk7XG4gICAgICAvLyB1cmwgcGFyYW1zIChlLmcuIGAvOmlkL2ApIGFyZSB0cmVhdGVkIGFzIGEgbWF0Y2g6XG4gICAgICByZXR1cm4gY2hpbGRSb3V0ZVNlZ21lbnQuc3RhcnRzV2l0aCgnOicpIHx8IGNoaWxkUm91dGVTZWdtZW50ID09PSBwYXRoU2VnbWVudDtcbiAgICB9KTtcbiAgICBpZiAoZXhhY3RNYXRjaCkge1xuICAgICAgLy8gT25seSBtYXRjaCBpZiB3ZSd2ZSByZWFjaGVkIHRoZSBzdGFydCBvZiB0aGUgdXJsIHRvIG1hdGNoIGFnYWluc3Q6XG4gICAgICByZXR1cm4gcGF0aFNlZ21lbnRzLmxlbmd0aCA9PT0gMCAmJiBwYXRoQ29udGFpbnNDaGlsZFJvdXRlO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aENvbnRhaW5zQ2hpbGRSb3V0ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91dGVQYXRocyhyb3V0ZXM6IFJvdXRlcywgcGFyZW50UGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm91dGVzKVxuICAgICAgPyAoW10gYXMgc3RyaW5nW10pLmNvbmNhdCguLi5yb3V0ZXMubWFwKChyb3V0ZSkgPT4gdGhpcy5nZXRSb3V0ZVBhdGgocm91dGUsIHBhcmVudFBhdGgpKSlcbiAgICAgIDogW107XG4gIH1cblxuICBwcml2YXRlIGdldFJvdXRlUGF0aChyb3V0ZTogUm91dGUsIHBhcmVudFBhdGg6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJvdXRlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocm91dGUub3V0bGV0KSByZXR1cm4gcm91dGVzOyAvLyBEb24ndCByZXR1cm4gcmVsYXRpdmUgcGF0aHMgZm9yIG91dGxldCByb3V0ZXNcblxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gWy4uLnBhcmVudFBhdGhdO1xuICAgIGlmIChyb3V0ZS5wYXRoKSB7XG4gICAgICBjdXJyZW50UGF0aC5wdXNoKHJvdXRlLnBhdGgpO1xuICAgICAgcm91dGVzLnB1c2goY3VycmVudFBhdGguam9pbignLycpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91dGVzLmNvbmNhdCh0aGlzLmdldFJvdXRlUGF0aHMocm91dGUuY2hpbGRyZW4sIGN1cnJlbnRQYXRoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGFsUm91dGVQYXRoKHJvdXRlOiBSb3V0ZSwgcGFyZW50UGF0aDogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbW9kYWxPdXRsZXROYW1lID0gJ21vZGFsJztcbiAgICBpZiAoISFyb3V0ZS5wYXRoICYmIHJvdXRlLm91dGxldCA9PT0gbW9kYWxPdXRsZXROYW1lKSB7XG4gICAgICBjb25zdCBtb2RhbE91dGxldFBhdGggPSBgKCR7bW9kYWxPdXRsZXROYW1lfToke3JvdXRlLnBhdGh9KWA7XG4gICAgICBjb25zdCBtb2RhbFJvdXRlUGF0aCA9IFsuLi5wYXJlbnRQYXRoLCBtb2RhbE91dGxldFBhdGhdLmpvaW4oJy8nKTtcbiAgICAgIHJldHVybiBbbW9kYWxSb3V0ZVBhdGhdO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IFsuLi5wYXJlbnRQYXRoXTtcbiAgICBpZiAocm91dGUucGF0aCkge1xuICAgICAgY3VycmVudFBhdGgucHVzaChyb3V0ZS5wYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuIChbXSBhcyBzdHJpbmdbXSkuY29uY2F0KC4uLnRoaXMuZ2V0TW9kYWxSb3V0ZVBhdGhzKHJvdXRlLmNoaWxkcmVuLCBjdXJyZW50UGF0aCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNb2RhbFJvdXRlUGF0aHMocm91dGVzOiBSb3V0ZXMsIHBhcmVudFBhdGg6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJvdXRlcylcbiAgICAgID8gKFtdIGFzIHN0cmluZ1tdKS5jb25jYXQoLi4ucm91dGVzLm1hcCgocm91dGUpID0+IHRoaXMuZ2V0TW9kYWxSb3V0ZVBhdGgocm91dGUsIHBhcmVudFBhdGgpKSlcbiAgICAgIDogW107XG4gIH1cblxuICBwcml2YXRlIGlzTmV3TW9kYWxXaW5kb3cobmF2aWdhdGlvbkVuZDogTmF2aWdhdGlvbkVuZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKTtcbiAgICBpZiAoIWN1cnJlbnROYXZpZ2F0aW9uIHx8ICFjdXJyZW50TmF2aWdhdGlvbi5wcmV2aW91c05hdmlnYXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c1JvdXRlUGF0aCA9IChcbiAgICAgIGN1cnJlbnROYXZpZ2F0aW9uLnByZXZpb3VzTmF2aWdhdGlvbi5maW5hbFVybCB8fFxuICAgICAgY3VycmVudE5hdmlnYXRpb24ucHJldmlvdXNOYXZpZ2F0aW9uLmV4dHJhY3RlZFVybFxuICAgICkudG9TdHJpbmcoKTtcbiAgICBjb25zdCB3YXNNb2RhbFJvdXRlID0gdGhpcy5pc01vZGFsUm91dGUocHJldmlvdXNSb3V0ZVBhdGgpO1xuICAgIGNvbnN0IGlzTW9kYWxSb3V0ZSA9IHRoaXMuaXNNb2RhbFJvdXRlKG5hdmlnYXRpb25FbmQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xuICAgIGlmICghd2FzTW9kYWxSb3V0ZSAmJiBpc01vZGFsUm91dGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRNb2RhbFJvdXRlUGFyZW50ID0gbmF2aWdhdGlvbkVuZC51cmxBZnRlclJlZGlyZWN0cy5zcGxpdCgnLyhtb2RhbDonKVswXTtcbiAgICBjb25zdCBwcmV2aW91c01vZGFsUm91dGVQYXJlbnQgPSBwcmV2aW91c1JvdXRlUGF0aC5zcGxpdCgnLyhtb2RhbDonKVswXTtcblxuICAgIHJldHVybiBwcmV2aW91c01vZGFsUm91dGVQYXJlbnQgIT09IGN1cnJlbnRNb2RhbFJvdXRlUGFyZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kTGlzdGVuZXIkID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoXG4gICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25FbmQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuICApO1xuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckN1cnJlbnRUaGVuR2V0TmF2aWdhdGlvbkVuZFN0cmVhbSgpOiBQcm9taXNlPE9ic2VydmFibGU8TmF2aWdhdGlvbkVuZD4+IHtcbiAgICBpZiAodGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKSkge1xuICAgICAgY29uc3QgY3VycmVudE5hdmlnYXRpb25FbmQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm5hdmlnYXRpb25FbmRMaXN0ZW5lciQpO1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkVuZExpc3RlbmVyJC5waXBlKHN0YXJ0V2l0aChjdXJyZW50TmF2aWdhdGlvbkVuZCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uRW5kTGlzdGVuZXIkO1xuICB9XG5cbiAgcHJpdmF0ZSBtb2RhbFJvdXRlQWN0aXZhdGVkRm9yKFxuICAgIG5hdmlnYXRpb25FbmQkOiBPYnNlcnZhYmxlPE5hdmlnYXRpb25FbmQ+LFxuICAgIG1vZGFsUm91dGVTZXQ6IFNldDxzdHJpbmc+LFxuICAgIG1vZGFsUm91dGVzQ29udGFpbnNVcmxQYXJhbXM6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxNb2RhbFJvdXRlQWN0aXZhdGlvbj4ge1xuICAgIHJldHVybiBuYXZpZ2F0aW9uRW5kJC5waXBlKFxuICAgICAgZmlsdGVyKChuYXZpZ2F0aW9uRW5kKSA9PlxuICAgICAgICB0aGlzLm1vZGFsUm91dGVTZXRDb250YWluc1BhdGgobW9kYWxSb3V0ZVNldCwgbmF2aWdhdGlvbkVuZCwgbW9kYWxSb3V0ZXNDb250YWluc1VybFBhcmFtcylcbiAgICAgICksXG4gICAgICBtYXAoKG5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3V0ZTogdGhpcy5nZXRDdXJyZW50QWN0aXZhdGVkUm91dGUoKSxcbiAgICAgICAgICBpc05ld01vZGFsOiB0aGlzLmlzTmV3TW9kYWxXaW5kb3cobmF2aWdhdGlvbkVuZCksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1vZGFsUm91dGVEZWFjdGl2YXRlZEZvcihcbiAgICBuYXZpZ2F0aW9uRW5kJDogT2JzZXJ2YWJsZTxOYXZpZ2F0aW9uRW5kPixcbiAgICBtb2RhbFJvdXRlU2V0OiBTZXQ8c3RyaW5nPixcbiAgICBtb2RhbFJvdXRlc0NvbnRhaW5zVXJsUGFyYW1zOiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuYXZpZ2F0aW9uRW5kJC5waXBlKFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIGZpbHRlcigoW3ByZXZOYXZpZ2F0aW9uLCBfXSkgPT5cbiAgICAgICAgdGhpcy5tb2RhbFJvdXRlU2V0Q29udGFpbnNQYXRoKG1vZGFsUm91dGVTZXQsIHByZXZOYXZpZ2F0aW9uLCBtb2RhbFJvdXRlc0NvbnRhaW5zVXJsUGFyYW1zKVxuICAgICAgKSwgLy8gT25seSBlbWl0IGlmIHByZXZpb3VzIHJvdXRlIHdhcyBtb2RhbFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgbWFwKChbXywgY3VycmVudE5hdmlnYXRpb25dKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTmV3TW9kYWxSb3V0ZSA9IHRoaXMuaXNNb2RhbFJvdXRlKGN1cnJlbnROYXZpZ2F0aW9uLnVybEFmdGVyUmVkaXJlY3RzKTtcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSBtb2RhbCByb3V0ZSBpZiBuZXcgcm91dGUgaXMgTk9UIG1vZGFsIE9SIGlzIG91dHNpZGUgY3VycmVudCBwYXJlbnQgcm91dGU6XG4gICAgICAgIHJldHVybiAhaXNOZXdNb2RhbFJvdXRlIHx8IHRoaXMuaXNOZXdNb2RhbFdpbmRvdyhjdXJyZW50TmF2aWdhdGlvbik7XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcigoaXNEZWFjdGl2YXRpb24pID0+IGlzRGVhY3RpdmF0aW9uKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG1vZGFsUm91dGVTZXRDb250YWluc1BhdGgoXG4gICAgbW9kYWxSb3V0ZVNldDogU2V0PHN0cmluZz4sXG4gICAgbmF2aWdhdGlvbkVuZDogTmF2aWdhdGlvbkVuZCxcbiAgICBtb2RhbFJvdXRlc0NvbnRhaW5zVXJsUGFyYW1zOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IHBhdGhuYW1lID0gbmF2aWdhdGlvbkVuZC51cmxBZnRlclJlZGlyZWN0cy5zcGxpdCgnPycpWzBdO1xuICAgIGxldCBoYXNSb3V0ZSA9IG1vZGFsUm91dGVTZXQuaGFzKHBhdGhuYW1lKTtcbiAgICBpZiAoIWhhc1JvdXRlICYmIG1vZGFsUm91dGVzQ29udGFpbnNVcmxQYXJhbXMpIHtcbiAgICAgIC8vIFVzZSBgZm9yIC4uLiBvZmAgaW5zdGVhZCBvZiBgZm9yRWFjaGAgc28gd2UgY2FuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiByb3V0ZSBpcyBmb3VuZDpcbiAgICAgIGZvciAoY29uc3Qgcm91dGUgb2YgbW9kYWxSb3V0ZVNldCkge1xuICAgICAgICBjb25zdCBleGFjdE1hdGNoID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgcm91dGVNYXRjaGVzUGF0aCA9IHRoaXMucGF0aENvbnRhaW5zQ2hpbGRSb3V0ZVdpdGhVcmxQYXJhbXMoXG4gICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgZXhhY3RNYXRjaFxuICAgICAgICApO1xuICAgICAgICBpZiAocm91dGVNYXRjaGVzUGF0aCkge1xuICAgICAgICAgIGhhc1JvdXRlID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzUm91dGU7XG4gIH1cblxuICBhc3luYyBnZXRNb2RhbE5hdmlnYXRpb24oXG4gICAgcm91dGVDb25maWc6IFJvdXRlc1tdLFxuICAgIG1vZHVsZVJvb3RSb3V0ZVBhdGg/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IGFjdGl2YXRlZCQ6IE9ic2VydmFibGU8TW9kYWxSb3V0ZUFjdGl2YXRpb24+OyBkZWFjdGl2YXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gfT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvdXRlQ29uZmlnKSkge1xuICAgICAgY29uc3QgbmF2aWdhdGlvbkVuZCQgPSBhd2FpdCB0aGlzLndhaXRGb3JDdXJyZW50VGhlbkdldE5hdmlnYXRpb25FbmRTdHJlYW0oKTtcbiAgICAgIGNvbnN0IG1vZGFsUm91dGVzID0gYXdhaXQgdGhpcy5nZXRNb2RhbFJvdXRlcyhyb3V0ZUNvbmZpZywgbW9kdWxlUm9vdFJvdXRlUGF0aCk7XG4gICAgICBjb25zdCBoYXNNb2RhbFJvdXRlcyA9IG1vZGFsUm91dGVzLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzTW9kYWxSb3V0ZXMpIHtcbiAgICAgICAgY29uc3QgbW9kYWxSb3V0ZXNDb250YWluc1VybFBhcmFtcyA9IG1vZGFsUm91dGVzLnNvbWUoKHJvdXRlKSA9PiByb3V0ZS5pbmNsdWRlcygnLzonKSk7XG4gICAgICAgIGNvbnN0IG1vZGFsUm91dGVTZXQgPSBuZXcgU2V0KG1vZGFsUm91dGVzKTtcbiAgICAgICAgY29uc3QgYWN0aXZhdGVkJCA9IHRoaXMubW9kYWxSb3V0ZUFjdGl2YXRlZEZvcihcbiAgICAgICAgICBuYXZpZ2F0aW9uRW5kJCxcbiAgICAgICAgICBtb2RhbFJvdXRlU2V0LFxuICAgICAgICAgIG1vZGFsUm91dGVzQ29udGFpbnNVcmxQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVhY3RpdmF0ZWQkID0gdGhpcy5tb2RhbFJvdXRlRGVhY3RpdmF0ZWRGb3IoXG4gICAgICAgICAgbmF2aWdhdGlvbkVuZCQsXG4gICAgICAgICAgbW9kYWxSb3V0ZVNldCxcbiAgICAgICAgICBtb2RhbFJvdXRlc0NvbnRhaW5zVXJsUGFyYW1zXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IGFjdGl2YXRlZCQsIGRlYWN0aXZhdGVkJCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGFjdGl2YXRlZCQ6IEVNUFRZLCBkZWFjdGl2YXRlZCQ6IEVNUFRZIH07XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZVRvTW9kYWwocGF0aDogc3RyaW5nIHwgc3RyaW5nW10sIHF1ZXJ5UGFyYW1zPzogUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29tbWFuZHMgPSBBcnJheS5pc0FycmF5KHBhdGgpID8gWy4uLnBhdGhdIDogcGF0aC5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGNoaWxkUGF0aCA9IGNvbW1hbmRzLnBvcCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsuLi5jb21tYW5kcywgeyBvdXRsZXRzOiB7IG1vZGFsOiBbY2hpbGRQYXRoXSB9IH1dLCB7XG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuZ2V0Q3VycmVudEFjdGl2YXRlZFJvdXRlKCksXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlV2l0aGluTW9kYWwocmVsYXRpdmVQYXRoOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zPzogUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZWxhdGl2ZVBhdGhdLCB7XG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuZ2V0Q3VycmVudEFjdGl2YXRlZFJvdXRlKCksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZU91dE9mTW9kYWxPdXRsZXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY3VycmVudEFjdGl2YXRlZFJvdXRlID0gdGhpcy5nZXRDdXJyZW50QWN0aXZhdGVkUm91dGUoKTtcbiAgICBjb25zdCBjdXJyZW50TmF2aWdhdGlvbkZpbmFsVXJsID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmw/LnRvU3RyaW5nKCk7XG4gICAgY29uc3QgaXNDdXJyZW50bHlOYXZpZ2F0aW5nT3V0T2ZNb2RhbE91dGxldCA9XG4gICAgICBjdXJyZW50TmF2aWdhdGlvbkZpbmFsVXJsICYmICF0aGlzLmlzTW9kYWxSb3V0ZShjdXJyZW50TmF2aWdhdGlvbkZpbmFsVXJsKTtcblxuICAgIGlmIChjdXJyZW50QWN0aXZhdGVkUm91dGUub3V0bGV0ICE9PSAnbW9kYWwnIHx8IGlzQ3VycmVudGx5TmF2aWdhdGluZ091dE9mTW9kYWxPdXRsZXQpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSwgYmFpbCBvdXQ6XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudFJvdXRlID0gdGhpcy5nZXRCYWNrZHJvcFJvdXRlKGN1cnJlbnRBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwge1xuICAgICAgcmVsYXRpdmVUbzogcGFyZW50Um91dGUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEJhY2tkcm9wUm91dGUoY3VycmVudEFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIGxldCBwYXJlbnRSb3V0ZSA9IGN1cnJlbnRBY3RpdmF0ZWRSb3V0ZS5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudFJvdXRlICYmICFwYXJlbnRSb3V0ZS5jb21wb25lbnQgJiYgISFwYXJlbnRSb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHBhcmVudFJvdXRlID0gcGFyZW50Um91dGUucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50Um91dGU7XG4gIH1cblxuICBoYW5kbGVCcm93c2VyQmFja0J1dHRvbihtb2RhbDogSFRNTElvbk1vZGFsRWxlbWVudCkge1xuICAgIGNvbnN0IHBvcHN0YXRlTmF2aWdhdGlvblN0YXJ0JCA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uU3RhcnQgPT5cbiAgICAgICAgICBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCAmJiBldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJ1xuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbmF2aWdhdGlvbkVuZCQgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcbiAgICApO1xuICAgIG5hdmlnYXRpb25FbmQkXG4gICAgICAucGlwZShza2lwVW50aWwocG9wc3RhdGVOYXZpZ2F0aW9uU3RhcnQkKSwgdGFrZVVudGlsKG1vZGFsLm9uV2lsbERpc21pc3MoKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgbW9kYWwuZGlzbWlzcygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { ModalCompactWrapperComponent, ModalWrapperComponent, } from '../../modal-wrapper';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ionic/angular/standalone\";\nimport * as i2 from \"./modal-animation-builder.service\";\nimport * as i3 from \"../../modal-navigation.service\";\nimport * as i4 from \"@kirbydesign/designsystem/types\";\nimport * as i5 from \"./can-dismiss.helper\";\nexport class ModalHelper {\n constructor(ionicModalController, modalAnimationBuilder, modalNavigationService, windowRef, canDismissHelper) {\n this.ionicModalController = ionicModalController;\n this.modalAnimationBuilder = modalAnimationBuilder;\n this.modalNavigationService = modalNavigationService;\n this.windowRef = windowRef;\n this.canDismissHelper = canDismissHelper;\n /*\n isModalOpening is used to prevent additional instantiations\n of modals, while a modal is already being instatiated, but not completed.\n This is the recommended approach by one of the maintainers of Ionic:\n https://github.com/ionic-team/ionic-framework/issues/23327#issuecomment-847028058\n */\n this.isModalOpening = false;\n }\n async showModalWindow(config) {\n if (this.isModalOpening)\n return;\n config.flavor = config.flavor || 'modal';\n let currentBackdrop;\n const topMostModal = await this.ionicModalController.getTop();\n if (topMostModal) {\n currentBackdrop =\n topMostModal.shadowRoot.querySelector('ion-backdrop');\n }\n const enterAnimation = this.modalAnimationBuilder.enterAnimation(currentBackdrop);\n const leaveAnimation = this.modalAnimationBuilder.leaveAnimation(currentBackdrop);\n const defaultModalSize = config.interactWithBackground ? null : 'medium';\n const modalSize = config.size || defaultModalSize;\n const allow_scroll_class = 'allow-background-scroll';\n let customCssClasses = [];\n if (config.cssClass) {\n customCssClasses = Array.isArray(config.cssClass) ? config.cssClass : [config.cssClass];\n }\n if (config.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.add(allow_scroll_class);\n }\n let canDismiss = true;\n if (config.canDismiss) {\n canDismiss = this.canDismissHelper.getCanDismissCallback(config.canDismiss);\n }\n this.isModalOpening = true;\n const ionModal = await this.ionicModalController.create({\n component: config.flavor === 'compact' ? ModalCompactWrapperComponent : ModalWrapperComponent,\n cssClass: [\n 'kirby-overlay',\n 'kirby-modal',\n modalSize ? `kirby-modal-${modalSize}` : null,\n config.flavor === 'drawer' ? 'kirby-drawer' : null,\n config.flavor === 'compact' ? 'kirby-modal-compact' : null,\n config.interactWithBackground ? 'interact-with-background' : null,\n ...customCssClasses,\n ],\n backdropDismiss: config.flavor === 'compact' || config.interactWithBackground ? false : true,\n showBackdrop: !config.interactWithBackground,\n componentProps: { config: config },\n htmlAttributes: { ...config.htmlAttributes },\n keyboardClose: false,\n canDismiss,\n enterAnimation,\n leaveAnimation,\n });\n if (config.interactWithBackground) {\n ionModal.onDidDismiss().then(() => {\n this.windowRef.nativeWindow.document.body.classList.remove(allow_scroll_class);\n });\n }\n if (config.customHeight) {\n ionModal.style.setProperty('--kirby-modal-height', config.customHeight);\n }\n const onWillDismiss = ionModal.onWillDismiss();\n const overlay = {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss,\n onDidDismiss: ionModal.onDidDismiss(),\n isDismissing: false,\n };\n onWillDismiss.then(() => {\n overlay.isDismissing = true;\n });\n await ionModal.present();\n /**\n * Due to somewhat unexpected behavior of the ion-modal not being focused when keyboardClose\n * is set to false we manually focus it, but only if focus is not already inside the modal\n * See here: https://github.com/ionic-team/ionic-framework/issues/28775#issuecomment-1875475739\n */\n const focusedElementWithinModal = ionModal.contains(document.activeElement);\n if (!focusedElementWithinModal) {\n ionModal.focus();\n }\n // Back button should only be handled manually\n // if the modal is not instantiated through a route.\n if (!config.modalRoute) {\n this.modalNavigationService.handleBrowserBackButton(ionModal);\n }\n this.isModalOpening = false;\n return overlay;\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalHelper, deps: [{ token: i1.ModalController }, { token: i2.ModalAnimationBuilderService }, { token: i3.ModalNavigationService }, { token: i4.WindowRef }, { token: i5.CanDismissHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalHelper }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalHelper, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.ModalController }, { type: i2.ModalAnimationBuilderService }, { type: i3.ModalNavigationService }, { type: i4.WindowRef }, { type: i5.CanDismissHelper }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsL3NlcnZpY2VzL21vZGFsLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTNDLE9BQU8sRUFDTCw0QkFBNEIsRUFHNUIscUJBQXFCLEdBQ3RCLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFNN0IsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxvQkFBcUMsRUFDckMscUJBQW1ELEVBQ25ELHNCQUE4QyxFQUM5QyxTQUFvQixFQUNwQixnQkFBa0M7UUFKbEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFpQjtRQUNyQywwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRzVDOzs7OztVQUtFO1FBQ00sbUJBQWMsR0FBRyxLQUFLLENBQUM7SUFSNUIsQ0FBQztJQVVHLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBbUI7UUFDOUMsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztRQUV6QyxJQUFJLGVBQXVDLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDOUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixlQUFlO2dCQUNiLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUF5QixjQUFjLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNB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ZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vdHlwZXMnO1xuXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vLi4vbW9kYWwuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb2RhbE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kYWwtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1vZGFsQ29tcGFjdFdyYXBwZXJDb21wb25lbnQsXG4gIE1vZGFsQ29uZmlnLFxuICBNb2RhbFNpemUsXG4gIE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vbW9kYWwtd3JhcHBlcic7XG5cbmltcG9ydCB7IE1vZGFsQW5pbWF0aW9uQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL21vZGFsLWFuaW1hdGlvbi1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FuRGlzbWlzc0hlbHBlciB9IGZyb20gJy4vY2FuLWRpc21pc3MuaGVscGVyJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsSGVscGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpb25pY01vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgbW9kYWxBbmltYXRpb25CdWlsZGVyOiBNb2RhbEFuaW1hdGlvbkJ1aWxkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxOYXZpZ2F0aW9uU2VydmljZTogTW9kYWxOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogV2luZG93UmVmLFxuICAgIHByaXZhdGUgY2FuRGlzbWlzc0hlbHBlcjogQ2FuRGlzbWlzc0hlbHBlclxuICApIHt9XG5cbiAgLyogXG4gICAgaXNNb2RhbE9wZW5pbmcgaXMgdXNlZCB0byBwcmV2ZW50IGFkZGl0aW9uYWwgaW5zdGFudGlhdGlvbnNcbiAgICBvZiBtb2RhbHMsIHdoaWxlIGEgbW9kYWwgaXMgYWxyZWFkeSBiZWluZyBpbnN0YXRpYXRlZCwgYnV0IG5vdCBjb21wbGV0ZWQuXG4gICAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggYnkgb25lIG9mIHRoZSBtYWludGFpbmVycyBvZiBJb25pYzpcbiAgICBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvaXNzdWVzLzIzMzI3I2lzc3VlY29tbWVudC04NDcwMjgwNThcbiAgKi9cbiAgcHJpdmF0ZSBpc01vZGFsT3BlbmluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBhc3luYyBzaG93TW9kYWxXaW5kb3coY29uZmlnOiBNb2RhbENvbmZpZyk6IFByb21pc2U8T3ZlcmxheT4ge1xuICAgIGlmICh0aGlzLmlzTW9kYWxPcGVuaW5nKSByZXR1cm47XG5cbiAgICBjb25maWcuZmxhdm9yID0gY29uZmlnLmZsYXZvciB8fCAnbW9kYWwnO1xuXG4gICAgbGV0IGN1cnJlbnRCYWNrZHJvcDogSFRNTElvbkJhY2tkcm9wRWxlbWVudDtcbiAgICBjb25zdCB0b3BNb3N0TW9kYWwgPSBhd2FpdCB0aGlzLmlvbmljTW9kYWxDb250cm9sbGVyLmdldFRvcCgpO1xuICAgIGlmICh0b3BNb3N0TW9kYWwpIHtcbiAgICAgIGN1cnJlbnRCYWNrZHJvcCA9XG4gICAgICAgIHRvcE1vc3RNb2RhbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3I8SFRNTElvbkJhY2tkcm9wRWxlbWVudD4oJ2lvbi1iYWNrZHJvcCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGVyQW5pbWF0aW9uID0gdGhpcy5tb2RhbEFuaW1hdGlvbkJ1aWxkZXIuZW50ZXJBbmltYXRpb24oY3VycmVudEJhY2tkcm9wKTtcbiAgICBjb25zdCBsZWF2ZUFuaW1hdGlvbiA9IHRoaXMubW9kYWxBbmltYXRpb25CdWlsZGVyLmxlYXZlQW5pbWF0aW9uKGN1cnJlbnRCYWNrZHJvcCk7XG5cbiAgICBjb25zdCBkZWZhdWx0TW9kYWxTaXplOiBNb2RhbFNpemUgPSBjb25maWcuaW50ZXJhY3RXaXRoQmFja2dyb3VuZCA/IG51bGwgOiAnbWVkaXVtJztcbiAgICBjb25zdCBtb2RhbFNpemUgPSBjb25maWcuc2l6ZSB8fCBkZWZhdWx0TW9kYWxTaXplO1xuXG4gICAgY29uc3QgYWxsb3dfc2Nyb2xsX2NsYXNzID0gJ2FsbG93LWJhY2tncm91bmQtc2Nyb2xsJztcblxuICAgIGxldCBjdXN0b21Dc3NDbGFzc2VzID0gW107XG4gICAgaWYgKGNvbmZpZy5jc3NDbGFzcykge1xuICAgICAgY3VzdG9tQ3NzQ2xhc3NlcyA9IEFycmF5LmlzQXJyYXkoY29uZmlnLmNzc0NsYXNzKSA/IGNvbmZpZy5jc3NDbGFzcyA6IFtjb25maWcuY3NzQ2xhc3NdO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuaW50ZXJhY3RXaXRoQmFja2dyb3VuZCkge1xuICAgICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChhbGxvd19zY3JvbGxfY2xhc3MpO1xuICAgIH1cblxuICAgIGxldCBjYW5EaXNtaXNzOiBib29sZWFuIHwgKCgpID0+IFByb21pc2U8Ym9vbGVhbj4pID0gdHJ1ZTtcblxuICAgIGlmIChjb25maWcuY2FuRGlzbWlzcykge1xuICAgICAgY2FuRGlzbWlzcyA9IHRoaXMuY2FuRGlzbWlzc0hlbHBlci5nZXRDYW5EaXNtaXNzQ2FsbGJhY2soY29uZmlnLmNhbkRpc21pc3MpO1xuICAgIH1cblxuICAgIHRoaXMuaXNNb2RhbE9wZW5pbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgaW9uTW9kYWwgPSBhd2FpdCB0aGlzLmlvbmljTW9kYWxDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IGNvbmZpZy5mbGF2b3IgPT09ICdjb21wYWN0JyA/IE1vZGFsQ29tcGFjdFdyYXBwZXJDb21wb25lbnQgOiBNb2RhbFdyYXBwZXJDb21wb25lbnQsXG4gICAgICBjc3NDbGFzczogW1xuICAgICAgICAna2lyYnktb3ZlcmxheScsXG4gICAgICAgICdraXJieS1tb2RhbCcsXG4gICAgICAgIG1vZGFsU2l6ZSA/IGBraXJieS1tb2RhbC0ke21vZGFsU2l6ZX1gIDogbnVsbCxcbiAgICAgICAgY29uZmlnLmZsYXZvciA9PT0gJ2RyYXdlcicgPyAna2lyYnktZHJhd2VyJyA6IG51bGwsXG4gICAgICAgIGNvbmZpZy5mbGF2b3IgPT09ICdjb21wYWN0JyA/ICdraXJieS1tb2RhbC1jb21wYWN0JyA6IG51bGwsXG4gICAgICAgIGNvbmZpZy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kID8gJ2ludGVyYWN0LXdpdGgtYmFja2dyb3VuZCcgOiBudWxsLFxuICAgICAgICAuLi5jdXN0b21Dc3NDbGFzc2VzLFxuICAgICAgXSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogY29uZmlnLmZsYXZvciA9PT0gJ2NvbXBhY3QnIHx8IGNvbmZpZy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kID8gZmFsc2UgOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiAhY29uZmlnLmludGVyYWN0V2l0aEJhY2tncm91bmQsXG4gICAgICBjb21wb25lbnRQcm9wczogeyBjb25maWc6IGNvbmZpZyB9LFxuICAgICAgaHRtbEF0dHJpYnV0ZXM6IHsgLi4uY29uZmlnLmh0bWxBdHRyaWJ1dGVzIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiBmYWxzZSxcbiAgICAgIGNhbkRpc21pc3MsXG4gICAgICBlbnRlckFuaW1hdGlvbixcbiAgICAgIGxlYXZlQW5pbWF0aW9uLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvbmZpZy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kKSB7XG4gICAgICBpb25Nb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93LmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShhbGxvd19zY3JvbGxfY2xhc3MpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jdXN0b21IZWlnaHQpIHtcbiAgICAgIGlvbk1vZGFsLnN0eWxlLnNldFByb3BlcnR5KCctLWtpcmJ5LW1vZGFsLWhlaWdodCcsIGNvbmZpZy5jdXN0b21IZWlnaHQpO1xuICAgIH1cblxuICAgIGNvbnN0IG9uV2lsbERpc21pc3MgPSBpb25Nb2RhbC5vbldpbGxEaXNtaXNzKCk7XG5cbiAgICBjb25zdCBvdmVybGF5OiBPdmVybGF5ID0ge1xuICAgICAgZGlzbWlzczogaW9uTW9kYWwuZGlzbWlzcy5iaW5kKGlvbk1vZGFsKSxcbiAgICAgIG9uV2lsbERpc21pc3MsXG4gICAgICBvbkRpZERpc21pc3M6IGlvbk1vZGFsLm9uRGlkRGlzbWlzcygpLFxuICAgICAgaXNEaXNtaXNzaW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgb25XaWxsRGlzbWlzcy50aGVuKCgpID0+IHtcbiAgICAgIG92ZXJsYXkuaXNEaXNtaXNzaW5nID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGlvbk1vZGFsLnByZXNlbnQoKTtcblxuICAgIC8qKlxuICAgICAqIER1ZSB0byBzb21ld2hhdCB1bmV4cGVjdGVkIGJlaGF2aW9yIG9mIHRoZSBpb24tbW9kYWwgbm90IGJlaW5nIGZvY3VzZWQgd2hlbiBrZXlib2FyZENsb3NlXG4gICAgICogaXMgc2V0IHRvIGZhbHNlIHdlIG1hbnVhbGx5IGZvY3VzIGl0LCBidXQgb25seSBpZiBmb2N1cyBpcyBub3QgYWxyZWFkeSBpbnNpZGUgdGhlIG1vZGFsXG4gICAgICogU2VlIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pb25pYy10ZWFtL2lvbmljLWZyYW1ld29yay9pc3N1ZXMvMjg3NzUjaXNzdWVjb21tZW50LTE4NzU0NzU3MzlcbiAgICAgKi9cbiAgICBjb25zdCBmb2N1c2VkRWxlbWVudFdpdGhpbk1vZGFsID0gaW9uTW9kYWwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgaWYgKCFmb2N1c2VkRWxlbWVudFdpdGhpbk1vZGFsKSB7XG4gICAgICBpb25Nb2RhbC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIEJhY2sgYnV0dG9uIHNob3VsZCBvbmx5IGJlIGhhbmRsZWQgbWFudWFsbHlcbiAgICAvLyBpZiB0aGUgbW9kYWwgaXMgbm90IGluc3RhbnRpYXRlZCB0aHJvdWdoIGEgcm91dGUuXG4gICAgaWYgKCFjb25maWcubW9kYWxSb3V0ZSkge1xuICAgICAgdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmhhbmRsZUJyb3dzZXJCYWNrQnV0dG9uKGlvbk1vZGFsKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzTW9kYWxPcGVuaW5nID0gZmFsc2U7XG5cbiAgICByZXR1cm4gb3ZlcmxheTtcbiAgfVxufVxuIl19","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardComponent, CardHeaderComponent } from '@kirbydesign/designsystem/card';\nimport * as i0 from \"@angular/core\";\nconst KIRBY_ACTION_SHEET_DEPRECATION_WARNING = '[Kirby action sheet] Deprecated - Use Menu component instead';\nexport class ActionSheetComponent {\n constructor() {\n this.cancelButtonText = 'Cancel';\n this.hideCancel = false;\n this.disabled = false;\n this.cancel = new EventEmitter();\n this.itemSelect = new EventEmitter();\n console.warn(KIRBY_ACTION_SHEET_DEPRECATION_WARNING);\n }\n onItemSelect(selection) {\n this.itemSelect.emit(selection);\n }\n onCancel() {\n this.cancel.emit();\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ActionSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.13\", type: ActionSheetComponent, isStandalone: true, selector: \"kirby-action-sheet\", inputs: { cancelButtonText: \"cancelButtonText\", hideCancel: \"hideCancel\", disabled: \"disabled\", header: \"header\", subheader: \"subheader\", items: \"items\" }, outputs: { cancel: \"cancel\", itemSelect: \"itemSelect\" }, ngImport: i0, template: \"<kirby-card>\\n @if (header) {\\n <kirby-card-header\\n [title]=\\\"header\\\"\\n [isTitleBold]=\\\"true\\\"\\n [subtitle]=\\\"subheader\\\"\\n ></kirby-card-header>\\n }\\n @for (item of items; track item.id) {\\n <button\\n kirby-button\\n expand=\\\"block\\\"\\n size=\\\"lg\\\"\\n [noDecoration]=\\\"true\\\"\\n (click)=\\\"onItemSelect(item)\\\"\\n >\\n {{ item.text }}\\n </button>\\n }\\n</kirby-card>\\n@if (!hideCancel) {\\n <button kirby-button class=\\\"cancel-btn\\\" size=\\\"lg\\\" attentionLevel=\\\"3\\\" (click)=\\\"onCancel()\\\">\\n {{ cancelButtonText }}\\n </button>\\n}\\n\", styles: [\":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\\n\"], dependencies: [{ kind: \"component\", type: CardComponent, selector: \"kirby-card\", inputs: [\"title\", \"subtitle\", \"backgroundImageUrl\", \"hasPadding\", \"sizes\", \"variant\"] }, { kind: \"component\", type: CardHeaderComponent, selector: \"kirby-card-header\", inputs: [\"title\", \"subtitle\", \"isTitleBold\", \"flagged\", \"hasPadding\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[kirby-button],Button[kirby-button],a[kirby-button]\", inputs: [\"attentionLevel\", \"noDecoration\", \"themeColor\", \"expand\", \"isFloating\", \"size\", \"showIconOnly\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ActionSheetComponent, decorators: [{\n type: Component,\n args: [{ imports: [CardComponent, CardHeaderComponent, ButtonComponent], selector: 'kirby-action-sheet', template: \"<kirby-card>\\n @if (header) {\\n <kirby-card-header\\n [title]=\\\"header\\\"\\n [isTitleBold]=\\\"true\\\"\\n [subtitle]=\\\"subheader\\\"\\n ></kirby-card-header>\\n }\\n @for (item of items; track item.id) {\\n <button\\n kirby-button\\n expand=\\\"block\\\"\\n size=\\\"lg\\\"\\n [noDecoration]=\\\"true\\\"\\n (click)=\\\"onItemSelect(item)\\\"\\n >\\n {{ item.text }}\\n </button>\\n }\\n</kirby-card>\\n@if (!hideCancel) {\\n <button kirby-button class=\\\"cancel-btn\\\" size=\\\"lg\\\" attentionLevel=\\\"3\\\" (click)=\\\"onCancel()\\\">\\n {{ cancelButtonText }}\\n </button>\\n}\\n\", styles: [\":host{--kirby-internal-margin-horizontal-default: 32px}@media (max-width: 320px){:host{--kirby-internal-margin-horizontal-default: 16px}}:host{--kirby-internal-margin-horizontal-total: calc( 2 * var(--kirby-action-sheet-margin-horizontal, var(--kirby-internal-margin-horizontal-default)) );display:flex;flex-direction:column;align-items:center;justify-content:flex-end;margin:0 auto;width:calc(100vw - var(--kirby-internal-margin-horizontal-total));max-width:calc(375px - var(--kirby-internal-margin-horizontal-total))}@media (hover: hover) and (pointer: fine){:host button[kirby-button].no-decoration:focus-visible{box-shadow:none;--state-layer-opacity: .08;--state-layer-background-color: var(--kirby-black)}}kirby-card{align-self:stretch;pointer-events:auto;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14}kirby-card button[kirby-button]{margin:0;border-radius:0}kirby-card button[kirby-button]:not(:focus){border-top:1px solid var(--kirby-background-color)}@media (hover: hover) and (pointer: fine){.cancel-btn:focus{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}.cancel-btn:focus:not(:focus-visible){box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 0 transparent}.cancel-btn:focus-visible{transition:all 80ms linear 0ms;box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14,0 0 0 2px var(--kirby-background-color),0 0 0 4px #4d90fe}}.cancel-btn{font-weight:700;margin-top:16px;margin-bottom:24px;pointer-events:auto}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { cancelButtonText: [{\n type: Input\n }], hideCancel: [{\n type: Input\n }], disabled: [{\n type: Input\n }], header: [{\n type: Input\n }], subheader: [{\n type: Input\n }], items: [{\n type: Input\n }], cancel: [{\n type: Output\n }], itemSelect: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXNoZWV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9hY3Rpb24tc2hlZXQvYWN0aW9uLXNoZWV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9hY3Rpb24tc2hlZXQvYWN0aW9uLXNoZWV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFJcEYsTUFBTSxzQ0FBc0MsR0FDMUMsOERBQThELENBQUM7QUFRakUsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQjtRQVRTLHFCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFJekIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsZUFBVSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUd4RixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUEwQjtRQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztrSUFwQlUsb0JBQW9CO3NIQUFwQixvQkFBb0IsbVNDZmpDLG9sQkF5QkEsdWtERGZZLGFBQWEsOElBQUUsbUJBQW1CLHFJQUFFLGVBQWU7OzRGQUtsRCxvQkFBb0I7a0JBTmhDLFNBQVM7OEJBQ0MsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLFlBQ3BELG9CQUFvQjs7c0JBSzdCLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUNMLEtBQUs7O3NCQUNMLE1BQU07O3NCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGtpcmJ5ZGVzaWduL2Rlc2lnbnN5c3RlbS9idXR0b24nO1xuaW1wb3J0IHsgQ2FyZENvbXBvbmVudCwgQ2FyZEhlYWRlckNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vY2FyZCc7XG5cbmltcG9ydCB7IEFjdGlvblNoZWV0SXRlbSB9IGZyb20gJy4vY29uZmlnL2FjdGlvbi1zaGVldC1pdGVtJztcblxuY29uc3QgS0lSQllfQUNUSU9OX1NIRUVUX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPVxuICAnW0tpcmJ5IGFjdGlvbiBzaGVldF0gRGVwcmVjYXRlZCAtIFVzZSBNZW51IGNvbXBvbmVudCBpbnN0ZWFkJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtDYXJkQ29tcG9uZW50LCBDYXJkSGVhZGVyQ29tcG9uZW50LCBCdXR0b25Db21wb25lbnRdLFxuICBzZWxlY3RvcjogJ2tpcmJ5LWFjdGlvbi1zaGVldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb24tc2hlZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb24tc2hlZXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uU2hlZXRDb21wb25lbnQge1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25UZXh0ID0gJ0NhbmNlbCc7XG4gIEBJbnB1dCgpIGhpZGVDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1YmhlYWRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8QWN0aW9uU2hlZXRJdGVtPjtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1TZWxlY3Q6IEV2ZW50RW1pdHRlcjxBY3Rpb25TaGVldEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25TaGVldEl0ZW0+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc29sZS53YXJuKEtJUkJZX0FDVElPTl9TSEVFVF9ERVBSRUNBVElPTl9XQVJOSU5HKTtcbiAgfVxuXG4gIG9uSXRlbVNlbGVjdChzZWxlY3Rpb246IEFjdGlvblNoZWV0SXRlbSkge1xuICAgIHRoaXMuaXRlbVNlbGVjdC5lbWl0KHNlbGVjdGlvbik7XG4gIH1cblxuICBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxraXJieS1jYXJkPlxuICBAaWYgKGhlYWRlcikge1xuICAgIDxraXJieS1jYXJkLWhlYWRlclxuICAgICAgW3RpdGxlXT1cImhlYWRlclwiXG4gICAgICBbaXNUaXRsZUJvbGRdPVwidHJ1ZVwiXG4gICAgICBbc3VidGl0bGVdPVwic3ViaGVhZGVyXCJcbiAgICA+PC9raXJieS1jYXJkLWhlYWRlcj5cbiAgfVxuICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgPGJ1dHRvblxuICAgICAga2lyYnktYnV0dG9uXG4gICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICBzaXplPVwibGdcIlxuICAgICAgW25vRGVjb3JhdGlvbl09XCJ0cnVlXCJcbiAgICAgIChjbGljayk9XCJvbkl0ZW1TZWxlY3QoaXRlbSlcIlxuICAgID5cbiAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgIDwvYnV0dG9uPlxuICB9XG48L2tpcmJ5LWNhcmQ+XG5AaWYgKCFoaWRlQ2FuY2VsKSB7XG4gIDxidXR0b24ga2lyYnktYnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ0blwiIHNpemU9XCJsZ1wiIGF0dGVudGlvbkxldmVsPVwiM1wiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XG4gICAge3sgY2FuY2VsQnV0dG9uVGV4dCB9fVxuICA8L2J1dHRvbj5cbn1cbiJdfQ==","import { EventEmitter, Injectable } from '@angular/core';\nimport { ActionSheetComponent } from '../action-sheet/action-sheet.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ionic/angular/standalone\";\nexport class ActionSheetHelper {\n constructor(ionicModalController) {\n this.ionicModalController = ionicModalController;\n }\n async showActionSheet(config) {\n const cancel = new EventEmitter();\n const itemSelect = new EventEmitter();\n const ionModal = await this.ionicModalController.create({\n component: ActionSheetComponent,\n cssClass: ['kirby-overlay', 'kirby-action-sheet'],\n componentProps: {\n ...config,\n cancel: cancel,\n itemSelect: itemSelect,\n },\n backdropDismiss: true,\n });\n // Remove 'modal-shadow' element as we are no longer able to hide it with CSS in Ionic 6.\n // We need to remove it so it does not obstruct the backdrop-click to dismiss functionality.\n ionModal.shadowRoot.querySelector('.modal-shadow').remove();\n const cancelSubscription = cancel.subscribe(() => ionModal.dismiss());\n const itemSelectSubscription = itemSelect.subscribe((item) => ionModal.dismiss(item));\n const onDidDismiss = ionModal.onDidDismiss();\n onDidDismiss.then(() => {\n cancelSubscription.unsubscribe();\n itemSelectSubscription.unsubscribe();\n });\n await ionModal.present();\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ActionSheetHelper, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ActionSheetHelper }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ActionSheetHelper, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.ModalController }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXNoZWV0LmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9zZXJ2aWNlcy9hY3Rpb24tc2hlZXQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFLOUUsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixvQkFBcUM7UUFBckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFpQjtJQUFHLENBQUM7SUFFdEQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUF5QjtRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRXZELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztZQUN0RCxTQUFTLEVBQUUsb0JBQW9CO1lBQy9CLFFBQVEsRUFBRSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQztZQUNqRCxjQUFjLEVBQUU7Z0JBQ2QsR0FBRyxNQUFNO2dCQUNULE1BQU0sRUFBRSxNQUFNO2dCQUNkLFVBQVUsRUFBRSxVQUFVO2FBQ3ZCO1lBQ0QsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBRUgseUZBQXlGO1FBQ3pGLDRGQUE0RjtRQUM1RixRQUFRLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU1RCxNQUFNLGtCQUFrQixHQUFpQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sc0JBQXNCLEdBQWlCLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN6RSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUN2QixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsT0FBTztZQUNMLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDeEMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFDdkMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxZQUFZLEVBQUU7U0FDdEMsQ0FBQztJQUNKLENBQUM7a0lBdENVLGlCQUFpQjtzSUFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uL21vZGFsLmludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBBY3Rpb25TaGVldENvbXBvbmVudCB9IGZyb20gJy4uL2FjdGlvbi1zaGVldC9hY3Rpb24tc2hlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblNoZWV0Q29uZmlnIH0gZnJvbSAnLi4vYWN0aW9uLXNoZWV0L2NvbmZpZy9hY3Rpb24tc2hlZXQtY29uZmlnJztcbmltcG9ydCB7IEFjdGlvblNoZWV0SXRlbSB9IGZyb20gJy4uL2FjdGlvbi1zaGVldC9jb25maWcvYWN0aW9uLXNoZWV0LWl0ZW0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aW9uU2hlZXRIZWxwZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGlvbmljTW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIpIHt9XG5cbiAgcHVibGljIGFzeW5jIHNob3dBY3Rpb25TaGVldChjb25maWc6IEFjdGlvblNoZWV0Q29uZmlnKTogUHJvbWlzZTxPdmVybGF5PiB7XG4gICAgY29uc3QgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvblNoZWV0SXRlbT4oKTtcblxuICAgIGNvbnN0IGlvbk1vZGFsID0gYXdhaXQgdGhpcy5pb25pY01vZGFsQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBY3Rpb25TaGVldENvbXBvbmVudCxcbiAgICAgIGNzc0NsYXNzOiBbJ2tpcmJ5LW92ZXJsYXknLCAna2lyYnktYWN0aW9uLXNoZWV0J10sXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIGNhbmNlbDogY2FuY2VsLFxuICAgICAgICBpdGVtU2VsZWN0OiBpdGVtU2VsZWN0LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSAnbW9kYWwtc2hhZG93JyBlbGVtZW50IGFzIHdlIGFyZSBubyBsb25nZXIgYWJsZSB0byBoaWRlIGl0IHdpdGggQ1NTIGluIElvbmljIDYuXG4gICAgLy8gV2UgbmVlZCB0byByZW1vdmUgaXQgc28gaXQgZG9lcyBub3Qgb2JzdHJ1Y3QgdGhlIGJhY2tkcm9wLWNsaWNrIHRvIGRpc21pc3MgZnVuY3Rpb25hbGl0eS5cbiAgICBpb25Nb2RhbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbC1zaGFkb3cnKS5yZW1vdmUoKTtcblxuICAgIGNvbnN0IGNhbmNlbFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gY2FuY2VsLnN1YnNjcmliZSgoKSA9PiBpb25Nb2RhbC5kaXNtaXNzKCkpO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IGl0ZW1TZWxlY3Quc3Vic2NyaWJlKChpdGVtKSA9PlxuICAgICAgaW9uTW9kYWwuZGlzbWlzcyhpdGVtKVxuICAgICk7XG4gICAgY29uc3Qgb25EaWREaXNtaXNzID0gaW9uTW9kYWwub25EaWREaXNtaXNzKCk7XG4gICAgb25EaWREaXNtaXNzLnRoZW4oKCkgPT4ge1xuICAgICAgY2FuY2VsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBpdGVtU2VsZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBpb25Nb2RhbC5wcmVzZW50KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc21pc3M6IGlvbk1vZGFsLmRpc21pc3MuYmluZChpb25Nb2RhbCksXG4gICAgICBvbldpbGxEaXNtaXNzOiBpb25Nb2RhbC5vbldpbGxEaXNtaXNzKCksXG4gICAgICBvbkRpZERpc21pc3M6IGlvbk1vZGFsLm9uRGlkRGlzbWlzcygpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ROUTES } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./modal.helper\";\nimport * as i2 from \"./action-sheet.helper\";\nimport * as i3 from \"./alert.helper\";\nimport * as i4 from \"../../modal-navigation.service\";\nexport class ModalController {\n constructor(modalHelper, actionSheetHelper, alertHelper, modalNavigationService, routeConfig) {\n this.modalHelper = modalHelper;\n this.actionSheetHelper = actionSheetHelper;\n this.alertHelper = alertHelper;\n this.modalNavigationService = modalNavigationService;\n this.routeConfig = routeConfig;\n this.overlays = [];\n this.noOverlayRegisteredErrorMessage = 'No modal overlays are currently registered';\n this.destroy$ = new Subject();\n }\n async initialize(moduleRootRoutePath) {\n const modalNavigation = await this.modalNavigationService.getModalNavigation(this.routeConfig, moduleRootRoutePath);\n this.onModalRouteActivated(modalNavigation.activated$);\n this.onModalRouteDeactivated(modalNavigation.deactivated$);\n }\n onModalRouteActivated(modalRouteActivated$) {\n const navigateOnWillClose = () => {\n this.modalNavigationService.navigateOutOfModalOutlet();\n };\n const siblingModalRouteActivated$ = modalRouteActivated$.pipe(filter((modalRouteActivation) => !modalRouteActivation.isNewModal), map((modalRouteActivation) => modalRouteActivation.route));\n modalRouteActivated$\n .pipe(takeUntil(this.destroy$), filter(() => this.overlays.length === 0))\n .subscribe(async (modalRouteActivation) => {\n if (modalRouteActivation.isNewModal) {\n await this.showModalRoute(modalRouteActivation.route, siblingModalRouteActivated$, navigateOnWillClose);\n }\n });\n }\n onModalRouteDeactivated(modalRouteDeactivated$) {\n modalRouteDeactivated$\n .pipe(takeUntil(this.destroy$), filter(() => this.overlays.some((overlay) => overlay.isDismissing !== true)))\n .subscribe(async () => {\n await this.hideAll();\n });\n }\n async showModal(config, onClose) {\n await this.showAndRegisterOverlay(() => this.modalHelper.showModalWindow(config), onClose);\n }\n async navigateToModal(path, queryParams) {\n return this.modalNavigationService.navigateToModal(path, queryParams);\n }\n async navigateWithinModal(relativePath, queryParams) {\n return this.modalNavigationService.navigateWithinModal(relativePath, queryParams);\n }\n async showModalRoute(modalRoute, siblingModalRouteActivated$, onWillClose) {\n const config = {\n ...modalRoute.snapshot.data.modalConfig,\n component: null,\n modalRoute: modalRoute,\n siblingModalRouteActivated$: siblingModalRouteActivated$,\n };\n await this.showAndRegisterOverlay(() => this.modalHelper.showModalWindow(config), null, onWillClose);\n }\n async showActionSheet(config, onClose) {\n await this.showAndRegisterOverlay(() => this.actionSheetHelper.showActionSheet(config), onClose);\n }\n async showAlert(config, onClose) {\n await this.showAndRegisterOverlay(() => this.alertHelper.showAlert(config), onClose);\n }\n async showAndRegisterOverlay(showOverlay, onCloseOverlay, onWillCloseOverlay) {\n const overlay = await showOverlay();\n if (!overlay)\n return;\n this.overlays.push(overlay);\n if (typeof onWillCloseOverlay === 'function') {\n overlay.onWillDismiss.then((event) => onWillCloseOverlay(event.data));\n }\n overlay.onDidDismiss.then((event) => {\n this.overlays.pop();\n if (typeof onCloseOverlay === 'function') {\n onCloseOverlay(event.data);\n }\n });\n }\n async hideTopmost(data) {\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n return overlay.dismiss(data);\n }\n async hideAll() {\n await Promise.all(this.overlays\n .filter((overlay) => overlay.isDismissing !== true)\n .map(async (overlay) => {\n await overlay.dismiss();\n }));\n }\n getTopMost() {\n return this.overlays[this.overlays.length - 1];\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalController, deps: [{ token: i1.ModalHelper }, { token: i2.ActionSheetHelper }, { token: i3.AlertHelper }, { token: i4.ModalNavigationService }, { token: ROUTES, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }\n /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalController }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalController, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i1.ModalHelper }, { type: i2.ActionSheetHelper }, { type: i3.AlertHelper }, { type: i4.ModalNavigationService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ROUTES]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9zZXJ2aWNlcy9tb2RhbC5jb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQWtDLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWF4RCxNQUFNLE9BQU8sZUFBZTtJQUsxQixZQUNVLFdBQXdCLEVBQ3hCLGlCQUFvQyxFQUNwQyxXQUF3QixFQUN4QixzQkFBOEMsRUFDbEIsV0FBcUI7UUFKakQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFVO1FBVG5ELGFBQVEsR0FBYyxFQUFFLENBQUM7UUFDaEIsb0NBQStCLEdBQUcsNENBQTRDLENBQUM7UUFDeEYsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFRcEMsQ0FBQztJQUVKLEtBQUssQ0FBQyxVQUFVLENBQUMsbUJBQTRCO1FBQzNDLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUMxRSxJQUFJLENBQUMsV0FBVyxFQUNoQixtQkFBbUIsQ0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsb0JBQXNEO1FBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3pELENBQUMsQ0FBQztRQUVGLE1BQU0sMkJBQTJCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUMzRCxNQUFNLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFDbEUsR0FBRyxDQUFDLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUMxRCxDQUFDO1FBRUYsb0JBQW9CO2FBQ2pCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQ3pDO2FBQ0EsU0FBUyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxFQUFFO1lBQ3hDLElBQUksb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FDdkIsb0JBQW9CLENBQUMsS0FBSyxFQUMxQiwyQkFBMkIsRUFDM0IsbUJBQW1CLENBQ3BCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsc0JBQTJDO1FBQ3pFLHNCQUFzQjthQUNuQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQzdFO2FBQ0EsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBbUIsRUFBRSxPQUE4QjtRQUN4RSxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUF1QixFQUFFLFdBQW9CO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUFvQixFQUFFLFdBQW9CO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FDMUIsVUFBMEIsRUFDMUIsMkJBQXVELEVBQ3ZELFdBQWlDO1FBRWpDLE1BQU0sTUFBTSxHQUFnQjtZQUMxQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDdkMsU0FBUyxFQUFFLElBQUk7WUFDZixVQUFVLEVBQUUsVUFBVTtZQUN0QiwyQkFBMkIsRUFBRSwyQkFBMkI7U0FDekQsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUMvQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFDOUMsSUFBSSxFQUNKLFdBQVcsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQzFCLE1BQXlCLEVBQ3pCLE9BQThCO1FBRTlCLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUMvQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUNwRCxPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQW1CLEVBQUUsT0FBbUM7UUFDN0UsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FDbEMsV0FBbUMsRUFDbkMsY0FBcUMsRUFDckMsa0JBQXlDO1FBRXpDLE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTVCLElBQUksT0FBTyxrQkFBa0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLE9BQU8sY0FBYyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUN6QyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVU7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixJQUFJLENBQUMsUUFBUTthQUNWLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUM7YUFDbEQsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNyQixNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztrSUF0SlUsZUFBZSwrSUFVSixNQUFNO3NJQVZqQixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFXTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcywgUk9VVEVTIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1vZGFsUm91dGVBY3RpdmF0aW9uLCBPdmVybGF5IH0gZnJvbSAnLi4vLi4vbW9kYWwuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBY3Rpb25TaGVldENvbmZpZyB9IGZyb20gJy4uL2FjdGlvbi1zaGVldC9jb25maWcvYWN0aW9uLXNoZWV0LWNvbmZpZyc7XG5pbXBvcnQgeyBBbGVydENvbmZpZyB9IGZyb20gJy4uL2FsZXJ0L2NvbmZpZy9hbGVydC1jb25maWcnO1xuXG5pbXBvcnQgeyBNb2RhbE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kYWwtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kYWwtd3JhcHBlcic7XG5pbXBvcnQgeyBBY3Rpb25TaGVldEhlbHBlciB9IGZyb20gJy4vYWN0aW9uLXNoZWV0LmhlbHBlcic7XG5pbXBvcnQgeyBBbGVydEhlbHBlciB9IGZyb20gJy4vYWxlcnQuaGVscGVyJztcbmltcG9ydCB7IE1vZGFsSGVscGVyIH0gZnJvbSAnLi9tb2RhbC5oZWxwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWxDb250cm9sbGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBvdmVybGF5czogT3ZlcmxheVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9PdmVybGF5UmVnaXN0ZXJlZEVycm9yTWVzc2FnZSA9ICdObyBtb2RhbCBvdmVybGF5cyBhcmUgY3VycmVudGx5IHJlZ2lzdGVyZWQnO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsSGVscGVyOiBNb2RhbEhlbHBlcixcbiAgICBwcml2YXRlIGFjdGlvblNoZWV0SGVscGVyOiBBY3Rpb25TaGVldEhlbHBlcixcbiAgICBwcml2YXRlIGFsZXJ0SGVscGVyOiBBbGVydEhlbHBlcixcbiAgICBwcml2YXRlIG1vZGFsTmF2aWdhdGlvblNlcnZpY2U6IE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChST1VURVMpIHByaXZhdGUgcm91dGVDb25maWc6IFJvdXRlc1tdXG4gICkge31cblxuICBhc3luYyBpbml0aWFsaXplKG1vZHVsZVJvb3RSb3V0ZVBhdGg/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2RhbE5hdmlnYXRpb24gPSBhd2FpdCB0aGlzLm1vZGFsTmF2aWdhdGlvblNlcnZpY2UuZ2V0TW9kYWxOYXZpZ2F0aW9uKFxuICAgICAgdGhpcy5yb3V0ZUNvbmZpZyxcbiAgICAgIG1vZHVsZVJvb3RSb3V0ZVBhdGhcbiAgICApO1xuICAgIHRoaXMub25Nb2RhbFJvdXRlQWN0aXZhdGVkKG1vZGFsTmF2aWdhdGlvbi5hY3RpdmF0ZWQkKTtcbiAgICB0aGlzLm9uTW9kYWxSb3V0ZURlYWN0aXZhdGVkKG1vZGFsTmF2aWdhdGlvbi5kZWFjdGl2YXRlZCQpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vZGFsUm91dGVBY3RpdmF0ZWQobW9kYWxSb3V0ZUFjdGl2YXRlZCQ6IE9ic2VydmFibGU8TW9kYWxSb3V0ZUFjdGl2YXRpb24+KSB7XG4gICAgY29uc3QgbmF2aWdhdGVPbldpbGxDbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMubW9kYWxOYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZU91dE9mTW9kYWxPdXRsZXQoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkID0gbW9kYWxSb3V0ZUFjdGl2YXRlZCQucGlwZShcbiAgICAgIGZpbHRlcigobW9kYWxSb3V0ZUFjdGl2YXRpb24pID0+ICFtb2RhbFJvdXRlQWN0aXZhdGlvbi5pc05ld01vZGFsKSxcbiAgICAgIG1hcCgobW9kYWxSb3V0ZUFjdGl2YXRpb24pID0+IG1vZGFsUm91dGVBY3RpdmF0aW9uLnJvdXRlKVxuICAgICk7XG5cbiAgICBtb2RhbFJvdXRlQWN0aXZhdGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMub3ZlcmxheXMubGVuZ3RoID09PSAwKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAobW9kYWxSb3V0ZUFjdGl2YXRpb24pID0+IHtcbiAgICAgICAgaWYgKG1vZGFsUm91dGVBY3RpdmF0aW9uLmlzTmV3TW9kYWwpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNob3dNb2RhbFJvdXRlKFxuICAgICAgICAgICAgbW9kYWxSb3V0ZUFjdGl2YXRpb24ucm91dGUsXG4gICAgICAgICAgICBzaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCQsXG4gICAgICAgICAgICBuYXZpZ2F0ZU9uV2lsbENsb3NlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTW9kYWxSb3V0ZURlYWN0aXZhdGVkKG1vZGFsUm91dGVEZWFjdGl2YXRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4pIHtcbiAgICBtb2RhbFJvdXRlRGVhY3RpdmF0ZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5vdmVybGF5cy5zb21lKChvdmVybGF5KSA9PiBvdmVybGF5LmlzRGlzbWlzc2luZyAhPT0gdHJ1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oaWRlQWxsKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93TW9kYWwoY29uZmlnOiBNb2RhbENvbmZpZywgb25DbG9zZT86IChkYXRhPzogYW55KSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93QW5kUmVnaXN0ZXJPdmVybGF5KCgpID0+IHRoaXMubW9kYWxIZWxwZXIuc2hvd01vZGFsV2luZG93KGNvbmZpZyksIG9uQ2xvc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5hdmlnYXRlVG9Nb2RhbChwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgcXVlcnlQYXJhbXM/OiBQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLm5hdmlnYXRlVG9Nb2RhbChwYXRoLCBxdWVyeVBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmF2aWdhdGVXaXRoaW5Nb2RhbChyZWxhdGl2ZVBhdGg6IHN0cmluZywgcXVlcnlQYXJhbXM/OiBQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLm5hdmlnYXRlV2l0aGluTW9kYWwocmVsYXRpdmVQYXRoLCBxdWVyeVBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dNb2RhbFJvdXRlKFxuICAgIG1vZGFsUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHNpYmxpbmdNb2RhbFJvdXRlQWN0aXZhdGVkJDogT2JzZXJ2YWJsZTxBY3RpdmF0ZWRSb3V0ZT4sXG4gICAgb25XaWxsQ2xvc2U6IChkYXRhPzogYW55KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZzogTW9kYWxDb25maWcgPSB7XG4gICAgICAuLi5tb2RhbFJvdXRlLnNuYXBzaG90LmRhdGEubW9kYWxDb25maWcsXG4gICAgICBjb21wb25lbnQ6IG51bGwsXG4gICAgICBtb2RhbFJvdXRlOiBtb2RhbFJvdXRlLFxuICAgICAgc2libGluZ01vZGFsUm91dGVBY3RpdmF0ZWQkOiBzaWJsaW5nTW9kYWxSb3V0ZUFjdGl2YXRlZCQsXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLnNob3dBbmRSZWdpc3Rlck92ZXJsYXkoXG4gICAgICAoKSA9PiB0aGlzLm1vZGFsSGVscGVyLnNob3dNb2RhbFdpbmRvdyhjb25maWcpLFxuICAgICAgbnVsbCxcbiAgICAgIG9uV2lsbENsb3NlXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93QWN0aW9uU2hlZXQoXG4gICAgY29uZmlnOiBBY3Rpb25TaGVldENvbmZpZyxcbiAgICBvbkNsb3NlPzogKGRhdGE/OiBhbnkpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93QW5kUmVnaXN0ZXJPdmVybGF5KFxuICAgICAgKCkgPT4gdGhpcy5hY3Rpb25TaGVldEhlbHBlci5zaG93QWN0aW9uU2hlZXQoY29uZmlnKSxcbiAgICAgIG9uQ2xvc2VcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNob3dBbGVydChjb25maWc6IEFsZXJ0Q29uZmlnLCBvbkNsb3NlPzogKHJlc3VsdDogYm9vbGVhbikgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2hvd0FuZFJlZ2lzdGVyT3ZlcmxheSgoKSA9PiB0aGlzLmFsZXJ0SGVscGVyLnNob3dBbGVydChjb25maWcpLCBvbkNsb3NlKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0FuZFJlZ2lzdGVyT3ZlcmxheShcbiAgICBzaG93T3ZlcmxheTogKCkgPT4gUHJvbWlzZTxPdmVybGF5PixcbiAgICBvbkNsb3NlT3ZlcmxheT86IChkYXRhPzogYW55KSA9PiB2b2lkLFxuICAgIG9uV2lsbENsb3NlT3ZlcmxheT86IChkYXRhPzogYW55KSA9PiB2b2lkXG4gICkge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBhd2FpdCBzaG93T3ZlcmxheSgpO1xuICAgIGlmICghb3ZlcmxheSkgcmV0dXJuO1xuXG4gICAgdGhpcy5vdmVybGF5cy5wdXNoKG92ZXJsYXkpO1xuXG4gICAgaWYgKHR5cGVvZiBvbldpbGxDbG9zZU92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG92ZXJsYXkub25XaWxsRGlzbWlzcy50aGVuKChldmVudCkgPT4gb25XaWxsQ2xvc2VPdmVybGF5KGV2ZW50LmRhdGEpKTtcbiAgICB9XG5cbiAgICBvdmVybGF5Lm9uRGlkRGlzbWlzcy50aGVuKChldmVudCkgPT4ge1xuICAgICAgdGhpcy5vdmVybGF5cy5wb3AoKTtcbiAgICAgIGlmICh0eXBlb2Ygb25DbG9zZU92ZXJsYXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DbG9zZU92ZXJsYXkoZXZlbnQuZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGlkZVRvcG1vc3QoZGF0YT86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IG92ZXJsYXkgPSB0aGlzLm92ZXJsYXlzW3RoaXMub3ZlcmxheXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFvdmVybGF5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5ub092ZXJsYXlSZWdpc3RlcmVkRXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXkuZGlzbWlzcyhkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoaWRlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGhpcy5vdmVybGF5c1xuICAgICAgICAuZmlsdGVyKChvdmVybGF5KSA9PiBvdmVybGF5LmlzRGlzbWlzc2luZyAhPT0gdHJ1ZSlcbiAgICAgICAgLm1hcChhc3luYyAob3ZlcmxheSkgPT4ge1xuICAgICAgICAgIGF3YWl0IG92ZXJsYXkuZGlzbWlzcygpO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9wTW9zdCgpOiBPdmVybGF5IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmxheXNbdGhpcy5vdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19","import { inject } from '@angular/core';\nimport { ModalController as IonicModalController } from '@ionic/angular/standalone';\nimport { ModalNavigationService } from '../../modal-navigation.service';\nimport { ModalController } from './modal.controller';\nexport const CanDismissModalGuard = async (_component, _currentRoute, currentState, nextState) => {\n const modalNavService = inject(ModalNavigationService);\n const currentRouteIsModal = modalNavService.isModalRoute(currentState.url);\n const nextRouteIsModal = modalNavService.isModalRoute(nextState.url);\n const isNavigatingWithinModal = currentRouteIsModal && nextRouteIsModal;\n if (isNavigatingWithinModal) {\n return true;\n }\n const modalController = inject(ModalController);\n const topMostModal = modalController.getTopMost();\n if (topMostModal) {\n if (topMostModal.isDismissing) {\n return true;\n }\n return topMostModal.dismiss();\n }\n else {\n // Declarative modals are not created through Kirby Modalcontroller, let's try Ionic:\n const ionicModalController = inject(IonicModalController);\n const ionModal = await ionicModalController.getTop();\n if (ionModal) {\n return ionModal.dismiss();\n }\n }\n return true;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuLWRpc21pc3MtbW9kYWwtZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tb2RhbC9zcmMvbW9kYWwvc2VydmljZXMvY2FuLWRpc21pc3MtbW9kYWwtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2QyxPQUFPLEVBQUUsZUFBZSxJQUFJLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUE2QixLQUFLLEVBQ2pFLFVBQWEsRUFDYixhQUFxQyxFQUNyQyxZQUFpQyxFQUNqQyxTQUE4QixFQUM5QixFQUFFO0lBQ0YsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdkQsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRSxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJFLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLElBQUksZ0JBQWdCLENBQUM7SUFDeEUsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLHFGQUFxRjtRQUNyRixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkRlYWN0aXZhdGVGbiwgUm91dGVyU3RhdGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciBhcyBJb25pY01vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgTW9kYWxOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL21vZGFsLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICcuL21vZGFsLmNvbnRyb2xsZXInO1xuXG5leHBvcnQgY29uc3QgQ2FuRGlzbWlzc01vZGFsR3VhcmQ6IENhbkRlYWN0aXZhdGVGbjx1bmtub3duPiA9IGFzeW5jIDxUPihcbiAgX2NvbXBvbmVudDogVCxcbiAgX2N1cnJlbnRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgY3VycmVudFN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBuZXh0U3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbikgPT4ge1xuICBjb25zdCBtb2RhbE5hdlNlcnZpY2UgPSBpbmplY3QoTW9kYWxOYXZpZ2F0aW9uU2VydmljZSk7XG4gIGNvbnN0IGN1cnJlbnRSb3V0ZUlzTW9kYWwgPSBtb2RhbE5hdlNlcnZpY2UuaXNNb2RhbFJvdXRlKGN1cnJlbnRTdGF0ZS51cmwpO1xuICBjb25zdCBuZXh0Um91dGVJc01vZGFsID0gbW9kYWxOYXZTZXJ2aWNlLmlzTW9kYWxSb3V0ZShuZXh0U3RhdGUudXJsKTtcblxuICBjb25zdCBpc05hdmlnYXRpbmdXaXRoaW5Nb2RhbCA9IGN1cnJlbnRSb3V0ZUlzTW9kYWwgJiYgbmV4dFJvdXRlSXNNb2RhbDtcbiAgaWYgKGlzTmF2aWdhdGluZ1dpdGhpbk1vZGFsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtb2RhbENvbnRyb2xsZXIgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgY29uc3QgdG9wTW9zdE1vZGFsID0gbW9kYWxDb250cm9sbGVyLmdldFRvcE1vc3QoKTtcbiAgaWYgKHRvcE1vc3RNb2RhbCkge1xuICAgIGlmICh0b3BNb3N0TW9kYWwuaXNEaXNtaXNzaW5nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvcE1vc3RNb2RhbC5kaXNtaXNzKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRGVjbGFyYXRpdmUgbW9kYWxzIGFyZSBub3QgY3JlYXRlZCB0aHJvdWdoIEtpcmJ5IE1vZGFsY29udHJvbGxlciwgbGV0J3MgdHJ5IElvbmljOlxuICAgIGNvbnN0IGlvbmljTW9kYWxDb250cm9sbGVyID0gaW5qZWN0KElvbmljTW9kYWxDb250cm9sbGVyKTtcbiAgICBjb25zdCBpb25Nb2RhbCA9IGF3YWl0IGlvbmljTW9kYWxDb250cm9sbGVyLmdldFRvcCgpO1xuICAgIGlmIChpb25Nb2RhbCkge1xuICAgICAgcmV0dXJuIGlvbk1vZGFsLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, } from '@angular/core';\nimport { IonContent, IonModal } from '@ionic/angular/standalone';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { inheritAriaLabelText } from '@kirbydesign/designsystem/shared';\nimport { ModalCompactWrapperComponent, ModalWrapperComponent, } from '../../modal-wrapper';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../services\";\nimport * as i2 from \"../../modal-navigation.service\";\nimport * as i3 from \"@kirbydesign/designsystem/types\";\nimport * as i4 from \"@angular/common\";\nexport class ModalComponent {\n set canDismiss(canDismiss) {\n typeof canDismiss === 'boolean'\n ? (this._canDismiss = canDismiss)\n : (this._canDismiss = this.canDismissHelper.getCanDismissCallback(canDismiss));\n }\n constructor(canDismissHelper, modalNavigationService, windowRef, elementRef) {\n this.canDismissHelper = canDismissHelper;\n this.modalNavigationService = modalNavigationService;\n this.windowRef = windowRef;\n this.elementRef = elementRef;\n this.isOpen = false;\n this.size = 'medium';\n this.scrollDisabled = false;\n // NOTE: input properties forwarded to modal-wrapper ModalConfig\n this.collapseTitle = false;\n this.customHeight = undefined;\n this.flavor = 'modal';\n this.drawerSupplementaryAction = undefined;\n this.interactWithBackground = false;\n // end NOTE\n this.willPresent = new EventEmitter();\n this.didPresent = new EventEmitter();\n this.didDismiss = new EventEmitter();\n this.willDismiss = new EventEmitter();\n /**\n * We populate the ModalConfig with defaults here. This ensures that we can\n * guard for `if (key in this._config)` and only update the config when any of these\n * inputs change.\n */\n this._config = {\n collapseTitle: this.collapseTitle,\n customHeight: this.customHeight,\n flavor: this.flavor,\n drawerSupplementaryAction: this.drawerSupplementaryAction,\n interactWithBackground: this.interactWithBackground,\n };\n this._canDismiss = true;\n }\n ngOnInit() {\n this.forwardAriaLabel();\n }\n ngOnChanges(changes) {\n this.updateModalConfigOnChange(changes);\n }\n scrollToTop(scrollDuration) {\n this.ionContent.scrollToTop(scrollDuration);\n }\n scrollToBottom(scrollDuration) {\n this.ionContent.scrollToBottom(scrollDuration);\n }\n _onWillPresent(event) {\n this.willPresent.emit(event);\n if (this.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.add('allow-background-scroll');\n }\n }\n _onDidPresent(event) {\n this.modalNavigationService.handleBrowserBackButton(this.modalElement.nativeElement);\n this.didPresent.emit(event);\n }\n _onWillDismiss(event) {\n if (this.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.remove('allow-background-scroll');\n }\n this.willDismiss.emit(event);\n }\n _onDidDismiss(event) {\n this.didDismiss.emit(event);\n }\n updateModalConfigOnChange(changes) {\n Object.entries(changes).forEach(([key]) => {\n const isModalConfigProperty = key in this._config;\n if (isModalConfigProperty) {\n this._config[key] = changes[key].currentValue;\n }\n });\n }\n forwardAriaLabel() {\n // Instead of setting aria label on ion-modal in the template we forward it to modal-wrapper for consistency\n // and so we do not start listening for title changes in the modal-wrapper.\n this._config.htmlAttributes = {\n 'aria-label': inheritAriaLabelText(this.elementRef.nativeElement),\n };\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalComponent, deps: [{ token: i1.CanDismissHelper }, { token: i2.ModalNavigationService }, { token: i3.WindowRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.13\", type: ModalComponent, isStandalone: true, selector: \"kirby-modal\", inputs: { isOpen: \"isOpen\", trigger: \"trigger\", size: \"size\", scrollDisabled: \"scrollDisabled\", canDismiss: \"canDismiss\", collapseTitle: \"collapseTitle\", customHeight: \"customHeight\", flavor: \"flavor\", drawerSupplementaryAction: \"drawerSupplementaryAction\", interactWithBackground: \"interactWithBackground\" }, outputs: { willPresent: \"willPresent\", didPresent: \"didPresent\", didDismiss: \"didDismiss\", willDismiss: \"willDismiss\" }, queries: [{ propertyName: \"template\", first: true, predicate: TemplateRef, descendants: true, static: true }], viewQueries: [{ propertyName: \"modalElement\", first: true, predicate: IonModal, descendants: true, read: ElementRef, static: true }, { propertyName: \"ionContent\", first: true, predicate: IonContent, descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<ion-modal\\n class=\\\"kirby-modal kirby-overlay kirby-modal-{{ size }}\\\"\\n [ngClass]=\\\"[\\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\\n interactWithBackground ? 'interact-with-background' : '',\\n ]\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [trigger]=\\\"trigger\\\"\\n [canDismiss]=\\\"_canDismiss\\\"\\n [showBackdrop]=\\\"!interactWithBackground\\\"\\n [style.--kirby-modal-height]=\\\"customHeight\\\"\\n (willPresent)=\\\"_onWillPresent($event)\\\"\\n (didPresent)=\\\"_onDidPresent($event)\\\"\\n (willDismiss)=\\\"_onWillDismiss($event)\\\"\\n (didDismiss)=\\\"_onDidDismiss($event)\\\"\\n>\\n <ng-template>\\n @if (flavor === 'compact') {\\n <kirby-modal-compact-wrapper\\n [config]=\\\"_config\\\"\\n [content]=\\\"template\\\"\\n ></kirby-modal-compact-wrapper>\\n } @else {\\n <kirby-modal-wrapper\\n class=\\\"ion-page\\\"\\n [config]=\\\"_config\\\"\\n [content]=\\\"template\\\"\\n [scrollDisabled]=\\\"scrollDisabled\\\"\\n ></kirby-modal-wrapper>\\n }\\n </ng-template>\\n</ion-modal>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i4.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: IonModal, selector: \"ion-modal\" }, { kind: \"component\", type: ModalWrapperComponent, selector: \"kirby-modal-wrapper\", inputs: [\"scrollDisabled\", \"config\", \"content\"] }, { kind: \"component\", type: ModalCompactWrapperComponent, selector: \"kirby-modal-compact-wrapper\", inputs: [\"config\", \"content\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalComponent, decorators: [{\n type: Component,\n args: [{ selector: 'kirby-modal', imports: [\n CommonModule,\n IconComponent,\n IonModal,\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ion-modal\\n class=\\\"kirby-modal kirby-overlay kirby-modal-{{ size }}\\\"\\n [ngClass]=\\\"[\\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\\n interactWithBackground ? 'interact-with-background' : '',\\n ]\\\"\\n [isOpen]=\\\"isOpen\\\"\\n [trigger]=\\\"trigger\\\"\\n [canDismiss]=\\\"_canDismiss\\\"\\n [showBackdrop]=\\\"!interactWithBackground\\\"\\n [style.--kirby-modal-height]=\\\"customHeight\\\"\\n (willPresent)=\\\"_onWillPresent($event)\\\"\\n (didPresent)=\\\"_onDidPresent($event)\\\"\\n (willDismiss)=\\\"_onWillDismiss($event)\\\"\\n (didDismiss)=\\\"_onDidDismiss($event)\\\"\\n>\\n <ng-template>\\n @if (flavor === 'compact') {\\n <kirby-modal-compact-wrapper\\n [config]=\\\"_config\\\"\\n [content]=\\\"template\\\"\\n ></kirby-modal-compact-wrapper>\\n } @else {\\n <kirby-modal-wrapper\\n class=\\\"ion-page\\\"\\n [config]=\\\"_config\\\"\\n [content]=\\\"template\\\"\\n [scrollDisabled]=\\\"scrollDisabled\\\"\\n ></kirby-modal-wrapper>\\n }\\n </ng-template>\\n</ion-modal>\\n\" }]\n }], ctorParameters: () => [{ type: i1.CanDismissHelper }, { type: i2.ModalNavigationService }, { type: i3.WindowRef }, { type: i0.ElementRef }], propDecorators: { modalElement: [{\n type: ViewChild,\n args: [IonModal, { static: true, read: ElementRef }]\n }], ionContent: [{\n type: ViewChild,\n args: [IonContent]\n }], template: [{\n type: ContentChild,\n args: [TemplateRef, { static: true }]\n }], isOpen: [{\n type: Input\n }], trigger: [{\n type: Input\n }], size: [{\n type: Input\n }], scrollDisabled: [{\n type: Input\n }], canDismiss: [{\n type: Input\n }], collapseTitle: [{\n type: Input\n }], customHeight: [{\n type: Input\n }], flavor: [{\n type: Input\n }], drawerSupplementaryAction: [{\n type: Input\n }], interactWithBackground: [{\n type: Input\n }], willPresent: [{\n type: Output\n }], didPresent: [{\n type: Output\n }], didDismiss: [{\n type: Output\n }], willDismiss: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kYWwvc3JjL21vZGFsL21vZGFsLWNvbXBvbmVudC9tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9tb2RhbC9zcmMvbW9kYWwvbW9kYWwtY29tcG9uZW50L21vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFeEUsT0FBTyxFQUVMLDRCQUE0QixFQUk1QixxQkFBcUIsR0FFdEIsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBZTdCLE1BQU0sT0FBTyxjQUFjO0lBVXpCLElBQWEsVUFBVSxDQUFDLFVBQXVDO1FBQzdELE9BQU8sVUFBVSxLQUFLLFNBQVM7WUFDN0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBNkJELFlBQ1UsZ0JBQWtDLEVBQ2xDLHNCQUE4QyxFQUM5QyxTQUFvQixFQUNwQixVQUFzQjtRQUh0QixxQkFBZ0Is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Szs7c0JBQ0wsS0FBSzs7c0JBR0wsTUFBTTs7c0JBQ04sTUFBTTs7c0JBQ04sTUFBTTs7c0JBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQ29udGVudCwgSW9uTW9kYWwgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IE92ZXJsYXlFdmVudERldGFpbCB9IGZyb20gJ0Bpb25pYy9jb3JlL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgS2lyYnlBbmltYXRpb24gfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL2hlbHBlcnMnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BraXJieWRlc2lnbi9kZXNpZ25zeXN0ZW0vaWNvbic7XG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3R5cGVzJztcblxuaW1wb3J0IHsgaW5oZXJpdEFyaWFMYWJlbFRleHQgfSBmcm9tICdAa2lyYnlkZXNpZ24vZGVzaWduc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBNb2RhbE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kYWwtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb24sXG4gIE1vZGFsQ29tcGFjdFdyYXBwZXJDb21wb25lbnQsXG4gIE1vZGFsQ29uZmlnLFxuICBNb2RhbEZsYXZvcixcbiAgTW9kYWxTaXplLFxuICBNb2RhbFdyYXBwZXJDb21wb25lbnQsXG4gIFNob3dBbGVydENhbGxiYWNrLFxufSBmcm9tICcuLi8uLi9tb2RhbC13cmFwcGVyJztcbmltcG9ydCB7IENhbkRpc21pc3NIZWxwZXIgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2tpcmJ5LW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJY29uQ29tcG9uZW50LFxuICAgIElvbk1vZGFsLFxuICAgIE1vZGFsV3JhcHBlckNvbXBvbmVudCxcbiAgICBNb2RhbENvbXBhY3RXcmFwcGVyQ29tcG9uZW50LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoSW9uTW9kYWwsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIG1vZGFsRWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW9uTW9kYWxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChJb25Db250ZW50KSBpb25Db250ZW50OiBJb25Db250ZW50O1xuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KCkgaXNPcGVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRyaWdnZXI6IHN0cmluZztcbiAgQElucHV0KCkgc2l6ZTogTW9kYWxTaXplID0gJ21lZGl1bSc7XG4gIEBJbnB1dCgpIHNjcm9sbERpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCBjYW5EaXNtaXNzKGNhbkRpc21pc3M6IFNob3dBbGVydENhbGxiYWNrIHwgYm9vbGVhbikge1xuICAgIHR5cGVvZiBjYW5EaXNtaXNzID09PSAnYm9vbGVhbidcbiAgICAgID8gKHRoaXMuX2NhbkRpc21pc3MgPSBjYW5EaXNtaXNzKVxuICAgICAgOiAodGhpcy5fY2FuRGlzbWlzcyA9IHRoaXMuY2FuRGlzbWlzc0hlbHBlci5nZXRDYW5EaXNtaXNzQ2FsbGJhY2soY2FuRGlzbWlzcykpO1xuICB9XG5cbiAgLy8gTk9URTogaW5wdXQgcHJvcGVydGllcyBmb3J3YXJkZWQgdG8gbW9kYWwtd3JhcHBlciBNb2RhbENvbmZpZ1xuICBASW5wdXQoKSBjb2xsYXBzZVRpdGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1c3RvbUhlaWdodDogc3RyaW5nID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBmbGF2b3I6IE1vZGFsRmxhdm9yID0gJ21vZGFsJztcbiAgQElucHV0KCkgZHJhd2VyU3VwcGxlbWVudGFyeUFjdGlvbj86IERyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb24gPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGludGVyYWN0V2l0aEJhY2tncm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gZW5kIE5PVEVcblxuICBAT3V0cHV0KCkgd2lsbFByZXNlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PE92ZXJsYXlFdmVudERldGFpbD4+KCk7XG4gIEBPdXRwdXQoKSBkaWRQcmVzZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudDxPdmVybGF5RXZlbnREZXRhaWw+PigpO1xuICBAT3V0cHV0KCkgZGlkRGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ8T3ZlcmxheUV2ZW50RGV0YWlsPj4oKTtcbiAgQE91dHB1dCgpIHdpbGxEaXNtaXNzID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudDxPdmVybGF5RXZlbnREZXRhaWw+PigpO1xuXG4gIC8qKlxuICAgKiBXZSBwb3B1bGF0ZSB0aGUgTW9kYWxDb25maWcgd2l0aCBkZWZhdWx0cyBoZXJlLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBjYW5cbiAgICogZ3VhcmQgZm9yIGBpZiAoa2V5IGluIHRoaXMuX2NvbmZpZylgIGFuZCBvbmx5IHVwZGF0ZSB0aGUgY29uZmlnIHdoZW4gYW55IG9mIHRoZXNlXG4gICAqIGlucHV0cyBjaGFuZ2UuXG4gICAqL1xuICBfY29uZmlnOiBNb2RhbENvbmZpZyA9IHtcbiAgICBjb2xsYXBzZVRpdGxlOiB0aGlzLmNvbGxhcHNlVGl0bGUsXG4gICAgY3VzdG9tSGVpZ2h0OiB0aGlzLmN1c3RvbUhlaWdodCxcbiAgICBmbGF2b3I6IHRoaXMuZmxhdm9yLFxuICAgIGRyYXdlclN1cHBsZW1lbnRhcnlBY3Rpb246IHRoaXMuZHJhd2VyU3VwcGxlbWVudGFyeUFjdGlvbixcbiAgICBpbnRlcmFjdFdpdGhCYWNrZ3JvdW5kOiB0aGlzLmludGVyYWN0V2l0aEJhY2tncm91bmQsXG4gIH07XG4gIF9jYW5EaXNtaXNzOiBTaG93QWxlcnRDYWxsYmFjayB8IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2FuRGlzbWlzc0hlbHBlcjogQ2FuRGlzbWlzc0hlbHBlcixcbiAgICBwcml2YXRlIG1vZGFsTmF2aWdhdGlvblNlcnZpY2U6IE1vZGFsTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9yd2FyZEFyaWFMYWJlbCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTW9kYWxDb25maWdPbkNoYW5nZShjaGFuZ2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUb1RvcChzY3JvbGxEdXJhdGlvbj86IEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFRvVG9wKHNjcm9sbER1cmF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzY3JvbGxUb0JvdHRvbShzY3JvbGxEdXJhdGlvbj86IEtpcmJ5QW5pbWF0aW9uLkR1cmF0aW9uKSB7XG4gICAgdGhpcy5pb25Db250ZW50LnNjcm9sbFRvQm90dG9tKHNjcm9sbER1cmF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBfb25XaWxsUHJlc2VudChldmVudDogQ3VzdG9tRXZlbnQ8T3ZlcmxheUV2ZW50RGV0YWlsPikge1xuICAgIHRoaXMud2lsbFByZXNlbnQuZW1pdChldmVudCk7XG5cbiAgICBpZiAodGhpcy5pbnRlcmFjdFdpdGhCYWNrZ3JvdW5kKSB7XG4gICAgICB0aGlzLndpbmRvd1JlZi5uYXRpdmVXaW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdhbGxvdy1iYWNrZ3JvdW5kLXNjcm9sbCcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBfb25EaWRQcmVzZW50KGV2ZW50OiBDdXN0b21FdmVudDxPdmVybGF5RXZlbnREZXRhaWw+KSB7XG4gICAgdGhpcy5tb2RhbE5hdmlnYXRpb25TZXJ2aWNlLmhhbmRsZUJyb3dzZXJCYWNrQnV0dG9uKHRoaXMubW9kYWxFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuZGlkUHJlc2VudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBfb25XaWxsRGlzbWlzcyhldmVudDogQ3VzdG9tRXZlbnQ8T3ZlcmxheUV2ZW50RGV0YWlsPikge1xuICAgIGlmICh0aGlzLmludGVyYWN0V2l0aEJhY2tncm91bmQpIHtcbiAgICAgIHRoaXMud2luZG93UmVmLm5hdGl2ZVdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2FsbG93LWJhY2tncm91bmQtc2Nyb2xsJyk7XG4gICAgfVxuXG4gICAgdGhpcy53aWxsRGlzbWlzcy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBfb25EaWREaXNtaXNzKGV2ZW50OiBDdXN0b21FdmVudDxPdmVybGF5RXZlbnREZXRhaWw+KSB7XG4gICAgdGhpcy5kaWREaXNtaXNzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RhbENvbmZpZ09uQ2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzKS5mb3JFYWNoKChba2V5XSkgPT4ge1xuICAgICAgY29uc3QgaXNNb2RhbENvbmZpZ1Byb3BlcnR5ID0ga2V5IGluIHRoaXMuX2NvbmZpZztcbiAgICAgIGlmIChpc01vZGFsQ29uZmlnUHJvcGVydHkpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnW2tleV0gPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3J3YXJkQXJpYUxhYmVsKCkge1xuICAgIC8vIEluc3RlYWQgb2Ygc2V0dGluZyBhcmlhIGxhYmVsIG9uIGlvbi1tb2RhbCBpbiB0aGUgdGVtcGxhdGUgd2UgZm9yd2FyZCBpdCB0byBtb2RhbC13cmFwcGVyIGZvciBjb25zaXN0ZW5jeVxuICAgIC8vIGFuZCBzbyB3ZSBkbyBub3Qgc3RhcnQgbGlzdGVuaW5nIGZvciB0aXRsZSBjaGFuZ2VzIGluIHRoZSBtb2RhbC13cmFwcGVyLlxuICAgIHRoaXMuX2NvbmZpZy5odG1sQXR0cmlidXRlcyA9IHtcbiAgICAgICdhcmlhLWxhYmVsJzogaW5oZXJpdEFyaWFMYWJlbFRleHQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLFxuICAgIH07XG4gIH1cbn1cbiIsIjxpb24tbW9kYWxcbiAgY2xhc3M9XCJraXJieS1tb2RhbCBraXJieS1vdmVybGF5IGtpcmJ5LW1vZGFsLXt7IHNpemUgfX1cIlxuICBbbmdDbGFzc109XCJbXG4gICAgZmxhdm9yID09PSAnY29tcGFjdCcgPyAna2lyYnktbW9kYWwtY29tcGFjdCcgOiAna2lyYnktJyArIGZsYXZvcixcbiAgICBpbnRlcmFjdFdpdGhCYWNrZ3JvdW5kID8gJ2ludGVyYWN0LXdpdGgtYmFja2dyb3VuZCcgOiAnJyxcbiAgXVwiXG4gIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgW3RyaWdnZXJdPVwidHJpZ2dlclwiXG4gIFtjYW5EaXNtaXNzXT1cIl9jYW5EaXNtaXNzXCJcbiAgW3Nob3dCYWNrZHJvcF09XCIhaW50ZXJhY3RXaXRoQmFja2dyb3VuZFwiXG4gIFtzdHlsZS4tLWtpcmJ5LW1vZGFsLWhlaWdodF09XCJjdXN0b21IZWlnaHRcIlxuICAod2lsbFByZXNlbnQpPVwiX29uV2lsbFByZXNlbnQoJGV2ZW50KVwiXG4gIChkaWRQcmVzZW50KT1cIl9vbkRpZFByZXNlbnQoJGV2ZW50KVwiXG4gICh3aWxsRGlzbWlzcyk9XCJfb25XaWxsRGlzbWlzcygkZXZlbnQpXCJcbiAgKGRpZERpc21pc3MpPVwiX29uRGlkRGlzbWlzcygkZXZlbnQpXCJcbj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIEBpZiAoZmxhdm9yID09PSAnY29tcGFjdCcpIHtcbiAgICAgIDxraXJieS1tb2RhbC1jb21wYWN0LXdyYXBwZXJcbiAgICAgICAgW2NvbmZpZ109XCJfY29uZmlnXCJcbiAgICAgICAgW2NvbnRlbnRdPVwidGVtcGxhdGVcIlxuICAgICAgPjwva2lyYnktbW9kYWwtY29tcGFjdC13cmFwcGVyPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGtpcmJ5LW1vZGFsLXdyYXBwZXJcbiAgICAgICAgY2xhc3M9XCJpb24tcGFnZVwiXG4gICAgICAgIFtjb25maWddPVwiX2NvbmZpZ1wiXG4gICAgICAgIFtjb250ZW50XT1cInRlbXBsYXRlXCJcbiAgICAgICAgW3Njcm9sbERpc2FibGVkXT1cInNjcm9sbERpc2FibGVkXCJcbiAgICAgID48L2tpcmJ5LW1vZGFsLXdyYXBwZXI+XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG4iXX0=","import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, } from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport { ModalElementComponent, ModalElementType, } from '../../modal.interfaces';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"../../modal.interfaces\";\nexport class ModalFooterComponent extends ModalElementComponent {\n get _cssClass() {\n return [this.themeColor, this.type].filter((cssClass) => !!cssClass);\n }\n constructor(elementRef, modalElementsAdvertiser) {\n super(ModalElementType.FOOTER, elementRef, modalElementsAdvertiser);\n this.snapToKeyboard = false;\n this.type = 'fixed';\n this.themeColor = 'white';\n }\n /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalFooterComponent, deps: [{ token: i0.ElementRef }, { token: i1.ModalElementsAdvertiser, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.13\", type: ModalFooterComponent, isStandalone: true, selector: \"kirby-modal-footer\", inputs: { snapToKeyboard: \"snapToKeyboard\", type: \"type\", themeColor: \"themeColor\" }, host: { properties: { \"class.snap-to-keyboard\": \"this.snapToKeyboard\", \"class\": \"this._cssClass\" } }, usesInheritance: true, ngImport: i0, template: \"<ion-footer role=\\\"presentation\\\">\\n <ng-content></ng-content>\\n</ion-footer>\\n\", styles: [\"ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\\n\"], dependencies: [{ kind: \"component\", type: IonFooter, selector: \"ion-footer\", inputs: [\"collapse\", \"mode\", \"translucent\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.13\", ngImport: i0, type: ModalFooterComponent, decorators: [{\n type: Component,\n args: [{ imports: [IonFooter], selector: 'kirby-modal-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: \"<ion-footer role=\\\"presentation\\\">\\n <ng-content></ng-content>\\n</ion-footer>\\n\", styles: [\"ion-item-option.primary{background-color:var(--kirby-primary);color:var(--kirby-primary-contrast)}ion-item-option.secondary{background-color:var(--kirby-secondary);color:var(--kirby-secondary-contrast)}ion-item-option.tertiary{background-color:var(--kirby-tertiary);color:var(--kirby-tertiary-contrast)}ion-item-option.success{background-color:var(--kirby-success);color:var(--kirby-success-contrast)}ion-item-option.warning{background-color:var(--kirby-warning);color:var(--kirby-warning-contrast)}ion-item-option.danger{background-color:var(--kirby-danger);color:var(--kirby-danger-contrast)}ion-item-option.white-overlay{background-color:var(--kirby-white-overlay);color:var(--kirby-white-overlay-contrast)}ion-item-option.light{background-color:var(--kirby-light);color:var(--kirby-light-contrast)}ion-item-option.medium{background-color:var(--kirby-medium);color:var(--kirby-medium-contrast)}ion-item-option.dark{background-color:var(--kirby-dark);color:var(--kirby-dark-contrast)}ion-item-option.dark-overlay{background-color:var(--kirby-dark-overlay);color:var(--kirby-dark-overlay-contrast)}ion-footer{--kirby-inputs-background-color: var(--kirby-dark-overlay);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-inputs-elevation: none;--kirby-divider-color: var(--kirby-background-color);box-shadow:0 20px 30px -15px #1c1c1c4d,0 0 5px #1c1c1c14;box-sizing:inherit;display:flex;justify-content:var(--kirby-modal-footer-justify-content, center);align-items:center;background-color:var(--kirby-modal-footer-background, var(--kirby-white));color:var(--kirby-modal-footer-color, var(--kirby-white-contrast));padding:16px;padding-bottom:calc(12px + var(--kirby-modal-footer-safe-area-bottom, 0px))}@media (min-width: 768px){ion-footer{padding:24px}}@media (max-width: 767px){:host{--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}}:host{box-sizing:border-box;display:block}:host(.snap-to-keyboard) ion-footer{transition:transform .15s ease-out}:host(.light) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background-color:var(--kirby-background-color)}:host(.inline) ion-footer{--kirby-inputs-background-color: var(--kirby-white);--kirby-inputs-background-color-hover: var(--kirby-dark-overlay-10);--kirby-inputs-background-color-active: var(--kirby-dark-overlay-20);--kirby-inputs-color: var(--kirby-black);--kirby-inputs-indicator-background-color: var(--kirby-black);--kirby-inputs-indicator-color: var(--kirby-white);--kirby-inputs-placeholder-color: var(--kirby-semi-dark);--kirby-divider-color: var(--kirby-medium);--kirby-inputs-elevation: var(--kirby-elevation-2);background:transparent;box-shadow:none}:host-context(.keyboard-visible).snap-to-keyboard ion-footer{transition:transform .25s ease-out 1ms;transform:translateY(calc((var(--keyboard-offset, 0px) - var(--kirby-modal-footer-safe-area-bottom, 0px)) * -1))}:host-context(.modal-wrapper.full-height){--kirby-modal-footer-safe-area-bottom: var(--kirby-safe-area-bottom)}\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.ModalElementsAdvertiser, decorators: [{\n type: Optional\n }] }], propDecorators: { snapToKeyboard: [{\n type: HostBinding,\n args: ['class.snap-to-keyboard']\n }, {\n type: Input\n }], type: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], _cssClass: [{\n type: HostBinding,\n args: ['class']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtZm9vdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9mb290ZXIvbW9kYWwtZm9vdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL21vZGFsL3NyYy9tb2RhbC9mb290ZXIvbW9kYWwtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wscUJBQXFCLEVBRXJCLGdCQUFnQixHQUNqQixNQUFNLHdCQUF3QixDQUFDOzs7QUFTaEMsTUFBTSxPQUFPLG9CQUFxQixTQUFRLHFCQUFxQjtJQVc3RCxJQUNJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFlBQ0UsVUFBbUMsRUFDdkIsdUJBQWdEO1FBRTVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFqQnRFLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLFNBQUksR0FBdUIsT0FBTyxDQUFDO1FBR25DLGVBQVUsR0FBc0IsT0FBTyxDQUFDO0lBWXhDLENBQUM7a0lBckJVLG9CQUFvQjtzSEFBcEIsb0JBQW9CLGlTQ3RCakMsa0ZBR0Esb3NIRGFZLFNBQVM7OzRGQU1SLG9CQUFvQjtrQkFQaEMsU0FBUzs4QkFDQyxDQUFDLFNBQVMsQ0FBQyxZQUNWLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNOzswQkFvQjVDLFFBQVE7O3NCQWpCVixXQUFXO3VCQUFDLHdCQUF3Qjs7c0JBQ3BDLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLEtBQUs7O3NCQUdMLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uRm9vdGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQge1xuICBNb2RhbEVsZW1lbnRDb21wb25lbnQsXG4gIE1vZGFsRWxlbWVudHNBZHZlcnRpc2VyLFxuICBNb2RhbEVsZW1lbnRUeXBlLFxufSBmcm9tICcuLi8uLi9tb2RhbC5pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtJb25Gb290ZXJdLFxuICBzZWxlY3RvcjogJ2tpcmJ5LW1vZGFsLWZvb3RlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RhbC1mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RhbC1mb290ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsRm9vdGVyQ29tcG9uZW50IGV4dGVuZHMgTW9kYWxFbGVtZW50Q29tcG9uZW50IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbmFwLXRvLWtleWJvYXJkJylcbiAgQElucHV0KClcbiAgc25hcFRvS2V5Ym9hcmQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICB0eXBlOiAnaW5saW5lJyB8ICdmaXhlZCcgPSAnZml4ZWQnO1xuXG4gIEBJbnB1dCgpXG4gIHRoZW1lQ29sb3I6ICd3aGl0ZScgfCAnbGlnaHQnID0gJ3doaXRlJztcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9jc3NDbGFzcygpIHtcbiAgICByZXR1cm4gW3RoaXMudGhlbWVDb2xvciwgdGhpcy50eXBlXS5maWx0ZXIoKGNzc0NsYXNzKSA9PiAhIWNzc0NsYXNzKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIEBPcHRpb25hbCgpIG1vZGFsRWxlbWVudHNBZHZlcnRpc2VyOiBNb2RhbEVsZW1lbnRzQWR2ZXJ0aXNlclxuICApIHtcbiAgICBzdXBlcihNb2RhbEVsZW1lbnRUeXBlLkZPT1RFUiwgZWxlbWVudFJlZiwgbW9kYWxFbGVtZW50c0FkdmVydGlzZXIpO1xuICB9XG59XG4iLCI8aW9uLWZvb3RlciByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2lyYnlkZXNpZ24tZGVzaWduc3lzdGVtLW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kYWwvc3JjL2tpcmJ5ZGVzaWduLWRlc2lnbnN5c3RlbS1tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":["i2","i1","i1.AlertHelper","i4.CanDismissHelper","i5","i2.CanDismissHelper","i3","i2.ModalAnimationBuilderService","i3.ModalNavigationService","i4","i5.CanDismissHelper","i1.ModalHelper","i2.ActionSheetHelper","i3.AlertHelper","i4.ModalNavigationService","IonicModalController","i1.CanDismissHelper","i2.ModalNavigationService","i1.ModalElementsAdvertiser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-modal.mjs","sources":["../../modal/src/modal.interfaces.ts","../../modal/src/modal-wrapper/config/modal-config.helper.ts","../../modal/src/modal-wrapper/modal-elements-mover.delegate.ts","../../modal/src/modal/alert/alert.component.ts","../../modal/src/modal/alert/alert.component.html","../../modal/src/modal/services/alert.helper.ts","../../modal/src/modal/services/can-dismiss.helper.ts","../../modal/src/modal-wrapper/modal-wrapper.component.ts","../../modal/src/modal-wrapper/modal-wrapper.component.html","../../modal/src/modal-wrapper/config/drawer-supplementary-action.ts","../../modal/src/modal-wrapper/compact/modal-compact-wrapper.component.ts","../../modal/src/modal-wrapper/compact/modal-compact-wrapper.component.html","../../modal/src/modal/services/modal-animation-builder.service.ts","../../modal/src/modal-navigation.service.ts","../../modal/src/modal/services/modal.helper.ts","../../modal/src/modal/action-sheet/action-sheet.component.ts","../../modal/src/modal/action-sheet/action-sheet.component.html","../../modal/src/modal/services/action-sheet.helper.ts","../../modal/src/modal/services/modal.controller.ts","../../modal/src/modal/services/can-dismiss-modal-guard.ts","../../modal/src/modal/modal-component/modal.component.ts","../../modal/src/modal/modal-component/modal.component.html","../../modal/src/modal/footer/modal-footer.component.ts","../../modal/src/modal/footer/modal-footer.component.html","../../modal/src/kirbydesign-designsystem-modal.ts"],"sourcesContent":["import { AfterViewInit, Component, ElementRef, OnDestroy, Optional } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport { ShowAlertCallback } from './public_api';\nexport interface OverlayEventDetail<T = any> {\n data?: T;\n role?: string;\n}\n\nexport interface Overlay {\n dismiss: (data?: any) => Promise<boolean>;\n onWillDismiss: Promise<OverlayEventDetail>;\n onDidDismiss: Promise<OverlayEventDetail>;\n isDismissing?: boolean;\n}\n\nexport interface ModalRouteActivation {\n route: ActivatedRoute;\n isNewModal: boolean;\n}\n\nexport abstract class Modal {\n didPresent: Promise<void>;\n willClose: Promise<void>;\n close: (data?: any) => Promise<void>;\n scrollToTop: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollToBottom: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollDisabled: boolean;\n canDismiss: ShowAlertCallback;\n focusTitle?: () => void;\n}\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\nexport enum ModalElementType {\n PAGE_PROGRESS,\n FOOTER,\n TITLE,\n}\n\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\nexport abstract class ModalElementsAdvertiser {\n addModalElement: (type: ModalElementType, elementRef: ElementRef<HTMLElement>) => void;\n removeModalElement: (type: ModalElementType, elementRef: ElementRef<HTMLElement>) => void;\n}\n\n/**\n * WARNING: This is for internal use only and should not be used outside of Kirby.\n */\n@Component({\n template: '',\n standalone: false,\n})\nexport abstract class ModalElementComponent implements AfterViewInit, OnDestroy {\n private get isContainedInModal() {\n return this.modalElementsAdvertiser !== null;\n }\n\n constructor(\n private modalElementType: ModalElementType,\n private elementRef: ElementRef<HTMLElement>,\n @Optional() private modalElementsAdvertiser: ModalElementsAdvertiser\n ) {}\n\n ngAfterViewInit() {\n if (this.isContainedInModal) {\n this.modalElementsAdvertiser.addModalElement(this.modalElementType, this.elementRef);\n }\n }\n\n ngOnDestroy() {\n if (this.isContainedInModal) {\n this.modalElementsAdvertiser.removeModalElement(this.modalElementType, this.elementRef);\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const COMPONENT_PROPS = new InjectionToken<string>('componentProps');\n","import { ElementRef, Renderer2 } from '@angular/core';\n\n/*\n The ModalWrapperComponent class was growing large. \n\n Hence the functions responsible for moving modal elements around \n has been encapsulated in this class. \n*/\n\nexport class ModalElementsMoverDelegate {\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>\n ) {}\n\n public addFooter(footerElementRef: ElementRef<HTMLElement>) {\n // Move the footer next to ion-content\n this.moveChild(footerElementRef, this.elementRef);\n }\n\n public removeFooter(footerElementRef: ElementRef<HTMLElement>) {\n this.removeChild(footerElementRef);\n }\n\n public addPageProgress(\n pageProgressElementRef: ElementRef<HTMLElement>,\n ionToolbarElement: ElementRef<HTMLIonToolbarElement>\n ) {\n this.moveChild(pageProgressElementRef, ionToolbarElement);\n }\n\n public removePageProgress(pageProgressElementRef: ElementRef<HTMLElement>) {\n this.removeChild(pageProgressElementRef);\n }\n\n /* \n contentTitleElement & ionTitleElement has to be passed\n as arguments to the method; not part of the constructor, as they \n might reference completely different elements between calls. \n\n For example in a multi-page routed modal where the elements are destroyed \n and recreated.\n */\n public addTitle(\n titleElementRef: ElementRef<HTMLElement>,\n contentTitleElement: ElementRef<HTMLElement>,\n hasCollapsibleTitle: boolean,\n ionTitleElement: ElementRef<HTMLIonTitleElement>\n ) {\n this.moveChild(titleElementRef, ionTitleElement);\n // If title is collapsible append it to content area; required by ionic implementation.\n if (hasCollapsibleTitle) {\n const titleElementClone = titleElementRef.nativeElement.cloneNode(true) as HTMLElement;\n this.moveChild(new ElementRef(titleElementClone), contentTitleElement);\n }\n }\n\n public removeTitle(\n titleElementRef: ElementRef<HTMLElement>,\n hasCollapsibleTitle: boolean,\n contentTitleElement: ElementRef<HTMLElement>\n ) {\n this.removeChild(titleElementRef);\n if (hasCollapsibleTitle) {\n const kirbyPageTitleElement: HTMLElement =\n contentTitleElement.nativeElement.querySelector('kirby-page-title');\n this.removeChild(new ElementRef(kirbyPageTitleElement));\n }\n }\n\n private moveChild(\n childElementRef: ElementRef<HTMLElement>,\n newParentElementRef: ElementRef<HTMLElement>\n ) {\n const child = childElementRef.nativeElement;\n const newParent = newParentElementRef.nativeElement;\n this.renderer.removeChild(child.parentElement, child);\n this.renderer.appendChild(newParent, child);\n }\n\n private removeChild(\n childElementRef: ElementRef<HTMLElement>,\n parentElement?: HTMLElement | ElementRef<HTMLElement>\n ) {\n const child = childElementRef.nativeElement;\n if (child) {\n this.renderer.removeChild(parentElement || child.parentElement, child);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n ViewChild,\n} from '@angular/core';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { Observable, of } from 'rxjs';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { ThemeColor } from '@kirbydesign/designsystem/helpers';\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { EmptyStateComponent } from '@kirbydesign/designsystem/empty-state';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\n@Component({\n imports: [IconComponent, EmptyStateComponent, ButtonComponent, CommonModule, ThemeColorDirective],\n selector: 'kirby-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n host: { '[class.ion-page]': 'false' }, //Ensure ion-page class doesn't get applied by Ionic Modal Controller\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AlertComponent implements AfterViewInit {\n readonly BLUR_WRAPPER_DELAY_IN_MS = 50;\n @ViewChild('alertWrapper', { static: true }) private alertWrapper: ElementRef;\n private scrollY: number = Math.abs(this.windowRef.nativeWindow.scrollY);\n\n title$: Observable<string>;\n @Input()\n set title(title: string | Observable<string>) {\n this.title$ = typeof title === 'string' ? of(title) : title;\n }\n\n message$: Observable<string>;\n @Input()\n set message(message: string | Observable<string>) {\n this.message$ = typeof message === 'string' ? of(message) : message;\n }\n\n @Input() iconName: string;\n @Input() iconThemeColor: ThemeColor | `${ThemeColor}`;\n\n okBtn$: Observable<string>;\n @Input()\n set okBtn(okBtn: string | Observable<string>) {\n this.okBtn$ = typeof okBtn === 'string' ? of(okBtn) : okBtn;\n }\n @Input() okBtnIsDestructive: boolean;\n\n cancelBtn$: Observable<string>;\n @Input()\n set cancelBtn(cancelBtn: string | Observable<string>) {\n this.cancelBtn$ = typeof cancelBtn === 'string' ? of(cancelBtn) : cancelBtn;\n }\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private windowRef: WindowRef\n ) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.alertWrapper.nativeElement.focus();\n this.alertWrapper.nativeElement.blur();\n }, this.BLUR_WRAPPER_DELAY_IN_MS);\n }\n\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n\n onCancel() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement?.dismiss(false);\n }\n\n onOk() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement?.dismiss(true);\n }\n}\n","<article #alertWrapper>\n <kirby-empty-state\n [iconName]=\"iconName\"\n [themeColor]=\"iconThemeColor\"\n [title]=\"title$ | async\"\n [subtitle]=\"message$ | async\"\n ></kirby-empty-state>\n <div class=\"buttongroup\">\n @if (cancelBtn$ | async; as cancelBtn) {\n <button kirby-button attentionLevel=\"3\" class=\"cancel-btn\" (click)=\"onCancel()\">\n {{ cancelBtn }}\n </button>\n }\n <button\n kirby-button\n [size]=\"(cancelBtn$ | async) ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn$ | async }}\n </button>\n </div>\n</article>\n","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\nimport { isObservable, Observable } from 'rxjs';\nimport { Overlay } from '../../modal.interfaces';\n\nimport { AlertComponent } from '../alert/alert.component';\nimport { AlertConfig } from '../alert/config/alert-config';\n\n@Injectable()\nexport class AlertHelper {\n constructor(private ionicModalController: ModalController) {}\n\n public async showAlert(config: AlertConfig): Promise<Overlay> {\n const ionModal = await this.ionicModalController.create({\n component: AlertComponent,\n componentProps: this.getComponentProps(config),\n cssClass: ['kirby-overlay', 'kirby-alert'],\n mode: 'ios',\n backdropDismiss: false,\n });\n\n await ionModal.present();\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n\n private getComponentProps(config: AlertConfig) {\n return {\n ...config,\n okBtn: this.getOkBtn(config),\n okBtnIsDestructive: this.getOkBtnIsDestructive(config),\n iconName: config.icon && config.icon.name,\n iconThemeColor: config.icon && config.icon.themeColor,\n };\n }\n\n private getOkBtn(config: AlertConfig): string | Observable<string> {\n let text: string | Observable<string>;\n\n if (config.okBtn) {\n if (typeof config.okBtn === 'string' || isObservable(config.okBtn)) {\n text = config.okBtn;\n } else {\n text = config.okBtn?.text;\n }\n }\n\n return text;\n }\n\n getOkBtnIsDestructive(config) {\n return typeof config.okBtn === 'object' ? config.okBtn.isDestructive : undefined;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ShowAlertCallback } from '../../modal-wrapper/config';\nimport { AlertConfig } from '../alert';\nimport { AlertHelper } from './alert.helper';\n\n@Injectable()\nexport class CanDismissHelper {\n constructor(private alertHelper: AlertHelper) {}\n\n public getCanDismissCallback(callback: ShowAlertCallback) {\n return async () => {\n const result = await callback();\n\n if (typeof result === 'boolean') return result;\n\n const canCloseModal = await this.showAlert(result);\n return canCloseModal;\n };\n }\n\n public async showAlert(config: AlertConfig): Promise<boolean> {\n const alert = await this.alertHelper.showAlert(config);\n const result = await alert.onWillDismiss;\n return result.data;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EnvironmentInjector,\n HostBinding,\n HostListener,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ActivatedRoute, RouterModule, RouterOutlet } from '@angular/router';\nimport { firstValueFrom, merge, Observable, Subject } from 'rxjs';\nimport { debounceTime, first, map, takeUntil } from 'rxjs/operators';\n\nimport { DesignTokenHelper, getIonModalDialogAncestor } from '@kirbydesign/designsystem/helpers';\n\nimport { ResizeObserverService, TranslationService } from '@kirbydesign/designsystem/shared';\nimport { UnobserveFn, WindowRef } from '@kirbydesign/designsystem/types';\nimport { observeContent, PlatformService } from '@kirbydesign/designsystem/helpers';\nimport { CommonModule } from '@angular/common';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\nimport {\n IonButtons,\n IonContent,\n IonHeader,\n IonTitle,\n IonToolbar,\n ScrollDetail,\n} from '@ionic/angular/standalone';\nimport { Modal, ModalElementsAdvertiser, ModalElementType } from '../modal.interfaces';\nimport { CanDismissHelper } from '../modal/services/can-dismiss.helper';\nimport { ModalConfig, ShowAlertCallback } from './config/modal-config';\nimport { COMPONENT_PROPS } from './config/modal-config.helper';\nimport { ModalElementsMoverDelegate } from './modal-elements-mover.delegate';\n\nconst contentScrollDebounceTimeInMS = 10;\nconst contentScrolledOffsetInPixels = 4;\n\n@Component({\n imports: [\n RouterModule,\n ButtonComponent,\n IconComponent,\n CommonModule,\n IonHeader,\n IonToolbar,\n IonTitle,\n IonButtons,\n IonContent,\n ],\n selector: 'kirby-modal-wrapper',\n templateUrl: './modal-wrapper.component.html',\n styleUrls: ['./modal-wrapper.component.scss'],\n providers: [\n { provide: Modal, useExisting: ModalWrapperComponent },\n { provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent },\n ],\n})\nexport class ModalWrapperComponent\n implements Modal, AfterViewInit, OnInit, OnDestroy, ModalElementsAdvertiser\n{\n @HostBinding('class.collapsible-title')\n get _hasCollapsibleTitle() {\n return !!this.config?.collapseTitle;\n }\n\n static readonly KEYBOARD_HIDE_DELAY_IN_MS = 100;\n\n scrollY: number = Math.abs(this.windowRef.nativeWindow.scrollY);\n private readonly VIEWPORT_RESIZE_DEBOUNCE_TIME = 100;\n\n @Input() set scrollDisabled(disabled: boolean) {\n this.ionContent.scrollY = !disabled;\n }\n\n set canDismiss(callback: ShowAlertCallback) {\n this.ionModalElement.canDismiss = this.canDismissHelper.getCanDismissCallback(callback);\n }\n\n @Input() config: ModalConfig;\n @Input() content: TemplateRef<any>;\n\n componentPropsInjector: Injector;\n modalWrapperInjector: Injector;\n\n @ContentChild(TemplateRef) templateRef: TemplateRef<any>;\n\n @ViewChildren(ButtonComponent, { read: ElementRef }) private toolbarButtonsQuery: QueryList<\n ElementRef<HTMLButtonElement>\n >;\n @ViewChild(IonContent, { static: true }) private ionContent: IonContent;\n @ViewChild(IonContent, { static: true, read: ElementRef })\n private ionContentElement: ElementRef<HTMLIonContentElement>;\n @ViewChild(IonHeader, { static: true, read: ElementRef })\n private ionHeaderElement: ElementRef<HTMLIonHeaderElement>;\n @ViewChild(IonToolbar, { static: true, read: ElementRef })\n private ionToolbarElement: ElementRef<HTMLIonToolbarElement>;\n @ViewChild(IonTitle, { static: true, read: ElementRef })\n private ionTitleElement: ElementRef<HTMLIonTitleElement>;\n @ViewChild(RouterOutlet, { static: true }) private routerOutlet: RouterOutlet;\n\n @ViewChild('contentTitle', { read: ElementRef })\n private _contentTitleElement: ElementRef<HTMLElement>;\n\n get contentTitleElement(): ElementRef<HTMLElement> {\n /*\n contentTitleElement has ngIf directive dependent on _hasCollapsibleTitle; trigger CD to make sure element has been queried.\n Solution taken from: https://danieleyassu.com/angular-viewchild-and-ngif/\n */\n if (!this._contentTitleElement && this._hasCollapsibleTitle) {\n this.changeDetector.detectChanges();\n }\n return this._contentTitleElement;\n }\n\n private keyboardVisible = false;\n private toolbarButtons: HTMLButtonElement[] = [];\n private delayedClose = () => {};\n private delayedCloseTimeoutId;\n private initialViewportHeight: number;\n private viewportResized = false;\n private ionModalElement?: HTMLIonModalElement;\n private ionModalDialog?: HTMLElement;\n private readonly ionModalDidPresent = new Subject<void>();\n readonly didPresent = firstValueFrom(this.ionModalDidPresent);\n private readonly ionModalWillDismiss = new Subject<void>();\n readonly willClose = firstValueFrom(this.ionModalWillDismiss);\n private viewportResize = new Subject<void>();\n private viewportResize$ = this.viewportResize\n .asObservable()\n .pipe(debounceTime(this.VIEWPORT_RESIZE_DEBOUNCE_TIME));\n private mutationObserverUnobserveFn: UnobserveFn;\n private _intersectionObserver: IntersectionObserver;\n private get intersectionObserver(): IntersectionObserver {\n if (!this._intersectionObserver) {\n this._intersectionObserver = this.createModalWrapperIntersectionObserver();\n }\n return this._intersectionObserver;\n }\n scrollEventsEnabled: boolean;\n isContentScrolled: boolean;\n\n private destroy$: Subject<void> = new Subject<void>();\n @HostBinding('class.drawer')\n get _isDrawer() {\n return this.config.flavor === 'drawer';\n }\n\n willClose$ = this.ionModalWillDismiss.pipe(first());\n\n private modalElementsMoverDelegate: ModalElementsMoverDelegate;\n\n constructor(\n private changeDetector: ChangeDetectorRef,\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private resizeObserverService: ResizeObserverService,\n private windowRef: WindowRef,\n private platform: PlatformService,\n private canDismissHelper: CanDismissHelper,\n private environmentInjector: EnvironmentInjector,\n public translations: TranslationService\n ) {\n this.setViewportHeight();\n this.observeViewportResize();\n this.modalElementsMoverDelegate = new ModalElementsMoverDelegate(renderer, elementRef);\n }\n\n ngOnInit(): void {\n this.ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n this.ionModalDialog = getIonModalDialogAncestor(this.elementRef.nativeElement);\n this.initializeSizing();\n this.initializeModalRoute();\n this.listenForIonModalDidPresent();\n this.listenForIonModalWillDismiss();\n this.listenForScroll();\n this.initializeResizeModalToModalWrapper();\n this.focusTitleOnDidPresent();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n\n this.modalWrapperInjector = Injector.create({\n providers: [{ provide: ModalElementsAdvertiser, useExisting: ModalWrapperComponent }],\n parent: this.injector,\n });\n }\n\n ngAfterViewInit(): void {\n if (this.toolbarButtonsQuery) {\n this.toolbarButtons = this.toolbarButtonsQuery.map((buttonRef) => buttonRef.nativeElement);\n }\n\n this.setAriaLabel();\n }\n\n private _currentFooter: HTMLElement | null = null;\n\n private set currentFooter(footer: HTMLElement | null) {\n if (this._currentFooter) {\n this.resizeObserverService.unobserve(this._currentFooter);\n }\n this._currentFooter = footer;\n if (footer !== null) {\n this.resizeObserverService.observe(footer, (entry) => {\n const [property, pixelValue] = [\n '--footer-height',\n `${Math.floor(entry.contentRect.height)}px`,\n ];\n this.setCssVar(this.elementRef.nativeElement, property, pixelValue);\n });\n }\n\n this._currentFooter = footer;\n }\n\n private get currentFooter(): HTMLElement | null {\n return this._currentFooter;\n }\n\n public addModalElement(type: ModalElementType, modalElement: ElementRef<HTMLElement>) {\n const addModalElementFn = {\n [ModalElementType.FOOTER]: () => {\n this.modalElementsMoverDelegate.addFooter(modalElement);\n this.currentFooter = modalElement.nativeElement;\n },\n [ModalElementType.TITLE]: () =>\n this.modalElementsMoverDelegate.addTitle(\n modalElement,\n this.contentTitleElement,\n this._hasCollapsibleTitle,\n this.ionTitleElement\n ),\n [ModalElementType.PAGE_PROGRESS]: () =>\n this.modalElementsMoverDelegate.addPageProgress(modalElement, this.ionToolbarElement),\n }[type];\n\n addModalElementFn();\n }\n\n public removeModalElement(type: ModalElementType, modalElement: ElementRef<HTMLElement>) {\n const removeModalElementFn = {\n [ModalElementType.FOOTER]: () => {\n this.modalElementsMoverDelegate.removeFooter(modalElement);\n this.currentFooter = null;\n },\n [ModalElementType.TITLE]: () =>\n this.modalElementsMoverDelegate.removeTitle(\n modalElement,\n this._hasCollapsibleTitle,\n this.contentTitleElement\n ),\n [ModalElementType.PAGE_PROGRESS]: () =>\n this.modalElementsMoverDelegate.removePageProgress(modalElement),\n }[type];\n\n removeModalElementFn();\n }\n\n private initializeResizeModalToModalWrapper() {\n if (this.config.flavor === 'drawer' && this.config.interactWithBackground) {\n merge(this.ionModalDidPresent, this.viewportResize$)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n // wait for template to render\n setTimeout(() => {\n const domRect = this.elementRef.nativeElement.getBoundingClientRect();\n const document = this.windowRef.nativeWindow.document.documentElement;\n const right = document.clientWidth - domRect.right;\n this.renderer.setStyle(this.ionModalElement, 'top', `${domRect.top}px`);\n this.renderer.setStyle(this.ionModalElement, 'left', `${domRect.left}px`);\n this.renderer.setStyle(this.ionModalElement, 'right', `${right}px`);\n });\n });\n }\n }\n\n private initializeSizing() {\n if (this.config.size === 'full-height') return;\n this.patchScrollElementSize();\n this.observeHeaderResize();\n this.observeModalFullHeight();\n }\n\n private initializeModalRoute() {\n if (this.config.modalRoute) {\n this.onSiblingModalRouteActivated(this.config.siblingModalRouteActivated$);\n // Load component from modal-route inside router-outlet:\n this.routerOutlet.activateWith(this.config.modalRoute, this.environmentInjector);\n }\n }\n\n private onSiblingModalRouteActivated(siblingModalRouteActivated$?: Observable<ActivatedRoute>) {\n if (!siblingModalRouteActivated$) return;\n siblingModalRouteActivated$.pipe(takeUntil(this.willClose$)).subscribe((route) => {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n this.routerOutlet.activateWith(route, this.environmentInjector);\n this.focusTitle();\n });\n }\n\n private patchScrollElementSize(): void {\n const supportsCssShadowParts = 'part' in HTMLElement.prototype;\n if (supportsCssShadowParts) return;\n this.ionContent.getScrollElement().then((scrollElement) => {\n this.renderer.setStyle(scrollElement, 'height', '100%');\n this.renderer.setStyle(scrollElement, 'position', 'relative');\n if (this.config.flavor === 'drawer') {\n this.renderer.setStyle(\n scrollElement,\n 'transition',\n 'padding-bottom ' + DesignTokenHelper.softKeyboardTransitionLeave\n );\n }\n });\n }\n\n private observeModalFullHeight() {\n const ionModalWrapper = this.getIonModalWrapperElement();\n\n if (!ionModalWrapper) return;\n // Start observing when modal has finished animating:\n this.didPresent.then(() => {\n this.intersectionObserver.observe(ionModalWrapper);\n });\n }\n\n // Extracted into function for ease of testing\n private getIonModalWrapperElement(): HTMLElement {\n return this.ionModalElement.shadowRoot.querySelector('.modal-wrapper');\n }\n\n private observeHeaderResize() {\n this.resizeObserverService.observe(this.ionHeaderElement.nativeElement, (entry) => {\n const [property, pixelValue] = ['--header-height', `${entry.contentRect.height}px`];\n this.setCssVar(this.elementRef.nativeElement, property, pixelValue);\n });\n }\n\n private listenForIonModalDidPresent() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalDidPresent', () => {\n this.ionModalDidPresent.next();\n this.ionModalDidPresent.complete();\n });\n }\n }\n\n private listenForIonModalWillDismiss() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalWillDismiss', () => {\n this.ionModalWillDismiss.next();\n this.ionModalWillDismiss.complete();\n });\n }\n }\n\n private listenForScroll() {\n const query = `(min-width: ${DesignTokenHelper.breakpoints.medium})`;\n const mediaQuery = this.windowRef.nativeWindow.matchMedia(query);\n const enableScrollEvents = (listOrEvent: MediaQueryList | MediaQueryListEvent) => {\n const isDesktop = listOrEvent.matches;\n this.scrollEventsEnabled = !isDesktop;\n };\n\n enableScrollEvents(mediaQuery);\n mediaQuery.onchange = enableScrollEvents;\n\n // Runs scroll subscription outside zone to avoid excessive amount of CD cycles\n // when ionScroll emits.\n this.zone.runOutsideAngular(() => {\n // Always subscribe as ionScroll only emits when scrollEventsEnabled is true\n this.ionContent.ionScroll\n .pipe(\n debounceTime(contentScrollDebounceTimeInMS),\n map((event) => event.detail),\n takeUntil(this.destroy$)\n )\n .subscribe((scrollInfo: ScrollDetail) => {\n const contentScrolledPastOffset = scrollInfo.scrollTop > contentScrolledOffsetInPixels;\n\n if (contentScrolledPastOffset !== this.isContentScrolled) {\n this.isContentScrolled = contentScrolledPastOffset;\n this.changeDetector.detectChanges();\n }\n });\n });\n }\n\n private observeTitleContentChanges() {\n this.mutationObserverUnobserveFn = observeContent(\n this.ionTitleElement.nativeElement,\n this.setAriaLabelFromTitleContent\n );\n }\n\n private setAriaLabelFromTitleContent = () => {\n const titleTextContent = this.ionTitleElement?.nativeElement.textContent;\n if (this.ionModalDialog && titleTextContent) {\n this.renderer.setAttribute(this.ionModalDialog, 'aria-label', titleTextContent);\n }\n };\n\n private setAriaLabel() {\n const ariaLabel = this.config.htmlAttributes?.['aria-label'];\n const ionModalElementDialog = getIonModalDialogAncestor(this.ionModalElement);\n\n if (ionModalElementDialog && ariaLabel) {\n this.renderer.setAttribute(ionModalElementDialog, 'aria-label', ariaLabel);\n } else {\n this.setAriaLabelFromTitleContent();\n this.observeTitleContentChanges();\n }\n }\n\n private focusTitleOnDidPresent() {\n this.ionModalDidPresent.pipe(takeUntil(this.willClose$)).subscribe(() => {\n this.focusTitle();\n });\n }\n\n focusTitle() {\n // Use queueMicrotask to defer our focus until after Ionic has saved a reference\n // to the element that should have focus restored when modal is closed.\n // https://github.com/ionic-team/ionic-framework/blob/v8.6.1/core/src/utils/overlays.ts#L592\n queueMicrotask(() => {\n const focusAlreadyInModalContent = this.ionContentElement?.nativeElement.contains(\n document.activeElement\n );\n if (focusAlreadyInModalContent) return;\n\n this.ionTitleElement?.nativeElement.focus();\n });\n }\n\n scrollToTop(scrollDuration?: KirbyAnimation.Duration) {\n this.ionContent.scrollToTop(scrollDuration || 0);\n }\n\n scrollToBottom(scrollDuration?: KirbyAnimation.Duration) {\n this.ionContent.scrollToBottom(scrollDuration || 0);\n }\n\n async close(data?: any): Promise<void> {\n if (!this.ionModalElement) {\n return;\n }\n if (!this.keyboardVisible || !this.viewportResized) {\n // No keyboard visible or viewport not resized:\n // Dismiss modal and return:\n clearTimeout(this.delayedCloseTimeoutId);\n await this.ionModalElement.dismiss(data);\n return;\n }\n\n // Keyboard visible:\n // Blur active element and wait for keyboard to hide,\n // then dismiss modal and return:\n this.blurActiveElement();\n return new Promise<void>((resolve) => {\n this.delayedClose = async () => {\n await this.ionModalElement.dismiss(data);\n resolve();\n };\n this.delayedCloseTimeoutId = setTimeout(\n this.delayedClose,\n ModalWrapperComponent.KEYBOARD_HIDE_DELAY_IN_MS\n );\n });\n }\n\n @HostListener('window:focus')\n @HostListener('window:focusout')\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing backwards (with shift+tab):\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n\n @HostListener('window:ionKeyboardDidShow', ['$event.detail.keyboardHeight'])\n @HostListener('window:keyboardWillShow', ['$event.keyboardHeight'])\n _onKeyboardShow(keyboardHeight: number) {\n this.setKeyboardVisibility(keyboardHeight);\n }\n\n @HostListener('window:ionKeyboardDidHide')\n @HostListener('window:keyboardWillHide')\n _onKeyboardHide() {\n this.setKeyboardVisibility(0);\n }\n\n private toggleContentMaxHeight(freeze: boolean) {\n const shouldToggleMaxHeight =\n this.config.flavor === 'modal' && this.platform.isPhabletOrBigger();\n if (!shouldToggleMaxHeight) return;\n const style = 'max-height';\n const contentElement = this.ionContentElement.nativeElement;\n this.zone.run(() => {\n if (freeze) {\n const contentHeight = contentElement.offsetHeight;\n this.renderer.setStyle(contentElement, style, `${contentHeight}px`);\n } else {\n this.renderer.removeStyle(contentElement, style);\n }\n });\n }\n\n private setKeyboardVisibility(keyboardHeight: number) {\n const keyboardAlreadyVisible = keyboardHeight > 0 && this.keyboardVisible;\n const keyboardAlreadyHidden = keyboardHeight === 0 && !this.keyboardVisible;\n if (keyboardAlreadyVisible || keyboardAlreadyHidden) return;\n this.keyboardVisible = keyboardHeight > 0;\n this.toggleContentMaxHeight(this.keyboardVisible);\n this.setKeyboardOverlap(keyboardHeight);\n }\n\n private getKeyboardOverlap(keyboardHeight: number, element: Element) {\n if (keyboardHeight <= 0 || !element) return 0;\n const distanceFromViewportBottomToElement = Math.floor(\n this.windowRef.nativeWindow.innerHeight - element.getBoundingClientRect().bottom\n );\n return Math.max(keyboardHeight - distanceFromViewportBottomToElement, 0);\n }\n\n private setCssVar(element: Element, property: string, value: string) {\n this.zone.run(() =>\n this.renderer.setStyle(element, property, value, RendererStyleFlags2.DashCase)\n );\n }\n\n private toggleCssClass(element: Element, klass: string, condition: boolean) {\n this.zone.run(() =>\n condition ? this.renderer.addClass(element, klass) : this.renderer.removeClass(element, klass)\n );\n }\n\n private setKeyboardOverlap(keyboardHeight: number) {\n this.toggleCssClass(this.elementRef.nativeElement, 'keyboard-visible', keyboardHeight > 0);\n const keyboardOverlap = this.getKeyboardOverlap(keyboardHeight, this.elementRef.nativeElement);\n let snapFooterToKeyboard = false;\n const embeddedFooterElement = this.currentFooter;\n if (embeddedFooterElement) {\n this.setCssVar(embeddedFooterElement, '--keyboard-offset', `${keyboardOverlap}px`);\n snapFooterToKeyboard = embeddedFooterElement.classList.contains('snap-to-keyboard');\n }\n\n const contentElement = this.ionContentElement.nativeElement;\n const contentKeyboardOffset = snapFooterToKeyboard\n ? keyboardOverlap\n : this.getKeyboardOverlap(keyboardHeight, contentElement);\n this.setCssVar(contentElement, '--keyboard-offset', `${contentKeyboardOffset}px`);\n }\n\n onHeaderTouchStart(event: TouchEvent) {\n if (this.keyboardVisible) {\n const isToolbarButtonTouch = this.toolbarButtons.some((button) => {\n return (\n event.target instanceof HTMLElement &&\n (event.target === button || button.contains(event.target))\n );\n });\n // Prevent blur if event target is a toolbar button\n // (to allow tap event to fire):\n if (!isToolbarButtonTouch) {\n this.blurActiveElement();\n }\n }\n }\n\n @HostListener('window:resize')\n _onWindowResize() {\n this.setViewportHeight();\n }\n\n private setViewportHeight() {\n const vh = (this.windowRef.nativeWindow.innerHeight * 0.01).toFixed(2);\n this.setCssVar(this.elementRef.nativeElement, '--vh', `${vh}px`);\n }\n\n private observeViewportResize() {\n this.resizeObserverService.observe(this.windowRef.nativeWindow.document.body, (entry) =>\n this.onViewportResize(entry)\n );\n }\n\n private onViewportResize(entry: ResizeObserverEntry) {\n if (!this.initialViewportHeight) {\n // Initial observe callback, register initial height:\n this.initialViewportHeight = entry.contentRect.height;\n return;\n }\n this.viewportResized = entry.contentRect.height !== this.initialViewportHeight;\n if (!this.viewportResized) {\n // We are back to initial view port height, check for pending close func:\n if (this.delayedCloseTimeoutId) {\n clearTimeout(this.delayedCloseTimeoutId);\n this.delayedClose();\n }\n }\n this.viewportResize.next();\n }\n\n blurActiveElement() {\n const BLUR_TARGET_SELECTOR = 'input, textarea';\n if (this.keyboardVisible) {\n if (\n document.activeElement instanceof HTMLElement &&\n document.activeElement.matches(BLUR_TARGET_SELECTOR)\n ) {\n document.activeElement.blur();\n }\n }\n }\n private createModalWrapperIntersectionObserver(): IntersectionObserver {\n const callback: IntersectionObserverCallback = (entries) => {\n const entry = entries[0];\n const isTouchingViewport = entry.intersectionRatio < 1;\n if (isTouchingViewport) {\n this.ionModalElement.classList.add('full-height');\n } else {\n this.ionModalElement.classList.remove('full-height');\n }\n };\n\n // Set explicit viewport root if within iframe:\n const root = this.windowRef.nativeWindow.frameElement\n ? (this.windowRef.nativeWindow.document as any) // Cast to `any` as Typescript lib.d.ts doesnt support Document type yet\n : undefined;\n const options: IntersectionObserverInit = {\n rootMargin: '0px 0px -1px 0px', // `bottom: -1px` allows checking when the modal bottom is touching the viewport\n root,\n threshold: [0.99, 1],\n };\n\n return new IntersectionObserver(callback, options);\n }\n\n ngOnDestroy() {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n //clean up the observer\n this.mutationObserverUnobserveFn?.();\n this.intersectionObserver.disconnect();\n delete this._intersectionObserver;\n if (this.resizeObserverService) {\n this.resizeObserverService.unobserve(this.windowRef.nativeWindow.document.body);\n this.resizeObserverService.unobserve(this.ionHeaderElement.nativeElement);\n this.resizeObserverService.unobserve(this.currentFooter);\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","<ion-header\n role=\"presentation\"\n [class.content-scrolled]=\"isContentScrolled\"\n (touchstart)=\"onHeaderTouchStart($event)\"\n>\n <ion-toolbar>\n <ion-title role=\"heading\" aria-level=\"2\" tabindex=\"-1\"></ion-title>\n @if (config.flavor === 'drawer' && config.drawerSupplementaryAction) {\n <ion-buttons slot=\"secondary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n (click)=\"config.drawerSupplementaryAction.action($event)\"\n >\n <kirby-icon [name]=\"config.drawerSupplementaryAction.iconName\"></kirby-icon>\n </button>\n </ion-buttons>\n }\n <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\n [attr.aria-label]=\"translations.get('close')\"\n (click)=\"close()\"\n >\n <kirby-icon name=\"close\"></kirby-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content [scrollEvents]=\"scrollEventsEnabled\">\n @if (_hasCollapsibleTitle) {\n <ion-header collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\n }\n\n <!-- Outlet for ModalController -->\n <ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n ></ng-container>\n\n <!-- Outlet for projected content -->\n <ng-container *ngTemplateOutlet=\"content; injector: modalWrapperInjector\"></ng-container>\n\n <!-- Outlet for route-based modal -->\n <router-outlet\n name=\"kirbyModalWrapperOutlet\"\n [style.visibility]=\"config.modalRoute ? 'visible' : 'hidden'\"\n ></router-outlet>\n</ion-content>\n","export class DrawerSupplementaryAction {\n iconName: string;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n action: Function;\n}\n","import {\n Component,\n ElementRef,\n HostListener,\n Injector,\n Input,\n OnInit,\n Renderer2,\n TemplateRef,\n} from '@angular/core';\nimport { firstValueFrom, Subject } from 'rxjs';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\n\nimport { CommonModule } from '@angular/common';\nimport { getIonModalDialogAncestor } from '@kirbydesign/designsystem/helpers';\nimport { ModalConfig, ShowAlertCallback } from '../config/modal-config';\nimport { COMPONENT_PROPS } from '../config/modal-config.helper';\nimport { Modal } from '../../modal.interfaces';\nimport { CanDismissHelper } from '../../modal/services/can-dismiss.helper';\n\n@Component({\n selector: 'kirby-modal-compact-wrapper',\n templateUrl: './modal-compact-wrapper.component.html',\n styleUrls: ['./modal-compact-wrapper.component.scss'],\n providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }],\n imports: [CommonModule],\n host: { '[class.ion-page]': 'false' },\n})\nexport class ModalCompactWrapperComponent implements Modal, OnInit {\n @Input() config: ModalConfig;\n @Input() content: TemplateRef<any>;\n\n scrollY: number = Math.abs(this.windowRef.nativeWindow.scrollY);\n scrollDisabled = false;\n componentPropsInjector: Injector;\n\n private ionModalElement: HTMLIonModalElement;\n private readonly ionModalDidPresent = new Subject<void>();\n private readonly ionModalWillDismiss = new Subject<void>();\n readonly didPresent = firstValueFrom(this.ionModalDidPresent);\n readonly willClose = firstValueFrom(this.ionModalWillDismiss);\n\n constructor(\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private windowRef: WindowRef,\n private canDismissHelper: CanDismissHelper,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n this.setAriaLabel();\n\n this.listenForIonModalDidPresent();\n this.listenForIonModalWillDismiss();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n }\n\n private listenForIonModalDidPresent() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalDidPresent', () => {\n this.ionModalDidPresent.next();\n this.ionModalDidPresent.complete();\n });\n }\n }\n\n private listenForIonModalWillDismiss() {\n if (this.ionModalElement) {\n this.ionModalElement.addEventListener('ionModalWillDismiss', () => {\n this.ionModalWillDismiss.next();\n this.ionModalWillDismiss.complete();\n });\n }\n }\n\n private setAriaLabel() {\n const ionModalElementDialog = getIonModalDialogAncestor(this.ionModalElement);\n const ariaLabel = this.config.htmlAttributes?.['aria-label'];\n if (ionModalElementDialog && ariaLabel) {\n this.renderer.setAttribute(ionModalElementDialog, 'aria-label', ariaLabel);\n }\n }\n\n async close(data?: any): Promise<void> {\n if (this.ionModalElement) {\n await this.ionModalElement.dismiss(data);\n }\n }\n\n set canDismiss(callback: ShowAlertCallback) {\n this.ionModalElement.canDismiss = this.canDismissHelper.getCanDismissCallback(callback);\n }\n\n scrollToTop: (_?: any) => void;\n scrollToBottom: (_?: any) => void;\n\n @HostListener('window:focus')\n @HostListener('window:focusout')\n onFocusChange() {\n // This fixes an undesired scroll behaviour occurring on keyboard-tabbing backwards (with shift+tab):\n this.windowRef.nativeWindow.scrollTo({ top: this.scrollY });\n }\n}\n","<!-- Outlet for ModalController -->\n<ng-container\n *ngComponentOutlet=\"config.component; injector: componentPropsInjector\"\n></ng-container>\n\n<!-- Outlet for projected content -->\n<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n","import { Injectable } from '@angular/core';\nimport { Animation, AnimationBuilder, createAnimation } from '@ionic/angular/standalone';\nimport { PlatformService } from '@kirbydesign/designsystem/helpers';\n\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalAnimationBuilderService {\n constructor(private platform: PlatformService) {}\n\n private readonly easingEnter = KirbyAnimation.Easing.modal.enter;\n private readonly easingLeave = KirbyAnimation.Easing.modal.exit;\n private readonly duration = KirbyAnimation.Duration.LONG;\n private readonly SwipeToCloseDefaults = {\n MIN_PRESENTING_SCALE: 0.93,\n };\n\n public enterAnimation(currentBackdrop?: HTMLIonBackdropElement): AnimationBuilder {\n return (baseEl: HTMLElement, opts: { presentingEl?: HTMLElement }): Animation => {\n const { presentingEl } = opts;\n const root = this.getElementRoot(baseEl);\n const { wrapperAnimation, backdropAnimation } = this.createEnterAnimation();\n\n backdropAnimation.addElement(root.querySelector('ion-backdrop')!);\n\n wrapperAnimation\n .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 });\n\n const baseAnimation = createAnimation('entering-base')\n .addElement(baseEl)\n .easing(this.easingEnter)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = createAnimation()\n .addElement(currentBackdrop)\n .fromTo('opacity', 'var(--backdrop-opacity)', 0.01);\n }\n\n if (presentingEl) {\n const isMobile = !this.platform.isPhabletOrBigger();\n const hasCardModal =\n presentingEl.tagName === 'ION-MODAL' &&\n (presentingEl as HTMLIonModalElement).presentingElement !== undefined;\n const presentingElRoot = this.getElementRoot(presentingEl);\n\n const presentingAnimation = createAnimation().beforeStyles({\n transform: 'translateY(0)',\n 'transform-origin': 'top center',\n overflow: 'hidden',\n });\n\n const bodyEl = document.body;\n\n if (isMobile) {\n /**\n * Fallback for browsers that does not support `max()` (ex: Firefox)\n * No need to worry about statusbar padding since engines like Gecko\n * are not used as the engine for standalone Cordova/Capacitor apps\n */\n const transformOffset = !CSS.supports('width', 'max(0px, 1px)')\n ? '30px'\n : 'max(30px, var(--ion-safe-area-top))';\n const modalTransform = hasCardModal ? '-10px' : transformOffset;\n const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;\n const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;\n\n presentingAnimation\n .afterStyles({\n transform: finalTransform,\n })\n .beforeAddWrite(() => bodyEl.style.setProperty('background-color', 'black'))\n .addElement(presentingEl)\n .keyframes([\n {\n offset: 0,\n filter: 'contrast(1)',\n transform: 'translateY(0px) scale(1)',\n borderRadius: '0px',\n },\n {\n offset: 1,\n filter: 'contrast(0.85)',\n transform: finalTransform,\n borderRadius: '10px 10px 0 0',\n },\n ]);\n\n baseAnimation.addAnimation(presentingAnimation);\n } else {\n baseAnimation.addAnimation(backdropAnimation);\n\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n\n if (!hasCardModal) {\n wrapperAnimation.fromTo('opacity', '0', '1');\n } else {\n const toPresentingScale = hasCardModal\n ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE\n : 1;\n const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;\n\n presentingAnimation\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingElRoot.querySelector('.modal-wrapper')!)\n .keyframes([\n { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },\n { offset: 1, filter: 'contrast(0.85)', transform: finalTransform },\n ]);\n\n const shadowAnimation = createAnimation()\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingElRoot.querySelector('.modal-shadow')!)\n .keyframes([\n { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },\n { offset: 1, opacity: '0', transform: finalTransform },\n ]);\n\n baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);\n }\n }\n } else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n }\n\n return baseAnimation;\n };\n }\n\n public leaveAnimation(currentBackdrop?: HTMLIonBackdropElement): AnimationBuilder {\n return (\n baseEl: HTMLElement,\n opts: { presentingEl?: HTMLElement },\n duration = this.duration\n ): Animation => {\n const { presentingEl } = opts;\n const root = this.getElementRoot(baseEl);\n const { wrapperAnimation, backdropAnimation } = this.createLeaveAnimation();\n\n backdropAnimation.addElement(root.querySelector('ion-backdrop')!);\n\n wrapperAnimation\n .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 });\n\n const baseAnimation = createAnimation('leaving-base')\n .addElement(baseEl)\n .easing(this.easingLeave)\n .duration(duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = createAnimation()\n .addElement(currentBackdrop)\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .afterStyles({ opacity: 'var(--backdrop-opacity)' }); //Ensures backdrop is reset to default opacity after swipe to close\n }\n\n if (presentingEl) {\n const isMobile = !this.platform.isPhabletOrBigger();\n const hasCardModal =\n presentingEl.tagName === 'ION-MODAL' &&\n (presentingEl as HTMLIonModalElement).presentingElement !== undefined;\n const presentingElRoot = this.getElementRoot(presentingEl);\n\n const presentingAnimation = createAnimation()\n .beforeClearStyles(['transform'])\n .afterClearStyles(['transform'])\n .onFinish((currentStep) => {\n // only reset background color if this is the last card-style modal\n if (currentStep !== 1) {\n return;\n }\n\n presentingEl.style.setProperty('overflow', '');\n\n const numModals = Array.from(bodyEl.querySelectorAll('ion-modal')).filter(\n (m) => m.presentingElement !== undefined\n ).length;\n if (numModals <= 1) {\n bodyEl.style.setProperty('background-color', '');\n }\n });\n\n const bodyEl = document.body;\n\n if (isMobile) {\n const transformOffset = !CSS.supports('width', 'max(0px, 1px)')\n ? '30px'\n : 'max(30px, var(--ion-safe-area-top))';\n const modalTransform = hasCardModal ? '-10px' : transformOffset;\n const toPresentingScale = this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE;\n const finalTransform = `translateY(${modalTransform}) scale(${toPresentingScale})`;\n\n presentingAnimation.addElement(presentingEl).keyframes([\n {\n offset: 0,\n filter: 'contrast(0.85)',\n transform: finalTransform,\n borderRadius: '10px 10px 0 0',\n },\n {\n offset: 1,\n filter: 'contrast(1)',\n transform: 'translateY(0px) scale(1)',\n borderRadius: '0px',\n },\n ]);\n\n baseAnimation.addAnimation(presentingAnimation);\n } else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n\n if (!hasCardModal) {\n wrapperAnimation.fromTo('opacity', '1', '0');\n } else {\n const toPresentingScale = hasCardModal\n ? this.SwipeToCloseDefaults.MIN_PRESENTING_SCALE\n : 1;\n const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;\n\n presentingAnimation\n .addElement(presentingElRoot.querySelector('.modal-wrapper')!)\n .afterStyles({\n transform: 'translate3d(0, 0, 0)',\n })\n .keyframes([\n { offset: 0, filter: 'contrast(0.85)', transform: finalTransform },\n { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },\n ]);\n\n const shadowAnimation = createAnimation()\n .addElement(presentingElRoot.querySelector('.modal-shadow')!)\n .afterStyles({\n transform: 'translateY(0) scale(1)',\n })\n .keyframes([\n { offset: 0, opacity: '0', transform: finalTransform },\n { offset: 1, opacity: '1', transform: 'translateY(0) scale(1)' },\n ]);\n\n baseAnimation.addAnimation([presentingAnimation, shadowAnimation]);\n }\n }\n } else {\n baseAnimation.addAnimation(backdropAnimation);\n if (currentBackdropAnimation) {\n baseAnimation.addAnimation(currentBackdropAnimation);\n }\n }\n\n return baseAnimation;\n };\n }\n\n private createEnterAnimation = () => {\n const backdropAnimation = createAnimation()\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .beforeStyles({\n 'pointer-events': 'none',\n })\n .afterClearStyles(['pointer-events']);\n\n const wrapperAnimation = createAnimation().fromTo(\n 'transform',\n 'translateY(100vh)',\n 'translateY(0vh)'\n );\n\n return { backdropAnimation, wrapperAnimation };\n };\n\n private createLeaveAnimation = () => {\n const backdropAnimation = createAnimation().fromTo('opacity', 'var(--backdrop-opacity)', 0);\n\n const wrapperAnimation = createAnimation().fromTo(\n 'transform',\n 'translateY(0vh)',\n 'translateY(100vh)'\n );\n\n return { backdropAnimation, wrapperAnimation };\n };\n\n /**\n * Gets the root context of a shadow dom element\n * On newer browsers this will be the shadowRoot,\n * but for older browser this may just be the\n * element itself.\n *\n * Useful for whenever you need to explicitly\n * do \"myElement.shadowRoot!.querySelector(...)\".\n */\n private getElementRoot = (el: HTMLElement, fallback: HTMLElement = el) => {\n return el.shadowRoot || fallback;\n };\n}\n","import { Injectable } from '@angular/core';\nimport {\n ActivatedRoute,\n NavigationEnd,\n NavigationStart,\n Params,\n Route,\n Router,\n Routes,\n} from '@angular/router';\nimport { EMPTY, firstValueFrom, Observable } from 'rxjs';\nimport { filter, map, pairwise, skipUntil, startWith, takeUntil } from 'rxjs/operators';\n\nimport { ModalRouteActivation } from './modal.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(\n private router: Router,\n private route: ActivatedRoute\n ) {}\n\n isModalRoute(url: string): boolean {\n return url.includes('(modal:');\n }\n\n private getCurrentActivatedRoute(): ActivatedRoute {\n let childRoute = this.route.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n return childRoute;\n }\n\n private async getModalRoutes(\n routeConfig: Routes[],\n moduleRootRoutePath?: string\n ): Promise<string[]> {\n const flattenedRoutes: Routes = [].concat(...routeConfig);\n let modalRoutes: string[] = [];\n const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);\n if (moduleRootPaths) {\n modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);\n }\n return modalRoutes;\n }\n\n private async getModuleRootPath(routes: Routes, moduleRootRoutePath?: string): Promise<string[]> {\n if (moduleRootRoutePath) {\n const trimmedPaths = moduleRootRoutePath\n .trim()\n .split('/')\n .filter((path) => !!path);\n const rootPath = [''];\n return rootPath.concat(trimmedPaths);\n }\n\n const currentRoutePaths = await this.getCurrentRoutePaths();\n const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);\n return moduleRootPaths;\n }\n\n private async getCurrentRoutePaths(): Promise<string[]> {\n const rootPath = [''];\n const currentNavigation = this.router.getCurrentNavigation();\n\n if (!this.router.navigated && !currentNavigation) {\n // If router hasn't navigated yet and we are not in the middle of navigating, assume root:\n return rootPath;\n }\n\n if (currentNavigation) {\n // Wait for current navigation to finish:\n await firstValueFrom(this.navigationEndListener$);\n }\n\n let childRoute = this.route.snapshot.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n const currentBackdropRoutePath = childRoute.pathFromRoot.filter(\n (route) => route.outlet !== 'modal'\n );\n\n return rootPath.concat(\n ...currentBackdropRoutePath.map((route) =>\n route.url.filter((segment) => !!segment.path).map((segment) => segment.path)\n )\n );\n }\n\n private getRoutePathsWithoutChildSegments(routePaths: string[], routes: Routes): string[] {\n if (!routePaths.length) return routePaths;\n\n const matchedChildRoute = this.findChildRouteForUrl(routePaths.join('/'), routes);\n\n if (!matchedChildRoute) return routePaths;\n\n const startSlashRegex = /^\\//;\n const relativeChildRoute = matchedChildRoute.replace(startSlashRegex, '');\n const childSegmentCount = relativeChildRoute.split('/').length;\n const routePathsWithoutChildSegments = routePaths.slice(0, -childSegmentCount); // Remove child segments from end of route path array\n return routePathsWithoutChildSegments;\n }\n\n private findChildRouteForUrl(url: string, routes: Routes) {\n const moduleRelativePaths = this.getRoutePaths(routes, ['']).sort().reverse(); // Ensure child paths are evaluated first\n let matchedChildRoute = moduleRelativePaths.find((path) => url.endsWith(path));\n if (!matchedChildRoute) {\n // No static child route found matching current route - look for child route with url params:\n const exactMatch = false;\n matchedChildRoute = moduleRelativePaths.find(\n (path) =>\n path.includes('/:') && this.pathContainsChildRouteWithUrlParams(url, path, exactMatch)\n );\n }\n return matchedChildRoute;\n }\n\n private pathContainsChildRouteWithUrlParams(\n path: string,\n childRouteWithUrlParams: string,\n exactMatch: boolean\n ) {\n const pathSegments = path.split('/');\n const startSlashRegex = /^\\//;\n let childRouteToMatch = childRouteWithUrlParams;\n if (!exactMatch) {\n const relativeChildRoute = childRouteWithUrlParams.replace(startSlashRegex, '');\n childRouteToMatch = relativeChildRoute;\n }\n const childRouteSegments = childRouteToMatch.split('/');\n // Match each child route segment against url\n // Match backwards from end to start of child route, i.e. \"url ends with child route\":\n const pathContainsChildRoute = childRouteSegments.reverse().every((childRouteSegment) => {\n const pathSegment = pathSegments.pop();\n // url params (e.g. `/:id/`) are treated as a match:\n return childRouteSegment.startsWith(':') || childRouteSegment === pathSegment;\n });\n if (exactMatch) {\n // Only match if we've reached the start of the url to match against:\n return pathSegments.length === 0 && pathContainsChildRoute;\n }\n return pathContainsChildRoute;\n }\n\n private getRoutePaths(routes: Routes, parentPath: string[]): string[] {\n return Array.isArray(routes)\n ? ([] as string[]).concat(...routes.map((route) => this.getRoutePath(route, parentPath)))\n : [];\n }\n\n private getRoutePath(route: Route, parentPath: string[]): string[] {\n const routes: string[] = [];\n if (route.outlet) return routes; // Don't return relative paths for outlet routes\n\n const currentPath = [...parentPath];\n if (route.path) {\n currentPath.push(route.path);\n routes.push(currentPath.join('/'));\n }\n\n return routes.concat(this.getRoutePaths(route.children, currentPath));\n }\n\n private getModalRoutePath(route: Route, parentPath: string[]): string[] {\n const modalOutletName = 'modal';\n if (!!route.path && route.outlet === modalOutletName) {\n const modalOutletPath = `(${modalOutletName}:${route.path})`;\n const modalRoutePath = [...parentPath, modalOutletPath].join('/');\n return [modalRoutePath];\n }\n const currentPath = [...parentPath];\n if (route.path) {\n currentPath.push(route.path);\n }\n return ([] as string[]).concat(...this.getModalRoutePaths(route.children, currentPath));\n }\n\n private getModalRoutePaths(routes: Routes, parentPath: string[]): string[] {\n return Array.isArray(routes)\n ? ([] as string[]).concat(...routes.map((route) => this.getModalRoutePath(route, parentPath)))\n : [];\n }\n\n private isNewModalWindow(navigationEnd: NavigationEnd): boolean {\n const currentNavigation = this.router.getCurrentNavigation();\n if (!currentNavigation || !currentNavigation.previousNavigation) {\n return true;\n }\n const previousRoutePath = (\n currentNavigation.previousNavigation.finalUrl ||\n currentNavigation.previousNavigation.extractedUrl\n ).toString();\n const wasModalRoute = this.isModalRoute(previousRoutePath);\n const isModalRoute = this.isModalRoute(navigationEnd.urlAfterRedirects);\n if (!wasModalRoute && isModalRoute) {\n return true;\n }\n\n const currentModalRouteParent = navigationEnd.urlAfterRedirects.split('/(modal:')[0];\n const previousModalRouteParent = previousRoutePath.split('/(modal:')[0];\n\n return previousModalRouteParent !== currentModalRouteParent;\n }\n\n private navigationEndListener$ = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd)\n );\n\n private async waitForCurrentThenGetNavigationEndStream(): Promise<Observable<NavigationEnd>> {\n if (this.router.getCurrentNavigation()) {\n const currentNavigationEnd = await firstValueFrom(this.navigationEndListener$);\n return this.navigationEndListener$.pipe(startWith(currentNavigationEnd));\n }\n return this.navigationEndListener$;\n }\n\n private modalRouteActivatedFor(\n navigationEnd$: Observable<NavigationEnd>,\n modalRouteSet: Set<string>,\n modalRoutesContainsUrlParams: boolean\n ): Observable<ModalRouteActivation> {\n return navigationEnd$.pipe(\n filter((navigationEnd) =>\n this.modalRouteSetContainsPath(modalRouteSet, navigationEnd, modalRoutesContainsUrlParams)\n ),\n map((navigationEnd) => {\n return {\n route: this.getCurrentActivatedRoute(),\n isNewModal: this.isNewModalWindow(navigationEnd),\n };\n })\n );\n }\n\n private modalRouteDeactivatedFor(\n navigationEnd$: Observable<NavigationEnd>,\n modalRouteSet: Set<string>,\n modalRoutesContainsUrlParams: boolean\n ): Observable<boolean> {\n return navigationEnd$.pipe(\n pairwise(),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n filter(([prevNavigation, _]) =>\n this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)\n ), // Only emit if previous route was modal\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n map(([_, currentNavigation]) => {\n const isNewModalRoute = this.isModalRoute(currentNavigation.urlAfterRedirects);\n // Deactivate modal route if new route is NOT modal OR is outside current parent route:\n return !isNewModalRoute || this.isNewModalWindow(currentNavigation);\n }),\n filter((isDeactivation) => isDeactivation)\n );\n }\n\n private modalRouteSetContainsPath(\n modalRouteSet: Set<string>,\n navigationEnd: NavigationEnd,\n modalRoutesContainsUrlParams: boolean\n ) {\n const pathname = navigationEnd.urlAfterRedirects.split('?')[0];\n let hasRoute = modalRouteSet.has(pathname);\n if (!hasRoute && modalRoutesContainsUrlParams) {\n // Use `for ... of` instead of `forEach` so we can break out of the loop if route is found:\n for (const route of modalRouteSet) {\n const exactMatch = true;\n const routeMatchesPath = this.pathContainsChildRouteWithUrlParams(\n pathname,\n route,\n exactMatch\n );\n if (routeMatchesPath) {\n hasRoute = true;\n break;\n }\n }\n }\n return hasRoute;\n }\n\n async getModalNavigation(\n routeConfig: Routes[],\n moduleRootRoutePath?: string\n ): Promise<{ activated$: Observable<ModalRouteActivation>; deactivated$: Observable<boolean> }> {\n if (Array.isArray(routeConfig)) {\n const navigationEnd$ = await this.waitForCurrentThenGetNavigationEndStream();\n const modalRoutes = await this.getModalRoutes(routeConfig, moduleRootRoutePath);\n const hasModalRoutes = modalRoutes.length > 0;\n if (hasModalRoutes) {\n const modalRoutesContainsUrlParams = modalRoutes.some((route) => route.includes('/:'));\n const modalRouteSet = new Set(modalRoutes);\n const activated$ = this.modalRouteActivatedFor(\n navigationEnd$,\n modalRouteSet,\n modalRoutesContainsUrlParams\n );\n const deactivated$ = this.modalRouteDeactivatedFor(\n navigationEnd$,\n modalRouteSet,\n modalRoutesContainsUrlParams\n );\n return { activated$, deactivated$ };\n }\n }\n\n return { activated$: EMPTY, deactivated$: EMPTY };\n }\n\n async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n const commands = Array.isArray(path) ? [...path] : path.split('/');\n const childPath = commands.pop();\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n return result;\n }\n\n async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.router.navigate([relativePath], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n }\n\n async navigateOutOfModalOutlet(): Promise<boolean> {\n const currentActivatedRoute = this.getCurrentActivatedRoute();\n const currentNavigationFinalUrl = this.router.getCurrentNavigation()?.finalUrl?.toString();\n const isCurrentlyNavigatingOutOfModalOutlet =\n currentNavigationFinalUrl && !this.isModalRoute(currentNavigationFinalUrl);\n\n if (currentActivatedRoute.outlet !== 'modal' || isCurrentlyNavigatingOutOfModalOutlet) {\n // Nothing to do here, bail out:\n return Promise.resolve(true);\n }\n\n const parentRoute = this.getBackdropRoute(currentActivatedRoute);\n return this.router.navigate(['./'], {\n relativeTo: parentRoute,\n });\n }\n\n private getBackdropRoute(currentActivatedRoute: ActivatedRoute) {\n let parentRoute = currentActivatedRoute.parent;\n while (parentRoute && !parentRoute.component && !!parentRoute.parent) {\n parentRoute = parentRoute.parent;\n }\n return parentRoute;\n }\n\n handleBrowserBackButton(modal: HTMLIonModalElement) {\n const popstateNavigationStart$ = this.router.events.pipe(\n filter(\n (event): event is NavigationStart =>\n event instanceof NavigationStart && event.navigationTrigger === 'popstate'\n )\n );\n const navigationEnd$ = this.router.events.pipe(\n filter((event) => event instanceof NavigationEnd)\n );\n navigationEnd$\n .pipe(skipUntil(popstateNavigationStart$), takeUntil(modal.onWillDismiss()))\n .subscribe(() => {\n modal.dismiss();\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\n\nimport { Overlay } from '../../modal.interfaces';\nimport { ModalNavigationService } from '../../modal-navigation.service';\nimport {\n ModalCompactWrapperComponent,\n ModalConfig,\n ModalSize,\n ModalWrapperComponent,\n} from '../../modal-wrapper';\n\nimport { ModalAnimationBuilderService } from './modal-animation-builder.service';\nimport { CanDismissHelper } from './can-dismiss.helper';\n\n@Injectable()\nexport class ModalHelper {\n constructor(\n private ionicModalController: ModalController,\n private modalAnimationBuilder: ModalAnimationBuilderService,\n private modalNavigationService: ModalNavigationService,\n private windowRef: WindowRef,\n private canDismissHelper: CanDismissHelper\n ) {}\n\n /* \n isModalOpening is used to prevent additional instantiations\n of modals, while a modal is already being instatiated, but not completed.\n This is the recommended approach by one of the maintainers of Ionic:\n https://github.com/ionic-team/ionic-framework/issues/23327#issuecomment-847028058\n */\n private isModalOpening = false;\n\n public async showModalWindow(config: ModalConfig): Promise<Overlay> {\n if (this.isModalOpening) return;\n\n config.flavor = config.flavor || 'modal';\n\n let currentBackdrop: HTMLIonBackdropElement;\n const topMostModal = await this.ionicModalController.getTop();\n if (topMostModal) {\n currentBackdrop =\n topMostModal.shadowRoot.querySelector<HTMLIonBackdropElement>('ion-backdrop');\n }\n\n const enterAnimation = this.modalAnimationBuilder.enterAnimation(currentBackdrop);\n const leaveAnimation = this.modalAnimationBuilder.leaveAnimation(currentBackdrop);\n\n const defaultModalSize: ModalSize = config.interactWithBackground ? null : 'medium';\n const modalSize = config.size || defaultModalSize;\n\n const allow_scroll_class = 'allow-background-scroll';\n\n let customCssClasses = [];\n if (config.cssClass) {\n customCssClasses = Array.isArray(config.cssClass) ? config.cssClass : [config.cssClass];\n }\n\n if (config.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.add(allow_scroll_class);\n }\n\n let canDismiss: boolean | (() => Promise<boolean>) = true;\n\n if (config.canDismiss) {\n canDismiss = this.canDismissHelper.getCanDismissCallback(config.canDismiss);\n }\n\n this.isModalOpening = true;\n\n const ionModal = await this.ionicModalController.create({\n component: config.flavor === 'compact' ? ModalCompactWrapperComponent : ModalWrapperComponent,\n cssClass: [\n 'kirby-overlay',\n 'kirby-modal',\n modalSize ? `kirby-modal-${modalSize}` : null,\n config.flavor === 'drawer' ? 'kirby-drawer' : null,\n config.flavor === 'compact' ? 'kirby-modal-compact' : null,\n config.interactWithBackground ? 'interact-with-background' : null,\n ...customCssClasses,\n ],\n backdropDismiss: config.flavor === 'compact' || config.interactWithBackground ? false : true,\n showBackdrop: !config.interactWithBackground,\n componentProps: { config: config },\n htmlAttributes: { ...config.htmlAttributes },\n keyboardClose: false,\n canDismiss,\n enterAnimation,\n leaveAnimation,\n });\n\n if (config.interactWithBackground) {\n ionModal.onDidDismiss().then(() => {\n this.windowRef.nativeWindow.document.body.classList.remove(allow_scroll_class);\n });\n }\n\n if (config.customHeight) {\n ionModal.style.setProperty('--kirby-modal-height', config.customHeight);\n }\n\n const onWillDismiss = ionModal.onWillDismiss();\n\n const overlay: Overlay = {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss,\n onDidDismiss: ionModal.onDidDismiss(),\n isDismissing: false,\n };\n\n onWillDismiss.then(() => {\n overlay.isDismissing = true;\n });\n\n await ionModal.present();\n\n /**\n * Due to somewhat unexpected behavior of the ion-modal not being focused when keyboardClose\n * is set to false we manually focus it, but only if focus is not already inside the modal\n * See here: https://github.com/ionic-team/ionic-framework/issues/28775#issuecomment-1875475739\n */\n const focusedElementWithinModal = ionModal.contains(document.activeElement);\n if (!focusedElementWithinModal) {\n ionModal.focus();\n }\n\n // Back button should only be handled manually\n // if the modal is not instantiated through a route.\n if (!config.modalRoute) {\n this.modalNavigationService.handleBrowserBackButton(ionModal);\n }\n\n this.isModalOpening = false;\n\n return overlay;\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardComponent, CardHeaderComponent } from '@kirbydesign/designsystem/card';\n\nimport { ActionSheetItem } from './config/action-sheet-item';\n\nconst KIRBY_ACTION_SHEET_DEPRECATION_WARNING =\n '[Kirby action sheet] Deprecated - Use Menu component instead';\n\n@Component({\n imports: [CardComponent, CardHeaderComponent, ButtonComponent],\n selector: 'kirby-action-sheet',\n templateUrl: './action-sheet.component.html',\n styleUrls: ['./action-sheet.component.scss'],\n})\nexport class ActionSheetComponent {\n @Input() cancelButtonText = 'Cancel';\n @Input() hideCancel: boolean = false;\n @Input() disabled: boolean = false;\n @Input() header: string;\n @Input() subheader: string;\n @Input() items: Array<ActionSheetItem>;\n @Output() cancel = new EventEmitter();\n @Output() itemSelect: EventEmitter<ActionSheetItem> = new EventEmitter<ActionSheetItem>();\n\n constructor() {\n console.warn(KIRBY_ACTION_SHEET_DEPRECATION_WARNING);\n }\n\n onItemSelect(selection: ActionSheetItem) {\n this.itemSelect.emit(selection);\n }\n\n onCancel() {\n this.cancel.emit();\n }\n}\n","<kirby-card>\n @if (header) {\n <kirby-card-header\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n }\n @for (item of items; track item.id) {\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n >\n {{ item.text }}\n </button>\n }\n</kirby-card>\n@if (!hideCancel) {\n <button kirby-button class=\"cancel-btn\" size=\"lg\" attentionLevel=\"3\" (click)=\"onCancel()\">\n {{ cancelButtonText }}\n </button>\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\nimport { Subscription } from 'rxjs';\nimport { Overlay } from '../../modal.interfaces';\n\nimport { ActionSheetComponent } from '../action-sheet/action-sheet.component';\nimport { ActionSheetConfig } from '../action-sheet/config/action-sheet-config';\nimport { ActionSheetItem } from '../action-sheet/config/action-sheet-item';\n\n@Injectable()\nexport class ActionSheetHelper {\n constructor(private ionicModalController: ModalController) {}\n\n public async showActionSheet(config: ActionSheetConfig): Promise<Overlay> {\n const cancel = new EventEmitter();\n const itemSelect = new EventEmitter<ActionSheetItem>();\n\n const ionModal = await this.ionicModalController.create({\n component: ActionSheetComponent,\n cssClass: ['kirby-overlay', 'kirby-action-sheet'],\n componentProps: {\n ...config,\n cancel: cancel,\n itemSelect: itemSelect,\n },\n backdropDismiss: true,\n });\n\n // Remove 'modal-shadow' element as we are no longer able to hide it with CSS in Ionic 6.\n // We need to remove it so it does not obstruct the backdrop-click to dismiss functionality.\n ionModal.shadowRoot.querySelector('.modal-shadow').remove();\n\n const cancelSubscription: Subscription = cancel.subscribe(() => ionModal.dismiss());\n const itemSelectSubscription: Subscription = itemSelect.subscribe((item) =>\n ionModal.dismiss(item)\n );\n const onDidDismiss = ionModal.onDidDismiss();\n onDidDismiss.then(() => {\n cancelSubscription.unsubscribe();\n itemSelectSubscription.unsubscribe();\n });\n\n await ionModal.present();\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport { ActivatedRoute, Params, Routes, ROUTES } from '@angular/router';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { ModalRouteActivation, Overlay } from '../../modal.interfaces';\nimport { ActionSheetConfig } from '../action-sheet/config/action-sheet-config';\nimport { AlertConfig } from '../alert/config/alert-config';\n\nimport { ModalNavigationService } from '../../modal-navigation.service';\nimport { ModalConfig } from '../../modal-wrapper';\nimport { ActionSheetHelper } from './action-sheet.helper';\nimport { AlertHelper } from './alert.helper';\nimport { ModalHelper } from './modal.helper';\n\n@Injectable()\nexport class ModalController implements OnDestroy {\n private overlays: Overlay[] = [];\n private readonly noOverlayRegisteredErrorMessage = 'No modal overlays are currently registered';\n private destroy$ = new Subject<void>();\n\n constructor(\n private modalHelper: ModalHelper,\n private actionSheetHelper: ActionSheetHelper,\n private alertHelper: AlertHelper,\n private modalNavigationService: ModalNavigationService,\n @Optional() @Inject(ROUTES) private routeConfig: Routes[]\n ) {}\n\n async initialize(moduleRootRoutePath?: string) {\n const modalNavigation = await this.modalNavigationService.getModalNavigation(\n this.routeConfig,\n moduleRootRoutePath\n );\n this.onModalRouteActivated(modalNavigation.activated$);\n this.onModalRouteDeactivated(modalNavigation.deactivated$);\n }\n\n private onModalRouteActivated(modalRouteActivated$: Observable<ModalRouteActivation>) {\n const navigateOnWillClose = () => {\n this.modalNavigationService.navigateOutOfModalOutlet();\n };\n\n const siblingModalRouteActivated$ = modalRouteActivated$.pipe(\n filter((modalRouteActivation) => !modalRouteActivation.isNewModal),\n map((modalRouteActivation) => modalRouteActivation.route)\n );\n\n modalRouteActivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.length === 0)\n )\n .subscribe(async (modalRouteActivation) => {\n if (modalRouteActivation.isNewModal) {\n await this.showModalRoute(\n modalRouteActivation.route,\n siblingModalRouteActivated$,\n navigateOnWillClose\n );\n }\n });\n }\n\n private onModalRouteDeactivated(modalRouteDeactivated$: Observable<boolean>) {\n modalRouteDeactivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.some((overlay) => overlay.isDismissing !== true))\n )\n .subscribe(async () => {\n await this.hideAll();\n });\n }\n\n public async showModal(config: ModalConfig, onClose?: (data?: any) => void): Promise<void> {\n await this.showAndRegisterOverlay(() => this.modalHelper.showModalWindow(config), onClose);\n }\n\n public async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateToModal(path, queryParams);\n }\n\n public async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateWithinModal(relativePath, queryParams);\n }\n\n private async showModalRoute(\n modalRoute: ActivatedRoute,\n siblingModalRouteActivated$: Observable<ActivatedRoute>,\n onWillClose: (data?: any) => void\n ): Promise<void> {\n const config: ModalConfig = {\n ...modalRoute.snapshot.data.modalConfig,\n component: null,\n modalRoute: modalRoute,\n siblingModalRouteActivated$: siblingModalRouteActivated$,\n };\n await this.showAndRegisterOverlay(\n () => this.modalHelper.showModalWindow(config),\n null,\n onWillClose\n );\n }\n\n public async showActionSheet(\n config: ActionSheetConfig,\n onClose?: (data?: any) => void\n ): Promise<void> {\n await this.showAndRegisterOverlay(\n () => this.actionSheetHelper.showActionSheet(config),\n onClose\n );\n }\n\n public async showAlert(config: AlertConfig, onClose?: (result: boolean) => void): Promise<void> {\n await this.showAndRegisterOverlay(() => this.alertHelper.showAlert(config), onClose);\n }\n\n private async showAndRegisterOverlay(\n showOverlay: () => Promise<Overlay>,\n onCloseOverlay?: (data?: any) => void,\n onWillCloseOverlay?: (data?: any) => void\n ) {\n const overlay = await showOverlay();\n if (!overlay) return;\n\n this.overlays.push(overlay);\n\n if (typeof onWillCloseOverlay === 'function') {\n overlay.onWillDismiss.then((event) => onWillCloseOverlay(event.data));\n }\n\n overlay.onDidDismiss.then((event) => {\n this.overlays.pop();\n if (typeof onCloseOverlay === 'function') {\n onCloseOverlay(event.data);\n }\n });\n }\n\n public async hideTopmost(data?: any): Promise<boolean> {\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n return overlay.dismiss(data);\n }\n\n public async hideAll(): Promise<void> {\n await Promise.all(\n this.overlays\n .filter((overlay) => overlay.isDismissing !== true)\n .map(async (overlay) => {\n await overlay.dismiss();\n })\n );\n }\n\n public getTopMost(): Overlay | null {\n return this.overlays[this.overlays.length - 1];\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivateFn, RouterStateSnapshot } from '@angular/router';\n\nimport { ModalController as IonicModalController } from '@ionic/angular/standalone';\nimport { ModalNavigationService } from '../../modal-navigation.service';\nimport { ModalController } from './modal.controller';\n\nexport const CanDismissModalGuard: CanDeactivateFn<unknown> = async <T>(\n _component: T,\n _currentRoute: ActivatedRouteSnapshot,\n currentState: RouterStateSnapshot,\n nextState: RouterStateSnapshot\n) => {\n const modalNavService = inject(ModalNavigationService);\n const currentRouteIsModal = modalNavService.isModalRoute(currentState.url);\n const nextRouteIsModal = modalNavService.isModalRoute(nextState.url);\n\n const isNavigatingWithinModal = currentRouteIsModal && nextRouteIsModal;\n if (isNavigatingWithinModal) {\n return true;\n }\n\n const modalController = inject(ModalController);\n const topMostModal = modalController.getTopMost();\n if (topMostModal) {\n if (topMostModal.isDismissing) {\n return true;\n }\n return topMostModal.dismiss();\n } else {\n // Declarative modals are not created through Kirby Modalcontroller, let's try Ionic:\n const ionicModalController = inject(IonicModalController);\n const ionModal = await ionicModalController.getTop();\n if (ionModal) {\n return ionModal.dismiss();\n }\n }\n\n return true;\n};\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonContent, IonModal } from '@ionic/angular/standalone';\nimport { OverlayEventDetail } from '@ionic/core/components';\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport { IconComponent } from '@kirbydesign/designsystem/icon';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\n\nimport { inheritAriaLabelText } from '@kirbydesign/designsystem/shared';\nimport { ModalNavigationService } from '../../modal-navigation.service';\nimport {\n DrawerSupplementaryAction,\n ModalCompactWrapperComponent,\n ModalConfig,\n ModalFlavor,\n ModalSize,\n ModalWrapperComponent,\n ShowAlertCallback,\n} from '../../modal-wrapper';\nimport { CanDismissHelper } from '../services';\n\n@Component({\n selector: 'kirby-modal',\n templateUrl: './modal.component.html',\n imports: [\n CommonModule,\n IconComponent,\n IonModal,\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements OnChanges, OnInit {\n @ViewChild(IonModal, { static: true, read: ElementRef })\n modalElement: ElementRef<HTMLIonModalElement>;\n @ViewChild(IonContent) ionContent: IonContent;\n @ContentChild(TemplateRef, { static: true }) template: TemplateRef<unknown>;\n\n @Input() isOpen = false;\n @Input() trigger: string;\n @Input() size: ModalSize = 'medium';\n @Input() scrollDisabled = false;\n @Input() set canDismiss(canDismiss: ShowAlertCallback | boolean) {\n typeof canDismiss === 'boolean'\n ? (this._canDismiss = canDismiss)\n : (this._canDismiss = this.canDismissHelper.getCanDismissCallback(canDismiss));\n }\n\n // NOTE: input properties forwarded to modal-wrapper ModalConfig\n @Input() collapseTitle = false;\n @Input() customHeight: string = undefined;\n @Input() flavor: ModalFlavor = 'modal';\n @Input() drawerSupplementaryAction?: DrawerSupplementaryAction = undefined;\n @Input() interactWithBackground: boolean = false;\n // end NOTE\n\n @Output() willPresent = new EventEmitter<CustomEvent<OverlayEventDetail>>();\n @Output() didPresent = new EventEmitter<CustomEvent<OverlayEventDetail>>();\n @Output() didDismiss = new EventEmitter<CustomEvent<OverlayEventDetail>>();\n @Output() willDismiss = new EventEmitter<CustomEvent<OverlayEventDetail>>();\n\n /**\n * We populate the ModalConfig with defaults here. This ensures that we can\n * guard for `if (key in this._config)` and only update the config when any of these\n * inputs change.\n */\n _config: ModalConfig = {\n collapseTitle: this.collapseTitle,\n customHeight: this.customHeight,\n flavor: this.flavor,\n drawerSupplementaryAction: this.drawerSupplementaryAction,\n interactWithBackground: this.interactWithBackground,\n };\n _canDismiss: ShowAlertCallback | boolean = true;\n\n constructor(\n private canDismissHelper: CanDismissHelper,\n private modalNavigationService: ModalNavigationService,\n private windowRef: WindowRef,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit(): void {\n this.forwardAriaLabel();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateModalConfigOnChange(changes);\n }\n\n public scrollToTop(scrollDuration?: KirbyAnimation.Duration) {\n this.ionContent.scrollToTop(scrollDuration);\n }\n\n public scrollToBottom(scrollDuration?: KirbyAnimation.Duration) {\n this.ionContent.scrollToBottom(scrollDuration);\n }\n\n public _onWillPresent(event: CustomEvent<OverlayEventDetail>) {\n this.willPresent.emit(event);\n\n if (this.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.add('allow-background-scroll');\n }\n }\n\n public _onDidPresent(event: CustomEvent<OverlayEventDetail>) {\n this.modalNavigationService.handleBrowserBackButton(this.modalElement.nativeElement);\n this.didPresent.emit(event);\n }\n\n public _onWillDismiss(event: CustomEvent<OverlayEventDetail>) {\n if (this.interactWithBackground) {\n this.windowRef.nativeWindow.document.body.classList.remove('allow-background-scroll');\n }\n\n this.willDismiss.emit(event);\n }\n\n public _onDidDismiss(event: CustomEvent<OverlayEventDetail>) {\n this.didDismiss.emit(event);\n }\n\n private updateModalConfigOnChange(changes: SimpleChanges) {\n Object.entries(changes).forEach(([key]) => {\n const isModalConfigProperty = key in this._config;\n if (isModalConfigProperty) {\n this._config[key] = changes[key].currentValue;\n }\n });\n }\n\n private forwardAriaLabel() {\n // Instead of setting aria label on ion-modal in the template we forward it to modal-wrapper for consistency\n // and so we do not start listening for title changes in the modal-wrapper.\n this._config.htmlAttributes = {\n 'aria-label': inheritAriaLabelText(this.elementRef.nativeElement),\n };\n }\n}\n","<ion-modal\n class=\"kirby-modal kirby-overlay kirby-modal-{{ size }}\"\n [ngClass]=\"[\n flavor === 'compact' ? 'kirby-modal-compact' : 'kirby-' + flavor,\n interactWithBackground ? 'interact-with-background' : '',\n ]\"\n [isOpen]=\"isOpen\"\n [trigger]=\"trigger\"\n [canDismiss]=\"_canDismiss\"\n [showBackdrop]=\"!interactWithBackground\"\n [style.--kirby-modal-height]=\"customHeight\"\n (willPresent)=\"_onWillPresent($event)\"\n (didPresent)=\"_onDidPresent($event)\"\n (willDismiss)=\"_onWillDismiss($event)\"\n (didDismiss)=\"_onDidDismiss($event)\"\n>\n <ng-template>\n @if (flavor === 'compact') {\n <kirby-modal-compact-wrapper\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n } @else {\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n }\n </ng-template>\n</ion-modal>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n Optional,\n} from '@angular/core';\nimport { IonFooter } from '@ionic/angular/standalone';\nimport {\n ModalElementComponent,\n ModalElementsAdvertiser,\n ModalElementType,\n} from '../../modal.interfaces';\n\n@Component({\n imports: [IonFooter],\n selector: 'kirby-modal-footer',\n templateUrl: './modal-footer.component.html',\n styleUrls: ['./modal-footer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalFooterComponent extends ModalElementComponent {\n @HostBinding('class.snap-to-keyboard')\n @Input()\n snapToKeyboard = false;\n\n @Input()\n type: 'inline' | 'fixed' = 'fixed';\n\n @Input()\n themeColor: 'white' | 'light' = 'white';\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.type].filter((cssClass) => !!cssClass);\n }\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n @Optional() modalElementsAdvertiser: ModalElementsAdvertiser\n ) {\n super(ModalElementType.FOOTER, elementRef, modalElementsAdvertiser);\n }\n}\n","<ion-footer role=\"presentation\">\n <ng-content></ng-content>\n</ion-footer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i1.AlertHelper","i4.CanDismissHelper","i5","i2.CanDismissHelper","i3","i2.ModalAnimationBuilderService","i3.ModalNavigationService","i4","i5.CanDismissHelper","IonicModalController","i1.CanDismissHelper","i2.ModalNavigationService","i1.ModalElementsAdvertiser"],"mappings":"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"}
|