@telesign/boreal-web-components 0.1.0-alpha.4 → 0.1.0-alpha.6

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 (571) hide show
  1. package/components-build/bds-avatar.js +1 -1
  2. package/components-build/bds-badge.js +1 -1
  3. package/components-build/bds-banner.js +1 -1
  4. package/components-build/bds-breadcrumb-item.d.ts +11 -0
  5. package/components-build/bds-breadcrumb-item.js +1 -0
  6. package/components-build/bds-breadcrumb.d.ts +11 -0
  7. package/components-build/bds-breadcrumb.js +1 -0
  8. package/components-build/bds-button-group.d.ts +11 -0
  9. package/components-build/bds-button-group.js +1 -0
  10. package/components-build/bds-button.js +1 -1
  11. package/components-build/bds-checkbox-button.d.ts +11 -0
  12. package/components-build/bds-checkbox-button.js +1 -0
  13. package/components-build/bds-checkbox-card.d.ts +11 -0
  14. package/components-build/bds-checkbox-card.js +1 -0
  15. package/components-build/bds-checkbox-group.d.ts +11 -0
  16. package/components-build/bds-checkbox-group.js +1 -0
  17. package/components-build/bds-checkbox.js +1 -1
  18. package/components-build/bds-dialog.js +1 -1
  19. package/components-build/bds-divider.js +1 -1
  20. package/components-build/bds-flag.js +1 -1
  21. package/components-build/bds-grid-item.js +1 -1
  22. package/components-build/bds-grid.js +1 -1
  23. package/components-build/bds-list-menu-item.js +1 -1
  24. package/components-build/bds-list-menu.js +1 -1
  25. package/components-build/bds-popover.js +1 -1
  26. package/components-build/bds-radio-button.d.ts +11 -0
  27. package/components-build/bds-radio-button.js +1 -0
  28. package/components-build/bds-radio-card.d.ts +11 -0
  29. package/components-build/bds-radio-card.js +1 -0
  30. package/components-build/bds-radio-group.d.ts +11 -0
  31. package/components-build/bds-radio-group.js +1 -0
  32. package/components-build/bds-radio.d.ts +11 -0
  33. package/components-build/bds-radio.js +1 -0
  34. package/components-build/bds-select.d.ts +11 -0
  35. package/components-build/bds-select.js +1 -0
  36. package/components-build/bds-slider.d.ts +11 -0
  37. package/components-build/bds-slider.js +1 -0
  38. package/components-build/bds-spinner.js +1 -1
  39. package/components-build/bds-status.js +1 -1
  40. package/components-build/bds-tag.js +1 -1
  41. package/components-build/bds-text-field.js +1 -1
  42. package/components-build/bds-toggle.js +1 -1
  43. package/components-build/bds-tooltip.js +1 -1
  44. package/components-build/bds-typography.js +1 -1
  45. package/components-build/index.js +1 -1
  46. package/components-build/p-B6e9eIHB.js +1 -0
  47. package/components-build/p-CJBdGD_4.js +1 -0
  48. package/components-build/p-CPvuMm5C.js +1 -0
  49. package/components-build/p-DcR7mHFE.js +1 -0
  50. package/components-build/p-DdOPD9wW.js +1 -0
  51. package/components-build/p-DfaYciGa.js +1 -0
  52. package/components-build/p-Dh8DSJs_.js +1 -0
  53. package/components-build/p-DoNZM78n.js +1 -0
  54. package/components-build/p-DrkDx75U.js +1 -0
  55. package/components-build/p-DuBzr05c.js +1 -0
  56. package/components-build/p-PmjPRW8X.js +1 -0
  57. package/components-build/p-cgdh1LO-.js +1 -0
  58. package/{dist/boreal-web-components/p-CaHOghy5.js → components-build/p-fUK0GCeC.js} +1 -1
  59. package/components-build/p-nxYzL9uu.js +1 -0
  60. package/components-build/p-yLNcMg2E.js +1 -0
  61. package/custom-elements.json +5078 -1524
  62. package/dist/boreal-web-components/boreal-web-components.esm.js +1 -1
  63. package/dist/boreal-web-components/css/boreal.css +60 -0
  64. package/dist/boreal-web-components/css/theme-connect.css +15 -0
  65. package/dist/boreal-web-components/css/theme-engage.css +15 -0
  66. package/dist/boreal-web-components/css/theme-protect.css +15 -0
  67. package/dist/boreal-web-components/css/theme-proximus.css +15 -0
  68. package/dist/boreal-web-components/p-02e53626.entry.js +1 -0
  69. package/dist/boreal-web-components/p-0357450d.system.entry.js +1 -0
  70. package/dist/boreal-web-components/{p-e0bf8a6e.entry.js → p-1250ba53.entry.js} +1 -1
  71. package/dist/boreal-web-components/p-1911b978.entry.js +1 -0
  72. package/dist/boreal-web-components/{p-2158a7cd.entry.js → p-19f9352d.entry.js} +1 -1
  73. package/dist/boreal-web-components/p-1mOd23lT.system.js +1 -0
  74. package/dist/boreal-web-components/{p-52600375.system.entry.js → p-25823f7d.system.entry.js} +1 -1
  75. package/dist/boreal-web-components/p-2db71382.system.entry.js +1 -0
  76. package/dist/boreal-web-components/{p-251d35df.system.entry.js → p-365e8e5c.system.entry.js} +1 -1
  77. package/dist/boreal-web-components/p-367e40f9.entry.js +1 -0
  78. package/dist/boreal-web-components/p-3946d587.entry.js +1 -0
  79. package/dist/boreal-web-components/p-44b6fe6c.system.entry.js +1 -0
  80. package/dist/boreal-web-components/{p-7a4efddd.system.entry.js → p-48712a63.system.entry.js} +1 -1
  81. package/dist/boreal-web-components/{p-251b3002.entry.js → p-49ea207a.entry.js} +1 -1
  82. package/dist/boreal-web-components/p-4b028406.entry.js +1 -0
  83. package/dist/boreal-web-components/p-4b615de8.system.entry.js +1 -0
  84. package/dist/boreal-web-components/{p-edca16b6.system.entry.js → p-4f431941.system.entry.js} +1 -1
  85. package/dist/boreal-web-components/p-524421f7.system.entry.js +1 -0
  86. package/dist/boreal-web-components/p-530c8c7f.entry.js +1 -0
  87. package/dist/boreal-web-components/p-55aeff0c.system.entry.js +1 -0
  88. package/dist/boreal-web-components/p-5c8650b3.system.entry.js +1 -0
  89. package/dist/boreal-web-components/p-5e590291.system.entry.js +1 -0
  90. package/dist/boreal-web-components/p-5ee0841f.entry.js +1 -0
  91. package/dist/boreal-web-components/{p-871c9a9f.system.entry.js → p-65923619.system.entry.js} +1 -1
  92. package/dist/boreal-web-components/p-66ec16d9.entry.js +1 -0
  93. package/dist/boreal-web-components/{p-127a4134.entry.js → p-714bf70d.entry.js} +1 -1
  94. package/dist/boreal-web-components/{p-66360e63.entry.js → p-71ed1e1d.entry.js} +1 -1
  95. package/dist/boreal-web-components/{p-b12d4788.system.entry.js → p-732e98f1.system.entry.js} +1 -1
  96. package/dist/boreal-web-components/p-7626338e.system.entry.js +1 -0
  97. package/dist/boreal-web-components/{p-80822731.system.entry.js → p-77658a5b.system.entry.js} +1 -1
  98. package/dist/boreal-web-components/p-7G4h4DI7.js +1 -0
  99. package/dist/boreal-web-components/p-800fc096.system.entry.js +1 -0
  100. package/dist/boreal-web-components/p-824485ad.entry.js +1 -0
  101. package/dist/boreal-web-components/p-8dfe3a9f.entry.js +1 -0
  102. package/dist/boreal-web-components/p-90022071.entry.js +1 -0
  103. package/dist/boreal-web-components/{p-1d1bb9d2.entry.js → p-9d02057d.entry.js} +1 -1
  104. package/dist/boreal-web-components/p-C-g3hhl_.system.js +1 -0
  105. package/dist/boreal-web-components/p-C0P3gzq5.system.js +1 -0
  106. package/dist/boreal-web-components/p-C4HM8wQe.js +1 -0
  107. package/dist/boreal-web-components/p-CPvuMm5C.js +1 -0
  108. package/dist/boreal-web-components/p-CRMH6mfq.system.js +1 -0
  109. package/dist/boreal-web-components/p-CU_dRLdk.system.js +1 -0
  110. package/dist/boreal-web-components/p-CW4-dkCF.system.js +1 -0
  111. package/dist/boreal-web-components/p-CcENtewr.js +1 -0
  112. package/dist/boreal-web-components/{p-BuxZeJbu.system.js → p-DSU8tkVw.system.js} +1 -1
  113. package/dist/boreal-web-components/p-DfaYciGa.js +1 -0
  114. package/dist/boreal-web-components/p-Dk9dfU9-.system.js +1 -0
  115. package/dist/boreal-web-components/p-DlVzZK7o.js +1 -0
  116. package/dist/boreal-web-components/p-DnIhjwCH.system.js +1 -0
  117. package/dist/boreal-web-components/p-Dwo1hcd9.js +1 -0
  118. package/dist/boreal-web-components/p-K7DvMlRo.system.js +1 -0
  119. package/{components-build/p-CaHOghy5.js → dist/boreal-web-components/p-U9yfbs7i.js} +1 -1
  120. package/dist/boreal-web-components/p-UEj9YHof.system.js +1 -0
  121. package/dist/boreal-web-components/p-b54fe67f.system.entry.js +1 -0
  122. package/dist/boreal-web-components/p-bbcd3a30.system.entry.js +1 -0
  123. package/dist/boreal-web-components/p-bea25d3d.system.entry.js +1 -0
  124. package/dist/boreal-web-components/p-bed506d3.entry.js +1 -0
  125. package/dist/boreal-web-components/p-bfd62034.system.entry.js +1 -0
  126. package/dist/boreal-web-components/p-c07d6b82.system.entry.js +1 -0
  127. package/dist/boreal-web-components/p-cc5c359f.entry.js +1 -0
  128. package/dist/boreal-web-components/p-cgdh1LO-.js +1 -0
  129. package/dist/boreal-web-components/p-d2b6ae79.entry.js +1 -0
  130. package/dist/boreal-web-components/{p-695d0830.entry.js → p-dc7d429c.entry.js} +1 -1
  131. package/dist/boreal-web-components/p-e21b8416.entry.js +1 -0
  132. package/dist/boreal-web-components/p-e4364a44.system.entry.js +1 -0
  133. package/dist/boreal-web-components/p-e51407b2.system.entry.js +1 -0
  134. package/dist/boreal-web-components/p-e8cde179.system.entry.js +1 -0
  135. package/dist/boreal-web-components/p-eecc3028.system.entry.js +1 -0
  136. package/dist/boreal-web-components/p-f3bd824d.system.entry.js +1 -0
  137. package/dist/boreal-web-components/{p-44ceff4e.system.entry.js → p-f65e9d0c.system.entry.js} +1 -1
  138. package/dist/boreal-web-components/p-f6eabb16.entry.js +1 -0
  139. package/dist/boreal-web-components/p-f7acf6e5.system.entry.js +1 -0
  140. package/dist/boreal-web-components/{p-7db870b7.entry.js → p-f9560509.entry.js} +1 -1
  141. package/dist/boreal-web-components/p-fa128cad.system.entry.js +1 -0
  142. package/dist/boreal-web-components/p-fab1a01d.entry.js +1 -0
  143. package/dist/boreal-web-components/{p-fc24d963.entry.js → p-fb9a0e94.entry.js} +1 -1
  144. package/dist/boreal-web-components/p-fb9ba833.entry.js +1 -0
  145. package/dist/boreal-web-components/p-fbe0c9f2.entry.js +1 -0
  146. package/dist/boreal-web-components/p-fbe88555.entry.js +1 -0
  147. package/dist/boreal-web-components/p-fc1fa966.system.entry.js +1 -0
  148. package/dist/boreal-web-components/p-fc4ffa0e.entry.js +1 -0
  149. package/dist/boreal-web-components/p-fef13445.entry.js +1 -0
  150. package/dist/boreal-web-components/p-iq2UuV7c.js +1 -0
  151. package/dist/boreal-web-components/p-qGhMe8Hk.js +1 -0
  152. package/dist/boreal-web-components/p-vzZJGcYF.system.js +1 -1
  153. package/dist/boreal-web-components/scss/maps/_theme-connect.scss +16 -1
  154. package/dist/boreal-web-components/scss/maps/_theme-engage.scss +16 -1
  155. package/dist/boreal-web-components/scss/maps/_theme-protect.scss +16 -1
  156. package/dist/boreal-web-components/scss/maps/_theme-proximus.scss +16 -1
  157. package/dist/boreal-web-components/scss/variables/_theme-connect.scss +16 -1
  158. package/dist/boreal-web-components/scss/variables/_theme-engage.scss +16 -1
  159. package/dist/boreal-web-components/scss/variables/_theme-protect.scss +16 -1
  160. package/dist/boreal-web-components/scss/variables/_theme-proximus.scss +16 -1
  161. package/dist/cjs/KeyboardController-B_g3peyB.js +1067 -0
  162. package/dist/cjs/Keys-DXn16dlA.js +34 -0
  163. package/dist/cjs/Logger-DnziItRH.js +51 -0
  164. package/dist/cjs/{attributes-wIHueigW.js → attributes-CgRFplrN.js} +3 -0
  165. package/dist/cjs/bds-avatar.cjs.entry.js +2 -2
  166. package/dist/cjs/bds-badge.cjs.entry.js +1 -1
  167. package/dist/cjs/bds-banner.cjs.entry.js +2 -2
  168. package/dist/cjs/bds-breadcrumb-item.cjs.entry.js +106 -0
  169. package/dist/cjs/bds-breadcrumb.cjs.entry.js +127 -0
  170. package/dist/cjs/bds-button-group.cjs.entry.js +116 -0
  171. package/dist/cjs/bds-button.cjs.entry.js +38 -17
  172. package/dist/cjs/bds-checkbox-button.cjs.entry.js +119 -0
  173. package/dist/cjs/bds-checkbox-card.cjs.entry.js +135 -0
  174. package/dist/cjs/bds-checkbox-group.cjs.entry.js +292 -0
  175. package/dist/cjs/bds-checkbox.cjs.entry.js +67 -29
  176. package/dist/cjs/bds-dialog.cjs.entry.js +4 -4
  177. package/dist/cjs/bds-divider.cjs.entry.js +2 -2
  178. package/dist/cjs/bds-flag.cjs.entry.js +1 -1
  179. package/dist/cjs/bds-grid-item.cjs.entry.js +1 -1
  180. package/dist/cjs/bds-grid.cjs.entry.js +1 -1
  181. package/dist/cjs/bds-list-menu-item.cjs.entry.js +59 -23
  182. package/dist/cjs/bds-list-menu.cjs.entry.js +126 -22
  183. package/dist/cjs/bds-popover.cjs.entry.js +15 -6
  184. package/dist/cjs/bds-radio-button.cjs.entry.js +60 -0
  185. package/dist/cjs/bds-radio-card.cjs.entry.js +76 -0
  186. package/dist/cjs/bds-radio-group.cjs.entry.js +291 -0
  187. package/dist/cjs/bds-radio.cjs.entry.js +60 -0
  188. package/dist/cjs/bds-select.cjs.entry.js +394 -0
  189. package/dist/cjs/bds-slider.cjs.entry.js +655 -0
  190. package/dist/cjs/bds-spinner.cjs.entry.js +1 -1
  191. package/dist/cjs/bds-status.cjs.entry.js +1 -1
  192. package/dist/cjs/bds-tag.cjs.entry.js +2 -2
  193. package/dist/cjs/bds-text-field.cjs.entry.js +15 -9
  194. package/dist/cjs/bds-toggle.cjs.entry.js +7 -6
  195. package/dist/cjs/bds-tooltip_2.cjs.entry.js +12 -9
  196. package/dist/cjs/boreal-web-components.cjs.js +1 -1
  197. package/dist/cjs/checkbox-form-association-DTEpHXUD.js +43 -0
  198. package/dist/cjs/coreColors-CQGojc0l.js +10 -0
  199. package/dist/cjs/{enum-DLblRCkQ.js → enum-DeTWfR0D.js} +3 -3
  200. package/dist/cjs/form-associated.mixin-BCR6bj29.js +33 -0
  201. package/dist/cjs/{getOffset-m4hBgyVP.js → getOffset-CsDHFjPW.js} +6 -53
  202. package/dist/cjs/{form-associated.mixin-DXwvF_vW.js → internals-D8x7GMfR.js} +0 -31
  203. package/dist/cjs/loader.cjs.js +1 -1
  204. package/dist/cjs/orientation-DQAIleEJ.js +8 -0
  205. package/dist/collection/collection-manifest.json +18 -6
  206. package/dist/collection/components/actions/bds-button/bds-button.css +55 -55
  207. package/dist/collection/components/actions/bds-button/bds-button.js +35 -11
  208. package/dist/collection/components/actions/bds-button/types/enum.js +3 -3
  209. package/dist/collection/components/actions/bds-button-group/bds-button-group.css +77 -0
  210. package/dist/collection/components/actions/bds-button-group/bds-button-group.js +264 -0
  211. package/dist/collection/components/actions/bds-list-menu/bds-list-menu/bds-list-menu.css +27 -1
  212. package/dist/collection/components/actions/bds-list-menu/bds-list-menu/bds-list-menu.js +283 -51
  213. package/dist/collection/components/actions/bds-list-menu/bds-list-menu/types/enum.js +4 -0
  214. package/dist/collection/components/actions/bds-list-menu/bds-list-menu-item/bds-list-menu-item.css +30 -11
  215. package/dist/collection/components/actions/bds-list-menu/bds-list-menu-item/bds-list-menu-item.js +65 -7
  216. package/dist/collection/components/actions/bds-toggle/bds-toggle.css +3 -3
  217. package/dist/collection/components/actions/bds-toggle/bds-toggle.js +1 -1
  218. package/dist/collection/components/feedback/bds-badge/bds-badge.js +1 -1
  219. package/dist/collection/components/feedback/bds-banner/bds-banner.js +1 -1
  220. package/dist/collection/components/feedback/bds-spinner/bds-spinner.js +1 -1
  221. package/dist/collection/components/feedback/bds-status/bds-status.js +1 -1
  222. package/dist/collection/components/feedback/bds-tag/bds-tag.css +6 -6
  223. package/dist/collection/components/feedback/bds-tag/bds-tag.js +1 -1
  224. package/dist/collection/components/forms/bds-checkbox/bds-checkbox/bds-checkbox.css +132 -0
  225. package/dist/collection/components/forms/bds-checkbox/{bds-checkbox.js → bds-checkbox/bds-checkbox.js} +138 -35
  226. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-button/bds-checkbox-button.css +113 -0
  227. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-button/bds-checkbox-button.js +382 -0
  228. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-card/bds-checkbox-card.css +139 -0
  229. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-card/bds-checkbox-card.js +443 -0
  230. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-group/bds-checkbox-group.css +55 -0
  231. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-group/bds-checkbox-group.js +648 -0
  232. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-group/types/enum.js +5 -0
  233. package/dist/collection/components/forms/bds-checkbox/bds-checkbox-group/types/index.js +3 -0
  234. package/dist/collection/components/forms/bds-checkbox/utils/checkbox-form-association.js +39 -0
  235. package/dist/collection/components/forms/bds-checkbox/utils/index.js +1 -0
  236. package/dist/collection/components/forms/bds-flag/bds-flag.js +1 -1
  237. package/dist/collection/components/forms/bds-radio/bds-radio/bds-radio.css +121 -0
  238. package/dist/collection/components/forms/bds-radio/bds-radio/bds-radio.js +238 -0
  239. package/dist/collection/components/forms/bds-radio/bds-radio/types/IRadio.js +1 -0
  240. package/dist/collection/components/forms/bds-radio/bds-radio-button/bds-radio-button.css +113 -0
  241. package/dist/collection/components/forms/bds-radio/bds-radio-button/bds-radio-button.js +238 -0
  242. package/dist/collection/components/forms/bds-radio/bds-radio-button/types/IRadioButton.js +1 -0
  243. package/dist/collection/components/forms/bds-radio/bds-radio-card/bds-radio-card.css +156 -0
  244. package/dist/collection/components/forms/bds-radio/bds-radio-card/bds-radio-card.js +307 -0
  245. package/dist/collection/components/forms/bds-radio/bds-radio-card/types/IRadioCard.js +1 -0
  246. package/dist/collection/components/forms/bds-radio/bds-radio-group/bds-radio-group.css +55 -0
  247. package/dist/collection/components/forms/bds-radio/bds-radio-group/bds-radio-group.js +648 -0
  248. package/dist/collection/components/forms/bds-radio/bds-radio-group/types/IRadioGroup.js +1 -0
  249. package/dist/collection/components/forms/bds-radio/bds-radio-group/types/enum.js +5 -0
  250. package/dist/collection/components/forms/bds-radio/bds-radio-group/types/types.js +1 -0
  251. package/dist/collection/components/forms/bds-select/bds-select.css +23 -0
  252. package/dist/collection/components/forms/bds-select/bds-select.js +431 -0
  253. package/dist/collection/components/forms/bds-select/types/ISelect.js +1 -0
  254. package/dist/collection/components/forms/bds-slider/bds-slider.css +213 -0
  255. package/dist/collection/components/forms/bds-slider/bds-slider.js +847 -0
  256. package/dist/collection/components/forms/bds-slider/helpers/SliderDOMController.js +61 -0
  257. package/dist/collection/components/forms/bds-slider/helpers/SliderService.js +93 -0
  258. package/dist/collection/components/forms/bds-slider/helpers/index.js +3 -0
  259. package/dist/collection/components/forms/bds-slider/helpers/parseValues.js +43 -0
  260. package/dist/collection/components/forms/bds-slider/types/ChangeDetail.js +1 -0
  261. package/dist/collection/components/forms/bds-slider/types/ISlider.js +1 -0
  262. package/dist/collection/components/forms/bds-slider/types/ISliderOptions.js +1 -0
  263. package/dist/collection/components/forms/bds-slider/types/enum.js +16 -0
  264. package/dist/collection/components/forms/bds-slider/types/index.js +5 -0
  265. package/dist/collection/components/forms/bds-slider/types/types.js +1 -0
  266. package/dist/collection/components/forms/bds-text-field/bds-text-field.css +10 -3
  267. package/dist/collection/components/forms/bds-text-field/bds-text-field.js +47 -2
  268. package/dist/collection/components/helpers/{bds-divider.css → bds-divider/bds-divider.css} +12 -4
  269. package/dist/collection/components/helpers/{bds-divider.js → bds-divider/bds-divider.js} +3 -3
  270. package/dist/collection/components/helpers/bds-divider/types/IDivider.js +1 -0
  271. package/dist/collection/components/helpers/bds-divider/types/types.js +1 -0
  272. package/dist/collection/components/images-icons/bds-avatar/bds-avatar.js +1 -1
  273. package/dist/collection/components/layouts/bds-grid/{grid → bds-grid}/bds-grid.js +3 -3
  274. package/dist/collection/components/layouts/bds-grid/bds-grid/types/IGrid.js +1 -0
  275. package/dist/collection/components/layouts/bds-grid/bds-grid/types/types.js +1 -0
  276. package/dist/collection/components/layouts/bds-grid/{grid-item → bds-grid-item}/bds-grid-item.js +9 -9
  277. package/dist/collection/components/layouts/bds-grid/bds-grid-item/types/IGridItem.js +1 -0
  278. package/dist/collection/components/layouts/bds-grid/bds-grid-item/types/types.js +1 -0
  279. package/dist/collection/components/navigation/bds-breadcrumb/bds-breadcrumb.css +21 -0
  280. package/dist/collection/components/navigation/bds-breadcrumb/bds-breadcrumb.js +292 -0
  281. package/dist/collection/components/navigation/bds-breadcrumb/types/IBreadcrumb.js +1 -0
  282. package/dist/collection/components/navigation/bds-breadcrumb-item/bds-breadcrumb-item.css +64 -0
  283. package/dist/collection/components/navigation/bds-breadcrumb-item/bds-breadcrumb-item.js +369 -0
  284. package/dist/collection/components/navigation/bds-breadcrumb-item/types/IBreadcrumbItem.js +1 -0
  285. package/dist/collection/components/overlays/bds-dialog/bds-dialog.css +1 -1
  286. package/dist/collection/components/overlays/bds-dialog/bds-dialog.js +2 -2
  287. package/dist/collection/components/overlays/bds-popover/bds-popover.js +49 -3
  288. package/dist/collection/components/overlays/bds-tooltip/bds-tooltip.js +3 -3
  289. package/dist/collection/components/titles-text/bds-typography/bds-typography.css +5 -0
  290. package/dist/collection/components/titles-text/bds-typography/bds-typography.js +30 -47
  291. package/dist/collection/components/titles-text/bds-typography/utils/bds-typography-utils.js +1 -1
  292. package/dist/collection/css/boreal.css +60 -0
  293. package/dist/collection/css/theme-connect.css +15 -0
  294. package/dist/collection/css/theme-engage.css +15 -0
  295. package/dist/collection/css/theme-protect.css +15 -0
  296. package/dist/collection/css/theme-proximus.css +15 -0
  297. package/dist/collection/mixins/anchored.mixin.js +2 -2
  298. package/dist/collection/mixins/links.mixin.js +1 -2
  299. package/dist/collection/mixins/menu-behavior.mixin.js +12 -6
  300. package/dist/collection/scss/maps/_theme-connect.scss +16 -1
  301. package/dist/collection/scss/maps/_theme-engage.scss +16 -1
  302. package/dist/collection/scss/maps/_theme-protect.scss +16 -1
  303. package/dist/collection/scss/maps/_theme-proximus.scss +16 -1
  304. package/dist/collection/scss/variables/_theme-connect.scss +16 -1
  305. package/dist/collection/scss/variables/_theme-engage.scss +16 -1
  306. package/dist/collection/scss/variables/_theme-protect.scss +16 -1
  307. package/dist/collection/scss/variables/_theme-proximus.scss +16 -1
  308. package/dist/collection/types/index.js +2 -1
  309. package/dist/collection/types/orientation.js +4 -0
  310. package/dist/collection/utils/a11y/index.js +4 -0
  311. package/dist/collection/utils/a11y/keyboard/KeyboardController.js +566 -0
  312. package/dist/collection/utils/a11y/keyboard/_constants.js +30 -0
  313. package/dist/collection/utils/a11y/keyboard/focus/aria-activedescendant.js +41 -0
  314. package/dist/collection/utils/a11y/keyboard/focus/resolve.js +48 -0
  315. package/dist/collection/utils/a11y/keyboard/focus/roving-tabindex.js +55 -0
  316. package/dist/collection/utils/a11y/keyboard/navigation/grid-navigation.js +194 -0
  317. package/dist/collection/utils/a11y/keyboard/navigation/linear-navigation.js +137 -0
  318. package/dist/collection/utils/a11y/keyboard/types/IKeyboardController.js +1 -0
  319. package/dist/collection/utils/a11y/keyboard/types/index.js +2 -0
  320. package/dist/collection/utils/a11y/keyboard/types/types.js +1 -0
  321. package/dist/collection/utils/constants/common/Keys.js +29 -24
  322. package/dist/collection/utils/dom/elements.js +63 -0
  323. package/dist/collection/utils/menu/menu-item.utils.js +9 -8
  324. package/dist/collection/utils/testing/helpers.js +10 -0
  325. package/dist/css/boreal.css +60 -0
  326. package/dist/css/theme-connect.css +15 -0
  327. package/dist/css/theme-engage.css +15 -0
  328. package/dist/css/theme-protect.css +15 -0
  329. package/dist/css/theme-proximus.css +15 -0
  330. package/dist/esm/KeyboardController-DcnXb5F5.js +1064 -0
  331. package/dist/esm/Keys-7G4h4DI7.js +31 -0
  332. package/dist/esm/Logger-iq2UuV7c.js +49 -0
  333. package/dist/esm/{attributes-CaHOghy5.js → attributes-U9yfbs7i.js} +3 -0
  334. package/dist/esm/bds-avatar.entry.js +2 -2
  335. package/dist/esm/bds-badge.entry.js +1 -1
  336. package/dist/esm/bds-banner.entry.js +2 -2
  337. package/dist/esm/bds-breadcrumb-item.entry.js +104 -0
  338. package/dist/esm/bds-breadcrumb.entry.js +125 -0
  339. package/dist/esm/bds-button-group.entry.js +114 -0
  340. package/dist/esm/bds-button.entry.js +36 -15
  341. package/dist/esm/bds-checkbox-button.entry.js +117 -0
  342. package/dist/esm/bds-checkbox-card.entry.js +133 -0
  343. package/dist/esm/bds-checkbox-group.entry.js +290 -0
  344. package/dist/esm/bds-checkbox.entry.js +67 -29
  345. package/dist/esm/bds-dialog.entry.js +4 -4
  346. package/dist/esm/bds-divider.entry.js +2 -2
  347. package/dist/esm/bds-flag.entry.js +1 -1
  348. package/dist/esm/bds-grid-item.entry.js +1 -1
  349. package/dist/esm/bds-grid.entry.js +1 -1
  350. package/dist/esm/bds-list-menu-item.entry.js +59 -23
  351. package/dist/esm/bds-list-menu.entry.js +126 -22
  352. package/dist/esm/bds-popover.entry.js +15 -6
  353. package/dist/esm/bds-radio-button.entry.js +58 -0
  354. package/dist/esm/bds-radio-card.entry.js +74 -0
  355. package/dist/esm/bds-radio-group.entry.js +289 -0
  356. package/dist/esm/bds-radio.entry.js +58 -0
  357. package/dist/esm/bds-select.entry.js +392 -0
  358. package/dist/esm/bds-slider.entry.js +653 -0
  359. package/dist/esm/bds-spinner.entry.js +1 -1
  360. package/dist/esm/bds-status.entry.js +1 -1
  361. package/dist/esm/bds-tag.entry.js +2 -2
  362. package/dist/esm/bds-text-field.entry.js +10 -4
  363. package/dist/esm/bds-toggle.entry.js +5 -4
  364. package/dist/esm/bds-tooltip_2.entry.js +12 -9
  365. package/dist/esm/boreal-web-components.js +1 -1
  366. package/dist/esm/checkbox-form-association-cgdh1LO-.js +41 -0
  367. package/dist/esm/coreColors-Dwo1hcd9.js +8 -0
  368. package/dist/esm/{enum-C8mRvnTA.js → enum-DlVzZK7o.js} +4 -4
  369. package/dist/esm/form-associated.mixin-C4HM8wQe.js +31 -0
  370. package/dist/esm/{getOffset-DKPjeBHi.js → getOffset-DCLpJBcp.js} +4 -51
  371. package/dist/esm/{form-associated.mixin-CvK2d92c.js → internals-DfaYciGa.js} +1 -31
  372. package/dist/esm/loader.js +1 -1
  373. package/dist/esm/orientation-CPvuMm5C.js +6 -0
  374. package/dist/esm-es5/KeyboardController-DcnXb5F5.js +1 -0
  375. package/dist/esm-es5/Keys-7G4h4DI7.js +1 -0
  376. package/dist/esm-es5/Logger-iq2UuV7c.js +1 -0
  377. package/dist/esm-es5/{attributes-CaHOghy5.js → attributes-U9yfbs7i.js} +1 -1
  378. package/dist/esm-es5/bds-avatar.entry.js +1 -1
  379. package/dist/esm-es5/bds-badge.entry.js +1 -1
  380. package/dist/esm-es5/bds-banner.entry.js +1 -1
  381. package/dist/esm-es5/bds-breadcrumb-item.entry.js +1 -0
  382. package/dist/esm-es5/bds-breadcrumb.entry.js +1 -0
  383. package/dist/esm-es5/bds-button-group.entry.js +1 -0
  384. package/dist/esm-es5/bds-button.entry.js +1 -1
  385. package/dist/esm-es5/bds-checkbox-button.entry.js +1 -0
  386. package/dist/esm-es5/bds-checkbox-card.entry.js +1 -0
  387. package/dist/esm-es5/bds-checkbox-group.entry.js +1 -0
  388. package/dist/esm-es5/bds-checkbox.entry.js +1 -1
  389. package/dist/esm-es5/bds-dialog.entry.js +1 -1
  390. package/dist/esm-es5/bds-divider.entry.js +1 -1
  391. package/dist/esm-es5/bds-flag.entry.js +1 -1
  392. package/dist/esm-es5/bds-grid-item.entry.js +1 -1
  393. package/dist/esm-es5/bds-grid.entry.js +1 -1
  394. package/dist/esm-es5/bds-list-menu-item.entry.js +1 -1
  395. package/dist/esm-es5/bds-list-menu.entry.js +1 -1
  396. package/dist/esm-es5/bds-popover.entry.js +1 -1
  397. package/dist/esm-es5/bds-radio-button.entry.js +1 -0
  398. package/dist/esm-es5/bds-radio-card.entry.js +1 -0
  399. package/dist/esm-es5/bds-radio-group.entry.js +1 -0
  400. package/dist/esm-es5/bds-radio.entry.js +1 -0
  401. package/dist/esm-es5/bds-select.entry.js +1 -0
  402. package/dist/esm-es5/bds-slider.entry.js +1 -0
  403. package/dist/esm-es5/bds-spinner.entry.js +1 -1
  404. package/dist/esm-es5/bds-status.entry.js +1 -1
  405. package/dist/esm-es5/bds-tag.entry.js +1 -1
  406. package/dist/esm-es5/bds-text-field.entry.js +1 -1
  407. package/dist/esm-es5/bds-toggle.entry.js +1 -1
  408. package/dist/esm-es5/bds-tooltip_2.entry.js +1 -1
  409. package/dist/esm-es5/boreal-web-components.js +1 -1
  410. package/dist/esm-es5/checkbox-form-association-cgdh1LO-.js +1 -0
  411. package/dist/esm-es5/coreColors-Dwo1hcd9.js +1 -0
  412. package/dist/esm-es5/enum-DlVzZK7o.js +1 -0
  413. package/dist/esm-es5/form-associated.mixin-C4HM8wQe.js +1 -0
  414. package/dist/esm-es5/getOffset-DCLpJBcp.js +1 -0
  415. package/dist/esm-es5/internals-DfaYciGa.js +1 -0
  416. package/dist/esm-es5/loader.js +1 -1
  417. package/dist/esm-es5/orientation-CPvuMm5C.js +1 -0
  418. package/dist/scss/maps/_theme-connect.scss +16 -1
  419. package/dist/scss/maps/_theme-engage.scss +16 -1
  420. package/dist/scss/maps/_theme-protect.scss +16 -1
  421. package/dist/scss/maps/_theme-proximus.scss +16 -1
  422. package/dist/scss/variables/_theme-connect.scss +16 -1
  423. package/dist/scss/variables/_theme-engage.scss +16 -1
  424. package/dist/scss/variables/_theme-protect.scss +16 -1
  425. package/dist/scss/variables/_theme-proximus.scss +16 -1
  426. package/dist/types/components/actions/bds-button/bds-button.d.ts +8 -4
  427. package/dist/types/components/actions/bds-button/types/enum.d.ts +3 -3
  428. package/dist/types/components/actions/bds-button-group/bds-button-group.d.ts +40 -0
  429. package/dist/types/components/actions/bds-button-group/types/IButtonGroup.d.ts +11 -0
  430. package/dist/types/components/actions/bds-list-menu/bds-list-menu/bds-list-menu.d.ts +32 -15
  431. package/dist/types/components/actions/bds-list-menu/bds-list-menu/types/IListMenu.d.ts +17 -0
  432. package/dist/types/components/actions/bds-list-menu/bds-list-menu/types/enum.d.ts +5 -0
  433. package/dist/types/components/actions/bds-list-menu/bds-list-menu/types/types.d.ts +3 -0
  434. package/dist/types/components/actions/bds-list-menu/bds-list-menu-item/bds-list-menu-item.d.ts +10 -1
  435. package/dist/types/components/actions/bds-list-menu/bds-list-menu-item/types/IListMenuItem.d.ts +2 -0
  436. package/dist/types/components/actions/bds-toggle/types/IToggle.d.ts +1 -1
  437. package/dist/types/components/forms/bds-checkbox/{bds-checkbox.d.ts → bds-checkbox/bds-checkbox.d.ts} +24 -9
  438. package/dist/types/components/forms/bds-checkbox/bds-checkbox-button/bds-checkbox-button.d.ts +68 -0
  439. package/dist/types/components/forms/bds-checkbox/bds-checkbox-button/types/ICheckboxButton.d.ts +15 -0
  440. package/dist/types/components/forms/bds-checkbox/bds-checkbox-card/bds-checkbox-card.d.ts +63 -0
  441. package/dist/types/components/forms/bds-checkbox/bds-checkbox-card/types/ICheckboxCard.d.ts +9 -0
  442. package/dist/types/components/forms/bds-checkbox/bds-checkbox-group/bds-checkbox-group.d.ts +86 -0
  443. package/dist/types/components/forms/bds-checkbox/bds-checkbox-group/types/ICheckboxGroup.d.ts +27 -0
  444. package/dist/types/components/forms/bds-checkbox/bds-checkbox-group/types/enum.d.ts +6 -0
  445. package/dist/types/components/forms/bds-checkbox/bds-checkbox-group/types/index.d.ts +4 -0
  446. package/dist/types/components/forms/bds-checkbox/bds-checkbox-group/types/types.d.ts +4 -0
  447. package/dist/types/components/forms/bds-checkbox/types/ICheckbox.d.ts +7 -22
  448. package/dist/types/components/forms/bds-checkbox/utils/checkbox-form-association.d.ts +10 -0
  449. package/dist/types/components/forms/bds-checkbox/utils/index.d.ts +2 -0
  450. package/dist/types/components/forms/bds-radio/bds-radio/bds-radio.d.ts +36 -0
  451. package/dist/types/components/forms/bds-radio/bds-radio/types/IRadio.d.ts +13 -0
  452. package/dist/types/components/forms/bds-radio/bds-radio-button/bds-radio-button.d.ts +36 -0
  453. package/dist/types/components/forms/bds-radio/bds-radio-button/types/IRadioButton.d.ts +14 -0
  454. package/dist/types/components/forms/bds-radio/bds-radio-card/bds-radio-card.d.ts +57 -0
  455. package/dist/types/components/forms/bds-radio/bds-radio-card/types/IRadioCard.d.ts +14 -0
  456. package/dist/types/components/forms/bds-radio/bds-radio-group/bds-radio-group.d.ts +85 -0
  457. package/dist/types/components/forms/bds-radio/bds-radio-group/types/IRadioGroup.d.ts +20 -0
  458. package/dist/types/components/forms/bds-radio/bds-radio-group/types/enum.d.ts +6 -0
  459. package/dist/types/components/forms/bds-radio/bds-radio-group/types/types.d.ts +3 -0
  460. package/dist/types/components/forms/bds-select/bds-select.d.ts +98 -0
  461. package/dist/types/components/forms/bds-select/types/ISelect.d.ts +6 -0
  462. package/dist/types/components/forms/bds-slider/bds-slider.d.ts +176 -0
  463. package/dist/types/components/forms/bds-slider/helpers/SliderDOMController.d.ts +38 -0
  464. package/dist/types/components/forms/bds-slider/helpers/SliderService.d.ts +44 -0
  465. package/dist/types/components/forms/bds-slider/helpers/index.d.ts +4 -0
  466. package/dist/types/components/forms/bds-slider/helpers/parseValues.d.ts +18 -0
  467. package/dist/types/components/forms/bds-slider/types/ChangeDetail.d.ts +9 -0
  468. package/dist/types/components/forms/bds-slider/types/ISlider.d.ts +17 -0
  469. package/dist/types/components/forms/bds-slider/types/ISliderOptions.d.ts +31 -0
  470. package/dist/types/components/forms/bds-slider/types/enum.d.ts +17 -0
  471. package/dist/types/components/forms/bds-slider/types/index.d.ts +6 -0
  472. package/dist/types/components/forms/bds-slider/types/types.d.ts +5 -0
  473. package/dist/types/components/forms/bds-text-field/bds-text-field.d.ts +4 -0
  474. package/dist/types/components/navigation/bds-breadcrumb/bds-breadcrumb.d.ts +57 -0
  475. package/dist/types/components/navigation/bds-breadcrumb/types/IBreadcrumb.d.ts +17 -0
  476. package/dist/types/components/navigation/bds-breadcrumb-item/bds-breadcrumb-item.d.ts +83 -0
  477. package/dist/types/components/navigation/bds-breadcrumb-item/types/IBreadcrumbItem.d.ts +20 -0
  478. package/dist/types/components/overlays/bds-popover/bds-popover.d.ts +4 -0
  479. package/dist/types/components/titles-text/bds-typography/bds-typography.d.ts +2 -46
  480. package/dist/types/components/titles-text/bds-typography/types/ITypography.d.ts +1 -0
  481. package/dist/types/components.d.ts +2187 -450
  482. package/dist/types/mixins/menu-behavior.mixin.d.ts +5 -1
  483. package/dist/types/types/form.d.ts +24 -0
  484. package/dist/types/types/index.d.ts +2 -1
  485. package/dist/types/types/orientation.d.ts +6 -0
  486. package/dist/types/utils/a11y/index.d.ts +4 -0
  487. package/dist/types/utils/a11y/keyboard/KeyboardController.d.ts +321 -0
  488. package/dist/types/utils/a11y/keyboard/_constants.d.ts +28 -0
  489. package/dist/types/utils/a11y/keyboard/focus/aria-activedescendant.d.ts +17 -0
  490. package/dist/types/utils/a11y/keyboard/focus/resolve.d.ts +23 -0
  491. package/dist/types/utils/a11y/keyboard/focus/roving-tabindex.d.ts +20 -0
  492. package/dist/types/utils/a11y/keyboard/navigation/grid-navigation.d.ts +9 -0
  493. package/dist/types/utils/a11y/keyboard/navigation/linear-navigation.d.ts +13 -0
  494. package/dist/types/utils/a11y/keyboard/types/IKeyboardController.d.ts +125 -0
  495. package/dist/types/utils/a11y/keyboard/types/index.d.ts +3 -0
  496. package/dist/types/utils/a11y/keyboard/types/types.d.ts +6 -0
  497. package/dist/types/utils/constants/common/Keys.d.ts +28 -14
  498. package/dist/types/utils/dom/elements.d.ts +41 -0
  499. package/dist/types/utils/menu/menu-item.utils.d.ts +2 -2
  500. package/dist/types/utils/testing/helpers.d.ts +8 -0
  501. package/package.json +1 -1
  502. package/components-build/p-B8n1ru5i.js +0 -1
  503. package/components-build/p-CGdxFth9.js +0 -1
  504. package/components-build/p-CrAt6pGl.js +0 -1
  505. package/components-build/p-DCwT43Kz.js +0 -1
  506. package/components-build/p-DIY3CDNL.js +0 -1
  507. package/dist/boreal-web-components/p-0028481c.entry.js +0 -1
  508. package/dist/boreal-web-components/p-1466de58.system.entry.js +0 -1
  509. package/dist/boreal-web-components/p-2b8bd1dd.entry.js +0 -1
  510. package/dist/boreal-web-components/p-32c23246.system.entry.js +0 -1
  511. package/dist/boreal-web-components/p-3fbcc233.entry.js +0 -1
  512. package/dist/boreal-web-components/p-401f1aee.system.entry.js +0 -1
  513. package/dist/boreal-web-components/p-41b48701.system.entry.js +0 -1
  514. package/dist/boreal-web-components/p-41cac1b8.system.entry.js +0 -1
  515. package/dist/boreal-web-components/p-627b19a5.system.entry.js +0 -1
  516. package/dist/boreal-web-components/p-649737e5.entry.js +0 -1
  517. package/dist/boreal-web-components/p-64cb5825.entry.js +0 -1
  518. package/dist/boreal-web-components/p-6a99f4c6.system.entry.js +0 -1
  519. package/dist/boreal-web-components/p-731b88cc.entry.js +0 -1
  520. package/dist/boreal-web-components/p-74c13bed.system.entry.js +0 -1
  521. package/dist/boreal-web-components/p-7f7ac40f.entry.js +0 -1
  522. package/dist/boreal-web-components/p-82d49661.entry.js +0 -1
  523. package/dist/boreal-web-components/p-83ca193e.entry.js +0 -1
  524. package/dist/boreal-web-components/p-BQ_zoZa2.js +0 -1
  525. package/dist/boreal-web-components/p-C8mRvnTA.js +0 -1
  526. package/dist/boreal-web-components/p-CdKFZYxk.system.js +0 -1
  527. package/dist/boreal-web-components/p-CtknSula.system.js +0 -1
  528. package/dist/boreal-web-components/p-CvK2d92c.js +0 -1
  529. package/dist/boreal-web-components/p-CzYQb3pP.js +0 -1
  530. package/dist/boreal-web-components/p-DZcx75cy.system.js +0 -1
  531. package/dist/boreal-web-components/p-Dme-NuTD.system.js +0 -1
  532. package/dist/boreal-web-components/p-ab5ffa15.system.entry.js +0 -1
  533. package/dist/boreal-web-components/p-ba2b625a.system.entry.js +0 -1
  534. package/dist/boreal-web-components/p-bf2ef10b.entry.js +0 -1
  535. package/dist/boreal-web-components/p-c7aee9f4.system.entry.js +0 -1
  536. package/dist/cjs/Keys-DbIXSJF2.js +0 -22
  537. package/dist/collection/components/forms/bds-checkbox/bds-checkbox.css +0 -90
  538. package/dist/esm/Keys-CzYQb3pP.js +0 -20
  539. package/dist/esm-es5/Keys-CzYQb3pP.js +0 -1
  540. package/dist/esm-es5/enum-C8mRvnTA.js +0 -1
  541. package/dist/esm-es5/form-associated.mixin-CvK2d92c.js +0 -1
  542. package/dist/esm-es5/getOffset-DKPjeBHi.js +0 -1
  543. package/dist/types/types/IFormProps.d.ts +0 -25
  544. /package/dist/collection/components/{helpers/types/IDivider.js → actions/bds-button-group/types/IButtonGroup.js} +0 -0
  545. /package/dist/collection/components/{helpers/types/types.js → actions/bds-list-menu/bds-list-menu/types/IListMenu.js} +0 -0
  546. /package/dist/collection/components/{layouts/bds-grid/grid-item → actions/bds-list-menu/bds-list-menu}/types/types.js +0 -0
  547. /package/dist/collection/components/{layouts/bds-grid/grid-item/types/IGridItem.js → forms/bds-checkbox/bds-checkbox-button/types/ICheckboxButton.js} +0 -0
  548. /package/dist/collection/components/{layouts/bds-grid/grid/types/IGrid.js → forms/bds-checkbox/bds-checkbox-card/types/ICheckboxCard.js} +0 -0
  549. /package/dist/collection/components/{layouts/bds-grid/grid/types/types.js → forms/bds-checkbox/bds-checkbox-group/types/ICheckboxGroup.js} +0 -0
  550. /package/dist/collection/{types/IFormProps.js → components/forms/bds-checkbox/bds-checkbox-group/types/types.js} +0 -0
  551. /package/dist/collection/components/helpers/{types → bds-divider/types}/enum.js +0 -0
  552. /package/dist/collection/components/layouts/bds-grid/{grid → bds-grid}/bds-grid.css +0 -0
  553. /package/dist/collection/components/layouts/bds-grid/{grid → bds-grid}/types/enum.js +0 -0
  554. /package/dist/collection/components/layouts/bds-grid/{grid → bds-grid}/types/index.js +0 -0
  555. /package/dist/collection/components/layouts/bds-grid/{grid-item → bds-grid-item}/bds-grid-item.css +0 -0
  556. /package/dist/collection/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/enum.js +0 -0
  557. /package/dist/collection/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/index.js +0 -0
  558. /package/dist/types/components/helpers/{bds-divider.d.ts → bds-divider/bds-divider.d.ts} +0 -0
  559. /package/dist/types/components/helpers/{types → bds-divider/types}/IDivider.d.ts +0 -0
  560. /package/dist/types/components/helpers/{types → bds-divider/types}/enum.d.ts +0 -0
  561. /package/dist/types/components/helpers/{types → bds-divider/types}/types.d.ts +0 -0
  562. /package/dist/types/components/layouts/bds-grid/{grid → bds-grid}/bds-grid.d.ts +0 -0
  563. /package/dist/types/components/layouts/bds-grid/{grid → bds-grid}/types/IGrid.d.ts +0 -0
  564. /package/dist/types/components/layouts/bds-grid/{grid → bds-grid}/types/enum.d.ts +0 -0
  565. /package/dist/types/components/layouts/bds-grid/{grid → bds-grid}/types/index.d.ts +0 -0
  566. /package/dist/types/components/layouts/bds-grid/{grid → bds-grid}/types/types.d.ts +0 -0
  567. /package/dist/types/components/layouts/bds-grid/{grid-item → bds-grid-item}/bds-grid-item.d.ts +0 -0
  568. /package/dist/types/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/IGridItem.d.ts +0 -0
  569. /package/dist/types/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/enum.d.ts +0 -0
  570. /package/dist/types/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/index.d.ts +0 -0
  571. /package/dist/types/components/layouts/bds-grid/{grid-item → bds-grid-item}/types/types.d.ts +0 -0
