@kirbydesign/designsystem 5.2.2 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/kirbydesign-designsystem-testing-base.umd.js +1 -0
- package/bundles/kirbydesign-designsystem-testing-base.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-base.umd.min.js +1 -1
- package/bundles/kirbydesign-designsystem-testing-base.umd.min.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-jasmine.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-jasmine.umd.min.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-jest.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem-testing-jest.umd.min.js.map +1 -1
- package/bundles/kirbydesign-designsystem.umd.js +95 -72
- package/bundles/kirbydesign-designsystem.umd.js.map +1 -1
- package/bundles/kirbydesign-designsystem.umd.min.js +1 -1
- package/bundles/kirbydesign-designsystem.umd.min.js.map +1 -1
- package/esm2015/lib/components/avatar/avatar.component.js +1 -1
- package/esm2015/lib/components/button/button.component.js +1 -1
- package/esm2015/lib/components/calendar/calendar.component.js +2 -2
- package/esm2015/lib/components/card/card-header/card-header.component.js +1 -1
- package/esm2015/lib/components/card/card-header/card-header.component.metadata.json +1 -1
- package/esm2015/lib/components/chart/chart-js/chart-js.service.js +38 -26
- package/esm2015/lib/components/chart/chart-js/chart-js.service.metadata.json +1 -1
- package/esm2015/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.js +1 -1
- package/esm2015/lib/components/chart/chart.component.js +1 -1
- package/esm2015/lib/components/chart/chart.component.metadata.json +1 -1
- package/esm2015/lib/components/chart/chart.types.js +1 -1
- package/esm2015/lib/components/chart/chart.types.metadata.json +1 -1
- package/esm2015/lib/components/chart-deprecated/chart-deprecated.component.js +3 -3
- package/esm2015/lib/components/chart-deprecated/options/areaspline.js +1 -1
- package/esm2015/lib/components/chart-deprecated/options/timeseries.js +1 -1
- package/esm2015/lib/components/dropdown/dropdown.component.js +2 -2
- package/esm2015/lib/components/dropdown/dropdown.component.metadata.json +1 -1
- package/esm2015/lib/components/fab-sheet/fab-sheet.component.js +4 -3
- package/esm2015/lib/components/fab-sheet/fab-sheet.component.metadata.json +1 -1
- package/esm2015/lib/components/flag/flag.component.js +4 -6
- package/esm2015/lib/components/flag/flag.component.metadata.json +1 -1
- package/esm2015/lib/components/form-field/form-field.component.js +1 -1
- package/esm2015/lib/components/form-field/form-field.component.metadata.json +1 -1
- package/esm2015/lib/components/form-field/input/input.component.js +2 -2
- package/esm2015/lib/components/form-field/input/input.component.metadata.json +1 -1
- package/esm2015/lib/components/form-field/input-counter/input-counter.component.js +2 -3
- package/esm2015/lib/components/form-field/input-counter/input-counter.component.metadata.json +1 -1
- package/esm2015/lib/components/form-field/textarea/textarea.component.js +1 -1
- package/esm2015/lib/components/form-field/textarea/textarea.component.metadata.json +1 -1
- package/esm2015/lib/components/icon/icon.component.js +2 -2
- package/esm2015/lib/components/icon/icon.component.metadata.json +1 -1
- package/esm2015/lib/components/item/item.component.js +1 -1
- package/esm2015/lib/components/list/list-item/list-item.component.js +1 -1
- package/esm2015/lib/components/list/list-item/list-item.component.metadata.json +1 -1
- package/esm2015/lib/components/list/list-section-header/list-section-header.component.js +2 -3
- package/esm2015/lib/components/list/list-section-header/list-section-header.component.metadata.json +1 -1
- package/esm2015/lib/components/list/list.component.js +1 -1
- package/esm2015/lib/components/list/list.component.metadata.json +1 -1
- package/esm2015/lib/components/modal/action-sheet/action-sheet.component.js +1 -1
- package/esm2015/lib/components/modal/action-sheet/action-sheet.component.metadata.json +1 -1
- package/esm2015/lib/components/modal/footer/modal-footer.component.js +1 -1
- package/esm2015/lib/components/modal/footer/modal-footer.component.metadata.json +1 -1
- package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.js +2 -2
- package/esm2015/lib/components/modal/modal-wrapper/modal-wrapper.component.metadata.json +1 -1
- package/esm2015/lib/components/modal/services/modal-navigation.service.js +2 -4
- package/esm2015/lib/components/page/page.component.js +5 -13
- package/esm2015/lib/components/page/page.component.metadata.json +1 -1
- package/esm2015/lib/components/popover/popover.component.js +16 -18
- package/esm2015/lib/components/popover/popover.component.metadata.json +1 -1
- package/esm2015/lib/components/radio/radio.component.js +1 -1
- package/esm2015/lib/components/range/range.component.js +1 -1
- package/esm2015/lib/components/range/range.component.metadata.json +1 -1
- package/esm2015/lib/components/reorder-list/reorder-list.component.js +3 -3
- package/esm2015/lib/components/reorder-list/reorder-list.component.metadata.json +1 -1
- package/esm2015/lib/components/segmented-control/segmented-control.component.js +10 -2
- package/esm2015/lib/components/segmented-control/segmented-control.component.metadata.json +1 -1
- package/esm2015/lib/components/slide-button/slide-button.component.js +1 -1
- package/esm2015/lib/components/slide-button/slide-button.component.metadata.json +1 -1
- package/esm2015/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.js +1 -1
- package/esm2015/testing-base/lib/components/mock.accordion-item.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.action-sheet.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.app.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.avatar.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.button.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.calendar.component.js +2 -1
- package/esm2015/testing-base/lib/components/mock.calendar.component.metadata.json +1 -1
- package/esm2015/testing-base/lib/components/mock.card-footer.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.card-header.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.card.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.chart-deprecated.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.chart.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.chart.component.metadata.json +1 -1
- package/esm2015/testing-base/lib/components/mock.checkbox.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.chip.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.divider.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.dropdown.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.empty-state.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.fab-sheet.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.flag.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.form-field-message.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.form-field.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.grid.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.icon.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.input-counter.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.input.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.item-group.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.item-sliding.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.item.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.label.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.list-experimental.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.list-header.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.list-item.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.list-section-header.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.list.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.loading-overlay.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.modal-footer.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.page-footer.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.page.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.popover.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.progress-circle.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.radio-group.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.radio.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.range.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.reorder-list.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.router-outlet.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.section-header.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.segmented-control.component.js +2 -2
- package/esm2015/testing-base/lib/components/mock.slide-button.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.spinner.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.tab-button.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.tabs.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.textarea.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.toggle-button.component.js +1 -1
- package/esm2015/testing-base/lib/components/mock.toggle.component.js +1 -1
- package/esm2015/testing-base/lib/mock-components.js +1 -1
- package/esm2015/testing-jasmine/lib/mock-providers.js +1 -1
- package/esm2015/testing-jest/lib/mock-providers.js +1 -1
- package/fesm2015/kirbydesign-designsystem-testing-base.js +1 -0
- package/fesm2015/kirbydesign-designsystem-testing-base.js.map +1 -1
- package/fesm2015/kirbydesign-designsystem-testing-jasmine.js.map +1 -1
- package/fesm2015/kirbydesign-designsystem-testing-jest.js.map +1 -1
- package/fesm2015/kirbydesign-designsystem.js +88 -83
- package/fesm2015/kirbydesign-designsystem.js.map +1 -1
- package/icons/svg/more.svg +5 -7
- package/kirbydesign-designsystem.metadata.json +1 -1
- package/lib/components/avatar/avatar.component.d.ts +2 -2
- package/lib/components/button/button.component.d.ts +2 -2
- package/lib/components/chart/chart-js/chart-js.service.d.ts +4 -3
- package/lib/components/chart/chart.component.d.ts +3 -3
- package/lib/components/chart/chart.types.d.ts +1 -0
- package/lib/components/dropdown/dropdown.component.d.ts +2 -2
- package/lib/components/form-field/input/input.component.d.ts +1 -1
- package/lib/components/form-field/input-counter/input-counter.component.d.ts +2 -2
- package/lib/components/icon/icon.component.d.ts +1 -1
- package/lib/components/item/item.component.d.ts +1 -1
- package/lib/components/popover/popover.component.d.ts +2 -3
- package/lib/components/segmented-control/segmented-control.component.d.ts +4 -1
- package/package.json +2 -2
- package/polyfills/intersection-observer-polyfill-loader.js +12 -12
- package/polyfills/resize-observer-polyfill-loader.js +1 -1
- package/testing-base/kirbydesign-designsystem-testing-base.metadata.json +1 -1
- 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-base/lib/components/mock.calendar.component.d.ts +1 -0
- package/testing-base/lib/components/mock.chart.component.d.ts +2 -2
- package/testing-base/lib/components/mock.dropdown.component.d.ts +1 -1
- package/testing-base/lib/components/mock.icon.component.d.ts +1 -1
- package/testing-base/lib/components/mock.input.component.d.ts +1 -1
- package/testing-base/lib/components/mock.item.component.d.ts +1 -1
- package/testing-base/lib/components/mock.popover.component.d.ts +1 -1
- package/testing-base/lib/components/mock.segmented-control.component.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem.js","sources":["../../../../libs/designsystem/src/lib/animation/kirby-animation.ts","../../../../libs/designsystem/src/lib/components/router-outlet/router-outlet.component.ts","../../../../libs/designsystem/src/lib/components/modal/action-sheet/action-sheet.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/action-sheet.helper.ts","../../../../libs/designsystem/src/lib/types/window-ref.ts","../../../../libs/designsystem/src/lib/components/modal/alert/alert.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/alert.helper.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal-navigation.service.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.interfaces.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/config/modal-config.helper.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.ts","../../../../libs/designsystem/src/lib/helpers/platform.service.ts","../../../../libs/designsystem/src/lib/components/icon/icon-settings.ts","../../../../libs/designsystem/src/lib/components/icon/icon-registry.service.ts","../../../../libs/designsystem/src/lib/components/icon/kirby-icon-settings.ts","../../../../libs/designsystem/src/lib/components/icon/icon.component.ts","../../../../libs/designsystem/src/lib/components/button/button.component.ts","../../../../libs/designsystem/src/lib/components/shared/resize-observer/resize-observer.factory.ts","../../../../libs/designsystem/src/lib/components/shared/resize-observer/resize-observer.service.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/modal-wrapper.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal-animation-builder.service.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.helper.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.controller.ts","../../../../libs/designsystem/src/lib/components/app/app.component.ts","../../../../libs/designsystem/src/lib/components/app/app.module.ts","../../../../libs/designsystem/src/lib/components/avatar/avatar.component.ts","../../../../libs/designsystem/src/lib/components/card/card.component.ts","../../../../libs/designsystem/src/lib/components/card/card-footer/card-footer.component.ts","../../../../libs/designsystem/src/lib/components/card/card-header/card-header.component.ts","../../../../libs/designsystem/src/lib/helpers/merge-deep.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated-helper.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated-type.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/activitygauge.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/areaspline.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/bar.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/column.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/donut.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/timeseries.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated.component.ts","../../../../libs/designsystem/src/lib/components/chart/chart.types.ts","../../../../libs/designsystem/src/lib/components/shared/component-loader.directive.ts","../../../../libs/designsystem/src/lib/helpers/deep-copy.ts","../../../../libs/designsystem/src/lib/helpers/element-has-ancestor.ts","../../../../libs/designsystem/src/lib/helpers/index.ts","../../../../libs/designsystem/src/lib/components/chart/configs/annotations.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/interaction-functions-extensions.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/type.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/chart-config.service.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.ts","../../../../libs/designsystem/src/lib/components/chart/configs/shared.utils.ts","../../../../libs/designsystem/src/lib/components/chart/configs/global-defaults.config.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/configured-chart-js.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/chart-js.service.ts","../../../../libs/designsystem/src/lib/components/chart/chart.component.ts","../../../../libs/designsystem/src/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.ts","../../../../libs/designsystem/src/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.ts","../../../../libs/designsystem/src/lib/components/calendar/helpers/calendar.helper.ts","../../../../libs/designsystem/src/lib/components/calendar/calendar.component.ts","../../../../libs/designsystem/src/lib/components/item-sliding/item-sliding.component.ts","../../../../libs/designsystem/src/lib/helpers/unique-id-generator.helper.ts","../../../../libs/designsystem/src/lib/components/checkbox/checkbox.component.ts","../../../../libs/designsystem/src/lib/components/chip/chip.component.ts","../../../../libs/designsystem/src/lib/components/divider/divider.component.ts","../../../../libs/designsystem/src/lib/components/item/item.component.ts","../../../../libs/designsystem/src/lib/components/list/list.directive.ts","../../../../libs/designsystem/src/lib/components/popover/popover.component.ts","../../../../libs/designsystem/src/lib/components/dropdown/dropdown.types.ts","../../../../libs/designsystem/src/lib/components/dropdown/keyboard-handler.service.ts","../../../../libs/designsystem/src/lib/components/dropdown/dropdown.component.ts","../../../../libs/designsystem/src/lib/components/empty-state/empty-state.component.ts","../../../../libs/designsystem/src/lib/components/radio/radio.component.ts","../../../../libs/designsystem/src/lib/components/radio/radio-group/radio-group.component.ts","../../../../libs/designsystem/src/lib/components/form-field/input-counter/input-counter.component.ts","../../../../libs/designsystem/src/lib/components/form-field/input/input.component.ts","../../../../libs/designsystem/src/lib/components/form-field/textarea/textarea.component.ts","../../../../libs/designsystem/src/lib/components/form-field/form-field.component.ts","../../../../libs/designsystem/src/lib/components/form-field/form-field-message/form-field-message.component.ts","../../../../libs/designsystem/src/lib/components/form-field/directives/date/date-input.directive.ts","../../../../libs/designsystem/src/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.ts","../../../../libs/designsystem/src/lib/components/fab-sheet/fab-sheet.component.ts","../../../../libs/designsystem/src/lib/scss/scss-helper.ts","../../../../libs/designsystem/src/lib/components/grid/breakpoint-helper.service.ts","../../../../libs/designsystem/src/lib/components/grid/grid.component.ts","../../../../libs/designsystem/src/lib/components/grid/grid-card-configuration.ts","../../../../libs/designsystem/src/lib/components/icon/icon.module.ts","../../../../libs/designsystem/src/lib/components/item/label/label.component.ts","../../../../libs/designsystem/src/lib/components/item/item.module.ts","../../../../libs/designsystem/src/lib/components/item-group/item-group.component.ts","../../../../libs/designsystem/src/lib/components/spinner/spinner.component.ts","../../../../libs/designsystem/src/lib/components/loading-overlay/loading-overlay.service.ts","../../../../libs/designsystem/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../../libs/designsystem/src/lib/components/list/directives/infinite-scroll.directive.ts","../../../../libs/designsystem/src/lib/components/list/helpers/list-helper.ts","../../../../libs/designsystem/src/lib/components/list/pipes/group-by.pipe.ts","../../../../libs/designsystem/src/lib/components/list/list.component.ts","../../../../libs/designsystem/src/lib/components/list/list-header/list-header.component.ts","../../../../libs/designsystem/src/lib/components/list/list-section-header/list-section-header.component.ts","../../../../libs/designsystem/src/lib/components/list/list-item/list-item.component.ts","../../../../libs/designsystem/src/lib/components/list/directives/list-item-color.directive.ts","../../../../libs/designsystem/src/lib/components/list/list-experimental/list-experimental.component.ts","../../../../libs/designsystem/src/lib/components/reorder-list/reorder-event.ts","../../../../libs/designsystem/src/lib/components/reorder-list/reorder-list.component.ts","../../../../libs/designsystem/src/lib/components/modal/footer/modal-footer.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tab-button/tab-button.events.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.service.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.component.ts","../../../../libs/designsystem/src/lib/components/page/page.component.ts","../../../../libs/designsystem/src/lib/components/page/page-footer/page-footer.component.ts","../../../../libs/designsystem/src/lib/helpers/line-clamp-helper.ts","../../../../libs/designsystem/src/lib/directives/fit-heading/fit-heading.directive.ts","../../../../libs/designsystem/src/lib/directives/fit-heading/fit-heading.module.ts","../../../../libs/designsystem/src/lib/components/spinner/spinner.module.ts","../../../../libs/designsystem/src/lib/components/page/page.module.ts","../../../../libs/designsystem/src/lib/components/router-outlet/router-outlet.module.ts","../../../../libs/designsystem/src/lib/components/section-header/section-header.component.ts","../../../../libs/designsystem/src/lib/components/segmented-control/segmented-control.component.ts","../../../../libs/designsystem/src/lib/components/slide-button/slide-button.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tab-button/tab-button.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.module.ts","../../../../libs/designsystem/src/lib/components/toast/services/toast.helper.ts","../../../../libs/designsystem/src/lib/components/toast/services/toast.controller.ts","../../../../libs/designsystem/src/lib/components/toggle/toggle.component.ts","../../../../libs/designsystem/src/lib/components/progress-circle/progress-circle.component.ts","../../../../libs/designsystem/src/lib/components/flag/flag.component.ts","../../../../libs/designsystem/src/lib/components/slides/slides.component.ts","../../../../libs/designsystem/src/lib/components/toggle-button/toggle-button.component.ts","../../../../libs/designsystem/src/lib/components/accordion/accordion.directive.ts","../../../../libs/designsystem/src/lib/components/accordion/accordion-item.component.ts","../../../../libs/designsystem/src/lib/components/range/range.component.ts","../../../../libs/designsystem/src/lib/directives/key-handler/key-handler.directive.ts","../../../../libs/designsystem/src/lib/directives/theme-color/theme-color.directive.ts","../../../../libs/designsystem/src/lib/components/angular-component-lib/utils.ts","../../../../libs/designsystem/src/lib/components/web-component-proxies.component.ts","../../../../libs/designsystem/src/lib/components/chart/chart.module.ts","../../../../libs/designsystem/src/lib/components/list/list.module.ts","../../../../libs/designsystem/src/lib/components/progress-circle/progress-circle-ring.component.ts","../../../../libs/designsystem/src/lib/components/toggle-button/toggle-button.module.ts","../../../../libs/designsystem/src/lib/custom-elements-initializer.ts","../../../../libs/designsystem/src/lib/directives/element-as-button/element-as-button.directive.ts","../../../../libs/designsystem/src/lib/directives/modal-router-link/modal-router-link.directive.ts","../../../../libs/designsystem/src/lib/kirby.module.ts","../../../../libs/designsystem/src/kirbydesign-designsystem.ts"],"sourcesContent":["import { DesignTokenHelper } from '@kirbydesign/core';\n\nexport namespace KirbyAnimation {\n export enum Duration {\n // Duration in milliseconds\n QUICK = parseInt(DesignTokenHelper.transitionDuration('quick')),\n SHORT = parseInt(DesignTokenHelper.transitionDuration('short')),\n LONG = parseInt(DesignTokenHelper.transitionDuration('long')),\n EXTRA_LONG = parseInt(DesignTokenHelper.transitionDuration('extraLong')),\n }\n export const Easing = DesignTokenHelper.transitionEasings();\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-router-outlet',\n templateUrl: './router-outlet.component.html',\n styleUrls: ['./router-outlet.component.scss'],\n})\nexport class RouterOutletComponent {\n @Input() main: boolean;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { ActionSheetItem } from './config/action-sheet-item';\n\n@Component({\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","import { EventEmitter, Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\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\nimport { Overlay } from './modal.interfaces';\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 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 { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n get nativeWindow(): any {\n return window;\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { WindowRef } from '../../../types/window-ref';\n\n@Component({\n selector: 'kirby-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n // tslint:disable-next-line: 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 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: string;\n @Input() okBtnText: string;\n @Input() okBtnIsDestructive: boolean;\n @Input() cancelBtnText: 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","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { AlertConfig } from '../alert/config/alert-config';\nimport { AlertComponent } from '../alert/alert.component';\nimport { Overlay } from './modal.interfaces';\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 okBtnText: this.getOkBtnText(config),\n cancelBtnText: this.getCancelBtnText(config),\n okBtnIsDestructive: this.getOkBtnIsDestructive(config),\n iconName: config.icon && config.icon.name,\n iconThemeColor: config.icon && config.icon.themeColor,\n };\n }\n\n private getOkBtnText(config: AlertConfig) {\n let text: string;\n if (config.okBtnText) {\n console.warn(\n '`okBtnText` will be deprecated on next major version. Please use `okBtn` instead.'\n );\n text = config.okBtnText;\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 private getCancelBtnText(config: AlertConfig) {\n if (config.cancelBtnText) {\n console.warn(\n '`cancelBtnText` will be deprecated on next major version. Please use `cancelBtn` instead.'\n );\n }\n return config.cancelBtn || config.cancelBtnText;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Params, Route, Router, Routes } from '@angular/router';\nimport { EMPTY, Observable } from 'rxjs';\nimport { filter, first, map, pairwise, startWith } from 'rxjs/operators';\n\nimport { ModalRouteActivation } from './modal.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(private router: Router, private route: ActivatedRoute) {}\n\n isModalRoute(url: string): boolean {\n return url.includes('(modal:');\n }\n\n private getCurrentActivatedRoute(): ActivatedRoute {\n let childRoute = this.route.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n return childRoute;\n }\n\n private async getModalRoutes(\n routeConfig: Routes[],\n moduleRootRoutePath?: string\n ): Promise<string[]> {\n const flattenedRoutes: Routes = [].concat(...routeConfig);\n let modalRoutes: string[] = [];\n const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);\n if (moduleRootPaths) {\n modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);\n }\n return modalRoutes;\n }\n\n private async getModuleRootPath(routes: Routes, moduleRootRoutePath?: string): Promise<string[]> {\n if (moduleRootRoutePath) {\n const trimmedPaths = moduleRootRoutePath\n .trim()\n .split('/')\n .filter((path) => !!path);\n const rootPath = [''];\n return rootPath.concat(trimmedPaths);\n }\n\n const currentRoutePaths = await this.getCurrentRoutePaths();\n const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);\n return moduleRootPaths;\n }\n\n private async getCurrentRoutePaths(): Promise<string[]> {\n const rootPath = [''];\n const currentNavigation = this.router.getCurrentNavigation();\n\n if (!this.router.navigated && !currentNavigation) {\n // If router hasn't navigated yet and we are not in the middle of navigating, assume root:\n return rootPath;\n }\n\n if (currentNavigation) {\n // Wait for current navigation to finish:\n await this.navigationEndListener$.pipe(first()).toPromise();\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, [''])\n .sort()\n .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 this.navigationEndListener$.pipe(first()).toPromise();\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 route: this.getCurrentActivatedRoute(),\n isNewModal: this.isNewModalWindow(navigationEnd),\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 filter(([prevNavigation, _]) =>\n this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)\n ), // Only emit if previous route was modal\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 (let 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 return { activated$: EMPTY, deactivated$: EMPTY };\n }\n\n async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n const commands = Array.isArray(path) ? path : path.split('/');\n const childPath = commands.pop();\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n return result;\n }\n\n async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.router.navigate([relativePath], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n }\n\n async navigateOutOfModalOutlet(): Promise<boolean> {\n 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 { ActivatedRoute } from '@angular/router';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\n\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 ModalRouteActivation {\n route: ActivatedRoute;\n isNewModal: boolean;\n}\n\nexport abstract class Modal {\n didPresent: Promise<void>;\n willClose: Promise<void>;\n close: (data?: any) => Promise<void>;\n scrollToTop: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollToBottom: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollDisabled: boolean;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const COMPONENT_PROPS = new InjectionToken<string>('componentProps');\n","import { Component, ElementRef, HostListener, Injector, Input, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { WindowRef } from '../../../../types/window-ref';\nimport { Modal } from '../../services/modal.interfaces';\nimport { ModalConfig } from '../config/modal-config';\nimport { COMPONENT_PROPS } from '../config/modal-config.helper';\n\n@Component({\n selector: 'kirby-modal-compact-wrapper',\n templateUrl: './modal-compact-wrapper.component.html',\n styleUrls: ['./modal-compact-wrapper.component.scss'],\n providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }],\n // tslint:disable-next-line: 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 scrollY: number = Math.abs(this.windowRef.nativeWindow.scrollY);\n scrollDisabled = false;\n @Input() config: ModalConfig;\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 = this.ionModalDidPresent.toPromise();\n readonly willClose = this.ionModalWillDismiss.toPromise();\n\n constructor(\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private windowRef: WindowRef\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 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","import { Injectable } from '@angular/core';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { WindowRef } from '../types/window-ref';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n constructor(private windowRef: WindowRef) {}\n\n isTouch() {\n const isTouchDeviceQuery = '(pointer: coarse)'; // No check for `hover: none`, as Samsung Galaxy will return false on `hover: none` media query\n return this.windowRef.nativeWindow.matchMedia(isTouchDeviceQuery).matches;\n }\n\n isPhabletOrBigger() {\n const query = `(min-width: ${DesignTokenHelper.breakpoints.medium})`;\n return this.windowRef.nativeWindow.matchMedia(query).matches;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface Icon {\n name: string;\n svg?: string;\n}\n\nexport interface IconSettings {\n icons: Icon[];\n}\n\nexport const ICON_SETTINGS = new InjectionToken<IconSettings>('IconSettings');\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { Icon, IconSettings, ICON_SETTINGS } from './icon-settings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private iconRegistry = new Map<string, string>();\n\n constructor(@Optional() @Inject(ICON_SETTINGS) iconSettings?: IconSettings) {\n if (iconSettings) {\n this.addIcons(iconSettings.icons);\n console.warn(`Use of IconSettings is deprecated, use IconRegistryService instead`);\n }\n }\n\n public addIcon(iconName: string, svgPath: string): void {\n if (!this.iconRegistry.has(iconName)) {\n this.iconRegistry.set(iconName, svgPath);\n } else {\n console.warn(`Icon with name: \"${iconName}\" already exists`);\n }\n }\n\n public addIcons(icons: Icon[]): void {\n if (!icons) {\n console.error('Icons not defined');\n return;\n }\n icons.forEach((icon) => {\n this.addIcon(icon.name, icon.svg);\n });\n }\n\n getIcons(): Icon[] {\n return [...this.iconRegistry].map(\n (keyValPair) => ({ name: keyValPair[0], svg: keyValPair[1] } as Icon)\n );\n }\n\n getIcon(name: string): Icon {\n const svg = this.iconRegistry.get(name);\n return svg ? { name, svg } : undefined;\n }\n}\n","import { IconSettings } from './icon-settings';\n\n// tslint:disable:prettier\nexport const kirbyIconSettings: IconSettings = {\n icons: [\n { name: 'accounts-outline', svg: 'assets/kirby/icons/svg/accounts-outline.svg' },\n { name: 'accounts', svg: 'assets/kirby/icons/svg/accounts.svg' },\n { name: 'add', svg: 'assets/kirby/icons/svg/add.svg' },\n { name: 'remove', svg: 'assets/kirby/icons/svg/remove.svg' },\n { name: 'unsubscribe', svg: 'assets/kirby/icons/svg/unsubscribe.svg' },\n { name: 'arrow-back', svg: 'assets/kirby/icons/svg/arrow-back.svg' },\n { name: 'arrow-down', svg: 'assets/kirby/icons/svg/arrow-down.svg' },\n { name: 'arrow-more', svg: 'assets/kirby/icons/svg/arrow-more.svg' },\n { name: 'arrow-up', svg: 'assets/kirby/icons/svg/arrow-up.svg' },\n { name: 'attach', svg: 'assets/kirby/icons/svg/attach.svg' },\n { name: 'backspace', svg: 'assets/kirby/icons/svg/backspace.svg' },\n { name: 'calendar', svg: 'assets/kirby/icons/svg/calendar.svg' },\n { name: 'camera', svg: 'assets/kirby/icons/svg/camera.svg' },\n { name: 'checkbox-outline', svg: 'assets/kirby/icons/svg/checkbox-outline.svg' },\n { name: 'checkbox', svg: 'assets/kirby/icons/svg/checkbox.svg' },\n { name: 'checkmark-selected', svg: 'assets/kirby/icons/svg/checkmark-selected.svg' },\n { name: 'close', svg: 'assets/kirby/icons/svg/close.svg' },\n { name: 'cog', svg: 'assets/kirby/icons/svg/cog.svg' },\n { name: 'copy', svg: 'assets/kirby/icons/svg/copy.svg' },\n { name: 'flag', svg: 'assets/kirby/icons/svg/flag.svg' },\n { name: 'edit', svg: 'assets/kirby/icons/svg/edit.svg' },\n { name: 'filter', svg: 'assets/kirby/icons/svg/filter.svg' },\n { name: 'flash-off', svg: 'assets/kirby/icons/svg/flash-off.svg' },\n { name: 'flash', svg: 'assets/kirby/icons/svg/flash.svg' },\n { name: 'moneybag', svg: 'assets/kirby/icons/svg/moneybag.svg' },\n { name: 'help', svg: 'assets/kirby/icons/svg/help.svg' },\n { name: 'home', svg: 'assets/kirby/icons/svg/home.svg' },\n { name: 'inbox', svg: 'assets/kirby/icons/svg/inbox.svg' },\n { name: 'inbox-outline', svg: 'assets/kirby/icons/svg/inbox-outline.svg' },\n { name: 'information', svg: 'assets/kirby/icons/svg/information.svg' },\n { name: 'investment', svg: 'assets/kirby/icons/svg/investment.svg' },\n { name: 'kirby', svg: 'assets/kirby/icons/svg/kirby.svg' },\n { name: 'link', svg: 'assets/kirby/icons/svg/link.svg' },\n { name: 'log-out', svg: 'assets/kirby/icons/svg/log-out.svg' },\n { name: 'menu-outline', svg: 'assets/kirby/icons/svg/menu-outline.svg' },\n { name: 'menu', svg: 'assets/kirby/icons/svg/menu.svg' },\n { name: 'misc', svg: 'assets/kirby/icons/svg/misc.svg' },\n { name: 'more', svg: 'assets/kirby/icons/svg/more.svg' },\n { name: 'move', svg: 'assets/kirby/icons/svg/move.svg' },\n { name: 'payment-card', svg: 'assets/kirby/icons/svg/payment-card.svg' },\n { name: 'pension', svg: 'assets/kirby/icons/svg/pension.svg' },\n { name: 'person-outline', svg: 'assets/kirby/icons/svg/person-outline.svg' },\n { name: 'person', svg: 'assets/kirby/icons/svg/person.svg' },\n { name: 'qr', svg: 'assets/kirby/icons/svg/QR.svg' },\n { name: 'search', svg: 'assets/kirby/icons/svg/search.svg' },\n { name: 'share', svg: 'assets/kirby/icons/svg/share.svg' },\n { name: 'sort', svg: 'assets/kirby/icons/svg/sort.svg' },\n { name: 'support', svg: 'assets/kirby/icons/svg/support.svg' },\n { name: 'swap', svg: 'assets/kirby/icons/svg/swap.svg' },\n { name: 'trash', svg: 'assets/kirby/icons/svg/trash.svg' },\n { name: 'foreign-payment', svg: 'assets/kirby/icons/svg/foreign-payment.svg' },\n { name: 'clock', svg: 'assets/kirby/icons/svg/clock.svg' },\n { name: 'verify', svg: 'assets/kirby/icons/svg/verify.svg' },\n { name: 'warning', svg: 'assets/kirby/icons/svg/warning.svg' },\n { name: 'write-message', svg: 'assets/kirby/icons/svg/write-message.svg' },\n { name: 'reorder', svg: 'assets/kirby/icons/svg/reorder.svg' },\n ],\n};\n\nexport const defaultIcons = kirbyIconSettings.icons.map((icon) => icon.name);\n","import { Component, HostBinding, Input, OnChanges, SimpleChanges } from '@angular/core';\n\nimport { IconRegistryService } from './icon-registry.service';\nimport { Icon } from './icon-settings';\nimport { kirbyIconSettings } from './kirby-icon-settings';\n\nexport enum IconSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n selector: 'kirby-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n // tslint:disable-next-line: no-host-metadata-property\n host: { '[class.kirby-icon]': 'true' },\n})\nexport class IconComponent implements OnChanges {\n defaultIcon: Icon = this.findIcon(kirbyIconSettings.icons, 'cog');\n private _icon = (this.icon = this.defaultIcon);\n @HostBinding('class')\n @Input()\n size: IconSize;\n\n @Input() name: string;\n @Input() customName: string;\n\n get icon(): Icon {\n return this._icon;\n }\n\n set icon(icon: Icon) {\n // If icon are not found, set default icon\n if (!icon && (this.name || this.customName)) {\n this.warnAboutMissingIcon();\n\n icon = this.defaultIcon;\n\n // If default icon are not found\n if (!icon) {\n console.warn('Default icon was not found.');\n return;\n }\n }\n\n // Set icon if it's found\n if (icon) {\n this._icon = icon;\n }\n }\n\n private warnAboutMissingIcon(): void {\n if (this.customName) {\n console.warn(`Custom icon with name \"${this.customName}\" was not found. \n Do you have a typo in 'customName' or\n forgot to configure the custom icon through the 'IconRegistryService'?`);\n } else {\n console.warn(`Built-in icon with name \"${this.name}\" was not found. \n Do you have a typo in 'name' or\n did you mean to use a custom icon? If so, please use: \n <kirby-icon customName=\"${this.name}\"></kirby-icon>`);\n }\n }\n\n constructor(private iconRegistryService: IconRegistryService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.name && changes.name.currentValue) {\n this.icon = this.findIcon(kirbyIconSettings.icons, changes.name.currentValue);\n } else if (changes.customName && changes.customName.currentValue) {\n this.icon = this.iconRegistryService.getIcon(changes.customName.currentValue);\n }\n }\n\n private findIcon(icons, name: string): Icon {\n return icons.find((icon) => icon.name === name);\n }\n}\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Input,\n} from '@angular/core';\n\nimport { NotificationColor } from '@kirbydesign/core';\n\nimport { IconComponent } from '../icon/icon.component';\n\nexport enum ButtonSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'button[kirby-button],Button[kirby-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent implements AfterContentInit {\n @HostBinding('class.attention-level1')\n isAttentionLevel1: boolean = true; // Default\n @HostBinding('class.attention-level2')\n isAttentionLevel2: boolean;\n @HostBinding('class.attention-level3')\n isAttentionLevel3: boolean;\n @HostBinding('class.attention-level4')\n isAttentionLevel4: boolean;\n @HostBinding('class.destructive')\n destructive: boolean = false; // Default\n\n @HostBinding('class.floating')\n public get isButtonFloating(): boolean {\n return this.isFloating;\n }\n\n @HostBinding('class.icon-only')\n public get isIconOnly(): boolean {\n return !!this.icon && !this.hasText;\n }\n private _isIconLeft = false;\n @HostBinding('class.icon-left')\n public get isIconLeft() {\n return this._isIconLeft;\n }\n private _isIconRight = false;\n @HostBinding('class.icon-right')\n public get isIconRight() {\n return this._isIconRight;\n }\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size].filter((cssClass) => !!cssClass);\n }\n\n @Input() set attentionLevel(level: '1' | '2' | '3' | '4') {\n this.isAttentionLevel1 = level === '1';\n this.isAttentionLevel2 = level === '2';\n this.isAttentionLevel3 = level === '3';\n this.isAttentionLevel4 = level === '4';\n }\n @Input() set isDestructive(state: boolean) {\n this.destructive = state;\n }\n @Input()\n themeColor: NotificationColor;\n @Input() expand: 'full' | 'block';\n @Input() isFloating: boolean = false;\n @Input()\n size: ButtonSize = ButtonSize.MD;\n\n @ContentChild(IconComponent) icon: IconComponent;\n @ContentChild(IconComponent, { read: ElementRef })\n iconElementRef: ElementRef<HTMLElement>;\n private hasText = false;\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n ngAfterContentInit(): void {\n this.hasText = !!this.elementRef.nativeElement.textContent;\n if (this.iconElementRef !== undefined && this.hasText) {\n this._isIconLeft =\n this.elementRef.nativeElement.firstChild === this.iconElementRef.nativeElement;\n this._isIconRight = !this._isIconLeft;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ResizeObserver } from './types/resize-observer';\nimport { ResizeObserverCallback } from './types/resize-observer-callback';\n\ndeclare var ResizeObserver: {\n prototype: ResizeObserver;\n new (callback: ResizeObserverCallback): ResizeObserver;\n};\n\n/**\n * Factory that creates a new ResizeObserver and allows us to stub it out in unit tests.\n * @docs-private\n */\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverFactory {\n create(callback: ResizeObserverCallback): ResizeObserver | null {\n return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);\n }\n}\n","import { ElementRef, Injectable, OnDestroy, NgZone } from '@angular/core';\n\nimport { ResizeObserver } from './types/resize-observer';\nimport { ResizeObserverEntry } from './types/resize-observer-entry';\nimport { ResizeObserverFactory } from './resize-observer.factory';\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverService implements OnDestroy {\n // IMPORTANT: Keeps track of the existing ResizeObserver so it can be reused for performance.\n // See: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/z6ienONUb5A/F5-VcUZtBAAJ\n private observer: ResizeObserver | null;\n private observedElements = new WeakMap<Element, (entry: ResizeObserverEntry) => void>();\n\n constructor(private _resizeObserverFactory: ResizeObserverFactory, private zone: NgZone) {\n this.observer = this._resizeObserverFactory.create((entries) => this.handleResize(entries));\n }\n\n observe(\n elementOrRef: Element | ElementRef<Element>,\n action: (entry: ResizeObserverEntry) => void\n ): void {\n const element = elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n if (!this.observedElements.has(element)) {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.observe(element);\n });\n }\n this.observedElements.set(element, action);\n }\n }\n\n ngOnDestroy() {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.disconnect();\n });\n }\n this.observedElements = null;\n }\n\n unobserve(elementOrRef: Element | ElementRef<Element>) {\n const element = elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n if (this.observedElements.has(element)) {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.unobserve(element);\n });\n }\n this.observedElements.delete(element);\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const action = this.observedElements.get(entry.target);\n if (action) {\n action(entry);\n }\n });\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ElementRef,\n HostBinding,\n HostListener,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { debounceTime, first, takeUntil } from 'rxjs/operators';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { PlatformService } from '../../../helpers/platform.service';\nimport { WindowRef } from '../../../types/window-ref';\nimport { ButtonComponent } from '../../button/button.component';\nimport { ResizeObserverService } from '../../shared/resize-observer/resize-observer.service';\nimport { ResizeObserverEntry } from '../../shared/resize-observer/types/resize-observer-entry';\nimport { Modal } from '../services/modal.interfaces';\n\nimport { ModalConfig } from './config/modal-config';\nimport { COMPONENT_PROPS } from './config/modal-config.helper';\n\n@Component({\n selector: 'kirby-modal-wrapper',\n templateUrl: './modal-wrapper.component.html',\n styleUrls: ['./modal-wrapper.component.scss'],\n providers: [{ provide: Modal, useExisting: ModalWrapperComponent }],\n})\nexport class ModalWrapperComponent implements Modal, AfterViewInit, OnInit, OnDestroy {\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 set scrollDisabled(disabled: boolean) {\n this.ionContent.scrollY = !disabled;\n }\n\n @Input() config: ModalConfig;\n componentPropsInjector: Injector;\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 }) private ionContentElement: ElementRef<\n HTMLIonContentElement\n >;\n @ViewChild(IonHeader, { static: true, read: ElementRef }) private ionHeaderElement: ElementRef<\n HTMLIonHeaderElement\n >;\n @ViewChild(IonToolbar, { static: true, read: ElementRef }) private ionToolbarElement: ElementRef<\n HTMLIonToolbarElement\n >;\n @ViewChild(IonTitle, { static: true, read: ElementRef }) private ionTitleElement: ElementRef<\n HTMLIonTitleElement\n >;\n @ViewChild(RouterOutlet, { static: true }) private routerOutlet: RouterOutlet;\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 = this.ionModalDidPresent.toPromise();\n private readonly ionModalWillDismiss = new Subject<void>();\n readonly willClose = this.ionModalWillDismiss.toPromise();\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 get mutationObserver(): MutationObserver {\n if (!this._mutationObserver) {\n this._mutationObserver = this.createEmbeddedElementsMutationObserver();\n }\n return this._mutationObserver;\n }\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 private destroy$ = new Subject();\n\n @HostBinding('class.drawer')\n get _isDrawer() {\n return this.config.flavor === 'drawer';\n }\n\n willClose$ = this.ionModalWillDismiss.pipe(first());\n\n constructor(\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private resizeObserverService: ResizeObserverService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private windowRef: WindowRef,\n private platform: PlatformService\n ) {\n this.setViewportHeight();\n this.observeViewportResize();\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.initializeResizeModalToModalWrapper();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n }\n\n private initializeResizeModalToModalWrapper() {\n if (this.config.flavor === 'drawer' && this.config.interactWithBackground) {\n merge(this.ionModalDidPresent, this.viewportResize$)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n // wait for template to render\n setTimeout(() => {\n const domRect = this.elementRef.nativeElement.getBoundingClientRect();\n const document = this.windowRef.nativeWindow.document.documentElement;\n const right = document.clientWidth - domRect.right;\n this.renderer.setStyle(this.ionModalElement, 'top', `${domRect.top}px`);\n this.renderer.setStyle(this.ionModalElement, 'left', `${domRect.left}px`);\n this.renderer.setStyle(this.ionModalElement, 'right', `${right}px`);\n });\n });\n }\n }\n\n private initializeSizing() {\n if (this.config.size === 'full-height') return;\n this.patchScrollElementSize();\n this.observeHeaderResize();\n this.observeModalFullHeight();\n }\n\n private initializeModalRoute() {\n if (this.config.modalRoute) {\n this.onSiblingModalRouteActivated(this.config.siblingModalRouteActivated$);\n // Load component from modal-route inside router-outlet:\n this.routerOutlet.activateWith(this.config.modalRoute, this.componentFactoryResolver);\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.mutationObserver.disconnect();\n this.routerOutlet.deactivate();\n this.clearEmbeddedElements();\n }\n this.routerOutlet.activateWith(route, this.componentFactoryResolver);\n this.checkForEmbeddedElements();\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.elementRef.nativeElement.closest<HTMLElement>('.modal-wrapper');\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 ngAfterViewInit(): void {\n if (this.toolbarButtonsQuery) {\n this.toolbarButtons = this.toolbarButtonsQuery.map((buttonRef) => buttonRef.nativeElement);\n }\n this.checkForEmbeddedElements();\n }\n\n private checkForEmbeddedElements() {\n this.moveEmbeddedElements();\n this.observeEmbeddedElements();\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 moveEmbeddedElements() {\n const parentElement = this.getEmbeddedComponentElement();\n if (parentElement) {\n Object.entries(this.elementToParentMap).forEach(([tagName, getNewParent]) => {\n const embeddedElement = parentElement.querySelector<HTMLElement>(tagName);\n if (embeddedElement) {\n this.moveChild(embeddedElement, getNewParent());\n }\n });\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 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.getEmbeddedFooterElement();\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\n private readonly elementToParentMap: { [key: string]: () => HTMLElement } = {\n 'KIRBY-MODAL-FOOTER': () => this.elementRef.nativeElement,\n 'KIRBY-PAGE-TITLE': () => this.ionTitleElement.nativeElement,\n 'KIRBY-PAGE-PROGRESS': () => this.ionToolbarElement.nativeElement,\n };\n\n private clearEmbeddedElements() {\n Object.entries(this.elementToParentMap).forEach(([tagName, getParent]) => {\n const embeddedElement = getParent().querySelector<HTMLElement>(`:scope > ${tagName}`);\n this.removeChild(embeddedElement);\n });\n }\n\n private getEmbeddedComponentElement() {\n return !!this.config.modalRoute\n ? this.ionContentElement.nativeElement.lastElementChild\n : this.ionContentElement.nativeElement.firstElementChild;\n }\n\n private getEmbeddedFooterElement() {\n return this.elementRef.nativeElement.querySelector<HTMLElement>('kirby-modal-footer');\n }\n\n private moveChild(child: Element, newParent: Element) {\n this.renderer.removeChild(child.parentElement, child);\n this.renderer.appendChild(newParent, child);\n if (child.tagName === 'KIRBY-MODAL-FOOTER') {\n this.resizeObserverService.observe(child, (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\n private removeChild(child?: Element) {\n if (!!child) {\n this.renderer.removeChild(child.parentElement, child);\n }\n }\n\n private observeEmbeddedElements() {\n const parentElement = this.getEmbeddedComponentElement();\n this.mutationObserver.observe(parentElement, {\n childList: true, // Listen for addition or removal of child nodes\n });\n }\n\n private createEmbeddedElementsMutationObserver(): MutationObserver {\n const observedElements = Object.keys(this.elementToParentMap);\n const callback = (mutations: MutationRecord[]) => {\n const addedNodes = mutations\n .filter((mutation) => mutation.type === 'childList') // Filter for mutation to the tree of nodes\n .map((mutation) => {\n // Only check for addedNodes as removal is handled by the Angular renderer:\n return Array.from(mutation.addedNodes).filter((node) =>\n observedElements.includes(node.nodeName)\n );\n });\n\n const addedElements = Array.prototype\n .concat(...addedNodes)\n .filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n addedElements.forEach((addedElement) => {\n const newParentElement = this.elementToParentMap[addedElement.nodeName]();\n // Move embedded element out of content and append to new parent:\n this.moveChild(addedElement, newParentElement);\n });\n };\n return new MutationObserver(callback);\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.renderer.addClass(entry.target, 'full-height');\n } else {\n this.renderer.removeClass(entry.target, 'full-height');\n }\n };\n\n // Set explicit viewport root if within iframe:\n const root = this.windowRef.nativeWindow.frameElement\n ? (this.windowRef.nativeWindow.document as any) // Cast to `any` as Typescript lib.d.ts doesnt support Document type yet\n : undefined;\n const options: IntersectionObserverInit = {\n rootMargin: '0px 0px -1px 0px', // `bottom: -1px` allows checking when the modal bottom is touching the viewport\n root,\n threshold: [0.99, 1],\n };\n\n return new IntersectionObserver(callback, options);\n }\n\n ngOnDestroy() {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n //clean up the observer\n this.mutationObserver.disconnect();\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.getEmbeddedFooterElement());\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Animation, AnimationBuilder, AnimationController } from '@ionic/angular';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { PlatformService } from '../../../helpers/platform.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalAnimationBuilderService {\n constructor(private animationCtrl: AnimationController, 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, presentingEl?: HTMLElement): Animation => {\n const backdropAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelector('ion-backdrop')!)\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .beforeStyles({\n 'pointer-events': 'none',\n })\n .afterClearStyles(['pointer-events']);\n\n const wrapperAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 })\n .fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');\n\n const baseAnimation = this.animationCtrl\n .create()\n .addElement(baseEl)\n .easing(this.easingEnter)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = this.animationCtrl\n .create()\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\n const presentingAnimation = this.animationCtrl.create().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 standlone 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 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', '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(presentingEl.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 = this.animationCtrl\n .create()\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingEl.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 (baseEl: HTMLElement, presentingEl?: HTMLElement): Animation => {\n const backdropAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelector('ion-backdrop')!)\n .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);\n\n const wrapperAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 })\n .fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');\n\n const baseAnimation = this.animationCtrl\n .create()\n .addElement(baseEl)\n .easing(this.easingLeave)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = this.animationCtrl\n .create()\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\n const presentingAnimation = this.animationCtrl\n .create()\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(presentingEl.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 = this.animationCtrl\n .create()\n .addElement(presentingEl.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","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { WindowRef } from '../../../types/window-ref';\nimport { ModalCompactWrapperComponent } from '../modal-wrapper/compact/modal-compact-wrapper.component';\nimport { ModalConfig, ModalFlavor, ModalSize } from '../modal-wrapper/config/modal-config';\nimport { ModalWrapperComponent } from '../modal-wrapper/modal-wrapper.component';\n\nimport { ModalAnimationBuilderService } from './modal-animation-builder.service';\nimport { Overlay } from './modal.interfaces';\n\n@Injectable()\nexport class ModalHelper {\n // TODO: Make presentingElement an instance field when\n // forRoot()/singleton services has been solved:\n private static presentingElement: HTMLElement = undefined;\n\n constructor(\n private ionicModalController: ModalController,\n private modalAnimationBuilder: ModalAnimationBuilderService,\n private windowRef: WindowRef\n ) {}\n\n public async showModalWindow(config: ModalConfig): Promise<Overlay> {\n config.flavor = config.flavor || 'modal';\n const modalPresentingElement = await this.getPresentingElement(config.flavor);\n\n let currentBackdrop: HTMLIonBackdropElement;\n const topMostModal = await this.ionicModalController.getTop();\n if (topMostModal) {\n currentBackdrop = topMostModal.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.flavor === 'modal' ? 'medium' : null;\n const modalSize = config.size || defaultModalSize;\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 const ionModal = await this.ionicModalController.create({\n component: config.flavor === 'compact' ? ModalCompactWrapperComponent : ModalWrapperComponent,\n cssClass: [\n 'kirby-overlay',\n 'kirby-modal',\n config.flavor === 'drawer' ? 'kirby-drawer' : null,\n config.flavor === 'compact' ? 'kirby-modal-compact' : null,\n 'kirby-modal-' + modalSize,\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 swipeToClose: config.flavor != 'compact',\n presentingElement: modalPresentingElement,\n keyboardClose: false,\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 await ionModal.present();\n\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n\n public registerPresentingElement(element: HTMLElement) {\n ModalHelper.presentingElement = element;\n }\n\n private async getPresentingElement(flavor?: ModalFlavor) {\n let modalPresentingElement: HTMLElement = undefined;\n if (!flavor || flavor === 'modal') {\n const topMostModal = await this.ionicModalController.getTop();\n if (!topMostModal) {\n modalPresentingElement = ModalHelper.presentingElement;\n } else if (\n !topMostModal.classList.contains('kirby-drawer') &&\n !topMostModal.classList.contains('kirby-modal-compact')\n ) {\n modalPresentingElement = topMostModal;\n }\n }\n return modalPresentingElement;\n }\n\n public async scrollToTop(\n noModalRegisteredErrorMessage: string,\n duration?: KirbyAnimation.Duration\n ) {\n const modal = await this.ionicModalController.getTop();\n if (!modal || !(modal.component instanceof ModalWrapperComponent)) {\n throw new Error(noModalRegisteredErrorMessage);\n }\n modal.component.scrollToTop(duration);\n }\n\n public async scrollToBottom(\n noModalRegisteredErrorMessage: string,\n duration?: KirbyAnimation.Duration\n ) {\n const modal = await this.ionicModalController.getTop();\n if (!modal || !(modal.component instanceof ModalWrapperComponent)) {\n throw new Error(noModalRegisteredErrorMessage);\n }\n modal.component.scrollToBottom(duration);\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 { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { ActionSheetConfig } from '../action-sheet/config/action-sheet-config';\nimport { AlertConfig } from '../alert/config/alert-config';\nimport { ModalConfig } from '../modal-wrapper/config/modal-config';\n\nimport { ActionSheetHelper } from './action-sheet.helper';\nimport { AlertHelper } from './alert.helper';\nimport { ModalNavigationService } from './modal-navigation.service';\nimport { ModalHelper } from './modal.helper';\nimport { ModalRouteActivation, Overlay } from './modal.interfaces';\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 const siblingModalRouteActivated$ = modalRouteActivated$.pipe(\n filter((modalRouteActivation) => !modalRouteActivation.isNewModal),\n map((modalRouteActivation) => modalRouteActivation.route)\n );\n\n modalRouteActivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.length === 0)\n )\n .subscribe(async (modalRouteActivation) => {\n if (modalRouteActivation.isNewModal) {\n await this.showModalRoute(\n modalRouteActivation.route,\n siblingModalRouteActivated$,\n navigateOnWillClose\n );\n }\n });\n }\n\n private onModalRouteDeactivated(modalRouteDeactivated$: Observable<boolean>) {\n modalRouteDeactivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.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(config: ModalConfig, onClose?: (data?: any) => void): Promise<void> {\n if (config.hasOwnProperty('dim')) {\n console.warn('ModalConfig.dim is deprecated - please remove from your configuration.');\n }\n await this.showAndRegisterOverlay(() => this.modalHelper.showModalWindow(config), onClose);\n }\n\n public async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateToModal(path, queryParams);\n }\n\n public async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateWithinModal(relativePath, queryParams);\n }\n\n private async showModalRoute(\n modalRoute: ActivatedRoute,\n siblingModalRouteActivated$: Observable<ActivatedRoute>,\n onWillClose: (data?: any) => void\n ): Promise<void> {\n const config: ModalConfig = {\n component: null,\n modalRoute: modalRoute,\n siblingModalRouteActivated$: siblingModalRouteActivated$,\n flavor: 'modal', // Todo: Should it be possible to specify flavor as data in RouteConfig?\n };\n await this.showAndRegisterOverlay(\n () => this.modalHelper.showModalWindow(config),\n null,\n onWillClose\n );\n }\n\n public async showActionSheet(\n config: ActionSheetConfig,\n onClose?: (data?: any) => void\n ): Promise<void> {\n await this.showAndRegisterOverlay(\n () => this.actionSheetHelper.showActionSheet(config),\n onClose\n );\n }\n\n public async showAlert(config: AlertConfig, onClose?: (result: boolean) => void): Promise<void> {\n await this.showAndRegisterOverlay(() => this.alertHelper.showAlert(config), onClose);\n }\n\n private async showAndRegisterOverlay(\n showOverlay: () => Promise<Overlay>,\n onCloseOverlay?: (data?: any) => void,\n onWillCloseOverlay?: (data?: any) => void\n ) {\n const overlay = await showOverlay();\n if (!overlay) return;\n\n this.overlays.push(overlay);\n\n if (typeof onWillCloseOverlay === 'function') {\n overlay.onWillDismiss.then((event) => onWillCloseOverlay(event.data));\n }\n\n overlay.onDidDismiss.then((event) => {\n this.overlays.pop();\n if (typeof onCloseOverlay === 'function') {\n onCloseOverlay(event.data);\n }\n });\n }\n\n public registerPresentingElement(element: HTMLElement) {\n this.modalHelper.registerPresentingElement(element);\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 /**\n * @deprecated Will be removed in next major version. Inject Modal in embedded component and use Modal.scrollToTop instead.\n */\n public scrollToTop(duration?: KirbyAnimation.Duration) {\n console.warn(\n 'ModalController.scrollToTop is deprecated - please inject Modal in embedded component and use Modal.scrollToTop instead.'\n );\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n this.modalHelper.scrollToTop(this.noOverlayRegisteredErrorMessage, duration);\n }\n\n /**\n * @deprecated Will be removed in next major version. Inject Modal in embedded component and use Modal.scrollToBottom instead.\n */\n public scrollToBottom(duration?: KirbyAnimation.Duration) {\n console.warn(\n 'ModalController.scrollToBottom is deprecated - please inject Modal in embedded component and use Modal.scrollToBottom instead.'\n );\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n this.modalHelper.scrollToBottom(this.noOverlayRegisteredErrorMessage, duration);\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 { Component, ContentChild, ElementRef, AfterContentInit, ViewChild } from '@angular/core';\nimport { IonApp } from '@ionic/angular';\n\nimport { RouterOutletComponent } from '../router-outlet/router-outlet.component';\nimport { ModalController } from '../modal/services/modal.controller';\n\n@Component({\n selector: 'kirby-app',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements AfterContentInit {\n @ViewChild(IonApp, { static: true, read: ElementRef })\n private ionAppElement: ElementRef<HTMLIonAppElement>;\n\n @ContentChild(RouterOutletComponent, { static: false, read: ElementRef })\n private routerOutlet?: ElementRef<HTMLElement>;\n\n constructor(private modalController: ModalController) {}\n\n ngAfterContentInit(): void {\n if (this.routerOutlet && this.routerOutlet.nativeElement) {\n this.modalController.registerPresentingElement(this.routerOutlet.nativeElement);\n }\n\n this.ionAppElement.nativeElement.componentOnReady().then(() => this.registerInputs());\n }\n\n registerInputs() {\n // Input might be already loaded in the DOM before ion-device-hacks did.\n // At this point we need to look for all of the inputs not registered yet\n // and register them.\n // There is no Ionic event to hook into, so we'll use a timeout\n // to ensure ion-device-hacks has run:\n const ensureIonicDeviceHacksDelay = 250;\n setTimeout(() => {\n document.querySelectorAll('kirby-form-field').forEach((formField) => {\n formField.dispatchEvent(new CustomEvent('kirbyRegisterFormField'));\n });\n }, ensureIonicDeviceHacksDelay);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\n\nimport { AppComponent } from './app.component';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [CommonModule, IonicModule],\n exports: [AppComponent],\n})\nexport class AppModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { BrandColor, NotificationColor } from '@kirbydesign/core';\n\nexport enum AvatarSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n selector: 'kirby-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarComponent {\n @Input() imageSrc: string;\n @Input() altText: string;\n @Input() shadow: boolean;\n @Input() text: string;\n @Input() overlay: boolean;\n @Input() size: AvatarSize = AvatarSize.SM;\n @Input()\n themeColor: NotificationColor | BrandColor | 'medium' | 'white' | 'dark' | 'light' | 'semi-light';\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size].filter((cssClass) => !!cssClass);\n }\n}\n","import {\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { ResizeObserverService } from '../shared/resize-observer/resize-observer.service';\nimport { ResizeObserverEntry } from '../shared/resize-observer/types/resize-observer-entry';\n\n@Component({\n selector: 'kirby-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n})\nexport class CardComponent implements OnInit, OnDestroy {\n @Input() title: string;\n @Input() subtitle: string;\n\n @HostBinding('style.--kirby-card-background-image')\n _backgroundImage: string;\n\n @Input()\n set backgroundImageUrl(value: string) {\n this._backgroundImage = `url('${value}')`;\n }\n\n @Input()\n hasPadding: boolean;\n\n private sizesSortedByBreakpoint = this.sortSizesByBreakpoint({\n small: 360,\n medium: 720,\n large: 1024,\n });\n\n @Input()\n set sizes(value: { [size: string]: number }) {\n if (typeof value === 'string') {\n console.error(\n 'Sizes property cannot be a string. Please ensure the size property is bound as an expression:\\n[sizes]=\"{...}\"'\n );\n }\n this.sizesSortedByBreakpoint = this.sortSizesByBreakpoint(value);\n }\n\n @HostBinding('class.flat')\n flat: boolean = false;\n @HostBinding('class.highlighted')\n highlighted: boolean = false;\n @Input() set mode(value: 'flat' | 'highlighted') {\n this.flat = value === 'flat';\n this.highlighted = value === 'highlighted';\n }\n\n constructor(\n private elementRef: ElementRef,\n private resizeObserverService: ResizeObserverService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.resizeObserverService.observe(this.elementRef, (entry) => this.handleResize(entry));\n }\n\n ngOnDestroy() {\n this.resizeObserverService.unobserve(this.elementRef);\n }\n\n private sortSizesByBreakpoint(sizes: { [size: string]: number }): [string, number][] {\n return Object.entries(sizes).sort(this.compareSizesByBreakpoint);\n }\n\n private compareSizesByBreakpoint(a: [string, number], b: [string, number]): number {\n return a[1] > b[1] ? 1 : b[1] > a[1] ? -1 : 0;\n }\n\n private handleResize(entry: ResizeObserverEntry) {\n const sizeAttributeName = 'size';\n const smallestBreakpointName = this.sizesSortedByBreakpoint[0][0];\n const smallestBreakpointWidth = this.sizesSortedByBreakpoint[0][1];\n if (entry.contentRect.width < smallestBreakpointWidth) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, `<${smallestBreakpointName}`);\n } else {\n this.sizesSortedByBreakpoint.forEach(([size, width]) => {\n if (entry.contentRect.width >= width) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, size);\n }\n });\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-card-footer',\n templateUrl: './card-footer.component.html',\n styleUrls: ['./card-footer.component.scss'],\n})\nexport class CardFooterComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\nimport { NotificationColor } from '@kirbydesign/core';\n\nexport type CardFlagLevel = NotificationColor | 'info' | null;\n\n@Component({\n selector: 'kirby-card-header',\n templateUrl: './card-header.component.html',\n styleUrls: ['./card-header.component.scss'],\n})\nexport class CardHeaderComponent {\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTitleBold: boolean;\n @HostBinding('class')\n @Input()\n flagged: CardFlagLevel = null;\n}\n","/**\n * Performs a deep merge of objects and returns new object. Does not modify\n * objects (immutable).\n * It merges from into object to the left\n * eg. mergeDeep({a: 'will be overridden', b: 'some val'}, {a: 'new val'}) => {a: 'new val', b: 'some val'}\n *\n * @param originalObject object - Object to override,\n * @param overrideObject object - Object to override \"toOverride\" values with\n * @param config object - Configuration for how to merge.\n * mergeArrays determines if it should merge or override arrays\n * @returns object - New object with merged key/values\n */\nexport function mergeDeep(originalObject, overrideObject, config = { mergeArrays: false }) {\n const isObject = (obj) => obj && typeof obj === 'object';\n\n return [originalObject, overrideObject].reduce((mergedObject, obj) => {\n Object.keys(obj).forEach((key) => {\n const mergedObjectValue = mergedObject[key];\n const overrideObjectValue = obj[key];\n\n if (Array.isArray(mergedObjectValue) && Array.isArray(overrideObjectValue)) {\n mergedObject[key] = config.mergeArrays\n ? mergedObjectValue.concat(overrideObjectValue)\n : overrideObjectValue;\n } else if (isObject(mergedObjectValue) && isObject(overrideObjectValue)) {\n mergedObject[key] = mergeDeep(mergedObjectValue, overrideObjectValue);\n } else {\n mergedObject[key] = overrideObjectValue;\n }\n });\n\n return mergedObject;\n }, {});\n}\n\nexport function mergeDeepAll(...objects: Object[]): Object {\n const objectsWithoutUndefined = objects.filter((object) => object !== undefined);\n return objectsWithoutUndefined.reduce((originalObject, overrideObject) =>\n mergeDeep(originalObject, overrideObject)\n );\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { chart, Options } from 'highcharts';\nimport * as Highcharts from 'highcharts';\n\n// Docs on importing accessibility: https://www.highcharts.com/docs/chart-concepts/accessibility\n\ndeclare var require: any;\nrequire('highcharts/highcharts-more')(Highcharts);\nrequire('highcharts/modules/solid-gauge')(Highcharts);\nrequire('highcharts/modules/broken-axis')(Highcharts);\n\n@Injectable()\nexport class ChartDeprecatedHelper {\n chartContainer: ElementRef;\n\n public init(chartContainer: ElementRef) {\n this.chartContainer = chartContainer;\n }\n\n public renderChart(options: Options) {\n if (this.chartContainer && options.chart) {\n chart(this.chartContainer.nativeElement, options);\n }\n }\n}\n","export enum ChartDeprecatedType {\n PIE = 'pie',\n DONUT = 'donut',\n AREASPLINE = 'areaspline',\n TIMESERIES = 'timeseries',\n ACTIVITYGAUGE = 'activitygauge',\n BAR = 'bar',\n COLUMN = 'column',\n CUSTOM = 'custom',\n}\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const ACTIVITYGAUGE_OPTIONS = new InjectionToken<Options>('ActivityGaugeOptions');\nexport const ActivityGaugeOptions: Options = {\n chart: {\n style: {\n fontFamily: 'Roboto, sans-serif',\n fontWeight: '300',\n },\n backgroundColor: 'transparent',\n type: 'solidgauge',\n height: '110%',\n },\n accessibility: {\n description: '',\n },\n title: {\n align: 'center',\n verticalAlign: 'middle',\n text: '',\n y: 0,\n floating: false,\n style: {\n fontSize: '30px',\n color: '#fff',\n fontWeight: 'bold',\n },\n },\n subtitle: {\n text: '',\n align: 'center',\n y: 25,\n verticalAlign: 'middle',\n style: {\n color: '#fff',\n fontSize: '14px',\n fontWeight: 'normal',\n },\n },\n credits: {\n enabled: false,\n },\n tooltip: {\n enabled: false,\n animation: false,\n },\n pane: {\n startAngle: 0,\n endAngle: 360,\n background: [\n {\n backgroundColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },\n stops: [\n [1, 'rgba(255, 255, 255, 0.3)'],\n [0, 'rgba(255, 255, 255, 0.3)'],\n ],\n },\n outerRadius: '112%',\n innerRadius: '88%',\n borderWidth: 0,\n },\n ],\n },\n yAxis: {\n min: 0,\n max: 100,\n lineWidth: 0,\n tickPositions: [],\n },\n plotOptions: {\n solidgauge: {\n dataLabels: {\n enabled: false,\n },\n linecap: 'round',\n stickyTracking: false,\n rounded: true,\n },\n },\n series: [\n {\n type: 'solidgauge',\n },\n ],\n};\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const AREASPLINE_OPTIONS = new InjectionToken<Options>('AreasplineOptions');\nexport const AreaSplineOptions: Options = {\n chart: {\n type: 'areaspline',\n borderWidth: 0,\n plotBorderWidth: 0,\n margin: 0,\n marginTop: 48,\n },\n accessibility: {\n description: '',\n },\n title: {\n text: '',\n },\n credits: {\n enabled: false,\n },\n exporting: {\n enabled: false,\n },\n tooltip: {\n enabled: true,\n animation: false,\n shape: 'square',\n borderColor: '#FFFFFF',\n shadow: false,\n backgroundColor: '#FFFFFF',\n style: {\n fontSize: '1.25rem',\n },\n formatter: function(): string {\n return String(this.y);\n },\n positioner: function() {\n return { x: this.chart.plotSizeX / 2 - this.label.width / 2, y: 0 };\n },\n },\n xAxis: {\n visible: false,\n minPadding: 0,\n maxPadding: 0,\n crosshair: {\n zIndex: 3,\n width: 1,\n color: '#177E17',\n },\n },\n yAxis: {\n visible: false,\n endOnTick: false,\n startOnTick: false,\n },\n plotOptions: {\n areaspline: {\n shadow: true,\n showInLegend: false,\n fillColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 0.8 },\n stops: [\n [0, '#C9E5C9'],\n [1, '#FFFFFF'],\n ],\n },\n lineColor: '#177E17',\n lineWidth: 2,\n },\n series: {\n states: {\n hover: {\n halo: {\n size: 0,\n },\n },\n },\n marker: {\n enabled: false,\n states: {\n hover: {\n enabled: true,\n fillColor: '#177E17',\n },\n },\n },\n },\n },\n series: [\n {\n type: 'areaspline',\n },\n ],\n};\n","import { Options } from 'highcharts';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nconst getColor = DesignTokenHelper.getColor;\nconst fontSize = DesignTokenHelper.fontSize;\n\nfunction colorPoints() {\n var series = this.series;\n for (var i = 0, ie = series.length; i < ie; ++i) {\n var points = series[i].data;\n for (var j = 0, je = points.length; j < je; ++j) {\n if (points[j].graphic) {\n points[j].graphic.element.style.stroke = getColor('background-color').value;\n }\n }\n }\n}\n\nexport const barOptions: Options = {\n chart: {\n type: 'bar',\n animation: {\n duration: 150,\n },\n backgroundColor: 'transparent',\n events: {\n load: colorPoints,\n redraw: colorPoints,\n },\n },\n accessibility: {\n description: 'Bar chart',\n },\n credits: {\n enabled: false,\n },\n title: {\n text: '',\n },\n xAxis: {\n labels: {\n style: {\n fontSize: fontSize('s'),\n fontFamily: 'Roboto',\n color: getColor('black').value,\n },\n },\n min: 0,\n lineColor: 'transparent',\n },\n yAxis: {\n title: {\n text: '',\n },\n labels: {\n enabled: false,\n },\n min: 0,\n lineWidth: 0,\n minorGridLineWidth: 0,\n gridLineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n maxPadding: 0,\n endOnTick: false,\n showLastLabel: false,\n showFirstLabel: false,\n },\n plotOptions: {\n bar: {\n events: {},\n },\n series: {\n color: getColor('secondary').value,\n stacking: 'normal',\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n tooltip: {\n enabled: false,\n },\n legend: {\n enabled: false,\n },\n};\n","import { Options } from 'highcharts';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nconst getColor = DesignTokenHelper.getColor;\nconst fontSize = DesignTokenHelper.fontSize;\n\nfunction colorPoints() {\n var series = this.series;\n for (var i = 0, ie = series.length; i < ie; ++i) {\n var points = series[i].data;\n for (var j = 0, je = points.length; j < je; ++j) {\n if (points[j].graphic) {\n points[j].graphic.element.style.stroke = getColor('secondary').value;\n }\n }\n }\n}\n\nexport const columnOptions: Options = {\n chart: {\n animation: {\n duration: 500,\n },\n backgroundColor: 'transparent',\n type: 'column',\n events: {\n load: colorPoints,\n redraw: colorPoints,\n },\n },\n title: {\n text: '',\n },\n accessibility: {\n description: 'Column chart',\n },\n xAxis: {\n labels: {\n style: {\n fontSize: fontSize('xxs'),\n fontFamily: 'Roboto',\n color: getColor('black').value,\n },\n },\n lineWidth: 0,\n minorGridLineWidth: 0,\n lineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n },\n yAxis: {\n title: {\n text: '',\n },\n labels: {\n enabled: false,\n },\n min: 0,\n lineWidth: 0,\n minorGridLineWidth: 0,\n gridLineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n showLastLabel: false,\n showFirstLabel: false,\n },\n credits: {\n enabled: false,\n },\n plotOptions: {\n column: {\n stacking: 'normal',\n },\n series: {\n color: getColor('secondary').value,\n zIndex: 10,\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n line: {\n className: 'avg-line',\n marker: {\n enabled: false,\n },\n allowPointSelect: false,\n },\n },\n tooltip: {\n enabled: false,\n },\n legend: {\n enabled: false,\n },\n};\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const DONUT_OPTIONS = new InjectionToken<Options>('DonutOptions');\nexport const DonutOptions: Options = {\n chart: {\n style: {\n fontFamily: 'Roboto',\n fontWeight: '300',\n },\n backgroundColor: 'transparent',\n type: '',\n },\n accessibility: {\n description: 'Donut chart',\n },\n title: {\n text: '',\n },\n tooltip: {\n enabled: false,\n animation: false,\n },\n legend: {\n layout: 'vertical',\n symbolRadius: 0,\n itemStyle: {\n fontSize: '.875rem',\n },\n },\n plotOptions: {\n pie: {\n colors: ['#015132', '#B2D1BF', '#AABC08', '#1FA05A', 'yellowgreen'],\n allowPointSelect: false,\n cursor: 'pointer',\n showInLegend: true,\n borderColor: null,\n dataLabels: {\n format: '{point.label}',\n enabled: true,\n connectorWidth: 0,\n distance: 5,\n style: {\n fontSize: '1rem',\n fontWeight: '200',\n },\n },\n point: {\n events: {\n legendItemClick: () => {\n // Prevent the default behavior (toggle visibility of slices when clicking on legends)\n return false;\n },\n },\n },\n states: {\n hover: {\n enabled: false,\n },\n },\n },\n series: {\n animation: true,\n dataLabels: {},\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n series: [\n {\n name: '',\n type: 'pie',\n },\n ],\n credits: {\n enabled: false,\n },\n exporting: {\n enabled: false,\n },\n responsive: {\n rules: [\n {\n condition: {\n minWidth: 640,\n },\n chartOptions: {\n legend: {\n layout: 'vertical',\n align: 'right',\n verticalAlign: 'middle',\n itemMarginTop: 12,\n symbolRadius: 0,\n symbolWidth: 14,\n symbolHeight: 14,\n x: -100,\n },\n },\n },\n {\n condition: {\n minWidth: 0,\n },\n chartOptions: {\n legend: {\n symbolRadius: 0,\n },\n },\n },\n ],\n },\n};\n","import { InjectionToken } from '@angular/core';\nimport { dateFormat, Options } from 'highcharts';\n\nexport const TIMESERIES_OPTIONS = new InjectionToken<Options>('TimeSeriesOptions');\nexport const TimeSeriesOptions: Options = {\n chart: {\n backgroundColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 3 },\n stops: [\n [0, '#F6F6F6'],\n [1, '#808080'],\n ],\n },\n zoomType: 'x',\n type: 'timeseries',\n borderWidth: 0,\n plotBorderWidth: 0,\n margin: 0,\n marginTop: 48,\n },\n accessibility: {\n description: '',\n },\n title: {\n text: '',\n },\n subtitle: {\n text: '',\n },\n tooltip: {\n shadow: false,\n formatter: function() {\n // @ts-ignore\n return dateFormat('%e. %b', new Date(this.x)) + '.' + '<br/><b>' + this.y + '</b>';\n },\n //xDateFormat: '%d/%m',\n positioner: function(_labelWidth, _labelHeight, point) {\n return { x: point.x, y: 0 };\n },\n borderWidth: 0,\n },\n xAxis: {\n visible: false,\n lineColor: '#FFFFFF',\n tickColor: '#FFFFFF',\n labels: {\n style: {\n color: 'white',\n },\n },\n opposite: true,\n crosshair: {\n zIndex: 3,\n width: 1,\n color: '#00E89A',\n },\n type: 'datetime',\n tickInterval: 1,\n },\n yAxis: {\n visible: false,\n },\n legend: {\n enabled: false,\n },\n plotOptions: {\n area: {\n fillColor: '#01352C',\n marker: {\n lineWidth: 14,\n lineColor: 'rgba(255,255,255,0.2)',\n radius: 6,\n fillColor: '#00E89A',\n },\n lineColor: '#01352C',\n lineWidth: 1,\n states: {\n hover: {\n lineWidth: 1,\n },\n },\n threshold: null,\n },\n series: {\n marker: {\n enabledThreshold: 50,\n },\n },\n },\n series: [\n {\n type: 'area',\n name: 'USD to EUR',\n },\n ],\n};\n","import { Component, ElementRef, Inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport {\n Options,\n PlotSeriesDataLabelsOptions,\n XAxisBreaksOptions,\n XAxisOptions,\n YAxisOptions,\n} from 'highcharts';\n\nimport { mergeDeep } from '../../helpers/merge-deep';\n\nimport { ChartDeprecatedHelper } from './chart-deprecated-helper';\nimport { ChartDeprecatedType } from './chart-deprecated-type';\nimport { ActivityGaugeOptions, ACTIVITYGAUGE_OPTIONS } from './options/activitygauge';\nimport { AreaSplineOptions, AREASPLINE_OPTIONS } from './options/areaspline';\nimport { barOptions } from './options/bar';\nimport { columnOptions } from './options/column';\nimport { DonutOptions, DONUT_OPTIONS } from './options/donut';\nimport { TimeSeriesOptions, TIMESERIES_OPTIONS } from './options/timeseries';\n\n@Component({\n selector: 'kirby-chart-deprecated',\n template: '',\n styleUrls: ['./chart-deprecated.component.scss'],\n providers: [\n ChartDeprecatedHelper,\n { provide: DONUT_OPTIONS, useValue: DonutOptions },\n { provide: AREASPLINE_OPTIONS, useValue: AreaSplineOptions },\n { provide: TIMESERIES_OPTIONS, useValue: TimeSeriesOptions },\n { provide: ACTIVITYGAUGE_OPTIONS, useValue: ActivityGaugeOptions },\n ],\n})\nexport class ChartDeprecatedComponent implements OnChanges {\n @Input() data = [];\n @Input() categories: string[] = [];\n @Input() breaks: Array<XAxisBreaksOptions> = [];\n @Input() height = 300;\n @Input() type: ChartDeprecatedType = ChartDeprecatedType.PIE;\n @Input() description = '';\n @Input() showDataLabels = true;\n @Input() options: Options;\n mergedOptions: Options = {\n accessibility: {},\n };\n\n constructor(\n private chartHelper: ChartDeprecatedHelper,\n private hostElement: ElementRef,\n @Inject(DONUT_OPTIONS) public donutOptions: Options,\n @Inject(AREASPLINE_OPTIONS) public areasplineOptions: Options,\n @Inject(TIMESERIES_OPTIONS) public timeSeriesOptions: Options,\n @Inject(ACTIVITYGAUGE_OPTIONS) public activitygaugeOptions: Options\n ) {\n this.chartHelper.init(this.hostElement);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.type) {\n this.setupChartType();\n }\n this.updateProperties();\n this.chartHelper.renderChart(this.mergedOptions);\n }\n\n setupChartType() {\n switch (this.type) {\n case ChartDeprecatedType.DONUT: {\n this.mergedOptions = this.donutOptions;\n this.mergedOptions.chart.type = ChartDeprecatedType.PIE;\n this.mergedOptions.plotOptions.pie.innerSize = '50%';\n break;\n }\n case ChartDeprecatedType.PIE: {\n this.mergedOptions = this.donutOptions;\n this.mergedOptions.chart.type = this.type;\n this.mergedOptions.plotOptions.pie.innerSize = '0%';\n break;\n }\n case ChartDeprecatedType.AREASPLINE: {\n this.mergedOptions = this.areasplineOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.TIMESERIES: {\n this.mergedOptions = this.timeSeriesOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.ACTIVITYGAUGE: {\n this.mergedOptions = this.activitygaugeOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.COLUMN: {\n this.mergedOptions = columnOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.BAR: {\n this.mergedOptions = barOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n }\n }\n\n updateProperties() {\n this.mergedOptions.chart.height = this.height;\n this.mergedOptions.accessibility.description = this.description;\n switch (this.mergedOptions.chart.type) {\n case ChartDeprecatedType.PIE:\n case ChartDeprecatedType.DONUT: {\n this.setPieInput();\n break;\n }\n case ChartDeprecatedType.AREASPLINE: {\n this.setSeries('areaspline');\n break;\n }\n case ChartDeprecatedType.TIMESERIES: {\n this.setTimeseriesInput();\n break;\n }\n case ChartDeprecatedType.ACTIVITYGAUGE: {\n this.setActivitygaugeInput();\n break;\n }\n case ChartDeprecatedType.COLUMN: {\n this.setColumnInput();\n break;\n }\n case ChartDeprecatedType.BAR: {\n this.setBarInput();\n break;\n }\n }\n if (!!this.options) {\n this.mergedOptions = mergeDeep(this.mergedOptions, this.options);\n }\n }\n\n private setPieInput() {\n (this.mergedOptions.plotOptions.pie\n .dataLabels as PlotSeriesDataLabelsOptions).enabled = this.showDataLabels;\n this.setSeries('pie');\n }\n\n private setBarInput() {\n const dataMaxValue = Math.max(...this.data);\n this.mergedOptions.series = [\n {\n type: 'bar',\n name: 'InvisibleClickReceiver',\n data: this.data.map((dataEntry) => dataMaxValue - dataEntry),\n edgeColor: 'rgb(255, 255, 255, 0)',\n opacity: 0,\n },\n {\n type: 'bar',\n data: this.data,\n },\n ];\n (this.mergedOptions.xAxis as XAxisOptions).categories = this.categories;\n }\n\n private setColumnInput() {\n this.mergedOptions.series = [\n {\n type: 'column',\n data: this.data,\n },\n ];\n const dataMaxValue = Math.max(...this.data);\n ((this.mergedOptions.yAxis as YAxisOptions).tickPositioner = () => {\n var positions = [0, dataMaxValue];\n return positions;\n }),\n (this.mergedOptions.series = [\n {\n type: 'column',\n name: 'InvisibleClickReceiver',\n data: this.data.map((_, idx) => dataMaxValue - this.data[idx]),\n opacity: 0,\n },\n {\n type: 'column',\n data: this.data,\n },\n ]);\n (this.mergedOptions.xAxis as XAxisOptions).categories = this.categories;\n }\n\n private setActivitygaugeInput() {\n const data = this.data[0];\n this.mergedOptions.title.text = data.title;\n this.mergedOptions.subtitle.text = data.subtitle;\n if (data.paneBackgroundColor) {\n this.mergedOptions.pane.background = [\n {\n ...this.mergedOptions.pane.background[0],\n backgroundColor: data.paneBackgroundColor,\n },\n ];\n }\n if (data.color) {\n this.mergedOptions.title.style.color = data.color;\n this.mergedOptions.subtitle.style.color = data.color;\n }\n this.mergedOptions.series = [\n {\n type: 'solidgauge',\n data: data.series,\n },\n ];\n }\n\n private setTimeseriesInput() {\n this.setSeries('area');\n this.mergedOptions.xAxis = {\n ...this.mergedOptions.xAxis,\n breaks: this.breaks,\n };\n }\n\n private setSeries(type) {\n this.mergedOptions.series = [\n {\n type,\n data: this.data,\n },\n ];\n }\n}\n","import { ChartDataset as ChartJSDataset, ChartOptions, ChartType as ChartJSType } from 'chart.js';\n\nexport type ChartHighlightedElements = number[][];\n\nexport type ChartType = 'column' | 'bar' | 'line' | 'stock';\n\nexport type ChartTypeConfig = { type: ChartJSType; options?: ChartOptions };\n\nexport type ChartTypesConfig = {\n [key in ChartType]: ChartTypeConfig;\n};\n\nexport type ChartDataLabelOptions = {\n showMin?: boolean;\n showMax?: boolean;\n showCurrent?: boolean;\n locale?: ChartLocale;\n valueSuffix?: string;\n};\n\nexport type ChartLocale = 'da-DK' | 'en-US';\n\n/* \n kirbyOptions.isStockChart is a hacky solution to this issue: \n https://github.com/kirbydesign/designsystem/issues/1967 \n*/\nexport type ChartDataset = {\n kirbyOptions?: { highlightedElements?: number[]; isStockChart?: boolean };\n} & ChartJSDataset;\n\nexport function isNumberArray(value: any): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === 'number');\n}\n","import {\n Directive,\n Input,\n ComponentFactoryResolver,\n OnInit,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ComponentConfiguration } from './component-configuration';\nimport { DynamicComponent } from './dynamic-component';\n\n@Directive({\n selector: '[kirbyLoadComponent]',\n})\nexport class ComponentLoaderDirective implements OnInit {\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyLoadComponent') configuration: ComponentConfiguration;\n @Input() cssClass: string;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.loadCard();\n }\n\n loadCard() {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(\n this.configuration.component\n );\n this.viewContainerRef.clear();\n const componentRef = this.viewContainerRef.createComponent(componentFactory);\n if (componentRef && componentRef.location && componentRef.location.nativeElement) {\n this.renderer.addClass(componentRef.location.nativeElement, this.cssClass);\n }\n (<DynamicComponent>componentRef.instance).data = this.configuration.data;\n }\n}\n","import _deepCopy from 'ts-deepcopy';\n\n/**\n * Do a deep copy of object that supports the composite data type Function\n *\n * @see https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript#answer-122704\n *\n * @param obj\n * @returns obj\n */\nexport function deepCopy<T>(obj: T): T {\n return _deepCopy<T>(obj);\n}\n","/* \n Utility function to check if a given element \n has an ancestor with a specific node name. \n\n Can be given a 'stopNodeName' to limit the search\n as to not climb all the way up through the DOM tree. \n\n Returns true when element has the ancestorNodeName \n or an ancestor has the ancestorNodeName. \n\n Returns false otherwise.\n*/\n\nexport const elementHasAncestor = (\n element: HTMLElement,\n ancestorNodeName: string,\n stopNodeName?: string\n) => {\n switch (element?.nodeName) {\n case undefined:\n case stopNodeName?.toUpperCase():\n return false;\n case ancestorNodeName.toUpperCase():\n return true;\n default:\n return elementHasAncestor(element.parentElement, ancestorNodeName, stopNodeName);\n }\n};\n","// re-export helpers from core, to preserve backwards compatability\n// of 'designsystem' library\nexport * from './element-has-ancestor';\nexport * from './color-helper';\nexport * from './design-token-helper';\nexport * from './string-helper';\nexport * from './theme-color.type';\nexport * from './platform.service';\n","import { AnnotationTypeRegistry } from 'chartjs-plugin-annotation';\n\nimport { ColorHelper } from '../../../helpers';\n\nconst { getThemeColorHexString } = ColorHelper;\n\n/* The chart.js annotation does not allow for changing the \ndefaults it comes with. In order to have sensible defaults \nthis object is used instead and manually merged with the \nrest of the annotations object */\nconst borderColor = getThemeColorHexString('semi-dark');\nconst borderDash: [number, number] = [6, 3];\nconst borderWidth = 1;\n\nexport const CHART_ANNOTATIONS_CONFIG: AnnotationTypeRegistry = {\n line: {\n borderDash,\n borderWidth,\n borderColor,\n },\n ellipse: {\n borderDash,\n borderWidth,\n borderColor,\n backgroundColor: 'transparent',\n },\n box: {\n borderDash,\n borderWidth,\n borderColor,\n backgroundColor: 'transparent',\n },\n point: {\n backgroundColor: 'initial',\n },\n};\n","import { ActiveElement, Chart, ChartEvent, ChartOptions } from 'chart.js';\n\n/* Allows for adding functionality to interactions chart.js while \npreserving the interaction functionality the consumer of the component has \npassed by being provided as a callback. */\nexport const CHART_INTERACTION_FUNCTIONS_EXTENSIONS = {\n onHover: (\n _event: ChartEvent,\n activeElements: ActiveElement[],\n _chart: Chart,\n callback: ChartOptions['onHover']\n ) => {\n if (_chart.options.onClick) {\n _chart.canvas.style.cursor = activeElements[0] ? 'pointer' : 'default';\n }\n\n if (callback) callback(_event, activeElements, _chart);\n },\n};\n","import { ChartTypeRegistry, Color, Point, TooltipItem, TooltipLabelStyle } from 'chart.js';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport { Align } from 'chartjs-plugin-datalabels/types/options';\n\nimport { ColorHelper, DesignTokenHelper } from '../../../helpers';\nimport { ChartTypesConfig } from '../chart.types';\n\nconst { fontSize } = DesignTokenHelper;\nconst { getThemeColorHexString, getThemeColorRgbString } = ColorHelper;\n\n/**\n * A filter to read a chartpoint from a Chart.js point context (used for chartdata points). Context is provided by Chart.js.\n */\nconst getChartPointFromContext = (context: Context): Point => {\n return context.dataset.data[context.dataIndex] as Point;\n};\n\nexport const CHART_TYPES_CONFIG: ChartTypesConfig = {\n bar: {\n type: 'bar',\n options: {\n datasets: {\n bar: {\n barPercentage: 0.6,\n },\n line: {\n spanGaps: true,\n },\n },\n indexAxis: 'y',\n scales: {\n y: {\n grid: {\n drawBorder: false,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('s')),\n },\n },\n },\n },\n elements: {\n point: {\n radius: 0,\n },\n line: {\n borderColor: getThemeColorHexString('medium'),\n },\n },\n },\n },\n column: {\n type: 'bar',\n options: {\n datasets: {\n bar: {\n barPercentage: 0.6,\n },\n line: {\n spanGaps: true,\n },\n },\n indexAxis: 'x',\n scales: {\n x: {\n grid: {\n drawBorder: false,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n line: {\n tension: 0.2,\n borderColor: getThemeColorHexString('medium'),\n },\n point: {\n radius: 0,\n },\n },\n },\n },\n line: {\n type: 'line',\n options: {\n backgroundColor: getThemeColorRgbString('semi-light', 0.5),\n scales: {\n x: {\n grid: {\n borderColor: getThemeColorHexString('medium'),\n borderWidth: 1,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n point: {\n radius: 0,\n },\n },\n },\n },\n stock: {\n type: 'line',\n options: {\n responsive: true,\n animation: {\n duration: 0,\n },\n layout: {\n padding: {\n left: 20,\n right: 20,\n top: 30,\n bottom: 0,\n },\n },\n backgroundColor: getThemeColorRgbString('semi-light', 0.5),\n scales: {\n x: {\n grid: {\n lineWidth: 0,\n },\n ticks: {\n maxRotation: 0,\n autoSkipPadding: 120,\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n y: {\n position: 'right',\n display: true,\n grid: {\n drawBorder: false,\n },\n ticks: {\n display: true,\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n line: {\n tension: 0, // Smooth curve (0 = no smoothing)\n borderWidth: 2,\n },\n point: {\n hitRadius: 20,\n radius: 0,\n hoverRadius: 0,\n hoverBorderWidth: 0,\n },\n },\n normalized: true,\n plugins: {\n tooltip: {\n padding: 10,\n\n enabled: true,\n mode: 'index',\n intersect: false,\n backgroundColor: getThemeColorHexString('semi-light'),\n titleColor: getThemeColorHexString('semi-light-contrast'),\n bodyColor: getThemeColorHexString('semi-light-contrast'),\n caretSize: 0,\n bodySpacing: 5,\n titleSpacing: 5,\n borderColor: 'transparent',\n callbacks: {\n labelColor: (tooltipItem: TooltipItem<keyof ChartTypeRegistry>) => {\n return {\n backgroundColor: tooltipItem.dataset.borderColor,\n } as TooltipLabelStyle;\n },\n },\n },\n datalabels: {\n backgroundColor: (context: Context) => context.dataset.borderColor as Color,\n color: getThemeColorHexString('white'),\n borderRadius: 3,\n font: {\n lineHeight: 1,\n size: parseInt(fontSize('xs')),\n },\n padding: {\n top: 6,\n left: 5,\n right: 5,\n bottom: 5,\n },\n offset: 5,\n align: (context: Context): Align =>\n (getChartPointFromContext(context) as any)?.datalabel.position,\n display: (context: Context): boolean =>\n !!(getChartPointFromContext(context) as any)?.datalabel,\n formatter: (value: any): string => value.datalabel.value,\n },\n },\n },\n },\n};\n","import { Injectable } from '@angular/core';\nimport { ChartType as ChartJSType } from 'chart.js';\nimport { AnnotationType, AnnotationTypeRegistry } from 'chartjs-plugin-annotation';\n\nimport { deepCopy } from '../../../helpers/deep-copy';\nimport { ChartType, ChartTypeConfig } from '../chart.types';\n\nimport { CHART_ANNOTATIONS_CONFIG } from './annotations.config';\nimport { CHART_INTERACTION_FUNCTIONS_EXTENSIONS } from './interaction-functions-extensions.config';\nimport { CHART_TYPES_CONFIG } from './type.config';\n\n@Injectable()\nexport class ChartConfigService {\n public getTypeConfig(chartType: ChartType): ChartTypeConfig {\n /* Deep copy to avoid Chart object modifying parts of CHART_TYPES_CONFIG \n as it copies by reference when initialized */\n return deepCopy(CHART_TYPES_CONFIG[chartType]);\n }\n\n public getAnnotationDefaults(type: AnnotationType): AnnotationTypeRegistry[AnnotationType] {\n return CHART_ANNOTATIONS_CONFIG[type];\n }\n\n public getInteractionFunctionsExtensions() {\n return CHART_INTERACTION_FUNCTIONS_EXTENSIONS;\n }\n\n /* Our types does not always map 1 to 1 to the same type \n that the chart.js chart is actually oconfigured with. Therefore this function \n for looking up the ChartJSType of a type. */\n public chartTypeToChartJSType(chartType: ChartType): ChartJSType {\n return CHART_TYPES_CONFIG[chartType]['type'] as ChartJSType;\n }\n}\n","/* \n The marker plugin is heavily inspired by https://chartjs-plugin-crosshair.netlify.app\n The project appears stale and only the vertical line feature is needed\n part of the plugin that was actually needed is implemented here. \n*/\n\nimport { Chart } from 'chart.js';\nimport { valueOrDefault } from 'chart.js/helpers';\n\nimport { ChartDataset } from '../../chart.types';\n\nvar defaultOptions = {\n line: {\n color: 'black',\n width: 1,\n dashPattern: [],\n },\n snap: {\n enabled: false,\n },\n};\n\nconst hasMarkerConfiguration = (chart: Chart) => {\n /* \n Hacky solution. Should be fixed in this issue: https://github.com/kirbydesign/designsystem/issues/1967\n */\n return chart.data.datasets.some((dataset: ChartDataset) => !!dataset?.kirbyOptions?.isStockChart);\n};\n\nexport default {\n id: 'marker',\n\n afterInit: function(chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n\n var xScaleType = chart.config.options.scales.x.type;\n\n if (\n xScaleType !== 'linear' &&\n xScaleType !== 'time' &&\n xScaleType !== 'category' &&\n xScaleType !== 'logarithmic'\n ) {\n return;\n }\n\n if (chart.options.plugins.marker === undefined) {\n chart.options.plugins.marker = defaultOptions;\n }\n\n chart.marker = {\n enabled: false,\n suppressUpdate: false,\n x: null,\n originalData: [],\n originalXRange: {},\n dragStarted: false,\n dragStartX: null,\n dragEndX: null,\n suppressTooltips: false,\n ignoreNextEvents: 0,\n };\n },\n\n getOption: function(chart, category, name) {\n return valueOrDefault(\n chart.options.plugins.marker[category]\n ? chart.options.plugins.marker[category][name]\n : undefined,\n defaultOptions[category][name]\n );\n },\n\n getXScale: function(chart) {\n return chart.data.datasets.length ? chart.scales[chart.getDatasetMeta(0).xAxisID] : null;\n },\n getYScale: function(chart) {\n return chart.scales[chart.getDatasetMeta(0).yAxisID];\n },\n\n afterEvent: function(chart, event) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n if (chart.config.options.scales.x.length == 0) {\n return;\n }\n\n let e = event.event;\n\n var xScaleType = chart.config.options.scales.x.type;\n\n if (\n xScaleType !== 'linear' &&\n xScaleType !== 'time' &&\n xScaleType !== 'category' &&\n xScaleType !== 'logarithmic'\n ) {\n return;\n }\n\n var xScale = this.getXScale(chart);\n\n if (!xScale) {\n return;\n }\n\n if (chart.marker.ignoreNextEvents > 0) {\n chart.marker.ignoreNextEvents -= 1;\n return;\n }\n\n // fix for Safari\n var buttons = e.native.buttons === undefined ? e.native.which : e.native.buttons;\n if (e.native.type === 'mouseup') {\n buttons = 0;\n }\n\n chart.marker.enabled =\n e.type !== 'mouseout' &&\n e.x > xScale.getPixelForValue(xScale.min) &&\n e.x < xScale.getPixelForValue(xScale.max);\n\n if (!chart.marker.enabled && !chart.marker.suppressUpdate) {\n if (e.x > xScale.getPixelForValue(xScale.max)) {\n // suppress future updates to prevent endless redrawing of chart\n chart.marker.suppressUpdate = true;\n chart.update('none');\n }\n chart.marker.dragStarted = false; // cancel zoom in progress\n return false;\n }\n chart.marker.suppressUpdate = false;\n\n chart.marker.x = e.x;\n\n chart.draw();\n },\n doDraw: function(chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n\n if (!chart.marker.enabled) {\n return;\n }\n\n this.drawTraceLine(chart);\n this.interpolateValues(chart);\n this.drawTracePoints(chart);\n\n return true;\n },\n beforeDraw: function(chart) {\n return this.doDraw(chart);\n },\n // Logic moved to beforeDraw in order\n // for the vertical line to be drawn\n // under tooltip and datalabels.\n // afterDraw: function(chart) {\n // return this.doDraw(chart);\n // },\n\n drawTraceLine: function(chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n var yScale = this.getYScale(chart);\n\n var lineWidth = this.getOption(chart, 'line', 'width');\n var color = this.getOption(chart, 'line', 'color');\n var dashPattern = this.getOption(chart, 'line', 'dashPattern');\n var snapEnabled = this.getOption(chart, 'snap', 'enabled');\n\n var lineX = chart.marker.x;\n\n if (snapEnabled && chart._active.length) {\n lineX = chart._active[0].element.x;\n }\n\n chart.ctx.beginPath();\n chart.ctx.setLineDash(dashPattern);\n chart.ctx.moveTo(lineX, yScale.getPixelForValue(yScale.max));\n chart.ctx.lineWidth = lineWidth;\n chart.ctx.strokeStyle = color;\n chart.ctx.lineTo(lineX, yScale.getPixelForValue(yScale.min));\n chart.ctx.stroke();\n chart.ctx.setLineDash([]);\n },\n\n drawTracePoints: function(chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {\n var dataset = chart.data.datasets[chartIndex];\n var meta = chart.getDatasetMeta(chartIndex);\n\n var yScale = chart.scales[meta.yAxisID];\n\n if (meta.hidden || !dataset.interpolate) {\n continue;\n }\n\n chart.ctx.beginPath();\n chart.ctx.arc(\n chart.marker.x,\n yScale.getPixelForValue(dataset.interpolatedValue),\n 3,\n 0,\n 2 * Math.PI,\n false\n );\n chart.ctx.fillStyle = 'white';\n chart.ctx.lineWidth = 2;\n chart.ctx.strokeStyle = dataset.borderColor;\n chart.ctx.fill();\n chart.ctx.stroke();\n }\n },\n\n interpolateValues: function(chart) {\n for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {\n var dataset = chart.data.datasets[chartIndex];\n\n var meta = chart.getDatasetMeta(chartIndex);\n\n var xScale = chart.scales[meta.xAxisID];\n var xValue = xScale.getValueForPixel(chart.marker.x);\n\n if (meta.hidden || !dataset.interpolate) {\n continue;\n }\n\n var data = dataset.data;\n var index = data.findIndex(function(o) {\n return o.x >= xValue;\n });\n var prev = data[index - 1];\n var next = data[index];\n\n if (chart.data.datasets[chartIndex].steppedLine && prev) {\n dataset.interpolatedValue = prev.y;\n } else if (prev && next) {\n var slope = (next.y - prev.y) / (next.x - prev.x);\n dataset.interpolatedValue = prev.y + (xValue - prev.x) * slope;\n } else {\n dataset.interpolatedValue = NaN;\n }\n }\n },\n};\n","import { ChartType, ScriptableContext } from 'chart.js';\n\nimport { ColorHelper } from '../../../helpers';\nimport { ChartDataset } from '../chart.types';\n\nconst { getThemeColorHexString } = ColorHelper;\n\nexport const hoverBackgroundColor = getThemeColorHexString('primary');\nexport const backgroundColor = getThemeColorHexString('secondary');\n\n// Highlight elements that are added to the highlightedElements array\nexport function scriptedBackgroundColor(context: ScriptableContext<ChartType>) {\n const dataset = context.dataset as ChartDataset;\n const highlightedElements = dataset?.kirbyOptions?.highlightedElements;\n\n if (highlightedElements && highlightedElements.includes(context.dataIndex)) {\n return hoverBackgroundColor;\n } else {\n return backgroundColor;\n }\n}\n\n// Only adds a hovercolor if an onClick handler is provided\nexport function scriptedHoverBackgroundColor(context: ScriptableContext<ChartType>) {\n if (context.chart.options.onClick) {\n return hoverBackgroundColor;\n }\n}\n","import { ColorHelper } from '../../../helpers';\n\nimport { scriptedBackgroundColor, scriptedHoverBackgroundColor } from './shared.utils';\n\nconst { getThemeColorHexString } = ColorHelper;\n\nexport const CHART_GLOBAL_DEFAULTS = {\n maintainAspectRatio: false,\n color: getThemeColorHexString('black'),\n resizeDelay: 10,\n elements: {\n bar: {\n backgroundColor: scriptedBackgroundColor,\n hoverBackgroundColor: scriptedHoverBackgroundColor,\n },\n line: {\n borderColor: scriptedBackgroundColor,\n borderWidth: 2,\n tension: 0.3,\n },\n },\n scales: {\n linear: {\n display: false,\n ticks: {\n display: false,\n },\n },\n category: {\n display: true,\n grid: {\n display: false,\n },\n },\n },\n font: {\n family: 'Roboto',\n },\n plugins: {\n legend: {\n display: false,\n },\n datalabels: {\n display: false,\n },\n tooltip: {\n enabled: false,\n },\n },\n};\n","import {\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n Filler,\n Legend,\n LinearScale,\n LineController,\n LineElement,\n PointElement,\n TimeScale,\n Tooltip,\n} from 'chart.js';\nimport 'chartjs-adapter-date-fns';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nimport { mergeDeepAll } from '../../../helpers/merge-deep';\nimport MarkerPlugin from '../chart-js/chartjs-plugin-marker/chartjs-plugin-marker';\nimport { CHART_GLOBAL_DEFAULTS } from '../configs/global-defaults.config';\n\nconst CHART_SCALES = [CategoryScale, LinearScale, TimeScale];\nconst CHART_ELEMENTS = [BarElement, LineElement, PointElement];\nconst CHART_CONTROLLERS = [BarController, LineController];\nconst CHART_PLUGINS = [annotationPlugin, Filler, ChartDataLabels, Tooltip, MarkerPlugin];\n\n/* Order matters; defaults must be merged after register as \n register modifies the Chart.defaults objects */\nChart.register(Legend, ...CHART_SCALES, ...CHART_ELEMENTS, ...CHART_CONTROLLERS, ...CHART_PLUGINS);\n\n/* Chart.defaults is read only; set each key modified in \n CHART_GLOBAL_DEFAULTS manually */\nconst mergedDefaults = mergeDeepAll(Chart.defaults, CHART_GLOBAL_DEFAULTS);\nObject.entries(CHART_GLOBAL_DEFAULTS).forEach(([key]) => {\n Chart.defaults[key] = mergedDefaults[key];\n});\n\nexport { Chart };\n","import { ElementRef, Injectable } from '@angular/core';\nimport { ActiveElement, ChartConfiguration, ChartOptions, ScatterDataPoint } from 'chart.js';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { toDate } from 'date-fns';\n\nimport { mergeDeepAll } from '../../../helpers/merge-deep';\nimport {\n ChartDataLabelOptions,\n ChartDataset,\n ChartHighlightedElements,\n ChartLocale,\n ChartType,\n isNumberArray,\n} from '../chart.types';\nimport { ChartConfigService } from '../configs/chart-config.service';\n\nimport { Chart } from './configured-chart-js';\n\nconst CHART_LOCALE_DEFAULT = 'en-US';\n\n@Injectable()\nexport class ChartJSService {\n private chart: Chart;\n private dataLabelOptions: ChartDataLabelOptions;\n private highlightedElements: ChartHighlightedElements;\n private chartType: ChartType;\n private locale: ChartLocale;\n\n constructor(private chartConfigService: ChartConfigService) {}\n\n public renderChart(args: {\n targetElement: ElementRef<HTMLCanvasElement>;\n type: ChartType;\n data: ChartDataset[] | number[];\n labels?: string[] | string[][];\n customOptions?: ChartOptions;\n annotations?: AnnotationOptions[];\n dataLabelOptions?: ChartDataLabelOptions;\n highlightedElements?: ChartHighlightedElements;\n }): void {\n const {\n targetElement,\n type,\n data,\n labels,\n customOptions,\n annotations,\n dataLabelOptions,\n highlightedElements,\n } = args;\n\n this.dataLabelOptions = dataLabelOptions || null;\n this.highlightedElements = highlightedElements || null;\n this.chartType = type;\n this.locale = dataLabelOptions?.locale || CHART_LOCALE_DEFAULT;\n\n const datasets = this.createDatasets(data);\n\n const options = this.createOptionsObject({\n customOptions,\n annotations,\n dataLabelOptions,\n });\n let config = this.createConfigurationObject(type, datasets, options, labels);\n\n this.initializeNewChart(targetElement.nativeElement, config);\n }\n\n public redrawChart() {\n this.chart.update();\n }\n\n public updateData(data: ChartDataset[] | number[]): void {\n const datasets = this.createDatasets(data);\n\n this.chart.data.datasets = datasets;\n }\n\n public updateLabels(labels: string[] | string[][]) {\n this.chart.data.labels = labels;\n }\n\n public updateType(type: ChartType, customOptions?: ChartOptions) {\n if (type === 'bar' || type === 'column') {\n /* indexAxis does not update predictably; update by replacing \n the chart entirely instead */\n this.destructivelyUpdateType(type, customOptions);\n } else {\n this.nonDestructivelyUpdateType(type, customOptions);\n }\n }\n\n public setDataLabelOptions(dataLabelOptions: ChartDataLabelOptions) {\n this.dataLabelOptions = dataLabelOptions;\n }\n\n public updateOptions(customOptions: ChartOptions, type: ChartType) {\n const annotations = this.getExistingChartAnnotations();\n this.chartType = type;\n this.chart.options = this.createOptionsObject({ customOptions, annotations });\n }\n\n public updateAnnotations(annotations: AnnotationOptions[]) {\n const annotationsWithDefaults = this.applyDefaultsToAnnotations(annotations);\n this.chart.options.plugins.annotation.annotations = annotationsWithDefaults;\n }\n\n public updateHighlightedElements(highlightedElements?: ChartHighlightedElements) {\n this.highlightedElements = highlightedElements;\n const oldDatasets = this.chart.data.datasets as ChartDataset[];\n\n // Clear old datasets of highlighted elements\n oldDatasets.map((dataset) => {\n if (dataset?.kirbyOptions?.highlightedElements) {\n delete dataset.kirbyOptions.highlightedElements;\n }\n });\n\n this.chart.data.datasets = this.createDatasets(oldDatasets);\n }\n\n private getExistingChartAnnotations(): AnnotationOptions[] {\n const annotations = this.chart.options.plugins?.annotation?.annotations;\n /* In browser chart.js might return annotations as a Proxy object; force it to be an array.\n Each annotationOption in the resulting array will also be a Proxy object. \n But internally chart.js will just work with them as normal values */\n if (annotations !== undefined) {\n return Object.keys(annotations).map((key) => annotations[key]);\n } else {\n return [];\n }\n }\n\n private destructivelyUpdateType(type: ChartType, customOptions?: ChartOptions) {\n const datasets = this.chart.data.datasets as ChartDataset[];\n const labels = this.chart.data.labels;\n const annotations = this.getExistingChartAnnotations();\n\n this.chartType = type;\n const options = this.createOptionsObject({ customOptions, annotations });\n const config = this.createConfigurationObject(type, datasets, options, labels);\n const canvasElement = this.chart.canvas;\n\n this.chart.destroy();\n this.initializeNewChart(canvasElement, config);\n }\n\n private nonDestructivelyUpdateType(chartType: ChartType, customOptions?: ChartOptions) {\n const annotations = this.getExistingChartAnnotations();\n this.chartType = chartType;\n const options = this.createOptionsObject({\n customOptions,\n annotations,\n });\n\n this.chart.options = options;\n this.chart.config.type = this.chartConfigService.chartTypeToChartJSType(chartType);\n }\n\n private initializeNewChart(canvasElement: HTMLCanvasElement, config: ChartConfiguration) {\n this.chart = new Chart(canvasElement, config);\n }\n\n private createBlankLabels(datasets: ChartDataset[]): string[] {\n const largestDataset = datasets.reduce((previousDataset, currentDataset) =>\n previousDataset.data.length > currentDataset.data.length ? previousDataset : currentDataset\n );\n return Array(largestDataset.data.length).fill('');\n }\n\n private applyDefaultsToAnnotations(annotations: AnnotationOptions[]) {\n return annotations.map((annotation) => {\n const annotationTypeDefaults = this.chartConfigService.getAnnotationDefaults(annotation.type);\n return mergeDeepAll(annotationTypeDefaults, annotation);\n });\n }\n\n private createAnnotationPluginOptionsObject(annotations: AnnotationOptions[]) {\n const annotationsWithDefaults = this.applyDefaultsToAnnotations(annotations);\n return {\n plugins: {\n annotation: {\n annotations: annotationsWithDefaults,\n },\n },\n };\n }\n\n private applyInteractionFunctionsExtensions(options: ChartOptions): ChartOptions {\n const interactionFunctionsExtensions = this.chartConfigService.getInteractionFunctionsExtensions();\n Object.entries(interactionFunctionsExtensions).forEach(([key, _]) => {\n const callback = options[key];\n options[key] = (e: Event, a: ActiveElement[], c: Chart) => {\n interactionFunctionsExtensions[key](e, a, c, callback);\n };\n });\n return options;\n }\n\n private createStockOptionsObject(dataLabelOptions: ChartDataLabelOptions) {\n return {\n locale: this.locale,\n plugins: {\n tooltip: {\n callbacks: {\n title: (tooltipItems) => {\n const date = toDate((tooltipItems[0]?.raw as any)?.x);\n if (date.valueOf()) {\n return date.toLocaleTimeString(this.locale, {\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n },\n label: (context) => {\n // It's not possible to add spacing between color legend and text so we\n // prefix with a space.\n return ' ' + context.formattedValue + (dataLabelOptions.valueSuffix || '');\n },\n },\n },\n },\n scales: {\n y: {\n ticks: {\n callback: (value) => {\n return value + (dataLabelOptions.valueSuffix || '');\n },\n },\n },\n },\n };\n }\n\n private createOptionsObject(args: {\n customOptions?: ChartOptions;\n annotations?: AnnotationOptions[];\n dataLabelOptions?: ChartDataLabelOptions;\n }): ChartOptions {\n const { customOptions, annotations, dataLabelOptions: chartDataLabelOptions } = args;\n\n const typeConfig = this.chartConfigService.getTypeConfig(this.chartType);\n const typeConfigOptions = typeConfig?.options;\n const annotationPluginOptions = annotations\n ? this.createAnnotationPluginOptionsObject(annotations)\n : {};\n const stockOptions: ChartOptions =\n this.chartType === 'stock' ? this.createStockOptionsObject(chartDataLabelOptions) : {};\n\n let options: ChartOptions = mergeDeepAll(\n stockOptions,\n typeConfigOptions,\n customOptions,\n annotationPluginOptions\n );\n\n return this.applyInteractionFunctionsExtensions(options);\n }\n\n private getDefaultStockLabels(datasets: ChartDataset[], locale: ChartLocale) {\n const largestDataset = datasets.reduce((previousDataset, currentDataset) =>\n previousDataset.data.length > currentDataset.data.length ? previousDataset : currentDataset\n );\n return largestDataset.data.map((point: ScatterDataPoint) =>\n toDate(point.x).toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n })\n );\n }\n\n private createConfigurationObject(\n type: ChartType,\n datasets: ChartDataset[],\n options: ChartOptions,\n labels?: unknown[]\n ): ChartConfiguration {\n const typeConfig = this.chartConfigService.getTypeConfig(type);\n\n const labelsToApply = (() => {\n if (type === 'stock') {\n /* \n The time scale will auto generate labels based on data. \n It should be possible to pass an empty array to get the default \n behaviour of chart.js when using stock chart. \n\n TODO: Simplify to always pass labels, if given, to chart.js.\n Would be a breaking change. See issue: \n https://github.com/kirbydesign/designsystem/issues/2085\n */\n const shouldUseTimescaleLabels =\n labels?.length === 0 && options?.scales?.x?.type === 'time';\n if (shouldUseTimescaleLabels) return labels;\n return this.getDefaultStockLabels(datasets, this.locale);\n } else if (labels?.length > 0) {\n return labels;\n } else {\n return this.createBlankLabels(datasets);\n }\n })();\n\n return mergeDeepAll(typeConfig, {\n data: {\n labels: labelsToApply,\n datasets,\n },\n options,\n }) as ChartConfiguration;\n }\n\n private addHighlightedElementsToDatasets(\n highlightedElements: ChartHighlightedElements,\n datasets: ChartDataset[]\n ) {\n highlightedElements.forEach(([datasetIndex, dataIndex]) => {\n const dataset = datasets[datasetIndex];\n if (!dataset) return;\n\n if (dataset?.kirbyOptions?.highlightedElements) {\n dataset.kirbyOptions.highlightedElements.push(dataIndex);\n } else {\n dataset.kirbyOptions = {\n ...dataset.kirbyOptions,\n highlightedElements: [dataIndex],\n };\n }\n });\n }\n private createDatasets(data: ChartDataset[] | number[]): ChartDataset[] {\n // We need to modify the datasets in order to add datalabels.\n if (\n this.dataLabelOptions?.showCurrent ||\n this.dataLabelOptions?.showMax ||\n this.dataLabelOptions?.showMin\n ) {\n data = this.addDataLabelsData(data);\n }\n let datasets = isNumberArray(data) ? [{ data }] : data;\n if (this.highlightedElements)\n this.addHighlightedElementsToDatasets(this.highlightedElements, datasets);\n\n /* \n Hacky solution. Should be fixed in this issue:\n https://github.com/kirbydesign/designsystem/issues/1967 \n */\n if (this.chartType === 'stock') {\n datasets.forEach((dataset) => {\n dataset.kirbyOptions = {\n ...dataset.kirbyOptions,\n isStockChart: true,\n };\n });\n }\n\n return datasets;\n }\n /**\n * Decorate ChartDataset with properties to allow for datalabels.\n *\n * @param data\n * @returns ChartDataset[]\n */\n public addDataLabelsData(data: ChartDataset[] | number[]): ChartDataset[] {\n if (isNumberArray(data)) {\n throw Error(\"Currently it's impossible to add dataLabels to non ScatterDataPoint datasets\");\n }\n\n const decorateDataPoint = (\n set: ChartDataset,\n axis: 'x' | 'y',\n direction: 'high' | 'low',\n position: 'bottom' | 'top' | 'left' | 'right'\n ): void => {\n const { value, pointer } = this.locateValueIndexInDataset(set, axis, direction);\n set.data[pointer] = {\n ...(set.data[pointer] as ScatterDataPoint),\n datalabel: {\n value: value + (this.dataLabelOptions.valueSuffix || ''),\n position,\n },\n } as ScatterDataPoint;\n };\n\n data.map((set) => {\n if (this.dataLabelOptions.showMin) {\n decorateDataPoint(set, 'y', 'low', 'bottom');\n }\n if (this.dataLabelOptions.showMax) {\n decorateDataPoint(set, 'y', 'high', 'top');\n }\n if (this.dataLabelOptions.showCurrent) {\n decorateDataPoint(set, 'x', 'high', 'right');\n }\n });\n return data;\n }\n\n private locateValueIndexInDataset(\n dataset: ChartDataset,\n axis: string,\n direction: 'low' | 'high'\n ): { value: number; pointer: number } {\n let pointer: number;\n let value: number;\n dataset.data.forEach((datapoint, index) => {\n if (direction == 'low' && (!value || datapoint[axis] < value)) {\n value = datapoint['y'];\n pointer = index;\n }\n if (direction == 'high' && (!value || datapoint[axis] > value)) {\n value = datapoint['y'];\n pointer = index;\n }\n });\n return { value, pointer };\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ChartOptions } from 'chart.js';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\n\nimport { ResizeObserverFactory } from '../shared';\n\nimport { ChartJSService } from './chart-js/chart-js.service';\nimport {\n ChartDataLabelOptions,\n ChartDataset,\n ChartHighlightedElements,\n ChartType,\n} from './chart.types';\n\nconst DATA_LABELS_DEPRECATION_WARNING =\n 'Deprecation warning: The \"kirby-chart\" input property \"dataLabels\" will be removed in a future release of Kirby designsystem. Use \"labels\" instead. For more information see the following announcement: https://github.com/kirbydesign/designsystem/discussions/1980';\n\n@Component({\n selector: 'kirby-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [ChartJSService],\n})\nexport class ChartComponent implements AfterViewInit, OnChanges {\n @Input() type: ChartType = 'column';\n @Input() data: ChartDataset[] | number[];\n\n private _labels: string[] | string[][];\n\n get labels(): string[] | string[][] {\n return this._labels;\n }\n @Input() set labels(value: string[] | string[][]) {\n this._labels = value;\n }\n @Input() set dataLabels(value: string[] | string[][]) {\n console.warn(DATA_LABELS_DEPRECATION_WARNING);\n this._labels = value;\n }\n\n @Input() customOptions?: ChartOptions;\n @Input() dataLabelOptions?: ChartDataLabelOptions;\n @Input() annotations?: AnnotationOptions[];\n @Input() highlightedElements?: ChartHighlightedElements;\n\n @HostBinding('style.--kirby-chart-height')\n _height: string;\n @Input() set height(value: string | number) {\n this._height = typeof value === 'number' ? `${value}px` : value;\n }\n\n @ViewChild('chartCanvas')\n canvasElement: ElementRef<HTMLCanvasElement>;\n\n private chartHasBeenRendered: boolean = false;\n\n constructor(private chartJSService: ChartJSService) {}\n\n ngAfterViewInit() {\n /* \n A chart is not rendered until it has both a height and a width. \n If ChartComponent is slotted in an ionic component it will\n not have any height or width on afterViewInit. This will cause \n the animation to not be played on first draw. \n */\n const canvasElement = this.canvasElement.nativeElement;\n this.whenElementHasHeightAndWidth(canvasElement).then(() => this.renderChart());\n }\n\n private whenElementHasHeightAndWidth(element: HTMLElement): Promise<void> {\n const rectIs2D = ({ width, height }) => height > 0 && width > 0;\n\n return new Promise((resolve) => {\n const initialClientRect = element.getBoundingClientRect();\n if (rectIs2D(initialClientRect)) resolve();\n\n const resizeObserver = new ResizeObserverFactory().create(([resizeObserverEntry]) => {\n if (rectIs2D(resizeObserverEntry.contentRect)) {\n resizeObserver.unobserve(element);\n resolve();\n }\n });\n\n resizeObserver.observe(element);\n });\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.chartHasBeenRendered) {\n let shouldRedrawChart = false;\n\n // TODO: Remove 'dataLabels' key when the input property is removed\n const keyUpdateFnPairs = {\n data: () => this.updateData(),\n dataLabels: () => this.updateLabels(),\n labels: () => this.updateLabels(),\n type: () => this.updateType(),\n customOptions: () => this.updateCustomOptions(),\n annotations: () => this.updateAnnotations(),\n highlightedElements: () => this.updateHighlightedElements(),\n };\n\n Object.entries(simpleChanges).forEach(([key]) => {\n if (simpleChanges[key].firstChange || !keyUpdateFnPairs[key]) return;\n shouldRedrawChart = true;\n keyUpdateFnPairs[key]();\n });\n\n if (shouldRedrawChart) this.redrawChart();\n }\n }\n\n private renderChart() {\n this.chartHasBeenRendered = true;\n this.chartJSService.renderChart({\n targetElement: this.canvasElement,\n type: this.type,\n data: this.data,\n labels: this.labels,\n customOptions: this.customOptions,\n annotations: this.annotations,\n dataLabelOptions: this.dataLabelOptions,\n highlightedElements: this.highlightedElements,\n });\n }\n\n private updateData() {\n this.chartJSService.updateData(this.data);\n }\n\n private updateLabels() {\n this.chartJSService.updateLabels(this.labels);\n }\n\n private updateType() {\n this.chartJSService.updateType(this.type, this.customOptions);\n }\n\n private updateCustomOptions() {\n this.chartJSService.updateOptions(this.customOptions, this.type);\n }\n\n private updateAnnotations() {\n this.chartJSService.updateAnnotations(this.annotations);\n }\n\n private updateHighlightedElements() {\n this.chartJSService.updateHighlightedElements(this.highlightedElements);\n }\n\n private redrawChart() {\n this.chartJSService.redrawChart();\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { Options } from 'highcharts';\nimport { dateFormat } from 'highcharts/highstock';\n\nimport { ColorHelper } from '@kirbydesign/core';\n\nexport interface StockChartDeprecatedDataPoint {\n x: number;\n y: number;\n id: 'min' | 'max' | '';\n}\n\nexport const stockChartDeprecatedOptions = (locale: string, height: number) => {\n const options: Options = defaultOptions(locale) as Options;\n const transparentColor = 'rgba(255,255,255,0)';\n options.chart.backgroundColor = transparentColor;\n options.chart.height = height;\n\n options.tooltip.backgroundColor = ColorHelper.getThemeColorRgbString('background-color');\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.tooltip.formatter = function() {\n return (\n '<div class=\"kirby-text-xsmall\">' +\n // @ts-ignore\n dateFormat('%e. %b', new Date(this.x)) +\n '</div><br/><div class=\"kirby-text-small kirby-text-bold\">' +\n formatNumber(this.y, locale) +\n '</div>'\n );\n };\n options.plotOptions.area.fillColor = transparentColor;\n options.plotOptions.area.lineColor = ColorHelper.getThemeColorRgbString('tertiary');\n\n options.plotOptions.area.marker.lineColor = 'rgba(255,255,255,0.3)';\n options.plotOptions.area.marker.fillColor = ColorHelper.getThemeColorRgbString('primary');\n\n options.xAxis = {\n ...options.xAxis,\n crosshair: {\n color: ColorHelper.getThemeColorRgbString('primary'),\n },\n tickColor: transparentColor,\n lineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n };\n\n options.yAxis = {\n ...options.yAxis,\n lineColor: transparentColor,\n gridLineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n };\n\n /*\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.plotOptions.area.events.mouseOver = function() {\n const transparentColor = 'rgba(255,255,255,0)';\n this.chart.xAxis[0].update({\n tickColor: transparentColor,\n lineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n });\n };\n\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.plotOptions.area.events.mouseOut = function() {\n const transparentColor = 'rgba(255,255,255,0)';\n this.chart.xAxis[0].update({\n lineColor: transparentColor,\n labels: {\n style: {\n color: transparentColor,\n },\n },\n });\n };\n */\n\n return options;\n};\n\nexport const annotations = (locale: string): Highcharts.AnnotationsOptions => {\n return {\n id: 'minmax',\n zIndex: 2,\n labels: [\n {\n point: 'max',\n shape: 'rect',\n distance: 5,\n align: 'center',\n verticalAlign: 'top',\n backgroundColor: ColorHelper.getThemeColorRgbString('tertiary'),\n // Using a function instead of a lamdba-expression because of a reference to this.\n formatter: function() {\n return formatNumber(this.y, locale, '1.1-1');\n },\n },\n {\n point: 'min',\n shape: 'rect',\n distance: -28,\n align: 'center',\n verticalAlign: 'bottom',\n backgroundColor: ColorHelper.getThemeColorRgbString('tertiary'),\n // Using a function instead of a lamdba-expression because of a reference to this.\n formatter: function() {\n return formatNumber(this.y, locale, '1.1-1');\n },\n },\n ],\n labelOptions: {\n y: 0,\n allowOverlap: true,\n },\n };\n};\n\nconst defaultOptions = (locale: string) => {\n return {\n chart: {\n zoomType: 'x',\n type: 'StockChart',\n spacingTop: 30,\n //spacingRight: 55,\n },\n navigator: {\n enabled: false,\n },\n rangeSelector: {\n enabled: false,\n },\n scrollbar: {\n enabled: false,\n },\n credits: {\n enabled: false,\n },\n title: {\n text: '',\n },\n subtitle: {\n text: '',\n },\n xAxis: {\n ordinal: true,\n type: 'datetime',\n lineWidth: 0.5,\n opposite: false,\n labels: {\n format: '{value:%Y-%b-%e %l:%M %p }',\n },\n },\n yAxis: {\n opposite: false,\n title: {\n text: '',\n },\n /* Doesn't work before upgrade.\n labels: {\n x: 0,\n y: 10,\n align: 'right',\n },\n */\n },\n annotations: [annotations(locale)],\n legend: {\n enabled: false,\n },\n tooltip: {\n crosshairs: {\n width: 1,\n zIndex: 2,\n },\n shadow: false,\n borderWidth: 0,\n },\n plotOptions: {\n area: {\n marker: {\n lineWidth: 16,\n radius: 7,\n },\n lineWidth: 2,\n states: {\n hover: {\n lineWidth: 2,\n },\n },\n events: {},\n threshold: null,\n },\n series: {\n marker: {\n zIndex: 100,\n enabledThreshold: 50,\n },\n },\n },\n series: [\n {\n type: 'area',\n data: [],\n },\n ],\n };\n};\n","import { Component, ElementRef, Inject, Input, LOCALE_ID } from '@angular/core';\nimport { Options } from 'highcharts';\nimport * as Highcharts from 'highcharts/highstock';\nimport AnnotationsModule from 'highcharts/modules/annotations';\n\nimport {\n annotations,\n StockChartDeprecatedDataPoint,\n} from './options/stock-chart-deprecated-options';\n\n// @ts-ignore\nAnnotationsModule(Highcharts);\n\n@Component({\n selector: 'kirby-stock-chart-deprecated',\n template: '',\n styleUrls: ['./stock-chart-deprecated.component.scss'],\n})\nexport class StockChartDeprecatedComponent {\n chartContainer: ElementRef;\n private _data: StockChartDeprecatedDataPoint[];\n @Input() set data(val: StockChartDeprecatedDataPoint[]) {\n this.onDataChanges(val);\n }\n get data() {\n return this._data;\n }\n private _options: Options;\n @Input() set options(val: Options) {\n this.onOptionsChanges(val);\n }\n get options() {\n return this._options;\n }\n private _height = 300;\n @Input() set height(height: number) {\n this._height = height;\n if (this.chart) {\n this.chart.setSize(null, height);\n }\n }\n get height() {\n return this._height;\n }\n @Input() description = '';\n @Input() showDataLabels = true;\n\n chart: Highcharts.Chart;\n\n constructor(hostElement: ElementRef, @Inject(LOCALE_ID) private locale: string) {\n this.chartContainer = hostElement;\n }\n\n onOptionsChanges(options: Options) {\n this._options = options;\n this.chart = Highcharts.stockChart(this.chartContainer.nativeElement, this._options);\n }\n\n onDataChanges(data: StockChartDeprecatedDataPoint[]) {\n this._data = data;\n\n if (this.chart != null) {\n // First delete all points in the previous series.\n this.chart.update(\n {\n series: [],\n },\n false,\n true\n );\n // Remove the annotations.\n this.chart.removeAnnotation('minmax');\n // Then update the chart with new series data.\n this.chart.update(\n {\n series: [\n {\n type: 'area',\n data: data,\n },\n ],\n },\n false,\n true\n );\n // Add the new annotations.\n this.chart.addAnnotation(annotations(this.locale), false);\n // And finally redraw the graph with all the changes.\n this.chart.redraw();\n }\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\n\nimport { WindowRef } from '../../../types/window-ref';\n\nimport { CalendarOptions } from './calendar-options.model';\n\n@Injectable()\nexport class CalendarHelper {\n private embeddedView: Window;\n private embeddedViewReady = false;\n\n constructor(private windowRef: WindowRef) {}\n\n public init(\n calendarContainer: ElementRef,\n options: CalendarOptions,\n onDaySelected: (cell: { isSelectable: boolean; date: number }) => void,\n onChangeMonth: (index: number) => void\n ) {\n if (this.hasEmbeddedView(calendarContainer)) {\n const iframe = <HTMLIFrameElement>calendarContainer.nativeElement;\n iframe.onload = () => {\n this.embeddedViewReady = true;\n this.emitOptionsToEmbeddedView(options);\n };\n this.embeddedView = iframe.contentWindow;\n\n this.windowRef.nativeWindow.addEventListener('message', (event: MessageEvent) =>\n this.handleMessageEvent(event, onDaySelected, onChangeMonth)\n );\n }\n }\n\n public update(options: CalendarOptions) {\n if (this.embeddedViewReady) {\n this.emitOptionsToEmbeddedView(options);\n }\n }\n\n public setSelectedDay(day: number) {\n if (this.embeddedViewReady) {\n this.embeddedView.postMessage(\n {\n type: 'kirbyCalendarSetSelectedDay',\n selectedDay: day,\n },\n '*'\n );\n }\n }\n\n private hasEmbeddedView(calendarContainer: ElementRef) {\n return (\n calendarContainer &&\n calendarContainer.nativeElement &&\n calendarContainer.nativeElement instanceof HTMLIFrameElement &&\n calendarContainer.nativeElement.contentWindow\n );\n }\n\n private emitOptionsToEmbeddedView(options: CalendarOptions) {\n this.embeddedView.postMessage(\n {\n type: 'kirbyCalendarInit',\n ...options,\n },\n '*'\n );\n }\n\n private handleMessageEvent(\n event: MessageEvent,\n onDaySelected: (cell: { isSelectable: boolean; date: number }) => void,\n onChangeMonth: (index: number) => void\n ) {\n if (this.validateMessage(event)) {\n switch (event.data.type) {\n case 'kirbyCalendarDaySelected':\n if (this.validateDateSelectedMessage(event)) {\n onDaySelected({ isSelectable: true, date: event.data.day });\n }\n break;\n case 'kirbyCalendarChangeMonth':\n if (this.validateNavigateMonthMessage(event)) {\n onChangeMonth(event.data.index);\n }\n break;\n }\n }\n }\n\n private validateMessage(event: MessageEvent) {\n return (\n this.embeddedView === event.source &&\n event.type === 'message' &&\n event.data &&\n event.data.type\n );\n }\n\n private validateDateSelectedMessage(event: MessageEvent) {\n return event.data.type === 'kirbyCalendarDaySelected' && event.data.day;\n }\n\n private validateNavigateMonthMessage(event: MessageEvent) {\n return event.data.type === 'kirbyCalendarChangeMonth' && typeof event.data.index === 'number';\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n add,\n differenceInDays,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getYear,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWeekend,\n Locale as LocaleDateFns,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { da, enGB, enUS } from 'date-fns/locale';\n\nimport { capitalizeFirstLetter } from '@kirbydesign/core';\n\nimport { CalendarCell } from './helpers/calendar-cell.model';\nimport { CalendarOptions } from './helpers/calendar-options.model';\nimport { CalendarHelper } from './helpers/calendar.helper';\nimport { CalendarYearNavigatorConfig } from './options/calendar-year-navigator-config';\n\nexport type Locale = LocaleDateFns;\ninterface CalendarDay {\n isCurrentMonth: boolean;\n isToday: boolean;\n isWeekend: boolean;\n isPast: boolean;\n isFuture: boolean;\n isDisabled: boolean;\n}\n\nenum TimeUnit {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n milliseconds = 'milliseconds',\n}\n\n@Component({\n selector: 'kirby-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n providers: [CalendarHelper],\n})\nexport class CalendarComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('calendarContainer', { static: false }) calendarContainer: ElementRef;\n @Output() dateChange = new EventEmitter<Date>();\n @Output() dateSelect = new EventEmitter<Date>();\n @Output() yearSelect = new EventEmitter<number>();\n @Input() timezone: 'local' | 'UTC' = 'local';\n @Input() disableWeekends = false;\n @Input() disablePastDates = false;\n @Input() disableFutureDates = false;\n @Input() alwaysEnableToday = false;\n @Input() customLocales: { [key: string]: Locale } = {};\n /* \n Experimental: Input property not documented on purpose. \n For context see: https://github.com/kirbydesign/designsystem/issues/2087\n */\n @Input() usePopover = false;\n /**\n * Configuration for the year navigator.\n *\n * Internally, calendar component:\n * - bases yearNavigatorOptions.from and yearNavigatorOptions.to on todayDate if a number is provided\n * - prioritizes minDate and maxDate over yearNavigatorOptions.from and yearNavigatorOptions.to\n */\n @Input() yearNavigatorOptions: CalendarYearNavigatorConfig;\n\n _month: CalendarCell[][];\n _weekDays: string[];\n private selectedDay: CalendarCell;\n // NOTE: Internally, all Dates\n // are normalized to point to local timezone midnight, regardless of the timezone\n // setting.\n private activeMonth: Date;\n private _selectedDate: Date;\n private _disabledDates: Date[] = [];\n private _todayDate: Date;\n private _minDate: Date;\n private _maxDate: Date;\n private locale: Locale;\n private timeZoneName: string;\n private includedLocales = { da, enGB, enUS };\n\n get selectedDate(): Date {\n return this._selectedDate;\n }\n\n @Input() set selectedDate(valueLocalOrUTC: Date) {\n const value = this.normalizeDate(valueLocalOrUTC);\n this.setActiveMonth(value);\n\n if (this.hasDateChanged(value, this._selectedDate)) {\n this.onSelectedDateChange(value);\n this._selectedDate = value;\n }\n }\n\n get disabledDates(): Date[] {\n return this._disabledDates;\n }\n\n @Input() set disabledDates(value: Date[]) {\n this._disabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get todayDate(): Date {\n return this._todayDate;\n }\n\n @Input() set todayDate(value: Date) {\n this._todayDate = this.normalizeDate(value);\n }\n\n get minDate(): Date {\n return this._minDate;\n }\n\n @Input() set minDate(value: Date) {\n if (value && this.activeMonth && isBefore(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._minDate = this.normalizeDate(value);\n }\n\n get maxDate(): Date {\n return this._maxDate;\n }\n\n @Input() set maxDate(value: Date) {\n if (value && this.activeMonth && isAfter(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._maxDate = this.normalizeDate(value);\n }\n\n get activeMonthName(): string {\n return capitalizeFirstLetter(this.formatWithLocale(this.activeMonth, 'MMMM'));\n }\n\n get activeYear(): string {\n return this.formatWithLocale(this.activeMonth, 'yyyy');\n }\n\n /**\n * Gets navigable years for year navigator based on yearNavigatorOptions.\n */\n get navigableYears(): string[] {\n const dateOfFirstNavigableYear =\n this.minDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.from);\n\n const dateOfLastNavigableYear =\n this.maxDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.to);\n\n return this.getYearsBetweenDates(dateOfFirstNavigableYear, dateOfLastNavigableYear);\n }\n\n get navigatedYear(): number {\n return this.navigableYears.indexOf(this.activeYear);\n }\n\n @HostBinding('class.has-year-navigator')\n get _hasYearNavigator() {\n return !!this.yearNavigatorOptions;\n }\n\n constructor(private calendarHelper: CalendarHelper, @Inject(LOCALE_ID) locale: string) {\n this.locale = this.mapLocale(locale);\n this.timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private formatWithLocale(date: Date, formatString: string): string {\n return format(date, formatString, {\n locale: this.locale,\n });\n }\n\n private mapLocale(locale: string): Locale {\n if (locale === 'en') {\n locale = 'enGB'; // if english locale is provided without region, we default to GB\n }\n locale = locale.replace('-', '');\n const availableLocales = { ...this.includedLocales, ...this.customLocales };\n\n return availableLocales[locale] || this.includedLocales.enGB; // Default to enGB if injected locale doesnt exist\n }\n\n ngOnInit() {\n this._weekDays = this.getWeekDays();\n this.setActiveMonth(this.selectedDate);\n }\n\n ngAfterViewInit() {\n this.calendarHelper.init(\n this.calendarContainer,\n this.getHelperOptions(),\n this._onDateSelected.bind(this),\n this.onChangeMonth.bind(this)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.activeMonth) return;\n if (\n changes.disableWeekends ||\n changes.disablePastDates ||\n changes.disableFutureDates ||\n changes.disabledDates ||\n changes.minDate ||\n changes.maxDate ||\n changes.todayDate ||\n changes.timezone\n ) {\n this.refreshActiveMonth();\n this.calendarHelper.update(this.getHelperOptions());\n }\n }\n\n private setActiveMonth(date: Date = new Date()) {\n if (!this.activeMonth || !isSameMonth(this.activeMonth, date)) {\n this.activeMonth = startOfMonth(date);\n this.refreshActiveMonth();\n this.calendarHelper.update(this.getHelperOptions());\n }\n }\n\n // For leniency, the component will accept any Date that points to either UTC midnight\n // or to local timezone midnight although we will internally normalize the representation\n // of all received dates to point to local timezone midnight.\n // We currently log no warnings if the date doesn't match the timezone setting or\n // if it doesn't point to midnight.\n private normalizeDate(dateLocalOrUTC: Date) {\n if (!dateLocalOrUTC) return;\n\n if (startOfDay(dateLocalOrUTC).getTime() === dateLocalOrUTC.getTime()) {\n // date is local timezone midnight\n return dateLocalOrUTC;\n }\n if (\n startOfDay(utcToZonedTime(dateLocalOrUTC, this.timeZoneName)).getTime() ===\n utcToZonedTime(dateLocalOrUTC, this.timeZoneName).getTime()\n ) {\n // the date is a UTC midnight; create the equivalent local timezone midnight date\n const normalizedUTCdate = utcToZonedTime(dateLocalOrUTC, this.timeZoneName);\n return normalizedUTCdate;\n }\n // does not point to midnight so we make it\n return startOfDay(dateLocalOrUTC);\n }\n\n private getWeekDays(): string[] {\n const now = new Date();\n\n const week = eachDayOfInterval({\n start: startOfWeek(now, { locale: this.locale }),\n end: endOfWeek(now, { locale: this.locale }),\n });\n\n return week.map((date) => this.getFirstLetterOfWeekDayCapitalized(date));\n }\n\n private getFirstLetterOfWeekDayCapitalized(date: Date) {\n return this.formatWithLocale(date, 'EEEEE');\n }\n\n private hasDateChanged(newDate: Date, previousDate: Date): boolean {\n if (!newDate && !previousDate) {\n return false;\n }\n if (newDate instanceof Date && !previousDate) {\n return true;\n }\n return !isSameDay(newDate, previousDate);\n }\n\n private isDisabledDate(date: Date): boolean {\n return this.disabledDates.some((disabledDate) => {\n return isSameDay(disabledDate, date);\n });\n }\n\n refreshActiveMonth() {\n if (!this.activeMonth) return;\n\n const monthStart = startOfMonth(this.activeMonth);\n const monthEnd = endOfMonth(this.activeMonth);\n const startOfFirstWeek = startOfWeek(monthStart, { locale: this.locale });\n const endOfLastWeek = endOfWeek(monthEnd, { locale: this.locale });\n const totalDayCount = differenceInDays(endOfLastWeek, startOfFirstWeek) + 1;\n const today = this.todayDate ? startOfDay(this.todayDate) : startOfDay(new Date());\n\n const daysArray = Array.from(Array(totalDayCount).keys());\n\n const days: CalendarCell[] = daysArray.map((number) => {\n const cellDate = add(startOfFirstWeek, { [TimeUnit.days]: number });\n const day = this.getCalendarDay(cellDate, today, monthStart);\n\n const isSelectable = this.isSelectable(day, cellDate);\n const isSelected = isSameDay(this.selectedDate, cellDate);\n const cell = {\n date: cellDate.getDate(),\n isCurrentMonth: day.isCurrentMonth,\n isSelectable,\n isSelected,\n cssClasses: this.getCssClasses(day, isSelectable, isSelected),\n };\n if (isSelected) {\n this.selectedDay = cell;\n }\n return cell;\n });\n this._month = this.chunk(days, 7);\n }\n\n private getCalendarDay(date: Date, today: Date, monthStart: Date): CalendarDay {\n return {\n isToday: isSameDay(today, date),\n isPast: isBefore(date, today),\n isFuture: isAfter(date, today),\n isWeekend: isWeekend(date),\n isCurrentMonth: isSameMonth(date, monthStart),\n isDisabled: this.isDisabledDate(date),\n };\n }\n\n private isSelectable(day: CalendarDay, date: Date) {\n return (\n (this.alwaysEnableToday && day.isToday) ||\n (!day.isDisabled &&\n day.isCurrentMonth &&\n !(this.disableWeekends && day.isWeekend) &&\n !(this.disablePastDates && day.isPast) &&\n !(this.disableFutureDates && day.isFuture) &&\n !(this.minDate && isBefore(date, this.minDate)) &&\n !(this.maxDate && isAfter(date, this.maxDate)))\n );\n }\n\n private getCssClasses(day: CalendarDay, isSelectable: boolean, isSelected: boolean) {\n const cssClasses = {\n 'current-month': day.isCurrentMonth,\n weekend: day.isWeekend,\n today: day.isToday,\n selectable: isSelectable,\n selected: isSelected,\n past: day.isPast,\n disabled: day.isDisabled,\n };\n let cssClassString = 'day';\n for (const key in cssClasses) {\n if (cssClasses[key]) {\n cssClassString += ' ' + key;\n }\n }\n return cssClassString;\n }\n\n private chunk(array: any[], size: number) {\n const results = [];\n while (array.length) {\n results.push(array.splice(0, size));\n }\n return results;\n }\n\n private onSelectedDateChange(newDate: Date): void {\n if (this.selectedDay) {\n this.selectedDay.isSelected = false;\n }\n\n const newDay = this.getCell(newDate);\n if (newDay) {\n newDay.isSelected = true;\n this.selectedDay = newDay;\n }\n this.calendarHelper.setSelectedDay(newDate.getDate());\n }\n\n _onDateSelected(newDay: CalendarCell) {\n if (newDay.isSelectable && newDay.date) {\n let newDate = new Date(this.activeMonth);\n\n if (this.timezone === 'UTC') {\n newDate = zonedTimeToUtc(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n newDate.setDate(newDay.date);\n const dateToEmit = newDate;\n\n if (this.hasDateChanged(newDate, this._selectedDate)) {\n this.onSelectedDateChange(newDate);\n this._selectedDate = newDate;\n this.dateChange.emit(dateToEmit);\n }\n this.dateSelect.emit(dateToEmit);\n }\n }\n\n private onChangeMonth(direction: number) {\n this._changeMonth(direction);\n this.calendarHelper.update(this.getHelperOptions());\n }\n\n _changeMonth(index: number) {\n this.changeActiveView(index, TimeUnit.months);\n }\n\n _changeYear(year: string) {\n const yearNumeric = Number(year);\n this.changeActiveView(yearNumeric - getYear(this.activeMonth), TimeUnit.years);\n this.yearSelect.emit(yearNumeric);\n }\n\n private changeActiveView(index: number, unit: TimeUnit) {\n if (index === 0) return;\n this.activeMonth = add(this.activeMonth, { [unit]: index });\n\n this.refreshActiveMonth();\n }\n\n get _canNavigateBack(): boolean {\n const reachedPastDatesLimit =\n this.disablePastDates && isSameMonth(this.activeMonth, this.todayDate);\n\n const reachedOrExceededMinDate =\n this.minDate &&\n (isSameMonth(this.activeMonth, this.minDate) || isBefore(this.activeMonth, this.minDate));\n\n return !reachedPastDatesLimit && !reachedOrExceededMinDate;\n }\n\n get _canNavigateForward(): boolean {\n const reachedFutureDatesLimit =\n this.disableFutureDates && isSameMonth(this.activeMonth, this.todayDate);\n\n const reachedOrExceededMaxDate =\n this.maxDate &&\n (isSameMonth(this.activeMonth, this.maxDate) || isAfter(this.activeMonth, this.maxDate));\n\n return !reachedFutureDatesLimit && !reachedOrExceededMaxDate;\n }\n\n private getCell(date: Date) {\n let foundDay = null;\n if (date) {\n for (let week of this._month) {\n foundDay = week.find((day) => {\n return day.isCurrentMonth && day.date === date.getDate();\n });\n if (foundDay) {\n break;\n }\n }\n }\n return foundDay;\n }\n\n private getHelperOptions(): CalendarOptions {\n return {\n canNavigateBack: this._canNavigateBack,\n canNavigateForward: this._canNavigateForward,\n year: this.activeYear,\n monthName: this.activeMonthName,\n weekDays: this._weekDays,\n month: this._month,\n };\n }\n\n private subtractTimezoneOffset(date: Date): Date {\n const timezoneOffsetInMs = date.getTimezoneOffset() * 60 * 1000;\n return new Date(date.getTime() - timezoneOffsetInMs);\n }\n\n private getDateFromNavigableYear(navigableYear: number | Date): Date {\n if (navigableYear instanceof Date) return navigableYear;\n const today = this.todayDate || new Date();\n return new Date(today.getFullYear() + navigableYear, 0, 1);\n }\n\n private getYearsBetweenDates(startDate: Date, endDate: Date): string[] {\n // Ensure years are ordered correctly if parameters are switched:\n const [startYear, endYear] = [startDate.getFullYear(), endDate.getFullYear()].sort();\n const numberOfYears = endYear - startYear;\n return Array.from({ length: numberOfYears + 1 }, (_, i) => (startYear + i).toString());\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { ItemSlidingSide, ItemSwipeAction } from './item-sliding.types';\n\n@Component({\n selector: 'kirby-item-sliding',\n templateUrl: './item-sliding.component.html',\n styleUrls: ['./item-sliding.component.scss'],\n})\nexport class ItemSlidingComponent {\n @Input() swipeActions: ItemSwipeAction[];\n\n _side: 'start' | 'end' = 'start';\n @Input() set side(value: ItemSlidingSide) {\n this._side = value === 'left' ? 'start' : 'end';\n }\n\n get _hasSwipeActions(): boolean {\n // Using '>' instead of '!==';\n // will only return true when swipeActions is an array\n return this.swipeActions?.length > 0;\n }\n}\n","export class UniqueIdGenerator {\n private static registry = new Map<string, UniqueIdGenerator>();\n private id = 0;\n\n private constructor(private scope: string) {}\n\n static scopedTo(scope: string) {\n let scopedGenerator = UniqueIdGenerator.registry.get(scope);\n if (!scopedGenerator) {\n scopedGenerator = new UniqueIdGenerator(scope);\n UniqueIdGenerator.registry.set(scope, scopedGenerator);\n }\n return scopedGenerator;\n }\n\n next(): string {\n return `${this.scope}-${this.id++}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n} from '@angular/core';\n\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\n\n@Component({\n selector: 'kirby-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n @Input() checked: boolean = false;\n @Input() attentionLevel: '1' | '2' = '2';\n\n @HostBinding('class.has-label')\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size?: 'xs' | 'sm' | 'md';\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean = false;\n\n @Input() disabled = false;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.attention-level1') get isAttentionLevel1() {\n return this.attentionLevel === '1';\n }\n @HostBinding('class.attention-level2') get isAttentionLevel2() {\n return this.attentionLevel === '2';\n }\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n onChecked(checked: boolean): void {\n this.checked = checked;\n this.checkedChange.emit(this.checked);\n }\n\n // IDs used for a11y labelling\n _labelId = UniqueIdGenerator.scopedTo('kirby-checkbox-label').next();\n}\n","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-chip',\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n})\nexport class ChipComponent {\n @Input() text: string;\n\n @Input()\n @HostBinding('attr.aria-selected')\n @HostBinding('class.is-selected')\n isSelected: boolean;\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent {\n @Input()\n hasMargin: boolean;\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\nexport enum ItemSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n}\n\n@Component({\n selector: 'kirby-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n})\nexport class ItemComponent {\n @Input() disabled: boolean;\n @HostBinding('class.selected')\n @Input()\n selected: boolean;\n @Input()\n selectable: boolean;\n @Input()\n reorderable: boolean;\n @HostBinding('class')\n @Input()\n size: ItemSize = ItemSize.MD;\n\n // Prevent default when inside kirby-dropdown to avoid blurring dropdown:\n onMouseDown(event: MouseEvent) {\n if (\n event.currentTarget instanceof HTMLElement &&\n event.currentTarget.closest('kirby-dropdown')\n ) {\n event.preventDefault();\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[kirbyListItem]',\n})\nexport class ListItemDirective {\n constructor() {\n console.warn(\n '*kirbyListItem directive is deprecated - please use *kirbyListItemTemplate directive instead.'\n );\n }\n}\n\n@Directive({\n selector: '[kirbyListFlexItem]',\n})\nexport class ListFlexItemDirective {\n constructor() {\n console.warn(\n '*kirbyListFlexItem directive is deprecated - please use *kirbyListItemTemplate directive instead.'\n );\n }\n}\n\n@Directive({\n selector: '[kirbyListItemTemplate]',\n})\nexport class ListItemTemplateDirective {}\n\n@Directive({\n selector: '[kirbyListHeader], [kirbyListHeaderTemplate]',\n})\nexport class ListHeaderDirective {}\n\n@Directive({\n selector: '[kirbyListSectionHeader], [kirbyListSectionHeaderTemplate]',\n})\nexport class ListSectionHeaderDirective {}\n\n@Directive({\n selector: '[kirbyListFooter], [kirbyListFooterTemplate]',\n})\nexport class ListFooterDirective {}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core';\n\nimport { DesignTokenHelper } from '../../helpers';\n\nexport enum HorizontalDirection {\n right = 'right',\n left = 'left',\n}\n\n@Component({\n selector: 'kirby-popover',\n template: `\n <div #wrapper class=\"wrapper\"><ng-content></ng-content></div>\n `,\n styleUrls: ['./popover.component.scss'],\n})\nexport class PopoverComponent implements AfterViewInit, OnDestroy {\n // removeEventListener same instance of event handler & options\n private readonly preventScrollEventListenerOptions = {\n passive: false,\n } as EventListenerOptions;\n\n private readonly POPOVER_BODY_PADDING = 12;\n\n private isShowing: boolean = false;\n private isFirstToLockScroll: boolean;\n private zIndex: number;\n private document: Document;\n\n @ViewChild('wrapper', { static: true, read: ElementRef })\n wrapperElement: ElementRef<HTMLDivElement>;\n\n @Input()\n popout: HorizontalDirection = HorizontalDirection.right;\n\n @Input()\n target: HTMLElement | ElementRef<HTMLElement>;\n\n @Output()\n willHide = new EventEmitter<void>();\n\n private get targetElement(): HTMLElement {\n if (this.target instanceof ElementRef) {\n return this.target.nativeElement;\n } else {\n return this.target;\n }\n }\n\n @HostListener('click')\n _backdropClick() {\n this.willHide.emit();\n this.hide();\n }\n\n @HostListener('window:resize')\n _onWindowResize() {\n if (this.isShowing) {\n this.willHide.emit();\n this.hide();\n }\n }\n\n constructor(private elementRef: ElementRef<HTMLElement>, private renderer: Renderer2) {\n this.document = elementRef.nativeElement.ownerDocument;\n }\n\n ngAfterViewInit(): void {\n this.placePopoverAboveClosestModal();\n this.renderer.removeChild(\n this.elementRef.nativeElement.parentElement,\n this.elementRef.nativeElement\n );\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n private placePopoverAboveClosestModal() {\n const closestIonModal = this.elementRef.nativeElement.closest('ion-modal');\n if (closestIonModal) {\n this.zIndex = parseInt(closestIonModal.style.zIndex) + 1;\n this.elementRef.nativeElement.style.zIndex = `${this.zIndex}`;\n } else {\n this.zIndex = parseInt(DesignTokenHelper.zLayer('popover'));\n }\n }\n\n // document.removeEventListener needs the exact same event handler & options reference:\n private preventEvent(event: TouchEvent) {\n event.preventDefault();\n }\n\n private preventScroll() {\n this.isFirstToLockScroll = !this.document.body.classList.contains('backdrop-no-scroll');\n if (this.isFirstToLockScroll) {\n this.renderer.addClass(this.document.body, 'backdrop-no-scroll');\n }\n\n // preventDefault does not work with Renderer2.listen method; add event listener directly to document instead\n this.document.addEventListener(\n 'touchmove',\n this.preventEvent,\n this.preventScrollEventListenerOptions\n );\n }\n\n private releaseScroll() {\n if (this.isFirstToLockScroll) {\n this.renderer.removeClass(this.document.body, 'backdrop-no-scroll');\n }\n\n this.document.removeEventListener(\n 'touchmove',\n this.preventEvent,\n this.preventScrollEventListenerOptions\n );\n }\n\n show() {\n this.renderer.addClass(this.elementRef.nativeElement, 'is-opening');\n this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);\n\n this.preventScroll();\n this.positionWrapper();\n\n this.renderer.addClass(this.elementRef.nativeElement, 'is-open');\n this.renderer.removeClass(this.elementRef.nativeElement, 'is-opening');\n\n this.isShowing = true;\n }\n\n hide() {\n this.renderer.removeChild(this.document.body, this.elementRef.nativeElement);\n this.releaseScroll();\n\n this.renderer.removeStyle(this.targetElement, 'z-index');\n this.renderer.removeStyle(this.targetElement, 'pointer-events');\n this.isShowing = false;\n }\n\n private positionWrapper() {\n const targetDimensions = this.targetElement.getBoundingClientRect();\n\n this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);\n\n const wrapperElement = this.wrapperElement.nativeElement;\n const wrapperDimensions = wrapperElement.getBoundingClientRect();\n const viewport = wrapperElement.ownerDocument.defaultView;\n this.positionHorizontally(viewport, wrapperElement, targetDimensions, wrapperDimensions);\n this.positionVertically(viewport, wrapperElement, targetDimensions, wrapperDimensions);\n }\n\n private positionHorizontally(\n viewPort: Window,\n wrapperElement: HTMLDivElement,\n targetDimensions: DOMRect,\n wrapperDimensions: DOMRect\n ) {\n const viewPortWidth = viewPort.innerWidth;\n const contentWidth = wrapperDimensions.width;\n const availableSpaceRight = viewPortWidth - targetDimensions.left;\n const availableSpaceLeft = targetDimensions.right;\n const contentCanFitRightOfTarget =\n availableSpaceRight >= contentWidth + this.POPOVER_BODY_PADDING;\n const openRight = contentCanFitRightOfTarget || availableSpaceRight >= availableSpaceLeft;\n\n const [direction, oppositeDirection] =\n this.popout === HorizontalDirection.left || !openRight\n ? ['left', 'right']\n : ['right', 'left'];\n\n const pxValue =\n direction === 'left' ? viewPortWidth - targetDimensions.right : targetDimensions.left;\n\n this.renderer.removeStyle(wrapperElement, direction);\n this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);\n }\n\n private positionVertically(\n viewPort: Window,\n wrapperElement: HTMLDivElement,\n targetDimensions: DOMRect,\n wrapperDimensions: DOMRect\n ) {\n const viewPortHeight = viewPort.innerHeight;\n const contentHeight = wrapperDimensions.height;\n const availableSpaceDown = viewPortHeight - targetDimensions.bottom;\n const availableSpaceUp = targetDimensions.top;\n const contentCanFitBelowTarget =\n availableSpaceDown >= contentHeight + this.POPOVER_BODY_PADDING;\n\n const isAvailableSpaceBelow =\n contentCanFitBelowTarget || availableSpaceDown >= availableSpaceUp;\n const [direction, oppositeDirection] = isAvailableSpaceBelow\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n const pxValue =\n direction === 'bottom' ? targetDimensions.bottom : viewPortHeight - targetDimensions.top;\n\n this.renderer.removeStyle(wrapperElement, direction);\n this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);\n\n if (direction === 'top') {\n // Ensure target is elevated above shadows in popover, i.e. content wrapped in Card:\n this.renderer.setStyle(this.targetElement, 'z-index', `${this.zIndex + 1}`);\n this.renderer.setStyle(this.targetElement, 'pointer-events', 'none');\n }\n }\n}\n","export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, items: any[] | string[], selectedIndex: number) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n // Select previous item:\n newIndex = selectedIndex - 1;\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < items.length - 1) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = items.length - 1;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ButtonComponent } from '../button/button.component';\nimport { CardComponent } from '../card/card.component';\nimport { ItemComponent } from '../item/item.component';\nimport { ListItemTemplateDirective } from '../list/list.directive';\nimport { HorizontalDirection, PopoverComponent } from '../popover/popover.component';\n\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n})\nexport class DropdownComponent\n implements AfterContentChecked, AfterViewInit, OnDestroy, ControlValueAccessor {\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private hasConfiguredSlottedItems = false;\n private horizontalDirection = HorizontalDirection.right;\n private verticalDirection = VerticalDirection.down;\n\n private _items: string[] | any[] = [];\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (this._selectedIndex != value) {\n this._selectedIndex = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' | '4' = '3';\n readonly attentionLevelOpen = '2';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n @HostBinding('attr.tabindex')\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('attr.role')\n _role = 'listbox';\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n\n private itemClickUnlisten: (() => void)[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n if (!this.isOpen) {\n this.elementRef.nativeElement.focus();\n }\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n onButtonMouseEvent(event: Event) {\n // Prevent button focus;\n event.preventDefault();\n }\n\n ngAfterContentChecked() {\n if (!this.hasConfiguredSlottedItems && this.kirbyItemsSlotted.length) {\n this.kirbyItemsSlotted.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {\n this.onItemSelect(index);\n });\n this.itemClickUnlisten.push(unlisten);\n });\n this.hasConfiguredSlottedItems = true;\n }\n }\n\n /* Utility that makes it easier to set styles on card element \n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('--kirby-card-width', `${width}px`);\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n }\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n const options = {\n rootMargin: '0px',\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.selectedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n this.scrollItemIntoView(index);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n const scrollContainer = this.cardElement.nativeElement;\n const itemTop = itemElement.offsetTop;\n const itemBottom = itemElement.offsetTop + itemElement.offsetHeight;\n const containerVisibleTop = scrollContainer.scrollTop;\n const containerVisibleBottom = scrollContainer.clientHeight + scrollContainer.scrollTop;\n if (itemTop < containerVisibleTop) {\n scrollContainer.scrollTop = itemTop;\n } else if (itemBottom > containerVisibleBottom) {\n scrollContainer.scrollTop = itemBottom - scrollContainer.clientHeight;\n }\n }\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n _onTab(event: KeyboardEvent) {\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('focus')\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n @HostListener('blur', ['$event'])\n _onBlur(event?: FocusEvent) {\n if (this.disabled) return;\n if (this.isOpen) {\n if (!this.cardElement.nativeElement.contains(event?.relatedTarget as HTMLElement)) {\n this.close();\n }\n }\n this._onTouched();\n }\n\n @HostListener('keydown.space', ['$event'])\n _onSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (!this.isOpen) {\n this.open();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n _onEnter(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return;\n }\n const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);\n if (newIndex > -1) {\n this.selectItem(newIndex);\n }\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);\n if (newIndex > -1) {\n this.selectItem(newIndex);\n }\n return false;\n }\n\n ngOnDestroy(): void {\n let unlisten: () => void;\n while ((unlisten = this.itemClickUnlisten.pop()) !== undefined) {\n unlisten();\n }\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","import { AfterContentInit, Component, ContentChildren, Input, QueryList } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button.component';\n\n@Component({\n selector: 'kirby-empty-state',\n templateUrl: './empty-state.component.html',\n styleUrls: ['./empty-state.component.scss'],\n})\nexport class EmptyStateComponent implements AfterContentInit {\n @Input() iconName: string;\n @Input() customIconName: string;\n @Input() title: string;\n @Input() subtitle: string;\n\n @ContentChildren(ButtonComponent)\n private slottedButtons: QueryList<ButtonComponent>;\n\n ngAfterContentInit() {\n this.enforceAttentionLevelRules();\n\n /* setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when changing attention \n levels of slotted buttons in this.enforceAttentionLevelRules */\n this.slottedButtons.changes.subscribe(() => {\n setTimeout(() => this.enforceAttentionLevelRules());\n });\n }\n\n /** Enforces that all slotted buttons will have their attention\n * level set to 3, except the first button if it has\n * level 1.\n */\n private enforceAttentionLevelRules() {\n this.slottedButtons.forEach((button, index) => {\n if (index === 0 && button.isAttentionLevel1) return;\n\n if (!button.isAttentionLevel3) {\n button.attentionLevel = '3';\n }\n });\n }\n}\n","import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';\nimport { IonRadio } from '@ionic/angular';\n\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\n\n@Component({\n selector: 'kirby-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n})\nexport class RadioComponent {\n @Input()\n value: any;\n\n @HostBinding('class.has-label')\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size?: 'xs' | 'sm' | 'md';\n\n @Input()\n disabled: boolean;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n get buttonTabIndex(): number {\n return this.ionRadioElement ? this.ionRadioElement.nativeElement.tabIndex : -1;\n }\n\n focus() {\n this.ionRadioElement && this.ionRadioElement.nativeElement.focus();\n }\n\n _labelId = UniqueIdGenerator.scopedTo('kirby-radio-label').next();\n\n @ViewChild(IonRadio, { read: ElementRef, static: true }) private ionRadioElement?: ElementRef<\n HTMLIonRadioElement\n >;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\nimport { Component, HostListener, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ListItemTemplateDirective } from '../../list/list.directive';\nimport { RadioComponent } from '../radio.component';\n\n@Component({\n selector: 'kirby-radio-group',\n templateUrl: './radio-group.component.html',\n styles: ['ion-radio-group { display: inherit; flex-wrap: inherit}'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RadioGroupComponent,\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioGroupComponent implements AfterContentInit, ControlValueAccessor {\n constructor(private changeDetectionRef: ChangeDetectorRef) {}\n\n // #region public properties\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Input() set disabled(value: boolean) {\n this._disabled = value;\n this.setProjectedRadiosDisabledState(value);\n }\n\n @HostBinding('class.error') // Used to style radios with error state\n @Input()\n hasError: boolean = false;\n\n get items(): string[] | any[] {\n return this._items || []; // Ensure items return empty array even if set to null/undefined\n }\n\n @Input() set items(value: string[] | any[]) {\n if ((!value || !value.length) && !this.items.length) return; // Nothing changed, no items before or after\n this._items = value;\n this.refreshSelectionState();\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n itemDisabledProperty = 'disabled';\n\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (typeof value === 'string') value = parseInt(value); // Ensure data type number, e.g. when used with template syntax without binding: <... selectedIndex=\"1\"\n if (value === undefined || value === null || value === NaN) value = -1;\n if (value === this.selectedIndex) return;\n this._selectedIndex = value;\n this._value = this.getValueFromSelectedIndex() || null;\n }\n\n get value(): string | any {\n return this._value;\n }\n\n @Input() set value(value: string | any) {\n this.setSelectedItem(value);\n }\n\n private get hasValue(): boolean {\n return this.value !== undefined && this.value !== null;\n }\n\n /**\n * Emitted when an option is selected\n */\n @Output() valueChange: EventEmitter<string | any> = new EventEmitter<string | any>();\n // #endregion public properties\n\n // #region \"protected\" properties used by template\n @ContentChild(ListItemTemplateDirective, { read: TemplateRef })\n _customItemTemplate: TemplateRef<any>;\n // #endregion \"protected\" properties used by template\n\n // #region private fields\n private _disabled = false;\n private _items: string[] | any[] = [];\n private _onChangeCallback: (value: any) => void = () => {};\n private _onTouched = () => {};\n private _selectedIndex: number = -1;\n private _value?: string | any = null;\n @ViewChildren(RadioComponent)\n private radioButtons: QueryList<RadioComponent>;\n @ContentChildren(RadioComponent, { descendants: true })\n private projectedRadioButtons: QueryList<RadioComponent>;\n\n private get hasItemsFromContentProjection(): boolean {\n return (\n !this.items.length &&\n !this._customItemTemplate &&\n this.projectedRadioButtons &&\n this.projectedRadioButtons.length > 0\n );\n }\n\n // #endregion private fields\n\n // #region public methods\n focus() {\n const findFocusable = (radios: QueryList<RadioComponent>) =>\n radios && radios.find((radio) => !isNaN(radio.buttonTabIndex) && radio.buttonTabIndex !== -1);\n const focusable = findFocusable(this.radioButtons) || findFocusable(this.projectedRadioButtons);\n focusable && focusable.focus();\n }\n\n ngAfterContentInit(): void {\n this.initSelectionStateFromProjectedContent();\n this.listenForProjectedRadiosChange();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.changeDetectionRef.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.changeDetectionRef.markForCheck();\n }\n\n // #endregion public methods\n\n // #region \"protected\" methods used by template\n _getTextFromItem(item: string | any): string {\n if (!item) return null;\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n _getDisabledStateFromItem(item: string | any): boolean {\n if (!item) return undefined;\n return typeof item === 'string' ? undefined : item[this.itemDisabledProperty];\n }\n\n get _hasItems(): boolean {\n return this.items.length > 0 || this.hasItemsFromContentProjection;\n }\n\n _onChange(value: string | any) {\n if (value === this._value) return;\n this.setSelectedItem(value);\n this.valueChange.emit(value);\n this._onChangeCallback(value);\n }\n\n @HostListener('ionBlur')\n _onRadioBlur() {\n this._onTouched();\n }\n\n // #endregion \"protected\" methods used by template\n\n // #region private methods\n private getIndexOfSelectedValue() {\n if (!this.hasValue) return -1;\n return this.hasItemsFromContentProjection\n ? this.getIndexOfProjectedRadio(this.value)\n : this.items.indexOf(this.value);\n }\n\n private getIndexOfProjectedRadio(value: string | any): number {\n let selectedIndex = -1;\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((radio, i) => {\n const found = radio.value === value;\n if (found) {\n selectedIndex = i;\n }\n return found;\n });\n return selectedIndex;\n }\n\n private getValueFromSelectedIndex(): string | any {\n if (this.selectedIndex === -1) return;\n return this.hasItemsFromContentProjection\n ? this.getValueFromProjectedRadios(this.selectedIndex)\n : this.items[this.selectedIndex];\n }\n\n private getValueFromProjectedRadios(index: number): string | any {\n const radio =\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((_, i) => {\n return i === index;\n });\n return radio && radio.value;\n }\n\n private initSelectionStateFromProjectedContent() {\n if (this.hasItemsFromContentProjection) {\n this.refreshSelectionState(); // Initialize selected index and value from projected radios\n }\n }\n\n private listenForProjectedRadiosChange() {\n this.projectedRadioButtons.changes.subscribe(() => {\n this.refreshStateFromProjectedContent();\n\n if (this.disabled) {\n // Ensure disabled state propagates when re-rendering projected radios.\n // setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when updating the DOM in QueryList.changes:\n setTimeout(() => this.setProjectedRadiosDisabledState(this.disabled));\n }\n });\n }\n\n private refreshSelectionState() {\n if (this.hasValue) {\n this._selectedIndex = this.getIndexOfSelectedValue(); // Ensure selectedIndex reflects value within items\n }\n\n const valueFromSelectedIndex = this.getValueFromSelectedIndex();\n this._value = valueFromSelectedIndex !== undefined ? valueFromSelectedIndex : null;\n }\n\n private refreshStateFromProjectedContent() {\n if (!!this._customItemTemplate) return; // Only refresh on changes to projected content, not when re-rendering custom template\n this.changeDetectionRef.markForCheck(); // Ensure changes to projected content gets checked in next change detection cycle\n this.refreshSelectionState(); // Sync selected index and value from projected radios\n }\n\n private setSelectedItem(value: string | any) {\n if (value === this._value) return; // Nothing changed\n this._value = value;\n this._selectedIndex = this.getIndexOfSelectedValue();\n }\n\n private setProjectedRadiosDisabledState(isDisabled: boolean) {\n if (!this.projectedRadioButtons || !this.projectedRadioButtons.length) return;\n this.projectedRadioButtons.forEach((radio, index) => {\n // Disable all radios when group is disabled, otherwise fall back to each item's disabled state, if defined:\n radio.disabled = isDisabled || this._getDisabledStateFromItem(this.items[index]);\n });\n }\n\n // #endregion private methods\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { TextareaComponent } from './../textarea/textarea.component';\nimport { InputComponent } from '../input/input.component';\n\n@Component({\n selector: 'kirby-input-counter',\n templateUrl: './input-counter.component.html',\n styleUrls: ['./input-counter.component.scss'],\n})\nexport class InputCounterComponent implements OnInit, OnDestroy {\n @Input() listenTo: InputComponent | TextareaComponent;\n length: number;\n maxlength: number;\n private _inputChangeSubscription: Subscription;\n\n get text(): string {\n if (this.length === undefined) {\n return undefined;\n }\n const ofMaxlength = this.maxlength ? `/${this.maxlength}` : '';\n return `${this.length}${ofMaxlength}`;\n }\n\n ngOnInit(): void {\n if (this.listenTo) {\n this.length = this.listenTo.value ? this.listenTo.value.length : 0;\n this.maxlength = this.listenTo.maxlength;\n this._inputChangeSubscription = this.listenTo.kirbyChange.subscribe((value) => {\n this.length = value.length;\n });\n }\n }\n\n ngOnDestroy(): void {\n if (this._inputChangeSubscription) {\n this._inputChangeSubscription.unsubscribe();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\nexport enum InputSize {\n medium = 'md',\n large = 'lg',\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:component-selector\n selector: 'input[kirby-input]',\n styleUrls: ['./input.component.scss'],\n template: '',\n})\nexport class InputComponent implements OnChanges {\n private static typeToInputmodeMap = {\n number: 'decimal',\n search: 'search',\n };\n\n kirbyChange = new EventEmitter<string>();\n\n @Input() set type(value: string) {\n const mappedValue = InputComponent.typeToInputmodeMap[value];\n if (mappedValue && !this.inputmode) {\n this.inputmode = mappedValue;\n }\n }\n\n @HostBinding('class')\n @Input()\n size: InputSize = InputSize.large;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostBinding('attr.inputmode')\n @Input()\n inputmode: string;\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of input element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n HostBinding,\n EventEmitter,\n HostListener,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:component-selector\n selector: 'textarea[kirby-textarea]',\n styleUrls: ['./textarea.component.scss'],\n templateUrl: './textarea.component.html',\n})\nexport class TextareaComponent implements OnChanges {\n kirbyChange = new EventEmitter<string>();\n\n @Input() value: string;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of textarea element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { PlatformService } from '../../helpers/platform.service';\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\nimport { WindowRef } from '../../types/window-ref';\nimport { RadioGroupComponent } from '../radio/radio-group/radio-group.component';\n\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { InputComponent } from './input/input.component';\nimport { TextareaComponent } from './textarea/textarea.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field',\n styleUrls: ['./form-field.component.scss'],\n templateUrl: './form-field.component.html',\n})\nexport class FormFieldComponent\n implements AfterContentChecked, AfterContentInit, OnInit, OnDestroy {\n private isRegistered = false;\n private element: HTMLElement;\n private inputElement: HTMLInputElement | HTMLTextAreaElement;\n private isTouch: boolean;\n _labelId = UniqueIdGenerator.scopedTo('kirby-form-field-label').next();\n\n @Input() label: string;\n @Input() message: string;\n\n @ContentChild(InputCounterComponent, { static: false }) counter: InputCounterComponent;\n @ContentChild(RadioGroupComponent) private radioGroupComponent: RadioGroupComponent;\n @ContentChild(RadioGroupComponent, { read: ElementRef }) private radioGroupElement: ElementRef<\n HTMLElement\n >;\n\n @ContentChild(InputComponent, { read: ElementRef }) input: ElementRef<HTMLInputElement>;\n @ContentChild(TextareaComponent, { read: ElementRef }) textarea: ElementRef<HTMLTextAreaElement>;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private platform: PlatformService,\n private renderer: Renderer2,\n private windowRef: WindowRef\n ) {\n this.element = elementRef.nativeElement;\n }\n\n get _wrapContentInLabel(): boolean {\n return !!this.label && (!!this.input || !!this.textarea);\n }\n\n private dispatchLoadEvent() {\n // Dispatch an `ionInputDidLoad` event to register\n // form field + input/textarea with Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidLoad', {\n detail: this.element,\n })\n );\n }\n\n @HostListener('kirbyRegisterFormField')\n _onRegisterFormField() {\n this.dispatchLoadEvent();\n }\n\n onLabelClick() {\n this.radioGroupComponent && this.radioGroupComponent.focus();\n }\n\n public focus() {\n if (!this.inputElement) return;\n\n if (this.isTouch) {\n // Trigger Ionic's input shims to ensure input is scrolled into view.\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/hacks/scroll-assist.ts\n const touchStart = new TouchEvent('touchstart');\n const touchEnd = new TouchEvent('touchend');\n this.inputElement.dispatchEvent(touchStart);\n this.inputElement.dispatchEvent(touchEnd);\n } else {\n this.inputElement.focus();\n }\n }\n\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n if (this.label && this.radioGroupElement) {\n this.renderer.setAttribute(\n this.radioGroupElement.nativeElement,\n 'aria-labelledby',\n this._labelId\n );\n }\n }\n\n ngAfterContentChecked(): void {\n if (!this.inputElement) {\n this.inputElement = this.element.querySelector('input, textarea');\n }\n\n // TODO: remove \"!this.inputElement.readOnly\" when ionic has fixed input click issue\n // https://github.com/ionic-team/ionic-framework/issues/22740\n if (\n !this.isRegistered &&\n this.element.isConnected &&\n !!this.inputElement &&\n !this.inputElement.readOnly\n ) {\n // Host is connected to dom and slotted input/textarea is present:\n this.isRegistered = true;\n this.dispatchLoadEvent();\n }\n }\n\n ngOnDestroy(): void {\n // Dispatch an `ionInputDidUnload` event to unregister\n // form field + input/textarea from Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidUnload', {\n detail: this.element,\n })\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field-message',\n styleUrls: ['./form-field-message.component.scss'],\n templateUrl: './form-field-message.component.html',\n})\nexport class FormFieldMessageComponent {\n @Input() text: string;\n @Input() position: 'left' | 'right' = 'left';\n}\n","import { FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n LOCALE_ID,\n Renderer2,\n} from '@angular/core';\nimport 'inputmask/lib/extensions/inputmask.date.extensions';\nimport Inputmask from 'inputmask/lib/inputmask';\n\n@Directive({\n selector: '[kirby-input][type=\"date\"]',\n})\nexport class DateInputDirective implements AfterViewInit {\n @HostListener('input')\n onInput() {\n this.updateMask(this.elementRef.nativeElement.value);\n }\n\n private maskingElement: HTMLElement;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Inject(LOCALE_ID) private locale: string\n ) {\n // Remove type to avoid user-agent specific behaviour for [type=\"date\"]\n this.elementRef.nativeElement.removeAttribute('type');\n }\n\n ngAfterViewInit(): void {\n this.initMask();\n }\n\n private initMask(): void {\n const inputFormat = this.getInputFormat();\n const placeholder = this.getPlaceholder(inputFormat);\n\n // Set initial placeholder ex. dd/mm/yyyy\n this.renderer.setAttribute(this.elementRef.nativeElement, 'placeholder', placeholder);\n\n // Init InputMask\n new Inputmask('datetime', {\n inputFormat,\n placeholder,\n }).mask(this.elementRef.nativeElement);\n\n // Append input overlay, so it's possible to style typed date differntly than the date-mask\n this.appendMaskingElement();\n }\n\n // Keeps order and seperator from speficied locale\n private getInputFormat(): string {\n const localeDateFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);\n return localeDateFormat\n .toLowerCase()\n .replace(/d+/, 'dd')\n .replace(/m+/, 'mm')\n .replace(/y+/, 'yyyy');\n }\n\n private getPlaceholder(inputFormat: string): string {\n return this.locale === 'da' ? inputFormat.split('y').join('å') : inputFormat;\n }\n\n private appendMaskingElement(): void {\n const wrapper = this.wrapElement(this.elementRef.nativeElement);\n this.renderer.addClass(wrapper, 'date-mask-wrapper');\n\n this.maskingElement = this.renderer.createElement('div');\n this.renderer.appendChild(wrapper, this.maskingElement);\n\n this.renderer.addClass(this.maskingElement, 'date-mask');\n }\n\n private wrapElement(element: HTMLElement): HTMLElement {\n const wrapper = this.renderer.createElement('div');\n const parent = element.parentElement;\n this.renderer.insertBefore(parent, wrapper, element);\n this.renderer.appendChild(wrapper, element);\n return wrapper;\n }\n\n private updateMask(value: string): void {\n if (!this.maskingElement) return;\n const lastNumber = value.match(/.*?(\\d)[^\\d]*$/); // get last number in string\n this.maskingElement.innerHTML = value\n ? value.slice(0, value.lastIndexOf(lastNumber[1]) + 1)\n : '';\n }\n}\n","import { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport 'inputmask/lib/extensions/inputmask.numeric.extensions';\nimport Inputmask from 'inputmask/lib/inputmask';\n\ninterface InputMask {\n unmaskedvalue: () => string;\n setValue: (val: string) => void;\n}\n\n@Directive({\n // tslint:disable-next-line\n selector: '[kirby-decimal-mask]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: DecimalMaskDirective,\n },\n ],\n})\nexport class DecimalMaskDirective implements ControlValueAccessor, OnInit {\n @Input() min: number;\n @Input() max: number;\n @Input() precision = 2;\n @Input() setMaxOnOverflow = false;\n\n @Input() set allowMinus(allowMinus: boolean) {\n this._allowMinus = allowMinus || (this.min || 0) < 0;\n }\n\n @Input() set disableGroupSeperator(disabled: string) {\n this._groupSeperatorDisabled = String(disabled) === '' || String(disabled) === 'true';\n }\n\n @Input() set maxlength(maxlength: number) {\n this._maxlength = maxlength;\n\n const maxlengthValue = parseInt('9'.repeat(maxlength));\n this.max = this.getMax(maxlengthValue);\n this.min = this.getMin(maxlengthValue);\n }\n\n groupSeparator = getLocaleNumberSymbol(this.locale, NumberSymbol.Group);\n radixPoint = getLocaleNumberSymbol(this.locale, NumberSymbol.Decimal);\n inputmask: InputMask;\n\n _allowMinus = false;\n _maxlength: number;\n _groupSeperatorDisabled: boolean;\n\n onChange = (_: string) => {};\n\n constructor(private elementRef: ElementRef, @Inject(LOCALE_ID) private locale: string) {}\n\n ngOnInit(): void {\n // Set type=\"text\", because functionality like 'setSelectionRange' are not supported on type=\"number\"\n this.elementRef.nativeElement.setAttribute('type', 'text');\n\n // Remove maxlength as this is handled by the mask\n this.elementRef.nativeElement.removeAttribute('maxlength');\n\n this.initMask();\n }\n\n writeValue(val: number): void {\n if (!this.inputmask) return;\n const formattedValue = String(val).replace('.', this.radixPoint);\n this.inputmask.setValue(formattedValue);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(_: any): void {}\n\n private initMask(): void {\n new Inputmask('decimal', {\n groupSeparator: this._groupSeperatorDisabled ? '' : this.groupSeparator,\n radixPoint: this.radixPoint,\n digits: this._maxlength ? 0 : this.precision,\n min: this.min,\n max: this.max,\n allowMinus: this._allowMinus,\n negationSymbol: {\n front: getLocaleNumberSymbol(this.locale, NumberSymbol.MinusSign),\n back: '',\n },\n SetMaxOnOverflow: this.setMaxOnOverflow,\n showMaskOnFocus: false,\n showMaskOnHover: false,\n placeholder: '',\n onBeforeWrite: () => {\n if (!this.inputmask) return;\n const unmaskedValue = this.inputmask.unmaskedvalue();\n this.onChange(unmaskedValue.replace(this.radixPoint, '.'));\n },\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n }\n\n private getMax(maxlengthValue: number): number {\n return this.max === undefined ? maxlengthValue : Math.min(this.max, maxlengthValue);\n }\n\n private getMin(maxlengthValue: number): number {\n if (!this.allowMinus) return;\n maxlengthValue = -Math.abs(maxlengthValue);\n return this.min === undefined ? maxlengthValue : -Math.abs(Math.max(this.min, maxlengthValue));\n }\n}\n","import {\n Component,\n ContentChild,\n HostBinding,\n Input,\n AfterContentInit,\n AfterViewInit,\n ViewChild,\n ElementRef,\n Renderer2,\n Inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { IonFab, IonFabButton, IonIcon } from '@ionic/angular';\n\nimport { ActionSheetComponent } from '../modal/action-sheet/action-sheet.component';\nimport { kirbyIconSettings } from '../icon/kirby-icon-settings';\nimport { Icon } from '../icon/icon-settings';\n\n@Component({\n selector: 'kirby-fab-sheet',\n templateUrl: './fab-sheet.component.html',\n styleUrls: ['./fab-sheet.component.scss'],\n})\nexport class FabSheetComponent implements AfterContentInit, AfterViewInit {\n @Input() disabled: boolean = false;\n @Input() horizontalAlignment: 'left' | 'center' | 'right' = 'right';\n\n private _isFabSheetOpen: boolean = false;\n @HostBinding('class.is-open')\n get isFabSheetOpen() {\n return this._isFabSheetOpen;\n }\n\n private _isBackdropVisible: boolean = false;\n @HostBinding('class.backdrop-visible')\n get isBackdropVisible() {\n return this._isBackdropVisible;\n }\n\n @ContentChild(ActionSheetComponent, { static: false }) actionSheet: ActionSheetComponent;\n\n @ViewChild(IonFabButton, { static: true, read: ElementRef }) ionFabButton: ElementRef<\n HTMLElement\n >;\n\n constructor(private renderer: Renderer2, @Inject(DOCUMENT) private document: any) {}\n\n ngAfterViewInit(): void {\n const kirbyCloseIcon = kirbyIconSettings.icons.find((icon) => icon.name === 'close');\n this.setCloseIcon(kirbyCloseIcon);\n }\n\n private setCloseIcon(kirbyCloseIcon: Icon, retryCount = 0) {\n const maxRetryCount = 20;\n const retryDelayInMs = 20;\n const fabButtonElement = this.ionFabButton.nativeElement;\n if (!fabButtonElement || !kirbyCloseIcon || retryCount >= maxRetryCount) {\n return;\n }\n if (fabButtonElement.shadowRoot && fabButtonElement.shadowRoot.innerHTML) {\n const closeIcon = fabButtonElement.shadowRoot.querySelector('.close-icon ion-icon');\n if (closeIcon) {\n const closeIconSvgLoaded = closeIcon.shadowRoot.querySelector('.icon-inner svg');\n const ionCloseIcon = (closeIcon as unknown) as IonIcon;\n if (ionCloseIcon && closeIconSvgLoaded) {\n ionCloseIcon.src = kirbyCloseIcon.svg;\n return;\n }\n }\n }\n retryCount++;\n setTimeout(() => this.setCloseIcon(kirbyCloseIcon, retryCount), retryDelayInMs);\n }\n\n ngAfterContentInit(): void {\n if (this.actionSheet) {\n this.actionSheet.hideCancel = true;\n }\n }\n\n hideActions(fab: IonFab) {\n fab.close();\n this._isFabSheetOpen = false;\n this._isBackdropVisible = false;\n this.renderer.removeClass(this.document.body, 'fab-sheet-active');\n }\n\n onFabClick(fab: IonFab) {\n this._isFabSheetOpen = !fab.activated;\n if (this._isFabSheetOpen) {\n this.renderer.addClass(this.document.body, 'fab-sheet-active');\n } else {\n this.renderer.removeClass(this.document.body, 'fab-sheet-active');\n }\n setTimeout(() => (this._isBackdropVisible = this.isFabSheetOpen));\n }\n}\n","// TODO TRM/JEO Parse from scss files instead!!1!!\nexport class ScssHelper {\n // Breakpoints\n public static BREAKPOINT_SCREEN_L = 720;\n public static BREAKPOINT_CARD_S = 320;\n public static BREAKPOINT_CARD_M = 460;\n public static BREAKPOINT_CARD_L = 820;\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BreakpointHelperService implements OnDestroy {\n currentScreenWidth: 800;\n private orientationChangedSubject = new Subject<void>();\n\n constructor() {\n this.init();\n }\n\n private init() {\n // TODO JEO: Implement Angular/CDK BreakpointObserver:\n this.orientationChangedSubject.next();\n }\n\n observe(): Observable<void> {\n return this.orientationChangedSubject.asObservable();\n }\n\n ngOnDestroy() {\n this.orientationChangedSubject.complete();\n }\n}\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ScssHelper } from '../../scss/scss-helper';\nimport { BreakpointHelperService } from './breakpoint-helper.service';\nimport { GridCardConfiguration } from './grid-card-configuration';\n\nclass GridCard {\n configuration: GridCardConfiguration;\n row: number;\n col: number;\n colSpan: number;\n\n constructor(configuration: GridCardConfiguration, row: number, col: number, colSpan: number) {\n this.configuration = configuration;\n this.row = row;\n this.col = col;\n this.colSpan = colSpan;\n }\n}\n\n@Component({\n selector: 'kirby-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n // tslint:disable-next-line\n host: { '[attr.max-columns]': 'maxColumns' },\n})\nexport class GridComponent implements OnInit, OnDestroy {\n cardConfigs: GridCardConfiguration[];\n cards: GridCard[] = [];\n private breakpointSubscription: Subscription;\n\n @Input() maxColumns: number;\n\n @Input()\n set cardConfigurations(cardConfigurations: GridCardConfiguration[]) {\n this.cardConfigs = cardConfigurations;\n // TODO TRM/JEO Remove this when breakpoint observe something something...\n this.configureGrid();\n }\n\n constructor(private breakpointHelper: BreakpointHelperService) {}\n\n configureGrid() {\n let calculatedMaxColumns = 0;\n if (this.maxColumns === undefined) {\n calculatedMaxColumns =\n this.breakpointHelper.currentScreenWidth >= ScssHelper.BREAKPOINT_SCREEN_L ? 2 : 1;\n } else {\n calculatedMaxColumns = this.maxColumns;\n }\n this.cards = [];\n let columnCounter = 0;\n let currentRow = 0;\n let currentColumn = 0;\n\n this.cardConfigs.forEach((card, index) => {\n // Cards colspan is added to the column counter\n columnCounter += card.preferredSize;\n // If only maxColumns are set to 1, just add all cards with a colspan of 1\n if (calculatedMaxColumns === 1) {\n this.cards.push(new GridCard(card, currentRow, currentColumn, 1));\n currentRow += 1;\n return;\n }\n // If we are below maxColumns, then add the card to the array\n if (columnCounter <= calculatedMaxColumns) {\n this.cards.push(new GridCard(card, currentRow, currentColumn, card.preferredSize));\n // Update currentColumn, so the next card will be placed correctly\n currentColumn += card.preferredSize;\n } else {\n // The new card didn't fit - Calculate remaining columns for previous card\n const restColumns = calculatedMaxColumns - (columnCounter - card.preferredSize);\n const prevCard = this.cards[index - 1];\n // Add the restColumns to the previous cards colspan, to make it span out\n prevCard.colSpan = restColumns + prevCard.colSpan;\n // We are now on a new row\n currentRow += 1;\n currentColumn = 0;\n this.cards.push(new GridCard(card, currentRow, currentColumn, card.preferredSize));\n // Update currentColumn to match the size of the new card and reset columnCounter\n currentColumn = card.preferredSize;\n columnCounter = card.preferredSize;\n }\n // If we on the last card, make sure it spans all the rest of the columns\n if (this.cardConfigs.length - 1 === index) {\n const restColumns = calculatedMaxColumns - columnCounter;\n const currentCard = this.cards[index];\n currentCard.colSpan += restColumns;\n }\n });\n }\n\n ngOnInit() {\n // this.breakpointSubscription = this.breakpointHelper.observe().subscribe(() => {\n // this.configureGrid();\n // });\n }\n\n ngOnDestroy() {\n if (this.breakpointSubscription) {\n this.breakpointSubscription.unsubscribe();\n }\n }\n}\n","import { Type } from '@angular/core';\n\nimport { ComponentConfiguration } from '../shared/component-configuration';\n\nexport class GridCardConfiguration implements ComponentConfiguration {\n constructor(public component: Type<any>, public data: any, public preferredSize: number) {}\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { IconComponent } from './icon.component';\n\n@NgModule({\n imports: [IonicModule],\n declarations: [IconComponent],\n exports: [IconComponent],\n})\nexport class IconModule {}\n","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-label',\n templateUrl: './label.component.html',\n styleUrls: ['./label.component.scss'],\n})\nexport class LabelComponent {\n @Input()\n direction: 'vertical' | 'horizontal' = 'vertical';\n\n @HostBinding('class.horizontal')\n get _direction() {\n return this.direction === 'horizontal';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { CommonModule } from '@angular/common';\n\nimport { IconModule } from '../icon/icon.module';\nimport { ItemComponent } from './item.component';\nimport { LabelComponent } from './label/label.component';\n\n@NgModule({\n imports: [IonicModule, IconModule, CommonModule],\n declarations: [ItemComponent, LabelComponent],\n exports: [ItemComponent, LabelComponent],\n})\nexport class ItemModule {}\n","import { Component, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-item-group',\n templateUrl: './item-group.component.html',\n styleUrls: ['./item-group.component.scss'],\n})\nexport class ItemGroupComponent {\n @HostBinding('attr.role') role: string = 'group';\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n})\nexport class SpinnerComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { ComponentFactoryResolver, Injectable, Injector } from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\n\nimport { SpinnerComponent } from '../spinner/spinner.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingOverlayService {\n private ionLoading: HTMLIonLoadingElement = null;\n\n constructor(\n private loadingController: LoadingController,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n public async showLoadingOverlay(showBackdrop: boolean = true): Promise<void> {\n if (!this.ionLoading) {\n this.ionLoading = await this.loadingController.create({\n cssClass: 'kirby-loading-overlay',\n duration: 0,\n message: null,\n showBackdrop: showBackdrop,\n spinner: null,\n });\n\n const loadingWrapper = this.ionLoading.querySelector('.loading-wrapper');\n const kirbySpinner = document.createElement('kirby-spinner');\n const factory = this.componentFactoryResolver.resolveComponentFactory(SpinnerComponent);\n factory.create(this.injector, [], kirbySpinner);\n loadingWrapper.appendChild(kirbySpinner);\n\n await this.ionLoading.present();\n }\n }\n\n public async hideLoadingOverlay(): Promise<void> {\n if (!!this.ionLoading) {\n await this.ionLoading.dismiss();\n this.ionLoading = null;\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-loading-overlay',\n templateUrl: './loading-overlay.component.html',\n styleUrls: ['./loading-overlay.component.scss'],\n})\nexport class LoadingOverlayComponent {\n @Input() public isLoading = true;\n @Input() public showBackdrop = true;\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { WindowRef } from '../../../types/window-ref';\n\nimport { Scroll } from './scroll.model';\n\n/**\n * Specify debounce duration in ms\n */\nexport const INFINITE_SCROLL_DEBOUNCE = 100;\n\n@Directive({\n selector: '[kirbyInfiniteScroll]',\n})\nexport class InfiniteScrollDirective implements AfterViewInit, OnDestroy {\n /**\n * Event that will be triggered when the user has scrolled to\n * bottom of the element\n */\n @Output() scrollEnd = new EventEmitter<void>();\n\n /**\n * If true then {@link scrollEnd} event should NOT be emitted\n */\n @Input() disabled = false;\n\n /**\n * Emits a new value on element scroll event\n */\n scroll$: Subject<Scroll> = new Subject<Scroll>();\n\n /**\n * Completes on component destroy lifecycle event\n * used to unsubscribe from infinite observables\n */\n private ngUnsubscribe$ = new Subject<void>();\n\n /**\n * An offset from the bottom of the element to trigger {@link scrollEnd} event\n */\n private offset = 0.8;\n\n constructor(private elementRef: ElementRef, private windowRef: WindowRef, private zone: NgZone) {}\n\n ngAfterViewInit(): void {\n /**\n * Subscribe to {@link scroll$} observable and emit {@link scrollEnd} event\n * when element scroll position has surpassed the offset.\n */\n this.scroll$\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n this.scrollEnd.emit();\n });\n\n /**\n * Subscribe to the ionScroll event on the ion-content around the list (if any)\n * and emit {@link scrollEnd} event when element scroll position has surpassed the offset.\n */\n setTimeout(() => {\n const ionContent: HTMLElement = this.elementRef.nativeElement.closest('ion-content');\n if (ionContent) {\n // we run the 'ionScroll' event outside angular, as it would trigger change detection on each scroll\n this.zone.runOutsideAngular(() => {\n fromEvent<any>(ionContent, 'ionScroll')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n map(() => this.getScroll()),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n // we make sure to emit the event inside angular again. As we want to show the spinner and need change detection for that.\n this.zone.run(() => this.scrollEnd.emit());\n });\n });\n }\n });\n }\n\n /**\n * On element scroll event emit next {@link scroll$} observable value\n */\n @HostListener('window:scroll')\n onScroll(): void {\n if (this.disabled) return;\n const scroll = this.getScroll();\n this.scroll$.next(scroll);\n }\n\n /**\n * trigger {@link ngUnsubscribe} complete on component destroy lifecycle hook\n */\n ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n\n private getScroll(): Scroll {\n const element = this.elementRef.nativeElement as HTMLElement;\n const boundindClientRect = element.getBoundingClientRect();\n\n const distanceToViewBottom = boundindClientRect.bottom;\n const elementHeight = boundindClientRect.height;\n const viewHeight = this.windowRef.nativeWindow.innerHeight;\n\n return { distanceToViewBottom, elementHeight, viewHeight };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ListComponent } from '../list.component';\nimport { LoadOnDemandEventData } from '../list.event';\n\n@Injectable()\nexport class ListHelper {\n onLoadOnDemand(component: ListComponent, _event: LoadOnDemandEventData) {\n if (component.isLoadOnDemandEnabled && !component._isLoading) {\n component._isLoading = true;\n component.loadOnDemand.emit({\n complete: (disableLoadOnDemand: boolean) => {\n component.isLoadOnDemandEnabled = !disableLoadOnDemand;\n component._isLoading = false;\n },\n });\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'groupBy',\n})\nexport class GroupByPipe implements PipeTransform {\n transform(items: any[], getGroupName?: (item: any) => string): any[] {\n if (!items) {\n return null;\n }\n if (!getGroupName) {\n return items;\n }\n\n const groupsMap = new Map<string, any[]>();\n\n items.forEach((item: any) => {\n const itemGroup = getGroupName(item);\n const groupItems = groupsMap.get(itemGroup);\n\n if (groupItems) {\n groupItems.push(item);\n } else {\n groupsMap.set(itemGroup, [item]);\n }\n });\n\n return Array.from(groupsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, items]) => {\n return { name, items };\n });\n }\n}\n","import {\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n TemplateRef,\n TrackByFunction,\n ViewChild,\n} from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { ItemComponent } from '../item/item.component';\n\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListHelper } from './helpers/list-helper';\nimport { BoundaryClass } from './list-item/list-item.component';\nimport { ListSwipeAction } from './list-swipe-action.type';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\nimport { LoadOnDemandEvent, LoadOnDemandEventData } from './list.event';\nimport { GroupByPipe } from './pipes/group-by.pipe';\n\nexport type ListShape = 'square' | 'rounded' | 'none';\n\n@Component({\n selector: 'kirby-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n providers: [ListHelper, GroupByPipe],\n})\nexport class ListComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('list', { static: true }) list: any;\n @ViewChild(InfiniteScrollDirective) scrollDirective: InfiniteScrollDirective;\n\n /**\n * Provide items for the list to render. Items must be provided in the order you expect them to be rendered.\n */\n @Input()\n items: any[] = [];\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n /**\n * Callback to determine name of section. Sections will be ordered alphabetically.\n */\n @Input() getSectionName: (item: any) => string;\n\n /**\n * Callback that defines how to track changes for items in the iterable.\n */\n @Input() trackBy: TrackByFunction<any>;\n\n /**\n * Text to display when no more items can be loaded (used for \"on demand\"-loading).\n */\n @Input() noMoreItemsText: string;\n\n /**\n * Determines if dividers (bottom-border on list items) should be shown or not.\n */\n @Input() showDivider = false;\n\n /**\n * Determines if list row text should turn bold on selection\n */\n @Input() markSelectedRow = false;\n\n /**\n * Determine outline shape of:\n * - list, if {@link #isSectionsEnabled} is `false`\n * - section, if {@link #isSectionsEnabled} is `true`\n *\n * `square` means **without** rounded corners, `rounded` means **with** rounded corners., `none` means **without** padding, border, box-shadow and background.\n */\n @Input() shape: ListShape = 'rounded';\n\n @HostBinding('class.shape-rounded')\n public get isShapeRounded(): boolean {\n return this.shape === 'rounded';\n }\n\n @HostBinding('class.shape-none')\n public get isShapeNone(): boolean {\n return this.shape === 'none';\n }\n\n @HostBinding('class.item-spacing')\n @Input()\n hasItemSpacing: boolean;\n\n /**\n * Determines if the loadOnDemand event should be emitted.\n * Will default to true if there is at least one subscriber to the loadOnDemand event\n */\n @Input() isLoadOnDemandEnabled: boolean;\n\n /**\n * Emitting event when more items are to be loaded.\n */\n @Output() loadOnDemand = new EventEmitter<LoadOnDemandEvent>();\n\n /**\n * Determines if list items should have swipe actions or not\n * - the order of swipe actions is used to determine edge actions,\n * as well as their order of appearance on the screen.\n */\n @Input() swipeActions: ListSwipeAction[] = [];\n\n /**\n * Emitting event when an item is selected (tapped on mobile, clicked on web)\n */\n @Output() itemSelect = new EventEmitter<any>();\n\n @Input() disableSelectionHighlight: boolean = false;\n\n @ContentChildren(ItemComponent)\n kirbyItems: ItemComponent[];\n\n @ContentChild(ListHeaderDirective, { static: false, read: TemplateRef })\n headerTemplate: TemplateRef<any>;\n\n @ContentChild(ListSectionHeaderDirective, { static: false, read: TemplateRef })\n sectionHeaderTemplate: TemplateRef<any>;\n\n @ContentChild(ListFooterDirective, { static: false, read: TemplateRef })\n footerTemplate: TemplateRef<any>;\n\n /**\n * The first element that matches ListItemDirective.\n * As a structural directive it unfolds into a template. This is a reference to that.\n */\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n\n @HostBinding('class.has-sections') _isSectionsEnabled: boolean;\n\n _isSelectable: boolean;\n _isLoading: boolean;\n _groupedItems: any[];\n _selectedItem: any;\n\n constructor(private listHelper: ListHelper, private groupBy: GroupByPipe) {}\n\n ngOnInit() {\n this._isSelectable = this.itemSelect.observers.length > 0;\n\n if (this.isLoadOnDemandEnabled === undefined) {\n this.isLoadOnDemandEnabled = this.loadOnDemand.observers.length > 0;\n }\n }\n\n ngAfterViewInit(): void {\n if (this._isSelectable) {\n setTimeout(() => {\n this.kirbyItems.forEach((item) => {\n item.selectable = true;\n });\n });\n }\n }\n\n ngOnChanges(): void {\n this._isSectionsEnabled = !!this.getSectionName;\n this._groupedItems = this._isSectionsEnabled\n ? this.groupBy.transform(this.items, this.getSectionName)\n : null;\n }\n\n _onLoadOnDemand(event?: LoadOnDemandEventData) {\n this.listHelper.onLoadOnDemand(this, event);\n }\n\n defaultTrackBy(index: number): any {\n return index;\n }\n\n sectionTrackBy(_: number, section: { name: string }): string {\n return section.name;\n }\n\n onItemSelect(item: any) {\n if (!this.disableSelectionHighlight) {\n this._selectedItem = item;\n }\n this.itemSelect.emit(item);\n }\n\n onSwipeActionSelect(args: any): void {\n args.swipeAction.onSelected(args.item);\n this.list.closeSlidingItems();\n args.event.stopPropagation();\n }\n\n _getBoundaryClass(index: number, section?: any[]): BoundaryClass {\n let _items = section || this.items;\n\n if (index === 0 || _items[index - 1]?.headingName) return this.headerTemplate ? null : 'first';\n\n if (index === _items.length - 1 || _items[index + 1]?.headingName)\n return this.footerTemplate ? null : 'last';\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-header',\n templateUrl: './list-header.component.html',\n styleUrls: ['./list-header.component.scss'],\n})\nexport class ListHeaderComponent {\n constructor() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-section-header',\n templateUrl: './list-section-header.component.html',\n styleUrls: ['./list-section-header.component.scss'],\n})\nexport class ListSectionHeaderComponent implements OnInit {\n @Input() title: string;\n constructor() {}\n\n ngOnInit() {}\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonItemSliding } from '@ionic/angular';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { PlatformService } from '../../../helpers/platform.service';\nimport { ListSwipeAction, ListSwipeDirection, ListSwipeEnd } from '../list-swipe-action.type';\n\nexport type BoundaryClass = 'first' | 'last';\n\n@Component({\n selector: 'kirby-list-item',\n templateUrl: './list-item.component.html',\n styleUrls: ['../list.component.scss', './list-item.component.scss'],\n})\nexport class ListItemComponent implements OnInit, AfterViewInit {\n _isSwipingEnabled = false;\n\n constructor(private platform: PlatformService) {\n this.initializeSwipeActions();\n }\n\n @ViewChild(IonItemSliding) ionItemSliding: IonItemSliding;\n\n @Input() item: any;\n\n @Input() boundaryClass: BoundaryClass;\n\n @Input() swipeActions: ListSwipeAction[] = [];\n\n @Input() itemTemplate: TemplateRef<any>;\n\n @Input() isSelected: boolean;\n\n @Input() isSelectable: boolean;\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n @Output() itemSelect = new EventEmitter<any>();\n\n _onItemSelect(item: any) {\n if (!this.isSelectable) return;\n this.itemSelect.emit(item);\n }\n\n @Output() swipeActionSelect = new EventEmitter<any>();\n\n _onSwipeActionSelect(swipeAction, item, event) {\n this.swipeActionSelect.emit({\n swipeAction,\n item,\n event,\n });\n }\n\n ngOnInit() {\n this.initializeSwipeActions();\n }\n\n ngAfterViewInit(): void {\n if (!this.itemTemplate) {\n console.warn('No item template was provided.');\n }\n }\n\n _hasSwipeActions(item: any): boolean {\n if (!Array.isArray(this.swipeActions)) {\n return false;\n }\n return this.swipeActions.some((swipeAction) => {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return false;\n }\n if (swipeAction.isDisabled === true) {\n return false;\n }\n return swipeAction.position === 'left' || swipeAction.position === 'right';\n });\n }\n\n _getSwipeActions(item: any, direction?: ListSwipeDirection): ListSwipeAction[] {\n if (!Array.isArray(this.swipeActions)) {\n return [];\n }\n return this.swipeActions.filter((swipeAction) => {\n if (this.isSwipeActionDisabled(swipeAction, item)) {\n return false;\n }\n return direction ? swipeAction.position === direction : true;\n });\n }\n\n private isSwipeActionDisabled(swipeAction: ListSwipeAction, item: any): boolean {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return true;\n }\n return swipeAction.isDisabled === true;\n }\n\n _getSwipeActionEnd(item: any): ListSwipeEnd {\n if (this._getSwipeActions(item, 'left').length) {\n return 'start';\n }\n return 'end';\n }\n\n _getSwipeActionIcon(swipeAction: ListSwipeAction, item: any): string {\n if (!swipeAction.icon) return;\n\n if (swipeAction.icon instanceof Function) {\n return swipeAction.icon(item);\n }\n return swipeAction.icon;\n }\n\n _getSwipeActionTitle(swipeAction: ListSwipeAction, item: any): string {\n if (swipeAction.title instanceof Function) {\n return swipeAction.title(item);\n }\n return swipeAction.title;\n }\n\n _getSwipeActionType(swipeAction: ListSwipeAction, item: any): ThemeColor {\n if (swipeAction.type instanceof Function) {\n return swipeAction.type(item);\n }\n return swipeAction.type;\n }\n\n private initializeSwipeActions(): void {\n if (this.swipeActions && this.swipeActions.length) {\n this._isSwipingEnabled = this.platform.isTouch();\n }\n }\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({\n selector: '[kirbyListItemColor]',\n})\nexport class ListItemColorDirective implements OnChanges {\n @Input()\n kirbyListItemColor: (item: any) => ThemeColor;\n @Input() item: any;\n @HostBinding('class')\n color: ThemeColor;\n\n ngOnChanges(): void {\n this.color = this.getColor();\n }\n\n private getColor(): ThemeColor {\n if (!this.kirbyListItemColor || !this.item) {\n return;\n }\n\n const themeColor = this.kirbyListItemColor(this.item);\n return themeColor;\n }\n}\n","import { Component, HostListener, ViewChild } from '@angular/core';\nimport { IonList } from '@ionic/angular';\n\nimport { elementHasAncestor } from '../../../helpers/element-has-ancestor';\n\n@Component({\n selector: 'kirby-list-experimental',\n templateUrl: './list-experimental.component.html',\n styleUrls: ['./list-experimental.component.scss'],\n})\nexport class ListExperimentalComponent {\n @ViewChild(IonList, { static: true }) list: IonList;\n\n @HostListener('click', ['$event'])\n closeAllSlidingItems(e: MouseEvent) {\n if (elementHasAncestor(e.target as HTMLElement, 'ion-item-option', 'ion-list')) {\n this.list.closeSlidingItems();\n }\n }\n}\n","export class ReorderEvent {\n private origEvent: CustomEvent<any>;\n private parent?: any;\n\n constructor(ev: CustomEvent<any>, parentItem?: any) {\n this.origEvent = ev;\n this.parent = parentItem;\n this.origEvent.cancelBubble = true;\n }\n complete(listOrReorder?: boolean | any[]): Promise<any> {\n return this.origEvent.detail.complete(listOrReorder);\n }\n\n get parentItem(): any {\n return this.parent;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\n\nimport { ListItemTemplateDirective } from '../list/list.directive';\n\nimport { ReorderEvent } from './reorder-event';\n\n@Component({\n selector: 'kirby-reorder-list',\n templateUrl: './reorder-list.component.html',\n styleUrls: ['./reorder-list.component.scss'],\n})\nexport class ReorderListComponent implements OnChanges, OnDestroy {\n @Input() items: any[];\n @Input() subItemsName: string;\n @Input() getItemTextDefault: (item: any) => string;\n\n @Output() itemReorder = new EventEmitter<ReorderEvent>();\n @Output() subItemReorder = new EventEmitter<ReorderEvent>();\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ViewChildren('reorderGroupContainer')\n reorderGroupContainer: QueryList<ElementRef>;\n\n private observer: MutationObserver;\n reorderActive: boolean = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(): void {\n if (this.items && this.items.length > 0) {\n setTimeout(() => {\n this.setupDomListener();\n });\n }\n }\n\n private setupDomListener() {\n const callback = (mutationsList: any) => {\n for (let mutation of mutationsList) {\n if (mutation.oldValue !== mutation.target['className']) {\n this.reorderActive = mutation.target['className'].includes('reorder-list-active');\n }\n }\n this.cdr.detectChanges();\n };\n this.observer = new MutationObserver(callback);\n\n this.reorderGroupContainer.forEach((div: ElementRef) => {\n this.observer.observe(div.nativeElement, {\n attributes: true,\n attributeFilter: ['class'],\n attributeOldValue: true,\n childList: false,\n subtree: true,\n });\n });\n }\n\n doReorder(ev: CustomEvent) {\n this.itemReorder.emit(new ReorderEvent(ev));\n }\n\n doSubReorder(ev: CustomEvent, parentItem: any) {\n this.subItemReorder.emit(new ReorderEvent(ev, parentItem));\n }\n\n ngOnDestroy() {\n //clean up the observer\n this.observer && this.observer.disconnect();\n delete this.observer;\n }\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-modal-footer',\n templateUrl: './modal-footer.component.html',\n styleUrls: ['./modal-footer.component.scss'],\n})\nexport class ModalFooterComponent {\n @HostBinding('class.snap-to-keyboard')\n @Input()\n snapToKeyboard = false;\n\n @HostBinding('class')\n @Input()\n type: 'inline' | 'fixed' = 'fixed';\n}\n","export const selectedTabClickEvent = 'kirbySelectedTabClick';\n","import { Injectable } from '@angular/core';\nimport { IonRouterOutlet } from '@ionic/angular';\nimport { ReplaySubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabsService {\n private outletSubject$: ReplaySubject<IonRouterOutlet> = new ReplaySubject();\n public outlet$ = this.outletSubject$.asObservable();\n\n public setOutlet(outlet: IonRouterOutlet) {\n this.outletSubject$.next(outlet);\n }\n}\n\nexport { IonRouterOutlet };\n","import { AfterViewInit, Component, HostBinding, ViewChild } from '@angular/core';\nimport { IonTabs } from '@ionic/angular';\n\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'kirby-tab-bar',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent implements AfterViewInit {\n @HostBinding('class.tab-bar-bottom-hidden')\n tabBarBottomHidden = false;\n @ViewChild(IonTabs, { static: true }) tabs: IonTabs;\n\n constructor(private tabsService: TabsService) {}\n\n ngAfterViewInit() {\n this.tabsService.setOutlet(this.tabs.outlet);\n }\n}\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router, RouterEvent } from '@angular/router';\nimport { IonContent, IonFooter, IonHeader } from '@ionic/angular';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { KirbyAnimation } from '../../animation/kirby-animation';\nimport { FitHeadingConfig } from '../../directives/fit-heading/fit-heading.directive';\nimport { WindowRef } from '../../types/window-ref';\nimport { ModalWrapperComponent } from '../modal/modal-wrapper/modal-wrapper.component';\nimport { ModalNavigationService } from '../modal/services/modal-navigation.service';\nimport { selectedTabClickEvent } from '../tabs/tab-button/tab-button.events';\nimport { TabsComponent } from '../tabs/tabs.component';\n\ntype stickyConfig = { sticky: boolean };\ntype fixedConfig = { fixed: boolean };\n\n/**\n * Event emitted when \"pull-to-refresh\" begins.\n */\nexport interface PullToRefreshEvent {\n /**\n * Invoke this callback-method when action to perform upon \"pull-to-refresh\" completes.\n */\n complete();\n}\n\n@Directive({\n selector: '[kirbyPageTitle]',\n})\nexport class PageTitleDirective {}\n\n@Directive({\n selector: '[kirbyPageToolbarTitle]',\n})\nexport class PageToolbarTitleDirective {}\n\n@Directive({\n selector: '[kirbyPageActions]',\n})\nexport class PageActionsDirective {\n @Input('kirbyPageActions') config: stickyConfig | fixedConfig;\n private readonly stickyDefault = true;\n private readonly fixedDefault = false;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isSticky(): boolean {\n return this.config ? (this.config as stickyConfig).sticky : this.stickyDefault;\n }\n\n get isFixed(): boolean {\n return this.config ? (this.config as fixedConfig).fixed : this.fixedDefault;\n }\n}\n\n@Directive({\n selector: '[kirbyPageContent]',\n})\nexport class PageContentDirective {\n @Input('kirbyPageContent') config: fixedConfig;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isFixed(): boolean {\n return this.config && this.config.fixed;\n }\n}\n\n@Component({\n selector: 'kirby-page-progress',\n template: `\n <ng-content></ng-content>\n `,\n styles: [':host {display: flex}'],\n})\nexport class PageProgressComponent implements OnInit {\n // TODO: Find alternative implementation, which aligns with future page configuration / consumption\n // This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario\n @HostBinding('attr.slot') slot = 'start';\n\n constructor(@Optional() @SkipSelf() private modalWrapper: ModalWrapperComponent) {}\n\n ngOnInit(): void {\n if (this.modalWrapper && this.modalWrapper.config.flavor === 'drawer') {\n this.slot = 'end';\n }\n }\n}\n\n@Component({\n selector: 'kirby-page-title',\n template: `\n <ng-content></ng-content>\n `,\n})\nexport class PageTitleComponent {}\n\n@Component({\n selector: 'kirby-page-content',\n template: `\n <ng-content></ng-content>\n `,\n})\nexport class PageContentComponent {}\n\n@Component({\n selector: 'kirby-page-actions',\n template: `\n <ng-content select=\"button[kirby-button]\"></ng-content>\n `,\n})\nexport class PageActionsComponent {}\n\n@Component({\n selector: 'kirby-page',\n templateUrl: './page.component.html',\n styleUrls: ['./page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageComponent\n implements OnInit, OnDestroy, AfterViewInit, AfterContentChecked, OnChanges {\n @Input() title: string;\n @Input() toolbarTitle: string;\n @Input() titleAlignment: 'left' | 'center' | 'right' = 'left';\n @Input() defaultBackHref: string;\n @Input() hideBackButton: boolean;\n @Input() titleMaxLines: number;\n\n private _tabBarBottomHidden: boolean;\n public get tabBarBottomHidden(): boolean {\n return this._tabBarBottomHidden;\n }\n @Input()\n public set tabBarBottomHidden(value: boolean) {\n if (this.tabsComponent) {\n // as we are setting a class on tabs, we need this to happen in a separate cd cycle\n setTimeout(() => (this.tabsComponent.tabBarBottomHidden = value));\n }\n this._tabBarBottomHidden = value;\n }\n\n @Output() enter = new EventEmitter<void>();\n @Output() leave = new EventEmitter<void>();\n @Output() refresh = new EventEmitter<PullToRefreshEvent>();\n\n @ViewChild(IonContent, { static: true }) private content: IonContent;\n @ViewChild(IonContent, { static: true, read: ElementRef })\n private ionContentElement: ElementRef<HTMLIonContentElement>;\n @ViewChild(IonHeader, { static: true, read: ElementRef })\n ionHeaderElement: ElementRef<HTMLIonHeaderElement>;\n @ViewChild(IonFooter, { static: true, read: ElementRef })\n private ionFooterElement: ElementRef<HTMLIonFooterElement>;\n\n @ViewChild('pageTitle', { static: false, read: ElementRef })\n private pageTitle: ElementRef;\n\n @ViewChild('simpleTitleTemplate', { static: true, read: TemplateRef })\n private simpleTitleTemplate: TemplateRef<any>;\n @ViewChild('simpleToolbarTitleTemplate', { static: true, read: TemplateRef })\n private simpleToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageToolbarTitleDirective, { static: false, read: TemplateRef })\n private customToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageTitleDirective, { static: false, read: TemplateRef })\n customTitleTemplate: TemplateRef<any>;\n @ContentChildren(PageActionsDirective)\n customActions: QueryList<PageActionsDirective>;\n @ContentChildren(PageContentDirective)\n private customContent: QueryList<PageContentDirective>;\n\n hasPageTitle: boolean;\n hasActionsInPage: boolean;\n toolbarTitleVisible: boolean;\n toolbarFixedActionsVisible: boolean;\n toolbarStickyActionsVisible: boolean;\n\n fitHeadingConfig: FitHeadingConfig;\n\n toolbarTitleTemplate: TemplateRef<any>;\n customContentTemplate: TemplateRef<any>;\n pageActionsTemplate: TemplateRef<any>;\n fixedContentTemplate: TemplateRef<any>;\n stickyActionsTemplate: TemplateRef<any>;\n fixedActionsTemplate: TemplateRef<any>;\n private pageTitleIntersectionObserverRef: IntersectionObserver = this.pageTitleIntersectionObserver();\n private urls: string[] = [];\n private hasEntered: boolean;\n\n private ngOnDestroy$ = new Subject();\n private navigationStart$: Observable<RouterEvent> = this.router.events.pipe(\n takeUntil(this.ngOnDestroy$),\n filter((event: RouterEvent) => event instanceof NavigationStart)\n );\n\n private navigationEnd$: Observable<RouterEvent> = this.router.events.pipe(\n takeUntil(this.ngOnDestroy$),\n filter((event: RouterEvent) => event instanceof NavigationEnd)\n );\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private windowRef: WindowRef,\n private modalNavigationService: ModalNavigationService,\n @Optional() @SkipSelf() private tabsComponent: TabsComponent\n ) {}\n\n ngOnInit(): void {\n this.removeWrapper();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.titleMaxLines) {\n this.fitHeadingConfig = {\n ...this.fitHeadingConfig,\n maxLines: changes.titleMaxLines.currentValue,\n };\n }\n }\n\n ngAfterViewInit(): void {\n this.navigationStart$.subscribe((event: NavigationStart) => {\n if (\n !this.urls.includes(event.url) &&\n !this.modalNavigationService.isModalRoute(event.url) &&\n !this.modalNavigationService.isModalRoute(this.router.url)\n ) {\n this.onLeave();\n }\n });\n\n this.navigationEnd$.subscribe((event: NavigationEnd) => {\n if (this.urls.includes(event.urlAfterRedirects)) {\n this.onEnter();\n }\n });\n\n this.windowRef.nativeWindow.addEventListener(selectedTabClickEvent, () => {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n });\n }\n\n ngAfterContentChecked(): void {\n if (!this.urls.includes(this.router.url)) {\n this.urls.push(this.router.url);\n this.onEnter();\n }\n\n this.initializeTitle();\n this.initializeActions();\n this.initializeContent();\n this.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.ngOnDestroy$.next();\n this.ngOnDestroy$.complete();\n\n this.pageTitleIntersectionObserverRef.disconnect();\n this.windowRef.nativeWindow.removeEventListener(selectedTabClickEvent, () => {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n });\n }\n\n delegateRefreshEvent(event: any): void {\n this.refresh.emit({\n complete: event.target.complete.bind(event.target),\n });\n }\n\n private onEnter() {\n if (this.hasEntered) return;\n this.hasEntered = true;\n\n this.enter.emit();\n if (this.pageTitle) {\n this.pageTitleIntersectionObserverRef.observe(this.pageTitle.nativeElement);\n }\n }\n\n private onLeave() {\n this.leave.emit();\n if (this.pageTitle) {\n this.pageTitleIntersectionObserverRef.unobserve(this.pageTitle.nativeElement);\n }\n this.hasEntered = false;\n\n if (this.tabBarBottomHidden && this.tabsComponent) {\n this.tabsComponent.tabBarBottomHidden = false;\n }\n }\n\n private initializeTitle() {\n // Ensures initializeTitle() won't run, if already initialized\n if (this.hasPageTitle) return;\n\n this.hasPageTitle = this.title !== undefined || !!this.customTitleTemplate;\n this.toolbarTitleVisible = !this.hasPageTitle;\n\n if (this.hasPageTitle) {\n setTimeout(() => {\n this.pageTitleIntersectionObserverRef.observe(this.pageTitle.nativeElement);\n });\n }\n\n const defaultTitleTemplate = this.customTitleTemplate || this.simpleTitleTemplate;\n // tslint:disable:prettier\n // prettier-ignore\n this.toolbarTitleTemplate = this.customToolbarTitleTemplate\n ? this.customToolbarTitleTemplate\n : typeof this.toolbarTitle === 'string'\n ? this.simpleToolbarTitleTemplate\n : defaultTitleTemplate;\n }\n\n private initializeActions() {\n this.customActions.forEach((pageAction) => {\n if (pageAction.isFixed) {\n this.fixedActionsTemplate = pageAction.template;\n this.toolbarFixedActionsVisible = true;\n } else {\n this.pageActionsTemplate = pageAction.template;\n if (pageAction.isSticky) {\n this.stickyActionsTemplate = pageAction.template;\n }\n }\n });\n this.hasActionsInPage = !!this.pageActionsTemplate;\n }\n\n private initializeContent() {\n this.customContent.forEach((content) => {\n if (content.isFixed) {\n this.fixedContentTemplate = content.template;\n } else {\n this.customContentTemplate = content.template;\n }\n });\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, this.ionHeaderElement.nativeElement);\n this.renderer.appendChild(parent, this.ionContentElement.nativeElement);\n this.renderer.appendChild(parent, this.ionFooterElement.nativeElement);\n }\n\n private pageTitleIntersectionObserver() {\n const options = {\n rootMargin: '0px',\n };\n\n let initialized = false;\n const callback = (entries) => {\n if (initialized) {\n this.toolbarTitleVisible = !entries[0].isIntersecting;\n this.toolbarStickyActionsVisible = !entries[0].isIntersecting;\n this.changeDetectorRef.detectChanges();\n } else {\n initialized = true;\n }\n };\n return new IntersectionObserver(callback, options);\n }\n\n @HostListener('window:keyboardWillShow', ['$event'])\n _onKeyboardWillShow(info?: { keyboardHeight: number }) {\n if (info && info.keyboardHeight) {\n this.ionContentElement.nativeElement.style.setProperty(\n '--keyboard-offset',\n `${info.keyboardHeight}px`\n );\n }\n }\n\n @HostListener('window:keyboardWillHide')\n _onKeyboardWillHide() {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', '0px');\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core';\n\nimport { PageComponent } from '../page.component';\n\n@Component({\n selector: 'kirby-page-footer',\n templateUrl: './page-footer.component.html',\n styleUrls: ['./page-footer.component.scss'],\n})\nexport class PageFooterComponent implements OnDestroy {\n @Input()\n hasPadding: boolean = true;\n\n constructor(\n @Optional() @SkipSelf() private pageComponent: PageComponent,\n private hostElement: ElementRef,\n private renderer: Renderer2\n ) {\n if (!pageComponent) {\n throw new Error('Page footer must reside inside of a Kirby page');\n }\n }\n\n close() {\n this.pageComponent.tabBarBottomHidden = false;\n this.renderer.removeChild(\n this.hostElement.nativeElement.parentElement,\n this.hostElement.nativeElement,\n true\n );\n }\n\n ngOnDestroy(): void {\n this.pageComponent.tabBarBottomHidden = false;\n }\n}\n","import { Injectable, Renderer2, RendererStyleFlags2 } from '@angular/core';\n\nconst config = Object.freeze({\n className: 'kirby-line-clamp',\n lineClamp: '--line-clamp',\n lineHeight: '--line-height',\n});\n\n@Injectable()\nexport class LineClampHelper {\n constructor(private renderer: Renderer2) {}\n\n setMaxLines(element: Element, maxLines: number): void {\n this.renderer.setStyle(element, config.lineClamp, maxLines, RendererStyleFlags2.DashCase);\n this.renderer.addClass(element, config.className);\n }\n\n setLineHeight(element: Element, lineHeight: string): void {\n // Only necessary for the fallback solution to work\n this.renderer.setStyle(element, config.lineHeight, lineHeight, RendererStyleFlags2.DashCase);\n }\n\n removeLineClamp(element: Element) {\n this.renderer.removeClass(element, config.className);\n this.renderer.removeStyle(element, config.lineClamp);\n this.renderer.removeStyle(element, config.lineHeight);\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { ResizeObserverService } from '../../components/shared/resize-observer/resize-observer.service';\nimport { LineClampHelper } from '../../helpers/line-clamp-helper';\n\nconst fontSize = DesignTokenHelper.fontSize;\nconst lineHeight = DesignTokenHelper.lineHeight;\n\ninterface HeadingSize {\n name: string;\n fontSize: string;\n lineHeight: string;\n}\n\nexport interface FitHeadingConfig {\n maxLines: number;\n}\n\n@Directive({\n selector: `h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]`,\n providers: [LineClampHelper],\n})\nexport class FitHeadingDirective implements OnInit, OnDestroy {\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyFitHeading') config?: FitHeadingConfig;\n\n private isObservingHostElement: boolean;\n private hostElementClone: Element;\n private isScalingHeader: boolean; // used to prevent resizeObserver to trigger on font scaling by this.scaleHeader()\n\n private headingSizes: HeadingSize[] = [\n {\n name: 'h1',\n fontSize: fontSize('xl'),\n lineHeight: lineHeight('xl'),\n },\n {\n name: 'h2',\n fontSize: fontSize('l'),\n lineHeight: lineHeight('l'),\n },\n {\n name: 'h3',\n fontSize: fontSize('m'),\n lineHeight: lineHeight('m'),\n },\n ];\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private resizeObserverService: ResizeObserverService,\n private lineClampHelper: LineClampHelper\n ) {}\n\n ngOnInit(): void {\n if (this.config && this.config.maxLines) {\n this.lineClampHelper.setMaxLines(this.elementRef.nativeElement, this.config.maxLines);\n this.observeResize();\n this.isObservingHostElement = true;\n }\n }\n\n ngOnDestroy(): void {\n if (this.isObservingHostElement) {\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.hostElementClone) {\n this.renderer.removeChild(this.elementRef.nativeElement, this.hostElementClone);\n }\n }\n }\n\n private observeResize(): void {\n this.resizeObserverService.observe(this.elementRef, () => {\n /**\n * setTimeout is used here to avoid repeated size changes\n * while the first size change is still ongoing.\n * This would result in the ResizeObserver being called again,\n * giving 'ResizeObserver loop limit exceeded' types of errors.\n */\n setTimeout(() => {\n this.scaleHeader();\n }, 0);\n });\n }\n\n private scaleHeader(): void {\n if (this.isScalingHeader) return;\n\n this.isScalingHeader = true;\n\n if (!this.hostElementClone) {\n this.hostElementClone = this.generateHostElementClone();\n this.renderer.appendChild(this.elementRef.nativeElement, this.hostElementClone);\n }\n\n this.renderer.setStyle(\n this.hostElementClone,\n 'width',\n `${this.elementRef.nativeElement.clientWidth}px`\n );\n\n const fallbackSize = this.headingSizes[this.headingSizes.length - 1];\n const fittedSize = this.headingSizes.find(this.canFitHeading.bind(this)) || fallbackSize;\n\n this.setSize(this.elementRef.nativeElement, fittedSize);\n this.lineClampHelper.setLineHeight(this.elementRef.nativeElement, fittedSize.lineHeight);\n this.isScalingHeader = false;\n }\n\n private canFitHeading(size: HeadingSize) {\n this.setSize(this.hostElementClone, size);\n const lines = this.hostElementClone.clientHeight / parseInt(size.lineHeight);\n return lines <= this.config.maxLines;\n }\n\n private generateHostElementClone(): Element {\n const clone = this.elementRef.nativeElement.cloneNode(true);\n this.renderer.setStyle(clone, 'position', 'absolute');\n this.renderer.setStyle(clone, 'visibility', 'hidden');\n this.lineClampHelper.removeLineClamp(clone);\n return clone;\n }\n\n private setSize(el: Element, size: HeadingSize): void {\n this.renderer.setStyle(el, 'font-size', size.fontSize);\n this.renderer.setStyle(el, 'line-height', size.lineHeight);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FitHeadingDirective } from './fit-heading.directive';\n\n@NgModule({\n declarations: [FitHeadingDirective],\n exports: [FitHeadingDirective],\n})\nexport class FitHeadingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SpinnerComponent } from './spinner.component';\n\n@NgModule({\n declarations: [SpinnerComponent],\n imports: [CommonModule],\n exports: [SpinnerComponent],\n providers: [],\n})\nexport class SpinnerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { FitHeadingModule } from '../../directives/fit-heading/fit-heading.module';\nimport { SpinnerModule } from '../spinner/spinner.module';\n\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport {\n PageActionsComponent,\n PageActionsDirective,\n PageComponent,\n PageContentComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n} from './page.component';\n\n@NgModule({\n declarations: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n ],\n imports: [CommonModule, IonicModule, FitHeadingModule, SpinnerModule],\n exports: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n FitHeadingModule,\n ],\n})\nexport class PageModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\n\nimport { RouterOutletComponent } from './router-outlet.component';\n\n@NgModule({\n declarations: [RouterOutletComponent],\n imports: [CommonModule, IonicModule],\n exports: [RouterOutletComponent],\n})\nexport class RouterOutletModule {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-section-header',\n templateUrl: './section-header.component.html',\n styleUrls: ['./section-header.component.scss'],\n})\nexport class SectionHeaderComponent {}\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\n\nimport { IconRegistryService } from '../icon/icon-registry.service';\n\nimport { SegmentItem, SegmentItemInternal } from './segment-item';\n\nexport enum SegmentedControlMode {\n chip = 'chip',\n compactChip = 'compactChip',\n default = 'default',\n}\n\n@Component({\n selector: 'kirby-segmented-control',\n templateUrl: './segmented-control.component.html',\n styleUrls: ['./segmented-control.component.scss'],\n // tslint:disable-next-line: no-host-metadata-property\n host: { role: 'group' },\n})\nexport class SegmentedControlComponent {\n constructor(private iconRegistryService: IconRegistryService) {}\n\n preventWrapperClick(event: Event) {\n if (event.target instanceof HTMLElement) {\n if (event.target.classList.contains('segment-btn-wrapper')) {\n event.stopImmediatePropagation();\n }\n }\n }\n\n @Input() mode: SegmentedControlMode = SegmentedControlMode.default;\n\n @HostBinding('class')\n get _modeCssClass() {\n return {\n [SegmentedControlMode.chip]: 'chip-mode',\n [SegmentedControlMode.default]: 'default-mode',\n [SegmentedControlMode.compactChip]: 'compact chip-mode',\n }[this.mode];\n }\n\n private _items: SegmentItemInternal[] = [];\n get items(): SegmentItem[] {\n return this._items;\n }\n\n @Input() set items(value: SegmentItem[]) {\n this._items = value || [];\n this._items.forEach((item) => {\n if (!item.badge) return;\n // We need to verify whether badges icon is custom or default, so we can check for it in the template\n item.badge.isCustomIcon =\n item.badge.icon !== undefined &&\n this.iconRegistryService.getIcon(item.badge.icon) !== undefined;\n });\n\n const checkedItemIndex = this.items.findIndex((item) => item.checked);\n if (checkedItemIndex > -1) {\n console.warn(\n 'SegmentItem.checked is deprecated - please remove from your `items` configuration. Use `selectedIndex` or `value` on `<kirby-segmented-control>` instead '\n );\n this._selectedIndex = checkedItemIndex;\n }\n this._value = this.items[this.selectedIndex];\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (value !== this._selectedIndex) {\n this._selectedIndex = value;\n this._value = this.items[this.selectedIndex];\n }\n }\n\n private _value: SegmentItem;\n get value(): SegmentItem {\n return this._value;\n }\n\n @Input() set value(value: SegmentItem) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n @HostBinding('class.sm')\n isSmallSize: boolean;\n\n @Input() set size(size: 'sm' | 'md') {\n this.isSmallSize = size === 'sm';\n }\n\n @Output() segmentSelect: EventEmitter<SegmentItem> = new EventEmitter();\n\n onSegmentSelect(selectedId: string) {\n const selectedItemIndex = this.items.findIndex((item) => selectedId === item.id);\n if (selectedItemIndex !== this.selectedIndex) {\n this.selectedIndex = selectedItemIndex;\n this.segmentSelect.emit(this.value);\n }\n }\n}\n","import {\n Component,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-slide-button',\n templateUrl: './slide-button.component.html',\n styleUrls: ['./slide-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlideButtonComponent implements OnDestroy {\n @Input() text = '';\n @Input() expand: 'block';\n\n @Output() slideDone = new EventEmitter();\n @Output() slidingPercentageChanged = new EventEmitter<number>();\n\n readonly slideDoneFadeTime = 500;\n readonly slideResetTime = 100;\n\n isSlideDone = false;\n pctInTens = 0;\n\n get value(): number {\n return this._value;\n }\n set value(v: number) {\n this._value = v;\n this.calculatePctInTens();\n }\n\n private _value: number = 0;\n private resetSliderIntervalTimer: any;\n private calculatePctInTens() {\n this.pctInTens = Math.ceil(this.value / 10) * 10;\n }\n\n constructor(private changeDetectionRef: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n if (this.resetSliderIntervalTimer) {\n clearInterval(this.resetSliderIntervalTimer);\n }\n }\n\n onSliderMouseup() {\n if (this.value == 100) {\n this.handleSlideDone();\n } else {\n this.resetSliderIntervalTimer = setInterval(() => {\n if (this.value > 0) {\n this.value -= 2;\n } else {\n clearInterval(this.resetSliderIntervalTimer);\n }\n\n this.changeDetectionRef.markForCheck();\n }, 1);\n }\n }\n\n onSliderValueChange(val: string) {\n this.value = +val;\n this.slidingPercentageChanged.emit(this.value);\n }\n\n onSliderMousedown() {\n clearInterval(this.resetSliderIntervalTimer);\n }\n\n private handleSlideDone() {\n this.slideDone.emit();\n this.isSlideDone = true;\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n Renderer2,\n QueryList,\n ContentChildren,\n} from '@angular/core';\n\nimport { IconComponent } from '../../icon/icon.component';\nimport { selectedTabClickEvent } from './tab-button.events';\n\n@Component({\n selector: 'kirby-tab-button',\n templateUrl: './tab-button.component.html',\n styleUrls: ['./tab-button.component.scss'],\n})\nexport class TabButtonComponent implements OnInit {\n @Input() routerLink: string;\n @Output() click = new EventEmitter<Event>();\n @ContentChildren(IconComponent) icons: QueryList<IconComponent>;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit(): void {\n this.removeWrapper();\n }\n\n onClick(event: Event, isSelected: boolean) {\n this.click.emit(event);\n\n if (isSelected) {\n const clickEvent = new CustomEvent(selectedTabClickEvent);\n dispatchEvent(clickEvent);\n }\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n const button = this.elementRef.nativeElement.childNodes[0];\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, button);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { CommonModule } from '@angular/common';\n\nimport { TabsComponent } from './tabs.component';\nimport { TabButtonComponent } from './tab-button/tab-button.component';\nimport { IconModule } from '../icon/icon.module';\nimport { TabsService } from './tabs.service';\n\n@NgModule({\n imports: [IonicModule, IconModule, CommonModule],\n providers: [TabsService],\n declarations: [TabsComponent, TabButtonComponent],\n exports: [TabsComponent, TabButtonComponent],\n})\nexport class TabsModule {}\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\n\nimport { Overlay } from '../../modal/services/modal.interfaces';\nimport { MessageType, ToastConfig } from '../config/toast-config';\n\n@Injectable()\nexport class ToastHelper {\n static CSS_CLASS = 'kirby-toast';\n static DURATION_IN_MS = 4000;\n\n constructor(private toastController: ToastController) {}\n\n public async showToast(config: ToastConfig): Promise<Overlay> {\n const toast = await this.toastController.create({\n animated: config.animated,\n message: config.message,\n position: 'top',\n duration: config.durationInMs ? config.durationInMs : ToastHelper.DURATION_IN_MS,\n cssClass: this.getCssClass(config.messageType),\n });\n await toast.present();\n return {\n dismiss: toast.dismiss.bind(toast),\n onWillDismiss: toast.onWillDismiss(),\n onDidDismiss: toast.onDidDismiss(),\n };\n }\n\n private getCssClass(messageType: MessageType): string {\n let cssClass = ToastHelper.CSS_CLASS;\n\n if (messageType === 'danger') {\n console.warn(\n `[DEPRECATED] 'danger' message type is deprecated. Use Kirby Alerts for critical warnings. Toast will be shown as 'warning'`\n );\n\n messageType = 'warning';\n }\n\n if (messageType) {\n cssClass += ' ' + messageType;\n }\n\n return cssClass;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ToastConfig } from '../config/toast-config';\n\nimport { ToastHelper } from './toast.helper';\n\n@Injectable()\nexport class ToastController {\n constructor(private toastHelper: ToastHelper) {}\n\n public showToast(config: ToastConfig, onCloseToast?: () => void) {\n this.toastHelper.showToast(config).then((overlay) => {\n if (onCloseToast) {\n overlay.onDidDismiss.then(() => onCloseToast());\n }\n });\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-toggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n})\nexport class ToggleComponent {\n @Input() checked: boolean = false;\n @Input() disabled: boolean = false;\n @Output() checkedChange = new EventEmitter<boolean>();\n onCheckedChange(checked: boolean): void {\n this.checked = checked;\n this.checkedChange.emit(this.checked);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-progress-circle',\n templateUrl: './progress-circle.component.html',\n styleUrls: ['./progress-circle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressCircleComponent implements AfterViewInit, OnDestroy {\n readonly SIZE_CONFIG = {\n sm: { diameter: 40, strokeWidth: 3, upperBound: 95 },\n md: { diameter: 56, strokeWidth: 4, upperBound: 96 },\n lg: { diameter: 96, strokeWidth: 6, upperBound: 97 },\n };\n\n @Input() value: number = 0;\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() themeColor: 'success' | 'warning' | 'danger' = 'success';\n\n @HostBinding('class')\n get _cssSize() {\n return this.size;\n }\n\n private hasElementBeenVisible?: boolean;\n private observer: IntersectionObserver;\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.observer) {\n this.observer = new IntersectionObserver(this.onIntersectionChange, {\n threshold: 0.5,\n });\n this.observer.observe(this.elementRef.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n this.unobserve();\n }\n\n private onIntersectionChange = (entries: IntersectionObserverEntry[]) => {\n this.hasElementBeenVisible = entries && entries.some((entry) => entry.isIntersecting);\n if (this.hasElementBeenVisible) {\n this.unobserve();\n this.changeDetectorRef.markForCheck();\n }\n };\n\n private unobserve() {\n if (this.observer) {\n this.observer.unobserve(this.elementRef.nativeElement);\n // Safari does not support \"disconnect\", see: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#Browser_compatibility\n if (typeof this.observer.disconnect === 'function') {\n this.observer.disconnect();\n }\n }\n }\n\n @HostBinding('style.width.px')\n @HostBinding('style.height.px')\n get _diameter(): number {\n return this.SIZE_CONFIG[this.size].diameter;\n }\n\n get _shownValue() {\n // This is needed to make an animation [0 -> value] when element is shown to the user\n return this.hasElementBeenVisible ? this.value : 0;\n }\n\n get _radius() {\n return this._diameter / 2;\n }\n\n get _strokeWidth() {\n return this.SIZE_CONFIG[this.size].strokeWidth;\n }\n\n get _upperBound() {\n // This is needed to make sure that an input value close to 100 is not shown as 100\n return this.SIZE_CONFIG[this.size].upperBound;\n }\n}\n","import { Component, Input, ChangeDetectionStrategy, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-flag',\n template: `\n <ng-content></ng-content>\n `,\n styleUrls: ['./flag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FlagComponent {\n @Input() size: 'xs' | 'sm' | 'md' = 'md';\n @Input() themeColor: 'success' | 'warning' | 'danger' | 'semi-light' | 'transparent' =\n 'transparent';\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size];\n }\n}\n","import { AfterViewInit, EventEmitter } from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonSlides } from '@ionic/angular';\n\n@Directive({\n selector: '[kirbySlide]',\n})\nexport class SlideDirective {}\n\n@Component({\n selector: 'kirby-slides',\n template: `\n <ion-slides [options]=\"slidesOptions\" #ionslides (ionSlideDidChange)=\"onSlideChanged()\">\n <ion-slide *ngFor=\"let slide of slides; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"slideTemplate; context: { $implicit: slide, index: i }\"\n ></ng-container>\n </ion-slide>\n </ion-slides>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlidesComponent implements AfterViewInit {\n @ViewChild('ionslides', { static: false }) ionSlides: IonSlides;\n @Input() slidesOptions: any;\n @Input() slides: any[];\n @Output() selectedSlide = new EventEmitter<any>();\n\n @ContentChild(SlideDirective, { static: true, read: TemplateRef })\n public slideTemplate: TemplateRef<any>;\n\n ngAfterViewInit() {\n this.slideTo(0);\n }\n\n onSlideChanged() {\n this.ionSlides.getActiveIndex().then((selectedIndex) => {\n this.selectedSlide.emit({\n slide: this.slides[selectedIndex],\n index: selectedIndex,\n });\n });\n }\n\n slideTo(index: number) {\n this.ionSlides.slideTo(index);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-toggle-button',\n templateUrl: './toggle-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleButtonComponent {\n @Input() checked: boolean;\n @Output() checkChanged = new EventEmitter<boolean>();\n\n @HostListener('click')\n onClick() {\n this.checked = !this.checked;\n this.checkChanged.emit(this.checked);\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[kirbyAccordion], kirby-accordion',\n exportAs: 'kirby-accordion',\n})\nexport class AccordionDirective {}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n// Counter for generating unique element ids\nlet uniqueId = 0;\n\n@Component({\n selector: 'kirby-accordion-item',\n templateUrl: './accordion-item.component.html',\n styleUrls: ['./accordion-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('isExpanded', [\n state('true', style({ height: '*', visibility: 'visible' })),\n state('false', style({ height: '0px', visibility: 'hidden' })),\n transition('true <=> false', animate('0.2s')),\n ]),\n ],\n})\nexport class AccordionItemComponent {\n @Input() title: string;\n @Input() isExpanded: boolean = false;\n\n // IDs used for a11y labelling\n _titleId = `kirby-accordion-item-title-${++uniqueId}`;\n _contentId = `kirby-accordion-item-content-${uniqueId}`;\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'kirby-range',\n templateUrl: './range.component.html',\n styleUrls: ['./range.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RangeComponent),\n },\n ],\n})\nexport class RangeComponent implements OnChanges, ControlValueAccessor {\n @Input() minLabel: string;\n @Input() maxLabel: string;\n @Input() debounce: number;\n @Input() max: number;\n @Input() min: number;\n @Input() pin: boolean;\n @Input() step = 1;\n @Input() ticks: boolean;\n @Input() disabled = false;\n @Input()\n set value(value: number) {\n if (value !== this.currentValue) {\n this.currentValue = value;\n this.propagateChange(this.currentValue);\n this.change.emit(this.currentValue);\n }\n }\n\n get value(): number {\n return this.currentValue;\n }\n\n @Output() change: EventEmitter<number> = new EventEmitter<number>();\n\n private currentValue: number;\n\n ngOnChanges(_: SimpleChanges) {\n if (!this.ticks) return;\n\n /*\n * Max 10 ticks are allowed\n */\n const amountOfTicks = (this.max - this.min) / this.step;\n if (amountOfTicks > 9) {\n this.step = (this.max - this.min) / 9;\n }\n\n /*\n * Set value to the nearest tick\n */\n this.value = this.getTicks().reduce((a, b) => {\n return Math.abs(b - this.value) < Math.abs(a - this.value) ? b : a;\n });\n }\n\n private getTicks() {\n const ticks = [];\n for (let value = Number(this.min); value <= Number(this.max); value += Number(this.step)) {\n ticks.push(value);\n }\n return ticks;\n }\n\n public setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public _onRangeValueChange($event: any): void {\n this.writeValue($event.detail.value);\n }\n\n public onTouched = () => {};\n\n public propagateChange = (_: any) => {};\n\n public writeValue(value: any): void {\n if (value !== undefined) {\n this.value = value;\n }\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n}\n","import { Directive, HostListener, ElementRef } from '@angular/core';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: `[keyHandler]`,\n})\nexport class KeyHandlerDirective {\n constructor(private element: ElementRef) {}\n\n @HostListener('keyup', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter' || event.key === 'Spacebar') {\n // Prevent the default action to stop scrolling when space is pressed\n event.preventDefault();\n\n const hostElement = <HTMLElement>this.element.nativeElement;\n hostElement.click();\n }\n }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nimport { ColorHelper } from '@kirbydesign/core';\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: `kirby-avatar[themeColor],\n kirby-card[themeColor],\n kirby-icon[themeColor],\n kirby-progress-circle-ring[themeColor],\n kirby-modal-footer[themeColor],\n kirby-empty-state[themeColor]`,\n})\nexport class ThemeColorDirective {\n private _isDefault = true;\n @HostBinding('class.default')\n get isDefault() {\n return this._isDefault;\n }\n\n private _isPrimary: boolean;\n @HostBinding('class.primary')\n get isPrimary() {\n return this._isPrimary;\n }\n\n private _isSecondary: boolean;\n @HostBinding('class.secondary')\n get isSecondary() {\n return this._isSecondary;\n }\n\n private _isTertiary: boolean;\n @HostBinding('class.tertiary')\n get isTertiary() {\n return this._isTertiary;\n }\n\n private _isSuccess: boolean;\n @HostBinding('class.success')\n get isSuccess() {\n return this._isSuccess;\n }\n\n private _isWarning: boolean;\n @HostBinding('class.warning')\n get isWarning() {\n return this._isWarning;\n }\n\n private _isDanger: boolean;\n @HostBinding('class.danger')\n get isDanger() {\n return this._isDanger;\n }\n\n private _isLight: boolean;\n @HostBinding('class.light')\n get isLight() {\n return this._isLight;\n }\n\n private _isMedium: boolean;\n @HostBinding('class.medium')\n get isMedium() {\n return this._isMedium;\n }\n\n private _isDark: boolean;\n @HostBinding('class.dark')\n get isDark() {\n return this._isDark;\n }\n\n private _isWhite: boolean;\n @HostBinding('class.white')\n get isWhite() {\n return this._isWhite;\n }\n\n private _isBrightnessWhite: boolean;\n @HostBinding('class.kirby-color-brightness-white')\n get isBrightnessWhite() {\n return this._isBrightnessWhite;\n }\n\n private _isBrightnessLight: boolean;\n @HostBinding('class.kirby-color-brightness-light')\n get isBrightnessLight() {\n return this._isBrightnessLight;\n }\n\n private _isBrightnessDark: boolean;\n @HostBinding('class.kirby-color-brightness-dark')\n get isBrightnessDark() {\n return this._isBrightnessDark;\n }\n\n @Input() set themeColor(value: ThemeColor) {\n this._isDefault = !value;\n this._isPrimary = value === 'primary';\n this._isSecondary = value === 'secondary';\n this._isTertiary = value === 'tertiary';\n this._isSuccess = value === 'success';\n this._isWarning = value === 'warning';\n this._isDanger = value === 'danger';\n this._isLight = value === 'light';\n this._isMedium = value === 'medium';\n this._isDark = value === 'dark';\n this._isWhite = value === 'white';\n const colorBrightness = ColorHelper.getColorBrightness(value);\n this._isBrightnessWhite = colorBrightness === 'white';\n this._isBrightnessLight = colorBrightness === 'light';\n this._isBrightnessDark = colorBrightness === 'dark';\n }\n}\n","import { fromEvent } from 'rxjs';\n\nexport const proxyInputs = (Cmp: any, inputs: string[]) => {\n const Prototype = Cmp.prototype;\n inputs.forEach((item) => {\n Object.defineProperty(Prototype, item, {\n get() {\n return this.el[item];\n },\n set(val: any) {\n this.z.runOutsideAngular(() => (this.el[item] = val));\n },\n });\n });\n};\n\nexport const proxyMethods = (Cmp: any, methods: string[]) => {\n const Prototype = Cmp.prototype;\n methods.forEach((methodName) => {\n Prototype[methodName] = function () {\n const args = arguments;\n return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));\n };\n });\n};\n\nexport const proxyOutputs = (instance: any, el: any, events: string[]) => {\n events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));\n};\n\n// tslint:disable-next-line: only-arrow-functions\nexport function ProxyCmp(opts: { inputs?: any; methods?: any }) {\n const decorator = function (cls: any) {\n if (opts.inputs) {\n proxyInputs(cls, opts.inputs);\n }\n if (opts.methods) {\n proxyMethods(cls, opts.methods);\n }\n return cls;\n };\n return decorator;\n}\n","/* tslint:disable */\n/* auto-generated angular directive proxies */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\nimport { ProxyCmp, proxyOutputs } from './angular-component-lib/utils';\n\nimport { Components } from '@kirbydesign/core';\n\n\nexport declare interface KirbyBadge extends Components.KirbyBadge {}\n@ProxyCmp({\n inputs: ['size', 'text', 'themeColor']\n})\n@Component({\n selector: 'kirby-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content></ng-content>',\n inputs: ['size', 'text', 'themeColor']\n})\nexport class KirbyBadge {\n protected el: HTMLElement;\n constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {\n c.detach();\n this.el = r.nativeElement;\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ChartComponent } from './chart.component';\nimport { ChartConfigService } from './configs/chart-config.service';\n\n@NgModule({\n declarations: [ChartComponent],\n exports: [ChartComponent],\n providers: [ChartConfigService],\n})\nexport class ChartModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { IconModule } from '../icon/icon.module';\nimport { SpinnerModule } from '../spinner/spinner.module';\n\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListItemColorDirective } from './directives/list-item-color.directive';\nimport { ListExperimentalComponent } from './list-experimental/list-experimental.component';\nimport { ListHeaderComponent } from './list-header/list-header.component';\nimport { ListItemComponent } from './list-item/list-item.component';\nimport { ListSectionHeaderComponent } from './list-section-header/list-section-header.component';\nimport { ListComponent } from './list.component';\nimport {\n ListFlexItemDirective,\n ListFooterDirective,\n ListHeaderDirective,\n ListItemDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\n\nconst exportedDeclarations = [\n ListComponent,\n ListItemComponent,\n ListItemDirective,\n ListFlexItemDirective,\n ListItemTemplateDirective,\n ListSectionHeaderComponent,\n ListSectionHeaderDirective,\n ListHeaderDirective,\n ListHeaderComponent,\n ListFooterDirective,\n ListExperimentalComponent,\n];\n\nconst declarations = [\n ...exportedDeclarations,\n ListItemColorDirective,\n InfiniteScrollDirective,\n ListItemComponent,\n];\n\n@NgModule({\n declarations: declarations,\n imports: [CommonModule, IconModule, IonicModule, SpinnerModule],\n exports: exportedDeclarations,\n providers: [],\n})\nexport class ListModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-progress-circle-ring',\n templateUrl: './progress-circle-ring.component.svg',\n styleUrls: ['./progress-circle-ring.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressCircleRingComponent {\n @Input() radius: number; // The desired outer radius of the SVG circle\n @Input() value: number = 0;\n @Input() themeColor: 'success' | 'warning' | 'danger' = 'success';\n @Input() strokeWidth: number;\n @Input() upperBound: number;\n\n get _offset(): number {\n const valueWithinBounds = this.value < this.upperBound || this.value > 99;\n if (valueWithinBounds) {\n return this.calculateOffset(this.value);\n } else {\n return this.calculateOffset(this.upperBound);\n }\n }\n\n @HostBinding('style.width.px')\n @HostBinding('style.height.px')\n get _diameter(): number {\n return this.radius * 2;\n }\n\n get _centerRadius(): number {\n return this.radius - this.strokeWidth / 2;\n }\n\n get _centerCircumference(): number {\n return this._centerRadius * 2 * Math.PI;\n }\n\n private calculateOffset(value: number): number {\n return this._centerCircumference - this._centerCircumference * (value / 100);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ToggleButtonComponent } from './toggle-button.component';\n\nconst DECLARATIONS = [ToggleButtonComponent];\n\n@NgModule({\n declarations: [...DECLARATIONS],\n imports: [CommonModule],\n exports: [...DECLARATIONS],\n})\nexport class ToggleButtonModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { APP_INITIALIZER } from '@angular/core';\n\nimport { defineCustomElements } from '@kirbydesign/core/loader';\n\nexport const appInitialize = (doc: Document) => {\n return () => {\n defineCustomElements(doc.defaultView);\n };\n};\n\nexport function customElementsInitializer() {\n return {\n provide: APP_INITIALIZER,\n useFactory: appInitialize,\n deps: [DOCUMENT],\n multi: true,\n };\n}\n","import { Directive, ElementRef, HostBinding, HostListener, OnInit, Optional } from '@angular/core';\n\nimport { CardComponent } from '../../components/card/card.component';\n\n@Directive({\n // tslint:disable-next-line\n selector: 'kirby-card[click]',\n})\nexport class ElementAsButtonDirective implements OnInit {\n @HostBinding('attr.role') role: string = 'button';\n @HostBinding('attr.tabindex') tabindex: number = 0;\n\n constructor(@Optional() private card: CardComponent, private clickableElement: ElementRef) {}\n\n ngOnInit(): void {\n if (this.card) {\n this.card.flat = false;\n }\n }\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n _onKeydownHandler(event: KeyboardEvent) {\n this.clickableElement.nativeElement.click(event);\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { Params } from '@angular/router';\n\nimport { ModalNavigationService } from '../../components/modal/services/modal-navigation.service';\n\n@Directive({\n selector: `[kirbyModalRouterLink]`,\n})\nexport class ModalRouterLinkDirective {\n constructor(private modalNavigationService: ModalNavigationService) {}\n\n @Input('kirbyModalRouterLink') path: string | string[];\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyModalQueryParams') queryParams?: Params;\n\n @HostListener('click')\n onClick(): boolean {\n this.modalNavigationService.navigateToModal(\n this.path,\n typeof this.queryParams !== 'string' ? this.queryParams : null\n );\n return false;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Inject, InjectionToken, ModuleWithProviders, NgModule, Optional } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { IonicModule } from '@ionic/angular';\n\nimport { AccordionItemComponent } from './components/accordion/accordion-item.component';\nimport { AccordionDirective } from './components/accordion/accordion.directive';\nimport { AppModule } from './components/app/app.module';\nimport { AvatarComponent } from './components/avatar/avatar.component';\nimport { ButtonComponent } from './components/button/button.component';\nimport { CalendarComponent } from './components/calendar/calendar.component';\nimport { CardFooterComponent } from './components/card/card-footer/card-footer.component';\nimport { CardHeaderComponent } from './components/card/card-header/card-header.component';\nimport { CardComponent } from './components/card/card.component';\nimport { ChartDeprecatedComponent } from './components/chart-deprecated/chart-deprecated.component';\nimport { ChartModule } from './components/chart/chart.module';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { ChipComponent } from './components/chip/chip.component';\nimport { DividerComponent } from './components/divider/divider.component';\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\nimport { EmptyStateComponent } from './components/empty-state/empty-state.component';\nimport { FabSheetComponent } from './components/fab-sheet/fab-sheet.component';\nimport { FlagComponent } from './components/flag/flag.component';\nimport { DateInputDirective } from './components/form-field/directives/date/date-input.directive';\nimport { DecimalMaskDirective } from './components/form-field/directives/decimal-mask/decimal-mask.directive';\nimport { FormFieldMessageComponent } from './components/form-field/form-field-message/form-field-message.component';\nimport { FormFieldComponent } from './components/form-field/form-field.component';\nimport { InputCounterComponent } from './components/form-field/input-counter/input-counter.component';\nimport { InputComponent } from './components/form-field/input/input.component';\nimport { TextareaComponent } from './components/form-field/textarea/textarea.component';\nimport { BreakpointHelperService } from './components/grid/breakpoint-helper.service';\nimport { GridComponent } from './components/grid/grid.component';\nimport { IconModule } from './components/icon/icon.module';\nimport { ItemGroupComponent } from './components/item-group/item-group.component';\nimport { ItemSlidingComponent } from './components/item-sliding/item-sliding.component';\nimport { ItemModule } from './components/item/item.module';\nimport { ListModule } from './components/list/list.module';\nimport { GroupByPipe } from './components/list/pipes/group-by.pipe';\nimport { LoadingOverlayComponent } from './components/loading-overlay/loading-overlay.component';\nimport { LoadingOverlayService } from './components/loading-overlay/loading-overlay.service';\nimport { ActionSheetComponent } from './components/modal/action-sheet/action-sheet.component';\nimport { AlertComponent } from './components/modal/alert/alert.component';\nimport { ModalFooterComponent } from './components/modal/footer/modal-footer.component';\nimport { ModalCompactWrapperComponent } from './components/modal/modal-wrapper/compact/modal-compact-wrapper.component';\nimport { ModalWrapperComponent } from './components/modal/modal-wrapper/modal-wrapper.component';\nimport { ActionSheetHelper } from './components/modal/services/action-sheet.helper';\nimport { AlertHelper } from './components/modal/services/alert.helper';\nimport { ModalController } from './components/modal/services/modal.controller';\nimport { ModalHelper } from './components/modal/services/modal.helper';\nimport { PageModule } from './components/page/page.module';\nimport { PopoverComponent } from './components/popover/popover.component';\nimport { ProgressCircleRingComponent } from './components/progress-circle/progress-circle-ring.component';\nimport { ProgressCircleComponent } from './components/progress-circle/progress-circle.component';\nimport { RadioGroupComponent } from './components/radio/radio-group/radio-group.component';\nimport { RadioComponent } from './components/radio/radio.component';\nimport { RangeComponent } from './components/range/range.component';\nimport { ReorderListComponent } from './components/reorder-list/reorder-list.component';\nimport { RouterOutletModule } from './components/router-outlet/router-outlet.module';\nimport { SectionHeaderComponent } from './components/section-header/section-header.component';\nimport { SegmentedControlComponent } from './components/segmented-control/segmented-control.component';\nimport { ComponentLoaderDirective } from './components/shared/component-loader.directive';\nimport { ResizeObserverFactory } from './components/shared/resize-observer/resize-observer.factory';\nimport { ResizeObserverService } from './components/shared/resize-observer/resize-observer.service';\nimport { SlideButtonComponent } from './components/slide-button/slide-button.component';\nimport { SlideDirective, SlidesComponent } from './components/slides/slides.component';\nimport { SpinnerModule } from './components/spinner/spinner.module';\nimport { StockChartDeprecatedComponent } from './components/stock-chart-deprecated/stock-chart-deprecated.component';\nimport { TabsModule } from './components/tabs/tabs.module';\nimport { ToastController } from './components/toast/services/toast.controller';\nimport { ToastHelper } from './components/toast/services/toast.helper';\nimport { ToggleButtonModule } from './components/toggle-button/toggle-button.module';\nimport { ToggleComponent } from './components/toggle/toggle.component';\nimport { KirbyBadge as BadgeComponent } from './components/web-component-proxies.component';\nimport { customElementsInitializer } from './custom-elements-initializer';\nimport { ElementAsButtonDirective } from './directives/element-as-button/element-as-button.directive';\nimport { KeyHandlerDirective } from './directives/key-handler/key-handler.directive';\nimport { ModalRouterLinkDirective } from './directives/modal-router-link/modal-router-link.directive';\nimport { ThemeColorDirective } from './directives/theme-color/theme-color.directive';\n\nconst exportedDeclarations = [\n CardComponent,\n CardHeaderComponent,\n CardFooterComponent,\n ButtonComponent,\n ChartDeprecatedComponent,\n StockChartDeprecatedComponent,\n GridComponent,\n ComponentLoaderDirective,\n AvatarComponent,\n GroupByPipe,\n CalendarComponent,\n CheckboxComponent,\n ActionSheetComponent,\n ModalFooterComponent,\n ModalRouterLinkDirective,\n SegmentedControlComponent,\n ChipComponent,\n BadgeComponent,\n ThemeColorDirective,\n DateInputDirective,\n DecimalMaskDirective,\n SlideButtonComponent,\n ToggleComponent,\n EmptyStateComponent,\n FormFieldComponent,\n InputComponent,\n InputCounterComponent,\n TextareaComponent,\n FabSheetComponent,\n DividerComponent,\n ReorderListComponent,\n DropdownComponent,\n LoadingOverlayComponent,\n ProgressCircleComponent,\n FlagComponent,\n SlidesComponent,\n SlideDirective,\n AccordionDirective,\n AccordionItemComponent,\n ItemSlidingComponent,\n RadioComponent,\n RadioGroupComponent,\n RangeComponent,\n ElementAsButtonDirective,\n ItemGroupComponent,\n SectionHeaderComponent,\n];\n\nconst declarations = [\n ...exportedDeclarations,\n KeyHandlerDirective,\n FormFieldMessageComponent,\n AlertComponent,\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ProgressCircleRingComponent,\n PopoverComponent,\n];\n\nconst exportedModules = [\n AppModule,\n RouterOutletModule,\n PageModule,\n TabsModule,\n IconModule,\n ItemModule,\n ToggleButtonModule,\n ListModule,\n ChartModule,\n SpinnerModule,\n];\n\nconst exports = [...exportedModules, ...exportedDeclarations];\n\nconst importedModules = [...exportedModules];\n\nconst providers = [\n ModalController,\n ActionSheetHelper,\n ModalHelper,\n AlertHelper,\n ToastHelper,\n ToastController,\n BreakpointHelperService,\n LoadingOverlayService,\n ResizeObserverFactory,\n ResizeObserverService,\n customElementsInitializer(),\n];\n\nconst entryComponents = [\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ActionSheetComponent,\n AlertComponent,\n];\n\nconst ConfigToken = new InjectionToken<any>('USERCONFIG');\nexport interface KirbyConfig {\n moduleRootRoutePath?: string;\n}\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n IonicModule.forRoot({\n mode: 'ios',\n inputShims: true,\n scrollAssist: true,\n scrollPadding: false,\n }),\n ...importedModules,\n ],\n declarations: declarations,\n providers: providers,\n entryComponents: entryComponents,\n exports: exports,\n})\nexport class KirbyModule {\n static forChild(config?: KirbyConfig): ModuleWithProviders<KirbyModule> {\n return {\n ngModule: KirbyModule,\n providers: [\n {\n provide: ConfigToken,\n useValue: config,\n },\n ],\n };\n }\n\n constructor(\n modalController: ModalController,\n @Optional() @Inject(ConfigToken) config?: KirbyConfig\n ) {\n modalController.initialize(config && config.moduleRootRoutePath);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {AccordionItemComponent as ɵeo} from './lib/components/accordion/accordion-item.component';\nexport {AccordionDirective as ɵen} from './lib/components/accordion/accordion.directive';\nexport {ProxyCmp as ɵa} from './lib/components/angular-component-lib/utils';\nexport {AppComponent as ɵc} from './lib/components/app/app.component';\nexport {AppModule as ɵb} from './lib/components/app/app.module';\nexport {AvatarComponent as ɵdh} from './lib/components/avatar/avatar.component';\nexport {ButtonComponent as ɵbc} from './lib/components/button/button.component';\nexport {CalendarComponent as ɵdi} from './lib/components/calendar/calendar.component';\nexport {CalendarHelper as ɵdj} from './lib/components/calendar/helpers/calendar.helper';\nexport {CardFooterComponent as ɵcs} from './lib/components/card/card-footer/card-footer.component';\nexport {CardHeaderComponent as ɵcr} from './lib/components/card/card-header/card-header.component';\nexport {CardComponent as ɵcq} from './lib/components/card/card.component';\nexport {ChartDeprecatedHelper as ɵcu} from './lib/components/chart-deprecated/chart-deprecated-helper';\nexport {ChartDeprecatedComponent as ɵct} from './lib/components/chart-deprecated/chart-deprecated.component';\nexport {ACTIVITYGAUGE_OPTIONS as ɵdb,ActivityGaugeOptions as ɵdc} from './lib/components/chart-deprecated/options/activitygauge';\nexport {AREASPLINE_OPTIONS as ɵcx,AreaSplineOptions as ɵcy} from './lib/components/chart-deprecated/options/areaspline';\nexport {DONUT_OPTIONS as ɵcv,DonutOptions as ɵcw} from './lib/components/chart-deprecated/options/donut';\nexport {TIMESERIES_OPTIONS as ɵcz,TimeSeriesOptions as ɵda} from './lib/components/chart-deprecated/options/timeseries';\nexport {ChartJSService as ɵco} from './lib/components/chart/chart-js/chart-js.service';\nexport {ChartComponent as ɵcn} from './lib/components/chart/chart.component';\nexport {ChartModule as ɵcm} from './lib/components/chart/chart.module';\nexport {ChartConfigService as ɵcp} from './lib/components/chart/configs/chart-config.service';\nexport {CheckboxComponent as ɵdk} from './lib/components/checkbox/checkbox.component';\nexport {ChipComponent as ɵdp} from './lib/components/chip/chip.component';\nexport {DividerComponent as ɵed} from './lib/components/divider/divider.component';\nexport {DropdownComponent as ɵef} from './lib/components/dropdown/dropdown.component';\nexport {KeyboardHandlerService as ɵeh} from './lib/components/dropdown/keyboard-handler.service';\nexport {EmptyStateComponent as ɵdv} from './lib/components/empty-state/empty-state.component';\nexport {FabSheetComponent as ɵec} from './lib/components/fab-sheet/fab-sheet.component';\nexport {FlagComponent as ɵek} from './lib/components/flag/flag.component';\nexport {DateInputDirective as ɵdr} from './lib/components/form-field/directives/date/date-input.directive';\nexport {DecimalMaskDirective as ɵds} from './lib/components/form-field/directives/decimal-mask/decimal-mask.directive';\nexport {FormFieldMessageComponent as ɵev} from './lib/components/form-field/form-field-message/form-field-message.component';\nexport {FormFieldComponent as ɵdw} from './lib/components/form-field/form-field.component';\nexport {InputCounterComponent as ɵdx} from './lib/components/form-field/input-counter/input-counter.component';\nexport {InputComponent as ɵea} from './lib/components/form-field/input/input.component';\nexport {TextareaComponent as ɵeb} from './lib/components/form-field/textarea/textarea.component';\nexport {BreakpointHelperService as ɵdf} from './lib/components/grid/breakpoint-helper.service';\nexport {GridComponent as ɵde} from './lib/components/grid/grid.component';\nexport {IconRegistryService as ɵbe} from './lib/components/icon/icon-registry.service';\nexport {ICON_SETTINGS as ɵbg,IconSettings as ɵbf} from './lib/components/icon/icon-settings';\nexport {IconComponent as ɵbd} from './lib/components/icon/icon.component';\nexport {IconModule as ɵbp} from './lib/components/icon/icon.module';\nexport {ItemGroupComponent as ɵes} from './lib/components/item-group/item-group.component';\nexport {ItemSlidingComponent as ɵep} from './lib/components/item-sliding/item-sliding.component';\nexport {ItemComponent as ɵbs} from './lib/components/item/item.component';\nexport {ItemModule as ɵbr} from './lib/components/item/item.module';\nexport {LabelComponent as ɵbt} from './lib/components/item/label/label.component';\nexport {InfiniteScrollDirective as ɵca} from './lib/components/list/directives/infinite-scroll.directive';\nexport {ListItemColorDirective as ɵcl} from './lib/components/list/directives/list-item-color.directive';\nexport {ListHelper as ɵby} from './lib/components/list/helpers/list-helper';\nexport {ListExperimentalComponent as ɵck} from './lib/components/list/list-experimental/list-experimental.component';\nexport {ListHeaderComponent as ɵcj} from './lib/components/list/list-header/list-header.component';\nexport {ListItemComponent as ɵch} from './lib/components/list/list-item/list-item.component';\nexport {ListSectionHeaderComponent as ɵci} from './lib/components/list/list-section-header/list-section-header.component';\nexport {ListComponent as ɵbx} from './lib/components/list/list.component';\nexport {ListFlexItemDirective as ɵcc,ListFooterDirective as ɵcg,ListHeaderDirective as ɵce,ListItemDirective as ɵcb,ListItemTemplateDirective as ɵcd,ListSectionHeaderDirective as ɵcf} from './lib/components/list/list.directive';\nexport {ListModule as ɵbw} from './lib/components/list/list.module';\nexport {GroupByPipe as ɵbz} from './lib/components/list/pipes/group-by.pipe';\nexport {LoadingOverlayComponent as ɵei} from './lib/components/loading-overlay/loading-overlay.component';\nexport {LoadingOverlayService as ɵfb} from './lib/components/loading-overlay/loading-overlay.service';\nexport {ActionSheetComponent as ɵdl} from './lib/components/modal/action-sheet/action-sheet.component';\nexport {AlertComponent as ɵew} from './lib/components/modal/alert/alert.component';\nexport {ModalFooterComponent as ɵdm} from './lib/components/modal/footer/modal-footer.component';\nexport {ModalCompactWrapperComponent as ɵex} from './lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component';\nexport {ModalWrapperComponent as ɵba} from './lib/components/modal/modal-wrapper/modal-wrapper.component';\nexport {ActionSheetHelper as ɵj} from './lib/components/modal/services/action-sheet.helper';\nexport {AlertHelper as ɵk} from './lib/components/modal/services/alert.helper';\nexport {ModalAnimationBuilderService as ɵg} from './lib/components/modal/services/modal-animation-builder.service';\nexport {ModalNavigationService as ɵl} from './lib/components/modal/services/modal-navigation.service';\nexport {ModalController as ɵe} from './lib/components/modal/services/modal.controller';\nexport {ModalHelper as ɵf} from './lib/components/modal/services/modal.helper';\nexport {Modal as ɵbb} from './lib/components/modal/services/modal.interfaces';\nexport {PageFooterComponent as ɵz} from './lib/components/page/page-footer/page-footer.component';\nexport {PageActionsComponent as ɵv,PageActionsDirective as ɵq,PageComponent as ɵw,PageContentComponent as ɵu,PageContentDirective as ɵr,PageProgressComponent as ɵs,PageTitleComponent as ɵt,PageTitleDirective as ɵo,PageToolbarTitleDirective as ɵp} from './lib/components/page/page.component';\nexport {PageModule as ɵn} from './lib/components/page/page.module';\nexport {PopoverComponent as ɵeg} from './lib/components/popover/popover.component';\nexport {ProgressCircleRingComponent as ɵey} from './lib/components/progress-circle/progress-circle-ring.component';\nexport {ProgressCircleComponent as ɵej} from './lib/components/progress-circle/progress-circle.component';\nexport {RadioGroupComponent as ɵdy} from './lib/components/radio/radio-group/radio-group.component';\nexport {RadioComponent as ɵdz} from './lib/components/radio/radio.component';\nexport {RangeComponent as ɵeq} from './lib/components/range/range.component';\nexport {ReorderListComponent as ɵee} from './lib/components/reorder-list/reorder-list.component';\nexport {RouterOutletComponent as ɵd} from './lib/components/router-outlet/router-outlet.component';\nexport {RouterOutletModule as ɵm} from './lib/components/router-outlet/router-outlet.module';\nexport {SectionHeaderComponent as ɵet} from './lib/components/section-header/section-header.component';\nexport {SegmentedControlComponent as ɵdo} from './lib/components/segmented-control/segmented-control.component';\nexport {ComponentLoaderDirective as ɵdg} from './lib/components/shared/component-loader.directive';\nexport {ResizeObserverFactory as ɵbi} from './lib/components/shared/resize-observer/resize-observer.factory';\nexport {ResizeObserverService as ɵbh} from './lib/components/shared/resize-observer/resize-observer.service';\nexport {SlideButtonComponent as ɵdt} from './lib/components/slide-button/slide-button.component';\nexport {SlideDirective as ɵel,SlidesComponent as ɵem} from './lib/components/slides/slides.component';\nexport {SpinnerComponent as ɵbn} from './lib/components/spinner/spinner.component';\nexport {SpinnerModule as ɵbm} from './lib/components/spinner/spinner.module';\nexport {StockChartDeprecatedComponent as ɵdd} from './lib/components/stock-chart-deprecated/stock-chart-deprecated.component';\nexport {TabButtonComponent as ɵbq} from './lib/components/tabs/tab-button/tab-button.component';\nexport {TabsComponent as ɵx} from './lib/components/tabs/tabs.component';\nexport {TabsModule as ɵbo} from './lib/components/tabs/tabs.module';\nexport {TabsService as ɵy} from './lib/components/tabs/tabs.service';\nexport {ToastController as ɵfa} from './lib/components/toast/services/toast.controller';\nexport {ToastHelper as ɵez} from './lib/components/toast/services/toast.helper';\nexport {ToggleButtonComponent as ɵbv} from './lib/components/toggle-button/toggle-button.component';\nexport {ToggleButtonModule as ɵbu} from './lib/components/toggle-button/toggle-button.module';\nexport {ToggleComponent as ɵdu} from './lib/components/toggle/toggle.component';\nexport {appInitialize as ɵfc,customElementsInitializer as ɵfd} from './lib/custom-elements-initializer';\nexport {ElementAsButtonDirective as ɵer} from './lib/directives/element-as-button/element-as-button.directive';\nexport {FitHeadingDirective as ɵbk} from './lib/directives/fit-heading/fit-heading.directive';\nexport {FitHeadingModule as ɵbj} from './lib/directives/fit-heading/fit-heading.module';\nexport {KeyHandlerDirective as ɵeu} from './lib/directives/key-handler/key-handler.directive';\nexport {ModalRouterLinkDirective as ɵdn} from './lib/directives/modal-router-link/modal-router-link.directive';\nexport {ThemeColorDirective as ɵdq} from './lib/directives/theme-color/theme-color.directive';\nexport {LineClampHelper as ɵbl} from './lib/helpers/line-clamp-helper';\nexport {PlatformService as ɵh} from './lib/helpers/platform.service';\nexport {WindowRef as ɵi} from './lib/types/window-ref';"],"names":["ModalController","getColor","fontSize","colorPoints","getThemeColorHexString","defaultOptions","dateFormat","Highcharts","Highcharts.stockChart","ToastController","exportedDeclarations","BadgeComponent","declarations"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem.js","sources":["../../../../libs/designsystem/src/lib/animation/kirby-animation.ts","../../../../libs/designsystem/src/lib/components/router-outlet/router-outlet.component.ts","../../../../libs/designsystem/src/lib/components/modal/action-sheet/action-sheet.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/action-sheet.helper.ts","../../../../libs/designsystem/src/lib/types/window-ref.ts","../../../../libs/designsystem/src/lib/components/modal/alert/alert.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/alert.helper.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal-navigation.service.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.interfaces.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/config/modal-config.helper.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component.ts","../../../../libs/designsystem/src/lib/helpers/platform.service.ts","../../../../libs/designsystem/src/lib/components/icon/icon-settings.ts","../../../../libs/designsystem/src/lib/components/icon/icon-registry.service.ts","../../../../libs/designsystem/src/lib/components/icon/kirby-icon-settings.ts","../../../../libs/designsystem/src/lib/components/icon/icon.component.ts","../../../../libs/designsystem/src/lib/components/button/button.component.ts","../../../../libs/designsystem/src/lib/components/shared/resize-observer/resize-observer.factory.ts","../../../../libs/designsystem/src/lib/components/shared/resize-observer/resize-observer.service.ts","../../../../libs/designsystem/src/lib/components/modal/modal-wrapper/modal-wrapper.component.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal-animation-builder.service.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.helper.ts","../../../../libs/designsystem/src/lib/components/modal/services/modal.controller.ts","../../../../libs/designsystem/src/lib/components/app/app.component.ts","../../../../libs/designsystem/src/lib/components/app/app.module.ts","../../../../libs/designsystem/src/lib/components/avatar/avatar.component.ts","../../../../libs/designsystem/src/lib/components/card/card.component.ts","../../../../libs/designsystem/src/lib/components/card/card-footer/card-footer.component.ts","../../../../libs/designsystem/src/lib/components/card/card-header/card-header.component.ts","../../../../libs/designsystem/src/lib/helpers/merge-deep.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated-helper.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated-type.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/activitygauge.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/areaspline.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/bar.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/column.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/donut.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/options/timeseries.ts","../../../../libs/designsystem/src/lib/components/chart-deprecated/chart-deprecated.component.ts","../../../../libs/designsystem/src/lib/components/chart/chart.types.ts","../../../../libs/designsystem/src/lib/components/shared/component-loader.directive.ts","../../../../libs/designsystem/src/lib/helpers/deep-copy.ts","../../../../libs/designsystem/src/lib/helpers/element-has-ancestor.ts","../../../../libs/designsystem/src/lib/helpers/index.ts","../../../../libs/designsystem/src/lib/components/chart/configs/annotations.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/interaction-functions-extensions.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/type.config.ts","../../../../libs/designsystem/src/lib/components/chart/configs/chart-config.service.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/chartjs-plugin-marker/chartjs-plugin-marker.ts","../../../../libs/designsystem/src/lib/components/chart/configs/shared.utils.ts","../../../../libs/designsystem/src/lib/components/chart/configs/global-defaults.config.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/configured-chart-js.ts","../../../../libs/designsystem/src/lib/components/chart/chart-js/chart-js.service.ts","../../../../libs/designsystem/src/lib/components/chart/chart.component.ts","../../../../libs/designsystem/src/lib/components/stock-chart-deprecated/options/stock-chart-deprecated-options.ts","../../../../libs/designsystem/src/lib/components/stock-chart-deprecated/stock-chart-deprecated.component.ts","../../../../libs/designsystem/src/lib/components/calendar/helpers/calendar.helper.ts","../../../../libs/designsystem/src/lib/components/calendar/calendar.component.ts","../../../../libs/designsystem/src/lib/components/item-sliding/item-sliding.component.ts","../../../../libs/designsystem/src/lib/helpers/unique-id-generator.helper.ts","../../../../libs/designsystem/src/lib/components/checkbox/checkbox.component.ts","../../../../libs/designsystem/src/lib/components/chip/chip.component.ts","../../../../libs/designsystem/src/lib/components/divider/divider.component.ts","../../../../libs/designsystem/src/lib/components/item/item.component.ts","../../../../libs/designsystem/src/lib/components/list/list.directive.ts","../../../../libs/designsystem/src/lib/components/popover/popover.component.ts","../../../../libs/designsystem/src/lib/components/dropdown/dropdown.types.ts","../../../../libs/designsystem/src/lib/components/dropdown/keyboard-handler.service.ts","../../../../libs/designsystem/src/lib/components/dropdown/dropdown.component.ts","../../../../libs/designsystem/src/lib/components/empty-state/empty-state.component.ts","../../../../libs/designsystem/src/lib/components/radio/radio.component.ts","../../../../libs/designsystem/src/lib/components/radio/radio-group/radio-group.component.ts","../../../../libs/designsystem/src/lib/components/form-field/input-counter/input-counter.component.ts","../../../../libs/designsystem/src/lib/components/form-field/input/input.component.ts","../../../../libs/designsystem/src/lib/components/form-field/textarea/textarea.component.ts","../../../../libs/designsystem/src/lib/components/form-field/form-field.component.ts","../../../../libs/designsystem/src/lib/components/form-field/form-field-message/form-field-message.component.ts","../../../../libs/designsystem/src/lib/components/form-field/directives/date/date-input.directive.ts","../../../../libs/designsystem/src/lib/components/form-field/directives/decimal-mask/decimal-mask.directive.ts","../../../../libs/designsystem/src/lib/components/fab-sheet/fab-sheet.component.ts","../../../../libs/designsystem/src/lib/scss/scss-helper.ts","../../../../libs/designsystem/src/lib/components/grid/breakpoint-helper.service.ts","../../../../libs/designsystem/src/lib/components/grid/grid.component.ts","../../../../libs/designsystem/src/lib/components/grid/grid-card-configuration.ts","../../../../libs/designsystem/src/lib/components/icon/icon.module.ts","../../../../libs/designsystem/src/lib/components/item/label/label.component.ts","../../../../libs/designsystem/src/lib/components/item/item.module.ts","../../../../libs/designsystem/src/lib/components/item-group/item-group.component.ts","../../../../libs/designsystem/src/lib/components/spinner/spinner.component.ts","../../../../libs/designsystem/src/lib/components/loading-overlay/loading-overlay.service.ts","../../../../libs/designsystem/src/lib/components/loading-overlay/loading-overlay.component.ts","../../../../libs/designsystem/src/lib/components/list/directives/infinite-scroll.directive.ts","../../../../libs/designsystem/src/lib/components/list/helpers/list-helper.ts","../../../../libs/designsystem/src/lib/components/list/pipes/group-by.pipe.ts","../../../../libs/designsystem/src/lib/components/list/list.component.ts","../../../../libs/designsystem/src/lib/components/list/list-header/list-header.component.ts","../../../../libs/designsystem/src/lib/components/list/list-section-header/list-section-header.component.ts","../../../../libs/designsystem/src/lib/components/list/list-item/list-item.component.ts","../../../../libs/designsystem/src/lib/components/list/directives/list-item-color.directive.ts","../../../../libs/designsystem/src/lib/components/list/list-experimental/list-experimental.component.ts","../../../../libs/designsystem/src/lib/components/reorder-list/reorder-event.ts","../../../../libs/designsystem/src/lib/components/reorder-list/reorder-list.component.ts","../../../../libs/designsystem/src/lib/components/modal/footer/modal-footer.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tab-button/tab-button.events.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.service.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.component.ts","../../../../libs/designsystem/src/lib/components/page/page.component.ts","../../../../libs/designsystem/src/lib/components/page/page-footer/page-footer.component.ts","../../../../libs/designsystem/src/lib/helpers/line-clamp-helper.ts","../../../../libs/designsystem/src/lib/directives/fit-heading/fit-heading.directive.ts","../../../../libs/designsystem/src/lib/directives/fit-heading/fit-heading.module.ts","../../../../libs/designsystem/src/lib/components/spinner/spinner.module.ts","../../../../libs/designsystem/src/lib/components/page/page.module.ts","../../../../libs/designsystem/src/lib/components/router-outlet/router-outlet.module.ts","../../../../libs/designsystem/src/lib/components/section-header/section-header.component.ts","../../../../libs/designsystem/src/lib/components/segmented-control/segmented-control.component.ts","../../../../libs/designsystem/src/lib/components/slide-button/slide-button.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tab-button/tab-button.component.ts","../../../../libs/designsystem/src/lib/components/tabs/tabs.module.ts","../../../../libs/designsystem/src/lib/components/toast/services/toast.helper.ts","../../../../libs/designsystem/src/lib/components/toast/services/toast.controller.ts","../../../../libs/designsystem/src/lib/components/toggle/toggle.component.ts","../../../../libs/designsystem/src/lib/components/progress-circle/progress-circle.component.ts","../../../../libs/designsystem/src/lib/components/flag/flag.component.ts","../../../../libs/designsystem/src/lib/components/slides/slides.component.ts","../../../../libs/designsystem/src/lib/components/toggle-button/toggle-button.component.ts","../../../../libs/designsystem/src/lib/components/accordion/accordion.directive.ts","../../../../libs/designsystem/src/lib/components/accordion/accordion-item.component.ts","../../../../libs/designsystem/src/lib/components/range/range.component.ts","../../../../libs/designsystem/src/lib/directives/key-handler/key-handler.directive.ts","../../../../libs/designsystem/src/lib/directives/theme-color/theme-color.directive.ts","../../../../libs/designsystem/src/lib/components/angular-component-lib/utils.ts","../../../../libs/designsystem/src/lib/components/web-component-proxies.component.ts","../../../../libs/designsystem/src/lib/components/chart/chart.module.ts","../../../../libs/designsystem/src/lib/components/list/list.module.ts","../../../../libs/designsystem/src/lib/components/progress-circle/progress-circle-ring.component.ts","../../../../libs/designsystem/src/lib/components/toggle-button/toggle-button.module.ts","../../../../libs/designsystem/src/lib/custom-elements-initializer.ts","../../../../libs/designsystem/src/lib/directives/element-as-button/element-as-button.directive.ts","../../../../libs/designsystem/src/lib/directives/modal-router-link/modal-router-link.directive.ts","../../../../libs/designsystem/src/lib/kirby.module.ts","../../../../libs/designsystem/src/kirbydesign-designsystem.ts"],"sourcesContent":["import { DesignTokenHelper } from '@kirbydesign/core';\n\nexport namespace KirbyAnimation {\n export enum Duration {\n // Duration in milliseconds\n QUICK = parseInt(DesignTokenHelper.transitionDuration('quick')),\n SHORT = parseInt(DesignTokenHelper.transitionDuration('short')),\n LONG = parseInt(DesignTokenHelper.transitionDuration('long')),\n EXTRA_LONG = parseInt(DesignTokenHelper.transitionDuration('extraLong')),\n }\n export const Easing = DesignTokenHelper.transitionEasings();\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-router-outlet',\n templateUrl: './router-outlet.component.html',\n styleUrls: ['./router-outlet.component.scss'],\n})\nexport class RouterOutletComponent {\n @Input() main: boolean;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { ActionSheetItem } from './config/action-sheet-item';\n\n@Component({\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","import { EventEmitter, Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\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\nimport { Overlay } from './modal.interfaces';\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 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 { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WindowRef {\n get nativeWindow(): any {\n return window;\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { WindowRef } from '../../../types/window-ref';\n\n@Component({\n selector: 'kirby-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n // tslint:disable-next-line: 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 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: string;\n @Input() okBtnText: string;\n @Input() okBtnIsDestructive: boolean;\n @Input() cancelBtnText: 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","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { AlertConfig } from '../alert/config/alert-config';\nimport { AlertComponent } from '../alert/alert.component';\nimport { Overlay } from './modal.interfaces';\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 okBtnText: this.getOkBtnText(config),\n cancelBtnText: this.getCancelBtnText(config),\n okBtnIsDestructive: this.getOkBtnIsDestructive(config),\n iconName: config.icon && config.icon.name,\n iconThemeColor: config.icon && config.icon.themeColor,\n };\n }\n\n private getOkBtnText(config: AlertConfig) {\n let text: string;\n if (config.okBtnText) {\n console.warn(\n '`okBtnText` will be deprecated on next major version. Please use `okBtn` instead.'\n );\n text = config.okBtnText;\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 private getCancelBtnText(config: AlertConfig) {\n if (config.cancelBtnText) {\n console.warn(\n '`cancelBtnText` will be deprecated on next major version. Please use `cancelBtn` instead.'\n );\n }\n return config.cancelBtn || config.cancelBtnText;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Params, Route, Router, Routes } from '@angular/router';\nimport { EMPTY, Observable } from 'rxjs';\nimport { filter, first, map, pairwise, startWith } from 'rxjs/operators';\n\nimport { ModalRouteActivation } from './modal.interfaces';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalNavigationService {\n constructor(private router: Router, private route: ActivatedRoute) {}\n\n isModalRoute(url: string): boolean {\n return url.includes('(modal:');\n }\n\n private getCurrentActivatedRoute(): ActivatedRoute {\n let childRoute = this.route.root;\n while (childRoute.firstChild) {\n childRoute = childRoute.firstChild;\n }\n return childRoute;\n }\n\n private async getModalRoutes(\n routeConfig: Routes[],\n moduleRootRoutePath?: string\n ): Promise<string[]> {\n const flattenedRoutes: Routes = [].concat(...routeConfig);\n let modalRoutes: string[] = [];\n const moduleRootPaths = await this.getModuleRootPath(flattenedRoutes, moduleRootRoutePath);\n if (moduleRootPaths) {\n modalRoutes = this.getModalRoutePaths(flattenedRoutes, moduleRootPaths);\n }\n return modalRoutes;\n }\n\n private async getModuleRootPath(routes: Routes, moduleRootRoutePath?: string): Promise<string[]> {\n if (moduleRootRoutePath) {\n const trimmedPaths = moduleRootRoutePath\n .trim()\n .split('/')\n .filter((path) => !!path);\n const rootPath = [''];\n return rootPath.concat(trimmedPaths);\n }\n\n const currentRoutePaths = await this.getCurrentRoutePaths();\n const moduleRootPaths = this.getRoutePathsWithoutChildSegments(currentRoutePaths, routes);\n return moduleRootPaths;\n }\n\n private async getCurrentRoutePaths(): Promise<string[]> {\n const rootPath = [''];\n const currentNavigation = this.router.getCurrentNavigation();\n\n if (!this.router.navigated && !currentNavigation) {\n // If router hasn't navigated yet and we are not in the middle of navigating, assume root:\n return rootPath;\n }\n\n if (currentNavigation) {\n // Wait for current navigation to finish:\n await this.navigationEndListener$.pipe(first()).toPromise();\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 this.navigationEndListener$.pipe(first()).toPromise();\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 route: this.getCurrentActivatedRoute(),\n isNewModal: this.isNewModalWindow(navigationEnd),\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 filter(([prevNavigation, _]) =>\n this.modalRouteSetContainsPath(modalRouteSet, prevNavigation, modalRoutesContainsUrlParams)\n ), // Only emit if previous route was modal\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 (let 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 return { activated$: EMPTY, deactivated$: EMPTY };\n }\n\n async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n const commands = Array.isArray(path) ? path : path.split('/');\n const childPath = commands.pop();\n const result = await this.router.navigate([...commands, { outlets: { modal: [childPath] } }], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n return result;\n }\n\n async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.router.navigate([relativePath], {\n queryParams,\n relativeTo: this.getCurrentActivatedRoute(),\n });\n }\n\n async navigateOutOfModalOutlet(): Promise<boolean> {\n 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 { ActivatedRoute } from '@angular/router';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\n\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 ModalRouteActivation {\n route: ActivatedRoute;\n isNewModal: boolean;\n}\n\nexport abstract class Modal {\n didPresent: Promise<void>;\n willClose: Promise<void>;\n close: (data?: any) => Promise<void>;\n scrollToTop: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollToBottom: (scrollDuration?: KirbyAnimation.Duration) => void;\n scrollDisabled: boolean;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const COMPONENT_PROPS = new InjectionToken<string>('componentProps');\n","import { Component, ElementRef, HostListener, Injector, Input, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { WindowRef } from '../../../../types/window-ref';\nimport { Modal } from '../../services/modal.interfaces';\nimport { ModalConfig } from '../config/modal-config';\nimport { COMPONENT_PROPS } from '../config/modal-config.helper';\n\n@Component({\n selector: 'kirby-modal-compact-wrapper',\n templateUrl: './modal-compact-wrapper.component.html',\n styleUrls: ['./modal-compact-wrapper.component.scss'],\n providers: [{ provide: Modal, useExisting: ModalCompactWrapperComponent }],\n // tslint:disable-next-line: 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 scrollY: number = Math.abs(this.windowRef.nativeWindow.scrollY);\n scrollDisabled = false;\n @Input() config: ModalConfig;\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 = this.ionModalDidPresent.toPromise();\n readonly willClose = this.ionModalWillDismiss.toPromise();\n\n constructor(\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private windowRef: WindowRef\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 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","import { Injectable } from '@angular/core';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { WindowRef } from '../types/window-ref';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PlatformService {\n constructor(private windowRef: WindowRef) {}\n\n isTouch() {\n const isTouchDeviceQuery = '(pointer: coarse)'; // No check for `hover: none`, as Samsung Galaxy will return false on `hover: none` media query\n return this.windowRef.nativeWindow.matchMedia(isTouchDeviceQuery).matches;\n }\n\n isPhabletOrBigger() {\n const query = `(min-width: ${DesignTokenHelper.breakpoints.medium})`;\n return this.windowRef.nativeWindow.matchMedia(query).matches;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface Icon {\n name: string;\n svg?: string;\n}\n\nexport interface IconSettings {\n icons: Icon[];\n}\n\nexport const ICON_SETTINGS = new InjectionToken<IconSettings>('IconSettings');\n","import { Inject, Injectable, Optional } from '@angular/core';\n\nimport { Icon, IconSettings, ICON_SETTINGS } from './icon-settings';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconRegistryService {\n private iconRegistry = new Map<string, string>();\n\n constructor(@Optional() @Inject(ICON_SETTINGS) iconSettings?: IconSettings) {\n if (iconSettings) {\n this.addIcons(iconSettings.icons);\n console.warn(`Use of IconSettings is deprecated, use IconRegistryService instead`);\n }\n }\n\n public addIcon(iconName: string, svgPath: string): void {\n if (!this.iconRegistry.has(iconName)) {\n this.iconRegistry.set(iconName, svgPath);\n } else {\n console.warn(`Icon with name: \"${iconName}\" already exists`);\n }\n }\n\n public addIcons(icons: Icon[]): void {\n if (!icons) {\n console.error('Icons not defined');\n return;\n }\n icons.forEach((icon) => {\n this.addIcon(icon.name, icon.svg);\n });\n }\n\n getIcons(): Icon[] {\n return [...this.iconRegistry].map(\n (keyValPair) => ({ name: keyValPair[0], svg: keyValPair[1] } as Icon)\n );\n }\n\n getIcon(name: string): Icon {\n const svg = this.iconRegistry.get(name);\n return svg ? { name, svg } : undefined;\n }\n}\n","import { IconSettings } from './icon-settings';\n\n// tslint:disable:prettier\nexport const kirbyIconSettings: IconSettings = {\n icons: [\n { name: 'accounts-outline', svg: 'assets/kirby/icons/svg/accounts-outline.svg' },\n { name: 'accounts', svg: 'assets/kirby/icons/svg/accounts.svg' },\n { name: 'add', svg: 'assets/kirby/icons/svg/add.svg' },\n { name: 'remove', svg: 'assets/kirby/icons/svg/remove.svg' },\n { name: 'unsubscribe', svg: 'assets/kirby/icons/svg/unsubscribe.svg' },\n { name: 'arrow-back', svg: 'assets/kirby/icons/svg/arrow-back.svg' },\n { name: 'arrow-down', svg: 'assets/kirby/icons/svg/arrow-down.svg' },\n { name: 'arrow-more', svg: 'assets/kirby/icons/svg/arrow-more.svg' },\n { name: 'arrow-up', svg: 'assets/kirby/icons/svg/arrow-up.svg' },\n { name: 'attach', svg: 'assets/kirby/icons/svg/attach.svg' },\n { name: 'backspace', svg: 'assets/kirby/icons/svg/backspace.svg' },\n { name: 'calendar', svg: 'assets/kirby/icons/svg/calendar.svg' },\n { name: 'camera', svg: 'assets/kirby/icons/svg/camera.svg' },\n { name: 'checkbox-outline', svg: 'assets/kirby/icons/svg/checkbox-outline.svg' },\n { name: 'checkbox', svg: 'assets/kirby/icons/svg/checkbox.svg' },\n { name: 'checkmark-selected', svg: 'assets/kirby/icons/svg/checkmark-selected.svg' },\n { name: 'close', svg: 'assets/kirby/icons/svg/close.svg' },\n { name: 'cog', svg: 'assets/kirby/icons/svg/cog.svg' },\n { name: 'copy', svg: 'assets/kirby/icons/svg/copy.svg' },\n { name: 'flag', svg: 'assets/kirby/icons/svg/flag.svg' },\n { name: 'edit', svg: 'assets/kirby/icons/svg/edit.svg' },\n { name: 'filter', svg: 'assets/kirby/icons/svg/filter.svg' },\n { name: 'flash-off', svg: 'assets/kirby/icons/svg/flash-off.svg' },\n { name: 'flash', svg: 'assets/kirby/icons/svg/flash.svg' },\n { name: 'moneybag', svg: 'assets/kirby/icons/svg/moneybag.svg' },\n { name: 'help', svg: 'assets/kirby/icons/svg/help.svg' },\n { name: 'home', svg: 'assets/kirby/icons/svg/home.svg' },\n { name: 'inbox', svg: 'assets/kirby/icons/svg/inbox.svg' },\n { name: 'inbox-outline', svg: 'assets/kirby/icons/svg/inbox-outline.svg' },\n { name: 'information', svg: 'assets/kirby/icons/svg/information.svg' },\n { name: 'investment', svg: 'assets/kirby/icons/svg/investment.svg' },\n { name: 'kirby', svg: 'assets/kirby/icons/svg/kirby.svg' },\n { name: 'link', svg: 'assets/kirby/icons/svg/link.svg' },\n { name: 'log-out', svg: 'assets/kirby/icons/svg/log-out.svg' },\n { name: 'menu-outline', svg: 'assets/kirby/icons/svg/menu-outline.svg' },\n { name: 'menu', svg: 'assets/kirby/icons/svg/menu.svg' },\n { name: 'misc', svg: 'assets/kirby/icons/svg/misc.svg' },\n { name: 'more', svg: 'assets/kirby/icons/svg/more.svg' },\n { name: 'move', svg: 'assets/kirby/icons/svg/move.svg' },\n { name: 'payment-card', svg: 'assets/kirby/icons/svg/payment-card.svg' },\n { name: 'pension', svg: 'assets/kirby/icons/svg/pension.svg' },\n { name: 'person-outline', svg: 'assets/kirby/icons/svg/person-outline.svg' },\n { name: 'person', svg: 'assets/kirby/icons/svg/person.svg' },\n { name: 'qr', svg: 'assets/kirby/icons/svg/QR.svg' },\n { name: 'search', svg: 'assets/kirby/icons/svg/search.svg' },\n { name: 'share', svg: 'assets/kirby/icons/svg/share.svg' },\n { name: 'sort', svg: 'assets/kirby/icons/svg/sort.svg' },\n { name: 'support', svg: 'assets/kirby/icons/svg/support.svg' },\n { name: 'swap', svg: 'assets/kirby/icons/svg/swap.svg' },\n { name: 'trash', svg: 'assets/kirby/icons/svg/trash.svg' },\n { name: 'foreign-payment', svg: 'assets/kirby/icons/svg/foreign-payment.svg' },\n { name: 'clock', svg: 'assets/kirby/icons/svg/clock.svg' },\n { name: 'verify', svg: 'assets/kirby/icons/svg/verify.svg' },\n { name: 'warning', svg: 'assets/kirby/icons/svg/warning.svg' },\n { name: 'write-message', svg: 'assets/kirby/icons/svg/write-message.svg' },\n { name: 'reorder', svg: 'assets/kirby/icons/svg/reorder.svg' },\n ],\n};\n\nexport const defaultIcons = kirbyIconSettings.icons.map((icon) => icon.name);\n","import { Component, HostBinding, Input, OnChanges, SimpleChanges } from '@angular/core';\n\nimport { IconRegistryService } from './icon-registry.service';\nimport { Icon } from './icon-settings';\nimport { kirbyIconSettings } from './kirby-icon-settings';\n\nexport enum IconSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n selector: 'kirby-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n // tslint:disable-next-line: no-host-metadata-property\n host: { '[class.kirby-icon]': 'true' },\n})\nexport class IconComponent implements OnChanges {\n defaultIcon: Icon = this.findIcon(kirbyIconSettings.icons, 'cog');\n private _icon = (this.icon = this.defaultIcon);\n @HostBinding('class')\n @Input()\n size: IconSize | `${IconSize}`;\n\n @Input() name: string;\n @Input() customName: string;\n\n get icon(): Icon {\n return this._icon;\n }\n\n set icon(icon: Icon) {\n // If icon are not found, set default icon\n if (!icon && (this.name || this.customName)) {\n this.warnAboutMissingIcon();\n\n icon = this.defaultIcon;\n\n // If default icon are not found\n if (!icon) {\n console.warn('Default icon was not found.');\n return;\n }\n }\n\n // Set icon if it's found\n if (icon) {\n this._icon = icon;\n }\n }\n\n private warnAboutMissingIcon(): void {\n if (this.customName) {\n console.warn(`Custom icon with name \"${this.customName}\" was not found. \n Do you have a typo in 'customName' or\n forgot to configure the custom icon through the 'IconRegistryService'?`);\n } else {\n console.warn(`Built-in icon with name \"${this.name}\" was not found. \n Do you have a typo in 'name' or\n did you mean to use a custom icon? If so, please use: \n <kirby-icon customName=\"${this.name}\"></kirby-icon>`);\n }\n }\n\n constructor(private iconRegistryService: IconRegistryService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.name && changes.name.currentValue) {\n this.icon = this.findIcon(kirbyIconSettings.icons, changes.name.currentValue);\n } else if (changes.customName && changes.customName.currentValue) {\n this.icon = this.iconRegistryService.getIcon(changes.customName.currentValue);\n }\n }\n\n private findIcon(icons, name: string): Icon {\n return icons.find((icon) => icon.name === name);\n }\n}\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Input,\n} from '@angular/core';\n\nimport { NotificationColor } from '@kirbydesign/core';\n\nimport { IconComponent } from '../icon/icon.component';\n\nexport enum ButtonSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'button[kirby-button],Button[kirby-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent implements AfterContentInit {\n @HostBinding('class.attention-level1')\n isAttentionLevel1: boolean = true; // Default\n @HostBinding('class.attention-level2')\n isAttentionLevel2: boolean;\n @HostBinding('class.attention-level3')\n isAttentionLevel3: boolean;\n @HostBinding('class.attention-level4')\n isAttentionLevel4: boolean;\n @HostBinding('class.destructive')\n destructive: boolean = false; // Default\n\n @HostBinding('class.floating')\n public get isButtonFloating(): boolean {\n return this.isFloating;\n }\n\n @HostBinding('class.icon-only')\n public get isIconOnly(): boolean {\n return !!this.icon && !this.hasText;\n }\n private _isIconLeft = false;\n @HostBinding('class.icon-left')\n public get isIconLeft() {\n return this._isIconLeft;\n }\n private _isIconRight = false;\n @HostBinding('class.icon-right')\n public get isIconRight() {\n return this._isIconRight;\n }\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size].filter((cssClass) => !!cssClass);\n }\n\n @Input() set attentionLevel(level: '1' | '2' | '3' | '4') {\n this.isAttentionLevel1 = level === '1';\n this.isAttentionLevel2 = level === '2';\n this.isAttentionLevel3 = level === '3';\n this.isAttentionLevel4 = level === '4';\n }\n @Input() set isDestructive(state: boolean) {\n this.destructive = state;\n }\n @Input()\n themeColor: NotificationColor;\n @Input() expand: 'full' | 'block';\n @Input() isFloating: boolean = false;\n @Input()\n size: ButtonSize | `${ButtonSize}` = ButtonSize.MD;\n\n @ContentChild(IconComponent) icon: IconComponent;\n @ContentChild(IconComponent, { read: ElementRef })\n iconElementRef: ElementRef<HTMLElement>;\n private hasText = false;\n\n constructor(private elementRef: ElementRef<HTMLElement>) {}\n\n ngAfterContentInit(): void {\n this.hasText = !!this.elementRef.nativeElement.textContent;\n if (this.iconElementRef !== undefined && this.hasText) {\n this._isIconLeft =\n this.elementRef.nativeElement.firstChild === this.iconElementRef.nativeElement;\n this._isIconRight = !this._isIconLeft;\n }\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ResizeObserver } from './types/resize-observer';\nimport { ResizeObserverCallback } from './types/resize-observer-callback';\n\ndeclare var ResizeObserver: {\n prototype: ResizeObserver;\n new (callback: ResizeObserverCallback): ResizeObserver;\n};\n\n/**\n * Factory that creates a new ResizeObserver and allows us to stub it out in unit tests.\n * @docs-private\n */\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverFactory {\n create(callback: ResizeObserverCallback): ResizeObserver | null {\n return typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(callback);\n }\n}\n","import { ElementRef, Injectable, OnDestroy, NgZone } from '@angular/core';\n\nimport { ResizeObserver } from './types/resize-observer';\nimport { ResizeObserverEntry } from './types/resize-observer-entry';\nimport { ResizeObserverFactory } from './resize-observer.factory';\n\n@Injectable({ providedIn: 'root' })\nexport class ResizeObserverService implements OnDestroy {\n // IMPORTANT: Keeps track of the existing ResizeObserver so it can be reused for performance.\n // See: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/z6ienONUb5A/F5-VcUZtBAAJ\n private observer: ResizeObserver | null;\n private observedElements = new WeakMap<Element, (entry: ResizeObserverEntry) => void>();\n\n constructor(private _resizeObserverFactory: ResizeObserverFactory, private zone: NgZone) {\n this.observer = this._resizeObserverFactory.create((entries) => this.handleResize(entries));\n }\n\n observe(\n elementOrRef: Element | ElementRef<Element>,\n action: (entry: ResizeObserverEntry) => void\n ): void {\n const element = elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n if (!this.observedElements.has(element)) {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.observe(element);\n });\n }\n this.observedElements.set(element, action);\n }\n }\n\n ngOnDestroy() {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.disconnect();\n });\n }\n this.observedElements = null;\n }\n\n unobserve(elementOrRef: Element | ElementRef<Element>) {\n const element = elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n if (this.observedElements.has(element)) {\n if (this.observer) {\n // IMPORTANT: Has to be run outside the Angular zone, for it to work with ResizeObserver polyfill:\n this.zone.runOutsideAngular(() => {\n this.observer.unobserve(element);\n });\n }\n this.observedElements.delete(element);\n }\n }\n\n private handleResize(entries: ResizeObserverEntry[]) {\n entries.forEach((entry) => {\n const action = this.observedElements.get(entry.target);\n if (action) {\n action(entry);\n }\n });\n }\n}\n","import {\n AfterViewInit,\n Component,\n ComponentFactoryResolver,\n ElementRef,\n HostBinding,\n HostListener,\n Injector,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\nimport { IonContent, IonHeader, IonTitle, IonToolbar } from '@ionic/angular';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { debounceTime, first, takeUntil } from 'rxjs/operators';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { PlatformService } from '../../../helpers/platform.service';\nimport { WindowRef } from '../../../types/window-ref';\nimport { ButtonComponent } from '../../button/button.component';\nimport { ResizeObserverService } from '../../shared/resize-observer/resize-observer.service';\nimport { ResizeObserverEntry } from '../../shared/resize-observer/types/resize-observer-entry';\nimport { Modal } from '../services/modal.interfaces';\n\nimport { ModalConfig } from './config/modal-config';\nimport { COMPONENT_PROPS } from './config/modal-config.helper';\n\n@Component({\n selector: 'kirby-modal-wrapper',\n templateUrl: './modal-wrapper.component.html',\n styleUrls: ['./modal-wrapper.component.scss'],\n providers: [{ provide: Modal, useExisting: ModalWrapperComponent }],\n})\nexport class ModalWrapperComponent implements Modal, AfterViewInit, OnInit, OnDestroy {\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 set scrollDisabled(disabled: boolean) {\n this.ionContent.scrollY = !disabled;\n }\n\n @Input() config: ModalConfig;\n componentPropsInjector: Injector;\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 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 = this.ionModalDidPresent.toPromise();\n private readonly ionModalWillDismiss = new Subject<void>();\n readonly willClose = this.ionModalWillDismiss.toPromise();\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 get mutationObserver(): MutationObserver {\n if (!this._mutationObserver) {\n this._mutationObserver = this.createEmbeddedElementsMutationObserver();\n }\n return this._mutationObserver;\n }\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 private destroy$ = new Subject();\n\n @HostBinding('class.drawer')\n get _isDrawer() {\n return this.config.flavor === 'drawer';\n }\n\n willClose$ = this.ionModalWillDismiss.pipe(first());\n\n constructor(\n private injector: Injector,\n private elementRef: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private zone: NgZone,\n private resizeObserverService: ResizeObserverService,\n private componentFactoryResolver: ComponentFactoryResolver,\n private windowRef: WindowRef,\n private platform: PlatformService\n ) {\n this.setViewportHeight();\n this.observeViewportResize();\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.initializeResizeModalToModalWrapper();\n this.componentPropsInjector = Injector.create({\n providers: [{ provide: COMPONENT_PROPS, useValue: this.config.componentProps }],\n parent: this.injector,\n });\n }\n\n private initializeResizeModalToModalWrapper() {\n if (this.config.flavor === 'drawer' && this.config.interactWithBackground) {\n merge(this.ionModalDidPresent, this.viewportResize$)\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n // wait for template to render\n setTimeout(() => {\n const domRect = this.elementRef.nativeElement.getBoundingClientRect();\n const document = this.windowRef.nativeWindow.document.documentElement;\n const right = document.clientWidth - domRect.right;\n this.renderer.setStyle(this.ionModalElement, 'top', `${domRect.top}px`);\n this.renderer.setStyle(this.ionModalElement, 'left', `${domRect.left}px`);\n this.renderer.setStyle(this.ionModalElement, 'right', `${right}px`);\n });\n });\n }\n }\n\n private initializeSizing() {\n if (this.config.size === 'full-height') return;\n this.patchScrollElementSize();\n this.observeHeaderResize();\n this.observeModalFullHeight();\n }\n\n private initializeModalRoute() {\n if (this.config.modalRoute) {\n this.onSiblingModalRouteActivated(this.config.siblingModalRouteActivated$);\n // Load component from modal-route inside router-outlet:\n this.routerOutlet.activateWith(this.config.modalRoute, this.componentFactoryResolver);\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.mutationObserver.disconnect();\n this.routerOutlet.deactivate();\n this.clearEmbeddedElements();\n }\n this.routerOutlet.activateWith(route, this.componentFactoryResolver);\n this.checkForEmbeddedElements();\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.elementRef.nativeElement.closest<HTMLElement>('.modal-wrapper');\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 ngAfterViewInit(): void {\n if (this.toolbarButtonsQuery) {\n this.toolbarButtons = this.toolbarButtonsQuery.map((buttonRef) => buttonRef.nativeElement);\n }\n this.checkForEmbeddedElements();\n }\n\n private checkForEmbeddedElements() {\n this.moveEmbeddedElements();\n this.observeEmbeddedElements();\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 moveEmbeddedElements() {\n const parentElement = this.getEmbeddedComponentElement();\n if (parentElement) {\n Object.entries(this.elementToParentMap).forEach(([tagName, getNewParent]) => {\n const embeddedElement = parentElement.querySelector<HTMLElement>(tagName);\n if (embeddedElement) {\n this.moveChild(embeddedElement, getNewParent());\n }\n });\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 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.getEmbeddedFooterElement();\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\n private readonly elementToParentMap: { [key: string]: () => HTMLElement } = {\n 'KIRBY-MODAL-FOOTER': () => this.elementRef.nativeElement,\n 'KIRBY-PAGE-TITLE': () => this.ionTitleElement.nativeElement,\n 'KIRBY-PAGE-PROGRESS': () => this.ionToolbarElement.nativeElement,\n };\n\n private clearEmbeddedElements() {\n Object.entries(this.elementToParentMap).forEach(([tagName, getParent]) => {\n const embeddedElement = getParent().querySelector<HTMLElement>(`:scope > ${tagName}`);\n this.removeChild(embeddedElement);\n });\n }\n\n private getEmbeddedComponentElement() {\n return !!this.config.modalRoute\n ? this.ionContentElement.nativeElement.lastElementChild\n : this.ionContentElement.nativeElement.firstElementChild;\n }\n\n private getEmbeddedFooterElement() {\n return this.elementRef.nativeElement.querySelector<HTMLElement>('kirby-modal-footer');\n }\n\n private moveChild(child: Element, newParent: Element) {\n this.renderer.removeChild(child.parentElement, child);\n this.renderer.appendChild(newParent, child);\n if (child.tagName === 'KIRBY-MODAL-FOOTER') {\n this.resizeObserverService.observe(child, (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\n private removeChild(child?: Element) {\n if (!!child) {\n this.renderer.removeChild(child.parentElement, child);\n }\n }\n\n private observeEmbeddedElements() {\n const parentElement = this.getEmbeddedComponentElement();\n this.mutationObserver.observe(parentElement, {\n childList: true, // Listen for addition or removal of child nodes\n });\n }\n\n private createEmbeddedElementsMutationObserver(): MutationObserver {\n const observedElements = Object.keys(this.elementToParentMap);\n const callback = (mutations: MutationRecord[]) => {\n const addedNodes = mutations\n .filter((mutation) => mutation.type === 'childList') // Filter for mutation to the tree of nodes\n .map((mutation) => {\n // Only check for addedNodes as removal is handled by the Angular renderer:\n return Array.from(mutation.addedNodes).filter((node) =>\n observedElements.includes(node.nodeName)\n );\n });\n\n const addedElements = Array.prototype\n .concat(...addedNodes)\n .filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n addedElements.forEach((addedElement) => {\n const newParentElement = this.elementToParentMap[addedElement.nodeName]();\n // Move embedded element out of content and append to new parent:\n this.moveChild(addedElement, newParentElement);\n });\n };\n return new MutationObserver(callback);\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.renderer.addClass(entry.target, 'full-height');\n } else {\n this.renderer.removeClass(entry.target, 'full-height');\n }\n };\n\n // Set explicit viewport root if within iframe:\n const root = this.windowRef.nativeWindow.frameElement\n ? (this.windowRef.nativeWindow.document as any) // Cast to `any` as Typescript lib.d.ts doesnt support Document type yet\n : undefined;\n const options: IntersectionObserverInit = {\n rootMargin: '0px 0px -1px 0px', // `bottom: -1px` allows checking when the modal bottom is touching the viewport\n root,\n threshold: [0.99, 1],\n };\n\n return new IntersectionObserver(callback, options);\n }\n\n ngOnDestroy() {\n if (this.routerOutlet.isActivated) {\n this.routerOutlet.deactivate();\n }\n //clean up the observer\n this.mutationObserver.disconnect();\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.getEmbeddedFooterElement());\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Animation, AnimationBuilder, AnimationController } from '@ionic/angular';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { PlatformService } from '../../../helpers/platform.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalAnimationBuilderService {\n constructor(private animationCtrl: AnimationController, 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, presentingEl?: HTMLElement): Animation => {\n const backdropAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelector('ion-backdrop')!)\n .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')\n .beforeStyles({\n 'pointer-events': 'none',\n })\n .afterClearStyles(['pointer-events']);\n\n const wrapperAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 })\n .fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');\n\n const baseAnimation = this.animationCtrl\n .create()\n .addElement(baseEl)\n .easing(this.easingEnter)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = this.animationCtrl\n .create()\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\n const presentingAnimation = this.animationCtrl.create().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 standlone 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 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', '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(presentingEl.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 = this.animationCtrl\n .create()\n .afterStyles({\n transform: finalTransform,\n })\n .addElement(presentingEl.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 (baseEl: HTMLElement, presentingEl?: HTMLElement): Animation => {\n const backdropAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelector('ion-backdrop')!)\n .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);\n\n const wrapperAnimation = this.animationCtrl\n .create()\n .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow')!)\n .beforeStyles({ opacity: 1 })\n .fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');\n\n const baseAnimation = this.animationCtrl\n .create()\n .addElement(baseEl)\n .easing(this.easingLeave)\n .duration(this.duration)\n .addAnimation(wrapperAnimation);\n\n let currentBackdropAnimation: Animation;\n if (currentBackdrop) {\n currentBackdropAnimation = this.animationCtrl\n .create()\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\n const presentingAnimation = this.animationCtrl\n .create()\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(presentingEl.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 = this.animationCtrl\n .create()\n .addElement(presentingEl.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","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { WindowRef } from '../../../types/window-ref';\nimport { ModalCompactWrapperComponent } from '../modal-wrapper/compact/modal-compact-wrapper.component';\nimport { ModalConfig, ModalFlavor, ModalSize } from '../modal-wrapper/config/modal-config';\nimport { ModalWrapperComponent } from '../modal-wrapper/modal-wrapper.component';\n\nimport { ModalAnimationBuilderService } from './modal-animation-builder.service';\nimport { Overlay } from './modal.interfaces';\n\n@Injectable()\nexport class ModalHelper {\n // TODO: Make presentingElement an instance field when\n // forRoot()/singleton services has been solved:\n private static presentingElement: HTMLElement = undefined;\n\n constructor(\n private ionicModalController: ModalController,\n private modalAnimationBuilder: ModalAnimationBuilderService,\n private windowRef: WindowRef\n ) {}\n\n public async showModalWindow(config: ModalConfig): Promise<Overlay> {\n config.flavor = config.flavor || 'modal';\n const modalPresentingElement = await this.getPresentingElement(config.flavor);\n\n let currentBackdrop: HTMLIonBackdropElement;\n const topMostModal = await this.ionicModalController.getTop();\n if (topMostModal) {\n currentBackdrop = topMostModal.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.flavor === 'modal' ? 'medium' : null;\n const modalSize = config.size || defaultModalSize;\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 const ionModal = await this.ionicModalController.create({\n component: config.flavor === 'compact' ? ModalCompactWrapperComponent : ModalWrapperComponent,\n cssClass: [\n 'kirby-overlay',\n 'kirby-modal',\n config.flavor === 'drawer' ? 'kirby-drawer' : null,\n config.flavor === 'compact' ? 'kirby-modal-compact' : null,\n 'kirby-modal-' + modalSize,\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 swipeToClose: config.flavor != 'compact',\n presentingElement: modalPresentingElement,\n keyboardClose: false,\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 await ionModal.present();\n\n return {\n dismiss: ionModal.dismiss.bind(ionModal),\n onWillDismiss: ionModal.onWillDismiss(),\n onDidDismiss: ionModal.onDidDismiss(),\n };\n }\n\n public registerPresentingElement(element: HTMLElement) {\n ModalHelper.presentingElement = element;\n }\n\n private async getPresentingElement(flavor?: ModalFlavor) {\n let modalPresentingElement: HTMLElement = undefined;\n if (!flavor || flavor === 'modal') {\n const topMostModal = await this.ionicModalController.getTop();\n if (!topMostModal) {\n modalPresentingElement = ModalHelper.presentingElement;\n } else if (\n !topMostModal.classList.contains('kirby-drawer') &&\n !topMostModal.classList.contains('kirby-modal-compact')\n ) {\n modalPresentingElement = topMostModal;\n }\n }\n return modalPresentingElement;\n }\n\n public async scrollToTop(\n noModalRegisteredErrorMessage: string,\n duration?: KirbyAnimation.Duration\n ) {\n const modal = await this.ionicModalController.getTop();\n if (!modal || !(modal.component instanceof ModalWrapperComponent)) {\n throw new Error(noModalRegisteredErrorMessage);\n }\n modal.component.scrollToTop(duration);\n }\n\n public async scrollToBottom(\n noModalRegisteredErrorMessage: string,\n duration?: KirbyAnimation.Duration\n ) {\n const modal = await this.ionicModalController.getTop();\n if (!modal || !(modal.component instanceof ModalWrapperComponent)) {\n throw new Error(noModalRegisteredErrorMessage);\n }\n modal.component.scrollToBottom(duration);\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 { KirbyAnimation } from '../../../animation/kirby-animation';\nimport { ActionSheetConfig } from '../action-sheet/config/action-sheet-config';\nimport { AlertConfig } from '../alert/config/alert-config';\nimport { ModalConfig } from '../modal-wrapper/config/modal-config';\n\nimport { ActionSheetHelper } from './action-sheet.helper';\nimport { AlertHelper } from './alert.helper';\nimport { ModalNavigationService } from './modal-navigation.service';\nimport { ModalHelper } from './modal.helper';\nimport { ModalRouteActivation, Overlay } from './modal.interfaces';\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 const siblingModalRouteActivated$ = modalRouteActivated$.pipe(\n filter((modalRouteActivation) => !modalRouteActivation.isNewModal),\n map((modalRouteActivation) => modalRouteActivation.route)\n );\n\n modalRouteActivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.length === 0)\n )\n .subscribe(async (modalRouteActivation) => {\n if (modalRouteActivation.isNewModal) {\n await this.showModalRoute(\n modalRouteActivation.route,\n siblingModalRouteActivated$,\n navigateOnWillClose\n );\n }\n });\n }\n\n private onModalRouteDeactivated(modalRouteDeactivated$: Observable<boolean>) {\n modalRouteDeactivated$\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.overlays.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(config: ModalConfig, onClose?: (data?: any) => void): Promise<void> {\n if (config.hasOwnProperty('dim')) {\n console.warn('ModalConfig.dim is deprecated - please remove from your configuration.');\n }\n await this.showAndRegisterOverlay(() => this.modalHelper.showModalWindow(config), onClose);\n }\n\n public async navigateToModal(path: string | string[], queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateToModal(path, queryParams);\n }\n\n public async navigateWithinModal(relativePath: string, queryParams?: Params): Promise<boolean> {\n return this.modalNavigationService.navigateWithinModal(relativePath, queryParams);\n }\n\n private async showModalRoute(\n modalRoute: ActivatedRoute,\n siblingModalRouteActivated$: Observable<ActivatedRoute>,\n onWillClose: (data?: any) => void\n ): Promise<void> {\n const config: ModalConfig = {\n component: null,\n modalRoute: modalRoute,\n siblingModalRouteActivated$: siblingModalRouteActivated$,\n flavor: 'modal', // Todo: Should it be possible to specify flavor as data in RouteConfig?\n };\n await this.showAndRegisterOverlay(\n () => this.modalHelper.showModalWindow(config),\n null,\n onWillClose\n );\n }\n\n public async showActionSheet(\n config: ActionSheetConfig,\n onClose?: (data?: any) => void\n ): Promise<void> {\n await this.showAndRegisterOverlay(\n () => this.actionSheetHelper.showActionSheet(config),\n onClose\n );\n }\n\n public async showAlert(config: AlertConfig, onClose?: (result: boolean) => void): Promise<void> {\n await this.showAndRegisterOverlay(() => this.alertHelper.showAlert(config), onClose);\n }\n\n private async showAndRegisterOverlay(\n showOverlay: () => Promise<Overlay>,\n onCloseOverlay?: (data?: any) => void,\n onWillCloseOverlay?: (data?: any) => void\n ) {\n const overlay = await showOverlay();\n if (!overlay) return;\n\n this.overlays.push(overlay);\n\n if (typeof onWillCloseOverlay === 'function') {\n overlay.onWillDismiss.then((event) => onWillCloseOverlay(event.data));\n }\n\n overlay.onDidDismiss.then((event) => {\n this.overlays.pop();\n if (typeof onCloseOverlay === 'function') {\n onCloseOverlay(event.data);\n }\n });\n }\n\n public registerPresentingElement(element: HTMLElement) {\n this.modalHelper.registerPresentingElement(element);\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 /**\n * @deprecated Will be removed in next major version. Inject Modal in embedded component and use Modal.scrollToTop instead.\n */\n public scrollToTop(duration?: KirbyAnimation.Duration) {\n console.warn(\n 'ModalController.scrollToTop is deprecated - please inject Modal in embedded component and use Modal.scrollToTop instead.'\n );\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n this.modalHelper.scrollToTop(this.noOverlayRegisteredErrorMessage, duration);\n }\n\n /**\n * @deprecated Will be removed in next major version. Inject Modal in embedded component and use Modal.scrollToBottom instead.\n */\n public scrollToBottom(duration?: KirbyAnimation.Duration) {\n console.warn(\n 'ModalController.scrollToBottom is deprecated - please inject Modal in embedded component and use Modal.scrollToBottom instead.'\n );\n const overlay = this.overlays[this.overlays.length - 1];\n if (!overlay) {\n throw new Error(this.noOverlayRegisteredErrorMessage);\n }\n this.modalHelper.scrollToBottom(this.noOverlayRegisteredErrorMessage, duration);\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 { Component, ContentChild, ElementRef, AfterContentInit, ViewChild } from '@angular/core';\nimport { IonApp } from '@ionic/angular';\n\nimport { RouterOutletComponent } from '../router-outlet/router-outlet.component';\nimport { ModalController } from '../modal/services/modal.controller';\n\n@Component({\n selector: 'kirby-app',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements AfterContentInit {\n @ViewChild(IonApp, { static: true, read: ElementRef })\n private ionAppElement: ElementRef<HTMLIonAppElement>;\n\n @ContentChild(RouterOutletComponent, { static: false, read: ElementRef })\n private routerOutlet?: ElementRef<HTMLElement>;\n\n constructor(private modalController: ModalController) {}\n\n ngAfterContentInit(): void {\n if (this.routerOutlet && this.routerOutlet.nativeElement) {\n this.modalController.registerPresentingElement(this.routerOutlet.nativeElement);\n }\n\n this.ionAppElement.nativeElement.componentOnReady().then(() => this.registerInputs());\n }\n\n registerInputs() {\n // Input might be already loaded in the DOM before ion-device-hacks did.\n // At this point we need to look for all of the inputs not registered yet\n // and register them.\n // There is no Ionic event to hook into, so we'll use a timeout\n // to ensure ion-device-hacks has run:\n const ensureIonicDeviceHacksDelay = 250;\n setTimeout(() => {\n document.querySelectorAll('kirby-form-field').forEach((formField) => {\n formField.dispatchEvent(new CustomEvent('kirbyRegisterFormField'));\n });\n }, ensureIonicDeviceHacksDelay);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\n\nimport { AppComponent } from './app.component';\n\n@NgModule({\n declarations: [AppComponent],\n imports: [CommonModule, IonicModule],\n exports: [AppComponent],\n})\nexport class AppModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\nimport { BrandColor, NotificationColor } from '@kirbydesign/core';\n\nexport enum AvatarSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\n@Component({\n selector: 'kirby-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AvatarComponent {\n @Input() imageSrc: string;\n @Input() altText: string;\n @Input() shadow: boolean;\n @Input() text: string;\n @Input() overlay: boolean;\n @Input() size: AvatarSize | `${AvatarSize}` = AvatarSize.SM;\n @Input()\n themeColor: NotificationColor | BrandColor | 'medium' | 'white' | 'dark' | 'light' | 'semi-light';\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size].filter((cssClass) => !!cssClass);\n }\n}\n","import {\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { ResizeObserverService } from '../shared/resize-observer/resize-observer.service';\nimport { ResizeObserverEntry } from '../shared/resize-observer/types/resize-observer-entry';\n\n@Component({\n selector: 'kirby-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n})\nexport class CardComponent implements OnInit, OnDestroy {\n @Input() title: string;\n @Input() subtitle: string;\n\n @HostBinding('style.--kirby-card-background-image')\n _backgroundImage: string;\n\n @Input()\n set backgroundImageUrl(value: string) {\n this._backgroundImage = `url('${value}')`;\n }\n\n @Input()\n hasPadding: boolean;\n\n private sizesSortedByBreakpoint = this.sortSizesByBreakpoint({\n small: 360,\n medium: 720,\n large: 1024,\n });\n\n @Input()\n set sizes(value: { [size: string]: number }) {\n if (typeof value === 'string') {\n console.error(\n 'Sizes property cannot be a string. Please ensure the size property is bound as an expression:\\n[sizes]=\"{...}\"'\n );\n }\n this.sizesSortedByBreakpoint = this.sortSizesByBreakpoint(value);\n }\n\n @HostBinding('class.flat')\n flat: boolean = false;\n @HostBinding('class.highlighted')\n highlighted: boolean = false;\n @Input() set mode(value: 'flat' | 'highlighted') {\n this.flat = value === 'flat';\n this.highlighted = value === 'highlighted';\n }\n\n constructor(\n private elementRef: ElementRef,\n private resizeObserverService: ResizeObserverService,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.resizeObserverService.observe(this.elementRef, (entry) => this.handleResize(entry));\n }\n\n ngOnDestroy() {\n this.resizeObserverService.unobserve(this.elementRef);\n }\n\n private sortSizesByBreakpoint(sizes: { [size: string]: number }): [string, number][] {\n return Object.entries(sizes).sort(this.compareSizesByBreakpoint);\n }\n\n private compareSizesByBreakpoint(a: [string, number], b: [string, number]): number {\n return a[1] > b[1] ? 1 : b[1] > a[1] ? -1 : 0;\n }\n\n private handleResize(entry: ResizeObserverEntry) {\n const sizeAttributeName = 'size';\n const smallestBreakpointName = this.sizesSortedByBreakpoint[0][0];\n const smallestBreakpointWidth = this.sizesSortedByBreakpoint[0][1];\n if (entry.contentRect.width < smallestBreakpointWidth) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, `<${smallestBreakpointName}`);\n } else {\n this.sizesSortedByBreakpoint.forEach(([size, width]) => {\n if (entry.contentRect.width >= width) {\n this.renderer.setAttribute(entry.target, sizeAttributeName, size);\n }\n });\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-card-footer',\n templateUrl: './card-footer.component.html',\n styleUrls: ['./card-footer.component.scss'],\n})\nexport class CardFooterComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\nimport { NotificationColor } from '@kirbydesign/core';\n\nexport type CardFlagLevel = NotificationColor | 'info' | null;\n\n@Component({\n selector: 'kirby-card-header',\n templateUrl: './card-header.component.html',\n styleUrls: ['./card-header.component.scss'],\n})\nexport class CardHeaderComponent {\n @Input() title: string;\n @Input() subtitle: string;\n @Input() isTitleBold: boolean;\n @HostBinding('class')\n @Input()\n flagged: CardFlagLevel = null;\n}\n","/**\n * Performs a deep merge of objects and returns new object. Does not modify\n * objects (immutable).\n * It merges from into object to the left\n * eg. mergeDeep({a: 'will be overridden', b: 'some val'}, {a: 'new val'}) => {a: 'new val', b: 'some val'}\n *\n * @param originalObject object - Object to override,\n * @param overrideObject object - Object to override \"toOverride\" values with\n * @param config object - Configuration for how to merge.\n * mergeArrays determines if it should merge or override arrays\n * @returns object - New object with merged key/values\n */\nexport function mergeDeep(originalObject, overrideObject, config = { mergeArrays: false }) {\n const isObject = (obj) => obj && typeof obj === 'object';\n\n return [originalObject, overrideObject].reduce((mergedObject, obj) => {\n Object.keys(obj).forEach((key) => {\n const mergedObjectValue = mergedObject[key];\n const overrideObjectValue = obj[key];\n\n if (Array.isArray(mergedObjectValue) && Array.isArray(overrideObjectValue)) {\n mergedObject[key] = config.mergeArrays\n ? mergedObjectValue.concat(overrideObjectValue)\n : overrideObjectValue;\n } else if (isObject(mergedObjectValue) && isObject(overrideObjectValue)) {\n mergedObject[key] = mergeDeep(mergedObjectValue, overrideObjectValue);\n } else {\n mergedObject[key] = overrideObjectValue;\n }\n });\n\n return mergedObject;\n }, {});\n}\n\nexport function mergeDeepAll(...objects: Object[]): Object {\n const objectsWithoutUndefined = objects.filter((object) => object !== undefined);\n return objectsWithoutUndefined.reduce((originalObject, overrideObject) =>\n mergeDeep(originalObject, overrideObject)\n );\n}\n","import { ElementRef, Injectable } from '@angular/core';\nimport { chart, Options } from 'highcharts';\nimport * as Highcharts from 'highcharts';\n\n// Docs on importing accessibility: https://www.highcharts.com/docs/chart-concepts/accessibility\n\ndeclare var require: any;\nrequire('highcharts/highcharts-more')(Highcharts);\nrequire('highcharts/modules/solid-gauge')(Highcharts);\nrequire('highcharts/modules/broken-axis')(Highcharts);\n\n@Injectable()\nexport class ChartDeprecatedHelper {\n chartContainer: ElementRef;\n\n public init(chartContainer: ElementRef) {\n this.chartContainer = chartContainer;\n }\n\n public renderChart(options: Options) {\n if (this.chartContainer && options.chart) {\n chart(this.chartContainer.nativeElement, options);\n }\n }\n}\n","export enum ChartDeprecatedType {\n PIE = 'pie',\n DONUT = 'donut',\n AREASPLINE = 'areaspline',\n TIMESERIES = 'timeseries',\n ACTIVITYGAUGE = 'activitygauge',\n BAR = 'bar',\n COLUMN = 'column',\n CUSTOM = 'custom',\n}\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const ACTIVITYGAUGE_OPTIONS = new InjectionToken<Options>('ActivityGaugeOptions');\nexport const ActivityGaugeOptions: Options = {\n chart: {\n style: {\n fontFamily: 'Roboto, sans-serif',\n fontWeight: '300',\n },\n backgroundColor: 'transparent',\n type: 'solidgauge',\n height: '110%',\n },\n accessibility: {\n description: '',\n },\n title: {\n align: 'center',\n verticalAlign: 'middle',\n text: '',\n y: 0,\n floating: false,\n style: {\n fontSize: '30px',\n color: '#fff',\n fontWeight: 'bold',\n },\n },\n subtitle: {\n text: '',\n align: 'center',\n y: 25,\n verticalAlign: 'middle',\n style: {\n color: '#fff',\n fontSize: '14px',\n fontWeight: 'normal',\n },\n },\n credits: {\n enabled: false,\n },\n tooltip: {\n enabled: false,\n animation: false,\n },\n pane: {\n startAngle: 0,\n endAngle: 360,\n background: [\n {\n backgroundColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },\n stops: [\n [1, 'rgba(255, 255, 255, 0.3)'],\n [0, 'rgba(255, 255, 255, 0.3)'],\n ],\n },\n outerRadius: '112%',\n innerRadius: '88%',\n borderWidth: 0,\n },\n ],\n },\n yAxis: {\n min: 0,\n max: 100,\n lineWidth: 0,\n tickPositions: [],\n },\n plotOptions: {\n solidgauge: {\n dataLabels: {\n enabled: false,\n },\n linecap: 'round',\n stickyTracking: false,\n rounded: true,\n },\n },\n series: [\n {\n type: 'solidgauge',\n },\n ],\n};\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const AREASPLINE_OPTIONS = new InjectionToken<Options>('AreasplineOptions');\nexport const AreaSplineOptions: Options = {\n chart: {\n type: 'areaspline',\n borderWidth: 0,\n plotBorderWidth: 0,\n margin: 0,\n marginTop: 48,\n },\n accessibility: {\n description: '',\n },\n title: {\n text: '',\n },\n credits: {\n enabled: false,\n },\n exporting: {\n enabled: false,\n },\n tooltip: {\n enabled: true,\n animation: false,\n shape: 'square',\n borderColor: '#FFFFFF',\n shadow: false,\n backgroundColor: '#FFFFFF',\n style: {\n fontSize: '1.25rem',\n },\n formatter: function (): string {\n return String(this.y);\n },\n positioner: function () {\n return { x: this.chart.plotSizeX / 2 - this.label.width / 2, y: 0 };\n },\n },\n xAxis: {\n visible: false,\n minPadding: 0,\n maxPadding: 0,\n crosshair: {\n zIndex: 3,\n width: 1,\n color: '#177E17',\n },\n },\n yAxis: {\n visible: false,\n endOnTick: false,\n startOnTick: false,\n },\n plotOptions: {\n areaspline: {\n shadow: true,\n showInLegend: false,\n fillColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 0.8 },\n stops: [\n [0, '#C9E5C9'],\n [1, '#FFFFFF'],\n ],\n },\n lineColor: '#177E17',\n lineWidth: 2,\n },\n series: {\n states: {\n hover: {\n halo: {\n size: 0,\n },\n },\n },\n marker: {\n enabled: false,\n states: {\n hover: {\n enabled: true,\n fillColor: '#177E17',\n },\n },\n },\n },\n },\n series: [\n {\n type: 'areaspline',\n },\n ],\n};\n","import { Options } from 'highcharts';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nconst getColor = DesignTokenHelper.getColor;\nconst fontSize = DesignTokenHelper.fontSize;\n\nfunction colorPoints() {\n var series = this.series;\n for (var i = 0, ie = series.length; i < ie; ++i) {\n var points = series[i].data;\n for (var j = 0, je = points.length; j < je; ++j) {\n if (points[j].graphic) {\n points[j].graphic.element.style.stroke = getColor('background-color').value;\n }\n }\n }\n}\n\nexport const barOptions: Options = {\n chart: {\n type: 'bar',\n animation: {\n duration: 150,\n },\n backgroundColor: 'transparent',\n events: {\n load: colorPoints,\n redraw: colorPoints,\n },\n },\n accessibility: {\n description: 'Bar chart',\n },\n credits: {\n enabled: false,\n },\n title: {\n text: '',\n },\n xAxis: {\n labels: {\n style: {\n fontSize: fontSize('s'),\n fontFamily: 'Roboto',\n color: getColor('black').value,\n },\n },\n min: 0,\n lineColor: 'transparent',\n },\n yAxis: {\n title: {\n text: '',\n },\n labels: {\n enabled: false,\n },\n min: 0,\n lineWidth: 0,\n minorGridLineWidth: 0,\n gridLineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n maxPadding: 0,\n endOnTick: false,\n showLastLabel: false,\n showFirstLabel: false,\n },\n plotOptions: {\n bar: {\n events: {},\n },\n series: {\n color: getColor('secondary').value,\n stacking: 'normal',\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n tooltip: {\n enabled: false,\n },\n legend: {\n enabled: false,\n },\n};\n","import { Options } from 'highcharts';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nconst getColor = DesignTokenHelper.getColor;\nconst fontSize = DesignTokenHelper.fontSize;\n\nfunction colorPoints() {\n var series = this.series;\n for (var i = 0, ie = series.length; i < ie; ++i) {\n var points = series[i].data;\n for (var j = 0, je = points.length; j < je; ++j) {\n if (points[j].graphic) {\n points[j].graphic.element.style.stroke = getColor('secondary').value;\n }\n }\n }\n}\n\nexport const columnOptions: Options = {\n chart: {\n animation: {\n duration: 500,\n },\n backgroundColor: 'transparent',\n type: 'column',\n events: {\n load: colorPoints,\n redraw: colorPoints,\n },\n },\n title: {\n text: '',\n },\n accessibility: {\n description: 'Column chart',\n },\n xAxis: {\n labels: {\n style: {\n fontSize: fontSize('xxs'),\n fontFamily: 'Roboto',\n color: getColor('black').value,\n },\n },\n lineWidth: 0,\n minorGridLineWidth: 0,\n lineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n },\n yAxis: {\n title: {\n text: '',\n },\n labels: {\n enabled: false,\n },\n min: 0,\n lineWidth: 0,\n minorGridLineWidth: 0,\n gridLineColor: 'transparent',\n minorTickLength: 0,\n tickLength: 0,\n showLastLabel: false,\n showFirstLabel: false,\n },\n credits: {\n enabled: false,\n },\n plotOptions: {\n column: {\n stacking: 'normal',\n },\n series: {\n color: getColor('secondary').value,\n zIndex: 10,\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n line: {\n className: 'avg-line',\n marker: {\n enabled: false,\n },\n allowPointSelect: false,\n },\n },\n tooltip: {\n enabled: false,\n },\n legend: {\n enabled: false,\n },\n};\n","import { InjectionToken } from '@angular/core';\nimport { Options } from 'highcharts';\n\nexport const DONUT_OPTIONS = new InjectionToken<Options>('DonutOptions');\nexport const DonutOptions: Options = {\n chart: {\n style: {\n fontFamily: 'Roboto',\n fontWeight: '300',\n },\n backgroundColor: 'transparent',\n type: '',\n },\n accessibility: {\n description: 'Donut chart',\n },\n title: {\n text: '',\n },\n tooltip: {\n enabled: false,\n animation: false,\n },\n legend: {\n layout: 'vertical',\n symbolRadius: 0,\n itemStyle: {\n fontSize: '.875rem',\n },\n },\n plotOptions: {\n pie: {\n colors: ['#015132', '#B2D1BF', '#AABC08', '#1FA05A', 'yellowgreen'],\n allowPointSelect: false,\n cursor: 'pointer',\n showInLegend: true,\n borderColor: null,\n dataLabels: {\n format: '{point.label}',\n enabled: true,\n connectorWidth: 0,\n distance: 5,\n style: {\n fontSize: '1rem',\n fontWeight: '200',\n },\n },\n point: {\n events: {\n legendItemClick: () => {\n // Prevent the default behavior (toggle visibility of slices when clicking on legends)\n return false;\n },\n },\n },\n states: {\n hover: {\n enabled: false,\n },\n },\n },\n series: {\n animation: true,\n dataLabels: {},\n states: {\n hover: {\n enabled: false,\n },\n inactive: {\n opacity: 1,\n },\n },\n },\n },\n series: [\n {\n name: '',\n type: 'pie',\n },\n ],\n credits: {\n enabled: false,\n },\n exporting: {\n enabled: false,\n },\n responsive: {\n rules: [\n {\n condition: {\n minWidth: 640,\n },\n chartOptions: {\n legend: {\n layout: 'vertical',\n align: 'right',\n verticalAlign: 'middle',\n itemMarginTop: 12,\n symbolRadius: 0,\n symbolWidth: 14,\n symbolHeight: 14,\n x: -100,\n },\n },\n },\n {\n condition: {\n minWidth: 0,\n },\n chartOptions: {\n legend: {\n symbolRadius: 0,\n },\n },\n },\n ],\n },\n};\n","import { InjectionToken } from '@angular/core';\nimport { dateFormat, Options } from 'highcharts';\n\nexport const TIMESERIES_OPTIONS = new InjectionToken<Options>('TimeSeriesOptions');\nexport const TimeSeriesOptions: Options = {\n chart: {\n backgroundColor: {\n linearGradient: { x1: 0, x2: 0, y1: 0, y2: 3 },\n stops: [\n [0, '#F6F6F6'],\n [1, '#808080'],\n ],\n },\n zoomType: 'x',\n type: 'timeseries',\n borderWidth: 0,\n plotBorderWidth: 0,\n margin: 0,\n marginTop: 48,\n },\n accessibility: {\n description: '',\n },\n title: {\n text: '',\n },\n subtitle: {\n text: '',\n },\n tooltip: {\n shadow: false,\n formatter: function () {\n // @ts-ignore\n return dateFormat('%e. %b', new Date(this.x)) + '.' + '<br/><b>' + this.y + '</b>';\n },\n //xDateFormat: '%d/%m',\n positioner: function (_labelWidth, _labelHeight, point) {\n return { x: point.x, y: 0 };\n },\n borderWidth: 0,\n },\n xAxis: {\n visible: false,\n lineColor: '#FFFFFF',\n tickColor: '#FFFFFF',\n labels: {\n style: {\n color: 'white',\n },\n },\n opposite: true,\n crosshair: {\n zIndex: 3,\n width: 1,\n color: '#00E89A',\n },\n type: 'datetime',\n tickInterval: 1,\n },\n yAxis: {\n visible: false,\n },\n legend: {\n enabled: false,\n },\n plotOptions: {\n area: {\n fillColor: '#01352C',\n marker: {\n lineWidth: 14,\n lineColor: 'rgba(255,255,255,0.2)',\n radius: 6,\n fillColor: '#00E89A',\n },\n lineColor: '#01352C',\n lineWidth: 1,\n states: {\n hover: {\n lineWidth: 1,\n },\n },\n threshold: null,\n },\n series: {\n marker: {\n enabledThreshold: 50,\n },\n },\n },\n series: [\n {\n type: 'area',\n name: 'USD to EUR',\n },\n ],\n};\n","import { Component, ElementRef, Inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport {\n Options,\n PlotSeriesDataLabelsOptions,\n XAxisBreaksOptions,\n XAxisOptions,\n YAxisOptions,\n} from 'highcharts';\n\nimport { mergeDeep } from '../../helpers/merge-deep';\n\nimport { ChartDeprecatedHelper } from './chart-deprecated-helper';\nimport { ChartDeprecatedType } from './chart-deprecated-type';\nimport { ActivityGaugeOptions, ACTIVITYGAUGE_OPTIONS } from './options/activitygauge';\nimport { AreaSplineOptions, AREASPLINE_OPTIONS } from './options/areaspline';\nimport { barOptions } from './options/bar';\nimport { columnOptions } from './options/column';\nimport { DonutOptions, DONUT_OPTIONS } from './options/donut';\nimport { TimeSeriesOptions, TIMESERIES_OPTIONS } from './options/timeseries';\n\n@Component({\n selector: 'kirby-chart-deprecated',\n template: '',\n styleUrls: ['./chart-deprecated.component.scss'],\n providers: [\n ChartDeprecatedHelper,\n { provide: DONUT_OPTIONS, useValue: DonutOptions },\n { provide: AREASPLINE_OPTIONS, useValue: AreaSplineOptions },\n { provide: TIMESERIES_OPTIONS, useValue: TimeSeriesOptions },\n { provide: ACTIVITYGAUGE_OPTIONS, useValue: ActivityGaugeOptions },\n ],\n})\nexport class ChartDeprecatedComponent implements OnChanges {\n @Input() data = [];\n @Input() categories: string[] = [];\n @Input() breaks: Array<XAxisBreaksOptions> = [];\n @Input() height = 300;\n @Input() type: ChartDeprecatedType = ChartDeprecatedType.PIE;\n @Input() description = '';\n @Input() showDataLabels = true;\n @Input() options: Options;\n mergedOptions: Options = {\n accessibility: {},\n };\n\n constructor(\n private chartHelper: ChartDeprecatedHelper,\n private hostElement: ElementRef,\n @Inject(DONUT_OPTIONS) public donutOptions: Options,\n @Inject(AREASPLINE_OPTIONS) public areasplineOptions: Options,\n @Inject(TIMESERIES_OPTIONS) public timeSeriesOptions: Options,\n @Inject(ACTIVITYGAUGE_OPTIONS) public activitygaugeOptions: Options\n ) {\n this.chartHelper.init(this.hostElement);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.type) {\n this.setupChartType();\n }\n this.updateProperties();\n this.chartHelper.renderChart(this.mergedOptions);\n }\n\n setupChartType() {\n switch (this.type) {\n case ChartDeprecatedType.DONUT: {\n this.mergedOptions = this.donutOptions;\n this.mergedOptions.chart.type = ChartDeprecatedType.PIE;\n this.mergedOptions.plotOptions.pie.innerSize = '50%';\n break;\n }\n case ChartDeprecatedType.PIE: {\n this.mergedOptions = this.donutOptions;\n this.mergedOptions.chart.type = this.type;\n this.mergedOptions.plotOptions.pie.innerSize = '0%';\n break;\n }\n case ChartDeprecatedType.AREASPLINE: {\n this.mergedOptions = this.areasplineOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.TIMESERIES: {\n this.mergedOptions = this.timeSeriesOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.ACTIVITYGAUGE: {\n this.mergedOptions = this.activitygaugeOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.COLUMN: {\n this.mergedOptions = columnOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n case ChartDeprecatedType.BAR: {\n this.mergedOptions = barOptions;\n this.mergedOptions.chart.type = this.type;\n break;\n }\n }\n }\n\n updateProperties() {\n this.mergedOptions.chart.height = this.height;\n this.mergedOptions.accessibility.description = this.description;\n switch (this.mergedOptions.chart.type) {\n case ChartDeprecatedType.PIE:\n case ChartDeprecatedType.DONUT: {\n this.setPieInput();\n break;\n }\n case ChartDeprecatedType.AREASPLINE: {\n this.setSeries('areaspline');\n break;\n }\n case ChartDeprecatedType.TIMESERIES: {\n this.setTimeseriesInput();\n break;\n }\n case ChartDeprecatedType.ACTIVITYGAUGE: {\n this.setActivitygaugeInput();\n break;\n }\n case ChartDeprecatedType.COLUMN: {\n this.setColumnInput();\n break;\n }\n case ChartDeprecatedType.BAR: {\n this.setBarInput();\n break;\n }\n }\n if (!!this.options) {\n this.mergedOptions = mergeDeep(this.mergedOptions, this.options);\n }\n }\n\n private setPieInput() {\n (this.mergedOptions.plotOptions.pie.dataLabels as PlotSeriesDataLabelsOptions).enabled =\n this.showDataLabels;\n this.setSeries('pie');\n }\n\n private setBarInput() {\n const dataMaxValue = Math.max(...this.data);\n this.mergedOptions.series = [\n {\n type: 'bar',\n name: 'InvisibleClickReceiver',\n data: this.data.map((dataEntry) => dataMaxValue - dataEntry),\n edgeColor: 'rgb(255, 255, 255, 0)',\n opacity: 0,\n },\n {\n type: 'bar',\n data: this.data,\n },\n ];\n (this.mergedOptions.xAxis as XAxisOptions).categories = this.categories;\n }\n\n private setColumnInput() {\n this.mergedOptions.series = [\n {\n type: 'column',\n data: this.data,\n },\n ];\n const dataMaxValue = Math.max(...this.data);\n ((this.mergedOptions.yAxis as YAxisOptions).tickPositioner = () => {\n var positions = [0, dataMaxValue];\n return positions;\n }),\n (this.mergedOptions.series = [\n {\n type: 'column',\n name: 'InvisibleClickReceiver',\n data: this.data.map((_, idx) => dataMaxValue - this.data[idx]),\n opacity: 0,\n },\n {\n type: 'column',\n data: this.data,\n },\n ]);\n (this.mergedOptions.xAxis as XAxisOptions).categories = this.categories;\n }\n\n private setActivitygaugeInput() {\n const data = this.data[0];\n this.mergedOptions.title.text = data.title;\n this.mergedOptions.subtitle.text = data.subtitle;\n if (data.paneBackgroundColor) {\n this.mergedOptions.pane.background = [\n {\n ...this.mergedOptions.pane.background[0],\n backgroundColor: data.paneBackgroundColor,\n },\n ];\n }\n if (data.color) {\n this.mergedOptions.title.style.color = data.color;\n this.mergedOptions.subtitle.style.color = data.color;\n }\n this.mergedOptions.series = [\n {\n type: 'solidgauge',\n data: data.series,\n },\n ];\n }\n\n private setTimeseriesInput() {\n this.setSeries('area');\n this.mergedOptions.xAxis = {\n ...this.mergedOptions.xAxis,\n breaks: this.breaks,\n };\n }\n\n private setSeries(type) {\n this.mergedOptions.series = [\n {\n type,\n data: this.data,\n },\n ];\n }\n}\n","import { ChartDataset as ChartJSDataset, ChartOptions, ChartType as ChartJSType } from 'chart.js';\n\nexport type ChartHighlightedElements = number[][];\n\nexport type ChartType = 'column' | 'bar' | 'line' | 'stock';\n\nexport type ChartTypeConfig = { type: ChartJSType; options?: ChartOptions };\n\nexport type ChartTypesConfig = {\n [key in ChartType]: ChartTypeConfig;\n};\nexport type ChartLabel = string | string[]; // String[] allows for multi-line labels\n\nexport type ChartDataLabelOptions = {\n showMin?: boolean;\n showMax?: boolean;\n showCurrent?: boolean;\n locale?: ChartLocale;\n valueSuffix?: string;\n};\n\nexport type ChartLocale = 'da-DK' | 'en-US';\n\n/* \n kirbyOptions.isStockChart is a hacky solution to this issue: \n https://github.com/kirbydesign/designsystem/issues/1967 \n*/\nexport type ChartDataset = {\n kirbyOptions?: { highlightedElements?: number[]; isStockChart?: boolean };\n} & ChartJSDataset;\n\nexport function isNumberArray(value: any): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === 'number');\n}\n","import {\n Directive,\n Input,\n ComponentFactoryResolver,\n OnInit,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { ComponentConfiguration } from './component-configuration';\nimport { DynamicComponent } from './dynamic-component';\n\n@Directive({\n selector: '[kirbyLoadComponent]',\n})\nexport class ComponentLoaderDirective implements OnInit {\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyLoadComponent') configuration: ComponentConfiguration;\n @Input() cssClass: string;\n\n constructor(\n private componentFactoryResolver: ComponentFactoryResolver,\n private viewContainerRef: ViewContainerRef,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.loadCard();\n }\n\n loadCard() {\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(\n this.configuration.component\n );\n this.viewContainerRef.clear();\n const componentRef = this.viewContainerRef.createComponent(componentFactory);\n if (componentRef && componentRef.location && componentRef.location.nativeElement) {\n this.renderer.addClass(componentRef.location.nativeElement, this.cssClass);\n }\n (<DynamicComponent>componentRef.instance).data = this.configuration.data;\n }\n}\n","import _deepCopy from 'ts-deepcopy';\n\n/**\n * Do a deep copy of object that supports the composite data type Function\n *\n * @see https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript#answer-122704\n *\n * @param obj\n * @returns obj\n */\nexport function deepCopy<T>(obj: T): T {\n return _deepCopy<T>(obj);\n}\n","/* \n Utility function to check if a given element \n has an ancestor with a specific node name. \n\n Can be given a 'stopNodeName' to limit the search\n as to not climb all the way up through the DOM tree. \n\n Returns true when element has the ancestorNodeName \n or an ancestor has the ancestorNodeName. \n\n Returns false otherwise.\n*/\n\nexport const elementHasAncestor = (\n element: HTMLElement,\n ancestorNodeName: string,\n stopNodeName?: string\n) => {\n switch (element?.nodeName) {\n case undefined:\n case stopNodeName?.toUpperCase():\n return false;\n case ancestorNodeName.toUpperCase():\n return true;\n default:\n return elementHasAncestor(element.parentElement, ancestorNodeName, stopNodeName);\n }\n};\n","// re-export helpers from core, to preserve backwards compatability\n// of 'designsystem' library\nexport * from './element-has-ancestor';\nexport * from './color-helper';\nexport * from './design-token-helper';\nexport * from './string-helper';\nexport * from './theme-color.type';\nexport * from './platform.service';\n","import { AnnotationTypeRegistry } from 'chartjs-plugin-annotation';\n\nimport { ColorHelper } from '../../../helpers';\n\nconst { getThemeColorHexString } = ColorHelper;\n\n/* The chart.js annotation does not allow for changing the \ndefaults it comes with. In order to have sensible defaults \nthis object is used instead and manually merged with the \nrest of the annotations object */\nconst borderColor = getThemeColorHexString('semi-dark');\nconst borderDash: [number, number] = [6, 3];\nconst borderWidth = 1;\n\nexport const CHART_ANNOTATIONS_CONFIG: AnnotationTypeRegistry = {\n line: {\n borderDash,\n borderWidth,\n borderColor,\n },\n ellipse: {\n borderDash,\n borderWidth,\n borderColor,\n backgroundColor: 'transparent',\n },\n box: {\n borderDash,\n borderWidth,\n borderColor,\n backgroundColor: 'transparent',\n },\n point: {\n backgroundColor: 'initial',\n },\n};\n","import { ActiveElement, Chart, ChartEvent, ChartOptions } from 'chart.js';\n\n/* Allows for adding functionality to interactions chart.js while \npreserving the interaction functionality the consumer of the component has \npassed by being provided as a callback. */\nexport const CHART_INTERACTION_FUNCTIONS_EXTENSIONS = {\n onHover: (\n _event: ChartEvent,\n activeElements: ActiveElement[],\n _chart: Chart,\n callback: ChartOptions['onHover']\n ) => {\n if (_chart.options.onClick) {\n _chart.canvas.style.cursor = activeElements[0] ? 'pointer' : 'default';\n }\n\n if (callback) callback(_event, activeElements, _chart);\n },\n};\n","import { ChartTypeRegistry, Color, Point, TooltipItem, TooltipLabelStyle } from 'chart.js';\nimport { Context } from 'chartjs-plugin-datalabels';\nimport { Align } from 'chartjs-plugin-datalabels/types/options';\n\nimport { ColorHelper, DesignTokenHelper } from '../../../helpers';\nimport { ChartTypesConfig } from '../chart.types';\n\nconst { fontSize } = DesignTokenHelper;\nconst { getThemeColorHexString, getThemeColorRgbString } = ColorHelper;\n\n/**\n * A filter to read a chartpoint from a Chart.js point context (used for chartdata points). Context is provided by Chart.js.\n */\nconst getChartPointFromContext = (context: Context): Point => {\n return context.dataset.data[context.dataIndex] as Point;\n};\n\nexport const CHART_TYPES_CONFIG: ChartTypesConfig = {\n bar: {\n type: 'bar',\n options: {\n datasets: {\n bar: {\n barPercentage: 0.6,\n },\n line: {\n spanGaps: true,\n },\n },\n indexAxis: 'y',\n scales: {\n y: {\n grid: {\n drawBorder: false,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('s')),\n },\n },\n },\n },\n elements: {\n point: {\n radius: 0,\n },\n line: {\n borderColor: getThemeColorHexString('medium'),\n },\n },\n },\n },\n column: {\n type: 'bar',\n options: {\n datasets: {\n bar: {\n barPercentage: 0.6,\n },\n line: {\n spanGaps: true,\n },\n },\n indexAxis: 'x',\n scales: {\n x: {\n grid: {\n drawBorder: false,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n line: {\n tension: 0.2,\n borderColor: getThemeColorHexString('medium'),\n },\n point: {\n radius: 0,\n },\n },\n },\n },\n line: {\n type: 'line',\n options: {\n backgroundColor: getThemeColorRgbString('semi-light', 0.5),\n scales: {\n x: {\n grid: {\n borderColor: getThemeColorHexString('medium'),\n borderWidth: 1,\n },\n ticks: {\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n point: {\n radius: 0,\n },\n },\n },\n },\n stock: {\n type: 'line',\n options: {\n responsive: true,\n animation: {\n duration: 0,\n },\n layout: {\n padding: {\n left: 20,\n right: 20,\n top: 30,\n bottom: 0,\n },\n },\n backgroundColor: getThemeColorRgbString('semi-light', 0.5),\n scales: {\n x: {\n grid: {\n lineWidth: 0,\n },\n ticks: {\n maxRotation: 0,\n autoSkipPadding: 120,\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n y: {\n position: 'right',\n display: true,\n grid: {\n drawBorder: false,\n },\n ticks: {\n display: true,\n font: {\n size: parseInt(fontSize('xs')),\n },\n },\n },\n },\n elements: {\n line: {\n tension: 0, // Smooth curve (0 = no smoothing)\n borderWidth: 2,\n },\n point: {\n hitRadius: 20,\n radius: 0,\n hoverRadius: 0,\n hoverBorderWidth: 0,\n },\n },\n normalized: true,\n plugins: {\n tooltip: {\n padding: 10,\n\n enabled: true,\n mode: 'index',\n intersect: false,\n backgroundColor: getThemeColorHexString('semi-light'),\n titleColor: getThemeColorHexString('semi-light-contrast'),\n bodyColor: getThemeColorHexString('semi-light-contrast'),\n caretSize: 0,\n bodySpacing: 5,\n titleSpacing: 5,\n borderColor: 'transparent',\n callbacks: {\n labelColor: (tooltipItem: TooltipItem<keyof ChartTypeRegistry>) => {\n return {\n backgroundColor: tooltipItem.dataset.borderColor,\n } as TooltipLabelStyle;\n },\n },\n },\n datalabels: {\n backgroundColor: (context: Context) => context.dataset.borderColor as Color,\n color: getThemeColorHexString('white'),\n borderRadius: 3,\n font: {\n lineHeight: 1,\n size: parseInt(fontSize('xs')),\n },\n padding: {\n top: 6,\n left: 5,\n right: 5,\n bottom: 5,\n },\n offset: 5,\n align: (context: Context): Align =>\n (getChartPointFromContext(context) as any)?.datalabel.position,\n display: (context: Context): boolean =>\n !!(getChartPointFromContext(context) as any)?.datalabel,\n formatter: (value: any): string => value.datalabel.value,\n },\n },\n },\n },\n};\n","import { Injectable } from '@angular/core';\nimport { ChartType as ChartJSType } from 'chart.js';\nimport { AnnotationType, AnnotationTypeRegistry } from 'chartjs-plugin-annotation';\n\nimport { deepCopy } from '../../../helpers/deep-copy';\nimport { ChartType, ChartTypeConfig } from '../chart.types';\n\nimport { CHART_ANNOTATIONS_CONFIG } from './annotations.config';\nimport { CHART_INTERACTION_FUNCTIONS_EXTENSIONS } from './interaction-functions-extensions.config';\nimport { CHART_TYPES_CONFIG } from './type.config';\n\n@Injectable()\nexport class ChartConfigService {\n public getTypeConfig(chartType: ChartType): ChartTypeConfig {\n /* Deep copy to avoid Chart object modifying parts of CHART_TYPES_CONFIG \n as it copies by reference when initialized */\n return deepCopy(CHART_TYPES_CONFIG[chartType]);\n }\n\n public getAnnotationDefaults(type: AnnotationType): AnnotationTypeRegistry[AnnotationType] {\n return CHART_ANNOTATIONS_CONFIG[type];\n }\n\n public getInteractionFunctionsExtensions() {\n return CHART_INTERACTION_FUNCTIONS_EXTENSIONS;\n }\n\n /* Our types does not always map 1 to 1 to the same type \n that the chart.js chart is actually oconfigured with. Therefore this function \n for looking up the ChartJSType of a type. */\n public chartTypeToChartJSType(chartType: ChartType): ChartJSType {\n return CHART_TYPES_CONFIG[chartType]['type'] as ChartJSType;\n }\n}\n","/* \n The marker plugin is heavily inspired by https://chartjs-plugin-crosshair.netlify.app\n The project appears stale and only the vertical line feature is needed\n part of the plugin that was actually needed is implemented here. \n*/\n\nimport { Chart } from 'chart.js';\nimport { valueOrDefault } from 'chart.js/helpers';\n\nimport { ChartDataset } from '../../chart.types';\n\nvar defaultOptions = {\n line: {\n color: 'black',\n width: 1,\n dashPattern: [],\n },\n snap: {\n enabled: false,\n },\n};\n\nconst hasMarkerConfiguration = (chart: Chart) => {\n /* \n Hacky solution. Should be fixed in this issue: https://github.com/kirbydesign/designsystem/issues/1967\n */\n return chart.data.datasets.some((dataset: ChartDataset) => !!dataset?.kirbyOptions?.isStockChart);\n};\n\nexport default {\n id: 'marker',\n\n afterInit: function (chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n\n var xScaleType = chart.config.options.scales.x.type;\n\n if (\n xScaleType !== 'linear' &&\n xScaleType !== 'time' &&\n xScaleType !== 'category' &&\n xScaleType !== 'logarithmic'\n ) {\n return;\n }\n\n if (chart.options.plugins.marker === undefined) {\n chart.options.plugins.marker = defaultOptions;\n }\n\n chart.marker = {\n enabled: false,\n suppressUpdate: false,\n x: null,\n originalData: [],\n originalXRange: {},\n dragStarted: false,\n dragStartX: null,\n dragEndX: null,\n suppressTooltips: false,\n ignoreNextEvents: 0,\n };\n },\n\n getOption: function (chart, category, name) {\n return valueOrDefault(\n chart.options.plugins.marker[category]\n ? chart.options.plugins.marker[category][name]\n : undefined,\n defaultOptions[category][name]\n );\n },\n\n getXScale: function (chart) {\n return chart.data.datasets.length ? chart.scales[chart.getDatasetMeta(0).xAxisID] : null;\n },\n getYScale: function (chart) {\n return chart.scales[chart.getDatasetMeta(0).yAxisID];\n },\n\n afterEvent: function (chart, event) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n if (chart.config.options.scales.x.length == 0) {\n return;\n }\n\n let e = event.event;\n\n var xScaleType = chart.config.options.scales.x.type;\n\n if (\n xScaleType !== 'linear' &&\n xScaleType !== 'time' &&\n xScaleType !== 'category' &&\n xScaleType !== 'logarithmic'\n ) {\n return;\n }\n\n var xScale = this.getXScale(chart);\n\n if (!xScale) {\n return;\n }\n\n if (chart.marker.ignoreNextEvents > 0) {\n chart.marker.ignoreNextEvents -= 1;\n return;\n }\n\n // fix for Safari\n var buttons = e.native.buttons === undefined ? e.native.which : e.native.buttons;\n if (e.native.type === 'mouseup') {\n buttons = 0;\n }\n\n chart.marker.enabled =\n e.type !== 'mouseout' &&\n e.x > xScale.getPixelForValue(xScale.min) &&\n e.x < xScale.getPixelForValue(xScale.max);\n\n if (!chart.marker.enabled && !chart.marker.suppressUpdate) {\n if (e.x > xScale.getPixelForValue(xScale.max)) {\n // suppress future updates to prevent endless redrawing of chart\n chart.marker.suppressUpdate = true;\n chart.update('none');\n }\n chart.marker.dragStarted = false; // cancel zoom in progress\n return false;\n }\n chart.marker.suppressUpdate = false;\n\n chart.marker.x = e.x;\n\n chart.draw();\n },\n doDraw: function (chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n\n if (!chart.marker.enabled) {\n return;\n }\n\n this.drawTraceLine(chart);\n this.interpolateValues(chart);\n this.drawTracePoints(chart);\n\n return true;\n },\n beforeDraw: function (chart) {\n return this.doDraw(chart);\n },\n // Logic moved to beforeDraw in order\n // for the vertical line to be drawn\n // under tooltip and datalabels.\n // afterDraw: function(chart) {\n // return this.doDraw(chart);\n // },\n\n drawTraceLine: function (chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n var yScale = this.getYScale(chart);\n\n var lineWidth = this.getOption(chart, 'line', 'width');\n var color = this.getOption(chart, 'line', 'color');\n var dashPattern = this.getOption(chart, 'line', 'dashPattern');\n var snapEnabled = this.getOption(chart, 'snap', 'enabled');\n\n var lineX = chart.marker.x;\n\n if (snapEnabled && chart._active.length) {\n lineX = chart._active[0].element.x;\n }\n\n chart.ctx.beginPath();\n chart.ctx.setLineDash(dashPattern);\n chart.ctx.moveTo(lineX, yScale.getPixelForValue(yScale.max));\n chart.ctx.lineWidth = lineWidth;\n chart.ctx.strokeStyle = color;\n chart.ctx.lineTo(lineX, yScale.getPixelForValue(yScale.min));\n chart.ctx.stroke();\n chart.ctx.setLineDash([]);\n },\n\n drawTracePoints: function (chart) {\n if (!hasMarkerConfiguration(chart)) {\n return;\n }\n for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {\n var dataset = chart.data.datasets[chartIndex];\n var meta = chart.getDatasetMeta(chartIndex);\n\n var yScale = chart.scales[meta.yAxisID];\n\n if (meta.hidden || !dataset.interpolate) {\n continue;\n }\n\n chart.ctx.beginPath();\n chart.ctx.arc(\n chart.marker.x,\n yScale.getPixelForValue(dataset.interpolatedValue),\n 3,\n 0,\n 2 * Math.PI,\n false\n );\n chart.ctx.fillStyle = 'white';\n chart.ctx.lineWidth = 2;\n chart.ctx.strokeStyle = dataset.borderColor;\n chart.ctx.fill();\n chart.ctx.stroke();\n }\n },\n\n interpolateValues: function (chart) {\n for (var chartIndex = 0; chartIndex < chart.data.datasets.length; chartIndex++) {\n var dataset = chart.data.datasets[chartIndex];\n\n var meta = chart.getDatasetMeta(chartIndex);\n\n var xScale = chart.scales[meta.xAxisID];\n var xValue = xScale.getValueForPixel(chart.marker.x);\n\n if (meta.hidden || !dataset.interpolate) {\n continue;\n }\n\n var data = dataset.data;\n var index = data.findIndex(function (o) {\n return o.x >= xValue;\n });\n var prev = data[index - 1];\n var next = data[index];\n\n if (chart.data.datasets[chartIndex].steppedLine && prev) {\n dataset.interpolatedValue = prev.y;\n } else if (prev && next) {\n var slope = (next.y - prev.y) / (next.x - prev.x);\n dataset.interpolatedValue = prev.y + (xValue - prev.x) * slope;\n } else {\n dataset.interpolatedValue = NaN;\n }\n }\n },\n};\n","import { ChartType, ScriptableContext } from 'chart.js';\n\nimport { ColorHelper } from '../../../helpers';\nimport { ChartDataset } from '../chart.types';\n\nconst { getThemeColorHexString } = ColorHelper;\n\nexport const hoverBackgroundColor = getThemeColorHexString('primary');\nexport const backgroundColor = getThemeColorHexString('secondary');\n\n// Highlight elements that are added to the highlightedElements array\nexport function scriptedBackgroundColor(context: ScriptableContext<ChartType>) {\n const dataset = context.dataset as ChartDataset;\n const highlightedElements = dataset?.kirbyOptions?.highlightedElements;\n\n if (highlightedElements && highlightedElements.includes(context.dataIndex)) {\n return hoverBackgroundColor;\n } else {\n return backgroundColor;\n }\n}\n\n// Only adds a hovercolor if an onClick handler is provided\nexport function scriptedHoverBackgroundColor(context: ScriptableContext<ChartType>) {\n if (context.chart.options.onClick) {\n return hoverBackgroundColor;\n }\n}\n","import { ColorHelper } from '../../../helpers';\n\nimport { scriptedBackgroundColor, scriptedHoverBackgroundColor } from './shared.utils';\n\nconst { getThemeColorHexString } = ColorHelper;\n\nexport const CHART_GLOBAL_DEFAULTS = {\n maintainAspectRatio: false,\n color: getThemeColorHexString('black'),\n resizeDelay: 10,\n elements: {\n bar: {\n backgroundColor: scriptedBackgroundColor,\n hoverBackgroundColor: scriptedHoverBackgroundColor,\n },\n line: {\n borderColor: scriptedBackgroundColor,\n borderWidth: 2,\n tension: 0.3,\n },\n },\n scales: {\n linear: {\n display: false,\n ticks: {\n display: false,\n },\n },\n category: {\n display: true,\n grid: {\n display: false,\n },\n },\n },\n font: {\n family: 'Roboto',\n },\n plugins: {\n legend: {\n display: false,\n },\n datalabels: {\n display: false,\n },\n tooltip: {\n enabled: false,\n },\n },\n};\n","import {\n BarController,\n BarElement,\n CategoryScale,\n Chart,\n Filler,\n Legend,\n LinearScale,\n LineController,\n LineElement,\n PointElement,\n TimeScale,\n Tooltip,\n} from 'chart.js';\nimport 'chartjs-adapter-date-fns';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nimport { mergeDeepAll } from '../../../helpers/merge-deep';\nimport MarkerPlugin from '../chart-js/chartjs-plugin-marker/chartjs-plugin-marker';\nimport { CHART_GLOBAL_DEFAULTS } from '../configs/global-defaults.config';\n\nconst CHART_SCALES = [CategoryScale, LinearScale, TimeScale];\nconst CHART_ELEMENTS = [BarElement, LineElement, PointElement];\nconst CHART_CONTROLLERS = [BarController, LineController];\nconst CHART_PLUGINS = [annotationPlugin, Filler, ChartDataLabels, Tooltip, MarkerPlugin];\n\n/* Order matters; defaults must be merged after register as \n register modifies the Chart.defaults objects */\nChart.register(Legend, ...CHART_SCALES, ...CHART_ELEMENTS, ...CHART_CONTROLLERS, ...CHART_PLUGINS);\n\n/* Chart.defaults is read only; set each key modified in \n CHART_GLOBAL_DEFAULTS manually */\nconst mergedDefaults = mergeDeepAll(Chart.defaults, CHART_GLOBAL_DEFAULTS);\nObject.entries(CHART_GLOBAL_DEFAULTS).forEach(([key]) => {\n Chart.defaults[key] = mergedDefaults[key];\n});\n\nexport { Chart };\n","import { ElementRef, Injectable } from '@angular/core';\nimport { ActiveElement, ChartConfiguration, ChartOptions, ScatterDataPoint } from 'chart.js';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\nimport { toDate } from 'date-fns';\n\nimport { mergeDeepAll } from '../../../helpers/merge-deep';\nimport {\n ChartDataLabelOptions,\n ChartDataset,\n ChartHighlightedElements,\n ChartLabel,\n ChartLocale,\n ChartType,\n isNumberArray,\n} from '../chart.types';\nimport { ChartConfigService } from '../configs/chart-config.service';\n\nimport { Chart } from './configured-chart-js';\n\nconst CHART_LOCALE_DEFAULT = 'en-US';\n\n@Injectable()\nexport class ChartJSService {\n private chart: Chart;\n private dataLabelOptions: ChartDataLabelOptions;\n private highlightedElements: ChartHighlightedElements;\n private chartType: ChartType;\n private locale: ChartLocale;\n\n constructor(private chartConfigService: ChartConfigService) {}\n\n public renderChart(args: {\n targetElement: ElementRef<HTMLCanvasElement>;\n type: ChartType;\n data: ChartDataset[] | number[];\n labels?: ChartLabel[];\n customOptions?: ChartOptions;\n annotations?: AnnotationOptions[];\n dataLabelOptions?: ChartDataLabelOptions;\n highlightedElements?: ChartHighlightedElements;\n }): void {\n const {\n targetElement,\n type,\n data,\n labels,\n customOptions,\n annotations,\n dataLabelOptions,\n highlightedElements,\n } = args;\n\n this.dataLabelOptions = dataLabelOptions || null;\n this.highlightedElements = highlightedElements || null;\n this.chartType = type;\n this.locale = dataLabelOptions?.locale || CHART_LOCALE_DEFAULT;\n\n const datasets = this.createDatasets(data);\n\n const options = this.createOptionsObject({\n customOptions,\n annotations,\n dataLabelOptions,\n });\n let config = this.createConfigurationObject(type, datasets, options, labels);\n\n this.initializeNewChart(targetElement.nativeElement, config);\n }\n\n public redrawChart() {\n this.chart.update();\n }\n\n public updateData(data: ChartDataset[] | number[]): void {\n const datasets = this.createDatasets(data);\n\n this.chart.data.datasets = datasets;\n }\n\n public updateLabels(labels: ChartLabel[]) {\n /* As labels provided via the 'labels' input property always has \n highest priority - we can just set the property directly */\n this.chart.data.labels = labels;\n }\n\n public updateType(type: ChartType, customOptions?: ChartOptions) {\n if (type === 'bar' || type === 'column') {\n /* indexAxis does not update predictably; update by replacing \n the chart entirely instead */\n this.destructivelyUpdateType(type, customOptions);\n } else {\n this.nonDestructivelyUpdateType(type, customOptions);\n }\n }\n\n public setDataLabelOptions(dataLabelOptions: ChartDataLabelOptions) {\n this.dataLabelOptions = dataLabelOptions;\n }\n\n public updateOptions(customOptions: ChartOptions, type: ChartType) {\n const annotations = this.getExistingChartAnnotations();\n this.chartType = type;\n this.chart.options = this.createOptionsObject({ customOptions, annotations });\n }\n\n public updateAnnotations(annotations: AnnotationOptions[]) {\n const annotationsWithDefaults = this.applyDefaultsToAnnotations(annotations);\n this.chart.options.plugins.annotation.annotations = annotationsWithDefaults;\n }\n\n public updateHighlightedElements(highlightedElements?: ChartHighlightedElements) {\n this.highlightedElements = highlightedElements;\n const oldDatasets = this.chart.data.datasets as ChartDataset[];\n\n // Clear old datasets of highlighted elements\n oldDatasets.map((dataset) => {\n if (dataset?.kirbyOptions?.highlightedElements) {\n delete dataset.kirbyOptions.highlightedElements;\n }\n });\n\n this.chart.data.datasets = this.createDatasets(oldDatasets);\n }\n\n private getExistingChartAnnotations(): AnnotationOptions[] {\n const annotations = this.chart.options.plugins?.annotation?.annotations;\n /* In browser chart.js might return annotations as a Proxy object; force it to be an array.\n Each annotationOption in the resulting array will also be a Proxy object. \n But internally chart.js will just work with them as normal values */\n if (annotations !== undefined) {\n return Object.keys(annotations).map((key) => annotations[key]);\n } else {\n return [];\n }\n }\n\n private destructivelyUpdateType(type: ChartType, customOptions?: ChartOptions) {\n const datasets = this.chart.data.datasets as ChartDataset[];\n const labels = this.chart.data.labels as ChartLabel[]; // chart.js stores labels as unknown[]; cast it to ChartLabel[]\n const annotations = this.getExistingChartAnnotations();\n\n this.chartType = type;\n const options = this.createOptionsObject({ customOptions, annotations });\n const config = this.createConfigurationObject(type, datasets, options, labels);\n const canvasElement = this.chart.canvas;\n\n this.chart.destroy();\n this.initializeNewChart(canvasElement, config);\n }\n\n private nonDestructivelyUpdateType(chartType: ChartType, customOptions?: ChartOptions) {\n const annotations = this.getExistingChartAnnotations();\n this.chartType = chartType;\n const options = this.createOptionsObject({\n customOptions,\n annotations,\n });\n\n this.chart.options = options;\n this.chart.config.type = this.chartConfigService.chartTypeToChartJSType(chartType);\n }\n\n private initializeNewChart(canvasElement: HTMLCanvasElement, config: ChartConfiguration) {\n this.chart = new Chart(canvasElement, config);\n }\n\n private createBlankLabels(datasets: ChartDataset[]): string[] {\n const largestDataset = datasets.reduce((previousDataset, currentDataset) =>\n previousDataset.data.length > currentDataset.data.length ? previousDataset : currentDataset\n );\n return Array(largestDataset.data.length).fill('');\n }\n\n private applyDefaultsToAnnotations(annotations: AnnotationOptions[]) {\n return annotations.map((annotation) => {\n const annotationTypeDefaults = this.chartConfigService.getAnnotationDefaults(annotation.type);\n return mergeDeepAll(annotationTypeDefaults, annotation);\n });\n }\n\n private createAnnotationPluginOptionsObject(annotations: AnnotationOptions[]) {\n const annotationsWithDefaults = this.applyDefaultsToAnnotations(annotations);\n return {\n plugins: {\n annotation: {\n annotations: annotationsWithDefaults,\n },\n },\n };\n }\n\n private applyInteractionFunctionsExtensions(options: ChartOptions): ChartOptions {\n const interactionFunctionsExtensions =\n this.chartConfigService.getInteractionFunctionsExtensions();\n Object.entries(interactionFunctionsExtensions).forEach(([key, _]) => {\n const callback = options[key];\n options[key] = (e: Event, a: ActiveElement[], c: Chart) => {\n interactionFunctionsExtensions[key](e, a, c, callback);\n };\n });\n return options;\n }\n\n private createStockOptionsObject(dataLabelOptions: ChartDataLabelOptions) {\n return {\n locale: this.locale,\n plugins: {\n tooltip: {\n callbacks: {\n title: (tooltipItems) => {\n const date = toDate((tooltipItems[0]?.raw as any)?.x);\n if (date.valueOf()) {\n return date.toLocaleTimeString(this.locale, {\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n });\n }\n },\n label: (context) => {\n // It's not possible to add spacing between color legend and text so we\n // prefix with a space.\n return ' ' + context.formattedValue + (dataLabelOptions.valueSuffix || '');\n },\n },\n },\n },\n scales: {\n y: {\n ticks: {\n callback: (value) => {\n return value + (dataLabelOptions.valueSuffix || '');\n },\n },\n },\n },\n };\n }\n\n private createOptionsObject(args: {\n customOptions?: ChartOptions;\n annotations?: AnnotationOptions[];\n dataLabelOptions?: ChartDataLabelOptions;\n }): ChartOptions {\n const { customOptions, annotations, dataLabelOptions: chartDataLabelOptions } = args;\n\n const typeConfig = this.chartConfigService.getTypeConfig(this.chartType);\n const typeConfigOptions = typeConfig?.options;\n const annotationPluginOptions = annotations\n ? this.createAnnotationPluginOptionsObject(annotations)\n : {};\n const stockOptions: ChartOptions =\n this.chartType === 'stock' ? this.createStockOptionsObject(chartDataLabelOptions) : {};\n\n let options: ChartOptions = mergeDeepAll(\n stockOptions,\n typeConfigOptions,\n customOptions,\n annotationPluginOptions\n );\n\n return this.applyInteractionFunctionsExtensions(options);\n }\n\n private getDefaultStockLabels(datasets: ChartDataset[], locale: ChartLocale) {\n const largestDataset = datasets.reduce((previousDataset, currentDataset) =>\n previousDataset.data.length > currentDataset.data.length ? previousDataset : currentDataset\n );\n return largestDataset.data.map((point: ScatterDataPoint) =>\n toDate(point.x).toLocaleDateString(locale, {\n month: 'short',\n day: 'numeric',\n })\n );\n }\n\n private getLabelsToApply(args: {\n datasets: ChartDataset[];\n type: ChartType;\n indexAxis: 'x' | 'y';\n labels?: ChartLabel[];\n }) {\n const { datasets, labels, type, indexAxis } = args;\n\n const datasetHasLabels = ({ data }: ChartDataset) =>\n !!data?.some(\n (datapoint) => typeof datapoint === 'object' && typeof datapoint[indexAxis] === 'string'\n );\n\n /*\n Labels can be provided by the user two ways:\n 1. As a seperate ChartLabel[] via the 'labels' input prop - this has highest priority\n 2. Together with the dataset via the 'data' input prop - here each datapoint contains \n a label for the indexAxis. \n For example: { x: 'label1', y: 1} in the case where the index axis is 'x'. \n\n If no labels are provided then default labels are used. \n */\n const labelsAreGivenAsSeperateArray = labels !== undefined;\n const labelsAreGivenTogetherWithDataset = datasets.some(datasetHasLabels);\n\n if (labelsAreGivenAsSeperateArray) {\n return labels;\n } else if (labelsAreGivenTogetherWithDataset) {\n return null;\n } else {\n /* \n Chart.js requires labels along the index axis to render anything therefore\n all other types than stock uses empty labels as default. The stock type \n displays day & month as default. \n */\n return type === 'stock'\n ? this.getDefaultStockLabels(datasets, this.locale)\n : this.createBlankLabels(datasets);\n }\n }\n\n private createConfigurationObject(\n type: ChartType,\n datasets: ChartDataset[],\n options: ChartOptions,\n labels?: ChartLabel[]\n ): ChartConfiguration {\n const typeConfig = this.chartConfigService.getTypeConfig(type);\n\n const indexAxis = typeConfig?.options?.indexAxis ?? 'x';\n const labelsToApply = this.getLabelsToApply({ labels, datasets, type, indexAxis });\n\n return mergeDeepAll(typeConfig, {\n data: {\n labels: labelsToApply,\n datasets,\n },\n options,\n }) as ChartConfiguration;\n }\n\n private addHighlightedElementsToDatasets(\n highlightedElements: ChartHighlightedElements,\n datasets: ChartDataset[]\n ) {\n highlightedElements.forEach(([datasetIndex, dataIndex]) => {\n const dataset = datasets[datasetIndex];\n if (!dataset) return;\n\n if (dataset?.kirbyOptions?.highlightedElements) {\n dataset.kirbyOptions.highlightedElements.push(dataIndex);\n } else {\n dataset.kirbyOptions = {\n ...dataset.kirbyOptions,\n highlightedElements: [dataIndex],\n };\n }\n });\n }\n private createDatasets(data: ChartDataset[] | number[]): ChartDataset[] {\n // We need to modify the datasets in order to add datalabels.\n if (\n this.dataLabelOptions?.showCurrent ||\n this.dataLabelOptions?.showMax ||\n this.dataLabelOptions?.showMin\n ) {\n data = this.addDataLabelsData(data);\n }\n let datasets = isNumberArray(data) ? [{ data }] : data;\n if (this.highlightedElements)\n this.addHighlightedElementsToDatasets(this.highlightedElements, datasets);\n\n /* \n Hacky solution. Should be fixed in this issue:\n https://github.com/kirbydesign/designsystem/issues/1967 \n */\n if (this.chartType === 'stock') {\n datasets.forEach((dataset) => {\n dataset.kirbyOptions = {\n ...dataset.kirbyOptions,\n isStockChart: true,\n };\n });\n }\n\n return datasets;\n }\n /**\n * Decorate ChartDataset with properties to allow for datalabels.\n *\n * @param data\n * @returns ChartDataset[]\n */\n public addDataLabelsData(data: ChartDataset[] | number[]): ChartDataset[] {\n if (isNumberArray(data)) {\n throw Error(\"Currently it's impossible to add dataLabels to non ScatterDataPoint datasets\");\n }\n\n const decorateDataPoint = (\n set: ChartDataset,\n axis: 'x' | 'y',\n direction: 'high' | 'low',\n position: 'bottom' | 'top' | 'left' | 'right'\n ): void => {\n const { value, pointer } = this.locateValueIndexInDataset(set, axis, direction);\n set.data[pointer] = {\n ...(set.data[pointer] as ScatterDataPoint),\n datalabel: {\n value: value + (this.dataLabelOptions.valueSuffix || ''),\n position,\n },\n } as ScatterDataPoint;\n };\n\n data.map((set) => {\n if (this.dataLabelOptions.showMin) {\n decorateDataPoint(set, 'y', 'low', 'bottom');\n }\n if (this.dataLabelOptions.showMax) {\n decorateDataPoint(set, 'y', 'high', 'top');\n }\n if (this.dataLabelOptions.showCurrent) {\n decorateDataPoint(set, 'x', 'high', 'right');\n }\n });\n return data;\n }\n\n private locateValueIndexInDataset(\n dataset: ChartDataset,\n axis: string,\n direction: 'low' | 'high'\n ): { value: number; pointer: number } {\n let pointer: number;\n let value: number;\n dataset.data.forEach((datapoint, index) => {\n if (direction == 'low' && (!value || datapoint[axis] < value)) {\n value = datapoint['y'];\n pointer = index;\n }\n if (direction == 'high' && (!value || datapoint[axis] > value)) {\n value = datapoint['y'];\n pointer = index;\n }\n });\n return { value, pointer };\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ChartOptions } from 'chart.js';\nimport { AnnotationOptions } from 'chartjs-plugin-annotation';\n\nimport { ResizeObserverFactory } from '../shared';\n\nimport { ChartJSService } from './chart-js/chart-js.service';\nimport {\n ChartDataLabelOptions,\n ChartDataset,\n ChartHighlightedElements,\n ChartLabel,\n ChartType,\n} from './chart.types';\n\nconst DATA_LABELS_DEPRECATION_WARNING =\n 'Deprecation warning: The \"kirby-chart\" input property \"dataLabels\" will be removed in a future release of Kirby designsystem. Use \"labels\" instead. For more information see the following announcement: https://github.com/kirbydesign/designsystem/discussions/1980';\n\n@Component({\n selector: 'kirby-chart',\n templateUrl: './chart.component.html',\n styleUrls: ['./chart.component.scss'],\n providers: [ChartJSService],\n})\nexport class ChartComponent implements AfterViewInit, OnChanges {\n @Input() type: ChartType = 'column';\n @Input() data: ChartDataset[] | number[];\n\n private _labels: ChartLabel[];\n\n get labels(): ChartLabel[] {\n return this._labels;\n }\n @Input() set labels(value: ChartLabel[]) {\n this._labels = value;\n }\n @Input() set dataLabels(value: string[] | string[][]) {\n console.warn(DATA_LABELS_DEPRECATION_WARNING);\n this._labels = value;\n }\n\n @Input() customOptions?: ChartOptions;\n @Input() dataLabelOptions?: ChartDataLabelOptions;\n @Input() annotations?: AnnotationOptions[];\n @Input() highlightedElements?: ChartHighlightedElements;\n\n @HostBinding('style.--kirby-chart-height')\n _height: string;\n @Input() set height(value: string | number) {\n this._height = typeof value === 'number' ? `${value}px` : value;\n }\n\n @ViewChild('chartCanvas')\n canvasElement: ElementRef<HTMLCanvasElement>;\n\n private chartHasBeenRendered: boolean = false;\n\n constructor(private chartJSService: ChartJSService) {}\n\n ngAfterViewInit() {\n /* \n A chart is not rendered until it has both a height and a width. \n If ChartComponent is slotted in an ionic component it will\n not have any height or width on afterViewInit. This will cause \n the animation to not be played on first draw. \n */\n const canvasElement = this.canvasElement.nativeElement;\n this.whenElementHasHeightAndWidth(canvasElement).then(() => this.renderChart());\n }\n\n private whenElementHasHeightAndWidth(element: HTMLElement): Promise<void> {\n const rectIs2D = ({ width, height }) => height > 0 && width > 0;\n\n return new Promise((resolve) => {\n const initialClientRect = element.getBoundingClientRect();\n if (rectIs2D(initialClientRect)) resolve();\n\n const resizeObserver = new ResizeObserverFactory().create(([resizeObserverEntry]) => {\n if (rectIs2D(resizeObserverEntry.contentRect)) {\n resizeObserver.unobserve(element);\n resolve();\n }\n });\n\n resizeObserver.observe(element);\n });\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.chartHasBeenRendered) {\n let shouldRedrawChart = false;\n\n // TODO: Remove 'dataLabels' key when the input property is removed\n const keyUpdateFnPairs = {\n data: () => this.updateData(),\n dataLabels: () => this.updateLabels(),\n labels: () => this.updateLabels(),\n type: () => this.updateType(),\n customOptions: () => this.updateCustomOptions(),\n annotations: () => this.updateAnnotations(),\n highlightedElements: () => this.updateHighlightedElements(),\n };\n\n Object.entries(simpleChanges).forEach(([key]) => {\n if (simpleChanges[key].firstChange || !keyUpdateFnPairs[key]) return;\n shouldRedrawChart = true;\n keyUpdateFnPairs[key]();\n });\n\n if (shouldRedrawChart) this.redrawChart();\n }\n }\n\n private renderChart() {\n this.chartHasBeenRendered = true;\n this.chartJSService.renderChart({\n targetElement: this.canvasElement,\n type: this.type,\n data: this.data,\n labels: this.labels,\n customOptions: this.customOptions,\n annotations: this.annotations,\n dataLabelOptions: this.dataLabelOptions,\n highlightedElements: this.highlightedElements,\n });\n }\n\n private updateData() {\n this.chartJSService.updateData(this.data);\n }\n\n private updateLabels() {\n this.chartJSService.updateLabels(this.labels);\n }\n\n private updateType() {\n this.chartJSService.updateType(this.type, this.customOptions);\n }\n\n private updateCustomOptions() {\n this.chartJSService.updateOptions(this.customOptions, this.type);\n }\n\n private updateAnnotations() {\n this.chartJSService.updateAnnotations(this.annotations);\n }\n\n private updateHighlightedElements() {\n this.chartJSService.updateHighlightedElements(this.highlightedElements);\n }\n\n private redrawChart() {\n this.chartJSService.redrawChart();\n }\n}\n","import { formatNumber } from '@angular/common';\nimport { Options } from 'highcharts';\nimport { dateFormat } from 'highcharts/highstock';\n\nimport { ColorHelper } from '@kirbydesign/core';\n\nexport interface StockChartDeprecatedDataPoint {\n x: number;\n y: number;\n id: 'min' | 'max' | '';\n}\n\nexport const stockChartDeprecatedOptions = (locale: string, height: number) => {\n const options: Options = defaultOptions(locale) as Options;\n const transparentColor = 'rgba(255,255,255,0)';\n options.chart.backgroundColor = transparentColor;\n options.chart.height = height;\n\n options.tooltip.backgroundColor = ColorHelper.getThemeColorRgbString('background-color');\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.tooltip.formatter = function () {\n return (\n '<div class=\"kirby-text-xsmall\">' +\n // @ts-ignore\n dateFormat('%e. %b', new Date(this.x)) +\n '</div><br/><div class=\"kirby-text-small kirby-text-bold\">' +\n formatNumber(this.y, locale) +\n '</div>'\n );\n };\n options.plotOptions.area.fillColor = transparentColor;\n options.plotOptions.area.lineColor = ColorHelper.getThemeColorRgbString('tertiary');\n\n options.plotOptions.area.marker.lineColor = 'rgba(255,255,255,0.3)';\n options.plotOptions.area.marker.fillColor = ColorHelper.getThemeColorRgbString('primary');\n\n options.xAxis = {\n ...options.xAxis,\n crosshair: {\n color: ColorHelper.getThemeColorRgbString('primary'),\n },\n tickColor: transparentColor,\n lineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n };\n\n options.yAxis = {\n ...options.yAxis,\n lineColor: transparentColor,\n gridLineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n };\n\n /*\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.plotOptions.area.events.mouseOver = function() {\n const transparentColor = 'rgba(255,255,255,0)';\n this.chart.xAxis[0].update({\n tickColor: transparentColor,\n lineColor: ColorHelper.getThemeColorRgbString('medium'),\n labels: {\n style: {\n color: ColorHelper.getThemeColorRgbString('semi-dark-tint'),\n },\n },\n });\n };\n\n // Using a function instead of a lamdba-expression because of a reference to this.\n options.plotOptions.area.events.mouseOut = function() {\n const transparentColor = 'rgba(255,255,255,0)';\n this.chart.xAxis[0].update({\n lineColor: transparentColor,\n labels: {\n style: {\n color: transparentColor,\n },\n },\n });\n };\n */\n\n return options;\n};\n\nexport const annotations = (locale: string): Highcharts.AnnotationsOptions => {\n return {\n id: 'minmax',\n zIndex: 2,\n labels: [\n {\n point: 'max',\n shape: 'rect',\n distance: 5,\n align: 'center',\n verticalAlign: 'top',\n backgroundColor: ColorHelper.getThemeColorRgbString('tertiary'),\n // Using a function instead of a lamdba-expression because of a reference to this.\n formatter: function () {\n return formatNumber(this.y, locale, '1.1-1');\n },\n },\n {\n point: 'min',\n shape: 'rect',\n distance: -28,\n align: 'center',\n verticalAlign: 'bottom',\n backgroundColor: ColorHelper.getThemeColorRgbString('tertiary'),\n // Using a function instead of a lamdba-expression because of a reference to this.\n formatter: function () {\n return formatNumber(this.y, locale, '1.1-1');\n },\n },\n ],\n labelOptions: {\n y: 0,\n allowOverlap: true,\n },\n };\n};\n\nconst defaultOptions = (locale: string) => {\n return {\n chart: {\n zoomType: 'x',\n type: 'StockChart',\n spacingTop: 30,\n //spacingRight: 55,\n },\n navigator: {\n enabled: false,\n },\n rangeSelector: {\n enabled: false,\n },\n scrollbar: {\n enabled: false,\n },\n credits: {\n enabled: false,\n },\n title: {\n text: '',\n },\n subtitle: {\n text: '',\n },\n xAxis: {\n ordinal: true,\n type: 'datetime',\n lineWidth: 0.5,\n opposite: false,\n labels: {\n format: '{value:%Y-%b-%e %l:%M %p }',\n },\n },\n yAxis: {\n opposite: false,\n title: {\n text: '',\n },\n /* Doesn't work before upgrade.\n labels: {\n x: 0,\n y: 10,\n align: 'right',\n },\n */\n },\n annotations: [annotations(locale)],\n legend: {\n enabled: false,\n },\n tooltip: {\n crosshairs: {\n width: 1,\n zIndex: 2,\n },\n shadow: false,\n borderWidth: 0,\n },\n plotOptions: {\n area: {\n marker: {\n lineWidth: 16,\n radius: 7,\n },\n lineWidth: 2,\n states: {\n hover: {\n lineWidth: 2,\n },\n },\n events: {},\n threshold: null,\n },\n series: {\n marker: {\n zIndex: 100,\n enabledThreshold: 50,\n },\n },\n },\n series: [\n {\n type: 'area',\n data: [],\n },\n ],\n };\n};\n","import { Component, ElementRef, Inject, Input, LOCALE_ID } from '@angular/core';\nimport { Options } from 'highcharts';\nimport * as Highcharts from 'highcharts/highstock';\nimport AnnotationsModule from 'highcharts/modules/annotations';\n\nimport {\n annotations,\n StockChartDeprecatedDataPoint,\n} from './options/stock-chart-deprecated-options';\n\n// @ts-ignore\nAnnotationsModule(Highcharts);\n\n@Component({\n selector: 'kirby-stock-chart-deprecated',\n template: '',\n styleUrls: ['./stock-chart-deprecated.component.scss'],\n})\nexport class StockChartDeprecatedComponent {\n chartContainer: ElementRef;\n private _data: StockChartDeprecatedDataPoint[];\n @Input() set data(val: StockChartDeprecatedDataPoint[]) {\n this.onDataChanges(val);\n }\n get data() {\n return this._data;\n }\n private _options: Options;\n @Input() set options(val: Options) {\n this.onOptionsChanges(val);\n }\n get options() {\n return this._options;\n }\n private _height = 300;\n @Input() set height(height: number) {\n this._height = height;\n if (this.chart) {\n this.chart.setSize(null, height);\n }\n }\n get height() {\n return this._height;\n }\n @Input() description = '';\n @Input() showDataLabels = true;\n\n chart: Highcharts.Chart;\n\n constructor(hostElement: ElementRef, @Inject(LOCALE_ID) private locale: string) {\n this.chartContainer = hostElement;\n }\n\n onOptionsChanges(options: Options) {\n this._options = options;\n this.chart = Highcharts.stockChart(this.chartContainer.nativeElement, this._options);\n }\n\n onDataChanges(data: StockChartDeprecatedDataPoint[]) {\n this._data = data;\n\n if (this.chart != null) {\n // First delete all points in the previous series.\n this.chart.update(\n {\n series: [],\n },\n false,\n true\n );\n // Remove the annotations.\n this.chart.removeAnnotation('minmax');\n // Then update the chart with new series data.\n this.chart.update(\n {\n series: [\n {\n type: 'area',\n data: data,\n },\n ],\n },\n false,\n true\n );\n // Add the new annotations.\n this.chart.addAnnotation(annotations(this.locale), false);\n // And finally redraw the graph with all the changes.\n this.chart.redraw();\n }\n }\n}\n","import { ElementRef, Injectable } from '@angular/core';\n\nimport { WindowRef } from '../../../types/window-ref';\n\nimport { CalendarOptions } from './calendar-options.model';\n\n@Injectable()\nexport class CalendarHelper {\n private embeddedView: Window;\n private embeddedViewReady = false;\n\n constructor(private windowRef: WindowRef) {}\n\n public init(\n calendarContainer: ElementRef,\n options: CalendarOptions,\n onDaySelected: (cell: { isSelectable: boolean; date: number }) => void,\n onChangeMonth: (index: number) => void\n ) {\n if (this.hasEmbeddedView(calendarContainer)) {\n const iframe = <HTMLIFrameElement>calendarContainer.nativeElement;\n iframe.onload = () => {\n this.embeddedViewReady = true;\n this.emitOptionsToEmbeddedView(options);\n };\n this.embeddedView = iframe.contentWindow;\n\n this.windowRef.nativeWindow.addEventListener('message', (event: MessageEvent) =>\n this.handleMessageEvent(event, onDaySelected, onChangeMonth)\n );\n }\n }\n\n public update(options: CalendarOptions) {\n if (this.embeddedViewReady) {\n this.emitOptionsToEmbeddedView(options);\n }\n }\n\n public setSelectedDay(day: number) {\n if (this.embeddedViewReady) {\n this.embeddedView.postMessage(\n {\n type: 'kirbyCalendarSetSelectedDay',\n selectedDay: day,\n },\n '*'\n );\n }\n }\n\n private hasEmbeddedView(calendarContainer: ElementRef) {\n return (\n calendarContainer &&\n calendarContainer.nativeElement &&\n calendarContainer.nativeElement instanceof HTMLIFrameElement &&\n calendarContainer.nativeElement.contentWindow\n );\n }\n\n private emitOptionsToEmbeddedView(options: CalendarOptions) {\n this.embeddedView.postMessage(\n {\n type: 'kirbyCalendarInit',\n ...options,\n },\n '*'\n );\n }\n\n private handleMessageEvent(\n event: MessageEvent,\n onDaySelected: (cell: { isSelectable: boolean; date: number }) => void,\n onChangeMonth: (index: number) => void\n ) {\n if (this.validateMessage(event)) {\n switch (event.data.type) {\n case 'kirbyCalendarDaySelected':\n if (this.validateDateSelectedMessage(event)) {\n onDaySelected({ isSelectable: true, date: event.data.day });\n }\n break;\n case 'kirbyCalendarChangeMonth':\n if (this.validateNavigateMonthMessage(event)) {\n onChangeMonth(event.data.index);\n }\n break;\n }\n }\n }\n\n private validateMessage(event: MessageEvent) {\n return (\n this.embeddedView === event.source &&\n event.type === 'message' &&\n event.data &&\n event.data.type\n );\n }\n\n private validateDateSelectedMessage(event: MessageEvent) {\n return event.data.type === 'kirbyCalendarDaySelected' && event.data.day;\n }\n\n private validateNavigateMonthMessage(event: MessageEvent) {\n return event.data.type === 'kirbyCalendarChangeMonth' && typeof event.data.index === 'number';\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n LOCALE_ID,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {\n add,\n differenceInDays,\n eachDayOfInterval,\n endOfMonth,\n endOfWeek,\n format,\n getYear,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n isWeekend,\n Locale as LocaleDateFns,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from 'date-fns';\nimport { utcToZonedTime, zonedTimeToUtc } from 'date-fns-tz';\nimport { da, enGB, enUS } from 'date-fns/locale';\n\nimport { capitalizeFirstLetter } from '@kirbydesign/core';\n\nimport { CalendarCell } from './helpers/calendar-cell.model';\nimport { CalendarOptions } from './helpers/calendar-options.model';\nimport { CalendarHelper } from './helpers/calendar.helper';\nimport { CalendarYearNavigatorConfig } from './options/calendar-year-navigator-config';\n\nexport type Locale = LocaleDateFns;\ninterface CalendarDay {\n isCurrentMonth: boolean;\n isToday: boolean;\n isWeekend: boolean;\n isPast: boolean;\n isFuture: boolean;\n isDisabled: boolean;\n}\n\nenum TimeUnit {\n years = 'years',\n months = 'months',\n weeks = 'weeks',\n days = 'days',\n hours = 'hours',\n minutes = 'minutes',\n seconds = 'seconds',\n milliseconds = 'milliseconds',\n}\n\n@Component({\n selector: 'kirby-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n providers: [CalendarHelper],\n})\nexport class CalendarComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('calendarContainer', { static: false }) calendarContainer: ElementRef;\n @Output() dateChange = new EventEmitter<Date>();\n @Output() dateSelect = new EventEmitter<Date>();\n @Output() yearSelect = new EventEmitter<number>();\n @Input() timezone: 'local' | 'UTC' = 'local';\n @Input() disableWeekends = false;\n @Input() disablePastDates = false;\n @Input() disableFutureDates = false;\n @Input() alwaysEnableToday = false;\n @Input() customLocales: { [key: string]: Locale } = {};\n /* \n Experimental: Input property not documented on purpose. \n For context see: https://github.com/kirbydesign/designsystem/issues/2087\n */\n @Input() usePopover = false;\n /**\n * Configuration for the year navigator.\n *\n * Internally, calendar component:\n * - bases yearNavigatorOptions.from and yearNavigatorOptions.to on todayDate if a number is provided\n * - prioritizes minDate and maxDate over yearNavigatorOptions.from and yearNavigatorOptions.to\n */\n @Input() yearNavigatorOptions: CalendarYearNavigatorConfig;\n\n _month: CalendarCell[][];\n _weekDays: string[];\n private selectedDay: CalendarCell;\n // NOTE: Internally, all Dates\n // are normalized to point to local timezone midnight, regardless of the timezone\n // setting.\n private activeMonth: Date;\n private _selectedDate: Date;\n private _disabledDates: Date[] = [];\n private _todayDate: Date;\n private _minDate: Date;\n private _maxDate: Date;\n private locale: Locale;\n private timeZoneName: string;\n private includedLocales = { da, enGB, enUS };\n\n get selectedDate(): Date {\n return this._selectedDate;\n }\n\n @Input() set selectedDate(valueLocalOrUTC: Date) {\n const value = this.normalizeDate(valueLocalOrUTC);\n this.setActiveMonth(value);\n\n if (this.hasDateChanged(value, this._selectedDate)) {\n this.onSelectedDateChange(value);\n this._selectedDate = value;\n }\n }\n\n get disabledDates(): Date[] {\n return this._disabledDates;\n }\n\n @Input() set disabledDates(value: Date[]) {\n this._disabledDates = (value || []).map((date) => this.normalizeDate(date));\n }\n\n get todayDate(): Date {\n return this._todayDate;\n }\n\n @Input() set todayDate(value: Date) {\n this._todayDate = this.normalizeDate(value);\n }\n\n get minDate(): Date {\n return this._minDate;\n }\n\n @Input() set minDate(value: Date) {\n if (value && this.activeMonth && isBefore(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._minDate = this.normalizeDate(value);\n }\n\n get maxDate(): Date {\n return this._maxDate;\n }\n\n @Input() set maxDate(value: Date) {\n if (value && this.activeMonth && isAfter(this.activeMonth, value)) {\n this.setActiveMonth(value);\n }\n this._maxDate = this.normalizeDate(value);\n }\n\n get activeMonthName(): string {\n return capitalizeFirstLetter(this.formatWithLocale(this.activeMonth, 'MMMM'));\n }\n\n get activeYear(): string {\n return this.formatWithLocale(this.activeMonth, 'yyyy');\n }\n\n /**\n * Gets navigable years for year navigator based on yearNavigatorOptions.\n */\n get navigableYears(): string[] {\n const dateOfFirstNavigableYear =\n this.minDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.from);\n\n const dateOfLastNavigableYear =\n this.maxDate || this.getDateFromNavigableYear(this.yearNavigatorOptions.to);\n\n return this.getYearsBetweenDates(dateOfFirstNavigableYear, dateOfLastNavigableYear);\n }\n\n get navigatedYear(): number {\n return this.navigableYears.indexOf(this.activeYear);\n }\n\n @HostBinding('class.has-year-navigator')\n get _hasYearNavigator() {\n return !!this.yearNavigatorOptions;\n }\n\n constructor(private calendarHelper: CalendarHelper, @Inject(LOCALE_ID) locale: string) {\n this.locale = this.mapLocale(locale);\n this.timeZoneName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n private formatWithLocale(date: Date, formatString: string): string {\n return format(date, formatString, {\n locale: this.locale,\n });\n }\n\n private mapLocale(locale: string): Locale {\n if (locale === 'en') {\n locale = 'enGB'; // if english locale is provided without region, we default to GB\n }\n locale = locale.replace('-', '');\n const availableLocales = { ...this.includedLocales, ...this.customLocales };\n\n return availableLocales[locale] || this.includedLocales.enGB; // Default to enGB if injected locale doesnt exist\n }\n\n ngOnInit() {\n this._weekDays = this.getWeekDays();\n this.setActiveMonth(this.selectedDate);\n }\n\n ngAfterViewInit() {\n this.calendarHelper.init(\n this.calendarContainer,\n this.getHelperOptions(),\n this._onDateSelected.bind(this),\n this.onChangeMonth.bind(this)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.activeMonth) return;\n if (\n changes.disableWeekends ||\n changes.disablePastDates ||\n changes.disableFutureDates ||\n changes.disabledDates ||\n changes.minDate ||\n changes.maxDate ||\n changes.todayDate ||\n changes.timezone\n ) {\n this.refreshActiveMonth();\n this.calendarHelper.update(this.getHelperOptions());\n }\n }\n\n private setActiveMonth(date: Date = new Date()) {\n if (!this.activeMonth || !isSameMonth(this.activeMonth, date)) {\n this.activeMonth = startOfMonth(date);\n this.refreshActiveMonth();\n this.calendarHelper.update(this.getHelperOptions());\n }\n }\n\n // For leniency, the component will accept any Date that points to either UTC midnight\n // or to local timezone midnight although we will internally normalize the representation\n // of all received dates to point to local timezone midnight.\n // We currently log no warnings if the date doesn't match the timezone setting or\n // if it doesn't point to midnight.\n private normalizeDate(dateLocalOrUTC: Date) {\n if (!dateLocalOrUTC) return;\n\n if (startOfDay(dateLocalOrUTC).getTime() === dateLocalOrUTC.getTime()) {\n // date is local timezone midnight\n return dateLocalOrUTC;\n }\n if (\n startOfDay(utcToZonedTime(dateLocalOrUTC, this.timeZoneName)).getTime() ===\n utcToZonedTime(dateLocalOrUTC, this.timeZoneName).getTime()\n ) {\n // the date is a UTC midnight; create the equivalent local timezone midnight date\n const normalizedUTCdate = utcToZonedTime(dateLocalOrUTC, this.timeZoneName);\n return normalizedUTCdate;\n }\n // does not point to midnight so we make it\n return startOfDay(dateLocalOrUTC);\n }\n\n private getWeekDays(): string[] {\n const now = new Date();\n\n const week = eachDayOfInterval({\n start: startOfWeek(now, { locale: this.locale }),\n end: endOfWeek(now, { locale: this.locale }),\n });\n\n return week.map((date) => this.getFirstLetterOfWeekDayCapitalized(date));\n }\n\n private getFirstLetterOfWeekDayCapitalized(date: Date) {\n return this.formatWithLocale(date, 'EEEEE');\n }\n\n private hasDateChanged(newDate: Date, previousDate: Date): boolean {\n if (!newDate && !previousDate) {\n return false;\n }\n if (newDate instanceof Date && !previousDate) {\n return true;\n }\n return !isSameDay(newDate, previousDate);\n }\n\n private isDisabledDate(date: Date): boolean {\n return this.disabledDates.some((disabledDate) => {\n return isSameDay(disabledDate, date);\n });\n }\n\n refreshActiveMonth() {\n if (!this.activeMonth) return;\n\n const monthStart = startOfMonth(this.activeMonth);\n const monthEnd = endOfMonth(this.activeMonth);\n const startOfFirstWeek = startOfWeek(monthStart, { locale: this.locale });\n const endOfLastWeek = endOfWeek(monthEnd, { locale: this.locale });\n const totalDayCount = differenceInDays(endOfLastWeek, startOfFirstWeek) + 1;\n const today = this.todayDate ? startOfDay(this.todayDate) : startOfDay(new Date());\n\n const daysArray = Array.from(Array(totalDayCount).keys());\n\n const days: CalendarCell[] = daysArray.map((number) => {\n const cellDate = add(startOfFirstWeek, { [TimeUnit.days]: number });\n const day = this.getCalendarDay(cellDate, today, monthStart);\n\n const isSelectable = this.isSelectable(day, cellDate);\n const isSelected = isSameDay(this.selectedDate, cellDate);\n const cell = {\n date: cellDate.getDate(),\n isCurrentMonth: day.isCurrentMonth,\n isSelectable,\n isSelected,\n cssClasses: this.getCssClasses(day, isSelectable, isSelected),\n };\n if (isSelected) {\n this.selectedDay = cell;\n }\n return cell;\n });\n this._month = this.chunk(days, 7);\n }\n\n private getCalendarDay(date: Date, today: Date, monthStart: Date): CalendarDay {\n return {\n isToday: isSameDay(today, date),\n isPast: isBefore(date, today),\n isFuture: isAfter(date, today),\n isWeekend: isWeekend(date),\n isCurrentMonth: isSameMonth(date, monthStart),\n isDisabled: this.isDisabledDate(date),\n };\n }\n\n private isSelectable(day: CalendarDay, date: Date) {\n return (\n (this.alwaysEnableToday && day.isToday) ||\n (!day.isDisabled &&\n day.isCurrentMonth &&\n !(this.disableWeekends && day.isWeekend) &&\n !(this.disablePastDates && day.isPast) &&\n !(this.disableFutureDates && day.isFuture) &&\n !(this.minDate && isBefore(date, this.minDate)) &&\n !(this.maxDate && isAfter(date, this.maxDate)))\n );\n }\n\n private getCssClasses(day: CalendarDay, isSelectable: boolean, isSelected: boolean) {\n const cssClasses = {\n 'current-month': day.isCurrentMonth,\n weekend: day.isWeekend,\n today: day.isToday,\n selectable: isSelectable,\n selected: isSelected,\n past: day.isPast,\n disabled: day.isDisabled,\n };\n let cssClassString = 'day';\n for (const key in cssClasses) {\n if (cssClasses[key]) {\n cssClassString += ' ' + key;\n }\n }\n return cssClassString;\n }\n\n private chunk(array: any[], size: number) {\n const results = [];\n while (array.length) {\n results.push(array.splice(0, size));\n }\n return results;\n }\n\n private onSelectedDateChange(newDate: Date): void {\n if (this.selectedDay) {\n this.selectedDay.isSelected = false;\n }\n\n const newDay = this.getCell(newDate);\n if (newDay) {\n newDay.isSelected = true;\n this.selectedDay = newDay;\n }\n this.calendarHelper.setSelectedDay(newDate.getDate());\n }\n\n _onDateSelected(newDay: CalendarCell) {\n if (newDay.isSelectable && newDay.date) {\n let newDate = new Date(this.activeMonth);\n newDate.setDate(newDay.date);\n\n if (this.timezone === 'UTC') {\n newDate = zonedTimeToUtc(this.subtractTimezoneOffset(newDate), this.timeZoneName);\n }\n\n const dateToEmit = newDate;\n\n if (this.hasDateChanged(newDate, this._selectedDate)) {\n this.onSelectedDateChange(newDate);\n this._selectedDate = newDate;\n this.dateChange.emit(dateToEmit);\n }\n this.dateSelect.emit(dateToEmit);\n }\n }\n\n private onChangeMonth(direction: number) {\n this._changeMonth(direction);\n this.calendarHelper.update(this.getHelperOptions());\n }\n\n _changeMonth(index: number) {\n this.changeActiveView(index, TimeUnit.months);\n }\n\n _changeYear(year: string) {\n const yearNumeric = Number(year);\n this.changeActiveView(yearNumeric - getYear(this.activeMonth), TimeUnit.years);\n this.yearSelect.emit(yearNumeric);\n }\n\n private changeActiveView(index: number, unit: TimeUnit) {\n if (index === 0) return;\n this.activeMonth = add(this.activeMonth, { [unit]: index });\n\n this.refreshActiveMonth();\n }\n\n get _canNavigateBack(): boolean {\n const reachedPastDatesLimit =\n this.disablePastDates && isSameMonth(this.activeMonth, this.todayDate);\n\n const reachedOrExceededMinDate =\n this.minDate &&\n (isSameMonth(this.activeMonth, this.minDate) || isBefore(this.activeMonth, this.minDate));\n\n return !reachedPastDatesLimit && !reachedOrExceededMinDate;\n }\n\n get _canNavigateForward(): boolean {\n const reachedFutureDatesLimit =\n this.disableFutureDates && isSameMonth(this.activeMonth, this.todayDate);\n\n const reachedOrExceededMaxDate =\n this.maxDate &&\n (isSameMonth(this.activeMonth, this.maxDate) || isAfter(this.activeMonth, this.maxDate));\n\n return !reachedFutureDatesLimit && !reachedOrExceededMaxDate;\n }\n\n private getCell(date: Date) {\n let foundDay = null;\n if (date) {\n for (let week of this._month) {\n foundDay = week.find((day) => {\n return day.isCurrentMonth && day.date === date.getDate();\n });\n if (foundDay) {\n break;\n }\n }\n }\n return foundDay;\n }\n\n private getHelperOptions(): CalendarOptions {\n return {\n canNavigateBack: this._canNavigateBack,\n canNavigateForward: this._canNavigateForward,\n year: this.activeYear,\n monthName: this.activeMonthName,\n weekDays: this._weekDays,\n month: this._month,\n };\n }\n\n private subtractTimezoneOffset(date: Date): Date {\n const timezoneOffsetInMs = date.getTimezoneOffset() * 60 * 1000;\n return new Date(date.getTime() - timezoneOffsetInMs);\n }\n\n private getDateFromNavigableYear(navigableYear: number | Date): Date {\n if (navigableYear instanceof Date) return navigableYear;\n const today = this.todayDate || new Date();\n return new Date(today.getFullYear() + navigableYear, 0, 1);\n }\n\n private getYearsBetweenDates(startDate: Date, endDate: Date): string[] {\n // Ensure years are ordered correctly if parameters are switched:\n const [startYear, endYear] = [startDate.getFullYear(), endDate.getFullYear()].sort();\n const numberOfYears = endYear - startYear;\n return Array.from({ length: numberOfYears + 1 }, (_, i) => (startYear + i).toString());\n }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { ItemSlidingSide, ItemSwipeAction } from './item-sliding.types';\n\n@Component({\n selector: 'kirby-item-sliding',\n templateUrl: './item-sliding.component.html',\n styleUrls: ['./item-sliding.component.scss'],\n})\nexport class ItemSlidingComponent {\n @Input() swipeActions: ItemSwipeAction[];\n\n _side: 'start' | 'end' = 'start';\n @Input() set side(value: ItemSlidingSide) {\n this._side = value === 'left' ? 'start' : 'end';\n }\n\n get _hasSwipeActions(): boolean {\n // Using '>' instead of '!==';\n // will only return true when swipeActions is an array\n return this.swipeActions?.length > 0;\n }\n}\n","export class UniqueIdGenerator {\n private static registry = new Map<string, UniqueIdGenerator>();\n private id = 0;\n\n private constructor(private scope: string) {}\n\n static scopedTo(scope: string) {\n let scopedGenerator = UniqueIdGenerator.registry.get(scope);\n if (!scopedGenerator) {\n scopedGenerator = new UniqueIdGenerator(scope);\n UniqueIdGenerator.registry.set(scope, scopedGenerator);\n }\n return scopedGenerator;\n }\n\n next(): string {\n return `${this.scope}-${this.id++}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n Output,\n} from '@angular/core';\n\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\n\n@Component({\n selector: 'kirby-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n @Input() checked: boolean = false;\n @Input() attentionLevel: '1' | '2' = '2';\n\n @HostBinding('class.has-label')\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size?: 'xs' | 'sm' | 'md';\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean = false;\n\n @Input() disabled = false;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.attention-level1') get isAttentionLevel1() {\n return this.attentionLevel === '1';\n }\n @HostBinding('class.attention-level2') get isAttentionLevel2() {\n return this.attentionLevel === '2';\n }\n\n @Output() checkedChange = new EventEmitter<boolean>();\n\n onChecked(checked: boolean): void {\n this.checked = checked;\n this.checkedChange.emit(this.checked);\n }\n\n // IDs used for a11y labelling\n _labelId = UniqueIdGenerator.scopedTo('kirby-checkbox-label').next();\n}\n","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-chip',\n templateUrl: './chip.component.html',\n styleUrls: ['./chip.component.scss'],\n})\nexport class ChipComponent {\n @Input() text: string;\n\n @Input()\n @HostBinding('attr.aria-selected')\n @HostBinding('class.is-selected')\n isSelected: boolean;\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-divider',\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss'],\n})\nexport class DividerComponent {\n @Input()\n hasMargin: boolean;\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\nexport enum ItemSize {\n XS = 'xs',\n SM = 'sm',\n MD = 'md',\n}\n\n@Component({\n selector: 'kirby-item',\n templateUrl: './item.component.html',\n styleUrls: ['./item.component.scss'],\n})\nexport class ItemComponent {\n @Input() disabled: boolean;\n @HostBinding('class.selected')\n @Input()\n selected: boolean;\n @Input()\n selectable: boolean;\n @Input()\n reorderable: boolean;\n @HostBinding('class')\n @Input()\n size: ItemSize | `${ItemSize}` = ItemSize.MD;\n\n // Prevent default when inside kirby-dropdown to avoid blurring dropdown:\n onMouseDown(event: MouseEvent) {\n if (\n event.currentTarget instanceof HTMLElement &&\n event.currentTarget.closest('kirby-dropdown')\n ) {\n event.preventDefault();\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[kirbyListItem]',\n})\nexport class ListItemDirective {\n constructor() {\n console.warn(\n '*kirbyListItem directive is deprecated - please use *kirbyListItemTemplate directive instead.'\n );\n }\n}\n\n@Directive({\n selector: '[kirbyListFlexItem]',\n})\nexport class ListFlexItemDirective {\n constructor() {\n console.warn(\n '*kirbyListFlexItem directive is deprecated - please use *kirbyListItemTemplate directive instead.'\n );\n }\n}\n\n@Directive({\n selector: '[kirbyListItemTemplate]',\n})\nexport class ListItemTemplateDirective {}\n\n@Directive({\n selector: '[kirbyListHeader], [kirbyListHeaderTemplate]',\n})\nexport class ListHeaderDirective {}\n\n@Directive({\n selector: '[kirbyListSectionHeader], [kirbyListSectionHeaderTemplate]',\n})\nexport class ListSectionHeaderDirective {}\n\n@Directive({\n selector: '[kirbyListFooter], [kirbyListFooterTemplate]',\n})\nexport class ListFooterDirective {}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core';\n\nimport { DesignTokenHelper } from '../../helpers';\n\nexport enum HorizontalDirection {\n right = 'right',\n left = 'left',\n}\n\n@Component({\n selector: 'kirby-popover',\n template: ` <div #wrapper class=\"wrapper\"><ng-content></ng-content></div> `,\n styleUrls: ['./popover.component.scss'],\n})\nexport class PopoverComponent implements AfterViewInit, OnDestroy {\n // removeEventListener same instance of event handler & options\n private readonly preventScrollEventListenerOptions = {\n passive: false,\n } as EventListenerOptions;\n\n private readonly POPOVER_BODY_PADDING = 12;\n\n private isShowing: boolean = false;\n private isFirstToLockScroll: boolean;\n private zIndex: number;\n private document: Document;\n\n @ViewChild('wrapper', { static: true, read: ElementRef })\n wrapperElement: ElementRef<HTMLDivElement>;\n\n @Input()\n popout: HorizontalDirection | `${HorizontalDirection}` = HorizontalDirection.right;\n\n @Input()\n target: HTMLElement | ElementRef<HTMLElement>;\n\n @Output()\n willHide = new EventEmitter<void>();\n\n private get targetElement(): HTMLElement {\n if (this.target instanceof ElementRef) {\n return this.target.nativeElement;\n } else {\n return this.target;\n }\n }\n\n @HostListener('window:resize')\n _onWindowResize() {\n this.hide();\n }\n\n constructor(private elementRef: ElementRef<HTMLElement>, private renderer: Renderer2) {\n this.document = elementRef.nativeElement.ownerDocument;\n }\n\n ngAfterViewInit(): void {\n this.placePopoverAboveClosestModal();\n this.renderer.removeChild(\n this.elementRef.nativeElement.parentElement,\n this.elementRef.nativeElement\n );\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n private placePopoverAboveClosestModal() {\n const closestIonModal = this.elementRef.nativeElement.closest('ion-modal');\n if (closestIonModal) {\n this.zIndex = parseInt(closestIonModal.style.zIndex) + 1;\n this.elementRef.nativeElement.style.zIndex = `${this.zIndex}`;\n } else {\n this.zIndex = parseInt(DesignTokenHelper.zLayer('popover'));\n }\n }\n\n // document.removeEventListener needs the exact same event handler & options reference:\n private static preventEventOutsidePopover(event: TouchEvent) {\n if (event.target instanceof HTMLElement) {\n const targetIsInPopover = !!event.target.closest('kirby-popover');\n if (!targetIsInPopover) {\n event.preventDefault();\n }\n }\n }\n\n private preventScroll() {\n this.isFirstToLockScroll = !this.document.body.classList.contains('backdrop-no-scroll');\n if (this.isFirstToLockScroll) {\n this.renderer.addClass(this.document.body, 'backdrop-no-scroll');\n }\n\n // preventDefault does not work with Renderer2.listen method; add event listener directly to document instead\n this.document.addEventListener(\n 'touchmove',\n PopoverComponent.preventEventOutsidePopover,\n this.preventScrollEventListenerOptions\n );\n }\n\n private releaseScroll() {\n if (this.isFirstToLockScroll) {\n this.renderer.removeClass(this.document.body, 'backdrop-no-scroll');\n }\n\n this.document.removeEventListener(\n 'touchmove',\n PopoverComponent.preventEventOutsidePopover,\n this.preventScrollEventListenerOptions\n );\n }\n\n show() {\n this.renderer.addClass(this.elementRef.nativeElement, 'is-opening');\n this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);\n\n this.preventScroll();\n this.positionWrapper();\n\n this.renderer.addClass(this.elementRef.nativeElement, 'is-open');\n this.renderer.removeClass(this.elementRef.nativeElement, 'is-opening');\n\n this.isShowing = true;\n }\n\n hide() {\n if (!this.isShowing) return;\n\n this.willHide.emit();\n this.renderer.removeChild(\n this.elementRef.nativeElement.parentElement,\n this.elementRef.nativeElement\n );\n this.releaseScroll();\n\n this.renderer.removeStyle(this.targetElement, 'z-index');\n this.renderer.removeStyle(this.targetElement, 'pointer-events');\n this.isShowing = false;\n }\n\n private positionWrapper() {\n const targetDimensions = this.targetElement.getBoundingClientRect();\n\n this.renderer.appendChild(this.document.body, this.elementRef.nativeElement);\n\n const wrapperElement = this.wrapperElement.nativeElement;\n const wrapperDimensions = wrapperElement.getBoundingClientRect();\n const viewport = wrapperElement.ownerDocument.defaultView;\n this.positionHorizontally(viewport, wrapperElement, targetDimensions, wrapperDimensions);\n this.positionVertically(viewport, wrapperElement, targetDimensions, wrapperDimensions);\n }\n\n private positionHorizontally(\n viewPort: Window,\n wrapperElement: HTMLDivElement,\n targetDimensions: DOMRect,\n wrapperDimensions: DOMRect\n ) {\n const viewPortWidth = viewPort.innerWidth;\n const contentWidth = wrapperDimensions.width;\n const availableSpaceRight = viewPortWidth - targetDimensions.left;\n const availableSpaceLeft = targetDimensions.right;\n const contentCanFitRightOfTarget =\n availableSpaceRight >= contentWidth + this.POPOVER_BODY_PADDING;\n const openRight = contentCanFitRightOfTarget || availableSpaceRight >= availableSpaceLeft;\n\n const [direction, oppositeDirection] =\n this.popout === HorizontalDirection.left || !openRight\n ? ['left', 'right']\n : ['right', 'left'];\n\n const pxValue =\n direction === 'left' ? viewPortWidth - targetDimensions.right : targetDimensions.left;\n\n this.renderer.removeStyle(wrapperElement, direction);\n this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);\n }\n\n private positionVertically(\n viewPort: Window,\n wrapperElement: HTMLDivElement,\n targetDimensions: DOMRect,\n wrapperDimensions: DOMRect\n ) {\n const viewPortHeight = viewPort.innerHeight;\n const contentHeight = wrapperDimensions.height;\n const availableSpaceDown = viewPortHeight - targetDimensions.bottom;\n const availableSpaceUp = targetDimensions.top;\n const contentCanFitBelowTarget =\n availableSpaceDown >= contentHeight + this.POPOVER_BODY_PADDING;\n\n const isAvailableSpaceBelow =\n contentCanFitBelowTarget || availableSpaceDown >= availableSpaceUp;\n const [direction, oppositeDirection] = isAvailableSpaceBelow\n ? ['bottom', 'top']\n : ['top', 'bottom'];\n\n const pxValue =\n direction === 'bottom' ? targetDimensions.bottom : viewPortHeight - targetDimensions.top;\n\n this.renderer.removeStyle(wrapperElement, direction);\n this.renderer.setStyle(wrapperElement, oppositeDirection, `${pxValue}px`);\n\n if (direction === 'top') {\n // Ensure target is elevated above shadows in popover, i.e. content wrapped in Card:\n this.renderer.setStyle(this.targetElement, 'z-index', `${this.zIndex + 1}`);\n this.renderer.setStyle(this.targetElement, 'pointer-events', 'none');\n }\n }\n}\n","export enum OpenState {\n closed,\n opening,\n open,\n}\n\nexport enum VerticalDirection {\n up,\n down,\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class KeyboardHandlerService {\n handle(event: KeyboardEvent, items: any[] | string[], selectedIndex: number) {\n let newIndex = -1;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n // Select previous item:\n newIndex = selectedIndex - 1;\n break;\n case 'ArrowDown':\n case 'ArrowRight':\n if (selectedIndex === undefined) {\n // None selected, select first item:\n newIndex = 0;\n } else if (selectedIndex < items.length - 1) {\n // Select next item:\n newIndex = selectedIndex + 1;\n }\n break;\n case 'Home':\n // Select first item:\n newIndex = 0;\n break;\n case 'End':\n // Select last item:\n newIndex = items.length - 1;\n break;\n default:\n break;\n }\n return newIndex;\n }\n}\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ButtonComponent } from '../button/button.component';\nimport { CardComponent } from '../card/card.component';\nimport { ItemComponent } from '../item/item.component';\nimport { ListItemTemplateDirective } from '../list/list.directive';\nimport { HorizontalDirection, PopoverComponent } from '../popover/popover.component';\n\nimport { OpenState, VerticalDirection } from './dropdown.types';\nimport { KeyboardHandlerService } from './keyboard-handler.service';\n\n@Component({\n selector: 'kirby-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true,\n },\n ],\n})\nexport class DropdownComponent\n implements AfterContentChecked, AfterViewInit, OnDestroy, ControlValueAccessor\n{\n static readonly OPEN_DELAY_IN_MS = 100;\n private state = OpenState.closed;\n private hasConfiguredSlottedItems = false;\n private horizontalDirection: HorizontalDirection | `${HorizontalDirection}` =\n HorizontalDirection.right;\n private verticalDirection: VerticalDirection | `${VerticalDirection}` = VerticalDirection.down;\n\n private _items: string[] | any[] = [];\n get items(): string[] | any[] {\n return this._items;\n }\n\n @Input() set items(value: string[] | any[]) {\n this._items = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (this._selectedIndex != value) {\n this._selectedIndex = value;\n this._value = this.items[this.selectedIndex] || null;\n }\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n placeholder = 'Please select:';\n\n @Input() set popout(direction: HorizontalDirection | `${HorizontalDirection}`) {\n this.horizontalDirection = direction || HorizontalDirection.right;\n }\n\n get popout() {\n return this.horizontalDirection;\n }\n\n @Input()\n attentionLevel: '1' | '2' | '3' | '4' = '3';\n readonly attentionLevelOpen = '2';\n\n @Input()\n expand?: 'block';\n\n @Input()\n disabled = false;\n\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @Input()\n size: 'sm' | 'md' = 'md';\n\n @Input()\n tabindex = 0;\n\n @HostBinding('class.with-popover')\n @Input()\n usePopover = false;\n\n @HostBinding('attr.tabindex')\n get _tabindex() {\n return this.disabled ? -1 : this.tabindex;\n }\n\n // Prevent Ionic blur on scroll\n @HostBinding('attr.no-blur')\n get _noBlurOnScroll() {\n return true;\n }\n\n /**\n * Emitted when an item is selected (tap on mobile, click/keypress on web)\n */\n @Output() change: EventEmitter<string | any> = new EventEmitter<string | any>();\n\n private _value: string | any = null;\n get value(): string | any {\n return this._value;\n }\n\n get selectedText(): string {\n return this.getTextFromItem(this.value);\n }\n\n @HostBinding('class.expand')\n get _isBlockLevel() {\n return this.expand === 'block';\n }\n\n @HostBinding('attr.role')\n _role = 'listbox';\n\n @HostBinding('class.is-opening')\n get _isOpening(): boolean {\n return this.state === OpenState.opening;\n }\n\n @HostBinding('class.is-open')\n get isOpen(): boolean {\n return this.state === OpenState.open;\n }\n\n @HostBinding('class.popout-left')\n get _popoutLeft() {\n return this.horizontalDirection === HorizontalDirection.left;\n }\n\n @HostBinding('class.popout-up')\n get _popoutUp() {\n return this.verticalDirection === VerticalDirection.up;\n }\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ContentChildren(ListItemTemplateDirective, { read: ElementRef })\n slottedItems: QueryList<ElementRef<HTMLElement>>;\n @ViewChild(CardComponent, { read: ElementRef })\n cardElement: ElementRef<HTMLElement>;\n @ViewChild(PopoverComponent)\n popover?: PopoverComponent;\n @ViewChild(ButtonComponent, { static: true, read: ElementRef })\n buttonElement: ElementRef<HTMLElement>;\n @ViewChildren(ItemComponent, { read: ElementRef })\n kirbyItemsDefault: QueryList<ElementRef<HTMLElement>>;\n @ContentChildren(ItemComponent, { read: ElementRef })\n kirbyItemsSlotted: QueryList<ElementRef<HTMLElement>>;\n\n private itemClickUnlisten: (() => void)[] = [];\n private intersectionObserverRef: IntersectionObserver;\n private showDropdownTimeoutId: ReturnType<typeof setTimeout>;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private keyboardHandlerService: KeyboardHandlerService\n ) {}\n\n onToggle(event: MouseEvent) {\n event.stopPropagation();\n if (!this.isOpen) {\n this.elementRef.nativeElement.focus();\n }\n this.toggle();\n }\n\n toggle() {\n if (this.disabled) {\n return;\n }\n this.isOpen ? this.close() : this.open();\n }\n\n onButtonMouseEvent(event: Event) {\n // Prevent button focus;\n event.preventDefault();\n }\n\n ngAfterContentChecked() {\n if (!this.hasConfiguredSlottedItems && this.kirbyItemsSlotted.length) {\n this.kirbyItemsSlotted.forEach((kirbyItem, index) => {\n this.renderer.setAttribute(kirbyItem.nativeElement, 'role', 'option');\n const unlisten = this.renderer.listen(kirbyItem.nativeElement, 'click', () => {\n this.onItemSelect(index);\n });\n this.itemClickUnlisten.push(unlisten);\n });\n this.hasConfiguredSlottedItems = true;\n }\n }\n\n /* Utility that makes it easier to set styles on card element \n when using popover*/\n private setPopoverCardStyle(style: string, value: string) {\n if (!this.usePopover) return;\n\n this.renderer.setStyle(\n this.cardElement.nativeElement,\n style,\n value,\n RendererStyleFlags2.DashCase\n );\n }\n\n ngAfterViewInit() {\n if (this.usePopover && this.expand === 'block') {\n const { width } = this.elementRef.nativeElement.getBoundingClientRect();\n this.setPopoverCardStyle('--kirby-card-width', `${width}px`);\n this.setPopoverCardStyle('max-width', 'initial');\n this.setPopoverCardStyle('min-width', 'initial');\n }\n this.initializeAlignment();\n }\n\n private initializeAlignment() {\n if (this.usePopover) return;\n if (!this.intersectionObserverRef) {\n const options = {\n rootMargin: '0px',\n };\n const callback: IntersectionObserverCallback = (entries) => {\n // Only apply alignment when opening:\n if (this.state !== OpenState.opening) {\n return;\n }\n\n // Cancel any pending timer to show dropdown:\n clearTimeout(this.showDropdownTimeoutId);\n const entry = entries[0];\n const isVisible = entry.boundingClientRect.width > 0;\n if (isVisible && entry.intersectionRatio < 1) {\n this.setHorizontalDirection(entry);\n this.setVerticalDirection(entry);\n }\n this.showDropdown();\n this.changeDetectorRef.detectChanges();\n };\n this.intersectionObserverRef = new IntersectionObserver(callback, options);\n this.intersectionObserverRef.observe(this.cardElement.nativeElement);\n }\n }\n\n private setHorizontalDirection(entry: IntersectionObserverEntry) {\n // If popout direction is set to right, and the entry is cut off to the right by ${entry.boundingClientRect.right - entry.intersectionRect.right}px\n // it is set to popout left instead, and vice versa for popout direction left\n if (this.horizontalDirection === HorizontalDirection.right) {\n if (entry.boundingClientRect.right > entry.rootBounds.right) {\n this.horizontalDirection = HorizontalDirection.left;\n }\n } else {\n if (entry.boundingClientRect.left < entry.rootBounds.left) {\n this.horizontalDirection = HorizontalDirection.right;\n }\n }\n }\n\n private setVerticalDirection(entry: IntersectionObserverEntry) {\n if (entry.boundingClientRect.top < 0) {\n // entry is cut off at the top by ${entry.boundingClientRect.top}px\n // open downwards:\n this.verticalDirection = VerticalDirection.down;\n }\n if (entry.boundingClientRect.bottom > entry.rootBounds.bottom) {\n // entry is cut off at the bottom by ${entry.boundingClientRect.bottom - entry.intersectionRect.bottom}px\n const containerOffsetTop = this.elementRef.nativeElement.getBoundingClientRect().top;\n const SPACING = 5; //TODO: Get from SCSS\n // Check if the card can fit on top of button:\n if (containerOffsetTop > entry.target.clientHeight + SPACING) {\n // open upwards:\n this.verticalDirection = VerticalDirection.up;\n }\n }\n }\n\n open() {\n if (this.disabled) {\n return;\n }\n if (!this.isOpen) {\n this.state = OpenState.opening;\n // ensures that the dropdown is opened in case the IntersectionObserverCallback isn't invoked\n this.showDropdownTimeoutId = setTimeout(\n () => this.showDropdown(),\n DropdownComponent.OPEN_DELAY_IN_MS\n );\n }\n }\n\n private showDropdown() {\n if (this.state === OpenState.opening) {\n this.state = OpenState.open;\n this.popover?.show();\n this.scrollItemIntoView(this.selectedIndex);\n this.changeDetectorRef.markForCheck();\n }\n }\n\n close() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.state = OpenState.closed;\n // Reset vertical direction to default\n this.verticalDirection = VerticalDirection.down;\n this.popover?.hide();\n }\n }\n\n onItemSelect(index: number) {\n this.selectItem(index);\n this.close();\n }\n\n private _onChange: (value: any) => void = () => {};\n private _onTouched = () => {};\n\n /**\n * Sets the select's value. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param value New value to be written to the model.\n */\n writeValue(value: any): void {\n this._selectItemByValue(value);\n }\n\n /**\n * Saves a callback function to be invoked when the select's value\n * changes from user input. Part of the ControlValueAccessor interface\n * required to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the value changes.\n */\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n /**\n * Saves a callback function to be invoked when the select is blurred\n * by the user. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param fn Callback to be triggered when the component has been touched.\n */\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n /**\n * Disables the select. Part of the ControlValueAccessor interface required\n * to integrate with Angular's core forms API.\n *\n * @param isDisabled Sets whether the component is disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private selectItem(index: number) {\n if (index != this.selectedIndex) {\n this.selectedIndex = index;\n this.change.emit(this.value);\n this._onChange(this.value);\n this.scrollItemIntoView(index);\n }\n }\n\n private _selectItemByValue(value: string | any) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n getTextFromItem(item: string | any) {\n if (!item) {\n return null;\n }\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n scrollItemIntoView(index: number) {\n const kirbyItems =\n this.kirbyItemsSlotted && this.kirbyItemsSlotted.length\n ? this.kirbyItemsSlotted\n : this.kirbyItemsDefault;\n if (kirbyItems && kirbyItems.length) {\n const selectedKirbyItem = kirbyItems.toArray()[index];\n if (selectedKirbyItem && selectedKirbyItem.nativeElement) {\n const itemElement = selectedKirbyItem.nativeElement;\n const scrollContainer = this.cardElement.nativeElement;\n const itemTop = itemElement.offsetTop;\n const itemBottom = itemElement.offsetTop + itemElement.offsetHeight;\n const containerVisibleTop = scrollContainer.scrollTop;\n const containerVisibleBottom = scrollContainer.clientHeight + scrollContainer.scrollTop;\n if (itemTop < containerVisibleTop) {\n scrollContainer.scrollTop = itemTop;\n } else if (itemBottom > containerVisibleBottom) {\n scrollContainer.scrollTop = itemBottom - scrollContainer.clientHeight;\n }\n }\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n _onTab(event: KeyboardEvent) {\n if (this.isOpen) {\n event.preventDefault();\n this.close();\n }\n }\n\n @HostListener('mousedown', ['$event'])\n _onMouseDown(event: MouseEvent) {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n\n @HostListener('focus')\n _onFocus() {\n if (this.disabled) {\n this.elementRef.nativeElement.blur();\n }\n }\n\n _onPopoverWillHide() {\n this.state = OpenState.closed;\n this.elementRef.nativeElement.focus();\n }\n\n @HostListener('keydown.enter')\n @HostListener('keydown.escape')\n @HostListener('blur', ['$event'])\n _onBlur(event?: FocusEvent) {\n if (this.disabled) return;\n if (this.isOpen) {\n if (!this.cardElement.nativeElement.contains(event?.relatedTarget as HTMLElement)) {\n this.close();\n }\n }\n this._onTouched();\n }\n\n @HostListener('keydown.space', ['$event'])\n _onSpace(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n if (!this.isOpen) {\n this.open();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n _onEnter(event: KeyboardEvent) {\n event.preventDefault();\n event.stopPropagation();\n this.toggle();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n @HostListener('keydown.arrowdown', ['$event'])\n @HostListener('keydown.arrowleft', ['$event'])\n @HostListener('keydown.arrowright', ['$event'])\n _onArrowKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n // Mirror default HTML5 select behaviour - prevent left/right arrows when open:\n if (this.isOpen && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n return;\n }\n const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);\n if (newIndex > -1) {\n this.selectItem(newIndex);\n }\n return false;\n }\n\n @HostListener('keydown.home', ['$event'])\n @HostListener('keydown.end', ['$event'])\n _onHomeEndKeys(event: KeyboardEvent) {\n if (this.disabled) return;\n const newIndex = this.keyboardHandlerService.handle(event, this.items, this.selectedIndex);\n if (newIndex > -1) {\n this.selectItem(newIndex);\n }\n return false;\n }\n\n ngOnDestroy(): void {\n let unlisten: () => void;\n while ((unlisten = this.itemClickUnlisten.pop()) !== undefined) {\n unlisten();\n }\n if (this.intersectionObserverRef) {\n this.intersectionObserverRef.disconnect();\n }\n }\n}\n","import { AfterContentInit, Component, ContentChildren, Input, QueryList } from '@angular/core';\n\nimport { ButtonComponent } from '../button/button.component';\n\n@Component({\n selector: 'kirby-empty-state',\n templateUrl: './empty-state.component.html',\n styleUrls: ['./empty-state.component.scss'],\n})\nexport class EmptyStateComponent implements AfterContentInit {\n @Input() iconName: string;\n @Input() customIconName: string;\n @Input() title: string;\n @Input() subtitle: string;\n\n @ContentChildren(ButtonComponent)\n private slottedButtons: QueryList<ButtonComponent>;\n\n ngAfterContentInit() {\n this.enforceAttentionLevelRules();\n\n /* setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when changing attention \n levels of slotted buttons in this.enforceAttentionLevelRules */\n this.slottedButtons.changes.subscribe(() => {\n setTimeout(() => this.enforceAttentionLevelRules());\n });\n }\n\n /** Enforces that all slotted buttons will have their attention\n * level set to 3, except the first button if it has\n * level 1.\n */\n private enforceAttentionLevelRules() {\n this.slottedButtons.forEach((button, index) => {\n if (index === 0 && button.isAttentionLevel1) return;\n\n if (!button.isAttentionLevel3) {\n button.attentionLevel = '3';\n }\n });\n }\n}\n","import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';\nimport { IonRadio } from '@ionic/angular';\n\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\n\n@Component({\n selector: 'kirby-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n})\nexport class RadioComponent {\n @Input()\n value: any;\n\n @HostBinding('class.has-label')\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size?: 'xs' | 'sm' | 'md';\n\n @Input()\n disabled: boolean;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n get buttonTabIndex(): number {\n return this.ionRadioElement ? this.ionRadioElement.nativeElement.tabIndex : -1;\n }\n\n focus() {\n this.ionRadioElement && this.ionRadioElement.nativeElement.focus();\n }\n\n _labelId = UniqueIdGenerator.scopedTo('kirby-radio-label').next();\n\n @ViewChild(IonRadio, { read: ElementRef, static: true })\n private ionRadioElement?: ElementRef<HTMLIonRadioElement>;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\nimport { Component, HostListener, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { ListItemTemplateDirective } from '../../list/list.directive';\nimport { RadioComponent } from '../radio.component';\n\n@Component({\n selector: 'kirby-radio-group',\n templateUrl: './radio-group.component.html',\n styles: ['ion-radio-group { display: inherit; flex-wrap: inherit}'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RadioGroupComponent,\n multi: true,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RadioGroupComponent implements AfterContentInit, ControlValueAccessor {\n constructor(private changeDetectionRef: ChangeDetectorRef) {}\n\n // #region public properties\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Input() set disabled(value: boolean) {\n this._disabled = value;\n this.setProjectedRadiosDisabledState(value);\n }\n\n @HostBinding('class.error') // Used to style radios with error state\n @Input()\n hasError: boolean = false;\n\n get items(): string[] | any[] {\n return this._items || []; // Ensure items return empty array even if set to null/undefined\n }\n\n @Input() set items(value: string[] | any[]) {\n if ((!value || !value.length) && !this.items.length) return; // Nothing changed, no items before or after\n this._items = value;\n this.refreshSelectionState();\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n itemDisabledProperty = 'disabled';\n\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (typeof value === 'string') value = parseInt(value); // Ensure data type number, e.g. when used with template syntax without binding: <... selectedIndex=\"1\"\n if (value === undefined || value === null || value === NaN) value = -1;\n if (value === this.selectedIndex) return;\n this._selectedIndex = value;\n this._value = this.getValueFromSelectedIndex() || null;\n }\n\n get value(): string | any {\n return this._value;\n }\n\n @Input() set value(value: string | any) {\n this.setSelectedItem(value);\n }\n\n private get hasValue(): boolean {\n return this.value !== undefined && this.value !== null;\n }\n\n /**\n * Emitted when an option is selected\n */\n @Output() valueChange: EventEmitter<string | any> = new EventEmitter<string | any>();\n // #endregion public properties\n\n // #region \"protected\" properties used by template\n @ContentChild(ListItemTemplateDirective, { read: TemplateRef })\n _customItemTemplate: TemplateRef<any>;\n // #endregion \"protected\" properties used by template\n\n // #region private fields\n private _disabled = false;\n private _items: string[] | any[] = [];\n private _onChangeCallback: (value: any) => void = () => {};\n private _onTouched = () => {};\n private _selectedIndex: number = -1;\n private _value?: string | any = null;\n @ViewChildren(RadioComponent)\n private radioButtons: QueryList<RadioComponent>;\n @ContentChildren(RadioComponent, { descendants: true })\n private projectedRadioButtons: QueryList<RadioComponent>;\n\n private get hasItemsFromContentProjection(): boolean {\n return (\n !this.items.length &&\n !this._customItemTemplate &&\n this.projectedRadioButtons &&\n this.projectedRadioButtons.length > 0\n );\n }\n\n // #endregion private fields\n\n // #region public methods\n focus() {\n const findFocusable = (radios: QueryList<RadioComponent>) =>\n radios && radios.find((radio) => !isNaN(radio.buttonTabIndex) && radio.buttonTabIndex !== -1);\n const focusable = findFocusable(this.radioButtons) || findFocusable(this.projectedRadioButtons);\n focusable && focusable.focus();\n }\n\n ngAfterContentInit(): void {\n this.initSelectionStateFromProjectedContent();\n this.listenForProjectedRadiosChange();\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.changeDetectionRef.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.changeDetectionRef.markForCheck();\n }\n\n // #endregion public methods\n\n // #region \"protected\" methods used by template\n _getTextFromItem(item: string | any): string {\n if (!item) return null;\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n _getDisabledStateFromItem(item: string | any): boolean {\n if (!item) return undefined;\n return typeof item === 'string' ? undefined : item[this.itemDisabledProperty];\n }\n\n get _hasItems(): boolean {\n return this.items.length > 0 || this.hasItemsFromContentProjection;\n }\n\n _onChange(value: string | any) {\n if (value === this._value) return;\n this.setSelectedItem(value);\n this.valueChange.emit(value);\n this._onChangeCallback(value);\n }\n\n @HostListener('ionBlur')\n _onRadioBlur() {\n this._onTouched();\n }\n\n // #endregion \"protected\" methods used by template\n\n // #region private methods\n private getIndexOfSelectedValue() {\n if (!this.hasValue) return -1;\n return this.hasItemsFromContentProjection\n ? this.getIndexOfProjectedRadio(this.value)\n : this.items.indexOf(this.value);\n }\n\n private getIndexOfProjectedRadio(value: string | any): number {\n let selectedIndex = -1;\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((radio, i) => {\n const found = radio.value === value;\n if (found) {\n selectedIndex = i;\n }\n return found;\n });\n return selectedIndex;\n }\n\n private getValueFromSelectedIndex(): string | any {\n if (this.selectedIndex === -1) return;\n return this.hasItemsFromContentProjection\n ? this.getValueFromProjectedRadios(this.selectedIndex)\n : this.items[this.selectedIndex];\n }\n\n private getValueFromProjectedRadios(index: number): string | any {\n const radio =\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((_, i) => {\n return i === index;\n });\n return radio && radio.value;\n }\n\n private initSelectionStateFromProjectedContent() {\n if (this.hasItemsFromContentProjection) {\n this.refreshSelectionState(); // Initialize selected index and value from projected radios\n }\n }\n\n private listenForProjectedRadiosChange() {\n this.projectedRadioButtons.changes.subscribe(() => {\n this.refreshStateFromProjectedContent();\n\n if (this.disabled) {\n // Ensure disabled state propagates when re-rendering projected radios.\n // setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when updating the DOM in QueryList.changes:\n setTimeout(() => this.setProjectedRadiosDisabledState(this.disabled));\n }\n });\n }\n\n private refreshSelectionState() {\n if (this.hasValue) {\n this._selectedIndex = this.getIndexOfSelectedValue(); // Ensure selectedIndex reflects value within items\n }\n\n const valueFromSelectedIndex = this.getValueFromSelectedIndex();\n this._value = valueFromSelectedIndex !== undefined ? valueFromSelectedIndex : null;\n }\n\n private refreshStateFromProjectedContent() {\n if (!!this._customItemTemplate) return; // Only refresh on changes to projected content, not when re-rendering custom template\n this.changeDetectionRef.markForCheck(); // Ensure changes to projected content gets checked in next change detection cycle\n this.refreshSelectionState(); // Sync selected index and value from projected radios\n }\n\n private setSelectedItem(value: string | any) {\n if (value === this._value) return; // Nothing changed\n this._value = value;\n this._selectedIndex = this.getIndexOfSelectedValue();\n }\n\n private setProjectedRadiosDisabledState(isDisabled: boolean) {\n if (!this.projectedRadioButtons || !this.projectedRadioButtons.length) return;\n this.projectedRadioButtons.forEach((radio, index) => {\n // Disable all radios when group is disabled, otherwise fall back to each item's disabled state, if defined:\n radio.disabled = isDisabled || this._getDisabledStateFromItem(this.items[index]);\n });\n }\n\n // #endregion private methods\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { InputComponent } from '../input/input.component';\n\nimport { TextareaComponent } from './../textarea/textarea.component';\n\n@Component({\n selector: 'kirby-input-counter',\n templateUrl: './input-counter.component.html',\n})\nexport class InputCounterComponent implements OnInit, OnDestroy {\n @Input() listenTo: InputComponent | TextareaComponent;\n length: number;\n maxlength: number;\n private _inputChangeSubscription: Subscription;\n\n get text(): string {\n if (this.length === undefined) {\n return undefined;\n }\n const ofMaxlength = this.maxlength ? `/${this.maxlength}` : '';\n return `${this.length}${ofMaxlength}`;\n }\n\n ngOnInit(): void {\n if (this.listenTo) {\n this.length = this.listenTo.value ? this.listenTo.value.length : 0;\n this.maxlength = this.listenTo.maxlength;\n this._inputChangeSubscription = this.listenTo.kirbyChange.subscribe((value) => {\n this.length = value.length;\n });\n }\n }\n\n ngOnDestroy(): void {\n if (this._inputChangeSubscription) {\n this._inputChangeSubscription.unsubscribe();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\n\nexport enum InputSize {\n medium = 'md',\n large = 'lg',\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:component-selector\n selector: 'input[kirby-input]',\n styleUrls: ['./input.component.scss'],\n template: '',\n})\nexport class InputComponent implements OnChanges {\n private static typeToInputmodeMap = {\n number: 'decimal',\n search: 'search',\n };\n\n kirbyChange = new EventEmitter<string>();\n\n @Input() set type(value: string) {\n const mappedValue = InputComponent.typeToInputmodeMap[value];\n if (mappedValue && !this.inputmode) {\n this.inputmode = mappedValue;\n }\n }\n\n @HostBinding('class')\n @Input()\n size: InputSize | `${InputSize}` = InputSize.large;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.value')\n @Input()\n value: string;\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostBinding('attr.inputmode')\n @Input()\n inputmode: string;\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of input element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n HostBinding,\n EventEmitter,\n HostListener,\n SimpleChanges,\n OnChanges,\n} from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n // tslint:disable-next-line:component-selector\n selector: 'textarea[kirby-textarea]',\n styleUrls: ['./textarea.component.scss'],\n templateUrl: './textarea.component.html',\n})\nexport class TextareaComponent implements OnChanges {\n kirbyChange = new EventEmitter<string>();\n\n @Input() value: string;\n\n /**\n * Removes padding, width, rounded borders and drop-shadow when set to `true`.\n */\n @HostBinding('class.borderless')\n @Input()\n borderless: boolean;\n\n @HostBinding('class.error')\n @Input()\n hasError: boolean;\n\n @HostBinding('attr.autocomplete')\n @Input()\n autocomplete: 'on' | 'off' = 'off';\n\n @HostBinding('attr.autocorrect')\n @Input()\n autocorrect: 'on' | 'off' = 'off';\n\n @HostBinding('attr.maxlength')\n @Input()\n maxlength: number;\n\n @HostListener('keyup', ['$event.target.value'])\n _onKeyUp(value: string) {\n this.kirbyChange.emit(value);\n }\n\n @HostListener('paste', ['$event.target'])\n @HostListener('cut', ['$event.target'])\n _onCutPaste(target: HTMLInputElement) {\n //Value of textarea element is updated after cut/paste:\n setTimeout(() => this.kirbyChange.emit(target.value));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n this.kirbyChange.emit(changes.value.currentValue);\n }\n }\n}\n","import {\n AfterContentChecked,\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { PlatformService } from '../../helpers/platform.service';\nimport { UniqueIdGenerator } from '../../helpers/unique-id-generator.helper';\nimport { WindowRef } from '../../types/window-ref';\nimport { RadioGroupComponent } from '../radio/radio-group/radio-group.component';\n\nimport { InputCounterComponent } from './input-counter/input-counter.component';\nimport { InputComponent } from './input/input.component';\nimport { TextareaComponent } from './textarea/textarea.component';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field',\n styleUrls: ['./form-field.component.scss'],\n templateUrl: './form-field.component.html',\n})\nexport class FormFieldComponent\n implements AfterContentChecked, AfterContentInit, OnInit, OnDestroy\n{\n private isRegistered = false;\n private element: HTMLElement;\n private inputElement: HTMLInputElement | HTMLTextAreaElement;\n private isTouch: boolean;\n _labelId = UniqueIdGenerator.scopedTo('kirby-form-field-label').next();\n\n @Input() label: string;\n @Input() message: string;\n\n @ContentChild(InputCounterComponent, { static: false }) counter: InputCounterComponent;\n @ContentChild(RadioGroupComponent) private radioGroupComponent: RadioGroupComponent;\n @ContentChild(RadioGroupComponent, { read: ElementRef })\n private radioGroupElement: ElementRef<HTMLElement>;\n\n @ContentChild(InputComponent, { read: ElementRef }) input: ElementRef<HTMLInputElement>;\n @ContentChild(TextareaComponent, { read: ElementRef }) textarea: ElementRef<HTMLTextAreaElement>;\n\n constructor(\n elementRef: ElementRef<HTMLElement>,\n private platform: PlatformService,\n private renderer: Renderer2,\n private windowRef: WindowRef\n ) {\n this.element = elementRef.nativeElement;\n }\n\n get _wrapContentInLabel(): boolean {\n return !!this.label && (!!this.input || !!this.textarea);\n }\n\n private dispatchLoadEvent() {\n // Dispatch an `ionInputDidLoad` event to register\n // form field + input/textarea with Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidLoad', {\n detail: this.element,\n })\n );\n }\n\n @HostListener('kirbyRegisterFormField')\n _onRegisterFormField() {\n this.dispatchLoadEvent();\n }\n\n onLabelClick() {\n this.radioGroupComponent && this.radioGroupComponent.focus();\n }\n\n public focus() {\n if (!this.inputElement) return;\n\n if (this.isTouch) {\n // Trigger Ionic's input shims to ensure input is scrolled into view.\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/hacks/scroll-assist.ts\n const touchStart = new TouchEvent('touchstart');\n const touchEnd = new TouchEvent('touchend');\n this.inputElement.dispatchEvent(touchStart);\n this.inputElement.dispatchEvent(touchEnd);\n } else {\n this.inputElement.focus();\n }\n }\n\n ngOnInit() {\n this.isTouch = this.platform.isTouch();\n }\n\n ngAfterContentInit(): void {\n if (this.label && this.radioGroupElement) {\n this.renderer.setAttribute(\n this.radioGroupElement.nativeElement,\n 'aria-labelledby',\n this._labelId\n );\n }\n }\n\n ngAfterContentChecked(): void {\n if (!this.inputElement) {\n this.inputElement = this.element.querySelector('input, textarea');\n }\n\n // TODO: remove \"!this.inputElement.readOnly\" when ionic has fixed input click issue\n // https://github.com/ionic-team/ionic-framework/issues/22740\n if (\n !this.isRegistered &&\n this.element.isConnected &&\n !!this.inputElement &&\n !this.inputElement.readOnly\n ) {\n // Host is connected to dom and slotted input/textarea is present:\n this.isRegistered = true;\n this.dispatchLoadEvent();\n }\n }\n\n ngOnDestroy(): void {\n // Dispatch an `ionInputDidUnload` event to unregister\n // form field + input/textarea from Ionic input shims\n // See: https://github.com/ionic-team/ionic-framework/blob/master/core/src/utils/input-shims/input-shims.ts\n this.windowRef.nativeWindow.document.dispatchEvent(\n new CustomEvent('ionInputDidUnload', {\n detail: this.element,\n })\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kirby-form-field-message',\n styleUrls: ['./form-field-message.component.scss'],\n templateUrl: './form-field-message.component.html',\n})\nexport class FormFieldMessageComponent {\n @Input() text: string;\n @Input() position: 'left' | 'right' = 'left';\n}\n","import { FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n LOCALE_ID,\n Renderer2,\n} from '@angular/core';\nimport 'inputmask/lib/extensions/inputmask.date.extensions';\nimport Inputmask from 'inputmask/lib/inputmask';\n\n@Directive({\n selector: '[kirby-input][type=\"date\"]',\n})\nexport class DateInputDirective implements AfterViewInit {\n @HostListener('input')\n onInput() {\n this.updateMask(this.elementRef.nativeElement.value);\n }\n\n private maskingElement: HTMLElement;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Inject(LOCALE_ID) private locale: string\n ) {\n // Remove type to avoid user-agent specific behaviour for [type=\"date\"]\n this.elementRef.nativeElement.removeAttribute('type');\n }\n\n ngAfterViewInit(): void {\n this.initMask();\n }\n\n private initMask(): void {\n const inputFormat = this.getInputFormat();\n const placeholder = this.getPlaceholder(inputFormat);\n\n // Set initial placeholder ex. dd/mm/yyyy\n this.renderer.setAttribute(this.elementRef.nativeElement, 'placeholder', placeholder);\n\n // Init InputMask\n new Inputmask('datetime', {\n inputFormat,\n placeholder,\n }).mask(this.elementRef.nativeElement);\n\n // Append input overlay, so it's possible to style typed date differntly than the date-mask\n this.appendMaskingElement();\n }\n\n // Keeps order and seperator from speficied locale\n private getInputFormat(): string {\n const localeDateFormat = getLocaleDateFormat(this.locale, FormatWidth.Short);\n return localeDateFormat\n .toLowerCase()\n .replace(/d+/, 'dd')\n .replace(/m+/, 'mm')\n .replace(/y+/, 'yyyy');\n }\n\n private getPlaceholder(inputFormat: string): string {\n return this.locale === 'da' ? inputFormat.split('y').join('å') : inputFormat;\n }\n\n private appendMaskingElement(): void {\n const wrapper = this.wrapElement(this.elementRef.nativeElement);\n this.renderer.addClass(wrapper, 'date-mask-wrapper');\n\n this.maskingElement = this.renderer.createElement('div');\n this.renderer.appendChild(wrapper, this.maskingElement);\n\n this.renderer.addClass(this.maskingElement, 'date-mask');\n }\n\n private wrapElement(element: HTMLElement): HTMLElement {\n const wrapper = this.renderer.createElement('div');\n const parent = element.parentElement;\n this.renderer.insertBefore(parent, wrapper, element);\n this.renderer.appendChild(wrapper, element);\n return wrapper;\n }\n\n private updateMask(value: string): void {\n if (!this.maskingElement) return;\n const lastNumber = value.match(/.*?(\\d)[^\\d]*$/); // get last number in string\n this.maskingElement.innerHTML = value\n ? value.slice(0, value.lastIndexOf(lastNumber[1]) + 1)\n : '';\n }\n}\n","import { getLocaleNumberSymbol, NumberSymbol } from '@angular/common';\nimport { Directive, ElementRef, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport 'inputmask/lib/extensions/inputmask.numeric.extensions';\nimport Inputmask from 'inputmask/lib/inputmask';\n\ninterface InputMask {\n unmaskedvalue: () => string;\n setValue: (val: string) => void;\n}\n\n@Directive({\n // tslint:disable-next-line\n selector: '[kirby-decimal-mask]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: DecimalMaskDirective,\n },\n ],\n})\nexport class DecimalMaskDirective implements ControlValueAccessor, OnInit {\n @Input() min: number;\n @Input() max: number;\n @Input() precision = 2;\n @Input() setMaxOnOverflow = false;\n\n @Input() set allowMinus(allowMinus: boolean) {\n this._allowMinus = allowMinus || (this.min || 0) < 0;\n }\n\n @Input() set disableGroupSeperator(disabled: string) {\n this._groupSeperatorDisabled = String(disabled) === '' || String(disabled) === 'true';\n }\n\n @Input() set maxlength(maxlength: number) {\n this._maxlength = maxlength;\n\n const maxlengthValue = parseInt('9'.repeat(maxlength));\n this.max = this.getMax(maxlengthValue);\n this.min = this.getMin(maxlengthValue);\n }\n\n groupSeparator = getLocaleNumberSymbol(this.locale, NumberSymbol.Group);\n radixPoint = getLocaleNumberSymbol(this.locale, NumberSymbol.Decimal);\n inputmask: InputMask;\n\n _allowMinus = false;\n _maxlength: number;\n _groupSeperatorDisabled: boolean;\n\n onChange = (_: string) => {};\n\n constructor(private elementRef: ElementRef, @Inject(LOCALE_ID) private locale: string) {}\n\n ngOnInit(): void {\n // Set type=\"text\", because functionality like 'setSelectionRange' are not supported on type=\"number\"\n this.elementRef.nativeElement.setAttribute('type', 'text');\n\n // Remove maxlength as this is handled by the mask\n this.elementRef.nativeElement.removeAttribute('maxlength');\n\n this.initMask();\n }\n\n writeValue(val: number): void {\n if (!this.inputmask) return;\n const formattedValue = String(val).replace('.', this.radixPoint);\n this.inputmask.setValue(formattedValue);\n }\n\n registerOnChange(onChange: any): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(_: any): void {}\n\n private initMask(): void {\n new Inputmask('decimal', {\n groupSeparator: this._groupSeperatorDisabled ? '' : this.groupSeparator,\n radixPoint: this.radixPoint,\n digits: this._maxlength ? 0 : this.precision,\n min: this.min,\n max: this.max,\n allowMinus: this._allowMinus,\n negationSymbol: {\n front: getLocaleNumberSymbol(this.locale, NumberSymbol.MinusSign),\n back: '',\n },\n SetMaxOnOverflow: this.setMaxOnOverflow,\n showMaskOnFocus: false,\n showMaskOnHover: false,\n placeholder: '',\n onBeforeWrite: () => {\n if (!this.inputmask) return;\n const unmaskedValue = this.inputmask.unmaskedvalue();\n this.onChange(unmaskedValue.replace(this.radixPoint, '.'));\n },\n }).mask(this.elementRef.nativeElement);\n this.inputmask = this.elementRef.nativeElement.inputmask;\n }\n\n private getMax(maxlengthValue: number): number {\n return this.max === undefined ? maxlengthValue : Math.min(this.max, maxlengthValue);\n }\n\n private getMin(maxlengthValue: number): number {\n if (!this.allowMinus) return;\n maxlengthValue = -Math.abs(maxlengthValue);\n return this.min === undefined ? maxlengthValue : -Math.abs(Math.max(this.min, maxlengthValue));\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ElementRef,\n HostBinding,\n Inject,\n Input,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { IonFab, IonFabButton, IonIcon } from '@ionic/angular';\n\nimport { Icon } from '../icon/icon-settings';\nimport { kirbyIconSettings } from '../icon/kirby-icon-settings';\nimport { ActionSheetComponent } from '../modal/action-sheet/action-sheet.component';\n\n@Component({\n selector: 'kirby-fab-sheet',\n templateUrl: './fab-sheet.component.html',\n styleUrls: ['./fab-sheet.component.scss'],\n})\nexport class FabSheetComponent implements AfterContentInit, AfterViewInit {\n @Input() disabled: boolean = false;\n @Input() horizontalAlignment: 'left' | 'center' | 'right' = 'right';\n\n private _isFabSheetOpen: boolean = false;\n @HostBinding('class.is-open')\n get isFabSheetOpen() {\n return this._isFabSheetOpen;\n }\n\n private _isBackdropVisible: boolean = false;\n @HostBinding('class.backdrop-visible')\n get isBackdropVisible() {\n return this._isBackdropVisible;\n }\n\n @ContentChild(ActionSheetComponent, { static: false }) actionSheet: ActionSheetComponent;\n\n @ViewChild(IonFabButton, { static: true, read: ElementRef })\n ionFabButton: ElementRef<HTMLElement>;\n\n constructor(private renderer: Renderer2, @Inject(DOCUMENT) private document: any) {}\n\n ngAfterViewInit(): void {\n const kirbyCloseIcon = kirbyIconSettings.icons.find((icon) => icon.name === 'close');\n this.setCloseIcon(kirbyCloseIcon);\n }\n\n private setCloseIcon(kirbyCloseIcon: Icon, retryCount = 0) {\n const maxRetryCount = 20;\n const retryDelayInMs = 20;\n const fabButtonElement = this.ionFabButton.nativeElement;\n if (!fabButtonElement || !kirbyCloseIcon || retryCount >= maxRetryCount) {\n return;\n }\n if (fabButtonElement.shadowRoot && fabButtonElement.shadowRoot.innerHTML) {\n const closeIcon = fabButtonElement.shadowRoot.querySelector('.close-icon ion-icon');\n if (closeIcon) {\n const closeIconSvgLoaded = closeIcon.shadowRoot.querySelector('.icon-inner svg');\n // prettier-ignore\n const ionCloseIcon = (closeIcon as unknown) as IonIcon;\n if (ionCloseIcon && closeIconSvgLoaded) {\n ionCloseIcon.src = kirbyCloseIcon.svg;\n return;\n }\n }\n }\n retryCount++;\n setTimeout(() => this.setCloseIcon(kirbyCloseIcon, retryCount), retryDelayInMs);\n }\n\n ngAfterContentInit(): void {\n if (this.actionSheet) {\n this.actionSheet.hideCancel = true;\n }\n }\n\n hideActions(fab: IonFab) {\n fab.close();\n this._isFabSheetOpen = false;\n this._isBackdropVisible = false;\n this.renderer.removeClass(this.document.body, 'fab-sheet-active');\n }\n\n onFabClick(fab: IonFab) {\n this._isFabSheetOpen = !fab.activated;\n if (this._isFabSheetOpen) {\n this.renderer.addClass(this.document.body, 'fab-sheet-active');\n } else {\n this.renderer.removeClass(this.document.body, 'fab-sheet-active');\n }\n setTimeout(() => (this._isBackdropVisible = this.isFabSheetOpen));\n }\n}\n","// TODO TRM/JEO Parse from scss files instead!!1!!\nexport class ScssHelper {\n // Breakpoints\n public static BREAKPOINT_SCREEN_L = 720;\n public static BREAKPOINT_CARD_S = 320;\n public static BREAKPOINT_CARD_M = 460;\n public static BREAKPOINT_CARD_L = 820;\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BreakpointHelperService implements OnDestroy {\n currentScreenWidth: 800;\n private orientationChangedSubject = new Subject<void>();\n\n constructor() {\n this.init();\n }\n\n private init() {\n // TODO JEO: Implement Angular/CDK BreakpointObserver:\n this.orientationChangedSubject.next();\n }\n\n observe(): Observable<void> {\n return this.orientationChangedSubject.asObservable();\n }\n\n ngOnDestroy() {\n this.orientationChangedSubject.complete();\n }\n}\n","import { Component, OnInit, Input, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ScssHelper } from '../../scss/scss-helper';\nimport { BreakpointHelperService } from './breakpoint-helper.service';\nimport { GridCardConfiguration } from './grid-card-configuration';\n\nclass GridCard {\n configuration: GridCardConfiguration;\n row: number;\n col: number;\n colSpan: number;\n\n constructor(configuration: GridCardConfiguration, row: number, col: number, colSpan: number) {\n this.configuration = configuration;\n this.row = row;\n this.col = col;\n this.colSpan = colSpan;\n }\n}\n\n@Component({\n selector: 'kirby-grid',\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss'],\n // tslint:disable-next-line\n host: { '[attr.max-columns]': 'maxColumns' },\n})\nexport class GridComponent implements OnInit, OnDestroy {\n cardConfigs: GridCardConfiguration[];\n cards: GridCard[] = [];\n private breakpointSubscription: Subscription;\n\n @Input() maxColumns: number;\n\n @Input()\n set cardConfigurations(cardConfigurations: GridCardConfiguration[]) {\n this.cardConfigs = cardConfigurations;\n // TODO TRM/JEO Remove this when breakpoint observe something something...\n this.configureGrid();\n }\n\n constructor(private breakpointHelper: BreakpointHelperService) {}\n\n configureGrid() {\n let calculatedMaxColumns = 0;\n if (this.maxColumns === undefined) {\n calculatedMaxColumns =\n this.breakpointHelper.currentScreenWidth >= ScssHelper.BREAKPOINT_SCREEN_L ? 2 : 1;\n } else {\n calculatedMaxColumns = this.maxColumns;\n }\n this.cards = [];\n let columnCounter = 0;\n let currentRow = 0;\n let currentColumn = 0;\n\n this.cardConfigs.forEach((card, index) => {\n // Cards colspan is added to the column counter\n columnCounter += card.preferredSize;\n // If only maxColumns are set to 1, just add all cards with a colspan of 1\n if (calculatedMaxColumns === 1) {\n this.cards.push(new GridCard(card, currentRow, currentColumn, 1));\n currentRow += 1;\n return;\n }\n // If we are below maxColumns, then add the card to the array\n if (columnCounter <= calculatedMaxColumns) {\n this.cards.push(new GridCard(card, currentRow, currentColumn, card.preferredSize));\n // Update currentColumn, so the next card will be placed correctly\n currentColumn += card.preferredSize;\n } else {\n // The new card didn't fit - Calculate remaining columns for previous card\n const restColumns = calculatedMaxColumns - (columnCounter - card.preferredSize);\n const prevCard = this.cards[index - 1];\n // Add the restColumns to the previous cards colspan, to make it span out\n prevCard.colSpan = restColumns + prevCard.colSpan;\n // We are now on a new row\n currentRow += 1;\n currentColumn = 0;\n this.cards.push(new GridCard(card, currentRow, currentColumn, card.preferredSize));\n // Update currentColumn to match the size of the new card and reset columnCounter\n currentColumn = card.preferredSize;\n columnCounter = card.preferredSize;\n }\n // If we on the last card, make sure it spans all the rest of the columns\n if (this.cardConfigs.length - 1 === index) {\n const restColumns = calculatedMaxColumns - columnCounter;\n const currentCard = this.cards[index];\n currentCard.colSpan += restColumns;\n }\n });\n }\n\n ngOnInit() {\n // this.breakpointSubscription = this.breakpointHelper.observe().subscribe(() => {\n // this.configureGrid();\n // });\n }\n\n ngOnDestroy() {\n if (this.breakpointSubscription) {\n this.breakpointSubscription.unsubscribe();\n }\n }\n}\n","import { Type } from '@angular/core';\n\nimport { ComponentConfiguration } from '../shared/component-configuration';\n\nexport class GridCardConfiguration implements ComponentConfiguration {\n constructor(public component: Type<any>, public data: any, public preferredSize: number) {}\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { IconComponent } from './icon.component';\n\n@NgModule({\n imports: [IonicModule],\n declarations: [IconComponent],\n exports: [IconComponent],\n})\nexport class IconModule {}\n","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-label',\n templateUrl: './label.component.html',\n styleUrls: ['./label.component.scss'],\n})\nexport class LabelComponent {\n @Input()\n direction: 'vertical' | 'horizontal' = 'vertical';\n\n @HostBinding('class.horizontal')\n get _direction() {\n return this.direction === 'horizontal';\n }\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { CommonModule } from '@angular/common';\n\nimport { IconModule } from '../icon/icon.module';\nimport { ItemComponent } from './item.component';\nimport { LabelComponent } from './label/label.component';\n\n@NgModule({\n imports: [IonicModule, IconModule, CommonModule],\n declarations: [ItemComponent, LabelComponent],\n exports: [ItemComponent, LabelComponent],\n})\nexport class ItemModule {}\n","import { Component, HostBinding } from '@angular/core';\n\n@Component({\n selector: 'kirby-item-group',\n templateUrl: './item-group.component.html',\n styleUrls: ['./item-group.component.scss'],\n})\nexport class ItemGroupComponent {\n @HostBinding('attr.role') role: string = 'group';\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n})\nexport class SpinnerComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { ComponentFactoryResolver, Injectable, Injector } from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\n\nimport { SpinnerComponent } from '../spinner/spinner.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoadingOverlayService {\n private ionLoading: HTMLIonLoadingElement = null;\n\n constructor(\n private loadingController: LoadingController,\n private componentFactoryResolver: ComponentFactoryResolver,\n private injector: Injector\n ) {}\n\n public async showLoadingOverlay(showBackdrop: boolean = true): Promise<void> {\n if (!this.ionLoading) {\n this.ionLoading = await this.loadingController.create({\n cssClass: 'kirby-loading-overlay',\n duration: 0,\n message: null,\n showBackdrop: showBackdrop,\n spinner: null,\n });\n\n const loadingWrapper = this.ionLoading.querySelector('.loading-wrapper');\n const kirbySpinner = document.createElement('kirby-spinner');\n const factory = this.componentFactoryResolver.resolveComponentFactory(SpinnerComponent);\n factory.create(this.injector, [], kirbySpinner);\n loadingWrapper.appendChild(kirbySpinner);\n\n await this.ionLoading.present();\n }\n }\n\n public async hideLoadingOverlay(): Promise<void> {\n if (!!this.ionLoading) {\n await this.ionLoading.dismiss();\n this.ionLoading = null;\n }\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-loading-overlay',\n templateUrl: './loading-overlay.component.html',\n styleUrls: ['./loading-overlay.component.scss'],\n})\nexport class LoadingOverlayComponent {\n @Input() public isLoading = true;\n @Input() public showBackdrop = true;\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnDestroy,\n Output,\n} from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, filter, map, takeUntil } from 'rxjs/operators';\n\nimport { WindowRef } from '../../../types/window-ref';\n\nimport { Scroll } from './scroll.model';\n\n/**\n * Specify debounce duration in ms\n */\nexport const INFINITE_SCROLL_DEBOUNCE = 100;\n\n@Directive({\n selector: '[kirbyInfiniteScroll]',\n})\nexport class InfiniteScrollDirective implements AfterViewInit, OnDestroy {\n /**\n * Event that will be triggered when the user has scrolled to\n * bottom of the element\n */\n @Output() scrollEnd = new EventEmitter<void>();\n\n /**\n * If true then {@link scrollEnd} event should NOT be emitted\n */\n @Input() disabled = false;\n\n /**\n * Emits a new value on element scroll event\n */\n scroll$: Subject<Scroll> = new Subject<Scroll>();\n\n /**\n * Completes on component destroy lifecycle event\n * used to unsubscribe from infinite observables\n */\n private ngUnsubscribe$ = new Subject<void>();\n\n /**\n * An offset from the bottom of the element to trigger {@link scrollEnd} event\n */\n private offset = 0.8;\n\n constructor(private elementRef: ElementRef, private windowRef: WindowRef, private zone: NgZone) {}\n\n ngAfterViewInit(): void {\n /**\n * Subscribe to {@link scroll$} observable and emit {@link scrollEnd} event\n * when element scroll position has surpassed the offset.\n */\n this.scroll$\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n this.scrollEnd.emit();\n });\n\n /**\n * Subscribe to the ionScroll event on the ion-content around the list (if any)\n * and emit {@link scrollEnd} event when element scroll position has surpassed the offset.\n */\n setTimeout(() => {\n const ionContent: HTMLElement = this.elementRef.nativeElement.closest('ion-content');\n if (ionContent) {\n // we run the 'ionScroll' event outside angular, as it would trigger change detection on each scroll\n this.zone.runOutsideAngular(() => {\n fromEvent<any>(ionContent, 'ionScroll')\n .pipe(\n takeUntil(this.ngUnsubscribe$),\n debounceTime(INFINITE_SCROLL_DEBOUNCE),\n filter(() => !this.disabled),\n map(() => this.getScroll()),\n filter((scroll) => {\n return (\n scroll.elementHeight * (1 - this.offset) >=\n scroll.distanceToViewBottom - scroll.viewHeight\n );\n })\n )\n .subscribe(() => {\n // we make sure to emit the event inside angular again. As we want to show the spinner and need change detection for that.\n this.zone.run(() => this.scrollEnd.emit());\n });\n });\n }\n });\n }\n\n /**\n * On element scroll event emit next {@link scroll$} observable value\n */\n @HostListener('window:scroll')\n onScroll(): void {\n if (this.disabled) return;\n const scroll = this.getScroll();\n this.scroll$.next(scroll);\n }\n\n /**\n * trigger {@link ngUnsubscribe} complete on component destroy lifecycle hook\n */\n ngOnDestroy(): void {\n this.ngUnsubscribe$.next();\n this.ngUnsubscribe$.complete();\n }\n\n private getScroll(): Scroll {\n const element = this.elementRef.nativeElement as HTMLElement;\n const boundindClientRect = element.getBoundingClientRect();\n\n const distanceToViewBottom = boundindClientRect.bottom;\n const elementHeight = boundindClientRect.height;\n const viewHeight = this.windowRef.nativeWindow.innerHeight;\n\n return { distanceToViewBottom, elementHeight, viewHeight };\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ListComponent } from '../list.component';\nimport { LoadOnDemandEventData } from '../list.event';\n\n@Injectable()\nexport class ListHelper {\n onLoadOnDemand(component: ListComponent, _event: LoadOnDemandEventData) {\n if (component.isLoadOnDemandEnabled && !component._isLoading) {\n component._isLoading = true;\n component.loadOnDemand.emit({\n complete: (disableLoadOnDemand: boolean) => {\n component.isLoadOnDemandEnabled = !disableLoadOnDemand;\n component._isLoading = false;\n },\n });\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'groupBy',\n})\nexport class GroupByPipe implements PipeTransform {\n transform(items: any[], getGroupName?: (item: any) => string): any[] {\n if (!items) {\n return null;\n }\n if (!getGroupName) {\n return items;\n }\n\n const groupsMap = new Map<string, any[]>();\n\n items.forEach((item: any) => {\n const itemGroup = getGroupName(item);\n const groupItems = groupsMap.get(itemGroup);\n\n if (groupItems) {\n groupItems.push(item);\n } else {\n groupsMap.set(itemGroup, [item]);\n }\n });\n\n return Array.from(groupsMap)\n .sort(([name], [otherName]) => name.localeCompare(otherName))\n .map(([name, items]) => {\n return { name, items };\n });\n }\n}\n","import {\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n TemplateRef,\n TrackByFunction,\n ViewChild,\n} from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { ItemComponent } from '../item/item.component';\n\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListHelper } from './helpers/list-helper';\nimport { BoundaryClass } from './list-item/list-item.component';\nimport { ListSwipeAction } from './list-swipe-action.type';\nimport {\n ListFooterDirective,\n ListHeaderDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\nimport { LoadOnDemandEvent, LoadOnDemandEventData } from './list.event';\nimport { GroupByPipe } from './pipes/group-by.pipe';\n\nexport type ListShape = 'square' | 'rounded' | 'none';\n\n@Component({\n selector: 'kirby-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n providers: [ListHelper, GroupByPipe],\n})\nexport class ListComponent implements OnInit, AfterViewInit, OnChanges {\n @ViewChild('list', { static: true }) list: any;\n @ViewChild(InfiniteScrollDirective) scrollDirective: InfiniteScrollDirective;\n\n /**\n * Provide items for the list to render. Items must be provided in the order you expect them to be rendered.\n */\n @Input()\n items: any[] = [];\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n /**\n * Callback to determine name of section. Sections will be ordered alphabetically.\n */\n @Input() getSectionName: (item: any) => string;\n\n /**\n * Callback that defines how to track changes for items in the iterable.\n */\n @Input() trackBy: TrackByFunction<any>;\n\n /**\n * Text to display when no more items can be loaded (used for \"on demand\"-loading).\n */\n @Input() noMoreItemsText: string;\n\n /**\n * Determines if dividers (bottom-border on list items) should be shown or not.\n */\n @Input() showDivider = false;\n\n /**\n * Determines if list row text should turn bold on selection\n */\n @Input() markSelectedRow = false;\n\n /**\n * Determine outline shape of:\n * - list, if {@link #isSectionsEnabled} is `false`\n * - section, if {@link #isSectionsEnabled} is `true`\n *\n * `square` means **without** rounded corners, `rounded` means **with** rounded corners., `none` means **without** padding, border, box-shadow and background.\n */\n @Input() shape: ListShape = 'rounded';\n\n @HostBinding('class.shape-rounded')\n public get isShapeRounded(): boolean {\n return this.shape === 'rounded';\n }\n\n @HostBinding('class.shape-none')\n public get isShapeNone(): boolean {\n return this.shape === 'none';\n }\n\n @HostBinding('class.item-spacing')\n @Input()\n hasItemSpacing: boolean;\n\n /**\n * Determines if the loadOnDemand event should be emitted.\n * Will default to true if there is at least one subscriber to the loadOnDemand event\n */\n @Input() isLoadOnDemandEnabled: boolean;\n\n /**\n * Emitting event when more items are to be loaded.\n */\n @Output() loadOnDemand = new EventEmitter<LoadOnDemandEvent>();\n\n /**\n * Determines if list items should have swipe actions or not\n * - the order of swipe actions is used to determine edge actions,\n * as well as their order of appearance on the screen.\n */\n @Input() swipeActions: ListSwipeAction[] = [];\n\n /**\n * Emitting event when an item is selected (tapped on mobile, clicked on web)\n */\n @Output() itemSelect = new EventEmitter<any>();\n\n @Input() disableSelectionHighlight: boolean = false;\n\n @ContentChildren(ItemComponent)\n kirbyItems: ItemComponent[];\n\n @ContentChild(ListHeaderDirective, { static: false, read: TemplateRef })\n headerTemplate: TemplateRef<any>;\n\n @ContentChild(ListSectionHeaderDirective, { static: false, read: TemplateRef })\n sectionHeaderTemplate: TemplateRef<any>;\n\n @ContentChild(ListFooterDirective, { static: false, read: TemplateRef })\n footerTemplate: TemplateRef<any>;\n\n /**\n * The first element that matches ListItemDirective.\n * As a structural directive it unfolds into a template. This is a reference to that.\n */\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n\n @HostBinding('class.has-sections') _isSectionsEnabled: boolean;\n\n _isSelectable: boolean;\n _isLoading: boolean;\n _groupedItems: any[];\n _selectedItem: any;\n\n constructor(private listHelper: ListHelper, private groupBy: GroupByPipe) {}\n\n ngOnInit() {\n this._isSelectable = this.itemSelect.observers.length > 0;\n\n if (this.isLoadOnDemandEnabled === undefined) {\n this.isLoadOnDemandEnabled = this.loadOnDemand.observers.length > 0;\n }\n }\n\n ngAfterViewInit(): void {\n if (this._isSelectable) {\n setTimeout(() => {\n this.kirbyItems.forEach((item) => {\n item.selectable = true;\n });\n });\n }\n }\n\n ngOnChanges(): void {\n this._isSectionsEnabled = !!this.getSectionName;\n this._groupedItems = this._isSectionsEnabled\n ? this.groupBy.transform(this.items, this.getSectionName)\n : null;\n }\n\n _onLoadOnDemand(event?: LoadOnDemandEventData) {\n this.listHelper.onLoadOnDemand(this, event);\n }\n\n defaultTrackBy(index: number): any {\n return index;\n }\n\n sectionTrackBy(_: number, section: { name: string }): string {\n return section.name;\n }\n\n onItemSelect(item: any) {\n if (!this.disableSelectionHighlight) {\n this._selectedItem = item;\n }\n this.itemSelect.emit(item);\n }\n\n onSwipeActionSelect(args: any): void {\n args.swipeAction.onSelected(args.item);\n this.list.closeSlidingItems();\n args.event.stopPropagation();\n }\n\n _getBoundaryClass(index: number, section?: any[]): BoundaryClass {\n let _items = section || this.items;\n\n if (index === 0 || _items[index - 1]?.headingName) return this.headerTemplate ? null : 'first';\n\n if (index === _items.length - 1 || _items[index + 1]?.headingName)\n return this.footerTemplate ? null : 'last';\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-header',\n templateUrl: './list-header.component.html',\n styleUrls: ['./list-header.component.scss'],\n})\nexport class ListHeaderComponent {\n constructor() {}\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'kirby-list-section-header',\n templateUrl: './list-section-header.component.html',\n})\nexport class ListSectionHeaderComponent implements OnInit {\n @Input() title: string;\n constructor() {}\n\n ngOnInit() {}\n}\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonItemSliding } from '@ionic/angular';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\nimport { PlatformService } from '../../../helpers/platform.service';\nimport { ListSwipeAction, ListSwipeDirection, ListSwipeEnd } from '../list-swipe-action.type';\n\nexport type BoundaryClass = 'first' | 'last';\n\n@Component({\n selector: 'kirby-list-item',\n templateUrl: './list-item.component.html',\n styleUrls: ['../list.component.scss', './list-item.component.scss'],\n})\nexport class ListItemComponent implements OnInit, AfterViewInit {\n _isSwipingEnabled = false;\n\n constructor(private platform: PlatformService) {\n this.initializeSwipeActions();\n }\n\n @ViewChild(IonItemSliding) ionItemSliding: IonItemSliding;\n\n @Input() item: any;\n\n @Input() boundaryClass: BoundaryClass;\n\n @Input() swipeActions: ListSwipeAction[] = [];\n\n @Input() itemTemplate: TemplateRef<any>;\n\n @Input() isSelected: boolean;\n\n @Input() isSelectable: boolean;\n\n @Input() getItemColor: (item: any) => ThemeColor;\n\n @Output() itemSelect = new EventEmitter<any>();\n\n _onItemSelect(item: any) {\n if (!this.isSelectable) return;\n this.itemSelect.emit(item);\n }\n\n @Output() swipeActionSelect = new EventEmitter<any>();\n\n _onSwipeActionSelect(swipeAction, item, event) {\n this.swipeActionSelect.emit({\n swipeAction,\n item,\n event,\n });\n }\n\n ngOnInit() {\n this.initializeSwipeActions();\n }\n\n ngAfterViewInit(): void {\n if (!this.itemTemplate) {\n console.warn('No item template was provided.');\n }\n }\n\n _hasSwipeActions(item: any): boolean {\n if (!Array.isArray(this.swipeActions)) {\n return false;\n }\n return this.swipeActions.some((swipeAction) => {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return false;\n }\n if (swipeAction.isDisabled === true) {\n return false;\n }\n return swipeAction.position === 'left' || swipeAction.position === 'right';\n });\n }\n\n _getSwipeActions(item: any, direction?: ListSwipeDirection): ListSwipeAction[] {\n if (!Array.isArray(this.swipeActions)) {\n return [];\n }\n return this.swipeActions.filter((swipeAction) => {\n if (this.isSwipeActionDisabled(swipeAction, item)) {\n return false;\n }\n return direction ? swipeAction.position === direction : true;\n });\n }\n\n private isSwipeActionDisabled(swipeAction: ListSwipeAction, item: any): boolean {\n if (swipeAction.isDisabled instanceof Function && swipeAction.isDisabled(item)) {\n return true;\n }\n return swipeAction.isDisabled === true;\n }\n\n _getSwipeActionEnd(item: any): ListSwipeEnd {\n if (this._getSwipeActions(item, 'left').length) {\n return 'start';\n }\n return 'end';\n }\n\n _getSwipeActionIcon(swipeAction: ListSwipeAction, item: any): string {\n if (!swipeAction.icon) return;\n\n if (swipeAction.icon instanceof Function) {\n return swipeAction.icon(item);\n }\n return swipeAction.icon;\n }\n\n _getSwipeActionTitle(swipeAction: ListSwipeAction, item: any): string {\n if (swipeAction.title instanceof Function) {\n return swipeAction.title(item);\n }\n return swipeAction.title;\n }\n\n _getSwipeActionType(swipeAction: ListSwipeAction, item: any): ThemeColor {\n if (swipeAction.type instanceof Function) {\n return swipeAction.type(item);\n }\n return swipeAction.type;\n }\n\n private initializeSwipeActions(): void {\n if (this.swipeActions && this.swipeActions.length) {\n this._isSwipingEnabled = this.platform.isTouch();\n }\n }\n}\n","import { Directive, HostBinding, Input, OnChanges } from '@angular/core';\n\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({\n selector: '[kirbyListItemColor]',\n})\nexport class ListItemColorDirective implements OnChanges {\n @Input()\n kirbyListItemColor: (item: any) => ThemeColor;\n @Input() item: any;\n @HostBinding('class')\n color: ThemeColor;\n\n ngOnChanges(): void {\n this.color = this.getColor();\n }\n\n private getColor(): ThemeColor {\n if (!this.kirbyListItemColor || !this.item) {\n return;\n }\n\n const themeColor = this.kirbyListItemColor(this.item);\n return themeColor;\n }\n}\n","import { Component, HostListener, ViewChild } from '@angular/core';\nimport { IonList } from '@ionic/angular';\n\nimport { elementHasAncestor } from '../../../helpers/element-has-ancestor';\n\n@Component({\n selector: 'kirby-list-experimental',\n templateUrl: './list-experimental.component.html',\n styleUrls: ['./list-experimental.component.scss'],\n})\nexport class ListExperimentalComponent {\n @ViewChild(IonList, { static: true }) list: IonList;\n\n @HostListener('click', ['$event'])\n closeAllSlidingItems(e: MouseEvent) {\n if (elementHasAncestor(e.target as HTMLElement, 'ion-item-option', 'ion-list')) {\n this.list.closeSlidingItems();\n }\n }\n}\n","export class ReorderEvent {\n private origEvent: CustomEvent<any>;\n private parent?: any;\n\n constructor(ev: CustomEvent<any>, parentItem?: any) {\n this.origEvent = ev;\n this.parent = parentItem;\n this.origEvent.cancelBubble = true;\n }\n complete(listOrReorder?: boolean | any[]): Promise<any> {\n return this.origEvent.detail.complete(listOrReorder);\n }\n\n get parentItem(): any {\n return this.parent;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\n\nimport { ListItemTemplateDirective } from '../list/list.directive';\n\nimport { ReorderEvent } from './reorder-event';\n\n@Component({\n selector: 'kirby-reorder-list',\n templateUrl: './reorder-list.component.html',\n styleUrls: ['./reorder-list.component.scss'],\n})\nexport class ReorderListComponent implements OnChanges, OnDestroy {\n @Input() items: any[];\n @Input() subItemsName: string;\n @Input() getItemTextDefault: (item: any) => string;\n\n @Output() itemReorder = new EventEmitter<ReorderEvent>();\n @Output() subItemReorder = new EventEmitter<ReorderEvent>();\n\n @ContentChild(ListItemTemplateDirective, { static: true, read: TemplateRef })\n itemTemplate: TemplateRef<any>;\n @ViewChildren('reorderGroupContainer')\n reorderGroupContainer: QueryList<ElementRef>;\n\n private observer: MutationObserver;\n reorderActive: boolean = false;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnChanges(): void {\n if (this.items && this.items.length > 0) {\n setTimeout(() => {\n this.setupDomListener();\n });\n }\n }\n\n private setupDomListener() {\n const callback = (mutationsList: any) => {\n for (let mutation of mutationsList) {\n if (mutation.oldValue !== mutation.target['className']) {\n this.reorderActive = mutation.target['className'].includes('reorder-list-active');\n }\n }\n this.cdr.detectChanges();\n };\n this.observer = new MutationObserver(callback);\n\n this.reorderGroupContainer.forEach((div: ElementRef) => {\n this.observer.observe(div.nativeElement, {\n attributes: true,\n attributeFilter: ['class'],\n attributeOldValue: true,\n childList: false,\n subtree: true,\n });\n });\n }\n\n doReorder(ev: CustomEvent) {\n this.itemReorder.emit(new ReorderEvent(ev));\n }\n\n doSubReorder(ev: CustomEvent, parentItem: any) {\n this.subItemReorder.emit(new ReorderEvent(ev, parentItem));\n }\n\n ngOnDestroy() {\n //clean up the observer\n this.observer && this.observer.disconnect();\n delete this.observer;\n }\n}\n","import { Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-modal-footer',\n templateUrl: './modal-footer.component.html',\n styleUrls: ['./modal-footer.component.scss'],\n})\nexport class ModalFooterComponent {\n @HostBinding('class.snap-to-keyboard')\n @Input()\n snapToKeyboard = false;\n\n @HostBinding('class')\n @Input()\n type: 'inline' | 'fixed' = 'fixed';\n}\n","export const selectedTabClickEvent = 'kirbySelectedTabClick';\n","import { Injectable } from '@angular/core';\nimport { IonRouterOutlet } from '@ionic/angular';\nimport { ReplaySubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TabsService {\n private outletSubject$: ReplaySubject<IonRouterOutlet> = new ReplaySubject();\n public outlet$ = this.outletSubject$.asObservable();\n\n public setOutlet(outlet: IonRouterOutlet) {\n this.outletSubject$.next(outlet);\n }\n}\n\nexport { IonRouterOutlet };\n","import { AfterViewInit, Component, HostBinding, ViewChild } from '@angular/core';\nimport { IonTabs } from '@ionic/angular';\n\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'kirby-tab-bar',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent implements AfterViewInit {\n @HostBinding('class.tab-bar-bottom-hidden')\n tabBarBottomHidden = false;\n @ViewChild(IonTabs, { static: true }) tabs: IonTabs;\n\n constructor(private tabsService: TabsService) {}\n\n ngAfterViewInit() {\n this.tabsService.setOutlet(this.tabs.outlet);\n }\n}\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n SkipSelf,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router, RouterEvent } from '@angular/router';\nimport { IonContent, IonFooter, IonHeader } from '@ionic/angular';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { KirbyAnimation } from '../../animation/kirby-animation';\nimport { FitHeadingConfig } from '../../directives/fit-heading/fit-heading.directive';\nimport { WindowRef } from '../../types/window-ref';\nimport { ModalWrapperComponent } from '../modal/modal-wrapper/modal-wrapper.component';\nimport { ModalNavigationService } from '../modal/services/modal-navigation.service';\nimport { selectedTabClickEvent } from '../tabs/tab-button/tab-button.events';\nimport { TabsComponent } from '../tabs/tabs.component';\n\ntype stickyConfig = { sticky: boolean };\ntype fixedConfig = { fixed: boolean };\n\n/**\n * Event emitted when \"pull-to-refresh\" begins.\n */\nexport interface PullToRefreshEvent {\n /**\n * Invoke this callback-method when action to perform upon \"pull-to-refresh\" completes.\n */\n complete();\n}\n\n@Directive({\n selector: '[kirbyPageTitle]',\n})\nexport class PageTitleDirective {}\n\n@Directive({\n selector: '[kirbyPageToolbarTitle]',\n})\nexport class PageToolbarTitleDirective {}\n\n@Directive({\n selector: '[kirbyPageActions]',\n})\nexport class PageActionsDirective {\n @Input('kirbyPageActions') config: stickyConfig | fixedConfig;\n private readonly stickyDefault = true;\n private readonly fixedDefault = false;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isSticky(): boolean {\n return this.config ? (this.config as stickyConfig).sticky : this.stickyDefault;\n }\n\n get isFixed(): boolean {\n return this.config ? (this.config as fixedConfig).fixed : this.fixedDefault;\n }\n}\n\n@Directive({\n selector: '[kirbyPageContent]',\n})\nexport class PageContentDirective {\n @Input('kirbyPageContent') config: fixedConfig;\n\n constructor(public template: TemplateRef<any>) {}\n\n get isFixed(): boolean {\n return this.config && this.config.fixed;\n }\n}\n\n@Component({\n selector: 'kirby-page-progress',\n template: ` <ng-content></ng-content> `,\n styles: [':host {display: flex}'],\n})\nexport class PageProgressComponent implements OnInit {\n // TODO: Find alternative implementation, which aligns with future page configuration / consumption\n // This implementation was chosen over expanding `moveChild` method in component wrapper with yet another scenario\n @HostBinding('attr.slot') slot = 'start';\n\n constructor(@Optional() @SkipSelf() private modalWrapper: ModalWrapperComponent) {}\n\n ngOnInit(): void {\n if (this.modalWrapper && this.modalWrapper.config.flavor === 'drawer') {\n this.slot = 'end';\n }\n }\n}\n\n@Component({\n selector: 'kirby-page-title',\n template: ` <ng-content></ng-content> `,\n})\nexport class PageTitleComponent {}\n\n@Component({\n selector: 'kirby-page-content',\n template: ` <ng-content></ng-content> `,\n})\nexport class PageContentComponent {}\n\n@Component({\n selector: 'kirby-page-actions',\n template: ` <ng-content select=\"button[kirby-button]\"></ng-content> `,\n})\nexport class PageActionsComponent {}\n\n@Component({\n selector: 'kirby-page',\n templateUrl: './page.component.html',\n styleUrls: ['./page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PageComponent\n implements OnInit, OnDestroy, AfterViewInit, AfterContentChecked, OnChanges\n{\n @Input() title: string;\n @Input() toolbarTitle: string;\n @Input() titleAlignment: 'left' | 'center' | 'right' = 'left';\n @Input() defaultBackHref: string;\n @Input() hideBackButton: boolean;\n @Input() titleMaxLines: number;\n\n private _tabBarBottomHidden: boolean;\n public get tabBarBottomHidden(): boolean {\n return this._tabBarBottomHidden;\n }\n @Input()\n public set tabBarBottomHidden(value: boolean) {\n if (this.tabsComponent) {\n // as we are setting a class on tabs, we need this to happen in a separate cd cycle\n setTimeout(() => (this.tabsComponent.tabBarBottomHidden = value));\n }\n this._tabBarBottomHidden = value;\n }\n\n @Output() enter = new EventEmitter<void>();\n @Output() leave = new EventEmitter<void>();\n @Output() refresh = new EventEmitter<PullToRefreshEvent>();\n\n @ViewChild(IonContent, { static: true }) private content: IonContent;\n @ViewChild(IonContent, { static: true, read: ElementRef })\n private ionContentElement: ElementRef<HTMLIonContentElement>;\n @ViewChild(IonHeader, { static: true, read: ElementRef })\n ionHeaderElement: ElementRef<HTMLIonHeaderElement>;\n @ViewChild(IonFooter, { static: true, read: ElementRef })\n private ionFooterElement: ElementRef<HTMLIonFooterElement>;\n\n @ViewChild('pageTitle', { static: false, read: ElementRef })\n private pageTitle: ElementRef;\n\n @ViewChild('simpleTitleTemplate', { static: true, read: TemplateRef })\n private simpleTitleTemplate: TemplateRef<any>;\n @ViewChild('simpleToolbarTitleTemplate', { static: true, read: TemplateRef })\n private simpleToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageToolbarTitleDirective, { static: false, read: TemplateRef })\n private customToolbarTitleTemplate: TemplateRef<any>;\n @ContentChild(PageTitleDirective, { static: false, read: TemplateRef })\n customTitleTemplate: TemplateRef<any>;\n @ContentChildren(PageActionsDirective)\n customActions: QueryList<PageActionsDirective>;\n @ContentChildren(PageContentDirective)\n private customContent: QueryList<PageContentDirective>;\n\n hasPageTitle: boolean;\n hasActionsInPage: boolean;\n toolbarTitleVisible: boolean;\n toolbarFixedActionsVisible: boolean;\n toolbarStickyActionsVisible: boolean;\n\n fitHeadingConfig: FitHeadingConfig;\n\n toolbarTitleTemplate: TemplateRef<any>;\n customContentTemplate: TemplateRef<any>;\n pageActionsTemplate: TemplateRef<any>;\n fixedContentTemplate: TemplateRef<any>;\n stickyActionsTemplate: TemplateRef<any>;\n fixedActionsTemplate: TemplateRef<any>;\n private pageTitleIntersectionObserverRef: IntersectionObserver =\n this.pageTitleIntersectionObserver();\n private urls: string[] = [];\n private hasEntered: boolean;\n\n private ngOnDestroy$ = new Subject();\n private navigationStart$: Observable<RouterEvent> = this.router.events.pipe(\n takeUntil(this.ngOnDestroy$),\n filter((event: RouterEvent) => event instanceof NavigationStart)\n );\n\n private navigationEnd$: Observable<RouterEvent> = this.router.events.pipe(\n takeUntil(this.ngOnDestroy$),\n filter((event: RouterEvent) => event instanceof NavigationEnd)\n );\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private router: Router,\n private changeDetectorRef: ChangeDetectorRef,\n private windowRef: WindowRef,\n private modalNavigationService: ModalNavigationService,\n @Optional() @SkipSelf() private tabsComponent: TabsComponent\n ) {}\n\n ngOnInit(): void {\n this.removeWrapper();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.titleMaxLines) {\n this.fitHeadingConfig = {\n ...this.fitHeadingConfig,\n maxLines: changes.titleMaxLines.currentValue,\n };\n }\n }\n\n ngAfterViewInit(): void {\n this.navigationStart$.subscribe((event: NavigationStart) => {\n if (\n !this.urls.includes(event.url) &&\n !this.modalNavigationService.isModalRoute(event.url) &&\n !this.modalNavigationService.isModalRoute(this.router.url)\n ) {\n this.onLeave();\n }\n });\n\n this.navigationEnd$.subscribe((event: NavigationEnd) => {\n if (this.urls.includes(event.urlAfterRedirects)) {\n this.onEnter();\n }\n });\n\n this.windowRef.nativeWindow.addEventListener(selectedTabClickEvent, () => {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n });\n }\n\n ngAfterContentChecked(): void {\n if (!this.urls.includes(this.router.url)) {\n this.urls.push(this.router.url);\n this.onEnter();\n }\n\n this.initializeTitle();\n this.initializeActions();\n this.initializeContent();\n this.changeDetectorRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.ngOnDestroy$.next();\n this.ngOnDestroy$.complete();\n\n this.pageTitleIntersectionObserverRef.disconnect();\n this.windowRef.nativeWindow.removeEventListener(selectedTabClickEvent, () => {\n this.content.scrollToTop(KirbyAnimation.Duration.LONG);\n });\n }\n\n delegateRefreshEvent(event: any): void {\n this.refresh.emit({\n complete: event.target.complete.bind(event.target),\n });\n }\n\n private onEnter() {\n if (this.hasEntered) return;\n this.hasEntered = true;\n\n this.enter.emit();\n if (this.pageTitle) {\n this.pageTitleIntersectionObserverRef.observe(this.pageTitle.nativeElement);\n }\n }\n\n private onLeave() {\n this.leave.emit();\n if (this.pageTitle) {\n this.pageTitleIntersectionObserverRef.unobserve(this.pageTitle.nativeElement);\n }\n this.hasEntered = false;\n\n if (this.tabBarBottomHidden && this.tabsComponent) {\n this.tabsComponent.tabBarBottomHidden = false;\n }\n }\n\n private initializeTitle() {\n // Ensures initializeTitle() won't run, if already initialized\n if (this.hasPageTitle) return;\n\n this.hasPageTitle = this.title !== undefined || !!this.customTitleTemplate;\n this.toolbarTitleVisible = !this.hasPageTitle;\n\n if (this.hasPageTitle) {\n setTimeout(() => {\n this.pageTitleIntersectionObserverRef.observe(this.pageTitle.nativeElement);\n });\n }\n\n const defaultTitleTemplate = this.customTitleTemplate || this.simpleTitleTemplate;\n // tslint:disable:prettier\n // prettier-ignore\n this.toolbarTitleTemplate = this.customToolbarTitleTemplate\n ? this.customToolbarTitleTemplate\n : typeof this.toolbarTitle === 'string'\n ? this.simpleToolbarTitleTemplate\n : defaultTitleTemplate;\n }\n\n private initializeActions() {\n this.customActions.forEach((pageAction) => {\n if (pageAction.isFixed) {\n this.fixedActionsTemplate = pageAction.template;\n this.toolbarFixedActionsVisible = true;\n } else {\n this.pageActionsTemplate = pageAction.template;\n if (pageAction.isSticky) {\n this.stickyActionsTemplate = pageAction.template;\n }\n }\n });\n this.hasActionsInPage = !!this.pageActionsTemplate;\n }\n\n private initializeContent() {\n this.customContent.forEach((content) => {\n if (content.isFixed) {\n this.fixedContentTemplate = content.template;\n } else {\n this.customContentTemplate = content.template;\n }\n });\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, this.ionHeaderElement.nativeElement);\n this.renderer.appendChild(parent, this.ionContentElement.nativeElement);\n this.renderer.appendChild(parent, this.ionFooterElement.nativeElement);\n }\n\n private pageTitleIntersectionObserver() {\n const options = {\n rootMargin: '0px',\n };\n\n let initialized = false;\n const callback = (entries) => {\n if (initialized) {\n this.toolbarTitleVisible = !entries[0].isIntersecting;\n this.toolbarStickyActionsVisible = !entries[0].isIntersecting;\n this.changeDetectorRef.detectChanges();\n } else {\n initialized = true;\n }\n };\n return new IntersectionObserver(callback, options);\n }\n\n @HostListener('window:keyboardWillShow', ['$event'])\n _onKeyboardWillShow(info?: { keyboardHeight: number }) {\n if (info && info.keyboardHeight) {\n this.ionContentElement.nativeElement.style.setProperty(\n '--keyboard-offset',\n `${info.keyboardHeight}px`\n );\n }\n }\n\n @HostListener('window:keyboardWillHide')\n _onKeyboardWillHide() {\n this.ionContentElement.nativeElement.style.setProperty('--keyboard-offset', '0px');\n }\n}\n","import {\n Component,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core';\n\nimport { PageComponent } from '../page.component';\n\n@Component({\n selector: 'kirby-page-footer',\n templateUrl: './page-footer.component.html',\n styleUrls: ['./page-footer.component.scss'],\n})\nexport class PageFooterComponent implements OnDestroy {\n @Input()\n hasPadding: boolean = true;\n\n constructor(\n @Optional() @SkipSelf() private pageComponent: PageComponent,\n private hostElement: ElementRef,\n private renderer: Renderer2\n ) {\n if (!pageComponent) {\n throw new Error('Page footer must reside inside of a Kirby page');\n }\n }\n\n close() {\n this.pageComponent.tabBarBottomHidden = false;\n this.renderer.removeChild(\n this.hostElement.nativeElement.parentElement,\n this.hostElement.nativeElement,\n true\n );\n }\n\n ngOnDestroy(): void {\n this.pageComponent.tabBarBottomHidden = false;\n }\n}\n","import { Injectable, Renderer2, RendererStyleFlags2 } from '@angular/core';\n\nconst config = Object.freeze({\n className: 'kirby-line-clamp',\n lineClamp: '--line-clamp',\n lineHeight: '--line-height',\n});\n\n@Injectable()\nexport class LineClampHelper {\n constructor(private renderer: Renderer2) {}\n\n setMaxLines(element: Element, maxLines: number): void {\n this.renderer.setStyle(element, config.lineClamp, maxLines, RendererStyleFlags2.DashCase);\n this.renderer.addClass(element, config.className);\n }\n\n setLineHeight(element: Element, lineHeight: string): void {\n // Only necessary for the fallback solution to work\n this.renderer.setStyle(element, config.lineHeight, lineHeight, RendererStyleFlags2.DashCase);\n }\n\n removeLineClamp(element: Element) {\n this.renderer.removeClass(element, config.className);\n this.renderer.removeStyle(element, config.lineClamp);\n this.renderer.removeStyle(element, config.lineHeight);\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { DesignTokenHelper } from '@kirbydesign/core';\n\nimport { ResizeObserverService } from '../../components/shared/resize-observer/resize-observer.service';\nimport { LineClampHelper } from '../../helpers/line-clamp-helper';\n\nconst fontSize = DesignTokenHelper.fontSize;\nconst lineHeight = DesignTokenHelper.lineHeight;\n\ninterface HeadingSize {\n name: string;\n fontSize: string;\n lineHeight: string;\n}\n\nexport interface FitHeadingConfig {\n maxLines: number;\n}\n\n@Directive({\n selector: `h1[kirbyFitHeading],h2[kirbyFitHeading],h3[kirbyFitHeading]`,\n providers: [LineClampHelper],\n})\nexport class FitHeadingDirective implements OnInit, OnDestroy {\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyFitHeading') config?: FitHeadingConfig;\n\n private isObservingHostElement: boolean;\n private hostElementClone: Element;\n private isScalingHeader: boolean; // used to prevent resizeObserver to trigger on font scaling by this.scaleHeader()\n\n private headingSizes: HeadingSize[] = [\n {\n name: 'h1',\n fontSize: fontSize('xl'),\n lineHeight: lineHeight('xl'),\n },\n {\n name: 'h2',\n fontSize: fontSize('l'),\n lineHeight: lineHeight('l'),\n },\n {\n name: 'h3',\n fontSize: fontSize('m'),\n lineHeight: lineHeight('m'),\n },\n ];\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private resizeObserverService: ResizeObserverService,\n private lineClampHelper: LineClampHelper\n ) {}\n\n ngOnInit(): void {\n if (this.config && this.config.maxLines) {\n this.lineClampHelper.setMaxLines(this.elementRef.nativeElement, this.config.maxLines);\n this.observeResize();\n this.isObservingHostElement = true;\n }\n }\n\n ngOnDestroy(): void {\n if (this.isObservingHostElement) {\n this.resizeObserverService.unobserve(this.elementRef);\n if (this.hostElementClone) {\n this.renderer.removeChild(this.elementRef.nativeElement, this.hostElementClone);\n }\n }\n }\n\n private observeResize(): void {\n this.resizeObserverService.observe(this.elementRef, () => {\n /**\n * setTimeout is used here to avoid repeated size changes\n * while the first size change is still ongoing.\n * This would result in the ResizeObserver being called again,\n * giving 'ResizeObserver loop limit exceeded' types of errors.\n */\n setTimeout(() => {\n this.scaleHeader();\n }, 0);\n });\n }\n\n private scaleHeader(): void {\n if (this.isScalingHeader) return;\n\n this.isScalingHeader = true;\n\n if (!this.hostElementClone) {\n this.hostElementClone = this.generateHostElementClone();\n this.renderer.appendChild(this.elementRef.nativeElement, this.hostElementClone);\n }\n\n this.renderer.setStyle(\n this.hostElementClone,\n 'width',\n `${this.elementRef.nativeElement.clientWidth}px`\n );\n\n const fallbackSize = this.headingSizes[this.headingSizes.length - 1];\n const fittedSize = this.headingSizes.find(this.canFitHeading.bind(this)) || fallbackSize;\n\n this.setSize(this.elementRef.nativeElement, fittedSize);\n this.lineClampHelper.setLineHeight(this.elementRef.nativeElement, fittedSize.lineHeight);\n this.isScalingHeader = false;\n }\n\n private canFitHeading(size: HeadingSize) {\n this.setSize(this.hostElementClone, size);\n const lines = this.hostElementClone.clientHeight / parseInt(size.lineHeight);\n return lines <= this.config.maxLines;\n }\n\n private generateHostElementClone(): Element {\n const clone = this.elementRef.nativeElement.cloneNode(true);\n this.renderer.setStyle(clone, 'position', 'absolute');\n this.renderer.setStyle(clone, 'visibility', 'hidden');\n this.lineClampHelper.removeLineClamp(clone);\n return clone;\n }\n\n private setSize(el: Element, size: HeadingSize): void {\n this.renderer.setStyle(el, 'font-size', size.fontSize);\n this.renderer.setStyle(el, 'line-height', size.lineHeight);\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { FitHeadingDirective } from './fit-heading.directive';\n\n@NgModule({\n declarations: [FitHeadingDirective],\n exports: [FitHeadingDirective],\n})\nexport class FitHeadingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SpinnerComponent } from './spinner.component';\n\n@NgModule({\n declarations: [SpinnerComponent],\n imports: [CommonModule],\n exports: [SpinnerComponent],\n providers: [],\n})\nexport class SpinnerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { FitHeadingModule } from '../../directives/fit-heading/fit-heading.module';\nimport { SpinnerModule } from '../spinner/spinner.module';\n\nimport { PageFooterComponent } from './page-footer/page-footer.component';\nimport {\n PageActionsComponent,\n PageActionsDirective,\n PageComponent,\n PageContentComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n} from './page.component';\n\n@NgModule({\n declarations: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n ],\n imports: [CommonModule, IonicModule, FitHeadingModule, SpinnerModule],\n exports: [\n PageComponent,\n PageActionsComponent,\n PageActionsDirective,\n PageContentComponent,\n PageFooterComponent,\n PageContentDirective,\n PageProgressComponent,\n PageTitleComponent,\n PageTitleDirective,\n PageToolbarTitleDirective,\n FitHeadingModule,\n ],\n})\nexport class PageModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\n\nimport { RouterOutletComponent } from './router-outlet.component';\n\n@NgModule({\n declarations: [RouterOutletComponent],\n imports: [CommonModule, IonicModule],\n exports: [RouterOutletComponent],\n})\nexport class RouterOutletModule {}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'kirby-section-header',\n templateUrl: './section-header.component.html',\n styleUrls: ['./section-header.component.scss'],\n})\nexport class SectionHeaderComponent {}\n","import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';\n\nimport { IconRegistryService } from '../icon/icon-registry.service';\n\nimport { SegmentItem, SegmentItemInternal } from './segment-item';\n\nexport enum SegmentedControlMode {\n chip = 'chip',\n compactChip = 'compactChip',\n default = 'default',\n}\n\n@Component({\n selector: 'kirby-segmented-control',\n templateUrl: './segmented-control.component.html',\n styleUrls: ['./segmented-control.component.scss'],\n // tslint:disable-next-line: no-host-metadata-property\n host: { role: 'group' },\n})\nexport class SegmentedControlComponent {\n constructor(private iconRegistryService: IconRegistryService) {}\n\n preventWrapperClick(event: Event) {\n if (event.target instanceof HTMLElement) {\n if (event.target.classList.contains('segment-btn-wrapper')) {\n event.stopImmediatePropagation();\n }\n }\n }\n\n @Input() mode: SegmentedControlMode | `${SegmentedControlMode}` = SegmentedControlMode.default;\n\n @HostBinding('class')\n get _modeCssClass() {\n return {\n [SegmentedControlMode.chip]: 'chip-mode',\n [SegmentedControlMode.default]: 'default-mode',\n [SegmentedControlMode.compactChip]: 'compact chip-mode',\n }[this.mode];\n }\n\n private _items: SegmentItemInternal[] = [];\n get items(): SegmentItem[] {\n return this._items;\n }\n\n @Input() set items(value: SegmentItem[]) {\n this._items = value || [];\n this._items.forEach((item) => {\n if (!item.badge) return;\n // We need to verify whether badges icon is custom or default, so we can check for it in the template\n item.badge.isCustomIcon =\n item.badge.icon !== undefined &&\n this.iconRegistryService.getIcon(item.badge.icon) !== undefined;\n });\n\n const checkedItemIndex = this.items.findIndex((item) => item.checked);\n if (checkedItemIndex > -1) {\n console.warn(\n 'SegmentItem.checked is deprecated - please remove from your `items` configuration. Use `selectedIndex` or `value` on `<kirby-segmented-control>` instead '\n );\n this._selectedIndex = checkedItemIndex;\n }\n this._value = this.items[this.selectedIndex];\n }\n\n private _selectedIndex: number = -1;\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (value !== this._selectedIndex) {\n this._selectedIndex = value;\n this._value = this.items[this.selectedIndex];\n }\n }\n\n private _value: SegmentItem;\n get value(): SegmentItem {\n return this._value;\n }\n\n @Input() set value(value: SegmentItem) {\n this.selectedIndex = this.items.indexOf(value);\n }\n\n @HostBinding('class.sm')\n isSmallSize: boolean;\n\n @Input() set size(size: 'sm' | 'md') {\n this.isSmallSize = size === 'sm';\n }\n\n private _disableChangeOnSwipe: boolean = false;\n get disableChangeOnSwipe(): boolean {\n return this._disableChangeOnSwipe;\n }\n\n @Input() set disableChangeOnSwipe(value: boolean) {\n this._disableChangeOnSwipe = value;\n }\n\n @Output() segmentSelect: EventEmitter<SegmentItem> = new EventEmitter();\n\n onSegmentSelect(selectedId: string) {\n const selectedItemIndex = this.items.findIndex((item) => selectedId === item.id);\n if (selectedItemIndex !== this.selectedIndex) {\n this.selectedIndex = selectedItemIndex;\n this.segmentSelect.emit(this.value);\n }\n }\n}\n","import {\n Component,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-slide-button',\n templateUrl: './slide-button.component.html',\n styleUrls: ['./slide-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlideButtonComponent implements OnDestroy {\n @Input() text = '';\n @Input() expand: 'block';\n\n @Output() slideDone = new EventEmitter();\n @Output() slidingPercentageChanged = new EventEmitter<number>();\n\n readonly slideDoneFadeTime = 500;\n readonly slideResetTime = 100;\n\n isSlideDone = false;\n pctInTens = 0;\n\n get value(): number {\n return this._value;\n }\n set value(v: number) {\n this._value = v;\n this.calculatePctInTens();\n }\n\n private _value: number = 0;\n private resetSliderIntervalTimer: any;\n private calculatePctInTens() {\n this.pctInTens = Math.ceil(this.value / 10) * 10;\n }\n\n constructor(private changeDetectionRef: ChangeDetectorRef) {}\n\n ngOnDestroy(): void {\n if (this.resetSliderIntervalTimer) {\n clearInterval(this.resetSliderIntervalTimer);\n }\n }\n\n onSliderMouseup() {\n if (this.value == 100) {\n this.handleSlideDone();\n } else {\n this.resetSliderIntervalTimer = setInterval(() => {\n if (this.value > 0) {\n this.value -= 2;\n } else {\n clearInterval(this.resetSliderIntervalTimer);\n }\n\n this.changeDetectionRef.markForCheck();\n }, 1);\n }\n }\n\n onSliderValueChange(val: string) {\n this.value = +val;\n this.slidingPercentageChanged.emit(this.value);\n }\n\n onSliderMousedown() {\n clearInterval(this.resetSliderIntervalTimer);\n }\n\n private handleSlideDone() {\n this.slideDone.emit();\n this.isSlideDone = true;\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n Renderer2,\n QueryList,\n ContentChildren,\n} from '@angular/core';\n\nimport { IconComponent } from '../../icon/icon.component';\nimport { selectedTabClickEvent } from './tab-button.events';\n\n@Component({\n selector: 'kirby-tab-button',\n templateUrl: './tab-button.component.html',\n styleUrls: ['./tab-button.component.scss'],\n})\nexport class TabButtonComponent implements OnInit {\n @Input() routerLink: string;\n @Output() click = new EventEmitter<Event>();\n @ContentChildren(IconComponent) icons: QueryList<IconComponent>;\n\n constructor(private elementRef: ElementRef, private renderer: Renderer2) {}\n\n ngOnInit(): void {\n this.removeWrapper();\n }\n\n onClick(event: Event, isSelected: boolean) {\n this.click.emit(event);\n\n if (isSelected) {\n const clickEvent = new CustomEvent(selectedTabClickEvent);\n dispatchEvent(clickEvent);\n }\n }\n\n private removeWrapper() {\n const parent = this.elementRef.nativeElement.parentNode;\n const button = this.elementRef.nativeElement.childNodes[0];\n this.renderer.removeChild(parent, this.elementRef.nativeElement);\n this.renderer.appendChild(parent, button);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\nimport { CommonModule } from '@angular/common';\n\nimport { TabsComponent } from './tabs.component';\nimport { TabButtonComponent } from './tab-button/tab-button.component';\nimport { IconModule } from '../icon/icon.module';\nimport { TabsService } from './tabs.service';\n\n@NgModule({\n imports: [IonicModule, IconModule, CommonModule],\n providers: [TabsService],\n declarations: [TabsComponent, TabButtonComponent],\n exports: [TabsComponent, TabButtonComponent],\n})\nexport class TabsModule {}\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\n\nimport { Overlay } from '../../modal/services/modal.interfaces';\nimport { MessageType, ToastConfig } from '../config/toast-config';\n\n@Injectable()\nexport class ToastHelper {\n static CSS_CLASS = 'kirby-toast';\n static DURATION_IN_MS = 4000;\n\n constructor(private toastController: ToastController) {}\n\n public async showToast(config: ToastConfig): Promise<Overlay> {\n const toast = await this.toastController.create({\n animated: config.animated,\n message: config.message,\n position: 'top',\n duration: config.durationInMs ? config.durationInMs : ToastHelper.DURATION_IN_MS,\n cssClass: this.getCssClass(config.messageType),\n });\n await toast.present();\n return {\n dismiss: toast.dismiss.bind(toast),\n onWillDismiss: toast.onWillDismiss(),\n onDidDismiss: toast.onDidDismiss(),\n };\n }\n\n private getCssClass(messageType: MessageType): string {\n let cssClass = ToastHelper.CSS_CLASS;\n\n if (messageType === 'danger') {\n console.warn(\n `[DEPRECATED] 'danger' message type is deprecated. Use Kirby Alerts for critical warnings. Toast will be shown as 'warning'`\n );\n\n messageType = 'warning';\n }\n\n if (messageType) {\n cssClass += ' ' + messageType;\n }\n\n return cssClass;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ToastConfig } from '../config/toast-config';\n\nimport { ToastHelper } from './toast.helper';\n\n@Injectable()\nexport class ToastController {\n constructor(private toastHelper: ToastHelper) {}\n\n public showToast(config: ToastConfig, onCloseToast?: () => void) {\n this.toastHelper.showToast(config).then((overlay) => {\n if (onCloseToast) {\n overlay.onDidDismiss.then(() => onCloseToast());\n }\n });\n }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-toggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n})\nexport class ToggleComponent {\n @Input() checked: boolean = false;\n @Input() disabled: boolean = false;\n @Output() checkedChange = new EventEmitter<boolean>();\n onCheckedChange(checked: boolean): void {\n this.checked = checked;\n this.checkedChange.emit(this.checked);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnDestroy,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-progress-circle',\n templateUrl: './progress-circle.component.html',\n styleUrls: ['./progress-circle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressCircleComponent implements AfterViewInit, OnDestroy {\n readonly SIZE_CONFIG = {\n sm: { diameter: 40, strokeWidth: 3, upperBound: 95 },\n md: { diameter: 56, strokeWidth: 4, upperBound: 96 },\n lg: { diameter: 96, strokeWidth: 6, upperBound: 97 },\n };\n\n @Input() value: number = 0;\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n @Input() themeColor: 'success' | 'warning' | 'danger' = 'success';\n\n @HostBinding('class')\n get _cssSize() {\n return this.size;\n }\n\n private hasElementBeenVisible?: boolean;\n private observer: IntersectionObserver;\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private changeDetectorRef: ChangeDetectorRef\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.observer) {\n this.observer = new IntersectionObserver(this.onIntersectionChange, {\n threshold: 0.5,\n });\n this.observer.observe(this.elementRef.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n this.unobserve();\n }\n\n private onIntersectionChange = (entries: IntersectionObserverEntry[]) => {\n this.hasElementBeenVisible = entries && entries.some((entry) => entry.isIntersecting);\n if (this.hasElementBeenVisible) {\n this.unobserve();\n this.changeDetectorRef.markForCheck();\n }\n };\n\n private unobserve() {\n if (this.observer) {\n this.observer.unobserve(this.elementRef.nativeElement);\n // Safari does not support \"disconnect\", see: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#Browser_compatibility\n if (typeof this.observer.disconnect === 'function') {\n this.observer.disconnect();\n }\n }\n }\n\n @HostBinding('style.width.px')\n @HostBinding('style.height.px')\n get _diameter(): number {\n return this.SIZE_CONFIG[this.size].diameter;\n }\n\n get _shownValue() {\n // This is needed to make an animation [0 -> value] when element is shown to the user\n return this.hasElementBeenVisible ? this.value : 0;\n }\n\n get _radius() {\n return this._diameter / 2;\n }\n\n get _strokeWidth() {\n return this.SIZE_CONFIG[this.size].strokeWidth;\n }\n\n get _upperBound() {\n // This is needed to make sure that an input value close to 100 is not shown as 100\n return this.SIZE_CONFIG[this.size].upperBound;\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-flag',\n template: ` <ng-content></ng-content> `,\n styleUrls: ['./flag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FlagComponent {\n @Input() size: 'xs' | 'sm' | 'md' = 'md';\n @Input() themeColor: 'success' | 'warning' | 'danger' | 'semi-light' | 'transparent' =\n 'transparent';\n\n @HostBinding('class')\n get _cssClass() {\n return [this.themeColor, this.size];\n }\n}\n","import { AfterViewInit, EventEmitter } from '@angular/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Directive,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { IonSlides } from '@ionic/angular';\n\n@Directive({\n selector: '[kirbySlide]',\n})\nexport class SlideDirective {}\n\n@Component({\n selector: 'kirby-slides',\n template: `\n <ion-slides [options]=\"slidesOptions\" #ionslides (ionSlideDidChange)=\"onSlideChanged()\">\n <ion-slide *ngFor=\"let slide of slides; let i = index\">\n <ng-container\n *ngTemplateOutlet=\"slideTemplate; context: { $implicit: slide, index: i }\"\n ></ng-container>\n </ion-slide>\n </ion-slides>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SlidesComponent implements AfterViewInit {\n @ViewChild('ionslides', { static: false }) ionSlides: IonSlides;\n @Input() slidesOptions: any;\n @Input() slides: any[];\n @Output() selectedSlide = new EventEmitter<any>();\n\n @ContentChild(SlideDirective, { static: true, read: TemplateRef })\n public slideTemplate: TemplateRef<any>;\n\n ngAfterViewInit() {\n this.slideTo(0);\n }\n\n onSlideChanged() {\n this.ionSlides.getActiveIndex().then((selectedIndex) => {\n this.selectedSlide.emit({\n slide: this.slides[selectedIndex],\n index: selectedIndex,\n });\n });\n }\n\n slideTo(index: number) {\n this.ionSlides.slideTo(index);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\n\n@Component({\n selector: 'kirby-toggle-button',\n templateUrl: './toggle-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ToggleButtonComponent {\n @Input() checked: boolean;\n @Output() checkChanged = new EventEmitter<boolean>();\n\n @HostListener('click')\n onClick() {\n this.checked = !this.checked;\n this.checkChanged.emit(this.checked);\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[kirbyAccordion], kirby-accordion',\n exportAs: 'kirby-accordion',\n})\nexport class AccordionDirective {}\n","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n// Counter for generating unique element ids\nlet uniqueId = 0;\n\n@Component({\n selector: 'kirby-accordion-item',\n templateUrl: './accordion-item.component.html',\n styleUrls: ['./accordion-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('isExpanded', [\n state('true', style({ height: '*', visibility: 'visible' })),\n state('false', style({ height: '0px', visibility: 'hidden' })),\n transition('true <=> false', animate('0.2s')),\n ]),\n ],\n})\nexport class AccordionItemComponent {\n @Input() title: string;\n @Input() isExpanded: boolean = false;\n\n // IDs used for a11y labelling\n _titleId = `kirby-accordion-item-title-${++uniqueId}`;\n _contentId = `kirby-accordion-item-content-${uniqueId}`;\n}\n","import {\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'kirby-range',\n templateUrl: './range.component.html',\n styleUrls: ['./range.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RangeComponent),\n },\n ],\n})\nexport class RangeComponent implements OnChanges, ControlValueAccessor {\n @Input() minLabel: string;\n @Input() maxLabel: string;\n @Input() debounce: number;\n @Input() max: number;\n @Input() min: number;\n @Input() pin: boolean;\n @Input() step = 1;\n @Input() ticks: boolean;\n @Input() disabled = false;\n @Input()\n set value(value: number) {\n if (value !== this.currentValue) {\n this.currentValue = value;\n this.propagateChange(this.currentValue);\n this.change.emit(this.currentValue);\n }\n }\n\n get value(): number {\n return this.currentValue;\n }\n\n @Output() change: EventEmitter<number> = new EventEmitter<number>();\n\n private currentValue: number;\n\n ngOnChanges(_: SimpleChanges) {\n if (!this.ticks) return;\n\n /*\n * Max 10 ticks are allowed\n */\n const amountOfTicks = (this.max - this.min) / this.step;\n if (amountOfTicks > 9) {\n this.step = (this.max - this.min) / 9;\n }\n\n /*\n * Set value to the nearest tick\n */\n this.value = this.getTicks().reduce((a, b) => {\n return Math.abs(b - this.value) < Math.abs(a - this.value) ? b : a;\n });\n }\n\n private getTicks() {\n const ticks = [];\n for (let value = Number(this.min); value <= Number(this.max); value += Number(this.step)) {\n ticks.push(value);\n }\n return ticks;\n }\n\n public setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n public _onRangeValueChange($event: any): void {\n this.writeValue($event.detail.value);\n }\n\n public onTouched = () => {};\n\n public propagateChange = (_: any) => {};\n\n public writeValue(value: any): void {\n if (value !== undefined) {\n this.value = value;\n }\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n}\n","import { Directive, HostListener, ElementRef } from '@angular/core';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: `[keyHandler]`,\n})\nexport class KeyHandlerDirective {\n constructor(private element: ElementRef) {}\n\n @HostListener('keyup', ['$event'])\n keyEvent(event: KeyboardEvent) {\n if (event.key === ' ' || event.key === 'Enter' || event.key === 'Spacebar') {\n // Prevent the default action to stop scrolling when space is pressed\n event.preventDefault();\n\n const hostElement = <HTMLElement>this.element.nativeElement;\n hostElement.click();\n }\n }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nimport { ColorHelper } from '@kirbydesign/core';\nimport { ThemeColor } from '@kirbydesign/core';\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: `kirby-avatar[themeColor],\n kirby-card[themeColor],\n kirby-icon[themeColor],\n kirby-progress-circle-ring[themeColor],\n kirby-modal-footer[themeColor],\n kirby-empty-state[themeColor]`,\n})\nexport class ThemeColorDirective {\n private _isDefault = true;\n @HostBinding('class.default')\n get isDefault() {\n return this._isDefault;\n }\n\n private _isPrimary: boolean;\n @HostBinding('class.primary')\n get isPrimary() {\n return this._isPrimary;\n }\n\n private _isSecondary: boolean;\n @HostBinding('class.secondary')\n get isSecondary() {\n return this._isSecondary;\n }\n\n private _isTertiary: boolean;\n @HostBinding('class.tertiary')\n get isTertiary() {\n return this._isTertiary;\n }\n\n private _isSuccess: boolean;\n @HostBinding('class.success')\n get isSuccess() {\n return this._isSuccess;\n }\n\n private _isWarning: boolean;\n @HostBinding('class.warning')\n get isWarning() {\n return this._isWarning;\n }\n\n private _isDanger: boolean;\n @HostBinding('class.danger')\n get isDanger() {\n return this._isDanger;\n }\n\n private _isLight: boolean;\n @HostBinding('class.light')\n get isLight() {\n return this._isLight;\n }\n\n private _isMedium: boolean;\n @HostBinding('class.medium')\n get isMedium() {\n return this._isMedium;\n }\n\n private _isDark: boolean;\n @HostBinding('class.dark')\n get isDark() {\n return this._isDark;\n }\n\n private _isWhite: boolean;\n @HostBinding('class.white')\n get isWhite() {\n return this._isWhite;\n }\n\n private _isBrightnessWhite: boolean;\n @HostBinding('class.kirby-color-brightness-white')\n get isBrightnessWhite() {\n return this._isBrightnessWhite;\n }\n\n private _isBrightnessLight: boolean;\n @HostBinding('class.kirby-color-brightness-light')\n get isBrightnessLight() {\n return this._isBrightnessLight;\n }\n\n private _isBrightnessDark: boolean;\n @HostBinding('class.kirby-color-brightness-dark')\n get isBrightnessDark() {\n return this._isBrightnessDark;\n }\n\n @Input() set themeColor(value: ThemeColor) {\n this._isDefault = !value;\n this._isPrimary = value === 'primary';\n this._isSecondary = value === 'secondary';\n this._isTertiary = value === 'tertiary';\n this._isSuccess = value === 'success';\n this._isWarning = value === 'warning';\n this._isDanger = value === 'danger';\n this._isLight = value === 'light';\n this._isMedium = value === 'medium';\n this._isDark = value === 'dark';\n this._isWhite = value === 'white';\n const colorBrightness = ColorHelper.getColorBrightness(value);\n this._isBrightnessWhite = colorBrightness === 'white';\n this._isBrightnessLight = colorBrightness === 'light';\n this._isBrightnessDark = colorBrightness === 'dark';\n }\n}\n","import { fromEvent } from 'rxjs';\n\nexport const proxyInputs = (Cmp: any, inputs: string[]) => {\n const Prototype = Cmp.prototype;\n inputs.forEach((item) => {\n Object.defineProperty(Prototype, item, {\n get() {\n return this.el[item];\n },\n set(val: any) {\n this.z.runOutsideAngular(() => (this.el[item] = val));\n },\n });\n });\n};\n\nexport const proxyMethods = (Cmp: any, methods: string[]) => {\n const Prototype = Cmp.prototype;\n methods.forEach((methodName) => {\n Prototype[methodName] = function () {\n const args = arguments;\n return this.z.runOutsideAngular(() => this.el[methodName].apply(this.el, args));\n };\n });\n};\n\nexport const proxyOutputs = (instance: any, el: any, events: string[]) => {\n events.forEach((eventName) => (instance[eventName] = fromEvent(el, eventName)));\n};\n\n// tslint:disable-next-line: only-arrow-functions\nexport function ProxyCmp(opts: { inputs?: any; methods?: any }) {\n const decorator = function (cls: any) {\n if (opts.inputs) {\n proxyInputs(cls, opts.inputs);\n }\n if (opts.methods) {\n proxyMethods(cls, opts.methods);\n }\n return cls;\n };\n return decorator;\n}\n","/* tslint:disable */\n/* auto-generated angular directive proxies */\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, NgZone } from '@angular/core';\nimport { ProxyCmp, proxyOutputs } from './angular-component-lib/utils';\n\nimport { Components } from '@kirbydesign/core';\n\n\nexport declare interface KirbyBadge extends Components.KirbyBadge {}\n@ProxyCmp({\n inputs: ['size', 'text', 'themeColor']\n})\n@Component({\n selector: 'kirby-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content></ng-content>',\n inputs: ['size', 'text', 'themeColor']\n})\nexport class KirbyBadge {\n protected el: HTMLElement;\n constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) {\n c.detach();\n this.el = r.nativeElement;\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { ChartComponent } from './chart.component';\nimport { ChartConfigService } from './configs/chart-config.service';\n\n@NgModule({\n declarations: [ChartComponent],\n exports: [ChartComponent],\n providers: [ChartConfigService],\n})\nexport class ChartModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonicModule } from '@ionic/angular';\n\nimport { IconModule } from '../icon/icon.module';\nimport { SpinnerModule } from '../spinner/spinner.module';\n\nimport { InfiniteScrollDirective } from './directives/infinite-scroll.directive';\nimport { ListItemColorDirective } from './directives/list-item-color.directive';\nimport { ListExperimentalComponent } from './list-experimental/list-experimental.component';\nimport { ListHeaderComponent } from './list-header/list-header.component';\nimport { ListItemComponent } from './list-item/list-item.component';\nimport { ListSectionHeaderComponent } from './list-section-header/list-section-header.component';\nimport { ListComponent } from './list.component';\nimport {\n ListFlexItemDirective,\n ListFooterDirective,\n ListHeaderDirective,\n ListItemDirective,\n ListItemTemplateDirective,\n ListSectionHeaderDirective,\n} from './list.directive';\n\nconst exportedDeclarations = [\n ListComponent,\n ListItemComponent,\n ListItemDirective,\n ListFlexItemDirective,\n ListItemTemplateDirective,\n ListSectionHeaderComponent,\n ListSectionHeaderDirective,\n ListHeaderDirective,\n ListHeaderComponent,\n ListFooterDirective,\n ListExperimentalComponent,\n];\n\nconst declarations = [\n ...exportedDeclarations,\n ListItemColorDirective,\n InfiniteScrollDirective,\n ListItemComponent,\n];\n\n@NgModule({\n declarations: declarations,\n imports: [CommonModule, IconModule, IonicModule, SpinnerModule],\n exports: exportedDeclarations,\n providers: [],\n})\nexport class ListModule {}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input } from '@angular/core';\n\n@Component({\n selector: 'kirby-progress-circle-ring',\n templateUrl: './progress-circle-ring.component.svg',\n styleUrls: ['./progress-circle-ring.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ProgressCircleRingComponent {\n @Input() radius: number; // The desired outer radius of the SVG circle\n @Input() value: number = 0;\n @Input() themeColor: 'success' | 'warning' | 'danger' = 'success';\n @Input() strokeWidth: number;\n @Input() upperBound: number;\n\n get _offset(): number {\n const valueWithinBounds = this.value < this.upperBound || this.value > 99;\n if (valueWithinBounds) {\n return this.calculateOffset(this.value);\n } else {\n return this.calculateOffset(this.upperBound);\n }\n }\n\n @HostBinding('style.width.px')\n @HostBinding('style.height.px')\n get _diameter(): number {\n return this.radius * 2;\n }\n\n get _centerRadius(): number {\n return this.radius - this.strokeWidth / 2;\n }\n\n get _centerCircumference(): number {\n return this._centerRadius * 2 * Math.PI;\n }\n\n private calculateOffset(value: number): number {\n return this._centerCircumference - this._centerCircumference * (value / 100);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ToggleButtonComponent } from './toggle-button.component';\n\nconst DECLARATIONS = [ToggleButtonComponent];\n\n@NgModule({\n declarations: [...DECLARATIONS],\n imports: [CommonModule],\n exports: [...DECLARATIONS],\n})\nexport class ToggleButtonModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { APP_INITIALIZER } from '@angular/core';\n\nimport { defineCustomElements } from '@kirbydesign/core/loader';\n\nexport const appInitialize = (doc: Document) => {\n return () => {\n defineCustomElements(doc.defaultView);\n };\n};\n\nexport function customElementsInitializer() {\n return {\n provide: APP_INITIALIZER,\n useFactory: appInitialize,\n deps: [DOCUMENT],\n multi: true,\n };\n}\n","import { Directive, ElementRef, HostBinding, HostListener, OnInit, Optional } from '@angular/core';\n\nimport { CardComponent } from '../../components/card/card.component';\n\n@Directive({\n // tslint:disable-next-line\n selector: 'kirby-card[click]',\n})\nexport class ElementAsButtonDirective implements OnInit {\n @HostBinding('attr.role') role: string = 'button';\n @HostBinding('attr.tabindex') tabindex: number = 0;\n\n constructor(@Optional() private card: CardComponent, private clickableElement: ElementRef) {}\n\n ngOnInit(): void {\n if (this.card) {\n this.card.flat = false;\n }\n }\n\n @HostListener('keydown.space', ['$event'])\n @HostListener('keydown.enter', ['$event'])\n _onKeydownHandler(event: KeyboardEvent) {\n this.clickableElement.nativeElement.click(event);\n }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { Params } from '@angular/router';\n\nimport { ModalNavigationService } from '../../components/modal/services/modal-navigation.service';\n\n@Directive({\n selector: `[kirbyModalRouterLink]`,\n})\nexport class ModalRouterLinkDirective {\n constructor(private modalNavigationService: ModalNavigationService) {}\n\n @Input('kirbyModalRouterLink') path: string | string[];\n // tslint:disable-next-line:no-input-rename\n @Input('kirbyModalQueryParams') queryParams?: Params;\n\n @HostListener('click')\n onClick(): boolean {\n this.modalNavigationService.navigateToModal(\n this.path,\n typeof this.queryParams !== 'string' ? this.queryParams : null\n );\n return false;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Inject, InjectionToken, ModuleWithProviders, NgModule, Optional } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { IonicModule } from '@ionic/angular';\n\nimport { AccordionItemComponent } from './components/accordion/accordion-item.component';\nimport { AccordionDirective } from './components/accordion/accordion.directive';\nimport { AppModule } from './components/app/app.module';\nimport { AvatarComponent } from './components/avatar/avatar.component';\nimport { ButtonComponent } from './components/button/button.component';\nimport { CalendarComponent } from './components/calendar/calendar.component';\nimport { CardFooterComponent } from './components/card/card-footer/card-footer.component';\nimport { CardHeaderComponent } from './components/card/card-header/card-header.component';\nimport { CardComponent } from './components/card/card.component';\nimport { ChartDeprecatedComponent } from './components/chart-deprecated/chart-deprecated.component';\nimport { ChartModule } from './components/chart/chart.module';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { ChipComponent } from './components/chip/chip.component';\nimport { DividerComponent } from './components/divider/divider.component';\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\nimport { EmptyStateComponent } from './components/empty-state/empty-state.component';\nimport { FabSheetComponent } from './components/fab-sheet/fab-sheet.component';\nimport { FlagComponent } from './components/flag/flag.component';\nimport { DateInputDirective } from './components/form-field/directives/date/date-input.directive';\nimport { DecimalMaskDirective } from './components/form-field/directives/decimal-mask/decimal-mask.directive';\nimport { FormFieldMessageComponent } from './components/form-field/form-field-message/form-field-message.component';\nimport { FormFieldComponent } from './components/form-field/form-field.component';\nimport { InputCounterComponent } from './components/form-field/input-counter/input-counter.component';\nimport { InputComponent } from './components/form-field/input/input.component';\nimport { TextareaComponent } from './components/form-field/textarea/textarea.component';\nimport { BreakpointHelperService } from './components/grid/breakpoint-helper.service';\nimport { GridComponent } from './components/grid/grid.component';\nimport { IconModule } from './components/icon/icon.module';\nimport { ItemGroupComponent } from './components/item-group/item-group.component';\nimport { ItemSlidingComponent } from './components/item-sliding/item-sliding.component';\nimport { ItemModule } from './components/item/item.module';\nimport { ListModule } from './components/list/list.module';\nimport { GroupByPipe } from './components/list/pipes/group-by.pipe';\nimport { LoadingOverlayComponent } from './components/loading-overlay/loading-overlay.component';\nimport { LoadingOverlayService } from './components/loading-overlay/loading-overlay.service';\nimport { ActionSheetComponent } from './components/modal/action-sheet/action-sheet.component';\nimport { AlertComponent } from './components/modal/alert/alert.component';\nimport { ModalFooterComponent } from './components/modal/footer/modal-footer.component';\nimport { ModalCompactWrapperComponent } from './components/modal/modal-wrapper/compact/modal-compact-wrapper.component';\nimport { ModalWrapperComponent } from './components/modal/modal-wrapper/modal-wrapper.component';\nimport { ActionSheetHelper } from './components/modal/services/action-sheet.helper';\nimport { AlertHelper } from './components/modal/services/alert.helper';\nimport { ModalController } from './components/modal/services/modal.controller';\nimport { ModalHelper } from './components/modal/services/modal.helper';\nimport { PageModule } from './components/page/page.module';\nimport { PopoverComponent } from './components/popover/popover.component';\nimport { ProgressCircleRingComponent } from './components/progress-circle/progress-circle-ring.component';\nimport { ProgressCircleComponent } from './components/progress-circle/progress-circle.component';\nimport { RadioGroupComponent } from './components/radio/radio-group/radio-group.component';\nimport { RadioComponent } from './components/radio/radio.component';\nimport { RangeComponent } from './components/range/range.component';\nimport { ReorderListComponent } from './components/reorder-list/reorder-list.component';\nimport { RouterOutletModule } from './components/router-outlet/router-outlet.module';\nimport { SectionHeaderComponent } from './components/section-header/section-header.component';\nimport { SegmentedControlComponent } from './components/segmented-control/segmented-control.component';\nimport { ComponentLoaderDirective } from './components/shared/component-loader.directive';\nimport { ResizeObserverFactory } from './components/shared/resize-observer/resize-observer.factory';\nimport { ResizeObserverService } from './components/shared/resize-observer/resize-observer.service';\nimport { SlideButtonComponent } from './components/slide-button/slide-button.component';\nimport { SlideDirective, SlidesComponent } from './components/slides/slides.component';\nimport { SpinnerModule } from './components/spinner/spinner.module';\nimport { StockChartDeprecatedComponent } from './components/stock-chart-deprecated/stock-chart-deprecated.component';\nimport { TabsModule } from './components/tabs/tabs.module';\nimport { ToastController } from './components/toast/services/toast.controller';\nimport { ToastHelper } from './components/toast/services/toast.helper';\nimport { ToggleButtonModule } from './components/toggle-button/toggle-button.module';\nimport { ToggleComponent } from './components/toggle/toggle.component';\nimport { KirbyBadge as BadgeComponent } from './components/web-component-proxies.component';\nimport { customElementsInitializer } from './custom-elements-initializer';\nimport { ElementAsButtonDirective } from './directives/element-as-button/element-as-button.directive';\nimport { KeyHandlerDirective } from './directives/key-handler/key-handler.directive';\nimport { ModalRouterLinkDirective } from './directives/modal-router-link/modal-router-link.directive';\nimport { ThemeColorDirective } from './directives/theme-color/theme-color.directive';\n\nconst exportedDeclarations = [\n CardComponent,\n CardHeaderComponent,\n CardFooterComponent,\n ButtonComponent,\n ChartDeprecatedComponent,\n StockChartDeprecatedComponent,\n GridComponent,\n ComponentLoaderDirective,\n AvatarComponent,\n GroupByPipe,\n CalendarComponent,\n CheckboxComponent,\n ActionSheetComponent,\n ModalFooterComponent,\n ModalRouterLinkDirective,\n SegmentedControlComponent,\n ChipComponent,\n BadgeComponent,\n ThemeColorDirective,\n DateInputDirective,\n DecimalMaskDirective,\n SlideButtonComponent,\n ToggleComponent,\n EmptyStateComponent,\n FormFieldComponent,\n InputComponent,\n InputCounterComponent,\n TextareaComponent,\n FabSheetComponent,\n DividerComponent,\n ReorderListComponent,\n DropdownComponent,\n LoadingOverlayComponent,\n ProgressCircleComponent,\n FlagComponent,\n SlidesComponent,\n SlideDirective,\n AccordionDirective,\n AccordionItemComponent,\n ItemSlidingComponent,\n RadioComponent,\n RadioGroupComponent,\n RangeComponent,\n ElementAsButtonDirective,\n ItemGroupComponent,\n SectionHeaderComponent,\n];\n\nconst declarations = [\n ...exportedDeclarations,\n KeyHandlerDirective,\n FormFieldMessageComponent,\n AlertComponent,\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ProgressCircleRingComponent,\n PopoverComponent,\n];\n\nconst exportedModules = [\n AppModule,\n RouterOutletModule,\n PageModule,\n TabsModule,\n IconModule,\n ItemModule,\n ToggleButtonModule,\n ListModule,\n ChartModule,\n SpinnerModule,\n];\n\nconst exports = [...exportedModules, ...exportedDeclarations];\n\nconst importedModules = [...exportedModules];\n\nconst providers = [\n ModalController,\n ActionSheetHelper,\n ModalHelper,\n AlertHelper,\n ToastHelper,\n ToastController,\n BreakpointHelperService,\n LoadingOverlayService,\n ResizeObserverFactory,\n ResizeObserverService,\n customElementsInitializer(),\n];\n\nconst entryComponents = [\n ModalWrapperComponent,\n ModalCompactWrapperComponent,\n ActionSheetComponent,\n AlertComponent,\n];\n\nconst ConfigToken = new InjectionToken<any>('USERCONFIG');\nexport interface KirbyConfig {\n moduleRootRoutePath?: string;\n}\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n IonicModule.forRoot({\n mode: 'ios',\n inputShims: true,\n scrollAssist: true,\n scrollPadding: false,\n }),\n ...importedModules,\n ],\n declarations: declarations,\n providers: providers,\n entryComponents: entryComponents,\n exports: exports,\n})\nexport class KirbyModule {\n static forChild(config?: KirbyConfig): ModuleWithProviders<KirbyModule> {\n return {\n ngModule: KirbyModule,\n providers: [\n {\n provide: ConfigToken,\n useValue: config,\n },\n ],\n };\n }\n\n constructor(\n modalController: ModalController,\n @Optional() @Inject(ConfigToken) config?: KirbyConfig\n ) {\n modalController.initialize(config && config.moduleRootRoutePath);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {AccordionItemComponent as ɵeo} from './lib/components/accordion/accordion-item.component';\nexport {AccordionDirective as ɵen} from './lib/components/accordion/accordion.directive';\nexport {ProxyCmp as ɵa} from './lib/components/angular-component-lib/utils';\nexport {AppComponent as ɵc} from './lib/components/app/app.component';\nexport {AppModule as ɵb} from './lib/components/app/app.module';\nexport {AvatarComponent as ɵdh} from './lib/components/avatar/avatar.component';\nexport {ButtonComponent as ɵbc} from './lib/components/button/button.component';\nexport {CalendarComponent as ɵdi} from './lib/components/calendar/calendar.component';\nexport {CalendarHelper as ɵdj} from './lib/components/calendar/helpers/calendar.helper';\nexport {CardFooterComponent as ɵcs} from './lib/components/card/card-footer/card-footer.component';\nexport {CardHeaderComponent as ɵcr} from './lib/components/card/card-header/card-header.component';\nexport {CardComponent as ɵcq} from './lib/components/card/card.component';\nexport {ChartDeprecatedHelper as ɵcu} from './lib/components/chart-deprecated/chart-deprecated-helper';\nexport {ChartDeprecatedComponent as ɵct} from './lib/components/chart-deprecated/chart-deprecated.component';\nexport {ACTIVITYGAUGE_OPTIONS as ɵdb,ActivityGaugeOptions as ɵdc} from './lib/components/chart-deprecated/options/activitygauge';\nexport {AREASPLINE_OPTIONS as ɵcx,AreaSplineOptions as ɵcy} from './lib/components/chart-deprecated/options/areaspline';\nexport {DONUT_OPTIONS as ɵcv,DonutOptions as ɵcw} from './lib/components/chart-deprecated/options/donut';\nexport {TIMESERIES_OPTIONS as ɵcz,TimeSeriesOptions as ɵda} from './lib/components/chart-deprecated/options/timeseries';\nexport {ChartJSService as ɵco} from './lib/components/chart/chart-js/chart-js.service';\nexport {ChartComponent as ɵcn} from './lib/components/chart/chart.component';\nexport {ChartModule as ɵcm} from './lib/components/chart/chart.module';\nexport {ChartConfigService as ɵcp} from './lib/components/chart/configs/chart-config.service';\nexport {CheckboxComponent as ɵdk} from './lib/components/checkbox/checkbox.component';\nexport {ChipComponent as ɵdp} from './lib/components/chip/chip.component';\nexport {DividerComponent as ɵed} from './lib/components/divider/divider.component';\nexport {DropdownComponent as ɵef} from './lib/components/dropdown/dropdown.component';\nexport {KeyboardHandlerService as ɵeh} from './lib/components/dropdown/keyboard-handler.service';\nexport {EmptyStateComponent as ɵdv} from './lib/components/empty-state/empty-state.component';\nexport {FabSheetComponent as ɵec} from './lib/components/fab-sheet/fab-sheet.component';\nexport {FlagComponent as ɵek} from './lib/components/flag/flag.component';\nexport {DateInputDirective as ɵdr} from './lib/components/form-field/directives/date/date-input.directive';\nexport {DecimalMaskDirective as ɵds} from './lib/components/form-field/directives/decimal-mask/decimal-mask.directive';\nexport {FormFieldMessageComponent as ɵev} from './lib/components/form-field/form-field-message/form-field-message.component';\nexport {FormFieldComponent as ɵdw} from './lib/components/form-field/form-field.component';\nexport {InputCounterComponent as ɵdx} from './lib/components/form-field/input-counter/input-counter.component';\nexport {InputComponent as ɵea} from './lib/components/form-field/input/input.component';\nexport {TextareaComponent as ɵeb} from './lib/components/form-field/textarea/textarea.component';\nexport {BreakpointHelperService as ɵdf} from './lib/components/grid/breakpoint-helper.service';\nexport {GridComponent as ɵde} from './lib/components/grid/grid.component';\nexport {IconRegistryService as ɵbe} from './lib/components/icon/icon-registry.service';\nexport {ICON_SETTINGS as ɵbg,IconSettings as ɵbf} from './lib/components/icon/icon-settings';\nexport {IconComponent as ɵbd} from './lib/components/icon/icon.component';\nexport {IconModule as ɵbp} from './lib/components/icon/icon.module';\nexport {ItemGroupComponent as ɵes} from './lib/components/item-group/item-group.component';\nexport {ItemSlidingComponent as ɵep} from './lib/components/item-sliding/item-sliding.component';\nexport {ItemComponent as ɵbs} from './lib/components/item/item.component';\nexport {ItemModule as ɵbr} from './lib/components/item/item.module';\nexport {LabelComponent as ɵbt} from './lib/components/item/label/label.component';\nexport {InfiniteScrollDirective as ɵca} from './lib/components/list/directives/infinite-scroll.directive';\nexport {ListItemColorDirective as ɵcl} from './lib/components/list/directives/list-item-color.directive';\nexport {ListHelper as ɵby} from './lib/components/list/helpers/list-helper';\nexport {ListExperimentalComponent as ɵck} from './lib/components/list/list-experimental/list-experimental.component';\nexport {ListHeaderComponent as ɵcj} from './lib/components/list/list-header/list-header.component';\nexport {ListItemComponent as ɵch} from './lib/components/list/list-item/list-item.component';\nexport {ListSectionHeaderComponent as ɵci} from './lib/components/list/list-section-header/list-section-header.component';\nexport {ListComponent as ɵbx} from './lib/components/list/list.component';\nexport {ListFlexItemDirective as ɵcc,ListFooterDirective as ɵcg,ListHeaderDirective as ɵce,ListItemDirective as ɵcb,ListItemTemplateDirective as ɵcd,ListSectionHeaderDirective as ɵcf} from './lib/components/list/list.directive';\nexport {ListModule as ɵbw} from './lib/components/list/list.module';\nexport {GroupByPipe as ɵbz} from './lib/components/list/pipes/group-by.pipe';\nexport {LoadingOverlayComponent as ɵei} from './lib/components/loading-overlay/loading-overlay.component';\nexport {LoadingOverlayService as ɵfb} from './lib/components/loading-overlay/loading-overlay.service';\nexport {ActionSheetComponent as ɵdl} from './lib/components/modal/action-sheet/action-sheet.component';\nexport {AlertComponent as ɵew} from './lib/components/modal/alert/alert.component';\nexport {ModalFooterComponent as ɵdm} from './lib/components/modal/footer/modal-footer.component';\nexport {ModalCompactWrapperComponent as ɵex} from './lib/components/modal/modal-wrapper/compact/modal-compact-wrapper.component';\nexport {ModalWrapperComponent as ɵba} from './lib/components/modal/modal-wrapper/modal-wrapper.component';\nexport {ActionSheetHelper as ɵj} from './lib/components/modal/services/action-sheet.helper';\nexport {AlertHelper as ɵk} from './lib/components/modal/services/alert.helper';\nexport {ModalAnimationBuilderService as ɵg} from './lib/components/modal/services/modal-animation-builder.service';\nexport {ModalNavigationService as ɵl} from './lib/components/modal/services/modal-navigation.service';\nexport {ModalController as ɵe} from './lib/components/modal/services/modal.controller';\nexport {ModalHelper as ɵf} from './lib/components/modal/services/modal.helper';\nexport {Modal as ɵbb} from './lib/components/modal/services/modal.interfaces';\nexport {PageFooterComponent as ɵz} from './lib/components/page/page-footer/page-footer.component';\nexport {PageActionsComponent as ɵv,PageActionsDirective as ɵq,PageComponent as ɵw,PageContentComponent as ɵu,PageContentDirective as ɵr,PageProgressComponent as ɵs,PageTitleComponent as ɵt,PageTitleDirective as ɵo,PageToolbarTitleDirective as ɵp} from './lib/components/page/page.component';\nexport {PageModule as ɵn} from './lib/components/page/page.module';\nexport {PopoverComponent as ɵeg} from './lib/components/popover/popover.component';\nexport {ProgressCircleRingComponent as ɵey} from './lib/components/progress-circle/progress-circle-ring.component';\nexport {ProgressCircleComponent as ɵej} from './lib/components/progress-circle/progress-circle.component';\nexport {RadioGroupComponent as ɵdy} from './lib/components/radio/radio-group/radio-group.component';\nexport {RadioComponent as ɵdz} from './lib/components/radio/radio.component';\nexport {RangeComponent as ɵeq} from './lib/components/range/range.component';\nexport {ReorderListComponent as ɵee} from './lib/components/reorder-list/reorder-list.component';\nexport {RouterOutletComponent as ɵd} from './lib/components/router-outlet/router-outlet.component';\nexport {RouterOutletModule as ɵm} from './lib/components/router-outlet/router-outlet.module';\nexport {SectionHeaderComponent as ɵet} from './lib/components/section-header/section-header.component';\nexport {SegmentedControlComponent as ɵdo} from './lib/components/segmented-control/segmented-control.component';\nexport {ComponentLoaderDirective as ɵdg} from './lib/components/shared/component-loader.directive';\nexport {ResizeObserverFactory as ɵbi} from './lib/components/shared/resize-observer/resize-observer.factory';\nexport {ResizeObserverService as ɵbh} from './lib/components/shared/resize-observer/resize-observer.service';\nexport {SlideButtonComponent as ɵdt} from './lib/components/slide-button/slide-button.component';\nexport {SlideDirective as ɵel,SlidesComponent as ɵem} from './lib/components/slides/slides.component';\nexport {SpinnerComponent as ɵbn} from './lib/components/spinner/spinner.component';\nexport {SpinnerModule as ɵbm} from './lib/components/spinner/spinner.module';\nexport {StockChartDeprecatedComponent as ɵdd} from './lib/components/stock-chart-deprecated/stock-chart-deprecated.component';\nexport {TabButtonComponent as ɵbq} from './lib/components/tabs/tab-button/tab-button.component';\nexport {TabsComponent as ɵx} from './lib/components/tabs/tabs.component';\nexport {TabsModule as ɵbo} from './lib/components/tabs/tabs.module';\nexport {TabsService as ɵy} from './lib/components/tabs/tabs.service';\nexport {ToastController as ɵfa} from './lib/components/toast/services/toast.controller';\nexport {ToastHelper as ɵez} from './lib/components/toast/services/toast.helper';\nexport {ToggleButtonComponent as ɵbv} from './lib/components/toggle-button/toggle-button.component';\nexport {ToggleButtonModule as ɵbu} from './lib/components/toggle-button/toggle-button.module';\nexport {ToggleComponent as ɵdu} from './lib/components/toggle/toggle.component';\nexport {appInitialize as ɵfc,customElementsInitializer as ɵfd} from './lib/custom-elements-initializer';\nexport {ElementAsButtonDirective as ɵer} from './lib/directives/element-as-button/element-as-button.directive';\nexport {FitHeadingDirective as ɵbk} from './lib/directives/fit-heading/fit-heading.directive';\nexport {FitHeadingModule as ɵbj} from './lib/directives/fit-heading/fit-heading.module';\nexport {KeyHandlerDirective as ɵeu} from './lib/directives/key-handler/key-handler.directive';\nexport {ModalRouterLinkDirective as ɵdn} from './lib/directives/modal-router-link/modal-router-link.directive';\nexport {ThemeColorDirective as ɵdq} from './lib/directives/theme-color/theme-color.directive';\nexport {LineClampHelper as ɵbl} from './lib/helpers/line-clamp-helper';\nexport {PlatformService as ɵh} from './lib/helpers/platform.service';\nexport {WindowRef as ɵi} from './lib/types/window-ref';"],"names":["ModalController","getColor","fontSize","colorPoints","getThemeColorHexString","defaultOptions","dateFormat","Highcharts","Highcharts.stockChart","ToastController","exportedDeclarations","BadgeComponent","declarations"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEiB,eAShB;AATD,WAAiB,cAAc;IAC7B,IAAY,QAMX;IAND,WAAY,QAAQ;;QAElB,6BAAQ,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAA,CAAA;QAC/D,6BAAQ,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAA,CAAA;QAC/D,4BAAO,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAA,CAAA;QAC7D,kCAAa,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,gBAAA,CAAA;KACzE,EANW,QAAQ,GAAR,uBAAQ,KAAR,uBAAQ,QAMnB;IACY,qBAAM,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;AAC9D,CAAC,EATgB,cAAc,KAAd,cAAc;;MCKlB,qBAAqB;;;YALjC,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,wMAA6C;;aAE9C;;;mBAEE,KAAK;;;MCCK,oBAAoB;IALjC;QAMW,qBAAgB,GAAG,QAAQ,CAAC;QAC5B,eAAU,GAAY,KAAK,CAAC;QAC5B,aAAQ,GAAY,KAAK,CAAC;QAIzB,WAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC5B,eAAU,GAAkC,IAAI,YAAY,EAAmB,CAAC;KAS3F;IAPC,YAAY,CAAC,SAA0B;QACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;;;YArBF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,0iBAA4C;;aAE7C;;;+BAEE,KAAK;yBACL,KAAK;uBACL,KAAK;qBACL,KAAK;wBACL,KAAK;oBACL,KAAK;qBACL,MAAM;yBACN,MAAM;;;;;;;;;;;;MCNI,iBAAiB;IAC5B,YAAoB,oBAAqC;QAArC,yBAAoB,GAApB,oBAAoB,CAAiB;KAAI;IAEhD,eAAe,CAAC,MAAyB;;YACpD,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,YAAY,EAAmB,CAAC;YAEvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACtD,SAAS,EAAE,oBAAoB;gBAC/B,QAAQ,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;gBACjD,cAAc,kCACT,MAAM,KACT,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB;gBACD,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,MAAM,kBAAkB,GAAiB,MAAM,CAAC,SAAS,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YACpF,MAAM,sBAAsB,GAAiB,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,KACrE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CACvB,CAAC;YACF,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClB,kBAAkB,CAAC,WAAW,EAAE,CAAC;gBACjC,sBAAsB,CAAC,WAAW,EAAE,CAAC;aACtC,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;gBACvC,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE;aACtC,CAAC;SACH;KAAA;;;YAnCF,UAAU;;;;YATFA,iBAAe;;;MCIX,SAAS;IACpB,IAAI,YAAY;QACd,OAAO,MAAM,CAAC;KACf;;;;YANF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;MCQY,cAAc;IAuBzB,YAAoB,UAAmC,EAAU,SAAoB;QAAjE,eAAU,GAAV,UAAU,CAAyB;QAAU,cAAS,GAAT,SAAS,CAAW;QAtB5E,6BAAwB,GAAG,EAAE,CAAC;QAE/B,YAAO,GAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KAoBiB;IAjBzF,IACI,KAAK,CAAC,KAAkC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;KAC7D;IAGD,IACI,OAAO,CAAC,OAAoC;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;KACrE;IAUD,eAAe;QACb,UAAU,CAAC;YACT,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;SACxC,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;KACnC;IAED,aAAa;;QAEX,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;KAC7D;IAED,QAAQ;QACN,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACnD;IAED,IAAI;QACF,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,eAAe,IAAI,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAClD;;;YApDF,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,+sBAAqC;;gBAGrC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE;;aACtC;;;;YAXkC,UAAU;YAGpC,SAAS;;;2BAWf,SAAS,SAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;oBAI1C,KAAK;sBAML,KAAK;uBAKL,KAAK;6BACL,KAAK;wBACL,KAAK;iCACL,KAAK;4BACL,KAAK;;;;;;;;;;;;MCzBK,WAAW;IACtB,YAAoB,oBAAqC;QAArC,yBAAoB,GAApB,oBAAoB,CAAiB;KAAI;IAEhD,SAAS,CAAC,MAAmB;;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACtD,SAAS,EAAE,cAAc;gBACzB,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBAC9C,QAAQ,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;gBAC1C,IAAI,EAAE,KAAK;gBACX,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;YAEH,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;gBACvC,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE;aACtC,CAAC;SACH;KAAA;IAEO,iBAAiB,CAAC,MAAmB;QAC3C,uCACK,MAAM,KACT,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EACpC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC5C,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EACtD,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EACzC,cAAc,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IACrD;KACH;IAEO,YAAY,CAAC,MAAmB;QACtC,IAAI,IAAY,CAAC;QACjB,IAAI,MAAM,CAAC,SAAS,EAAE;YACpB,OAAO,CAAC,IAAI,CACV,mFAAmF,CACpF,CAAC;YACF,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;SACzB;QACD,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACpC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;aACrB;iBAAM;gBACL,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B;SACF;QACD,OAAO,IAAI,CAAC;KACb;IAED,qBAAqB,CAAC,MAAM;QAC1B,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;KAClF;IAEO,gBAAgB,CAAC,MAAmB;QAC1C,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,OAAO,CAAC,IAAI,CACV,2FAA2F,CAC5F,CAAC;SACH;QACD,OAAO,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,CAAC;KACjD;;;YA7DF,UAAU;;;;YANFA,iBAAe;;;;;;;;;;;;MCOX,sBAAsB;IACjC,YAAoB,MAAc,EAAU,KAAqB;QAA7C,WAAM,GAAN,MAAM,CAAQ;QAAU,UAAK,GAAL,KAAK,CAAgB;QA0LzD,2BAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACtD,MAAM,CAAC,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAAC,CAC1E,CAAC;KA5LmE;IAErE,YAAY,CAAC,GAAW;QACtB,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAChC;IAEO,wBAAwB;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACjC,OAAO,UAAU,CAAC,UAAU,EAAE;YAC5B,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;SACpC;QACD,OAAO,UAAU,CAAC;KACnB;IAEa,cAAc,CAC1B,WAAqB,EACrB,mBAA4B;;YAE5B,MAAM,eAAe,GAAW,EAAE,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;YAC1D,IAAI,WAAW,GAAa,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;YAC3F,IAAI,eAAe,EAAE;gBACnB,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;aACzE;YACD,OAAO,WAAW,CAAC;SACpB;KAAA;IAEa,iBAAiB,CAAC,MAAc,EAAE,mBAA4B;;YAC1E,IAAI,mBAAmB,EAAE;gBACvB,MAAM,YAAY,GAAG,mBAAmB;qBACrC,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,CAAC;qBACV,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;aACtC;YAED,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiC,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC1F,OAAO,eAAe,CAAC;SACxB;KAAA;IAEa,oBAAoB;;YAChC,MAAM,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAE7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,iBAAiB,EAAE;;gBAEhD,OAAO,QAAQ,CAAC;aACjB;YAED,IAAI,iBAAiB,EAAE;;gBAErB,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;aAC7D;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,OAAO,UAAU,CAAC,UAAU,EAAE;gBAC5B,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;aACpC;YACD,MAAM,wBAAwB,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAC7D,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,OAAO,CACpC,CAAC;YAEF,OAAO,QAAQ,CAAC,MAAM,CACpB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,KACpC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAC7E,CACF,CAAC;SACH;KAAA;IAEO,iCAAiC,CAAC,UAAoB,EAAE,MAAc;QAC5E,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC;QAE1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAElF,IAAI,CAAC,iBAAiB;YAAE,OAAO,UAAU,CAAC;QAE1C,MAAM,eAAe,GAAG,KAAK,CAAC;QAC9B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QAC/D,MAAM,8BAA8B,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC/E,OAAO,8BAA8B,CAAC;KACvC;IAEO,oBAAoB,CAAC,GAAW,EAAE,MAAc;QACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9E,IAAI,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,iBAAiB,EAAE;;YAEtB,MAAM,UAAU,GAAG,KAAK,CAAC;YACzB,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAC1C,CAAC,IAAI,KACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,mCAAmC,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CACzF,CAAC;SACH;QACD,OAAO,iBAAiB,CAAC;KAC1B;IAEO,mCAAmC,CACzC,IAAY,EACZ,uBAA+B,EAC/B,UAAmB;QAEnB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,KAAK,CAAC;QAC9B,IAAI,iBAAiB,GAAG,uBAAuB,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAChF,iBAAiB,GAAG,kBAAkB,CAAC;SACxC;QACD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;QAGxD,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB;YAClF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;;YAEvC,OAAO,iBAAiB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,KAAK,WAAW,CAAC;SAC/E,CAAC,CAAC;QACH,IAAI,UAAU,EAAE;;YAEd,OAAO,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,sBAAsB,CAAC;SAC5D;QACD,OAAO,sBAAsB,CAAC;KAC/B;IAEO,aAAa,CAAC,MAAc,EAAE,UAAoB;QACxD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;cACvB,EAAe,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;cACvF,EAAE,CAAC;KACR;IAEO,YAAY,CAAC,KAAY,EAAE,UAAoB;QACrD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAElC,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACpC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;KACvE;IAEO,iBAAiB,CAAC,KAAY,EAAE,UAAoB;QAC1D,MAAM,eAAe,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE;YACpD,MAAM,eAAe,GAAG,IAAI,eAAe,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;YAC7D,MAAM,cAAc,GAAG,CAAC,GAAG,UAAU,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,cAAc,CAAC,CAAC;SACzB;QACD,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,OAAQ,EAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;KACzF;IAEO,kBAAkB,CAAC,MAAc,EAAE,UAAoB;QAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;cACvB,EAAe,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;cAC5F,EAAE,CAAC;KACR;IAEO,gBAAgB,CAAC,aAA4B;QACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC7D,IAAI,CAAC,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE;YAC/D,OAAO,IAAI,CAAC;SACb;QACD,MAAM,iBAAiB,GAAG,CACxB,iBAAiB,CAAC,kBAAkB,CAAC,QAAQ;YAC7C,iBAAiB,CAAC,kBAAkB,CAAC,YAAY,EACjD,QAAQ,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE;YAClC,OAAO,IAAI,CAAC;SACb;QAED,MAAM,uBAAuB,GAAG,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAExE,OAAO,wBAAwB,KAAK,uBAAuB,CAAC;KAC7D;IAMa,wCAAwC;;YACpD,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE;gBACtC,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;gBACzF,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;aAC1E;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC;SACpC;KAAA;IAEO,sBAAsB,CAC5B,cAAyC,EACzC,aAA0B,EAC1B,4BAAqC;QAErC,OAAO,cAAc,CAAC,IAAI,CACxB,MAAM,CAAC,CAAC,aAAa,KACnB,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,aAAa,EAAE,4BAA4B,CAAC,CAC3F,EACD,GAAG,CAAC,CAAC,aAAa,MAAM;YACtB,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE;YACtC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;SACjD,CAAC,CAAC,CACJ,CAAC;KACH;IAEO,wBAAwB,CAC9B,cAAyC,EACzC,aAA0B,EAC1B,4BAAqC;QAErC,OAAO,cAAc,CAAC,IAAI,CACxB,QAAQ,EAAE,EACV,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,KACzB,IAAI,CAAC,yBAAyB,CAAC,aAAa,EAAE,cAAc,EAAE,4BAA4B,CAAC,CAC5F;QACD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC;YACzB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;;YAE/E,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;SACrE,CAAC,EACF,MAAM,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,CAC3C,CAAC;KACH;IAEO,yBAAyB,CAC/B,aAA0B,EAC1B,aAA4B,EAC5B,4BAAqC;QAErC,MAAM,QAAQ,GAAG,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,IAAI,4BAA4B,EAAE;;YAE7C,KAAK,IAAI,KAAK,IAAI,aAAa,EAAE;gBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC;gBACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,mCAAmC,CAC/D,QAAQ,EACR,KAAK,EACL,UAAU,CACX,CAAC;gBACF,IAAI,gBAAgB,EAAE;oBACpB,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;iBACP;aACF;SACF;QACD,OAAO,QAAQ,CAAC;KACjB;IAEK,kBAAkB,CACtB,WAAqB,EACrB,mBAA4B;;YAE5B,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,wCAAwC,EAAE,CAAC;gBAC7E,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;gBAChF,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9C,IAAI,cAAc,EAAE;oBAClB,MAAM,4BAA4B,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACvF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAC5C,cAAc,EACd,aAAa,EACb,4BAA4B,CAC7B,CAAC;oBACF,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAChD,cAAc,EACd,aAAa,EACb,4BAA4B,CAC7B,CAAC;oBACF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;iBACrC;aACF;YACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;SACnD;KAAA;IAEK,eAAe,CAAC,IAAuB,EAAE,WAAoB;;YACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC5F,WAAW;gBACX,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE;aAC5C,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;SACf;KAAA;IAEK,mBAAmB,CAAC,YAAoB,EAAE,WAAoB;;YAClE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE;gBAC1C,WAAW;gBACX,UAAU,EAAE,IAAI,CAAC,wBAAwB,EAAE;aAC5C,CAAC,CAAC;SACJ;KAAA;IAEK,wBAAwB;;YAC5B,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9D,IAAI,qBAAqB,CAAC,MAAM,KAAK,OAAO,EAAE;gBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;gBACjE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE;oBACpC,UAAU,EAAE,WAAW;iBACxB,CAAC,CAAC;aACJ;YACD,OAAO,MAAM,CAAC;SACf;KAAA;IAEO,gBAAgB,CAAC,qBAAqC;QAC5D,IAAI,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAC/C,OAAO,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE;YACpE,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;SAClC;QACD,OAAO,WAAW,CAAC;KACpB;;;;YAlUF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;YANqB,MAAM;YAApD,cAAc;;;MCmBD,KAAK;;;MClBd,eAAe,GAAG,IAAI,cAAc,CAAS,gBAAgB;;;;;;;;;;;MCc7D,4BAA4B;IAYvC,YACU,QAAkB,EAClB,UAAmC,EACnC,SAAoB;QAFpB,aAAQ,GAAR,QAAQ,CAAU;QAClB,eAAU,GAAV,UAAU,CAAyB;QACnC,cAAS,GAAT,SAAS,CAAW;QAd9B,YAAO,GAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChE,mBAAc,GAAG,KAAK,CAAC;QAKN,uBAAkB,GAAG,IAAI,OAAO,EAAQ,CAAC;QACzC,wBAAmB,GAAG,IAAI,OAAO,EAAQ,CAAC;QAClD,eAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACjD,cAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;KAMtD;IAEJ,QAAQ;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/E,MAAM,EAAE,IAAI,CAAC,QAAQ;SACtB,CAAC,CAAC;KACJ;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;gBAC1D,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;aACpC,CAAC,CAAC;SACJ;KACF;IAEO,4BAA4B;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;gBAC3D,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;aACrC,CAAC,CAAC;SACJ;KACF;IAEK,KAAK,CAAC,IAAU;;YACpB,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3E,IAAI,eAAe,EAAE;gBACnB,MAAM,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACrC;SACF;KAAA;IAOD,aAAa;;QAEX,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;KAC7D;;;YArEF,SAAS,SAAC;gBACT,QAAQ,EAAE,6BAA6B;gBACvC,0HAAqD;gBAErD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;;gBAE1E,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,EAAE;;aACtC;;;;YAf6C,QAAQ;YAAlC,UAAU;YAGrB,SAAS;;;qBAgBf,KAAK;4BAqDL,YAAY,SAAC,cAAc,cAC3B,YAAY,SAAC,iBAAiB;;;MChEpB,eAAe;IAC1B,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;KAAI;IAE5C,OAAO;QACL,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC;KAC3E;IAED,iBAAiB;QACf,MAAM,KAAK,GAAG,eAAe,iBAAiB,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACrE,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;KAC9D;;;;YAdF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;YAJQ,SAAS;;;MCOL,aAAa,GAAG,IAAI,cAAc,CAAe,cAAc;;MCJ/D,mBAAmB;IAG9B,YAA+C,YAA2B;QAFlE,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;QAG/C,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;SACpF;KACF;IAEM,OAAO,CAAC,QAAgB,EAAE,OAAe;QAC9C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SAC1C;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,oBAAoB,QAAQ,kBAAkB,CAAC,CAAC;SAC9D;KACF;IAEM,QAAQ,CAAC,KAAa;QAC3B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO;SACR;QACD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;SACnC,CAAC,CAAC;KACJ;IAED,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAC/B,CAAC,UAAU,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAW,CAAA,CACtE,CAAC;KACH;IAED,OAAO,CAAC,IAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;KACxC;;;;YAxCF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;4CAIc,QAAQ,YAAI,MAAM,SAAC,aAAa;;;ACR/C;AACO,MAAM,iBAAiB,GAAiB;IAC7C,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,6CAA6C,EAAE;QAChF,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qCAAqC,EAAE;QAChE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,gCAAgC,EAAE;QACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,wCAAwC,EAAE;QACtE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACpE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACpE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACpE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qCAAqC,EAAE;QAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,sCAAsC,EAAE;QAClE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qCAAqC,EAAE;QAChE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,6CAA6C,EAAE;QAChF,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qCAAqC,EAAE;QAChE,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,+CAA+C,EAAE;QACpF,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,gCAAgC,EAAE;QACtD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,sCAAsC,EAAE;QAClE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,qCAAqC,EAAE;QAChE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,0CAA0C,EAAE;QAC1E,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,wCAAwC,EAAE;QACtE,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,uCAAuC,EAAE;QACpE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oCAAoC,EAAE;QAC9D,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,yCAAyC,EAAE;QACxE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,yCAAyC,EAAE;QACxE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oCAAoC,EAAE;QAC9D,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,2CAA2C,EAAE;QAC5E,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,+BAA+B,EAAE;QACpD,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oCAAoC,EAAE;QAC9D,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,iCAAiC,EAAE;QACxD,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,4CAA4C,EAAE;QAC9E,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,kCAAkC,EAAE;QAC1D,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,mCAAmC,EAAE;QAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oCAAoC,EAAE;QAC9D,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,0CAA0C,EAAE;QAC1E,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,oCAAoC,EAAE;KAC/D;CACF,CAAC;WAEsD,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;MAA9D,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG;;IC1D3C;AAAZ,WAAY,QAAQ;IAClB,qBAAS,CAAA;IACT,qBAAS,CAAA;IACT,qBAAS,CAAA;IACT,qBAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;MASY,aAAa;IA+CxB,YAAoB,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;QA9C5D,gBAAW,GAAS,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,UAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;KA6CiB;IArChE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,IAAU;;QAEjB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;;YAGxB,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,OAAO;aACR;SACF;;QAGD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;KACF;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,UAAU;;+EAEmB,CAAC,CAAC;SAC5E;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,IAAI;;;kCAGtB,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;SACzD;KACF;IAID,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC/E;aAAM,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE;YAChE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;SAC/E;KACF;IAEO,QAAQ,CAAC,KAAK,EAAE,IAAY;QAClC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;KACjD;;;YAlEF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,uDAAoC;;gBAGpC,IAAI,EAAE,EAAE,oBAAoB,EAAE,MAAM,EAAE;;aACvC;;;;YAjBQ,mBAAmB;;;mBAqBzB,WAAW,SAAC,OAAO,cACnB,KAAK;mBAGL,KAAK;yBACL,KAAK;;;ICfI;AAAZ,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;MAQY,eAAe;IA0D1B,YAAoB,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;QAxDvD,sBAAiB,GAAY,IAAI,CAAC;QAQlC,gBAAW,GAAY,KAAK,CAAC;QAWrB,gBAAW,GAAG,KAAK,CAAC;QAKpB,iBAAY,GAAG,KAAK,CAAC;QAuBpB,eAAU,GAAY,KAAK,CAAC;QAErC,SAAI,GAAiC,UAAU,CAAC,EAAE,CAAC;QAK3C,YAAO,GAAG,KAAK,CAAC;KAEmC;IA9C3D,IACW,gBAAgB;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IACW,UAAU;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;KACrC;IAED,IACW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,IACW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAED,IACI,SAAS;QACX,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;KACtE;IAED,IAAa,cAAc,CAAC,KAA4B;QACtD,IAAI,CAAC,iBAAiB,GAAG,KAAK,KAAK,GAAG,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,KAAK,KAAK,GAAG,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,KAAK,KAAK,GAAG,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,KAAK,KAAK,GAAG,CAAC;KACxC;IACD,IAAa,aAAa,CAAC,KAAc;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B;IAeD,kBAAkB;QAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC;QAC3D,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YACrD,IAAI,CAAC,WAAW;gBACd,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YACjF,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;SACvC;KACF;;;YAzEF,SAAS,SAAC;;gBAET,QAAQ,EAAE,2CAA2C;gBACrD,uCAAsC;;aAEvC;;;;YApBC,UAAU;;;gCAsBT,WAAW,SAAC,wBAAwB;gCAEpC,WAAW,SAAC,wBAAwB;gCAEpC,WAAW,SAAC,wBAAwB;gCAEpC,WAAW,SAAC,wBAAwB;0BAEpC,WAAW,SAAC,mBAAmB;+BAG/B,WAAW,SAAC,gBAAgB;yBAK5B,WAAW,SAAC,iBAAiB;yBAK7B,WAAW,SAAC,iBAAiB;0BAK7B,WAAW,SAAC,kBAAkB;wBAK9B,WAAW,SAAC,OAAO;6BAKnB,KAAK;4BAML,KAAK;yBAGL,KAAK;qBAEL,KAAK;yBACL,KAAK;mBACL,KAAK;mBAGL,YAAY,SAAC,aAAa;6BAC1B,YAAY,SAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;ACrEnD;;;;MAKa,qBAAqB;IAChC,MAAM,CAAC,QAAgC;QACrC,OAAO,OAAO,cAAc,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;KACpF;;;;YAJF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCPrB,qBAAqB;IAMhC,YAAoB,sBAA6C,EAAU,IAAY;QAAnE,2BAAsB,GAAtB,sBAAsB,CAAuB;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAF/E,qBAAgB,GAAG,IAAI,OAAO,EAAiD,CAAC;QAGtF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7F;IAED,OAAO,CACL,YAA2C,EAC3C,MAA4C;QAE5C,MAAM,OAAO,GAAG,YAAY,YAAY,UAAU,GAAG,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,IAAI,CAAC,QAAQ,EAAE;;gBAEjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAChC,CAAC,CAAC;aACJ;YACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC5C;KACF;IAED,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;;YAEjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;aAC5B,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC9B;IAED,SAAS,CAAC,YAA2C;QACnD,MAAM,OAAO,GAAG,YAAY,YAAY,UAAU,GAAG,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC;QAC/F,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;;gBAEjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAC1B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;iBAClC,CAAC,CAAC;aACJ;YACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACvC;KACF;IAEO,YAAY,CAAC,OAA8B;QACjD,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;aACf;SACF,CAAC,CAAC;KACJ;;;;YAzDF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;YAFzB,qBAAqB;YAJc,MAAM;;;;;;;;;;;;MC0CrC,qBAAqB;IAiEhC,YACU,QAAkB,EAClB,UAAmC,EACnC,QAAmB,EACnB,IAAY,EACZ,qBAA4C,EAC5C,wBAAkD,EAClD,SAAoB,EACpB,QAAyB;QAPzB,aAAQ,GAAR,QAAQ,CAAU;QAClB,eAAU,GAAV,UAAU,CAAyB;QACnC,aAAQ,GAAR,QAAQ,CAAW;QACnB,SAAI,GAAJ,IAAI,CAAQ;QACZ,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,cAAS,GAAT,SAAS,CAAW;QACpB,aAAQ,GAAR,QAAQ,CAAiB;QAtEnC,YAAO,GAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,kCAA6B,GAAG,GAAG,CAAC;QAuB7C,oBAAe,GAAG,KAAK,CAAC;QACxB,mBAAc,GAAwB,EAAE,CAAC;QACzC,iBAAY,GAAG,SAAQ,CAAC;QAGxB,oBAAe,GAAG,KAAK,CAAC;QAEf,uBAAkB,GAAG,IAAI,OAAO,EAAQ,CAAC;QACjD,eAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACzC,wBAAmB,GAAG,IAAI,OAAO,EAAQ,CAAC;QAClD,cAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;QAClD,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;QACrC,oBAAe,GAAG,IAAI,CAAC,cAAc;aAC1C,YAAY,EAAE;aACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAelD,aAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;QAOjC,eAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAuUnC,uBAAkB,GAAyC;YAC1E,oBAAoB,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa;YACzD,kBAAkB,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa;YAC5D,qBAAqB,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa;SAClE,CAAC;QA/TA,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAvED,IAAI,cAAc,CAAC,QAAiB;QAClC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC;KACrC;IAmCD,IAAY,gBAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,sCAAsC,EAAE,CAAC;SACxE;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IAED,IAAY,oBAAoB;QAC9B,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC/B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,sCAAsC,EAAE,CAAC;SAC5E;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACnC;IAGD,IACI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;KACxC;IAkBD,QAAQ;QACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,mCAAmC,EAAE,CAAC;QAC3C,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/E,MAAM,EAAE,IAAI,CAAC,QAAQ;SACtB,CAAC,CAAC;KACJ;IAEO,mCAAmC;QACzC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;YACzE,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,eAAe,CAAC;iBACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC9B,SAAS,CAAC;;gBAET,UAAU,CAAC;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;oBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;oBACtE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;oBACnD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;oBACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;oBAC1E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;iBACrE,CAAC,CAAC;aACJ,CAAC,CAAC;SACN;KACF;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO;QAC/C,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;;YAE3E,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;SACvF;KACF;IAEO,4BAA4B,CAAC,2BAAwD;QAC3F,IAAI,CAAC,2BAA2B;YAAE,OAAO;QACzC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK;YAC3E,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBACjC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAC9B;YACD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrE,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACjC,CAAC,CAAC;KACJ;IAEO,sBAAsB;QAC5B,MAAM,sBAAsB,GAAG,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC;QAC/D,IAAI,sBAAsB;YAAE,OAAO;QACnC,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;YACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,aAAa,EACb,YAAY,EACZ,iBAAiB,GAAG,iBAAiB,CAAC,2BAA2B,CAClE,CAAC;aACH;SACF,CAAC,CAAC;KACJ;IAEO,sBAAsB;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAc,gBAAgB,CAAC,CAAC;QAC7F,IAAI,CAAC,eAAe;YAAE,OAAO;;QAE7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;SACpD,CAAC,CAAC;KACJ;IAED,eAAe;QACb,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,aAAa,CAAC,CAAC;SAC5F;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;IAEO,wBAAwB;QAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;IAEO,mBAAmB;QACzB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK;YAC5E,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;YACpF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;SACrE,CAAC,CAAC;KACJ;IAEO,oBAAoB;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzD,IAAI,aAAa,EAAE;YACjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC;gBACtE,MAAM,eAAe,GAAG,aAAa,CAAC,aAAa,CAAc,OAAO,CAAC,CAAC;gBAC1E,IAAI,eAAe,EAAE;oBACnB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,CAAC,CAAC;iBACjD;aACF,CAAC,CAAC;SACJ;KACF;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,oBAAoB,EAAE;gBAC1D,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;aACpC,CAAC,CAAC;SACJ;KACF;IAEO,4BAA4B;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;gBAC3D,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;aACrC,CAAC,CAAC;SACJ;KACF;IAED,WAAW,CAAC,cAAwC;QAClD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;KAClD;IAED,cAAc,CAAC,cAAwC;QACrD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;KACrD;IAEK,KAAK,CAAC,IAAU;;YACpB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACzB,OAAO;aACR;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;;;gBAGlD,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzC,OAAO;aACR;;;;YAKD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO;gBAC/B,IAAI,CAAC,YAAY,GAAG;oBAClB,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACzC,OAAO,EAAE,CAAC;iBACX,CAAA,CAAC;gBACF,IAAI,CAAC,qBAAqB,GAAG,UAAU,CACrC,IAAI,CAAC,YAAY,EACjB,qBAAqB,CAAC,yBAAyB,CAChD,CAAC;aACH,CAAC,CAAC;SACJ;KAAA;IAID,aAAa;;QAEX,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;KAC7D;IAID,eAAe,CAAC,cAAsB;QACpC,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;KAC5C;IAID,eAAe;QACb,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;KAC/B;IAEO,sBAAsB,CAAC,MAAe;QAC5C,MAAM,qBAAqB,GACzB,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtE,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACnC,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACZ,IAAI,MAAM,EAAE;gBACV,MAAM,aAAa,GAAG,cAAc,CAAC,YAAY,CAAC;gBAClD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,aAAa,IAAI,CAAC,CAAC;aACrE;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aAClD;SACF,CAAC,CAAC;KACJ;IAEO,qBAAqB,CAAC,cAAsB;QAClD,MAAM,sBAAsB,GAAG,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;QAC1E,MAAM,qBAAqB,GAAG,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QAC5E,IAAI,sBAAsB,IAAI,qBAAqB;YAAE,OAAO;QAC5D,IAAI,CAAC,eAAe,GAAG,cAAc,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;KACzC;IAEO,kBAAkB,CAAC,cAAsB,EAAE,OAAgB;QACjE,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,mCAAmC,GAAG,IAAI,CAAC,KAAK,CACpD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,CACjF,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,mCAAmC,EAAE,CAAC,CAAC,CAAC;KAC1E;IAEO,SAAS,CAAC,OAAgB,EAAE,QAAgB,EAAE,KAAa;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MACZ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAC/E,CAAC;KACH;IAEO,cAAc,CAAC,OAAgB,EAAE,KAAa,EAAE,SAAkB;QACxE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MACZ,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAC/F,CAAC;KACH;IAEO,kBAAkB,CAAC,cAAsB;QAC/C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QAC3F,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC/F,IAAI,oBAAoB,GAAG,KAAK,CAAC;QACjC,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9D,IAAI,qBAAqB,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,GAAG,eAAe,IAAI,CAAC,CAAC;YACnF,oBAAoB,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SACrF;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAC5D,MAAM,qBAAqB,GAAG,oBAAoB;cAC9C,eAAe;cACf,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,IAAI,CAAC,CAAC;KACnF;IAED,kBAAkB,CAAC,KAAiB;QAClC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3D,QACE,KAAK,CAAC,MAAM,YAAY,WAAW;qBAClC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAC1D;aACH,CAAC,CAAC;;;YAGH,IAAI,CAAC,oBAAoB,EAAE;gBACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B;SACF;KACF;IAGD,eAAe;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAEO,iBAAiB;QACvB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAClE;IAEO,qBAAqB;QAC3B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,KAClF,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAC7B,CAAC;KACH;IAEO,gBAAgB,CAAC,KAA0B;QACjD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;;YAE/B,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YACtD,OAAO;SACR;QACD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,qBAAqB,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;;YAEzB,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;SACF;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC5B;IAED,iBAAiB;QACf,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;QAC/C,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IACE,QAAQ,CAAC,aAAa,YAAY,WAAW;gBAC7C,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC,EACpD;gBACA,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;aAC/B;SACF;KACF;IAQO,qBAAqB;QAC3B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC;YACnE,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC,aAAa,CAAc,YAAY,OAAO,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;SACnC,CAAC,CAAC;KACJ;IAEO,2BAA2B;QACjC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;cAC3B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,gBAAgB;cACrD,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC;KAC5D;IAEO,wBAAwB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAc,oBAAoB,CAAC,CAAC;KACvF;IAEO,SAAS,CAAC,KAAc,EAAE,SAAkB;QAClD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,EAAE;YAC1C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK;gBAC9C,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG;oBAC7B,iBAAiB;oBACjB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;iBAC5C,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;aACrE,CAAC,CAAC;SACJ;KACF;IAEO,WAAW,CAAC,KAAe;QACjC,IAAI,CAAC,CAAC,KAAK,EAAE;YACX,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;SACvD;KACF;IAEO,uBAAuB;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE;YAC3C,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;KACJ;IAEO,sCAAsC;QAC5C,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,CAAC,SAA2B;YAC3C,MAAM,UAAU,GAAG,SAAS;iBACzB,MAAM,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC;iBACnD,GAAG,CAAC,CAAC,QAAQ;;gBAEZ,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,KACjD,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzC,CAAC;aACH,CAAC,CAAC;YAEL,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS;iBAClC,MAAM,CAAC,GAAG,UAAU,CAAC;iBACrB,MAAM,CAAC,CAAC,IAAI,KAA0B,IAAI,YAAY,WAAW,CAAC,CAAC;YAEtE,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY;gBACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;;gBAE1E,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;aAChD,CAAC,CAAC;SACJ,CAAC;QACF,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACvC;IAEO,sCAAsC;QAC5C,MAAM,QAAQ,GAAiC,CAAC,OAAO;YACrD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,kBAAkB,GAAG,KAAK,CAAC,iBAAiB,GAAG,CAAC,CAAC;YACvD,IAAI,kBAAkB,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;aACrD;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;aACxD;SACF,CAAC;;QAGF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY;cAChD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAgB;cAC7C,SAAS,CAAC;QACd,MAAM,OAAO,GAA6B;YACxC,UAAU,EAAE,kBAAkB;YAC9B,IAAI;YACJ,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;SACrB,CAAC;QAEF,OAAO,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACpD;IAED,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;YACjC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;SAChC;;QAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,qBAAqB,CAAC;QAClC,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChF,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC1E,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;SACvE;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;AAxfe,+CAAyB,GAAG,GAAG,CAAC;;YAPjD,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,kiDAA6C;gBAE7C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;;aACpE;;;;YAlCC,QAAQ;YAHR,UAAU;YASV,SAAS;YAJT,MAAM;YAoBC,qBAAqB;YA1B5B,wBAAwB;YAwBjB,SAAS;YADT,eAAe;;;qBA0BrB,KAAK;kCAGL,YAAY,SAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;yBAGlD,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gCACtC,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;+BAExD,SAAS,SAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;gCAEvD,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;8BAExD,SAAS,SAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;2BAEtD,SAAS,SAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;wBAiCxC,WAAW,SAAC,cAAc;4BA8L1B,YAAY,SAAC,cAAc,cAC3B,YAAY,SAAC,iBAAiB;8BAM9B,YAAY,SAAC,2BAA2B,EAAE,CAAC,8BAA8B,CAAC,cAC1E,YAAY,SAAC,yBAAyB,EAAE,CAAC,uBAAuB,CAAC;8BAKjE,YAAY,SAAC,2BAA2B,cACxC,YAAY,SAAC,yBAAyB;8BAmFtC,YAAY,SAAC,eAAe;;;MC5XlB,4BAA4B;IACvC,YAAoB,aAAkC,EAAU,QAAyB;QAArE,kBAAa,GAAb,aAAa,CAAqB;QAAU,aAAQ,GAAR,QAAQ,CAAiB;QAExE,gBAAW,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,gBAAW,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/C,aAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;QACxC,yBAAoB,GAAG;YACtC,oBAAoB,EAAE,IAAI;SAC3B,CAAC;KAP2F;IAStF,cAAc,CAAC,eAAwC;QAC5D,OAAO,CAAC,MAAmB,EAAE,YAA0B;YACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa;iBACzC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAE,CAAC;iBACjD,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,yBAAyB,CAAC;iBAClD,YAAY,CAAC;gBACZ,gBAAgB,EAAE,MAAM;aACzB,CAAC;iBACD,gBAAgB,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAExC,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa;iBACxC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAE,CAAC;iBACrE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;iBAC5B,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;YAE/D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;iBACrC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC;iBAClB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;iBACxB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACvB,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAElC,IAAI,wBAAmC,CAAC;YACxC,IAAI,eAAe,EAAE;gBACnB,wBAAwB,GAAG,IAAI,CAAC,aAAa;qBAC1C,MAAM,EAAE;qBACR,UAAU,CAAC,eAAe,CAAC;qBAC3B,MAAM,CAAC,SAAS,EAAE,yBAAyB,EAAE,IAAI,CAAC,CAAC;aACvD;YAED,IAAI,YAAY,EAAE;gBAChB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBACpD,MAAM,YAAY,GAChB,YAAY,CAAC,OAAO,KAAK,WAAW;oBACnC,YAAoC,CAAC,iBAAiB,KAAK,SAAS,CAAC;gBAExE,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC;oBACnE,SAAS,EAAE,eAAe;oBAC1B,kBAAkB,EAAE,YAAY;oBAChC,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAE7B,IAAI,QAAQ,EAAE;;;;;;oBAMZ,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;0BAC3D,MAAM;0BACN,qCAAqC,CAAC;oBAC1C,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAC;oBAChE,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;oBACzE,MAAM,cAAc,GAAG,cAAc,cAAc,WAAW,iBAAiB,GAAG,CAAC;oBAEnF,mBAAmB;yBAChB,WAAW,CAAC;wBACX,SAAS,EAAE,cAAc;qBAC1B,CAAC;yBACD,cAAc,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;yBAC3E,UAAU,CAAC,YAAY,CAAC;yBACxB,SAAS,CAAC;wBACT;4BACE,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,aAAa;4BACrB,SAAS,EAAE,0BAA0B;4BACrC,YAAY,EAAE,KAAK;yBACpB;wBACD;4BACE,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,gBAAgB;4BACxB,SAAS,EAAE,cAAc;4BACzB,YAAY,EAAE,eAAe;yBAC9B;qBACF,CAAC,CAAC;oBACL,aAAa,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;iBACjD;qBAAM;oBACL,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;oBAC9C,IAAI,wBAAwB,EAAE;wBAC5B,aAAa,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;qBACtD;oBAED,IAAI,CAAC,YAAY,EAAE;wBACjB,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;qBAC9C;yBAAM;wBACL,MAAM,iBAAiB,GAAG,YAAY;8BAClC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB;8BAC9C,CAAC,CAAC;wBACN,MAAM,cAAc,GAAG,2BAA2B,iBAAiB,GAAG,CAAC;wBAEvE,mBAAmB;6BAChB,WAAW,CAAC;4BACX,SAAS,EAAE,cAAc;yBAC1B,CAAC;6BACD,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAE,CAAC;6BACzD,SAAS,CAAC;4BACT,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,wBAAwB,EAAE;4BACzE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE;yBACnE,CAAC,CAAC;wBAEL,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa;6BACvC,MAAM,EAAE;6BACR,WAAW,CAAC;4BACX,SAAS,EAAE,cAAc;yBAC1B,CAAC;6BACD,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,CAAE,CAAC;6BACxD,SAAS,CAAC;4BACT,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,wBAAwB,EAAE;4BAChE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE;yBACvD,CAAC,CAAC;wBAEL,aAAa,CAAC,YAAY,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC;qBACpE;iBACF;aACF;iBAAM;gBACL,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,IAAI,wBAAwB,EAAE;oBAC5B,aAAa,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;iBACtD;aACF;YAED,OAAO,aAAa,CAAC;SACtB,CAAC;KACH;IAEM,cAAc,CAAC,eAAwC;QAC5D,OAAO,CAAC,MAAmB,EAAE,YAA0B;YACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa;iBACzC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAE,CAAC;iBACjD,MAAM,CAAC,SAAS,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAErD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa;iBACxC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAE,CAAC;iBACrE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;iBAC5B,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;YAE/D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;iBACrC,MAAM,EAAE;iBACR,UAAU,CAAC,MAAM,CAAC;iBAClB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;iBACxB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACvB,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAElC,IAAI,wBAAmC,CAAC;YACxC,IAAI,eAAe,EAAE;gBACnB,wBAAwB,GAAG,IAAI,CAAC,aAAa;qBAC1C,MAAM,EAAE;qBACR,UAAU,CAAC,eAAe,CAAC;qBAC3B,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,yBAAyB,CAAC;qBAClD,WAAW,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;aACxD;YAED,IAAI,YAAY,EAAE;gBAChB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBACpD,MAAM,YAAY,GAChB,YAAY,CAAC,OAAO,KAAK,WAAW;oBACnC,YAAoC,CAAC,iBAAiB,KAAK,SAAS,CAAC;gBAExE,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa;qBAC3C,MAAM,EAAE;qBACR,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC;qBAChC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;qBAC/B,QAAQ,CAAC,CAAC,WAAW;;oBAEpB,IAAI,WAAW,KAAK,CAAC,EAAE;wBACrB,OAAO;qBACR;oBAED,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAE/C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CACvE,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,KAAK,SAAS,CACzC,CAAC,MAAM,CAAC;oBACT,IAAI,SAAS,IAAI,CAAC,EAAE;wBAClB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;qBAClD;iBACF,CAAC,CAAC;gBAEL,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAE7B,IAAI,QAAQ,EAAE;oBACZ,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;0BAC3D,MAAM;0BACN,qCAAqC,CAAC;oBAC1C,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAC;oBAChE,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;oBACzE,MAAM,cAAc,GAAG,cAAc,cAAc,WAAW,iBAAiB,GAAG,CAAC;oBAEnF,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;wBACrD;4BACE,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,gBAAgB;4BACxB,SAAS,EAAE,cAAc;4BACzB,YAAY,EAAE,eAAe;yBAC9B;wBACD;4BACE,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,aAAa;4BACrB,SAAS,EAAE,0BAA0B;4BACrC,YAAY,EAAE,KAAK;yBACpB;qBACF,CAAC,CAAC;oBAEH,aAAa,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;iBACjD;qBAAM;oBACL,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;oBAC9C,IAAI,wBAAwB,EAAE;wBAC5B,aAAa,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;qBACtD;oBAED,IAAI,CAAC,YAAY,EAAE;wBACjB,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;qBAC9C;yBAAM;wBACL,MAAM,iBAAiB,GAAG,YAAY;8BAClC,IAAI,CAAC,oBAAoB,CAAC,oBAAoB;8BAC9C,CAAC,CAAC;wBACN,MAAM,cAAc,GAAG,2BAA2B,iBAAiB,GAAG,CAAC;wBAEvE,mBAAmB;6BAChB,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAE,CAAC;6BACzD,WAAW,CAAC;4BACX,SAAS,EAAE,sBAAsB;yBAClC,CAAC;6BACD,SAAS,CAAC;4BACT,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,cAAc,EAAE;4BAClE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,wBAAwB,EAAE;yBAC1E,CAAC,CAAC;wBAEL,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa;6BACvC,MAAM,EAAE;6BACR,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,eAAe,CAAE,CAAC;6BACxD,WAAW,CAAC;4BACX,SAAS,EAAE,wBAAwB;yBACpC,CAAC;6BACD,SAAS,CAAC;4BACT,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE;4BACtD,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,wBAAwB,EAAE;yBACjE,CAAC,CAAC;wBAEL,aAAa,CAAC,YAAY,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC;qBACpE;iBACF;aACF;iBAAM;gBACL,aAAa,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,IAAI,wBAAwB,EAAE;oBAC5B,aAAa,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;iBACtD;aACF;YAED,OAAO,aAAa,CAAC;SACtB,CAAC;KACH;;;;YA5QF,UAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;YALI,mBAAmB;YAGhD,eAAe;;;;;;;;;;;;MCSX,WAAW;IAKtB,YACU,oBAAqC,EACrC,qBAAmD,EACnD,SAAoB;QAFpB,yBAAoB,GAApB,oBAAoB,CAAiB;QACrC,0BAAqB,GAArB,qBAAqB,CAA8B;QACnD,cAAS,GAAT,SAAS,CAAW;KAC1B;IAES,eAAe,CAAC,MAAmB;;YAC9C,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC;YACzC,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE9E,IAAI,eAAuC,CAAC;YAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;YAC9D,IAAI,YAAY,EAAE;gBAChB,eAAe,GAAG,YAAY,CAAC,aAAa,CAAyB,cAAc,CAAC,CAAC;aACtF;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAClF,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAElF,MAAM,gBAAgB,GAAc,MAAM,CAAC,MAAM,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;YAChF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,gBAAgB,CAAC;YAClD,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;YAErD,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnB,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACzF;YAED,IAAI,MAAM,CAAC,sBAAsB,EAAE;gBACjC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;aAC7E;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACtD,SAAS,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,GAAG,4BAA4B,GAAG,qBAAqB;gBAC7F,QAAQ,EAAE;oBACR,eAAe;oBACf,aAAa;oBACb,MAAM,CAAC,MAAM,KAAK,QAAQ,GAAG,cAAc,GAAG,IAAI;oBAClD,MAAM,CAAC,MAAM,KAAK,SAAS,GAAG,qBAAqB,GAAG,IAAI;oBAC1D,cAAc,GAAG,SAAS;oBAC1B,MAAM,CAAC,sBAAsB,GAAG,0BAA0B,GAAG,IAAI;oBACjE,GAAG,gBAAgB;iBACpB;gBACD,eAAe,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,sBAAsB,GAAG,KAAK,GAAG,IAAI;gBAC5F,YAAY,EAAE,CAAC,MAAM,CAAC,sBAAsB;gBAC5C,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;gBAClC,YAAY,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;gBACxC,iBAAiB,EAAE,sBAAsB;gBACzC,aAAa,EAAE,KAAK;gBACpB,cAAc;gBACd,cAAc;aACf,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,sBAAsB,EAAE;gBACjC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC;oBAC3B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;iBAChF,CAAC,CAAC;aACJ;YAED,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEzB,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE;gBACvC,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE;aACtC,CAAC;SACH;KAAA;IAEM,yBAAyB,CAAC,OAAoB;QACnD,WAAW,CAAC,iBAAiB,GAAG,OAAO,CAAC;KACzC;IAEa,oBAAoB,CAAC,MAAoB;;YACrD,IAAI,sBAAsB,GAAgB,SAAS,CAAC;YACpD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,OAAO,EAAE;gBACjC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;gBAC9D,IAAI,CAAC,YAAY,EAAE;oBACjB,sBAAsB,GAAG,WAAW,CAAC,iBAAiB,CAAC;iBACxD;qBAAM,IACL,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACvD;oBACA,sBAAsB,GAAG,YAAY,CAAC;iBACvC;aACF;YACD,OAAO,sBAAsB,CAAC;SAC/B;KAAA;IAEY,WAAW,CACtB,6BAAqC,EACrC,QAAkC;;YAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAC,SAAS,YAAY,qBAAqB,CAAC,EAAE;gBACjE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;aAChD;YACD,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACvC;KAAA;IAEY,cAAc,CACzB,6BAAqC,EACrC,QAAkC;;YAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,CAAC,SAAS,YAAY,qBAAqB,CAAC,EAAE;gBACjE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;aAChD;YACD,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;SAC1C;KAAA;;AAhHD;AACA;AACe,6BAAiB,GAAgB,SAAS,CAAC;;YAJ3D,UAAU;;;;YAXFA,iBAAe;YAQf,4BAA4B;YAL5B,SAAS;;;;;;;;;;;;MCaL,eAAe;IAK1B,YACU,WAAwB,EACxB,iBAAoC,EACpC,WAAwB,EACxB,sBAA8C,EAClB,WAAqB;QAJjD,gBAAW,GAAX,WAAW,CAAa;QACxB,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,gBAAW,GAAX,WAAW,CAAa;QACxB,2BAAsB,GAAtB,sBAAsB,CAAwB;QAClB,gBAAW,GAAX,WAAW,CAAU;QATnD,aAAQ,GAAc,EAAE,CAAC;QAChB,oCAA+B,GAAG,4CAA4C,CAAC;QACxF,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;KAQnC;IAEE,UAAU,CAAC,mBAA4B;;YAC3C,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAC1E,IAAI,CAAC,WAAW,EAChB,mBAAmB,CACpB,CAAC;YACF,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;SAC5D;KAAA;IAEO,qBAAqB,CAAC,oBAAsD;QAClF,MAAM,mBAAmB,GAAG;YAC1B,IAAI,CAAC,sBAAsB,CAAC,wBAAwB,EAAE,CAAC;SACxD,CAAC;QACF,MAAM,2BAA2B,GAAG,oBAAoB,CAAC,IAAI,CAC3D,MAAM,CAAC,CAAC,oBAAoB,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAClE,GAAG,CAAC,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAC1D,CAAC;QAEF,oBAAoB;aACjB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CACzC;aACA,SAAS,CAAC,CAAO,oBAAoB;YACpC,IAAI,oBAAoB,CAAC,UAAU,EAAE;gBACnC,MAAM,IAAI,CAAC,cAAc,CACvB,oBAAoB,CAAC,KAAK,EAC1B,2BAA2B,EAC3B,mBAAmB,CACpB,CAAC;aACH;SACF,CAAA,CAAC,CAAC;KACN;IAEO,uBAAuB,CAAC,sBAA2C;QACzE,sBAAsB;aACnB,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC;aACA,SAAS,CAAC;YACT,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;SACtB,CAAA,CAAC,CAAC;KACN;IAEY,SAAS,CAAC,MAAmB,EAAE,OAA8B;;YACxE,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBAChC,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;aACxF;YACD,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;SAC5F;KAAA;IAEY,eAAe,CAAC,IAAuB,EAAE,WAAoB;;YACxE,OAAO,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;SACvE;KAAA;IAEY,mBAAmB,CAAC,YAAoB,EAAE,WAAoB;;YACzE,OAAO,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;SACnF;KAAA;IAEa,cAAc,CAC1B,UAA0B,EAC1B,2BAAuD,EACvD,WAAiC;;YAEjC,MAAM,MAAM,GAAgB;gBAC1B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU;gBACtB,2BAA2B,EAAE,2BAA2B;gBACxD,MAAM,EAAE,OAAO;aAChB,CAAC;YACF,MAAM,IAAI,CAAC,sBAAsB,CAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAC9C,IAAI,EACJ,WAAW,CACZ,CAAC;SACH;KAAA;IAEY,eAAe,CAC1B,MAAyB,EACzB,OAA8B;;YAE9B,MAAM,IAAI,CAAC,sBAAsB,CAC/B,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,EACpD,OAAO,CACR,CAAC;SACH;KAAA;IAEY,SAAS,CAAC,MAAmB,EAAE,OAAmC;;YAC7E,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;SACtF;KAAA;IAEa,sBAAsB,CAClC,WAAmC,EACnC,cAAqC,EACrC,kBAAyC;;YAEzC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE5B,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE;gBAC5C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;aACvE;YAED,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK;gBAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBACpB,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;oBACxC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;iBAC5B;aACF,CAAC,CAAC;SACJ;KAAA;IAEM,yBAAyB,CAAC,OAAoB;QACnD,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;KACrD;IAEY,WAAW,CAAC,IAAU;;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;aACvD;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC9B;KAAA;;;;IAKM,WAAW,CAAC,QAAkC;QACnD,OAAO,CAAC,IAAI,CACV,0HAA0H,CAC3H,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;SACvD;QACD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;KAC9E;;;;IAKM,cAAc,CAAC,QAAkC;QACtD,OAAO,CAAC,IAAI,CACV,gIAAgI,CACjI,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;SACvD;QACD,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;KACjF;IAEY,OAAO;;YAClB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAO,OAAO;gBAC9B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;aACzB,CAAA,CAAC,CACH,CAAC;SACH;KAAA;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;;YAnLF,UAAU;;;;YAHF,WAAW;YAHX,iBAAiB;YACjB,WAAW;YACX,sBAAsB;wCAe1B,QAAQ,YAAI,MAAM,SAAC,MAAM;;;MChBjB,YAAY;IAOvB,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;KAAI;IAExD,kBAAkB;QAChB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACxD,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;SACjF;QAED,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KACvF;IAED,cAAc;;;;;;QAMZ,MAAM,2BAA2B,GAAG,GAAG,CAAC;QACxC,UAAU,CAAC;YACT,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS;gBAC9D,SAAS,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAC;aACpE,CAAC,CAAC;SACJ,EAAE,2BAA2B,CAAC,CAAC;KACjC;;;YAlCF,SAAS,SAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,gEAAmC;;aAEpC;;;;YANQ,eAAe;;;4BAQrB,SAAS,SAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;2BAGpD,YAAY,SAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;;;MCJ7D,SAAS;;;YALrB,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,YAAY,CAAC;gBAC5B,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;gBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;aACxB;;;ICNW;AAAZ,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;MAQY,eAAe;IAN5B;QAYW,SAAI,GAAiC,UAAU,CAAC,EAAE,CAAC;KAQ7D;IAJC,IACI,SAAS;QACX,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;KACtE;;;YAnBF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,4VAAsC;gBAEtC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;uBAEE,KAAK;sBACL,KAAK;qBACL,KAAK;mBACL,KAAK;sBACL,KAAK;mBACL,KAAK;yBACL,KAAK;wBAGL,WAAW,SAAC,OAAO;;;MCTT,aAAa;IAwCxB,YACU,UAAsB,EACtB,qBAA4C,EAC5C,QAAmB;QAFnB,eAAU,GAAV,UAAU,CAAY;QACtB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,aAAQ,GAAR,QAAQ,CAAW;QA5BrB,4BAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC;YAC3D,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAaH,SAAI,GAAY,KAAK,CAAC;QAEtB,gBAAW,GAAY,KAAK,CAAC;KAUzB;IArCJ,IACI,kBAAkB,CAAC,KAAa;QAClC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,KAAK,IAAI,CAAC;KAC3C;IAWD,IACI,KAAK,CAAC,KAAiC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAC,KAAK,CACX,gHAAgH,CACjH,CAAC;SACH;QACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAClE;IAMD,IAAa,IAAI,CAAC,KAA6B;QAC7C,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,KAAK,KAAK,aAAa,CAAC;KAC5C;IAQD,QAAQ;QACN,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1F;IAED,WAAW;QACT,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACvD;IAEO,qBAAqB,CAAC,KAAiC;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAClE;IAEO,wBAAwB,CAAC,CAAmB,EAAE,CAAmB;QACvE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KAC/C;IAEO,YAAY,CAAC,KAA0B;QAC7C,MAAM,iBAAiB,GAAG,MAAM,CAAC;QACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,uBAAuB,EAAE;YACrD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,sBAAsB,EAAE,CAAC,CAAC;SAC3F;aAAM;YACL,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;gBACjD,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,KAAK,EAAE;oBACpC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;iBACnE;aACF,CAAC,CAAC;SACJ;KACF;;;YAhFF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,iOAAoC;;aAErC;;;;YAfC,UAAU;YAQH,qBAAqB;YAH5B,SAAS;;;oBAYR,KAAK;uBACL,KAAK;+BAEL,WAAW,SAAC,qCAAqC;iCAGjD,KAAK;yBAKL,KAAK;oBASL,KAAK;mBAUL,WAAW,SAAC,YAAY;0BAExB,WAAW,SAAC,mBAAmB;mBAE/B,KAAK;;;MC9CK,mBAAmB;IAC9B,iBAAgB;IAEhB,QAAQ,MAAK;;;YARd,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,8DAA2C;;aAE5C;;;;;MCKY,mBAAmB;IALhC;QAWE,YAAO,GAAkB,IAAI,CAAC;KAC/B;;;YAZA,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,iLAA2C;;aAE5C;;;oBAEE,KAAK;uBACL,KAAK;0BACL,KAAK;sBACL,WAAW,SAAC,OAAO,cACnB,KAAK;;;AChBR;;;;;;;;;;;;SAYgB,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;IACvF,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;IAEzD,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,GAAG;QAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;YAC3B,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,mBAAmB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAErC,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;gBAC1E,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,WAAW;sBAClC,iBAAiB,CAAC,MAAM,CAAC,mBAAmB,CAAC;sBAC7C,mBAAmB,CAAC;aACzB;iBAAM,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACvE,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;aACvE;iBAAM;gBACL,YAAY,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;aACzC;SACF,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;KACrB,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;SAEe,YAAY,CAAC,GAAG,OAAiB;IAC/C,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,SAAS,CAAC,CAAC;IACjF,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,cAAc,KACnE,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC,CAC1C,CAAC;AACJ;;ACjCA,OAAO,CAAC,4BAA4B,CAAC,CAAC,UAAU,CAAC,CAAC;AAClD,OAAO,CAAC,gCAAgC,CAAC,CAAC,UAAU,CAAC,CAAC;AACtD,OAAO,CAAC,gCAAgC,CAAC,CAAC,UAAU,CAAC,CAAC;MAGzC,qBAAqB;IAGzB,IAAI,CAAC,cAA0B;QACpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;KACtC;IAEM,WAAW,CAAC,OAAgB;QACjC,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,EAAE;YACxC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;SACnD;KACF;;;YAZF,UAAU;;;ICXC;AAAZ,WAAY,mBAAmB;IAC7B,kCAAW,CAAA;IACX,sCAAe,CAAA;IACf,gDAAyB,CAAA;IACzB,gDAAyB,CAAA;IACzB,sDAA+B,CAAA;IAC/B,kCAAW,CAAA;IACX,wCAAiB,CAAA;IACjB,wCAAiB,CAAA;AACnB,CAAC,EATW,mBAAmB,KAAnB,mBAAmB;;MCGlB,qBAAqB,GAAG,IAAI,cAAc,CAAU,sBAAsB,EAAE;MAC5E,oBAAoB,GAAY;IAC3C,KAAK,EAAE;QACL,KAAK,EAAE;YACL,UAAU,EAAE,oBAAoB;YAChC,UAAU,EAAE,KAAK;SAClB;QACD,eAAe,EAAE,aAAa;QAC9B,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;KACf;IACD,aAAa,EAAE;QACb,WAAW,EAAE,EAAE;KAChB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ;QACf,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,EAAE;QACR,CAAC,EAAE,CAAC;QACJ,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;YACb,UAAU,EAAE,MAAM;SACnB;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,QAAQ;QACf,CAAC,EAAE,EAAE;QACL,aAAa,EAAE,QAAQ;QACvB,KAAK,EAAE;YACL,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,QAAQ;SACrB;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;KACjB;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,GAAG;QACb,UAAU,EAAE;YACV;gBACE,eAAe,EAAE;oBACf,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;oBAC9C,KAAK,EAAE;wBACL,CAAC,CAAC,EAAE,0BAA0B,CAAC;wBAC/B,CAAC,CAAC,EAAE,0BAA0B,CAAC;qBAChC;iBACF;gBACD,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,KAAK;gBAClB,WAAW,EAAE,CAAC;aACf;SACF;KACF;IACD,KAAK,EAAE;QACL,GAAG,EAAE,CAAC;QACN,GAAG,EAAE,GAAG;QACR,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,EAAE;KAClB;IACD,WAAW,EAAE;QACX,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,OAAO,EAAE,KAAK;aACf;YACD,OAAO,EAAE,OAAO;YAChB,cAAc,EAAE,KAAK;YACrB,OAAO,EAAE,IAAI;SACd;KACF;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,YAAY;SACnB;KACF;;;MClFU,kBAAkB,GAAG,IAAI,cAAc,CAAU,mBAAmB,EAAE;aA+BpE;IACT,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC,OACW;IACV,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACtE,CAAC;MAnCQ,iBAAiB,GAAY;IACxC,KAAK,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,EAAE;KACd;IACD,aAAa,EAAE;QACb,WAAW,EAAE,EAAE;KAChB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;KACT;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,SAAS,EAAE;QACT,OAAO,EAAE,KAAK;KACf;IACD,OAAO,EAAE;QACP,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,SAAS;QAC1B,KAAK,EAAE;YACL,QAAQ,EAAE,SAAS;SACpB;QACD,SAAS,MAER;QACD,UAAU,IAET;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,SAAS,EAAE;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,SAAS;SACjB;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;KACnB;IACD,WAAW,EAAE;QACX,UAAU,EAAE;YACV,MAAM,EAAE,IAAI;YACZ,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE;gBACT,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;gBAChD,KAAK,EAAE;oBACL,CAAC,CAAC,EAAE,SAAS,CAAC;oBACd,CAAC,CAAC,EAAE,SAAS,CAAC;iBACf;aACF;YACD,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,CAAC;SACb;QACD,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,IAAI,EAAE;wBACJ,IAAI,EAAE,CAAC;qBACR;iBACF;aACF;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE,SAAS;qBACrB;iBACF;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,YAAY;SACnB;KACF;;;ACzFH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAC5C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAE5C,SAAS,WAAW;IAClB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC/C,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBACrB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC;aAC7E;SACF;KACF;AACH,CAAC;AAEM,MAAM,UAAU,GAAY;IACjC,KAAK,EAAE;QACL,IAAI,EAAE,KAAK;QACX,SAAS,EAAE;YACT,QAAQ,EAAE,GAAG;SACd;QACD,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE;YACN,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;SACpB;KACF;IACD,aAAa,EAAE;QACb,WAAW,EAAE,WAAW;KACzB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;KACT;IACD,KAAK,EAAE;QACL,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;aAC/B;SACF;QACD,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,aAAa;KACzB;IACD,KAAK,EAAE;QACL,KAAK,EAAE;YACL,IAAI,EAAE,EAAE;SACT;QACD,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;SACf;QACD,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,CAAC;QACZ,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,aAAa;QAC5B,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;KACtB;IACD,WAAW,EAAE;QACX,GAAG,EAAE;YACH,MAAM,EAAE,EAAE;SACX;QACD,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK;YAClC,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;iBACf;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,CAAC;iBACX;aACF;SACF;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN,OAAO,EAAE,KAAK;KACf;CACF;;ACxFD,MAAMC,UAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAC5C,MAAMC,UAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAE5C,SAASC,aAAW;IAClB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC/C,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC/C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;gBACrB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAGF,UAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;aACtE;SACF;KACF;AACH,CAAC;AAEM,MAAM,aAAa,GAAY;IACpC,KAAK,EAAE;QACL,SAAS,EAAE;YACT,QAAQ,EAAE,GAAG;SACd;QACD,eAAe,EAAE,aAAa;QAC9B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE;YACN,IAAI,EAAEE,aAAW;YACjB,MAAM,EAAEA,aAAW;SACpB;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;KACT;IACD,aAAa,EAAE;QACb,WAAW,EAAE,cAAc;KAC5B;IACD,KAAK,EAAE;QACL,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,QAAQ,EAAED,UAAQ,CAAC,KAAK,CAAC;gBACzB,UAAU,EAAE,QAAQ;gBACpB,KAAK,EAAED,UAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;aAC/B;SACF;QACD,SAAS,EAAE,CAAC;QACZ,kBAAkB,EAAE,CAAC;QACrB,SAAS,EAAE,aAAa;QACxB,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;KACd;IACD,KAAK,EAAE;QACL,KAAK,EAAE;YACL,IAAI,EAAE,EAAE;SACT;QACD,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;SACf;QACD,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,CAAC;QACZ,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,aAAa;QAC5B,eAAe,EAAE,CAAC;QAClB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;KACtB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,WAAW,EAAE;QACX,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ;SACnB;QACD,MAAM,EAAE;YACN,KAAK,EAAEA,UAAQ,CAAC,WAAW,CAAC,CAAC,KAAK;YAClC,MAAM,EAAE,EAAE;YACV,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;iBACf;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,CAAC;iBACX;aACF;SACF;QACD,IAAI,EAAE;YACJ,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK;aACf;YACD,gBAAgB,EAAE,KAAK;SACxB;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN,OAAO,EAAE,KAAK;KACf;CACF;;MCjGY,aAAa,GAAG,IAAI,cAAc,CAAU,cAAc,EAAE;aA8C9C;;IAEf,OAAO,KAAK,CAAC;AACf,CAAC;MAhDE,YAAY,GAAY;IACnC,KAAK,EAAE;QACL,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,KAAK;SAClB;QACD,eAAe,EAAE,aAAa;QAC9B,IAAI,EAAE,EAAE;KACT;IACD,aAAa,EAAE;QACb,WAAW,EAAE,aAAa;KAC3B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;KACT;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;KACjB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,UAAU;QAClB,YAAY,EAAE,CAAC;QACf,SAAS,EAAE;YACT,QAAQ,EAAE,SAAS;SACpB;KACF;IACD,WAAW,EAAE;QACX,GAAG,EAAE;YACH,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC;YACnE,gBAAgB,EAAE,KAAK;YACvB,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE;gBACV,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,CAAC;gBACjB,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL,QAAQ,EAAE,MAAM;oBAChB,UAAU,EAAE,KAAK;iBAClB;aACF;YACD,KAAK,EAAE;gBACL,MAAM,EAAE;oBACN,eAAe,MAGd;iBACF;aACF;YACD,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;iBACf;aACF;SACF;QACD,MAAM,EAAE;YACN,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,EAAE;YACd,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,OAAO,EAAE,KAAK;iBACf;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,CAAC;iBACX;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,KAAK;SACZ;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;KACf;IACD,SAAS,EAAE;QACT,OAAO,EAAE,KAAK;KACf;IACD,UAAU,EAAE;QACV,KAAK,EAAE;YACL;gBACE,SAAS,EAAE;oBACT,QAAQ,EAAE,GAAG;iBACd;gBACD,YAAY,EAAE;oBACZ,MAAM,EAAE;wBACN,MAAM,EAAE,UAAU;wBAClB,KAAK,EAAE,OAAO;wBACd,aAAa,EAAE,QAAQ;wBACvB,aAAa,EAAE,EAAE;wBACjB,YAAY,EAAE,CAAC;wBACf,WAAW,EAAE,EAAE;wBACf,YAAY,EAAE,EAAE;wBAChB,CAAC,EAAE,CAAC,GAAG;qBACR;iBACF;aACF;YACD;gBACE,SAAS,EAAE;oBACT,QAAQ,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE;oBACZ,MAAM,EAAE;wBACN,YAAY,EAAE,CAAC;qBAChB;iBACF;aACF;SACF;KACF;;;MCjHU,kBAAkB,GAAG,IAAI,cAAc,CAAU,mBAAmB,EAAE;aA4BpE;;IAET,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AACrF,CAAC,SAEW,UAAU,WAAW,EAAE,YAAY,EAAE,KAAK;IACpD,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9B,CAAC;MAlCQ,iBAAiB,GAAY;IACxC,KAAK,EAAE;QACL,eAAe,EAAE;YACf,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;YAC9C,KAAK,EAAE;gBACL,CAAC,CAAC,EAAE,SAAS,CAAC;gBACd,CAAC,CAAC,EAAE,SAAS,CAAC;aACf;SACF;QACD,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,EAAE;KACd;IACD,aAAa,EAAE;QACb,WAAW,EAAE,EAAE;KAChB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,EAAE;KACT;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;KACT;IACD,OAAO,EAAE;QACP,MAAM,EAAE,KAAK;QACb,SAAS,MAGR;;QAED,UAAU,MAET;QACD,WAAW,EAAE,CAAC;KACf;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,KAAK,EAAE,OAAO;aACf;SACF;QACD,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE;YACT,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,SAAS;SACjB;QACD,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,CAAC;KAChB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;KACf;IACD,MAAM,EAAE;QACN,OAAO,EAAE,KAAK;KACf;IACD,WAAW,EAAE;QACX,IAAI,EAAE;YACJ,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE;gBACN,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE,CAAC;gBACT,SAAS,EAAE,SAAS;aACrB;YACD,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,SAAS,EAAE,CAAC;iBACb;aACF;YACD,SAAS,EAAE,IAAI;SAChB;QACD,MAAM,EAAE;YACN,MAAM,EAAE;gBACN,gBAAgB,EAAE,EAAE;aACrB;SACF;KACF;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY;SACnB;KACF;;;aCpEqC,YAAY,SACP,iBAAiB,OACjB,iBAAiB,OACd,oBAAoB;MAGvD,wBAAwB;IAanC,YACU,WAAkC,EAClC,WAAuB,EACD,YAAqB,EAChB,iBAA0B,EAC1B,iBAA0B,EACvB,oBAA6B;QAL3D,gBAAW,GAAX,WAAW,CAAuB;QAClC,gBAAW,GAAX,WAAW,CAAY;QACD,iBAAY,GAAZ,YAAY,CAAS;QAChB,sBAAiB,GAAjB,iBAAiB,CAAS;QAC1B,sBAAiB,GAAjB,iBAAiB,CAAS;QACvB,yBAAoB,GAApB,oBAAoB,CAAS;QAlB5D,SAAI,GAAG,EAAE,CAAC;QACV,eAAU,GAAa,EAAE,CAAC;QAC1B,WAAM,GAA8B,EAAE,CAAC;QACvC,WAAM,GAAG,GAAG,CAAC;QACb,SAAI,GAAwB,mBAAmB,CAAC,GAAG,CAAC;QACpD,gBAAW,GAAG,EAAE,CAAC;QACjB,mBAAc,GAAG,IAAI,CAAC;QAE/B,kBAAa,GAAY;YACvB,aAAa,EAAE,EAAE;SAClB,CAAC;QAUA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACzC;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAClD;IAED,cAAc;QACZ,QAAQ,IAAI,CAAC,IAAI;YACf,KAAK,mBAAmB,CAAC,KAAK,EAAE;gBAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC;gBACxD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;gBACrD,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;gBACvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;gBACpD,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBAC/C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;gBACnC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;gBAChC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1C,MAAM;aACP;SACF;KACF;IAED,gBAAgB;QACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAChE,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI;YACnC,KAAK,mBAAmB,CAAC,GAAG,CAAC;YAC7B,KAAK,mBAAmB,CAAC,KAAK,EAAE;gBAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;gBAC7B,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,aAAa,EAAE;gBACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM;aACP;YACD,KAAK,mBAAmB,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,MAAM;aACP;SACF;QACD,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SAClE;KACF;IAEO,WAAW;QAChB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,UAA0C,CAAC,OAAO;YACpF,IAAI,CAAC,cAAc,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KACvB;IAEO,WAAW;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG;YAC1B;gBACE,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,YAAY,GAAG,SAAS,CAAC;gBAC5D,SAAS,EAAE,uBAAuB;gBAClC,OAAO,EAAE,CAAC;aACX;YACD;gBACE,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAsB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;KACzE;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG;YAC1B;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAE,IAAI,CAAC,aAAa,CAAC,KAAsB,CAAC,cAAc,GAAG;YAC3D,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAClC,OAAO,SAAS,CAAC;SAClB;aACE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG;gBAC3B;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9D,OAAO,EAAE,CAAC;iBACX;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB;aACF,CAAC,CAAC;QACJ,IAAI,CAAC,aAAa,CAAC,KAAsB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;KACzE;IAEO,qBAAqB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjD,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG;gDAE9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KACxC,eAAe,EAAE,IAAI,CAAC,mBAAmB;aAE5C,CAAC;SACH;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACtD;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG;YAC1B;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB;SACF,CAAC;KACH;IAEO,kBAAkB;QACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,KAAK,mCACnB,IAAI,CAAC,aAAa,CAAC,KAAK,KAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,GACpB,CAAC;KACH;IAEO,SAAS,CAAC,IAAI;QACpB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG;YAC1B;gBACE,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;KACH;;;YAnNF,SAAS,SAAC;gBACT,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ,EAAE,EAAE;gBAEZ,SAAS,EAAE;oBACT,qBAAqB;oBACrB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,MAAc,EAAE;oBAClD,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,MAAmB,EAAE;oBAC5D,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,IAAmB,EAAE;oBAC5D,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,IAAsB,EAAE;iBACnE;;aACF;;;;YApBQ,qBAAqB;YAXV,UAAU;4CAgDzB,MAAM,SAAC,aAAa;4CACpB,MAAM,SAAC,kBAAkB;4CACzB,MAAM,SAAC,kBAAkB;4CACzB,MAAM,SAAC,qBAAqB;;;mBAlB9B,KAAK;yBACL,KAAK;qBACL,KAAK;qBACL,KAAK;mBACL,KAAK;0BACL,KAAK;6BACL,KAAK;sBACL,KAAK;;;SCTQ,aAAa,CAAC,KAAU;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AACjF;;MClBa,wBAAwB;IAKnC,YACU,wBAAkD,EAClD,gBAAkC,EAClC,QAAmB;QAFnB,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,aAAQ,GAAR,QAAQ,CAAW;KACzB;IAEJ,QAAQ;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,QAAQ;QACN,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAC5E,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QAC7E,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE;YAChF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC5E;QACkB,YAAY,CAAC,QAAS,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;KAC1E;;;YA5BF,SAAS,SAAC;gBACT,QAAQ,EAAE,sBAAsB;aACjC;;;;YAXC,wBAAwB;YAGxB,gBAAgB;YADhB,SAAS;;;4BAYR,KAAK,SAAC,oBAAoB;uBAC1B,KAAK;;;AChBR;;;;;;;;SAQgB,QAAQ,CAAI,GAAM;IAChC,OAAO,SAAS,CAAI,GAAG,CAAC,CAAC;AAC3B;;ACZA;;;;;;;;;;;;MAaa,kBAAkB,GAAG,CAChC,OAAoB,EACpB,gBAAwB,EACxB,YAAqB;IAErB,QAAQ,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ;QACvB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,WAAW;YAC5B,OAAO,KAAK,CAAC;QACf,KAAK,gBAAgB,CAAC,WAAW,EAAE;YACjC,OAAO,IAAI,CAAC;QACd;YACE,OAAO,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;KACpF;AACH;;AC3BA;;ACIA,MAAM,EAAE,sBAAsB,EAAE,GAAG,WAAW,CAAC;AAE/C;;;;AAIA,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;AACxD,MAAM,UAAU,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,CAAC,CAAC;AAEf,MAAM,wBAAwB,GAA2B;IAC9D,IAAI,EAAE;QACJ,UAAU;QACV,WAAW;QACX,WAAW;KACZ;IACD,OAAO,EAAE;QACP,UAAU;QACV,WAAW;QACX,WAAW;QACX,eAAe,EAAE,aAAa;KAC/B;IACD,GAAG,EAAE;QACH,UAAU;QACV,WAAW;QACX,WAAW;QACX,eAAe,EAAE,aAAa;KAC/B;IACD,KAAK,EAAE;QACL,eAAe,EAAE,SAAS;KAC3B;CACF;;aC7BU,CACP,MAAkB,EAClB,cAA+B,EAC/B,MAAa,EACb,QAAiC;IAEjC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;QAC1B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC;KACxE;IAED,IAAI,QAAQ;QAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAfH;;;AAGO,MAAM,sCAAsC,GAAG;IACpD,OAAO,MAWN;CACF;;ACXD,MAAM,YAAEC,UAAQ,EAAE,GAAG,iBAAiB,CAAC;AACvC,MAAM,0BAAEE,wBAAsB,EAAE,sBAAsB,EAAE,GAAG,WAAW,CAAC;AAEvE;;;AAGA,MAAM,wBAAwB,GAAG,CAAC,OAAgB;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAU,CAAC;AAC1D,CAAC,CAAC;;AAEK,MAAM,kBAAkB,GAAqB;IAClD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,aAAa,EAAE,GAAG;iBACnB;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,SAAS,EAAE,GAAG;YACd,MAAM,EAAE;gBACN,CAAC,EAAE;oBACD,IAAI,EAAE;wBACJ,UAAU,EAAE,KAAK;qBAClB;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ,CAACF,UAAQ,CAAC,GAAG,CAAC,CAAC;yBAC9B;qBACF;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,MAAM,EAAE,CAAC;iBACV;gBACD,IAAI,EAAE;oBACJ,WAAW,EAAEE,wBAAsB,CAAC,QAAQ,CAAC;iBAC9C;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,KAAK;QACX,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,GAAG,EAAE;oBACH,aAAa,EAAE,GAAG;iBACnB;gBACD,IAAI,EAAE;oBACJ,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,SAAS,EAAE,GAAG;YACd,MAAM,EAAE;gBACN,CAAC,EAAE;oBACD,IAAI,EAAE;wBACJ,UAAU,EAAE,KAAK;qBAClB;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ,CAACF,UAAQ,CAAC,IAAI,CAAC,CAAC;yBAC/B;qBACF;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE;oBACJ,OAAO,EAAE,GAAG;oBACZ,WAAW,EAAEE,wBAAsB,CAAC,QAAQ,CAAC;iBAC9C;gBACD,KAAK,EAAE;oBACL,MAAM,EAAE,CAAC;iBACV;aACF;SACF;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,eAAe,EAAE,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC;YAC1D,MAAM,EAAE;gBACN,CAAC,EAAE;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAEA,wBAAsB,CAAC,QAAQ,CAAC;wBAC7C,WAAW,EAAE,CAAC;qBACf;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ,CAACF,UAAQ,CAAC,IAAI,CAAC,CAAC;yBAC/B;qBACF;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,MAAM,EAAE,CAAC;iBACV;aACF;SACF;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE;gBACT,QAAQ,EAAE,CAAC;aACZ;YACD,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,IAAI,EAAE,EAAE;oBACR,KAAK,EAAE,EAAE;oBACT,GAAG,EAAE,EAAE;oBACP,MAAM,EAAE,CAAC;iBACV;aACF;YACD,eAAe,EAAE,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC;YAC1D,MAAM,EAAE;gBACN,CAAC,EAAE;oBACD,IAAI,EAAE;wBACJ,SAAS,EAAE,CAAC;qBACb;oBACD,KAAK,EAAE;wBACL,WAAW,EAAE,CAAC;wBACd,eAAe,EAAE,GAAG;wBACpB,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ,CAACA,UAAQ,CAAC,IAAI,CAAC,CAAC;yBAC/B;qBACF;iBACF;gBACD,CAAC,EAAE;oBACD,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE;wBACJ,UAAU,EAAE,KAAK;qBAClB;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ,CAACA,UAAQ,CAAC,IAAI,CAAC,CAAC;yBAC/B;qBACF;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,CAAC;iBACf;gBACD,KAAK,EAAE;oBACL,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,CAAC;oBACT,WAAW,EAAE,CAAC;oBACd,gBAAgB,EAAE,CAAC;iBACpB;aACF;YACD,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,OAAO,EAAE,EAAE;oBAEX,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK;oBAChB,eAAe,EAAEE,wBAAsB,CAAC,YAAY,CAAC;oBACrD,UAAU,EAAEA,wBAAsB,CAAC,qBAAqB,CAAC;oBACzD,SAAS,EAAEA,wBAAsB,CAAC,qBAAqB,CAAC;oBACxD,SAAS,EAAE,CAAC;oBACZ,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,aAAa;oBAC1B,SAAS,EAAE;wBACT,UAAU,EAAE,CAAC,WAAiD;4BAC5D,OAAO;gCACL,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW;6BAC5B,CAAC;yBACxB;qBACF;iBACF;gBACD,UAAU,EAAE;oBACV,eAAe,EAAE,CAAC,OAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,WAAoB;oBAC3E,KAAK,EAAEA,wBAAsB,CAAC,OAAO,CAAC;oBACtC,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE;wBACJ,UAAU,EAAE,CAAC;wBACb,IAAI,EAAE,QAAQ,CAACF,UAAQ,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBACD,OAAO,EAAE;wBACP,GAAG,EAAE,CAAC;wBACN,IAAI,EAAE,CAAC;wBACP,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,CAAC;qBACV;oBACD,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC,OAAgB,4BACrB,wBAAwB,CAAC,OAAO,CAAS,0CAAE,SAAS,CAAC,QAAQ,GAAA;oBAChE,OAAO,EAAE,CAAC,OAAgB,eACxB,OAAA,CAAC,QAAE,wBAAwB,CAAC,OAAO,CAAS,0CAAE,SAAS,CAAA,CAAA,EAAA;oBACzD,SAAS,EAAE,CAAC,KAAU,KAAa,KAAK,CAAC,SAAS,CAAC,KAAK;iBACzD;aACF;SACF;KACF;CACF;;MCzMY,kBAAkB;IACtB,aAAa,CAAC,SAAoB;;;QAGvC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;KAChD;IAEM,qBAAqB,CAAC,IAAoB;QAC/C,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACvC;IAEM,iCAAiC;QACtC,OAAO,sCAAsC,CAAC;KAC/C;;;;IAKM,sBAAsB,CAAC,SAAoB;QAChD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAgB,CAAC;KAC7D;;;YArBF,UAAU;;;ACXX;;;;;AAWA,IAAI,cAAc,GAAG;IACnB,IAAI,EAAE;QACJ,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,EAAE;KAChB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;KACf;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,KAAY;;;;IAI1C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAqB,eAAK,OAAA,CAAC,QAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,YAAY,CAAA,CAAA,EAAA,CAAC,CAAC;AACpG,CAAC,CAAC;;AAEF,mBAAe;IACb,EAAE,EAAE,QAAQ;IAEZ,SAAS,EAAE,UAAU,KAAK;QACxB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpD,IACE,UAAU,KAAK,QAAQ;YACvB,UAAU,KAAK,MAAM;YACrB,UAAU,KAAK,UAAU;YACzB,UAAU,KAAK,aAAa,EAC5B;YACA,OAAO;SACR;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;YAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC;SAC/C;QAED,KAAK,CAAC,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,KAAK;YACrB,CAAC,EAAE,IAAI;YACP,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;YAClB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,CAAC;SACpB,CAAC;KACH;IAED,SAAS,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE,IAAI;QACxC,OAAO,cAAc,CACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;cAClC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;cAC5C,SAAS,EACb,cAAc,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAC/B,CAAC;KACH;IAED,SAAS,EAAE,UAAU,KAAK;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;KAC1F;IACD,SAAS,EAAE,UAAU,KAAK;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;KACtD;IAED,UAAU,EAAE,UAAU,KAAK,EAAE,KAAK;QAChC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7C,OAAO;SACR;QAED,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAEpB,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpD,IACE,UAAU,KAAK,QAAQ;YACvB,UAAU,KAAK,MAAM;YACrB,UAAU,KAAK,UAAU;YACzB,UAAU,KAAK,aAAa,EAC5B;YACA,OAAO;SACR;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,EAAE;YACrC,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;YACnC,OAAO;SACR;;QAGD,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjF,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC/B,OAAO,GAAG,CAAC,CAAC;SACb;QAED,KAAK,CAAC,MAAM,CAAC,OAAO;YAClB,CAAC,CAAC,IAAI,KAAK,UAAU;gBACrB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACzC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE;YACzD,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;;gBAE7C,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;gBACnC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACtB;YACD,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;YACjC,OAAO,KAAK,CAAC;SACd;QACD,KAAK,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAEpC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAErB,KAAK,CAAC,IAAI,EAAE,CAAC;KACd;IACD,MAAM,EAAE,UAAU,KAAK;QACrB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YACzB,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAC;KACb;IACD,UAAU,EAAE,UAAU,KAAK;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3B;;;;;;;IAQD,aAAa,EAAE,UAAU,KAAK;QAC5B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QACD,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC/D,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAE3D,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3B,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YACvC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SACpC;QAED,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KAC3B;IAED,eAAe,EAAE,UAAU,KAAK;QAC9B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE;YAClC,OAAO;SACR;QACD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;YAC9E,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACvC,SAAS;aACV;YAED,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,GAAG,CACX,KAAK,CAAC,MAAM,CAAC,CAAC,EACd,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAClD,CAAC,EACD,CAAC,EACD,CAAC,GAAG,IAAI,CAAC,EAAE,EACX,KAAK,CACN,CAAC;YACF,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;SACpB;KACF;IAED,iBAAiB,EAAE,UAAU,KAAK;QAChC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;YAC9E,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAE9C,IAAI,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAE5C,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAErD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACvC,SAAS;aACV;YAED,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACxB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBACpC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;aACtB,CAAC,CAAC;YACH,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAEvB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,IAAI,IAAI,EAAE;gBACvD,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC;aACpC;iBAAM,IAAI,IAAI,IAAI,IAAI,EAAE;gBACvB,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;aAChE;iBAAM;gBACL,OAAO,CAAC,iBAAiB,GAAG,GAAG,CAAC;aACjC;SACF;KACF;CACF;;ACxPD,MAAM,0BAAEE,wBAAsB,EAAE,GAAG,WAAW,CAAC;AAExC,MAAM,oBAAoB,GAAGA,wBAAsB,CAAC,SAAS,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAGA,wBAAsB,CAAC,WAAW,CAAC,CAAC;AAEnE;SACgB,uBAAuB,CAAC,OAAqC;;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAuB,CAAC;IAChD,MAAM,mBAAmB,SAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,mBAAmB,CAAC;IAEvE,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC1E,OAAO,oBAAoB,CAAC;KAC7B;SAAM;QACL,OAAO,eAAe,CAAC;KACxB;AACH,CAAC;AAED;SACgB,4BAA4B,CAAC,OAAqC;IAChF,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACjC,OAAO,oBAAoB,CAAC;KAC7B;AACH;;ACvBA,MAAM,0BAAEA,wBAAsB,EAAE,GAAG,WAAW,CAAC;AAExC,MAAM,qBAAqB,GAAG;IACnC,mBAAmB,EAAE,KAAK;IAC1B,KAAK,EAAEA,wBAAsB,CAAC,OAAO,CAAC;IACtC,WAAW,EAAE,EAAE;IACf,QAAQ,EAAE;QACR,GAAG,EAAE;YACH,eAAe,EAAE,uBAAuB;YACxC,oBAAoB,EAAE,4BAA4B;SACnD;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,uBAAuB;YACpC,WAAW,EAAE,CAAC;YACd,OAAO,EAAE,GAAG;SACb;KACF;IACD,MAAM,EAAE;QACN,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;aACf;SACF;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI;YACb,IAAI,EAAE;gBACJ,OAAO,EAAE,KAAK;aACf;SACF;KACF;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,QAAQ;KACjB;IACD,OAAO,EAAE;QACP,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;SACf;QACD,UAAU,EAAE;YACV,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;SACf;KACF;CACF;;AC3BD,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC7D,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAC1D,MAAM,aAAa,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAEzF;;AAEA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,YAAY,EAAE,GAAG,cAAc,EAAE,GAAG,iBAAiB,EAAE,GAAG,aAAa,CAAC,CAAC;AAEnG;;AAEA,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAC3E,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;;ACjBF,MAAM,oBAAoB,GAAG,OAAO,CAAC;MAGxB,cAAc;IAOzB,YAAoB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;KAAI;IAEvD,WAAW,CAAC,IASlB;QACC,MAAM,EACJ,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,mBAAmB,GACpB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,IAAI,IAAI,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,MAAM,KAAI,oBAAoB,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACvC,aAAa;YACb,WAAW;YACX,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7E,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KAC9D;IAEM,WAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KACrB;IAEM,UAAU,CAAC,IAA+B;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KACrC;IAEM,YAAY,CAAC,MAAoB;;;QAGtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACjC;IAEM,UAAU,CAAC,IAAe,EAAE,aAA4B;QAC7D,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE;;;YAGvC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;SACnD;aAAM;YACL,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;SACtD;KACF;IAEM,mBAAmB,CAAC,gBAAuC;QAChE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;KAC1C;IAEM,aAAa,CAAC,aAA2B,EAAE,IAAe;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;KAC/E;IAEM,iBAAiB,CAAC,WAAgC;QACvD,MAAM,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,GAAG,uBAAuB,CAAC;KAC7E;IAEM,yBAAyB,CAAC,mBAA8C;QAC7E,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAA0B,CAAC;;QAG/D,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO;;YACtB,UAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,mBAAmB,EAAE;gBAC9C,OAAO,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC;aACjD;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;KAC7D;IAEO,2BAA2B;;QACjC,MAAM,WAAW,eAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,0CAAE,UAAU,0CAAE,WAAW,CAAC;;;;QAIxE,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;SAChE;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;IAEO,uBAAuB,CAAC,IAAe,EAAE,aAA4B;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAA0B,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAExC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KAChD;IAEO,0BAA0B,CAAC,SAAoB,EAAE,aAA4B;QACnF,MAAM,WAAW,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC;YACvC,aAAa;YACb,WAAW;SACZ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;KACpF;IAEO,kBAAkB,CAAC,aAAgC,EAAE,MAA0B;QACrF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KAC/C;IAEO,iBAAiB,CAAC,QAAwB;QAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,cAAc,KACrE,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,cAAc,CAC5F,CAAC;QACF,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACnD;IAEO,0BAA0B,CAAC,WAAgC;QACjE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU;YAChC,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9F,OAAO,YAAY,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;SACzD,CAAC,CAAC;KACJ;IAEO,mCAAmC,CAAC,WAAgC;QAC1E,MAAM,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAC7E,OAAO;YACL,OAAO,EAAE;gBACP,UAAU,EAAE;oBACV,WAAW,EAAE,uBAAuB;iBACrC;aACF;SACF,CAAC;KACH;IAEO,mCAAmC,CAAC,OAAqB;QAC/D,MAAM,8BAA8B,GAClC,IAAI,CAAC,kBAAkB,CAAC,iCAAiC,EAAE,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAQ,EAAE,CAAkB,EAAE,CAAQ;gBACpD,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;aACxD,CAAC;SACH,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;KAChB;IAEO,wBAAwB,CAAC,gBAAuC;QACtE,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE;gBACP,OAAO,EAAE;oBACP,SAAS,EAAE;wBACT,KAAK,EAAE,CAAC,YAAY;;4BAClB,MAAM,IAAI,GAAG,MAAM,OAAE,MAAA,YAAY,CAAC,CAAC,CAAC,0CAAE,GAAW,0CAAE,CAAC,CAAC,CAAC;4BACtD,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;gCAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE;oCAC1C,GAAG,EAAE,SAAS;oCACd,KAAK,EAAE,OAAO;oCACd,IAAI,EAAE,SAAS;oCACf,MAAM,EAAE,SAAS;iCAClB,CAAC,CAAC;6BACJ;yBACF;wBACD,KAAK,EAAE,CAAC,OAAO;;;4BAGb,OAAO,GAAG,GAAG,OAAO,CAAC,cAAc,IAAI,gBAAgB,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;yBAC5E;qBACF;iBACF;aACF;YACD,MAAM,EAAE;gBACN,CAAC,EAAE;oBACD,KAAK,EAAE;wBACL,QAAQ,EAAE,CAAC,KAAK;4BACd,OAAO,KAAK,IAAI,gBAAgB,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;yBACrD;qBACF;iBACF;aACF;SACF,CAAC;KACH;IAEO,mBAAmB,CAAC,IAI3B;QACC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;QAErF,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,MAAM,iBAAiB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,CAAC;QAC9C,MAAM,uBAAuB,GAAG,WAAW;cACvC,IAAI,CAAC,mCAAmC,CAAC,WAAW,CAAC;cACrD,EAAE,CAAC;QACP,MAAM,YAAY,GAChB,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;QAEzF,IAAI,OAAO,GAAiB,YAAY,CACtC,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,uBAAuB,CACxB,CAAC;QAEF,OAAO,IAAI,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;KAC1D;IAEO,qBAAqB,CAAC,QAAwB,EAAE,MAAmB;QACzE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,cAAc,KACrE,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,cAAc,CAC5F,CAAC;QACF,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAuB,KACrD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;YACzC,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,SAAS;SACf,CAAC,CACH,CAAC;KACH;IAEO,gBAAgB,CAAC,IAKxB;QACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEnD,MAAM,gBAAgB,GAAG,CAAC,EAAE,IAAI,EAAgB,KAC9C,CAAC,EAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CACV,CAAC,SAAS,KAAK,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,SAAS,CAAC,KAAK,QAAQ,EACzF,CAAC;;;;;;;;;;QAWJ,MAAM,6BAA6B,GAAG,MAAM,KAAK,SAAS,CAAC;QAC3D,MAAM,iCAAiC,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE1E,IAAI,6BAA6B,EAAE;YACjC,OAAO,MAAM,CAAC;SACf;aAAM,IAAI,iCAAiC,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;aAAM;;;;;;YAML,OAAO,IAAI,KAAK,OAAO;kBACnB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;kBACjD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;SACtC;KACF;IAEO,yBAAyB,CAC/B,IAAe,EACf,QAAwB,EACxB,OAAqB,EACrB,MAAqB;;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/D,MAAM,SAAS,eAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0CAAE,SAAS,mCAAI,GAAG,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAEnF,OAAO,YAAY,CAAC,UAAU,EAAE;YAC9B,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa;gBACrB,QAAQ;aACT;YACD,OAAO;SACR,CAAuB,CAAC;KAC1B;IAEO,gCAAgC,CACtC,mBAA6C,EAC7C,QAAwB;QAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC;;YACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,UAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,0CAAE,mBAAmB,EAAE;gBAC9C,OAAO,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC1D;iBAAM;gBACL,OAAO,CAAC,YAAY,mCACf,OAAO,CAAC,YAAY,KACvB,mBAAmB,EAAE,CAAC,SAAS,CAAC,GACjC,CAAC;aACH;SACF,CAAC,CAAC;KACJ;IACO,cAAc,CAAC,IAA+B;;;QAEpD,IACE,OAAA,IAAI,CAAC,gBAAgB,0CAAE,WAAW,YAClC,IAAI,CAAC,gBAAgB,0CAAE,OAAO,CAAA,WAC9B,IAAI,CAAC,gBAAgB,0CAAE,OAAO,CAAA,EAC9B;YACA,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACrC;QACD,IAAI,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QACvD,IAAI,IAAI,CAAC,mBAAmB;YAC1B,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;;;;;QAM5E,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC9B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO;gBACvB,OAAO,CAAC,YAAY,mCACf,OAAO,CAAC,YAAY,KACvB,YAAY,EAAE,IAAI,GACnB,CAAC;aACH,CAAC,CAAC;SACJ;QAED,OAAO,QAAQ,CAAC;KACjB;;;;;;;IAOM,iBAAiB,CAAC,IAA+B;QACtD,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,KAAK,CAAC,8EAA8E,CAAC,CAAC;SAC7F;QAED,MAAM,iBAAiB,GAAG,CACxB,GAAiB,EACjB,IAAe,EACf,SAAyB,EACzB,QAA6C;YAE7C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAChF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,gCACd,GAAG,CAAC,IAAI,CAAC,OAAO,CAAsB,KAC1C,SAAS,EAAE;oBACT,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,IAAI,EAAE,CAAC;oBACxD,QAAQ;iBACT,GACkB,CAAC;SACvB,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG;YACX,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBACjC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC9C;YACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBACjC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aAC5C;YACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;gBACrC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;aAC9C;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;KACb;IAEO,yBAAyB,CAC/B,OAAqB,EACrB,IAAY,EACZ,SAAyB;QAEzB,IAAI,OAAe,CAAC;QACpB,IAAI,KAAa,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK;YACpC,IAAI,SAAS,IAAI,KAAK,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE;gBAC7D,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,GAAG,KAAK,CAAC;aACjB;YACD,IAAI,SAAS,IAAI,MAAM,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE;gBAC9D,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,GAAG,KAAK,CAAC;aACjB;SACF,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KAC3B;;;YAtaF,UAAU;;;;YANF,kBAAkB;;;ACS3B,MAAM,+BAA+B,GACnC,uQAAuQ,CAAC;MAQ7P,cAAc;IAiCzB,YAAoB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;QAhCzC,SAAI,GAAc,QAAQ,CAAC;QA8B5B,yBAAoB,GAAY,KAAK,CAAC;KAEQ;IA3BtD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IACD,IAAa,MAAM,CAAC,KAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IACD,IAAa,UAAU,CAAC,KAA4B;QAClD,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IASD,IAAa,MAAM,CAAC,KAAsB;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;KACjE;IASD,eAAe;;;;;;;QAOb,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QACvD,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KACjF;IAEO,4BAA4B,CAAC,OAAoB;QACvD,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAEhE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO;YACzB,MAAM,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC1D,IAAI,QAAQ,CAAC,iBAAiB,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE3C,MAAM,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBAC9E,IAAI,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE;oBAC7C,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBAClC,OAAO,EAAE,CAAC;iBACX;aACF,CAAC,CAAC;YAEH,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACjC,CAAC,CAAC;KACJ;IAED,WAAW,CAAC,aAA4B;QACtC,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,iBAAiB,GAAG,KAAK,CAAC;;YAG9B,MAAM,gBAAgB,GAAG;gBACvB,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;gBAC7B,UAAU,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;gBACrC,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE;gBACjC,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;gBAC7B,aAAa,EAAE,MAAM,IAAI,CAAC,mBAAmB,EAAE;gBAC/C,WAAW,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;gBAC3C,mBAAmB,EAAE,MAAM,IAAI,CAAC,yBAAyB,EAAE;aAC5D,CAAC;YAEF,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC1C,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBAAE,OAAO;gBACrE,iBAAiB,GAAG,IAAI,CAAC;gBACzB,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;aACzB,CAAC,CAAC;YAEH,IAAI,iBAAiB;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAC;SAC3C;KACF;IAEO,WAAW;QACjB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;YAC9B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;SAC9C,CAAC,CAAC;KACJ;IAEO,UAAU;QAChB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;IAEO,YAAY;QAClB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/C;IAEO,UAAU;QAChB,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;KAC/D;IAEO,mBAAmB;QACzB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KAClE;IAEO,iBAAiB;QACvB,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACzD;IAEO,yBAAyB;QAC/B,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACzE;IAEO,WAAW;QACjB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACnC;;;YAvIF,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,4RAAqC;gBAErC,SAAS,EAAE,CAAC,cAAc,CAAC;;aAC5B;;;;YAjBQ,cAAc;;;mBAmBpB,KAAK;mBACL,KAAK;qBAOL,KAAK;yBAGL,KAAK;4BAKL,KAAK;+BACL,KAAK;0BACL,KAAK;kCACL,KAAK;sBAEL,WAAW,SAAC,4BAA4B;qBAExC,KAAK;4BAIL,SAAS,SAAC,aAAa;;;MCjDb,2BAA2B,GAAG,CAAC,MAAc,EAAE,MAAc;IACxE,MAAM,OAAO,GAAYC,gBAAc,CAAC,MAAM,CAAY,CAAC;IAC3D,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;IAC/C,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAE9B,OAAO,CAAC,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;;IAEzF,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG;QAC1B,QACE,iCAAiC;;YAEjCC,YAAU,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,2DAA2D;YAC3D,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;YAC5B,QAAQ,EACR;KACH,CAAC;IACF,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;IACtD,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEpF,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,uBAAuB,CAAC;IACpE,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAE1F,OAAO,CAAC,KAAK,mCACR,OAAO,CAAC,KAAK,KAChB,SAAS,EAAE;YACT,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC;SACrD,EACD,SAAS,EAAE,gBAAgB,EAC3B,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EACvD,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;aAC5D;SACF,GACF,CAAC;IAEF,OAAO,CAAC,KAAK,mCACR,OAAO,CAAC,KAAK,KAChB,SAAS,EAAE,gBAAgB,EAC3B,aAAa,EAAE,WAAW,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAC3D,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,KAAK,EAAE,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;aAC5D;SACF,GACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BF,OAAO,OAAO,CAAC;AACjB,EAAE;MAEW,WAAW,GAAG,CAAC,MAAc;IACxC,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,CAAC;QACT,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,QAAQ;gBACf,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC;;gBAE/D,SAAS,EAAE;oBACT,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBAC9C;aACF;YACD;gBACE,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,CAAC,EAAE;gBACb,KAAK,EAAE,QAAQ;gBACf,aAAa,EAAE,QAAQ;gBACvB,eAAe,EAAE,WAAW,CAAC,sBAAsB,CAAC,UAAU,CAAC;;gBAE/D,SAAS,EAAE;oBACT,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;iBAC9C;aACF;SACF;QACD,YAAY,EAAE;YACZ,CAAC,EAAE,CAAC;YACJ,YAAY,EAAE,IAAI;SACnB;KACF,CAAC;AACJ,EAAE;AAEF,MAAMD,gBAAc,GAAG,CAAC,MAAc;IACpC,OAAO;QACL,KAAK,EAAE;YACL,QAAQ,EAAE,GAAG;YACb,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,EAAE;SAEf;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;SACf;QACD,aAAa,EAAE;YACb,OAAO,EAAE,KAAK;SACf;QACD,SAAS,EAAE;YACT,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;SACf;QACD,KAAK,EAAE;YACL,IAAI,EAAE,EAAE;SACT;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,EAAE;SACT;QACD,KAAK,EAAE;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE;gBACN,MAAM,EAAE,4BAA4B;aACrC;SACF;QACD,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE;aACT;SAQF;QACD,WAAW,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE;YACN,OAAO,EAAE,KAAK;SACf;QACD,OAAO,EAAE;YACP,UAAU,EAAE;gBACV,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;aACV;YACD,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,CAAC;SACf;QACD,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,CAAC;iBACV;gBACD,SAAS,EAAE,CAAC;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE;wBACL,SAAS,EAAE,CAAC;qBACb;iBACF;gBACD,MAAM,EAAE,EAAE;gBACV,SAAS,EAAE,IAAI;aAChB;YACD,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,MAAM,EAAE,GAAG;oBACX,gBAAgB,EAAE,EAAE;iBACrB;aACF;SACF;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,EAAE;aACT;SACF;KACF,CAAC;AACJ,CAAC,CAAC;;;ACjNF;AACA,iBAAiB,CAACE,YAAU,CAAC,CAAC;MAOjB,6BAA6B;IA+BxC,YAAY,WAAuB,EAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAftE,YAAO,GAAG,GAAG,CAAC;QAUb,gBAAW,GAAG,EAAE,CAAC;QACjB,mBAAc,GAAG,IAAI,CAAC;QAK7B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;KACnC;IA9BD,IAAa,IAAI,CAAC,GAAoC;QACpD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KACzB;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IAAa,OAAO,CAAC,GAAY;QAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;KAC5B;IACD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAa,MAAM,CAAC,MAAc;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAClC;KACF;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAUD,gBAAgB,CAAC,OAAgB;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAGC,UAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtF;IAED,aAAa,CAAC,IAAqC;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;;YAEtB,IAAI,CAAC,KAAK,CAAC,MAAM,CACf;gBACE,MAAM,EAAE,EAAE;aACX,EACD,KAAK,EACL,IAAI,CACL,CAAC;;YAEF,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;;YAEtC,IAAI,CAAC,KAAK,CAAC,MAAM,CACf;gBACE,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI;qBACX;iBACF;aACF,EACD,KAAK,EACL,IAAI,CACL,CAAC;;YAEF,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;;YAE1D,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACrB;KACF;;;YA7EF,SAAS,SAAC;gBACT,QAAQ,EAAE,8BAA8B;gBACxC,QAAQ,EAAE,EAAE;;aAEb;;;;YAjBmB,UAAU;yCAiDU,MAAM,SAAC,SAAS;;;mBA5BrD,KAAK;sBAOL,KAAK;qBAOL,KAAK;0BASL,KAAK;6BACL,KAAK;;;MCtCK,cAAc;IAIzB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAFhC,sBAAiB,GAAG,KAAK,CAAC;KAEU;IAErC,IAAI,CACT,iBAA6B,EAC7B,OAAwB,EACxB,aAAsE,EACtE,aAAsC;QAEtC,IAAI,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,EAAE;YAC3C,MAAM,MAAM,GAAsB,iBAAiB,CAAC,aAAa,CAAC;YAClE,MAAM,CAAC,MAAM,GAAG;gBACd,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;aACzC,CAAC;YACF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YAEzC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAmB,KAC1E,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,CAC7D,CAAC;SACH;KACF;IAEM,MAAM,CAAC,OAAwB;QACpC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SACzC;KACF;IAEM,cAAc,CAAC,GAAW;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,WAAW,CAC3B;gBACE,IAAI,EAAE,6BAA6B;gBACnC,WAAW,EAAE,GAAG;aACjB,EACD,GAAG,CACJ,CAAC;SACH;KACF;IAEO,eAAe,CAAC,iBAA6B;QACnD,QACE,iBAAiB;YACjB,iBAAiB,CAAC,aAAa;YAC/B,iBAAiB,CAAC,aAAa,YAAY,iBAAiB;YAC5D,iBAAiB,CAAC,aAAa,CAAC,aAAa,EAC7C;KACH;IAEO,yBAAyB,CAAC,OAAwB;QACxD,IAAI,CAAC,YAAY,CAAC,WAAW,iBAEzB,IAAI,EAAE,mBAAmB,IACtB,OAAO,GAEZ,GAAG,CACJ,CAAC;KACH;IAEO,kBAAkB,CACxB,KAAmB,EACnB,aAAsE,EACtE,aAAsC;QAEtC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC/B,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI;gBACrB,KAAK,0BAA0B;oBAC7B,IAAI,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,EAAE;wBAC3C,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;qBAC7D;oBACD,MAAM;gBACR,KAAK,0BAA0B;oBAC7B,IAAI,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;wBAC5C,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACjC;oBACD,MAAM;aACT;SACF;KACF;IAEO,eAAe,CAAC,KAAmB;QACzC,QACE,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,MAAM;YAClC,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,KAAK,CAAC,IAAI;YACV,KAAK,CAAC,IAAI,CAAC,IAAI,EACf;KACH;IAEO,2BAA2B,CAAC,KAAmB;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,0BAA0B,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;KACzE;IAEO,4BAA4B,CAAC,KAAmB;QACtD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,0BAA0B,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;KAC/F;;;YApGF,UAAU;;;;YAJF,SAAS;;;ACmDlB,IAAK,QASJ;AATD,WAAK,QAAQ;IACX,2BAAe,CAAA;IACf,6BAAiB,CAAA;IACjB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,yCAA6B,CAAA;AAC/B,CAAC,EATI,QAAQ,KAAR,QAAQ,QASZ;MAQY,iBAAiB;IA2H5B,YAAoB,cAA8B,EAAqB,MAAc;QAAjE,mBAAc,GAAd,cAAc,CAAgB;QAzHxC,eAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;QACtC,eAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;QACtC,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;QACzC,aAAQ,GAAoB,OAAO,CAAC;QACpC,oBAAe,GAAG,KAAK,CAAC;QACxB,qBAAgB,GAAG,KAAK,CAAC;QACzB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,sBAAiB,GAAG,KAAK,CAAC;QAC1B,kBAAa,GAA8B,EAAE,CAAC;;;;;QAK9C,eAAU,GAAG,KAAK,CAAC;QAkBpB,mBAAc,GAAW,EAAE,CAAC;QAM5B,oBAAe,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAqF3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;KACtE;IArFD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;IAED,IAAa,YAAY,CAAC,eAAqB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;YAClD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;SAC5B;KACF;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,aAAa,CAAC,KAAa;QACtC,IAAI,CAAC,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7E;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,IAAa,SAAS,CAAC,KAAW;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC7C;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAa,OAAO,CAAC,KAAW;QAC9B,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAClE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC3C;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,IAAa,OAAO,CAAC,KAAW;QAC9B,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YACjE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC3C;IAED,IAAI,eAAe;QACjB,OAAO,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;KAC/E;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;KACxD;;;;IAKD,IAAI,cAAc;QAChB,MAAM,wBAAwB,GAC5B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAEhF,MAAM,uBAAuB,GAC3B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAE9E,OAAO,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,uBAAuB,CAAC,CAAC;KACrF;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACrD;IAED,IACI,iBAAiB;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;KACpC;IAOO,gBAAgB,CAAC,IAAU,EAAE,YAAoB;QACvD,OAAO,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;KACJ;IAEO,SAAS,CAAC,MAAc;QAC9B,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,GAAG,MAAM,CAAC;SACjB;QACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,gBAAgB,mCAAQ,IAAI,CAAC,eAAe,GAAK,IAAI,CAAC,aAAa,CAAE,CAAC;QAE5E,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;KAC9D;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACxC;IAED,eAAe;QACb,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9B,CAAC;KACH;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IACE,OAAO,CAAC,eAAe;YACvB,OAAO,CAAC,gBAAgB;YACxB,OAAO,CAAC,kBAAkB;YAC1B,OAAO,CAAC,aAAa;YACrB,OAAO,CAAC,OAAO;YACf,OAAO,CAAC,OAAO;YACf,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,QAAQ,EAChB;YACA,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACrD;KACF;IAEO,cAAc,CAAC,OAAa,IAAI,IAAI,EAAE;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YAC7D,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACrD;KACF;;;;;;IAOO,aAAa,CAAC,cAAoB;QACxC,IAAI,CAAC,cAAc;YAAE,OAAO;QAE5B,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,KAAK,cAAc,CAAC,OAAO,EAAE,EAAE;;YAErE,OAAO,cAAc,CAAC;SACvB;QACD,IACE,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE;YACvE,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAC3D;;YAEA,MAAM,iBAAiB,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5E,OAAO,iBAAiB,CAAC;SAC1B;;QAED,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;KACnC;IAEO,WAAW;QACjB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,iBAAiB,CAAC;YAC7B,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC7C,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1E;IAEO,kCAAkC,CAAC,IAAU;QACnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KAC7C;IAEO,cAAc,CAAC,OAAa,EAAE,YAAkB;QACtD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,EAAE;YAC7B,OAAO,KAAK,CAAC;SACd;QACD,IAAI,OAAO,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;QACD,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;KAC1C;IAEO,cAAc,CAAC,IAAU;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY;YAC1C,OAAO,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACtC,CAAC,CAAC;KACJ;IAED,kBAAkB;QAChB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAEnF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAmB,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM;YAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAE7D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE;gBACxB,cAAc,EAAE,GAAG,CAAC,cAAc;gBAClC,YAAY;gBACZ,UAAU;gBACV,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC;aAC9D,CAAC;YACF,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;YACD,OAAO,IAAI,CAAC;SACb,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACnC;IAEO,cAAc,CAAC,IAAU,EAAE,KAAW,EAAE,UAAgB;QAC9D,OAAO;YACL,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;YAC/B,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;YAC7B,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YAC9B,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC;YAC1B,cAAc,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;SACtC,CAAC;KACH;IAEO,YAAY,CAAC,GAAgB,EAAE,IAAU;QAC/C,QACE,CAAC,IAAI,CAAC,iBAAiB,IAAI,GAAG,CAAC,OAAO;aACrC,CAAC,GAAG,CAAC,UAAU;gBACd,GAAG,CAAC,cAAc;gBAClB,EAAE,IAAI,CAAC,eAAe,IAAI,GAAG,CAAC,SAAS,CAAC;gBACxC,EAAE,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,MAAM,CAAC;gBACtC,EAAE,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC,QAAQ,CAAC;gBAC1C,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/C,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EACjD;KACH;IAEO,aAAa,CAAC,GAAgB,EAAE,YAAqB,EAAE,UAAmB;QAChF,MAAM,UAAU,GAAG;YACjB,eAAe,EAAE,GAAG,CAAC,cAAc;YACnC,OAAO,EAAE,GAAG,CAAC,SAAS;YACtB,KAAK,EAAE,GAAG,CAAC,OAAO;YAClB,UAAU,EAAE,YAAY;YACxB,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,GAAG,CAAC,MAAM;YAChB,QAAQ,EAAE,GAAG,CAAC,UAAU;SACzB,CAAC;QACF,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;gBACnB,cAAc,IAAI,GAAG,GAAG,GAAG,CAAC;aAC7B;SACF;QACD,OAAO,cAAc,CAAC;KACvB;IAEO,KAAK,CAAC,KAAY,EAAE,IAAY;QACtC,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,MAAM,EAAE;YACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;SACrC;QACD,OAAO,OAAO,CAAC;KAChB;IAEO,oBAAoB,CAAC,OAAa;QACxC,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,KAAK,CAAC;SACrC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;SAC3B;QACD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KACvD;IAED,eAAe,CAAC,MAAoB;QAClC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,EAAE;YACtC,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE7B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;gBAC3B,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aACnF;YAED,MAAM,UAAU,GAAG,OAAO,CAAC;YAE3B,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;gBACpD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;gBAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAClC;YACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAClC;KACF;IAEO,aAAa,CAAC,SAAiB;QACrC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;KACrD;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC/C;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACnC;IAEO,gBAAgB,CAAC,KAAa,EAAE,IAAc;QACpD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO;QACxB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,IAAI,gBAAgB;QAClB,MAAM,qBAAqB,GACzB,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzE,MAAM,wBAAwB,GAC5B,IAAI,CAAC,OAAO;aACX,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5F,OAAO,CAAC,qBAAqB,IAAI,CAAC,wBAAwB,CAAC;KAC5D;IAED,IAAI,mBAAmB;QACrB,MAAM,uBAAuB,GAC3B,IAAI,CAAC,kBAAkB,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE3E,MAAM,wBAAwB,GAC5B,IAAI,CAAC,OAAO;aACX,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3F,OAAO,CAAC,uBAAuB,IAAI,CAAC,wBAAwB,CAAC;KAC9D;IAEO,OAAO,CAAC,IAAU;QACxB,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,EAAE;YACR,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC5B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG;oBACvB,OAAO,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;iBAC1D,CAAC,CAAC;gBACH,IAAI,QAAQ,EAAE;oBACZ,MAAM;iBACP;aACF;SACF;QACD,OAAO,QAAQ,CAAC;KACjB;IAEO,gBAAgB;QACtB,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,SAAS,EAAE,IAAI,CAAC,eAAe;YAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC;KACH;IAEO,sBAAsB,CAAC,IAAU;QACvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAChE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC;KACtD;IAEO,wBAAwB,CAAC,aAA4B;QAC3D,IAAI,aAAa,YAAY,IAAI;YAAE,OAAO,aAAa,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC;QAC3C,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5D;IAEO,oBAAoB,CAAC,SAAe,EAAE,OAAa;;QAEzD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;QAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;KACxF;;;YA/bF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,u4CAAwC;gBAExC,SAAS,EAAE,CAAC,cAAc,CAAC;;aAC5B;;;;YA7BQ,cAAc;yCAyJgC,MAAM,SAAC,SAAS;;;gCA1HpE,SAAS,SAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;yBAChD,MAAM;yBACN,MAAM;yBACN,MAAM;uBACN,KAAK;8BACL,KAAK;+BACL,KAAK;iCACL,KAAK;gCACL,KAAK;4BACL,KAAK;yBAKL,KAAK;mCAQL,KAAK;2BAsBL,KAAK;4BAcL,KAAK;wBAQL,KAAK;sBAQL,KAAK;sBAWL,KAAK;gCAgCL,WAAW,SAAC,0BAA0B;;;MCnL5B,oBAAoB;IALjC;QAQE,UAAK,GAAoB,OAAO,CAAC;KAUlC;IATC,IAAa,IAAI,CAAC,KAAsB;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;KACjD;IAED,IAAI,gBAAgB;;;;QAGlB,OAAO,OAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,IAAG,CAAC,CAAC;KACtC;;;YAjBF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,qpBAA4C;;aAE7C;;;2BAEE,KAAK;mBAGL,KAAK;;;MCbK,iBAAiB;IAI5B,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAFjC,OAAE,GAAG,CAAC,CAAC;KAE8B;IAE7C,OAAO,QAAQ,CAAC,KAAa;QAC3B,IAAI,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC/C,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;SACxD;QACD,OAAO,eAAe,CAAC;KACxB;IAED,IAAI;QACF,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;KACrC;;AAhBc,0BAAQ,GAAG,IAAI,GAAG,EAA6B;;MCgBnD,iBAAiB;IAN9B;QAOW,YAAO,GAAY,KAAK,CAAC;QACzB,mBAAc,GAAc,GAAG,CAAC;QAYzC,aAAQ,GAAY,KAAK,CAAC;QAEjB,aAAQ,GAAG,KAAK,CAAC;QAahB,kBAAa,GAAG,IAAI,YAAY,EAAW,CAAC;;QAQtD,aAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC;KACtE;IArBC,IACI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;KAC1C;IAED,IAA2C,iBAAiB;QAC1D,OAAO,IAAI,CAAC,cAAc,KAAK,GAAG,CAAC;KACpC;IACD,IAA2C,iBAAiB;QAC1D,OAAO,IAAI,CAAC,cAAc,KAAK,GAAG,CAAC;KACpC;IAID,SAAS,CAAC,OAAgB;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;;;YAxCF,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,oUAAwC;gBAExC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;sBAEE,KAAK;6BACL,KAAK;mBAEL,WAAW,SAAC,iBAAiB,cAC7B,KAAK;mBAGL,WAAW,SAAC,OAAO,cACnB,KAAK;uBAGL,WAAW,SAAC,aAAa,cACzB,KAAK;uBAGL,KAAK;0BACL,WAAW,SAAC,eAAe;gCAK3B,WAAW,SAAC,wBAAwB;gCAGpC,WAAW,SAAC,wBAAwB;4BAIpC,MAAM;;;MCvCI,aAAa;;;YALzB,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,qCAAoC;;aAErC;;;mBAEE,KAAK;yBAEL,KAAK,YACL,WAAW,SAAC,oBAAoB,cAChC,WAAW,SAAC,mBAAmB;;;MCLrB,gBAAgB;;;YAL5B,SAAS,SAAC;gBACT,QAAQ,EAAE,eAAe;gBACzB,qDAAuC;;aAExC;;;wBAEE,KAAK;;;ICNI;AAAZ,WAAY,QAAQ;IAClB,qBAAS,CAAA;IACT,qBAAS,CAAA;IACT,qBAAS,CAAA;AACX,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB;MAOY,aAAa;IAL1B;QAgBE,SAAI,GAA6B,QAAQ,CAAC,EAAE,CAAC;KAW9C;;IARC,WAAW,CAAC,KAAiB;QAC3B,IACE,KAAK,CAAC,aAAa,YAAY,WAAW;YAC1C,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAC7C;YACA,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;KACF;;;YA1BF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,ifAAoC;;aAErC;;;uBAEE,KAAK;uBACL,WAAW,SAAC,gBAAgB,cAC5B,KAAK;yBAEL,KAAK;0BAEL,KAAK;mBAEL,WAAW,SAAC,OAAO,cACnB,KAAK;;;MClBK,iBAAiB;IAC5B;QACE,OAAO,CAAC,IAAI,CACV,+FAA+F,CAChG,CAAC;KACH;;;YARF,SAAS,SAAC;gBACT,QAAQ,EAAE,iBAAiB;aAC5B;;;;MAYY,qBAAqB;IAChC;QACE,OAAO,CAAC,IAAI,CACV,mGAAmG,CACpG,CAAC;KACH;;;YARF,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;aAChC;;;;MAYY,yBAAyB;;;YAHrC,SAAS,SAAC;gBACT,QAAQ,EAAE,yBAAyB;aACpC;;MAMY,mBAAmB;;;YAH/B,SAAS,SAAC;gBACT,QAAQ,EAAE,8CAA8C;aACzD;;MAMY,0BAA0B;;;YAHtC,SAAS,SAAC;gBACT,QAAQ,EAAE,4DAA4D;aACvE;;MAMY,mBAAmB;;;YAH/B,SAAS,SAAC;gBACT,QAAQ,EAAE,8CAA8C;aACzD;;;IC1BW;AAAZ,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,oCAAa,CAAA;AACf,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B;MAOY,gBAAgB;IAsC3B,YAAoB,UAAmC,EAAU,QAAmB;QAAhE,eAAU,GAAV,UAAU,CAAyB;QAAU,aAAQ,GAAR,QAAQ,CAAW;;QApCnE,sCAAiC,GAAG;YACnD,OAAO,EAAE,KAAK;SACS,CAAC;QAET,yBAAoB,GAAG,EAAE,CAAC;QAEnC,cAAS,GAAY,KAAK,CAAC;QASnC,WAAM,GAAmD,mBAAmB,CAAC,KAAK,CAAC;QAMnF,aAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;QAgBlC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;KACxD;IAfD,IAAY,aAAa;QACvB,IAAI,IAAI,CAAC,MAAM,YAAY,UAAU,EAAE;YACrC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;SAClC;aAAM;YACL,OAAO,IAAI,CAAC,MAAM,CAAC;SACpB;KACF;IAGD,eAAe;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAMD,eAAe;QACb,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,EAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAC9B,CAAC;KACH;IAED,WAAW;QACT,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAEO,6BAA6B;QACnC,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;SAC/D;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;SAC7D;KACF;;IAGO,OAAO,0BAA0B,CAAC,KAAiB;QACzD,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;YACvC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClE,IAAI,CAAC,iBAAiB,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE,CAAC;aACxB;SACF;KACF;IAEO,aAAa;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;SAClE;;QAGD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAC5B,WAAW,EACX,gBAAgB,CAAC,0BAA0B,EAC3C,IAAI,CAAC,iCAAiC,CACvC,CAAC;KACH;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;SACrE;QAED,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAC/B,WAAW,EACX,gBAAgB,CAAC,0BAA0B,EAC3C,IAAI,CAAC,iCAAiC,CACvC,CAAC;KACH;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE7E,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;IAED,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAE5B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,EAC3C,IAAI,CAAC,UAAU,CAAC,aAAa,CAC9B,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAEO,eAAe;QACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAEpE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE7E,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QACzD,MAAM,iBAAiB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC;QAC1D,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QACzF,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;KACxF;IAEO,oBAAoB,CAC1B,QAAgB,EAChB,cAA8B,EAC9B,gBAAyB,EACzB,iBAA0B;QAE1B,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC1C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC;QAC7C,MAAM,mBAAmB,GAAG,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAClE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,KAAK,CAAC;QAClD,MAAM,0BAA0B,GAC9B,mBAAmB,IAAI,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAClE,MAAM,SAAS,GAAG,0BAA0B,IAAI,mBAAmB,IAAI,kBAAkB,CAAC;QAE1F,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAClC,IAAI,CAAC,MAAM,KAAK,mBAAmB,CAAC,IAAI,IAAI,CAAC,SAAS;cAClD,CAAC,MAAM,EAAE,OAAO,CAAC;cACjB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAExB,MAAM,OAAO,GACX,SAAS,KAAK,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAExF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC;KAC3E;IAEO,kBAAkB,CACxB,QAAgB,EAChB,cAA8B,EAC9B,gBAAyB,EACzB,iBAA0B;QAE1B,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC;QAC5C,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAC/C,MAAM,kBAAkB,GAAG,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACpE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC;QAC9C,MAAM,wBAAwB,GAC5B,kBAAkB,IAAI,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAElE,MAAM,qBAAqB,GACzB,wBAAwB,IAAI,kBAAkB,IAAI,gBAAgB,CAAC;QACrE,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,GAAG,qBAAqB;cACxD,CAAC,QAAQ,EAAE,KAAK,CAAC;cACjB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEtB,MAAM,OAAO,GACX,SAAS,KAAK,QAAQ,GAAG,gBAAgB,CAAC,MAAM,GAAG,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC;QAE3F,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,iBAAiB,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC;QAE1E,IAAI,SAAS,KAAK,KAAK,EAAE;;YAEvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;SACtE;KACF;;;YAzMF,SAAS,SAAC;gBACT,QAAQ,EAAE,eAAe;gBACzB,QAAQ,EAAE,iEAAiE;;aAE5E;;;;YArBC,UAAU;YAMV,SAAS;;;6BA6BR,SAAS,SAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;qBAGvD,KAAK;qBAGL,KAAK;uBAGL,MAAM;8BAWN,YAAY,SAAC,eAAe;;;AC1D/B,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,6CAAM,CAAA;IACN,+CAAO,CAAA;IACP,yCAAI,CAAA;AACN,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,qDAAE,CAAA;IACF,yDAAI,CAAA;AACN,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB;;MCDhB,sBAAsB;IACjC,MAAM,CAAC,KAAoB,EAAE,KAAuB,EAAE,aAAqB;QACzE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;;gBAEd,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,WAAW,CAAC;YACjB,KAAK,YAAY;gBACf,IAAI,aAAa,KAAK,SAAS,EAAE;;oBAE/B,QAAQ,GAAG,CAAC,CAAC;iBACd;qBAAM,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAE3C,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;iBAC9B;gBACD,MAAM;YACR,KAAK,MAAM;;gBAET,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,KAAK,KAAK;;gBAER,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC5B,MAAM;YACR;gBACE,MAAM;SACT;QACD,OAAO,QAAQ,CAAC;KACjB;;;;YAlCF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;MCyCY,iBAAiB;IAmJ5B,YACU,QAAmB,EACnB,UAAmC,EACnC,iBAAoC,EACpC,sBAA8C;QAH9C,aAAQ,GAAR,QAAQ,CAAW;QACnB,eAAU,GAAV,UAAU,CAAyB;QACnC,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAnJhD,UAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QACzB,8BAAyB,GAAG,KAAK,CAAC;QAClC,wBAAmB,GACzB,mBAAmB,CAAC,KAAK,CAAC;QACpB,sBAAiB,GAA+C,iBAAiB,CAAC,IAAI,CAAC;QAEvF,WAAM,GAAqB,EAAE,CAAC;QAU9B,mBAAc,GAAW,CAAC,CAAC,CAAC;QAapC,qBAAgB,GAAG,MAAM,CAAC;QAG1B,gBAAW,GAAG,gBAAgB,CAAC;QAW/B,mBAAc,GAA0B,GAAG,CAAC;QACnC,uBAAkB,GAAG,GAAG,CAAC;QAMlC,aAAQ,GAAG,KAAK,CAAC;QAYjB,SAAI,GAAgB,IAAI,CAAC;QAGzB,aAAQ,GAAG,CAAC,CAAC;QAIb,eAAU,GAAG,KAAK,CAAC;;;;QAgBT,WAAM,GAA+B,IAAI,YAAY,EAAgB,CAAC;QAExE,WAAM,GAAiB,IAAI,CAAC;QAepC,UAAK,GAAG,SAAS,CAAC;QAqCV,sBAAiB,GAAmB,EAAE,CAAC;QAuKvC,cAAS,GAAyB,SAAQ,CAAC;QAC3C,eAAU,GAAG,SAAQ,CAAC;KA/J1B;IA7IJ,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,KAAK,CAAC,KAAuB;QACxC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;KACtD;IAGD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,aAAa,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;YAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;SACtD;KACF;IAQD,IAAa,MAAM,CAAC,SAAyD;QAC3E,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,mBAAmB,CAAC,KAAK,CAAC;KACnE;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IAYD,IACI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;KAC1C;IAgBD,IACI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;KAC3C;;IAGD,IACI,eAAe;QACjB,OAAO,IAAI,CAAC;KACb;IAQD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;IAED,IACI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;KAChC;IAKD,IACI,UAAU;QACZ,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC;KACzC;IAED,IACI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC;KACtC;IAED,IACI,WAAW;QACb,OAAO,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,IAAI,CAAC;KAC9D;IAED,IACI,SAAS;QACX,OAAO,IAAI,CAAC,iBAAiB,KAAK,iBAAiB,CAAC,EAAE,CAAC;KACxD;IA4BD,QAAQ,CAAC,KAAiB;QACxB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACvC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;KAC1C;IAED,kBAAkB,CAAC,KAAY;;QAE7B,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YACpE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK;gBAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE;oBACtE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBAC1B,CAAC,CAAC;gBACH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;SACvC;KACF;;;IAIO,mBAAmB,CAAC,KAAa,EAAE,KAAa;QACtD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,KAAK,EACL,KAAK,EACL,mBAAmB,CAAC,QAAQ,CAC7B,CAAC;KACH;IAED,eAAe;QACb,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;YAC9C,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACxE,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACjC,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE,KAAK;aAClB,CAAC;YACF,MAAM,QAAQ,GAAiC,CAAC,OAAO;;gBAErD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;oBACpC,OAAO;iBACR;;gBAGD,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC;gBACrD,IAAI,SAAS,IAAI,KAAK,CAAC,iBAAiB,GAAG,CAAC,EAAE;oBAC5C,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;oBACnC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;iBAClC;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aACxC,CAAC;YACF,IAAI,CAAC,uBAAuB,GAAG,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC3E,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SACtE;KACF;IAEO,sBAAsB,CAAC,KAAgC;;;QAG7D,IAAI,IAAI,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,KAAK,EAAE;YAC1D,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE;gBAC3D,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,IAAI,CAAC;aACrD;SACF;aAAM;YACL,IAAI,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;gBACzD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,KAAK,CAAC;aACtD;SACF;KACF;IAEO,oBAAoB,CAAC,KAAgC;QAC3D,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,EAAE;;;YAGpC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC;SACjD;QACD,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;;YAE7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;YACrF,MAAM,OAAO,GAAG,CAAC,CAAC;;YAElB,IAAI,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,EAAE;;gBAE5D,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,EAAE,CAAC;aAC/C;SACF;KACF;IAED,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC;;YAE/B,IAAI,CAAC,qBAAqB,GAAG,UAAU,CACrC,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,iBAAiB,CAAC,gBAAgB,CACnC,CAAC;SACH;KACF;IAEO,YAAY;;QAClB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,EAAE;YACpC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;YAC5B,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,GAAG;YACrB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACvC;KACF;IAED,KAAK;;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;;YAE9B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC;YAChD,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,GAAG;SACtB;KACF;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;;;;;;;IAWD,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAChC;;;;;;;;IASD,gBAAgB,CAAC,EAAO;QACtB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;;;;;;;;IASD,iBAAiB,CAAC,EAAO;QACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;;;;;;;IAQD,gBAAgB,CAAE,UAAmB;QACnC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;YAC/B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAChC;KACF;IAEO,kBAAkB,CAAC,KAAmB;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAChD;IAED,eAAe,CAAC,IAAkB;QAChC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC;SACb;QACD,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACtE;IAED,kBAAkB,CAAC,KAAa;QAC9B,MAAM,UAAU,GACd,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM;cACnD,IAAI,CAAC,iBAAiB;cACtB,IAAI,CAAC,iBAAiB,CAAC;QAC7B,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;YACnC,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,aAAa,EAAE;gBACxD,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC;gBACpD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBACvD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC;gBACtC,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC;gBACpE,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC;gBACtD,MAAM,sBAAsB,GAAG,eAAe,CAAC,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC;gBACxF,IAAI,OAAO,GAAG,mBAAmB,EAAE;oBACjC,eAAe,CAAC,SAAS,GAAG,OAAO,CAAC;iBACrC;qBAAM,IAAI,UAAU,GAAG,sBAAsB,EAAE;oBAC9C,eAAe,CAAC,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC,YAAY,CAAC;iBACvE;aACF;SACF;KACF;IAGD,MAAM,CAAC,KAAoB;QACzB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;KACF;IAGD,YAAY,CAAC,KAAiB;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;SAClC;KACF;IAGD,QAAQ;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;SACtC;KACF;IAED,kBAAkB;QAChB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACvC;IAKD,OAAO,CAAC,KAAkB;QACxB,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAA4B,CAAC,EAAE;gBACjF,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAGD,QAAQ,CAAC,KAAoB;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;SACb;KACF;IAGD,QAAQ,CAAC,KAAoB;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAMD,YAAY,CAAC,KAAoB;QAC/B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;;QAE1B,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE;YAC5E,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3F,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;KACd;IAID,cAAc,CAAC,KAAoB;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3F,IAAI,QAAQ,GAAG,CAAC,CAAC,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;KACd;IAED,WAAW;QACT,IAAI,QAAoB,CAAC;QACzB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,SAAS,EAAE;YAC9D,QAAQ,EAAE,CAAC;SACZ;QACD,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC;SAC3C;KACF;;AAxee,kCAAgB,GAAG,GAAG,CAAC;;YAfxC,SAAS,SAAC;gBACT,QAAQ,EAAE,gBAAgB;gBAC1B,4lDAAwC;gBAExC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;wBAChD,KAAK,EAAE,IAAI;qBACZ;iBACF;;aACF;;;;YA5BC,SAAS;YATT,UAAU;YAJV,iBAAiB;YA4BV,sBAAsB;;;oBA6B5B,KAAK;4BAUL,KAAK;+BAOL,KAAK;0BAGL,KAAK;qBAGL,KAAK;6BAQL,KAAK;qBAIL,KAAK;uBAGL,KAAK;0BAGL,WAAW,SAAC,eAAe;uBAK3B,WAAW,SAAC,aAAa,cACzB,KAAK;mBAGL,KAAK;uBAGL,KAAK;yBAGL,WAAW,SAAC,oBAAoB,cAChC,KAAK;wBAGL,WAAW,SAAC,eAAe;8BAM3B,WAAW,SAAC,cAAc;qBAQ1B,MAAM;4BAWN,WAAW,SAAC,cAAc;oBAK1B,WAAW,SAAC,WAAW;yBAGvB,WAAW,SAAC,kBAAkB;qBAK9B,WAAW,SAAC,eAAe;0BAK3B,WAAW,SAAC,mBAAmB;wBAK/B,WAAW,SAAC,iBAAiB;2BAK7B,YAAY,SAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;2BAE3E,eAAe,SAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;0BAE/D,SAAS,SAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;sBAE7C,SAAS,SAAC,gBAAgB;4BAE1B,SAAS,SAAC,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;gCAE7D,YAAY,SAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gCAEhD,eAAe,SAAC,aAAa,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;qBAkQnD,YAAY,SAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;2BAQtC,YAAY,SAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;uBAQpC,YAAY,SAAC,OAAO;sBAYpB,YAAY,SAAC,eAAe,cAC5B,YAAY,SAAC,gBAAgB,cAC7B,YAAY,SAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;uBAW/B,YAAY,SAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;uBASxC,YAAY,SAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;2BAOxC,YAAY,SAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,cAC1C,YAAY,SAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,cAC5C,YAAY,SAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,cAC5C,YAAY,SAAC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;6BAc7C,YAAY,SAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,cACvC,YAAY,SAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;MC7f5B,mBAAmB;IAS9B,kBAAkB;QAChB,IAAI,CAAC,0BAA0B,EAAE,CAAC;;;QAIlC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;YACpC,UAAU,CAAC,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC;SACrD,CAAC,CAAC;KACJ;;;;;IAMO,0BAA0B;QAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK;YACxC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,iBAAiB;gBAAE,OAAO;YAEpD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;gBAC7B,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;aAC7B;SACF,CAAC,CAAC;KACJ;;;YApCF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,4YAA2C;;aAE5C;;;uBAEE,KAAK;6BACL,KAAK;oBACL,KAAK;uBACL,KAAK;6BAEL,eAAe,SAAC,eAAe;;;MCLrB,cAAc;IAL3B;QAgCE,aAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;KAInE;IAjBC,IACI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;KAC1C;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;KAChF;IAED,KAAK;QACH,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACpE;;;YA9BF,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,oQAAqC;;aAEtC;;;oBAEE,KAAK;mBAGL,WAAW,SAAC,iBAAiB,cAC7B,KAAK;mBAGL,WAAW,SAAC,OAAO,cACnB,KAAK;uBAGL,KAAK;0BAEL,WAAW,SAAC,eAAe;8BAe3B,SAAS,SAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCP5C,mBAAmB;IAC9B,YAAoB,kBAAqC;QAArC,uBAAkB,GAAlB,kBAAkB,CAAmB;QAezD,aAAQ,GAAY,KAAK,CAAC;QAa1B,qBAAgB,GAAG,MAAM,CAAC;QAG1B,yBAAoB,GAAG,UAAU,CAAC;;;;QA6BxB,gBAAW,GAA+B,IAAI,YAAY,EAAgB,CAAC;;;QAS7E,cAAS,GAAG,KAAK,CAAC;QAClB,WAAM,GAAqB,EAAE,CAAC;QAC9B,sBAAiB,GAAyB,SAAQ,CAAC;QACnD,eAAU,GAAG,SAAQ,CAAC;QACtB,mBAAc,GAAW,CAAC,CAAC,CAAC;QAC5B,WAAM,GAAkB,IAAI,CAAC;KA1EwB;;IAI7D,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAa,QAAQ,CAAC,KAAc;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;KAC7C;IAMD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;KAC1B;IAED,IAAa,KAAK,CAAC,KAAuB;QACxC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO;QAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAQD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,aAAa,CAAC,KAAa;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG;YAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACvE,IAAI,KAAK,KAAK,IAAI,CAAC,aAAa;YAAE,OAAO;QACzC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,yBAAyB,EAAE,IAAI,IAAI,CAAC;KACxD;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,KAAK,CAAC,KAAmB;QACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC7B;IAED,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;KACxD;IAyBD,IAAY,6BAA6B;QACvC,QACE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAClB,CAAC,IAAI,CAAC,mBAAmB;YACzB,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EACrC;KACH;;;IAKD,KAAK;QACH,MAAM,aAAa,GAAG,CAAC,MAAiC,KACtD,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChG,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;KAChC;IAED,kBAAkB;QAChB,IAAI,CAAC,sCAAsC,EAAE,CAAC;QAC9C,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACvC;IAED,gBAAgB,CAAC,EAAO;QACtB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC7B;IAED,iBAAiB,CAAC,EAAO;QACvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;IAED,gBAAgB,CAAC,UAAmB;QAClC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KACxC;IAED,UAAU,CAAC,KAAU;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;KACxC;;;IAKD,gBAAgB,CAAC,IAAkB;QACjC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACtE;IAED,yBAAyB,CAAC,IAAkB;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KAC/E;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,6BAA6B,CAAC;KACpE;IAED,SAAS,CAAC,KAAmB;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QAClC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC/B;IAGD,YAAY;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;;;IAKO,uBAAuB;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,6BAA6B;cACrC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;cACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;IAEO,wBAAwB,CAAC,KAAmB;QAClD,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,qBAAqB;YACxB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;gBACpC,IAAI,KAAK,EAAE;oBACT,aAAa,GAAG,CAAC,CAAC;iBACnB;gBACD,OAAO,KAAK,CAAC;aACd,CAAC,CAAC;QACL,OAAO,aAAa,CAAC;KACtB;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,aAAa,KAAK,CAAC,CAAC;YAAE,OAAO;QACtC,OAAO,IAAI,CAAC,6BAA6B;cACrC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,aAAa,CAAC;cACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACpC;IAEO,2BAA2B,CAAC,KAAa;QAC/C,MAAM,KAAK,GACT,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,KAAK,CAAC;aACpB,CAAC,CAAC;QACL,OAAO,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;KAC7B;IAEO,sCAAsC;QAC5C,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;KACF;IAEO,8BAA8B;QACpC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAExC,IAAI,IAAI,CAAC,QAAQ,EAAE;;;gBAGjB,UAAU,CAAC,MAAM,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;aACvE;SACF,CAAC,CAAC;KACJ;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;SACtD;QAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,sBAAsB,KAAK,SAAS,GAAG,sBAAsB,GAAG,IAAI,CAAC;KACpF;IAEO,gCAAgC;QACtC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QACvC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAEO,eAAe,CAAC,KAAmB;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QAClC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;KACtD;IAEO,+BAA+B,CAAC,UAAmB;QACzD,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM;YAAE,OAAO;QAC9E,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK;;YAE9C,KAAK,CAAC,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SAClF,CAAC,CAAC;KACJ;;;YAzPF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,qzBAA2C;gBAE3C,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,WAAW,EAAE,mBAAmB;wBAChC,KAAK,EAAE,IAAI;qBACZ;iBACF;gBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;yBARtC,yDAAyD;aASnE;;;;YA5BC,iBAAiB;;;uBAsChB,KAAK;uBAKL,WAAW,SAAC,aAAa,cACzB,KAAK;oBAOL,KAAK;+BAML,KAAK;mCAGL,KAAK;4BAOL,KAAK;oBAYL,KAAK;0BAWL,MAAM;kCAIN,YAAY,SAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;2BAW7D,YAAY,SAAC,cAAc;oCAE3B,eAAe,SAAC,cAAc,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;2BAqErD,YAAY,SAAC,SAAS;;;MCxKZ,qBAAqB;IAMhC,IAAI,IAAI;QACN,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;QAC/D,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;KACvC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACnE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK;gBACxE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;aAC5B,CAAC,CAAC;SACJ;KACF;IAED,WAAW;QACT,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC;SAC7C;KACF;;;YAhCF,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,mFAA6C;aAC9C;;;uBAEE,KAAK;;;ICDI;AAAZ,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,yBAAY,CAAA;AACd,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;MASY,cAAc;IAP3B;QAaE,gBAAW,GAAG,IAAI,YAAY,EAAU,CAAC;QAWzC,SAAI,GAA+B,SAAS,CAAC,KAAK,CAAC;QAenD,iBAAY,GAAiB,KAAK,CAAC;QAInC,gBAAW,GAAiB,KAAK,CAAC;KA+BnC;IA3DC,IAAa,IAAI,CAAC,KAAa;QAC7B,MAAM,WAAW,GAAG,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;SAC9B;KACF;IAsCD,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;IAID,WAAW,CAAC,MAAwB;;QAElC,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SACnD;KACF;;AAjEc,iCAAkB,GAAG;IAClC,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,QAAQ;CACjB,CAAC;;YAXH,SAAS,SAAC;gBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;;gBAE/C,QAAQ,EAAE,oBAAoB;gBAE9B,QAAQ,EAAE,EAAE;;aACb;;;mBASE,KAAK;mBAOL,WAAW,SAAC,OAAO,cACnB,KAAK;yBAML,WAAW,SAAC,kBAAkB,cAC9B,KAAK;uBAGL,WAAW,SAAC,aAAa,cACzB,KAAK;2BAGL,WAAW,SAAC,mBAAmB,cAC/B,KAAK;0BAGL,WAAW,SAAC,kBAAkB,cAC9B,KAAK;oBAGL,WAAW,SAAC,YAAY,cACxB,KAAK;wBAGL,WAAW,SAAC,gBAAgB,cAC5B,KAAK;wBAGL,WAAW,SAAC,gBAAgB,cAC5B,KAAK;uBAGL,YAAY,SAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;0BAK7C,YAAY,SAAC,OAAO,EAAE,CAAC,eAAe,CAAC,cACvC,YAAY,SAAC,KAAK,EAAE,CAAC,eAAe,CAAC;;;MC7D3B,iBAAiB;IAP9B;QAQE,gBAAW,GAAG,IAAI,YAAY,EAAU,CAAC;QAiBzC,iBAAY,GAAiB,KAAK,CAAC;QAInC,gBAAW,GAAiB,KAAK,CAAC;KAuBnC;IAhBC,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;IAID,WAAW,CAAC,MAAwB;;QAElC,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SACnD;KACF;;;YAnDF,SAAS,SAAC;gBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;;gBAE/C,QAAQ,EAAE,0BAA0B;gBAEpC,kHAAwC;;aACzC;;;oBAIE,KAAK;yBAKL,WAAW,SAAC,kBAAkB,cAC9B,KAAK;uBAGL,WAAW,SAAC,aAAa,cACzB,KAAK;2BAGL,WAAW,SAAC,mBAAmB,cAC/B,KAAK;0BAGL,WAAW,SAAC,kBAAkB,cAC9B,KAAK;wBAGL,WAAW,SAAC,gBAAgB,cAC5B,KAAK;uBAGL,YAAY,SAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;0BAK7C,YAAY,SAAC,OAAO,EAAE,CAAC,eAAe,CAAC,cACvC,YAAY,SAAC,KAAK,EAAE,CAAC,eAAe,CAAC;;;MCvB3B,kBAAkB;IAoB7B,YACE,UAAmC,EAC3B,QAAyB,EACzB,QAAmB,EACnB,SAAoB;QAFpB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,aAAQ,GAAR,QAAQ,CAAW;QACnB,cAAS,GAAT,SAAS,CAAW;QArBtB,iBAAY,GAAG,KAAK,CAAC;QAI7B,aAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;QAmBrE,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC;KACzC;IAED,IAAI,mBAAmB;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC1D;IAEO,iBAAiB;;;;QAIvB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAChD,IAAI,WAAW,CAAC,iBAAiB,EAAE;YACjC,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CACH,CAAC;KACH;IAGD,oBAAoB;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,YAAY;QACV,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;KAC9D;IAEM,KAAK;QACV,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,IAAI,IAAI,CAAC,OAAO,EAAE;;;YAGhB,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAC3B;KACF;IAED,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;KACxC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,CACxB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EACpC,iBAAiB,EACjB,IAAI,CAAC,QAAQ,CACd,CAAC;SACH;KACF;IAED,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;SACnE;;;QAID,IACE,CAAC,IAAI,CAAC,YAAY;YAClB,IAAI,CAAC,OAAO,CAAC,WAAW;YACxB,CAAC,CAAC,IAAI,CAAC,YAAY;YACnB,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAC3B;;YAEA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;KACF;IAED,WAAW;;;;QAIT,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAChD,IAAI,WAAW,CAAC,mBAAmB,EAAE;YACnC,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CACH,CAAC;KACH;;;YApHF,SAAS,SAAC;gBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,QAAQ,EAAE,kBAAkB;gBAE5B,iyCAA0C;;aAC3C;;;;YAtBC,UAAU;YAQH,eAAe;YAHtB,SAAS;YAKF,SAAS;;;oBAsBf,KAAK;sBACL,KAAK;sBAEL,YAAY,SAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;kCACrD,YAAY,SAAC,mBAAmB;gCAChC,YAAY,SAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;oBAGtD,YAAY,SAAC,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;uBACjD,YAAY,SAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;mCA0BpD,YAAY,SAAC,wBAAwB;;;MCjE3B,yBAAyB;IANtC;QAQW,aAAQ,GAAqB,MAAM,CAAC;KAC9C;;;YATA,SAAS,SAAC;gBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,QAAQ,EAAE,0BAA0B;gBAEpC,iDAAkD;;aACnD;;;mBAEE,KAAK;uBACL,KAAK;;;MCMK,kBAAkB;IAQ7B,YACU,UAAsB,EACtB,QAAmB,EACA,MAAc;QAFjC,eAAU,GAAV,UAAU,CAAY;QACtB,aAAQ,GAAR,QAAQ,CAAW;QACA,WAAM,GAAN,MAAM,CAAQ;;QAGzC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACvD;IAbD,OAAO;QACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACtD;IAaD,eAAe;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAEO,QAAQ;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;;QAGrD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;;QAGtF,IAAI,SAAS,CAAC,UAAU,EAAE;YACxB,WAAW;YACX,WAAW;SACZ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;;QAGvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;IAGO,cAAc;QACpB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,gBAAgB;aACpB,WAAW,EAAE;aACb,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;KAC1B;IAEO,cAAc,CAAC,WAAmB;QACxC,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;KAC9E;IAEO,oBAAoB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAErD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAExD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;KAC1D;IAEO,WAAW,CAAC,OAAoB;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC;KAChB;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACjC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK;cACjC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;cACpD,EAAE,CAAC;KACR;;;YA/EF,SAAS,SAAC;gBACT,QAAQ,EAAE,4BAA4B;aACvC;;;;YAXC,UAAU;YAIV,SAAS;yCAmBN,MAAM,SAAC,SAAS;;;sBAVlB,YAAY,SAAC,OAAO;;;MCKV,oBAAoB;IAgC/B,YAAoB,UAAsB,EAA6B,MAAc;QAAjE,eAAU,GAAV,UAAU,CAAY;QAA6B,WAAM,GAAN,MAAM,CAAQ;QA7B5E,cAAS,GAAG,CAAC,CAAC;QACd,qBAAgB,GAAG,KAAK,CAAC;QAkBlC,mBAAc,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QACxE,eAAU,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAGtE,gBAAW,GAAG,KAAK,CAAC;QAIpB,aAAQ,GAAG,CAAC,CAAS,QAAO,CAAC;KAE4D;IA1BzF,IAAa,UAAU,CAAC,UAAmB;QACzC,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;KACtD;IAED,IAAa,qBAAqB,CAAC,QAAgB;QACjD,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;KACvF;IAED,IAAa,SAAS,CAAC,SAAiB;QACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;KACxC;IAcD,QAAQ;;QAEN,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;QAG3D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAE3D,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KACzC;IAED,gBAAgB,CAAC,QAAa;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,iBAAiB,CAAC,CAAM,KAAU;IAE1B,QAAQ;QACd,IAAI,SAAS,CAAC,SAAS,EAAE;YACvB,cAAc,EAAE,IAAI,CAAC,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc;YACvE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;YAC5C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,cAAc,EAAE;gBACd,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC;gBACjE,IAAI,EAAE,EAAE;aACT;YACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;aAC5D;SACF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC;KAC1D;IAEO,MAAM,CAAC,cAAsB;QACnC,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;KACrF;IAEO,MAAM,CAAC,cAAsB;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS,GAAG,cAAc,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;KAChG;;;YApGF,SAAS,SAAC;;gBAET,QAAQ,EAAE,sBAAsB;gBAChC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,oBAAoB;qBAClC;iBACF;aACF;;;;YApBmB,UAAU;yCAqDiB,MAAM,SAAC,SAAS;;;kBA/B5D,KAAK;kBACL,KAAK;wBACL,KAAK;+BACL,KAAK;yBAEL,KAAK;oCAIL,KAAK;wBAIL,KAAK;;;MCZK,iBAAiB;IAqB5B,YAAoB,QAAmB,EAA4B,QAAa;QAA5D,aAAQ,GAAR,QAAQ,CAAW;QAA4B,aAAQ,GAAR,QAAQ,CAAK;QApBvE,aAAQ,GAAY,KAAK,CAAC;QAC1B,wBAAmB,GAAgC,OAAO,CAAC;QAE5D,oBAAe,GAAY,KAAK,CAAC;QAMjC,uBAAkB,GAAY,KAAK,CAAC;KAWwC;IAhBpF,IACI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;IAGD,IACI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IASD,eAAe;QACb,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACrF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;KACnC;IAEO,YAAY,CAAC,cAAoB,EAAE,UAAU,GAAG,CAAC;QACvD,MAAM,aAAa,GAAG,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;QACzD,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,UAAU,IAAI,aAAa,EAAE;YACvE,OAAO;SACR;QACD,IAAI,gBAAgB,CAAC,UAAU,IAAI,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE;YACxE,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;YACpF,IAAI,SAAS,EAAE;gBACb,MAAM,kBAAkB,GAAG,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;;gBAEjF,MAAM,YAAY,GAAI,SAAgC,CAAC;gBACvD,IAAI,YAAY,IAAI,kBAAkB,EAAE;oBACtC,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC;oBACtC,OAAO;iBACR;aACF;SACF;QACD,UAAU,EAAE,CAAC;QACb,UAAU,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;KACjF;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC;SACpC;KACF;IAED,WAAW,CAAC,GAAW;QACrB,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;KACnE;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;QACtC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;SAChE;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;SACnE;QACD,UAAU,CAAC,OAAO,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;KACnE;;;YA7EF,SAAS,SAAC;gBACT,QAAQ,EAAE,iBAAiB;gBAC3B,+jBAAyC;;aAE1C;;;;YAbC,SAAS;4CAmCiC,MAAM,SAAC,QAAQ;;;uBApBxD,KAAK;kCACL,KAAK;6BAGL,WAAW,SAAC,eAAe;gCAM3B,WAAW,SAAC,wBAAwB;0BAKpC,YAAY,SAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;2BAEpD,SAAS,SAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;;;AC1C7D;MACa,UAAU;;AACrB;AACc,8BAAmB,GAAG,GAAG,CAAC;AAC1B,4BAAiB,GAAG,GAAG,CAAC;AACxB,4BAAiB,GAAG,GAAG,CAAC;AACxB,4BAAiB,GAAG,GAAG;;MCA1B,uBAAuB;IAIlC;QAFQ,8BAAyB,GAAG,IAAI,OAAO,EAAQ,CAAC;QAGtD,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAEO,IAAI;;QAEV,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC;KACvC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,CAAC;KACtD;IAED,WAAW;QACT,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,CAAC;KAC3C;;;;YAtBF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;;ACED,MAAM,QAAQ;IAMZ,YAAY,aAAoC,EAAE,GAAW,EAAE,GAAW,EAAE,OAAe;QACzF,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;CACF;MASY,aAAa;IAcxB,YAAoB,gBAAyC;QAAzC,qBAAgB,GAAhB,gBAAgB,CAAyB;QAZ7D,UAAK,GAAe,EAAE,CAAC;KAY0C;IAPjE,IACI,kBAAkB,CAAC,kBAA2C;QAChE,IAAI,CAAC,WAAW,GAAG,kBAAkB,CAAC;;QAEtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAID,aAAa;QACX,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YACjC,oBAAoB;gBAClB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,IAAI,UAAU,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC;SACtF;aAAM;YACL,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC;SACxC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK;;YAEnC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;;YAEpC,IAAI,oBAAoB,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,UAAU,IAAI,CAAC,CAAC;gBAChB,OAAO;aACR;;YAED,IAAI,aAAa,IAAI,oBAAoB,EAAE;gBACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;gBAEnF,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;aACrC;iBAAM;;gBAEL,MAAM,WAAW,GAAG,oBAAoB,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;gBAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;;gBAEvC,QAAQ,CAAC,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;;gBAElD,UAAU,IAAI,CAAC,CAAC;gBAChB,aAAa,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;gBAEnF,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;gBACnC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;aACpC;;YAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,EAAE;gBACzC,MAAM,WAAW,GAAG,oBAAoB,GAAG,aAAa,CAAC;gBACzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACtC,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC;aACpC;SACF,CAAC,CAAC;KACJ;IAED,QAAQ;;;;KAIP;IAED,WAAW;QACT,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;SAC3C;KACF;;;YAnFF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,mNAAoC;;gBAGpC,IAAI,EAAE,EAAE,oBAAoB,EAAE,YAAY,EAAE;;aAC7C;;;;YAvBQ,uBAAuB;;;yBA6B7B,KAAK;iCAEL,KAAK;;;MC/BK,qBAAqB;IAChC,YAAmB,SAAoB,EAAS,IAAS,EAAS,aAAqB;QAApE,cAAS,GAAT,SAAS,CAAW;QAAS,SAAI,GAAJ,IAAI,CAAK;QAAS,kBAAa,GAAb,aAAa,CAAQ;KAAI;;;MCKhF,UAAU;;;YALtB,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,WAAW,CAAC;gBACtB,YAAY,EAAE,CAAC,aAAa,CAAC;gBAC7B,OAAO,EAAE,CAAC,aAAa,CAAC;aACzB;;;MCFY,cAAc;IAL3B;QAOE,cAAS,GAA8B,UAAU,CAAC;KAMnD;IAJC,IACI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC;KACxC;;;YAZF,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,oEAAqC;;aAEtC;;;wBAEE,KAAK;yBAGL,WAAW,SAAC,kBAAkB;;;MCEpB,UAAU;;;YALtB,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;gBAChD,YAAY,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;gBAC7C,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;aACzC;;;MCLY,kBAAkB;IAL/B;QAM4B,SAAI,GAAW,OAAO,CAAC;KAClD;;;YAPA,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,uCAA0C;;aAE3C;;;mBAEE,WAAW,SAAC,WAAW;;;MCDb,gBAAgB;IAC3B,iBAAgB;IAEhB,QAAQ,MAAK;;;YARd,SAAS,SAAC;gBACT,QAAQ,EAAE,eAAe;gBACzB,yHAAuC;;aAExC;;;;;;;;;;;;;;MCEY,qBAAqB;IAGhC,YACU,iBAAoC,EACpC,wBAAkD,EAClD,QAAkB;QAFlB,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,aAAQ,GAAR,QAAQ,CAAU;QALpB,eAAU,GAA0B,IAAI,CAAC;KAM7C;IAES,kBAAkB,CAAC,eAAwB,IAAI;;YAC1D,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;oBACpD,QAAQ,EAAE,uBAAuB;oBACjC,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,IAAI;oBACb,YAAY,EAAE,YAAY;oBAC1B,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBACzE,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;gBACxF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;gBAChD,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAEzC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aACjC;SACF;KAAA;IAEY,kBAAkB;;YAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;gBACrB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB;SACF;KAAA;;;;YArCF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;;YANQ,iBAAiB;YADjB,wBAAwB;YAAc,QAAQ;;;MCO1C,uBAAuB;IALpC;QAMkB,cAAS,GAAG,IAAI,CAAC;QACjB,iBAAY,GAAG,IAAI,CAAC;KACrC;;;YARA,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;gBACjC,2RAA+C;;aAEhD;;;wBAEE,KAAK;2BACL,KAAK;;;ACSR;;;AAGO,MAAM,wBAAwB,GAAG,GAAG,CAAC;MAK/B,uBAAuB;IA4BlC,YAAoB,UAAsB,EAAU,SAAoB,EAAU,IAAY;QAA1E,eAAU,GAAV,UAAU,CAAY;QAAU,cAAS,GAAT,SAAS,CAAW;QAAU,SAAI,GAAJ,IAAI,CAAQ;;;;;QAvBpF,cAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;;;;QAKtC,aAAQ,GAAG,KAAK,CAAC;;;;QAK1B,YAAO,GAAoB,IAAI,OAAO,EAAU,CAAC;;;;;QAMzC,mBAAc,GAAG,IAAI,OAAO,EAAQ,CAAC;;;;QAKrC,WAAM,GAAG,GAAG,CAAC;KAE6E;IAElG,eAAe;;;;;QAKb,IAAI,CAAC,OAAO;aACT,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAC9B,YAAY,CAAC,wBAAwB,CAAC,EACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5B,MAAM,CAAC,CAAC,MAAM;YACZ,QACE,MAAM,CAAC,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;gBACxC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,UAAU,EAC/C;SACH,CAAC,CACH;aACA,SAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;SACvB,CAAC,CAAC;;;;;QAML,UAAU,CAAC;YACT,MAAM,UAAU,GAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACrF,IAAI,UAAU,EAAE;;gBAEd,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBAC1B,SAAS,CAAM,UAAU,EAAE,WAAW,CAAC;yBACpC,IAAI,CACH,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAC9B,YAAY,CAAC,wBAAwB,CAAC,EACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC5B,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,MAAM,CAAC,CAAC,MAAM;wBACZ,QACE,MAAM,CAAC,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;4BACxC,MAAM,CAAC,oBAAoB,GAAG,MAAM,CAAC,UAAU,EAC/C;qBACH,CAAC,CACH;yBACA,SAAS,CAAC;;wBAET,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;qBAC5C,CAAC,CAAC;iBACN,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;KACJ;;;;IAMD,QAAQ;QACN,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;;;;IAKD,WAAW;QACT,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KAChC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B,CAAC;QAC7D,MAAM,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAE3D,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,MAAM,CAAC;QACvD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC;QAE3D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;KAC5D;;;YAhHF,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;aAClC;;;;YAtBC,UAAU;YAWH,SAAS;YAPhB,MAAM;;;wBAwBL,MAAM;uBAKN,KAAK;uBA2EL,YAAY,SAAC,eAAe;;;MCzGlB,UAAU;IACrB,cAAc,CAAC,SAAwB,EAAE,MAA6B;QACpE,IAAI,SAAS,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YAC5D,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;YAC5B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC1B,QAAQ,EAAE,CAAC,mBAA4B;oBACrC,SAAS,CAAC,qBAAqB,GAAG,CAAC,mBAAmB,CAAC;oBACvD,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;iBAC9B;aACF,CAAC,CAAC;SACJ;KACF;;;YAZF,UAAU;;;MCAE,WAAW;IACtB,SAAS,CAAC,KAAY,EAAE,YAAoC;QAC1D,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;QAE3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS;YACtB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE5C,IAAI,UAAU,EAAE;gBACd,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;iBAAM;gBACL,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;aAClC;SACF,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;aACzB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;aAC5D,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;YACjB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SACxB,CAAC,CAAC;KACN;;;YA9BF,IAAI,SAAC;gBACJ,IAAI,EAAE,SAAS;aAChB;;;MCqCY,aAAa;IA+GxB,YAAoB,UAAsB,EAAU,OAAoB;QAApD,eAAU,GAAV,UAAU,CAAY;QAAU,YAAO,GAAP,OAAO,CAAa;;;;QAvGxE,UAAK,GAAU,EAAE,CAAC;;;;QAsBT,gBAAW,GAAG,KAAK,CAAC;;;;QAKpB,oBAAe,GAAG,KAAK,CAAC;;;;;;;;QASxB,UAAK,GAAc,SAAS,CAAC;;;;QAyB5B,iBAAY,GAAG,IAAI,YAAY,EAAqB,CAAC;;;;;;QAOtD,iBAAY,GAAsB,EAAE,CAAC;;;;QAKpC,eAAU,GAAG,IAAI,YAAY,EAAO,CAAC;QAEtC,8BAAyB,GAAY,KAAK,CAAC;KA4BwB;IAjE5E,IACW,cAAc;QACvB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;KACjC;IAED,IACW,WAAW;QACpB,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;KAC9B;IA2DD,QAAQ;QACN,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,qBAAqB,KAAK,SAAS,EAAE;YAC5C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SACrE;KACF;IAED,eAAe;QACb,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,UAAU,CAAC;gBACT,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI;oBAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBACxB,CAAC,CAAC;aACJ,CAAC,CAAC;SACJ;KACF;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;QAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB;cACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;cACvD,IAAI,CAAC;KACV;IAED,eAAe,CAAC,KAA6B;QAC3C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC7C;IAED,cAAc,CAAC,KAAa;QAC1B,OAAO,KAAK,CAAC;KACd;IAED,cAAc,CAAC,CAAS,EAAE,OAAyB;QACjD,OAAO,OAAO,CAAC,IAAI,CAAC;KACrB;IAED,YAAY,CAAC,IAAS;QACpB,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;IAED,mBAAmB,CAAC,IAAS;QAC3B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;KAC9B;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAe;;QAC9C,IAAI,MAAM,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;QAEnC,IAAI,KAAK,KAAK,CAAC,WAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,0CAAE,WAAW,CAAA;YAAE,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC;QAE/F,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,WAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,0CAAE,WAAW,CAAA;YAC/D,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,MAAM,CAAC;KAC9C;;;YAhLF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,kiEAAoC;gBAEpC,SAAS,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;;aACrC;;;;YAnBQ,UAAU;YAUV,WAAW;;;mBAWjB,SAAS,SAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;8BAClC,SAAS,SAAC,uBAAuB;oBAKjC,KAAK;2BAGL,KAAK;6BAKL,KAAK;sBAKL,KAAK;8BAKL,KAAK;0BAKL,KAAK;8BAKL,KAAK;oBASL,KAAK;6BAEL,WAAW,SAAC,qBAAqB;0BAKjC,WAAW,SAAC,kBAAkB;6BAK9B,WAAW,SAAC,oBAAoB,cAChC,KAAK;oCAOL,KAAK;2BAKL,MAAM;2BAON,KAAK;yBAKL,MAAM;wCAEN,KAAK;yBAEL,eAAe,SAAC,aAAa;6BAG7B,YAAY,SAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;oCAGtE,YAAY,SAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;6BAG7E,YAAY,SAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;2BAOtE,YAAY,SAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;iCAG3E,WAAW,SAAC,oBAAoB;;;MC1ItB,mBAAmB;IAC9B,iBAAgB;;;YANjB,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,uCAA2C;;aAE5C;;;;;MCAY,0BAA0B;IAErC,iBAAgB;IAEhB,QAAQ,MAAK;;;YARd,SAAS,SAAC;gBACT,QAAQ,EAAE,2BAA2B;gBACrC,mGAAmD;aACpD;;;;;oBAEE,KAAK;;;MCiBK,iBAAiB;IAG5B,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAF7C,sBAAiB,GAAG,KAAK,CAAC;QAYjB,iBAAY,GAAsB,EAAE,CAAC;QAUpC,eAAU,GAAG,IAAI,YAAY,EAAO,CAAC;QAOrC,sBAAiB,GAAG,IAAI,YAAY,EAAO,CAAC;QA1BpD,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAoBD,aAAa,CAAC,IAAS;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;IAID,oBAAoB,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK;QAC3C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAC1B,WAAW;YACX,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;KACJ;IAED,QAAQ;QACN,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;SAChD;KACF;IAED,gBAAgB,CAAC,IAAS;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACrC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW;YACxC,IAAI,WAAW,CAAC,UAAU,YAAY,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC9E,OAAO,KAAK,CAAC;aACd;YACD,IAAI,WAAW,CAAC,UAAU,KAAK,IAAI,EAAE;gBACnC,OAAO,KAAK,CAAC;aACd;YACD,OAAO,WAAW,CAAC,QAAQ,KAAK,MAAM,IAAI,WAAW,CAAC,QAAQ,KAAK,OAAO,CAAC;SAC5E,CAAC,CAAC;KACJ;IAED,gBAAgB,CAAC,IAAS,EAAE,SAA8B;QACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACrC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW;YAC1C,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;gBACjD,OAAO,KAAK,CAAC;aACd;YACD,OAAO,SAAS,GAAG,WAAW,CAAC,QAAQ,KAAK,SAAS,GAAG,IAAI,CAAC;SAC9D,CAAC,CAAC;KACJ;IAEO,qBAAqB,CAAC,WAA4B,EAAE,IAAS;QACnE,IAAI,WAAW,CAAC,UAAU,YAAY,QAAQ,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC9E,OAAO,IAAI,CAAC;SACb;QACD,OAAO,WAAW,CAAC,UAAU,KAAK,IAAI,CAAC;KACxC;IAED,kBAAkB,CAAC,IAAS;QAC1B,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE;YAC9C,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,KAAK,CAAC;KACd;IAED,mBAAmB,CAAC,WAA4B,EAAE,IAAS;QACzD,IAAI,CAAC,WAAW,CAAC,IAAI;YAAE,OAAO;QAE9B,IAAI,WAAW,CAAC,IAAI,YAAY,QAAQ,EAAE;YACxC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;QACD,OAAO,WAAW,CAAC,IAAI,CAAC;KACzB;IAED,oBAAoB,CAAC,WAA4B,EAAE,IAAS;QAC1D,IAAI,WAAW,CAAC,KAAK,YAAY,QAAQ,EAAE;YACzC,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAChC;QACD,OAAO,WAAW,CAAC,KAAK,CAAC;KAC1B;IAED,mBAAmB,CAAC,WAA4B,EAAE,IAAS;QACzD,IAAI,WAAW,CAAC,IAAI,YAAY,QAAQ,EAAE;YACxC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/B;QACD,OAAO,WAAW,CAAC,IAAI,CAAC;KACzB;IAEO,sBAAsB;QAC5B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACjD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;SAClD;KACF;;;YA3HF,SAAS,SAAC;gBACT,QAAQ,EAAE,iBAAiB;gBAC3B,g4CAAyC;;aAE1C;;;;YATQ,eAAe;;;6BAiBrB,SAAS,SAAC,cAAc;mBAExB,KAAK;4BAEL,KAAK;2BAEL,KAAK;2BAEL,KAAK;yBAEL,KAAK;2BAEL,KAAK;2BAEL,KAAK;yBAEL,MAAM;gCAON,MAAM;;;MC/CI,sBAAsB;IAOjC,WAAW;QACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAEO,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC1C,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC;KACnB;;;YArBF,SAAS,SAAC;gBACT,QAAQ,EAAE,sBAAsB;aACjC;;;iCAEE,KAAK;mBAEL,KAAK;oBACL,WAAW,SAAC,OAAO;;;MCDT,yBAAyB;IAIpC,oBAAoB,CAAC,CAAa;QAChC,IAAI,kBAAkB,CAAC,CAAC,CAAC,MAAqB,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE;YAC9E,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC/B;KACF;;;YAbF,SAAS,SAAC;gBACT,QAAQ,EAAE,yBAAyB;gBACnC,sKAAiD;;aAElD;;;mBAEE,SAAS,SAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;mCAEnC,YAAY,SAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MCbtB,YAAY;IAIvB,YAAY,EAAoB,EAAE,UAAgB;QAChD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;KACpC;IACD,QAAQ,CAAC,aAA+B;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KACtD;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;;;MCSU,oBAAoB;IAgB/B,YAAoB,GAAsB;QAAtB,QAAG,GAAH,GAAG,CAAmB;QAXhC,gBAAW,GAAG,IAAI,YAAY,EAAgB,CAAC;QAC/C,mBAAc,GAAG,IAAI,YAAY,EAAgB,CAAC;QAQ5D,kBAAa,GAAY,KAAK,CAAC;KAEe;IAE9C,WAAW;QACT,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvC,UAAU,CAAC;gBACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB,CAAC,CAAC;SACJ;KACF;IAEO,gBAAgB;QACtB,MAAM,QAAQ,GAAG,CAAC,aAAkB;YAClC,KAAK,IAAI,QAAQ,IAAI,aAAa,EAAE;gBAClC,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;oBACtD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;iBACnF;aACF;YACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;SAC1B,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAe;YACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE;gBACvC,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,CAAC,OAAO,CAAC;gBAC1B,iBAAiB,EAAE,IAAI;gBACvB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAED,SAAS,CAAC,EAAe;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7C;IAED,YAAY,CAAC,EAAe,EAAE,UAAe;QAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;KAC5D;IAED,WAAW;;QAET,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;;;YAjEF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,wsCAA4C;;aAE7C;;;;YAtBC,iBAAiB;;;oBAwBhB,KAAK;2BACL,KAAK;iCACL,KAAK;0BAEL,MAAM;6BACN,MAAM;2BAEN,YAAY,SAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;oCAE3E,YAAY,SAAC,uBAAuB;;;MC3B1B,oBAAoB;IALjC;QAQE,mBAAc,GAAG,KAAK,CAAC;QAIvB,SAAI,GAAuB,OAAO,CAAC;KACpC;;;YAbA,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,sEAA4C;;aAE7C;;;6BAEE,WAAW,SAAC,wBAAwB,cACpC,KAAK;mBAGL,WAAW,SAAC,OAAO,cACnB,KAAK;;;MCbK,qBAAqB,GAAG;;MCOxB,WAAW;IAHxB;QAIU,mBAAc,GAAmC,IAAI,aAAa,EAAE,CAAC;QACtE,YAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;KAKrD;IAHQ,SAAS,CAAC,MAAuB;QACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAClC;;;;YATF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;MCIY,aAAa;IAKxB,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAH5C,uBAAkB,GAAG,KAAK,CAAC;KAGqB;IAEhD,eAAe;QACb,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9C;;;YAdF,SAAS,SAAC;gBACT,QAAQ,EAAE,eAAe;gBACzB,oJAAoC;;aAErC;;;;YANQ,WAAW;;;iCAQjB,WAAW,SAAC,6BAA6B;mBAEzC,SAAS,SAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MC0CzB,kBAAkB;;;YAH9B,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;aAC7B;;MAMY,yBAAyB;;;YAHrC,SAAS,SAAC;gBACT,QAAQ,EAAE,yBAAyB;aACpC;;MAMY,oBAAoB;IAK/B,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;QAH5B,kBAAa,GAAG,IAAI,CAAC;QACrB,iBAAY,GAAG,KAAK,CAAC;KAEW;IAEjD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,MAAuB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;KAChF;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,GAAI,IAAI,CAAC,MAAsB,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;KAC7E;;;YAhBF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;aAC/B;;;;YAzCC,WAAW;;;qBA2CV,KAAK,SAAC,kBAAkB;;MAkBd,oBAAoB;IAG/B,YAAmB,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;KAAI;IAEjD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KACzC;;;YAVF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;aAC/B;;;;YA5DC,WAAW;;;qBA8DV,KAAK,SAAC,kBAAkB;;MAcd,qBAAqB;IAKhC,YAA4C,YAAmC;QAAnC,iBAAY,GAAZ,YAAY,CAAuB;;;QAFrD,SAAI,GAAG,OAAO,CAAC;KAE0C;IAEnF,QAAQ;QACN,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;YACrE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;SACnB;KACF;;;YAhBF,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,QAAQ,EAAE,6BAA6B;yBAC9B,uBAAuB;aACjC;;;;YAhEQ,qBAAqB,uBAsEf,QAAQ,YAAI,QAAQ;;;mBAFhC,WAAW,SAAC,WAAW;;MAeb,kBAAkB;;;YAJ9B,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,QAAQ,EAAE,6BAA6B;aACxC;;MAOY,oBAAoB;;;YAJhC,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,QAAQ,EAAE,6BAA6B;aACxC;;MAOY,oBAAoB;;;YAJhC,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,QAAQ,EAAE,2DAA2D;aACtE;;MASY,aAAa;IAiFxB,YACU,UAAsB,EACtB,QAAmB,EACnB,MAAc,EACd,iBAAoC,EACpC,SAAoB,EACpB,sBAA8C,EACtB,aAA4B;QANpD,eAAU,GAAV,UAAU,CAAY;QACtB,aAAQ,GAAR,QAAQ,CAAW;QACnB,WAAM,GAAN,MAAM,CAAQ;QACd,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,cAAS,GAAT,SAAS,CAAW;QACpB,2BAAsB,GAAtB,sBAAsB,CAAwB;QACtB,kBAAa,GAAb,aAAa,CAAe;QAnFrD,mBAAc,GAAgC,MAAM,CAAC;QAkBpD,UAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;QACjC,UAAK,GAAG,IAAI,YAAY,EAAQ,CAAC;QACjC,YAAO,GAAG,IAAI,YAAY,EAAsB,CAAC;QAwCnD,qCAAgC,GACtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;QAC/B,SAAI,GAAa,EAAE,CAAC;QAGpB,iBAAY,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,qBAAgB,GAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACzE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,MAAM,CAAC,CAAC,KAAkB,KAAK,KAAK,YAAY,eAAe,CAAC,CACjE,CAAC;QAEM,mBAAc,GAA4B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACvE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAC5B,MAAM,CAAC,CAAC,KAAkB,KAAK,KAAK,YAAY,aAAa,CAAC,CAC/D,CAAC;KAUE;IA9EJ,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACjC;IACD,IACW,kBAAkB,CAAC,KAAc;QAC1C,IAAI,IAAI,CAAC,aAAa,EAAE;;YAEtB,UAAU,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC;SACnE;QACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KAClC;IAsED,QAAQ;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,aAAa,EAAE;YACzB,IAAI,CAAC,gBAAgB,mCAChB,IAAI,CAAC,gBAAgB,KACxB,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,YAAY,GAC7C,CAAC;SACH;KACF;IAED,eAAe;QACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAsB;YACrD,IACE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC9B,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;gBACpD,CAAC,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAC1D;gBACA,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAoB;YACjD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;gBAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,qBAAqB,EAAE;YAClE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACxD,CAAC,CAAC;KACJ;IAED,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAE7B,IAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,qBAAqB,EAAE;YACrE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACxD,CAAC,CAAC;KACJ;IAED,oBAAoB,CAAC,KAAU;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;SACnD,CAAC,CAAC;KACJ;IAEO,OAAO;QACb,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SAC7E;KACF;IAEO,OAAO;QACb,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,gCAAgC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SAC/E;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,EAAE;YACjD,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;SAC/C;KACF;IAEO,eAAe;;QAErB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAE9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC3E,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAE9C,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,UAAU,CAAC;gBACT,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;aAC7E,CAAC,CAAC;SACJ;QAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC;;;QAGlF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,0BAA0B;cACvD,IAAI,CAAC,0BAA0B;cAC/B,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ;kBACnC,IAAI,CAAC,0BAA0B;kBAC/B,oBAAoB,CAAC;KAC5B;IAEO,iBAAiB;QACvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU;YACpC,IAAI,UAAU,CAAC,OAAO,EAAE;gBACtB,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;aACxC;iBAAM;gBACL,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC;gBAC/C,IAAI,UAAU,CAAC,QAAQ,EAAE;oBACvB,IAAI,CAAC,qBAAqB,GAAG,UAAU,CAAC,QAAQ,CAAC;iBAClD;aACF;SACF,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;KACpD;IAEO,iBAAiB;QACvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO;YACjC,IAAI,OAAO,CAAC,OAAO,EAAE;gBACnB,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;aAC9C;iBAAM;gBACL,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;aAC/C;SACF,CAAC,CAAC;KACJ;IAEO,aAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;KACxE;IAEO,6BAA6B;QACnC,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,KAAK;SAClB,CAAC;QAEF,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,QAAQ,GAAG,CAAC,OAAO;YACvB,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,mBAAmB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;gBACtD,IAAI,CAAC,2BAA2B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;gBAC9D,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aACxC;iBAAM;gBACL,WAAW,GAAG,IAAI,CAAC;aACpB;SACF,CAAC;QACF,OAAO,IAAI,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACpD;IAGD,mBAAmB,CAAC,IAAiC;QACnD,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;YAC/B,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CACpD,mBAAmB,EACnB,GAAG,IAAI,CAAC,cAAc,IAAI,CAC3B,CAAC;SACH;KACF;IAGD,mBAAmB;QACjB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;KACpF;;;YA7QF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,w4FAAoC;gBAEpC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YA/HC,UAAU;YAWV,SAAS;YAM8B,MAAM;YAtB7C,iBAAiB;YA6BV,SAAS;YAET,sBAAsB;YAEtB,aAAa,uBA4LjB,QAAQ,YAAI,QAAQ;;;oBArFtB,KAAK;2BACL,KAAK;6BACL,KAAK;8BACL,KAAK;6BACL,KAAK;4BACL,KAAK;iCAML,KAAK;oBASL,MAAM;oBACN,MAAM;sBACN,MAAM;sBAEN,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gCACtC,SAAS,SAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;+BAExD,SAAS,SAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;+BAEvD,SAAS,SAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE;wBAGvD,SAAS,SAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;kCAG1D,SAAS,SAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;yCAEpE,SAAS,SAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;yCAE3E,YAAY,SAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;kCAE5E,YAAY,SAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;4BAErE,eAAe,SAAC,oBAAoB;4BAEpC,eAAe,SAAC,oBAAoB;kCA0MpC,YAAY,SAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;kCAUlD,YAAY,SAAC,yBAAyB;;;MC5X5B,mBAAmB;IAI9B,YACkC,aAA4B,EACpD,WAAuB,EACvB,QAAmB;QAFK,kBAAa,GAAb,aAAa,CAAe;QACpD,gBAAW,GAAX,WAAW,CAAY;QACvB,aAAQ,GAAR,QAAQ,CAAW;QAL7B,eAAU,GAAY,IAAI,CAAC;QAOzB,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;KACF;IAED,KAAK;QACH,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,EAC5C,IAAI,CAAC,WAAW,CAAC,aAAa,EAC9B,IAAI,CACL,CAAC;KACH;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;KAC/C;;;YA9BF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,yGAA2C;;aAE5C;;;;YANQ,aAAa,uBAYjB,QAAQ,YAAI,QAAQ;YApBvB,UAAU;YAIV,SAAS;;;yBAYR,KAAK;;;AChBR,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;CAC5B,CAAC,CAAC;MAGU,eAAe;IAC1B,YAAoB,QAAmB;QAAnB,aAAQ,GAAR,QAAQ,CAAW;KAAI;IAE3C,WAAW,CAAC,OAAgB,EAAE,QAAgB;QAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;KACnD;IAED,aAAa,CAAC,OAAgB,EAAE,UAAkB;;QAEhD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;KAC9F;IAED,eAAe,CAAC,OAAgB;QAC9B,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;KACvD;;;YAlBF,UAAU;;;;YARU,SAAS;;;ACO9B,MAAMN,UAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC;AAC5C,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC;MAgBnC,mBAAmB;IA0B9B,YACU,UAAsB,EACtB,QAAmB,EACnB,qBAA4C,EAC5C,eAAgC;QAHhC,eAAU,GAAV,UAAU,CAAY;QACtB,aAAQ,GAAR,QAAQ,CAAW;QACnB,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,oBAAe,GAAf,eAAe,CAAiB;QAtBlC,iBAAY,GAAkB;YACpC;gBACE,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAEA,UAAQ,CAAC,IAAI,CAAC;gBACxB,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC;aAC7B;YACD;gBACE,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAEA,UAAQ,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;aAC5B;YACD;gBACE,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAEA,UAAQ,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;aAC5B;SACF,CAAC;KAOE;IAEJ,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YACvC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtF,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACpC;KACF;IAED,WAAW;QACT,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;aACjF;SACF;KACF;IAEO,aAAa;QACnB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE;;;;;;;YAOlD,UAAU,CAAC;gBACT,IAAI,CAAC,WAAW,EAAE,CAAC;aACpB,EAAE,CAAC,CAAC,CAAC;SACP,CAAC,CAAC;KACJ;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAEjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACxD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;SACjF;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,gBAAgB,EACrB,OAAO,EACP,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,IAAI,CACjD,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC;QAEzF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;QACzF,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;IAEO,aAAa,CAAC,IAAiB;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7E,OAAO,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;KACtC;IAEO,wBAAwB;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;KACd;IAEO,OAAO,CAAC,EAAW,EAAE,IAAiB;QAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KAC5D;;;YA7GF,SAAS,SAAC;gBACT,QAAQ,EAAE,6DAA6D;gBACvE,SAAS,EAAE,CAAC,eAAe,CAAC;aAC7B;;;;YAvBmB,UAAU;YAA4B,SAAS;YAI1D,qBAAqB;YACrB,eAAe;;;qBAqBrB,KAAK,SAAC,iBAAiB;;;MClBb,gBAAgB;;;YAJ5B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,mBAAmB,CAAC;gBACnC,OAAO,EAAE,CAAC,mBAAmB,CAAC;aAC/B;;;MCIY,aAAa;;;YANzB,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,gBAAgB,CAAC;gBAChC,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,OAAO,EAAE,CAAC,gBAAgB,CAAC;gBAC3B,SAAS,EAAE,EAAE;aACd;;;MCsCY,UAAU;;;YA5BtB,QAAQ,SAAC;gBACR,YAAY,EAAE;oBACZ,aAAa;oBACb,oBAAoB;oBACpB,oBAAoB;oBACpB,oBAAoB;oBACpB,mBAAmB;oBACnB,oBAAoB;oBACpB,qBAAqB;oBACrB,kBAAkB;oBAClB,kBAAkB;oBAClB,yBAAyB;iBAC1B;gBACD,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC;gBACrE,OAAO,EAAE;oBACP,aAAa;oBACb,oBAAoB;oBACpB,oBAAoB;oBACpB,oBAAoB;oBACpB,mBAAmB;oBACnB,oBAAoB;oBACpB,qBAAqB;oBACrB,kBAAkB;oBAClB,kBAAkB;oBAClB,yBAAyB;oBACzB,gBAAgB;iBACjB;aACF;;;MCpCY,kBAAkB;;;YAL9B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;gBACrC,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;gBACpC,OAAO,EAAE,CAAC,qBAAqB,CAAC;aACjC;;;MCHY,sBAAsB;;;YALlC,SAAS,SAAC;gBACT,QAAQ,EAAE,sBAAsB;gBAChC,kFAA8C;;aAE/C;;;ICAW;AAAZ,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,mDAA2B,CAAA;IAC3B,2CAAmB,CAAA;AACrB,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B;MASY,yBAAyB;IACpC,YAAoB,mBAAwC;QAAxC,wBAAmB,GAAnB,mBAAmB,CAAqB;QAUnD,SAAI,GAAqD,oBAAoB,CAAC,OAAO,CAAC;QAWvF,WAAM,GAA0B,EAAE,CAAC;QAyBnC,mBAAc,GAAW,CAAC,CAAC,CAAC;QA4B5B,0BAAqB,GAAY,KAAK,CAAC;QASrC,kBAAa,GAA8B,IAAI,YAAY,EAAE,CAAC;KAnFR;IAEhE,mBAAmB,CAAC,KAAY;QAC9B,IAAI,KAAK,CAAC,MAAM,YAAY,WAAW,EAAE;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;gBAC1D,KAAK,CAAC,wBAAwB,EAAE,CAAC;aAClC;SACF;KACF;IAID,IACI,aAAa;QACf,OAAO;YACL,CAAC,oBAAoB,CAAC,IAAI,GAAG,WAAW;YACxC,CAAC,oBAAoB,CAAC,OAAO,GAAG,cAAc;YAC9C,CAAC,oBAAoB,CAAC,WAAW,GAAG,mBAAmB;SACxD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACd;IAGD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,KAAK,CAAC,KAAoB;QACrC,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO;;YAExB,IAAI,CAAC,KAAK,CAAC,YAAY;gBACrB,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;oBAC7B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;SACnE,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,gBAAgB,GAAG,CAAC,CAAC,EAAE;YACzB,OAAO,CAAC,IAAI,CACV,2JAA2J,CAC5J,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;SACxC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAC9C;IAGD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;IAED,IAAa,aAAa,CAAC,KAAa;QACtC,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc,EAAE;YACjC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC9C;KACF;IAGD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAa,KAAK,CAAC,KAAkB;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAChD;IAKD,IAAa,IAAI,CAAC,IAAiB;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;KAClC;IAGD,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACnC;IAED,IAAa,oBAAoB,CAAC,KAAc;QAC9C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;KACpC;IAID,eAAe,CAAC,UAAkB;QAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,IAAI,iBAAiB,KAAK,IAAI,CAAC,aAAa,EAAE;YAC5C,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrC;KACF;;;YAnGF,SAAS,SAAC;gBACT,QAAQ,EAAE,yBAAyB;gBACnC,u1CAAiD;;gBAGjD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;;aACxB;;;;YAhBQ,mBAAmB;;;mBA4BzB,KAAK;4BAEL,WAAW,SAAC,OAAO;oBAcnB,KAAK;4BAyBL,KAAK;oBAYL,KAAK;0BAIL,WAAW,SAAC,UAAU;mBAGtB,KAAK;mCASL,KAAK;4BAIL,MAAM;;;MCvFI,oBAAoB;IA2B/B,YAAoB,kBAAqC;QAArC,uBAAkB,GAAlB,kBAAkB,CAAmB;QA1BhD,SAAI,GAAG,EAAE,CAAC;QAGT,cAAS,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,6BAAwB,GAAG,IAAI,YAAY,EAAU,CAAC;QAEvD,sBAAiB,GAAG,GAAG,CAAC;QACxB,mBAAc,GAAG,GAAG,CAAC;QAE9B,gBAAW,GAAG,KAAK,CAAC;QACpB,cAAS,GAAG,CAAC,CAAC;QAUN,WAAM,GAAW,CAAC,CAAC;KAMkC;IAd7D,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,CAAS;QACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAIO,kBAAkB;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;KAClD;IAID,WAAW;QACT,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACjC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC9C;KACF;IAED,eAAe;QACb,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC;gBAC1C,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;iBACjB;qBAAM;oBACL,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;iBAC9C;gBAED,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;aACxC,EAAE,CAAC,CAAC,CAAC;SACP;KACF;IAED,mBAAmB,CAAC,GAAW;QAC7B,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChD;IAED,iBAAiB;QACf,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAC9C;IAEO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB;;;YArEF,SAAS,SAAC;gBACT,QAAQ,EAAE,oBAAoB;gBAC9B,mfAA4C;gBAE5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YAXC,iBAAiB;;;mBAahB,KAAK;qBACL,KAAK;wBAEL,MAAM;uCACN,MAAM;;;MCDI,kBAAkB;IAK7B,YAAoB,UAAsB,EAAU,QAAmB;QAAnD,eAAU,GAAV,UAAU,CAAY;QAAU,aAAQ,GAAR,QAAQ,CAAW;QAH7D,UAAK,GAAG,IAAI,YAAY,EAAS,CAAC;KAG+B;IAE3E,QAAQ;QACN,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAED,OAAO,CAAC,KAAY,EAAE,UAAmB;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,UAAU,EAAE;YACd,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAC1D,aAAa,CAAC,UAAU,CAAC,CAAC;SAC3B;KACF;IAEO,aAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C;;;YA9BF,SAAS,SAAC;gBACT,QAAQ,EAAE,kBAAkB;gBAC5B,ujBAA0C;;aAE3C;;;;YAjBC,UAAU;YAKV,SAAS;;;yBAcR,KAAK;oBACL,MAAM;oBACN,eAAe,SAAC,aAAa;;;MCRnB,UAAU;;;YANtB,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;gBAChD,SAAS,EAAE,CAAC,WAAW,CAAC;gBACxB,YAAY,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;gBACjD,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,CAAC;aAC7C;;;;;;;;;;;;MCPY,WAAW;IAItB,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;KAAI;IAE3C,SAAS,CAAC,MAAmB;;YACxC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC9C,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC,cAAc;gBAChF,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;aAC/C,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE;gBACpC,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE;aACnC,CAAC;SACH;KAAA;IAEO,WAAW,CAAC,WAAwB;QAC1C,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC;QAErC,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,OAAO,CAAC,IAAI,CACV,4HAA4H,CAC7H,CAAC;YAEF,WAAW,GAAG,SAAS,CAAC;SACzB;QAED,IAAI,WAAW,EAAE;YACf,QAAQ,IAAI,GAAG,GAAG,WAAW,CAAC;SAC/B;QAED,OAAO,QAAQ,CAAC;KACjB;;AArCM,qBAAS,GAAG,aAAa,CAAC;AAC1B,0BAAc,GAAG,IAAI,CAAC;;YAH9B,UAAU;;;;YALFO,iBAAe;;;MCMX,eAAe;IAC1B,YAAoB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;KAAI;IAEzC,SAAS,CAAC,MAAmB,EAAE,YAAyB;QAC7D,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO;YAC9C,IAAI,YAAY,EAAE;gBAChB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;aACjD;SACF,CAAC,CAAC;KACJ;;;YAVF,UAAU;;;;YAFF,WAAW;;;MCGP,eAAe;IAL5B;QAMW,YAAO,GAAY,KAAK,CAAC;QACzB,aAAQ,GAAY,KAAK,CAAC;QACzB,kBAAa,GAAG,IAAI,YAAY,EAAW,CAAC;KAKvD;IAJC,eAAe,CAAC,OAAgB;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;;;YAZF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,uJAAsC;;aAEvC;;;sBAEE,KAAK;uBACL,KAAK;4BACL,MAAM;;;MCOI,uBAAuB;IAmBlC,YACU,UAAmC,EACnC,iBAAoC;QADpC,eAAU,GAAV,UAAU,CAAyB;QACnC,sBAAiB,GAAjB,iBAAiB,CAAmB;QApBrC,gBAAW,GAAG;YACrB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;YACpD,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;YACpD,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;SACrD,CAAC;QAEO,UAAK,GAAW,CAAC,CAAC;QAClB,SAAI,GAAuB,IAAI,CAAC;QAChC,eAAU,GAAqC,SAAS,CAAC;QA4B1D,yBAAoB,GAAG,CAAC,OAAoC;YAClE,IAAI,CAAC,qBAAqB,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,CAAC,CAAC;YACtF,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;aACvC;SACF,CAAC;KArBE;IAXJ,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAUD,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAClE,SAAS,EAAE,GAAG;aACf,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;SACtD;KACF;IAED,WAAW;QACT,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAUO,SAAS;QACf,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;;YAEvD,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;gBAClD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;aAC5B;SACF;KACF;IAED,IAEI,SAAS;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;KAC7C;IAED,IAAI,WAAW;;QAEb,OAAO,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KACpD;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;KAC3B;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;KAChD;IAED,IAAI,WAAW;;QAEb,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;KAC/C;;;YAnFF,SAAS,SAAC;gBACT,QAAQ,EAAE,uBAAuB;gBACjC,ySAA+C;gBAE/C,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;YAXC,UAAU;YAFV,iBAAiB;;;oBAqBhB,KAAK;mBACL,KAAK;yBACL,KAAK;uBAEL,WAAW,SAAC,OAAO;wBA4CnB,WAAW,SAAC,gBAAgB,cAC5B,WAAW,SAAC,iBAAiB;;;MCjEnB,aAAa;IAN1B;QAOW,SAAI,GAAuB,IAAI,CAAC;QAChC,eAAU,GACjB,aAAa,CAAC;KAMjB;IAJC,IACI,SAAS;QACX,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACrC;;;YAdF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,6BAA6B;gBAEvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;mBAEE,KAAK;yBACL,KAAK;wBAGL,WAAW,SAAC,OAAO;;;MCGT,cAAc;;;YAH1B,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;aACzB;;MAgBY,eAAe;IAb5B;QAiBY,kBAAa,GAAG,IAAI,YAAY,EAAO,CAAC;KAqBnD;IAhBC,eAAe;QACb,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACjB;IAED,cAAc;QACZ,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;gBACjC,KAAK,EAAE,aAAa;aACrB,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ;IAED,OAAO,CAAC,KAAa;QACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/B;;;YArCF,SAAS,SAAC;gBACT,QAAQ,EAAE,cAAc;gBACxB,QAAQ,EAAE;;;;;;;;GAQT;gBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;aAChD;;;wBAEE,SAAS,SAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;4BACxC,KAAK;qBACL,KAAK;4BACL,MAAM;4BAEN,YAAY,SAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;;;MCvBtD,qBAAqB;IALlC;QAOY,iBAAY,GAAG,IAAI,YAAY,EAAW,CAAC;KAOtD;IAJC,OAAO;QACL,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACtC;;;YAbF,SAAS,SAAC;gBACT,QAAQ,EAAE,qBAAqB;gBAC/B,iQAA6C;gBAC7C,eAAe,EAAE,uBAAuB,CAAC,MAAM;aAChD;;;sBAEE,KAAK;2BACL,MAAM;sBAEN,YAAY,SAAC,OAAO;;;MCZV,kBAAkB;;;YAJ9B,SAAS,SAAC;gBACT,QAAQ,EAAE,mCAAmC;gBAC7C,QAAQ,EAAE,iBAAiB;aAC5B;;;ACFD;AACA,IAAI,QAAQ,GAAG,CAAC,CAAC;MAeJ,sBAAsB;IAbnC;QAeW,eAAU,GAAY,KAAK,CAAC;;QAGrC,aAAQ,GAAG,8BAA8B,EAAE,QAAQ,EAAE,CAAC;QACtD,eAAU,GAAG,gCAAgC,QAAQ,EAAE,CAAC;KACzD;;;YApBA,SAAS,SAAC;gBACT,QAAQ,EAAE,sBAAsB;gBAChC,8nBAA8C;gBAE9C,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,UAAU,EAAE;oBACV,OAAO,CAAC,YAAY,EAAE;wBACpB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;wBAC5D,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;wBAC9D,UAAU,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;qBAC9C,CAAC;iBACH;;aACF;;;oBAEE,KAAK;yBACL,KAAK;;;MCEK,cAAc;IAZ3B;QAmBW,SAAI,GAAG,CAAC,CAAC;QAET,aAAQ,GAAG,KAAK,CAAC;QAchB,WAAM,GAAyB,IAAI,YAAY,EAAU,CAAC;QAuC7D,cAAS,GAAG,SAAQ,CAAC;QAErB,oBAAe,GAAG,CAAC,CAAM,QAAO,CAAC;KAezC;IArEC,IACI,KAAK,CAAC,KAAa;QACrB,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE;YAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACrC;KACF;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAMD,WAAW,CAAC,CAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;;;;QAKxB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QACxD,IAAI,aAAa,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;SACvC;;;;QAKD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACpE,CAAC,CAAC;KACJ;IAEO,QAAQ;QACd,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnB;QACD,OAAO,KAAK,CAAC;KACd;IAEM,gBAAgB,CAAE,UAAmB;QAC1C,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAEM,mBAAmB,CAAC,MAAW;QACpC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACtC;IAMM,UAAU,CAAC,KAAU;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;KACF;IAEM,iBAAiB,CAAC,EAAO;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;IAEM,gBAAgB,CAAC,EAAO;QAC7B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;;;YA1FF,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,iaAAqC;gBAErC,SAAS,EAAE;oBACT;wBACE,OAAO,EAAE,iBAAiB;wBAC1B,KAAK,EAAE,IAAI;wBACX,WAAW,EAAE,UAAU,CAAC,MAAM,cAAc,CAAC;qBAC9C;iBACF;;aACF;;;uBAEE,KAAK;uBACL,KAAK;uBACL,KAAK;kBACL,KAAK;kBACL,KAAK;kBACL,KAAK;mBACL,KAAK;oBACL,KAAK;uBACL,KAAK;oBACL,KAAK;qBAaL,MAAM;;;MCxCI,mBAAmB;IAC9B,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;KAAI;IAG3C,QAAQ,CAAC,KAAoB;QAC3B,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE;;YAE1E,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,MAAM,WAAW,GAAgB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;YAC5D,WAAW,CAAC,KAAK,EAAE,CAAC;SACrB;KACF;;;YAhBF,SAAS,SAAC;;gBAET,QAAQ,EAAE,cAAc;aACzB;;;;YALiC,UAAU;;;uBASzC,YAAY,SAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MCKtB,mBAAmB;IAThC;QAUU,eAAU,GAAG,IAAI,CAAC;KAqG3B;IApGC,IACI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAGD,IACI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAGD,IACI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IAGD,IACI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAGD,IACI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAGD,IACI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAGD,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAGD,IACI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAGD,IACI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAGD,IACI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAGD,IACI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAGD,IACI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAGD,IACI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAChC;IAGD,IACI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IAED,IAAa,UAAU,CAAC,KAAiB;QACvC,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,KAAK,KAAK,WAAW,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,KAAK,KAAK,UAAU,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,KAAK,KAAK,QAAQ,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,KAAK,KAAK,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,KAAK,QAAQ,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,KAAK,KAAK,OAAO,CAAC;QAClC,MAAM,eAAe,GAAG,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,GAAG,eAAe,KAAK,OAAO,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,eAAe,KAAK,OAAO,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,eAAe,KAAK,MAAM,CAAC;KACrD;;;YA9GF,SAAS,SAAC;;gBAET,QAAQ,EAAE;;;;;2CAK+B;aAC1C;;;wBAGE,WAAW,SAAC,eAAe;wBAM3B,WAAW,SAAC,eAAe;0BAM3B,WAAW,SAAC,iBAAiB;yBAM7B,WAAW,SAAC,gBAAgB;wBAM5B,WAAW,SAAC,eAAe;wBAM3B,WAAW,SAAC,eAAe;uBAM3B,WAAW,SAAC,cAAc;sBAM1B,WAAW,SAAC,aAAa;uBAMzB,WAAW,SAAC,cAAc;qBAM1B,WAAW,SAAC,YAAY;sBAMxB,WAAW,SAAC,aAAa;gCAMzB,WAAW,SAAC,oCAAoC;gCAMhD,WAAW,SAAC,oCAAoC;+BAMhD,WAAW,SAAC,mCAAmC;yBAK/C,KAAK;;;ACjGD,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,MAAgB;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI;QAClB,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE;YACrC,GAAG;gBACD,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;aACtB;YACD,GAAG,CAAC,GAAQ;gBACV,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aACvD;SACF,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,GAAQ,EAAE,OAAiB;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,OAAO,CAAC,OAAO,CAAC,CAAC,UAAU;QACzB,SAAS,CAAC,UAAU,CAAC,GAAG;YACtB,MAAM,IAAI,GAAG,SAAS,CAAC;YACvB,OAAO,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;SACjF,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,QAAa,EAAE,EAAO,EAAE,MAAgB;IACnE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,MAAM,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF;SACgB,QAAQ,CAAC,IAAqC;IAC5D,MAAM,SAAS,GAAG,UAAU,GAAQ;QAClC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC/B;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACjC;QACD,OAAO,GAAG,CAAC;KACZ,CAAC;IACF,OAAO,SAAS,CAAC;AACnB;;;;;;;;;;;ICxBa,UAAU,SAAV,UAAU;IAErB,YAAY,CAAoB,EAAE,CAAa,EAAY,CAAS;QAAT,MAAC,GAAD,CAAC,CAAQ;QAClE,CAAC,CAAC,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC;KAC3B;EACF;;YAZA,SAAS,SAAC;gBACT,QAAQ,EAAE,aAAa;gBACvB,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,QAAQ,EAAE,2BAA2B;gBACrC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;aACvC;;;;YAfiC,iBAAiB;YAAa,UAAU;YAAE,MAAM;;AAgBrE,UAAU;IATtB,QAAQ,CAAC;QACR,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC;KACvC,CAAC;qCASe,iBAAiB,EAAK,UAAU,EAAe,MAAM;GAFzD,UAAU,CAMtB;;MCdY,WAAW;;;YALvB,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,cAAc,CAAC;gBAC9B,OAAO,EAAE,CAAC,cAAc,CAAC;gBACzB,SAAS,EAAE,CAAC,kBAAkB,CAAC;aAChC;;;ACcD,MAAM,oBAAoB,GAAG;IAC3B,aAAa;IACb,iBAAiB;IACjB,iBAAiB;IACjB,qBAAqB;IACrB,yBAAyB;IACzB,0BAA0B;IAC1B,0BAA0B;IAC1B,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,yBAAyB;CAC1B,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,GAAG,oBAAoB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,iBAAiB;CAClB,CAAC;MAQW,UAAU;;;YANtB,QAAQ,SAAC;gBACR,YAAY,EAAE,YAAY;gBAC1B,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC;gBAC/D,OAAO,EAAE,oBAAoB;gBAC7B,SAAS,EAAE,EAAE;aACd;;;MCzCY,2BAA2B;IANxC;QAQW,UAAK,GAAW,CAAC,CAAC;QAClB,eAAU,GAAqC,SAAS,CAAC;KA8BnE;IA1BC,IAAI,OAAO;QACT,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1E,IAAI,iBAAiB,EAAE;YACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzC;aAAM;YACL,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9C;KACF;IAED,IAEI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACxB;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;KAC3C;IAED,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;KACzC;IAEO,eAAe,CAAC,KAAa;QACnC,OAAO,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC;KAC9E;;;YAtCF,SAAS,SAAC;gBACT,QAAQ,EAAE,4BAA4B;gBACtC,oqBAAmD;gBAEnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;qBAEE,KAAK;oBACL,KAAK;yBACL,KAAK;0BACL,KAAK;yBACL,KAAK;wBAWL,WAAW,SAAC,gBAAgB,cAC5B,WAAW,SAAC,iBAAiB;;;ACpBhC,MAAM,YAAY,GAAG,CAAC,qBAAqB,CAAC,CAAC;MAOhC,kBAAkB;;;YAL9B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;gBAC/B,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC;aAC3B;;;MCNY,aAAa,GAAG,CAAC,GAAa;IACzC,OAAO;QACL,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACvC,CAAC;AACJ,EAAE;SAEc,yBAAyB;IACvC,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,aAAa;QACzB,IAAI,EAAE,CAAC,QAAQ,CAAC;QAChB,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ;;MCVa,wBAAwB;IAInC,YAAgC,IAAmB,EAAU,gBAA4B;QAAzD,SAAI,GAAJ,IAAI,CAAe;QAAU,qBAAgB,GAAhB,gBAAgB,CAAY;QAH/D,SAAI,GAAW,QAAQ,CAAC;QACpB,aAAQ,GAAW,CAAC,CAAC;KAE0C;IAE7F,QAAQ;QACN,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;SACxB;KACF;IAID,iBAAiB,CAAC,KAAoB;QACpC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAClD;;;YApBF,SAAS,SAAC;;gBAET,QAAQ,EAAE,mBAAmB;aAC9B;;;;YALQ,aAAa,uBAUP,QAAQ;YAZH,UAAU;;;mBAS3B,WAAW,SAAC,WAAW;uBACvB,WAAW,SAAC,eAAe;gCAU3B,YAAY,SAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,cACxC,YAAY,SAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;MCb9B,wBAAwB;IACnC,YAAoB,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;KAAI;IAOtE,OAAO;QACL,IAAI,CAAC,sBAAsB,CAAC,eAAe,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAC/D,CAAC;QACF,OAAO,KAAK,CAAC;KACd;;;YAjBF,SAAS,SAAC;gBACT,QAAQ,EAAE,wBAAwB;aACnC;;;;YAJQ,sBAAsB;;;mBAQ5B,KAAK,SAAC,sBAAsB;0BAE5B,KAAK,SAAC,uBAAuB;sBAE7B,YAAY,SAAC,OAAO;;;ACgEvB,MAAMC,sBAAoB,GAAG;IAC3B,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,eAAe;IACf,wBAAwB;IACxB,6BAA6B;IAC7B,aAAa;IACb,wBAAwB;IACxB,eAAe;IACf,WAAW;IACX,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,oBAAoB;IACpB,wBAAwB;IACxB,yBAAyB;IACzB,aAAa;IACbC,UAAc;IACd,mBAAmB;IACnB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,uBAAuB;IACvB,uBAAuB;IACvB,aAAa;IACb,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,sBAAsB;IACtB,oBAAoB;IACpB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,wBAAwB;IACxB,kBAAkB;IAClB,sBAAsB;CACvB,CAAC;AAEF,MAAMC,cAAY,GAAG;IACnB,GAAGF,sBAAoB;IACvB,mBAAmB;IACnB,yBAAyB;IACzB,cAAc;IACd,qBAAqB;IACrB,4BAA4B;IAC5B,2BAA2B;IAC3B,gBAAgB;CACjB,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,SAAS;IACT,kBAAkB;IAClB,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,aAAa;CACd,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,GAAGA,sBAAoB,CAAC,CAAC;AAE9D,MAAM,eAAe,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;AAE7C,MAAM,SAAS,GAAG;IAChB,eAAe;IACf,iBAAiB;IACjB,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;IACf,uBAAuB;IACvB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,yBAAyB,EAAE;CAC5B,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,qBAAqB;IACrB,4BAA4B;IAC5B,oBAAoB;IACpB,cAAc;CACf,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,cAAc,CAAM,YAAY,CAAC,CAAC;MAsB7C,WAAW;IAatB,YACE,eAAgC,EACC,MAAoB;QAErD,eAAe,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC;KAClE;IAjBD,OAAO,QAAQ,CAAC,MAAoB;QAClC,OAAO;YACL,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,MAAM;iBACjB;aACF;SACF,CAAC;KACH;;;YA5BF,QAAQ,SAAC;gBACR,OAAO,EAAE;oBACP,YAAY;oBACZ,YAAY;oBACZ,WAAW,CAAC,OAAO,CAAC;wBAClB,IAAI,EAAE,KAAK;wBACX,UAAU,EAAE,IAAI;wBAChB,YAAY,EAAE,IAAI;wBAClB,aAAa,EAAE,KAAK;qBACrB,CAAC;oBACF,GAAG,eAAe;iBACnB;gBACD,YAAY,EAAEE,cAAY;gBAC1B,SAAS,EAAE,SAAS;gBACpB,eAAe,EAAE,eAAe;gBAChC,OAAO,EAAE,OAAO;aACjB;;;;YAvJQ,eAAe;4CAuKnB,QAAQ,YAAI,MAAM,SAAC,WAAW;;;ACtNnC;;;;;;"}
|