@kirbydesign/designsystem 10.1.3 → 10.2.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/avatar/avatar.component.d.ts +2 -1
- package/button/button.component.d.ts +1 -0
- package/calendar/calendar.component.d.ts +28 -18
- package/calendar/interfaces/calendar-day.d.ts +17 -0
- package/calendar/public_api.d.ts +1 -1
- package/empty-state/empty-state.component.d.ts +10 -3
- package/esm2022/accordion/accordion-item.component.mjs +4 -4
- package/esm2022/accordion/accordion.directive.mjs +4 -4
- package/esm2022/accordion/accordion.module.mjs +5 -5
- package/esm2022/action-group/action-group.component.mjs +4 -4
- package/esm2022/avatar/avatar.component.mjs +7 -5
- package/esm2022/badge/badge.component.mjs +4 -4
- package/esm2022/button/button.component.mjs +18 -6
- package/esm2022/calendar/calendar.component.mjs +163 -96
- package/esm2022/calendar/interfaces/calendar-day.mjs +2 -0
- package/esm2022/calendar/interfaces/calendar-year-navigator-config.mjs +2 -0
- package/esm2022/calendar/public_api.mjs +1 -1
- package/esm2022/card/card-as-button/card-as-button.directive.mjs +4 -4
- package/esm2022/card/card-footer/card-footer.component.mjs +4 -4
- package/esm2022/card/card-header/card-header.component.mjs +4 -4
- package/esm2022/card/card.component.mjs +4 -4
- package/esm2022/card/card.module.mjs +5 -5
- package/esm2022/chart/chart/chart.component.mjs +4 -4
- package/esm2022/chart/charts.module.mjs +5 -5
- package/esm2022/chart/shared/base-chart/base-chart.component.mjs +4 -4
- package/esm2022/chart/shared/chart-config-service/chart-config.service.mjs +4 -4
- package/esm2022/chart/shared/chart-js-service/chart-js.service.mjs +4 -4
- package/esm2022/chart/stock-chart/stock-chart-js.service.mjs +4 -4
- package/esm2022/chart/stock-chart/stock-chart.component.mjs +4 -4
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/data-table/data-table.module.mjs +5 -5
- package/esm2022/data-table/sortable/sortable.component.mjs +4 -4
- package/esm2022/divider/divider.component.mjs +4 -4
- package/esm2022/dropdown/dropdown.component.mjs +6 -6
- package/esm2022/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/dropdown/keyboard-handler.service.mjs +4 -4
- package/esm2022/empty-state/empty-state.component.mjs +31 -7
- package/esm2022/empty-state/empty-state.module.mjs +5 -5
- package/esm2022/fab-sheet/fab-sheet.component.mjs +4 -4
- package/esm2022/flag/flag.component.mjs +4 -4
- package/esm2022/form-field/directives/affix/affix.directive.mjs +4 -4
- package/esm2022/form-field/directives/date/date-input.directive.mjs +4 -4
- package/esm2022/form-field/directives/decimal-mask/decimal-mask.directive.mjs +4 -4
- package/esm2022/form-field/form-field-message/form-field-message.component.mjs +4 -4
- package/esm2022/form-field/form-field.component.mjs +4 -4
- package/esm2022/form-field/form-field.module.mjs +8 -7
- package/esm2022/form-field/input/input.component.mjs +4 -4
- package/esm2022/form-field/input-counter/input-counter.component.mjs +4 -4
- package/esm2022/form-field/textarea/textarea.component.mjs +4 -4
- package/esm2022/header/header.component.mjs +16 -16
- package/esm2022/header/header.module.mjs +5 -5
- package/esm2022/helpers/content-mutation-observer.mjs +50 -0
- package/esm2022/helpers/element-ancestor-utils.mjs +33 -0
- package/esm2022/helpers/ionic-element-part-helper.mjs +4 -4
- package/esm2022/helpers/line-clamp-helper.mjs +4 -4
- package/esm2022/helpers/platform.service.mjs +4 -4
- package/esm2022/helpers/public_api.mjs +3 -2
- package/esm2022/icon/icon-registry.service.mjs +4 -4
- package/esm2022/icon/icon.component.mjs +4 -4
- package/esm2022/icon/icon.module.mjs +5 -5
- package/esm2022/item/item.component.mjs +13 -9
- package/esm2022/item/item.module.mjs +5 -5
- package/esm2022/item/label/label.component.mjs +5 -5
- package/esm2022/item-group/item-group.component.mjs +4 -4
- package/esm2022/item-sliding/item-sliding.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.module.mjs +5 -5
- package/esm2022/kirby-ionic-module/kirby-ionic.module.mjs +5 -5
- package/esm2022/lib/components/segmented-control/segmented-control.component.mjs +34 -7
- package/esm2022/lib/directives/key-handler/key-handler.directive.mjs +4 -4
- package/esm2022/lib/directives/modal-router-link/modal-router-link.directive.mjs +4 -4
- package/esm2022/lib/kirby.module.mjs +5 -5
- package/esm2022/list/directives/infinite-scroll.directive.mjs +4 -4
- package/esm2022/list/directives/list-item-color.directive.mjs +4 -4
- package/esm2022/list/helpers/list-helper.mjs +4 -4
- package/esm2022/list/list-experimental/list-experimental.component.mjs +4 -4
- package/esm2022/list/list-header/list-header.component.mjs +4 -4
- package/esm2022/list/list-item/list-item.component.mjs +5 -5
- package/esm2022/list/list-section-header/list-section-header.component.mjs +4 -4
- package/esm2022/list/list.component.mjs +5 -5
- package/esm2022/list/list.directive.mjs +13 -13
- package/esm2022/list/list.module.mjs +5 -5
- package/esm2022/loading-overlay/loading-overlay.component.mjs +4 -4
- package/esm2022/loading-overlay/loading-overlay.service.mjs +4 -4
- package/esm2022/menu/menu.component.mjs +215 -12
- package/esm2022/modal/modal/action-sheet/action-sheet.component.mjs +4 -4
- package/esm2022/modal/modal/alert/alert.component.mjs +4 -4
- package/esm2022/modal/modal/footer/modal-footer.component.mjs +4 -4
- package/esm2022/modal/modal/modal-component/modal.component.mjs +18 -8
- package/esm2022/modal/modal/services/action-sheet.helper.mjs +4 -4
- package/esm2022/modal/modal/services/alert.helper.mjs +4 -4
- package/esm2022/modal/modal/services/can-dismiss.helper.mjs +4 -4
- package/esm2022/modal/modal/services/modal-animation-builder.service.mjs +4 -4
- package/esm2022/modal/modal/services/modal.controller.mjs +4 -4
- package/esm2022/modal/modal/services/modal.helper.mjs +5 -4
- package/esm2022/modal/modal-navigation.service.mjs +4 -4
- package/esm2022/modal/modal-wrapper/compact/modal-compact-wrapper.component.mjs +19 -10
- package/esm2022/modal/modal-wrapper/config/modal-config.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-elements-mover.delegate.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-wrapper.component.mjs +35 -12
- package/esm2022/modal/modal.interfaces.mjs +4 -4
- package/esm2022/page/page-footer/page-footer.component.mjs +4 -4
- package/esm2022/page/page.component.mjs +39 -38
- package/esm2022/page/page.module.mjs +5 -5
- package/esm2022/popover/popover.component.mjs +4 -4
- package/esm2022/progress-circle/progress-circle-ring.component.mjs +4 -4
- package/esm2022/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2022/radio/radio-group/radio-group.component.mjs +4 -4
- package/esm2022/radio/radio-module.mjs +5 -5
- package/esm2022/radio/radio.component.mjs +4 -4
- package/esm2022/range/range.component.mjs +4 -4
- package/esm2022/reorder-list/reorder-list.component.mjs +5 -5
- package/esm2022/router-outlet/router-outlet.component.mjs +4 -4
- package/esm2022/router-outlet/router-outlet.module.mjs +5 -5
- package/esm2022/section-header/section-header.component.mjs +4 -4
- package/esm2022/shared/component-loader.directive.mjs +4 -4
- package/esm2022/shared/fit-heading/fit-heading.directive.mjs +4 -4
- package/esm2022/shared/floating/floating.directive.mjs +4 -4
- package/esm2022/shared/portal/portal.directive.mjs +4 -4
- package/esm2022/shared/public_api.mjs +2 -1
- package/esm2022/shared/resize-observer/resize-observer.factory.mjs +4 -4
- package/esm2022/shared/resize-observer/resize-observer.service.mjs +4 -4
- package/esm2022/shared/theme-color/theme-color.directive.mjs +4 -4
- package/esm2022/shared/translation/translation.interface.mjs +2 -0
- package/esm2022/shared/translation/translation.service.mjs +37 -0
- package/esm2022/shared/translation/translations/da.mjs +11 -0
- package/esm2022/shared/translation/translations/en.mjs +11 -0
- package/esm2022/slide/slide-stretch-height.directive.mjs +4 -4
- package/esm2022/slide/slide.directive.mjs +4 -4
- package/esm2022/slide/slide.module.mjs +5 -5
- package/esm2022/slide/slides.component.mjs +16 -9
- package/esm2022/slide-button/slide-button.component.mjs +4 -4
- package/esm2022/spinner/spinner.component.mjs +4 -4
- package/esm2022/spinner/spinner.module.mjs +5 -5
- package/esm2022/tab-navigation/tab-navigation/tab-navigation.component.mjs +4 -4
- package/esm2022/tab-navigation/tab-navigation-item/tab-navigation-item.component.mjs +4 -4
- package/esm2022/tab-navigation/tab-navigation.module.mjs +5 -5
- package/esm2022/tabs/tab-button/tab-button.component.mjs +4 -4
- package/esm2022/tabs/tabs.component.mjs +4 -4
- package/esm2022/tabs/tabs.module.mjs +5 -5
- package/esm2022/tabs/tabs.service.mjs +4 -4
- package/esm2022/testing/test-helper.mjs +8 -5
- package/esm2022/testing-base/lib/components/mock.accordion-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.action-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.action-sheet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.alert.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.avatar.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.badge.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.base-chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.calendar.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.checkbox.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.divider.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.dropdown.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.empty-state.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.fab-sheet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.flag.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.form-field-message.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.form-field.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.header.component.mjs +10 -10
- package/esm2022/testing-base/lib/components/mock.icon.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.input-counter.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.input.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item-sliding.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.kirby-app.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.label.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-experimental.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-section-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.loading-overlay.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.menu.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-compact-wrapper.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-wrapper.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.page-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.page.component.mjs +34 -34
- package/esm2022/testing-base/lib/components/mock.popover.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle-ring.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.radio-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.radio.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.range.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.reorder-list.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.router-outlet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.section-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.segmented-control.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.slide-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.slides.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.spinner.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.stock-chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tabs.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.textarea.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.toggle-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.toggle.component.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.accordion.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.affix.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.card-as-button.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.component-loader.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.date-input.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.decimal-mask.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.fit-heading.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.floating.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.infinite-scroll.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.key-handler.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list-item-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list.directive.mjs +13 -13
- package/esm2022/testing-base/lib/directives/mock.modal-router-link.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.portal.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.slide.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.theme-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/kirby-testing-base.module.mjs +5 -5
- package/esm2022/testing-jasmine/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/testing-jest/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/toast/services/toast.controller.mjs +4 -4
- package/esm2022/toast/services/toast.helper.mjs +4 -4
- package/esm2022/toggle/toggle.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.module.mjs +5 -5
- package/esm2022/types/public_api.mjs +2 -1
- package/esm2022/types/unobserve-fn.mjs +2 -0
- package/esm2022/types/window-ref.mjs +4 -4
- 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 +6 -4
- 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 +17 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +163 -172
- 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-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 +12 -12
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +33 -9
- 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 +30 -30
- 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.mjs +69 -10
- 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 +20 -16
- 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-kirby-ionic-module.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-kirby-ionic-module.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 +214 -11
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +99 -57
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +44 -43
- 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 +10 -10
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +4 -4
- 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 +71 -17
- 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 +24 -18
- 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 +7 -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 +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +3 -3
- 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 +43 -16
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/form-field/form-field.module.d.ts +2 -1
- package/helpers/content-mutation-observer.d.ts +8 -0
- package/helpers/{element-has-ancestor.d.ts → element-ancestor-utils.d.ts} +1 -0
- package/helpers/public_api.d.ts +2 -1
- package/icons/svg/accounts-outline.svg +0 -2
- package/icons/svg/accounts.svg +0 -2
- package/icons/svg/backspace.svg +0 -2
- package/icons/svg/camera.svg +0 -2
- package/icons/svg/copy.svg +0 -2
- package/icons/svg/flag.svg +0 -2
- package/icons/svg/inbox-outline.svg +0 -2
- package/icons/svg/inbox.svg +0 -2
- package/icons/svg/information.svg +0 -2
- package/icons/svg/menu-outline.svg +0 -2
- package/icons/svg/menu.svg +0 -2
- package/icons/svg/person-outline.svg +0 -2
- package/icons/svg/person.svg +0 -2
- package/icons/svg/reorder.svg +0 -2
- package/icons/svg/support.svg +0 -2
- package/item/item.component.d.ts +3 -2
- package/lib/components/segmented-control/segmented-control.component.d.ts +4 -0
- package/menu/menu.component.d.ts +32 -8
- package/modal/modal/modal-component/modal.component.d.ts +6 -3
- package/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +4 -2
- package/modal/modal-wrapper/config/modal-config.d.ts +3 -0
- package/modal/modal-wrapper/modal-wrapper.component.d.ts +8 -3
- package/package.json +2 -2
- package/page/page.component.d.ts +4 -3
- package/scss/base/_item-typography.scss +1 -0
- package/shared/public_api.d.ts +1 -0
- package/shared/translation/translation.interface.d.ts +10 -0
- package/shared/translation/translation.service.d.ts +12 -0
- package/shared/translation/translations/da.d.ts +2 -0
- package/shared/translation/translations/en.d.ts +2 -0
- package/slide/slides.component.d.ts +3 -1
- package/testing/test-helper.d.ts +1 -0
- package/types/public_api.d.ts +1 -0
- package/types/unobserve-fn.d.ts +1 -0
- package/calendar/helpers/calendar-cell.model.d.ts +0 -9
- package/calendar/helpers/calendar-options.model.d.ts +0 -9
- package/calendar/helpers/calendar.helper.d.ts +0 -24
- package/esm2022/calendar/helpers/calendar-cell.model.mjs +0 -2
- package/esm2022/calendar/helpers/calendar-options.model.mjs +0 -2
- package/esm2022/calendar/helpers/calendar.helper.mjs +0 -80
- package/esm2022/calendar/options/calendar-year-navigator-config.mjs +0 -2
- package/esm2022/helpers/element-has-ancestor.mjs +0 -24
- /package/calendar/{options → interfaces}/calendar-year-navigator-config.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-modal.mjs","sources":["../../modal/src/modal-navigation.service.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/alert/alert.component.ts","../../modal/src/modal/alert/alert.component.html","../../modal/src/modal/services/alert.helper.ts","../../modal/src/modal.interfaces.ts","../../modal/src/modal/services/can-dismiss.helper.ts","../../modal/src/modal-wrapper/config/modal-config.helper.ts","../../modal/src/modal-wrapper/modal-elements-mover.delegate.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/services/modal.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 { 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 { Location } from '@angular/common';\nimport { ModalRouteActivation } from './modal.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(private router: Router, private route: ActivatedRoute) {}\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 { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\n\nimport { ActionSheetItem } from './config/action-sheet-item';\n\n@Component({\n standalone: true,\n imports: [CardModule, ButtonComponent, CommonModule],\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 onItemSelect(selection: ActionSheetItem) {\n this.itemSelect.emit(selection);\n }\n\n onCancel() {\n this.cancel.emit();\n }\n}\n","<kirby-card>\n <kirby-card-header\n *ngIf=\"header\"\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n *ngFor=\"let item of items\"\n >\n {{ item.text }}\n </button>\n</kirby-card>\n<button\n *ngIf=\"!hideCancel\"\n kirby-button\n class=\"cancel-btn\"\n size=\"lg\"\n attentionLevel=\"3\"\n (click)=\"onCancel()\"\n>\n {{ cancelButtonText }}\n</button>\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 { 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 { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ThemeColor } from '@kirbydesign/designsystem/helpers';\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { EmptyStateModule } from '@kirbydesign/designsystem/empty-state';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\n@Component({\n standalone: true,\n imports: [\n IconModule,\n EmptyStateModule,\n ButtonComponent,\n CommonModule,\n EmptyStateModule,\n ThemeColorDirective,\n ],\n selector: 'kirby-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\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 @Input() okBtn: string;\n @Input() okBtnIsDestructive: boolean;\n @Input() cancelBtn: string;\n\n constructor(private elementRef: ElementRef<HTMLElement>, private windowRef: WindowRef) {}\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 && ionModalElement.dismiss(false);\n }\n\n onOk() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement && 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 <button\n kirby-button\n *ngIf=\"cancelBtn\"\n attentionLevel=\"3\"\n class=\"cancel-btn\"\n (click)=\"onCancel()\"\n >\n {{ cancelBtn }}\n </button>\n <button\n kirby-button\n [size]=\"cancelBtn ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn }}\n </button>\n </div>\n</article>\n","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\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 cancelBtn: config.cancelBtn,\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) {\n let text: string;\n\n if (config.okBtn) {\n if (typeof config.okBtn === 'string') {\n text = config.okBtn;\n } else {\n text = config.okBtn.text;\n }\n }\n return text;\n }\n\n getOkBtnIsDestructive(config) {\n return typeof config.okBtn === 'object' ? config.okBtn.isDestructive : undefined;\n }\n}\n","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}\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({ template: '' })\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 { 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 { 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(private renderer: Renderer2, private elementRef: ElementRef<HTMLElement>) {}\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 {\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 } from '@kirbydesign/designsystem/helpers';\n\nimport { ResizeObserverService } from '@kirbydesign/designsystem/shared';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\nimport { PlatformService } from '@kirbydesign/designsystem/helpers';\nimport { CommonModule } from '@angular/common';\nimport { IconModule } 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 standalone: true,\n imports: [\n RouterModule,\n ButtonComponent,\n IconModule,\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 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 _mutationObserver: MutationObserver;\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 ) {\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.initializeSizing();\n this.initializeModalRoute();\n this.listenForIonModalDidPresent();\n this.listenForIonModalWillDismiss();\n this.listenForScroll();\n this.initializeResizeModalToModalWrapper();\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\n private _currentFooter: HTMLElement | null = null;\n\n private set currentFooter(footer: HTMLElement | null) {\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 });\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 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 delete this._mutationObserver;\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 [class.content-scrolled]=\"isContentScrolled\" (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title></ion-title>\n <ion-buttons\n slot=\"secondary\"\n *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\"\n >\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 <ion-buttons slot=\"primary\">\n <button\n kirby-button\n attentionLevel=\"3\"\n size=\"md\"\n [noDecoration]=\"config.interactWithBackground\"\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 <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\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/ban-types\n action: Function;\n}\n","import {\n Component,\n ElementRef,\n HostListener,\n Injector,\n Input,\n OnInit,\n TemplateRef,\n} from '@angular/core';\nimport { firstValueFrom, Subject } from 'rxjs';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\n\nimport { CommonModule } from '@angular/common';\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 standalone: true,\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 // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: { '[class.ion-page]': 'false' }, //Ensure ion-page class doesn't get applied by Ionic Modal Controller\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 ) {}\n\n ngOnInit(): void {\n this.ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\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 async close(data?: any): Promise<void> {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n if (ionModalElement) {\n await 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 { 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 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 { 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 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 { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { KirbyAnimation } from '@kirbydesign/designsystem/helpers';\nimport { IconModule } from '@kirbydesign/designsystem/icon';\nimport { KirbyIonicModule } from '@kirbydesign/designsystem/kirby-ionic-module';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\n\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 standalone: true,\n selector: 'kirby-modal',\n templateUrl: './modal.component.html',\n imports: [\n CommonModule,\n KirbyIonicModule,\n IconModule,\n IonModal,\n ButtonComponent,\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalComponent implements OnChanges {\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\n _canDismiss: ShowAlertCallback | boolean = true;\n\n constructor(\n private canDismissHelper: CanDismissHelper,\n private modalNavigationService: ModalNavigationService,\n private windowRef: WindowRef\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","<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 <kirby-modal-compact-wrapper\n *ngIf=\"flavor === 'compact'; else modalWrapper\"\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n </ng-template>\n</ion-modal>\n\n<ng-template #modalWrapper>\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\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 standalone: true,\n imports: [CommonModule, 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>\n <ng-content></ng-content>\n</ion-footer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i1.AlertHelper","i3","i4.CanDismissHelper","i5","i7","i2.CanDismissHelper","i2.ModalAnimationBuilderService","i3.ModalNavigationService","i4","i5.CanDismissHelper","IonicModalController","i1.CanDismissHelper","i2.ModalNavigationService","i1.ModalElementsAdvertiser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-modal.mjs","sources":["../../modal/src/modal-navigation.service.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/alert/alert.component.ts","../../modal/src/modal/alert/alert.component.html","../../modal/src/modal/services/alert.helper.ts","../../modal/src/modal.interfaces.ts","../../modal/src/modal/services/can-dismiss.helper.ts","../../modal/src/modal-wrapper/config/modal-config.helper.ts","../../modal/src/modal-wrapper/modal-elements-mover.delegate.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/services/modal.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 { 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 { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\nimport { CardModule } from '@kirbydesign/designsystem/card';\n\nimport { ActionSheetItem } from './config/action-sheet-item';\n\n@Component({\n standalone: true,\n imports: [CardModule, ButtonComponent, CommonModule],\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 onItemSelect(selection: ActionSheetItem) {\n this.itemSelect.emit(selection);\n }\n\n onCancel() {\n this.cancel.emit();\n }\n}\n","<kirby-card>\n <kirby-card-header\n *ngIf=\"header\"\n [title]=\"header\"\n [isTitleBold]=\"true\"\n [subtitle]=\"subheader\"\n ></kirby-card-header>\n <button\n kirby-button\n expand=\"block\"\n size=\"lg\"\n [noDecoration]=\"true\"\n (click)=\"onItemSelect(item)\"\n *ngFor=\"let item of items\"\n >\n {{ item.text }}\n </button>\n</kirby-card>\n<button\n *ngIf=\"!hideCancel\"\n kirby-button\n class=\"cancel-btn\"\n size=\"lg\"\n attentionLevel=\"3\"\n (click)=\"onCancel()\"\n>\n {{ cancelButtonText }}\n</button>\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 { 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 { IconModule } from '@kirbydesign/designsystem/icon';\nimport { ThemeColor } from '@kirbydesign/designsystem/helpers';\nimport { ThemeColorDirective } from '@kirbydesign/designsystem/shared';\nimport { EmptyStateModule } from '@kirbydesign/designsystem/empty-state';\nimport { ButtonComponent } from '@kirbydesign/designsystem/button';\n\n@Component({\n standalone: true,\n imports: [\n IconModule,\n EmptyStateModule,\n ButtonComponent,\n CommonModule,\n EmptyStateModule,\n ThemeColorDirective,\n ],\n selector: 'kirby-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\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 @Input() okBtn: string;\n @Input() okBtnIsDestructive: boolean;\n @Input() cancelBtn: string;\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 && ionModalElement.dismiss(false);\n }\n\n onOk() {\n const ionModalElement = this.elementRef.nativeElement.closest('ion-modal');\n ionModalElement && 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 <button\n kirby-button\n *ngIf=\"cancelBtn\"\n attentionLevel=\"3\"\n class=\"cancel-btn\"\n (click)=\"onCancel()\"\n >\n {{ cancelBtn }}\n </button>\n <button\n kirby-button\n [size]=\"cancelBtn ? null : 'lg'\"\n attentionLevel=\"1\"\n class=\"ok-btn\"\n [class.destructive]=\"okBtnIsDestructive\"\n (click)=\"onOk()\"\n >\n {{ okBtn }}\n </button>\n </div>\n</article>\n","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular/standalone';\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 cancelBtn: config.cancelBtn,\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) {\n let text: string;\n\n if (config.okBtn) {\n if (typeof config.okBtn === 'string') {\n text = config.okBtn;\n } else {\n text = config.okBtn.text;\n }\n }\n return text;\n }\n\n getOkBtnIsDestructive(config) {\n return typeof config.okBtn === 'object' ? config.okBtn.isDestructive : undefined;\n }\n}\n","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}\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({ template: '' })\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 { 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 { 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 {\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 { IconModule } 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 standalone: true,\n imports: [\n RouterModule,\n ButtonComponent,\n IconModule,\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.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 (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 });\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 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 [class.content-scrolled]=\"isContentScrolled\" (touchstart)=\"onHeaderTouchStart($event)\">\n <ion-toolbar>\n <ion-title></ion-title>\n <ion-buttons\n slot=\"secondary\"\n *ngIf=\"config.flavor === 'drawer' && config.drawerSupplementaryAction\"\n >\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 <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 <ion-header *ngIf=\"_hasCollapsibleTitle\" collapse=\"condense\">\n <ion-toolbar>\n <span class=\"kirby-text-xlarge\" #contentTitle></span>\n </ion-toolbar>\n </ion-header>\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/ban-types\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 standalone: true,\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 // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: { '[class.ion-page]': 'false' }, //Ensure ion-page class doesn't get applied by Ionic Modal Controller\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 { 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 { 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 { IconModule } from '@kirbydesign/designsystem/icon';\nimport { KirbyIonicModule } from '@kirbydesign/designsystem/kirby-ionic-module';\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 standalone: true,\n selector: 'kirby-modal',\n templateUrl: './modal.component.html',\n imports: [\n CommonModule,\n KirbyIonicModule,\n IconModule,\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 <kirby-modal-compact-wrapper\n *ngIf=\"flavor === 'compact'; else modalWrapper\"\n [config]=\"_config\"\n [content]=\"template\"\n ></kirby-modal-compact-wrapper>\n </ng-template>\n</ion-modal>\n\n<ng-template #modalWrapper>\n <kirby-modal-wrapper\n class=\"ion-page\"\n [config]=\"_config\"\n [content]=\"template\"\n [scrollDisabled]=\"scrollDisabled\"\n ></kirby-modal-wrapper>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\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 standalone: true,\n imports: [CommonModule, 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>\n <ng-content></ng-content>\n</ion-footer>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i1.AlertHelper","i3","i4.CanDismissHelper","i5","i7","i2.CanDismissHelper","i2.ModalAnimationBuilderService","i3.ModalNavigationService","i4","i5.CanDismissHelper","IonicModalController","i1.CanDismissHelper","i2.ModalNavigationService","i1.ModalElementsAdvertiser"],"mappings":"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"}
|