@@ -0,0 +1,55 @@
1
+ function isHTMLElement(cell) {
2
+ return cell != null;
3
+ }
4
+ /**
5
+ * Applies the **roving tabindex** technique with real DOM focus.
6
+ *
7
+ * Order matters for key-repeat: set `tabindex="0"` and call `.focus()` on the
8
+ * new item first, then demote the previous item. This ensures focus is never
9
+ * momentarily absent between steps.
10
+ */
11
+ export function applyRovingTabindex(items, activeIndex) {
12
+ const next = items[activeIndex];
13
+ if (next == null)
14
+ return;
15
+ const prevIndex = items.findIndex(item => item.getAttribute('tabindex') === '0');
16
+ next.setAttribute('tabindex', '0');
17
+ next.focus();
18
+ if (prevIndex !== -1 && prevIndex !== activeIndex) {
19
+ items[prevIndex].setAttribute('tabindex', '-1');
20
+ }
21
+ }
22
+ /**
23
+ * Initializes the **roving tabindex** technique without stealing focus.
24
+ * Only sets tabindex attributes; use during component initialization to
25
+ * avoid moving DOM focus away from the previously focused element.
26
+ */
27
+ export function initRovingTabindex(items, activeIndex) {
28
+ const activeItem = items[activeIndex];
29
+ if (activeItem == null)
30
+ return;
31
+ items.forEach(item => item.setAttribute('tabindex', '-1'));
32
+ activeItem.setAttribute('tabindex', '0');
33
+ }
34
+ /** Applies roving tabindex to a 2D grid. Moves real DOM focus to `(row, col)`. */
35
+ export function applyGridRovingTabindex(items, row, col) {
36
+ items
37
+ .flat()
38
+ .filter(isHTMLElement)
39
+ .forEach(item => item.setAttribute('tabindex', '-1'));
40
+ const cell = items[row]?.[col];
41
+ if (cell != null) {
42
+ cell.setAttribute('tabindex', '0');
43
+ cell.focus();
44
+ }
45
+ }
46
+ /** Sets tabindex attributes on a 2D grid without stealing focus; use during initialization. */
47
+ export function initGridRovingTabindex(items, row, col) {
48
+ items
49
+ .flat()
50
+ .filter(isHTMLElement)
51
+ .forEach(item => item.setAttribute('tabindex', '-1'));
52
+ const cell = items[row]?.[col];
53
+ if (cell != null)
54
+ cell.setAttribute('tabindex', '0');
55
+ }
@@ -0,0 +1,194 @@
1
+ import { KEYBOARD } from "../../../constants/index";
2
+ import { FOCUS_STRATEGY } from "../_constants";
3
+ import { applyGridRovingTabindex, initGridRovingTabindex } from "../focus/roving-tabindex";
4
+ import { applyGridAriaActiveDescendant } from "../focus/aria-activedescendant";
5
+ import { resolveGridCurrentPos } from "../focus/resolve";
6
+ function isHTMLElement(cell) {
7
+ return cell != null;
8
+ }
9
+ function getPositions(items) {
10
+ const positions = [];
11
+ items.forEach((rowItems, row) => {
12
+ rowItems.forEach((cell, col) => {
13
+ if (isHTMLElement(cell))
14
+ positions.push({ row, col, cell });
15
+ });
16
+ });
17
+ return positions;
18
+ }
19
+ function getRowPositions(items, row) {
20
+ return (items[row]
21
+ ?.map((cell, col) => (isHTMLElement(cell) ? { row, col, cell } : null))
22
+ .filter((pos) => pos != null) ?? []);
23
+ }
24
+ function getCell(items, row, col) {
25
+ if (row < 0 || col < 0)
26
+ return null;
27
+ const cell = items.at(row)?.at(col);
28
+ return isHTMLElement(cell) ? cell : null;
29
+ }
30
+ function closestColumn(positions, col) {
31
+ return positions.reduce((closest, position) => {
32
+ if (closest == null)
33
+ return position;
34
+ return Math.abs(position.col - col) < Math.abs(closest.col - col) ? position : closest;
35
+ }, null);
36
+ }
37
+ function findRowWithCells(items, startRow, step, wrap) {
38
+ const rowCount = items.length;
39
+ let row = startRow;
40
+ for (let checked = 0; checked < rowCount; checked++) {
41
+ if (row < 0 || row >= rowCount) {
42
+ if (!wrap)
43
+ return -1;
44
+ row = row < 0 ? rowCount - 1 : 0;
45
+ }
46
+ if (getRowPositions(items, row).length > 0)
47
+ return row;
48
+ row += step;
49
+ }
50
+ return -1;
51
+ }
52
+ export function setupGridNavigation(config, ctrl) {
53
+ const { wrap = false, focusStrategy = { type: FOCUS_STRATEGY.ROVING_TABINDEX }, initialActiveSelector, onNavigate, onActivate, activateKeys = [KEYBOARD.Enter, KEYBOARD.Space], onPageUp, onPageDown, onEscape, repeatThrottleMs = 100, } = config;
54
+ const strategyType = focusStrategy.type;
55
+ const idPrefix = focusStrategy.type === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT
56
+ ? (focusStrategy.idPrefix ?? `${ctrl.root?.tagName.toLowerCase() ?? 'bds-grid'}-item`)
57
+ : 'bds-grid-item';
58
+ ctrl.onStrategyResolved(strategyType, idPrefix);
59
+ const resolveItems = typeof config.items === 'function' ? config.items : () => config.items;
60
+ const applyFocus = (items, row, col) => {
61
+ const cell = items[row]?.[col];
62
+ if (cell == null)
63
+ return;
64
+ if (onNavigate != null) {
65
+ onNavigate(row, col, items);
66
+ return;
67
+ }
68
+ if (strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
69
+ if (ctrl.root != null)
70
+ applyGridAriaActiveDescendant(items, row, col, ctrl.root, idPrefix);
71
+ }
72
+ else {
73
+ applyGridRovingTabindex(items, row, col);
74
+ }
75
+ };
76
+ const move = (dRow, dCol) => {
77
+ const items = resolveItems();
78
+ const positions = getPositions(items);
79
+ if (positions.length === 0)
80
+ return;
81
+ let { row, col } = resolveGridCurrentPos(items, strategyType, ctrl.root);
82
+ const currentCell = getCell(items, row, col);
83
+ if (!isHTMLElement(currentCell)) {
84
+ row = positions[0].row;
85
+ col = positions[0].col;
86
+ }
87
+ if (dRow !== 0) {
88
+ const nextRow = findRowWithCells(items, row + dRow, dRow > 0 ? 1 : -1, wrap);
89
+ if (nextRow === -1)
90
+ return;
91
+ const nextCell = closestColumn(getRowPositions(items, nextRow), col);
92
+ if (nextCell != null)
93
+ applyFocus(items, nextCell.row, nextCell.col);
94
+ return;
95
+ }
96
+ const rowPositions = getRowPositions(items, row);
97
+ const currentRowIndex = rowPositions.findIndex(position => position.col === col);
98
+ const nextRowIndex = currentRowIndex + dCol;
99
+ if (nextRowIndex >= 0 && nextRowIndex < rowPositions.length) {
100
+ const nextCell = rowPositions[nextRowIndex];
101
+ applyFocus(items, nextCell.row, nextCell.col);
102
+ return;
103
+ }
104
+ if (wrap && items.length > 1) {
105
+ const nextRow = findRowWithCells(items, row + dCol, dCol > 0 ? 1 : -1, true);
106
+ if (nextRow === -1)
107
+ return;
108
+ const nextRowPositions = getRowPositions(items, nextRow);
109
+ const nextCell = dCol > 0 ? nextRowPositions[0] : nextRowPositions[nextRowPositions.length - 1];
110
+ applyFocus(items, nextCell.row, nextCell.col);
111
+ return;
112
+ }
113
+ const edgeCell = dCol > 0 ? rowPositions[rowPositions.length - 1] : rowPositions[0];
114
+ applyFocus(items, edgeCell.row, edgeCell.col);
115
+ };
116
+ const moveToEdge = (boundary) => {
117
+ const items = resolveItems();
118
+ const positions = getPositions(items);
119
+ if (positions.length === 0)
120
+ return;
121
+ let { row } = resolveGridCurrentPos(items, strategyType, ctrl.root);
122
+ if (row === -1 || getRowPositions(items, row).length === 0)
123
+ row = positions[0].row;
124
+ switch (boundary) {
125
+ case 'row-start': {
126
+ const first = getRowPositions(items, row)[0];
127
+ applyFocus(items, first.row, first.col);
128
+ break;
129
+ }
130
+ case 'row-end': {
131
+ const rowPositions = getRowPositions(items, row);
132
+ const last = rowPositions[rowPositions.length - 1];
133
+ applyFocus(items, last.row, last.col);
134
+ break;
135
+ }
136
+ case 'grid-start':
137
+ applyFocus(items, positions[0].row, positions[0].col);
138
+ break;
139
+ case 'grid-end': {
140
+ const last = positions[positions.length - 1];
141
+ applyFocus(items, last.row, last.col);
142
+ break;
143
+ }
144
+ }
145
+ };
146
+ let lastRepeatTime = 0;
147
+ const withThrottle = (fn) => (e) => {
148
+ if (e.repeat && repeatThrottleMs > 0) {
149
+ const now = Date.now();
150
+ if (now - lastRepeatTime < repeatThrottleMs)
151
+ return;
152
+ lastRepeatTime = now;
153
+ }
154
+ fn();
155
+ };
156
+ ctrl.register(KEYBOARD.ArrowLeft, withThrottle(() => move(0, -1)), { repeat: true });
157
+ ctrl.register(KEYBOARD.ArrowRight, withThrottle(() => move(0, +1)), { repeat: true });
158
+ ctrl.register(KEYBOARD.ArrowUp, withThrottle(() => move(-1, 0)), { repeat: true });
159
+ ctrl.register(KEYBOARD.ArrowDown, withThrottle(() => move(+1, 0)), { repeat: true });
160
+ ctrl.register(KEYBOARD.Home, () => moveToEdge('row-start'));
161
+ ctrl.register(KEYBOARD.End, () => moveToEdge('row-end'));
162
+ ctrl.register(['control', KEYBOARD.Home], () => moveToEdge('grid-start'));
163
+ ctrl.register(['control', KEYBOARD.End], () => moveToEdge('grid-end'));
164
+ if (onActivate != null && activateKeys.length > 0)
165
+ ctrl.register(activateKeys, onActivate);
166
+ if (onPageUp != null)
167
+ ctrl.register(KEYBOARD.PageUp, onPageUp);
168
+ if (onPageDown != null)
169
+ ctrl.register(KEYBOARD.PageDown, onPageDown);
170
+ if (onEscape != null)
171
+ ctrl.register(KEYBOARD.Escape, onEscape);
172
+ if (ctrl.root != null && ctrl.abortController != null) {
173
+ const items = resolveItems();
174
+ const positions = getPositions(items);
175
+ if (positions.length > 0) {
176
+ const selected = initialActiveSelector != null
177
+ ? positions.find(position => position.cell.matches(initialActiveSelector))
178
+ : undefined;
179
+ const initial = selected ?? positions[0];
180
+ if (strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
181
+ applyGridAriaActiveDescendant(items, initial.row, initial.col, ctrl.root, idPrefix);
182
+ const root = ctrl.root;
183
+ const { signal } = ctrl.abortController;
184
+ root.addEventListener('mousedown', (e) => {
185
+ e.preventDefault();
186
+ root.focus();
187
+ }, { signal });
188
+ }
189
+ else {
190
+ initGridRovingTabindex(items, initial.row, initial.col);
191
+ }
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,137 @@
1
+ import { KEYBOARD } from "../../../constants/index";
2
+ import { KEYBOARD_ORIENTATIONS, NAV_BOUNDARY, FOCUS_STRATEGY } from "../_constants";
3
+ import { applyRovingTabindex, initRovingTabindex } from "../focus/roving-tabindex";
4
+ import { applyAriaActiveDescendant } from "../focus/aria-activedescendant";
5
+ import { resolveCurrentIndex } from "../focus/resolve";
6
+ // ─── Setup ────────────────────────────────────────────────────────────────────
7
+ /**
8
+ * Registers all key bindings for linear list navigation on the given controller.
9
+ * Called internally by `KeyboardController.setLinearNavigation`.
10
+ */
11
+ export function setupLinearNavigation(config, ctrl) {
12
+ const { orientation = KEYBOARD_ORIENTATIONS.BOTH, wrap = true, focusStrategy = { type: FOCUS_STRATEGY.ROVING_TABINDEX }, initialActiveSelector, onNavigate, onItemActive, onActivate, activateKeys = [KEYBOARD.Enter, KEYBOARD.Space], onEscape, repeatThrottleMs = 100, } = config;
13
+ const strategyType = focusStrategy.type;
14
+ const idPrefix = focusStrategy.type === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT
15
+ ? (focusStrategy.idPrefix ?? `${ctrl.root?.tagName.toLowerCase() ?? 'bds-nav'}-item`)
16
+ : 'bds-nav-item';
17
+ ctrl.onStrategyResolved(strategyType, idPrefix);
18
+ const resolveItems = typeof config.items === 'function'
19
+ ? config.items
20
+ : () => Array.from(ctrl.root?.querySelectorAll(config.items) ?? []);
21
+ let prevIndex = -1;
22
+ const move = (delta, eventTarget) => {
23
+ const items = resolveItems();
24
+ if (items.length === 0)
25
+ return;
26
+ let current = resolveCurrentIndex(items, strategyType, ctrl.root);
27
+ // Fallback: in test environments document.activeElement may not reflect
28
+ // the dispatched event target, so use the event target when current is unresolved.
29
+ if (current === -1 && eventTarget != null) {
30
+ current = items.indexOf(eventTarget);
31
+ }
32
+ let next;
33
+ if (delta === NAV_BOUNDARY.FIRST) {
34
+ next = 0;
35
+ }
36
+ else if (delta === NAV_BOUNDARY.LAST) {
37
+ next = items.length - 1;
38
+ }
39
+ else {
40
+ // When current is -1 (nothing active yet), treat as position -1 so
41
+ // +1 lands on 0 and -1 lands on the last item (with wrap) or 0 (no wrap).
42
+ const raw = (current === -1 ? (delta === 1 ? -1 : 0) : current) + delta;
43
+ if (raw < 0)
44
+ next = wrap ? items.length - 1 : 0;
45
+ else if (raw >= items.length)
46
+ next = wrap ? 0 : items.length - 1;
47
+ else
48
+ next = raw;
49
+ }
50
+ // Call onItemActive before focus strategies (so component can update state).
51
+ // Only used with aria-activedescendant since roving-tabindex uses :focus-visible.
52
+ if (onItemActive != null && strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
53
+ const prevItem = prevIndex >= 0 ? items[prevIndex] : null;
54
+ onItemActive(items[next], prevItem);
55
+ }
56
+ if (onNavigate != null) {
57
+ onNavigate(next, items);
58
+ }
59
+ else if (strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
60
+ if (ctrl.root != null)
61
+ applyAriaActiveDescendant(items, next, ctrl.root, idPrefix);
62
+ }
63
+ else {
64
+ applyRovingTabindex(items, next);
65
+ }
66
+ prevIndex = next;
67
+ };
68
+ const target = (e) => e.target;
69
+ // Throttle for key-repeat: the browser fires repeat events every ~50 ms
70
+ // (20/sec), which is too fast for smooth visual navigation. We limit repeat
71
+ // events to at most one per `repeatThrottleMs` (default 100 ms ≈ 10/sec).
72
+ let lastRepeatTime = 0;
73
+ const withThrottle = (fn) => (e) => {
74
+ if (e.repeat && repeatThrottleMs > 0) {
75
+ const now = Date.now();
76
+ if (now - lastRepeatTime < repeatThrottleMs)
77
+ return;
78
+ lastRepeatTime = now;
79
+ }
80
+ fn(e);
81
+ };
82
+ // Arrow keys always repeat — holding a key navigates continuously.
83
+ if (orientation === KEYBOARD_ORIENTATIONS.HORIZONTAL || orientation === KEYBOARD_ORIENTATIONS.BOTH) {
84
+ ctrl.register(KEYBOARD.ArrowLeft, withThrottle(e => move(-1, target(e))), { repeat: true });
85
+ ctrl.register(KEYBOARD.ArrowRight, withThrottle(e => move(+1, target(e))), { repeat: true });
86
+ }
87
+ if (orientation === KEYBOARD_ORIENTATIONS.VERTICAL || orientation === KEYBOARD_ORIENTATIONS.BOTH) {
88
+ ctrl.register(KEYBOARD.ArrowUp, withThrottle(e => move(-1, target(e))), { repeat: true });
89
+ ctrl.register(KEYBOARD.ArrowDown, withThrottle(e => move(+1, target(e))), { repeat: true });
90
+ }
91
+ ctrl.register(KEYBOARD.Home, () => move(NAV_BOUNDARY.FIRST));
92
+ ctrl.register(KEYBOARD.End, () => move(NAV_BOUNDARY.LAST));
93
+ if (onActivate != null && activateKeys.length > 0)
94
+ ctrl.register(activateKeys, onActivate);
95
+ if (onEscape != null)
96
+ ctrl.register(KEYBOARD.Escape, onEscape);
97
+ if (ctrl.root != null && ctrl.abortController != null) {
98
+ const root = ctrl.root;
99
+ const { signal } = ctrl.abortController;
100
+ if (strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
101
+ // Keep DOM focus on the container at all times (ARIA APG listbox pattern).
102
+ root.addEventListener('mousedown', (e) => {
103
+ e.preventDefault();
104
+ root.focus();
105
+ }, { signal });
106
+ }
107
+ // Auto-initialize focus state so the component doesn't need to manage
108
+ // tabIndex or aria-activedescendant manually after setLinearNavigation.
109
+ const items = resolveItems();
110
+ if (items.length > 0) {
111
+ let initial = resolveCurrentIndex(items, strategyType, root);
112
+ if (initial === -1 && initialActiveSelector != null) {
113
+ initial = items.findIndex(item => item.matches(initialActiveSelector));
114
+ }
115
+ // For roving-tabindex: always fall back to 0 — something must have tabindex="0".
116
+ // For aria-activedescendant: only initialize if a match was found.
117
+ const initialIndex = initial !== -1 ? initial : strategyType === FOCUS_STRATEGY.ROVING_TABINDEX ? 0 : -1;
118
+ if (initialIndex !== -1) {
119
+ if (onItemActive != null && strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
120
+ onItemActive(items[initialIndex], null);
121
+ }
122
+ prevIndex = initialIndex;
123
+ if (strategyType === FOCUS_STRATEGY.ARIA_ACTIVE_DESCENDANT) {
124
+ applyAriaActiveDescendant(items, initialIndex, root, idPrefix);
125
+ }
126
+ else {
127
+ initRovingTabindex(items, initialIndex);
128
+ }
129
+ }
130
+ else {
131
+ // aria-activedescendant with no pre-selected item: ensure items are not
132
+ // directly focusable (container holds focus via tabindex="0").
133
+ items.forEach(item => item.setAttribute('tabindex', '-1'));
134
+ }
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,2 @@
1
+ export * from './types';
2
+ export * from './IKeyboardController';
@@ -0,0 +1 @@
1
+ export {};
@@ -1,28 +1,33 @@
1
1
  /**
2
- * Default keyboard keys.
3
- * Add more keys to the `KEYBOARD` object to add more keyboard shortcuts.
4
- * This prevents key name typing errors and provides a centralized definition of the keys available for implementation.
5
- * Can use this page to find the keycodes: https://keycode.info/
2
+ * Keyboard key values matching `KeyboardEvent.key` exactly (W3C UI Events spec).
3
+ * Use in direct `event.key` comparisons and `.set()` bindings.
6
4
  */
7
5
  export const KEYBOARD = {
8
- Enter: {
9
- key: 'Enter',
10
- code: 13,
11
- },
12
- Escape: {
13
- key: 'Escape',
14
- code: 27,
15
- },
16
- Space: {
17
- key: ' ',
18
- code: 32,
19
- },
20
- ArrowUp: {
21
- key: 'ArrowUp',
22
- code: 38,
23
- },
24
- ArrowDown: {
25
- key: 'ArrowDown',
26
- code: 40,
27
- },
6
+ // Navigation
7
+ ArrowUp: 'ArrowUp',
8
+ ArrowDown: 'ArrowDown',
9
+ ArrowLeft: 'ArrowLeft',
10
+ ArrowRight: 'ArrowRight',
11
+ Home: 'Home',
12
+ End: 'End',
13
+ // Action
14
+ Enter: 'Enter',
15
+ Escape: 'Escape',
16
+ Space: ' ',
17
+ Delete: 'Delete',
18
+ Backspace: 'Backspace',
19
+ // Paging
20
+ PageUp: 'PageUp',
21
+ PageDown: 'PageDown',
22
+ };
23
+ /**
24
+ * Modifier key identifiers in lowercase — match `event.key.toLowerCase()`.
25
+ * Never compared against `event.key` directly; detected via `event.altKey`, `event.ctrlKey`, etc.
26
+ * Use in `.set()` chord bindings: `.set([KEYBOARD_MODIFIERS.Control, KEYBOARD.ArrowRight], handler)`.
27
+ */
28
+ export const KEYBOARD_MODIFIERS = {
29
+ Alt: 'alt',
30
+ Control: 'control',
31
+ Meta: 'meta',
32
+ Shift: 'shift',
28
33
  };
@@ -20,3 +20,66 @@ export function hasSlotContent(el, slotName) {
20
20
  return false;
21
21
  });
22
22
  }
23
+ /**
24
+ * Method to return clean text from html element, removing extra spaces and line breaks.
25
+ * Removing tags and getting only the text content.
26
+ *
27
+ * @param el - HTML element to extract text from.
28
+ * @returns string with the clean text content of the element.
29
+ */
30
+ export function getCleanText(el) {
31
+ const textContent = el;
32
+ if (textContent !== null) {
33
+ return textContent.textContent?.trim() || '';
34
+ }
35
+ return '';
36
+ }
37
+ /**
38
+ * Method to update a property of an HTML element, checking if the element is not null before updating.
39
+ *
40
+ * @param el - HTML element to update.
41
+ * @param prop - Property name to update.
42
+ * @param value - Value to set for the property.
43
+ */
44
+ export function updateElementProp(el, prop, value) {
45
+ if (el !== null) {
46
+ el[prop] = value;
47
+ }
48
+ }
49
+ /**
50
+ * Method to update an attribute of an HTML element, checking if the element is not null before updating.
51
+ * This method is used to update attributes that are not reflected as properties in the DOM, such as ARIA attributes.
52
+ *
53
+ * @param el - HTML element to update.
54
+ * @param attr - Attribute name to update.
55
+ * @param value - Value to set for the attribute.
56
+ */
57
+ export function updateElementAttr(el, attr, value) {
58
+ if (el !== null && el !== undefined) {
59
+ el.setAttribute(attr, value);
60
+ }
61
+ }
62
+ /**
63
+ * Method to add an event listener to an HTML element, checking if the element is not null before adding the listener.
64
+ *
65
+ * @param el - HTML element to add the event listener to.
66
+ * @param event - Event name to listen for.
67
+ * @param handler - Event handler function or object to handle the event.
68
+ */
69
+ export function addElementListener(el, event, handler) {
70
+ if (el !== null && el !== undefined) {
71
+ el.addEventListener(event, handler);
72
+ }
73
+ }
74
+ /**
75
+ * Method to remove an event listener from an HTML element, checking if the element is not null before removing the listener.
76
+ *
77
+ * @param el - HTML element to remove the event listener from.
78
+ * @param event - Event name to stop listening for.
79
+ * @param handler - Event handler function or object that was used to handle the event.
80
+ */
81
+ export function removeElementListener(el, event, handler) {
82
+ if (el !== null && el !== undefined) {
83
+ el.removeEventListener(event, handler);
84
+ }
85
+ }
@@ -25,20 +25,18 @@ export function resolveAriaSelected(role, selected) {
25
25
  * Resolves the tabIndex attribute for keyboard navigation.
26
26
  * @param {MenuItemRole} role - The role of the item.
27
27
  * @param {boolean} disabled - Whether the item is currently disabled.
28
- * @param {boolean} selected - Whether the item is currently selected.
29
28
  * @param {boolean} active - Whether the item is currently active.
30
29
  * @returns {number} - Returns 0 for focusable menu items, or -1 for disabled/options.
31
30
  * @example
32
31
  * const index = resolveTabIndex('menuitem', false); // returns 0
33
32
  * const indexDisabled = resolveTabIndex('menuitem', true); // returns -1
34
33
  */
35
- export function resolveTabIndex(role, disabled, selected, active) {
34
+ export function resolveTabIndex(role, disabled, active) {
36
35
  if (disabled)
37
36
  return -1;
38
- if (role === 'option')
39
- return selected || active ? 0 : -1;
40
- if (role === 'menuitem')
37
+ if (role === 'option' || role === 'menuitem') {
41
38
  return active ? 0 : -1;
39
+ }
42
40
  return -1;
43
41
  }
44
42
  /**
@@ -46,6 +44,7 @@ export function resolveTabIndex(role, disabled, selected, active) {
46
44
  * @param {KeyboardEvent} event - The keyboard event object from the listener.
47
45
  * @param {HTMLElement[]} items - An array of focusable HTML elements within the menu.
48
46
  * @param {number} currentIndex - The index of the currently focused item.
47
+ * @param {boolean} selected - The current selection state of the item (used for activation logic).
49
48
  * @returns {void}
50
49
  * @example
51
50
  * handleMenuKeyNavigation(event, menuItems, 2);
@@ -55,16 +54,18 @@ export function handleMenuKeyNavigation(event, items, currentIndex) {
55
54
  return;
56
55
  let nextIndex = -1;
57
56
  switch (event.key) {
58
- case KEYBOARD.ArrowDown.key:
57
+ case KEYBOARD.ArrowDown:
59
58
  nextIndex = (currentIndex + 1) % items.length;
60
59
  break;
61
- case KEYBOARD.ArrowUp.key:
60
+ case KEYBOARD.ArrowUp:
62
61
  nextIndex = (currentIndex - 1 + items.length) % items.length;
63
62
  break;
64
63
  default:
65
64
  return;
66
65
  }
66
+ items.forEach(item => item.removeAttribute('active-item'));
67
67
  items[nextIndex].focus();
68
+ items[nextIndex].setAttribute('active-item', '');
68
69
  }
69
70
  /** Prevents default browser behavior for specific navigation keys.
70
71
  * @param {KeyboardEvent} e - The keyboard event to evaluate.
@@ -74,7 +75,7 @@ export function handleMenuKeyNavigation(event, items, currentIndex) {
74
75
  * preventNavigationKeys(event);
75
76
  */
76
77
  export function preventNavigationKeys(e) {
77
- const navigationKeys = [KEYBOARD.ArrowDown.key, KEYBOARD.ArrowUp.key, KEYBOARD.Enter.key, KEYBOARD.Space.key];
78
+ const navigationKeys = [KEYBOARD.ArrowDown, KEYBOARD.ArrowUp, KEYBOARD.Enter, KEYBOARD.Space];
78
79
  if (navigationKeys.includes(e.key)) {
79
80
  e.preventDefault();
80
81
  }
@@ -14,3 +14,13 @@ export function assertExists(condition, message) {
14
14
  throw new Error(message);
15
15
  }
16
16
  }
17
+ /**
18
+ * Dispatches a `keydown` event on the given element.
19
+ *
20
+ * @param el The target element.
21
+ * @param key The `KeyboardEvent.key` value to dispatch.
22
+ * @param init Optional overrides merged on top of the defaults (`bubbles: true`, `cancelable: true`).
23
+ */
24
+ export function dispatchKey(el, key, init = {}) {
25
+ el.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, cancelable: true, ...init, key }));
26
+ }