@ukic/canary-web-components 3.0.0-canary.30 → 3.0.0-canary.31
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/dist/cjs/core.cjs.js +1 -1
- package/dist/cjs/date-helpers-d7ee7b45.js.map +1 -1
- package/dist/cjs/{helpers-da852478.js → helpers-6f4b406b.js} +20 -20
- package/dist/cjs/helpers-6f4b406b.js.map +1 -0
- package/dist/cjs/ic-button_3.cjs.entry.js +5 -5
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-calendar_2.cjs.entry.js +2354 -0
- package/dist/cjs/ic-calendar_2.cjs.entry.js.map +1 -0
- package/dist/cjs/ic-card-horizontal.cjs.entry.js +6 -6
- package/dist/cjs/ic-card-horizontal.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/ic-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-checkbox_3.cjs.entry.js +39 -16
- package/dist/cjs/ic-checkbox_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-data-list.cjs.entry.js +2 -2
- package/dist/cjs/ic-data-list.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-data-row.cjs.entry.js +2 -2
- package/dist/cjs/ic-data-row.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-data-table-title-bar.cjs.entry.js +4 -4
- package/dist/cjs/ic-data-table.cjs.entry.js +8 -8
- package/dist/cjs/ic-date-picker.cjs.entry.js +98 -854
- package/dist/cjs/ic-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-dialog.cjs.entry.js +1 -1
- package/dist/cjs/ic-dialog.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-footer-link.cjs.entry.js +2 -2
- package/dist/cjs/ic-footer-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-hero.cjs.entry.js +11 -6
- package/dist/cjs/ic-hero.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +5 -5
- package/dist/cjs/ic-horizontal-scroll.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-input-component-container_4.cjs.entry.js +10 -10
- package/dist/cjs/ic-input-component-container_4.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-layout-grid-item.cjs.entry.js +2 -2
- package/dist/cjs/ic-layout-grid-item.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-layout-grid.cjs.entry.js +2 -2
- package/dist/cjs/ic-layout-grid.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-link.cjs.entry.js +1 -1
- package/dist/cjs/ic-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-menu-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-menu-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-menu.cjs.entry.js +3 -3
- package/dist/cjs/ic-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-menu.cjs.entry.js +4 -4
- package/dist/cjs/ic-navigation-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-page-header.cjs.entry.js +6 -6
- package/dist/cjs/ic-page-header.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-pagination_4.cjs.entry.js +18 -18
- package/dist/cjs/ic-pagination_4.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-popover-menu.cjs.entry.js +4 -4
- package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-radio-group.cjs.entry.js +4 -4
- package/dist/cjs/ic-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-radio-option.cjs.entry.js +4 -4
- package/dist/cjs/ic-radio-option.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-search-bar.cjs.entry.js +9 -9
- package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-section-container.cjs.entry.js +2 -2
- package/dist/cjs/ic-section-container.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-side-navigation.cjs.entry.js +4 -4
- package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/ic-skeleton.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-skip-link.cjs.entry.js +2 -2
- package/dist/cjs/ic-skip-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js +2 -2
- package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-step.cjs.entry.js +13 -13
- package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-stepper.cjs.entry.js +2 -2
- package/dist/cjs/ic-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-switch.cjs.entry.js +4 -4
- package/dist/cjs/ic-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-context.cjs.entry.js +1 -1
- package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-group.cjs.entry.js +2 -2
- package/dist/cjs/ic-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-panel.cjs.entry.js +2 -2
- package/dist/cjs/ic-tab-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-table-of-contents.cjs.entry.js +4 -4
- package/dist/cjs/ic-theme.cjs.entry.js +1 -1
- package/dist/cjs/ic-theme.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-time-input.cjs.entry.js +5 -5
- package/dist/cjs/ic-time-input.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast-region.cjs.entry.js +1 -1
- package/dist/cjs/ic-toast-region.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast.cjs.entry.js +4 -4
- package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toggle-button-group.cjs.entry.js +2 -2
- package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toggle-button.cjs.entry.js +2 -2
- package/dist/cjs/ic-toggle-button.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tree-item.cjs.entry.js +3 -3
- package/dist/cjs/ic-tree-view.cjs.entry.js +4 -4
- package/dist/cjs/index-d337cd8a.js +4 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/ic-calendar/ic-calendar.css +910 -0
- package/dist/collection/components/ic-calendar/ic-calendar.js +1542 -0
- package/dist/collection/components/ic-calendar/ic-calendar.js.map +1 -0
- package/dist/collection/components/ic-calendar/ic-calendar.stories.js +295 -0
- package/dist/collection/components/ic-calendar/ic-calendar.stories.js.map +1 -0
- package/dist/collection/components/ic-calendar/ic-day-button.js.map +1 -0
- package/dist/collection/components/ic-calendar/ic-month-picker.js +35 -0
- package/dist/collection/components/ic-calendar/ic-month-picker.js.map +1 -0
- package/dist/collection/components/ic-calendar/ic-year-picker.js +57 -0
- package/dist/collection/components/ic-calendar/ic-year-picker.js.map +1 -0
- package/dist/collection/components/ic-calendar/test/a11y/ic-calendar.test.a11y.js +13 -0
- package/dist/collection/components/ic-calendar/test/a11y/ic-calendar.test.a11y.js.map +1 -0
- package/dist/collection/components/ic-card-horizontal/ic-card-horizontal.js +6 -6
- package/dist/collection/components/ic-card-horizontal/ic-card-horizontal.js.map +1 -1
- package/dist/collection/components/ic-data-table/ic-data-table.js +7 -7
- package/dist/collection/components/ic-data-table-title-bar/ic-data-table-title-bar.js +3 -3
- package/dist/collection/components/ic-date-input/ic-date-input.js +8 -7
- package/dist/collection/components/ic-date-input/ic-date-input.js.map +1 -1
- package/dist/collection/components/ic-date-picker/ic-date-picker.css +7 -405
- package/dist/collection/components/ic-date-picker/ic-date-picker.js +145 -802
- package/dist/collection/components/ic-date-picker/ic-date-picker.js.map +1 -1
- package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js +110 -0
- package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js.map +1 -1
- package/dist/collection/components/ic-date-picker/story-data.js +5 -1
- package/dist/collection/components/ic-date-picker/story-data.js.map +1 -1
- package/dist/collection/components/ic-pagination-bar/ic-pagination-bar.js +7 -7
- package/dist/collection/components/ic-pagination-bar/ic-pagination-bar.js.map +1 -1
- package/dist/collection/components/ic-table-of-contents/ic-table-of-contents.js +3 -3
- package/dist/collection/components/ic-time-input/ic-time-input.js +9 -8
- package/dist/collection/components/ic-time-input/ic-time-input.js.map +1 -1
- package/dist/collection/components/ic-tree-item/ic-tree-item.js +2 -2
- package/dist/collection/components/ic-tree-view/ic-tree-view.js +3 -3
- package/dist/collection/utils/date-helpers.js +3 -0
- package/dist/collection/utils/date-helpers.js.map +1 -1
- package/dist/collection/utils/types.js.map +1 -1
- package/dist/{esm/date-helpers-2b531c8c.js → components/date-helpers.js} +2 -2
- package/dist/components/date-helpers.js.map +1 -0
- package/dist/components/helpers2.js +20 -20
- package/dist/components/helpers2.js.map +1 -1
- package/dist/components/ic-calendar.d.ts +11 -0
- package/dist/components/ic-calendar.js +8 -0
- package/dist/components/ic-calendar.js.map +1 -0
- package/dist/components/ic-calendar2.js +1235 -0
- package/dist/components/ic-calendar2.js.map +1 -0
- package/dist/components/ic-card-horizontal.js +6 -6
- package/dist/components/ic-card-horizontal.js.map +1 -1
- package/dist/components/ic-checkbox-group.js +2 -2
- package/dist/components/ic-checkbox-group.js.map +1 -1
- package/dist/components/ic-checkbox2.js +31 -8
- package/dist/components/ic-checkbox2.js.map +1 -1
- package/dist/components/ic-data-list.js +2 -2
- package/dist/components/ic-data-list.js.map +1 -1
- package/dist/components/ic-data-row.js +2 -2
- package/dist/components/ic-data-row.js.map +1 -1
- package/dist/components/ic-data-table-title-bar.js +3 -3
- package/dist/components/ic-data-table.js +8 -8
- package/dist/components/ic-date-input2.js +6 -88
- package/dist/components/ic-date-input2.js.map +1 -1
- package/dist/components/ic-date-picker.js +113 -880
- package/dist/components/ic-date-picker.js.map +1 -1
- package/dist/components/ic-dialog.js +1 -1
- package/dist/components/ic-dialog.js.map +1 -1
- package/dist/components/ic-empty-state2.js +2 -2
- package/dist/components/ic-empty-state2.js.map +1 -1
- package/dist/components/ic-footer-link.js +2 -2
- package/dist/components/ic-footer-link.js.map +1 -1
- package/dist/components/ic-hero.js +12 -6
- package/dist/components/ic-hero.js.map +1 -1
- package/dist/components/ic-horizontal-scroll2.js +5 -5
- package/dist/components/ic-horizontal-scroll2.js.map +1 -1
- package/dist/components/ic-input-component-container2.js +3 -3
- package/dist/components/ic-input-component-container2.js.map +1 -1
- package/dist/components/ic-input-container2.js +2 -2
- package/dist/components/ic-input-container2.js.map +1 -1
- package/dist/components/ic-input-label2.js +2 -2
- package/dist/components/ic-input-label2.js.map +1 -1
- package/dist/components/ic-input-validation2.js +3 -3
- package/dist/components/ic-input-validation2.js.map +1 -1
- package/dist/components/ic-layout-grid-item.js +2 -2
- package/dist/components/ic-layout-grid-item.js.map +1 -1
- package/dist/components/ic-layout-grid.js +2 -2
- package/dist/components/ic-layout-grid.js.map +1 -1
- package/dist/components/ic-link2.js +1 -1
- package/dist/components/ic-link2.js.map +1 -1
- package/dist/components/ic-loading-indicator2.js +5 -5
- package/dist/components/ic-loading-indicator2.js.map +1 -1
- package/dist/components/ic-menu-group.js +1 -1
- package/dist/components/ic-menu-group.js.map +1 -1
- package/dist/components/ic-menu2.js +3 -3
- package/dist/components/ic-menu2.js.map +1 -1
- package/dist/components/ic-navigation-group.js +1 -1
- package/dist/components/ic-navigation-group.js.map +1 -1
- package/dist/components/ic-navigation-menu2.js +4 -4
- package/dist/components/ic-navigation-menu2.js.map +1 -1
- package/dist/components/ic-page-header.js +6 -6
- package/dist/components/ic-page-header.js.map +1 -1
- package/dist/components/ic-pagination-bar2.js +6 -6
- package/dist/components/ic-pagination-bar2.js.map +1 -1
- package/dist/components/ic-pagination-item2.js +1 -1
- package/dist/components/ic-pagination-item2.js.map +1 -1
- package/dist/components/ic-pagination2.js +4 -4
- package/dist/components/ic-pagination2.js.map +1 -1
- package/dist/components/ic-popover-menu.js +4 -4
- package/dist/components/ic-popover-menu.js.map +1 -1
- package/dist/components/ic-radio-group.js +4 -4
- package/dist/components/ic-radio-group.js.map +1 -1
- package/dist/components/ic-radio-option.js +4 -4
- package/dist/components/ic-radio-option.js.map +1 -1
- package/dist/components/ic-search-bar.js +9 -9
- package/dist/components/ic-search-bar.js.map +1 -1
- package/dist/components/ic-section-container2.js +2 -2
- package/dist/components/ic-section-container2.js.map +1 -1
- package/dist/components/ic-select2.js +7 -7
- package/dist/components/ic-select2.js.map +1 -1
- package/dist/components/ic-side-navigation.js +4 -4
- package/dist/components/ic-side-navigation.js.map +1 -1
- package/dist/components/ic-skeleton.js +2 -2
- package/dist/components/ic-skeleton.js.map +1 -1
- package/dist/components/ic-skip-link.js +2 -2
- package/dist/components/ic-skip-link.js.map +1 -1
- package/dist/components/ic-status-tag.js +2 -2
- package/dist/components/ic-status-tag.js.map +1 -1
- package/dist/components/ic-step.js +13 -13
- package/dist/components/ic-step.js.map +1 -1
- package/dist/components/ic-stepper.js +2 -2
- package/dist/components/ic-stepper.js.map +1 -1
- package/dist/components/ic-switch.js +4 -4
- package/dist/components/ic-switch.js.map +1 -1
- package/dist/components/ic-tab-context.js +1 -1
- package/dist/components/ic-tab-context.js.map +1 -1
- package/dist/components/ic-tab-group.js +2 -2
- package/dist/components/ic-tab-group.js.map +1 -1
- package/dist/components/ic-tab-panel.js +2 -2
- package/dist/components/ic-tab-panel.js.map +1 -1
- package/dist/components/ic-table-of-contents.js +3 -3
- package/dist/components/ic-text-field2.js +6 -6
- package/dist/components/ic-text-field2.js.map +1 -1
- package/dist/components/ic-theme.js +1 -1
- package/dist/components/ic-theme.js.map +1 -1
- package/dist/components/ic-time-input.js +5 -5
- package/dist/components/ic-time-input.js.map +1 -1
- package/dist/components/ic-toast-region.js +1 -1
- package/dist/components/ic-toast-region.js.map +1 -1
- package/dist/components/ic-toast.js +4 -4
- package/dist/components/ic-toast.js.map +1 -1
- package/dist/components/ic-toggle-button-group.js +2 -2
- package/dist/components/ic-toggle-button-group.js.map +1 -1
- package/dist/components/ic-toggle-button.js +2 -2
- package/dist/components/ic-toggle-button.js.map +1 -1
- package/dist/components/ic-tree-item.js +3 -3
- package/dist/components/ic-tree-view.js +4 -4
- package/dist/core/core.css +21 -9
- package/dist/core/core.esm.js +1 -1
- package/dist/core/core.esm.js.map +1 -1
- package/dist/core/{p-9fade6ad.entry.js → p-0043b019.entry.js} +2 -2
- package/dist/core/{p-9fade6ad.entry.js.map → p-0043b019.entry.js.map} +1 -1
- package/dist/core/{p-889bb8db.entry.js → p-04cb17d7.entry.js} +2 -2
- package/dist/core/{p-889bb8db.entry.js.map → p-04cb17d7.entry.js.map} +1 -1
- package/dist/core/{p-5ef453b6.entry.js → p-15c05eb8.entry.js} +2 -2
- package/dist/core/{p-5ef453b6.entry.js.map → p-15c05eb8.entry.js.map} +1 -1
- package/dist/core/p-1a976789.entry.js +2 -0
- package/dist/core/p-1a976789.entry.js.map +1 -0
- package/dist/core/{p-1be092cc.entry.js → p-2188b483.entry.js} +2 -2
- package/dist/core/{p-1be092cc.entry.js.map → p-2188b483.entry.js.map} +1 -1
- package/dist/core/{p-8c94541e.entry.js → p-24bac55f.entry.js} +2 -2
- package/dist/core/{p-8c94541e.entry.js.map → p-24bac55f.entry.js.map} +1 -1
- package/dist/core/{p-7f304d85.entry.js → p-2646a629.entry.js} +2 -2
- package/dist/core/{p-7f304d85.entry.js.map → p-2646a629.entry.js.map} +1 -1
- package/dist/core/{p-5cf704e3.entry.js → p-319e3d5b.entry.js} +2 -2
- package/dist/core/{p-5cf704e3.entry.js.map → p-319e3d5b.entry.js.map} +1 -1
- package/dist/core/{p-9e200827.entry.js → p-31f3fb15.entry.js} +2 -2
- package/dist/core/{p-9e200827.entry.js.map → p-31f3fb15.entry.js.map} +1 -1
- package/dist/core/{p-fd64c0e5.entry.js → p-3891ce53.entry.js} +2 -2
- package/dist/core/{p-fd64c0e5.entry.js.map → p-3891ce53.entry.js.map} +1 -1
- package/dist/core/{p-fad44bc8.entry.js → p-3ba2b455.entry.js} +2 -2
- package/dist/core/{p-fad44bc8.entry.js.map → p-3ba2b455.entry.js.map} +1 -1
- package/dist/core/{p-df220b91.entry.js → p-3ef2e98d.entry.js} +2 -2
- package/dist/core/{p-03ae0bc3.entry.js → p-41def410.entry.js} +2 -2
- package/dist/core/{p-03ae0bc3.entry.js.map → p-41def410.entry.js.map} +1 -1
- package/dist/core/p-4b188516.entry.js +2 -0
- package/dist/core/p-4b188516.entry.js.map +1 -0
- package/dist/core/{p-93e1ba0a.entry.js → p-5254a078.entry.js} +2 -2
- package/dist/core/{p-93e1ba0a.entry.js.map → p-5254a078.entry.js.map} +1 -1
- package/dist/core/{p-9c2e9189.entry.js → p-53740194.entry.js} +2 -2
- package/dist/core/{p-9c2e9189.entry.js.map → p-53740194.entry.js.map} +1 -1
- package/dist/core/{p-e380a54e.entry.js → p-5a4344cb.entry.js} +2 -2
- package/dist/core/{p-e380a54e.entry.js.map → p-5a4344cb.entry.js.map} +1 -1
- package/dist/core/p-5b32aaf3.entry.js +2 -0
- package/dist/core/p-5b32aaf3.entry.js.map +1 -0
- package/dist/core/{p-d8200098.entry.js → p-67c3985d.entry.js} +2 -2
- package/dist/core/{p-d8200098.entry.js.map → p-67c3985d.entry.js.map} +1 -1
- package/dist/core/{p-982a173d.entry.js → p-7332320d.entry.js} +2 -2
- package/dist/core/{p-982a173d.entry.js.map → p-7332320d.entry.js.map} +1 -1
- package/dist/core/{p-bc441e4c.js → p-75c3b882.js} +2 -2
- package/dist/core/{p-bc441e4c.js.map → p-75c3b882.js.map} +1 -1
- package/dist/core/{p-b88db5e3.entry.js → p-7a0f62c2.entry.js} +2 -2
- package/dist/core/{p-b88db5e3.entry.js.map → p-7a0f62c2.entry.js.map} +1 -1
- package/dist/core/p-81f12581.entry.js +2 -0
- package/dist/core/p-81f12581.entry.js.map +1 -0
- package/dist/core/{p-193afb53.entry.js → p-847cbb16.entry.js} +2 -2
- package/dist/core/{p-193afb53.entry.js.map → p-847cbb16.entry.js.map} +1 -1
- package/dist/core/{p-f3ccaa0b.entry.js → p-8e592393.entry.js} +2 -2
- package/dist/core/{p-f3ccaa0b.entry.js.map → p-8e592393.entry.js.map} +1 -1
- package/dist/core/p-9044539c.entry.js +2 -0
- package/dist/core/p-9044539c.entry.js.map +1 -0
- package/dist/core/{p-f4e7cae6.entry.js → p-90611726.entry.js} +2 -2
- package/dist/core/{p-f4e7cae6.entry.js.map → p-90611726.entry.js.map} +1 -1
- package/dist/core/{p-b00efb15.entry.js → p-9674b63f.entry.js} +2 -2
- package/dist/core/{p-b00efb15.entry.js.map → p-9674b63f.entry.js.map} +1 -1
- package/dist/core/{p-a27e1cee.entry.js → p-9a95f428.entry.js} +2 -2
- package/dist/core/{p-a27e1cee.entry.js.map → p-9a95f428.entry.js.map} +1 -1
- package/dist/core/{p-fb43abd6.entry.js → p-9ca147f3.entry.js} +2 -2
- package/dist/core/{p-fb43abd6.entry.js.map → p-9ca147f3.entry.js.map} +1 -1
- package/dist/core/{p-a8cc28a6.entry.js → p-9f76eed6.entry.js} +2 -2
- package/dist/core/{p-035dbee0.entry.js → p-a1448064.entry.js} +2 -2
- package/dist/core/{p-035dbee0.entry.js.map → p-a1448064.entry.js.map} +1 -1
- package/dist/core/{p-9ce9d39a.entry.js → p-a237af88.entry.js} +2 -2
- package/dist/core/{p-9ce9d39a.entry.js.map → p-a237af88.entry.js.map} +1 -1
- package/dist/core/{p-09c31ac6.entry.js → p-adde6c66.entry.js} +2 -2
- package/dist/core/{p-09c31ac6.entry.js.map → p-adde6c66.entry.js.map} +1 -1
- package/dist/core/{p-72b7051a.entry.js → p-af821831.entry.js} +2 -2
- package/dist/core/{p-72b7051a.entry.js.map → p-af821831.entry.js.map} +1 -1
- package/dist/core/{p-12e8dcdd.entry.js → p-afedcfdb.entry.js} +2 -2
- package/dist/core/{p-12e8dcdd.entry.js.map → p-afedcfdb.entry.js.map} +1 -1
- package/dist/core/{p-f098e531.entry.js → p-b4a2f6fa.entry.js} +2 -2
- package/dist/core/{p-f098e531.entry.js.map → p-b4a2f6fa.entry.js.map} +1 -1
- package/dist/core/p-b4bfaf8f.entry.js +2 -0
- package/dist/core/p-b4bfaf8f.entry.js.map +1 -0
- package/dist/core/{p-ea1de762.entry.js → p-b80b08ae.entry.js} +2 -2
- package/dist/core/p-b80b08ae.entry.js.map +1 -0
- package/dist/core/{p-7bf9bbde.entry.js → p-ba21f477.entry.js} +2 -2
- package/dist/core/{p-7bf9bbde.entry.js.map → p-ba21f477.entry.js.map} +1 -1
- package/dist/core/{p-63203e59.entry.js → p-ba75ed34.entry.js} +2 -2
- package/dist/core/{p-63203e59.entry.js.map → p-ba75ed34.entry.js.map} +1 -1
- package/dist/core/{p-15a81f32.entry.js → p-bd9a76d8.entry.js} +2 -2
- package/dist/core/{p-15a81f32.entry.js.map → p-bd9a76d8.entry.js.map} +1 -1
- package/dist/core/{p-10950727.entry.js → p-c3eddb99.entry.js} +2 -2
- package/dist/core/{p-10950727.entry.js.map → p-c3eddb99.entry.js.map} +1 -1
- package/dist/core/{p-a99ad459.entry.js → p-c5d65718.entry.js} +2 -2
- package/dist/core/{p-a99ad459.entry.js.map → p-c5d65718.entry.js.map} +1 -1
- package/dist/core/{p-eb958cc8.entry.js → p-c6c87e58.entry.js} +2 -2
- package/dist/core/{p-eb958cc8.entry.js.map → p-c6c87e58.entry.js.map} +1 -1
- package/dist/core/{p-c8ce7d60.entry.js → p-e00e67ff.entry.js} +2 -2
- package/dist/core/{p-c8ce7d60.entry.js.map → p-e00e67ff.entry.js.map} +1 -1
- package/dist/core/{p-069e758b.entry.js → p-e1920777.entry.js} +2 -2
- package/dist/core/{p-92936b49.entry.js → p-ef5b6622.entry.js} +2 -2
- package/dist/core/{p-0f22f41e.js → p-f48ce5f6.js} +2 -2
- package/dist/core/p-f48ce5f6.js.map +1 -0
- package/dist/core/{p-1ca62941.entry.js → p-f5cea10d.entry.js} +2 -2
- package/dist/esm/core.js +1 -1
- package/dist/esm/date-helpers-5723de08.js +86 -0
- package/dist/esm/{date-helpers-2b531c8c.js.map → date-helpers-5723de08.js.map} +1 -1
- package/dist/esm/{helpers-89cb996d.js → helpers-9f228880.js} +21 -21
- package/dist/esm/helpers-9f228880.js.map +1 -0
- package/dist/esm/ic-button_3.entry.js +5 -5
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-calendar_2.entry.js +2349 -0
- package/dist/esm/ic-calendar_2.entry.js.map +1 -0
- package/dist/esm/ic-card-horizontal.entry.js +6 -6
- package/dist/esm/ic-card-horizontal.entry.js.map +1 -1
- package/dist/esm/ic-checkbox-group.entry.js +2 -2
- package/dist/esm/ic-checkbox-group.entry.js.map +1 -1
- package/dist/esm/ic-checkbox_3.entry.js +39 -16
- package/dist/esm/ic-checkbox_3.entry.js.map +1 -1
- package/dist/esm/ic-data-list.entry.js +2 -2
- package/dist/esm/ic-data-list.entry.js.map +1 -1
- package/dist/esm/ic-data-row.entry.js +2 -2
- package/dist/esm/ic-data-row.entry.js.map +1 -1
- package/dist/esm/ic-data-table-title-bar.entry.js +4 -4
- package/dist/esm/ic-data-table.entry.js +8 -8
- package/dist/esm/ic-date-picker.entry.js +100 -856
- package/dist/esm/ic-date-picker.entry.js.map +1 -1
- package/dist/esm/ic-dialog.entry.js +1 -1
- package/dist/esm/ic-dialog.entry.js.map +1 -1
- package/dist/esm/ic-footer-link.entry.js +2 -2
- package/dist/esm/ic-footer-link.entry.js.map +1 -1
- package/dist/esm/ic-hero.entry.js +11 -6
- package/dist/esm/ic-hero.entry.js.map +1 -1
- package/dist/esm/ic-horizontal-scroll.entry.js +5 -5
- package/dist/esm/ic-horizontal-scroll.entry.js.map +1 -1
- package/dist/esm/ic-input-component-container_4.entry.js +10 -10
- package/dist/esm/ic-input-component-container_4.entry.js.map +1 -1
- package/dist/esm/ic-layout-grid-item.entry.js +2 -2
- package/dist/esm/ic-layout-grid-item.entry.js.map +1 -1
- package/dist/esm/ic-layout-grid.entry.js +2 -2
- package/dist/esm/ic-layout-grid.entry.js.map +1 -1
- package/dist/esm/ic-link.entry.js +1 -1
- package/dist/esm/ic-link.entry.js.map +1 -1
- package/dist/esm/ic-menu-group.entry.js +1 -1
- package/dist/esm/ic-menu-group.entry.js.map +1 -1
- package/dist/esm/ic-menu.entry.js +3 -3
- package/dist/esm/ic-menu.entry.js.map +1 -1
- package/dist/esm/ic-navigation-group.entry.js +1 -1
- package/dist/esm/ic-navigation-group.entry.js.map +1 -1
- package/dist/esm/ic-navigation-menu.entry.js +4 -4
- package/dist/esm/ic-navigation-menu.entry.js.map +1 -1
- package/dist/esm/ic-page-header.entry.js +6 -6
- package/dist/esm/ic-page-header.entry.js.map +1 -1
- package/dist/esm/ic-pagination_4.entry.js +18 -18
- package/dist/esm/ic-pagination_4.entry.js.map +1 -1
- package/dist/esm/ic-popover-menu.entry.js +4 -4
- package/dist/esm/ic-popover-menu.entry.js.map +1 -1
- package/dist/esm/ic-radio-group.entry.js +4 -4
- package/dist/esm/ic-radio-group.entry.js.map +1 -1
- package/dist/esm/ic-radio-option.entry.js +4 -4
- package/dist/esm/ic-radio-option.entry.js.map +1 -1
- package/dist/esm/ic-search-bar.entry.js +9 -9
- package/dist/esm/ic-search-bar.entry.js.map +1 -1
- package/dist/esm/ic-section-container.entry.js +2 -2
- package/dist/esm/ic-section-container.entry.js.map +1 -1
- package/dist/esm/ic-side-navigation.entry.js +4 -4
- package/dist/esm/ic-side-navigation.entry.js.map +1 -1
- package/dist/esm/ic-skeleton.entry.js +2 -2
- package/dist/esm/ic-skeleton.entry.js.map +1 -1
- package/dist/esm/ic-skip-link.entry.js +2 -2
- package/dist/esm/ic-skip-link.entry.js.map +1 -1
- package/dist/esm/ic-status-tag.entry.js +2 -2
- package/dist/esm/ic-status-tag.entry.js.map +1 -1
- package/dist/esm/ic-step.entry.js +13 -13
- package/dist/esm/ic-step.entry.js.map +1 -1
- package/dist/esm/ic-stepper.entry.js +2 -2
- package/dist/esm/ic-stepper.entry.js.map +1 -1
- package/dist/esm/ic-switch.entry.js +4 -4
- package/dist/esm/ic-switch.entry.js.map +1 -1
- package/dist/esm/ic-tab-context.entry.js +1 -1
- package/dist/esm/ic-tab-context.entry.js.map +1 -1
- package/dist/esm/ic-tab-group.entry.js +2 -2
- package/dist/esm/ic-tab-group.entry.js.map +1 -1
- package/dist/esm/ic-tab-panel.entry.js +2 -2
- package/dist/esm/ic-tab-panel.entry.js.map +1 -1
- package/dist/esm/ic-table-of-contents.entry.js +4 -4
- package/dist/esm/ic-theme.entry.js +1 -1
- package/dist/esm/ic-theme.entry.js.map +1 -1
- package/dist/esm/ic-time-input.entry.js +5 -5
- package/dist/esm/ic-time-input.entry.js.map +1 -1
- package/dist/esm/ic-toast-region.entry.js +1 -1
- package/dist/esm/ic-toast-region.entry.js.map +1 -1
- package/dist/esm/ic-toast.entry.js +4 -4
- package/dist/esm/ic-toast.entry.js.map +1 -1
- package/dist/esm/ic-toggle-button-group.entry.js +2 -2
- package/dist/esm/ic-toggle-button-group.entry.js.map +1 -1
- package/dist/esm/ic-toggle-button.entry.js +2 -2
- package/dist/esm/ic-toggle-button.entry.js.map +1 -1
- package/dist/esm/ic-tree-item.entry.js +3 -3
- package/dist/esm/ic-tree-view.entry.js +4 -4
- package/dist/esm/index-a7a720e7.js +4 -4
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/ic-calendar/ic-calendar.d.ts +216 -0
- package/dist/types/components/ic-calendar/ic-calendar.stories.d.ts +151 -0
- package/dist/types/components/ic-calendar/test/a11y/ic-calendar.test.a11y.d.ts +1 -0
- package/dist/types/components/ic-card-horizontal/ic-card-horizontal.d.ts +1 -2
- package/dist/types/components/ic-date-input/ic-date-input.d.ts +2 -2
- package/dist/types/components/ic-date-picker/ic-date-picker.d.ts +22 -105
- package/dist/types/components/ic-date-picker/ic-date-picker.stories.d.ts +81 -0
- package/dist/types/components/ic-pagination-bar/ic-pagination-bar.d.ts +1 -1
- package/dist/types/components/ic-time-input/ic-time-input.d.ts +2 -2
- package/dist/types/components.d.ts +213 -14
- package/dist/types/utils/date-helpers.d.ts +1 -0
- package/dist/types/utils/types.d.ts +1 -0
- package/hydrate/index.js +2085 -1639
- package/hydrate/index.mjs +2085 -1639
- package/package.json +3 -3
- package/dist/cjs/helpers-da852478.js.map +0 -1
- package/dist/cjs/ic-date-input.cjs.entry.js +0 -1214
- package/dist/cjs/ic-date-input.cjs.entry.js.map +0 -1
- package/dist/collection/components/ic-date-picker/ic-day-button.js.map +0 -1
- package/dist/collection/components/ic-date-picker/ic-month-picker.js +0 -29
- package/dist/collection/components/ic-date-picker/ic-month-picker.js.map +0 -1
- package/dist/collection/components/ic-date-picker/ic-year-picker.js +0 -39
- package/dist/collection/components/ic-date-picker/ic-year-picker.js.map +0 -1
- package/dist/core/p-0f22f41e.js.map +0 -1
- package/dist/core/p-13c8859b.entry.js +0 -2
- package/dist/core/p-13c8859b.entry.js.map +0 -1
- package/dist/core/p-2528ecec.entry.js +0 -2
- package/dist/core/p-2528ecec.entry.js.map +0 -1
- package/dist/core/p-402870f7.entry.js +0 -2
- package/dist/core/p-402870f7.entry.js.map +0 -1
- package/dist/core/p-bd8c2e24.entry.js +0 -2
- package/dist/core/p-bd8c2e24.entry.js.map +0 -1
- package/dist/core/p-c0d4db72.entry.js +0 -2
- package/dist/core/p-c0d4db72.entry.js.map +0 -1
- package/dist/core/p-ea1de762.entry.js.map +0 -1
- package/dist/core/p-f16c4210.entry.js +0 -2
- package/dist/core/p-f16c4210.entry.js.map +0 -1
- package/dist/esm/helpers-89cb996d.js.map +0 -1
- package/dist/esm/ic-date-input.entry.js +0 -1210
- package/dist/esm/ic-date-input.entry.js.map +0 -1
- /package/dist/collection/components/{ic-date-picker → ic-calendar}/ic-day-button.js +0 -0
- /package/dist/core/{p-df220b91.entry.js.map → p-3ef2e98d.entry.js.map} +0 -0
- /package/dist/core/{p-a8cc28a6.entry.js.map → p-9f76eed6.entry.js.map} +0 -0
- /package/dist/core/{p-069e758b.entry.js.map → p-e1920777.entry.js.map} +0 -0
- /package/dist/core/{p-92936b49.entry.js.map → p-ef5b6622.entry.js.map} +0 -0
- /package/dist/core/{p-1ca62941.entry.js.map → p-f5cea10d.entry.js.map} +0 -0
- /package/dist/types/components/{ic-date-picker → ic-calendar}/ic-day-button.d.ts +0 -0
- /package/dist/types/components/{ic-date-picker → ic-calendar}/ic-month-picker.d.ts +0 -0
- /package/dist/types/components/{ic-date-picker → ic-calendar}/ic-year-picker.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DayButton","focussed","today","day","monthInView","onFocusDay","onBlurDay","onSelectDay","selected","focussedDayRef","inRange","showDaysOutsideMonth","disableDay","handleDayClick","handleDayFocus","handleDayBlur","dayNames","stringEnumToArray","IcDayNames","months","IcDateInputMonths","outsideRange","outsideMonth","getMonth","disabled","h","class","hidden","tabIndex","undefined","getDay","getDate","getFullYear","onClick","onBlur","onFocus","ref","el","variant","italic","MonthPicker","size","focussedMonth","onSelectMonth","onKeyDown","focussedMonthRef","minDate","maxDate","yearInView","handleMonthClick","ev","button","target","Number","getAttribute","monthNames","cols","i","length","push","slice","role","map","month","monthIdx","key","mon","index","correctedIndex","current","dateInRange","Date","getMonthStart","getMonthEnd","YearPicker","decadeView","focussedYear","onSelectYear","onFocusYear","onBlurYear","focussedYearRef","handleYearClick","handleYearFocus","handleYearBlur","navButtonMouseDownHandler","preventDefault","rows","thisDecade","renderYearButton","yr","yearIdx","idx","isPrevDecade","isNextDecade","isCurrent","isFocussed","id","flip","yearInRange","onMouseDown","slot","width","height","fill","xmlns","viewBox","d","years","icCalendarCss","IcCalendarStyle0","FOCUS_TIMER","Calendar","constructor","hostRef","this","daysOfWeek","dayButtonFocussed","dayPickerKeyboardNav","dialogDescription","focusDay","liveRegionEl","monthInViewUpdateHandled","parentIsDatePicker","yearButtonFocussed","clearButtonClicked","currMonthView","currYearPickerView","focussedDate","monthPickerVisible","orderedDaysOfWeek","selectedDate","yearPickerVisible","dateFormat","disableDays","disableFuture","disablePast","max","min","openAtDate","showClearButton","showTodayButton","startOfWeek","IcWeekDays","Monday","theme","value","isValidDateValue","isNaN","getTime","iso8601Regex","test","parse","a","b","c","split","some","year","date","isPresent","prop","setOpenAtDate","openAt","createDate","selectedDay","includes","_a","setSelectedDate","setFocussedDate","updateMonthInView","dialogDesc","getMonthInViewText","setTimeout","focusFocussedDay","setFocussedDayEl","element","focussedDayEl","setFocussedMonthEl","focussedMonthEl","setFocussedYearEl","focussedYearEl","setFocussedYear","newYear","focus","prevYear","newDecade","Math","floor","oldDecade","setDecadeView","setAriaLiveRegionText","getDecadeInViewText","setFocus","clampDate","emit","dateMatches","icChange","setDateChangeEventDetail","UTCDate","UTC","convertToDoubleDigits","toString","dateObject","utcValue","text","innerText","goToPreviousMonth","moveMonths","goToNextMonth","goToPreviousYear","isPrevYearAllowed","moveYears","goToNextYear","isNextYearAllowed","moveDays","numDays","setDate","numMonths","newMonth","setMonth","newDate","numYears","setFullYear","updateFocussedMonth","adjust","updateFocussedYear","focusYear","getNextDayToFocus","currDay","forward","level","move","nextDay","focusFirstElement","monthButtonEl","focusLastElement","clearButtonEl","todayButtonEl","monthButtonClickHandler","setMonthSelectedLiveRegionText","icCalendarMonthSelect","yearButtonClickHandler","setYearSelectedLiveRegionText","icCalendarYearSelect","todayButtonClickHandler","clearButtonClickHandler","monthYearNavClickHandler","handleCalendarClick","event","clearDialogDescription","stopImmediatePropagation","handleCalendarKeyDown","handled","shiftKey","calendarTabHandler","monthPickerKeyDownHandler","yearPickerKeyDownHandler","decadeStart","decadeEnd","monthButtonKeyDownHandler","yearButtonKeyDownHandler","todayButtonKeyDownHandler","clearButtonKeyDownHandler","isCurrentMonth","_b","yearButtonEl","start","currYear","decadeArr","isYearAllowed","getMonthView","getWeekStart","end","addSixWeeks","days","focussedDay","handleCalendarMouseDown","tagName","handleSelectDay","icCalendarDaySelect","handleSelectMonth","handleSelectYear","yrPos","indexOf","monthName","onDayButtonFocusHandler","onDayButtonBlurHandler","onYearButtonFocusHandler","onYearButtonBlurHandler","renderMonthYearNavButton","buttonSize","disableTooltip","innerHTML","chevron","replace","previousMonthButton","yearMatch","nextMonthButton","previousYearButton","nextYearButton","watchDisabledHandler","removeDisabledFalse","watchDisableFutureHandler","watchMaxHandler","watchDisablePastHandler","watchMinHandler","watchStartOfWeekHandler","concat","valueChanged","newValue","oldValue","propName","watchFocussedDateHandler","previous","watchMonthInViewHandler","watchYearInViewHandler","watchYearPickerVisibleHandler","watchMonthPickerVisibleHandler","watchFocussedDayEl","componentWillLoad","root","getRootNode","ShadowRoot","host","IcShortDayNames","render","monthButtonText","yearButtonText","dialogLabel","monthLabel","yearLabel","minDay","yesterday","weeks","Host","Object","assign","calendar","dayName","header","charAt","scope","week","weekIdx","toISOString","icDateInputCss","IcDateInputStyle0","inputIds","DateInput","DEFAULT_DATE_FORMAT","ARIA_INVALID","ARIA_LABEL","ARIA_LABELLED_BY","EVENT_OBJECT_STRING","FIT_TO_VALUE","initialValue","INPUT_EVENT_OBJECT_STRING","inputsInOrder","isAfterMax","isBeforeMin","preventInputsUpdating","isDisabledDate","isValidDay","isValidMonth","isValidDate","isZuluTime","KEYBOARD_EVENT_OBJECT_STRING","MAX_DAY","MAX_MONTH","previousSelectedDate","externalSetDate","clearInput","calendarIsOpen","calendarFocused","clearButtonFocused","removeLabelledBy","emitDatePartChange","disableDaysMessage","disableFutureMessage","disablePastMessage","hideHelperText","hideLabel","inputId","invalidDateMessage","name","required","showCalendarButton","validationAriaLive","validationStatus","validationText","setInputPasteValue","input","pastedValue","inputEl","classList","add","checkSingleCopiedValueIsValid","isValid","dayInputEl","monthInputEl","yearInputEl","isKeyboardOrEvent","prototype","call","setDateValidity","isEmptyString","handleInput","inputEvent","inputType","preventAutoFormatting","setInputValue","notifyScreenReader","moveToNextInput","setPreventInput","setFitToValueStyling","setValidationMessage","handleKeyDown","isInputPrevented","eventKey","toLowerCase","regex","ctrlKey","metaKey","setPasteInvalidText","handleLeftRightArrowKeyPress","handleUpDownArrowKeyPress","moveToPreviousInput","preventInput","handleFocus","select","handleBlur","autocompleteInput","notifyScreenReaderSelectedDate","selectedDateInfoEl","textContent","minValue","maxValue","handleDateChange","force","forEach","invalidDateText","setValueAndEmitChange","updateInputValues","slicePastedDate","valueLength","datePart","isPastedStringDateValid","handlePaste","clipboardData","getData","setPastedValueAndValidation","remove","isDateOrEpoch","defaultDateArray","splitStringDate","formatMinMax","formattedDate","clear","convertToDate","isSelectedDateDisabled","setAttribute","removeAttribute","setInputsInOrder","shadowRoot","querySelectorAll","setAriaLabelledBy","inputCompContainerEl","removeAriaLabelledBy","labelEl","querySelector","labelId","hasValidation","labelledBy","_c","screenReaderInfoId","getInputDescribedByText","helperText","defaultHelperText","selectedDateInfoId","assistiveHintId","isPrevented","preventDayInput","preventMonthInput","preventYearInput","getInputFromDatePart","dayInput","placeholder","onPaste","inputmode","pattern","monthInput","yearInput","maxLength","getInputsInOrder","dateParts","part","substring","getDescOfInputsOrder","description","getScreenReaderInfo","inputDescriptors","IcInformationStatus","Error","selectedString","selectionStart","selectionEnd","currentDate","isNotToday","toDateString","currentInput","findIndex","inputValue","yearNumbers","autocompletedInput","number","handleHostBlur","icBlur","handleHostFocus","activeElement","match","icFocus","handleFormReset","getAriaLabel","notifyScreenReaderArrowKeys","liveRegion","ariaLabel","announcement","notifyScreenReaderInput","monthValue","setAriaInvalid","validDay","validMonth","validDate","disabledDate","handleClear","handleCalendarOpen","calendarButtonEl","displayTooltip","calendarButtonClicked","_f","_e","_d","emitIcChange","handleCalendarFocus","handleCalendarBlur","handleClearFocus","handleClearBlur","relatedTarget","watchInputHandler","watchRequiredHandler","asteriskSpan","document","createElement","appendChild","disconnectedCallback","removeFormResetListener","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","label","addEventListener","componentWillUpdate","componentDidRender","setCalendarFocus","setDisableDays","triggerIcChange","nextParsedValue","extractDateFromZuluDateTime","pasteZuluDateTime","dateValue","isNumeric","displayPastedValidation","previousInvalidDateTest","isPasteValidationDisplayed","hasCustomValidation","assistiveHint","renderHiddenInput","for","Clear","divider","status","message","ariaLiveMode"],"sources":["src/components/ic-calendar/ic-day-button.tsx","src/components/ic-calendar/ic-month-picker.tsx","src/components/ic-calendar/ic-year-picker.tsx","src/components/ic-calendar/ic-calendar.css?tag=ic-calendar&encapsulation=shadow","src/components/ic-calendar/ic-calendar.tsx","src/components/ic-date-input/ic-date-input.css?tag=ic-date-input&encapsulation=shadow","src/components/ic-date-input/ic-date-input.tsx"],"sourcesContent":["import { h, FunctionalComponent } from \"@stencil/core\";\nimport { stringEnumToArray } from \"../../utils/helpers\";\nimport { IcDayNames, IcDateInputMonths } from \"../../utils/types\";\n\nexport type DayButtonProps = {\n focussed: boolean;\n today: boolean;\n day: Date;\n monthInView: number;\n onFocusDay: () => void;\n onBlurDay: () => void;\n onSelectDay: (day: Date) => void;\n selected: boolean;\n focussedDayRef?: (element: HTMLButtonElement) => void;\n inRange: boolean;\n showDaysOutsideMonth?: boolean;\n disableDay?: boolean;\n};\n\nexport const DayButton: FunctionalComponent<DayButtonProps> = ({\n focussed,\n today,\n day,\n monthInView,\n onFocusDay,\n onBlurDay,\n onSelectDay,\n selected,\n focussedDayRef,\n inRange,\n showDaysOutsideMonth,\n disableDay,\n}) => {\n const handleDayClick = (): void => {\n onSelectDay(day);\n };\n\n const handleDayFocus = (): void => {\n onFocusDay();\n };\n\n const handleDayBlur = (): void => {\n onBlurDay();\n };\n\n const dayNames = stringEnumToArray(IcDayNames);\n const months = stringEnumToArray(IcDateInputMonths);\n const outsideRange = !inRange || disableDay;\n const outsideMonth = monthInView !== day.getMonth();\n const disabled = outsideRange || (outsideMonth && !showDaysOutsideMonth);\n\n return (\n <div class=\"day-button-container\">\n <button\n class={{\n \"day-button\": true,\n \"outside-month\": outsideMonth,\n \"outside-range\": !!outsideRange,\n hidden: outsideMonth && !showDaysOutsideMonth,\n disabled: disabled,\n today: today,\n selected: selected,\n focussed: focussed,\n }}\n tabIndex={focussed ? 0 : -1}\n aria-hidden={outsideMonth ? \"true\" : \"false\"}\n aria-disabled={disabled ? \"true\" : \"false\"}\n aria-current={today ? \"date\" : undefined}\n aria-label={\n disabled || outsideMonth || outsideRange\n ? undefined\n : `Choose ${dayNames[day.getDay()]}, ${day.getDate()} ${\n months[day.getMonth()]\n } ${day.getFullYear()}`\n }\n disabled={disabled}\n onClick={handleDayClick}\n onBlur={handleDayBlur}\n onFocus={handleDayFocus}\n ref={(el) => {\n if (focussed && el && focussedDayRef) {\n focussedDayRef(el);\n }\n }}\n >\n {(!outsideMonth || (outsideMonth && showDaysOutsideMonth)) && (\n <ic-typography variant=\"subtitle-small\" italic={outsideMonth}>\n {day.getDate()}\n </ic-typography>\n )}\n </button>\n </div>\n );\n};\n","import { h, FunctionalComponent } from \"@stencil/core\";\nimport {\n dateInRange,\n getMonthStart,\n getMonthEnd,\n} from \"../../utils/date-helpers\";\nimport { stringEnumToArray } from \"../../utils/helpers\";\nimport { IcSizes, IcDateInputMonths } from \"../../utils/types\";\n\nexport type MonthPickerProps = {\n focussedMonth: number;\n monthInView: number;\n yearInView: number;\n onSelectMonth: (month: number) => void;\n onKeyDown: (ev: KeyboardEvent) => void;\n focussedMonthRef: (element: HTMLIcButtonElement) => void;\n minDate: Date | null;\n maxDate: Date | null;\n size?: IcSizes;\n};\n\nexport const MonthPicker: FunctionalComponent<MonthPickerProps> = ({\n size,\n focussedMonth,\n monthInView,\n onSelectMonth,\n onKeyDown,\n focussedMonthRef,\n minDate,\n maxDate,\n yearInView,\n}) => {\n const handleMonthClick = (ev: MouseEvent): void => {\n const button = ev.target as HTMLElement;\n onSelectMonth(Number(button.getAttribute(\"data-month\")));\n };\n\n const monthNames = stringEnumToArray(IcDateInputMonths);\n\n const cols = size === \"small\" ? 2 : 3;\n const months: string[][] = [];\n for (let i = 0; i < monthNames.length; i += cols) {\n months.push(monthNames.slice(i, i + cols));\n }\n\n return (\n <div\n class={{\n \"month-picker\": true,\n }}\n role=\"grid\"\n >\n {months.map((month, monthIdx) => (\n <div class=\"month-picker-row\" key={monthIdx} role=\"row\">\n {month.map((mon, index) => {\n const correctedIndex = monthIdx * cols + index;\n const current = monthInView === correctedIndex;\n const focussed = focussedMonth === correctedIndex;\n const outsideRange = !dateInRange(\n new Date(yearInView, correctedIndex, 1),\n minDate ? getMonthStart(minDate) : null,\n maxDate ? getMonthEnd(maxDate) : null\n );\n return (\n <ic-button\n role=\"gridcell\"\n class={{\n \"month-button\": true,\n selected: current,\n focussed: focussed,\n disabled: outsideRange,\n }}\n full-width\n disabled={outsideRange}\n variant={current ? \"primary\" : \"tertiary\"}\n data-month={correctedIndex}\n size={size}\n tabIndex={focussed ? 0 : -1}\n aria-current={current ? \"true\" : \"false\"}\n aria-label={current ? \"\" : `select ${mon}`}\n onClick={handleMonthClick}\n onKeyDown={onKeyDown}\n ref={(el?: HTMLIcButtonElement) => {\n if (focussed && el) {\n focussedMonthRef(el);\n }\n }}\n >\n {mon}\n </ic-button>\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n","import { h, FunctionalComponent } from \"@stencil/core\";\nimport { yearInRange } from \"../../utils/date-helpers\";\nimport { IcSizes } from \"../../utils/types\";\n\nexport type YearPickerProps = {\n decadeView: number[];\n focussedYear: number;\n yearInView: number;\n onSelectYear: (year: number) => void;\n onKeyDown: (ev: KeyboardEvent) => void;\n onFocusYear: () => void;\n onBlurYear: () => void;\n minDate: Date | null;\n maxDate: Date | null;\n focussedYearRef: (element: HTMLIcButtonElement) => void;\n size?: IcSizes;\n};\n\nexport const YearPicker: FunctionalComponent<YearPickerProps> = ({\n decadeView,\n size,\n focussedYear,\n yearInView,\n onSelectYear,\n onFocusYear,\n onBlurYear,\n onKeyDown,\n minDate,\n maxDate,\n focussedYearRef,\n}) => {\n const handleYearClick = (ev: MouseEvent): void => {\n const button = ev.target as HTMLElement;\n onSelectYear(Number(button.getAttribute(\"data-year\")));\n };\n\n const handleYearFocus = (): void => {\n onFocusYear();\n };\n\n const handleYearBlur = (): void => {\n onBlurYear();\n };\n\n const navButtonMouseDownHandler = (ev: MouseEvent): void => {\n ev.preventDefault();\n };\n\n const cols = size === \"small\" ? 2 : 3;\n const rows = size === \"small\" ? 6 : 4;\n\n const thisDecade: number[][] = [];\n for (let i = 0; i < decadeView.length; i += cols) {\n thisDecade.push(decadeView.slice(i, i + cols));\n }\n\n const renderYearButton = (yr: number, yearIdx: number, idx: number) => {\n const isPrevDecade = yearIdx === 0 && idx === 0;\n const isNextDecade = yearIdx === rows - 1 && idx === cols - 1;\n const isCurrent = yearInView === yr;\n const isFocussed = focussedYear === yr;\n\n return (\n <ic-button\n key={yr}\n role=\"gridcell\"\n id={\n isPrevDecade\n ? \"prev-decade-button\"\n : isNextDecade\n ? \"next-decade-button\"\n : undefined\n }\n class={{\n \"prev-decade\": isPrevDecade,\n \"next-decade\": isNextDecade,\n \"year-button\": true,\n selected: !isPrevDecade && !isNextDecade ? isCurrent : false,\n focussed: !isPrevDecade && !isNextDecade ? isFocussed : false,\n flip: isNextDecade,\n }}\n full-width\n disabled={!yearInRange(yr, minDate, maxDate)}\n data-year={yr}\n tabIndex={isPrevDecade || isNextDecade ? -1 : isFocussed ? 0 : -1}\n variant={\n isPrevDecade || isNextDecade\n ? \"tertiary\"\n : isCurrent\n ? \"primary\"\n : \"tertiary\"\n }\n onClick={handleYearClick}\n onMouseDown={\n isPrevDecade || isNextDecade ? navButtonMouseDownHandler : undefined\n }\n size={size}\n aria-label={\n !isPrevDecade && !isNextDecade\n ? isCurrent\n ? \"\"\n : `select ${yr}`\n : undefined\n }\n aria-current={\n !isPrevDecade && !isNextDecade\n ? isCurrent\n ? \"true\"\n : \"false\"\n : undefined\n }\n onKeyDown={!isPrevDecade && !isNextDecade ? onKeyDown : undefined}\n onFocus={!isPrevDecade && !isNextDecade ? handleYearFocus : undefined}\n onBlur={!isPrevDecade && !isNextDecade ? handleYearBlur : undefined}\n ref={\n !isPrevDecade && !isNextDecade && isFocussed\n ? (el: HTMLIcButtonElement | undefined) => el && focussedYearRef(el)\n : undefined\n }\n >\n {isPrevDecade ? `${yr - 9}s` : isNextDecade ? `${yr}s` : yr}\n {(isPrevDecade || isNextDecade) && (\n <svg\n slot={isPrevDecade ? \"left-icon\" : \"right-icon\"}\n width=\"12\"\n height=\"12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\"\n fill=\"currentColor\"\n />\n </svg>\n )}\n </ic-button>\n );\n };\n\n return (\n <div class=\"year-picker\" role=\"grid\">\n {thisDecade.map((years, yearIdx) => (\n <div class=\"year-picker-row\" role=\"row\" key={yearIdx}>\n {years.map((yr, idx) => renderYearButton(yr, yearIdx, idx))}\n </div>\n ))}\n </div>\n );\n};\n","@import \"../../global/normalize.css\";\n\n/**\n*\n @prop --ic-z-index-calendar: z-index of calendar.\n*/\n:host(.ic-date-picker-above) .calendar-container {\n bottom: calc(var(--ic-space-xxl) - var(--ic-space-xxs));\n}\n\n:host(.ic-date-picker-calendar) .calendar-container {\n box-shadow: var(--ic-calendar-elevation);\n}\n\n:host .calendar-container {\n min-width: 19rem;\n max-width: 23.5rem;\n width: var(--input-width);\n display: flex;\n flex-direction: column;\n gap: var(--ic-space-xs);\n position: absolute;\n border: var(--ic-border-default);\n border-color: var(--ic-calendar-border);\n border-radius: var(--ic-border-radius);\n align-items: center;\n background-color: var(--ic-calendar-bg);\n z-index: var(--ic-z-index-calendar);\n box-sizing: border-box;\n margin-top: var(--ic-space-xxxs);\n padding: var(--ic-space-xs);\n animation: fade-in-calendar var(--ic-transition-duration-slow);\n}\n\n:host(.ic-calendar-small) .calendar-container {\n min-width: 17rem;\n max-width: 21.5rem;\n}\n\n:host(.ic-calendar-large) .calendar-container {\n min-width: 21rem;\n max-width: 25.5rem;\n}\n\n:host(.ic-calendar-large) {\n --month-button-width: 6.3125rem;\n}\n\n:host(.ic-calendar-small) {\n --month-button-width: 6.25rem;\n}\n\n:host .month-year-nav-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n}\n\n:host .month-year-nav-container.hidden {\n display: none;\n}\n\n:host .month-year-nav {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex: 1 0 0;\n}\n\n:host .month-picker,\n:host .year-picker {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 17.5rem;\n column-gap: var(--ic-space-xs);\n row-gap: var(--ic-space-xxs);\n}\n\n:host(.ic-calendar-small) .month-picker,\n:host(.ic-calendar-small) .year-picker {\n width: 13.125rem;\n}\n\n:host(.ic-calendar-large) .month-picker,\n:host(.ic-calendar-large) .year-picker {\n width: 20rem;\n}\n\n:host .month-picker .month-picker-row,\n:host .year-picker .year-picker-row {\n display: inline-grid;\n grid-template-columns: repeat(3, minmax(0px, 1fr));\n width: 100%;\n gap: var(--ic-space-xs);\n}\n\n:host(.ic-calendar-small) .month-picker .month-picker-row,\n:host(.ic-calendar-small) .year-picker .year-picker-row {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n:host .month-picker-button,\n:host .year-picker-button {\n width: 5rem;\n\n --min-width: 5rem;\n}\n\n:host .month-button,\n:host .year-button {\n width: var(--month-button-width);\n}\n\n:host .month-button.focussed,\n:host .year-button.focussed {\n z-index: 1;\n}\n\n:host .month-button::part(button),\n:host .year-button::part(button) {\n min-width: var(--month-button-width);\n padding: var(--ic-space-xs) auto;\n}\n\n:host .prev-decade.year-button svg {\n margin-right: calc(-1 * var(--ic-space-xs));\n --icon-width: var(--ic-space-md);\n --icon-height: var(--ic-space-md);\n}\n\n:host(.ic-calendar-small) .prev-decade.year-button svg {\n margin-right: calc(-1 * calc(var(--ic-space-md) + var(--ic-space-1px)));\n}\n\n:host(.ic-calendar-large) .prev-decade.year-button svg {\n margin-right: calc(-1 * calc(var(--ic-space-md) + var(--ic-space-xxs)));\n}\n\n:host .prev-decade.year-button::part(button) {\n padding-left: 0;\n padding-right: var(--ic-space-lg);\n gap: var(--ic-space-xxxs);\n display: inline-grid;\n grid-template-columns: 1.5rem 1fr;\n}\n\n:host(.ic-calendar-small) .prev-decade.year-button::part(button) {\n padding-left: 0;\n padding-right: calc(var(--ic-space-lg) + var(--ic-space-xxs));\n}\n\n:host .next-decade.year-button svg {\n margin-left: calc(-1 * var(--ic-space-lg));\n --icon-width: var(--ic-space-md);\n --icon-height: var(--ic-space-md);\n}\n\n:host(.ic-calendar-small) .next-decade.year-button svg,\n:host(.ic-calendar-large) .next-decade.year-button svg {\n margin-left: calc(\n -1 * (var(--ic-space-lg) + var(--ic-space-xs) + var(--ic-space-1px))\n );\n}\n\n:host .next-decade.year-button::part(button) {\n padding-right: 0;\n padding-left: var(--ic-space-lg);\n gap: var(--ic-space-xxxs);\n display: inline-grid;\n grid-template-columns: 1fr 1.5rem;\n}\n\n:host(.ic-calendar-small) .next-decade.year-button::part(button),\n:host(.ic-calendar-large) .next-decade.year-button::part(button) {\n padding-left: calc(var(--ic-space-xl) - var(--ic-space-xxs));\n}\n\n:host .bottom-buttons {\n display: flex;\n justify-content: space-between;\n align-items: center;\n align-self: stretch;\n animation: fade-in-buttons var(--ic-transition-duration-slow);\n}\n\n:host .bottom-buttons.no-today {\n align-items: flex-end;\n flex-direction: column;\n}\n\n:host .bottom-buttons.hidden {\n display: none;\n}\n\n:host .calendar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 15.75rem;\n animation: fade-in-buttons var(--ic-transition-duration-slow);\n}\n\n:host(.ic-calendar-large) .calendar {\n width: 19.25rem;\n}\n\n:host(.ic-calendar-small) .calendar {\n padding-bottom: var(--ic-space-xxs);\n width: 14rem;\n}\n\n:host .hidden {\n display: none;\n}\n\n:host .weekdays-container {\n display: flex;\n align-self: stretch;\n}\n\n:host .weekdays {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: var(--ic-space-xs);\n}\n\n:host .calendar-days-container {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n row-gap: var(--ic-space-xs);\n padding: var(--ic-space-xxs) 0;\n min-height: 16rem;\n align-content: flex-start;\n}\n\n:host(.ic-calendar-small) .calendar-days-container {\n padding: var(--ic-space-xxxs) 0;\n min-height: 14.5rem;\n}\n\n:host(.ic-calendar-large) .calendar-days-container {\n padding: var(--ic-space-xs) 0;\n min-height: 17.5rem;\n}\n\n:host .calendar-days-container tr {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n border-spacing: 0;\n}\n\n:host .calendar-day-header {\n display: flex;\n width: 2rem;\n padding: var(--ic-space-xxs) 0;\n justify-content: center;\n align-items: center;\n color: var(--ic-typography-color, var(--ic-color-text-primary));\n --ic-typography-color: var(--ic-calendar-label);\n text-align: center;\n font: var(--ic-font-caption);\n letter-spacing: var(--ic-font-letter-spacing-0pt0025);\n}\n\n:host(.ic-calendar-large) .calendar-day-header {\n padding: var(--ic-space-xxs);\n}\n\n:host .day-button-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 2.25rem;\n height: 2.25rem;\n}\n\n:host(.ic-calendar-small) .day-button-container {\n width: 2rem;\n height: 2rem;\n}\n\n:host(.ic-calendar-large) .day-button-container {\n width: 2.5rem;\n height: 2.5rem;\n}\n\n:host .day-button {\n display: flex;\n position: relative;\n justify-content: center;\n align-items: center;\n border: 0;\n border-radius: 2rem;\n background-color: var(--ic-calendar-bg);\n width: 2rem;\n height: 2rem;\n cursor: pointer;\n transition: var(--ic-easing-transition-fast);\n z-index: 0;\n}\n\n:host .day-button.disabled {\n cursor: default;\n}\n\n:host(.ic-calendar-large) .day-button {\n width: 2.25rem;\n height: 2.25rem;\n}\n\n:host(.ic-calendar-small) .day-button {\n width: 1.75rem;\n height: 1.75rem;\n}\n\n:host .day-button ic-typography {\n width: 1.75rem;\n\n --ic-typography-color: var(--ic-calendar-date-label-default);\n}\n\n:host .day-button.outside-range ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-disabled);\n}\n\n:host .day-button.outside-month ic-typography {\n font-weight: var(--ic-font-weight-regular) !important;\n}\n\n:host\n .day-button.outside-month:not(.outside-range):not(.selected)\n ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-default);\n}\n\n:host .day-button:hover:not(.disabled) {\n background-color: var(--ic-calendar-date-default-bg-hover);\n}\n\n:host .day-button:active:not(.disabled) {\n background-color: var(--ic-calendar-date-default-bg-pressed);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :host .day-button:hover:not(.disabled):not(.focussed),\n :host .day-button:active:not(.disabled):not(.focussed) {\n transition: background-color var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host .day-button.selected:not(.hidden) {\n background-color: var(--ic-calendar-date-active-bg-default);\n}\n\n:host .day-button.selected ic-typography {\n --ic-typography-color: var(--ic-calendar-date-label-selected);\n}\n\n:host .day-button.selected:not(.hidden):hover {\n background-color: var(--ic-calendar-date-active-bg-hover);\n}\n\n:host .day-button.selected:not(.hidden):active {\n background-color: var(--ic-calendar-date-active-bg-pressed);\n}\n\n:host .day-button.focussed {\n z-index: 1;\n}\n\n:host .day-button:focus {\n outline: none;\n}\n\n:host .day-button.focussed:focus {\n box-shadow: var(--ic-border-focus);\n}\n\n:host .day-button.today:not(.hidden)::after {\n content: \"\";\n position: absolute;\n width: 0.875rem;\n height: 0.125rem;\n bottom: 0.4rem;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-calendar-default-underline);\n}\n\n:host(.ic-calendar-small) .day-button.today::after {\n bottom: 0.35rem;\n}\n\n:host(.ic-calendar-large) .day-button.today::after {\n width: 1rem;\n}\n\n:host .day-button.today.selected::after {\n background-color: var(--ic-calendar-selected-underline);\n}\n\n:host #select-month-hint,\n:host #select-year-hint {\n display: none;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host .calendar-container,\n :host .calendar,\n :host .bottom-buttons {\n animation: none;\n }\n}\n\n@keyframes fade-in-buttons {\n 0% {\n opacity: 0;\n }\n\n 50% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes fade-in-calendar {\n 0% {\n display: flex;\n max-height: 0;\n }\n\n 100% {\n display: flex;\n max-height: 600px;\n }\n}\n\n@media (forced-colors: active) {\n :host .day-button.today:not(.hidden)::after {\n background-color: highlight;\n }\n\n :host .day-button.selected:not(.hidden) {\n background-color: highlight;\n }\n\n :host .day-button.focussed:focus {\n border: var(--ic-border-hc);\n }\n\n :host .month-button.selected::part(button),\n :host .year-button.selected::part(button) {\n background-color: highlight;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Prop,\n State,\n Watch,\n Method,\n} from \"@stencil/core\";\n\nimport {\n IcDateFormat,\n IcDateInputMonths,\n IcDateValueFormat,\n IcShortDayNames,\n IcSizes,\n IcThemeMode,\n IcWeekDays,\n} from \"../../utils/types\";\n\nimport {\n addSixWeeks,\n clampDate,\n convertToDoubleDigits,\n createDate,\n dateInRange,\n dateMatches,\n getMonthStart,\n getMonthEnd,\n getWeekStart,\n yearInRange,\n} from \"../../utils/date-helpers\";\n\nimport chevron from \"../../assets/chevron-icon.svg\";\n\nimport { DayButton } from \"./ic-day-button\";\nimport { MonthPicker } from \"./ic-month-picker\";\nimport { YearPicker } from \"./ic-year-picker\";\nimport { removeDisabledFalse, stringEnumToArray } from \"../../utils/helpers\";\n\nconst FOCUS_TIMER = 100;\n\n@Component({\n tag: \"ic-calendar\",\n styleUrl: \"ic-calendar.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Calendar {\n private clearButtonEl: HTMLIcButtonElement | undefined;\n private daysOfWeek: string[] = [];\n private dayButtonFocussed: boolean = false;\n private dayPickerKeyboardNav: boolean = false;\n private decadeStart: number;\n private decadeEnd: number;\n private dialogDescription: string = \"\";\n private focusDay: boolean = true;\n private focussedYearEl: HTMLIcButtonElement;\n private liveRegionEl?: HTMLElement = undefined;\n private monthButtonEl: HTMLIcButtonElement | undefined;\n private monthNames: string[] = [];\n private monthInViewUpdateHandled: boolean = false;\n private parentIsDatePicker: boolean = false;\n private today = new Date();\n private todayButtonEl: HTMLIcButtonElement | undefined;\n private yearButtonEl: HTMLIcButtonElement | undefined;\n private yearButtonFocussed: boolean = false;\n\n @Element() el: HTMLIcCalendarElement;\n\n @State() clearButtonClicked: boolean = false;\n @State() currMonthView: Date[] = [];\n @State() currYearPickerView: number[] = [];\n @State() decadeView: number[] = [];\n @State() focussedDate: Date | null = null;\n @State() focussedDay: number;\n @State() focussedDayEl: HTMLButtonElement;\n @State() focussedMonth: number;\n @State() focussedMonthEl: HTMLIcButtonElement;\n @State() focussedYear: number;\n @State() maxDate: Date | null = null;\n @State() minDate: Date | null = null;\n @State() monthInView: number;\n @State() monthPickerVisible: boolean = false;\n @State() orderedDaysOfWeek: string[] = [];\n @State() selectedDate: Date | null = null;\n @State() yearInView: number;\n @State() yearPickerVisible: boolean = false;\n\n /**\n * The format in which the date will be displayed.\n */\n @Prop() dateFormat: IcDateFormat = \"DD/MM/YYYY\";\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n\n if (this.disabled) {\n this.setSelectedDate(null);\n this.clearButtonEl?.disabled;\n this.todayButtonEl?.disabled;\n } else {\n this.setOpenAtDate();\n }\n }\n\n /**\n * The days of the week to disable.\n */\n @Prop() disableDays?: IcWeekDays[] = [];\n\n /**\n * If `true`, dates in the future are not allowed.\n */\n @Prop() disableFuture?: boolean = false;\n\n @Watch(\"disableFuture\")\n watchDisableFutureHandler(): void {\n this.watchMaxHandler();\n }\n\n /**\n * If `true`, dates in the past are not allowed.\n */\n @Prop() disablePast?: boolean = false;\n\n @Watch(\"disablePast\")\n watchDisablePastHandler(): void {\n this.watchMinHandler();\n }\n\n /**\n * The latest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disableFuture` is set to `true`.\n */\n @Prop() max: string | Date = \"\";\n @Watch(\"max\")\n watchMaxHandler(): void {\n if (this.disableFuture) {\n this.maxDate = new Date();\n } else {\n this.maxDate = createDate(this.max, this.dateFormat);\n }\n }\n\n /**\n * The earliest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disablePast` is set to `true`.\n */\n @Prop() min: string | Date = \"\";\n @Watch(\"min\")\n watchMinHandler(): void {\n if (this.disablePast) {\n this.minDate = new Date();\n } else {\n this.minDate = createDate(this.min, this.dateFormat);\n }\n }\n\n /**\n * The date visible when the calendar opens. Used if no date is currently selected.\n * The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop() openAtDate: string | Date = \"\";\n\n /**\n * If `true`, the `Clear` button on the calendar will be visible.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * If `true`, days outside the current month will be visible in the calendar.\n */\n @Prop() showDaysOutsideMonth?: boolean = true;\n\n /**\n * If `true`, the `Go to today` button on the calendar will be visible.\n */\n @Prop() showTodayButton?: boolean = true;\n\n /**\n * The size of the calendar to be displayed.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * The first day of the week. `0` for Sunday, `1` for Monday, etc.\n * Default is Monday.\n */\n @Prop() startOfWeek: IcWeekDays = IcWeekDays.Monday;\n\n @Watch(\"startOfWeek\")\n watchStartOfWeekHandler(): void {\n this.orderedDaysOfWeek = this.daysOfWeek\n .slice(this.startOfWeek)\n .concat(this.daysOfWeek.slice(0, this.startOfWeek));\n this.updateMonthInView();\n }\n\n /**\n * Sets the calendar to the dark or light theme colors. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The value of the calendar and the date visible when the calendar opens.\n * The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true, reflect: true }) value?: IcDateValueFormat = \"\";\n\n @Watch(\"value\")\n @Watch(\"openAtDate\")\n valueChanged(\n newValue: IcDateValueFormat,\n oldValue: IcDateValueFormat,\n propName?: string\n ): void {\n if (newValue !== oldValue && this.isValidDateValue(newValue)) {\n if (propName === \"value\") {\n this.value = newValue;\n }\n this.setOpenAtDate();\n }\n }\n\n @Watch(\"focussedDate\")\n watchFocussedDateHandler(current: Date, previous: Date): void {\n if (\n previous === null ||\n !(\n previous.getFullYear() === current.getFullYear() &&\n previous.getMonth() === current.getMonth()\n )\n ) {\n this.updateMonthInView();\n }\n }\n\n @Watch(\"monthInView\")\n watchMonthInViewHandler(): void {\n this.focussedMonth = this.monthInView;\n }\n\n @Watch(\"yearInView\")\n watchYearInViewHandler(): void {\n this.setFocussedYear(this.yearInView, false);\n }\n\n @Watch(\"yearPickerVisible\")\n watchYearPickerVisibleHandler(): void {\n if (!this.yearPickerVisible) {\n this.setFocussedYear(this.yearInView);\n }\n }\n\n @Watch(\"monthPickerVisible\")\n watchMonthPickerVisibleHandler(): void {\n if (!this.monthPickerVisible) {\n this.focussedMonth = this.monthInView;\n }\n }\n\n @Watch(\"focussedDayEl\")\n watchFocussedDayEl(): void {\n if (this.focusDay) {\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n }\n this.focusDay = true;\n }\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<{\n value: Date | null;\n dateObject: {\n day: string | null;\n month: string | null;\n year: string | null;\n };\n utcValue: Date | null;\n }>;\n\n /**\n * Emitted when the clear button has been clicked.\n */\n @Event() icCalendarClearButtonClick: EventEmitter<void>;\n\n /**\n * @internal Emitted when a day is selected.\n */\n @Event() icCalendarDaySelect: EventEmitter<void>;\n\n /**\n * Emitted when a month is selected.\n */\n @Event() icCalendarMonthSelect: EventEmitter<void>;\n\n /**\n * Emitted when a year is selected.\n */\n @Event() icCalendarYearSelect: EventEmitter<void>;\n\n componentWillLoad(): void {\n const root = this.el.getRootNode();\n this.parentIsDatePicker =\n root instanceof ShadowRoot && root.host?.tagName === \"IC-DATE-PICKER\";\n this.monthNames = stringEnumToArray(IcDateInputMonths);\n this.daysOfWeek = stringEnumToArray(IcShortDayNames);\n this.watchStartOfWeekHandler();\n this.watchMaxHandler();\n this.watchMinHandler();\n this.setOpenAtDate();\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * @internal Clears the dialog description used to provide more context for screen readers.\n */\n @Method()\n async clearDialogDescription(): Promise<void> {\n this.dialogDescription = \"\";\n }\n\n private isValidDateValue = (value: IcDateValueFormat): boolean => {\n if (value == null) return true;\n\n if (value instanceof Date) {\n return !isNaN(value.getTime());\n }\n\n if (typeof value !== \"string\") return false;\n\n const iso8601Regex =\n /^\\d{4}-\\d{2}-\\d{2}(?:[T\\s]\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:?\\d{2})?)?$/;\n\n if (iso8601Regex.test(value)) {\n return !isNaN(Date.parse(value));\n }\n\n const [a, b, c] = value.split(\"/\").map(Number);\n if ([a, b, c].some(isNaN)) return false;\n let day: number, month: number, year: number;\n switch (this.dateFormat) {\n case \"DD/MM/YYYY\":\n [day, month, year] = [a, b, c];\n break;\n case \"MM/DD/YYYY\":\n [month, day, year] = [a, b, c];\n break;\n case \"YYYY/MM/DD\":\n [year, month, day] = [a, b, c];\n break;\n default:\n return false;\n }\n if (month < 1 || month > 12 || day < 1 || day > 31) return false;\n\n const date = new Date(year, month - 1, day);\n return (\n date.getFullYear() === year &&\n date.getMonth() === month - 1 &&\n date.getDate() === day\n );\n };\n\n private isPresent = (prop: IcDateValueFormat) =>\n prop !== \"\" && prop !== undefined && prop !== null;\n\n private setOpenAtDate = () => {\n let openAt: Date | null = null;\n if (this.disabled) {\n openAt = new Date();\n } else {\n if (this.clearButtonClicked) {\n openAt = this.focussedDate ? this.focussedDate : new Date();\n this.clearButtonClicked = false;\n } else {\n if (\n !this.disabled &&\n this.value != null &&\n this.isValidDateValue(this.value)\n ) {\n openAt = createDate(this.value, this.dateFormat);\n }\n\n if (!!openAt && dateInRange(openAt, this.minDate, this.maxDate)) {\n const selectedDay = openAt.getDay();\n\n if (\n !!this.disableDays &&\n this.disableDays.length > 0 &&\n typeof selectedDay == \"number\" &&\n this.disableDays.includes(selectedDay)\n ) {\n openAt = createDate(this.value ?? new Date(), this.dateFormat);\n this.setSelectedDate(null);\n } else {\n this.setSelectedDate(openAt);\n }\n } else if (this.isPresent(this.openAtDate)) {\n openAt = createDate(this.openAtDate, this.dateFormat);\n } else {\n openAt = new Date();\n }\n }\n }\n this.setFocussedDate(openAt);\n\n this.updateMonthInView();\n let dialogDesc = this.getMonthInViewText();\n if (this.selectedDate === null) {\n dialogDesc += \" No date selected.\";\n }\n dialogDesc += ` Use arrow keys to change day. Press enter or space to select a date${\n this.parentIsDatePicker ? \" or press escape to close the picker\" : \"\"\n }.`;\n\n this.dialogDescription = dialogDesc;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n };\n\n /* Refs & setters */\n private setFocussedDayEl = (element: HTMLButtonElement) => {\n this.focussedDayEl = element;\n };\n\n private setFocussedMonthEl = (element: HTMLIcButtonElement) => {\n this.focussedMonthEl = element;\n };\n\n private setFocussedYearEl = (element: HTMLIcButtonElement) => {\n this.focussedYearEl = element;\n };\n\n private setFocussedYear = (newYear: number, focus = true): void => {\n const prevYear = this.focussedYear;\n this.focussedYear = newYear;\n if (this.yearPickerVisible) {\n const newDecade = Math.floor(newYear / 10) * 10;\n const oldDecade = Math.floor(prevYear / 10) * 10;\n if (newDecade !== oldDecade) {\n this.setDecadeView(newDecade);\n this.setAriaLiveRegionText(this.getDecadeInViewText());\n }\n if (focus) {\n setTimeout(() => {\n if (this.focussedYearEl !== null) this.focussedYearEl.setFocus();\n }, FOCUS_TIMER);\n }\n } else {\n this.setDecadeView(Math.floor(newYear / 10) * 10);\n }\n };\n\n private setFocussedDate = (d: Date): void => {\n this.focussedDate = clampDate(d, this.minDate, this.maxDate);\n };\n\n private setSelectedDate = (d: Date | null, emit = true): void => {\n if (d === null || !dateMatches(d, this.selectedDate)) {\n this.selectedDate = d;\n this.value = d;\n if (emit) {\n this.icChange.emit(this.setDateChangeEventDetail(d));\n }\n }\n };\n\n private setDateChangeEventDetail = (d: Date | null) => {\n let UTCDate = null;\n let day = null;\n let month = null;\n let year = null;\n if (d !== null) {\n UTCDate = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n day = convertToDoubleDigits(d.getDate());\n month = convertToDoubleDigits(d.getMonth() + 1);\n year = d.getFullYear().toString();\n }\n return {\n value: d,\n dateObject: {\n day: day === \"\" ? null : day,\n month: month === \"\" ? null : month,\n year: year === \"\" ? null : year,\n },\n utcValue: UTCDate,\n };\n };\n\n private setAriaLiveRegionText = (text: string) => {\n this.liveRegionEl && (this.liveRegionEl.innerText = text);\n };\n\n /* Navigation helpers */\n private goToPreviousMonth = (focusDay = false) => {\n this.focusDay = focusDay;\n this.moveMonths(-1);\n };\n\n private goToNextMonth = (focusDay = false) => {\n this.focusDay = focusDay;\n this.moveMonths(1);\n };\n\n private goToPreviousYear = (focusDay = false) => {\n if (this.isPrevYearAllowed()) {\n this.focusDay = focusDay;\n this.moveYears(-1);\n }\n };\n\n private goToNextYear = (focusDay = false) => {\n if (this.isNextYearAllowed()) {\n this.focusDay = focusDay;\n this.moveYears(1);\n }\n };\n\n private moveDays = (numDays: number): void => {\n if (this.focussedDate) {\n const d = new Date(this.focussedDate);\n d.setDate(d.getDate() + numDays);\n this.setFocussedDate(d);\n }\n };\n\n private moveMonths = (numMonths: number): void => {\n if (this.focussedDate) {\n const newMonth = this.focussedDate.getMonth() + numMonths;\n const min = new Date(\n new Date(getMonthStart(this.focussedDate)).setMonth(newMonth)\n );\n const max = getMonthEnd(min);\n const newDate = new Date(new Date(this.focussedDate).setMonth(newMonth));\n this.setFocussedDate(clampDate(newDate, min, max));\n\n if (\n this.monthPickerVisible === false &&\n this.yearPickerVisible === false &&\n this.monthInViewUpdateHandled === false\n ) {\n this.setAriaLiveRegionText(this.getMonthInViewText());\n }\n this.monthInViewUpdateHandled = false;\n }\n };\n\n private moveYears = (numYears: number): void => {\n if (this.focussedDate) {\n const newYear = this.focussedDate.getFullYear() + numYears;\n const min = new Date(\n new Date(getMonthStart(this.focussedDate)).setFullYear(newYear)\n );\n const max = getMonthEnd(min);\n const newDate = new Date(\n new Date(this.focussedDate).setFullYear(newYear)\n );\n this.setFocussedDate(clampDate(newDate, min, max));\n\n if (\n this.monthPickerVisible === false &&\n this.yearPickerVisible === false &&\n this.monthInViewUpdateHandled === false\n ) {\n this.setAriaLiveRegionText(this.getMonthInViewText());\n }\n this.monthInViewUpdateHandled = false;\n }\n };\n\n private updateFocussedMonth = (adjust: number): void => {\n const d = new Date(this.focussedYear, this.focussedMonth, 1);\n d.setMonth(this.focussedMonth + adjust);\n const newDate = clampDate(d, this.minDate, this.maxDate);\n this.focussedMonth = newDate.getMonth();\n setTimeout(() => this.focussedMonthEl.setFocus(), FOCUS_TIMER);\n };\n\n private updateFocussedYear = (adjust: number, focusYear = true): void => {\n const d = new Date(new Date().setFullYear(this.focussedYear + adjust));\n const newDate = clampDate(d, this.minDate, this.maxDate);\n this.setFocussedYear(newDate.getFullYear(), focusYear);\n };\n\n private getNextDayToFocus = (\n currDay: Date,\n forward: boolean,\n level = 1\n ): number => {\n const move = forward ? 1 : -1;\n const nextDay = new Date(currDay);\n nextDay.setDate(nextDay.getDate() + move);\n return this.disableDays?.includes(Number(nextDay.getDay()))\n ? this.getNextDayToFocus(nextDay, forward, level + 1)\n : level;\n };\n\n /* Focus helpers */\n private focusFirstElement = () => {\n this.monthButtonEl?.setFocus();\n };\n\n private focusLastElement = () => {\n if (\n this.showClearButton &&\n this.clearButtonEl &&\n !this.clearButtonEl.disabled\n ) {\n this.clearButtonEl.setFocus();\n } else if (\n this.showTodayButton &&\n this.todayButtonEl &&\n !this.todayButtonEl.disabled\n ) {\n this.todayButtonEl.setFocus();\n } else if (this.monthPickerVisible) {\n this.focussedMonthEl.setFocus();\n } else if (this.yearPickerVisible) {\n this.focussedYearEl.setFocus();\n } else {\n this.focussedDayEl.focus();\n }\n };\n\n private focusFocussedDay = () => {\n this.focussedDayEl.focus();\n };\n\n /* Click handlers */\n private monthButtonClickHandler = () => {\n this.yearPickerVisible = false;\n this.focusDay = false;\n this.monthPickerVisible = !this.monthPickerVisible;\n if (this.monthPickerVisible) {\n this.setAriaLiveRegionText(\"Month picker view open\");\n } else {\n this.setMonthSelectedLiveRegionText();\n this.icCalendarMonthSelect.emit();\n }\n };\n\n private yearButtonClickHandler = () => {\n this.monthPickerVisible = false;\n this.focusDay = false;\n this.yearPickerVisible = !this.yearPickerVisible;\n if (this.yearPickerVisible) {\n this.setAriaLiveRegionText(\n `Year picker view open. ${this.getDecadeInViewText()}`\n );\n } else {\n this.setYearSelectedLiveRegionText();\n this.icCalendarYearSelect.emit();\n }\n };\n\n private todayButtonClickHandler = () => {\n this.yearPickerVisible = false;\n this.monthPickerVisible = false;\n this.setFocussedDate(new Date());\n this.setAriaLiveRegionText(this.getMonthInViewText());\n\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n };\n\n private clearButtonClickHandler = () => {\n this.clearButtonClicked = true;\n this.selectedDate && this.setFocussedDate(this.selectedDate);\n this.setSelectedDate(null);\n this.icChange.emit(this.setDateChangeEventDetail(this.selectedDate));\n let text = \"Selected date cleared.\";\n if (!this.monthPickerVisible && !this.yearPickerVisible) {\n text += ` ${this.getMonthInViewText()}`;\n }\n if (this.monthPickerVisible) {\n this.focussedMonthEl.setFocus();\n } else if (this.yearPickerVisible) {\n this.focussedYearEl.setFocus();\n } else {\n this.focusFocussedDay();\n }\n this.setAriaLiveRegionText(text);\n };\n\n private monthYearNavClickHandler = (ev: Event): void => {\n const target = ev.target as Element;\n switch (target.id) {\n case \"previous-month-button\":\n this.goToPreviousMonth(this.dayButtonFocussed);\n break;\n\n case \"next-month-button\":\n this.goToNextMonth(this.dayButtonFocussed);\n break;\n\n case \"previous-year-button\":\n this.goToPreviousYear(this.dayButtonFocussed);\n break;\n\n case \"next-year-button\":\n this.goToNextYear(this.dayButtonFocussed);\n break;\n }\n };\n\n private handleCalendarClick = (event: MouseEvent): void => {\n this.clearDialogDescription();\n event.stopImmediatePropagation();\n };\n\n /* Keyboard handlers */\n private handleCalendarKeyDown = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowDown\":\n this.dayPickerKeyboardNav = true;\n this.moveDays(7);\n break;\n\n case \"ArrowUp\":\n this.dayPickerKeyboardNav = true;\n this.moveDays(-7);\n break;\n\n case \"ArrowLeft\":\n this.dayPickerKeyboardNav = true;\n if (this.focussedDate)\n this.moveDays(-1 * this.getNextDayToFocus(this.focussedDate, false));\n break;\n\n case \"ArrowRight\":\n this.dayPickerKeyboardNav = true;\n if (this.focussedDate)\n this.moveDays(this.getNextDayToFocus(this.focussedDate, true));\n break;\n\n case \"PageUp\":\n this.dayPickerKeyboardNav = true;\n ev.shiftKey ? this.moveYears(-1) : this.moveMonths(-1);\n break;\n\n case \"PageDown\":\n this.dayPickerKeyboardNav = true;\n ev.shiftKey ? this.moveYears(1) : this.moveMonths(1);\n break;\n\n case \"Home\":\n this.dayPickerKeyboardNav = true;\n this.setFocussedDate(\n new Date(this.focussedYear, this.focussedMonth, 1)\n );\n break;\n\n case \"End\":\n this.dayPickerKeyboardNav = true;\n this.setFocussedDate(\n new Date(this.focussedYear, this.focussedMonth + 1, 0)\n );\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n default:\n handled = false;\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private monthPickerKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n this.updateFocussedMonth(-1);\n break;\n\n case \"ArrowDown\":\n case \"ArrowRight\":\n this.updateFocussedMonth(1);\n break;\n\n case \"Home\":\n this.updateFocussedMonth(-this.focussedMonth);\n break;\n\n case \"End\":\n this.updateFocussedMonth(11 - this.focussedMonth);\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n case \"Escape\":\n ev.stopImmediatePropagation();\n this.monthPickerVisible = false;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n break;\n\n default:\n handled = false;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private yearPickerKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = true;\n switch (ev.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\":\n this.updateFocussedYear(-1);\n break;\n\n case \"ArrowDown\":\n case \"ArrowRight\":\n this.updateFocussedYear(1);\n break;\n\n case \"Home\":\n if (this.focussedYear > this.decadeStart) {\n this.updateFocussedYear(this.decadeStart - this.focussedYear);\n }\n break;\n\n case \"End\":\n if (this.focussedYear < this.decadeEnd) {\n this.updateFocussedYear(this.decadeEnd - this.focussedYear);\n }\n break;\n\n case \"PageUp\":\n this.updateFocussedYear(-10);\n break;\n\n case \"PageDown\":\n this.updateFocussedYear(10);\n break;\n\n case \"Tab\":\n handled = this.calendarTabHandler(ev);\n break;\n\n case \"Escape\":\n ev.stopImmediatePropagation();\n this.yearPickerVisible = false;\n setTimeout(() => this.focusFocussedDay(), FOCUS_TIMER);\n break;\n\n default:\n handled = false;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private monthButtonKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = false;\n switch (ev.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n handled = true;\n this.goToPreviousMonth();\n break;\n\n case \"ArrowRight\":\n case \"ArrowDown\":\n handled = true;\n this.goToNextMonth();\n break;\n\n case \"Home\":\n handled = true;\n this.focusDay = false;\n this.moveMonths(-this.monthInView);\n break;\n\n case \"End\":\n handled = true;\n this.focusDay = false;\n this.moveMonths(11 - this.monthInView);\n break;\n\n case \"Tab\":\n if (ev.shiftKey) {\n handled = true;\n this.focusLastElement();\n }\n break;\n\n case \"Escape\":\n if (this.monthPickerVisible) {\n this.monthPickerVisible = false;\n ev.stopImmediatePropagation();\n }\n break;\n\n default:\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private yearButtonKeyDownHandler = (ev: KeyboardEvent): void => {\n let handled = false;\n switch (ev.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n handled = true;\n this.goToPreviousYear();\n break;\n\n case \"ArrowRight\":\n case \"ArrowDown\":\n handled = true;\n this.goToNextYear();\n break;\n\n case \"Home\":\n if (this.yearPickerVisible && this.yearInView > this.decadeStart) {\n handled = true;\n this.moveYears(this.decadeStart - this.yearInView);\n }\n break;\n\n case \"End\":\n if (this.yearPickerVisible && this.yearInView < this.decadeEnd) {\n handled = true;\n this.moveYears(this.decadeEnd - this.focussedYear);\n }\n break;\n\n case \"PageUp\":\n handled = true;\n this.focusDay = false;\n this.moveYears(-10);\n break;\n\n case \"PageDown\":\n handled = true;\n this.focusDay = false;\n this.moveYears(10);\n break;\n\n case \"Escape\":\n if (this.yearPickerVisible) {\n this.yearPickerVisible = false;\n ev.stopImmediatePropagation();\n }\n break;\n\n default:\n break;\n }\n\n if (handled) {\n ev.preventDefault();\n }\n };\n\n private todayButtonKeyDownHandler = (ev: KeyboardEvent) => {\n if (\n ev.key === \"Tab\" &&\n !ev.shiftKey &&\n this.clearButtonEl?.disabled &&\n this.parentIsDatePicker\n ) {\n this.focusFirstElement();\n ev.preventDefault();\n }\n };\n\n private clearButtonKeyDownHandler = (ev: KeyboardEvent) => {\n if (ev.key === \"Tab\" && !ev.shiftKey && this.parentIsDatePicker) {\n this.focusFirstElement();\n ev.preventDefault();\n }\n };\n\n private calendarTabHandler = (ev: KeyboardEvent): boolean => {\n let handled = false;\n if (\n !ev.shiftKey &&\n (!this.showTodayButton || this.isCurrentMonth()) &&\n (!this.showClearButton || this.clearButtonEl?.disabled) &&\n this.parentIsDatePicker\n ) {\n this.focusFirstElement();\n handled = true;\n } else if (ev.shiftKey) {\n this.yearButtonEl?.setFocus();\n handled = true;\n }\n return handled;\n };\n\n /* Utility functions */\n private setMonthSelectedLiveRegionText = () => {\n this.setAriaLiveRegionText(\n `${\n this.monthNames[this.monthInView]\n } selected. ${this.getMonthInViewText()}`\n );\n };\n\n private setYearSelectedLiveRegionText = () => {\n this.setAriaLiveRegionText(\n `${this.yearInView} selected. ${this.getMonthInViewText()}`\n );\n };\n\n private setDecadeView = (start: number) => {\n let currYear = start - 1;\n const decadeArr = [];\n while (currYear <= start + 10) {\n decadeArr.push(currYear);\n currYear++;\n }\n this.decadeView = decadeArr;\n this.decadeStart = decadeArr[1];\n this.decadeEnd = decadeArr[10];\n };\n\n private getMonthInViewText = () => {\n return `${this.monthNames[this.monthInView]} ${\n this.yearInView\n } currently in view.`;\n };\n\n private getDecadeInViewText = () => {\n return `${this.decadeStart} to ${this.decadeEnd} currently in view.`;\n };\n\n private isPrevYearAllowed = (): boolean => {\n return this.isYearAllowed(this.yearInView - 1);\n };\n\n private isNextYearAllowed = (): boolean => {\n return this.isYearAllowed(this.yearInView + 1);\n };\n\n private isYearAllowed = (yr: number): boolean =>\n yearInRange(yr, this.minDate, this.maxDate);\n\n private getMonthView = (date: Date): Date[] => {\n const start = getWeekStart(getMonthStart(date), this.startOfWeek);\n const end = addSixWeeks(start);\n\n const days: Date[] = [];\n let current = start;\n\n while (!dateMatches(current, end)) {\n days.push(current);\n current = new Date(current);\n current.setDate(current.getDate() + 1);\n }\n\n days.push(current);\n\n return days;\n };\n\n private isCurrentMonth = (): boolean => {\n const d = new Date();\n return (\n d.getFullYear() === this.yearInView && d.getMonth() === this.monthInView\n );\n };\n\n private updateMonthInView = (): void => {\n if (this.focussedDate) {\n this.currMonthView = this.getMonthView(this.focussedDate);\n\n this.focussedDay = this.focussedDate.getDate();\n this.monthInView = this.focussedDate.getMonth();\n this.yearInView = this.focussedDate.getFullYear();\n\n if (this.dayPickerKeyboardNav) {\n this.monthInViewUpdateHandled = true;\n this.setAriaLiveRegionText(this.getMonthInViewText());\n this.dayPickerKeyboardNav = false;\n }\n }\n };\n\n /* Mouse handlers */\n private navButtonMouseDownHandler = (ev: MouseEvent): void => {\n ev.preventDefault();\n };\n\n private handleCalendarMouseDown = (event: MouseEvent): void => {\n const target = event.target as HTMLElement;\n if (target.tagName !== \"IC-BUTTON\") {\n event.preventDefault();\n }\n };\n\n private handleSelectDay = (day: Date): void => {\n this.setSelectedDate(day);\n this.setFocussedDate(day);\n this.icCalendarDaySelect.emit();\n };\n\n private handleSelectMonth = (month: number): void => {\n this.moveMonths(month - this.monthInView);\n setTimeout(() => {\n this.monthButtonEl?.setFocus();\n this.monthPickerVisible = false;\n this.setMonthSelectedLiveRegionText();\n this.icCalendarMonthSelect.emit();\n }, FOCUS_TIMER);\n };\n\n private handleSelectYear = (year: number): void => {\n const yrPos = this.decadeView.indexOf(year);\n if (yrPos > 0 && yrPos < this.decadeView.length - 1) {\n this.moveYears(year - this.yearInView);\n this.focusDay = false;\n const monthName = this.monthNames[this.monthInView];\n this.setAriaLiveRegionText(\n `${year} selected. ${monthName} ${year} currently in view.`\n );\n setTimeout(() => {\n this.yearButtonEl?.setFocus();\n this.yearPickerVisible = false;\n this.icCalendarYearSelect.emit();\n }, FOCUS_TIMER);\n } else {\n const moveYears = year - this.focussedYear > 0 ? 10 : -10;\n this.updateFocussedYear(moveYears, this.yearButtonFocussed);\n this.setAriaLiveRegionText(this.getDecadeInViewText());\n }\n };\n\n private onDayButtonFocusHandler = () => {\n this.dayButtonFocussed = true;\n };\n\n private onDayButtonBlurHandler = () => {\n this.dayButtonFocussed = false;\n };\n\n private onYearButtonFocusHandler = () => {\n this.yearButtonFocussed = true;\n };\n\n private onYearButtonBlurHandler = () => {\n this.yearButtonFocussed = false;\n };\n\n /* Render helpers */\n private renderMonthYearNavButton = (\n id: string,\n flip: boolean,\n disabled: boolean\n ): void => {\n const buttonSize = this.size;\n return (\n <ic-button\n id={id}\n disableTooltip={true}\n disabled={disabled}\n onClick={this.monthYearNavClickHandler}\n class={{ flip: flip }}\n variant=\"icon-tertiary\"\n innerHTML={chevron}\n size={buttonSize}\n tabIndex={-1}\n aria-label={`Go to ${id.slice(0, -7).replace(\"-\", \" \")}`}\n onMouseDown={this.navButtonMouseDownHandler}\n />\n );\n };\n\n private previousMonthButton = (): void => {\n let disabled = false;\n if (this.disabled) {\n disabled = true;\n } else {\n if (this.focussedDate !== null && this.minDate !== null) {\n const yearMatch =\n this.focussedDate.getFullYear() === this.minDate.getFullYear();\n if (yearMatch) {\n disabled = this.monthInView - 1 < this.minDate.getMonth();\n }\n }\n }\n return this.renderMonthYearNavButton(\n \"previous-month-button\",\n true,\n disabled\n );\n };\n\n private nextMonthButton = (): void => {\n let disabled = false;\n if (this.disabled) {\n disabled = true;\n } else {\n if (this.focussedDate !== null && this.maxDate !== null) {\n const yearMatch =\n this.focussedDate.getFullYear() === this.maxDate.getFullYear();\n if (yearMatch) {\n disabled = this.monthInView + 1 > this.maxDate.getMonth();\n }\n }\n }\n return this.renderMonthYearNavButton(\"next-month-button\", false, disabled);\n };\n\n private previousYearButton = (): void => {\n return this.renderMonthYearNavButton(\n \"previous-year-button\",\n true,\n this.disabled || !this.isPrevYearAllowed()\n );\n };\n\n private nextYearButton = (): void => {\n return this.renderMonthYearNavButton(\n \"next-year-button\",\n false,\n this.disabled || !this.isNextYearAllowed()\n );\n };\n\n render() {\n const {\n dialogDescription,\n monthNames,\n focussedMonth,\n focussedYear,\n monthInView,\n yearInView,\n monthPickerVisible,\n yearPickerVisible,\n decadeView,\n minDate,\n maxDate,\n orderedDaysOfWeek,\n parentIsDatePicker,\n showClearButton,\n showTodayButton,\n size,\n theme,\n } = this;\n\n let monthButtonText = \"\";\n if (monthPickerVisible) {\n monthButtonText = `Use the arrow keys to change the selected month. To return to day picker view, press Enter or Space to select a month, or press Escape.`;\n } else {\n monthButtonText = `Press Enter or Space to open month picker view or use the arrow keys to change month.`;\n }\n\n let yearButtonText = \"\";\n if (yearPickerVisible) {\n yearButtonText = `Use the arrow keys to change the selected year. To return to day picker view, press Enter or Space to select a year, or press Escape.`;\n } else {\n yearButtonText = `Press Enter or Space to open year picker view or use the arrow keys to change the selected year.`;\n }\n\n const dialogLabel = \"choose date\";\n\n const monthLabel =\n monthNames && monthNames[monthInView]\n ? monthNames[monthInView]\n : \"Open month picker\";\n const yearLabel = this.yearInView ? this.yearInView : \"Open year picker\";\n\n let minDay = minDate;\n if (minDate && this.disablePast) {\n const yesterday = new Date(minDate);\n yesterday.setDate(minDate.getDate() - 1);\n minDay = yesterday;\n }\n\n const weeks = [];\n for (let i = 0; i < this.currMonthView.length; i += 7) {\n weeks.push(this.currMonthView.slice(i, i + 7));\n }\n\n return (\n <Host\n class={{\n [`ic-calendar-${size}`]: true,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n >\n <div>\n <span id=\"dialog-description\" class=\"sr-only\">\n {dialogDescription}\n </span>\n <div\n {...(parentIsDatePicker && {\n role: \"dialog\",\n \"aria-modal\": \"true\",\n })}\n aria-label={dialogLabel}\n aria-describedBy=\"dialog-description\"\n class={{\n \"calendar-container\": true,\n }}\n onMouseDown={this.handleCalendarMouseDown}\n onClick={this.handleCalendarClick}\n >\n <span\n ref={(el) => (this.liveRegionEl = el)}\n id=\"live-region\"\n aria-live=\"assertive\"\n class=\"sr-only\"\n ></span>\n <div\n class={{\n \"month-year-nav-container\": true,\n }}\n >\n <div class=\"month-year-nav\">\n {this.previousMonthButton()}\n <span id=\"select-month-hint\" aria-hidden=\"true\">\n {monthButtonText}\n </span>\n <ic-button\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.monthButtonEl = el)\n }\n size={size}\n class=\"month-picker-button\"\n disabled={this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded={monthPickerVisible ? \"true\" : \"false\"}\n full-width=\"true\"\n variant=\"tertiary\"\n aria-label={monthLabel}\n aria-describedby=\"select-month-hint\"\n onKeyDown={this.monthButtonKeyDownHandler}\n onClick={this.monthButtonClickHandler}\n >\n {monthNames[monthInView]}\n </ic-button>\n {this.nextMonthButton()}\n </div>\n <div class=\"month-year-nav\">\n {this.previousYearButton()}\n <span id=\"select-year-hint\" aria-hidden=\"true\">\n {yearButtonText}\n </span>\n <ic-button\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.yearButtonEl = el)\n }\n size={size}\n class=\"year-picker-button\"\n disabled={this.disabled}\n aria-haspopup=\"menu\"\n aria-expanded={yearPickerVisible ? \"true\" : \"false\"}\n full-width=\"true\"\n variant=\"tertiary\"\n aria-label={yearLabel}\n aria-describedby=\"select-year-hint\"\n onKeyDown={this.yearButtonKeyDownHandler}\n onClick={this.yearButtonClickHandler}\n >\n {this.yearInView}\n </ic-button>\n {this.nextYearButton()}\n </div>\n </div>\n {!(monthPickerVisible || yearPickerVisible) && (\n <table\n role=\"grid\"\n class={{\n calendar: true,\n hidden: monthPickerVisible || yearPickerVisible,\n }}\n onKeyDown={this.handleCalendarKeyDown}\n >\n <thead class=\"weekdays-container\">\n <tr class=\"weekdays\">\n {orderedDaysOfWeek.map((dayName) => {\n const header =\n size === \"small\" ? dayName.charAt(0) : dayName;\n return (\n <th scope=\"col\" class=\"calendar-day-header\">\n {header}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody class=\"calendar-days-container\">\n {weeks.map((week, weekIdx) => (\n <tr key={weekIdx}>\n {week.map((day) => (\n <td key={day.toISOString()}>\n <DayButton\n day={day}\n disableDay={\n this.disabled ||\n this.disableDays?.includes(Number(day.getDay()))\n }\n today={dateMatches(day, this.today)}\n selected={dateMatches(day, this.selectedDate)}\n focussed={dateMatches(day, this.focussedDate)}\n inRange={dateInRange(day, minDay, maxDate)}\n monthInView={monthInView}\n onSelectDay={this.handleSelectDay}\n focussedDayRef={this.setFocussedDayEl}\n onFocusDay={this.onDayButtonFocusHandler}\n onBlurDay={this.onDayButtonBlurHandler}\n showDaysOutsideMonth={this.showDaysOutsideMonth}\n />\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n <div\n class={{\n \"month-picker-container\": true,\n hidden: !monthPickerVisible,\n }}\n >\n {monthPickerVisible && (\n <MonthPicker\n size={size}\n onSelectMonth={this.handleSelectMonth}\n monthInView={monthInView}\n focussedMonth={focussedMonth}\n onKeyDown={this.monthPickerKeyDownHandler}\n focussedMonthRef={this.setFocussedMonthEl}\n minDate={minDate}\n maxDate={maxDate}\n yearInView={yearInView}\n ></MonthPicker>\n )}\n </div>\n <div\n class={{\n \"year-picker-container\": true,\n hidden: !yearPickerVisible,\n }}\n >\n {yearPickerVisible && (\n <YearPicker\n decadeView={decadeView}\n size={size}\n focussedYear={focussedYear}\n onSelectYear={this.handleSelectYear}\n onKeyDown={this.yearPickerKeyDownHandler}\n onFocusYear={this.onYearButtonFocusHandler}\n onBlurYear={this.onYearButtonBlurHandler}\n yearInView={yearInView}\n minDate={minDate}\n maxDate={maxDate}\n focussedYearRef={this.setFocussedYearEl}\n ></YearPicker>\n )}\n </div>\n <div\n class={{\n \"bottom-buttons\": true,\n \"no-today\": !showTodayButton,\n }}\n >\n {showTodayButton && (\n <ic-button\n id=\"today-button\"\n variant=\"tertiary\"\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.todayButtonEl = el)\n }\n size={size}\n aria-label=\"Navigate to current date\"\n onClick={this.todayButtonClickHandler}\n onKeyDown={this.todayButtonKeyDownHandler}\n disabled={this.isCurrentMonth()}\n >\n Go to today\n </ic-button>\n )}\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"clear selected date\"\n ref={(el: HTMLIcButtonElement | undefined) =>\n (this.clearButtonEl = el)\n }\n variant=\"tertiary\"\n size={size}\n onClick={this.clearButtonClickHandler}\n onKeyDown={this.clearButtonKeyDownHandler}\n disabled={\n this.value === \"\" ||\n this.value === null ||\n this.value === undefined\n }\n >\n Clear\n </ic-button>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import \"../../global/normalize.css\";\n\n:host {\n --ic-input-label-helpertext-padding: var(--ic-space-xs);\n --input-bg-color: var(--ic-date-input-bg);\n --ic-input-label-text-color: var(--ic-date-input-label);\n --ic-input-label-helper-text-color: var(--ic-date-input-subtitle);\n --border-color: var(--ic-date-input-border);\n --border-color-disabled: var(--ic-date-input-border-disabled);\n --border-color-hover: var(--ic-date-input-border-default-hover);\n --border-color-pressed: var(--ic-date-input-border-default-pressed);\n --border-error-color: var(--ic-date-input-border-error);\n --border-error-color-hover: var(--ic-date-input-border-error-hover);\n --border-error-color-pressed: var(--ic-date-input-border-error-pressed);\n --border-success-color: var(--ic-date-input-border-success);\n --border-success-color-hover: var(--ic-date-input-border-success-hover);\n --border-success-color-pressed: var(--ic-date-input-border-success-pressed);\n --border-warning-color: var(--ic-date-input-border-warning);\n --border-warning-color-hover: var(--ic-date-input-border-warning-hover);\n --border-warning-color-pressed: var(--ic-date-input-border-warning-pressed);\n}\n\n:host(.ic-date-input-disabled) {\n --ic-input-label-text-color: var(--ic-date-input-label-disabled);\n --ic-input-label-helper-text-color: var(--ic-date-input-subtitle-disabled);\n}\n\ninput {\n border: 0;\n height: 100%;\n padding: 0;\n outline: none;\n background: none;\n -moz-appearance: textfield;\n appearance: textfield;\n color: var(--ic-date-input-text-filled);\n caret-color: var(--ic-date-input-typing-cursor);\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n}\n\ninput:-webkit-autofill {\n box-shadow: 0 0 0 var(--ic-space-sm) var(--ic-color-background-primary) inset;\n -webkit-text-fill-color: var(--ic-date-input-text-filled) !important;\n}\n\ninput::placeholder {\n color: var(--ic-date-input-text-placeholder);\n}\n\nic-input-component-container {\n cursor: text;\n}\n\nic-input-component-container .focus-indicator {\n padding: var(--ic-space-xxxs) var(--ic-space-xs);\n align-items: center;\n}\n\n.date-inputs {\n color: var(--ic-date-input-text-placeholder);\n}\n\n.day-input {\n width: 1.438rem;\n}\n\n.month-input {\n width: 1.813rem;\n}\n\n.year-input,\n.year-input.fit-to-value {\n width: 2.313rem;\n}\n\n.fit-to-value {\n width: 1.25rem;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n.input-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n}\n\n.action-buttons {\n display: flex;\n align-items: center;\n}\n\n.show-calendar-button-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.clear-button,\n.calendar-button {\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n margin: 0;\n}\n\n.clear-button.hidden {\n display: none;\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active,\n.calendar-button:active {\n background-color: var(--ic-color-focus-inner) !important;\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer) !important;\n border-radius: 0.25rem;\n}\n\n.calendar-button:focus,\n.calendar-button:active {\n --ic-button-tertiary-text-active: var(--ic-atoms-input-clear-button-focus);\n --ic-button-tertiary-text-hover-active: var(\n --ic-atoms-input-clear-button-focus\n );\n --ic-button-tertiary-text-pressed-active: var(\n --ic-atoms-input-clear-button-focus\n );\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active *,\n.calendar-button:active * {\n fill: var(--ic-atoms-input-clear-button-focus);\n}\n\n.clear-button svg {\n color: var(--ic-date-input-clear-icon);\n}\n\n.clear-button:focus svg {\n color: var(--ic-atoms-input-clear-button-focus);\n}\n\n.divider {\n margin: 0 var(--ic-space-xxs);\n width: var(--ic-space-1px);\n background-color: var(--ic-atoms-input-divider);\n border-radius: var(--ic-space-1px);\n}\n\n.divider.small {\n height: var(--ic-space-md);\n}\n\n.divider.medium {\n height: calc(var(--ic-space-sm) + var(--ic-space-xs));\n}\n\n.divider.large {\n height: var(--ic-space-lg);\n}\n\nic-input-validation {\n --ic-input-validation-status-text-color: var(--ic-date-input-status-text);\n --ic-input-validation-error: var(--ic-date-input-icon-error);\n --ic-input-validation-warning-icon-color: var(--ic-date-input-icon-warning);\n --ic-input-validation-success-icon-color: var(--ic-date-input-icon-success);\n}\n\n@media (forced-colors: active) {\n .clear-button svg {\n color: currentcolor;\n }\n}\n","/* eslint-disable react/jsx-no-bind */\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Host,\n Method,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcAriaLive,\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n IcDateFormat,\n IcDateInputMonths,\n IcDateValueFormat,\n IcDayNames,\n IcWeekDays,\n IcThemeMode,\n} from \"../../utils/types\";\nimport {\n convertToDoubleDigits,\n createDate,\n dateMatches,\n extractDateFromZuluDateTime,\n isDateOrEpoch,\n splitStringDate,\n} from \"../../utils/date-helpers\";\nimport {\n addFormResetListener,\n getInputDescribedByText,\n isEmptyString,\n isNumeric,\n onComponentRequiredPropUndefined,\n removeDisabledFalse,\n removeFormResetListener,\n renderHiddenInput,\n stringEnumToArray,\n} from \"../../utils/helpers\";\nimport Clear from \"../../assets/clear-icon.svg\";\nimport Calendar from \"../../assets/calendar.svg\";\n\nlet inputIds = 0;\n\n/**\n * @slot helper-text - Content is set as the helper text for the date input.\n */\n@Component({\n tag: \"ic-date-input\",\n styleUrl: \"ic-date-input.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class DateInput {\n private DEFAULT_DATE_FORMAT: IcDateFormat = \"DD/MM/YYYY\";\n private ARIA_INVALID = \"aria-invalid\";\n private ARIA_LABEL = \"aria-label\";\n private ARIA_LABELLED_BY = \"aria-labelledby\";\n private assistiveHintId: string;\n private calendarButtonEl: HTMLIcButtonElement;\n private dayInputEl?: HTMLInputElement;\n private defaultHelperText: string;\n private EVENT_OBJECT_STRING = \"[object Event]\";\n private FIT_TO_VALUE = \"fit-to-value\";\n\n private initialValue = this.value;\n private inputCompContainerEl: HTMLIcInputComponentContainerElement;\n private INPUT_EVENT_OBJECT_STRING = \"[object InputEvent]\";\n private inputsInOrder: HTMLInputElement[] = [];\n\n private isAfterMax: boolean = false;\n private isBeforeMin: boolean = false;\n private preventInputsUpdating: boolean = false;\n private isDisabledDate: boolean = false;\n private isPasteValidationDisplayed: boolean;\n private isValidDay: boolean = true;\n private isValidMonth: boolean = true;\n private isValidDate: boolean = true;\n private isZuluTime: boolean = false;\n\n private KEYBOARD_EVENT_OBJECT_STRING = \"[object KeyboardEvent]\";\n private MAX_DAY = 31;\n private MAX_MONTH = 12;\n private monthInputEl?: HTMLInputElement;\n\n private preventAutoFormatting: boolean;\n private preventDayInput: boolean;\n private preventMonthInput: boolean;\n private preventYearInput: boolean;\n\n private previousInvalidDateTest: string;\n private previousSelectedDate: Date | null = null;\n\n private selectedDate: Date | null = null;\n private selectedDateInfoEl?: HTMLSpanElement;\n private screenReaderInfoId: string;\n private selectedDateInfoId: string;\n\n private yearInputEl?: HTMLInputElement;\n\n private externalSetDate: boolean = false;\n private clearInput: boolean = false;\n\n private calendarIsOpen: boolean = false;\n\n @Element() el: HTMLIcDateInputElement;\n\n @State() invalidDateText: string;\n @State() maxDate: Date;\n @State() minDate: Date;\n @State() calendarFocused: boolean = false;\n @State() clearButtonFocused: boolean = false;\n @State() removeLabelledBy: boolean = false;\n\n @State() day: string = \"\";\n @State() month: string = \"\";\n @State() year: string = \"\";\n\n @Watch(\"day\")\n @Watch(\"month\")\n @Watch(\"year\")\n watchInputHandler(): void {\n if (\n this.emitDatePartChange &&\n !this.externalSetDate &&\n !this.clearInput &&\n !(this.day && this.month && this.year) &&\n this.selectedDate === null\n ) {\n this.emitIcChange(this.selectedDate);\n }\n }\n\n /**\n * The format in which the date will be displayed.\n */\n @Prop() dateFormat: IcDateFormat = this.DEFAULT_DATE_FORMAT;\n /**\n * If `true`, every individual input field completed will emit an icChange event.\n */\n @Prop() emitDatePartChange?: boolean = false;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * The days of the week to disable.\n */\n @Prop({ mutable: true }) disableDays: IcWeekDays[] = [];\n\n /**\n * The text to display as the validation message when `disableDays` is set and a disabled date is entered.\n */\n @Prop() disableDaysMessage: string =\n \"The date you have selected is on a day of the week that is not allowed. Please select another date.\";\n\n /**\n * If `true`, dates in the future are not allowed. A validation message will appear if a date in the future is entered.\n */\n @Prop() disableFuture?: boolean = false;\n\n @Watch(\"disableFuture\")\n watchDisableFutureHandler(): void {\n this.watchMaxHandler();\n }\n\n /**\n * The text to display as the validation message when `disableFuture` is true and a date in the future is entered.\n */\n @Prop() disableFutureMessage: string =\n \"Dates in the future are not allowed. Please select a date in the past.\";\n\n /**\n * If `true`, dates in the past are not allowed. A validation message will appear if a date in the past is entered.\n */\n @Prop() disablePast?: boolean = false;\n\n @Watch(\"disablePast\")\n watchDisablePastHandler(): void {\n this.watchMinHandler();\n }\n\n /**\n * The text to display as the validation message when `disablePast` is true and a date in the past is entered.\n */\n @Prop() disablePastMessage: string =\n \"Dates in the past are not allowed. Please select a date in the future.\";\n\n /**\n * The helper text that will be displayed for additional field guidance. This will default to the text \"Use format\" along with the `dateFormat` value.\n */\n @Prop({ mutable: true }) helperText: string | null;\n\n /**\n * If `true`, the helper text will be visually hidden, but still read out by screenreaders.\n */\n @Prop() hideHelperText: boolean = false;\n\n /**\n * If `true`, the label will be visually hidden, but will still be read out by screen readers.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId: string = `ic-date-input-${inputIds++}`;\n\n /**\n * The text to display as the validation message when an invalid date is entered.\n */\n @Prop() invalidDateMessage: string = \"Please enter a valid date.\";\n\n /**\n * The label for the date input.\n */\n @Prop() label!: string;\n\n /**\n * The latest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disableFuture` is set to `true`.\n */\n @Prop() max: string | Date = \"\";\n\n @Watch(\"max\")\n watchMaxHandler(): void {\n if (this.disableFuture) {\n this.maxDate = new Date();\n } else {\n this.maxDate = createDate(this.max, this.dateFormat);\n }\n }\n\n /**\n * The earliest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disablePast` is set to `true`.\n */\n @Prop() min: string | Date = \"\";\n\n @Watch(\"min\")\n watchMinHandler(): void {\n if (this.disablePast) {\n this.minDate = new Date();\n } else {\n this.minDate = createDate(this.min, this.dateFormat);\n }\n }\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * If `true`, the input will require a value.\n */\n @Prop() required: boolean = false;\n\n @Watch(\"required\")\n watchRequiredHandler(): void {\n // Prevent asterisk being read out after the label by screen reader (by applying aria-hidden)\n // Needed because label is included in 'aria-labelledby' instead of using 'aria-label'\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n if (this.required) {\n const asteriskSpan = document.createElement(\"span\");\n asteriskSpan.setAttribute(\"id\", \"asterisk-span\");\n asteriskSpan.setAttribute(\"aria-hidden\", \"true\");\n asteriskSpan.textContent = \" *\";\n labelEl?.appendChild(asteriskSpan);\n } else {\n const asteriskSpan = this.el.shadowRoot?.querySelector(\"#asterisk-span\");\n if (asteriskSpan) {\n asteriskSpan.remove();\n }\n }\n }\n\n /**\n * @internal If `true`, a button which displays the calendar view when clicked will be displayed.\n */\n @Prop() showCalendarButton?: boolean = false;\n\n /**\n * If `true`, a button which clears the date input when clicked will be displayed.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * The size of the date input to be displayed.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * Sets the date picker to the dark or light theme colors. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The value of the date input. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true }) value?: IcDateValueFormat = \"\";\n\n /**\n * The value of the `aria-live` attribute on the validation message.\n */\n @Prop() validationAriaLive: IcAriaLive = \"polite\";\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'. This will override the built-in date validation.\n */\n @Prop({ mutable: true }) validationStatus: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message. This will override the built-in date validation.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * @internal Emitted when the calendar is opened.\n */\n @Event() calendarButtonClicked: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() icBlur: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<{\n value: Date | null;\n dateObject: {\n day: string | null;\n month: string | null;\n year: string | null;\n };\n utcValue: Date | null;\n }>;\n\n /**\n * Emitted when the input gains focus.\n */\n @Event() icFocus: EventEmitter<{ value: Date | null }>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n }\n\n componentWillLoad(): void {\n this.defaultHelperText = `Use format ${this.dateFormat}`;\n\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n this.watchMinHandler();\n this.watchMaxHandler();\n\n if (this.value) {\n this.externalSetDate = true;\n this.setDate(this.value);\n }\n\n this.screenReaderInfoId = `${this.inputId}-screen-reader-info`;\n this.assistiveHintId = `${this.inputId}-assistive-hint`;\n this.selectedDateInfoId = `${this.inputId}-selected-date-info`;\n\n addFormResetListener(this.el, this.handleFormReset);\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.setInputsInOrder();\n\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Date Input\"\n );\n\n if (this.value) {\n this.updateInputValues(this.day, this.month, this.year);\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n\n if (this.value) {\n this.notifyScreenReaderSelectedDate();\n }\n\n this.inputsInOrder.forEach((input) => {\n input.addEventListener(\"input\", this.handleInput);\n input.addEventListener(\"focus\", this.handleFocus);\n input.addEventListener(\"blur\", this.handleBlur);\n });\n\n this.watchRequiredHandler();\n }\n\n componentWillUpdate(): void {\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n if (!this.preventInputsUpdating) this.setDate(this.value);\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n this.handleDateChange(false);\n this.preventInputsUpdating = false;\n }\n\n componentDidRender(): void {\n if (this.removeLabelledBy) {\n this.removeAriaLabelledBy();\n return;\n }\n\n this.setAriaLabelledBy();\n }\n\n /**\n * Returns the value as a Date object\n * @returns Date\n */\n @Method()\n async getDate(): Promise<Date | null> {\n return this.selectedDate;\n }\n\n /**\n * @internal Sets focus on the calendar button.\n */\n @Method()\n async setCalendarFocus(): Promise<void> {\n if (this.calendarButtonEl) {\n this.calendarButtonEl.focus();\n }\n }\n\n /**\n * @internal Used to pass disabledDays from parent component.\n */\n @Method()\n async setDisableDays(days: IcWeekDays[]): Promise<void> {\n this.disableDays = days;\n }\n\n /**\n * @internal Used to enable other components to invoke an IcChange event from the input.\n */\n @Method()\n async triggerIcChange(d: Date | null): Promise<void> {\n this.externalSetDate = true;\n this.setDate(d);\n this.emitIcChange(d);\n this.externalSetDate = false;\n }\n\n private setInputPasteValue = (\n input: EventTarget | null,\n pastedValue: string\n ) => {\n if (input) {\n const inputEl = input as HTMLInputElement;\n\n inputEl.value = pastedValue;\n inputEl.classList.add(this.FIT_TO_VALUE);\n }\n };\n\n private checkSingleCopiedValueIsValid = (\n input: EventTarget | null,\n pastedValue: string\n ) => {\n let isValid = false;\n const value = Number(pastedValue);\n\n switch (input) {\n case this.dayInputEl:\n isValid = value >= 1 && value <= this.MAX_DAY;\n break;\n case this.monthInputEl:\n isValid = value >= 1 && value <= this.MAX_MONTH;\n break;\n case this.yearInputEl:\n isValid = true;\n break;\n }\n\n return isValid;\n };\n\n /**\n * Using Object.prototype.string to determine type if event from user\n * @param event - event object used to differentiate keyboard, generic or input event\n * @returns boolean\n */\n private isKeyboardOrEvent = (event: Event) => {\n return (\n Object.prototype.toString.call(event) === this.EVENT_OBJECT_STRING ||\n Object.prototype.toString.call(event) ===\n this.KEYBOARD_EVENT_OBJECT_STRING\n );\n };\n\n private setDateValidity = () => {\n if (!isEmptyString(this.day)) {\n this.isValidDay = +this.day > this.MAX_DAY ? false : true;\n } else {\n this.isValidDay = true;\n }\n\n if (!isEmptyString(this.month)) {\n this.isValidMonth = +this.month > this.MAX_MONTH ? false : true;\n } else {\n this.isValidMonth = true;\n }\n };\n\n private handleInput = (event: Event) => {\n const inputEvent = event as InputEvent;\n const input = event.target as HTMLInputElement;\n\n if (input !== this.yearInputEl) {\n // Only auto-format if input event is not a character being deleted\n // and not as user is changing value using up / down keys\n if (\n inputEvent.inputType !== \"deleteContentBackward\" &&\n !this.preventAutoFormatting\n ) {\n if (\n input.value.length === 1 &&\n ((input === this.dayInputEl && +input.value >= 4) ||\n (input === this.monthInputEl && +input.value >= 2)) &&\n +input.value <= 9\n ) {\n this.setInputValue(input);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n }\n\n if (input.value.length === 2) {\n if (+input.value === 0) {\n input.value = \"01\";\n }\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n } else {\n this.setPreventInput(input, false);\n }\n } else if (this.preventAutoFormatting) {\n /**\n * Using arrow keys prevents auto formatting so need to deal with\n * switching from arrow keys to inputting numbers\n **/\n if (input.value.length === 2 && !this.isKeyboardOrEvent(event)) {\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.moveToNextInput(input);\n } else {\n this.setInputValue(input);\n }\n }\n\n if (input.value.length !== 2) {\n this.setPreventInput(input, false);\n }\n } else {\n if (input.value.length === 4) {\n this.setInputValue(input);\n if (\n Object.prototype.toString.call(event) !== this.EVENT_OBJECT_STRING\n ) {\n this.moveToNextInput(input);\n }\n this.setPreventInput(input, true);\n } else {\n this.setPreventInput(input, false);\n }\n }\n\n // Add / remove class to make input width match size of value i.e. 2 digits' width for day / month, 4 for year\n this.setFitToValueStyling(input);\n\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n\n this.notifyScreenReader(input, event);\n };\n\n private handleKeyDown = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const input = event.target as HTMLInputElement;\n\n const eventKey = event.key?.toLowerCase();\n // Regex required due to FF allowing all characters as values for number text field.\n const regex =\n /-?\\d*\\.?\\d+(e[-+]?\\d+)?|[/-]|arrowup|arrowdown|arrowleft|arrowright|shift|tab|backspace|delete/;\n if (\n !regex.test(eventKey) &&\n !(\n (event.ctrlKey || event.metaKey) &&\n (eventKey === \"v\" || eventKey === \"c\")\n )\n ) {\n event.preventDefault();\n }\n\n switch (eventKey) {\n case \"/\":\n case \"-\":\n case \".\":\n event.preventDefault();\n this.setPasteInvalidText();\n this.moveToNextInput(input);\n break;\n case \"arrowright\":\n case \"arrowleft\":\n event.preventDefault();\n this.handleLeftRightArrowKeyPress(input, eventKey);\n break;\n case \"arrowup\":\n case \"arrowdown\":\n this.preventAutoFormatting = true;\n this.handleUpDownArrowKeyPress(input, event);\n break;\n case \"backspace\":\n if (input.value.length === 0) {\n event.preventDefault();\n this.moveToPreviousInput(input);\n }\n break;\n default:\n break;\n }\n\n this.preventInput(event, isInputPrevented);\n this.preventInputsUpdating = true;\n };\n\n private handleFocus = (event: FocusEvent) => {\n // Highlight / select all characters in input for easy replacement\n const input = event.target as HTMLInputElement;\n\n input.select();\n };\n\n private handleBlur = (event: FocusEvent) => {\n const input = event.target;\n if (input) {\n this.setPasteInvalidText();\n this.autocompleteInput(input as HTMLInputElement);\n }\n };\n\n private handleLeftRightArrowKeyPress = (\n input: HTMLInputElement,\n key: string\n ) => {\n if (key === \"arrowright\") {\n this.moveToNextInput(input);\n } else {\n this.moveToPreviousInput(input);\n }\n\n this.setPasteInvalidText();\n };\n\n private notifyScreenReaderSelectedDate = () => {\n if (this.selectedDate && this.selectedDateInfoEl) {\n const dayNames = stringEnumToArray(IcDayNames);\n const months = stringEnumToArray(IcDateInputMonths);\n\n this.selectedDateInfoEl.textContent = `Selected date: ${\n dayNames[this.selectedDate.getDay()]\n }, ${this.selectedDate.getDate()} ${\n months[this.selectedDate.getMonth()]\n } ${this.selectedDate.getFullYear()}`;\n }\n };\n\n private handleUpDownArrowKeyPress = (\n input: HTMLInputElement,\n event: KeyboardEvent\n ) => {\n const minValue = input === this.yearInputEl ? 0 : 1;\n\n let maxValue = 9999;\n\n switch (input) {\n case this.dayInputEl:\n maxValue = this.MAX_DAY;\n break;\n case this.monthInputEl:\n maxValue = this.MAX_MONTH;\n break;\n case this.yearInputEl:\n maxValue = 9999;\n }\n\n // Make value loop round when min / max reached\n if (input?.value) {\n if (event.key === \"ArrowUp\") {\n if (+input.value === maxValue) {\n event.preventDefault();\n input.value = `0${minValue}`;\n } else {\n input.value =\n +input.value + 1 < 10\n ? `0${+input.value + 1}`\n : (+input.value + 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n\n if (event.key === \"ArrowDown\") {\n if (+input.value === minValue) {\n event.preventDefault();\n input.value = maxValue.toString();\n } else {\n input.value =\n +input.value - 1 < 10\n ? `0${+input.value - 1}`\n : (+input.value - 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n } else {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n input.value =\n input === this.yearInputEl\n ? new Date().getFullYear().toString()\n : maxValue.toString();\n this.notifyScreenReader(input, event);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n input.value =\n input === this.yearInputEl\n ? new Date().getFullYear().toString()\n : `0${minValue}`;\n this.notifyScreenReader(input, event);\n }\n }\n\n this.setInputValue(input);\n this.setFitToValueStyling(input);\n };\n\n private handleDateChange = (force: boolean) => {\n // Prevent icChange being emitted when each individual input is changed\n // This method is used within componentWillUpdate instead of using @Watch('value');\n if (force || !dateMatches(this.selectedDate, this.previousSelectedDate)) {\n if (this.value) {\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n if (this.day && this.month && this.year && this.invalidDateText === \"\") {\n this.setValueAndEmitChange(this.selectedDate);\n this.notifyScreenReaderSelectedDate();\n } else if (\n !(this.selectedDate === null && this.previousSelectedDate === null) &&\n this.selectedDateInfoEl\n ) {\n this.setValueAndEmitChange(null);\n this.selectedDateInfoEl.textContent = \"\";\n }\n this.previousSelectedDate = this.selectedDate;\n\n if (!this.preventInputsUpdating) {\n this.updateInputValues(this.day, this.month, this.year);\n }\n }\n };\n\n private slicePastedDate = (valueLength: number, datePart: string): string => {\n return datePart.length > valueLength\n ? datePart.slice(0, valueLength)\n : datePart;\n };\n\n private isPastedStringDateValid = (value: string) => {\n if (\n /\\d+-\\d+-\\d+$/.test(value) ||\n /\\d+\\/\\d+\\/\\d+/.test(value) ||\n /\\d+\\.\\d+\\.\\d+/.test(value)\n ) {\n return true;\n }\n\n if (\n /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::[0-9]{2}(?:\\.\\d+)?)?Z/.test(\n value\n )\n ) {\n this.isZuluTime = true;\n return true;\n }\n\n return false;\n };\n\n // Set value of each input to value of pasted date part\n // Allows formats separated by '-' or '/'\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n\n const pastedValue = event.clipboardData?.getData(\"Text\") || \"\";\n const isValidDate = this.isPastedStringDateValid(pastedValue);\n\n this.setPastedValueAndValidation(isValidDate, pastedValue, event);\n };\n\n private setDate = (date?: string | Date | null) => {\n if (date === null || date === \"\" || date === undefined) {\n if (this.day) this.day = \"\";\n if (this.month) this.month = \"\";\n if (this.year) this.year = \"\";\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setPreventInput(input, false);\n });\n this.handleDateChange(true);\n } else {\n if (isDateOrEpoch(date)) {\n let newDate;\n if (typeof date === \"string\") {\n // Checking if epoch date time\n newDate = new Date(+date);\n } else {\n newDate = date;\n }\n\n this.day = convertToDoubleDigits(newDate.getDate());\n this.month = convertToDoubleDigits(newDate.getMonth() + 1);\n this.year = newDate.getFullYear().toString();\n } else if (typeof date === \"string\") {\n const defaultDateArray = splitStringDate(date, this.dateFormat);\n this.selectedDate = new Date(\n Number(defaultDateArray[0]),\n Number(defaultDateArray[1]) - 1,\n Number(defaultDateArray[2])\n );\n this.year = defaultDateArray[0];\n this.month = defaultDateArray[1];\n this.day = defaultDateArray[2];\n this.setValueAndEmitChange(this.selectedDate);\n }\n }\n\n this.setValidationMessage();\n };\n\n private formatMinMax = (date: Date) => {\n let formattedDate;\n\n const day = convertToDoubleDigits(date.getDate());\n const month = convertToDoubleDigits(date.getMonth() + 1);\n const year = date.getFullYear();\n\n switch (this.dateFormat) {\n case this.DEFAULT_DATE_FORMAT:\n formattedDate = `${day}/${month}/${year}`;\n break;\n case \"MM/DD/YYYY\":\n formattedDate = `${month}/${day}/${year}`;\n break;\n case \"YYYY/MM/DD\":\n formattedDate = `${year}/${month}/${day}`;\n break;\n default:\n break;\n }\n return formattedDate;\n };\n private updateInputValues = (day: string, month: string, year: string) => {\n if (this.dayInputEl && this.monthInputEl && this.yearInputEl) {\n this.dayInputEl.value = day;\n this.monthInputEl.value = month;\n this.yearInputEl.value = year;\n }\n };\n\n // Set value in state based on input\n private setInputValue = (input: HTMLInputElement, clear = false) => {\n const newValue = clear ? \"\" : input.value;\n\n switch (input) {\n case this.dayInputEl:\n this.day = newValue;\n break;\n case this.monthInputEl:\n this.month = newValue;\n break;\n case this.yearInputEl:\n if (this.year !== newValue) {\n this.year = newValue;\n }\n }\n\n this.setValidationMessage();\n };\n\n private setValidationMessage = () => {\n this.setDateValidity();\n\n if (\n !isEmptyString(this.day) &&\n !isEmptyString(this.month) &&\n !isEmptyString(this.year)\n ) {\n // Check whether date actually exists\n // (used https://www.hectane.com/blog/javascript-date-validation-with-leap-year)\n this.selectedDate = this.convertToDate(this.year, this.month, this.day);\n this.isValidDate =\n !!this.selectedDate && this.selectedDate.getDate() == +this.day;\n this.isDisabledDate = this.isSelectedDateDisabled();\n\n if (!this.isValidDate || this.isDisabledDate) {\n this.inputsInOrder.forEach((input) =>\n input.setAttribute(this.ARIA_INVALID, \"true\")\n );\n } else {\n this.inputsInOrder.forEach((input) =>\n input.removeAttribute(this.ARIA_INVALID)\n );\n }\n } else {\n this.selectedDate = null;\n }\n\n if (!(this.isValidDay && this.isValidMonth && this.isValidDate)) {\n this.invalidDateText = this.invalidDateMessage;\n } else if (this.isDisabledDate && this.selectedDate !== null) {\n if (this.isBeforeMin) {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n } else {\n this.invalidDateText = `Please enter a date after ${this.formatMinMax(\n this.minDate\n )}.`;\n }\n } else if (this.isAfterMax) {\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n } else {\n this.invalidDateText = `Please enter a date before ${this.formatMinMax(\n this.maxDate\n )}.`;\n }\n } else if (this.disableDays.length !== 0) {\n this.invalidDateText = this.disableDaysMessage;\n } else {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n }\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n }\n }\n } else {\n this.invalidDateText = \"\";\n }\n };\n\n // Set refs to the input elements in the order they are displayed (based on the dateFormat)\n private setInputsInOrder = () => {\n this.el.shadowRoot\n ?.querySelectorAll(\"input\")\n .forEach((input) => this.inputsInOrder.push(input));\n };\n\n // Includes text usually added using aria-describedby\n // (which doesn't work on input component container)\n private setAriaLabelledBy = () => {\n if (\n this.disabled &&\n !isEmptyString(\n this.inputCompContainerEl?.getAttribute(this.ARIA_LABELLED_BY)\n )\n ) {\n this.removeAriaLabelledBy();\n return;\n }\n\n if (this.disabled) {\n return;\n }\n\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n const labelId = `${this.inputId}-label`;\n\n if (labelEl !== null && labelEl !== undefined) {\n labelEl.id = labelId;\n }\n\n const hasValidation =\n !isEmptyString(this.validationStatus) ||\n !isEmptyString(this.invalidDateText);\n\n const labelledBy = `${labelEl?.id ?? \"\"} ${\n this.screenReaderInfoId\n } ${getInputDescribedByText(\n this.el,\n this.inputId,\n this.helperText !== \"\" && this.helperText !== this.defaultHelperText,\n hasValidation\n )} ${this.selectedDate ? this.selectedDateInfoId : \"\"} ${\n this.assistiveHintId\n }`;\n\n this.inputCompContainerEl.setAttribute(this.ARIA_LABELLED_BY, labelledBy);\n };\n\n // Sets boolean for each input, used to limit the number of characters within each field (2 for day / month, 4 for year)\n private setPreventInput = (input: HTMLInputElement, isPrevented: boolean) => {\n switch (input) {\n case this.dayInputEl:\n this.preventDayInput = isPrevented;\n break;\n case this.monthInputEl:\n this.preventMonthInput = isPrevented;\n break;\n case this.yearInputEl:\n this.preventYearInput = isPrevented;\n }\n };\n\n // Get input based on letter representing each date part (\"D\", \"M\" or \"Y\")\n // (retrieved from dateFormat)\n private getInputFromDatePart = (datePart: string) => {\n const dayInput = (\n <input\n class=\"day-input\"\n id=\"day-input\"\n ref={(el) => (this.dayInputEl = el)}\n aria-label=\"day\"\n placeholder=\"DD\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventDayInput)}\n ></input>\n );\n\n const monthInput = (\n <input\n id=\"month-input\"\n class=\"month-input\"\n ref={(el) => (this.monthInputEl = el)}\n aria-label=\"month\"\n placeholder=\"MM\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventMonthInput)}\n ></input>\n );\n\n const yearInput = (\n <input\n id=\"year-input\"\n class=\"year-input\"\n ref={(el) => (this.yearInputEl = el)}\n aria-label=\"year\"\n placeholder=\"YYYY\"\n maxLength={4}\n disabled={this.disabled}\n aria-required={`${this.required}`}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventYearInput)}\n ></input>\n );\n\n let input;\n\n switch (datePart) {\n case \"D\":\n input = dayInput;\n break;\n case \"M\":\n input = monthInput;\n break;\n case \"Y\":\n input = yearInput;\n }\n\n return input;\n };\n\n // Get input elements in order of chosen date format\n private getInputsInOrder = () => {\n const dateParts = this.dateFormat.split(\"/\");\n\n const inputsInOrder: HTMLInputElement[] = [];\n\n dateParts.forEach((part: string) => {\n inputsInOrder.push(this.getInputFromDatePart(part.substring(0, 1)));\n });\n\n return inputsInOrder;\n };\n\n // To add to the end of assistive hint to make it clearer that each date part has its own input\n // that can be changed individually\n private getDescOfInputsOrder = () => {\n let description;\n\n switch (this.dateFormat) {\n case this.DEFAULT_DATE_FORMAT:\n description = \"day, month, and year\";\n break;\n case \"MM/DD/YYYY\":\n description = \"month, day, and year\";\n break;\n case \"YYYY/MM/DD\":\n description = \"year, month, and day\";\n }\n\n return description;\n };\n\n // Add 'required' or 'invalid data' to span used in aria-labelledby\n // Many ARIA attributes aren't read out by screen reader when on the input component container\n private getScreenReaderInfo = (validationStatus: string) => {\n let inputDescriptors = \"\";\n\n if (this.required) {\n inputDescriptors += \"required\";\n }\n\n if (validationStatus === IcInformationStatus.Error) {\n inputDescriptors += \" invalid data\";\n }\n\n return inputDescriptors === \"\" ? \"\" : inputDescriptors + \", \";\n };\n\n // Prevent non-number characters being entered\n // ('e' or '.' - which are usually allowed in <input type=\"number\">)\n // And limit the number of characters within each field (2 for day / month, 4 for year)\n // (because 'maxlength' doesn't work on <input type=\"number\">)\n private preventInput = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const key = event.key;\n const input = event.target as HTMLInputElement;\n let selectedString;\n\n if (input) {\n selectedString = input.value.substring(\n input.selectionStart || 0,\n input.selectionEnd || undefined\n );\n }\n\n if (\n key === \"e\" ||\n key === \".\" ||\n key === \"-\" ||\n (event.key >= \"0\" &&\n event.key <= \"9\" &&\n isInputPrevented &&\n !selectedString)\n ) {\n event.preventDefault();\n }\n };\n\n /**\n * Get whether date has been disabled using disableFuture or disablePast prop, but always allow current day\n * Consider using dateClamp and inDateRange\n * @returns `boolean`\n */\n private isSelectedDateDisabled = () => {\n if (!this.selectedDate) return false;\n\n const currentDate = new Date();\n const isNotToday =\n this.selectedDate.toDateString() !== currentDate.toDateString();\n\n this.isAfterMax =\n this.maxDate && this.selectedDate > this.maxDate && isNotToday;\n this.isBeforeMin =\n this.minDate && this.selectedDate < this.minDate && isNotToday;\n\n return (\n this.isAfterMax ||\n this.isBeforeMin ||\n this.disableDays.includes(this.selectedDate.getDay()) ||\n (((!!this.disablePast && this.selectedDate < currentDate) ||\n (!!this.disableFuture && this.selectedDate > currentDate)) &&\n isNotToday)\n );\n };\n\n private moveToNextInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) + 1\n ]?.focus();\n };\n\n private moveToPreviousInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) - 1\n ]?.focus();\n };\n\n private autocompleteInput = (input: HTMLInputElement) => {\n const inputValue = input.value;\n if (this.yearInputEl && input === this.yearInputEl) {\n // Autocomplete year as current millennium when fewer than 4 characters entered\n const yearNumbers = [\"2\", \"0\", \"0\"];\n\n let autocompletedInput = \"\";\n\n if (inputValue) {\n yearNumbers.forEach((number, index) => {\n if (inputValue.length + index <= 3) {\n autocompletedInput += number;\n }\n });\n\n this.yearInputEl.value = `${autocompletedInput}${inputValue}`;\n }\n } else if (inputValue.length === 1) {\n // Autocomplete input as 2 characters (leading zero) when only 1 character entered (for day and month)\n input.value = +inputValue === 0 ? \"01\" : `0${inputValue}`;\n }\n\n if (input.value) {\n this.setInputValue(input);\n }\n };\n\n private convertToDate = (\n year: string,\n month: string,\n day: string\n ): Date | null => {\n if (!isEmptyString(year) && !isEmptyString(month) && !isEmptyString(day)) {\n return new Date(+year, +month - 1, +day);\n } else {\n return null;\n }\n };\n\n private handleHostBlur = () => {\n this.removeLabelledBy = false;\n this.icBlur.emit({ value: this.selectedDate });\n };\n\n private handleHostFocus = () => {\n if (\n this.el.shadowRoot?.activeElement?.id.match(/(day|month|year)-input$/)\n ) {\n this.removeLabelledBy = false;\n } else {\n this.removeLabelledBy = true;\n }\n this.icFocus.emit({ value: this.selectedDate });\n };\n\n private handleFormReset = () => {\n // Get the initial value and populate day, month and year again.\n this.setDate(this.initialValue);\n this.setValidationMessage();\n this.handleDateChange(false);\n };\n\n private getAriaLabel = (input: HTMLInputElement) =>\n input.getAttribute(this.ARIA_LABEL);\n\n private notifyScreenReaderArrowKeys = (input: HTMLInputElement) => {\n const liveRegion = this.el.shadowRoot?.querySelector(\"#live-region\");\n const ariaLabel = this.getAriaLabel(input);\n\n if (liveRegion && input.value && ariaLabel) {\n let announcement = \"\";\n\n if (\n input === this.monthInputEl &&\n !!IcDateInputMonths[+input.value - 1]\n ) {\n announcement = `${input.value} - ${\n IcDateInputMonths[+input.value - 1]\n }, ${ariaLabel}`;\n }\n\n if (input === this.dayInputEl || input === this.yearInputEl) {\n announcement = `${input.value}, ${ariaLabel}`;\n }\n\n liveRegion.textContent = announcement;\n }\n };\n\n private removeAriaLabelledBy() {\n this.inputCompContainerEl.removeAttribute(this.ARIA_LABELLED_BY);\n }\n\n private setPastedValueAndValidation(\n isValidDate: boolean,\n pastedValue: string,\n event: ClipboardEvent\n ) {\n switch (true) {\n case isValidDate: {\n const nextParsedValue = this.isZuluTime\n ? extractDateFromZuluDateTime(pastedValue)\n : pastedValue;\n const dateParts = nextParsedValue.split(/-|\\/|\\./);\n this.inputsInOrder.forEach((input, index) => {\n input.classList.add(this.FIT_TO_VALUE);\n\n if (this.isZuluTime) {\n this.pasteZuluDateTime(dateParts, index);\n } else {\n let dateValue;\n\n if (input === this.dayInputEl || input === this.monthInputEl) {\n dateValue = this.slicePastedDate(2, dateParts[index]);\n } else {\n dateValue = this.slicePastedDate(4, dateParts[index]);\n }\n\n input.value = dateValue;\n\n this.setInputValue(input);\n this.autocompleteInput(input);\n }\n });\n this.isZuluTime = false;\n break;\n }\n\n case (pastedValue.length === 1 ||\n pastedValue.length === 2 ||\n pastedValue.length === 4) &&\n isNumeric(pastedValue):\n if (this.checkSingleCopiedValueIsValid(event.target, pastedValue)) {\n // Check if copied value can be pasted into input\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n } else {\n this.displayPastedValidation(event);\n }\n break;\n\n case pastedValue.length === 3 && isNumeric(pastedValue):\n if (event.target !== this.yearInputEl) {\n this.displayPastedValidation(event);\n } else {\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n }\n break;\n\n case pastedValue.length >= 5 && isNumeric(pastedValue):\n this.displayPastedValidation(event);\n }\n }\n\n private pasteZuluDateTime(dateParts: string[], index: number) {\n // ['YYYY', 'MM', 'DD']\n if (index === 0 && this.yearInputEl) {\n const dateValue = this.slicePastedDate(4, dateParts[index]);\n this.yearInputEl.value = dateValue;\n this.setInputValue(this.yearInputEl);\n } else if (index === 1 && this.monthInputEl) {\n // The month value is the second item in the array\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.monthInputEl.value = dateValue;\n this.setInputValue(this.monthInputEl);\n } else if (this.dayInputEl) {\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.dayInputEl.value = dateValue;\n this.setInputValue(this.dayInputEl);\n }\n }\n\n private displayPastedValidation(event: ClipboardEvent) {\n if (this.invalidDateText?.length > 0) {\n this.previousInvalidDateTest = this.invalidDateText;\n }\n\n this.invalidDateText = `Please paste a valid ${this.getAriaLabel(\n event.target as HTMLInputElement\n )}`;\n\n this.validationStatus = IcInformationStatus.Error;\n this.isPasteValidationDisplayed = true;\n }\n\n private setPasteInvalidText() {\n if (this.isPasteValidationDisplayed) {\n this.invalidDateText = this.previousInvalidDateTest ?? \"\";\n this.isPasteValidationDisplayed = false;\n\n // This is to prevent setDate from triggering within componentWillUpdate\n this.preventInputsUpdating = true;\n }\n }\n\n private notifyScreenReader(input: HTMLInputElement, event: Event) {\n const liveRegion = this.el.shadowRoot?.querySelector(\"#live-region\");\n\n if (liveRegion) {\n if (this.isKeyboardOrEvent(event)) {\n this.notifyScreenReaderArrowKeys(input);\n } else if (\n Object.prototype.toString.call(event) === this.INPUT_EVENT_OBJECT_STRING\n ) {\n this.notifyScreenReaderInput(input, liveRegion as HTMLElement);\n }\n }\n }\n\n private notifyScreenReaderInput = (\n input: HTMLInputElement,\n liveRegion: HTMLElement\n ) => {\n const ariaLabel = this.getAriaLabel(input);\n const value = input.value;\n\n if (ariaLabel && value) {\n let announcement = \"\";\n\n const monthValue = IcDateInputMonths[+value - 1];\n if (\n input === this.monthInputEl &&\n !!monthValue &&\n this.isValidMonth &&\n value.length === 2\n ) {\n announcement = `${value} - ${monthValue}`;\n } else if (\n (input === this.dayInputEl && this.isValidDay && value.length === 2) ||\n (input === this.yearInputEl && value.length === 4)\n ) {\n announcement = value;\n }\n\n liveRegion.textContent = `${announcement}, ${ariaLabel}`;\n }\n };\n\n private setFitToValueStyling = (input: HTMLInputElement) => {\n if (input.value) {\n input.classList.add(this.FIT_TO_VALUE);\n } else {\n input.classList.remove(this.FIT_TO_VALUE);\n }\n };\n\n private setAriaInvalid = (\n validDay: boolean,\n validMonth: boolean,\n validDate: boolean,\n disabledDate: boolean\n ) => {\n if (this.inputsInOrder.length) {\n this.inputsInOrder.forEach((input) => {\n input.removeAttribute(this.ARIA_INVALID);\n });\n\n if (!validDay) {\n this.dayInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validMonth) {\n this.monthInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validDate || disabledDate) {\n this.inputsInOrder.forEach((input) => {\n input.setAttribute(this.ARIA_INVALID, \"true\");\n });\n }\n }\n };\n\n private handleClear = () => {\n this.clearInput = true;\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setInputValue(input, true);\n this.setPreventInput(input, false);\n });\n this.clearInput = false;\n this.preventInputsUpdating = false;\n this.setValidationMessage();\n this.handleDateChange(true);\n\n this.inputsInOrder[0].focus();\n };\n\n private handleCalendarOpen = (ev: MouseEvent) => {\n ev.stopImmediatePropagation();\n this.calendarButtonEl?.shadowRoot\n ?.querySelector(\"ic-tooltip\")\n ?.displayTooltip(false);\n this.calendarButtonClicked.emit({ value: this.selectedDate });\n this.calendarButtonEl?.shadowRoot\n ?.querySelector(\"ic-tooltip\")\n ?.displayTooltip(false);\n this.preventInputsUpdating = false;\n this.calendarIsOpen = true;\n };\n\n private setValueAndEmitChange = (value: Date | null) => {\n if (!dateMatches(this.value ? new Date(this.value) : null, value)) {\n this.emitIcChange(value);\n this.value = value;\n }\n };\n\n private handleCalendarFocus = () => {\n this.calendarFocused = true;\n if (this.calendarIsOpen) {\n // focus event triggered by closing calendar dialog so inputs should update\n this.preventInputsUpdating = false;\n this.calendarIsOpen = false;\n } else {\n this.preventInputsUpdating = true;\n }\n };\n\n private handleCalendarBlur = () => {\n this.calendarFocused = false;\n this.preventInputsUpdating = true;\n };\n\n private handleClearFocus = () => {\n this.removeLabelledBy = true;\n this.preventInputsUpdating = true;\n this.clearButtonFocused = true;\n };\n\n private handleClearBlur = (ev: FocusEvent) => {\n this.clearButtonFocused = false;\n this.preventInputsUpdating = true;\n if ((ev.relatedTarget as HTMLElement)?.id.match(/(day|year)-input$/)) {\n this.removeLabelledBy = false;\n return;\n }\n\n this.removeLabelledBy = true;\n };\n\n private emitIcChange = (d: Date | null) => {\n this.selectedDate = d;\n if (\n !dateMatches(this.selectedDate, d) ||\n this.day !== null ||\n this.month !== null ||\n this.year !== null\n ) {\n let UTCDate = null;\n if (d !== null) {\n UTCDate = new Date(\n Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())\n );\n }\n this.icChange.emit({\n value: d,\n dateObject: {\n day: this.day === \"\" ? null : this.day,\n month: this.month === \"\" ? null : this.month,\n year: this.year === \"\" ? null : this.year,\n },\n utcValue: UTCDate,\n });\n }\n };\n\n render() {\n const {\n inputId,\n label,\n disabled,\n helperText,\n hideHelperText,\n hideLabel,\n showClearButton,\n showCalendarButton,\n size,\n theme,\n validationAriaLive,\n } = this;\n\n const hasCustomValidation = !isEmptyString(this.validationStatus);\n\n const validationStatus = hasCustomValidation\n ? this.validationStatus\n : !isEmptyString(this.invalidDateText)\n ? IcInformationStatus.Error\n : \"\";\n\n const assistiveHint = `Type or use the up and down arrow keys to change the values for the ${this.getDescOfInputsOrder()}.`;\n\n renderHiddenInput(\n true,\n this.el,\n this.name,\n this.convertToDate(this.year, this.month, this.day),\n this.disabled\n );\n\n return (\n <Host\n class={{\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n [`ic-date-input-disabled`]: disabled,\n }}\n onBlur={this.handleHostBlur}\n onFocus={this.handleHostFocus}\n >\n <ic-input-container disabled={disabled}>\n {!(hideLabel && hideHelperText) && (\n <ic-input-label\n for={inputId}\n label={label}\n hideLabel={hideLabel}\n helperText={!hideHelperText ? helperText : \"\"}\n disabled={disabled}\n >\n <slot name=\"helper-text\" slot=\"helper-text\"></slot>\n </ic-input-label>\n )}\n <span id={this.screenReaderInfoId} class=\"sr-only\" aria-hidden=\"true\">\n {this.getScreenReaderInfo(validationStatus)}\n {hideLabel && `${label}\\n`}\n {hideHelperText && `${helperText}\\n`}\n {`${this.defaultHelperText}.`}\n </span>\n <span id={this.assistiveHintId} class=\"sr-only\" aria-hidden=\"true\">\n {assistiveHint}\n </span>\n <span id=\"live-region\" aria-live=\"assertive\" class=\"sr-only\"></span>\n <ic-input-component-container\n id={inputId}\n ref={(el: HTMLIcInputComponentContainerElement) =>\n (this.inputCompContainerEl = el)\n }\n disabled={disabled}\n validationStatus={validationStatus}\n size={size}\n role=\"group\"\n class={{ [`ic-theme-${theme}`]: theme !== \"inherit\" }}\n >\n <div class=\"input-container\">\n <div class=\"date-inputs\">\n {this.getInputsInOrder()[0]}/{this.getInputsInOrder()[1]}/\n {this.getInputsInOrder()[2]}\n </div>\n <div class=\"action-buttons\">\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear input\"\n class={{\n [\"clear-button\"]: true,\n [\"hidden\"]:\n isEmptyString(this.day) &&\n isEmptyString(this.month) &&\n isEmptyString(this.year),\n }}\n disabled={this.disabled}\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearFocus}\n onBlur={this.handleClearBlur}\n variant=\"icon-tertiary\"\n theme={this.clearButtonFocused ? \"light\" : \"dark\"}\n size={size}\n ></ic-button>\n )}\n {showCalendarButton && (\n <div class=\"show-calendar-button-wrapper\">\n <div class={{ divider: true, [size]: true }}></div>\n <ic-button\n id=\"calendar-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.calendarButtonEl = el)\n }\n aria-label=\"Display calendar\"\n aria-haspopup=\"dialog\"\n class=\"calendar-button\"\n disabled={this.disabled}\n innerHTML={Calendar}\n onClick={this.handleCalendarOpen}\n variant=\"icon-tertiary\"\n size={size}\n onFocus={this.handleCalendarFocus}\n onBlur={this.handleCalendarBlur}\n theme={this.calendarFocused ? \"light\" : \"dark\"}\n ></ic-button>\n </div>\n )}\n </div>\n </div>\n </ic-input-component-container>\n <span id={this.selectedDateInfoId} class=\"sr-only\" aria-live=\"polite\">\n <span\n ref={(el) => (this.selectedDateInfoEl = el)}\n role=\"status\"\n ></span>\n </span>\n <ic-input-validation\n status={validationStatus}\n message={\n hasCustomValidation ? this.validationText : this.invalidDateText\n }\n for={inputId}\n ariaLiveMode={validationAriaLive}\n ></ic-input-validation>\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,c as t,h as i,H as o,g as s}from"./p-8e4e97b4.js";import{m as n,e as a}from"./p-e4ef4263.js";import{c as r}from"./p-aae38bee.js";const l='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){:host .opening-from-parent{animation:slide-in var(--ic-transition-duration-slow) ease-in-out}:host .opening-from-child{animation:slide-out var(--ic-transition-duration-slow) ease-in-out}}:host{border-radius:var(--ic-border-radius);color:var(--ic-popover-nav-text);--ic-typography-color:var(--ic-popover-nav-text);position:relative;z-index:var(--ic-z-index-popover);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay);display:none}:host(.on-dialog){inset:auto !important}:host(.on-dialog-fix-translate){transform:translate(0, var(--ic-space-xs)) !important}:host(.on-dialog-translate-y){transform:translate(0, calc(-1 * var(--translate-y))) !important}.menu{border:var(--ic-border-default);border-color:var(--ic-popover-border);border-radius:var(--ic-border-radius);background-color:var(--ic-popover-background);visibility:hidden;height:0;display:flex;flex-direction:column}:host(:focus-within){box-shadow:var(--ic-border-focus)}.menu:focus-visible{outline:none}:host(.ic-popover-menu-open){display:block;min-width:calc(20rem - var(--ic-space-xl));width:var(--popover-width, 20rem);max-width:calc(100vw - var(--ic-space-xl))}:host(.ic-popover-menu-open) .menu{visibility:visible;height:-moz-fit-content;height:fit-content;max-height:var(--max-height, -moz-fit-content);max-height:var(--max-height, fit-content);overflow-y:auto;overflow-x:hidden}.parent-label{--ic-typography-color:var(--ic-popover-parent-label);margin:var(--ic-space-xs) var(--ic-space-xs) 0}@keyframes slide-in{from{opacity:0;transform:translateX(10rem)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out{from{opacity:0;transform:translateX(-10rem)}to{opacity:1;transform:translateX(0)}}';const c=l;const h="div.menu-body";const d=class{constructor(i){e(this,i);this.icPopoverClosed=t(this,"icPopoverClosed",7);this.ARIA_LABEL="aria-label";this.popoverMenuEls=[];this.openingFromChild=false;this.openingFromParent=false;this.popperProps={};this.fixedPositioning=false;this.submenuLevel=1;this.theme="inherit";this.open=undefined;this.setButtonFocus=()=>{var e;(e=this.popoverMenuEls[this.currentFocus])===null||e===void 0?void 0:e.focus()};this.findAnchorEl=e=>{let t=null;if(!e){this.submenuId===undefined&&console.error("No anchor specified for popover component")}else{t=document.querySelector(e.indexOf("#")===0?e:"#"+e);if(t===null){console.error(`Popover anchor element '${e}' not found`)}}return t};this.isNotPopoverMenuEl=e=>{const{id:t,tagName:i}=e.target;return t!==this.anchor&&i!=="IC-MENU-ITEM"&&i!=="IC-MENU-GROUP"&&i!=="IC-POPOVER-MENU"};this.getNextItemToSelect=(e,t)=>{const i=this.popoverMenuEls.length-1;if(e<1){e=0}let o=t?e+1:e-1;if(o<0){o=i}else if(o>i){o=0}return o};this.addMenuItems=e=>{var t;for(let i=0;i<e.length;i++){const o=e[i];if(o.tagName==="IC-MENU-ITEM"){this.popoverMenuEls.push(o)}else if(o.tagName==="IC-MENU-GROUP"){const e=(t=o.shadowRoot)===null||t===void 0?void 0:t.querySelector(".menu-items-wrapper");if(e){const t=n(e);t&&this.addMenuItems(t)}}}};this.getMenuAriaLabel=()=>{const e=this.el.getAttribute(this.ARIA_LABEL);if(a(this.submenuId)){return`${e}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`}else{return e}};this.handleBackButtonClick=()=>{var e;(e=this.parentPopover)===null||e===void 0?void 0:e.openFromChild();this.open=false};this.initPopperJS=()=>{if(this.anchorEl){this.popperInstance=r(this.anchorEl,this.el,Object.assign({strategy:this.fixedPositioning?"fixed":"absolute",placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"flip",options:{fallbackPlacements:["top-start","top-end","bottom-end"],rootBoundary:"viewport"}}]},this.popperProps))}}}watchOpenHandler(){var e;const t=(e=this.el.parentElement)===null||e===void 0?void 0:e.querySelectorAll(`ic-popover-menu`);if(this.open){if(t.length>0){t.forEach((e=>{if(e!==this.el){e.open=false}}))}if(this.parentPopover!==undefined&&!this.popoverMenuEls.some((e=>e.id))){this.backButton&&this.popoverMenuEls.unshift(this.backButton)}this.currentFocus=0;setTimeout(this.setButtonFocus,50)}else if(this.popperInstance){if(t.length>0){t.forEach((e=>{if(e!==this.el){e.open=false}}))}this.popperInstance.destroy();this.popperInstance=null}}disconnectedCallback(){if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}componentDidLoad(){var e;const t=(e=this.el.shadowRoot)===null||e===void 0?void 0:e.querySelector(h);if(t){const e=n(t);if(e!==null){this.addMenuItems(e)}}if(this.submenuId===undefined&&this.el.getAttribute(this.ARIA_LABEL)===null){console.error(`No aria-label specified for popover menu component - aria-label required`)}this.watchOpenHandler()}componentWillRender(){this.anchorEl=this.findAnchorEl(this.anchor)}componentDidRender(){if(this.open&&!this.popperInstance){this.initPopperJS()}}handleMenuItemClick(e){if(!e.detail.submenuTriggerFor&&e.detail.label!=="Back"){this.closeMenu(false,e.detail)}}handleSubmenuChange(e){const t=e.target;this.open=false;const i=document.querySelector(`ic-popover-menu[submenu-id=${t.submenuTriggerFor}]`);i.parentPopover=this.el;i.anchor=this.anchor;i.ariaLabel=this.el.getAttribute(this.ARIA_LABEL);i.openFromParent();i.submenuLevel=this.submenuLevel+1;i.parentLabel=t.label}handleClick(e){if(this.open&&this.isNotPopoverMenuEl(e)){this.closeMenu()}}handleKeyDown(e){switch(e.key){case"ArrowDown":case"ArrowUp":e.preventDefault();this.currentFocus=this.getNextItemToSelect(this.currentFocus,e.key==="ArrowDown");this.setButtonFocus();break;case"Home":this.currentFocus=0;this.setButtonFocus();break;case"End":this.currentFocus=this.popoverMenuEls.length-1;this.setButtonFocus();break;case"Escape":case"Tab":e.preventDefault();if(this.open){this.closeMenu(true);this.el.blur()}break}}async openFromChild(){this.open=true;this.openingFromChild=true;setTimeout((()=>this.openingFromChild=false),1e3)}async openFromParent(){this.open=true;this.openingFromParent=true;setTimeout((()=>this.openingFromParent=false),1e3)}async closeMenu(e=false,t){var i;this.open=false;if(this.parentPopover){this.parentPopover.closeMenu(e,t)}else{if(e){(i=this.anchorEl)===null||i===void 0?void 0:i.focus()}this.icPopoverClosed.emit(t)}}async setExternalPopperProps(e){this.popperProps=e}render(){return i(o,{key:"bbe8b532b3e08c777c35e0af55486b59b5b8e44c",class:{["ic-popover-menu-open"]:!!this.open,[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{key:"a72a96633961efb668c7c8aae3fcb3b142c7b128",id:this.parentPopover===undefined?`ic-popover-submenu-${this.submenuId}`:"",class:{menu:true}},i("span",{key:"06b147e629909bbb74f4f1e01e825d39dcbab395",class:{"opening-from-parent":this.openingFromParent,"opening-from-child":this.openingFromChild}},a(this.submenuId)&&i("span",{key:"088ce8abcf89df38016507d521381e081ade4759"},i("span",{key:"1bebbc5854c2edd5207633c01bee4a6e887c03a0",role:"menu"},i("ic-menu-item",{key:"317fe27583c8bc0d41319ac634a4bff22b1c5e2d",class:"ic-popover-submenu-back-button",ref:e=>this.backButton=e,label:"Back",onClick:this.handleBackButtonClick,id:`ic-popover-submenu-back-button-${this.submenuLevel}`},i("svg",{key:"02d9719c84180f8832a26d75cd652c55070b6289",slot:"icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"submenu-back-icon"},i("path",{key:"906a7a797d99a3e8f0a7a3b30d3e33a52ca2582c",d:"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z",fill:"currentColor"})))),i("ic-typography",{key:"ee0152debc2b109787490b4a78e1de3f8186ae5e",variant:"subtitle-small",class:"parent-label"},this.parentLabel)),i("div",{key:"f91d5f08c8142136b4bb2c1fbd513ee13fbbd263",class:"menu-body","aria-label":this.getMenuAriaLabel(),role:"menu"},i("slot",{key:"55417e47588809089b7ba71e510336d79ba69ac3"})))))}static get delegatesFocus(){return true}get el(){return s(this)}static get watchers(){return{open:["watchOpenHandler"]}}};d.style=c;export{d as ic_popover_menu};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{r as e,c as t,h as i,H as o,g as s}from"./p-8e4e97b4.js";import{m as n,e as a}from"./p-e4ef4263.js";import{c as r}from"./p-aae38bee.js";const l='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}@media (prefers-reduced-motion: no-preference){:host .opening-from-parent{animation:slide-in var(--ic-transition-duration-slow) ease-in-out}:host .opening-from-child{animation:slide-out var(--ic-transition-duration-slow) ease-in-out}}:host{border-radius:var(--ic-border-radius);color:var(--ic-popover-nav-text);--ic-typography-color:var(--ic-popover-nav-text);position:relative;z-index:var(--ic-z-index-popover);box-sizing:border-box;box-shadow:var(--ic-elevation-overlay);display:none}:host(.on-dialog){inset:auto !important}:host(.on-dialog-fix-translate){transform:translate(0, var(--ic-space-xs)) !important}:host(.on-dialog-translate-y){transform:translate(0, calc(-1 * var(--translate-y))) !important}.menu{border:var(--ic-border-default);border-color:var(--ic-popover-border);border-radius:var(--ic-border-radius);background-color:var(--ic-popover-background);visibility:hidden;height:0;display:flex;flex-direction:column}:host(:focus-within){box-shadow:var(--ic-border-focus)}.menu:focus-visible{outline:none}:host(.ic-popover-menu-open){display:block;min-width:calc(20rem - var(--ic-space-xl));width:var(--popover-width, 20rem);max-width:calc(100vw - var(--ic-space-xl))}:host(.ic-popover-menu-open) .menu{visibility:visible;height:-moz-fit-content;height:fit-content;max-height:var(--max-height, -moz-fit-content);max-height:var(--max-height, fit-content);overflow-y:auto;overflow-x:hidden}.parent-label{--ic-typography-color:var(--ic-popover-parent-label);margin:var(--ic-space-xs) var(--ic-space-xs) 0}@keyframes slide-in{from{opacity:0;transform:translateX(10rem)}to{opacity:1;transform:translateX(0)}}@keyframes slide-out{from{opacity:0;transform:translateX(-10rem)}to{opacity:1;transform:translateX(0)}}';const c=l;const h="div.menu-body";const d=class{constructor(i){e(this,i);this.icPopoverClosed=t(this,"icPopoverClosed",7);this.ARIA_LABEL="aria-label";this.popoverMenuEls=[];this.openingFromChild=false;this.openingFromParent=false;this.popperProps={};this.fixedPositioning=false;this.submenuLevel=1;this.theme="inherit";this.open=undefined;this.setButtonFocus=()=>{var e;(e=this.popoverMenuEls[this.currentFocus])===null||e===void 0?void 0:e.focus()};this.findAnchorEl=e=>{let t=null;if(!e){this.submenuId===undefined&&console.error("No anchor specified for popover component")}else{t=document.querySelector(e.indexOf("#")===0?e:"#"+e);if(t===null){console.error(`Popover anchor element '${e}' not found`)}}return t};this.isNotPopoverMenuEl=e=>{const{id:t,tagName:i}=e.target;return t!==this.anchor&&i!=="IC-MENU-ITEM"&&i!=="IC-MENU-GROUP"&&i!=="IC-POPOVER-MENU"};this.getNextItemToSelect=(e,t)=>{const i=this.popoverMenuEls.length-1;if(e<1){e=0}let o=t?e+1:e-1;if(o<0){o=i}else if(o>i){o=0}return o};this.addMenuItems=e=>{var t;for(let i=0;i<e.length;i++){const o=e[i];if(o.tagName==="IC-MENU-ITEM"){this.popoverMenuEls.push(o)}else if(o.tagName==="IC-MENU-GROUP"){const e=(t=o.shadowRoot)===null||t===void 0?void 0:t.querySelector(".menu-items-wrapper");if(e){const t=n(e);t&&this.addMenuItems(t)}}}};this.getMenuAriaLabel=()=>{const e=this.el.getAttribute(this.ARIA_LABEL);if(a(this.submenuId)){return`${e}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`}else{return e}};this.handleBackButtonClick=()=>{var e;(e=this.parentPopover)===null||e===void 0?void 0:e.openFromChild();this.open=false};this.initPopperJS=()=>{if(this.anchorEl){this.popperInstance=r(this.anchorEl,this.el,Object.assign({strategy:this.fixedPositioning?"fixed":"absolute",placement:"bottom-start",modifiers:[{name:"offset",options:{offset:[0,4]}},{name:"flip",options:{fallbackPlacements:["top-start","top-end","bottom-end"],rootBoundary:"viewport"}}]},this.popperProps))}}}watchOpenHandler(){var e;const t=(e=this.el.parentElement)===null||e===void 0?void 0:e.querySelectorAll(`ic-popover-menu`);if(this.open){if(t.length>0){t.forEach((e=>{if(e!==this.el){e.open=false}}))}if(this.parentPopover!==undefined&&!this.popoverMenuEls.some((e=>e.id))){this.backButton&&this.popoverMenuEls.unshift(this.backButton)}this.currentFocus=0;setTimeout(this.setButtonFocus,50)}else if(this.popperInstance){if(t.length>0){t.forEach((e=>{if(e!==this.el){e.open=false}}))}this.popperInstance.destroy();this.popperInstance=null}}disconnectedCallback(){if(this.popperInstance){this.popperInstance.destroy();this.popperInstance=null}}componentDidLoad(){var e;const t=(e=this.el.shadowRoot)===null||e===void 0?void 0:e.querySelector(h);if(t){const e=n(t);if(e!==null){this.addMenuItems(e)}}if(this.submenuId===undefined&&this.el.getAttribute(this.ARIA_LABEL)===null){console.error(`No aria-label specified for popover menu component - aria-label required`)}this.watchOpenHandler()}componentWillRender(){this.anchorEl=this.findAnchorEl(this.anchor)}componentDidRender(){if(this.open&&!this.popperInstance){this.initPopperJS()}}handleMenuItemClick(e){if(!e.detail.submenuTriggerFor&&e.detail.label!=="Back"){this.closeMenu(false,e.detail)}}handleSubmenuChange(e){const t=e.target;this.open=false;const i=document.querySelector(`ic-popover-menu[submenu-id=${t.submenuTriggerFor}]`);i.parentPopover=this.el;i.anchor=this.anchor;i.ariaLabel=this.el.getAttribute(this.ARIA_LABEL);i.openFromParent();i.submenuLevel=this.submenuLevel+1;i.parentLabel=t.label}handleClick(e){if(this.open&&this.isNotPopoverMenuEl(e)){this.closeMenu()}}handleKeyDown(e){switch(e.key){case"ArrowDown":case"ArrowUp":e.preventDefault();this.currentFocus=this.getNextItemToSelect(this.currentFocus,e.key==="ArrowDown");this.setButtonFocus();break;case"Home":this.currentFocus=0;this.setButtonFocus();break;case"End":this.currentFocus=this.popoverMenuEls.length-1;this.setButtonFocus();break;case"Escape":case"Tab":e.preventDefault();if(this.open){this.closeMenu(true);this.el.blur()}break}}async openFromChild(){this.open=true;this.openingFromChild=true;setTimeout((()=>this.openingFromChild=false),1e3)}async openFromParent(){this.open=true;this.openingFromParent=true;setTimeout((()=>this.openingFromParent=false),1e3)}async closeMenu(e=false,t){var i;this.open=false;if(this.parentPopover){this.parentPopover.closeMenu(e,t)}else{if(e){(i=this.anchorEl)===null||i===void 0?void 0:i.focus()}this.icPopoverClosed.emit(t)}}async setExternalPopperProps(e){this.popperProps=e}render(){return i(o,{key:"4d5467e45b173b365eba3fe507480bc87a0001f7",class:{["ic-popover-menu-open"]:!!this.open,[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("div",{key:"96ffeae7beede0b8a48e96dcbb262a5092974fd0",id:this.parentPopover===undefined?`ic-popover-submenu-${this.submenuId}`:"",class:{menu:true}},i("span",{key:"84b9c30b0377109233bb0135c68acd6419b1aa55",class:{"opening-from-parent":this.openingFromParent,"opening-from-child":this.openingFromChild}},a(this.submenuId)&&i("span",{key:"cd6eaf24a7e6ea400614da471083aaa75f164b98"},i("span",{key:"b7be64cdfaf3a94fcd36f3ea0e5c6bf475418268",role:"menu"},i("ic-menu-item",{key:"9868fd30a311aadfe9663ce8617c620940760549",class:"ic-popover-submenu-back-button",ref:e=>this.backButton=e,label:"Back",onClick:this.handleBackButtonClick,id:`ic-popover-submenu-back-button-${this.submenuLevel}`},i("svg",{key:"5655f052a203d6b0d0c5c2182ec6339741691311",slot:"icon",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"submenu-back-icon"},i("path",{key:"b804bfa5d3cbfcf37322e19d5978875088e85d97",d:"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z",fill:"currentColor"})))),i("ic-typography",{key:"3cd5e496d8af145ebb77fe49f4637826dbf4c2ff",variant:"subtitle-small",class:"parent-label"},this.parentLabel)),i("div",{key:"6249765618e71a536ed2ea67bc9ef31ba24cf7ff",class:"menu-body","aria-label":this.getMenuAriaLabel(),role:"menu"},i("slot",{key:"c175948ff00694bad8419f4738bc82a469c2b53a"})))))}static get delegatesFocus(){return true}get el(){return s(this)}static get watchers(){return{open:["watchOpenHandler"]}}};d.style=c;export{d as ic_popover_menu};
|
|
2
|
+
//# sourceMappingURL=p-2188b483.entry.js.map
|