@duetds/components 8.0.6 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1247) hide show
  1. package/hydrate/index.d.ts +2 -2
  2. package/hydrate/index.js +19204 -17910
  3. package/lib/cjs/app-globals-aece069f.js +28 -0
  4. package/lib/cjs/{common-strings-86913e94.js → common-strings-22c70ef0.js} +6 -6
  5. package/lib/cjs/create-id-1f8c438f.js +13 -0
  6. package/lib/cjs/duet-action-button.cjs.entry.js +134 -134
  7. package/lib/cjs/duet-alert.cjs.entry.js +109 -106
  8. package/lib/cjs/duet-badge.cjs.entry.js +29 -29
  9. package/lib/cjs/duet-banner.cjs.entry.js +52 -52
  10. package/lib/cjs/duet-breadcrumb.cjs.entry.js +50 -41
  11. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +51 -51
  12. package/lib/cjs/duet-button_2.cjs.entry.js +229 -229
  13. package/lib/cjs/duet-callout.cjs.entry.js +28 -28
  14. package/lib/cjs/duet-caption_4.cjs.entry.js +197 -187
  15. package/lib/cjs/duet-card.cjs.entry.js +100 -94
  16. package/lib/cjs/duet-checkbox.cjs.entry.js +85 -85
  17. package/lib/cjs/duet-checkmark.cjs.entry.js +23 -23
  18. package/lib/cjs/duet-chip.cjs.entry.js +189 -182
  19. package/lib/cjs/duet-choice_2.cjs.entry.js +395 -393
  20. package/lib/cjs/duet-collapsible.cjs.entry.js +105 -99
  21. package/lib/cjs/duet-combobox.cjs.entry.js +363 -363
  22. package/lib/cjs/duet-contact-card.cjs.entry.js +49 -49
  23. package/lib/cjs/duet-cookie-consent.cjs.entry.js +42 -35
  24. package/lib/cjs/duet-date-picker.cjs.entry.js +610 -610
  25. package/lib/cjs/duet-divider_2.cjs.entry.js +53 -53
  26. package/lib/cjs/duet-editable-table_3.cjs.entry.js +1248 -1248
  27. package/lib/cjs/duet-empty-state.cjs.entry.js +26 -26
  28. package/lib/cjs/duet-fieldset.cjs.entry.js +50 -50
  29. package/lib/cjs/duet-file-chooser.cjs.entry.js +44 -44
  30. package/lib/cjs/duet-footer.cjs.entry.js +121 -118
  31. package/lib/cjs/duet-grid_2.cjs.entry.js +185 -185
  32. package/lib/cjs/duet-header_2.cjs.entry.js +613 -611
  33. package/lib/cjs/duet-hero.cjs.entry.js +172 -172
  34. package/lib/cjs/duet-icon.cjs.entry.js +141 -141
  35. package/lib/cjs/duet-input_2.cjs.entry.js +347 -347
  36. package/lib/cjs/duet-layout.cjs.entry.js +51 -51
  37. package/lib/cjs/duet-list_2.cjs.entry.js +99 -99
  38. package/lib/cjs/duet-menu-bar-button.cjs.entry.js +70 -70
  39. package/lib/cjs/duet-menu-bar-dropdown-link.cjs.entry.js +45 -45
  40. package/lib/cjs/duet-menu-bar-dropdown.cjs.entry.js +94 -94
  41. package/lib/cjs/duet-menu-bar-link.cjs.entry.js +58 -58
  42. package/lib/cjs/duet-menu-bar.cjs.entry.js +116 -116
  43. package/lib/cjs/duet-modal.cjs.entry.js +189 -189
  44. package/lib/cjs/duet-multiselect.cjs.entry.js +207 -207
  45. package/lib/cjs/duet-nav.cjs.entry.js +20 -20
  46. package/lib/cjs/duet-notification_2.cjs.entry.js +145 -140
  47. package/lib/cjs/duet-number-input.cjs.entry.js +340 -338
  48. package/lib/cjs/duet-page-heading.cjs.entry.js +26 -26
  49. package/lib/cjs/duet-pagination_2.cjs.entry.js +512 -512
  50. package/lib/cjs/duet-popup-menu-item.cjs.entry.js +62 -62
  51. package/lib/cjs/duet-popup-menu.cjs.entry.js +148 -148
  52. package/lib/cjs/duet-progress.cjs.entry.js +54 -54
  53. package/lib/cjs/duet-promo-card.cjs.entry.js +40 -40
  54. package/lib/cjs/duet-radio_2.cjs.entry.js +197 -197
  55. package/lib/cjs/duet-range-slider.cjs.entry.js +112 -105
  56. package/lib/cjs/duet-scrollable_3.cjs.entry.js +387 -387
  57. package/lib/cjs/duet-section-layout.cjs.entry.js +21 -21
  58. package/lib/cjs/duet-select.cjs.entry.js +156 -156
  59. package/lib/cjs/duet-shaped-image.cjs.entry.js +28 -28
  60. package/lib/cjs/duet-show-more.cjs.entry.js +99 -99
  61. package/lib/cjs/duet-slideout-lang.cjs.entry.js +36 -36
  62. package/lib/cjs/duet-slideout-link.cjs.entry.js +33 -33
  63. package/lib/cjs/duet-slideout-panel-dropdown.cjs.entry.js +50 -50
  64. package/lib/cjs/duet-slideout-panel.cjs.entry.js +120 -120
  65. package/lib/cjs/duet-slideout.cjs.entry.js +196 -196
  66. package/lib/cjs/duet-step_2.cjs.entry.js +189 -185
  67. package/lib/cjs/duet-submenu-bar-dropdown-link.cjs.entry.js +37 -37
  68. package/lib/cjs/duet-submenu-bar-dropdown.cjs.entry.js +104 -104
  69. package/lib/cjs/duet-submenu-bar-link.cjs.entry.js +60 -60
  70. package/lib/cjs/duet-submenu-bar.cjs.entry.js +110 -110
  71. package/lib/cjs/duet-textarea.cjs.entry.js +160 -160
  72. package/lib/cjs/duet-toggle.cjs.entry.js +79 -72
  73. package/lib/cjs/duet-toolbar-dropdown-link.cjs.entry.js +36 -36
  74. package/lib/cjs/duet-toolbar-dropdown.cjs.entry.js +60 -60
  75. package/lib/cjs/duet-toolbar-link.cjs.entry.js +31 -31
  76. package/lib/cjs/duet-toolbar.cjs.entry.js +34 -34
  77. package/lib/cjs/duet-tooltip-button_2.cjs.entry.js +93 -80
  78. package/lib/cjs/duet-tooltip.cjs.entry.js +190 -188
  79. package/lib/cjs/duet-tray.cjs.entry.js +85 -82
  80. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +65 -65
  81. package/lib/cjs/duet-upload-item.cjs.entry.js +81 -81
  82. package/lib/cjs/duet-visually-hidden.cjs.entry.js +12 -12
  83. package/lib/cjs/duet.cjs.js +4 -4
  84. package/lib/cjs/errorcodes.utils-a86b1f94.js +39 -0
  85. package/lib/cjs/focus-utils-d0b70745.js +21 -0
  86. package/lib/cjs/{index-2cce7b13.js → index-2dc54a15.js} +106 -45
  87. package/lib/cjs/input-utils-1096a2c5.js +56 -0
  88. package/lib/cjs/{is-internet-explorer-76c3b538.js → is-internet-explorer-e7f58ebc.js} +2 -2
  89. package/lib/cjs/{js-utils-b20cfc79.js → js-utils-92e24ba1.js} +27 -27
  90. package/lib/cjs/keyboard-utils-7248dd0a.js +69 -0
  91. package/lib/cjs/{language-utils-dc19e8b6.js → language-utils-e8a527e5.js} +74 -74
  92. package/lib/cjs/loader.cjs.js +3 -3
  93. package/lib/cjs/{slot-query-b7555763.js → slot-query-3259af5b.js} +1 -1
  94. package/lib/cjs/string-utils-053749ff.js +59 -0
  95. package/lib/cjs/teleport-e9d05bca.js +99 -0
  96. package/lib/cjs/themeable-component-83a2a0d4.js +15 -0
  97. package/lib/cjs/token-utils-84b3bca6.js +124 -0
  98. package/lib/cjs/watch-options-30a12622.js +61 -0
  99. package/lib/collection/collection-manifest.json +3 -3
  100. package/lib/collection/common/slot-query.js +3 -3
  101. package/lib/collection/common/themeable-component.js +6 -6
  102. package/lib/collection/common-strings.js +6 -6
  103. package/lib/collection/components/duet-action-button/duet-action-button.a11y.e2e.js +5 -5
  104. package/lib/collection/components/duet-action-button/duet-action-button.js +570 -569
  105. package/lib/collection/components/duet-alert/duet-alert.a11y.e2e.js +10 -10
  106. package/lib/collection/components/duet-alert/duet-alert.e2e.js +47 -47
  107. package/lib/collection/components/duet-alert/duet-alert.js +445 -441
  108. package/lib/collection/components/duet-badge/duet-badge.a11y.e2e.js +10 -10
  109. package/lib/collection/components/duet-badge/duet-badge.e2e.js +21 -21
  110. package/lib/collection/components/duet-badge/duet-badge.js +134 -134
  111. package/lib/collection/components/duet-banner/duet-banner.a11y.e2e.js +5 -5
  112. package/lib/collection/components/duet-banner/duet-banner.e2e.js +16 -16
  113. package/lib/collection/components/duet-banner/duet-banner.js +309 -309
  114. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +172 -139
  115. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.a11y.e2e.js +5 -5
  116. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.e2e.js +6 -6
  117. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +112 -112
  118. package/lib/collection/components/duet-button/duet-button.a11y.e2e.js +30 -30
  119. package/lib/collection/components/duet-button/duet-button.e2e.js +187 -187
  120. package/lib/collection/components/duet-button/duet-button.js +1068 -1067
  121. package/lib/collection/components/duet-callout/duet-callout.a11y.e2e.js +5 -5
  122. package/lib/collection/components/duet-callout/duet-callout.e2e.js +15 -15
  123. package/lib/collection/components/duet-callout/duet-callout.js +88 -88
  124. package/lib/collection/components/duet-caption/duet-caption.a11y.e2e.js +5 -5
  125. package/lib/collection/components/duet-caption/duet-caption.e2e.js +20 -20
  126. package/lib/collection/components/duet-caption/duet-caption.js +131 -131
  127. package/lib/collection/components/duet-card/duet-card.a11y.e2e.js +10 -10
  128. package/lib/collection/components/duet-card/duet-card.e2e.js +85 -85
  129. package/lib/collection/components/duet-card/duet-card.js +498 -491
  130. package/lib/collection/components/duet-checkbox/duet-checkbox.a11y.e2e.js +10 -10
  131. package/lib/collection/components/duet-checkbox/duet-checkbox.e2e.js +103 -103
  132. package/lib/collection/components/duet-checkbox/duet-checkbox.js +553 -549
  133. package/lib/collection/components/duet-chip/duet-chip.a11y.e2e.js +10 -10
  134. package/lib/collection/components/duet-chip/duet-chip.e2e.js +40 -40
  135. package/lib/collection/components/duet-chip/duet-chip.js +494 -486
  136. package/lib/collection/components/duet-choice/duet-checkmark.js +136 -136
  137. package/lib/collection/components/duet-choice/duet-choice.a11y.e2e.js +25 -25
  138. package/lib/collection/components/duet-choice/duet-choice.e2e.js +171 -171
  139. package/lib/collection/components/duet-choice/duet-choice.js +1095 -1089
  140. package/lib/collection/components/duet-choice-group/duet-choice-group.a11y.e2e.js +5 -5
  141. package/lib/collection/components/duet-choice-group/duet-choice-group.e2e.js +63 -63
  142. package/lib/collection/components/duet-choice-group/duet-choice-group.js +456 -453
  143. package/lib/collection/components/duet-collapsible/duet-collapsible.a11y.e2e.js +10 -10
  144. package/lib/collection/components/duet-collapsible/duet-collapsible.e2e.js +87 -87
  145. package/lib/collection/components/duet-collapsible/duet-collapsible.js +370 -363
  146. package/lib/collection/components/duet-combobox/duet-combobox-select-single.js +2 -2
  147. package/lib/collection/components/duet-combobox/duet-combobox-select.js +8 -8
  148. package/lib/collection/components/duet-combobox/duet-combobox.a11y.e2e.js +5 -5
  149. package/lib/collection/components/duet-combobox/duet-combobox.e2e.js +115 -115
  150. package/lib/collection/components/duet-combobox/duet-combobox.js +670 -669
  151. package/lib/collection/components/duet-contact-card/duet-contact-card.a11y.e2e.js +5 -5
  152. package/lib/collection/components/duet-contact-card/duet-contact-card.js +255 -255
  153. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.a11y.e2e.js +5 -5
  154. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.e2e.js +16 -16
  155. package/lib/collection/components/duet-cookie-consent/duet-cookie-consent.js +134 -127
  156. package/lib/collection/components/duet-date-picker/date-i18n.js +97 -97
  157. package/lib/collection/components/duet-date-picker/date-picker-day.js +9 -9
  158. package/lib/collection/components/duet-date-picker/date-picker-input.js +5 -5
  159. package/lib/collection/components/duet-date-picker/date-picker-month.js +16 -16
  160. package/lib/collection/components/duet-date-picker/date-utils.js +95 -95
  161. package/lib/collection/components/duet-date-picker/date-utils.spec.js +323 -323
  162. package/lib/collection/components/duet-date-picker/duet-date-picker.a11y.e2e.js +5 -5
  163. package/lib/collection/components/duet-date-picker/duet-date-picker.e2e.js +618 -618
  164. package/lib/collection/components/duet-date-picker/duet-date-picker.js +1049 -1044
  165. package/lib/collection/components/duet-date-picker/utils.js +29 -29
  166. package/lib/collection/components/duet-divider/duet-divider.a11y.e2e.js +5 -5
  167. package/lib/collection/components/duet-divider/duet-divider.e2e.js +24 -24
  168. package/lib/collection/components/duet-divider/duet-divider.js +112 -112
  169. package/lib/collection/components/duet-editable-table/duet-editable-table-tabledata.js +7 -7
  170. package/lib/collection/components/duet-editable-table/duet-editable-table.a11y.e2e.js +5 -5
  171. package/lib/collection/components/duet-editable-table/duet-editable-table.e2e.js +19 -19
  172. package/lib/collection/components/duet-editable-table/duet-editable-table.js +501 -498
  173. package/lib/collection/components/duet-empty-state/duet-empty-state.a11y.e2e.js +5 -5
  174. package/lib/collection/components/duet-empty-state/duet-empty-state.e2e.js +10 -10
  175. package/lib/collection/components/duet-empty-state/duet-empty-state.js +110 -110
  176. package/lib/collection/components/duet-fieldset/duet-fieldset.a11y.e2e.js +5 -5
  177. package/lib/collection/components/duet-fieldset/duet-fieldset.e2e.js +5 -5
  178. package/lib/collection/components/duet-fieldset/duet-fieldset.js +245 -245
  179. package/lib/collection/components/duet-file-chooser/duet-file-chooser.js +179 -179
  180. package/lib/collection/components/duet-footer/duet-footer.a11y.e2e.js +5 -5
  181. package/lib/collection/components/duet-footer/duet-footer.e2e.js +163 -163
  182. package/lib/collection/components/duet-footer/duet-footer.js +488 -485
  183. package/lib/collection/components/duet-grid/duet-grid.a11y.e2e.js +5 -5
  184. package/lib/collection/components/duet-grid/duet-grid.e2e.js +36 -36
  185. package/lib/collection/components/duet-grid/duet-grid.js +345 -342
  186. package/lib/collection/components/duet-grid-item/duet-grid-item.js +233 -230
  187. package/lib/collection/components/duet-header/duet-header-dropdown.js +12 -12
  188. package/lib/collection/components/duet-header/duet-header-icon.js +2 -2
  189. package/lib/collection/components/duet-header/duet-header.a11y.e2e.js +5 -5
  190. package/lib/collection/components/duet-header/duet-header.e2e.js +430 -430
  191. package/lib/collection/components/duet-header/duet-header.js +1300 -1296
  192. package/lib/collection/components/duet-heading/duet-heading.a11y.e2e.js +5 -5
  193. package/lib/collection/components/duet-heading/duet-heading.e2e.js +21 -21
  194. package/lib/collection/components/duet-heading/duet-heading.js +230 -230
  195. package/lib/collection/components/duet-hero/duet-hero.a11y.e2e.js +15 -15
  196. package/lib/collection/components/duet-hero/duet-hero.e2e.js +166 -166
  197. package/lib/collection/components/duet-hero/duet-hero.js +814 -814
  198. package/lib/collection/components/duet-icon/duet-icon.a11y.e2e.js +5 -5
  199. package/lib/collection/components/duet-icon/duet-icon.e2e.js +26 -26
  200. package/lib/collection/components/duet-icon/duet-icon.js +392 -392
  201. package/lib/collection/components/duet-icon/icon-utils.js +59 -59
  202. package/lib/collection/components/duet-icon/icon-utils.spec.js +76 -76
  203. package/lib/collection/components/duet-input/duet-input.a11y.e2e.js +20 -20
  204. package/lib/collection/components/duet-input/duet-input.e2e.js +195 -195
  205. package/lib/collection/components/duet-input/duet-input.js +1249 -1245
  206. package/lib/collection/components/duet-label/duet-label.a11y.e2e.js +5 -5
  207. package/lib/collection/components/duet-label/duet-label.e2e.js +26 -26
  208. package/lib/collection/components/duet-label/duet-label.js +134 -131
  209. package/lib/collection/components/duet-layout/duet-layout.a11y.e2e.js +5 -5
  210. package/lib/collection/components/duet-layout/duet-layout.e2e.js +26 -26
  211. package/lib/collection/components/duet-layout/duet-layout.js +207 -207
  212. package/lib/collection/components/duet-link/duet-link.a11y.e2e.js +15 -15
  213. package/lib/collection/components/duet-link/duet-link.e2e.js +47 -47
  214. package/lib/collection/components/duet-link/duet-link.js +446 -435
  215. package/lib/collection/components/duet-list/duet-list.a11y.e2e.js +11 -11
  216. package/lib/collection/components/duet-list/duet-list.e2e.js +50 -50
  217. package/lib/collection/components/duet-list/duet-list.js +292 -292
  218. package/lib/collection/components/duet-list-item/duet-list-item.js +81 -81
  219. package/lib/collection/components/duet-logo/duet-logo.a11y.e2e.js +5 -5
  220. package/lib/collection/components/duet-logo/duet-logo.e2e.js +36 -36
  221. package/lib/collection/components/duet-logo/duet-logo.js +293 -292
  222. package/lib/collection/components/duet-menu-bar/duet-menu-bar.a11y.e2e.js +5 -5
  223. package/lib/collection/components/duet-menu-bar/duet-menu-bar.js +261 -261
  224. package/lib/collection/components/duet-menu-bar-button/duet-menu-bar-button.js +347 -346
  225. package/lib/collection/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.js +224 -223
  226. package/lib/collection/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.js +133 -133
  227. package/lib/collection/components/duet-menu-bar-link/duet-menu-bar-link.js +170 -170
  228. package/lib/collection/components/duet-modal/duet-modal.a11y.e2e.js +10 -10
  229. package/lib/collection/components/duet-modal/duet-modal.e2e.js +78 -78
  230. package/lib/collection/components/duet-modal/duet-modal.js +687 -687
  231. package/lib/collection/components/duet-multiselect/duet-multiselect.a11y.e2e.js +5 -5
  232. package/lib/collection/components/duet-multiselect/duet-multiselect.e2e.js +87 -87
  233. package/lib/collection/components/duet-multiselect/duet-multiselect.js +654 -653
  234. package/lib/collection/components/duet-nav/duet-nav.js +56 -56
  235. package/lib/collection/components/duet-notification/duet-notification.a11y.e2e.js +5 -5
  236. package/lib/collection/components/duet-notification/duet-notification.e2e.js +6 -6
  237. package/lib/collection/components/duet-notification/duet-notification.js +260 -259
  238. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.a11y.e2e.js +10 -10
  239. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.e2e.js +141 -141
  240. package/lib/collection/components/duet-notification-drawer/duet-notification-drawer.js +382 -383
  241. package/lib/collection/components/duet-number-input/duet-number-input-negative.e2e.js +26 -26
  242. package/lib/collection/components/duet-number-input/duet-number-input.a11y.e2e.js +5 -5
  243. package/lib/collection/components/duet-number-input/duet-number-input.e2e.js +232 -232
  244. package/lib/collection/components/duet-number-input/duet-number-input.js +1120 -1114
  245. package/lib/collection/components/duet-page-heading/duet-page-heading.a11y.e2e.js +5 -5
  246. package/lib/collection/components/duet-page-heading/duet-page-heading.js +104 -104
  247. package/lib/collection/components/duet-pagination/duet-pagination-utils.js +4 -4
  248. package/lib/collection/components/duet-pagination/duet-pagination.a11y.e2e.js +10 -10
  249. package/lib/collection/components/duet-pagination/duet-pagination.e2e.js +79 -79
  250. package/lib/collection/components/duet-pagination/duet-pagination.js +677 -677
  251. package/lib/collection/components/duet-paragraph/duet-paragraph.a11y.e2e.js +5 -5
  252. package/lib/collection/components/duet-paragraph/duet-paragraph.e2e.js +21 -21
  253. package/lib/collection/components/duet-paragraph/duet-paragraph.js +190 -190
  254. package/lib/collection/components/duet-popup-menu/duet-popup-menu.a11y.e2e.js +5 -5
  255. package/lib/collection/components/duet-popup-menu/duet-popup-menu.js +407 -407
  256. package/lib/collection/components/duet-popup-menu-item/duet-popup-menu-item.js +344 -343
  257. package/lib/collection/components/duet-progress/duet-progress.a11y.e2e.js +7 -7
  258. package/lib/collection/components/duet-progress/duet-progress.e2e.js +6 -6
  259. package/lib/collection/components/duet-progress/duet-progress.js +276 -273
  260. package/lib/collection/components/duet-promo-card/duet-promo-card.a11y.e2e.js +5 -5
  261. package/lib/collection/components/duet-promo-card/duet-promo-card.e2e.js +16 -16
  262. package/lib/collection/components/duet-promo-card/duet-promo-card.js +206 -206
  263. package/lib/collection/components/duet-radio/duet-radio.a11y.e2e.js +5 -5
  264. package/lib/collection/components/duet-radio/duet-radio.e2e.js +126 -126
  265. package/lib/collection/components/duet-radio/duet-radio.js +609 -605
  266. package/lib/collection/components/duet-radio-group/duet-radio-group.a11y.e2e.js +10 -10
  267. package/lib/collection/components/duet-radio-group/duet-radio-group.e2e.js +39 -39
  268. package/lib/collection/components/duet-radio-group/duet-radio-group.js +423 -420
  269. package/lib/collection/components/duet-range-slider/duet-range-slider.a11y.e2e.js +5 -5
  270. package/lib/collection/components/duet-range-slider/duet-range-slider.e2e.js +51 -51
  271. package/lib/collection/components/duet-range-slider/duet-range-slider.js +568 -557
  272. package/lib/collection/components/duet-range-stepper/duet-range-stepper.a11y.e2e.js +5 -5
  273. package/lib/collection/components/duet-range-stepper/duet-range-stepper.e2e.js +46 -46
  274. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +341 -341
  275. package/lib/collection/components/duet-range-stepper/duet-range-stepper.spec.js +17 -17
  276. package/lib/collection/components/duet-scrollable/duet-scrollable.a11y.e2e.js +5 -5
  277. package/lib/collection/components/duet-scrollable/duet-scrollable.e2e.js +6 -6
  278. package/lib/collection/components/duet-scrollable/duet-scrollable.js +294 -294
  279. package/lib/collection/components/duet-section-layout/duet-section-layout.a11y.e2e.js +5 -5
  280. package/lib/collection/components/duet-section-layout/duet-section-layout.e2e.js +16 -16
  281. package/lib/collection/components/duet-section-layout/duet-section-layout.js +75 -75
  282. package/lib/collection/components/duet-select/duet-select.a11y.e2e.js +10 -10
  283. package/lib/collection/components/duet-select/duet-select.e2e.js +201 -201
  284. package/lib/collection/components/duet-select/duet-select.js +722 -718
  285. package/lib/collection/components/duet-shaped-image/duet-shaped-image.a11y.e2e.js +5 -5
  286. package/lib/collection/components/duet-shaped-image/duet-shaped-image.js +143 -143
  287. package/lib/collection/components/duet-show-more/duet-show-more.a11y.e2e.js +5 -5
  288. package/lib/collection/components/duet-show-more/duet-show-more.js +436 -436
  289. package/lib/collection/components/duet-slideout/duet-slideout.a11y.e2e.js +5 -5
  290. package/lib/collection/components/duet-slideout/duet-slideout.css +4 -10
  291. package/lib/collection/components/duet-slideout/duet-slideout.js +408 -407
  292. package/lib/collection/components/duet-slideout-lang/duet-slideout-lang.js +75 -75
  293. package/lib/collection/components/duet-slideout-link/duet-slideout-link.js +215 -215
  294. package/lib/collection/components/duet-slideout-panel/duet-slideout-panel.js +282 -281
  295. package/lib/collection/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.js +177 -176
  296. package/lib/collection/components/duet-spacer/duet-spacer.a11y.e2e.js +5 -5
  297. package/lib/collection/components/duet-spacer/duet-spacer.e2e.js +21 -21
  298. package/lib/collection/components/duet-spacer/duet-spacer.js +110 -110
  299. package/lib/collection/components/duet-spinner/duet-spinner.a11y.e2e.js +5 -5
  300. package/lib/collection/components/duet-spinner/duet-spinner.e2e.js +23 -23
  301. package/lib/collection/components/duet-spinner/duet-spinner.js +131 -131
  302. package/lib/collection/components/duet-step/duet-step.e2e.js +83 -83
  303. package/lib/collection/components/duet-step/duet-step.js +299 -291
  304. package/lib/collection/components/duet-stepper/duet-stepper.a11y.e2e.js +8 -8
  305. package/lib/collection/components/duet-stepper/duet-stepper.e2e.js +49 -49
  306. package/lib/collection/components/duet-stepper/duet-stepper.js +243 -243
  307. package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.a11y.e2e.js +5 -5
  308. package/lib/collection/components/duet-submenu-bar/duet-submenu-bar.js +218 -217
  309. package/lib/collection/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.js +235 -234
  310. package/lib/collection/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.js +162 -162
  311. package/lib/collection/components/duet-submenu-bar-link/duet-submenu-bar-link.js +154 -154
  312. package/lib/collection/components/duet-tab/duet-tab.e2e.js +10 -10
  313. package/lib/collection/components/duet-tab/duet-tab.js +162 -161
  314. package/lib/collection/components/duet-tab-group/duet-tab-group.a11y.e2e.js +5 -5
  315. package/lib/collection/components/duet-tab-group/duet-tab-group.e2e.js +60 -60
  316. package/lib/collection/components/duet-tab-group/duet-tab-group.js +636 -633
  317. package/lib/collection/components/duet-table/duet-table.a11y.e2e.js +5 -5
  318. package/lib/collection/components/duet-table/duet-table.e2e.js +25 -25
  319. package/lib/collection/components/duet-table/duet-table.js +284 -281
  320. package/lib/collection/components/duet-textarea/duet-textarea.a11y.e2e.js +10 -10
  321. package/lib/collection/components/duet-textarea/duet-textarea.e2e.js +193 -193
  322. package/lib/collection/components/duet-textarea/duet-textarea.js +849 -845
  323. package/lib/collection/components/duet-toggle/duet-toggle.a11y.e2e.js +5 -5
  324. package/lib/collection/components/duet-toggle/duet-toggle.e2e.js +66 -66
  325. package/lib/collection/components/duet-toggle/duet-toggle.js +475 -464
  326. package/lib/collection/components/duet-toolbar/duet-toolbar.a11y.e2e.js +5 -5
  327. package/lib/collection/components/duet-toolbar/duet-toolbar.js +105 -105
  328. package/lib/collection/components/duet-toolbar-dropdown/duet-toolbar-dropdown.js +221 -220
  329. package/lib/collection/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.js +160 -160
  330. package/lib/collection/components/duet-toolbar-link/duet-toolbar-link.js +156 -156
  331. package/lib/collection/components/duet-tooltip/duet-tooltip-button.js +172 -164
  332. package/lib/collection/components/duet-tooltip/duet-tooltip-popup.js +258 -251
  333. package/lib/collection/components/duet-tooltip/duet-tooltip.a11y.e2e.js +14 -14
  334. package/lib/collection/components/duet-tooltip/duet-tooltip.e2e.js +76 -76
  335. package/lib/collection/components/duet-tooltip/duet-tooltip.js +537 -529
  336. package/lib/collection/components/duet-tray/duet-tray.a11y.e2e.js +5 -5
  337. package/lib/collection/components/duet-tray/duet-tray.e2e.js +67 -67
  338. package/lib/collection/components/duet-tray/duet-tray.js +318 -315
  339. package/lib/collection/components/duet-upload/duet-upload.e2e.js +40 -40
  340. package/lib/collection/components/duet-upload/duet-upload.js +2282 -2276
  341. package/lib/collection/components/duet-upload/errorcodes.utils.js +22 -22
  342. package/lib/collection/components/duet-upload/mock.helpers.js +85 -85
  343. package/lib/collection/components/duet-upload/upload-editable-item-error.js +4 -4
  344. package/lib/collection/components/duet-upload/upload-editable-item-success.js +15 -15
  345. package/lib/collection/components/duet-upload/upload-item-category.js +2 -2
  346. package/lib/collection/components/duet-upload/upload-item-header.js +4 -4
  347. package/lib/collection/components/duet-upload/upload-validators.js +96 -96
  348. package/lib/collection/components/duet-upload/upload-validators.spec.js +35 -35
  349. package/lib/collection/components/duet-upload/upload.helpers.js +8 -8
  350. package/lib/collection/components/duet-upload/xhr.helpers.js +26 -26
  351. package/lib/collection/components/duet-upload-aria-status/duet-upload-aria-status.js +194 -194
  352. package/lib/collection/components/duet-upload-item/duet-upload-item.js +306 -306
  353. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.a11y.e2e.js +5 -5
  354. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.e2e.js +6 -6
  355. package/lib/collection/components/duet-visually-hidden/duet-visually-hidden.js +20 -20
  356. package/lib/collection/global/duet-global.js +1 -27
  357. package/lib/collection/global/log-wrapper.js +29 -29
  358. package/lib/collection/utils/axe-core-utils.js +24 -24
  359. package/lib/collection/utils/create-id.js +2 -2
  360. package/lib/collection/utils/create-id.spec.js +6 -6
  361. package/lib/collection/utils/fixture-utils.js +25 -25
  362. package/lib/collection/utils/focus-utils.js +7 -7
  363. package/lib/collection/utils/group-by.js +9 -9
  364. package/lib/collection/utils/input-utils.js +25 -25
  365. package/lib/collection/utils/is-internet-explorer.js +2 -2
  366. package/lib/collection/utils/js-utils.js +38 -38
  367. package/lib/collection/utils/js-utils.spec.js +14 -14
  368. package/lib/collection/utils/keyboard-utils.js +43 -12
  369. package/lib/collection/utils/language-utils.js +73 -73
  370. package/lib/collection/utils/language-utils.spec.js +151 -151
  371. package/lib/collection/utils/math.utils.js +59 -59
  372. package/lib/collection/utils/math.utils.spec.js +130 -130
  373. package/lib/collection/utils/picture-utils.js +2 -2
  374. package/lib/collection/utils/string-utils.js +31 -31
  375. package/lib/collection/utils/string-utils.spec.js +32 -32
  376. package/lib/collection/utils/teleport.js +77 -77
  377. package/lib/collection/utils/template-utils.js +18 -18
  378. package/lib/collection/utils/template-utils.spec.js +33 -33
  379. package/lib/collection/utils/test-utils.js +31 -31
  380. package/lib/collection/utils/token-utils.js +96 -96
  381. package/lib/collection/utils/token-utils.spec.js +170 -170
  382. package/lib/collection/utils/watch-options.js +44 -44
  383. package/lib/dist-custom-elements/duet-action-button.d.ts +2 -2
  384. package/lib/dist-custom-elements/duet-action-button.js +1 -1
  385. package/lib/dist-custom-elements/duet-alert.d.ts +2 -2
  386. package/lib/dist-custom-elements/duet-alert.js +1 -1
  387. package/lib/dist-custom-elements/duet-badge.d.ts +2 -2
  388. package/lib/dist-custom-elements/duet-badge.js +1 -1
  389. package/lib/dist-custom-elements/duet-banner.d.ts +2 -2
  390. package/lib/dist-custom-elements/duet-banner.js +96 -96
  391. package/lib/dist-custom-elements/duet-breadcrumb.d.ts +2 -2
  392. package/lib/dist-custom-elements/duet-breadcrumb.js +82 -66
  393. package/lib/dist-custom-elements/duet-breadcrumbs.d.ts +2 -2
  394. package/lib/dist-custom-elements/duet-breadcrumbs.js +68 -68
  395. package/lib/dist-custom-elements/duet-button.d.ts +2 -2
  396. package/lib/dist-custom-elements/duet-button.js +1 -1
  397. package/lib/dist-custom-elements/duet-callout.d.ts +2 -2
  398. package/lib/dist-custom-elements/duet-callout.js +57 -57
  399. package/lib/dist-custom-elements/duet-caption.d.ts +2 -2
  400. package/lib/dist-custom-elements/duet-caption.js +1 -1
  401. package/lib/dist-custom-elements/duet-card.d.ts +2 -2
  402. package/lib/dist-custom-elements/duet-card.js +144 -138
  403. package/lib/dist-custom-elements/duet-checkbox.d.ts +2 -2
  404. package/lib/dist-custom-elements/duet-checkbox.js +1 -1
  405. package/lib/dist-custom-elements/duet-checkmark.d.ts +2 -2
  406. package/lib/dist-custom-elements/duet-checkmark.js +1 -1
  407. package/lib/dist-custom-elements/duet-chip.d.ts +2 -2
  408. package/lib/dist-custom-elements/duet-chip.js +226 -219
  409. package/lib/dist-custom-elements/duet-choice-group.d.ts +2 -2
  410. package/lib/dist-custom-elements/duet-choice-group.js +189 -189
  411. package/lib/dist-custom-elements/duet-choice.d.ts +2 -2
  412. package/lib/dist-custom-elements/duet-choice.js +360 -358
  413. package/lib/dist-custom-elements/duet-collapsible.d.ts +2 -2
  414. package/lib/dist-custom-elements/duet-collapsible.js +137 -131
  415. package/lib/dist-custom-elements/duet-combobox.d.ts +2 -2
  416. package/lib/dist-custom-elements/duet-combobox.js +406 -406
  417. package/lib/dist-custom-elements/duet-contact-card.d.ts +2 -2
  418. package/lib/dist-custom-elements/duet-contact-card.js +116 -116
  419. package/lib/dist-custom-elements/duet-cookie-consent.d.ts +2 -2
  420. package/lib/dist-custom-elements/duet-cookie-consent.js +89 -82
  421. package/lib/dist-custom-elements/duet-date-picker.d.ts +2 -2
  422. package/lib/dist-custom-elements/duet-date-picker.js +728 -728
  423. package/lib/dist-custom-elements/duet-divider.d.ts +2 -2
  424. package/lib/dist-custom-elements/duet-divider.js +1 -1
  425. package/lib/dist-custom-elements/duet-editable-table.d.ts +2 -2
  426. package/lib/dist-custom-elements/duet-editable-table.js +231 -231
  427. package/lib/dist-custom-elements/duet-empty-state.d.ts +2 -2
  428. package/lib/dist-custom-elements/duet-empty-state.js +1 -1
  429. package/lib/dist-custom-elements/duet-fieldset.d.ts +2 -2
  430. package/lib/dist-custom-elements/duet-fieldset.js +1 -1
  431. package/lib/dist-custom-elements/duet-file-chooser.d.ts +2 -2
  432. package/lib/dist-custom-elements/duet-file-chooser.js +70 -70
  433. package/lib/dist-custom-elements/duet-footer.d.ts +2 -2
  434. package/lib/dist-custom-elements/duet-footer.js +170 -167
  435. package/lib/dist-custom-elements/duet-grid-item.d.ts +2 -2
  436. package/lib/dist-custom-elements/duet-grid-item.js +1 -1
  437. package/lib/dist-custom-elements/duet-grid.d.ts +2 -2
  438. package/lib/dist-custom-elements/duet-grid.js +1 -1
  439. package/lib/dist-custom-elements/duet-header.d.ts +2 -2
  440. package/lib/dist-custom-elements/duet-header.js +640 -638
  441. package/lib/dist-custom-elements/duet-heading.d.ts +2 -2
  442. package/lib/dist-custom-elements/duet-heading.js +1 -1
  443. package/lib/dist-custom-elements/duet-hero.d.ts +2 -2
  444. package/lib/dist-custom-elements/duet-hero.js +270 -270
  445. package/lib/dist-custom-elements/duet-icon.d.ts +2 -2
  446. package/lib/dist-custom-elements/duet-icon.js +1 -1
  447. package/lib/dist-custom-elements/duet-input.d.ts +2 -2
  448. package/lib/dist-custom-elements/duet-input.js +1 -1
  449. package/lib/dist-custom-elements/duet-label.d.ts +2 -2
  450. package/lib/dist-custom-elements/duet-label.js +1 -1
  451. package/lib/dist-custom-elements/duet-layout.d.ts +2 -2
  452. package/lib/dist-custom-elements/duet-layout.js +73 -73
  453. package/lib/dist-custom-elements/duet-link.d.ts +2 -2
  454. package/lib/dist-custom-elements/duet-link.js +1 -1
  455. package/lib/dist-custom-elements/duet-list-item.d.ts +2 -2
  456. package/lib/dist-custom-elements/duet-list-item.js +1 -1
  457. package/lib/dist-custom-elements/duet-list.d.ts +2 -2
  458. package/lib/dist-custom-elements/duet-list.js +1 -1
  459. package/lib/dist-custom-elements/duet-logo.d.ts +2 -2
  460. package/lib/dist-custom-elements/duet-logo.js +1 -1
  461. package/lib/dist-custom-elements/duet-menu-bar-button.d.ts +2 -2
  462. package/lib/dist-custom-elements/duet-menu-bar-button.js +106 -106
  463. package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.d.ts +2 -2
  464. package/lib/dist-custom-elements/duet-menu-bar-dropdown-link.js +70 -70
  465. package/lib/dist-custom-elements/duet-menu-bar-dropdown.d.ts +2 -2
  466. package/lib/dist-custom-elements/duet-menu-bar-dropdown.js +121 -121
  467. package/lib/dist-custom-elements/duet-menu-bar-link.d.ts +2 -2
  468. package/lib/dist-custom-elements/duet-menu-bar-link.js +85 -85
  469. package/lib/dist-custom-elements/duet-menu-bar.d.ts +2 -2
  470. package/lib/dist-custom-elements/duet-menu-bar.js +145 -145
  471. package/lib/dist-custom-elements/duet-modal.d.ts +2 -2
  472. package/lib/dist-custom-elements/duet-modal.js +263 -263
  473. package/lib/dist-custom-elements/duet-multiselect.d.ts +2 -2
  474. package/lib/dist-custom-elements/duet-multiselect.js +300 -300
  475. package/lib/dist-custom-elements/duet-nav.d.ts +2 -2
  476. package/lib/dist-custom-elements/duet-nav.js +36 -36
  477. package/lib/dist-custom-elements/duet-notification-drawer.d.ts +2 -2
  478. package/lib/dist-custom-elements/duet-notification-drawer.js +145 -142
  479. package/lib/dist-custom-elements/duet-notification.d.ts +2 -2
  480. package/lib/dist-custom-elements/duet-notification.js +79 -76
  481. package/lib/dist-custom-elements/duet-number-input.d.ts +2 -2
  482. package/lib/dist-custom-elements/duet-number-input.js +451 -449
  483. package/lib/dist-custom-elements/duet-page-heading.d.ts +2 -2
  484. package/lib/dist-custom-elements/duet-page-heading.js +50 -50
  485. package/lib/dist-custom-elements/duet-pagination.d.ts +2 -2
  486. package/lib/dist-custom-elements/duet-pagination.js +450 -450
  487. package/lib/dist-custom-elements/duet-paragraph.d.ts +2 -2
  488. package/lib/dist-custom-elements/duet-paragraph.js +1 -1
  489. package/lib/dist-custom-elements/duet-popup-menu-item.d.ts +2 -2
  490. package/lib/dist-custom-elements/duet-popup-menu-item.js +95 -95
  491. package/lib/dist-custom-elements/duet-popup-menu.d.ts +2 -2
  492. package/lib/dist-custom-elements/duet-popup-menu.js +177 -177
  493. package/lib/dist-custom-elements/duet-progress.d.ts +2 -2
  494. package/lib/dist-custom-elements/duet-progress.js +1 -1
  495. package/lib/dist-custom-elements/duet-promo-card.d.ts +2 -2
  496. package/lib/dist-custom-elements/duet-promo-card.js +74 -74
  497. package/lib/dist-custom-elements/duet-radio-group.d.ts +2 -2
  498. package/lib/dist-custom-elements/duet-radio-group.js +183 -183
  499. package/lib/dist-custom-elements/duet-radio.d.ts +2 -2
  500. package/lib/dist-custom-elements/duet-radio.js +130 -130
  501. package/lib/dist-custom-elements/duet-range-slider.d.ts +2 -2
  502. package/lib/dist-custom-elements/duet-range-slider.js +153 -146
  503. package/lib/dist-custom-elements/duet-range-stepper.d.ts +2 -2
  504. package/lib/dist-custom-elements/duet-range-stepper.js +207 -207
  505. package/lib/dist-custom-elements/duet-scrollable.d.ts +2 -2
  506. package/lib/dist-custom-elements/duet-scrollable.js +1 -1
  507. package/lib/dist-custom-elements/duet-section-layout.d.ts +2 -2
  508. package/lib/dist-custom-elements/duet-section-layout.js +38 -38
  509. package/lib/dist-custom-elements/duet-select.d.ts +2 -2
  510. package/lib/dist-custom-elements/duet-select.js +1 -1
  511. package/lib/dist-custom-elements/duet-shaped-image.d.ts +2 -2
  512. package/lib/dist-custom-elements/duet-shaped-image.js +48 -48
  513. package/lib/dist-custom-elements/duet-show-more.d.ts +2 -2
  514. package/lib/dist-custom-elements/duet-show-more.js +152 -152
  515. package/lib/dist-custom-elements/duet-slideout-lang.d.ts +2 -2
  516. package/lib/dist-custom-elements/duet-slideout-lang.js +58 -58
  517. package/lib/dist-custom-elements/duet-slideout-link.d.ts +2 -2
  518. package/lib/dist-custom-elements/duet-slideout-link.js +63 -63
  519. package/lib/dist-custom-elements/duet-slideout-panel-dropdown.d.ts +2 -2
  520. package/lib/dist-custom-elements/duet-slideout-panel-dropdown.js +76 -76
  521. package/lib/dist-custom-elements/duet-slideout-panel.d.ts +2 -2
  522. package/lib/dist-custom-elements/duet-slideout-panel.js +149 -149
  523. package/lib/dist-custom-elements/duet-slideout.d.ts +2 -2
  524. package/lib/dist-custom-elements/duet-slideout.js +227 -227
  525. package/lib/dist-custom-elements/duet-spacer.d.ts +2 -2
  526. package/lib/dist-custom-elements/duet-spacer.js +1 -1
  527. package/lib/dist-custom-elements/duet-spinner.d.ts +2 -2
  528. package/lib/dist-custom-elements/duet-spinner.js +1 -1
  529. package/lib/dist-custom-elements/duet-step.d.ts +2 -2
  530. package/lib/dist-custom-elements/duet-step.js +123 -119
  531. package/lib/dist-custom-elements/duet-stepper.d.ts +2 -2
  532. package/lib/dist-custom-elements/duet-stepper.js +129 -129
  533. package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.d.ts +2 -2
  534. package/lib/dist-custom-elements/duet-submenu-bar-dropdown-link.js +64 -64
  535. package/lib/dist-custom-elements/duet-submenu-bar-dropdown.d.ts +2 -2
  536. package/lib/dist-custom-elements/duet-submenu-bar-dropdown.js +132 -132
  537. package/lib/dist-custom-elements/duet-submenu-bar-link.d.ts +2 -2
  538. package/lib/dist-custom-elements/duet-submenu-bar-link.js +86 -86
  539. package/lib/dist-custom-elements/duet-submenu-bar.d.ts +2 -2
  540. package/lib/dist-custom-elements/duet-submenu-bar.js +139 -139
  541. package/lib/dist-custom-elements/duet-tab-group.d.ts +2 -2
  542. package/lib/dist-custom-elements/duet-tab-group.js +312 -310
  543. package/lib/dist-custom-elements/duet-tab.d.ts +2 -2
  544. package/lib/dist-custom-elements/duet-tab.js +50 -52
  545. package/lib/dist-custom-elements/duet-table.d.ts +2 -2
  546. package/lib/dist-custom-elements/duet-table.js +1 -1
  547. package/lib/dist-custom-elements/duet-textarea.d.ts +2 -2
  548. package/lib/dist-custom-elements/duet-textarea.js +262 -262
  549. package/lib/dist-custom-elements/duet-toggle.d.ts +2 -2
  550. package/lib/dist-custom-elements/duet-toggle.js +120 -113
  551. package/lib/dist-custom-elements/duet-toolbar-dropdown-link.d.ts +2 -2
  552. package/lib/dist-custom-elements/duet-toolbar-dropdown-link.js +63 -63
  553. package/lib/dist-custom-elements/duet-toolbar-dropdown.d.ts +2 -2
  554. package/lib/dist-custom-elements/duet-toolbar-dropdown.js +88 -88
  555. package/lib/dist-custom-elements/duet-toolbar-link.d.ts +2 -2
  556. package/lib/dist-custom-elements/duet-toolbar-link.js +58 -58
  557. package/lib/dist-custom-elements/duet-toolbar.d.ts +2 -2
  558. package/lib/dist-custom-elements/duet-toolbar.js +52 -52
  559. package/lib/dist-custom-elements/duet-tooltip-button.d.ts +2 -2
  560. package/lib/dist-custom-elements/duet-tooltip-button.js +1 -1
  561. package/lib/dist-custom-elements/duet-tooltip-popup.d.ts +2 -2
  562. package/lib/dist-custom-elements/duet-tooltip-popup.js +1 -1
  563. package/lib/dist-custom-elements/duet-tooltip.d.ts +2 -2
  564. package/lib/dist-custom-elements/duet-tooltip.js +1 -1
  565. package/lib/dist-custom-elements/duet-tray.d.ts +2 -2
  566. package/lib/dist-custom-elements/duet-tray.js +122 -119
  567. package/lib/dist-custom-elements/duet-upload-aria-status.d.ts +2 -2
  568. package/lib/dist-custom-elements/duet-upload-aria-status.js +1 -1
  569. package/lib/dist-custom-elements/duet-upload-item.d.ts +2 -2
  570. package/lib/dist-custom-elements/duet-upload-item.js +1 -1
  571. package/lib/dist-custom-elements/duet-upload.d.ts +2 -2
  572. package/lib/dist-custom-elements/duet-upload.js +1163 -1163
  573. package/lib/dist-custom-elements/duet-visually-hidden.d.ts +2 -2
  574. package/lib/dist-custom-elements/duet-visually-hidden.js +1 -1
  575. package/lib/dist-custom-elements/index.js +15 -41
  576. package/lib/dist-custom-elements/{p-7247d0b2.js → p-04a295c6.js} +65 -43
  577. package/lib/dist-custom-elements/p-064f1578.js +273 -0
  578. package/lib/dist-custom-elements/{p-e4355989.js → p-0b123cad.js} +95 -88
  579. package/lib/dist-custom-elements/p-0e052642.js +55 -0
  580. package/lib/dist-custom-elements/p-0f8e290f.js +226 -0
  581. package/lib/dist-custom-elements/{p-d0987122.js → p-10a15ea1.js} +48 -48
  582. package/lib/{esm/slot-query-7877f18f.js → dist-custom-elements/p-11230037.js} +1 -1
  583. package/lib/dist-custom-elements/{p-2b1a35cd.js → p-1224c98d.js} +278 -278
  584. package/lib/dist-custom-elements/p-1b2fea2b.js +59 -0
  585. package/lib/dist-custom-elements/p-1e4ca38f.js +126 -0
  586. package/lib/dist-custom-elements/{p-bcfb9e03.js → p-24ae0332.js} +50 -50
  587. package/lib/dist-custom-elements/p-2613ae6a.js +265 -0
  588. package/lib/dist-custom-elements/{p-4883df66.js → p-2e36d5bf.js} +74 -74
  589. package/lib/dist-custom-elements/p-435c14fe.js +60 -0
  590. package/lib/dist-custom-elements/p-4391eb0d.js +110 -0
  591. package/lib/dist-custom-elements/p-43b89e38.js +9 -0
  592. package/lib/dist-custom-elements/p-47247d7e.js +465 -0
  593. package/lib/dist-custom-elements/{p-ba870310.js → p-490933fd.js} +47 -47
  594. package/lib/dist-custom-elements/{p-274d11e3.js → p-4ab776f4.js} +6 -6
  595. package/lib/dist-custom-elements/p-5788a98f.js +123 -0
  596. package/lib/dist-custom-elements/p-57a1cba9.js +117 -0
  597. package/lib/dist-custom-elements/p-5e1cd480.js +79 -0
  598. package/lib/dist-custom-elements/p-5e59e970.js +11 -0
  599. package/lib/dist-custom-elements/{p-9dd26401.js → p-618174a5.js} +128 -128
  600. package/lib/dist-custom-elements/{p-6c2e13f0.js → p-6222a43f.js} +56 -56
  601. package/lib/dist-custom-elements/{p-52014bb2.js → p-63ec7678.js} +37 -37
  602. package/lib/dist-custom-elements/{p-180c0d2d.js → p-65d472d7.js} +174 -174
  603. package/lib/dist-custom-elements/p-68bd36c7.js +38 -0
  604. package/lib/dist-custom-elements/p-76e8ab22.js +98 -0
  605. package/lib/dist-custom-elements/p-7d8a2628.js +57 -0
  606. package/lib/dist-custom-elements/p-8b89622f.js +177 -0
  607. package/lib/dist-custom-elements/p-8e357cfb.js +137 -0
  608. package/lib/dist-custom-elements/p-8f253845.js +51 -0
  609. package/lib/dist-custom-elements/{p-d49389d2.js → p-916e66c9.js} +171 -171
  610. package/lib/dist-custom-elements/p-994556c0.js +151 -0
  611. package/lib/dist-custom-elements/{p-3d8d557b.js → p-9e371678.js} +27 -27
  612. package/lib/dist-custom-elements/p-a58bd561.js +13 -0
  613. package/lib/dist-custom-elements/{p-c0af301d.js → p-adef0aaa.js} +64 -64
  614. package/lib/dist-custom-elements/p-b2e550a3.js +97 -0
  615. package/lib/dist-custom-elements/p-ba28f5ce.js +205 -0
  616. package/lib/dist-custom-elements/{p-21b815ae.js → p-beb5db77.js} +42 -42
  617. package/lib/dist-custom-elements/p-d0e52a83.js +76 -0
  618. package/lib/dist-custom-elements/p-df7874f9.js +53 -0
  619. package/lib/dist-custom-elements/{p-3ccd454b.js → p-e034dfea.js} +43 -43
  620. package/lib/dist-custom-elements/p-e929268c.js +62 -0
  621. package/lib/dist-custom-elements/p-eef66341.js +18 -0
  622. package/lib/dist-custom-elements/p-fc1fa737.js +206 -0
  623. package/lib/dist-custom-elements/p-ff591309.js +93 -0
  624. package/lib/duet/duet.esm.js +1 -1
  625. package/lib/duet/duet.js +15 -15
  626. package/lib/duet/{p-bfeeee67.system.entry.js → p-00da8ac7.system.entry.js} +2 -2
  627. package/lib/duet/{p-0c702d36.entry.js → p-023ee57b.entry.js} +1 -1
  628. package/lib/duet/{p-39078c27.system.entry.js → p-02f49953.system.entry.js} +2 -2
  629. package/lib/duet/{p-0558a17e.system.entry.js → p-060a790b.system.entry.js} +1 -1
  630. package/lib/duet/{p-80013513.system.entry.js → p-07ce89ff.system.entry.js} +1 -1
  631. package/lib/duet/{p-301ddafe.entry.js → p-07f5193f.entry.js} +1 -1
  632. package/lib/duet/{p-c801ebee.entry.js → p-094eedb8.entry.js} +1 -1
  633. package/lib/duet/{p-ac367891.entry.js → p-0981fdb2.entry.js} +1 -1
  634. package/lib/duet/{p-051488a0.system.entry.js → p-0a5966c8.system.entry.js} +1 -1
  635. package/lib/duet/p-0b16d4ca.system.entry.js +4 -0
  636. package/lib/duet/{p-445523a8.entry.js → p-0f162710.entry.js} +1 -1
  637. package/lib/duet/{p-6da4db52.system.entry.js → p-0f3f2906.system.entry.js} +1 -1
  638. package/lib/duet/{p-c4e79927.entry.js → p-11653c1e.entry.js} +1 -1
  639. package/lib/duet/p-1276c914.js +5 -0
  640. package/lib/duet/{p-59b9c68b.entry.js → p-16203527.entry.js} +1 -1
  641. package/lib/duet/{p-57afa4b8.system.entry.js → p-1753cb05.system.entry.js} +2 -2
  642. package/lib/duet/{p-032a613f.system.entry.js → p-176fa0e5.system.entry.js} +1 -1
  643. package/lib/duet/{p-e4aa049f.system.entry.js → p-1a44a9e5.system.entry.js} +1 -1
  644. package/lib/duet/p-1bd21f27.entry.js +4 -0
  645. package/lib/duet/{p-e90b5865.system.entry.js → p-1d772039.system.entry.js} +1 -1
  646. package/lib/duet/{p-0606cea3.entry.js → p-218eba4d.entry.js} +1 -1
  647. package/lib/duet/{p-8972381a.system.js → p-224f6c46.system.js} +1 -1
  648. package/lib/duet/{p-8eff5e91.system.entry.js → p-23eaa3b4.system.entry.js} +2 -2
  649. package/lib/duet/{p-a91c8a42.system.entry.js → p-24423276.system.entry.js} +1 -1
  650. package/lib/duet/{p-0d0101d9.system.entry.js → p-245dedef.system.entry.js} +1 -1
  651. package/lib/duet/{p-58a08a7b.system.entry.js → p-24f96782.system.entry.js} +1 -1
  652. package/lib/duet/p-259a297a.system.js +4 -0
  653. package/lib/duet/{p-1dadf501.entry.js → p-25c78304.entry.js} +1 -1
  654. package/lib/duet/p-26332d59.system.entry.js +4 -0
  655. package/lib/duet/{p-3639371a.system.entry.js → p-26de4395.system.entry.js} +1 -1
  656. package/lib/duet/{p-cef36d14.system.entry.js → p-27560f1b.system.entry.js} +1 -1
  657. package/lib/duet/{p-716329a7.system.entry.js → p-27c6aebd.system.entry.js} +1 -1
  658. package/lib/duet/{p-1a877bd1.system.entry.js → p-27d40494.system.entry.js} +1 -1
  659. package/lib/duet/p-2877f5d2.system.entry.js +4 -0
  660. package/lib/duet/p-2bb2b022.js +4 -0
  661. package/lib/duet/{p-95df823b.entry.js → p-2c67f7a8.entry.js} +1 -1
  662. package/lib/duet/p-2ddd31db.entry.js +4 -0
  663. package/lib/duet/{p-4883df66.js → p-2e36d5bf.js} +1 -1
  664. package/lib/duet/{p-ed961bc6.system.entry.js → p-2efce50b.system.entry.js} +1 -1
  665. package/lib/duet/{p-05e3a2cc.entry.js → p-3009021d.entry.js} +1 -1
  666. package/lib/duet/{p-4f770f51.system.entry.js → p-309546c3.system.entry.js} +1 -1
  667. package/lib/duet/p-3126ade6.entry.js +4 -0
  668. package/lib/duet/{p-089043d5.entry.js → p-31c8c180.entry.js} +1 -1
  669. package/lib/duet/{p-da9fe13c.system.entry.js → p-32aed830.system.entry.js} +1 -1
  670. package/lib/duet/{p-def3df7d.entry.js → p-3640cb93.entry.js} +1 -1
  671. package/lib/duet/{p-6f3f2e66.entry.js → p-3772cde9.entry.js} +1 -1
  672. package/lib/duet/p-37811477.system.entry.js +4 -0
  673. package/lib/duet/{p-e7a22d84.system.entry.js → p-37d0ea90.system.entry.js} +1 -1
  674. package/lib/duet/{p-50f4319b.system.entry.js → p-380ee907.system.entry.js} +1 -1
  675. package/lib/duet/{p-8aa7771f.entry.js → p-3aa3de10.entry.js} +1 -1
  676. package/lib/duet/{p-e6168195.entry.js → p-3efd29e1.entry.js} +1 -1
  677. package/lib/duet/{p-3fd4c411.entry.js → p-4196e4ba.entry.js} +1 -1
  678. package/lib/duet/p-43249fcf.system.entry.js +4 -0
  679. package/lib/duet/p-461d8a0b.entry.js +4 -0
  680. package/lib/duet/{p-b0ab2ead.system.entry.js → p-461fd4d8.system.entry.js} +1 -1
  681. package/lib/duet/{p-566668e1.entry.js → p-46cacf4b.entry.js} +1 -1
  682. package/lib/duet/p-470f5db7.entry.js +4 -0
  683. package/lib/duet/{p-f75a1805.system.entry.js → p-482cb8b5.system.entry.js} +1 -1
  684. package/lib/duet/{p-d4d7d607.system.entry.js → p-4d081cf5.system.entry.js} +1 -1
  685. package/lib/duet/{p-d02b92fa.entry.js → p-4da0332f.entry.js} +1 -1
  686. package/lib/duet/p-4dc4f2de.system.entry.js +4 -0
  687. package/lib/duet/{p-8bf363f4.system.entry.js → p-50108ac2.system.entry.js} +1 -1
  688. package/lib/duet/{p-9e2a2cf7.entry.js → p-507f463e.entry.js} +1 -1
  689. package/lib/duet/{p-79faf440.system.entry.js → p-52471579.system.entry.js} +1 -1
  690. package/lib/duet/p-530dd0b2.entry.js +4 -0
  691. package/lib/duet/p-538a7c32.system.entry.js +4 -0
  692. package/lib/duet/{p-3b0969dc.entry.js → p-548b740e.entry.js} +1 -1
  693. package/lib/duet/{p-a8878fd3.entry.js → p-55fbe6bc.entry.js} +1 -1
  694. package/lib/duet/p-5795b0d9.system.js +4 -0
  695. package/lib/duet/p-57f6f292.system.entry.js +4 -0
  696. package/lib/duet/p-582f1599.system.entry.js +4 -0
  697. package/lib/duet/{p-07401f31.entry.js → p-5aaf2889.entry.js} +1 -1
  698. package/lib/duet/{p-80d1a5d3.entry.js → p-5bab6421.entry.js} +1 -1
  699. package/lib/duet/{p-56bdad28.system.entry.js → p-5bb41296.system.entry.js} +1 -1
  700. package/lib/duet/{p-afd00506.entry.js → p-5be3bb6e.entry.js} +1 -1
  701. package/lib/duet/{p-d5a9cfac.entry.js → p-5e777157.entry.js} +1 -1
  702. package/lib/duet/p-5ef65fd9.entry.js +4 -0
  703. package/lib/duet/p-609aaedd.entry.js +4 -0
  704. package/lib/duet/{p-faa6ea94.system.entry.js → p-6399c03a.system.entry.js} +1 -1
  705. package/lib/duet/{p-b8db6e02.system.entry.js → p-63bdc921.system.entry.js} +1 -1
  706. package/lib/duet/p-644b687c.system.entry.js +4 -0
  707. package/lib/duet/p-68625c53.system.entry.js +4 -0
  708. package/lib/duet/{p-5c0de81a.system.entry.js → p-693ebab3.system.entry.js} +1 -1
  709. package/lib/duet/p-6a4fa614.entry.js +4 -0
  710. package/lib/duet/{p-30bd8807.entry.js → p-6b4c9fe2.entry.js} +1 -1
  711. package/lib/duet/p-6d839458.js +4 -0
  712. package/lib/duet/{p-2b70d58a.system.entry.js → p-7206856c.system.entry.js} +1 -1
  713. package/lib/duet/p-737f4f78.entry.js +4 -0
  714. package/lib/duet/p-75655f00.entry.js +4 -0
  715. package/lib/duet/{p-d02e3fe0.system.entry.js → p-77216458.system.entry.js} +1 -1
  716. package/lib/duet/{p-7a46b4ef.system.entry.js → p-773d5541.system.entry.js} +1 -1
  717. package/lib/duet/p-785b629e.entry.js +4 -0
  718. package/lib/duet/{p-98d01f1c.system.entry.js → p-78e18f90.system.entry.js} +1 -1
  719. package/lib/duet/{p-ff7a57a9.entry.js → p-7c3de686.entry.js} +1 -1
  720. package/lib/duet/{p-13915ce0.entry.js → p-7f2e3a82.entry.js} +1 -1
  721. package/lib/duet/{p-ed011021.system.entry.js → p-82b6d775.system.entry.js} +1 -1
  722. package/lib/duet/p-868deb49.entry.js +4 -0
  723. package/lib/duet/p-8693a1f3.entry.js +4 -0
  724. package/lib/duet/{p-c23bf76f.system.entry.js → p-87421fc1.system.entry.js} +1 -1
  725. package/lib/duet/p-89f7e363.system.entry.js +4 -0
  726. package/lib/duet/p-8bb9591d.system.js +4 -0
  727. package/lib/duet/{p-ded28a6e.system.entry.js → p-917d8b40.system.entry.js} +1 -1
  728. package/lib/duet/{p-ed8f7cac.entry.js → p-92d45100.entry.js} +1 -1
  729. package/lib/duet/p-93fd3aa5.system.entry.js +4 -0
  730. package/lib/duet/{p-6da7b933.entry.js → p-95f33440.entry.js} +1 -1
  731. package/lib/duet/{p-a0ecfa13.system.entry.js → p-9865ef30.system.entry.js} +1 -1
  732. package/lib/duet/p-9b877798.system.entry.js +4 -0
  733. package/lib/duet/{p-9cba7f04.system.entry.js → p-9ce2bf89.system.entry.js} +1 -1
  734. package/lib/duet/{p-fd1fb3f9.system.entry.js → p-9d6c89df.system.entry.js} +1 -1
  735. package/lib/duet/{p-77b43a95.entry.js → p-9f19cdc2.entry.js} +1 -1
  736. package/lib/duet/p-9fc19072.entry.js +4 -0
  737. package/lib/duet/{p-b46fa994.system.entry.js → p-a2a3b572.system.entry.js} +2 -2
  738. package/lib/duet/{p-ee796d5e.system.entry.js → p-a57b06db.system.entry.js} +1 -1
  739. package/lib/duet/p-a5f0d126.entry.js +4 -0
  740. package/lib/duet/{p-96f66e14.system.entry.js → p-a69a6b39.system.entry.js} +1 -1
  741. package/lib/duet/p-a931d71d.entry.js +4 -0
  742. package/lib/duet/{p-6205bcb4.entry.js → p-ab4e6587.entry.js} +1 -1
  743. package/lib/duet/{p-8ba72fa0.system.entry.js → p-abe0caff.system.entry.js} +1 -1
  744. package/lib/duet/{p-e3ffb537.system.entry.js → p-ac0a0c5f.system.entry.js} +1 -1
  745. package/lib/duet/{p-ccef6554.system.entry.js → p-b294d764.system.entry.js} +1 -1
  746. package/lib/duet/{p-c08928e1.system.entry.js → p-b32624a6.system.entry.js} +1 -1
  747. package/lib/duet/{p-e9be64de.system.entry.js → p-ba95cf16.system.entry.js} +1 -1
  748. package/lib/duet/{p-4630d3cb.entry.js → p-ba993fed.entry.js} +1 -1
  749. package/lib/duet/p-bb05780d.entry.js +4 -0
  750. package/lib/duet/{p-37af6296.system.entry.js → p-bca48b8e.system.entry.js} +1 -1
  751. package/lib/duet/p-bcee8104.entry.js +4 -0
  752. package/lib/duet/{p-c79a0641.entry.js → p-bd2b785a.entry.js} +1 -1
  753. package/lib/duet/p-bec206f3.entry.js +4 -0
  754. package/lib/duet/{p-501f62eb.system.entry.js → p-befd7146.system.entry.js} +1 -1
  755. package/lib/duet/{p-4aa91f55.entry.js → p-c13fcc8d.entry.js} +1 -1
  756. package/lib/duet/{p-0f1ec9c0.entry.js → p-c172f523.entry.js} +1 -1
  757. package/lib/duet/{p-e1d3c21e.entry.js → p-c17932bc.entry.js} +1 -1
  758. package/lib/duet/p-c23ab199.entry.js +4 -0
  759. package/lib/duet/{p-c5725fee.system.entry.js → p-c6296393.system.entry.js} +1 -1
  760. package/lib/duet/{p-35990684.entry.js → p-c71634ee.entry.js} +1 -1
  761. package/lib/duet/{p-33765ffd.entry.js → p-ca5dfafc.entry.js} +1 -1
  762. package/lib/duet/{p-68f3526e.entry.js → p-cab7ff29.entry.js} +1 -1
  763. package/lib/duet/{p-efdbddb5.system.js → p-cbfdaac4.system.js} +1 -1
  764. package/lib/duet/{p-113d90cb.system.entry.js → p-d0270ec7.system.entry.js} +1 -1
  765. package/lib/duet/p-d1ef0249.system.entry.js +4 -0
  766. package/lib/duet/{p-bdc59646.entry.js → p-d23f7bd1.entry.js} +1 -1
  767. package/lib/duet/p-d328922e.entry.js +4 -0
  768. package/lib/duet/p-d5271b57.entry.js +4 -0
  769. package/lib/duet/{p-1b3fde48.entry.js → p-d5c70827.entry.js} +1 -1
  770. package/lib/duet/{p-89b82e5a.entry.js → p-d832be12.entry.js} +1 -1
  771. package/lib/duet/{p-7671b7b7.system.js → p-da20db91.system.js} +1 -1
  772. package/lib/duet/p-db4ca364.js +4 -0
  773. package/lib/duet/p-db7ec3f2.system.entry.js +4 -0
  774. package/lib/duet/{p-604175d2.entry.js → p-dba55421.entry.js} +1 -1
  775. package/lib/duet/{p-a7e7c277.system.entry.js → p-de9c3476.system.entry.js} +1 -1
  776. package/lib/duet/p-df073faa.entry.js +4 -0
  777. package/lib/duet/p-df5f7376.entry.js +4 -0
  778. package/lib/duet/{p-dc63462c.entry.js → p-e3ba4d89.entry.js} +1 -1
  779. package/lib/duet/{p-64b323bf.entry.js → p-ef4a09e9.entry.js} +1 -1
  780. package/lib/duet/p-ef66a3c3.system.entry.js +4 -0
  781. package/lib/duet/p-f18c2892.system.js +5 -0
  782. package/lib/duet/{p-8855bd51.entry.js → p-f19b59f8.entry.js} +1 -1
  783. package/lib/duet/p-f1f5dfa4.system.entry.js +4 -0
  784. package/lib/duet/{p-fab7c1ed.entry.js → p-f20d29b8.entry.js} +1 -1
  785. package/lib/duet/{p-c3289020.system.entry.js → p-f2b556d7.system.entry.js} +1 -1
  786. package/lib/duet/p-f3efe8c2.system.entry.js +4 -0
  787. package/lib/duet/p-fabb616b.js +4 -0
  788. package/lib/duet/{p-1e9f1c45.entry.js → p-fb5877c4.entry.js} +1 -1
  789. package/lib/duet/p-fc366b12.system.entry.js +4 -0
  790. package/lib/duet/{p-54fbdedf.entry.js → p-fc788a9a.entry.js} +1 -1
  791. package/lib/duet/{p-bf3331ed.entry.js → p-fcfe83b1.entry.js} +1 -1
  792. package/lib/duet/{p-6ae7579a.system.entry.js → p-ffc50558.system.entry.js} +1 -1
  793. package/lib/esm/app-globals-45aa6d20.js +26 -0
  794. package/lib/esm/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +6 -6
  795. package/lib/esm/create-id-149a1b6d.js +11 -0
  796. package/lib/esm/duet-action-button.entry.js +134 -134
  797. package/lib/esm/duet-alert.entry.js +109 -106
  798. package/lib/esm/duet-badge.entry.js +29 -29
  799. package/lib/esm/duet-banner.entry.js +52 -52
  800. package/lib/esm/duet-breadcrumb.entry.js +50 -41
  801. package/lib/esm/duet-breadcrumbs.entry.js +51 -51
  802. package/lib/esm/duet-button_2.entry.js +229 -229
  803. package/lib/esm/duet-callout.entry.js +28 -28
  804. package/lib/esm/duet-caption_4.entry.js +197 -187
  805. package/lib/esm/duet-card.entry.js +100 -94
  806. package/lib/esm/duet-checkbox.entry.js +85 -85
  807. package/lib/esm/duet-checkmark.entry.js +23 -23
  808. package/lib/esm/duet-chip.entry.js +189 -182
  809. package/lib/esm/duet-choice_2.entry.js +395 -393
  810. package/lib/esm/duet-collapsible.entry.js +105 -99
  811. package/lib/esm/duet-combobox.entry.js +363 -363
  812. package/lib/esm/duet-contact-card.entry.js +49 -49
  813. package/lib/esm/duet-cookie-consent.entry.js +42 -35
  814. package/lib/esm/duet-date-picker.entry.js +610 -610
  815. package/lib/esm/duet-divider_2.entry.js +53 -53
  816. package/lib/esm/duet-editable-table_3.entry.js +1248 -1248
  817. package/lib/esm/duet-empty-state.entry.js +26 -26
  818. package/lib/esm/duet-fieldset.entry.js +50 -50
  819. package/lib/esm/duet-file-chooser.entry.js +44 -44
  820. package/lib/esm/duet-footer.entry.js +121 -118
  821. package/lib/esm/duet-grid_2.entry.js +185 -185
  822. package/lib/esm/duet-header_2.entry.js +613 -611
  823. package/lib/esm/duet-hero.entry.js +172 -172
  824. package/lib/esm/duet-icon.entry.js +141 -141
  825. package/lib/esm/duet-input_2.entry.js +347 -347
  826. package/lib/esm/duet-layout.entry.js +51 -51
  827. package/lib/esm/duet-list_2.entry.js +99 -99
  828. package/lib/esm/duet-menu-bar-button.entry.js +70 -70
  829. package/lib/esm/duet-menu-bar-dropdown-link.entry.js +45 -45
  830. package/lib/esm/duet-menu-bar-dropdown.entry.js +94 -94
  831. package/lib/esm/duet-menu-bar-link.entry.js +58 -58
  832. package/lib/esm/duet-menu-bar.entry.js +116 -116
  833. package/lib/esm/duet-modal.entry.js +189 -189
  834. package/lib/esm/duet-multiselect.entry.js +207 -207
  835. package/lib/esm/duet-nav.entry.js +20 -20
  836. package/lib/esm/duet-notification_2.entry.js +145 -140
  837. package/lib/esm/duet-number-input.entry.js +340 -338
  838. package/lib/esm/duet-page-heading.entry.js +26 -26
  839. package/lib/esm/duet-pagination_2.entry.js +512 -512
  840. package/lib/esm/duet-popup-menu-item.entry.js +62 -62
  841. package/lib/esm/duet-popup-menu.entry.js +148 -148
  842. package/lib/esm/duet-progress.entry.js +54 -54
  843. package/lib/esm/duet-promo-card.entry.js +40 -40
  844. package/lib/esm/duet-radio_2.entry.js +197 -197
  845. package/lib/esm/duet-range-slider.entry.js +112 -105
  846. package/lib/esm/duet-scrollable_3.entry.js +387 -387
  847. package/lib/esm/duet-section-layout.entry.js +21 -21
  848. package/lib/esm/duet-select.entry.js +156 -156
  849. package/lib/esm/duet-shaped-image.entry.js +28 -28
  850. package/lib/esm/duet-show-more.entry.js +99 -99
  851. package/lib/esm/duet-slideout-lang.entry.js +36 -36
  852. package/lib/esm/duet-slideout-link.entry.js +33 -33
  853. package/lib/esm/duet-slideout-panel-dropdown.entry.js +50 -50
  854. package/lib/esm/duet-slideout-panel.entry.js +120 -120
  855. package/lib/esm/duet-slideout.entry.js +196 -196
  856. package/lib/esm/duet-step_2.entry.js +189 -185
  857. package/lib/esm/duet-submenu-bar-dropdown-link.entry.js +37 -37
  858. package/lib/esm/duet-submenu-bar-dropdown.entry.js +104 -104
  859. package/lib/esm/duet-submenu-bar-link.entry.js +60 -60
  860. package/lib/esm/duet-submenu-bar.entry.js +110 -110
  861. package/lib/esm/duet-textarea.entry.js +160 -160
  862. package/lib/esm/duet-toggle.entry.js +79 -72
  863. package/lib/esm/duet-toolbar-dropdown-link.entry.js +36 -36
  864. package/lib/esm/duet-toolbar-dropdown.entry.js +60 -60
  865. package/lib/esm/duet-toolbar-link.entry.js +31 -31
  866. package/lib/esm/duet-toolbar.entry.js +34 -34
  867. package/lib/esm/duet-tooltip-button_2.entry.js +93 -80
  868. package/lib/esm/duet-tooltip.entry.js +190 -188
  869. package/lib/esm/duet-tray.entry.js +85 -82
  870. package/lib/esm/duet-upload-aria-status.entry.js +65 -65
  871. package/lib/esm/duet-upload-item.entry.js +81 -81
  872. package/lib/esm/duet-visually-hidden.entry.js +12 -12
  873. package/lib/esm/duet.js +5 -5
  874. package/lib/esm/errorcodes.utils-e681347c.js +36 -0
  875. package/lib/esm/focus-utils-23aad0c9.js +18 -0
  876. package/lib/esm/{index-b3bf9761.js → index-02e78bbf.js} +106 -45
  877. package/lib/esm/input-utils-85681162.js +53 -0
  878. package/lib/esm/is-internet-explorer-2c48f686.js +9 -0
  879. package/lib/esm/{js-utils-a35dcc8c.js → js-utils-9b9e0039.js} +27 -27
  880. package/lib/esm/keyboard-utils-eba88365.js +51 -0
  881. package/lib/esm/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +74 -74
  882. package/lib/esm/loader.js +4 -4
  883. package/lib/{dist-custom-elements/p-f8c76b25.js → esm/slot-query-022710bb.js} +1 -1
  884. package/lib/esm/string-utils-ca039233.js +55 -0
  885. package/lib/esm/teleport-4462e8c1.js +97 -0
  886. package/lib/esm/themeable-component-724c0f7e.js +13 -0
  887. package/lib/esm/token-utils-b4bd3ec7.js +117 -0
  888. package/lib/esm/watch-options-e96ecd92.js +57 -0
  889. package/lib/esm-es5/app-globals-45aa6d20.js +4 -0
  890. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  891. package/lib/esm-es5/duet-alert.entry.js +2 -2
  892. package/lib/esm-es5/duet-badge.entry.js +1 -1
  893. package/lib/esm-es5/duet-banner.entry.js +1 -1
  894. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  895. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  896. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  897. package/lib/esm-es5/duet-callout.entry.js +1 -1
  898. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  899. package/lib/esm-es5/duet-card.entry.js +1 -1
  900. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  901. package/lib/esm-es5/duet-checkmark.entry.js +1 -1
  902. package/lib/esm-es5/duet-chip.entry.js +2 -2
  903. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  904. package/lib/esm-es5/duet-collapsible.entry.js +2 -2
  905. package/lib/esm-es5/duet-combobox.entry.js +1 -1
  906. package/lib/esm-es5/duet-contact-card.entry.js +1 -1
  907. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  908. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  909. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  910. package/lib/esm-es5/duet-editable-table_3.entry.js +1 -1
  911. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  912. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  913. package/lib/esm-es5/duet-file-chooser.entry.js +1 -1
  914. package/lib/esm-es5/duet-footer.entry.js +1 -1
  915. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  916. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  917. package/lib/esm-es5/duet-hero.entry.js +1 -1
  918. package/lib/esm-es5/duet-icon.entry.js +1 -1
  919. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  920. package/lib/esm-es5/duet-layout.entry.js +1 -1
  921. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  922. package/lib/esm-es5/duet-menu-bar-button.entry.js +1 -1
  923. package/lib/esm-es5/duet-menu-bar-dropdown-link.entry.js +1 -1
  924. package/lib/esm-es5/duet-menu-bar-dropdown.entry.js +1 -1
  925. package/lib/esm-es5/duet-menu-bar-link.entry.js +1 -1
  926. package/lib/esm-es5/duet-menu-bar.entry.js +1 -1
  927. package/lib/esm-es5/duet-modal.entry.js +1 -1
  928. package/lib/esm-es5/duet-multiselect.entry.js +1 -1
  929. package/lib/esm-es5/duet-nav.entry.js +1 -1
  930. package/lib/esm-es5/duet-notification_2.entry.js +2 -2
  931. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  932. package/lib/esm-es5/duet-page-heading.entry.js +1 -1
  933. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  934. package/lib/esm-es5/duet-popup-menu-item.entry.js +1 -1
  935. package/lib/esm-es5/duet-popup-menu.entry.js +1 -1
  936. package/lib/esm-es5/duet-progress.entry.js +1 -1
  937. package/lib/esm-es5/duet-promo-card.entry.js +1 -1
  938. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  939. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  940. package/lib/esm-es5/duet-scrollable_3.entry.js +2 -2
  941. package/lib/esm-es5/duet-section-layout.entry.js +1 -1
  942. package/lib/esm-es5/duet-select.entry.js +1 -1
  943. package/lib/esm-es5/duet-shaped-image.entry.js +1 -1
  944. package/lib/esm-es5/duet-show-more.entry.js +1 -1
  945. package/lib/esm-es5/duet-slideout-lang.entry.js +1 -1
  946. package/lib/esm-es5/duet-slideout-link.entry.js +1 -1
  947. package/lib/esm-es5/duet-slideout-panel-dropdown.entry.js +1 -1
  948. package/lib/esm-es5/duet-slideout-panel.entry.js +1 -1
  949. package/lib/esm-es5/duet-slideout.entry.js +2 -2
  950. package/lib/esm-es5/duet-step_2.entry.js +2 -2
  951. package/lib/esm-es5/duet-submenu-bar-dropdown-link.entry.js +1 -1
  952. package/lib/esm-es5/duet-submenu-bar-dropdown.entry.js +1 -1
  953. package/lib/esm-es5/duet-submenu-bar-link.entry.js +1 -1
  954. package/lib/esm-es5/duet-submenu-bar.entry.js +1 -1
  955. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  956. package/lib/esm-es5/duet-toggle.entry.js +2 -2
  957. package/lib/esm-es5/duet-toolbar-dropdown-link.entry.js +1 -1
  958. package/lib/esm-es5/duet-toolbar-dropdown.entry.js +1 -1
  959. package/lib/esm-es5/duet-toolbar-link.entry.js +1 -1
  960. package/lib/esm-es5/duet-toolbar.entry.js +1 -1
  961. package/lib/esm-es5/duet-tooltip-button_2.entry.js +1 -1
  962. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  963. package/lib/esm-es5/duet-tray.entry.js +1 -1
  964. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  965. package/lib/esm-es5/duet-upload-item.entry.js +1 -1
  966. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  967. package/lib/esm-es5/duet.js +1 -1
  968. package/lib/esm-es5/{errorcodes.utils-424b1197.js → errorcodes.utils-e681347c.js} +1 -1
  969. package/lib/esm-es5/focus-utils-23aad0c9.js +4 -0
  970. package/lib/esm-es5/index-02e78bbf.js +5 -0
  971. package/lib/esm-es5/keyboard-utils-eba88365.js +4 -0
  972. package/lib/esm-es5/{language-utils-9ff76444.js → language-utils-00ca4c55.js} +1 -1
  973. package/lib/esm-es5/loader.js +1 -1
  974. package/lib/types/common/a11y-component.d.ts +7 -7
  975. package/lib/types/common/form-components.d.ts +15 -15
  976. package/lib/types/common/themeable-component.d.ts +4 -4
  977. package/lib/types/common-types.d.ts +11 -0
  978. package/lib/types/components/duet-action-button/duet-action-button.d.ts +126 -126
  979. package/lib/types/components/duet-alert/duet-alert.d.ts +100 -100
  980. package/lib/types/components/duet-badge/duet-badge.d.ts +27 -27
  981. package/lib/types/components/duet-banner/duet-banner.d.ts +58 -58
  982. package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +38 -33
  983. package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -23
  984. package/lib/types/components/duet-button/duet-button.d.ts +219 -219
  985. package/lib/types/components/duet-callout/duet-callout.d.ts +19 -19
  986. package/lib/types/components/duet-caption/duet-caption.d.ts +26 -26
  987. package/lib/types/components/duet-card/duet-card.d.ts +121 -119
  988. package/lib/types/components/duet-checkbox/duet-checkbox.d.ts +132 -132
  989. package/lib/types/components/duet-chip/duet-chip.d.ts +111 -109
  990. package/lib/types/components/duet-choice/duet-checkmark.d.ts +27 -27
  991. package/lib/types/components/duet-choice/duet-choice.d.ts +259 -259
  992. package/lib/types/components/duet-choice-group/duet-choice-group.d.ts +103 -103
  993. package/lib/types/components/duet-collapsible/duet-collapsible.d.ts +90 -88
  994. package/lib/types/components/duet-combobox/duet-combobox-select-single.d.ts +3 -3
  995. package/lib/types/components/duet-combobox/duet-combobox-select.d.ts +8 -8
  996. package/lib/types/components/duet-combobox/duet-combobox.d.ts +135 -135
  997. package/lib/types/components/duet-contact-card/duet-contact-card.d.ts +60 -60
  998. package/lib/types/components/duet-cookie-consent/duet-cookie-consent.d.ts +31 -29
  999. package/lib/types/components/duet-date-picker/date-i18n.d.ts +13 -13
  1000. package/lib/types/components/duet-date-picker/date-picker-day.d.ts +9 -9
  1001. package/lib/types/components/duet-date-picker/date-picker-input.d.ts +28 -28
  1002. package/lib/types/components/duet-date-picker/date-picker-month.d.ts +12 -12
  1003. package/lib/types/components/duet-date-picker/duet-date-picker.d.ts +220 -220
  1004. package/lib/types/components/duet-divider/duet-divider.d.ts +26 -26
  1005. package/lib/types/components/duet-editable-table/duet-editable-table-tabledata.d.ts +3 -3
  1006. package/lib/types/components/duet-editable-table/duet-editable-table.d.ts +133 -133
  1007. package/lib/types/components/duet-empty-state/duet-empty-state.d.ts +22 -22
  1008. package/lib/types/components/duet-fieldset/duet-fieldset.d.ts +60 -60
  1009. package/lib/types/components/duet-file-chooser/duet-file-chooser.d.ts +35 -35
  1010. package/lib/types/components/duet-footer/duet-footer.d.ts +143 -143
  1011. package/lib/types/components/duet-grid/duet-grid.d.ts +73 -73
  1012. package/lib/types/components/duet-grid-item/duet-grid-item.d.ts +49 -49
  1013. package/lib/types/components/duet-header/duet-header-dropdown.d.ts +11 -11
  1014. package/lib/types/components/duet-header/duet-header-icon.d.ts +4 -4
  1015. package/lib/types/components/duet-header/duet-header.d.ts +347 -347
  1016. package/lib/types/components/duet-heading/duet-heading.d.ts +49 -49
  1017. package/lib/types/components/duet-hero/duet-hero.d.ts +198 -198
  1018. package/lib/types/components/duet-icon/duet-icon.d.ts +80 -81
  1019. package/lib/types/components/duet-input/duet-input.d.ts +279 -279
  1020. package/lib/types/components/duet-label/duet-label.d.ts +26 -26
  1021. package/lib/types/components/duet-layout/duet-layout.d.ts +48 -48
  1022. package/lib/types/components/duet-link/duet-link.d.ts +95 -94
  1023. package/lib/types/components/duet-list/duet-list.d.ts +60 -60
  1024. package/lib/types/components/duet-list-item/duet-list-item.d.ts +17 -17
  1025. package/lib/types/components/duet-logo/duet-logo.d.ts +59 -59
  1026. package/lib/types/components/duet-menu-bar/duet-menu-bar.d.ts +68 -68
  1027. package/lib/types/components/duet-menu-bar-button/duet-menu-bar-button.d.ts +85 -86
  1028. package/lib/types/components/duet-menu-bar-dropdown/duet-menu-bar-dropdown.d.ts +50 -51
  1029. package/lib/types/components/duet-menu-bar-dropdown-link/duet-menu-bar-dropdown-link.d.ts +36 -36
  1030. package/lib/types/components/duet-menu-bar-link/duet-menu-bar-link.d.ts +45 -46
  1031. package/lib/types/components/duet-modal/duet-modal.d.ts +155 -155
  1032. package/lib/types/components/duet-multiselect/duet-multiselect.d.ts +153 -153
  1033. package/lib/types/components/duet-nav/duet-nav.d.ts +20 -20
  1034. package/lib/types/components/duet-notification/duet-notification.d.ts +55 -55
  1035. package/lib/types/components/duet-notification-drawer/duet-notification-drawer.d.ts +83 -83
  1036. package/lib/types/components/duet-number-input/duet-number-input.d.ts +230 -230
  1037. package/lib/types/components/duet-page-heading/duet-page-heading.d.ts +25 -25
  1038. package/lib/types/components/duet-pagination/duet-pagination.d.ts +129 -129
  1039. package/lib/types/components/duet-paragraph/duet-paragraph.d.ts +38 -38
  1040. package/lib/types/components/duet-popup-menu/duet-popup-menu.d.ts +80 -80
  1041. package/lib/types/components/duet-popup-menu-item/duet-popup-menu-item.d.ts +73 -73
  1042. package/lib/types/components/duet-progress/duet-progress.d.ts +71 -71
  1043. package/lib/types/components/duet-promo-card/duet-promo-card.d.ts +42 -42
  1044. package/lib/types/components/duet-radio/duet-radio.d.ts +145 -145
  1045. package/lib/types/components/duet-radio-group/duet-radio-group.d.ts +93 -93
  1046. package/lib/types/components/duet-range-slider/duet-range-slider.d.ts +132 -130
  1047. package/lib/types/components/duet-range-stepper/duet-range-stepper.d.ts +68 -68
  1048. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +61 -61
  1049. package/lib/types/components/duet-section-layout/duet-section-layout.d.ts +17 -17
  1050. package/lib/types/components/duet-select/duet-select.d.ts +179 -179
  1051. package/lib/types/components/duet-shaped-image/duet-shaped-image.d.ts +30 -30
  1052. package/lib/types/components/duet-show-more/duet-show-more.d.ts +83 -83
  1053. package/lib/types/components/duet-slideout/duet-slideout.d.ts +86 -86
  1054. package/lib/types/components/duet-slideout-lang/duet-slideout-lang.d.ts +24 -24
  1055. package/lib/types/components/duet-slideout-link/duet-slideout-link.d.ts +55 -55
  1056. package/lib/types/components/duet-slideout-panel/duet-slideout-panel.d.ts +55 -55
  1057. package/lib/types/components/duet-slideout-panel-dropdown/duet-slideout-panel-dropdown.d.ts +39 -39
  1058. package/lib/types/components/duet-spacer/duet-spacer.d.ts +18 -18
  1059. package/lib/types/components/duet-spinner/duet-spinner.d.ts +30 -30
  1060. package/lib/types/components/duet-step/duet-step.d.ts +68 -66
  1061. package/lib/types/components/duet-stepper/duet-stepper.d.ts +47 -47
  1062. package/lib/types/components/duet-submenu-bar/duet-submenu-bar.d.ts +50 -50
  1063. package/lib/types/components/duet-submenu-bar-dropdown/duet-submenu-bar-dropdown.d.ts +48 -49
  1064. package/lib/types/components/duet-submenu-bar-dropdown-link/duet-submenu-bar-dropdown-link.d.ts +43 -43
  1065. package/lib/types/components/duet-submenu-bar-link/duet-submenu-bar-link.d.ts +40 -41
  1066. package/lib/types/components/duet-tab/duet-tab.d.ts +37 -37
  1067. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +132 -132
  1068. package/lib/types/components/duet-table/duet-table.d.ts +66 -66
  1069. package/lib/types/components/duet-textarea/duet-textarea.d.ts +200 -200
  1070. package/lib/types/components/duet-toggle/duet-toggle.d.ts +115 -113
  1071. package/lib/types/components/duet-toolbar/duet-toolbar.d.ts +30 -30
  1072. package/lib/types/components/duet-toolbar-dropdown/duet-toolbar-dropdown.d.ts +50 -50
  1073. package/lib/types/components/duet-toolbar-dropdown-link/duet-toolbar-dropdown-link.d.ts +43 -43
  1074. package/lib/types/components/duet-toolbar-link/duet-toolbar-link.d.ts +42 -42
  1075. package/lib/types/components/duet-tooltip/duet-tooltip-button.d.ts +21 -19
  1076. package/lib/types/components/duet-tooltip/duet-tooltip-popup.d.ts +33 -31
  1077. package/lib/types/components/duet-tooltip/duet-tooltip.d.ts +122 -122
  1078. package/lib/types/components/duet-tray/duet-tray.d.ts +84 -84
  1079. package/lib/types/components/duet-upload/duet-upload.d.ts +484 -484
  1080. package/lib/types/components/duet-upload/errorcodes.utils.d.ts +3 -3
  1081. package/lib/types/components/duet-upload/upload-editable-item-error.d.ts +2 -2
  1082. package/lib/types/components/duet-upload/upload-editable-item-inprogres.d.ts +2 -2
  1083. package/lib/types/components/duet-upload/upload-editable-item-pending.d.ts +1 -1
  1084. package/lib/types/components/duet-upload/upload-editable-item-success.d.ts +2 -2
  1085. package/lib/types/components/duet-upload/upload-item-header.d.ts +2 -2
  1086. package/lib/types/components/duet-upload/upload-validators.d.ts +4 -4
  1087. package/lib/types/components/duet-upload/xhr.helpers.d.ts +10 -10
  1088. package/lib/types/components/duet-upload-aria-status/duet-upload-aria-status.d.ts +40 -40
  1089. package/lib/types/components/duet-upload-item/duet-upload-item.d.ts +54 -54
  1090. package/lib/types/components/duet-visually-hidden/duet-visually-hidden.d.ts +6 -6
  1091. package/lib/types/components.d.ts +10 -4
  1092. package/lib/types/stencil-public-runtime.d.ts +8 -0
  1093. package/lib/types/utils/axe-core-utils.d.ts +3 -3
  1094. package/lib/types/utils/fixture-utils.d.ts +2 -2
  1095. package/lib/types/utils/focus-utils.d.ts +2 -2
  1096. package/lib/types/utils/keyboard-utils.d.ts +2 -0
  1097. package/lib/types/utils/language-utils.d.ts +10 -10
  1098. package/lib/types/utils/picture-utils.d.ts +10 -10
  1099. package/lib/types/utils/teleport.d.ts +20 -20
  1100. package/lib/types/utils/template-utils.d.ts +1 -1
  1101. package/lib/types/utils/test-utils.d.ts +2 -2
  1102. package/lib/types/utils/token-utils.d.ts +9 -9
  1103. package/package.json +6 -6
  1104. package/lib/cjs/app-globals-4ab83f59.js +0 -54
  1105. package/lib/cjs/create-id-167cd350.js +0 -13
  1106. package/lib/cjs/errorcodes.utils-8e928de5.js +0 -39
  1107. package/lib/cjs/focus-utils-aea9f4e1.js +0 -21
  1108. package/lib/cjs/input-utils-b4615782.js +0 -56
  1109. package/lib/cjs/keyboard-utils-02441bc5.js +0 -36
  1110. package/lib/cjs/string-utils-51a2f59f.js +0 -59
  1111. package/lib/cjs/teleport-af825e04.js +0 -99
  1112. package/lib/cjs/themeable-component-0be6d1f4.js +0 -15
  1113. package/lib/cjs/token-utils-dbfeff2e.js +0 -124
  1114. package/lib/cjs/watch-options-1773d69f.js +0 -61
  1115. package/lib/dist-custom-elements/p-03ac3eb3.js +0 -137
  1116. package/lib/dist-custom-elements/p-1a395a8d.js +0 -55
  1117. package/lib/dist-custom-elements/p-1ce55654.js +0 -265
  1118. package/lib/dist-custom-elements/p-1f56e02f.js +0 -174
  1119. package/lib/dist-custom-elements/p-24853ebf.js +0 -97
  1120. package/lib/dist-custom-elements/p-268171f7.js +0 -9
  1121. package/lib/dist-custom-elements/p-3049dfd5.js +0 -147
  1122. package/lib/dist-custom-elements/p-45f71a69.js +0 -11
  1123. package/lib/dist-custom-elements/p-4687ca41.js +0 -465
  1124. package/lib/dist-custom-elements/p-56ac3289.js +0 -20
  1125. package/lib/dist-custom-elements/p-5d8d9a52.js +0 -98
  1126. package/lib/dist-custom-elements/p-62e68de8.js +0 -38
  1127. package/lib/dist-custom-elements/p-64cd1abb.js +0 -93
  1128. package/lib/dist-custom-elements/p-665418f0.js +0 -205
  1129. package/lib/dist-custom-elements/p-759c725f.js +0 -226
  1130. package/lib/dist-custom-elements/p-77f2dbee.js +0 -53
  1131. package/lib/dist-custom-elements/p-80ec4336.js +0 -123
  1132. package/lib/dist-custom-elements/p-8be301dd.js +0 -62
  1133. package/lib/dist-custom-elements/p-9541f0b6.js +0 -59
  1134. package/lib/dist-custom-elements/p-a1371eee.js +0 -57
  1135. package/lib/dist-custom-elements/p-a3923b18.js +0 -126
  1136. package/lib/dist-custom-elements/p-c5032d3a.js +0 -18
  1137. package/lib/dist-custom-elements/p-d48735b6.js +0 -13
  1138. package/lib/dist-custom-elements/p-e19d1e27.js +0 -117
  1139. package/lib/dist-custom-elements/p-e6b07569.js +0 -271
  1140. package/lib/dist-custom-elements/p-e77f7fff.js +0 -60
  1141. package/lib/dist-custom-elements/p-f27e355b.js +0 -76
  1142. package/lib/dist-custom-elements/p-f46be918.js +0 -110
  1143. package/lib/dist-custom-elements/p-fd4877d1.js +0 -72
  1144. package/lib/dist-custom-elements/p-fe8a2205.js +0 -206
  1145. package/lib/duet/p-038ac494.system.entry.js +0 -4
  1146. package/lib/duet/p-08764d71.entry.js +0 -4
  1147. package/lib/duet/p-08f2114a.entry.js +0 -4
  1148. package/lib/duet/p-0a664ebb.entry.js +0 -4
  1149. package/lib/duet/p-0e89cbae.system.entry.js +0 -4
  1150. package/lib/duet/p-0fd024c9.system.js +0 -4
  1151. package/lib/duet/p-11571ab9.entry.js +0 -4
  1152. package/lib/duet/p-177c55aa.entry.js +0 -4
  1153. package/lib/duet/p-18e2e6c8.system.entry.js +0 -4
  1154. package/lib/duet/p-21f3a17a.system.js +0 -4
  1155. package/lib/duet/p-2c78c637.system.entry.js +0 -4
  1156. package/lib/duet/p-34b5285b.system.entry.js +0 -4
  1157. package/lib/duet/p-3b147393.entry.js +0 -4
  1158. package/lib/duet/p-463ddc2c.system.entry.js +0 -4
  1159. package/lib/duet/p-4669b0af.js +0 -4
  1160. package/lib/duet/p-486eec2d.entry.js +0 -4
  1161. package/lib/duet/p-4dc0fff9.entry.js +0 -4
  1162. package/lib/duet/p-50ec2074.entry.js +0 -4
  1163. package/lib/duet/p-52806dad.system.entry.js +0 -4
  1164. package/lib/duet/p-5311f96e.system.entry.js +0 -4
  1165. package/lib/duet/p-5ae9b74f.entry.js +0 -4
  1166. package/lib/duet/p-5c5012f6.system.entry.js +0 -4
  1167. package/lib/duet/p-5eb2a31f.system.entry.js +0 -4
  1168. package/lib/duet/p-61d39730.entry.js +0 -4
  1169. package/lib/duet/p-6c4c0279.js +0 -5
  1170. package/lib/duet/p-76b68b44.entry.js +0 -4
  1171. package/lib/duet/p-789365cb.system.entry.js +0 -4
  1172. package/lib/duet/p-7bca584a.entry.js +0 -4
  1173. package/lib/duet/p-7c36b779.entry.js +0 -4
  1174. package/lib/duet/p-7de467b8.entry.js +0 -4
  1175. package/lib/duet/p-7e1f37e2.entry.js +0 -4
  1176. package/lib/duet/p-821c350f.system.entry.js +0 -4
  1177. package/lib/duet/p-8d0d6e06.system.js +0 -4
  1178. package/lib/duet/p-995e1b11.system.entry.js +0 -4
  1179. package/lib/duet/p-9a613a25.system.entry.js +0 -4
  1180. package/lib/duet/p-9f835123.system.entry.js +0 -4
  1181. package/lib/duet/p-a0660ffa.system.js +0 -5
  1182. package/lib/duet/p-aa6d7d97.entry.js +0 -4
  1183. package/lib/duet/p-ac9f6601.entry.js +0 -4
  1184. package/lib/duet/p-b1db3006.js +0 -4
  1185. package/lib/duet/p-b3ae5641.system.entry.js +0 -4
  1186. package/lib/duet/p-c1bc9249.entry.js +0 -4
  1187. package/lib/duet/p-c36a1bb7.entry.js +0 -4
  1188. package/lib/duet/p-cc1909de.js +0 -4
  1189. package/lib/duet/p-d098d59c.system.entry.js +0 -4
  1190. package/lib/duet/p-d9353709.entry.js +0 -4
  1191. package/lib/duet/p-e1e89fd5.entry.js +0 -4
  1192. package/lib/duet/p-e491c098.system.entry.js +0 -4
  1193. package/lib/duet/p-e95d09bb.system.entry.js +0 -4
  1194. package/lib/duet/p-efa6152d.entry.js +0 -4
  1195. package/lib/duet/p-f58eb425.js +0 -4
  1196. package/lib/duet/p-fab6160a.entry.js +0 -4
  1197. package/lib/duet/p-fcbb30e1.entry.js +0 -4
  1198. package/lib/duet/p-ff09528c.system.entry.js +0 -4
  1199. package/lib/esm/app-globals-de2a5510.js +0 -52
  1200. package/lib/esm/create-id-2b0cd46d.js +0 -11
  1201. package/lib/esm/errorcodes.utils-424b1197.js +0 -36
  1202. package/lib/esm/focus-utils-74961919.js +0 -18
  1203. package/lib/esm/input-utils-a0225b92.js +0 -53
  1204. package/lib/esm/is-internet-explorer-032d4dae.js +0 -9
  1205. package/lib/esm/keyboard-utils-5746e126.js +0 -20
  1206. package/lib/esm/string-utils-59ad4cb2.js +0 -55
  1207. package/lib/esm/teleport-15747328.js +0 -97
  1208. package/lib/esm/themeable-component-fdce4fd7.js +0 -13
  1209. package/lib/esm/token-utils-46c8fe31.js +0 -117
  1210. package/lib/esm/watch-options-f189118b.js +0 -57
  1211. package/lib/esm-es5/app-globals-de2a5510.js +0 -4
  1212. package/lib/esm-es5/focus-utils-74961919.js +0 -4
  1213. package/lib/esm-es5/index-b3bf9761.js +0 -5
  1214. package/lib/esm-es5/keyboard-utils-5746e126.js +0 -4
  1215. /package/lib/duet/{p-1a395a8d.js → p-0e052642.js} +0 -0
  1216. /package/lib/duet/{p-f8c76b25.js → p-11230037.js} +0 -0
  1217. /package/lib/duet/{p-0b31864f.js → p-38320af8.js} +0 -0
  1218. /package/lib/duet/{p-c30a5f7c.system.js → p-41982d26.system.js} +0 -0
  1219. /package/lib/duet/{p-268171f7.js → p-43b89e38.js} +0 -0
  1220. /package/lib/duet/{p-274d11e3.js → p-4ab776f4.js} +0 -0
  1221. /package/lib/duet/{p-77b6e4ba.system.js → p-50f4bca2.system.js} +0 -0
  1222. /package/lib/duet/{p-45f71a69.js → p-5e59e970.js} +0 -0
  1223. /package/lib/duet/{p-75daef16.system.js → p-634e8787.system.js} +0 -0
  1224. /package/lib/duet/{p-719b38fe.system.js → p-67c653f9.system.js} +0 -0
  1225. /package/lib/duet/{p-b99c00fa.system.js → p-6ef75455.system.js} +0 -0
  1226. /package/lib/duet/{p-a1371eee.js → p-7d8a2628.js} +0 -0
  1227. /package/lib/duet/{p-ecf1f6cd.system.js → p-9e36548d.system.js} +0 -0
  1228. /package/lib/duet/{p-3d8d557b.js → p-9e371678.js} +0 -0
  1229. /package/lib/duet/{p-d48735b6.js → p-a58bd561.js} +0 -0
  1230. /package/lib/duet/{p-8e1da663.system.js → p-afad5fd3.system.js} +0 -0
  1231. /package/lib/duet/{p-24853ebf.js → p-b2e550a3.js} +0 -0
  1232. /package/lib/duet/{p-7c29d36a.system.js → p-b864159a.system.js} +0 -0
  1233. /package/lib/duet/{p-88a50491.system.js → p-d1cedaa1.system.js} +0 -0
  1234. /package/lib/duet/{p-77f2dbee.js → p-df7874f9.js} +0 -0
  1235. /package/lib/duet/{p-87dd7bf3.system.js → p-e12066c8.system.js} +0 -0
  1236. /package/lib/duet/{p-1a91e22a.system.js → p-e6b5a1c7.system.js} +0 -0
  1237. /package/lib/esm-es5/{common-strings-c0ac5a0b.js → common-strings-59db6973.js} +0 -0
  1238. /package/lib/esm-es5/{create-id-2b0cd46d.js → create-id-149a1b6d.js} +0 -0
  1239. /package/lib/esm-es5/{input-utils-a0225b92.js → input-utils-85681162.js} +0 -0
  1240. /package/lib/esm-es5/{is-internet-explorer-032d4dae.js → is-internet-explorer-2c48f686.js} +0 -0
  1241. /package/lib/esm-es5/{js-utils-a35dcc8c.js → js-utils-9b9e0039.js} +0 -0
  1242. /package/lib/esm-es5/{slot-query-7877f18f.js → slot-query-022710bb.js} +0 -0
  1243. /package/lib/esm-es5/{string-utils-59ad4cb2.js → string-utils-ca039233.js} +0 -0
  1244. /package/lib/esm-es5/{teleport-15747328.js → teleport-4462e8c1.js} +0 -0
  1245. /package/lib/esm-es5/{themeable-component-fdce4fd7.js → themeable-component-724c0f7e.js} +0 -0
  1246. /package/lib/esm-es5/{token-utils-46c8fe31.js → token-utils-b4bd3ec7.js} +0 -0
  1247. /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
