@kirbydesign/designsystem 10.1.2 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/avatar/avatar.component.d.ts +2 -1
- package/button/button.component.d.ts +1 -0
- package/calendar/calendar.component.d.ts +28 -18
- package/calendar/interfaces/calendar-day.d.ts +17 -0
- package/calendar/public_api.d.ts +1 -1
- package/chart/shared/chart-config-service/chart-config.service.d.ts +1 -1
- package/empty-state/empty-state.component.d.ts +10 -3
- package/esm2022/accordion/accordion-item.component.mjs +4 -4
- package/esm2022/accordion/accordion.directive.mjs +4 -4
- package/esm2022/accordion/accordion.module.mjs +5 -5
- package/esm2022/action-group/action-group.component.mjs +4 -4
- package/esm2022/avatar/avatar.component.mjs +7 -5
- package/esm2022/badge/badge.component.mjs +4 -4
- package/esm2022/button/button.component.mjs +18 -6
- package/esm2022/calendar/calendar.component.mjs +168 -101
- package/esm2022/calendar/interfaces/calendar-day.mjs +2 -0
- package/esm2022/calendar/interfaces/calendar-year-navigator-config.mjs +2 -0
- package/esm2022/calendar/public_api.mjs +1 -1
- package/esm2022/card/card-as-button/card-as-button.directive.mjs +4 -4
- package/esm2022/card/card-footer/card-footer.component.mjs +4 -4
- package/esm2022/card/card-header/card-header.component.mjs +4 -4
- package/esm2022/card/card.component.mjs +4 -4
- package/esm2022/card/card.module.mjs +5 -5
- package/esm2022/chart/chart/chart.component.mjs +4 -4
- package/esm2022/chart/charts.module.mjs +5 -5
- package/esm2022/chart/shared/base-chart/base-chart.component.mjs +4 -4
- package/esm2022/chart/shared/chart-config-service/chart-config.service.mjs +4 -4
- package/esm2022/chart/shared/chart-js-service/chart-js.service.mjs +4 -4
- package/esm2022/chart/stock-chart/stock-chart-js.service.mjs +4 -4
- package/esm2022/chart/stock-chart/stock-chart.component.mjs +4 -4
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/data-table/data-table.module.mjs +5 -5
- package/esm2022/data-table/sortable/sortable.component.mjs +4 -4
- package/esm2022/divider/divider.component.mjs +4 -4
- package/esm2022/dropdown/dropdown.component.mjs +6 -6
- package/esm2022/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/dropdown/keyboard-handler.service.mjs +4 -4
- package/esm2022/empty-state/empty-state.component.mjs +31 -7
- package/esm2022/empty-state/empty-state.module.mjs +5 -5
- package/esm2022/fab-sheet/fab-sheet.component.mjs +4 -4
- package/esm2022/flag/flag.component.mjs +4 -4
- package/esm2022/form-field/directives/affix/affix.directive.mjs +4 -4
- package/esm2022/form-field/directives/date/date-input.directive.mjs +4 -4
- package/esm2022/form-field/directives/decimal-mask/decimal-mask.directive.mjs +4 -4
- package/esm2022/form-field/form-field-message/form-field-message.component.mjs +4 -4
- package/esm2022/form-field/form-field.component.mjs +4 -4
- package/esm2022/form-field/form-field.module.mjs +8 -7
- package/esm2022/form-field/input/input.component.mjs +4 -4
- package/esm2022/form-field/input-counter/input-counter.component.mjs +4 -4
- package/esm2022/form-field/textarea/textarea.component.mjs +4 -4
- package/esm2022/header/header.component.mjs +16 -16
- package/esm2022/header/header.module.mjs +5 -5
- package/esm2022/helpers/content-mutation-observer.mjs +50 -0
- package/esm2022/helpers/element-ancestor-utils.mjs +33 -0
- package/esm2022/helpers/ionic-element-part-helper.mjs +4 -4
- package/esm2022/helpers/line-clamp-helper.mjs +4 -4
- package/esm2022/helpers/platform.service.mjs +4 -4
- package/esm2022/helpers/public_api.mjs +3 -2
- package/esm2022/icon/icon-registry.service.mjs +4 -4
- package/esm2022/icon/icon.component.mjs +4 -4
- package/esm2022/icon/icon.module.mjs +5 -5
- package/esm2022/item/item.component.mjs +13 -9
- package/esm2022/item/item.module.mjs +5 -5
- package/esm2022/item/label/label.component.mjs +5 -5
- package/esm2022/item-group/item-group.component.mjs +4 -4
- package/esm2022/item-sliding/item-sliding.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.component.mjs +4 -4
- package/esm2022/kirby-app/kirby-app.module.mjs +5 -5
- package/esm2022/kirby-ionic-module/kirby-ionic.module.mjs +5 -5
- package/esm2022/lib/components/segmented-control/segmented-control.component.mjs +34 -7
- package/esm2022/lib/directives/key-handler/key-handler.directive.mjs +4 -4
- package/esm2022/lib/directives/modal-router-link/modal-router-link.directive.mjs +4 -4
- package/esm2022/lib/kirby.module.mjs +5 -5
- package/esm2022/list/directives/infinite-scroll.directive.mjs +4 -4
- package/esm2022/list/directives/list-item-color.directive.mjs +4 -4
- package/esm2022/list/helpers/list-helper.mjs +4 -4
- package/esm2022/list/list-experimental/list-experimental.component.mjs +4 -4
- package/esm2022/list/list-header/list-header.component.mjs +4 -4
- package/esm2022/list/list-item/list-item.component.mjs +5 -5
- package/esm2022/list/list-section-header/list-section-header.component.mjs +4 -4
- package/esm2022/list/list.component.mjs +5 -5
- package/esm2022/list/list.directive.mjs +13 -13
- package/esm2022/list/list.module.mjs +5 -5
- package/esm2022/loading-overlay/loading-overlay.component.mjs +4 -4
- package/esm2022/loading-overlay/loading-overlay.service.mjs +4 -4
- package/esm2022/menu/menu.component.mjs +215 -12
- package/esm2022/modal/modal/action-sheet/action-sheet.component.mjs +4 -4
- package/esm2022/modal/modal/alert/alert.component.mjs +4 -4
- package/esm2022/modal/modal/footer/modal-footer.component.mjs +4 -4
- package/esm2022/modal/modal/modal-component/modal.component.mjs +18 -8
- package/esm2022/modal/modal/services/action-sheet.helper.mjs +4 -4
- package/esm2022/modal/modal/services/alert.helper.mjs +4 -4
- package/esm2022/modal/modal/services/can-dismiss.helper.mjs +4 -4
- package/esm2022/modal/modal/services/modal-animation-builder.service.mjs +4 -4
- package/esm2022/modal/modal/services/modal.controller.mjs +4 -4
- package/esm2022/modal/modal/services/modal.helper.mjs +5 -4
- package/esm2022/modal/modal-navigation.service.mjs +4 -4
- package/esm2022/modal/modal-wrapper/compact/modal-compact-wrapper.component.mjs +19 -10
- package/esm2022/modal/modal-wrapper/config/modal-config.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-elements-mover.delegate.mjs +1 -1
- package/esm2022/modal/modal-wrapper/modal-wrapper.component.mjs +35 -12
- package/esm2022/modal/modal.interfaces.mjs +4 -4
- package/esm2022/page/page-footer/page-footer.component.mjs +4 -4
- package/esm2022/page/page.component.mjs +39 -38
- package/esm2022/page/page.module.mjs +5 -5
- package/esm2022/popover/popover.component.mjs +4 -4
- package/esm2022/progress-circle/progress-circle-ring.component.mjs +4 -4
- package/esm2022/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2022/radio/radio-group/radio-group.component.mjs +4 -4
- package/esm2022/radio/radio-module.mjs +5 -5
- package/esm2022/radio/radio.component.mjs +4 -4
- package/esm2022/range/range.component.mjs +4 -4
- package/esm2022/reorder-list/reorder-list.component.mjs +5 -5
- package/esm2022/router-outlet/router-outlet.component.mjs +4 -4
- package/esm2022/router-outlet/router-outlet.module.mjs +5 -5
- package/esm2022/section-header/section-header.component.mjs +4 -4
- package/esm2022/shared/component-loader.directive.mjs +4 -4
- package/esm2022/shared/fit-heading/fit-heading.directive.mjs +4 -4
- package/esm2022/shared/floating/floating.directive.mjs +4 -4
- package/esm2022/shared/portal/portal.directive.mjs +4 -4
- package/esm2022/shared/public_api.mjs +2 -1
- package/esm2022/shared/resize-observer/resize-observer.factory.mjs +4 -4
- package/esm2022/shared/resize-observer/resize-observer.service.mjs +4 -4
- package/esm2022/shared/theme-color/theme-color.directive.mjs +4 -4
- package/esm2022/shared/translation/translation.interface.mjs +2 -0
- package/esm2022/shared/translation/translation.service.mjs +37 -0
- package/esm2022/shared/translation/translations/da.mjs +11 -0
- package/esm2022/shared/translation/translations/en.mjs +11 -0
- package/esm2022/slide/slide-stretch-height.directive.mjs +4 -4
- package/esm2022/slide/slide.directive.mjs +4 -4
- package/esm2022/slide/slide.module.mjs +5 -5
- package/esm2022/slide/slides.component.mjs +16 -9
- package/esm2022/slide-button/slide-button.component.mjs +4 -4
- package/esm2022/spinner/spinner.component.mjs +4 -4
- package/esm2022/spinner/spinner.module.mjs +5 -5
- package/esm2022/tab-navigation/tab-navigation/tab-navigation.component.mjs +4 -4
- package/esm2022/tab-navigation/tab-navigation-item/tab-navigation-item.component.mjs +4 -4
- package/esm2022/tab-navigation/tab-navigation.module.mjs +5 -5
- package/esm2022/tabs/tab-button/tab-button.component.mjs +4 -4
- package/esm2022/tabs/tabs.component.mjs +4 -4
- package/esm2022/tabs/tabs.module.mjs +5 -5
- package/esm2022/tabs/tabs.service.mjs +4 -4
- package/esm2022/testing/test-helper.mjs +8 -5
- package/esm2022/testing-base/lib/components/mock.accordion-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.action-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.action-sheet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.alert.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.avatar.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.badge.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.base-chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.calendar.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.card.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.checkbox.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.divider.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.dropdown.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.empty-state.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.fab-sheet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.flag.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.form-field-message.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.form-field.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.header.component.mjs +10 -10
- package/esm2022/testing-base/lib/components/mock.icon.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.input-counter.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.input.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item-sliding.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.kirby-app.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.label.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-experimental.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list-section-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.list.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.loading-overlay.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.menu.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-compact-wrapper.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.modal-wrapper.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.page-footer.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.page.component.mjs +34 -34
- package/esm2022/testing-base/lib/components/mock.popover.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle-ring.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.progress-circle.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.radio-group.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.radio.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.range.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.reorder-list.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.router-outlet.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.section-header.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.segmented-control.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.slide-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.slides.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.spinner.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.stock-chart.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation-item.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tab-navigation.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.tabs.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.textarea.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.toggle-button.component.mjs +4 -4
- package/esm2022/testing-base/lib/components/mock.toggle.component.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.accordion.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.affix.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.card-as-button.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.component-loader.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.date-input.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.decimal-mask.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.fit-heading.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.floating.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.infinite-scroll.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.key-handler.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list-item-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.list.directive.mjs +13 -13
- package/esm2022/testing-base/lib/directives/mock.modal-router-link.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.portal.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.slide.directive.mjs +4 -4
- package/esm2022/testing-base/lib/directives/mock.theme-color.directive.mjs +4 -4
- package/esm2022/testing-base/lib/kirby-testing-base.module.mjs +5 -5
- package/esm2022/testing-jasmine/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/testing-jest/lib/kirby-testing.module.mjs +5 -5
- package/esm2022/toast/services/toast.controller.mjs +4 -4
- package/esm2022/toast/services/toast.helper.mjs +4 -4
- package/esm2022/toggle/toggle.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.component.mjs +4 -4
- package/esm2022/toggle-button/toggle-button.module.mjs +5 -5
- package/esm2022/types/public_api.mjs +2 -1
- package/esm2022/types/unobserve-fn.mjs +2 -0
- package/esm2022/types/window-ref.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +6 -4
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +17 -5
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +168 -177
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +16 -16
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +22 -22
- package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-divider.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +12 -12
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +33 -9
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +30 -30
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +19 -19
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +69 -10
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +20 -16
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-ionic-module.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-kirby-ionic-module.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-list.mjs +42 -42
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +214 -11
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +99 -57
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +44 -43
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-radio.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +71 -17
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +24 -18
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +10 -10
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +13 -13
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +286 -286
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +4 -4
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +7 -4
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +6 -6
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +7 -7
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +3 -3
- package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem.mjs +43 -16
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/form-field/form-field.module.d.ts +2 -1
- package/helpers/content-mutation-observer.d.ts +8 -0
- package/helpers/{element-has-ancestor.d.ts → element-ancestor-utils.d.ts} +1 -0
- package/helpers/public_api.d.ts +2 -1
- package/icons/svg/accounts-outline.svg +0 -2
- package/icons/svg/accounts.svg +0 -2
- package/icons/svg/backspace.svg +0 -2
- package/icons/svg/camera.svg +0 -2
- package/icons/svg/copy.svg +0 -2
- package/icons/svg/flag.svg +0 -2
- package/icons/svg/inbox-outline.svg +0 -2
- package/icons/svg/inbox.svg +0 -2
- package/icons/svg/information.svg +0 -2
- package/icons/svg/menu-outline.svg +0 -2
- package/icons/svg/menu.svg +0 -2
- package/icons/svg/person-outline.svg +0 -2
- package/icons/svg/person.svg +0 -2
- package/icons/svg/reorder.svg +0 -2
- package/icons/svg/support.svg +0 -2
- package/item/item.component.d.ts +3 -2
- package/lib/components/segmented-control/segmented-control.component.d.ts +4 -0
- package/menu/menu.component.d.ts +32 -8
- package/modal/modal/modal-component/modal.component.d.ts +6 -3
- package/modal/modal-wrapper/compact/modal-compact-wrapper.component.d.ts +4 -2
- package/modal/modal-wrapper/config/modal-config.d.ts +3 -0
- package/modal/modal-wrapper/modal-wrapper.component.d.ts +8 -3
- package/package.json +4 -4
- package/page/page.component.d.ts +4 -3
- package/scss/base/_item-typography.scss +1 -0
- package/shared/public_api.d.ts +1 -0
- package/shared/translation/translation.interface.d.ts +10 -0
- package/shared/translation/translation.service.d.ts +12 -0
- package/shared/translation/translations/da.d.ts +2 -0
- package/shared/translation/translations/en.d.ts +2 -0
- package/slide/slides.component.d.ts +3 -1
- package/testing/test-helper.d.ts +1 -0
- package/types/public_api.d.ts +1 -0
- package/types/unobserve-fn.d.ts +1 -0
- package/calendar/helpers/calendar-cell.model.d.ts +0 -9
- package/calendar/helpers/calendar-options.model.d.ts +0 -9
- package/calendar/helpers/calendar.helper.d.ts +0 -24
- package/esm2022/calendar/helpers/calendar-cell.model.mjs +0 -2
- package/esm2022/calendar/helpers/calendar-options.model.mjs +0 -2
- package/esm2022/calendar/helpers/calendar.helper.mjs +0 -80
- package/esm2022/calendar/options/calendar-year-navigator-config.mjs +0 -2
- package/esm2022/helpers/element-has-ancestor.mjs +0 -24
- /package/calendar/{options → interfaces}/calendar-year-navigator-config.d.ts +0 -0
|
@@ -1,93 +1,18 @@
|
|
|
1
|
+
import * as i4 from '@angular/common';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
1
3
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import { isBefore, isAfter, format, isSameMonth, startOfMonth,
|
|
4
|
-
import {
|
|
4
|
+
import { EventEmitter, LOCALE_ID, Component, ChangeDetectionStrategy, Inject, Output, Input, HostBinding } from '@angular/core';
|
|
5
|
+
import { isBefore, isAfter, startOfDay, format, isSameMonth, startOfMonth, eachDayOfInterval, startOfWeek, endOfWeek, isSameDay, add, isWeekend, getYear, lastDayOfWeek } from 'date-fns';
|
|
6
|
+
import { toZonedTime, fromZonedTime } from 'date-fns-tz';
|
|
5
7
|
import { da, enGB, enUS } from 'date-fns/locale';
|
|
6
8
|
import { capitalizeFirstLetter } from '@kirbydesign/core';
|
|
7
|
-
import
|
|
8
|
-
import { CommonModule } from '@angular/common';
|
|
9
|
-
import * as i3 from '@kirbydesign/designsystem/icon';
|
|
10
|
-
import { IconModule } from '@kirbydesign/designsystem/icon';
|
|
9
|
+
import { ButtonComponent } from '@kirbydesign/designsystem/button';
|
|
11
10
|
import * as i2 from '@kirbydesign/designsystem/dropdown';
|
|
12
11
|
import { DropdownModule } from '@kirbydesign/designsystem/dropdown';
|
|
13
|
-
import {
|
|
14
|
-
import * as
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
constructor(windowRef) {
|
|
18
|
-
this.windowRef = windowRef;
|
|
19
|
-
this.embeddedViewReady = false;
|
|
20
|
-
}
|
|
21
|
-
init(calendarContainer, options, onDaySelected, onChangeMonth) {
|
|
22
|
-
if (this.hasEmbeddedView(calendarContainer)) {
|
|
23
|
-
const iframe = calendarContainer.nativeElement;
|
|
24
|
-
iframe.onload = () => {
|
|
25
|
-
this.embeddedViewReady = true;
|
|
26
|
-
this.emitOptionsToEmbeddedView(options);
|
|
27
|
-
};
|
|
28
|
-
this.embeddedView = iframe.contentWindow;
|
|
29
|
-
this.windowRef.nativeWindow.addEventListener('message', (event) => this.handleMessageEvent(event, onDaySelected, onChangeMonth));
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
update(options) {
|
|
33
|
-
if (this.embeddedViewReady) {
|
|
34
|
-
this.emitOptionsToEmbeddedView(options);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
setSelectedDay(day) {
|
|
38
|
-
if (this.embeddedViewReady) {
|
|
39
|
-
this.embeddedView.postMessage({
|
|
40
|
-
type: 'kirbyCalendarSetSelectedDay',
|
|
41
|
-
selectedDay: day,
|
|
42
|
-
}, '*');
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
hasEmbeddedView(calendarContainer) {
|
|
46
|
-
return (calendarContainer &&
|
|
47
|
-
calendarContainer.nativeElement &&
|
|
48
|
-
calendarContainer.nativeElement instanceof HTMLIFrameElement &&
|
|
49
|
-
calendarContainer.nativeElement.contentWindow);
|
|
50
|
-
}
|
|
51
|
-
emitOptionsToEmbeddedView(options) {
|
|
52
|
-
this.embeddedView.postMessage({
|
|
53
|
-
type: 'kirbyCalendarInit',
|
|
54
|
-
...options,
|
|
55
|
-
}, '*');
|
|
56
|
-
}
|
|
57
|
-
handleMessageEvent(event, onDaySelected, onChangeMonth) {
|
|
58
|
-
if (this.validateMessage(event)) {
|
|
59
|
-
switch (event.data.type) {
|
|
60
|
-
case 'kirbyCalendarDaySelected':
|
|
61
|
-
if (this.validateDateSelectedMessage(event)) {
|
|
62
|
-
onDaySelected({ isSelectable: true, date: event.data.day });
|
|
63
|
-
}
|
|
64
|
-
break;
|
|
65
|
-
case 'kirbyCalendarChangeMonth':
|
|
66
|
-
if (this.validateNavigateMonthMessage(event)) {
|
|
67
|
-
onChangeMonth(event.data.index);
|
|
68
|
-
}
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
validateMessage(event) {
|
|
74
|
-
return (this.embeddedView === event.source &&
|
|
75
|
-
event.type === 'message' &&
|
|
76
|
-
event.data &&
|
|
77
|
-
event.data.type);
|
|
78
|
-
}
|
|
79
|
-
validateDateSelectedMessage(event) {
|
|
80
|
-
return event.data.type === 'kirbyCalendarDaySelected' && event.data.day;
|
|
81
|
-
}
|
|
82
|
-
validateNavigateMonthMessage(event) {
|
|
83
|
-
return event.data.type === 'kirbyCalendarChangeMonth' && typeof event.data.index === 'number';
|
|
84
|
-
}
|
|
85
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalendarHelper, deps: [{ token: i1.WindowRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
86
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalendarHelper }); }
|
|
87
|
-
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CalendarHelper, decorators: [{
|
|
89
|
-
type: Injectable
|
|
90
|
-
}], ctorParameters: () => [{ type: i1.WindowRef }] });
|
|
12
|
+
import { UniqueIdGenerator } from '@kirbydesign/designsystem/helpers';
|
|
13
|
+
import * as i3 from '@kirbydesign/designsystem/icon';
|
|
14
|
+
import { IconModule } from '@kirbydesign/designsystem/icon';
|
|
15
|
+
import * as i1 from '@kirbydesign/designsystem/shared';
|
|
91
16
|
|
|
92
17
|
var TimeUnit;
|
|
93
18
|
(function (TimeUnit) {
|
|
@@ -115,6 +40,7 @@ class CalendarComponent {
|
|
|
115
40
|
}
|
|
116
41
|
if (this.hasDateChanged(value, this._selectedDate)) {
|
|
117
42
|
this.onSelectedDateChange(value);
|
|
43
|
+
this.focusDate(value);
|
|
118
44
|
this._selectedDate = value;
|
|
119
45
|
}
|
|
120
46
|
}
|
|
@@ -174,8 +100,13 @@ class CalendarComponent {
|
|
|
174
100
|
get _hasYearNavigator() {
|
|
175
101
|
return !!this.yearNavigatorOptions;
|
|
176
102
|
}
|
|
177
|
-
|
|
178
|
-
this.
|
|
103
|
+
getTodayDate() {
|
|
104
|
+
return startOfDay(this.todayDate ?? new Date());
|
|
105
|
+
}
|
|
106
|
+
constructor(locale, elementRef, cdr, translations) {
|
|
107
|
+
this.elementRef = elementRef;
|
|
108
|
+
this.cdr = cdr;
|
|
109
|
+
this.translations = translations;
|
|
179
110
|
this.dateChange = new EventEmitter();
|
|
180
111
|
this.dateSelect = new EventEmitter();
|
|
181
112
|
this.yearSelect = new EventEmitter();
|
|
@@ -192,6 +123,7 @@ class CalendarComponent {
|
|
|
192
123
|
For context see: https://github.com/kirbydesign/designsystem/issues/2087
|
|
193
124
|
*/
|
|
194
125
|
this.usePopover = false;
|
|
126
|
+
this._tableMonthId = UniqueIdGenerator.scopedTo('kirby-calendar-month').next();
|
|
195
127
|
this._disabledDates = [];
|
|
196
128
|
this._enabledDates = [];
|
|
197
129
|
this.includedLocales = { da, enGB, enUS };
|
|
@@ -211,13 +143,21 @@ class CalendarComponent {
|
|
|
211
143
|
const availableLocales = { ...this.includedLocales, ...this.locales, ...this.customLocales };
|
|
212
144
|
return availableLocales[locale] || this.includedLocales.enGB; // Default to enGB if injected locale doesnt exist
|
|
213
145
|
}
|
|
146
|
+
formatDateLabel() {
|
|
147
|
+
const localeDateFormats = {
|
|
148
|
+
da: 'd. MMMM',
|
|
149
|
+
'en-GB': 'd MMMM',
|
|
150
|
+
'en-US': 'MMMM d',
|
|
151
|
+
};
|
|
152
|
+
const defaultDateFormat = localeDateFormats['en-US'];
|
|
153
|
+
const dateFormat = localeDateFormats[this.locale.code] || defaultDateFormat;
|
|
154
|
+
return dateFormat;
|
|
155
|
+
}
|
|
214
156
|
ngOnInit() {
|
|
157
|
+
this.focussedDate = this.getTodayDate();
|
|
215
158
|
this._weekDays = this.getWeekDays();
|
|
216
159
|
this.setActiveMonth(this.selectedDate);
|
|
217
160
|
}
|
|
218
|
-
ngAfterViewInit() {
|
|
219
|
-
this.calendarHelper.init(this.calendarContainer, this.getHelperOptions(), this._onDateSelected.bind(this), this.onChangeMonth.bind(this));
|
|
220
|
-
}
|
|
221
161
|
ngOnChanges(changes) {
|
|
222
162
|
if (!this.activeMonth)
|
|
223
163
|
return;
|
|
@@ -231,14 +171,12 @@ class CalendarComponent {
|
|
|
231
171
|
changes.todayDate ||
|
|
232
172
|
changes.timezone) {
|
|
233
173
|
this.refreshActiveMonth();
|
|
234
|
-
this.calendarHelper.update(this.getHelperOptions());
|
|
235
174
|
}
|
|
236
175
|
}
|
|
237
176
|
setActiveMonth(date = new Date()) {
|
|
238
177
|
if (!this.activeMonth || !isSameMonth(this.activeMonth, date)) {
|
|
239
178
|
this.activeMonth = startOfMonth(date);
|
|
240
179
|
this.refreshActiveMonth();
|
|
241
|
-
this.calendarHelper.update(this.getHelperOptions());
|
|
242
180
|
}
|
|
243
181
|
}
|
|
244
182
|
// For leniency, the component will accept any Date that points to either UTC midnight
|
|
@@ -253,10 +191,10 @@ class CalendarComponent {
|
|
|
253
191
|
// date is local timezone midnight
|
|
254
192
|
return dateLocalOrUTC;
|
|
255
193
|
}
|
|
256
|
-
if (startOfDay(
|
|
257
|
-
|
|
194
|
+
if (startOfDay(toZonedTime(dateLocalOrUTC, this.timeZoneName)).getTime() ===
|
|
195
|
+
toZonedTime(dateLocalOrUTC, this.timeZoneName).getTime()) {
|
|
258
196
|
// the date is a UTC midnight; create the equivalent local timezone midnight date
|
|
259
|
-
const normalizedUTCdate =
|
|
197
|
+
const normalizedUTCdate = toZonedTime(dateLocalOrUTC, this.timeZoneName);
|
|
260
198
|
return normalizedUTCdate;
|
|
261
199
|
}
|
|
262
200
|
// does not point to midnight so we make it
|
|
@@ -268,10 +206,12 @@ class CalendarComponent {
|
|
|
268
206
|
start: startOfWeek(now, { locale: this.locale }),
|
|
269
207
|
end: endOfWeek(now, { locale: this.locale }),
|
|
270
208
|
});
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
209
|
+
const weekdayNarrowFormat = 'EEEEE';
|
|
210
|
+
const weekdayWideFormat = 'EEEE';
|
|
211
|
+
return week.map((date) => ({
|
|
212
|
+
firstLetterCapitalized: this.formatWithLocale(date, weekdayNarrowFormat),
|
|
213
|
+
fullName: this.formatWithLocale(date, weekdayWideFormat),
|
|
214
|
+
}));
|
|
275
215
|
}
|
|
276
216
|
hasDateChanged(newDate, previousDate) {
|
|
277
217
|
if (!newDate && !previousDate) {
|
|
@@ -294,66 +234,64 @@ class CalendarComponent {
|
|
|
294
234
|
return;
|
|
295
235
|
const monthStart = startOfMonth(this.activeMonth);
|
|
296
236
|
const startOfFirstWeek = startOfWeek(monthStart, { locale: this.locale });
|
|
297
|
-
const today = this.todayDate ? startOfDay(this.todayDate) : startOfDay(new Date());
|
|
298
237
|
const totalNumberOfDays = 42; // Always show 42 days (6 weeks) in calendar
|
|
299
238
|
const daysArray = Array.from(Array(totalNumberOfDays).keys());
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
isCurrentMonth: day.isCurrentMonth,
|
|
310
|
-
isSelectable,
|
|
311
|
-
isSelected,
|
|
312
|
-
cssClasses: this.getCssClasses(day, isSelectable, isSelected),
|
|
239
|
+
const today = this.getTodayDate();
|
|
240
|
+
const calendarDays = daysArray.map((number) => {
|
|
241
|
+
const dateOfCalendarDay = add(startOfFirstWeek, { [TimeUnit.days]: number });
|
|
242
|
+
const calendarDay = {
|
|
243
|
+
date: dateOfCalendarDay.getDate(),
|
|
244
|
+
monthIndex: dateOfCalendarDay.getMonth(),
|
|
245
|
+
year: dateOfCalendarDay.getFullYear(),
|
|
246
|
+
ariaLabel: this.formatWithLocale(dateOfCalendarDay, this.formatDateLabel()),
|
|
247
|
+
...this.getCalendarDayMetadata(dateOfCalendarDay, today, monthStart),
|
|
313
248
|
};
|
|
314
|
-
if (isSelected) {
|
|
315
|
-
this.selectedDay =
|
|
249
|
+
if (calendarDay.isSelected) {
|
|
250
|
+
this.selectedDay = calendarDay;
|
|
316
251
|
}
|
|
317
|
-
|
|
252
|
+
if (calendarDay.isFocussed) {
|
|
253
|
+
this.focussedDay = calendarDay;
|
|
254
|
+
}
|
|
255
|
+
return calendarDay;
|
|
318
256
|
});
|
|
319
|
-
this._month = this.chunk(
|
|
257
|
+
this._month = this.chunk(calendarDays, 7);
|
|
320
258
|
}
|
|
321
|
-
|
|
259
|
+
getCalendarDayMetadata(date, today, monthStart) {
|
|
322
260
|
return {
|
|
323
261
|
isToday: isSameDay(today, date),
|
|
324
262
|
isPast: isBefore(date, today),
|
|
325
263
|
isFuture: isAfter(date, today),
|
|
326
264
|
isWeekend: isWeekend(date),
|
|
327
265
|
isCurrentMonth: isSameMonth(date, monthStart),
|
|
328
|
-
|
|
266
|
+
isSelectable: this.isSelectable(date, today),
|
|
267
|
+
isFocusable: this.isWithinAllowedRange(date, today),
|
|
268
|
+
isSelected: isSameDay(this.selectedDate, date),
|
|
269
|
+
isFocussed: isSameDay(this.focussedDate, date),
|
|
329
270
|
};
|
|
330
271
|
}
|
|
331
|
-
isSelectable(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return cssClassString;
|
|
272
|
+
isSelectable(date, today) {
|
|
273
|
+
if (this.alwaysEnableToday && isSameDay(today, date))
|
|
274
|
+
return true;
|
|
275
|
+
if (!this.isWithinAllowedRange(date, today))
|
|
276
|
+
return false;
|
|
277
|
+
if (this.isDisabledDate(date))
|
|
278
|
+
return false;
|
|
279
|
+
if (!this.isEnabledDate(date))
|
|
280
|
+
return false;
|
|
281
|
+
if (this.disableWeekends && isWeekend(date))
|
|
282
|
+
return false;
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
isWithinAllowedRange(date, today) {
|
|
286
|
+
if (this.disablePastDates && isBefore(date, today))
|
|
287
|
+
return false;
|
|
288
|
+
if (this.disableFutureDates && isAfter(date, today))
|
|
289
|
+
return false;
|
|
290
|
+
if (this.minDate && isBefore(date, this.minDate))
|
|
291
|
+
return false;
|
|
292
|
+
if (this.maxDate && isAfter(date, this.maxDate))
|
|
293
|
+
return false;
|
|
294
|
+
return true;
|
|
357
295
|
}
|
|
358
296
|
chunk(array, size) {
|
|
359
297
|
const results = [];
|
|
@@ -366,36 +304,33 @@ class CalendarComponent {
|
|
|
366
304
|
if (this.selectedDay) {
|
|
367
305
|
this.selectedDay.isSelected = false;
|
|
368
306
|
}
|
|
369
|
-
const newDay = this.
|
|
307
|
+
const newDay = this.getDay(newDate);
|
|
370
308
|
if (newDay) {
|
|
371
309
|
newDay.isSelected = true;
|
|
372
310
|
this.selectedDay = newDay;
|
|
373
311
|
}
|
|
374
|
-
if (newDate) {
|
|
375
|
-
this.calendarHelper.setSelectedDay(newDate.getDate());
|
|
376
|
-
}
|
|
377
312
|
}
|
|
378
313
|
_onDateSelected(newDay) {
|
|
379
314
|
if (!newDay.isSelectable)
|
|
380
315
|
return;
|
|
381
316
|
let newDate = new Date(newDay.year, newDay.monthIndex, newDay.date);
|
|
382
317
|
if (this.timezone === 'UTC') {
|
|
383
|
-
newDate =
|
|
318
|
+
newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);
|
|
384
319
|
}
|
|
385
320
|
const dateToEmit = newDate;
|
|
386
321
|
if (this.hasDateChanged(newDate, this._selectedDate)) {
|
|
387
322
|
this.setActiveMonth(newDate);
|
|
388
323
|
this.onSelectedDateChange(newDate);
|
|
389
|
-
this.
|
|
324
|
+
this.selectedDate = newDate;
|
|
390
325
|
this.dateChange.emit(dateToEmit);
|
|
391
326
|
}
|
|
392
327
|
this.dateSelect.emit(dateToEmit);
|
|
393
328
|
}
|
|
394
|
-
onChangeMonth(direction) {
|
|
395
|
-
this._changeMonth(direction);
|
|
396
|
-
this.calendarHelper.update(this.getHelperOptions());
|
|
397
|
-
}
|
|
398
329
|
_changeMonth(index) {
|
|
330
|
+
if (index > 0 && !this._canNavigateForward)
|
|
331
|
+
return;
|
|
332
|
+
if (index < 0 && !this._canNavigateBack)
|
|
333
|
+
return;
|
|
399
334
|
this.changeActiveView(index, TimeUnit.months);
|
|
400
335
|
index > 0
|
|
401
336
|
? this.nextMonthClicked.emit(this.activeMonth)
|
|
@@ -410,21 +345,24 @@ class CalendarComponent {
|
|
|
410
345
|
if (index === 0)
|
|
411
346
|
return;
|
|
412
347
|
this.activeMonth = add(this.activeMonth, { [unit]: index });
|
|
348
|
+
this.focussedDate = add(this.focussedDate, { [unit]: index });
|
|
413
349
|
this.refreshActiveMonth();
|
|
414
350
|
}
|
|
415
351
|
get _canNavigateBack() {
|
|
416
|
-
const
|
|
352
|
+
const today = this.getTodayDate();
|
|
353
|
+
const reachedPastDatesLimit = this.disablePastDates && isSameMonth(this.activeMonth, today);
|
|
417
354
|
const reachedOrExceededMinDate = this.minDate &&
|
|
418
355
|
(isSameMonth(this.activeMonth, this.minDate) || isBefore(this.activeMonth, this.minDate));
|
|
419
356
|
return !reachedPastDatesLimit && !reachedOrExceededMinDate;
|
|
420
357
|
}
|
|
421
358
|
get _canNavigateForward() {
|
|
422
|
-
const
|
|
359
|
+
const today = this.getTodayDate();
|
|
360
|
+
const reachedFutureDatesLimit = this.disableFutureDates && isSameMonth(this.activeMonth, today);
|
|
423
361
|
const reachedOrExceededMaxDate = this.maxDate &&
|
|
424
362
|
(isSameMonth(this.activeMonth, this.maxDate) || isAfter(this.activeMonth, this.maxDate));
|
|
425
363
|
return !reachedFutureDatesLimit && !reachedOrExceededMaxDate;
|
|
426
364
|
}
|
|
427
|
-
|
|
365
|
+
getDay(date) {
|
|
428
366
|
let foundDay = null;
|
|
429
367
|
if (date) {
|
|
430
368
|
for (const week of this._month) {
|
|
@@ -438,16 +376,6 @@ class CalendarComponent {
|
|
|
438
376
|
}
|
|
439
377
|
return foundDay;
|
|
440
378
|
}
|
|
441
|
-
getHelperOptions() {
|
|
442
|
-
return {
|
|
443
|
-
canNavigateBack: this._canNavigateBack,
|
|
444
|
-
canNavigateForward: this._canNavigateForward,
|
|
445
|
-
year: this.activeYear,
|
|
446
|
-
monthName: this.activeMonthName,
|
|
447
|
-
weekDays: this._weekDays,
|
|
448
|
-
month: this._month,
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
379
|
subtractTimezoneOffset(date) {
|
|
452
380
|
const timezoneOffsetInMs = date.getTimezoneOffset() * 60 * 1000;
|
|
453
381
|
return new Date(date.getTime() - timezoneOffsetInMs);
|
|
@@ -464,19 +392,82 @@ class CalendarComponent {
|
|
|
464
392
|
const numberOfYears = endYear - startYear;
|
|
465
393
|
return Array.from({ length: numberOfYears + 1 }, (_, i) => (startYear + i).toString());
|
|
466
394
|
}
|
|
467
|
-
|
|
468
|
-
|
|
395
|
+
setFocussedDay(newDate) {
|
|
396
|
+
const newDay = this.getDay(newDate);
|
|
397
|
+
if (!newDay)
|
|
398
|
+
return;
|
|
399
|
+
if (this.focussedDay) {
|
|
400
|
+
this.focussedDay.isFocussed = false;
|
|
401
|
+
}
|
|
402
|
+
newDay.isFocussed = true;
|
|
403
|
+
this.focussedDay = newDay;
|
|
404
|
+
}
|
|
405
|
+
focusDate(newDate) {
|
|
406
|
+
if (!newDate)
|
|
407
|
+
return;
|
|
408
|
+
if (this.timezone === 'UTC') {
|
|
409
|
+
newDate = fromZonedTime(this.subtractTimezoneOffset(newDate), this.timeZoneName);
|
|
410
|
+
}
|
|
411
|
+
const today = this.getTodayDate();
|
|
412
|
+
if (!this.isWithinAllowedRange(newDate, today))
|
|
413
|
+
return;
|
|
414
|
+
if (!this.hasDateChanged(newDate, this.focussedDate))
|
|
415
|
+
return;
|
|
416
|
+
this.setActiveMonth(newDate);
|
|
417
|
+
this.setFocussedDay(newDate);
|
|
418
|
+
this.focussedDate = newDate;
|
|
419
|
+
this.cdr.detectChanges(); //sync focussed class to template before setting focus
|
|
420
|
+
const elementMarkedForFocus = this.elementRef.nativeElement.querySelector('.focussed');
|
|
421
|
+
elementMarkedForFocus.focus();
|
|
422
|
+
}
|
|
423
|
+
_onDateKeydown(event) {
|
|
424
|
+
const { key, shiftKey } = event;
|
|
425
|
+
let newDate;
|
|
426
|
+
switch (key) {
|
|
427
|
+
case 'ArrowUp':
|
|
428
|
+
newDate = add(this.focussedDate, { days: -7 });
|
|
429
|
+
break;
|
|
430
|
+
case 'ArrowDown':
|
|
431
|
+
newDate = add(this.focussedDate, { days: 7 });
|
|
432
|
+
break;
|
|
433
|
+
case 'ArrowRight':
|
|
434
|
+
newDate = add(this.focussedDate, { days: 1 });
|
|
435
|
+
break;
|
|
436
|
+
case 'ArrowLeft':
|
|
437
|
+
newDate = add(this.focussedDate, { days: -1 });
|
|
438
|
+
break;
|
|
439
|
+
case 'Home':
|
|
440
|
+
newDate = startOfWeek(this.focussedDate, { locale: this.locale });
|
|
441
|
+
break;
|
|
442
|
+
case 'End':
|
|
443
|
+
newDate = lastDayOfWeek(this.focussedDate, { locale: this.locale });
|
|
444
|
+
break;
|
|
445
|
+
case 'PageUp':
|
|
446
|
+
newDate = shiftKey
|
|
447
|
+
? add(this.focussedDate, { years: -1 })
|
|
448
|
+
: add(this.focussedDate, { months: -1 });
|
|
449
|
+
break;
|
|
450
|
+
case 'PageDown':
|
|
451
|
+
newDate = shiftKey
|
|
452
|
+
? add(this.focussedDate, { years: 1 })
|
|
453
|
+
: add(this.focussedDate, { months: 1 });
|
|
454
|
+
break;
|
|
455
|
+
default:
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
event.preventDefault();
|
|
459
|
+
this.focusDate(newDate);
|
|
460
|
+
}
|
|
461
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarComponent, deps: [{ token: LOCALE_ID }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
462
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CalendarComponent, isStandalone: true, selector: "kirby-calendar", inputs: { timezone: "timezone", disableWeekends: "disableWeekends", disablePastDates: "disablePastDates", disableFutureDates: "disableFutureDates", alwaysEnableToday: "alwaysEnableToday", locales: "locales", customLocales: "customLocales", usePopover: "usePopover", yearNavigatorOptions: "yearNavigatorOptions", selectedDate: "selectedDate", disabledDates: "disabledDates", enabledDates: "enabledDates", todayDate: "todayDate", minDate: "minDate", maxDate: "maxDate" }, outputs: { dateChange: "dateChange", dateSelect: "dateSelect", yearSelect: "yearSelect", previousMonthClicked: "previousMonthClicked", nextMonthClicked: "nextMonthClicked" }, host: { properties: { "class.has-year-navigator": "this._hasYearNavigator" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n <span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [usePopover]=\"usePopover\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\" scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\" [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"true\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{font-size:16px}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:8px}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:8px}th:last-child,td:last-child{padding-right:8px}th{height:50px;border-bottom:1px solid var(--kirby-background-color)}.header,th,td{background-color:transparent}.header{display:flex;justify-content:space-between;margin:8px 8px 0}.month-navigator{display:flex;flex-grow:1;align-items:center;justify-content:space-between}.month-and-year{-webkit-user-select:none;user-select:none;font-weight:700}.month-and-year .month{margin-right:8px}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 8px;text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;min-width:40px;min-height:40px;width:40px;height:40px;margin:4px 0;font-size:16px}.day:focus{z-index:1}button[aria-disabled=true]{color:#b4b4b4}.day.selectable:not(.current-month,.selected){color:var(--kirby-text-color-semi-dark)}.day.today{color:var(--kirby-medium-contrast);background-color:var(--kirby-medium)}.day.selected{color:var(--kirby-black-contrast);background-color:var(--kirby-black)}.visually-hidden{position:absolute;scale:0}\n"], dependencies: [{ kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i2.DropdownComponent, selector: "kirby-dropdown", inputs: ["items", "selectedIndex", "focusedIndex", "itemTextProperty", "placeholder", "popout", "attentionLevel", "expand", "disabled", "hasError", "size", "tabindex", "usePopover"], outputs: ["change"] }, { kind: "component", type: ButtonComponent, selector: "button[kirby-button],Button[kirby-button],a[kirby-button]", inputs: ["attentionLevel", "noDecoration", "themeColor", "expand", "isFloating", "size", "showIconOnly"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i3.IconComponent, selector: "kirby-icon", inputs: ["size", "name"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
469
463
|
}
|
|
470
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
464
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
471
465
|
type: Component,
|
|
472
|
-
args: [{ standalone: true, imports: [DropdownModule, ButtonComponent, IconModule, CommonModule], selector: 'kirby-calendar',
|
|
473
|
-
}], ctorParameters: () => [{ type:
|
|
466
|
+
args: [{ standalone: true, imports: [DropdownModule, ButtonComponent, IconModule, CommonModule], selector: 'kirby-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"header\">\n <div class=\"month-navigator\">\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('previousMonth')\"\n [attr.aria-disabled]=\"_canNavigateBack ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(-1)\"\n >\n <kirby-icon name=\"arrow-back\" aria-hidden=\"true\"></kirby-icon>\n </button>\n\n <div class=\"month-and-year\" [id]=\"_tableMonthId\" aria-live=\"polite\" aria-atomic=\"true\">\n <span class=\"month\">{{ activeMonthName }}</span>\n <span *ngIf=\"!_hasYearNavigator\" class=\"year\">{{ activeYear }}</span>\n </div>\n\n <button\n kirby-button\n type=\"button\"\n class=\"no-margin\"\n [attr.aria-label]=\"translations.get('nextMonth')\"\n [attr.aria-disabled]=\"_canNavigateForward ? null : true\"\n [noDecoration]=\"true\"\n (click)=\"_changeMonth(1)\"\n >\n <kirby-icon name=\"arrow-more\" aria-hidden=\"true\"></kirby-icon>\n </button>\n </div>\n <kirby-dropdown\n *ngIf=\"_hasYearNavigator\"\n [usePopover]=\"usePopover\"\n [selectedIndex]=\"navigatedYear\"\n [items]=\"navigableYears\"\n [attr.aria-label]=\"translations.get('selectYear')\"\n popout=\"left\"\n (change)=\"_changeYear($event)\"\n ></kirby-dropdown>\n</div>\n\n<table [attr.aria-labelledby]=\"_tableMonthId\" role=\"grid\">\n <thead>\n <tr>\n <th *ngFor=\"let weekDay of _weekDays\" scope=\"col\">\n <span aria-hidden=\"true\">{{ weekDay.firstLetterCapitalized }}</span>\n <span class=\"visually-hidden\">{{ weekDay.fullName }}</span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr *ngFor=\"let week of _month\">\n <td *ngFor=\"let day of week\" [attr.aria-selected]=\"day.isSelected ? true : false\">\n <button\n kirby-button\n type=\"button\"\n (click)=\"_onDateSelected(day)\"\n (keydown)=\"_onDateKeydown($event)\"\n class=\"day\"\n [class.current-month]=\"day.isCurrentMonth\"\n [class.weekend]=\"day.isWeekend\"\n [class.today]=\"day.isToday\"\n [class.selectable]=\"day.isSelectable\"\n [class.selected]=\"day.isSelected\"\n [class.focussed]=\"day.isFocussed\"\n [class.past]=\"day.isPast\"\n [attr.aria-label]=\"day.ariaLabel\"\n [attr.aria-disabled]=\"day.isSelectable ? null : true\"\n [noDecoration]=\"true\"\n [disabled]=\"day.isFocusable ? null : true\"\n [tabIndex]=\"day.isFocussed ? 0 : -1\"\n >\n {{ day.date }}\n </button>\n </td>\n </tr>\n </tbody>\n</table>\n", styles: [":host{font-size:16px}table{width:100%;border-collapse:collapse;-webkit-user-select:none;user-select:none;margin-bottom:8px}th,td{text-align:center;padding:0}th:first-child,td:first-child{padding-left:8px}th:last-child,td:last-child{padding-right:8px}th{height:50px;border-bottom:1px solid var(--kirby-background-color)}.header,th,td{background-color:transparent}.header{display:flex;justify-content:space-between;margin:8px 8px 0}.month-navigator{display:flex;flex-grow:1;align-items:center;justify-content:space-between}.month-and-year{-webkit-user-select:none;user-select:none;font-weight:700}.month-and-year .month{margin-right:8px}:host(.has-year-navigator) .month-navigator{flex-grow:0}:host(.has-year-navigator) .month-and-year{width:80px;margin:0 8px;text-align:center}:host(.has-year-navigator) .month{margin-right:0}.day{display:inline-flex;align-items:center;justify-content:center;border-radius:20px;min-width:40px;min-height:40px;width:40px;height:40px;margin:4px 0;font-size:16px}.day:focus{z-index:1}button[aria-disabled=true]{color:#b4b4b4}.day.selectable:not(.current-month,.selected){color:var(--kirby-text-color-semi-dark)}.day.today{color:var(--kirby-medium-contrast);background-color:var(--kirby-medium)}.day.selected{color:var(--kirby-black-contrast);background-color:var(--kirby-black)}.visually-hidden{position:absolute;scale:0}\n"] }]
|
|
467
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
474
468
|
type: Inject,
|
|
475
469
|
args: [LOCALE_ID]
|
|
476
|
-
}] }], propDecorators: {
|
|
477
|
-
type: ViewChild,
|
|
478
|
-
args: ['calendarContainer', { static: false }]
|
|
479
|
-
}], dateChange: [{
|
|
470
|
+
}] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.TranslationService }], propDecorators: { dateChange: [{
|
|
480
471
|
type: Output
|
|
481
472
|
}], dateSelect: [{
|
|
482
473
|
type: Output
|