@duetds/components 8.0.6 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hydrate/index.d.ts +2 -2
- package/hydrate/index.js +19099 -17881
- package/lib/cjs/app-globals-cd75f624.js +54 -0
- package/lib/cjs/{common-strings-86913e94.js → common-strings-22c70ef0.js} +6 -6
- package/lib/cjs/create-id-1f8c438f.js +13 -0
- package/lib/cjs/duet-action-button.cjs.entry.js +133 -133
- package/lib/cjs/duet-alert.cjs.entry.js +106 -106
- package/lib/cjs/duet-badge.cjs.entry.js +29 -29
- package/lib/cjs/duet-banner.cjs.entry.js +52 -52
- package/lib/cjs/duet-breadcrumb.cjs.entry.js +41 -41
- package/lib/cjs/duet-breadcrumbs.cjs.entry.js +51 -51
- package/lib/cjs/duet-button_2.cjs.entry.js +229 -229
- package/lib/cjs/duet-callout.cjs.entry.js +28 -28
- package/lib/cjs/duet-caption_4.cjs.entry.js +187 -187
- package/lib/cjs/duet-card.cjs.entry.js +93 -93
- package/lib/cjs/duet-checkbox.cjs.entry.js +85 -85
- package/lib/cjs/duet-checkmark.cjs.entry.js +23 -23
- package/lib/cjs/duet-chip.cjs.entry.js +182 -182
- package/lib/cjs/duet-choice_2.cjs.entry.js +392 -392
- package/lib/cjs/duet-collapsible.cjs.entry.js +98 -98
- package/lib/cjs/duet-combobox.cjs.entry.js +362 -362
- package/lib/cjs/duet-contact-card.cjs.entry.js +49 -49
- package/lib/cjs/duet-cookie-consent.cjs.entry.js +35 -35
- package/lib/cjs/duet-date-picker.cjs.entry.js +610 -610
- package/lib/cjs/duet-divider_2.cjs.entry.js +53 -53
- package/lib/cjs/duet-editable-table_3.cjs.entry.js +1247 -1247
- package/lib/cjs/duet-empty-state.cjs.entry.js +26 -26
- package/lib/cjs/duet-fieldset.cjs.entry.js +50 -50
- package/lib/cjs/duet-file-chooser.cjs.entry.js +44 -44
- package/lib/cjs/duet-footer.cjs.entry.js +118 -118
- package/lib/cjs/duet-grid_2.cjs.entry.js +185 -185
- package/lib/cjs/duet-header_2.cjs.entry.js +610 -610
- package/lib/cjs/duet-hero.cjs.entry.js +172 -172
- package/lib/cjs/duet-icon.cjs.entry.js +141 -141
- package/lib/cjs/duet-input_2.cjs.entry.js +346 -346
- package/lib/cjs/duet-layout.cjs.entry.js +51 -51
- package/lib/cjs/duet-list_2.cjs.entry.js +99 -99
- package/lib/cjs/duet-menu-bar-button.cjs.entry.js +70 -70
- package/lib/cjs/duet-menu-bar-dropdown-link.cjs.entry.js +44 -44
- package/lib/cjs/duet-menu-bar-dropdown.cjs.entry.js +93 -93
- package/lib/cjs/duet-menu-bar-link.cjs.entry.js +58 -58
- package/lib/cjs/duet-menu-bar.cjs.entry.js +116 -116
- package/lib/cjs/duet-modal.cjs.entry.js +188 -188
- package/lib/cjs/duet-multiselect.cjs.entry.js +206 -206
- package/lib/cjs/duet-nav.cjs.entry.js +20 -20
- package/lib/cjs/duet-notification_2.cjs.entry.js +140 -140
- package/lib/cjs/duet-number-input.cjs.entry.js +337 -337
- package/lib/cjs/duet-page-heading.cjs.entry.js +26 -26
- package/lib/cjs/duet-pagination_2.cjs.entry.js +511 -511
- package/lib/cjs/duet-popup-menu-item.cjs.entry.js +62 -62
- package/lib/cjs/duet-popup-menu.cjs.entry.js +147 -147
- package/lib/cjs/duet-progress.cjs.entry.js +54 -54
- package/lib/cjs/duet-promo-card.cjs.entry.js +40 -40
- package/lib/cjs/duet-radio_2.cjs.entry.js +197 -197
- package/lib/cjs/duet-range-slider.cjs.entry.js +105 -105
- package/lib/cjs/duet-scrollable_3.cjs.entry.js +384 -386
- package/lib/cjs/duet-section-layout.cjs.entry.js +21 -21
- package/lib/cjs/duet-select.cjs.entry.js +156 -156
- package/lib/cjs/duet-shaped-image.cjs.entry.js +28 -28
- package/lib/cjs/duet-show-more.cjs.entry.js +98 -98
- package/lib/cjs/duet-slideout-lang.cjs.entry.js +36 -36
- package/lib/cjs/duet-slideout-link.cjs.entry.js +33 -33
- package/lib/cjs/duet-slideout-panel-dropdown.cjs.entry.js +50 -50
- package/lib/cjs/duet-slideout-panel.cjs.entry.js +120 -120
- package/lib/cjs/duet-slideout.cjs.entry.js +194 -194
- package/lib/cjs/duet-step_2.cjs.entry.js +182 -184
- package/lib/cjs/duet-submenu-bar-dropdown-link.cjs.entry.js +36 -36
- package/lib/cjs/duet-submenu-bar-dropdown.cjs.entry.js +103 -103
- package/lib/cjs/duet-submenu-bar-link.cjs.entry.js +59 -59
- package/lib/cjs/duet-submenu-bar.cjs.entry.js +110 -110
- package/lib/cjs/duet-textarea.cjs.entry.js +160 -160
- package/lib/cjs/duet-toggle.cjs.entry.js +72 -72
- package/lib/cjs/duet-toolbar-dropdown-link.cjs.entry.js +35 -35
- package/lib/cjs/duet-toolbar-dropdown.cjs.entry.js +59 -59
- package/lib/cjs/duet-toolbar-link.cjs.entry.js +31 -31
- package/lib/cjs/duet-toolbar.cjs.entry.js +34 -34
- package/lib/cjs/duet-tooltip-button_2.cjs.entry.js +98 -80
- package/lib/cjs/duet-tooltip.cjs.entry.js +185 -187
- package/lib/cjs/duet-tray.cjs.entry.js +82 -82
- package/lib/cjs/duet-upload-aria-status.cjs.entry.js +65 -65
- package/lib/cjs/duet-upload-item.cjs.entry.js +81 -81
- package/lib/cjs/duet-visually-hidden.cjs.entry.js +12 -12
- package/lib/cjs/duet.cjs.js +4 -4
- package/lib/cjs/errorcodes.utils-a86b1f94.js +39 -0
- package/lib/cjs/focus-utils-9b549956.js +21 -0
- package/lib/cjs/{index-2cce7b13.js → index-ce232ed8.js} +106 -45
- package/lib/cjs/input-utils-1096a2c5.js +56 -0
- package/lib/cjs/{is-internet-explorer-76c3b538.js → is-internet-explorer-e7f58ebc.js} +2 -2
- package/lib/cjs/{js-utils-b20cfc79.js → js-utils-92e24ba1.js} +27 -27
- package/lib/cjs/{language-utils-dc19e8b6.js → language-utils-e8a527e5.js} +74 -74
- package/lib/cjs/loader.cjs.js +3 -3
- package/lib/cjs/{slot-query-b7555763.js → slot-query-3259af5b.js} +1 -1
- package/lib/cjs/string-utils-053749ff.js +59 -0
- package/lib/cjs/teleport-e9d05bca.js +99 -0
- package/lib/cjs/themeable-component-83a2a0d4.js +15 -0
- package/lib/cjs/token-utils-84b3bca6.js +124 -0
- package/lib/cjs/watch-options-30a12622.js +61 -0
- package/lib/collection/collection-manifest.json +2 -2
- package/lib/collection/common/slot-query.js +3 -3
- package/lib/collection/common/themeable-component.js +6 -6
- package/lib/collection/common-strings.js +6 -6
- package/lib/collection/components/duet-action-button/duet-action-button.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-action-button/duet-action-button.js +570 -569
- package/lib/collection/components/duet-alert/duet-alert.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-alert/duet-alert.e2e.js +47 -47
- package/lib/collection/components/duet-alert/duet-alert.js +442 -441
- package/lib/collection/components/duet-badge/duet-badge.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-badge/duet-badge.e2e.js +21 -21
- package/lib/collection/components/duet-badge/duet-badge.js +134 -134
- package/lib/collection/components/duet-banner/duet-banner.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-banner/duet-banner.e2e.js +16 -16
- package/lib/collection/components/duet-banner/duet-banner.js +309 -309
- package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +139 -139
- package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.e2e.js +6 -6
- package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +112 -112
- package/lib/collection/components/duet-button/duet-button.a11y.e2e.js +30 -30
- package/lib/collection/components/duet-button/duet-button.e2e.js +187 -187
- package/lib/collection/components/duet-button/duet-button.js +1068 -1067
- package/lib/collection/components/duet-callout/duet-callout.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-callout/duet-callout.e2e.js +15 -15
- package/lib/collection/components/duet-callout/duet-callout.js +88 -88
- package/lib/collection/components/duet-caption/duet-caption.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-caption/duet-caption.e2e.js +20 -20
- package/lib/collection/components/duet-caption/duet-caption.js +131 -131
- package/lib/collection/components/duet-card/duet-card.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-card/duet-card.e2e.js +85 -85
- package/lib/collection/components/duet-card/duet-card.js +492 -491
- package/lib/collection/components/duet-checkbox/duet-checkbox.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-checkbox/duet-checkbox.e2e.js +103 -103
- package/lib/collection/components/duet-checkbox/duet-checkbox.js +553 -549
- package/lib/collection/components/duet-chip/duet-chip.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-chip/duet-chip.e2e.js +40 -40
- package/lib/collection/components/duet-chip/duet-chip.js +487 -486
- package/lib/collection/components/duet-choice/duet-checkmark.js +136 -136
- package/lib/collection/components/duet-choice/duet-choice.a11y.e2e.js +25 -25
- package/lib/collection/components/duet-choice/duet-choice.e2e.js +171 -171
- package/lib/collection/components/duet-choice/duet-choice.js +1092 -1088
- package/lib/collection/components/duet-choice-group/duet-choice-group.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-choice-group/duet-choice-group.e2e.js +63 -63
- package/lib/collection/components/duet-choice-group/duet-choice-group.js +456 -453
- package/lib/collection/components/duet-collapsible/duet-collapsible.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-collapsible/duet-collapsible.e2e.js +87 -87
- package/lib/collection/components/duet-collapsible/duet-collapsible.js +363 -362
- package/lib/collection/components/duet-combobox/duet-combobox-select-single.js +2 -2
- package/lib/collection/components/duet-combobox/duet-combobox-select.js +8 -8
- package/lib/collection/components/duet-combobox/duet-combobox.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-combobox/duet-combobox.e2e.js +115 -115
- package/lib/collection/components/duet-combobox/duet-combobox.js +670 -669
- package/lib/collection/components/duet-contact-card/duet-contact-card.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-contact-card/duet-contact-card.js +255 -255
- package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.e2e.js +16 -16
- package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.js +127 -127
- package/lib/collection/components/duet-date-picker/date-i18n.js +97 -97
- package/lib/collection/components/duet-date-picker/date-picker-day.js +9 -9
- package/lib/collection/components/duet-date-picker/date-picker-input.js +5 -5
- package/lib/collection/components/duet-date-picker/date-picker-month.js +16 -16
- package/lib/collection/components/duet-date-picker/date-utils.js +95 -95
- package/lib/collection/components/duet-date-picker/date-utils.spec.js +323 -323
- package/lib/collection/components/duet-date-picker/duet-date-picker.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-date-picker/duet-date-picker.e2e.js +618 -618
- package/lib/collection/components/duet-date-picker/duet-date-picker.js +1049 -1044
- package/lib/collection/components/duet-date-picker/utils.js +29 -29
- package/lib/collection/components/duet-divider/duet-divider.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-divider/duet-divider.e2e.js +24 -24
- package/lib/collection/components/duet-divider/duet-divider.js +112 -112
- package/lib/collection/components/duet-editable-table/duet-editable-table-tabledata.js +7 -7
- package/lib/collection/components/duet-editable-table/duet-editable-table.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-editable-table/duet-editable-table.e2e.js +19 -19
- package/lib/collection/components/duet-editable-table/duet-editable-table.js +501 -498
- package/lib/collection/components/duet-empty-state/duet-empty-state.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-empty-state/duet-empty-state.e2e.js +10 -10
- package/lib/collection/components/duet-empty-state/duet-empty-state.js +110 -110
- package/lib/collection/components/duet-fieldset/duet-fieldset.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-fieldset/duet-fieldset.e2e.js +5 -5
- package/lib/collection/components/duet-fieldset/duet-fieldset.js +245 -245
- package/lib/collection/components/duet-file-chooser/duet-file-chooser.js +179 -179
- package/lib/collection/components/duet-footer/duet-footer.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-footer/duet-footer.e2e.js +163 -163
- package/lib/collection/components/duet-footer/duet-footer.js +485 -485
- package/lib/collection/components/duet-grid/duet-grid.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-grid/duet-grid.e2e.js +36 -36
- package/lib/collection/components/duet-grid/duet-grid.js +345 -342
- package/lib/collection/components/duet-grid-item/duet-grid-item.js +233 -230
- package/lib/collection/components/duet-header/duet-header-dropdown.js +12 -12
- package/lib/collection/components/duet-header/duet-header-icon.js +2 -2
- package/lib/collection/components/duet-header/duet-header.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-header/duet-header.e2e.js +430 -430
- package/lib/collection/components/duet-header/duet-header.js +1297 -1295
- package/lib/collection/components/duet-heading/duet-heading.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-heading/duet-heading.e2e.js +21 -21
- package/lib/collection/components/duet-heading/duet-heading.js +230 -230
- package/lib/collection/components/duet-hero/duet-hero.a11y.e2e.js +15 -15
- package/lib/collection/components/duet-hero/duet-hero.e2e.js +166 -166
- package/lib/collection/components/duet-hero/duet-hero.js +814 -814
- package/lib/collection/components/duet-icon/duet-icon.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-icon/duet-icon.e2e.js +26 -26
- package/lib/collection/components/duet-icon/duet-icon.js +392 -392
- package/lib/collection/components/duet-icon/icon-utils.js +59 -59
- package/lib/collection/components/duet-icon/icon-utils.spec.js +76 -76
- package/lib/collection/components/duet-input/duet-input.a11y.e2e.js +20 -20
- package/lib/collection/components/duet-input/duet-input.e2e.js +195 -195
- package/lib/collection/components/duet-input/duet-input.js +1249 -1245
- package/lib/collection/components/duet-label/duet-label.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-label/duet-label.e2e.js +26 -26
- package/lib/collection/components/duet-label/duet-label.js +134 -131
- package/lib/collection/components/duet-layout/duet-layout.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-layout/duet-layout.e2e.js +26 -26
- package/lib/collection/components/duet-layout/duet-layout.js +207 -207
- package/lib/collection/components/duet-link/duet-link.a11y.e2e.js +15 -15
- package/lib/collection/components/duet-link/duet-link.e2e.js +47 -47
- package/lib/collection/components/duet-link/duet-link.js +436 -435
- package/lib/collection/components/duet-list/duet-list.a11y.e2e.js +11 -11
- package/lib/collection/components/duet-list/duet-list.e2e.js +50 -50
- package/lib/collection/components/duet-list/duet-list.js +292 -292
- package/lib/collection/components/duet-list-item/duet-list-item.js +81 -81
- package/lib/collection/components/duet-logo/duet-logo.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-logo/duet-logo.e2e.js +36 -36
- package/lib/collection/components/duet-logo/duet-logo.js +293 -292
- package/lib/collection/components/duet-menu-bar/duet-menu-bar.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-menu-bar/duet-menu-bar.js +261 -261
- package/lib/collection/components/duet-menu-bar-button/duet-menu-bar-button.js +347 -346
- package/lib/collection/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.js +224 -223
- package/lib/collection/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.js +133 -133
- package/lib/collection/components/duet-menu-bar-link/duet-menu-bar-link.js +170 -170
- package/lib/collection/components/duet-modal/duet-modal.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-modal/duet-modal.e2e.js +78 -78
- package/lib/collection/components/duet-modal/duet-modal.js +687 -687
- package/lib/collection/components/duet-multiselect/duet-multiselect.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-multiselect/duet-multiselect.e2e.js +87 -87
- package/lib/collection/components/duet-multiselect/duet-multiselect.js +654 -653
- package/lib/collection/components/duet-nav/duet-nav.js +56 -56
- package/lib/collection/components/duet-notification/duet-notification.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-notification/duet-notification.e2e.js +6 -6
- package/lib/collection/components/duet-notification/duet-notification.js +257 -259
- package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.e2e.js +141 -141
- package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.js +379 -383
- package/lib/collection/components/duet-number-input/duet-number-input-negative.e2e.js +26 -26
- package/lib/collection/components/duet-number-input/duet-number-input.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-number-input/duet-number-input.e2e.js +232 -232
- package/lib/collection/components/duet-number-input/duet-number-input.js +1117 -1113
- package/lib/collection/components/duet-page-heading/duet-page-heading.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-page-heading/duet-page-heading.js +104 -104
- package/lib/collection/components/duet-pagination/duet-pagination-utils.js +4 -4
- package/lib/collection/components/duet-pagination/duet-pagination.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-pagination/duet-pagination.e2e.js +79 -79
- package/lib/collection/components/duet-pagination/duet-pagination.js +677 -677
- package/lib/collection/components/duet-paragraph/duet-paragraph.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-paragraph/duet-paragraph.e2e.js +21 -21
- package/lib/collection/components/duet-paragraph/duet-paragraph.js +190 -190
- package/lib/collection/components/duet-popup-menu/duet-popup-menu.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-popup-menu/duet-popup-menu.js +407 -407
- package/lib/collection/components/duet-popup-menu-item/duet-popup-menu-item.js +344 -343
- package/lib/collection/components/duet-progress/duet-progress.a11y.e2e.js +7 -7
- package/lib/collection/components/duet-progress/duet-progress.e2e.js +6 -6
- package/lib/collection/components/duet-progress/duet-progress.js +276 -273
- package/lib/collection/components/duet-promo-card/duet-promo-card.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-promo-card/duet-promo-card.e2e.js +16 -16
- package/lib/collection/components/duet-promo-card/duet-promo-card.js +206 -206
- package/lib/collection/components/duet-radio/duet-radio.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-radio/duet-radio.e2e.js +126 -126
- package/lib/collection/components/duet-radio/duet-radio.js +609 -605
- package/lib/collection/components/duet-radio-group/duet-radio-group.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-radio-group/duet-radio-group.e2e.js +39 -39
- package/lib/collection/components/duet-radio-group/duet-radio-group.js +423 -420
- package/lib/collection/components/duet-range-slider/duet-range-slider.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-range-slider/duet-range-slider.e2e.js +51 -51
- package/lib/collection/components/duet-range-slider/duet-range-slider.js +561 -557
- package/lib/collection/components/duet-range-stepper/duet-range-stepper.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-range-stepper/duet-range-stepper.e2e.js +46 -46
- package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +341 -341
- package/lib/collection/components/duet-range-stepper/duet-range-stepper.spec.js +17 -17
- package/lib/collection/components/duet-scrollable/duet-scrollable.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-scrollable/duet-scrollable.e2e.js +6 -6
- package/lib/collection/components/duet-scrollable/duet-scrollable.js +294 -294
- package/lib/collection/components/duet-section-layout/duet-section-layout.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-section-layout/duet-section-layout.e2e.js +16 -16
- package/lib/collection/components/duet-section-layout/duet-section-layout.js +75 -75
- package/lib/collection/components/duet-select/duet-select.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-select/duet-select.e2e.js +201 -201
- package/lib/collection/components/duet-select/duet-select.js +722 -718
- package/lib/collection/components/duet-shaped-image/duet-shaped-image.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-shaped-image/duet-shaped-image.js +143 -143
- package/lib/collection/components/duet-show-more/duet-show-more.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-show-more/duet-show-more.js +436 -436
- package/lib/collection/components/duet-slideout/duet-slideout.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-slideout/duet-slideout.js +408 -407
- package/lib/collection/components/duet-slideout-lang/duet-slideout-lang.js +75 -75
- package/lib/collection/components/duet-slideout-link/duet-slideout-link.js +215 -215
- package/lib/collection/components/duet-slideout-panel/duet-slideout-panel.js +282 -281
- package/lib/collection/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.js +177 -176
- package/lib/collection/components/duet-spacer/duet-spacer.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-spacer/duet-spacer.e2e.js +21 -21
- package/lib/collection/components/duet-spacer/duet-spacer.js +110 -110
- package/lib/collection/components/duet-spinner/duet-spinner.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-spinner/duet-spinner.e2e.js +23 -23
- package/lib/collection/components/duet-spinner/duet-spinner.js +131 -131
- package/lib/collection/components/duet-step/duet-step.e2e.js +83 -83
- package/lib/collection/components/duet-step/duet-step.js +292 -290
- package/lib/collection/components/duet-stepper/duet-stepper.a11y.e2e.js +8 -8
- package/lib/collection/components/duet-stepper/duet-stepper.e2e.js +49 -49
- package/lib/collection/components/duet-stepper/duet-stepper.js +243 -243
- package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.js +218 -217
- package/lib/collection/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.js +235 -234
- package/lib/collection/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.js +162 -162
- package/lib/collection/components/duet-submenu-bar-link/duet-submenu-bar-link.js +154 -154
- package/lib/collection/components/duet-tab/duet-tab.e2e.js +10 -10
- package/lib/collection/components/duet-tab/duet-tab.js +162 -161
- package/lib/collection/components/duet-tab-group/duet-tab-group.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-tab-group/duet-tab-group.e2e.js +60 -60
- package/lib/collection/components/duet-tab-group/duet-tab-group.js +633 -632
- package/lib/collection/components/duet-table/duet-table.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-table/duet-table.e2e.js +25 -25
- package/lib/collection/components/duet-table/duet-table.js +284 -281
- package/lib/collection/components/duet-textarea/duet-textarea.a11y.e2e.js +10 -10
- package/lib/collection/components/duet-textarea/duet-textarea.e2e.js +193 -193
- package/lib/collection/components/duet-textarea/duet-textarea.js +849 -845
- package/lib/collection/components/duet-toggle/duet-toggle.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-toggle/duet-toggle.e2e.js +66 -66
- package/lib/collection/components/duet-toggle/duet-toggle.js +468 -464
- package/lib/collection/components/duet-toolbar/duet-toolbar.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-toolbar/duet-toolbar.js +105 -105
- package/lib/collection/components/duet-toolbar-dropdown/duet-toolbar-dropdown.js +221 -220
- package/lib/collection/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.js +160 -160
- package/lib/collection/components/duet-toolbar-link/duet-toolbar-link.js +156 -156
- package/lib/collection/components/duet-tooltip/duet-tooltip-button.js +194 -164
- package/lib/collection/components/duet-tooltip/duet-tooltip-popup.js +280 -251
- package/lib/collection/components/duet-tooltip/duet-tooltip.a11y.e2e.js +14 -14
- package/lib/collection/components/duet-tooltip/duet-tooltip.e2e.js +76 -76
- package/lib/collection/components/duet-tooltip/duet-tooltip.js +533 -529
- package/lib/collection/components/duet-tray/duet-tray.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-tray/duet-tray.e2e.js +67 -67
- package/lib/collection/components/duet-tray/duet-tray.js +315 -315
- package/lib/collection/components/duet-upload/duet-upload.e2e.js +40 -40
- package/lib/collection/components/duet-upload/duet-upload.js +2282 -2276
- package/lib/collection/components/duet-upload/errorcodes.utils.js +22 -22
- package/lib/collection/components/duet-upload/mock.helpers.js +85 -85
- package/lib/collection/components/duet-upload/upload-editable-item-error.js +4 -4
- package/lib/collection/components/duet-upload/upload-editable-item-success.js +15 -15
- package/lib/collection/components/duet-upload/upload-item-category.js +2 -2
- package/lib/collection/components/duet-upload/upload-item-header.js +4 -4
- package/lib/collection/components/duet-upload/upload-validators.js +96 -96
- package/lib/collection/components/duet-upload/upload-validators.spec.js +35 -35
- package/lib/collection/components/duet-upload/upload.helpers.js +8 -8
- package/lib/collection/components/duet-upload/xhr.helpers.js +26 -26
- package/lib/collection/components/duet-upload-aria-status/duet-upload-aria-status.js +194 -194
- package/lib/collection/components/duet-upload-item/duet-upload-item.js +306 -306
- package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.a11y.e2e.js +5 -5
- package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.e2e.js +6 -6
- package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.js +20 -20
- package/lib/collection/global/duet-global.js +22 -22
- package/lib/collection/global/log-wrapper.js +29 -29
- package/lib/collection/utils/axe-core-utils.js +24 -24
- package/lib/collection/utils/create-id.js +2 -2
- package/lib/collection/utils/create-id.spec.js +6 -6
- package/lib/collection/utils/fixture-utils.js +25 -25
- package/lib/collection/utils/focus-utils.js +7 -7
- package/lib/collection/utils/group-by.js +9 -9
- package/lib/collection/utils/input-utils.js +25 -25
- package/lib/collection/utils/is-internet-explorer.js +2 -2
- package/lib/collection/utils/js-utils.js +38 -38
- package/lib/collection/utils/js-utils.spec.js +14 -14
- package/lib/collection/utils/language-utils.js +73 -73
- package/lib/collection/utils/language-utils.spec.js +151 -151
- package/lib/collection/utils/math.utils.js +59 -59
- package/lib/collection/utils/math.utils.spec.js +130 -130
- package/lib/collection/utils/picture-utils.js +2 -2
- package/lib/collection/utils/string-utils.js +31 -31
- package/lib/collection/utils/string-utils.spec.js +32 -32
- package/lib/collection/utils/teleport.js +77 -77
- package/lib/collection/utils/template-utils.js +18 -18
- package/lib/collection/utils/template-utils.spec.js +33 -33
- package/lib/collection/utils/test-utils.js +31 -31
- package/lib/collection/utils/token-utils.js +96 -96
- package/lib/collection/utils/token-utils.spec.js +170 -170
- package/lib/collection/utils/watch-options.js +44 -44
- package/lib/dist-custom-elements/duet-action-button.d.ts +2 -2
- package/lib/dist-custom-elements/duet-action-button.js +1 -1
- package/lib/dist-custom-elements/duet-alert.d.ts +2 -2
- package/lib/dist-custom-elements/duet-alert.js +1 -1
- package/lib/dist-custom-elements/duet-badge.d.ts +2 -2
- package/lib/dist-custom-elements/duet-badge.js +1 -1
- package/lib/dist-custom-elements/duet-banner.d.ts +2 -2
- package/lib/dist-custom-elements/duet-banner.js +96 -96
- package/lib/dist-custom-elements/duet-breadcrumb.d.ts +2 -2
- package/lib/dist-custom-elements/duet-breadcrumb.js +66 -66
- package/lib/dist-custom-elements/duet-breadcrumbs.d.ts +2 -2
- package/lib/dist-custom-elements/duet-breadcrumbs.js +68 -68
- package/lib/dist-custom-elements/duet-button.d.ts +2 -2
- package/lib/dist-custom-elements/duet-button.js +1 -1
- package/lib/dist-custom-elements/duet-callout.d.ts +2 -2
- package/lib/dist-custom-elements/duet-callout.js +57 -57
- package/lib/dist-custom-elements/duet-caption.d.ts +2 -2
- package/lib/dist-custom-elements/duet-caption.js +1 -1
- package/lib/dist-custom-elements/duet-card.d.ts +2 -2
- package/lib/dist-custom-elements/duet-card.js +137 -137
- package/lib/dist-custom-elements/duet-checkbox.d.ts +2 -2
- package/lib/dist-custom-elements/duet-checkbox.js +1 -1
- package/lib/dist-custom-elements/duet-checkmark.d.ts +2 -2
- package/lib/dist-custom-elements/duet-checkmark.js +1 -1
- package/lib/dist-custom-elements/duet-chip.d.ts +2 -2
- package/lib/dist-custom-elements/duet-chip.js +219 -219
- package/lib/dist-custom-elements/duet-choice-group.d.ts +2 -2
- package/lib/dist-custom-elements/duet-choice-group.js +189 -189
- package/lib/dist-custom-elements/duet-choice.d.ts +2 -2
- package/lib/dist-custom-elements/duet-choice.js +357 -357
- package/lib/dist-custom-elements/duet-collapsible.d.ts +2 -2
- package/lib/dist-custom-elements/duet-collapsible.js +130 -130
- package/lib/dist-custom-elements/duet-combobox.d.ts +2 -2
- package/lib/dist-custom-elements/duet-combobox.js +405 -405
- package/lib/dist-custom-elements/duet-contact-card.d.ts +2 -2
- package/lib/dist-custom-elements/duet-contact-card.js +116 -116
- package/lib/dist-custom-elements/duet-cookie-consent.d.ts +2 -2
- package/lib/dist-custom-elements/duet-cookie-consent.js +82 -82
- package/lib/dist-custom-elements/duet-date-picker.d.ts +2 -2
- package/lib/dist-custom-elements/duet-date-picker.js +728 -728
- package/lib/dist-custom-elements/duet-divider.d.ts +2 -2
- package/lib/dist-custom-elements/duet-divider.js +1 -1
- package/lib/dist-custom-elements/duet-editable-table.d.ts +2 -2
- package/lib/dist-custom-elements/duet-editable-table.js +230 -230
- package/lib/dist-custom-elements/duet-empty-state.d.ts +2 -2
- package/lib/dist-custom-elements/duet-empty-state.js +1 -1
- package/lib/dist-custom-elements/duet-fieldset.d.ts +2 -2
- package/lib/dist-custom-elements/duet-fieldset.js +1 -1
- package/lib/dist-custom-elements/duet-file-chooser.d.ts +2 -2
- package/lib/dist-custom-elements/duet-file-chooser.js +70 -70
- package/lib/dist-custom-elements/duet-footer.d.ts +2 -2
- package/lib/dist-custom-elements/duet-footer.js +167 -167
- package/lib/dist-custom-elements/duet-grid-item.d.ts +2 -2
- package/lib/dist-custom-elements/duet-grid-item.js +1 -1
- package/lib/dist-custom-elements/duet-grid.d.ts +2 -2
- package/lib/dist-custom-elements/duet-grid.js +1 -1
- package/lib/dist-custom-elements/duet-header.d.ts +2 -2
- package/lib/dist-custom-elements/duet-header.js +637 -637
- package/lib/dist-custom-elements/duet-heading.d.ts +2 -2
- package/lib/dist-custom-elements/duet-heading.js +1 -1
- package/lib/dist-custom-elements/duet-hero.d.ts +2 -2
- package/lib/dist-custom-elements/duet-hero.js +270 -270
- package/lib/dist-custom-elements/duet-icon.d.ts +2 -2
- package/lib/dist-custom-elements/duet-icon.js +1 -1
- package/lib/dist-custom-elements/duet-input.d.ts +2 -2
- package/lib/dist-custom-elements/duet-input.js +1 -1
- package/lib/dist-custom-elements/duet-label.d.ts +2 -2
- package/lib/dist-custom-elements/duet-label.js +1 -1
- package/lib/dist-custom-elements/duet-layout.d.ts +2 -2
- package/lib/dist-custom-elements/duet-layout.js +73 -73
- package/lib/dist-custom-elements/duet-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-link.js +1 -1
- package/lib/dist-custom-elements/duet-list-item.d.ts +2 -2
- package/lib/dist-custom-elements/duet-list-item.js +1 -1
- package/lib/dist-custom-elements/duet-list.d.ts +2 -2
- package/lib/dist-custom-elements/duet-list.js +1 -1
- package/lib/dist-custom-elements/duet-logo.d.ts +2 -2
- package/lib/dist-custom-elements/duet-logo.js +1 -1
- package/lib/dist-custom-elements/duet-menu-bar-button.d.ts +2 -2
- package/lib/dist-custom-elements/duet-menu-bar-button.js +106 -106
- package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.js +69 -69
- package/lib/dist-custom-elements/duet-menu-bar-dropdown.d.ts +2 -2
- package/lib/dist-custom-elements/duet-menu-bar-dropdown.js +120 -120
- package/lib/dist-custom-elements/duet-menu-bar-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-menu-bar-link.js +85 -85
- package/lib/dist-custom-elements/duet-menu-bar.d.ts +2 -2
- package/lib/dist-custom-elements/duet-menu-bar.js +145 -145
- package/lib/dist-custom-elements/duet-modal.d.ts +2 -2
- package/lib/dist-custom-elements/duet-modal.js +262 -262
- package/lib/dist-custom-elements/duet-multiselect.d.ts +2 -2
- package/lib/dist-custom-elements/duet-multiselect.js +299 -299
- package/lib/dist-custom-elements/duet-nav.d.ts +2 -2
- package/lib/dist-custom-elements/duet-nav.js +36 -36
- package/lib/dist-custom-elements/duet-notification-drawer.d.ts +2 -2
- package/lib/dist-custom-elements/duet-notification-drawer.js +142 -142
- package/lib/dist-custom-elements/duet-notification.d.ts +2 -2
- package/lib/dist-custom-elements/duet-notification.js +76 -76
- package/lib/dist-custom-elements/duet-number-input.d.ts +2 -2
- package/lib/dist-custom-elements/duet-number-input.js +448 -448
- package/lib/dist-custom-elements/duet-page-heading.d.ts +2 -2
- package/lib/dist-custom-elements/duet-page-heading.js +50 -50
- package/lib/dist-custom-elements/duet-pagination.d.ts +2 -2
- package/lib/dist-custom-elements/duet-pagination.js +449 -449
- package/lib/dist-custom-elements/duet-paragraph.d.ts +2 -2
- package/lib/dist-custom-elements/duet-paragraph.js +1 -1
- package/lib/dist-custom-elements/duet-popup-menu-item.d.ts +2 -2
- package/lib/dist-custom-elements/duet-popup-menu-item.js +95 -95
- package/lib/dist-custom-elements/duet-popup-menu.d.ts +2 -2
- package/lib/dist-custom-elements/duet-popup-menu.js +176 -176
- package/lib/dist-custom-elements/duet-progress.d.ts +2 -2
- package/lib/dist-custom-elements/duet-progress.js +1 -1
- package/lib/dist-custom-elements/duet-promo-card.d.ts +2 -2
- package/lib/dist-custom-elements/duet-promo-card.js +74 -74
- package/lib/dist-custom-elements/duet-radio-group.d.ts +2 -2
- package/lib/dist-custom-elements/duet-radio-group.js +183 -183
- package/lib/dist-custom-elements/duet-radio.d.ts +2 -2
- package/lib/dist-custom-elements/duet-radio.js +130 -130
- package/lib/dist-custom-elements/duet-range-slider.d.ts +2 -2
- package/lib/dist-custom-elements/duet-range-slider.js +146 -146
- package/lib/dist-custom-elements/duet-range-stepper.d.ts +2 -2
- package/lib/dist-custom-elements/duet-range-stepper.js +206 -206
- package/lib/dist-custom-elements/duet-scrollable.d.ts +2 -2
- package/lib/dist-custom-elements/duet-scrollable.js +1 -1
- package/lib/dist-custom-elements/duet-section-layout.d.ts +2 -2
- package/lib/dist-custom-elements/duet-section-layout.js +38 -38
- package/lib/dist-custom-elements/duet-select.d.ts +2 -2
- package/lib/dist-custom-elements/duet-select.js +1 -1
- package/lib/dist-custom-elements/duet-shaped-image.d.ts +2 -2
- package/lib/dist-custom-elements/duet-shaped-image.js +48 -48
- package/lib/dist-custom-elements/duet-show-more.d.ts +2 -2
- package/lib/dist-custom-elements/duet-show-more.js +151 -151
- package/lib/dist-custom-elements/duet-slideout-lang.d.ts +2 -2
- package/lib/dist-custom-elements/duet-slideout-lang.js +58 -58
- package/lib/dist-custom-elements/duet-slideout-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-slideout-link.js +63 -63
- package/lib/dist-custom-elements/duet-slideout-panel-dropdown.d.ts +2 -2
- package/lib/dist-custom-elements/duet-slideout-panel-dropdown.js +76 -76
- package/lib/dist-custom-elements/duet-slideout-panel.d.ts +2 -2
- package/lib/dist-custom-elements/duet-slideout-panel.js +149 -149
- package/lib/dist-custom-elements/duet-slideout.d.ts +2 -2
- package/lib/dist-custom-elements/duet-slideout.js +225 -225
- package/lib/dist-custom-elements/duet-spacer.d.ts +2 -2
- package/lib/dist-custom-elements/duet-spacer.js +1 -1
- package/lib/dist-custom-elements/duet-spinner.d.ts +2 -2
- package/lib/dist-custom-elements/duet-spinner.js +1 -1
- package/lib/dist-custom-elements/duet-step.d.ts +2 -2
- package/lib/dist-custom-elements/duet-step.js +116 -118
- package/lib/dist-custom-elements/duet-stepper.d.ts +2 -2
- package/lib/dist-custom-elements/duet-stepper.js +129 -129
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.js +63 -63
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown.d.ts +2 -2
- package/lib/dist-custom-elements/duet-submenu-bar-dropdown.js +131 -131
- package/lib/dist-custom-elements/duet-submenu-bar-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-submenu-bar-link.js +85 -85
- package/lib/dist-custom-elements/duet-submenu-bar.d.ts +2 -2
- package/lib/dist-custom-elements/duet-submenu-bar.js +139 -139
- package/lib/dist-custom-elements/duet-tab-group.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tab-group.js +309 -309
- package/lib/dist-custom-elements/duet-tab.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tab.js +50 -52
- package/lib/dist-custom-elements/duet-table.d.ts +2 -2
- package/lib/dist-custom-elements/duet-table.js +1 -1
- package/lib/dist-custom-elements/duet-textarea.d.ts +2 -2
- package/lib/dist-custom-elements/duet-textarea.js +262 -262
- package/lib/dist-custom-elements/duet-toggle.d.ts +2 -2
- package/lib/dist-custom-elements/duet-toggle.js +113 -113
- package/lib/dist-custom-elements/duet-toolbar-dropdown-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-toolbar-dropdown-link.js +62 -62
- package/lib/dist-custom-elements/duet-toolbar-dropdown.d.ts +2 -2
- package/lib/dist-custom-elements/duet-toolbar-dropdown.js +87 -87
- package/lib/dist-custom-elements/duet-toolbar-link.d.ts +2 -2
- package/lib/dist-custom-elements/duet-toolbar-link.js +58 -58
- package/lib/dist-custom-elements/duet-toolbar.d.ts +2 -2
- package/lib/dist-custom-elements/duet-toolbar.js +52 -52
- package/lib/dist-custom-elements/duet-tooltip-button.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tooltip-button.js +1 -1
- package/lib/dist-custom-elements/duet-tooltip-popup.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tooltip-popup.js +1 -1
- package/lib/dist-custom-elements/duet-tooltip.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tooltip.js +1 -1
- package/lib/dist-custom-elements/duet-tray.d.ts +2 -2
- package/lib/dist-custom-elements/duet-tray.js +119 -119
- package/lib/dist-custom-elements/duet-upload-aria-status.d.ts +2 -2
- package/lib/dist-custom-elements/duet-upload-aria-status.js +1 -1
- package/lib/dist-custom-elements/duet-upload-item.d.ts +2 -2
- package/lib/dist-custom-elements/duet-upload-item.js +1 -1
- package/lib/dist-custom-elements/duet-upload.d.ts +2 -2
- package/lib/dist-custom-elements/duet-upload.js +1163 -1163
- package/lib/dist-custom-elements/duet-visually-hidden.d.ts +2 -2
- package/lib/dist-custom-elements/duet-visually-hidden.js +1 -1
- package/lib/dist-custom-elements/index.js +36 -36
- package/lib/dist-custom-elements/p-02eb68f2.js +123 -0
- package/lib/dist-custom-elements/p-0825cbc5.js +82 -0
- package/lib/dist-custom-elements/p-0a7c0d3d.js +205 -0
- package/lib/dist-custom-elements/p-0e052642.js +55 -0
- package/lib/{esm/slot-query-7877f18f.js → dist-custom-elements/p-11230037.js} +1 -1
- package/lib/dist-custom-elements/{p-52014bb2.js → p-1cd7077a.js} +37 -37
- package/lib/dist-custom-elements/p-247a9d01.js +174 -0
- package/lib/dist-custom-elements/p-257f2e82.js +147 -0
- package/lib/dist-custom-elements/p-2605a78e.js +62 -0
- package/lib/dist-custom-elements/{p-4883df66.js → p-2e36d5bf.js} +74 -74
- package/lib/dist-custom-elements/p-38b35e69.js +265 -0
- package/lib/dist-custom-elements/{p-d49389d2.js → p-39827833.js} +171 -171
- package/lib/dist-custom-elements/p-3a17ba0c.js +226 -0
- package/lib/dist-custom-elements/p-402e81c0.js +206 -0
- package/lib/dist-custom-elements/p-43b89e38.js +9 -0
- package/lib/dist-custom-elements/{p-274d11e3.js → p-4ab776f4.js} +6 -6
- package/lib/dist-custom-elements/p-4f43c247.js +126 -0
- package/lib/dist-custom-elements/p-57a1cba9.js +117 -0
- package/lib/dist-custom-elements/p-598731b0.js +110 -0
- package/lib/dist-custom-elements/p-5e59e970.js +11 -0
- package/lib/dist-custom-elements/{p-2b1a35cd.js → p-5fe36e8b.js} +278 -278
- package/lib/dist-custom-elements/{p-7247d0b2.js → p-6f7dcc4d.js} +65 -43
- package/lib/dist-custom-elements/{p-9dd26401.js → p-6fbb1970.js} +128 -128
- package/lib/dist-custom-elements/{p-21b815ae.js → p-70a66e96.js} +42 -42
- package/lib/dist-custom-elements/{p-180c0d2d.js → p-76b345c8.js} +174 -174
- package/lib/dist-custom-elements/p-7d8a2628.js +57 -0
- package/lib/dist-custom-elements/p-86649f25.js +465 -0
- package/lib/dist-custom-elements/p-872a2adb.js +93 -0
- package/lib/dist-custom-elements/p-98746766.js +60 -0
- package/lib/dist-custom-elements/p-9b5f8ba4.js +98 -0
- package/lib/{esm/js-utils-a35dcc8c.js → dist-custom-elements/p-9e371678.js} +27 -27
- package/lib/dist-custom-elements/{p-6c2e13f0.js → p-a45d0398.js} +56 -56
- package/lib/dist-custom-elements/p-a58bd561.js +13 -0
- package/lib/dist-custom-elements/{p-d0987122.js → p-a6e6f578.js} +48 -48
- package/lib/dist-custom-elements/p-b2e550a3.js +97 -0
- package/lib/dist-custom-elements/{p-c0af301d.js → p-ba0f907f.js} +64 -64
- package/lib/dist-custom-elements/{p-ba870310.js → p-ba9ad148.js} +47 -47
- package/lib/dist-custom-elements/p-bc3fa417.js +76 -0
- package/lib/dist-custom-elements/{p-e4355989.js → p-ce1cc5ab.js} +98 -88
- package/lib/dist-custom-elements/p-d5f3b174.js +38 -0
- package/lib/dist-custom-elements/{p-bcfb9e03.js → p-d5fc2405.js} +50 -50
- package/lib/dist-custom-elements/p-df7874f9.js +53 -0
- package/lib/dist-custom-elements/{p-3ccd454b.js → p-dfd29738.js} +43 -43
- package/lib/dist-custom-elements/p-eef66341.js +18 -0
- package/lib/dist-custom-elements/p-f91cddd9.js +269 -0
- package/lib/dist-custom-elements/p-ff387a2f.js +59 -0
- package/lib/dist-custom-elements/p-ffc7f083.js +137 -0
- package/lib/duet/duet.esm.js +1 -1
- package/lib/duet/duet.js +15 -15
- package/lib/duet/p-07af14f1.js +4 -0
- package/lib/duet/{p-dc63462c.entry.js → p-0a7c3ecf.entry.js} +1 -1
- package/lib/duet/{p-57afa4b8.system.entry.js → p-0aa1b1cd.system.entry.js} +2 -2
- package/lib/duet/{p-76b68b44.entry.js → p-105a1448.entry.js} +1 -1
- package/lib/duet/{p-4aa91f55.entry.js → p-132ea5e6.entry.js} +1 -1
- package/lib/duet/{p-33765ffd.entry.js → p-13876bc6.entry.js} +1 -1
- package/lib/duet/{p-ff7a57a9.entry.js → p-13f7d993.entry.js} +1 -1
- package/lib/duet/{p-1dadf501.entry.js → p-16db7b1e.entry.js} +1 -1
- package/lib/duet/{p-3fd4c411.entry.js → p-191959c7.entry.js} +1 -1
- package/lib/duet/p-1b11541f.entry.js +4 -0
- package/lib/duet/{p-faa6ea94.system.entry.js → p-1e587bcc.system.entry.js} +1 -1
- package/lib/duet/{p-e95d09bb.system.entry.js → p-1ea5e7e8.system.entry.js} +1 -1
- package/lib/duet/{p-566668e1.entry.js → p-1fbbf69f.entry.js} +1 -1
- package/lib/duet/{p-ded28a6e.system.entry.js → p-200089a6.system.entry.js} +1 -1
- package/lib/duet/{p-8972381a.system.js → p-224f6c46.system.js} +1 -1
- package/lib/duet/{p-604175d2.entry.js → p-226489c4.entry.js} +1 -1
- package/lib/duet/p-2349e838.entry.js +4 -0
- package/lib/duet/{p-05e3a2cc.entry.js → p-246db04a.entry.js} +1 -1
- package/lib/duet/p-24f7d6bf.entry.js +4 -0
- package/lib/duet/p-258b8732.entry.js +4 -0
- package/lib/duet/{p-6da7b933.entry.js → p-25bde810.entry.js} +1 -1
- package/lib/duet/{p-177c55aa.entry.js → p-26c85bab.entry.js} +1 -1
- package/lib/duet/{p-2b70d58a.system.entry.js → p-26f7d1b9.system.entry.js} +1 -1
- package/lib/duet/{p-8aa7771f.entry.js → p-2b9499f1.entry.js} +1 -1
- package/lib/duet/{p-afd00506.entry.js → p-2c730d40.entry.js} +1 -1
- package/lib/duet/{p-4883df66.js → p-2e36d5bf.js} +1 -1
- package/lib/duet/{p-d9353709.entry.js → p-2f0a23ae.entry.js} +1 -1
- package/lib/duet/{p-89b82e5a.entry.js → p-338ba4d2.entry.js} +1 -1
- package/lib/duet/{p-445523a8.entry.js → p-33d6e5ef.entry.js} +1 -1
- package/lib/duet/{p-089043d5.entry.js → p-342527a4.entry.js} +1 -1
- package/lib/duet/{p-fd1fb3f9.system.entry.js → p-3aa3fb24.system.entry.js} +1 -1
- package/lib/duet/{p-789365cb.system.entry.js → p-3cafacc3.system.entry.js} +1 -1
- package/lib/duet/{p-c36a1bb7.entry.js → p-3e1248d8.entry.js} +1 -1
- package/lib/duet/{p-8ba72fa0.system.entry.js → p-40ee5f5e.system.entry.js} +1 -1
- package/lib/duet/p-4212bab8.js +5 -0
- package/lib/duet/{p-80013513.system.entry.js → p-42b49430.system.entry.js} +1 -1
- package/lib/duet/{p-c3289020.system.entry.js → p-42b9c6f9.system.entry.js} +1 -1
- package/lib/duet/{p-6ae7579a.system.entry.js → p-464adc60.system.entry.js} +1 -1
- package/lib/duet/{p-18e2e6c8.system.entry.js → p-48d6a81d.system.entry.js} +1 -1
- package/lib/duet/p-4911c778.system.entry.js +4 -0
- package/lib/duet/{p-d02e3fe0.system.entry.js → p-4b272eca.system.entry.js} +1 -1
- package/lib/duet/p-4c650a9e.entry.js +4 -0
- package/lib/duet/{p-ac367891.entry.js → p-502f43bb.entry.js} +1 -1
- package/lib/duet/{p-7e1f37e2.entry.js → p-513dfe01.entry.js} +1 -1
- package/lib/duet/{p-b8db6e02.system.entry.js → p-51bdb5fd.system.entry.js} +1 -1
- package/lib/duet/{p-3b0969dc.entry.js → p-51d53e57.entry.js} +1 -1
- package/lib/duet/{p-59b9c68b.entry.js → p-542d792f.entry.js} +1 -1
- package/lib/duet/{p-07401f31.entry.js → p-55f98dc4.entry.js} +1 -1
- package/lib/duet/{p-77b43a95.entry.js → p-57a63204.entry.js} +1 -1
- package/lib/duet/{p-1e9f1c45.entry.js → p-580a7bae.entry.js} +1 -1
- package/lib/duet/{p-aa6d7d97.entry.js → p-5b86c564.entry.js} +1 -1
- package/lib/duet/{p-038ac494.system.entry.js → p-5c94249e.system.entry.js} +1 -1
- package/lib/duet/{p-4630d3cb.entry.js → p-5dccd17b.entry.js} +1 -1
- package/lib/duet/{p-0fd024c9.system.js → p-5ed00370.system.js} +1 -1
- package/lib/duet/{p-e1e89fd5.entry.js → p-5f43dbcf.entry.js} +1 -1
- package/lib/duet/{p-0d0101d9.system.entry.js → p-60cee508.system.entry.js} +1 -1
- package/lib/duet/{p-501f62eb.system.entry.js → p-61fe1543.system.entry.js} +1 -1
- package/lib/duet/{p-a7e7c277.system.entry.js → p-625f750f.system.entry.js} +1 -1
- package/lib/duet/{p-6f3f2e66.entry.js → p-6576401a.entry.js} +1 -1
- package/lib/duet/{p-3b147393.entry.js → p-65e434a5.entry.js} +1 -1
- package/lib/duet/{p-113d90cb.system.entry.js → p-69fba9fe.system.entry.js} +1 -1
- package/lib/duet/{p-9a613a25.system.entry.js → p-6a972453.system.entry.js} +1 -1
- package/lib/duet/{p-0f1ec9c0.entry.js → p-6b2876f1.entry.js} +1 -1
- package/lib/duet/{p-08f2114a.entry.js → p-6cae9d4b.entry.js} +1 -1
- package/lib/duet/{p-e90b5865.system.entry.js → p-6e6ececd.system.entry.js} +1 -1
- package/lib/duet/{p-35990684.entry.js → p-6f891451.entry.js} +1 -1
- package/lib/duet/{p-ed961bc6.system.entry.js → p-71ef1651.system.entry.js} +1 -1
- package/lib/duet/{p-5eb2a31f.system.entry.js → p-73f176dc.system.entry.js} +1 -1
- package/lib/duet/{p-56bdad28.system.entry.js → p-75243a15.system.entry.js} +1 -1
- package/lib/duet/{p-c801ebee.entry.js → p-785ff4f2.entry.js} +1 -1
- package/lib/duet/{p-3639371a.system.entry.js → p-793d7e04.system.entry.js} +1 -1
- package/lib/duet/{p-a91c8a42.system.entry.js → p-7a085479.system.entry.js} +1 -1
- package/lib/duet/{p-54fbdedf.entry.js → p-7a832531.entry.js} +1 -1
- package/lib/duet/p-7a91a53e.system.entry.js +4 -0
- package/lib/duet/{p-2c78c637.system.entry.js → p-7b5cd54a.system.entry.js} +1 -1
- package/lib/duet/{p-9cba7f04.system.entry.js → p-7b847e11.system.entry.js} +1 -1
- package/lib/duet/{p-b0ab2ead.system.entry.js → p-7bbc5a65.system.entry.js} +1 -1
- package/lib/duet/{p-9f835123.system.entry.js → p-7e833901.system.entry.js} +1 -1
- package/lib/duet/{p-4f770f51.system.entry.js → p-81230084.system.entry.js} +1 -1
- package/lib/duet/{p-f75a1805.system.entry.js → p-8920edb7.system.entry.js} +1 -1
- package/lib/duet/{p-0606cea3.entry.js → p-8a16fb3c.entry.js} +1 -1
- package/lib/duet/{p-0c702d36.entry.js → p-8bc5df74.entry.js} +1 -1
- package/lib/duet/{p-c79a0641.entry.js → p-8cf2feaa.entry.js} +1 -1
- package/lib/duet/{p-fcbb30e1.entry.js → p-8d69624a.entry.js} +1 -1
- package/lib/duet/{p-39078c27.system.entry.js → p-8d8bdf90.system.entry.js} +2 -2
- package/lib/duet/{p-301ddafe.entry.js → p-8e414050.entry.js} +1 -1
- package/lib/duet/{p-0e89cbae.system.entry.js → p-8eb82556.system.entry.js} +1 -1
- package/lib/duet/{p-e6168195.entry.js → p-903efe1d.entry.js} +1 -1
- package/lib/duet/{p-79faf440.system.entry.js → p-9192de69.system.entry.js} +1 -1
- package/lib/duet/{p-e9be64de.system.entry.js → p-9308c47c.system.entry.js} +1 -1
- package/lib/duet/{p-61d39730.entry.js → p-97488cc9.entry.js} +1 -1
- package/lib/duet/{p-a0ecfa13.system.entry.js → p-97d72f16.system.entry.js} +1 -1
- package/lib/duet/{p-a8878fd3.entry.js → p-9aa0ebba.entry.js} +1 -1
- package/lib/duet/{p-30bd8807.entry.js → p-9de9d3eb.entry.js} +1 -1
- package/lib/duet/{p-8bf363f4.system.entry.js → p-9ec69dbc.system.entry.js} +1 -1
- package/lib/duet/{p-ccef6554.system.entry.js → p-9f39d6de.system.entry.js} +1 -1
- package/lib/duet/{p-c08928e1.system.entry.js → p-9fb3e7b4.system.entry.js} +1 -1
- package/lib/duet/{p-9e2a2cf7.entry.js → p-a4dd147b.entry.js} +1 -1
- package/lib/duet/{p-fab7c1ed.entry.js → p-a5504252.entry.js} +1 -1
- package/lib/duet/{p-50ec2074.entry.js → p-a59b5059.entry.js} +1 -1
- package/lib/duet/{p-716329a7.system.entry.js → p-aa6ad573.system.entry.js} +1 -1
- package/lib/duet/{p-8855bd51.entry.js → p-ab2da6f9.entry.js} +1 -1
- package/lib/duet/{p-032a613f.system.entry.js → p-ad0179fa.system.entry.js} +1 -1
- package/lib/duet/{p-ed011021.system.entry.js → p-ad3021d3.system.entry.js} +1 -1
- package/lib/duet/{p-1a877bd1.system.entry.js → p-ad5e3c9c.system.entry.js} +1 -1
- package/lib/duet/{p-bfeeee67.system.entry.js → p-b022a3d5.system.entry.js} +2 -2
- package/lib/duet/{p-50f4319b.system.entry.js → p-b036d4f0.system.entry.js} +1 -1
- package/lib/duet/{p-98d01f1c.system.entry.js → p-b27b1902.system.entry.js} +1 -1
- package/lib/duet/{p-1b3fde48.entry.js → p-b54be005.entry.js} +1 -1
- package/lib/duet/{p-37af6296.system.entry.js → p-b5831260.system.entry.js} +1 -1
- package/lib/duet/p-b5ffa156.entry.js +4 -0
- package/lib/duet/{p-b46fa994.system.entry.js → p-b62108c8.system.entry.js} +2 -2
- package/lib/duet/{p-6205bcb4.entry.js → p-b62ed1f0.entry.js} +1 -1
- package/lib/duet/{p-bdc59646.entry.js → p-b6af2626.entry.js} +1 -1
- package/lib/duet/{p-0558a17e.system.entry.js → p-b868bb09.system.entry.js} +1 -1
- package/lib/duet/{p-ff09528c.system.entry.js → p-b8b0249f.system.entry.js} +1 -1
- package/lib/duet/{p-def3df7d.entry.js → p-bc16a555.entry.js} +1 -1
- package/lib/duet/p-bcd1e9d8.system.entry.js +4 -0
- package/lib/duet/{p-ee796d5e.system.entry.js → p-bd97fff1.system.entry.js} +1 -1
- package/lib/duet/{p-e1d3c21e.entry.js → p-bf0e9413.entry.js} +1 -1
- package/lib/duet/{p-e3ffb537.system.entry.js → p-bf3bf531.system.entry.js} +1 -1
- package/lib/duet/{p-58a08a7b.system.entry.js → p-c0152624.system.entry.js} +1 -1
- package/lib/duet/{p-6da4db52.system.entry.js → p-c0c9acd9.system.entry.js} +1 -1
- package/lib/duet/{p-7a46b4ef.system.entry.js → p-c565698d.system.entry.js} +1 -1
- package/lib/duet/p-cb69ce4a.entry.js +4 -0
- package/lib/duet/{p-64b323bf.entry.js → p-cd8177fe.entry.js} +1 -1
- package/lib/duet/{p-68f3526e.entry.js → p-cfb85117.entry.js} +1 -1
- package/lib/duet/{p-c5725fee.system.entry.js → p-d13cb6f4.system.entry.js} +1 -1
- package/lib/duet/{p-efa6152d.entry.js → p-d2681203.entry.js} +1 -1
- package/lib/duet/{p-bf3331ed.entry.js → p-d3069a7b.entry.js} +1 -1
- package/lib/duet/{p-c23bf76f.system.entry.js → p-d32e9ae1.system.entry.js} +1 -1
- package/lib/duet/{p-13915ce0.entry.js → p-d41e819d.entry.js} +1 -1
- package/lib/duet/{p-463ddc2c.system.entry.js → p-d5d57b8f.system.entry.js} +1 -1
- package/lib/duet/{p-95df823b.entry.js → p-d73f7574.entry.js} +1 -1
- package/lib/duet/{p-ed8f7cac.entry.js → p-d8104d1b.entry.js} +1 -1
- package/lib/duet/{p-d5a9cfac.entry.js → p-d8ee9cc9.entry.js} +1 -1
- package/lib/duet/{p-7671b7b7.system.js → p-da20db91.system.js} +1 -1
- package/lib/duet/{p-5311f96e.system.entry.js → p-db14fdfd.system.entry.js} +1 -1
- package/lib/duet/{p-c4e79927.entry.js → p-dce5a6f9.entry.js} +1 -1
- package/lib/duet/p-dcfe6e27.system.entry.js +4 -0
- package/lib/duet/{p-8eff5e91.system.entry.js → p-e1f6b6f3.system.entry.js} +2 -2
- package/lib/duet/p-e3574b05.entry.js +4 -0
- package/lib/duet/{p-051488a0.system.entry.js → p-e3a8dcb3.system.entry.js} +1 -1
- package/lib/duet/{p-d02b92fa.entry.js → p-e3c5663f.entry.js} +1 -1
- package/lib/duet/{p-e4aa049f.system.entry.js → p-e6bd0e51.system.entry.js} +1 -1
- package/lib/duet/p-e79bf1c2.entry.js +4 -0
- package/lib/duet/{p-995e1b11.system.entry.js → p-e96a5f8b.system.entry.js} +1 -1
- package/lib/duet/{p-cef36d14.system.entry.js → p-ebe22b98.system.entry.js} +1 -1
- package/lib/duet/{p-5c0de81a.system.entry.js → p-ec98691e.system.entry.js} +1 -1
- package/lib/duet/p-f009e108.entry.js +4 -0
- package/lib/duet/{p-5ae9b74f.entry.js → p-f0dc0a5b.entry.js} +1 -1
- package/lib/duet/{p-da9fe13c.system.entry.js → p-f1d894da.system.entry.js} +1 -1
- package/lib/duet/{p-96f66e14.system.entry.js → p-f25e57fe.system.entry.js} +1 -1
- package/lib/duet/{p-efdbddb5.system.js → p-f3bf4d40.system.js} +1 -1
- package/lib/duet/{p-80d1a5d3.entry.js → p-f4493cb6.entry.js} +1 -1
- package/lib/duet/p-f7b58d72.system.js +5 -0
- package/lib/duet/{p-e7a22d84.system.entry.js → p-f8c64564.system.entry.js} +1 -1
- package/lib/duet/p-fabb616b.js +4 -0
- package/lib/duet/{p-5c5012f6.system.entry.js → p-fb30fcb0.system.entry.js} +1 -1
- package/lib/duet/{p-d4d7d607.system.entry.js → p-fb8a5b68.system.entry.js} +1 -1
- package/lib/duet/{p-34b5285b.system.entry.js → p-fc0fe631.system.entry.js} +2 -2
- package/lib/duet/{p-e491c098.system.entry.js → p-fc4f175f.system.entry.js} +1 -1
- package/lib/duet/{p-7de467b8.entry.js → p-ff815e47.entry.js} +1 -1
- package/lib/esm/app-globals-41b37f11.js +52 -0
- package/lib/esm/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +6 -6
- package/lib/esm/create-id-149a1b6d.js +11 -0
- package/lib/esm/duet-action-button.entry.js +133 -133
- package/lib/esm/duet-alert.entry.js +106 -106
- package/lib/esm/duet-badge.entry.js +29 -29
- package/lib/esm/duet-banner.entry.js +52 -52
- package/lib/esm/duet-breadcrumb.entry.js +41 -41
- package/lib/esm/duet-breadcrumbs.entry.js +51 -51
- package/lib/esm/duet-button_2.entry.js +229 -229
- package/lib/esm/duet-callout.entry.js +28 -28
- package/lib/esm/duet-caption_4.entry.js +187 -187
- package/lib/esm/duet-card.entry.js +93 -93
- package/lib/esm/duet-checkbox.entry.js +85 -85
- package/lib/esm/duet-checkmark.entry.js +23 -23
- package/lib/esm/duet-chip.entry.js +182 -182
- package/lib/esm/duet-choice_2.entry.js +392 -392
- package/lib/esm/duet-collapsible.entry.js +98 -98
- package/lib/esm/duet-combobox.entry.js +362 -362
- package/lib/esm/duet-contact-card.entry.js +49 -49
- package/lib/esm/duet-cookie-consent.entry.js +35 -35
- package/lib/esm/duet-date-picker.entry.js +610 -610
- package/lib/esm/duet-divider_2.entry.js +53 -53
- package/lib/esm/duet-editable-table_3.entry.js +1247 -1247
- package/lib/esm/duet-empty-state.entry.js +26 -26
- package/lib/esm/duet-fieldset.entry.js +50 -50
- package/lib/esm/duet-file-chooser.entry.js +44 -44
- package/lib/esm/duet-footer.entry.js +118 -118
- package/lib/esm/duet-grid_2.entry.js +185 -185
- package/lib/esm/duet-header_2.entry.js +610 -610
- package/lib/esm/duet-hero.entry.js +172 -172
- package/lib/esm/duet-icon.entry.js +141 -141
- package/lib/esm/duet-input_2.entry.js +346 -346
- package/lib/esm/duet-layout.entry.js +51 -51
- package/lib/esm/duet-list_2.entry.js +99 -99
- package/lib/esm/duet-menu-bar-button.entry.js +70 -70
- package/lib/esm/duet-menu-bar-dropdown-link.entry.js +44 -44
- package/lib/esm/duet-menu-bar-dropdown.entry.js +93 -93
- package/lib/esm/duet-menu-bar-link.entry.js +58 -58
- package/lib/esm/duet-menu-bar.entry.js +116 -116
- package/lib/esm/duet-modal.entry.js +188 -188
- package/lib/esm/duet-multiselect.entry.js +206 -206
- package/lib/esm/duet-nav.entry.js +20 -20
- package/lib/esm/duet-notification_2.entry.js +140 -140
- package/lib/esm/duet-number-input.entry.js +337 -337
- package/lib/esm/duet-page-heading.entry.js +26 -26
- package/lib/esm/duet-pagination_2.entry.js +511 -511
- package/lib/esm/duet-popup-menu-item.entry.js +62 -62
- package/lib/esm/duet-popup-menu.entry.js +147 -147
- package/lib/esm/duet-progress.entry.js +54 -54
- package/lib/esm/duet-promo-card.entry.js +40 -40
- package/lib/esm/duet-radio_2.entry.js +197 -197
- package/lib/esm/duet-range-slider.entry.js +105 -105
- package/lib/esm/duet-scrollable_3.entry.js +384 -386
- package/lib/esm/duet-section-layout.entry.js +21 -21
- package/lib/esm/duet-select.entry.js +156 -156
- package/lib/esm/duet-shaped-image.entry.js +28 -28
- package/lib/esm/duet-show-more.entry.js +98 -98
- package/lib/esm/duet-slideout-lang.entry.js +36 -36
- package/lib/esm/duet-slideout-link.entry.js +33 -33
- package/lib/esm/duet-slideout-panel-dropdown.entry.js +50 -50
- package/lib/esm/duet-slideout-panel.entry.js +120 -120
- package/lib/esm/duet-slideout.entry.js +194 -194
- package/lib/esm/duet-step_2.entry.js +182 -184
- package/lib/esm/duet-submenu-bar-dropdown-link.entry.js +36 -36
- package/lib/esm/duet-submenu-bar-dropdown.entry.js +103 -103
- package/lib/esm/duet-submenu-bar-link.entry.js +59 -59
- package/lib/esm/duet-submenu-bar.entry.js +110 -110
- package/lib/esm/duet-textarea.entry.js +160 -160
- package/lib/esm/duet-toggle.entry.js +72 -72
- package/lib/esm/duet-toolbar-dropdown-link.entry.js +35 -35
- package/lib/esm/duet-toolbar-dropdown.entry.js +59 -59
- package/lib/esm/duet-toolbar-link.entry.js +31 -31
- package/lib/esm/duet-toolbar.entry.js +34 -34
- package/lib/esm/duet-tooltip-button_2.entry.js +98 -80
- package/lib/esm/duet-tooltip.entry.js +185 -187
- package/lib/esm/duet-tray.entry.js +82 -82
- package/lib/esm/duet-upload-aria-status.entry.js +65 -65
- package/lib/esm/duet-upload-item.entry.js +81 -81
- package/lib/esm/duet-visually-hidden.entry.js +12 -12
- package/lib/esm/duet.js +5 -5
- package/lib/esm/errorcodes.utils-e681347c.js +36 -0
- package/lib/esm/focus-utils-d54af982.js +18 -0
- package/lib/esm/{index-b3bf9761.js → index-d4489a2e.js} +106 -45
- package/lib/esm/input-utils-85681162.js +53 -0
- package/lib/esm/is-internet-explorer-2c48f686.js +9 -0
- package/lib/{dist-custom-elements/p-3d8d557b.js → esm/js-utils-9b9e0039.js} +27 -27
- package/lib/esm/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +74 -74
- package/lib/esm/loader.js +4 -4
- package/lib/{dist-custom-elements/p-f8c76b25.js → esm/slot-query-022710bb.js} +1 -1
- package/lib/esm/string-utils-ca039233.js +55 -0
- package/lib/esm/teleport-4462e8c1.js +97 -0
- package/lib/esm/themeable-component-724c0f7e.js +13 -0
- package/lib/esm/token-utils-b4bd3ec7.js +117 -0
- package/lib/esm/watch-options-e96ecd92.js +57 -0
- package/lib/esm-es5/duet-action-button.entry.js +1 -1
- package/lib/esm-es5/duet-alert.entry.js +1 -1
- package/lib/esm-es5/duet-badge.entry.js +1 -1
- package/lib/esm-es5/duet-banner.entry.js +1 -1
- package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
- package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
- package/lib/esm-es5/duet-button_2.entry.js +1 -1
- package/lib/esm-es5/duet-callout.entry.js +1 -1
- package/lib/esm-es5/duet-caption_4.entry.js +1 -1
- package/lib/esm-es5/duet-card.entry.js +1 -1
- package/lib/esm-es5/duet-checkbox.entry.js +1 -1
- package/lib/esm-es5/duet-checkmark.entry.js +1 -1
- package/lib/esm-es5/duet-chip.entry.js +1 -1
- package/lib/esm-es5/duet-choice_2.entry.js +1 -1
- package/lib/esm-es5/duet-collapsible.entry.js +1 -1
- package/lib/esm-es5/duet-combobox.entry.js +1 -1
- package/lib/esm-es5/duet-contact-card.entry.js +1 -1
- package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
- package/lib/esm-es5/duet-date-picker.entry.js +1 -1
- package/lib/esm-es5/duet-divider_2.entry.js +1 -1
- package/lib/esm-es5/duet-editable-table_3.entry.js +1 -1
- package/lib/esm-es5/duet-empty-state.entry.js +1 -1
- package/lib/esm-es5/duet-fieldset.entry.js +1 -1
- package/lib/esm-es5/duet-file-chooser.entry.js +1 -1
- package/lib/esm-es5/duet-footer.entry.js +1 -1
- package/lib/esm-es5/duet-grid_2.entry.js +1 -1
- package/lib/esm-es5/duet-header_2.entry.js +1 -1
- package/lib/esm-es5/duet-hero.entry.js +1 -1
- package/lib/esm-es5/duet-icon.entry.js +1 -1
- package/lib/esm-es5/duet-input_2.entry.js +1 -1
- package/lib/esm-es5/duet-layout.entry.js +1 -1
- package/lib/esm-es5/duet-list_2.entry.js +1 -1
- package/lib/esm-es5/duet-menu-bar-button.entry.js +1 -1
- package/lib/esm-es5/duet-menu-bar-dropdown-link.entry.js +1 -1
- package/lib/esm-es5/duet-menu-bar-dropdown.entry.js +1 -1
- package/lib/esm-es5/duet-menu-bar-link.entry.js +1 -1
- package/lib/esm-es5/duet-menu-bar.entry.js +1 -1
- package/lib/esm-es5/duet-modal.entry.js +1 -1
- package/lib/esm-es5/duet-multiselect.entry.js +1 -1
- package/lib/esm-es5/duet-nav.entry.js +1 -1
- package/lib/esm-es5/duet-notification_2.entry.js +1 -1
- package/lib/esm-es5/duet-number-input.entry.js +1 -1
- package/lib/esm-es5/duet-page-heading.entry.js +1 -1
- package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
- package/lib/esm-es5/duet-popup-menu-item.entry.js +1 -1
- package/lib/esm-es5/duet-popup-menu.entry.js +1 -1
- package/lib/esm-es5/duet-progress.entry.js +1 -1
- package/lib/esm-es5/duet-promo-card.entry.js +1 -1
- package/lib/esm-es5/duet-radio_2.entry.js +1 -1
- package/lib/esm-es5/duet-range-slider.entry.js +1 -1
- package/lib/esm-es5/duet-scrollable_3.entry.js +2 -2
- package/lib/esm-es5/duet-section-layout.entry.js +1 -1
- package/lib/esm-es5/duet-select.entry.js +1 -1
- package/lib/esm-es5/duet-shaped-image.entry.js +1 -1
- package/lib/esm-es5/duet-show-more.entry.js +1 -1
- package/lib/esm-es5/duet-slideout-lang.entry.js +1 -1
- package/lib/esm-es5/duet-slideout-link.entry.js +1 -1
- package/lib/esm-es5/duet-slideout-panel-dropdown.entry.js +1 -1
- package/lib/esm-es5/duet-slideout-panel.entry.js +1 -1
- package/lib/esm-es5/duet-slideout.entry.js +2 -2
- package/lib/esm-es5/duet-step_2.entry.js +2 -2
- package/lib/esm-es5/duet-submenu-bar-dropdown-link.entry.js +1 -1
- package/lib/esm-es5/duet-submenu-bar-dropdown.entry.js +1 -1
- package/lib/esm-es5/duet-submenu-bar-link.entry.js +1 -1
- package/lib/esm-es5/duet-submenu-bar.entry.js +1 -1
- package/lib/esm-es5/duet-textarea.entry.js +1 -1
- package/lib/esm-es5/duet-toggle.entry.js +1 -1
- package/lib/esm-es5/duet-toolbar-dropdown-link.entry.js +1 -1
- package/lib/esm-es5/duet-toolbar-dropdown.entry.js +1 -1
- package/lib/esm-es5/duet-toolbar-link.entry.js +1 -1
- package/lib/esm-es5/duet-toolbar.entry.js +1 -1
- package/lib/esm-es5/duet-tooltip-button_2.entry.js +2 -2
- package/lib/esm-es5/duet-tooltip.entry.js +1 -1
- package/lib/esm-es5/duet-tray.entry.js +1 -1
- package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
- package/lib/esm-es5/duet-upload-item.entry.js +1 -1
- package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
- package/lib/esm-es5/duet.js +1 -1
- package/lib/esm-es5/{errorcodes.utils-424b1197.js → errorcodes.utils-e681347c.js} +1 -1
- package/lib/esm-es5/focus-utils-d54af982.js +4 -0
- package/lib/esm-es5/index-d4489a2e.js +5 -0
- package/lib/esm-es5/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +1 -1
- package/lib/esm-es5/loader.js +1 -1
- package/lib/types/common/a11y-component.d.ts +7 -7
- package/lib/types/common/form-components.d.ts +15 -15
- package/lib/types/common/themeable-component.d.ts +4 -4
- package/lib/types/components/duet-action-button/duet-action-button.d.ts +126 -126
- package/lib/types/components/duet-alert/duet-alert.d.ts +100 -100
- package/lib/types/components/duet-badge/duet-badge.d.ts +27 -27
- package/lib/types/components/duet-banner/duet-banner.d.ts +58 -58
- package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +32 -32
- package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -23
- package/lib/types/components/duet-button/duet-button.d.ts +219 -219
- package/lib/types/components/duet-callout/duet-callout.d.ts +19 -19
- package/lib/types/components/duet-caption/duet-caption.d.ts +26 -26
- package/lib/types/components/duet-card/duet-card.d.ts +119 -119
- package/lib/types/components/duet-checkbox/duet-checkbox.d.ts +132 -132
- package/lib/types/components/duet-chip/duet-chip.d.ts +109 -109
- package/lib/types/components/duet-choice/duet-checkmark.d.ts +27 -27
- package/lib/types/components/duet-choice/duet-choice.d.ts +259 -259
- package/lib/types/components/duet-choice-group/duet-choice-group.d.ts +103 -103
- package/lib/types/components/duet-collapsible/duet-collapsible.d.ts +88 -88
- package/lib/types/components/duet-combobox/duet-combobox-select-single.d.ts +3 -3
- package/lib/types/components/duet-combobox/duet-combobox-select.d.ts +8 -8
- package/lib/types/components/duet-combobox/duet-combobox.d.ts +135 -135
- package/lib/types/components/duet-contact-card/duet-contact-card.d.ts +60 -60
- package/lib/types/components/duet-cookie-consent/duet-cookie-consent.d.ts +29 -29
- package/lib/types/components/duet-date-picker/date-i18n.d.ts +13 -13
- package/lib/types/components/duet-date-picker/date-picker-day.d.ts +9 -9
- package/lib/types/components/duet-date-picker/date-picker-input.d.ts +28 -28
- package/lib/types/components/duet-date-picker/date-picker-month.d.ts +12 -12
- package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +220 -220
- package/lib/types/components/duet-divider/duet-divider.d.ts +26 -26
- package/lib/types/components/duet-editable-table/duet-editable-table-tabledata.d.ts +3 -3
- package/lib/types/components/duet-editable-table/duet-editable-table.d.ts +133 -133
- package/lib/types/components/duet-empty-state/duet-empty-state.d.ts +22 -22
- package/lib/types/components/duet-fieldset/duet-fieldset.d.ts +60 -60
- package/lib/types/components/duet-file-chooser/duet-file-chooser.d.ts +35 -35
- package/lib/types/components/duet-footer/duet-footer.d.ts +143 -143
- package/lib/types/components/duet-grid/duet-grid.d.ts +73 -73
- package/lib/types/components/duet-grid-item/duet-grid-item.d.ts +49 -49
- package/lib/types/components/duet-header/duet-header-dropdown.d.ts +11 -11
- package/lib/types/components/duet-header/duet-header-icon.d.ts +3 -3
- package/lib/types/components/duet-header/duet-header.d.ts +347 -347
- package/lib/types/components/duet-heading/duet-heading.d.ts +49 -49
- package/lib/types/components/duet-hero/duet-hero.d.ts +198 -198
- package/lib/types/components/duet-icon/duet-icon.d.ts +79 -79
- package/lib/types/components/duet-input/duet-input.d.ts +279 -279
- package/lib/types/components/duet-label/duet-label.d.ts +26 -26
- package/lib/types/components/duet-layout/duet-layout.d.ts +48 -48
- package/lib/types/components/duet-link/duet-link.d.ts +94 -94
- package/lib/types/components/duet-list/duet-list.d.ts +60 -60
- package/lib/types/components/duet-list-item/duet-list-item.d.ts +17 -17
- package/lib/types/components/duet-logo/duet-logo.d.ts +59 -59
- package/lib/types/components/duet-menu-bar/duet-menu-bar.d.ts +68 -68
- package/lib/types/components/duet-menu-bar-button/duet-menu-bar-button.d.ts +84 -84
- package/lib/types/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.d.ts +49 -49
- package/lib/types/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.d.ts +36 -36
- package/lib/types/components/duet-menu-bar-link/duet-menu-bar-link.d.ts +44 -44
- package/lib/types/components/duet-modal/duet-modal.d.ts +155 -155
- package/lib/types/components/duet-multiselect/duet-multiselect.d.ts +153 -153
- package/lib/types/components/duet-nav/duet-nav.d.ts +20 -20
- package/lib/types/components/duet-notification/duet-notification.d.ts +55 -55
- package/lib/types/components/duet-notification-drawer/duet-notification-drawer.d.ts +83 -83
- package/lib/types/components/duet-number-input/duet-number-input.d.ts +230 -230
- package/lib/types/components/duet-page-heading/duet-page-heading.d.ts +25 -25
- package/lib/types/components/duet-pagination/duet-pagination.d.ts +129 -129
- package/lib/types/components/duet-paragraph/duet-paragraph.d.ts +38 -38
- package/lib/types/components/duet-popup-menu/duet-popup-menu.d.ts +80 -80
- package/lib/types/components/duet-popup-menu-item/duet-popup-menu-item.d.ts +73 -73
- package/lib/types/components/duet-progress/duet-progress.d.ts +71 -71
- package/lib/types/components/duet-promo-card/duet-promo-card.d.ts +42 -42
- package/lib/types/components/duet-radio/duet-radio.d.ts +145 -145
- package/lib/types/components/duet-radio-group/duet-radio-group.d.ts +93 -93
- package/lib/types/components/duet-range-slider/duet-range-slider.d.ts +130 -130
- package/lib/types/components/duet-range-stepper/duet-range-stepper.d.ts +68 -68
- package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +61 -61
- package/lib/types/components/duet-section-layout/duet-section-layout.d.ts +17 -17
- package/lib/types/components/duet-select/duet-select.d.ts +179 -179
- package/lib/types/components/duet-shaped-image/duet-shaped-image.d.ts +30 -30
- package/lib/types/components/duet-show-more/duet-show-more.d.ts +83 -83
- package/lib/types/components/duet-slideout/duet-slideout.d.ts +86 -86
- package/lib/types/components/duet-slideout-lang/duet-slideout-lang.d.ts +24 -24
- package/lib/types/components/duet-slideout-link/duet-slideout-link.d.ts +55 -55
- package/lib/types/components/duet-slideout-panel/duet-slideout-panel.d.ts +55 -55
- package/lib/types/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.d.ts +39 -39
- package/lib/types/components/duet-spacer/duet-spacer.d.ts +18 -18
- package/lib/types/components/duet-spinner/duet-spinner.d.ts +30 -30
- package/lib/types/components/duet-step/duet-step.d.ts +66 -66
- package/lib/types/components/duet-stepper/duet-stepper.d.ts +47 -47
- package/lib/types/components/duet-submenu-bar/duet-submenu-bar.d.ts +50 -50
- package/lib/types/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.d.ts +47 -47
- package/lib/types/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.d.ts +43 -43
- package/lib/types/components/duet-submenu-bar-link/duet-submenu-bar-link.d.ts +39 -39
- package/lib/types/components/duet-tab/duet-tab.d.ts +37 -37
- package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +132 -132
- package/lib/types/components/duet-table/duet-table.d.ts +66 -66
- package/lib/types/components/duet-textarea/duet-textarea.d.ts +200 -200
- package/lib/types/components/duet-toggle/duet-toggle.d.ts +113 -113
- package/lib/types/components/duet-toolbar/duet-toolbar.d.ts +30 -30
- package/lib/types/components/duet-toolbar-dropdown/duet-toolbar-dropdown.d.ts +50 -50
- package/lib/types/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.d.ts +43 -43
- package/lib/types/components/duet-toolbar-link/duet-toolbar-link.d.ts +42 -42
- package/lib/types/components/duet-tooltip/duet-tooltip-button.d.ts +22 -19
- package/lib/types/components/duet-tooltip/duet-tooltip-popup.d.ts +34 -31
- package/lib/types/components/duet-tooltip/duet-tooltip.d.ts +122 -122
- package/lib/types/components/duet-tray/duet-tray.d.ts +84 -84
- package/lib/types/components/duet-upload/duet-upload.d.ts +484 -484
- package/lib/types/components/duet-upload/errorcodes.utils.d.ts +3 -3
- package/lib/types/components/duet-upload/upload-editable-item-error.d.ts +2 -2
- package/lib/types/components/duet-upload/upload-editable-item-inprogres.d.ts +2 -2
- package/lib/types/components/duet-upload/upload-editable-item-pending.d.ts +1 -1
- package/lib/types/components/duet-upload/upload-editable-item-success.d.ts +2 -2
- package/lib/types/components/duet-upload/upload-item-header.d.ts +2 -2
- package/lib/types/components/duet-upload/upload-validators.d.ts +4 -4
- package/lib/types/components/duet-upload/xhr.helpers.d.ts +10 -10
- package/lib/types/components/duet-upload-aria-status/duet-upload-aria-status.d.ts +40 -40
- package/lib/types/components/duet-upload-item/duet-upload-item.d.ts +54 -54
- package/lib/types/components/duet-visually-hidden/duet-visually-hidden.d.ts +6 -6
- package/lib/types/stencil-public-runtime.d.ts +8 -0
- package/lib/types/utils/axe-core-utils.d.ts +3 -3
- package/lib/types/utils/fixture-utils.d.ts +2 -2
- package/lib/types/utils/focus-utils.d.ts +2 -2
- package/lib/types/utils/language-utils.d.ts +10 -10
- package/lib/types/utils/picture-utils.d.ts +10 -10
- package/lib/types/utils/teleport.d.ts +20 -20
- package/lib/types/utils/template-utils.d.ts +1 -1
- package/lib/types/utils/test-utils.d.ts +2 -2
- package/lib/types/utils/token-utils.d.ts +9 -9
- package/package.json +6 -6
- package/lib/cjs/app-globals-4ab83f59.js +0 -54
- package/lib/cjs/create-id-167cd350.js +0 -13
- package/lib/cjs/errorcodes.utils-8e928de5.js +0 -39
- package/lib/cjs/focus-utils-aea9f4e1.js +0 -21
- package/lib/cjs/input-utils-b4615782.js +0 -56
- package/lib/cjs/string-utils-51a2f59f.js +0 -59
- package/lib/cjs/teleport-af825e04.js +0 -99
- package/lib/cjs/themeable-component-0be6d1f4.js +0 -15
- package/lib/cjs/token-utils-dbfeff2e.js +0 -124
- package/lib/cjs/watch-options-1773d69f.js +0 -61
- package/lib/dist-custom-elements/p-03ac3eb3.js +0 -137
- package/lib/dist-custom-elements/p-1a395a8d.js +0 -55
- package/lib/dist-custom-elements/p-1ce55654.js +0 -265
- package/lib/dist-custom-elements/p-1f56e02f.js +0 -174
- package/lib/dist-custom-elements/p-24853ebf.js +0 -97
- package/lib/dist-custom-elements/p-268171f7.js +0 -9
- package/lib/dist-custom-elements/p-3049dfd5.js +0 -147
- package/lib/dist-custom-elements/p-45f71a69.js +0 -11
- package/lib/dist-custom-elements/p-4687ca41.js +0 -465
- package/lib/dist-custom-elements/p-5d8d9a52.js +0 -98
- package/lib/dist-custom-elements/p-62e68de8.js +0 -38
- package/lib/dist-custom-elements/p-64cd1abb.js +0 -93
- package/lib/dist-custom-elements/p-665418f0.js +0 -205
- package/lib/dist-custom-elements/p-759c725f.js +0 -226
- package/lib/dist-custom-elements/p-77f2dbee.js +0 -53
- package/lib/dist-custom-elements/p-80ec4336.js +0 -123
- package/lib/dist-custom-elements/p-8be301dd.js +0 -62
- package/lib/dist-custom-elements/p-9541f0b6.js +0 -59
- package/lib/dist-custom-elements/p-a1371eee.js +0 -57
- package/lib/dist-custom-elements/p-a3923b18.js +0 -126
- package/lib/dist-custom-elements/p-c5032d3a.js +0 -18
- package/lib/dist-custom-elements/p-d48735b6.js +0 -13
- package/lib/dist-custom-elements/p-e19d1e27.js +0 -117
- package/lib/dist-custom-elements/p-e6b07569.js +0 -271
- package/lib/dist-custom-elements/p-e77f7fff.js +0 -60
- package/lib/dist-custom-elements/p-f27e355b.js +0 -76
- package/lib/dist-custom-elements/p-f46be918.js +0 -110
- package/lib/dist-custom-elements/p-fd4877d1.js +0 -72
- package/lib/dist-custom-elements/p-fe8a2205.js +0 -206
- package/lib/duet/p-08764d71.entry.js +0 -4
- package/lib/duet/p-0a664ebb.entry.js +0 -4
- package/lib/duet/p-11571ab9.entry.js +0 -4
- package/lib/duet/p-4669b0af.js +0 -4
- package/lib/duet/p-486eec2d.entry.js +0 -4
- package/lib/duet/p-4dc0fff9.entry.js +0 -4
- package/lib/duet/p-52806dad.system.entry.js +0 -4
- package/lib/duet/p-6c4c0279.js +0 -5
- package/lib/duet/p-7bca584a.entry.js +0 -4
- package/lib/duet/p-7c36b779.entry.js +0 -4
- package/lib/duet/p-821c350f.system.entry.js +0 -4
- package/lib/duet/p-a0660ffa.system.js +0 -5
- package/lib/duet/p-ac9f6601.entry.js +0 -4
- package/lib/duet/p-b3ae5641.system.entry.js +0 -4
- package/lib/duet/p-c1bc9249.entry.js +0 -4
- package/lib/duet/p-d098d59c.system.entry.js +0 -4
- package/lib/duet/p-f58eb425.js +0 -4
- package/lib/duet/p-fab6160a.entry.js +0 -4
- package/lib/esm/app-globals-de2a5510.js +0 -52
- package/lib/esm/create-id-2b0cd46d.js +0 -11
- package/lib/esm/errorcodes.utils-424b1197.js +0 -36
- package/lib/esm/focus-utils-74961919.js +0 -18
- package/lib/esm/input-utils-a0225b92.js +0 -53
- package/lib/esm/is-internet-explorer-032d4dae.js +0 -9
- package/lib/esm/string-utils-59ad4cb2.js +0 -55
- package/lib/esm/teleport-15747328.js +0 -97
- package/lib/esm/themeable-component-fdce4fd7.js +0 -13
- package/lib/esm/token-utils-46c8fe31.js +0 -117
- package/lib/esm/watch-options-f189118b.js +0 -57
- package/lib/esm-es5/focus-utils-74961919.js +0 -4
- package/lib/esm-es5/index-b3bf9761.js +0 -5
- /package/lib/duet/{p-b1db3006.js → p-0782a6e5.js} +0 -0
- /package/lib/duet/{p-1a395a8d.js → p-0e052642.js} +0 -0
- /package/lib/duet/{p-f8c76b25.js → p-11230037.js} +0 -0
- /package/lib/duet/{p-0b31864f.js → p-38320af8.js} +0 -0
- /package/lib/duet/{p-c30a5f7c.system.js → p-41982d26.system.js} +0 -0
- /package/lib/duet/{p-268171f7.js → p-43b89e38.js} +0 -0
- /package/lib/duet/{p-274d11e3.js → p-4ab776f4.js} +0 -0
- /package/lib/duet/{p-77b6e4ba.system.js → p-50f4bca2.system.js} +0 -0
- /package/lib/duet/{p-45f71a69.js → p-5e59e970.js} +0 -0
- /package/lib/duet/{p-75daef16.system.js → p-634e8787.system.js} +0 -0
- /package/lib/duet/{p-719b38fe.system.js → p-67c653f9.system.js} +0 -0
- /package/lib/duet/{p-b99c00fa.system.js → p-6ef75455.system.js} +0 -0
- /package/lib/duet/{p-a1371eee.js → p-7d8a2628.js} +0 -0
- /package/lib/duet/{p-21f3a17a.system.js → p-81a6df68.system.js} +0 -0
- /package/lib/duet/{p-ecf1f6cd.system.js → p-9e36548d.system.js} +0 -0
- /package/lib/duet/{p-3d8d557b.js → p-9e371678.js} +0 -0
- /package/lib/duet/{p-d48735b6.js → p-a58bd561.js} +0 -0
- /package/lib/duet/{p-8e1da663.system.js → p-afad5fd3.system.js} +0 -0
- /package/lib/duet/{p-24853ebf.js → p-b2e550a3.js} +0 -0
- /package/lib/duet/{p-7c29d36a.system.js → p-b864159a.system.js} +0 -0
- /package/lib/duet/{p-88a50491.system.js → p-d1cedaa1.system.js} +0 -0
- /package/lib/duet/{p-77f2dbee.js → p-df7874f9.js} +0 -0
- /package/lib/duet/{p-87dd7bf3.system.js → p-e12066c8.system.js} +0 -0
- /package/lib/duet/{p-1a91e22a.system.js → p-e6b5a1c7.system.js} +0 -0
- /package/lib/esm-es5/{app-globals-de2a5510.js → app-globals-41b37f11.js} +0 -0
- /package/lib/esm-es5/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +0 -0
- /package/lib/esm-es5/{create-id-2b0cd46d.js → create-id-149a1b6d.js} +0 -0
- /package/lib/esm-es5/{input-utils-a0225b92.js → input-utils-85681162.js} +0 -0
- /package/lib/esm-es5/{is-internet-explorer-032d4dae.js → is-internet-explorer-2c48f686.js} +0 -0
- /package/lib/esm-es5/{js-utils-a35dcc8c.js → js-utils-9b9e0039.js} +0 -0
- /package/lib/esm-es5/{slot-query-7877f18f.js → slot-query-022710bb.js} +0 -0
- /package/lib/esm-es5/{string-utils-59ad4cb2.js → string-utils-ca039233.js} +0 -0
- /package/lib/esm-es5/{teleport-15747328.js → teleport-4462e8c1.js} +0 -0
- /package/lib/esm-es5/{themeable-component-fdce4fd7.js → themeable-component-724c0f7e.js} +0 -0
- /package/lib/esm-es5/{token-utils-46c8fe31.js → token-utils-b4bd3ec7.js} +0 -0
- /package/lib/esm-es5/{watch-options-f189118b.js → watch-options-e96ecd92.js} +0 -0
|
@@ -4,73 +4,73 @@
|
|
|
4
4
|
import { createPage } from "../../utils/test-utils";
|
|
5
5
|
import i18n from "./date-i18n";
|
|
6
6
|
async function getFocusedElement(page) {
|
|
7
|
-
|
|
7
|
+
return page.evaluateHandle(() => document.activeElement);
|
|
8
8
|
}
|
|
9
9
|
async function getChooseDateButton(page) {
|
|
10
|
-
|
|
10
|
+
return page.find(".duet-date-button");
|
|
11
11
|
}
|
|
12
12
|
async function getInput(page) {
|
|
13
|
-
|
|
13
|
+
return page.find("duet-input");
|
|
14
14
|
}
|
|
15
15
|
async function getDialog(page) {
|
|
16
|
-
|
|
16
|
+
return page.find(`[role="dialog"]`);
|
|
17
17
|
}
|
|
18
18
|
async function getGrid(page) {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const dialog = await getDialog(page);
|
|
20
|
+
return dialog.find("table");
|
|
21
21
|
}
|
|
22
22
|
async function getPicker(page) {
|
|
23
|
-
|
|
23
|
+
return page.find("duet-date-picker");
|
|
24
24
|
}
|
|
25
25
|
async function setMonthDropdown(page, month) {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
await page.select(".duet-date-month-select", month);
|
|
27
|
+
await page.waitForChanges();
|
|
28
28
|
}
|
|
29
29
|
async function setYearDropdown(page, year) {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
await page.select(".duet-date-year-select", year);
|
|
31
|
+
await page.waitForChanges();
|
|
32
32
|
}
|
|
33
33
|
async function getPrevMonthButton(page) {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
const dialog = await getDialog(page);
|
|
35
|
+
return dialog.find(`.duet-date-dialog-prev >>> button`);
|
|
36
36
|
}
|
|
37
37
|
async function getNextMonthButton(page) {
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
const dialog = await getDialog(page);
|
|
39
|
+
return dialog.find(`.duet-date-dialog-next >>> button`);
|
|
40
40
|
}
|
|
41
41
|
async function findByText(context, selector, text) {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
const elements = await context.findAll(selector);
|
|
43
|
+
return elements.find(element => element.innerText.includes(text));
|
|
44
44
|
}
|
|
45
45
|
async function clickDay(page, date) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const grid = await getGrid(page);
|
|
47
|
+
const button = await findByText(grid, "button", date);
|
|
48
|
+
await button.click();
|
|
49
|
+
await page.waitForChanges();
|
|
50
50
|
}
|
|
51
51
|
async function openCalendar(page) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
const button = await getChooseDateButton(page);
|
|
53
|
+
await button.click();
|
|
54
|
+
await page.waitForChanges();
|
|
55
|
+
const dialog = await getDialog(page);
|
|
56
|
+
await dialog.waitForVisible();
|
|
57
57
|
}
|
|
58
58
|
async function clickOutside(page) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
const input = await getInput(page);
|
|
60
|
+
await input.click();
|
|
61
|
+
await page.waitForChanges();
|
|
62
|
+
const dialog = await getDialog(page);
|
|
63
|
+
await dialog.waitForNotVisible();
|
|
64
64
|
}
|
|
65
65
|
async function isCalendarOpen(page) {
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
const dialog = await getDialog(page);
|
|
67
|
+
return dialog.isVisible();
|
|
68
68
|
}
|
|
69
69
|
const generatePage = (props) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
const attrs = Object.entries(Object.assign({ label: "Valitse paiva", expand: true }, props))
|
|
71
|
+
.map(([attr, value]) => `${attr}="${value}"`)
|
|
72
|
+
.join(" ");
|
|
73
|
+
return createPage(`
|
|
74
74
|
<body style="min-height: 400px">
|
|
75
75
|
<duet-date-picker ${attrs}></duet-date-picker>
|
|
76
76
|
</body>
|
|
@@ -78,572 +78,572 @@ const generatePage = (props) => {
|
|
|
78
78
|
};
|
|
79
79
|
const ANIMATION_DELAY = 600;
|
|
80
80
|
describe("duet-date-picker", () => {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
});
|
|
131
|
-
describe("mouse interaction", () => {
|
|
132
|
-
it("should open on button click", async () => {
|
|
133
|
-
const page = await generatePage();
|
|
134
|
-
expect(await isCalendarOpen(page)).toBe(false);
|
|
135
|
-
await openCalendar(page);
|
|
136
|
-
expect(await isCalendarOpen(page)).toBe(true);
|
|
137
|
-
});
|
|
138
|
-
it("should close on click outside", async () => {
|
|
139
|
-
const page = await generatePage();
|
|
140
|
-
await openCalendar(page);
|
|
141
|
-
expect(await isCalendarOpen(page)).toBe(true);
|
|
142
|
-
await clickOutside(page);
|
|
143
|
-
expect(await isCalendarOpen(page)).toBe(false);
|
|
144
|
-
});
|
|
145
|
-
it("supports selecting a date in the future", async () => {
|
|
146
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
147
|
-
await openCalendar(page);
|
|
148
|
-
const picker = await getPicker(page);
|
|
149
|
-
const nextMonth = await getNextMonthButton(page);
|
|
150
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
151
|
-
await nextMonth.click();
|
|
152
|
-
await nextMonth.click();
|
|
153
|
-
await nextMonth.click();
|
|
154
|
-
await clickDay(page, "19. huhtikuuta");
|
|
155
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
156
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
157
|
-
component: "duet-date-picker",
|
|
158
|
-
value: "2020-04-19",
|
|
159
|
-
valueAsDate: new Date(2020, 3, 19).toISOString(),
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
it("supports selecting a date in the past", async () => {
|
|
163
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
164
|
-
await openCalendar(page);
|
|
165
|
-
const picker = await getPicker(page);
|
|
166
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
167
|
-
await setMonthDropdown(page, "3");
|
|
168
|
-
await setYearDropdown(page, "2019");
|
|
169
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
170
|
-
await clickDay(page, "19. huhtikuuta");
|
|
171
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
172
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
173
|
-
component: "duet-date-picker",
|
|
174
|
-
value: "2019-04-19",
|
|
175
|
-
valueAsDate: new Date(2019, 3, 19).toISOString(),
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
});
|
|
179
|
-
// see: https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/datepicker-dialog.html
|
|
180
|
-
describe("a11y/ARIA requirements", () => {
|
|
181
|
-
describe("input", () => {
|
|
182
|
-
it("has accessible label", async () => {
|
|
183
|
-
const page = await generatePage({ label: "pick date" });
|
|
184
|
-
const input = await page.find("input");
|
|
185
|
-
const id = input.getAttribute("id");
|
|
186
|
-
expect(id).toBeDefined();
|
|
187
|
-
const label = await page.find(`label[for="${id}"]`);
|
|
188
|
-
expect(label).toEqualText("pick date");
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
describe("button", () => {
|
|
192
|
-
it("has an accessible label", async () => {
|
|
193
|
-
const page = await generatePage();
|
|
194
|
-
const button = await getChooseDateButton(page);
|
|
195
|
-
const element = await button.find("duet-visually-hidden");
|
|
196
|
-
expect(element).toEqualText(i18n.fi.buttonLabel);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe("dialog", () => {
|
|
200
|
-
it("meets a11y requirements", async () => {
|
|
201
|
-
const page = await generatePage();
|
|
202
|
-
const dialog = await getDialog(page);
|
|
203
|
-
// has aria-modal attr
|
|
204
|
-
expect(dialog).toBeDefined();
|
|
205
|
-
expect(dialog).toEqualAttribute("aria-modal", "true");
|
|
206
|
-
// has accessible label
|
|
207
|
-
const labelledById = dialog.getAttribute("aria-labelledby");
|
|
208
|
-
const title = await page.find(`#${labelledById}`);
|
|
209
|
-
expect(title).toBeDefined();
|
|
210
|
-
// announces keyboard support
|
|
211
|
-
const instructionText = await dialog.find("duet-visually-hidden[aria-live]");
|
|
212
|
-
expect(instructionText).toEqualText(i18n.fi.keyboardInstruction);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
describe("grid", () => {
|
|
216
|
-
it("meets a11y requirements", async () => {
|
|
217
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
218
|
-
const grid = await getGrid(page);
|
|
219
|
-
// has accessible label
|
|
220
|
-
const labelledById = await grid.getAttribute("aria-labelledby");
|
|
221
|
-
const title = await page.find(`#${labelledById}`);
|
|
222
|
-
expect(title).toBeDefined();
|
|
223
|
-
await openCalendar(page);
|
|
224
|
-
// should be single selected element, and it should have role="gridcell"
|
|
225
|
-
const selected = await grid.findAll(`[aria-pressed="true"]`);
|
|
226
|
-
expect(selected.length).toBe(1);
|
|
227
|
-
// only one button is in focus order, has accessible label, and correct text content
|
|
228
|
-
expect(selected[0]).toEqualAttribute("tabindex", "0");
|
|
229
|
-
expect(selected[0].innerText).toContain("1. tammikuuta");
|
|
230
|
-
});
|
|
231
|
-
it.todo("correctly abbreviates the shortened day names");
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
describe("keyboard a11y", () => {
|
|
235
|
-
it("closes on ESC press", async () => {
|
|
236
|
-
const page = await generatePage();
|
|
237
|
-
await openCalendar(page);
|
|
238
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
239
|
-
expect(await isCalendarOpen(page)).toBe(true);
|
|
240
|
-
await page.keyboard.press("Escape");
|
|
241
|
-
await page.waitForChanges();
|
|
242
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
243
|
-
expect(await isCalendarOpen(page)).toBe(false);
|
|
244
|
-
});
|
|
245
|
-
it("supports selecting a date in the future", async () => {
|
|
246
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
247
|
-
const picker = await getPicker(page);
|
|
248
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
249
|
-
// open calendar
|
|
250
|
-
await page.keyboard.press("Tab");
|
|
251
|
-
await page.waitForChanges();
|
|
252
|
-
await page.keyboard.press("Tab");
|
|
253
|
-
await page.waitForChanges();
|
|
254
|
-
await page.keyboard.press("Enter");
|
|
255
|
-
await page.waitForChanges();
|
|
256
|
-
// wait for calendar to open
|
|
257
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
258
|
-
// set month to april
|
|
259
|
-
await setMonthDropdown(page, "3");
|
|
260
|
-
// tab to grid
|
|
261
|
-
await page.keyboard.press("Tab");
|
|
262
|
-
await page.waitForChanges();
|
|
263
|
-
await page.keyboard.press("Tab");
|
|
264
|
-
await page.waitForChanges();
|
|
265
|
-
await page.keyboard.press("Tab");
|
|
266
|
-
await page.waitForChanges();
|
|
267
|
-
await page.keyboard.press("Tab");
|
|
268
|
-
await page.waitForChanges();
|
|
269
|
-
// select 19th of month
|
|
270
|
-
await page.keyboard.press("ArrowDown");
|
|
271
|
-
await page.waitForChanges();
|
|
272
|
-
await page.keyboard.press("ArrowDown");
|
|
273
|
-
await page.waitForChanges();
|
|
274
|
-
await page.keyboard.press("ArrowRight");
|
|
275
|
-
await page.waitForChanges();
|
|
276
|
-
await page.keyboard.press("ArrowRight");
|
|
277
|
-
await page.waitForChanges();
|
|
278
|
-
await page.keyboard.press("ArrowRight");
|
|
279
|
-
await page.waitForChanges();
|
|
280
|
-
await page.keyboard.press("ArrowRight");
|
|
281
|
-
await page.waitForChanges();
|
|
282
|
-
await page.keyboard.press("Enter");
|
|
283
|
-
await page.waitForChanges();
|
|
284
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
285
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
286
|
-
component: "duet-date-picker",
|
|
287
|
-
value: "2020-04-19",
|
|
288
|
-
valueAsDate: new Date(2020, 3, 19).toISOString(),
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
it("supports selecting a date in the past", async () => {
|
|
292
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
293
|
-
const picker = await getPicker(page);
|
|
294
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
295
|
-
// open calendar
|
|
296
|
-
await page.keyboard.press("Tab");
|
|
297
|
-
await page.waitForChanges();
|
|
298
|
-
await page.keyboard.press("Tab");
|
|
299
|
-
await page.waitForChanges();
|
|
300
|
-
await page.keyboard.press("Enter");
|
|
301
|
-
await page.waitForChanges();
|
|
302
|
-
// wait for calendar to open
|
|
303
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
304
|
-
// select april from month dropdown
|
|
305
|
-
await setMonthDropdown(page, "3");
|
|
306
|
-
// tab to year dropdown, select 2019
|
|
307
|
-
await setYearDropdown(page, "2019");
|
|
308
|
-
// tab to grid
|
|
309
|
-
await page.keyboard.press("Tab");
|
|
310
|
-
await page.waitForChanges();
|
|
311
|
-
await page.keyboard.press("Tab");
|
|
312
|
-
await page.waitForChanges();
|
|
313
|
-
await page.keyboard.press("Tab");
|
|
314
|
-
await page.waitForChanges();
|
|
315
|
-
await page.keyboard.press("Tab");
|
|
316
|
-
await page.waitForChanges();
|
|
317
|
-
// select date 19th of month
|
|
318
|
-
await page.keyboard.press("ArrowDown");
|
|
319
|
-
await page.waitForChanges();
|
|
320
|
-
await page.keyboard.press("ArrowDown");
|
|
321
|
-
await page.waitForChanges();
|
|
322
|
-
await page.keyboard.press("ArrowRight");
|
|
323
|
-
await page.waitForChanges();
|
|
324
|
-
await page.keyboard.press("ArrowRight");
|
|
325
|
-
await page.waitForChanges();
|
|
326
|
-
await page.keyboard.press("ArrowRight");
|
|
327
|
-
await page.waitForChanges();
|
|
328
|
-
await page.keyboard.press("ArrowRight");
|
|
329
|
-
await page.waitForChanges();
|
|
330
|
-
await page.keyboard.press("Enter");
|
|
331
|
-
await page.waitForChanges();
|
|
332
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
333
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
334
|
-
component: "duet-date-picker",
|
|
335
|
-
value: "2019-04-19",
|
|
336
|
-
valueAsDate: new Date(2019, 3, 19).toISOString(),
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
it.todo("moves focus to start of week on home press");
|
|
340
|
-
it.todo("moves focus to end of week end press");
|
|
341
|
-
it.todo("moves focus to previous month on page up press");
|
|
342
|
-
it.todo("moves focus to next month on page down press");
|
|
343
|
-
it.todo("moves focus to previous year on shift + page down press");
|
|
344
|
-
it.todo("moves focus to next year on shift + page down press");
|
|
345
|
-
});
|
|
346
|
-
describe("events", () => {
|
|
347
|
-
it("raises a duetBlur event when the input is blurred", async () => {
|
|
348
|
-
const page = await generatePage();
|
|
349
|
-
const picker = await page.find("duet-date-picker");
|
|
350
|
-
const spy = await picker.spyOnEvent("duetBlur");
|
|
351
|
-
await page.keyboard.press("Tab");
|
|
352
|
-
await page.keyboard.press("Tab");
|
|
353
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
354
|
-
});
|
|
355
|
-
it("raises a duetFocus event when the input is focused", async () => {
|
|
356
|
-
const page = await generatePage();
|
|
357
|
-
const picker = await page.find("duet-date-picker");
|
|
358
|
-
const spy = await picker.spyOnEvent("duetFocus");
|
|
359
|
-
await page.keyboard.press("Tab");
|
|
360
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
describe("focus management", () => {
|
|
364
|
-
async function assertDayButtonFocused(page) {
|
|
365
|
-
const focused = await getFocusedElement(page);
|
|
366
|
-
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
367
|
-
const tabIndex = await page.evaluate((element) => element.tabIndex, focused);
|
|
368
|
-
expect(tabIndex).toBe(0);
|
|
369
|
-
expect(tag).toEqual("button");
|
|
370
|
-
}
|
|
371
|
-
async function assertCloseButtonFocused(page) {
|
|
372
|
-
const focused = await getFocusedElement(page);
|
|
373
|
-
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
374
|
-
const text = await page.evaluate((element) => element.innerText, focused);
|
|
375
|
-
expect(text).toBe(i18n.fi.closeLabel);
|
|
376
|
-
expect(tag).toEqual("button");
|
|
377
|
-
}
|
|
378
|
-
async function assertMonthDropdownFocused(page) {
|
|
379
|
-
const focused = await getFocusedElement(page);
|
|
380
|
-
const tag = await page.evaluate(element => element.tagName.toLowerCase(), focused);
|
|
381
|
-
const id = await page.evaluate(element => element.id, focused);
|
|
382
|
-
const label = await page.find(`label[for="${id}"]`);
|
|
383
|
-
expect(label).toEqualText(i18n.fi.monthSelectLabel);
|
|
384
|
-
expect(tag).toEqual("select");
|
|
385
|
-
}
|
|
386
|
-
async function assertYearDropdownFocused(page) {
|
|
387
|
-
const focused = await getFocusedElement(page);
|
|
388
|
-
const tag = await page.evaluate(element => element.tagName.toLowerCase(), focused);
|
|
389
|
-
const id = await page.evaluate(element => element.id, focused);
|
|
390
|
-
const label = await page.find(`label[for="${id}"]`);
|
|
391
|
-
expect(label).toEqualText(i18n.fi.yearSelectLabel);
|
|
392
|
-
expect(tag).toEqual("select");
|
|
393
|
-
}
|
|
394
|
-
async function assertPrevMonthFocused(page) {
|
|
395
|
-
const focused = await getFocusedElement(page);
|
|
396
|
-
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
397
|
-
const text = await page.evaluate((element) => element.innerText, focused);
|
|
398
|
-
expect(text).toBe(i18n.fi.prevMonthLabel);
|
|
399
|
-
expect(tag).toEqual("duet-action-button");
|
|
400
|
-
}
|
|
401
|
-
async function assertNextMonthFocused(page) {
|
|
402
|
-
const focused = await getFocusedElement(page);
|
|
403
|
-
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
404
|
-
const text = await page.evaluate((element) => element.innerText, focused);
|
|
405
|
-
expect(text).toBe(i18n.fi.nextMonthLabel);
|
|
406
|
-
expect(tag).toEqual("duet-action-button");
|
|
407
|
-
}
|
|
408
|
-
async function assertToggleButtonFocused(page, negate = false) {
|
|
409
|
-
const focused = await getFocusedElement(page);
|
|
410
|
-
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
411
|
-
const text = await page.evaluate((element) => element.innerText, focused);
|
|
412
|
-
if (negate) {
|
|
413
|
-
expect(tag).not.toEqual("button");
|
|
414
|
-
expect(text).not.toContain(`${i18n.fi.buttonLabel}, ${i18n.fi.selected}`);
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
expect(tag).toEqual("button");
|
|
418
|
-
expect(text).toContain(`${i18n.fi.buttonLabel}, ${i18n.fi.selected}`);
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
it("traps focus in calendar", async () => {
|
|
422
|
-
const page = await generatePage();
|
|
423
|
-
await openCalendar(page);
|
|
424
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
425
|
-
const focusOrder = [
|
|
426
|
-
assertMonthDropdownFocused,
|
|
427
|
-
assertYearDropdownFocused,
|
|
428
|
-
assertPrevMonthFocused,
|
|
429
|
-
assertNextMonthFocused,
|
|
430
|
-
assertDayButtonFocused,
|
|
431
|
-
assertCloseButtonFocused,
|
|
432
|
-
];
|
|
433
|
-
for (const assertion of focusOrder) {
|
|
434
|
-
await assertion(page);
|
|
435
|
-
await page.keyboard.press("Tab");
|
|
436
|
-
}
|
|
437
|
-
// should arrive back at the start
|
|
438
|
-
const assertion = focusOrder[0];
|
|
439
|
-
await assertion(page);
|
|
440
|
-
});
|
|
441
|
-
it.todo("doesn't shift focus when interacting with calendar navigation controls");
|
|
442
|
-
it("shifts focus back to button on date select", async () => {
|
|
443
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
444
|
-
await openCalendar(page);
|
|
445
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
446
|
-
await clickDay(page, "10. tammikuuta");
|
|
447
|
-
await page.waitForChanges();
|
|
448
|
-
await assertToggleButtonFocused(page);
|
|
449
|
-
});
|
|
450
|
-
it("shifts focus back to button on ESC press", async () => {
|
|
451
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
452
|
-
await openCalendar(page);
|
|
453
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
454
|
-
await page.keyboard.press("Escape");
|
|
455
|
-
await page.waitForChanges();
|
|
456
|
-
await assertToggleButtonFocused(page);
|
|
457
|
-
});
|
|
458
|
-
it("doesn't shift focus to button on click outside", async () => {
|
|
459
|
-
const page = await generatePage({ value: "2020-01-01" });
|
|
460
|
-
await openCalendar(page);
|
|
461
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
462
|
-
await clickOutside(page);
|
|
463
|
-
await assertToggleButtonFocused(page, true);
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
describe("min/max support", () => {
|
|
467
|
-
it("supports a min date", async () => {
|
|
468
|
-
const page = await generatePage({ value: "2020-01-15", min: "2020-01-02" });
|
|
469
|
-
const picker = await getPicker(page);
|
|
470
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
471
|
-
await openCalendar(page);
|
|
472
|
-
// wait for calendar to open
|
|
473
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
474
|
-
// try clicking a day outside the range
|
|
475
|
-
await clickDay(page, "1. tammikuuta");
|
|
476
|
-
expect(spy).toHaveReceivedEventTimes(0);
|
|
477
|
-
// click a day inside the range
|
|
478
|
-
await clickDay(page, "2. tammikuuta");
|
|
479
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
480
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
481
|
-
component: "duet-date-picker",
|
|
482
|
-
value: "2020-01-02",
|
|
483
|
-
valueAsDate: new Date(2020, 0, 2).toISOString(),
|
|
484
|
-
});
|
|
485
|
-
});
|
|
486
|
-
it("supports a max date", async () => {
|
|
487
|
-
const page = await generatePage({ value: "2020-01-15", max: "2020-01-30" });
|
|
488
|
-
const picker = await getPicker(page);
|
|
489
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
490
|
-
await openCalendar(page);
|
|
491
|
-
// wait for calendar to open
|
|
492
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
493
|
-
// try clicking a day outside the range
|
|
494
|
-
await clickDay(page, "31. tammikuuta");
|
|
495
|
-
expect(spy).toHaveReceivedEventTimes(0);
|
|
496
|
-
// click a day inside the range
|
|
497
|
-
await clickDay(page, "30. tammikuuta");
|
|
498
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
499
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
500
|
-
component: "duet-date-picker",
|
|
501
|
-
value: "2020-01-30",
|
|
502
|
-
valueAsDate: new Date(2020, 0, 30).toISOString(),
|
|
503
|
-
});
|
|
504
|
-
});
|
|
505
|
-
it("supports min and max dates", async () => {
|
|
506
|
-
const page = await generatePage({ value: "2020-01-15", min: "2020-01-02", max: "2020-01-30" });
|
|
507
|
-
const picker = await getPicker(page);
|
|
508
|
-
const spy = await picker.spyOnEvent("duetChange");
|
|
509
|
-
await openCalendar(page);
|
|
510
|
-
// wait for calendar to open
|
|
511
|
-
await page.waitForTimeout(ANIMATION_DELAY);
|
|
512
|
-
// try clicking a day less than min
|
|
513
|
-
await clickDay(page, "1. tammikuuta");
|
|
514
|
-
expect(spy).toHaveReceivedEventTimes(0);
|
|
515
|
-
// try clicking a day greater than max
|
|
516
|
-
await clickDay(page, "31. tammikuuta");
|
|
517
|
-
expect(spy).toHaveReceivedEventTimes(0);
|
|
518
|
-
// click a day inside the range
|
|
519
|
-
await clickDay(page, "30. tammikuuta");
|
|
520
|
-
expect(spy).toHaveReceivedEventTimes(1);
|
|
521
|
-
expect(spy.lastEvent.detail).toEqual({
|
|
522
|
-
component: "duet-date-picker",
|
|
523
|
-
value: "2020-01-30",
|
|
524
|
-
valueAsDate: new Date(2020, 0, 30).toISOString(),
|
|
525
|
-
});
|
|
526
|
-
});
|
|
527
|
-
it("disables prev month button if same month and year as min", async () => {
|
|
528
|
-
const page = await generatePage({ value: "2020-04-19", min: "2020-04-01" });
|
|
529
|
-
await openCalendar(page);
|
|
530
|
-
const prevMonthButton = await getPrevMonthButton(page);
|
|
531
|
-
expect(prevMonthButton).toHaveAttribute("disabled");
|
|
532
|
-
});
|
|
533
|
-
it("disables next month button if same month and year as max", async () => {
|
|
534
|
-
const page = await generatePage({ value: "2020-04-19", max: "2020-04-30" });
|
|
535
|
-
await openCalendar(page);
|
|
536
|
-
const nextMonthButton = await getNextMonthButton(page);
|
|
537
|
-
expect(nextMonthButton).toHaveAttribute("disabled");
|
|
81
|
+
it("should render a date picker", async () => {
|
|
82
|
+
const page = await createPage(`<duet-date-picker value="2020-06-16"></duet-date-picker>`);
|
|
83
|
+
const component = await getPicker(page);
|
|
84
|
+
expect(component).not.toBeNull();
|
|
85
|
+
});
|
|
86
|
+
describe("user input", () => {
|
|
87
|
+
it("does not reformat input if date doesn't have leading zeroes", async () => {
|
|
88
|
+
const page = await generatePage();
|
|
89
|
+
const picker = await getPicker(page);
|
|
90
|
+
const input = await page.find("duet-input input");
|
|
91
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
92
|
+
await input.type("1.2.2021", { delay: 50 });
|
|
93
|
+
await page.waitForChanges();
|
|
94
|
+
// the input's value should not get formatted with leading zeroes
|
|
95
|
+
expect(await input.getProperty("value")).toBe("1.2.2021");
|
|
96
|
+
// but we should still emit correctly formatted ISO dates
|
|
97
|
+
expect(await picker.getProperty("value")).toBe("2021-02-01");
|
|
98
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
99
|
+
expect(spy.lastEvent.detail.value).toBe("2021-02-01");
|
|
100
|
+
});
|
|
101
|
+
it("allows input to be cleared by setting value to empty string", async () => {
|
|
102
|
+
const page = await generatePage();
|
|
103
|
+
const picker = await getPicker(page);
|
|
104
|
+
const input = await page.find("duet-input input");
|
|
105
|
+
await input.type("1.2.2021", { delay: 50 });
|
|
106
|
+
await page.waitForChanges();
|
|
107
|
+
picker.setProperty("value", "");
|
|
108
|
+
await page.waitForChanges();
|
|
109
|
+
expect(await input.getProperty("value")).toBe("");
|
|
110
|
+
});
|
|
111
|
+
it("supports dashes and slashes as separators", async () => {
|
|
112
|
+
const page = await generatePage();
|
|
113
|
+
const picker = await getPicker(page);
|
|
114
|
+
const input = await page.find("duet-input input");
|
|
115
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
116
|
+
// slashes
|
|
117
|
+
await input.type("1/1/2021", { delay: 50 });
|
|
118
|
+
await page.waitForChanges();
|
|
119
|
+
expect(await picker.getProperty("value")).toBe("2021-01-01");
|
|
120
|
+
expect(spy.lastEvent.detail.value).toBe("2021-01-01");
|
|
121
|
+
// clear input
|
|
122
|
+
picker.setProperty("value", "");
|
|
123
|
+
await page.waitForChanges();
|
|
124
|
+
// dashes
|
|
125
|
+
await input.type("2-1-2021", { delay: 50 });
|
|
126
|
+
await page.waitForChanges();
|
|
127
|
+
expect(await picker.getProperty("value")).toBe("2021-01-02");
|
|
128
|
+
expect(spy.lastEvent.detail.value).toBe("2021-01-02");
|
|
129
|
+
});
|
|
538
130
|
});
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
131
|
+
describe("mouse interaction", () => {
|
|
132
|
+
it("should open on button click", async () => {
|
|
133
|
+
const page = await generatePage();
|
|
134
|
+
expect(await isCalendarOpen(page)).toBe(false);
|
|
135
|
+
await openCalendar(page);
|
|
136
|
+
expect(await isCalendarOpen(page)).toBe(true);
|
|
137
|
+
});
|
|
138
|
+
it("should close on click outside", async () => {
|
|
139
|
+
const page = await generatePage();
|
|
140
|
+
await openCalendar(page);
|
|
141
|
+
expect(await isCalendarOpen(page)).toBe(true);
|
|
142
|
+
await clickOutside(page);
|
|
143
|
+
expect(await isCalendarOpen(page)).toBe(false);
|
|
144
|
+
});
|
|
145
|
+
it("supports selecting a date in the future", async () => {
|
|
146
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
147
|
+
await openCalendar(page);
|
|
148
|
+
const picker = await getPicker(page);
|
|
149
|
+
const nextMonth = await getNextMonthButton(page);
|
|
150
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
151
|
+
await nextMonth.click();
|
|
152
|
+
await nextMonth.click();
|
|
153
|
+
await nextMonth.click();
|
|
154
|
+
await clickDay(page, "19. huhtikuuta");
|
|
155
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
156
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
157
|
+
component: "duet-date-picker",
|
|
158
|
+
value: "2020-04-19",
|
|
159
|
+
valueAsDate: new Date(2020, 3, 19).toISOString(),
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
it("supports selecting a date in the past", async () => {
|
|
163
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
164
|
+
await openCalendar(page);
|
|
165
|
+
const picker = await getPicker(page);
|
|
166
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
167
|
+
await setMonthDropdown(page, "3");
|
|
168
|
+
await setYearDropdown(page, "2019");
|
|
169
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
170
|
+
await clickDay(page, "19. huhtikuuta");
|
|
171
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
172
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
173
|
+
component: "duet-date-picker",
|
|
174
|
+
value: "2019-04-19",
|
|
175
|
+
valueAsDate: new Date(2019, 3, 19).toISOString(),
|
|
176
|
+
});
|
|
177
|
+
});
|
|
548
178
|
});
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
179
|
+
// see: https://www.w3.org/TR/wai-aria-practices/examples/dialog-modal/datepicker-dialog.html
|
|
180
|
+
describe("a11y/ARIA requirements", () => {
|
|
181
|
+
describe("input", () => {
|
|
182
|
+
it("has accessible label", async () => {
|
|
183
|
+
const page = await generatePage({ label: "pick date" });
|
|
184
|
+
const input = await page.find("input");
|
|
185
|
+
const id = input.getAttribute("id");
|
|
186
|
+
expect(id).toBeDefined();
|
|
187
|
+
const label = await page.find(`label[for="${id}"]`);
|
|
188
|
+
expect(label).toEqualText("pick date");
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
describe("button", () => {
|
|
192
|
+
it("has an accessible label", async () => {
|
|
193
|
+
const page = await generatePage();
|
|
194
|
+
const button = await getChooseDateButton(page);
|
|
195
|
+
const element = await button.find("duet-visually-hidden");
|
|
196
|
+
expect(element).toEqualText(i18n.fi.buttonLabel);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe("dialog", () => {
|
|
200
|
+
it("meets a11y requirements", async () => {
|
|
201
|
+
const page = await generatePage();
|
|
202
|
+
const dialog = await getDialog(page);
|
|
203
|
+
// has aria-modal attr
|
|
204
|
+
expect(dialog).toBeDefined();
|
|
205
|
+
expect(dialog).toEqualAttribute("aria-modal", "true");
|
|
206
|
+
// has accessible label
|
|
207
|
+
const labelledById = dialog.getAttribute("aria-labelledby");
|
|
208
|
+
const title = await page.find(`#${labelledById}`);
|
|
209
|
+
expect(title).toBeDefined();
|
|
210
|
+
// announces keyboard support
|
|
211
|
+
const instructionText = await dialog.find("duet-visually-hidden[aria-live]");
|
|
212
|
+
expect(instructionText).toEqualText(i18n.fi.keyboardInstruction);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe("grid", () => {
|
|
216
|
+
it("meets a11y requirements", async () => {
|
|
217
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
218
|
+
const grid = await getGrid(page);
|
|
219
|
+
// has accessible label
|
|
220
|
+
const labelledById = await grid.getAttribute("aria-labelledby");
|
|
221
|
+
const title = await page.find(`#${labelledById}`);
|
|
222
|
+
expect(title).toBeDefined();
|
|
223
|
+
await openCalendar(page);
|
|
224
|
+
// should be single selected element, and it should have role="gridcell"
|
|
225
|
+
const selected = await grid.findAll(`[aria-pressed="true"]`);
|
|
226
|
+
expect(selected.length).toBe(1);
|
|
227
|
+
// only one button is in focus order, has accessible label, and correct text content
|
|
228
|
+
expect(selected[0]).toEqualAttribute("tabindex", "0");
|
|
229
|
+
expect(selected[0].innerText).toContain("1. tammikuuta");
|
|
230
|
+
});
|
|
231
|
+
it.todo("correctly abbreviates the shortened day names");
|
|
232
|
+
});
|
|
555
233
|
});
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
.
|
|
563
|
-
.
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
234
|
+
describe("keyboard a11y", () => {
|
|
235
|
+
it("closes on ESC press", async () => {
|
|
236
|
+
const page = await generatePage();
|
|
237
|
+
await openCalendar(page);
|
|
238
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
239
|
+
expect(await isCalendarOpen(page)).toBe(true);
|
|
240
|
+
await page.keyboard.press("Escape");
|
|
241
|
+
await page.waitForChanges();
|
|
242
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
243
|
+
expect(await isCalendarOpen(page)).toBe(false);
|
|
244
|
+
});
|
|
245
|
+
it("supports selecting a date in the future", async () => {
|
|
246
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
247
|
+
const picker = await getPicker(page);
|
|
248
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
249
|
+
// open calendar
|
|
250
|
+
await page.keyboard.press("Tab");
|
|
251
|
+
await page.waitForChanges();
|
|
252
|
+
await page.keyboard.press("Tab");
|
|
253
|
+
await page.waitForChanges();
|
|
254
|
+
await page.keyboard.press("Enter");
|
|
255
|
+
await page.waitForChanges();
|
|
256
|
+
// wait for calendar to open
|
|
257
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
258
|
+
// set month to april
|
|
259
|
+
await setMonthDropdown(page, "3");
|
|
260
|
+
// tab to grid
|
|
261
|
+
await page.keyboard.press("Tab");
|
|
262
|
+
await page.waitForChanges();
|
|
263
|
+
await page.keyboard.press("Tab");
|
|
264
|
+
await page.waitForChanges();
|
|
265
|
+
await page.keyboard.press("Tab");
|
|
266
|
+
await page.waitForChanges();
|
|
267
|
+
await page.keyboard.press("Tab");
|
|
268
|
+
await page.waitForChanges();
|
|
269
|
+
// select 19th of month
|
|
270
|
+
await page.keyboard.press("ArrowDown");
|
|
271
|
+
await page.waitForChanges();
|
|
272
|
+
await page.keyboard.press("ArrowDown");
|
|
273
|
+
await page.waitForChanges();
|
|
274
|
+
await page.keyboard.press("ArrowRight");
|
|
275
|
+
await page.waitForChanges();
|
|
276
|
+
await page.keyboard.press("ArrowRight");
|
|
277
|
+
await page.waitForChanges();
|
|
278
|
+
await page.keyboard.press("ArrowRight");
|
|
279
|
+
await page.waitForChanges();
|
|
280
|
+
await page.keyboard.press("ArrowRight");
|
|
281
|
+
await page.waitForChanges();
|
|
282
|
+
await page.keyboard.press("Enter");
|
|
283
|
+
await page.waitForChanges();
|
|
284
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
285
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
286
|
+
component: "duet-date-picker",
|
|
287
|
+
value: "2020-04-19",
|
|
288
|
+
valueAsDate: new Date(2020, 3, 19).toISOString(),
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
it("supports selecting a date in the past", async () => {
|
|
292
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
293
|
+
const picker = await getPicker(page);
|
|
294
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
295
|
+
// open calendar
|
|
296
|
+
await page.keyboard.press("Tab");
|
|
297
|
+
await page.waitForChanges();
|
|
298
|
+
await page.keyboard.press("Tab");
|
|
299
|
+
await page.waitForChanges();
|
|
300
|
+
await page.keyboard.press("Enter");
|
|
301
|
+
await page.waitForChanges();
|
|
302
|
+
// wait for calendar to open
|
|
303
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
304
|
+
// select april from month dropdown
|
|
305
|
+
await setMonthDropdown(page, "3");
|
|
306
|
+
// tab to year dropdown, select 2019
|
|
307
|
+
await setYearDropdown(page, "2019");
|
|
308
|
+
// tab to grid
|
|
309
|
+
await page.keyboard.press("Tab");
|
|
310
|
+
await page.waitForChanges();
|
|
311
|
+
await page.keyboard.press("Tab");
|
|
312
|
+
await page.waitForChanges();
|
|
313
|
+
await page.keyboard.press("Tab");
|
|
314
|
+
await page.waitForChanges();
|
|
315
|
+
await page.keyboard.press("Tab");
|
|
316
|
+
await page.waitForChanges();
|
|
317
|
+
// select date 19th of month
|
|
318
|
+
await page.keyboard.press("ArrowDown");
|
|
319
|
+
await page.waitForChanges();
|
|
320
|
+
await page.keyboard.press("ArrowDown");
|
|
321
|
+
await page.waitForChanges();
|
|
322
|
+
await page.keyboard.press("ArrowRight");
|
|
323
|
+
await page.waitForChanges();
|
|
324
|
+
await page.keyboard.press("ArrowRight");
|
|
325
|
+
await page.waitForChanges();
|
|
326
|
+
await page.keyboard.press("ArrowRight");
|
|
327
|
+
await page.waitForChanges();
|
|
328
|
+
await page.keyboard.press("ArrowRight");
|
|
329
|
+
await page.waitForChanges();
|
|
330
|
+
await page.keyboard.press("Enter");
|
|
331
|
+
await page.waitForChanges();
|
|
332
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
333
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
334
|
+
component: "duet-date-picker",
|
|
335
|
+
value: "2019-04-19",
|
|
336
|
+
valueAsDate: new Date(2019, 3, 19).toISOString(),
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
it.todo("moves focus to start of week on home press");
|
|
340
|
+
it.todo("moves focus to end of week end press");
|
|
341
|
+
it.todo("moves focus to previous month on page up press");
|
|
342
|
+
it.todo("moves focus to next month on page down press");
|
|
343
|
+
it.todo("moves focus to previous year on shift + page down press");
|
|
344
|
+
it.todo("moves focus to next year on shift + page down press");
|
|
345
|
+
});
|
|
346
|
+
describe("events", () => {
|
|
347
|
+
it("raises a duetBlur event when the input is blurred", async () => {
|
|
348
|
+
const page = await generatePage();
|
|
349
|
+
const picker = await page.find("duet-date-picker");
|
|
350
|
+
const spy = await picker.spyOnEvent("duetBlur");
|
|
351
|
+
await page.keyboard.press("Tab");
|
|
352
|
+
await page.keyboard.press("Tab");
|
|
353
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
354
|
+
});
|
|
355
|
+
it("raises a duetFocus event when the input is focused", async () => {
|
|
356
|
+
const page = await generatePage();
|
|
357
|
+
const picker = await page.find("duet-date-picker");
|
|
358
|
+
const spy = await picker.spyOnEvent("duetFocus");
|
|
359
|
+
await page.keyboard.press("Tab");
|
|
360
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
361
|
+
});
|
|
573
362
|
});
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
363
|
+
describe("focus management", () => {
|
|
364
|
+
async function assertDayButtonFocused(page) {
|
|
365
|
+
const focused = await getFocusedElement(page);
|
|
366
|
+
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
367
|
+
const tabIndex = await page.evaluate((element) => element.tabIndex, focused);
|
|
368
|
+
expect(tabIndex).toBe(0);
|
|
369
|
+
expect(tag).toEqual("button");
|
|
370
|
+
}
|
|
371
|
+
async function assertCloseButtonFocused(page) {
|
|
372
|
+
const focused = await getFocusedElement(page);
|
|
373
|
+
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
374
|
+
const text = await page.evaluate((element) => element.innerText, focused);
|
|
375
|
+
expect(text).toBe(i18n.fi.closeLabel);
|
|
376
|
+
expect(tag).toEqual("button");
|
|
377
|
+
}
|
|
378
|
+
async function assertMonthDropdownFocused(page) {
|
|
379
|
+
const focused = await getFocusedElement(page);
|
|
380
|
+
const tag = await page.evaluate(element => element.tagName.toLowerCase(), focused);
|
|
381
|
+
const id = await page.evaluate(element => element.id, focused);
|
|
382
|
+
const label = await page.find(`label[for="${id}"]`);
|
|
383
|
+
expect(label).toEqualText(i18n.fi.monthSelectLabel);
|
|
384
|
+
expect(tag).toEqual("select");
|
|
385
|
+
}
|
|
386
|
+
async function assertYearDropdownFocused(page) {
|
|
387
|
+
const focused = await getFocusedElement(page);
|
|
388
|
+
const tag = await page.evaluate(element => element.tagName.toLowerCase(), focused);
|
|
389
|
+
const id = await page.evaluate(element => element.id, focused);
|
|
390
|
+
const label = await page.find(`label[for="${id}"]`);
|
|
391
|
+
expect(label).toEqualText(i18n.fi.yearSelectLabel);
|
|
392
|
+
expect(tag).toEqual("select");
|
|
393
|
+
}
|
|
394
|
+
async function assertPrevMonthFocused(page) {
|
|
395
|
+
const focused = await getFocusedElement(page);
|
|
396
|
+
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
397
|
+
const text = await page.evaluate((element) => element.innerText, focused);
|
|
398
|
+
expect(text).toBe(i18n.fi.prevMonthLabel);
|
|
399
|
+
expect(tag).toEqual("duet-action-button");
|
|
400
|
+
}
|
|
401
|
+
async function assertNextMonthFocused(page) {
|
|
402
|
+
const focused = await getFocusedElement(page);
|
|
403
|
+
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
404
|
+
const text = await page.evaluate((element) => element.innerText, focused);
|
|
405
|
+
expect(text).toBe(i18n.fi.nextMonthLabel);
|
|
406
|
+
expect(tag).toEqual("duet-action-button");
|
|
407
|
+
}
|
|
408
|
+
async function assertToggleButtonFocused(page, negate = false) {
|
|
409
|
+
const focused = await getFocusedElement(page);
|
|
410
|
+
const tag = await page.evaluate((element) => element.tagName.toLowerCase(), focused);
|
|
411
|
+
const text = await page.evaluate((element) => element.innerText, focused);
|
|
412
|
+
if (negate) {
|
|
413
|
+
expect(tag).not.toEqual("button");
|
|
414
|
+
expect(text).not.toContain(`${i18n.fi.buttonLabel}, ${i18n.fi.selected}`);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
expect(tag).toEqual("button");
|
|
418
|
+
expect(text).toContain(`${i18n.fi.buttonLabel}, ${i18n.fi.selected}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
it("traps focus in calendar", async () => {
|
|
422
|
+
const page = await generatePage();
|
|
423
|
+
await openCalendar(page);
|
|
424
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
425
|
+
const focusOrder = [
|
|
426
|
+
assertMonthDropdownFocused,
|
|
427
|
+
assertYearDropdownFocused,
|
|
428
|
+
assertPrevMonthFocused,
|
|
429
|
+
assertNextMonthFocused,
|
|
430
|
+
assertDayButtonFocused,
|
|
431
|
+
assertCloseButtonFocused,
|
|
432
|
+
];
|
|
433
|
+
for (const assertion of focusOrder) {
|
|
434
|
+
await assertion(page);
|
|
435
|
+
await page.keyboard.press("Tab");
|
|
436
|
+
}
|
|
437
|
+
// should arrive back at the start
|
|
438
|
+
const assertion = focusOrder[0];
|
|
439
|
+
await assertion(page);
|
|
440
|
+
});
|
|
441
|
+
it.todo("doesn't shift focus when interacting with calendar navigation controls");
|
|
442
|
+
it("shifts focus back to button on date select", async () => {
|
|
443
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
444
|
+
await openCalendar(page);
|
|
445
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
446
|
+
await clickDay(page, "10. tammikuuta");
|
|
447
|
+
await page.waitForChanges();
|
|
448
|
+
await assertToggleButtonFocused(page);
|
|
449
|
+
});
|
|
450
|
+
it("shifts focus back to button on ESC press", async () => {
|
|
451
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
452
|
+
await openCalendar(page);
|
|
453
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
454
|
+
await page.keyboard.press("Escape");
|
|
455
|
+
await page.waitForChanges();
|
|
456
|
+
await assertToggleButtonFocused(page);
|
|
457
|
+
});
|
|
458
|
+
it("doesn't shift focus to button on click outside", async () => {
|
|
459
|
+
const page = await generatePage({ value: "2020-01-01" });
|
|
460
|
+
await openCalendar(page);
|
|
461
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
462
|
+
await clickOutside(page);
|
|
463
|
+
await assertToggleButtonFocused(page, true);
|
|
464
|
+
});
|
|
583
465
|
});
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
466
|
+
describe("min/max support", () => {
|
|
467
|
+
it("supports a min date", async () => {
|
|
468
|
+
const page = await generatePage({ value: "2020-01-15", min: "2020-01-02" });
|
|
469
|
+
const picker = await getPicker(page);
|
|
470
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
471
|
+
await openCalendar(page);
|
|
472
|
+
// wait for calendar to open
|
|
473
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
474
|
+
// try clicking a day outside the range
|
|
475
|
+
await clickDay(page, "1. tammikuuta");
|
|
476
|
+
expect(spy).toHaveReceivedEventTimes(0);
|
|
477
|
+
// click a day inside the range
|
|
478
|
+
await clickDay(page, "2. tammikuuta");
|
|
479
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
480
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
481
|
+
component: "duet-date-picker",
|
|
482
|
+
value: "2020-01-02",
|
|
483
|
+
valueAsDate: new Date(2020, 0, 2).toISOString(),
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
it("supports a max date", async () => {
|
|
487
|
+
const page = await generatePage({ value: "2020-01-15", max: "2020-01-30" });
|
|
488
|
+
const picker = await getPicker(page);
|
|
489
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
490
|
+
await openCalendar(page);
|
|
491
|
+
// wait for calendar to open
|
|
492
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
493
|
+
// try clicking a day outside the range
|
|
494
|
+
await clickDay(page, "31. tammikuuta");
|
|
495
|
+
expect(spy).toHaveReceivedEventTimes(0);
|
|
496
|
+
// click a day inside the range
|
|
497
|
+
await clickDay(page, "30. tammikuuta");
|
|
498
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
499
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
500
|
+
component: "duet-date-picker",
|
|
501
|
+
value: "2020-01-30",
|
|
502
|
+
valueAsDate: new Date(2020, 0, 30).toISOString(),
|
|
503
|
+
});
|
|
504
|
+
});
|
|
505
|
+
it("supports min and max dates", async () => {
|
|
506
|
+
const page = await generatePage({ value: "2020-01-15", min: "2020-01-02", max: "2020-01-30" });
|
|
507
|
+
const picker = await getPicker(page);
|
|
508
|
+
const spy = await picker.spyOnEvent("duetChange");
|
|
509
|
+
await openCalendar(page);
|
|
510
|
+
// wait for calendar to open
|
|
511
|
+
await page.waitForTimeout(ANIMATION_DELAY);
|
|
512
|
+
// try clicking a day less than min
|
|
513
|
+
await clickDay(page, "1. tammikuuta");
|
|
514
|
+
expect(spy).toHaveReceivedEventTimes(0);
|
|
515
|
+
// try clicking a day greater than max
|
|
516
|
+
await clickDay(page, "31. tammikuuta");
|
|
517
|
+
expect(spy).toHaveReceivedEventTimes(0);
|
|
518
|
+
// click a day inside the range
|
|
519
|
+
await clickDay(page, "30. tammikuuta");
|
|
520
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
521
|
+
expect(spy.lastEvent.detail).toEqual({
|
|
522
|
+
component: "duet-date-picker",
|
|
523
|
+
value: "2020-01-30",
|
|
524
|
+
valueAsDate: new Date(2020, 0, 30).toISOString(),
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
it("disables prev month button if same month and year as min", async () => {
|
|
528
|
+
const page = await generatePage({ value: "2020-04-19", min: "2020-04-01" });
|
|
529
|
+
await openCalendar(page);
|
|
530
|
+
const prevMonthButton = await getPrevMonthButton(page);
|
|
531
|
+
expect(prevMonthButton).toHaveAttribute("disabled");
|
|
532
|
+
});
|
|
533
|
+
it("disables next month button if same month and year as max", async () => {
|
|
534
|
+
const page = await generatePage({ value: "2020-04-19", max: "2020-04-30" });
|
|
535
|
+
await openCalendar(page);
|
|
536
|
+
const nextMonthButton = await getNextMonthButton(page);
|
|
537
|
+
expect(nextMonthButton).toHaveAttribute("disabled");
|
|
538
|
+
});
|
|
539
|
+
it("does not disable prev/next buttons when only month value (but not year) is same as min and max", async () => {
|
|
540
|
+
// there was a bug whereby both buttons would be disabled if the min/max/selected date
|
|
541
|
+
// had the same month (here: 4), but different years. this tests ensures no regression
|
|
542
|
+
const page = await generatePage({ value: "2020-04-19", min: "2019-04-19", max: "2021-04-19" });
|
|
543
|
+
await openCalendar(page);
|
|
544
|
+
const prevMonthButton = await getPrevMonthButton(page);
|
|
545
|
+
const nextMonthButton = await getNextMonthButton(page);
|
|
546
|
+
expect(prevMonthButton).not.toHaveAttribute("disabled");
|
|
547
|
+
expect(nextMonthButton).not.toHaveAttribute("disabled");
|
|
548
|
+
});
|
|
549
|
+
it("respects min/max dates when generating year dropdown", async () => {
|
|
550
|
+
const page = await generatePage({ value: "2020-04-19", min: "2019-04-19", max: "2021-04-19" });
|
|
551
|
+
const allowedYears = await page.$eval(".duet-date-year-select", (select) => {
|
|
552
|
+
return Array.from(select.options).map(option => option.value);
|
|
553
|
+
});
|
|
554
|
+
expect(allowedYears).toEqual(["2019", "2020", "2021"]);
|
|
555
|
+
});
|
|
556
|
+
it("respects min/max dates when generating month dropdown", async () => {
|
|
557
|
+
const page = await generatePage({ value: "2020-04-19", min: "2019-04-01", max: "2020-05-31" });
|
|
558
|
+
await openCalendar(page);
|
|
559
|
+
function getAllowedMonths() {
|
|
560
|
+
return page.$eval(".duet-date-month-select", (select) => {
|
|
561
|
+
return Array.from(select.options)
|
|
562
|
+
.filter(option => !option.disabled)
|
|
563
|
+
.map(option => option.value);
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
// in 2020, January - May is allowed
|
|
567
|
+
let allowedMonths = await getAllowedMonths();
|
|
568
|
+
expect(allowedMonths).toEqual(["0", "1", "2", "3", "4"]);
|
|
569
|
+
await setYearDropdown(page, "2019");
|
|
570
|
+
// in 2019, April - December is allowed
|
|
571
|
+
allowedMonths = await getAllowedMonths();
|
|
572
|
+
expect(allowedMonths).toEqual(["3", "4", "5", "6", "7", "8", "9", "10", "11"]);
|
|
573
|
+
});
|
|
595
574
|
});
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
575
|
+
describe("methods", () => {
|
|
576
|
+
it("should open calendar on show()", async () => {
|
|
577
|
+
const page = await generatePage();
|
|
578
|
+
const picker = await page.find("duet-date-picker");
|
|
579
|
+
expect(await isCalendarOpen(page)).toBe(false);
|
|
580
|
+
await picker.callMethod("show");
|
|
581
|
+
await page.waitForChanges();
|
|
582
|
+
expect(await isCalendarOpen(page)).toBe(true);
|
|
583
|
+
});
|
|
584
|
+
it("should close calendar on hide()", async () => {
|
|
585
|
+
const page = await generatePage();
|
|
586
|
+
const picker = await page.find("duet-date-picker");
|
|
587
|
+
await picker.callMethod("show");
|
|
588
|
+
await page.waitForChanges();
|
|
589
|
+
expect(await isCalendarOpen(page)).toBe(true);
|
|
590
|
+
await picker.callMethod("hide");
|
|
591
|
+
await page.waitForChanges();
|
|
592
|
+
const dialog = await getDialog(page);
|
|
593
|
+
await dialog.waitForNotVisible();
|
|
594
|
+
expect(await isCalendarOpen(page)).toBe(false);
|
|
595
|
+
});
|
|
596
|
+
it("should focus input on setFocus()", async () => {
|
|
597
|
+
const page = await generatePage({ label: "test label" });
|
|
598
|
+
const picker = await page.find("duet-date-picker");
|
|
599
|
+
await picker.callMethod("setFocus");
|
|
600
|
+
await page.waitForChanges();
|
|
601
|
+
const focused = await getFocusedElement(page);
|
|
602
|
+
const id = await page.evaluate(element => element.id, focused);
|
|
603
|
+
const label = await page.find(`label[for="${id}"]`);
|
|
604
|
+
expect(label).toEqualText("test label");
|
|
605
|
+
});
|
|
605
606
|
});
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
const page = await createPage(`
|
|
607
|
+
describe("form interaction", () => {
|
|
608
|
+
it("supports required attribute", async () => {
|
|
609
|
+
const page = await createPage(`
|
|
610
610
|
<form>
|
|
611
611
|
<duet-date-picker required></duet-date-picker>
|
|
612
612
|
<button type="submit">submit</button>
|
|
613
613
|
</form>
|
|
614
614
|
`);
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
615
|
+
const picker = await getPicker(page);
|
|
616
|
+
const button = await page.find("button[type='submit']");
|
|
617
|
+
const form = await page.find("form");
|
|
618
|
+
const spy = await form.spyOnEvent("submit");
|
|
619
|
+
await button.click();
|
|
620
|
+
await page.waitForChanges();
|
|
621
|
+
expect(spy).toHaveReceivedEventTimes(0);
|
|
622
|
+
picker.setProperty("value", "2020-01-01");
|
|
623
|
+
await page.waitForChanges();
|
|
624
|
+
await button.click();
|
|
625
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
626
|
+
});
|
|
627
|
+
it("always submits value as ISO date", async () => {
|
|
628
|
+
const page = await createPage(`
|
|
629
629
|
<form>
|
|
630
630
|
<duet-date-picker name="test"></duet-date-picker>
|
|
631
631
|
<button type="submit">submit</button>
|
|
632
632
|
</form>
|
|
633
633
|
`);
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
634
|
+
const picker = await getPicker(page);
|
|
635
|
+
const input = await getInput(page);
|
|
636
|
+
picker.setProperty("value", "2020-01-01");
|
|
637
|
+
await page.waitForChanges();
|
|
638
|
+
// submitted value should be ISO format
|
|
639
|
+
const submittedValue = await page.$eval("form", (form) => new FormData(form).get("test"));
|
|
640
|
+
expect(submittedValue).toEqual("2020-01-01");
|
|
641
|
+
// whilst the displayed value should be Finnish format
|
|
642
|
+
expect(await input.getProperty("value")).toEqual("01.01.2020");
|
|
643
|
+
});
|
|
643
644
|
});
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
test.each `
|
|
645
|
+
describe("constraint validation", () => {
|
|
646
|
+
test.each `
|
|
647
647
|
input | required | min | max | valueMissing | badInput | rangeUnderflow | rangeOverflow
|
|
648
648
|
${""} | ${false} | ${""} | ${""} | ${false} | ${false} | ${false} | ${false}
|
|
649
649
|
${""} | ${true} | ${""} | ${""} | ${true} | ${false} | ${false} | ${false}
|
|
@@ -653,41 +653,41 @@ describe("duet-date-picker", () => {
|
|
|
653
653
|
${"01.01.2023"} | ${true} | ${"2021-01-01"} | ${"2022-01-01"} | ${false} | ${false} | ${false} | ${true}
|
|
654
654
|
${"01.01.2021"} | ${true} | ${"2021-01-01"} | ${"2022-01-01"} | ${false} | ${false} | ${false} | ${false}
|
|
655
655
|
`("when '$input' is entered, required is '$required', min is '$min', max is '$max', then valueMissing is $valueMissing, badInput is $badInput, rangerOverflow is $rangeOverflow, rangeUnderflow is $rangeUnderflow", async ({ input, required, min, max, valueMissing, badInput, rangeUnderflow, rangeOverflow }) => {
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
656
|
+
const attrs = Object.entries({ min, max, required })
|
|
657
|
+
.filter(([, value]) => value)
|
|
658
|
+
.map(([attr, value]) => `${attr}="${value}"`)
|
|
659
|
+
.join(" ");
|
|
660
|
+
const page = await createPage(`
|
|
661
661
|
<duet-date-picker ${attrs}></duet-date-picker>
|
|
662
662
|
<input type="date" ${attrs} />
|
|
663
663
|
`);
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
664
|
+
await page.type(`duet-date-picker input[type="text"]`, input, { delay: 20 });
|
|
665
|
+
const duetValidity = await page.$eval(`duet-date-picker`, ({ validity }) => validity);
|
|
666
|
+
await page.type(`input[type="date"]`, input.replace(".", ""), { delay: 20 });
|
|
667
|
+
// have to manually copy properties into new object,
|
|
668
|
+
// since native ValidityState doesn't support JSON serialization
|
|
669
|
+
const nativeValidity = await page.$eval(`input[type="date"]`, ({ validity }) => {
|
|
670
|
+
const result = {};
|
|
671
|
+
for (const prop in validity) {
|
|
672
|
+
result[prop] = validity[prop];
|
|
673
|
+
}
|
|
674
|
+
return result;
|
|
675
|
+
});
|
|
676
|
+
const expected = {
|
|
677
|
+
patternMismatch: false,
|
|
678
|
+
customError: false,
|
|
679
|
+
stepMismatch: false,
|
|
680
|
+
tooLong: false,
|
|
681
|
+
tooShort: false,
|
|
682
|
+
typeMismatch: false,
|
|
683
|
+
valueMissing,
|
|
684
|
+
badInput,
|
|
685
|
+
rangeUnderflow,
|
|
686
|
+
rangeOverflow,
|
|
687
|
+
valid: !valueMissing && !badInput && !rangeUnderflow && !rangeOverflow,
|
|
688
|
+
};
|
|
689
|
+
expect(duetValidity).toEqual(expected);
|
|
690
|
+
expect(nativeValidity).toEqual(expected);
|
|
691
|
+
});
|
|
691
692
|
});
|
|
692
|
-
});
|
|
693
693
|
});
|