@kirbydesign/designsystem 9.5.0 → 9.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/accordion-item.component.d.ts +2 -1
- package/avatar/avatar.component.d.ts +4 -1
- package/button/button.component.d.ts +1 -1
- package/card/card-as-button/card-as-button.directive.d.ts +2 -3
- package/card/card.component.d.ts +9 -2
- package/checkbox/checkbox.component.d.ts +8 -4
- package/esm2022/accordion/accordion-item.component.mjs +8 -5
- package/esm2022/accordion/accordion.directive.mjs +4 -4
- package/esm2022/accordion/accordion.module.mjs +5 -5
- package/esm2022/accordion/kirbydesign-designsystem-accordion.mjs +1 -1
- package/esm2022/accordion/public_api.mjs +1 -1
- package/esm2022/action-group/action-group.component.mjs +4 -4
- package/esm2022/action-group/kirbydesign-designsystem-action-group.mjs +1 -1
- package/esm2022/action-group/public_api.mjs +1 -1
- package/esm2022/avatar/avatar.component.mjs +12 -6
- package/esm2022/avatar/kirbydesign-designsystem-avatar.mjs +1 -1
- package/esm2022/avatar/public_api.mjs +1 -1
- package/esm2022/badge/badge.component.mjs +4 -4
- package/esm2022/badge/kirbydesign-designsystem-badge.mjs +1 -1
- package/esm2022/badge/public_api.mjs +1 -1
- package/esm2022/button/button.component.mjs +5 -5
- package/esm2022/button/kirbydesign-designsystem-button.mjs +1 -1
- package/esm2022/button/public_api.mjs +1 -1
- package/esm2022/calendar/calendar.component.mjs +4 -4
- package/esm2022/calendar/helpers/calendar-cell.model.mjs +1 -1
- package/esm2022/calendar/helpers/calendar-options.model.mjs +1 -1
- package/esm2022/calendar/helpers/calendar.helper.mjs +4 -4
- package/esm2022/calendar/kirbydesign-designsystem-calendar.mjs +1 -1
- package/esm2022/calendar/options/calendar-year-navigator-config.mjs +1 -1
- package/esm2022/calendar/public_api.mjs +1 -1
- package/esm2022/card/card-as-button/card-as-button.directive.mjs +6 -9
- package/esm2022/card/card-flag-level.mjs +1 -1
- package/esm2022/card/card-footer/card-footer.component.mjs +5 -5
- package/esm2022/card/card-header/card-header.component.mjs +4 -4
- package/esm2022/card/card.component.mjs +27 -9
- package/esm2022/card/card.module.mjs +5 -5
- package/esm2022/card/kirbydesign-designsystem-card.mjs +1 -1
- package/esm2022/card/public_api.mjs +1 -1
- package/esm2022/chart/chart/chart.component.mjs +4 -4
- package/esm2022/chart/chart/index.mjs +1 -1
- package/esm2022/chart/chart-config/chart-bar-config/chart-bar-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-base-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/chart-stock-config.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/data-label-position/data-label-position.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.mjs +1 -1
- package/esm2022/chart/chart-config/chart-stock-config/vertical-line-plugin/vertical-line-plugin.model.mjs +1 -1
- package/esm2022/chart/charts.module.mjs +5 -5
- package/esm2022/chart/kirbydesign-designsystem-chart.mjs +1 -1
- package/esm2022/chart/public_api.mjs +1 -1
- package/esm2022/chart/shared/base-chart/base-chart.component.mjs +4 -4
- package/esm2022/chart/shared/base-chart/index.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/chart-config.service.mjs +4 -4
- package/esm2022/chart/shared/chart-config-service/configs/annotations.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/global-defaults.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/interaction-functions-extensions.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/configs/type.config.mjs +1 -1
- package/esm2022/chart/shared/chart-config-service/index.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/annotations.delegate.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/chart-js.service.mjs +4 -4
- package/esm2022/chart/shared/chart-js-service/chartjs-plugin-marker/chartjs-plugin-marker.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/configured-chart-js.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/index.mjs +1 -1
- package/esm2022/chart/shared/chart-js-service/test-utils.mjs +1 -1
- package/esm2022/chart/shared/charts.types.mjs +1 -1
- package/esm2022/chart/shared/index.mjs +1 -1
- package/esm2022/chart/stock-chart/index.mjs +1 -1
- 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 +18 -11
- package/esm2022/checkbox/kirbydesign-designsystem-checkbox.mjs +1 -1
- package/esm2022/checkbox/public_api.mjs +1 -1
- package/esm2022/data-table/data-table.module.mjs +5 -5
- package/esm2022/data-table/kirbydesign-designsystem-data-table.mjs +1 -1
- package/esm2022/data-table/public_api.mjs +1 -1
- package/esm2022/data-table/sortable/sortable.component.mjs +4 -4
- package/esm2022/data-table/table/table.component.mjs +4 -4
- package/esm2022/data-table/table-row/table-row.component.mjs +4 -4
- package/esm2022/divider/divider.component.mjs +4 -4
- package/esm2022/divider/kirbydesign-designsystem-divider.mjs +1 -1
- package/esm2022/divider/public_api.mjs +1 -1
- package/esm2022/dropdown/dropdown.component.mjs +5 -5
- package/esm2022/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/dropdown/dropdown.types.mjs +1 -1
- package/esm2022/dropdown/keyboard-handler.service.mjs +4 -4
- package/esm2022/dropdown/kirbydesign-designsystem-dropdown.mjs +1 -1
- package/esm2022/dropdown/public_api.mjs +1 -1
- package/esm2022/empty-state/empty-state.component.mjs +4 -4
- package/esm2022/empty-state/empty-state.module.mjs +5 -5
- package/esm2022/empty-state/kirbydesign-designsystem-empty-state.mjs +1 -1
- package/esm2022/empty-state/public_api.mjs +1 -1
- package/esm2022/fab-sheet/fab-sheet.component.mjs +4 -4
- package/esm2022/fab-sheet/kirbydesign-designsystem-fab-sheet.mjs +1 -1
- package/esm2022/fab-sheet/public_api.mjs +1 -1
- package/esm2022/flag/flag.component.mjs +4 -4
- package/esm2022/flag/kirbydesign-designsystem-flag.mjs +1 -1
- package/esm2022/flag/public_api.mjs +1 -1
- 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 +5 -5
- 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/kirbydesign-designsystem-form-field.mjs +1 -1
- package/esm2022/form-field/public_api.mjs +1 -1
- package/esm2022/form-field/textarea/textarea.component.mjs +4 -4
- package/esm2022/header/header.component.mjs +23 -16
- package/esm2022/header/header.module.mjs +5 -5
- package/esm2022/header/kirbydesign-designsystem-header.mjs +1 -1
- package/esm2022/header/public_api.mjs +1 -1
- package/esm2022/helpers/chart-config-has-type.mjs +1 -1
- package/esm2022/helpers/color-helper.mjs +1 -1
- package/esm2022/helpers/deep-copy.mjs +1 -1
- package/esm2022/helpers/design-token-helper.mjs +1 -1
- package/esm2022/helpers/element-has-ancestor.mjs +1 -1
- package/esm2022/helpers/ionic-element-part-helper.mjs +4 -4
- package/esm2022/helpers/kirby-animation.mjs +1 -1
- package/esm2022/helpers/kirbydesign-designsystem-helpers.mjs +1 -1
- package/esm2022/helpers/line-clamp-helper.mjs +4 -4
- package/esm2022/helpers/merge-deep.mjs +1 -1
- package/esm2022/helpers/platform.service.mjs +4 -4
- package/esm2022/helpers/public_api.mjs +1 -1
- package/esm2022/helpers/scss/kirbydesign-designsystem-helpers-scss.mjs +1 -1
- package/esm2022/helpers/scss/public_api.mjs +1 -1
- package/esm2022/helpers/scss/scss-helper.mjs +1 -1
- package/esm2022/helpers/string-helper.mjs +1 -1
- package/esm2022/helpers/theme-color.type.mjs +1 -1
- package/esm2022/helpers/unique-id-generator.helper.mjs +1 -1
- package/esm2022/icon/icon-registry.service.mjs +4 -4
- package/esm2022/icon/icon-settings.mjs +1 -1
- package/esm2022/icon/icon.component.mjs +4 -4
- package/esm2022/icon/icon.module.mjs +5 -5
- package/esm2022/icon/kirby-icon-settings.mjs +1 -1
- package/esm2022/icon/kirbydesign-designsystem-icon.mjs +1 -1
- package/esm2022/icon/public_api.mjs +1 -1
- package/esm2022/item/item.component.mjs +41 -8
- package/esm2022/item/item.module.mjs +5 -5
- package/esm2022/item/kirbydesign-designsystem-item.mjs +1 -1
- package/esm2022/item/label/label.component.mjs +4 -4
- package/esm2022/item/public_api.mjs +1 -1
- package/esm2022/item-group/item-group.component.mjs +4 -4
- package/esm2022/item-group/kirbydesign-designsystem-item-group.mjs +1 -1
- package/esm2022/item-group/public_api.mjs +1 -1
- package/esm2022/item-sliding/item-sliding.component.mjs +4 -4
- package/esm2022/item-sliding/item-sliding.types.mjs +1 -1
- package/esm2022/item-sliding/kirbydesign-designsystem-item-sliding.mjs +1 -1
- package/esm2022/item-sliding/public_api.mjs +1 -1
- package/esm2022/kirby-app/kirby-app.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.module.mjs +5 -5
- package/esm2022/kirby-app/kirbydesign-designsystem-kirby-app.mjs +1 -1
- package/esm2022/kirby-app/public_api.mjs +1 -1
- package/esm2022/kirby-ionic-module/kirby-ionic.module.mjs +5 -5
- package/esm2022/kirby-ionic-module/kirbydesign-designsystem-kirby-ionic-module.mjs +1 -1
- package/esm2022/kirby-ionic-module/public_api.mjs +1 -1
- package/esm2022/kirbydesign-designsystem.mjs +1 -1
- package/esm2022/lib/components/index.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/index.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/page-local-navigation-item.mjs +1 -1
- package/esm2022/lib/components/page-local-navigation/page-local-navigation.component.mjs +4 -4
- package/esm2022/lib/components/segmented-control/segment-item.mjs +1 -1
- package/esm2022/lib/components/segmented-control/segmented-control.component.mjs +5 -5
- package/esm2022/lib/directives/index.mjs +1 -1
- 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/index.mjs +1 -1
- package/esm2022/lib/kirby-experimental.module.mjs +5 -5
- package/esm2022/lib/kirby.module.mjs +5 -5
- package/esm2022/list/directives/index.mjs +1 -1
- package/esm2022/list/directives/infinite-scroll.directive.mjs +4 -4
- package/esm2022/list/directives/list-item-color.directive.mjs +4 -4
- package/esm2022/list/directives/scroll.model.mjs +1 -1
- package/esm2022/list/helpers/index.mjs +1 -1
- package/esm2022/list/helpers/list-helper.mjs +4 -4
- package/esm2022/list/kirbydesign-designsystem-list.mjs +1 -1
- package/esm2022/list/list-experimental/index.mjs +1 -1
- package/esm2022/list/list-experimental/list-experimental.component.mjs +4 -4
- package/esm2022/list/list-header/index.mjs +1 -1
- package/esm2022/list/list-header/list-header.component.mjs +4 -4
- package/esm2022/list/list-item/index.mjs +1 -1
- package/esm2022/list/list-item/list-item.component.mjs +5 -5
- package/esm2022/list/list-section-header/index.mjs +1 -1
- package/esm2022/list/list-section-header/list-section-header.component.mjs +4 -4
- package/esm2022/list/list-swipe-action.mjs +1 -1
- package/esm2022/list/list-swipe-action.type.mjs +1 -1
- package/esm2022/list/list.component.mjs +5 -5
- package/esm2022/list/list.directive.mjs +13 -13
- package/esm2022/list/list.event.mjs +1 -1
- package/esm2022/list/list.module.mjs +18 -12
- package/esm2022/list/public_api.mjs +1 -1
- package/esm2022/loading-overlay/kirbydesign-designsystem-loading-overlay.mjs +1 -1
- package/esm2022/loading-overlay/loading-overlay.component.mjs +4 -4
- package/esm2022/loading-overlay/loading-overlay.service.mjs +4 -4
- package/esm2022/loading-overlay/public_api.mjs +1 -1
- package/esm2022/menu/kirbydesign-designsystem-menu.mjs +1 -1
- package/esm2022/menu/menu.component.mjs +4 -4
- package/esm2022/menu/public_api.mjs +1 -1
- package/esm2022/modal/kirbydesign-designsystem-modal.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/action-sheet.component.mjs +4 -4
- package/esm2022/modal/modal/action-sheet/config/action-sheet-config.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/config/action-sheet-item.mjs +1 -1
- package/esm2022/modal/modal/action-sheet/index.mjs +1 -1
- package/esm2022/modal/modal/alert/alert.component.mjs +4 -4
- package/esm2022/modal/modal/alert/config/alert-config.mjs +1 -1
- package/esm2022/modal/modal/alert/index.mjs +1 -1
- package/esm2022/modal/modal/footer/modal-footer.component.mjs +5 -5
- package/esm2022/modal/modal/index.mjs +1 -1
- package/esm2022/modal/modal/modal-component/modal.component.mjs +12 -19
- 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-modal-guard.mjs +31 -0
- package/esm2022/modal/modal/services/can-dismiss.helper.mjs +4 -4
- package/esm2022/modal/modal/services/index.mjs +2 -1
- package/esm2022/modal/modal/services/modal-animation-builder.service.mjs +4 -4
- package/esm2022/modal/modal/services/modal.controller.mjs +12 -8
- package/esm2022/modal/modal/services/modal.helper.mjs +24 -26
- package/esm2022/modal/modal-navigation.service.mjs +25 -14
- package/esm2022/modal/modal-wrapper/compact/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/compact/modal-compact-wrapper.component.mjs +4 -4
- package/esm2022/modal/modal-wrapper/config/drawer-supplementary-action.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/modal-config.helper.mjs +1 -1
- package/esm2022/modal/modal-wrapper/config/modal-config.mjs +1 -1
- package/esm2022/modal/modal-wrapper/index.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-elements-mover.delegate.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-wrapper.component.mjs +5 -5
- package/esm2022/modal/modal.interfaces.mjs +4 -4
- package/esm2022/modal/public_api.mjs +1 -1
- package/esm2022/modal/v2/footer/footer.component.mjs +5 -5
- package/esm2022/modal/v2/kirby-modal.module.mjs +5 -5
- package/esm2022/modal/v2/kirbydesign-designsystem-modal-v2.mjs +1 -1
- package/esm2022/modal/v2/modal/modal.component.mjs +5 -5
- package/esm2022/modal/v2/modal-routing/modal-routing.component.mjs +4 -4
- package/esm2022/modal/v2/public_api.mjs +1 -1
- package/esm2022/modal/v2/services/modal.controller.mjs +4 -4
- package/esm2022/modal/v2/wrapper/wrapper.component.mjs +5 -5
- package/esm2022/page/kirbydesign-designsystem-page.mjs +1 -1
- package/esm2022/page/page-footer/page-footer.component.mjs +5 -5
- package/esm2022/page/page.component.mjs +38 -35
- package/esm2022/page/page.module.mjs +5 -5
- package/esm2022/page/public_api.mjs +1 -1
- package/esm2022/popover/kirbydesign-designsystem-popover.mjs +1 -1
- package/esm2022/popover/popover.component.mjs +4 -4
- package/esm2022/popover/public_api.mjs +1 -1
- package/esm2022/progress-circle/kirbydesign-designsystem-progress-circle.mjs +1 -1
- package/esm2022/progress-circle/progress-circle-ring.component.mjs +4 -4
- package/esm2022/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2022/progress-circle/public_api.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/radio/kirbydesign-designsystem-radio.mjs +1 -1
- package/esm2022/radio/public_api.mjs +1 -1
- 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 +17 -10
- package/esm2022/range/kirbydesign-designsystem-range.mjs +1 -1
- package/esm2022/range/public_api.mjs +1 -1
- package/esm2022/range/range.component.mjs +6 -6
- package/esm2022/reorder-list/kirbydesign-designsystem-reorder-list.mjs +1 -1
- package/esm2022/reorder-list/public_api.mjs +1 -1
- package/esm2022/reorder-list/reorder-event.mjs +1 -1
- package/esm2022/reorder-list/reorder-list.component.mjs +4 -4
- package/esm2022/router-outlet/kirbydesign-designsystem-router-outlet.mjs +1 -1
- package/esm2022/router-outlet/public_api.mjs +1 -1
- package/esm2022/router-outlet/router-outlet.component.mjs +4 -4
- package/esm2022/router-outlet/router-outlet.module.mjs +5 -5
- package/esm2022/section-header/kirbydesign-designsystem-section-header.mjs +1 -1
- package/esm2022/section-header/public_api.mjs +1 -1
- package/esm2022/section-header/section-header.component.mjs +4 -4
- package/esm2022/shared/component-configuration.mjs +1 -1
- package/esm2022/shared/component-loader.directive.mjs +4 -4
- package/esm2022/shared/dynamic-component.mjs +1 -1
- package/esm2022/shared/fit-heading/fit-heading.directive.mjs +4 -4
- package/esm2022/shared/fit-heading/index.mjs +1 -1
- package/esm2022/shared/floating/floating.directive.mjs +4 -4
- package/esm2022/shared/floating/kirbydesign-designsystem-shared-floating.mjs +1 -1
- package/esm2022/shared/floating/public_api.mjs +1 -1
- package/esm2022/shared/kirbydesign-designsystem-shared.mjs +1 -1
- package/esm2022/shared/portal/kirbydesign-designsystem-shared-portal.mjs +1 -1
- package/esm2022/shared/portal/portal.directive.mjs +4 -4
- package/esm2022/shared/portal/public_api.mjs +1 -1
- package/esm2022/shared/public_api.mjs +1 -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/slide/kirbydesign-designsystem-slide.mjs +1 -1
- package/esm2022/slide/public_api.mjs +1 -1
- 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 +4 -4
- package/esm2022/slide-button/kirbydesign-designsystem-slide-button.mjs +1 -1
- package/esm2022/slide-button/public_api.mjs +1 -1
- package/esm2022/slide-button/slide-button.component.mjs +5 -5
- package/esm2022/spinner/kirbydesign-designsystem-spinner.mjs +1 -1
- package/esm2022/spinner/public_api.mjs +1 -1
- package/esm2022/spinner/spinner.component.mjs +4 -4
- package/esm2022/spinner/spinner.module.mjs +5 -5
- package/esm2022/tab-navigation/kirbydesign-designsystem-tab-navigation.mjs +1 -1
- package/esm2022/tab-navigation/public_api.mjs +1 -1
- 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/kirbydesign-designsystem-tabs.mjs +1 -1
- package/esm2022/tabs/public_api.mjs +1 -1
- package/esm2022/tabs/tab-button/tab-button.component.mjs +5 -5
- package/esm2022/tabs/tab-button/tab-button.events.mjs +1 -1
- 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/element-css-custom-matchers.mjs +1 -1
- package/esm2022/testing/kirbydesign-designsystem-testing.mjs +1 -1
- package/esm2022/testing/public_api.mjs +1 -1
- package/esm2022/testing/test-helper.mjs +5 -5
- package/esm2022/testing-base/kirbydesign-designsystem-testing-base.mjs +1 -1
- package/esm2022/testing-base/lib/components/index.mjs +1 -1
- package/esm2022/testing-base/lib/components/mock.accordion-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.action-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.action-sheet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.alert.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.avatar.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.badge.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.base-chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.calendar.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.card.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.checkbox.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.divider.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.dropdown.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.empty-state.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.fab-sheet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.flag.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.form-field-message.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.form-field.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.header.component.mjs +12 -10
- package/esm2022/testing-base/lib/components/mock.icon.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.input-counter.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.input.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item-sliding.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.kirby-app.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.label.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-experimental.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list-section-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.list.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.loading-overlay.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.menu.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-compact-wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-routing.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal-wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.modal.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page-footer.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page-local-navigation.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.page.component.mjs +44 -34
- package/esm2022/testing-base/lib/components/mock.popover.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle-ring.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.radio-group.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.radio.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.range.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.reorder-list.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.router-outlet.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.section-header.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.segmented-control.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.slide-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.slides.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.spinner.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.stock-chart.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation-item.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.table-row.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.table.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.tabs.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.textarea.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.toggle-button.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.toggle.component.mjs +6 -4
- package/esm2022/testing-base/lib/components/mock.wrapper.component.mjs +6 -4
- package/esm2022/testing-base/lib/directives/index.mjs +1 -1
- 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/index.mjs +1 -1
- package/esm2022/testing-base/lib/kirby-testing-base.module.mjs +5 -5
- package/esm2022/testing-base/lib/mock-components.mjs +1 -1
- package/esm2022/testing-base/lib/mock-directives.mjs +1 -1
- package/esm2022/testing-base/public_api.mjs +1 -1
- package/esm2022/testing-jasmine/kirbydesign-designsystem-testing-jasmine.mjs +1 -1
- package/esm2022/testing-jasmine/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/testing-jasmine/lib/mock-providers.mjs +1 -1
- package/esm2022/testing-jasmine/public_api.mjs +1 -1
- package/esm2022/testing-jest/kirbydesign-designsystem-testing-jest.mjs +1 -1
- package/esm2022/testing-jest/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/testing-jest/lib/mock-providers.mjs +1 -1
- package/esm2022/testing-jest/public_api.mjs +1 -1
- package/esm2022/toast/config/toast-config.mjs +1 -1
- package/esm2022/toast/kirbydesign-designsystem-toast.mjs +1 -1
- package/esm2022/toast/public_api.mjs +1 -1
- package/esm2022/toast/services/indexs.mjs +1 -1
- package/esm2022/toast/services/toast.controller.mjs +4 -4
- package/esm2022/toast/services/toast.helper.mjs +4 -4
- package/esm2022/toggle/kirbydesign-designsystem-toggle.mjs +1 -1
- package/esm2022/toggle/public_api.mjs +1 -1
- package/esm2022/toggle/toggle.component.mjs +22 -9
- package/esm2022/toggle-button/kirbydesign-designsystem-toggle-button.mjs +1 -1
- package/esm2022/toggle-button/public_api.mjs +1 -1
- package/esm2022/toggle-button/toggle-button.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.module.mjs +5 -5
- package/esm2022/types/event-listener-dispose-fn.mjs +1 -1
- package/esm2022/types/kirbydesign-designsystem-types.mjs +1 -1
- package/esm2022/types/public_api.mjs +1 -1
- package/esm2022/types/window-ref.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +14 -11
- 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 +11 -5
- 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 +4 -4
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +42 -27
- 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 +17 -10
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +13 -13
- 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 +11 -11
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +28 -28
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +26 -19
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +9 -9
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +65 -33
- 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 +55 -49
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal-v2.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-modal-v2.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +124 -91
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +45 -42
- 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 +23 -16
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +5 -5
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +15 -15
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +14 -14
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +455 -307
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +20 -7
- 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 +21 -21
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/header/header.component.d.ts +5 -2
- package/item/item.component.d.ts +11 -2
- package/list/list.module.d.ts +1 -1
- package/modal/modal/modal-component/modal.component.d.ts +5 -5
- package/modal/modal/services/can-dismiss-modal-guard.d.ts +2 -0
- package/modal/modal/services/index.d.ts +1 -0
- package/modal/modal/services/modal.controller.d.ts +2 -0
- package/modal/modal/services/modal.helper.d.ts +3 -4
- package/modal/modal-navigation.service.d.ts +1 -0
- package/modal/modal.interfaces.d.ts +1 -0
- package/package.json +51 -51
- package/radio/radio.component.d.ts +8 -4
- package/scss/base/_design-tokens.scss +1 -0
- package/scss/themes/design-tokens.scss +1 -0
- package/testing-base/lib/components/mock.avatar.component.d.ts +1 -1
- package/testing-base/lib/components/mock.button.component.d.ts +1 -1
- package/testing-jest/lib/mock-providers.d.ts +28 -28
- package/toggle/toggle.component.d.ts +8 -4
- package/README.md +0 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-modal.mjs","sources":["../../../../libs/designsystem/modal/src/modal-navigation.service.ts","../../../../libs/designsystem/modal/src/modal/action-sheet/action-sheet.component.ts","../../../../libs/designsystem/modal/src/modal/action-sheet/action-sheet.component.html","../../../../libs/designsystem/modal/src/modal/services/action-sheet.helper.ts","../../../../libs/designsystem/modal/src/modal/alert/alert.component.ts","../../../../libs/designsystem/modal/src/modal/alert/alert.component.html","../../../../libs/designsystem/modal/src/modal/services/alert.helper.ts","../../../../libs/designsystem/modal/src/modal.interfaces.ts","../../../../libs/designsystem/modal/src/modal/services/can-dismiss.helper.ts","../../../../libs/designsystem/modal/src/modal-wrapper/config/modal-config.helper.ts","../../../../libs/designsystem/modal/src/modal-wrapper/modal-elements-mover.delegate.ts","../../../../libs/designsystem/modal/src/modal-wrapper/modal-wrapper.component.ts","../../../../libs/designsystem/modal/src/modal-wrapper/modal-wrapper.component.html","../../../../libs/designsystem/modal/src/modal-wrapper/config/drawer-supplementary-action.ts","../../../../libs/designsystem/modal/src/modal-wrapper/compact/modal-compact-wrapper.component.ts","../../../../libs/designsystem/modal/src/modal-wrapper/compact/modal-compact-wrapper.component.html","../../../../libs/designsystem/modal/src/modal/services/modal-animation-builder.service.ts","../../../../libs/designsystem/modal/src/modal/services/modal.helper.ts","../../../../libs/designsystem/modal/src/modal/services/modal.controller.ts","../../../../libs/designsystem/modal/src/modal/modal-component/modal.component.ts","../../../../libs/designsystem/modal/src/modal/modal-component/modal.component.html","../../../../libs/designsystem/modal/src/modal/footer/modal-footer.component.ts","../../../../libs/designsystem/modal/src/modal/footer/modal-footer.component.html","../../../../libs/designsystem/modal/src/kirbydesign-designsystem-modal.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Params, Route, Router, Routes } from '@angular/router';\nimport { EMPTY, firstValueFrom, Observable } from 'rxjs';\nimport { filter, map, pairwise, startWith } from 'rxjs/operators';\n\nimport { Location } from '@angular/common';\nimport { ModalRouteActivation, NavigationData } from './modal.interfaces';\nimport { AlertConfig } from './public_api';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(private router: Router, private route: ActivatedRoute, private location: Location) {}\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 const locationState = this.location.getState() as NavigationData;\n return {\n route: this.getCurrentActivatedRoute(),\n modalData: locationState.navigationData,\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(\n path: string | string[],\n queryParams?: Params,\n alertConfig?: AlertConfig\n ): Promise<boolean> {\n const commands = Array.isArray(path) ? path : path.split('/');\n const childPath = commands.pop();\n const navigationData: NavigationData = { navigationData: { alertConfig } };\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n state: navigationData,\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 let result = Promise.resolve(true);\n const currentActivatedRoute = this.getCurrentActivatedRoute();\n if (currentActivatedRoute.outlet === 'modal') {\n const parentRoute = this.getBackdropRoute(currentActivatedRoute);\n result = this.router.navigate(['./'], {\n relativeTo: parentRoute,\n });\n }\n return result;\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","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 { AlertConfig, 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}\n\nexport interface ModalData {\n alertConfig: AlertConfig;\n}\n\nexport interface NavigationData {\n navigationData: ModalData;\n}\n\nexport interface ModalRouteActivation {\n route: ActivatedRoute;\n modalData: ModalData;\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 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 ) {\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);\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);\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';\nimport { first, fromEvent, takeUntil } from 'rxjs';\nimport { Overlay } from '../../modal.interfaces';\n\nimport {\n ModalCompactWrapperComponent,\n ModalConfig,\n ModalSize,\n ModalWrapperComponent,\n} from '../../modal-wrapper';\n\nimport { AlertConfig } from '../alert/config/alert-config';\nimport { ModalAnimationBuilderService } from './modal-animation-builder.service';\nimport { CanDismissHelper } from './can-dismiss.helper';\nimport { AlertHelper } from './alert.helper';\n\n@Injectable()\nexport class ModalHelper {\n constructor(\n private ionicModalController: ModalController,\n private modalAnimationBuilder: ModalAnimationBuilderService,\n private windowRef: WindowRef,\n private canDismissHelper: CanDismissHelper,\n private alertHelper: AlertHelper\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, alertConfig?: AlertConfig): 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 functionality is kept to prevent breaking changes, but should be depracated in the next major.\n // It will be replaced by the new 'config.canDismiss' callback\n if (alertConfig) {\n console.warn(\n \"This way of passing an alertConfig to the modal will be deprecated in the next major version. We recommend using the 'config.canDismiss' callback instead.\"\n );\n\n // Remembers the modal dismissal response from user to prevent multiple alerts on\n // approval since the callback is invoked more than once when closing.\n let canBeDismissed = false;\n canDismiss = async () => {\n if (!canBeDismissed) {\n canBeDismissed = await this.canDismissHelper.showAlert(alertConfig);\n }\n\n return canBeDismissed;\n };\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 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 && !config.canDismiss && !alertConfig) {\n this.handleBrowserBackButton(ionModal);\n }\n\n this.isModalOpening = false;\n\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n\n private handleBrowserBackButton(modal: HTMLIonModalElement) {\n const popStateEvent$ = fromEvent(this.windowRef.nativeWindow, 'popstate').pipe(first());\n const modalClose$ = fromEvent(modal, 'ionModalDidDismiss');\n\n popStateEvent$.pipe(takeUntil(modalClose$)).subscribe(() => {\n modal.dismiss();\n });\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from '@angular/core';\nimport { ActivatedRoute, Params, Routes, ROUTES } from '@angular/router';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { ModalData, 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$); // TODO: Do we want to close modal when routing out of modal route? Or should the code that navigates close the window??\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 modalRouteActivation.modalData,\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.length > 0) // TODO: This also fires when closing overlay - should we check for isClosing??\n )\n .subscribe(async () => {\n await this.hideAll();\n });\n }\n\n public async showModal(\n config: ModalConfig,\n onClose?: (data?: any) => void,\n alertConfig?: AlertConfig\n ): Promise<void> {\n await this.showAndRegisterOverlay(\n () => this.modalHelper.showModalWindow(config, alertConfig),\n onClose\n );\n }\n\n public async navigateToModal(\n path: string | string[],\n queryParams?: Params,\n alertConfig?: AlertConfig\n ): Promise<boolean> {\n return this.modalNavigationService.navigateToModal(path, queryParams, alertConfig);\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 modalData: ModalData,\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, modalData?.alertConfig),\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.map(async (overlay) => {\n await overlay.dismiss();\n })\n );\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\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 { first, fromEvent, takeUntil } from 'rxjs';\nimport { WindowRef } from '@kirbydesign/designsystem/types';\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, AfterContentInit {\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(private canDismissHelper: CanDismissHelper, private windowRef: WindowRef) {}\n\n ngAfterContentInit(): void {\n this.handleBrowserBackButton(this.modalElement.nativeElement);\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.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 handleBrowserBackButton(modal: HTMLIonModalElement) {\n const popStateEvent$ = fromEvent(this.windowRef.nativeWindow, 'popstate').pipe(first());\n const modalClose$ = fromEvent(modal, 'ionModalDidDismiss');\n\n popStateEvent$.pipe(takeUntil(modalClose$)).subscribe(() => {\n modal.dismiss();\n });\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","i4","i1.AlertHelper","i2","i3","i4.CanDismissHelper","i5","i7","i2.CanDismissHelper","first","takeUntil","i2.ModalAnimationBuilderService","i5.AlertHelper","i1.CanDismissHelper","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 { Location } from '@angular/common';\nimport { ModalRouteActivation, NavigationData } from './modal.interfaces';\nimport { AlertConfig } from './public_api';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(private router: Router, private route: ActivatedRoute, private location: Location) {}\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 const locationState = this.location.getState() as NavigationData;\n return {\n route: this.getCurrentActivatedRoute(),\n modalData: locationState.navigationData,\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(\n path: string | string[],\n queryParams?: Params,\n alertConfig?: AlertConfig\n ): Promise<boolean> {\n const commands = Array.isArray(path) ? [...path] : path.split('/');\n const childPath = commands.pop();\n const navigationData: NavigationData = { navigationData: { alertConfig } };\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n state: navigationData,\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 { AlertConfig, 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 ModalData {\n alertConfig: AlertConfig;\n}\n\nexport interface NavigationData {\n navigationData: ModalData;\n}\n\nexport interface ModalRouteActivation {\n route: ActivatedRoute;\n modalData: ModalData;\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 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 ) {\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);\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);\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';\nimport { AlertConfig } from '../alert/config/alert-config';\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, alertConfig?: AlertConfig): 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 functionality is kept to prevent breaking changes, but should be depracated in the next major.\n // It will be replaced by the new 'config.canDismiss' callback\n if (alertConfig) {\n console.warn(\n \"This way of passing an alertConfig to the modal will be deprecated in the next major version. We recommend using the 'config.canDismiss' callback instead.\"\n );\n\n // Remembers the modal dismissal response from user to prevent multiple alerts on\n // approval since the callback is invoked more than once when closing.\n let canBeDismissed = false;\n canDismiss = async () => {\n if (!canBeDismissed) {\n canBeDismissed = await this.canDismissHelper.showAlert(alertConfig);\n }\n\n return canBeDismissed;\n };\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 { ModalData, 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 modalRouteActivation.modalData,\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(\n config: ModalConfig,\n onClose?: (data?: any) => void,\n alertConfig?: AlertConfig\n ): Promise<void> {\n await this.showAndRegisterOverlay(\n () => this.modalHelper.showModalWindow(config, alertConfig),\n onClose\n );\n }\n\n public async navigateToModal(\n path: string | string[],\n queryParams?: Params,\n alertConfig?: AlertConfig\n ): Promise<boolean> {\n return this.modalNavigationService.navigateToModal(path, queryParams, alertConfig);\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 modalData: ModalData,\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, modalData?.alertConfig),\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","i4","i1.AlertHelper","i2","i3","i4.CanDismissHelper","i5","i7","i2.CanDismissHelper","i2.ModalAnimationBuilderService","i3.ModalNavigationService","i5.CanDismissHelper","IonicModalController","i1.CanDismissHelper","i2.ModalNavigationService","i1.ModalElementsAdvertiser"],"mappings":"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"}
|