- return page.evaluateHandle(() => document.activeElement);
7
+ return page.evaluateHandle(() => document.activeElement);
8
8
  }
9
9
  async function getChooseDateButton(page) {
10
- return page.find(".duet-date-button");
10
+ return page.find(".duet-date-button");
11
11
  }
12
12
  async function getInput(page) {
13
- return page.find("duet-input");
13
+ return page.find("duet-input");
14
14
  }
15
15
  async function getDialog(page) {
16
- return page.find(`[role="dialog"]`);
16
+ return page.find(`[role="dialog"]`);
17
17
  }
18
18
  async function getGrid(page) {
19
- const dialog = await getDialog(page);
20
- return dialog.find("table");
19
+ const dialog = await getDialog(page);
20
+ return dialog.find("table");
21
21
  }
22
22
  async function getPicker(page) {
23
- return page.find("duet-date-picker");
23
+ return page.find("duet-date-picker");
24
24
  }
25
25
  async function setMonthDropdown(page, month) {
26
- await page.select(".duet-date-month-select", month);
27
- await page.waitForChanges();
26
+ await page.select(".duet-date-month-select", month);
27
+ await page.waitForChanges();
28
28
  }
29
29
  async function setYearDropdown(page, year) {
30
- await page.select(".duet-date-year-select", year);
31
- await page.waitForChanges();
30
+ await page.select(".duet-date-year-select", year);
31
+ await page.waitForChanges();
32
32
  }
33
33
  async function getPrevMonthButton(page) {
34
- const dialog = await getDialog(page);
35
- return dialog.find(`.duet-date-dialog-prev >>> button`);
34
+ const dialog = await getDialog(page);
35
+ return dialog.find(`.duet-date-dialog-prev >>> button`);
36
36
  }
37
37
  async function getNextMonthButton(page) {
38
- const dialog = await getDialog(page);
39
- return dialog.find(`.duet-date-dialog-next >>> button`);
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
- const elements = await context.findAll(selector);
43
- return elements.find(element => element.innerText.includes(text));
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
- const grid = await getGrid(page);
47
- const button = await findByText(grid, "button", date);
48
- await button.click();
49
- await page.waitForChanges();
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
- const button = await getChooseDateButton(page);
53
- await button.click();
54
- await page.waitForChanges();
55
- const dialog = await getDialog(page);
56
- await dialog.waitForVisible();
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
- const input = await getInput(page);
60
- await input.click();
61
- await page.waitForChanges();
62
- const dialog = await getDialog(page);
63
- await dialog.waitForNotVisible();
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
- const dialog = await getDialog(page);
67
- return dialog.isVisible();
66
+ const dialog = await getDialog(page);
67
+ return dialog.isVisible();
68
68
  }
69
69
  const generatePage = (props) => {
70
- const attrs = Object.entries(Object.assign({ label: "Valitse paiva", expand: true }, props))
71
- .map(([attr, value]) => `${attr}="${value}"`)
72
- .join(" ");
73
- return createPage(`
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
- 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
- });
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
- 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");
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
- 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"]);
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
- 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"]);
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
- 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);
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
- 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);
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
- 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");
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
- describe("form interaction", () => {
608
- it("supports required attribute", async () => {
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
- 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(`
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
- 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");
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
- describe("constraint validation", () => {
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
- const attrs = Object.entries({ min, max, required })
657
- .filter(([, value]) => value)
658
- .map(([attr, value]) => `${attr}="${value}"`)
659
- .join(" ");
660
- const page = await createPage(`
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
- 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);
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
  });