@boostdev/design-system-components 2.7.1 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (535) hide show
  1. package/AGENTS.md +54 -46
  2. package/README.md +34 -20
  3. package/dist/client.cjs +1317 -779
  4. package/dist/client.css +1029 -812
  5. package/dist/client.d.cts +88 -26
  6. package/dist/client.d.ts +88 -26
  7. package/dist/client.js +1278 -732
  8. package/dist/index.cjs +1317 -779
  9. package/dist/index.css +1029 -812
  10. package/dist/index.d.cts +88 -26
  11. package/dist/index.d.ts +88 -26
  12. package/dist/index.js +1278 -732
  13. package/dist/web-components/chunk-2OLVQUBU.js +193 -0
  14. package/dist/web-components/chunk-3AY2YKCM.js +223 -0
  15. package/dist/web-components/chunk-3WAV6MDN.js +212 -0
  16. package/dist/web-components/{chunk-CZBIVR4V.js → chunk-47AT5KZD.js} +88 -16
  17. package/dist/web-components/chunk-4A2YYTYN.js +93 -0
  18. package/dist/web-components/{chunk-Q4T5BJT6.js → chunk-62NK3ZSC.js} +18 -3
  19. package/dist/web-components/chunk-66M6ETWD.js +77 -0
  20. package/dist/web-components/{chunk-NCPQ7AF3.js → chunk-6G22I2CK.js} +18 -3
  21. package/dist/web-components/{chunk-QDST57JC.js → chunk-7ZOJ7N4E.js} +14 -4
  22. package/dist/web-components/{chunk-5R6IFELV.js → chunk-AIBOHNDU.js} +11 -1
  23. package/dist/web-components/{chunk-ITHLKR7Q.js → chunk-AP4RDUL2.js} +16 -5
  24. package/dist/web-components/{chunk-QWPACK5L.js → chunk-BPYKZVDK.js} +11 -1
  25. package/dist/web-components/{chunk-YLVTEY23.js → chunk-BTCMJQKB.js} +53 -21
  26. package/dist/web-components/chunk-CUKQ2L5B.js +245 -0
  27. package/dist/web-components/chunk-DIZDCL7Z.js +14 -0
  28. package/dist/web-components/{chunk-PC3IOQAH.js → chunk-DV5T43ZC.js} +27 -7
  29. package/dist/web-components/{chunk-2QA62WCQ.js → chunk-EF7IVYTY.js} +10 -0
  30. package/dist/web-components/{chunk-L3XHOMN6.js → chunk-F3ZDNHZZ.js} +26 -1
  31. package/dist/web-components/chunk-FEDABOR5.js +248 -0
  32. package/dist/web-components/{chunk-6I2DBFQ7.js → chunk-HGFCJXOQ.js} +36 -5
  33. package/dist/web-components/{chunk-SOQQ7RVJ.js → chunk-IPGHUCJT.js} +23 -8
  34. package/dist/web-components/chunk-ITD2MV5K.js +392 -0
  35. package/dist/web-components/{chunk-CM3KYZ6Z.js → chunk-JH6LQKLK.js} +78 -6
  36. package/dist/web-components/chunk-JMCXAAFK.js +120 -0
  37. package/dist/web-components/{chunk-KUI55GFB.js → chunk-JUPCZVVW.js} +50 -18
  38. package/dist/web-components/chunk-JV5QT2OU.js +146 -0
  39. package/dist/web-components/{chunk-3GFWLSLS.js → chunk-KA3VPKMY.js} +29 -6
  40. package/dist/web-components/{chunk-CR5PGUHV.js → chunk-KJGRFDFI.js} +26 -11
  41. package/dist/web-components/{chunk-PY62FTRW.js → chunk-KZPRFY5P.js} +68 -33
  42. package/dist/web-components/{chunk-X46KL5BK.js → chunk-LDIPCTRN.js} +18 -1
  43. package/dist/web-components/chunk-M3ECULRH.js +174 -0
  44. package/dist/web-components/chunk-NBN2ENWJ.js +90 -0
  45. package/dist/web-components/chunk-NIN3JO6Q.js +189 -0
  46. package/dist/web-components/{chunk-2FGATTGT.js → chunk-NTQ4TCUT.js} +76 -55
  47. package/dist/web-components/chunk-OY74D4X6.js +302 -0
  48. package/dist/web-components/{chunk-3S42DZ7W.js → chunk-P24JYC5V.js} +7 -0
  49. package/dist/web-components/{chunk-BKIHQYJR.js → chunk-PXPPKCLT.js} +17 -2
  50. package/dist/web-components/{chunk-TQ7IQ4GZ.js → chunk-QEF2IRID.js} +71 -29
  51. package/dist/web-components/chunk-QZAIRJ75.js +111 -0
  52. package/dist/web-components/{chunk-6I3CFC26.js → chunk-RSZ3BWBK.js} +20 -5
  53. package/dist/web-components/chunk-RVF7W653.js +101 -0
  54. package/dist/web-components/chunk-SEO2F5KJ.js +234 -0
  55. package/dist/web-components/{chunk-VMMVWLXL.js → chunk-SFZ6Q4BP.js} +10 -0
  56. package/dist/web-components/{chunk-LY62SAVN.js → chunk-SYNLFKD3.js} +12 -2
  57. package/dist/web-components/chunk-TMWXRHGF.js +192 -0
  58. package/dist/web-components/{chunk-65JXQOBA.js → chunk-U3YZE6R6.js} +51 -7
  59. package/dist/web-components/chunk-UO7ROSHD.js +424 -0
  60. package/dist/web-components/chunk-VANAKB6D.js +152 -0
  61. package/dist/web-components/{chunk-PXZWYO6Z.js → chunk-VED2DFJ6.js} +108 -29
  62. package/dist/web-components/chunk-W6H5ID2U.js +161 -0
  63. package/dist/web-components/{chunk-57TRNCWQ.js → chunk-WFVKU4GX.js} +22 -11
  64. package/dist/web-components/{chunk-OQTRTMAB.js → chunk-WIBAN7KP.js} +10 -0
  65. package/dist/web-components/chunk-XI7KRAH7.js +54 -0
  66. package/dist/web-components/{chunk-F5E3IT7G.js → chunk-XIZWAWMJ.js} +50 -11
  67. package/dist/web-components/{chunk-FXURM6D5.js → chunk-YFAXGRPR.js} +10 -0
  68. package/dist/web-components/globals.js +1 -1
  69. package/dist/web-components/index.d.ts +77 -707
  70. package/dist/web-components/index.js +339 -2066
  71. package/dist/web-components/interaction/bds-accordion-item.js +1 -1
  72. package/dist/web-components/interaction/bds-accordion.js +1 -1
  73. package/dist/web-components/interaction/bds-button.d.ts +10 -2
  74. package/dist/web-components/interaction/bds-button.js +1 -1
  75. package/dist/web-components/interaction/bds-collapsible.d.ts +7 -2
  76. package/dist/web-components/interaction/bds-collapsible.js +1 -1
  77. package/dist/web-components/interaction/bds-dialog.d.ts +11 -3
  78. package/dist/web-components/interaction/bds-dialog.js +1 -1
  79. package/dist/web-components/interaction/bds-drawer.d.ts +7 -1
  80. package/dist/web-components/interaction/bds-drawer.js +1 -1
  81. package/dist/web-components/interaction/bds-dropdown-menu-item.d.ts +51 -0
  82. package/dist/web-components/interaction/bds-dropdown-menu-item.js +7 -0
  83. package/dist/web-components/interaction/bds-dropdown-menu.d.ts +70 -0
  84. package/dist/web-components/interaction/bds-dropdown-menu.js +7 -0
  85. package/dist/web-components/interaction/bds-popover.d.ts +14 -3
  86. package/dist/web-components/interaction/bds-popover.js +1 -1
  87. package/dist/web-components/interaction/bds-skip-link.js +1 -1
  88. package/dist/web-components/interaction/bds-tab-panel.js +1 -1
  89. package/dist/web-components/interaction/bds-tab.js +1 -1
  90. package/dist/web-components/interaction/bds-tabs.d.ts +1 -0
  91. package/dist/web-components/interaction/bds-tabs.js +1 -1
  92. package/dist/web-components/interaction/bds-toast-provider.js +1 -1
  93. package/dist/web-components/interaction/bds-tooltip.d.ts +19 -3
  94. package/dist/web-components/interaction/bds-tooltip.js +1 -1
  95. package/dist/web-components/interaction/form/bds-checkbox-group.d.ts +83 -0
  96. package/dist/web-components/interaction/form/bds-checkbox-group.js +7 -0
  97. package/dist/web-components/interaction/form/bds-checkbox.d.ts +6 -0
  98. package/dist/web-components/interaction/form/bds-checkbox.js +1 -1
  99. package/dist/web-components/interaction/form/bds-combobox.d.ts +18 -0
  100. package/dist/web-components/interaction/form/bds-combobox.js +1 -1
  101. package/dist/web-components/interaction/form/bds-field-group.d.ts +89 -0
  102. package/dist/web-components/interaction/form/bds-field-group.js +7 -0
  103. package/dist/web-components/interaction/form/bds-file-input.d.ts +1 -1
  104. package/dist/web-components/interaction/form/bds-file-input.js +1 -1
  105. package/dist/web-components/interaction/form/bds-form-input.d.ts +92 -0
  106. package/dist/web-components/interaction/form/bds-form-input.js +7 -0
  107. package/dist/web-components/interaction/form/bds-number-input.d.ts +18 -1
  108. package/dist/web-components/interaction/form/bds-number-input.js +1 -1
  109. package/dist/web-components/interaction/form/bds-radio-group.d.ts +81 -0
  110. package/dist/web-components/interaction/form/bds-radio-group.js +7 -0
  111. package/dist/web-components/interaction/form/bds-radio.d.ts +34 -6
  112. package/dist/web-components/interaction/form/bds-radio.js +1 -1
  113. package/dist/web-components/interaction/form/bds-segmented-control.d.ts +4 -4
  114. package/dist/web-components/interaction/form/bds-segmented-control.js +1 -1
  115. package/dist/web-components/interaction/form/bds-select.d.ts +22 -1
  116. package/dist/web-components/interaction/form/bds-select.js +1 -1
  117. package/dist/web-components/interaction/form/bds-slider.d.ts +42 -10
  118. package/dist/web-components/interaction/form/bds-slider.js +1 -1
  119. package/dist/web-components/interaction/form/bds-switch.d.ts +20 -0
  120. package/dist/web-components/interaction/form/bds-switch.js +1 -1
  121. package/dist/web-components/interaction/form/bds-textarea.d.ts +23 -3
  122. package/dist/web-components/interaction/form/bds-textarea.js +1 -1
  123. package/dist/web-components/layout/bds-grid-item.d.ts +63 -0
  124. package/dist/web-components/layout/bds-grid-item.js +7 -0
  125. package/dist/web-components/layout/bds-grid.d.ts +108 -0
  126. package/dist/web-components/layout/bds-grid.js +7 -0
  127. package/dist/web-components/ui/bds-alert.d.ts +16 -2
  128. package/dist/web-components/ui/bds-alert.js +1 -1
  129. package/dist/web-components/ui/bds-avatar.d.ts +2 -1
  130. package/dist/web-components/ui/bds-avatar.js +1 -1
  131. package/dist/web-components/ui/bds-badge.js +1 -1
  132. package/dist/web-components/ui/bds-breadcrumb.d.ts +3 -1
  133. package/dist/web-components/ui/bds-breadcrumb.js +1 -1
  134. package/dist/web-components/ui/bds-button-container.d.ts +52 -0
  135. package/dist/web-components/ui/bds-button-container.js +7 -0
  136. package/dist/web-components/ui/bds-button-group.d.ts +21 -0
  137. package/dist/web-components/ui/bds-button-group.js +8 -0
  138. package/dist/web-components/ui/bds-calendar.d.ts +121 -0
  139. package/dist/web-components/ui/bds-calendar.js +7 -0
  140. package/dist/web-components/ui/bds-card.d.ts +12 -3
  141. package/dist/web-components/ui/bds-card.js +1 -1
  142. package/dist/web-components/ui/bds-carousel.d.ts +98 -0
  143. package/dist/web-components/ui/bds-carousel.js +7 -0
  144. package/dist/web-components/ui/bds-description-list.js +1 -1
  145. package/dist/web-components/ui/bds-icon-wrapper.d.ts +0 -9
  146. package/dist/web-components/ui/bds-icon-wrapper.js +1 -1
  147. package/dist/web-components/ui/bds-link.js +1 -1
  148. package/dist/web-components/ui/bds-loading.js +1 -1
  149. package/dist/web-components/ui/bds-notification-banner.js +1 -1
  150. package/dist/web-components/ui/bds-pagination.d.ts +47 -0
  151. package/dist/web-components/ui/bds-pagination.js +7 -0
  152. package/dist/web-components/ui/bds-progress-circle.d.ts +3 -1
  153. package/dist/web-components/ui/bds-progress-circle.js +1 -1
  154. package/dist/web-components/ui/bds-progress.d.ts +3 -1
  155. package/dist/web-components/ui/bds-progress.js +1 -1
  156. package/dist/web-components/ui/bds-rating.js +1 -1
  157. package/dist/web-components/ui/bds-section-header.d.ts +18 -4
  158. package/dist/web-components/ui/bds-section-header.js +1 -1
  159. package/dist/web-components/ui/bds-separator.js +1 -1
  160. package/dist/web-components/ui/bds-skeleton.js +1 -1
  161. package/dist/web-components/ui/bds-table.d.ts +52 -0
  162. package/dist/web-components/ui/bds-table.js +7 -0
  163. package/dist/web-components/ui/bds-typography.d.ts +1 -0
  164. package/dist/web-components/ui/bds-typography.js +1 -1
  165. package/package.json +60 -3
  166. package/src/components/interaction/Button/Button.module.css +23 -14
  167. package/src/components/interaction/Button/Button.spec.tsx +20 -0
  168. package/src/components/interaction/Button/Button.tsx +2 -2
  169. package/src/components/interaction/Command/Command.mdx +5 -2
  170. package/src/components/interaction/Command/Command.module.css +23 -7
  171. package/src/components/interaction/Command/Command.spec.tsx +35 -0
  172. package/src/components/interaction/Command/Command.tsx +15 -4
  173. package/src/components/interaction/Command/index.ts +1 -1
  174. package/src/components/interaction/Dialog/Dialog.mdx +4 -4
  175. package/src/components/interaction/Dialog/Dialog.module.css +20 -0
  176. package/src/components/interaction/Dialog/Dialog.spec.tsx +20 -0
  177. package/src/components/interaction/Dialog/Dialog.tsx +8 -3
  178. package/src/components/interaction/Dialog/index.ts +1 -0
  179. package/src/components/interaction/Drawer/Drawer.mdx +5 -2
  180. package/src/components/interaction/Drawer/Drawer.module.css +34 -3
  181. package/src/components/interaction/Drawer/Drawer.spec.tsx +67 -1
  182. package/src/components/interaction/Drawer/Drawer.tsx +30 -12
  183. package/src/components/interaction/Drawer/index.ts +1 -0
  184. package/src/components/interaction/DropdownMenu/DropdownMenu.mdx +2 -0
  185. package/src/components/interaction/DropdownMenu/DropdownMenu.spec.tsx +34 -0
  186. package/src/components/interaction/DropdownMenu/DropdownMenu.tsx +15 -5
  187. package/src/components/interaction/DropdownMenu/index.ts +1 -0
  188. package/src/components/interaction/Popover/Popover.mdx +6 -2
  189. package/src/components/interaction/Popover/Popover.module.css +26 -18
  190. package/src/components/interaction/Popover/Popover.spec.tsx +38 -0
  191. package/src/components/interaction/Popover/Popover.tsx +19 -5
  192. package/src/components/interaction/Popover/index.ts +1 -0
  193. package/src/components/interaction/Rating/Rating.mdx +1 -1
  194. package/src/components/interaction/Rating/Rating.module.css +2 -2
  195. package/src/components/interaction/Rating/Rating.tsx +1 -1
  196. package/src/components/interaction/Rating/index.ts +1 -0
  197. package/src/components/interaction/Toast/Toast.mdx +3 -0
  198. package/src/components/interaction/Toast/Toast.module.css +35 -5
  199. package/src/components/interaction/Toast/Toast.spec.tsx +69 -1
  200. package/src/components/interaction/Toast/Toast.tsx +15 -9
  201. package/src/components/interaction/form/Checkbox/Checkbox.mdx +3 -0
  202. package/src/components/interaction/form/Checkbox/Checkbox.module.css +13 -6
  203. package/src/components/interaction/form/Checkbox/Checkbox.spec.tsx +6 -0
  204. package/src/components/interaction/form/Checkbox/Checkbox.tsx +1 -1
  205. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.mdx +16 -1
  206. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.module.css +24 -8
  207. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.spec.tsx +32 -2
  208. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx +14 -2
  209. package/src/components/interaction/form/Combobox/Combobox.mdx +11 -4
  210. package/src/components/interaction/form/Combobox/Combobox.module.css +6 -6
  211. package/src/components/interaction/form/Combobox/Combobox.spec.tsx +47 -0
  212. package/src/components/interaction/form/Combobox/Combobox.tsx +10 -5
  213. package/src/components/interaction/form/FieldGroup/FieldGroup.mdx +9 -10
  214. package/src/components/interaction/form/FieldGroup/FieldGroup.module.css +57 -23
  215. package/src/components/interaction/form/FieldGroup/FieldGroup.spec.tsx +129 -7
  216. package/src/components/interaction/form/FieldGroup/FieldGroup.tsx +72 -12
  217. package/src/components/interaction/form/FileInput/FileInput.mdx +9 -1
  218. package/src/components/interaction/form/FileInput/FileInput.module.css +8 -8
  219. package/src/components/interaction/form/FileInput/FileInput.spec.tsx +89 -1
  220. package/src/components/interaction/form/FileInput/FileInput.tsx +6 -2
  221. package/src/components/interaction/form/FormInput/FormInput.mdx +9 -5
  222. package/src/components/interaction/form/FormInput/FormInput.module.css +17 -8
  223. package/src/components/interaction/form/FormInput/FormInput.spec.tsx +20 -0
  224. package/src/components/interaction/form/FormInput/FormInput.tsx +7 -2
  225. package/src/components/interaction/form/NumberInput/NumberInput.mdx +5 -1
  226. package/src/components/interaction/form/NumberInput/NumberInput.module.css +6 -6
  227. package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +51 -0
  228. package/src/components/interaction/form/NumberInput/NumberInput.tsx +36 -8
  229. package/src/components/interaction/form/Radio/Radio.mdx +8 -1
  230. package/src/components/interaction/form/Radio/Radio.module.css +20 -7
  231. package/src/components/interaction/form/Radio/Radio.spec.tsx +15 -0
  232. package/src/components/interaction/form/Radio/Radio.tsx +10 -4
  233. package/src/components/interaction/form/RadioGroup/RadioGroup.mdx +16 -1
  234. package/src/components/interaction/form/RadioGroup/RadioGroup.module.css +24 -8
  235. package/src/components/interaction/form/RadioGroup/RadioGroup.spec.tsx +32 -2
  236. package/src/components/interaction/form/RadioGroup/RadioGroup.tsx +14 -2
  237. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +9 -3
  238. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +25 -12
  239. package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +86 -5
  240. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +44 -4
  241. package/src/components/interaction/form/Select/Select.mdx +10 -4
  242. package/src/components/interaction/form/Select/Select.module.css +4 -4
  243. package/src/components/interaction/form/Select/Select.spec.tsx +34 -0
  244. package/src/components/interaction/form/Select/Select.tsx +21 -9
  245. package/src/components/interaction/form/Slider/Slider.mdx +4 -1
  246. package/src/components/interaction/form/Slider/Slider.module.css +32 -8
  247. package/src/components/interaction/form/Slider/Slider.spec.tsx +29 -0
  248. package/src/components/interaction/form/Slider/Slider.tsx +9 -7
  249. package/src/components/interaction/form/Switch/Switch.mdx +2 -2
  250. package/src/components/interaction/form/Switch/Switch.module.css +12 -13
  251. package/src/components/interaction/form/Switch/Switch.spec.tsx +20 -0
  252. package/src/components/interaction/form/Switch/Switch.tsx +2 -1
  253. package/src/components/interaction/form/Textarea/Textarea.mdx +5 -0
  254. package/src/components/interaction/form/Textarea/Textarea.module.css +5 -5
  255. package/src/components/interaction/form/Textarea/Textarea.spec.tsx +13 -0
  256. package/src/components/interaction/form/Textarea/Textarea.tsx +3 -1
  257. package/src/components/interaction/form/atoms/Message.module.css +1 -1
  258. package/src/components/interaction/form/atoms/Message.spec.tsx +29 -0
  259. package/src/components/interaction/form/atoms/Message.tsx +1 -1
  260. package/src/components/layout/ButtonGroup/ButtonGroup.mdx +11 -0
  261. package/src/components/layout/ButtonGroup/ButtonGroup.module.css +1 -5
  262. package/src/components/layout/ButtonGroup/ButtonGroup.stories.tsx +14 -0
  263. package/src/components/layout/Card/Card.mdx +6 -1
  264. package/src/components/layout/Card/Card.module.css +26 -5
  265. package/src/components/layout/Card/Card.spec.tsx +7 -0
  266. package/src/components/layout/Card/Card.tsx +4 -3
  267. package/src/components/layout/Grid/Grid.spec.tsx +44 -0
  268. package/src/components/layout/Grid/Grid.tsx +5 -5
  269. package/src/components/layout/Grid/GridItem.tsx +6 -6
  270. package/src/components/layout/Grid/masonry.ts +31 -5
  271. package/src/components/layout/Grid/useIsomorphicLayoutEffect.ts +11 -0
  272. package/src/components/layout/IconWrapper/IconWrapper.mdx +8 -2
  273. package/src/components/layout/IconWrapper/IconWrapper.module.css +9 -6
  274. package/src/components/layout/SectionHeader/SectionHeader.mdx +4 -1
  275. package/src/components/layout/SectionHeader/SectionHeader.module.css +10 -9
  276. package/src/components/ui/Accordion/Accordion.mdx +4 -1
  277. package/src/components/ui/Accordion/Accordion.module.css +2 -1
  278. package/src/components/ui/Alert/Alert.mdx +21 -4
  279. package/src/components/ui/Alert/Alert.module.css +9 -4
  280. package/src/components/ui/Alert/Alert.spec.tsx +20 -0
  281. package/src/components/ui/Avatar/Avatar.mdx +8 -3
  282. package/src/components/ui/Avatar/Avatar.module.css +13 -8
  283. package/src/components/ui/Badge/Badge.mdx +3 -1
  284. package/src/components/ui/Breadcrumb/Breadcrumb.mdx +3 -0
  285. package/src/components/ui/Breadcrumb/Breadcrumb.module.css +4 -0
  286. package/src/components/ui/Breadcrumb/Breadcrumb.spec.tsx +12 -0
  287. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +11 -3
  288. package/src/components/ui/Calendar/Calendar.mdx +6 -0
  289. package/src/components/ui/Calendar/Calendar.module.css +68 -19
  290. package/src/components/ui/Calendar/Calendar.spec.tsx +139 -24
  291. package/src/components/ui/Calendar/Calendar.stories.tsx +14 -0
  292. package/src/components/ui/Calendar/Calendar.tsx +143 -154
  293. package/src/components/ui/Calendar/CalendarRange.mdx +39 -0
  294. package/src/components/ui/Calendar/CalendarRange.spec.tsx +119 -0
  295. package/src/components/ui/Calendar/CalendarRange.stories.tsx +51 -0
  296. package/src/components/ui/Calendar/CalendarRange.tsx +213 -0
  297. package/src/components/ui/Calendar/MonthGrid.tsx +141 -0
  298. package/src/components/ui/Calendar/calendar-core.spec.ts +176 -0
  299. package/src/components/ui/Calendar/calendar-core.ts +164 -0
  300. package/src/components/ui/Calendar/index.ts +1 -0
  301. package/src/components/ui/Carousel/Carousel.mdx +8 -3
  302. package/src/components/ui/Carousel/Carousel.module.css +7 -5
  303. package/src/components/ui/Carousel/Carousel.spec.tsx +67 -0
  304. package/src/components/ui/Carousel/Carousel.tsx +19 -7
  305. package/src/components/ui/Collapsible/Collapsible.mdx +17 -6
  306. package/src/components/ui/Collapsible/Collapsible.module.css +7 -2
  307. package/src/components/ui/Collapsible/Collapsible.spec.tsx +40 -0
  308. package/src/components/ui/Collapsible/Collapsible.tsx +19 -2
  309. package/src/components/ui/DescriptionList/DescriptionList.mdx +2 -0
  310. package/src/components/ui/Link/Link.mdx +4 -2
  311. package/src/components/ui/Loading/Loading.mdx +6 -3
  312. package/src/components/ui/Loading/Loading.module.css +7 -7
  313. package/src/components/ui/Loading/Loading.spec.tsx +12 -0
  314. package/src/components/ui/Loading/Loading.tsx +8 -3
  315. package/src/components/ui/NotificationBanner/NotificationBanner.mdx +4 -0
  316. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +5 -0
  317. package/src/components/ui/NotificationBanner/NotificationBanner.spec.tsx +20 -0
  318. package/src/components/ui/Pagination/Pagination.mdx +29 -7
  319. package/src/components/ui/Pagination/Pagination.module.css +15 -14
  320. package/src/components/ui/Progress/Progress.mdx +6 -2
  321. package/src/components/ui/Progress/Progress.module.css +1 -1
  322. package/src/components/ui/Progress/Progress.spec.tsx +17 -0
  323. package/src/components/ui/Progress/Progress.tsx +2 -2
  324. package/src/components/ui/ProgressCircle/ProgressCircle.mdx +8 -4
  325. package/src/components/ui/ProgressCircle/ProgressCircle.module.css +2 -2
  326. package/src/components/ui/ProgressCircle/ProgressCircle.spec.tsx +11 -1
  327. package/src/components/ui/ProgressCircle/ProgressCircle.tsx +1 -1
  328. package/src/components/ui/Separator/Separator.mdx +7 -0
  329. package/src/components/ui/Separator/Separator.module.css +1 -0
  330. package/src/components/ui/Skeleton/Skeleton.mdx +17 -0
  331. package/src/components/ui/Skeleton/Skeleton.module.css +12 -5
  332. package/src/components/ui/SkipLink/SkipLink.mdx +19 -0
  333. package/src/components/ui/SkipLink/SkipLink.module.css +8 -7
  334. package/src/components/ui/SkipLink/SkipLink.spec.tsx +28 -0
  335. package/src/components/ui/Table/Table.mdx +14 -0
  336. package/src/components/ui/Table/Table.module.css +13 -8
  337. package/src/components/ui/Table/Table.spec.tsx +56 -0
  338. package/src/components/ui/Table/Table.tsx +44 -6
  339. package/src/components/ui/Tabs/Tabs.mdx +16 -0
  340. package/src/components/ui/Tabs/Tabs.module.css +3 -3
  341. package/src/components/ui/Tabs/Tabs.spec.tsx +20 -0
  342. package/src/components/ui/Tabs/Tabs.tsx +5 -1
  343. package/src/components/ui/Tooltip/Tooltip.mdx +9 -0
  344. package/src/components/ui/Tooltip/Tooltip.module.css +32 -12
  345. package/src/components/ui/Tooltip/Tooltip.spec.tsx +56 -0
  346. package/src/components/ui/Tooltip/Tooltip.tsx +26 -7
  347. package/src/components/ui/Typography/Typography.mdx +7 -0
  348. package/src/components/ui/Typography/Typography.module.css +5 -5
  349. package/src/index.ts +7 -3
  350. package/src/stories/DesignSystem/Borders.mdx +14 -9
  351. package/src/stories/DesignSystem/Colors.mdx +43 -41
  352. package/src/stories/DesignSystem/Overview.mdx +4 -3
  353. package/src/stories/Introduction.mdx +5 -5
  354. package/src/web-components/globals.ts +7 -0
  355. package/src/web-components/index.ts +2 -0
  356. package/src/web-components/interaction/BdsAccordion.mdx +10 -1
  357. package/src/web-components/interaction/BdsButton.mdx +15 -4
  358. package/src/web-components/interaction/BdsButton.stories.tsx +1 -1
  359. package/src/web-components/interaction/BdsCollapsible.mdx +3 -3
  360. package/src/web-components/interaction/BdsDialog.mdx +12 -7
  361. package/src/web-components/interaction/BdsDialog.stories.tsx +2 -2
  362. package/src/web-components/interaction/BdsDrawer.mdx +9 -6
  363. package/src/web-components/interaction/BdsDropdownMenu.mdx +20 -1
  364. package/src/web-components/interaction/BdsPopover.mdx +7 -3
  365. package/src/web-components/interaction/BdsSkipLink.mdx +14 -1
  366. package/src/web-components/interaction/BdsTabs.mdx +18 -1
  367. package/src/web-components/interaction/BdsToastProvider.mdx +21 -3
  368. package/src/web-components/interaction/BdsTooltip.mdx +4 -4
  369. package/src/web-components/interaction/bds-accordion-item.ts +10 -0
  370. package/src/web-components/interaction/bds-accordion.spec.ts +41 -0
  371. package/src/web-components/interaction/bds-accordion.ts +28 -2
  372. package/src/web-components/interaction/bds-button.spec.ts +81 -0
  373. package/src/web-components/interaction/bds-button.ts +60 -13
  374. package/src/web-components/interaction/bds-collapsible.spec.ts +93 -2
  375. package/src/web-components/interaction/bds-collapsible.ts +49 -7
  376. package/src/web-components/interaction/bds-dialog.spec.ts +49 -0
  377. package/src/web-components/interaction/bds-dialog.ts +68 -11
  378. package/src/web-components/interaction/bds-drawer.spec.ts +93 -4
  379. package/src/web-components/interaction/bds-drawer.ts +54 -21
  380. package/src/web-components/interaction/bds-dropdown-menu-item.ts +12 -1
  381. package/src/web-components/interaction/bds-dropdown-menu.spec.ts +63 -0
  382. package/src/web-components/interaction/bds-dropdown-menu.ts +45 -7
  383. package/src/web-components/interaction/bds-popover.spec.ts +80 -6
  384. package/src/web-components/interaction/bds-popover.ts +83 -32
  385. package/src/web-components/interaction/bds-skip-link.spec.ts +18 -0
  386. package/src/web-components/interaction/bds-skip-link.ts +29 -8
  387. package/src/web-components/interaction/bds-tab-panel.ts +10 -0
  388. package/src/web-components/interaction/bds-tab.spec.ts +25 -0
  389. package/src/web-components/interaction/bds-tab.ts +20 -5
  390. package/src/web-components/interaction/bds-tabs.spec.ts +92 -5
  391. package/src/web-components/interaction/bds-tabs.ts +42 -1
  392. package/src/web-components/interaction/bds-toast-provider.spec.ts +43 -0
  393. package/src/web-components/interaction/bds-toast-provider.ts +50 -21
  394. package/src/web-components/interaction/bds-tooltip.spec.ts +71 -0
  395. package/src/web-components/interaction/bds-tooltip.ts +100 -5
  396. package/src/web-components/interaction/form/BdsCheckbox.mdx +20 -1
  397. package/src/web-components/interaction/form/BdsCheckbox.stories.tsx +8 -0
  398. package/src/web-components/interaction/form/BdsCheckboxGroup.mdx +4 -3
  399. package/src/web-components/interaction/form/BdsCombobox.mdx +39 -2
  400. package/src/web-components/interaction/form/BdsCombobox.stories.tsx +31 -0
  401. package/src/web-components/interaction/form/BdsFieldGroup.mdx +8 -3
  402. package/src/web-components/interaction/form/BdsFieldGroup.stories.tsx +1 -1
  403. package/src/web-components/interaction/form/BdsFileInput.mdx +26 -5
  404. package/src/web-components/interaction/form/BdsFormInput.mdx +16 -1
  405. package/src/web-components/interaction/form/BdsNumberInput.mdx +34 -2
  406. package/src/web-components/interaction/form/BdsNumberInput.stories.tsx +27 -3
  407. package/src/web-components/interaction/form/BdsRadio.mdx +39 -12
  408. package/src/web-components/interaction/form/BdsRadio.stories.tsx +26 -0
  409. package/src/web-components/interaction/form/BdsRadioGroup.mdx +9 -4
  410. package/src/web-components/interaction/form/BdsSegmentedControl.mdx +37 -11
  411. package/src/web-components/interaction/form/BdsSelect.mdx +22 -4
  412. package/src/web-components/interaction/form/BdsSelect.stories.tsx +33 -0
  413. package/src/web-components/interaction/form/BdsSlider.mdx +36 -19
  414. package/src/web-components/interaction/form/BdsSlider.stories.tsx +24 -0
  415. package/src/web-components/interaction/form/BdsSwitch.mdx +38 -11
  416. package/src/web-components/interaction/form/BdsSwitch.stories.tsx +16 -0
  417. package/src/web-components/interaction/form/BdsTextarea.mdx +42 -16
  418. package/src/web-components/interaction/form/BdsTextarea.stories.tsx +21 -0
  419. package/src/web-components/interaction/form/bds-checkbox-group.spec.ts +99 -0
  420. package/src/web-components/interaction/form/bds-checkbox-group.ts +95 -9
  421. package/src/web-components/interaction/form/bds-checkbox.spec.ts +55 -0
  422. package/src/web-components/interaction/form/bds-checkbox.ts +30 -5
  423. package/src/web-components/interaction/form/bds-combobox.spec.ts +79 -0
  424. package/src/web-components/interaction/form/bds-combobox.ts +102 -17
  425. package/src/web-components/interaction/form/bds-field-group.spec.ts +158 -0
  426. package/src/web-components/interaction/form/bds-field-group.ts +167 -23
  427. package/src/web-components/interaction/form/bds-file-input.spec.ts +73 -5
  428. package/src/web-components/interaction/form/bds-file-input.ts +71 -34
  429. package/src/web-components/interaction/form/bds-form-input.spec.ts +22 -0
  430. package/src/web-components/interaction/form/bds-form-input.ts +27 -16
  431. package/src/web-components/interaction/form/bds-number-input.spec.ts +49 -0
  432. package/src/web-components/interaction/form/bds-number-input.ts +118 -29
  433. package/src/web-components/interaction/form/bds-radio-group.spec.ts +57 -0
  434. package/src/web-components/interaction/form/bds-radio-group.ts +60 -12
  435. package/src/web-components/interaction/form/bds-radio.spec.ts +123 -0
  436. package/src/web-components/interaction/form/bds-radio.ts +136 -23
  437. package/src/web-components/interaction/form/bds-segmented-control.spec.ts +55 -0
  438. package/src/web-components/interaction/form/bds-segmented-control.ts +81 -59
  439. package/src/web-components/interaction/form/bds-select.spec.ts +57 -0
  440. package/src/web-components/interaction/form/bds-select.ts +96 -8
  441. package/src/web-components/interaction/form/bds-slider.spec.ts +83 -0
  442. package/src/web-components/interaction/form/bds-slider.ts +181 -33
  443. package/src/web-components/interaction/form/bds-switch.spec.ts +68 -0
  444. package/src/web-components/interaction/form/bds-switch.ts +142 -41
  445. package/src/web-components/interaction/form/bds-textarea.spec.ts +71 -0
  446. package/src/web-components/interaction/form/bds-textarea.ts +109 -8
  447. package/src/web-components/layout/BdsGrid.mdx +6 -2
  448. package/src/web-components/layout/BdsGrid.stories.tsx +4 -0
  449. package/src/web-components/layout/bds-grid-item.spec.ts +21 -0
  450. package/src/web-components/layout/bds-grid-item.ts +17 -3
  451. package/src/web-components/layout/bds-grid.spec.ts +98 -0
  452. package/src/web-components/layout/bds-grid.ts +139 -19
  453. package/src/web-components/ui/BdsAlert.mdx +6 -5
  454. package/src/web-components/ui/BdsAlert.stories.tsx +6 -6
  455. package/src/web-components/ui/BdsAvatar.mdx +4 -2
  456. package/src/web-components/ui/BdsBreadcrumb.mdx +3 -2
  457. package/src/web-components/ui/BdsButtonContainer.mdx +64 -0
  458. package/src/web-components/ui/BdsButtonContainer.stories.tsx +84 -0
  459. package/src/web-components/ui/BdsCalendar.mdx +29 -4
  460. package/src/web-components/ui/BdsCalendar.stories.tsx +16 -18
  461. package/src/web-components/ui/BdsCalendarRange.mdx +71 -0
  462. package/src/web-components/ui/BdsCalendarRange.stories.tsx +31 -0
  463. package/src/web-components/ui/BdsCard.mdx +7 -3
  464. package/src/web-components/ui/BdsCard.stories.tsx +17 -1
  465. package/src/web-components/ui/BdsCarousel.mdx +40 -12
  466. package/src/web-components/ui/BdsDescriptionList.mdx +6 -1
  467. package/src/web-components/ui/BdsIconWrapper.mdx +3 -2
  468. package/src/web-components/ui/BdsLink.mdx +14 -2
  469. package/src/web-components/ui/BdsNotificationBanner.mdx +18 -0
  470. package/src/web-components/ui/BdsPagination.mdx +40 -1
  471. package/src/web-components/ui/BdsProgress.mdx +8 -2
  472. package/src/web-components/ui/BdsProgressCircle.mdx +5 -2
  473. package/src/web-components/ui/BdsRating.mdx +7 -0
  474. package/src/web-components/ui/BdsSectionHeader.mdx +22 -3
  475. package/src/web-components/ui/BdsSectionHeader.stories.tsx +15 -13
  476. package/src/web-components/ui/BdsTable.mdx +23 -2
  477. package/src/web-components/ui/BdsTable.stories.tsx +8 -2
  478. package/src/web-components/ui/BdsTypography.mdx +17 -1
  479. package/src/web-components/ui/bds-alert.spec.ts +17 -2
  480. package/src/web-components/ui/bds-alert.ts +31 -5
  481. package/src/web-components/ui/bds-avatar.spec.ts +29 -0
  482. package/src/web-components/ui/bds-avatar.ts +30 -12
  483. package/src/web-components/ui/bds-badge.spec.ts +5 -0
  484. package/src/web-components/ui/bds-badge.ts +11 -1
  485. package/src/web-components/ui/bds-breadcrumb.spec.ts +30 -0
  486. package/src/web-components/ui/bds-breadcrumb.ts +26 -4
  487. package/src/web-components/ui/bds-button-container.spec.ts +39 -0
  488. package/src/web-components/ui/bds-button-container.ts +123 -0
  489. package/src/web-components/ui/bds-button-group.spec.ts +14 -20
  490. package/src/web-components/ui/bds-button-group.ts +13 -64
  491. package/src/web-components/ui/bds-calendar-range.spec.ts +123 -0
  492. package/src/web-components/ui/bds-calendar-range.ts +307 -0
  493. package/src/web-components/ui/bds-calendar.spec.ts +176 -0
  494. package/src/web-components/ui/bds-calendar.ts +186 -344
  495. package/src/web-components/ui/bds-card.spec.ts +32 -0
  496. package/src/web-components/ui/bds-card.ts +34 -9
  497. package/src/web-components/ui/bds-carousel.spec.ts +147 -0
  498. package/src/web-components/ui/bds-carousel.ts +113 -36
  499. package/src/web-components/ui/bds-description-list.spec.ts +15 -0
  500. package/src/web-components/ui/bds-description-list.ts +37 -3
  501. package/src/web-components/ui/bds-icon-wrapper.spec.ts +12 -0
  502. package/src/web-components/ui/bds-icon-wrapper.ts +16 -15
  503. package/src/web-components/ui/bds-link.spec.ts +17 -0
  504. package/src/web-components/ui/bds-link.ts +26 -11
  505. package/src/web-components/ui/bds-loading.ts +11 -1
  506. package/src/web-components/ui/bds-notification-banner.spec.ts +13 -0
  507. package/src/web-components/ui/bds-notification-banner.ts +18 -1
  508. package/src/web-components/ui/bds-pagination.spec.ts +44 -0
  509. package/src/web-components/ui/bds-pagination.ts +39 -19
  510. package/src/web-components/ui/bds-progress-circle.spec.ts +21 -0
  511. package/src/web-components/ui/bds-progress-circle.ts +17 -5
  512. package/src/web-components/ui/bds-progress.spec.ts +21 -0
  513. package/src/web-components/ui/bds-progress.ts +19 -6
  514. package/src/web-components/ui/bds-rating.spec.ts +6 -0
  515. package/src/web-components/ui/bds-rating.ts +12 -2
  516. package/src/web-components/ui/bds-section-header.spec.ts +39 -8
  517. package/src/web-components/ui/bds-section-header.ts +47 -13
  518. package/src/web-components/ui/bds-separator.ts +10 -0
  519. package/src/web-components/ui/bds-skeleton.ts +10 -0
  520. package/src/web-components/ui/bds-table.spec.ts +63 -0
  521. package/src/web-components/ui/bds-table.ts +88 -28
  522. package/src/web-components/ui/bds-typography.spec.ts +47 -0
  523. package/src/web-components/ui/bds-typography.ts +28 -10
  524. package/src/web-components/ui/calendar-styles.ts +94 -0
  525. package/dist/web-components/chunk-5TFWOPLH.js +0 -49
  526. package/dist/web-components/chunk-7FMR53BW.js +0 -127
  527. package/dist/web-components/chunk-AGKJTMJI.js +0 -56
  528. package/dist/web-components/chunk-BQLZ7I4G.js +0 -56
  529. package/dist/web-components/chunk-IYGF6CD5.js +0 -118
  530. package/dist/web-components/chunk-QBB6ZX4R.js +0 -107
  531. package/dist/web-components/chunk-Y3POAKGS.js +0 -133
  532. package/dist/web-components/chunk-Y4MAXTMA.js +0 -80
  533. package/dist/web-components/chunk-Y7V7LM6R.js +0 -98
  534. package/src/web-components/ui/BdsButtonGroup.mdx +0 -69
  535. package/src/web-components/ui/BdsButtonGroup.stories.tsx +0 -66
package/dist/index.cjs CHANGED
@@ -39,6 +39,7 @@ __export(index_exports, {
39
39
  ButtonContainer: () => ButtonContainer,
40
40
  ButtonGroup: () => ButtonGroup,
41
41
  Calendar: () => Calendar,
42
+ CalendarRange: () => CalendarRange,
42
43
  Card: () => Card,
43
44
  Carousel: () => Carousel,
44
45
  Checkbox: () => Checkbox,
@@ -82,7 +83,7 @@ __export(index_exports, {
82
83
  ToastProvider: () => ToastProvider,
83
84
  Tooltip: () => Tooltip,
84
85
  Typography: () => Typography,
85
- cn: () => import_design_system_foundation54.cn,
86
+ cn: () => import_design_system_foundation56.cn,
86
87
  useToast: () => useToast
87
88
  });
88
89
  module.exports = __toCommonJS(index_exports);
@@ -91,7 +92,7 @@ module.exports = __toCommonJS(index_exports);
91
92
  var import_react = require("react");
92
93
 
93
94
  // src/components/ui/Accordion/Accordion.module.css
94
- var Accordion_default = {"component":"bds271Accordion-component","accordion":"bds271Accordion-accordion","item":"bds271Accordion-item","heading":"bds271Accordion-heading","trigger":"bds271Accordion-trigger","triggerLabel":"bds271Accordion-triggerLabel","chevron":"bds271Accordion-chevron","--open":"bds271Accordion---open","panel":"bds271Accordion-panel","panelContent":"bds271Accordion-panelContent"};
95
+ var Accordion_default = {"component":"bds2110Accordion-component","accordion":"bds2110Accordion-accordion","item":"bds2110Accordion-item","heading":"bds2110Accordion-heading","trigger":"bds2110Accordion-trigger","triggerLabel":"bds2110Accordion-triggerLabel","chevron":"bds2110Accordion-chevron","--open":"bds2110Accordion---open","panel":"bds2110Accordion-panel","panelContent":"bds2110Accordion-panelContent"};
95
96
 
96
97
  // src/components/ui/Accordion/Accordion.tsx
97
98
  var import_design_system_foundation = require("@boostdev/design-system-foundation");
@@ -160,7 +161,7 @@ function Accordion({
160
161
  }
161
162
 
162
163
  // src/components/ui/Alert/Alert.module.css
163
- var Alert_default = {"component":"bds271Alert-component","alert":"bds271Alert-alert","--variant_info":"bds271Alert---variant_info","--variant_success":"bds271Alert---variant_success","--variant_warning":"bds271Alert---variant_warning","--variant_error":"bds271Alert---variant_error","icon":"bds271Alert-icon","content":"bds271Alert-content","title":"bds271Alert-title","dismiss":"bds271Alert-dismiss"};
164
+ var Alert_default = {"component":"bds2110Alert-component","alert":"bds2110Alert-alert","--variant_info":"bds2110Alert---variant_info","--variant_success":"bds2110Alert---variant_success","--variant_warning":"bds2110Alert---variant_warning","--variant_error":"bds2110Alert---variant_error","icon":"bds2110Alert-icon","content":"bds2110Alert-content","title":"bds2110Alert-title","dismiss":"bds2110Alert-dismiss"};
164
165
 
165
166
  // src/components/ui/Alert/Alert.tsx
166
167
  var import_design_system_foundation2 = require("@boostdev/design-system-foundation");
@@ -205,7 +206,7 @@ function Alert({
205
206
  }
206
207
 
207
208
  // src/components/ui/Avatar/Avatar.module.css
208
- var Avatar_default = {"component":"bds271Avatar-component","avatar":"bds271Avatar-avatar","--fallback":"bds271Avatar---fallback","--size_small":"bds271Avatar---size_small","--size_medium":"bds271Avatar---size_medium","--size_large":"bds271Avatar---size_large","image":"bds271Avatar-image","initials":"bds271Avatar-initials"};
209
+ var Avatar_default = {"component":"bds2110Avatar-component","avatar":"bds2110Avatar-avatar","--fallback":"bds2110Avatar---fallback","--size_small":"bds2110Avatar---size_small","--size_medium":"bds2110Avatar---size_medium","--size_large":"bds2110Avatar---size_large","image":"bds2110Avatar-image","initials":"bds2110Avatar-initials"};
209
210
 
210
211
  // src/components/ui/Avatar/Avatar.tsx
211
212
  var import_design_system_foundation3 = require("@boostdev/design-system-foundation");
@@ -232,7 +233,7 @@ function Avatar({ src, alt, name, size = "medium", className, ...rest }) {
232
233
  }
233
234
 
234
235
  // src/components/ui/Badge/Badge.module.css
235
- var Badge_default = {"component":"bds271Badge-component","badge":"bds271Badge-badge","--variant_primary":"bds271Badge---variant_primary","--variant_secondary":"bds271Badge---variant_secondary","--variant_success":"bds271Badge---variant_success","--variant_error":"bds271Badge---variant_error","--variant_warning":"bds271Badge---variant_warning"};
236
+ var Badge_default = {"component":"bds2110Badge-component","badge":"bds2110Badge-badge","--variant_primary":"bds2110Badge---variant_primary","--variant_secondary":"bds2110Badge---variant_secondary","--variant_success":"bds2110Badge---variant_success","--variant_error":"bds2110Badge---variant_error","--variant_warning":"bds2110Badge---variant_warning"};
236
237
 
237
238
  // src/components/ui/Badge/Badge.tsx
238
239
  var import_design_system_foundation4 = require("@boostdev/design-system-foundation");
@@ -242,7 +243,7 @@ function Badge({ children, variant = "primary", className, ...rest }) {
242
243
  }
243
244
 
244
245
  // src/components/ui/Breadcrumb/Breadcrumb.module.css
245
- var Breadcrumb_default = {"component":"bds271Breadcrumb-component","breadcrumb":"bds271Breadcrumb-breadcrumb","list":"bds271Breadcrumb-list","item":"bds271Breadcrumb-item","link":"bds271Breadcrumb-link","separator":"bds271Breadcrumb-separator","current":"bds271Breadcrumb-current"};
246
+ var Breadcrumb_default = {"component":"bds2110Breadcrumb-component","breadcrumb":"bds2110Breadcrumb-breadcrumb","list":"bds2110Breadcrumb-list","item":"bds2110Breadcrumb-item","link":"bds2110Breadcrumb-link","separator":"bds2110Breadcrumb-separator","text":"bds2110Breadcrumb-text","current":"bds2110Breadcrumb-current"};
246
247
 
247
248
  // src/components/ui/Breadcrumb/Breadcrumb.tsx
248
249
  var import_design_system_foundation5 = require("@boostdev/design-system-foundation");
@@ -251,14 +252,14 @@ function Breadcrumb({ items, className, ...rest }) {
251
252
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { ...rest, "aria-label": "Breadcrumb", className: (0, import_design_system_foundation5.cn)(Breadcrumb_default.breadcrumb, className), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ol", { className: Breadcrumb_default.list, children: items.map((item, index) => {
252
253
  const isLast = index === items.length - 1;
253
254
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { className: Breadcrumb_default.item, children: isLast ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "aria-current": "page", className: Breadcrumb_default.current, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
254
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", { href: item.href, className: Breadcrumb_default.link, children: item.label }),
255
+ item.href ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", { href: item.href, className: Breadcrumb_default.link, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: Breadcrumb_default.text, children: item.label }),
255
256
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: Breadcrumb_default.separator, "aria-hidden": "true", children: "\u203A" })
256
257
  ] }) }, index);
257
258
  }) }) });
258
259
  }
259
260
 
260
261
  // src/components/ui/Collapsible/Collapsible.module.css
261
- var Collapsible_default = {"component":"bds271Collapsible-component","collapsible":"bds271Collapsible-collapsible","summary":"bds271Collapsible-summary","summaryContent":"bds271Collapsible-summaryContent","icon":"bds271Collapsible-icon","content":"bds271Collapsible-content"};
262
+ var Collapsible_default = {"component":"bds2110Collapsible-component","collapsible":"bds2110Collapsible-collapsible","summary":"bds2110Collapsible-summary","summaryContent":"bds2110Collapsible-summaryContent","icon":"bds2110Collapsible-icon","content":"bds2110Collapsible-content"};
262
263
 
263
264
  // src/components/ui/Collapsible/Collapsible.tsx
264
265
  var import_design_system_foundation6 = require("@boostdev/design-system-foundation");
@@ -273,9 +274,16 @@ function Collapsible({
273
274
  className,
274
275
  ...rest
275
276
  }) {
277
+ const isControlled = open !== void 0;
276
278
  const handleToggle = (e) => {
279
+ if (isControlled) return;
277
280
  onToggle?.(e.currentTarget.open);
278
281
  };
282
+ const handleSummaryClick = (e) => {
283
+ if (!isControlled) return;
284
+ e.preventDefault();
285
+ onToggle?.(!open);
286
+ };
279
287
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
280
288
  "details",
281
289
  {
@@ -285,7 +293,7 @@ function Collapsible({
285
293
  onToggle: handleToggle,
286
294
  ...rest,
287
295
  children: [
288
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("summary", { className: Collapsible_default.summary, children: [
296
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("summary", { className: Collapsible_default.summary, onClick: handleSummaryClick, children: [
289
297
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: Collapsible_default.summaryContent, children: summary }),
290
298
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: Collapsible_default.icon, "aria-hidden": "true" })
291
299
  ] }),
@@ -297,254 +305,574 @@ function Collapsible({
297
305
 
298
306
  // src/components/ui/Calendar/Calendar.tsx
299
307
  var import_react2 = require("react");
308
+ var import_design_system_foundation8 = require("@boostdev/design-system-foundation");
300
309
 
301
310
  // src/components/ui/Calendar/Calendar.module.css
302
- var Calendar_default = {"component":"bds271Calendar-component","calendar":"bds271Calendar-calendar","header":"bds271Calendar-header","monthYear":"bds271Calendar-monthYear","navBtn":"bds271Calendar-navBtn","grid":"bds271Calendar-grid","weekday":"bds271Calendar-weekday","empty":"bds271Calendar-empty","day":"bds271Calendar-day","disabled":"bds271Calendar-disabled","selected":"bds271Calendar-selected","today":"bds271Calendar-today"};
311
+ var Calendar_default = {"component":"bds2110Calendar-component","calendar":"bds2110Calendar-calendar","months":"bds2110Calendar-months","month":"bds2110Calendar-month","monthHeader":"bds2110Calendar-monthHeader","navSlot":"bds2110Calendar-navSlot","monthYear":"bds2110Calendar-monthYear","navBtn":"bds2110Calendar-navBtn","grid":"bds2110Calendar-grid","row":"bds2110Calendar-row","weekday":"bds2110Calendar-weekday","cell":"bds2110Calendar-cell","day":"bds2110Calendar-day","disabled":"bds2110Calendar-disabled","selected":"bds2110Calendar-selected","rangeStart":"bds2110Calendar-rangeStart","rangeEnd":"bds2110Calendar-rangeEnd","outside":"bds2110Calendar-outside","today":"bds2110Calendar-today","inRange":"bds2110Calendar-inRange"};
303
312
 
304
- // src/components/ui/Calendar/Calendar.tsx
313
+ // src/components/ui/Calendar/MonthGrid.tsx
305
314
  var import_design_system_foundation7 = require("@boostdev/design-system-foundation");
306
- var import_jsx_runtime7 = require("react/jsx-runtime");
307
- var DAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
308
- var DAY_LABELS = {
309
- Su: "Sunday",
310
- Mo: "Monday",
311
- Tu: "Tuesday",
312
- We: "Wednesday",
313
- Th: "Thursday",
314
- Fr: "Friday",
315
- Sa: "Saturday"
316
- };
317
- var MONTHS = [
318
- "January",
319
- "February",
320
- "March",
321
- "April",
322
- "May",
323
- "June",
324
- "July",
325
- "August",
326
- "September",
327
- "October",
328
- "November",
329
- "December"
330
- ];
315
+
316
+ // src/components/ui/Calendar/calendar-core.ts
317
+ function toISO(date) {
318
+ const y = date.getFullYear();
319
+ const m = String(date.getMonth() + 1).padStart(2, "0");
320
+ const d = String(date.getDate()).padStart(2, "0");
321
+ return `${y}-${m}-${d}`;
322
+ }
323
+ function parseISO(iso) {
324
+ const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(iso);
325
+ if (!m) return null;
326
+ const year = Number(m[1]);
327
+ const month = Number(m[2]) - 1;
328
+ const day = Number(m[3]);
329
+ const date = new Date(year, month, day);
330
+ date.setFullYear(year);
331
+ if (isNaN(date.getTime())) return null;
332
+ if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) return null;
333
+ return date;
334
+ }
335
+ function addDays(date, n) {
336
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate() + n);
337
+ }
338
+ function addMonths(date, n) {
339
+ const firstOfTarget = new Date(date.getFullYear(), date.getMonth() + n, 1);
340
+ const daysInTarget = new Date(firstOfTarget.getFullYear(), firstOfTarget.getMonth() + 1, 0).getDate();
341
+ return new Date(firstOfTarget.getFullYear(), firstOfTarget.getMonth(), Math.min(date.getDate(), daysInTarget));
342
+ }
331
343
  function isSameDay(a, b) {
332
344
  return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
333
345
  }
334
- function toMidnight(date) {
335
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
346
+ function compareDay(a, b) {
347
+ const am = new Date(a.getFullYear(), a.getMonth(), a.getDate()).getTime();
348
+ const bm = new Date(b.getFullYear(), b.getMonth(), b.getDate()).getTime();
349
+ return am < bm ? -1 : am > bm ? 1 : 0;
350
+ }
351
+ function sortRange(a, b) {
352
+ return compareDay(a, b) <= 0 ? [a, b] : [b, a];
353
+ }
354
+ function isInRange(date, start, end) {
355
+ const [lo, hi] = sortRange(start, end);
356
+ return compareDay(date, lo) >= 0 && compareDay(date, hi) <= 0;
357
+ }
358
+ function isDisabled(date, opts) {
359
+ if (opts.min && compareDay(date, opts.min) < 0) return true;
360
+ if (opts.max && compareDay(date, opts.max) > 0) return true;
361
+ return !!opts.isDateDisallowed?.(date);
362
+ }
363
+ function buildMonthGrid(year, month, firstDayOfWeek) {
364
+ const firstOfMonth = new Date(year, month, 1);
365
+ const lead = (firstOfMonth.getDay() - firstDayOfWeek + 7) % 7;
366
+ const start = addDays(firstOfMonth, -lead);
367
+ return Array.from({ length: 42 }, (_, i) => {
368
+ const date = addDays(start, i);
369
+ return { iso: toISO(date), date, day: date.getDate(), outside: date.getMonth() !== month };
370
+ });
371
+ }
372
+ function getMonthLabel(year, month, locale) {
373
+ return new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" }).format(new Date(year, month, 1));
374
+ }
375
+ function getDayLabel(date, locale) {
376
+ return new Intl.DateTimeFormat(locale, { year: "numeric", month: "long", day: "numeric" }).format(date);
377
+ }
378
+ function getWeekdayNames(locale, firstDayOfWeek) {
379
+ const fmt = new Intl.DateTimeFormat(locale, { weekday: "short" });
380
+ return Array.from({ length: 7 }, (_, i) => fmt.format(new Date(2023, 0, 1 + (firstDayOfWeek + i) % 7)));
381
+ }
382
+ function nextFocusDate(current, key, opts) {
383
+ const offsetInWeek = (current.getDay() - opts.firstDayOfWeek + 7) % 7;
384
+ switch (key) {
385
+ case "ArrowRight":
386
+ return addDays(current, 1);
387
+ case "ArrowLeft":
388
+ return addDays(current, -1);
389
+ case "ArrowDown":
390
+ return addDays(current, 7);
391
+ case "ArrowUp":
392
+ return addDays(current, -7);
393
+ case "Home":
394
+ return addDays(current, -offsetInWeek);
395
+ case "End":
396
+ return addDays(current, 6 - offsetInWeek);
397
+ case "PageUp":
398
+ return addMonths(current, opts.shiftKey ? -12 : -1);
399
+ case "PageDown":
400
+ return addMonths(current, opts.shiftKey ? 12 : 1);
401
+ default:
402
+ return null;
403
+ }
404
+ }
405
+
406
+ // src/components/ui/Calendar/MonthGrid.tsx
407
+ var import_jsx_runtime7 = require("react/jsx-runtime");
408
+ var ChevronLeft = () => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) });
409
+ var ChevronRight = () => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) });
410
+ function MonthGrid(props) {
411
+ const {
412
+ year,
413
+ month,
414
+ firstDayOfWeek,
415
+ weekdayNames,
416
+ monthLabel,
417
+ headingId,
418
+ showPrev,
419
+ showNext,
420
+ onPrev,
421
+ onNext,
422
+ prevLabel,
423
+ nextLabel,
424
+ classifyDay,
425
+ formatDay,
426
+ registerRef,
427
+ onSelect,
428
+ onKeyDown,
429
+ onDayPointerEnter
430
+ } = props;
431
+ const cells = buildMonthGrid(year, month, firstDayOfWeek);
432
+ const rows = Array.from({ length: 6 }, (_, r) => cells.slice(r * 7, r * 7 + 7));
433
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: Calendar_default.month, children: [
434
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: Calendar_default.monthHeader, children: [
435
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: Calendar_default.navSlot, children: showPrev && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("button", { type: "button", className: Calendar_default.navBtn, "aria-label": prevLabel, onClick: onPrev, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ChevronLeft, {}) }) }),
436
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { id: headingId, className: Calendar_default.monthYear, "aria-live": "polite", children: monthLabel }),
437
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: Calendar_default.navSlot, children: showNext && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("button", { type: "button", className: Calendar_default.navBtn, "aria-label": nextLabel, onClick: onNext, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ChevronRight, {}) }) })
438
+ ] }),
439
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: Calendar_default.grid, role: "grid", "aria-labelledby": headingId, children: [
440
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: Calendar_default.row, role: "row", children: weekdayNames.map((name, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { role: "columnheader", className: Calendar_default.weekday, "aria-label": name, children: name }, i)) }),
441
+ rows.map((week, r) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: Calendar_default.row, role: "row", children: week.map((cell) => {
442
+ const s = cell.outside ? { today: false, selected: false, rangeStart: false, rangeEnd: false, inRange: false, disabled: true, tabbable: false } : classifyDay(cell.date);
443
+ const isEndpoint = s.selected || s.rangeStart || s.rangeEnd;
444
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
445
+ "span",
446
+ {
447
+ role: "gridcell",
448
+ "aria-selected": isEndpoint,
449
+ className: Calendar_default.cell,
450
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
451
+ "button",
452
+ {
453
+ ref: (el) => registerRef(cell.iso, el),
454
+ type: "button",
455
+ "data-date": cell.iso,
456
+ "data-outside": cell.outside || void 0,
457
+ "data-today": s.today || void 0,
458
+ "data-selected": s.selected || void 0,
459
+ "data-range-start": s.rangeStart || void 0,
460
+ "data-range-end": s.rangeEnd || void 0,
461
+ "data-in-range": s.inRange || void 0,
462
+ className: (0, import_design_system_foundation7.cn)(
463
+ Calendar_default.day,
464
+ cell.outside && Calendar_default.outside,
465
+ s.today && !isEndpoint && Calendar_default.today,
466
+ s.selected && Calendar_default.selected,
467
+ s.rangeStart && Calendar_default.rangeStart,
468
+ s.rangeEnd && Calendar_default.rangeEnd,
469
+ s.inRange && Calendar_default.inRange,
470
+ s.disabled && Calendar_default.disabled
471
+ ),
472
+ "aria-label": formatDay(cell.date),
473
+ "aria-current": s.today ? "date" : void 0,
474
+ "aria-disabled": s.disabled || void 0,
475
+ disabled: s.disabled || cell.outside,
476
+ tabIndex: s.tabbable ? 0 : -1,
477
+ onClick: () => onSelect(cell.date),
478
+ onKeyDown: (e) => onKeyDown(e, cell.date),
479
+ onPointerEnter: onDayPointerEnter ? () => onDayPointerEnter(cell.date) : void 0,
480
+ children: cell.day
481
+ }
482
+ )
483
+ },
484
+ cell.iso
485
+ );
486
+ }) }, r))
487
+ ] })
488
+ ] });
336
489
  }
337
- function isOutOfRange(date, min, max) {
338
- const d = toMidnight(date);
339
- if (min && d < toMidnight(min)) return true;
340
- return !!(max && d > toMidnight(max));
490
+
491
+ // src/components/ui/Calendar/Calendar.tsx
492
+ var import_jsx_runtime8 = require("react/jsx-runtime");
493
+ function monthIndex(d) {
494
+ return d.getFullYear() * 12 + d.getMonth();
341
495
  }
342
- function getDaysInMonth(year, month) {
343
- return new Date(year, month + 1, 0).getDate();
496
+ function isMonthVisible(date, viewYear, viewMonth, months) {
497
+ const start = viewYear * 12 + viewMonth;
498
+ const idx = monthIndex(date);
499
+ return idx >= start && idx < start + months;
344
500
  }
345
- function getFirstDayOfMonth(year, month) {
346
- return new Date(year, month, 1).getDay();
501
+ function weekdayNamesFrom(fmt, firstDayOfWeek) {
502
+ return Array.from({ length: 7 }, (_, i) => fmt(new Date(2023, 0, 1 + (firstDayOfWeek + i) % 7)));
347
503
  }
348
- function Calendar({ value, defaultValue, min, max, onChange, className, ...rest }) {
504
+ function Calendar({
505
+ value,
506
+ defaultValue,
507
+ min,
508
+ max,
509
+ months = 1,
510
+ pageBy = "months",
511
+ firstDayOfWeek = 1,
512
+ locale,
513
+ isDateDisallowed,
514
+ formatWeekday,
515
+ formatMonth,
516
+ formatDay,
517
+ labels,
518
+ onChange,
519
+ className,
520
+ ...rest
521
+ }) {
349
522
  const today = /* @__PURE__ */ new Date();
350
523
  const controlled = value !== void 0;
351
524
  const [internal, setInternal] = (0, import_react2.useState)(defaultValue);
352
525
  const selected = controlled ? value : internal;
353
- const [viewYear, setViewYear] = (0, import_react2.useState)(selected?.getFullYear() ?? today.getFullYear());
354
- const [viewMonth, setViewMonth] = (0, import_react2.useState)(selected?.getMonth() ?? today.getMonth());
355
- const [focusedDay, setFocusedDay] = (0, import_react2.useState)();
356
- const titleId = (0, import_react2.useId)();
357
- const daysInMonth = getDaysInMonth(viewYear, viewMonth);
358
- const firstDay = getFirstDayOfMonth(viewYear, viewMonth);
359
- const navigate = (delta) => {
360
- const d = new Date(viewYear, viewMonth + delta, 1);
526
+ const base = selected ?? today;
527
+ const [viewYear, setViewYear] = (0, import_react2.useState)(base.getFullYear());
528
+ const [viewMonth, setViewMonth] = (0, import_react2.useState)(base.getMonth());
529
+ const [focusedIso, setFocusedIso] = (0, import_react2.useState)();
530
+ const headingBaseId = (0, import_react2.useId)();
531
+ const dayRefs = (0, import_react2.useRef)(/* @__PURE__ */ new Map());
532
+ const registerRef = (0, import_react2.useCallback)((iso, el) => {
533
+ if (el) dayRefs.current.set(iso, el);
534
+ else dayRefs.current.delete(iso);
535
+ }, []);
536
+ (0, import_react2.useEffect)(() => {
537
+ if (!controlled || !value) return;
538
+ if (!isMonthVisible(value, viewYear, viewMonth, months)) {
539
+ setViewYear(value.getFullYear());
540
+ setViewMonth(value.getMonth());
541
+ }
542
+ }, [controlled, value]);
543
+ (0, import_react2.useEffect)(() => {
544
+ if (focusedIso) dayRefs.current.get(focusedIso)?.focus();
545
+ }, [focusedIso, viewYear, viewMonth]);
546
+ const disabledFor = (date) => isDisabled(date, { min, max, isDateDisallowed });
547
+ const page = (dir) => {
548
+ const step = pageBy === "single" ? 1 : months;
549
+ const d = new Date(viewYear, viewMonth + dir * step, 1);
361
550
  setViewYear(d.getFullYear());
362
551
  setViewMonth(d.getMonth());
363
- setFocusedDay(void 0);
552
+ setFocusedIso(void 0);
364
553
  };
365
- const selectDay = (day) => {
366
- const date = new Date(viewYear, viewMonth, day);
367
- if (isOutOfRange(date, min, max)) return;
554
+ const select = (date) => {
555
+ if (disabledFor(date)) return;
368
556
  if (!controlled) setInternal(date);
369
557
  onChange?.(date);
370
558
  };
371
- const handleKeyDown = (e, day) => {
372
- const map = {
373
- ArrowRight: 1,
374
- ArrowLeft: -1,
375
- ArrowDown: 7,
376
- ArrowUp: -7
377
- };
378
- if (e.key in map) {
379
- e.preventDefault();
380
- const current = new Date(viewYear, viewMonth, day);
381
- const next = new Date(current);
382
- next.setDate(next.getDate() + map[e.key]);
383
- setViewYear(next.getFullYear());
384
- setViewMonth(next.getMonth());
385
- setFocusedDay(next.getDate());
386
- } else if (e.key === "Home") {
387
- e.preventDefault();
388
- setFocusedDay(1);
389
- } else if (e.key === "End") {
390
- e.preventDefault();
391
- setFocusedDay(daysInMonth);
392
- } else if (e.key === "Enter" || e.key === " ") {
559
+ const moveFocus = (target) => {
560
+ setFocusedIso(toISO(target));
561
+ if (!isMonthVisible(target, viewYear, viewMonth, months)) {
562
+ setViewYear(target.getFullYear());
563
+ setViewMonth(target.getMonth());
564
+ }
565
+ };
566
+ const onKeyDown = (e, date) => {
567
+ if (e.key === "Enter" || e.key === " ") {
393
568
  e.preventDefault();
394
- selectDay(day);
569
+ select(date);
570
+ return;
395
571
  }
572
+ const next = nextFocusDate(date, e.key, { shiftKey: e.shiftKey, firstDayOfWeek });
573
+ if (!next) return;
574
+ e.preventDefault();
575
+ moveFocus(next);
396
576
  };
397
- const cells = [
398
- ...Array.from({ length: firstDay }, () => null),
399
- ...Array.from({ length: daysInMonth }, (_, i) => ({ day: i + 1 }))
400
- ];
401
- while (cells.length % 7 !== 0) cells.push(null);
402
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { ...rest, className: (0, import_design_system_foundation7.cn)(Calendar_default.calendar, className), role: "group", "aria-labelledby": titleId, children: [
403
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: Calendar_default.header, children: [
404
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
405
- "button",
406
- {
407
- type: "button",
408
- className: Calendar_default.navBtn,
409
- "aria-label": "Previous month",
410
- onClick: () => navigate(-1),
411
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) })
412
- }
413
- ),
414
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { id: titleId, className: Calendar_default.monthYear, "aria-live": "polite", children: [
415
- MONTHS[viewMonth],
416
- " ",
417
- viewYear
418
- ] }),
419
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
420
- "button",
421
- {
422
- type: "button",
423
- className: Calendar_default.navBtn,
424
- "aria-label": "Next month",
425
- onClick: () => navigate(1),
426
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
427
- }
428
- )
429
- ] }),
430
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
431
- "table",
577
+ const selectedVisible = selected && isMonthVisible(selected, viewYear, viewMonth, months) ? selected : void 0;
578
+ const todayVisible = isMonthVisible(today, viewYear, viewMonth, months) ? today : void 0;
579
+ const tabbableIso = focusedIso ?? (selectedVisible && toISO(selectedVisible)) ?? (todayVisible && toISO(todayVisible)) ?? toISO(new Date(viewYear, viewMonth, 1));
580
+ const classifyDay = (date) => ({
581
+ today: isSameDay(date, today),
582
+ selected: !!selected && isSameDay(date, selected),
583
+ rangeStart: false,
584
+ rangeEnd: false,
585
+ inRange: false,
586
+ disabled: disabledFor(date),
587
+ tabbable: toISO(date) === tabbableIso
588
+ });
589
+ const weekdayNames = formatWeekday ? weekdayNamesFrom(formatWeekday, firstDayOfWeek) : getWeekdayNames(locale, firstDayOfWeek);
590
+ const labelOfMonth = (y, m) => formatMonth ? formatMonth(new Date(y, m, 1)) : getMonthLabel(y, m, locale);
591
+ const labelOfDay = (d) => formatDay ? formatDay(d) : getDayLabel(d, locale);
592
+ const prevLabel = labels?.previousMonth ?? "Previous month";
593
+ const nextLabel = labels?.nextMonth ?? "Next month";
594
+ const count = Math.max(1, months);
595
+ const groupLabel = Array.from({ length: count }, (_, i) => {
596
+ const d = new Date(viewYear, viewMonth + i, 1);
597
+ return labelOfMonth(d.getFullYear(), d.getMonth());
598
+ }).join(", ");
599
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { ...rest, className: (0, import_design_system_foundation8.cn)(Calendar_default.calendar, className), role: "group", "aria-label": groupLabel, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: Calendar_default.months, children: Array.from({ length: count }, (_, i) => {
600
+ const d = new Date(viewYear, viewMonth + i, 1);
601
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
602
+ MonthGrid,
432
603
  {
433
- className: Calendar_default.grid,
434
- role: "grid",
435
- "aria-labelledby": titleId,
436
- children: [
437
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("tr", { children: DAYS.map((d) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("th", { scope: "col", "aria-label": DAY_LABELS[d] ?? d, className: Calendar_default.weekday, children: d }, d)) }) }),
438
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("tbody", { children: Array.from({ length: cells.length / 7 }, (_, row) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("tr", { children: cells.slice(row * 7, row * 7 + 7).map((cell, col) => {
439
- if (!cell) return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { className: Calendar_default.empty, "aria-hidden": "true" }, col);
440
- const date = new Date(viewYear, viewMonth, cell.day);
441
- const isSelected = selected ? isSameDay(date, selected) : false;
442
- const isToday = isSameDay(date, today);
443
- const disabled = isOutOfRange(date, min, max);
444
- const isFocused = focusedDay === cell.day;
445
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("td", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
446
- "button",
447
- {
448
- type: "button",
449
- className: (0, import_design_system_foundation7.cn)(
450
- Calendar_default.day,
451
- isSelected && Calendar_default.selected,
452
- isToday && !isSelected && Calendar_default.today,
453
- disabled && Calendar_default.disabled
454
- ),
455
- "aria-label": date.toLocaleDateString("en", { month: "long", day: "numeric", year: "numeric" }),
456
- "aria-selected": isSelected,
457
- "aria-current": isToday ? "date" : void 0,
458
- "aria-disabled": disabled,
459
- disabled,
460
- tabIndex: isFocused || !focusedDay && isSelected || !focusedDay && !selected && isToday ? 0 : -1,
461
- onClick: () => selectDay(cell.day),
462
- onKeyDown: (e) => handleKeyDown(e, cell.day),
463
- children: cell.day
464
- }
465
- ) }, col);
466
- }) }, row)) })
467
- ]
604
+ year: d.getFullYear(),
605
+ month: d.getMonth(),
606
+ firstDayOfWeek,
607
+ weekdayNames,
608
+ monthLabel: labelOfMonth(d.getFullYear(), d.getMonth()),
609
+ headingId: `${headingBaseId}-${i}`,
610
+ showPrev: i === 0,
611
+ showNext: i === count - 1,
612
+ onPrev: () => page(-1),
613
+ onNext: () => page(1),
614
+ prevLabel,
615
+ nextLabel,
616
+ classifyDay,
617
+ formatDay: labelOfDay,
618
+ registerRef,
619
+ onSelect: select,
620
+ onKeyDown
621
+ },
622
+ i
623
+ );
624
+ }) }) });
625
+ }
626
+
627
+ // src/components/ui/Calendar/CalendarRange.tsx
628
+ var import_react3 = require("react");
629
+ var import_design_system_foundation9 = require("@boostdev/design-system-foundation");
630
+ var import_jsx_runtime9 = require("react/jsx-runtime");
631
+ function isMonthVisible2(date, viewYear, viewMonth, months) {
632
+ const start = viewYear * 12 + viewMonth;
633
+ const idx = date.getFullYear() * 12 + date.getMonth();
634
+ return idx >= start && idx < start + months;
635
+ }
636
+ function weekdayNamesFrom2(fmt, firstDayOfWeek) {
637
+ return Array.from({ length: 7 }, (_, i) => fmt(new Date(2023, 0, 1 + (firstDayOfWeek + i) % 7)));
638
+ }
639
+ function CalendarRange({
640
+ value,
641
+ defaultValue,
642
+ min,
643
+ max,
644
+ months = 1,
645
+ pageBy = "months",
646
+ firstDayOfWeek = 1,
647
+ locale,
648
+ isDateDisallowed,
649
+ formatWeekday,
650
+ formatMonth,
651
+ formatDay,
652
+ labels,
653
+ onChange,
654
+ onRangeStart,
655
+ className,
656
+ ...rest
657
+ }) {
658
+ const today = /* @__PURE__ */ new Date();
659
+ const controlled = value !== void 0;
660
+ const [internal, setInternal] = (0, import_react3.useState)(defaultValue);
661
+ const committed = controlled ? value : internal;
662
+ const [anchor, setAnchor] = (0, import_react3.useState)();
663
+ const [hover, setHover] = (0, import_react3.useState)();
664
+ const base = committed ? committed[0] : today;
665
+ const [viewYear, setViewYear] = (0, import_react3.useState)(base.getFullYear());
666
+ const [viewMonth, setViewMonth] = (0, import_react3.useState)(base.getMonth());
667
+ const [focusedIso, setFocusedIso] = (0, import_react3.useState)();
668
+ const headingBaseId = (0, import_react3.useId)();
669
+ const dayRefs = (0, import_react3.useRef)(/* @__PURE__ */ new Map());
670
+ const registerRef = (0, import_react3.useCallback)((iso, el) => {
671
+ if (el) dayRefs.current.set(iso, el);
672
+ else dayRefs.current.delete(iso);
673
+ }, []);
674
+ (0, import_react3.useEffect)(() => {
675
+ if (!controlled || !value) return;
676
+ if (!isMonthVisible2(value[0], viewYear, viewMonth, months)) {
677
+ setViewYear(value[0].getFullYear());
678
+ setViewMonth(value[0].getMonth());
679
+ }
680
+ }, [controlled, value]);
681
+ (0, import_react3.useEffect)(() => {
682
+ if (focusedIso) dayRefs.current.get(focusedIso)?.focus();
683
+ }, [focusedIso, viewYear, viewMonth]);
684
+ const disabledFor = (date) => isDisabled(date, { min, max, isDateDisallowed });
685
+ const page = (dir) => {
686
+ const step = pageBy === "single" ? 1 : months;
687
+ const d = new Date(viewYear, viewMonth + dir * step, 1);
688
+ setViewYear(d.getFullYear());
689
+ setViewMonth(d.getMonth());
690
+ setFocusedIso(void 0);
691
+ };
692
+ const select = (date) => {
693
+ if (disabledFor(date)) return;
694
+ if (!anchor) {
695
+ setAnchor(date);
696
+ setHover(void 0);
697
+ onRangeStart?.(date);
698
+ } else {
699
+ const pair = sortRange(anchor, date);
700
+ if (!controlled) setInternal(pair);
701
+ onChange?.(pair);
702
+ setAnchor(void 0);
703
+ setHover(void 0);
704
+ }
705
+ };
706
+ const moveFocus = (target) => {
707
+ setFocusedIso(toISO(target));
708
+ if (!isMonthVisible2(target, viewYear, viewMonth, months)) {
709
+ setViewYear(target.getFullYear());
710
+ setViewMonth(target.getMonth());
711
+ }
712
+ };
713
+ const onKeyDown = (e, date) => {
714
+ if (e.key === "Enter" || e.key === " ") {
715
+ e.preventDefault();
716
+ select(date);
717
+ return;
718
+ }
719
+ if (e.key === "Escape") {
720
+ if (anchor) {
721
+ setAnchor(void 0);
722
+ setHover(void 0);
468
723
  }
469
- )
470
- ] });
724
+ return;
725
+ }
726
+ const next = nextFocusDate(date, e.key, { shiftKey: e.shiftKey, firstDayOfWeek });
727
+ if (!next) return;
728
+ e.preventDefault();
729
+ moveFocus(next);
730
+ };
731
+ let paintStart;
732
+ let paintEnd;
733
+ if (anchor) {
734
+ const previewEnd = hover ?? (focusedIso ? parseISO(focusedIso) ?? anchor : anchor);
735
+ [paintStart, paintEnd] = sortRange(anchor, previewEnd);
736
+ } else if (committed) {
737
+ [paintStart, paintEnd] = sortRange(committed[0], committed[1]);
738
+ }
739
+ const anchorVisible = anchor && isMonthVisible2(anchor, viewYear, viewMonth, months) ? anchor : void 0;
740
+ const committedStartVisible = committed && isMonthVisible2(committed[0], viewYear, viewMonth, months) ? committed[0] : void 0;
741
+ const todayVisible = isMonthVisible2(today, viewYear, viewMonth, months) ? today : void 0;
742
+ const tabbableIso = focusedIso ?? (anchorVisible && toISO(anchorVisible)) ?? (committedStartVisible && toISO(committedStartVisible)) ?? (todayVisible && toISO(todayVisible)) ?? toISO(new Date(viewYear, viewMonth, 1));
743
+ const classifyDay = (date) => {
744
+ const isStart = !!paintStart && isSameDay(date, paintStart);
745
+ const isEnd = !!paintEnd && isSameDay(date, paintEnd);
746
+ const inRange = !!paintStart && !!paintEnd && !isStart && !isEnd && isInRange(date, paintStart, paintEnd);
747
+ return {
748
+ today: isSameDay(date, today),
749
+ selected: false,
750
+ rangeStart: isStart,
751
+ rangeEnd: isEnd,
752
+ inRange,
753
+ disabled: disabledFor(date),
754
+ tabbable: toISO(date) === tabbableIso
755
+ };
756
+ };
757
+ const weekdayNames = formatWeekday ? weekdayNamesFrom2(formatWeekday, firstDayOfWeek) : getWeekdayNames(locale, firstDayOfWeek);
758
+ const labelOfMonth = (y, m) => formatMonth ? formatMonth(new Date(y, m, 1)) : getMonthLabel(y, m, locale);
759
+ const labelOfDay = (d) => formatDay ? formatDay(d) : getDayLabel(d, locale);
760
+ const prevLabel = labels?.previousMonth ?? "Previous month";
761
+ const nextLabel = labels?.nextMonth ?? "Next month";
762
+ const count = Math.max(1, months);
763
+ const groupLabel = Array.from({ length: count }, (_, i) => {
764
+ const d = new Date(viewYear, viewMonth + i, 1);
765
+ return labelOfMonth(d.getFullYear(), d.getMonth());
766
+ }).join(", ");
767
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ...rest, className: (0, import_design_system_foundation9.cn)(Calendar_default.calendar, className), role: "group", "aria-label": groupLabel, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: Calendar_default.months, children: Array.from({ length: count }, (_, i) => {
768
+ const d = new Date(viewYear, viewMonth + i, 1);
769
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
770
+ MonthGrid,
771
+ {
772
+ year: d.getFullYear(),
773
+ month: d.getMonth(),
774
+ firstDayOfWeek,
775
+ weekdayNames,
776
+ monthLabel: labelOfMonth(d.getFullYear(), d.getMonth()),
777
+ headingId: `${headingBaseId}-${i}`,
778
+ showPrev: i === 0,
779
+ showNext: i === count - 1,
780
+ onPrev: () => page(-1),
781
+ onNext: () => page(1),
782
+ prevLabel,
783
+ nextLabel,
784
+ classifyDay,
785
+ formatDay: labelOfDay,
786
+ registerRef,
787
+ onSelect: select,
788
+ onKeyDown,
789
+ onDayPointerEnter: anchor ? ((date) => setHover(date)) : void 0
790
+ },
791
+ i
792
+ );
793
+ }) }) });
471
794
  }
472
795
 
473
796
  // src/components/ui/Carousel/Carousel.tsx
474
- var import_react3 = require("react");
797
+ var import_react4 = require("react");
475
798
 
476
799
  // src/components/ui/Carousel/Carousel.module.css
477
- var Carousel_default = {"component":"bds271Carousel-component","carousel":"bds271Carousel-carousel","track":"bds271Carousel-track","slide":"bds271Carousel-slide","navBtn":"bds271Carousel-navBtn"};
800
+ var Carousel_default = {"component":"bds2110Carousel-component","carousel":"bds2110Carousel-carousel","track":"bds2110Carousel-track","slide":"bds2110Carousel-slide","navBtn":"bds2110Carousel-navBtn"};
478
801
 
479
802
  // src/components/ui/Carousel/Carousel.tsx
480
- var import_design_system_foundation8 = require("@boostdev/design-system-foundation");
481
- var import_jsx_runtime8 = require("react/jsx-runtime");
803
+ var import_design_system_foundation10 = require("@boostdev/design-system-foundation");
804
+ var import_jsx_runtime10 = require("react/jsx-runtime");
805
+ function prefersReducedMotion() {
806
+ return typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
807
+ }
482
808
  function Carousel({ items, label, className, ...rest }) {
483
- const trackRef = (0, import_react3.useRef)(null);
484
- const listId = (0, import_react3.useId)();
809
+ const trackRef = (0, import_react4.useRef)(null);
810
+ const listId = (0, import_react4.useId)();
485
811
  const scroll = (direction) => {
486
- if (!trackRef.current) return;
487
- const { scrollLeft, clientWidth } = trackRef.current;
488
- trackRef.current.scrollTo({
489
- left: scrollLeft + (direction === "next" ? clientWidth : -clientWidth),
490
- behavior: "smooth"
812
+ const track = trackRef.current;
813
+ if (!track) return;
814
+ const isRtl = window.getComputedStyle(track).direction === "rtl";
815
+ const sign = direction === "next" ? 1 : -1;
816
+ track.scrollBy({
817
+ left: (isRtl ? -sign : sign) * track.clientWidth,
818
+ behavior: prefersReducedMotion() ? "auto" : "smooth"
491
819
  });
492
820
  };
493
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { ...rest, "aria-label": label, className: (0, import_design_system_foundation8.cn)(Carousel_default.carousel, className), children: [
494
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
821
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("section", { ...rest, "aria-label": label, className: (0, import_design_system_foundation10.cn)(Carousel_default.carousel, className), children: [
822
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
495
823
  "button",
496
824
  {
497
825
  type: "button",
498
- className: (0, import_design_system_foundation8.cn)(Carousel_default.navBtn, Carousel_default["--prev"]),
826
+ className: Carousel_default.navBtn,
499
827
  "aria-label": "Previous",
500
828
  "aria-controls": listId,
501
829
  onClick: () => scroll("prev"),
502
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) })
830
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) })
503
831
  }
504
832
  ),
505
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
833
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
506
834
  "div",
507
835
  {
508
836
  ref: trackRef,
509
837
  id: listId,
510
838
  role: "list",
511
839
  className: Carousel_default.track,
512
- children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { role: "listitem", className: Carousel_default.slide, children: item }, i))
840
+ children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { role: "listitem", className: Carousel_default.slide, children: item }, i))
513
841
  }
514
842
  ),
515
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
843
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
516
844
  "button",
517
845
  {
518
846
  type: "button",
519
- className: (0, import_design_system_foundation8.cn)(Carousel_default.navBtn, Carousel_default["--next"]),
847
+ className: Carousel_default.navBtn,
520
848
  "aria-label": "Next",
521
849
  "aria-controls": listId,
522
850
  onClick: () => scroll("next"),
523
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
851
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
524
852
  }
525
853
  )
526
854
  ] });
527
855
  }
528
856
 
529
857
  // src/components/ui/DescriptionList/DescriptionList.module.css
530
- var DescriptionList_default = {"component":"bds271DescriptionList-component","list":"bds271DescriptionList-list","group":"bds271DescriptionList-group","term":"bds271DescriptionList-term","details":"bds271DescriptionList-details","--layout_inline":"bds271DescriptionList---layout_inline"};
858
+ var DescriptionList_default = {"component":"bds2110DescriptionList-component","list":"bds2110DescriptionList-list","group":"bds2110DescriptionList-group","term":"bds2110DescriptionList-term","details":"bds2110DescriptionList-details","--layout_inline":"bds2110DescriptionList---layout_inline"};
531
859
 
532
860
  // src/components/ui/DescriptionList/DescriptionList.tsx
533
- var import_design_system_foundation9 = require("@boostdev/design-system-foundation");
534
- var import_jsx_runtime9 = require("react/jsx-runtime");
861
+ var import_design_system_foundation11 = require("@boostdev/design-system-foundation");
862
+ var import_jsx_runtime11 = require("react/jsx-runtime");
535
863
  function DescriptionList({ items, layout = "stacked", className, ...rest }) {
536
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dl", { ...rest, className: (0, import_design_system_foundation9.cn)(DescriptionList_default.list, DescriptionList_default[`--layout_${layout}`], className), children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: DescriptionList_default.group, children: [
537
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dt", { className: DescriptionList_default.term, children: item.term }),
538
- Array.isArray(item.details) ? item.details.map((d, j) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dd", { className: DescriptionList_default.details, children: d }, j)) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dd", { className: DescriptionList_default.details, children: item.details })
864
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dl", { ...rest, className: (0, import_design_system_foundation11.cn)(DescriptionList_default.list, DescriptionList_default[`--layout_${layout}`], className), children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: DescriptionList_default.group, children: [
865
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dt", { className: DescriptionList_default.term, children: item.term }),
866
+ Array.isArray(item.details) ? item.details.map((d, j) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dd", { className: DescriptionList_default.details, children: d }, j)) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dd", { className: DescriptionList_default.details, children: item.details })
539
867
  ] }, i)) });
540
868
  }
541
869
 
542
870
  // src/components/ui/Link/Link.module.css
543
- var Link_default = {"component":"bds271Link-component","link":"bds271Link-link","--variant_default":"bds271Link---variant_default","--variant_subtle":"bds271Link---variant_subtle","--variant_standalone":"bds271Link---variant_standalone","externalLabel":"bds271Link-externalLabel"};
871
+ var Link_default = {"component":"bds2110Link-component","link":"bds2110Link-link","--variant_default":"bds2110Link---variant_default","--variant_subtle":"bds2110Link---variant_subtle","--variant_standalone":"bds2110Link---variant_standalone","externalLabel":"bds2110Link-externalLabel"};
544
872
 
545
873
  // src/components/ui/Link/Link.tsx
546
- var import_design_system_foundation10 = require("@boostdev/design-system-foundation");
547
- var import_jsx_runtime10 = require("react/jsx-runtime");
874
+ var import_design_system_foundation12 = require("@boostdev/design-system-foundation");
875
+ var import_jsx_runtime12 = require("react/jsx-runtime");
548
876
  function Link({
549
877
  as,
550
878
  children,
@@ -556,36 +884,45 @@ function Link({
556
884
  }) {
557
885
  const Component = as ?? "a";
558
886
  const externalProps = external ? { target: "_blank", rel: "noreferrer noopener" } : {};
559
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
887
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
560
888
  Component,
561
889
  {
562
- className: (0, import_design_system_foundation10.cn)(Link_default.link, Link_default[`--variant_${variant}`], className),
890
+ className: (0, import_design_system_foundation12.cn)(Link_default.link, Link_default[`--variant_${variant}`], className),
563
891
  ...externalProps,
564
892
  ...props,
565
893
  children: [
566
894
  children,
567
- external && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: Link_default.externalLabel, children: externalLabel })
895
+ external && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: Link_default.externalLabel, children: externalLabel })
568
896
  ]
569
897
  }
570
898
  );
571
899
  }
572
900
 
573
901
  // src/components/ui/Loading/Loading.module.css
574
- var Loading_default = {"component":"bds271Loading-component","loading":"bds271Loading-loading","spinner":"bds271Loading-spinner","--size_small":"bds271Loading---size_small","--size_large":"bds271Loading---size_large"};
902
+ var Loading_default = {"component":"bds2110Loading-component","loading":"bds2110Loading-loading","spinner":"bds2110Loading-spinner","--size_small":"bds2110Loading---size_small","--size_large":"bds2110Loading---size_large"};
575
903
 
576
904
  // src/components/ui/Loading/Loading.tsx
577
- var import_design_system_foundation11 = require("@boostdev/design-system-foundation");
578
- var import_jsx_runtime11 = require("react/jsx-runtime");
579
- function Loading({ size = "medium", className, ...rest }) {
580
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { ...rest, className: (0, import_design_system_foundation11.cn)(Loading_default.loading, Loading_default[`--size_${size}`], className), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: Loading_default.spinner, role: "status", "aria-label": "Loading" }) });
905
+ var import_design_system_foundation13 = require("@boostdev/design-system-foundation");
906
+ var import_jsx_runtime13 = require("react/jsx-runtime");
907
+ function Loading({ size = "medium", className, "aria-label": ariaLabel, ...rest }) {
908
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
909
+ "div",
910
+ {
911
+ role: "status",
912
+ "aria-label": ariaLabel ?? "Loading",
913
+ ...rest,
914
+ className: (0, import_design_system_foundation13.cn)(Loading_default.loading, Loading_default[`--size_${size}`], className),
915
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: Loading_default.spinner })
916
+ }
917
+ );
581
918
  }
582
919
 
583
920
  // src/components/ui/NotificationBanner/NotificationBanner.module.css
584
- var NotificationBanner_default = {"component":"bds271NotificationBanner-component","banner":"bds271NotificationBanner-banner","--variant_info":"bds271NotificationBanner---variant_info","--variant_success":"bds271NotificationBanner---variant_success","--variant_warning":"bds271NotificationBanner---variant_warning","--variant_error":"bds271NotificationBanner---variant_error","content":"bds271NotificationBanner-content","action":"bds271NotificationBanner-action","dismiss":"bds271NotificationBanner-dismiss"};
921
+ var NotificationBanner_default = {"component":"bds2110NotificationBanner-component","banner":"bds2110NotificationBanner-banner","--variant_info":"bds2110NotificationBanner---variant_info","--variant_success":"bds2110NotificationBanner---variant_success","--variant_warning":"bds2110NotificationBanner---variant_warning","--variant_error":"bds2110NotificationBanner---variant_error","content":"bds2110NotificationBanner-content","action":"bds2110NotificationBanner-action","dismiss":"bds2110NotificationBanner-dismiss"};
585
922
 
586
923
  // src/components/ui/NotificationBanner/NotificationBanner.tsx
587
- var import_design_system_foundation12 = require("@boostdev/design-system-foundation");
588
- var import_jsx_runtime12 = require("react/jsx-runtime");
924
+ var import_design_system_foundation14 = require("@boostdev/design-system-foundation");
925
+ var import_jsx_runtime14 = require("react/jsx-runtime");
589
926
  function NotificationBanner({
590
927
  variant = "info",
591
928
  children,
@@ -595,25 +932,25 @@ function NotificationBanner({
595
932
  ...rest
596
933
  }) {
597
934
  const isUrgent = variant === "error" || variant === "warning";
598
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
935
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
599
936
  "div",
600
937
  {
601
938
  ...rest,
602
939
  role: isUrgent ? "alert" : "status",
603
940
  "aria-live": isUrgent ? "assertive" : "polite",
604
941
  "aria-atomic": "true",
605
- className: (0, import_design_system_foundation12.cn)(NotificationBanner_default.banner, NotificationBanner_default[`--variant_${variant}`], className),
942
+ className: (0, import_design_system_foundation14.cn)(NotificationBanner_default.banner, NotificationBanner_default[`--variant_${variant}`], className),
606
943
  children: [
607
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: NotificationBanner_default.content, children }),
608
- action && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: NotificationBanner_default.action, children: action }),
609
- onDismiss && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
944
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: NotificationBanner_default.content, children }),
945
+ action && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: NotificationBanner_default.action, children: action }),
946
+ onDismiss && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
610
947
  "button",
611
948
  {
612
949
  type: "button",
613
950
  className: NotificationBanner_default.dismiss,
614
951
  onClick: onDismiss,
615
952
  "aria-label": "Dismiss notification",
616
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
953
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
617
954
  }
618
955
  )
619
956
  ]
@@ -622,11 +959,11 @@ function NotificationBanner({
622
959
  }
623
960
 
624
961
  // src/components/ui/Pagination/Pagination.module.css
625
- var Pagination_default = {"component":"bds271Pagination-component","pagination":"bds271Pagination-pagination","list":"bds271Pagination-list","button":"bds271Pagination-button","--active":"bds271Pagination---active","--nav":"bds271Pagination---nav","ellipsis":"bds271Pagination-ellipsis"};
962
+ var Pagination_default = {"component":"bds2110Pagination-component","pagination":"bds2110Pagination-pagination","list":"bds2110Pagination-list","button":"bds2110Pagination-button","--active":"bds2110Pagination---active","--nav":"bds2110Pagination---nav","ellipsis":"bds2110Pagination-ellipsis"};
626
963
 
627
964
  // src/components/ui/Pagination/Pagination.tsx
628
- var import_design_system_foundation13 = require("@boostdev/design-system-foundation");
629
- var import_jsx_runtime13 = require("react/jsx-runtime");
965
+ var import_design_system_foundation15 = require("@boostdev/design-system-foundation");
966
+ var import_jsx_runtime15 = require("react/jsx-runtime");
630
967
  function getPageRange(current, total) {
631
968
  const delta = 1;
632
969
  const range = [];
@@ -647,24 +984,24 @@ function Pagination({
647
984
  ...rest
648
985
  }) {
649
986
  const pages = getPageRange(currentPage, totalPages);
650
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("nav", { ...rest, "aria-label": "Pagination", className: (0, import_design_system_foundation13.cn)(Pagination_default.pagination, className), children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("ul", { className: Pagination_default.list, children: [
651
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
987
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("nav", { ...rest, "aria-label": "Pagination", className: (0, import_design_system_foundation15.cn)(Pagination_default.pagination, className), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("ul", { className: Pagination_default.list, children: [
988
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
652
989
  "button",
653
990
  {
654
991
  type: "button",
655
- className: (0, import_design_system_foundation13.cn)(Pagination_default.button, Pagination_default["--nav"]),
992
+ className: (0, import_design_system_foundation15.cn)(Pagination_default.button, Pagination_default["--nav"]),
656
993
  onClick: () => onPageChange(currentPage - 1),
657
994
  disabled: currentPage <= 1,
658
995
  "aria-label": "Previous page",
659
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) })
996
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) })
660
997
  }
661
998
  ) }),
662
999
  pages.map(
663
- (page, index) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: Pagination_default.ellipsis, "aria-hidden": "true", children: "\u2026" }) }, `ellipsis-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1000
+ (page, index) => page === "..." ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: Pagination_default.ellipsis, "aria-hidden": "true", children: "\u2026" }) }, `ellipsis-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
664
1001
  "button",
665
1002
  {
666
1003
  type: "button",
667
- className: (0, import_design_system_foundation13.cn)(Pagination_default.button, currentPage === page ? Pagination_default["--active"] : void 0),
1004
+ className: (0, import_design_system_foundation15.cn)(Pagination_default.button, currentPage === page ? Pagination_default["--active"] : void 0),
668
1005
  onClick: () => onPageChange(page),
669
1006
  "aria-label": `Page ${page}`,
670
1007
  "aria-current": currentPage === page ? "page" : void 0,
@@ -672,26 +1009,26 @@ function Pagination({
672
1009
  }
673
1010
  ) }, page)
674
1011
  ),
675
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1012
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
676
1013
  "button",
677
1014
  {
678
1015
  type: "button",
679
- className: (0, import_design_system_foundation13.cn)(Pagination_default.button, Pagination_default["--nav"]),
1016
+ className: (0, import_design_system_foundation15.cn)(Pagination_default.button, Pagination_default["--nav"]),
680
1017
  onClick: () => onPageChange(currentPage + 1),
681
1018
  disabled: currentPage >= totalPages,
682
1019
  "aria-label": "Next page",
683
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
1020
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) })
684
1021
  }
685
1022
  ) })
686
1023
  ] }) });
687
1024
  }
688
1025
 
689
1026
  // src/components/ui/Progress/Progress.module.css
690
- var Progress_default = {"component":"bds271Progress-component","container":"bds271Progress-container","labelRow":"bds271Progress-labelRow","value":"bds271Progress-value","track":"bds271Progress-track","--size_small":"bds271Progress---size_small","--size_medium":"bds271Progress---size_medium","--size_large":"bds271Progress---size_large","fill":"bds271Progress-fill"};
1027
+ var Progress_default = {"component":"bds2110Progress-component","container":"bds2110Progress-container","labelRow":"bds2110Progress-labelRow","value":"bds2110Progress-value","track":"bds2110Progress-track","--size_small":"bds2110Progress---size_small","--size_medium":"bds2110Progress---size_medium","--size_large":"bds2110Progress---size_large","fill":"bds2110Progress-fill"};
691
1028
 
692
1029
  // src/components/ui/Progress/Progress.tsx
693
- var import_design_system_foundation14 = require("@boostdev/design-system-foundation");
694
- var import_jsx_runtime14 = require("react/jsx-runtime");
1030
+ var import_design_system_foundation16 = require("@boostdev/design-system-foundation");
1031
+ var import_jsx_runtime16 = require("react/jsx-runtime");
695
1032
  function Progress({
696
1033
  value,
697
1034
  max = 100,
@@ -702,35 +1039,35 @@ function Progress({
702
1039
  ...rest
703
1040
  }) {
704
1041
  const percentage = Math.min(100, Math.max(0, value / max * 100));
705
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { ...rest, className: (0, import_design_system_foundation14.cn)(Progress_default.container, className), children: [
706
- showLabel && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: Progress_default.labelRow, children: [
707
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: Progress_default.label, children: label }),
708
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { className: Progress_default.value, children: [
1042
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { ...rest, className: (0, import_design_system_foundation16.cn)(Progress_default.container, className), children: [
1043
+ showLabel && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: Progress_default.labelRow, children: [
1044
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: Progress_default.label, children: label }),
1045
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("span", { className: Progress_default.value, children: [
709
1046
  Math.round(percentage),
710
1047
  "%"
711
1048
  ] })
712
1049
  ] }),
713
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1050
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
714
1051
  "div",
715
1052
  {
716
1053
  role: "progressbar",
717
1054
  "aria-label": label,
718
- "aria-valuenow": value,
1055
+ "aria-valuenow": Math.min(max, Math.max(0, value)),
719
1056
  "aria-valuemin": 0,
720
1057
  "aria-valuemax": max,
721
- className: (0, import_design_system_foundation14.cn)(Progress_default.track, Progress_default[`--size_${size}`]),
722
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: Progress_default.fill, style: { width: `${percentage}%` } })
1058
+ className: (0, import_design_system_foundation16.cn)(Progress_default.track, Progress_default[`--size_${size}`]),
1059
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: Progress_default.fill, style: { inlineSize: `${percentage}%` } })
723
1060
  }
724
1061
  )
725
1062
  ] });
726
1063
  }
727
1064
 
728
1065
  // src/components/ui/ProgressCircle/ProgressCircle.module.css
729
- var ProgressCircle_default = {"component":"bds271ProgressCircle-component","wrapper":"bds271ProgressCircle-wrapper","svg":"bds271ProgressCircle-svg","track":"bds271ProgressCircle-track","fill":"bds271ProgressCircle-fill","value":"bds271ProgressCircle-value","--size_small":"bds271ProgressCircle---size_small","--size_medium":"bds271ProgressCircle---size_medium","--size_large":"bds271ProgressCircle---size_large"};
1066
+ var ProgressCircle_default = {"component":"bds2110ProgressCircle-component","wrapper":"bds2110ProgressCircle-wrapper","svg":"bds2110ProgressCircle-svg","track":"bds2110ProgressCircle-track","fill":"bds2110ProgressCircle-fill","value":"bds2110ProgressCircle-value","--size_small":"bds2110ProgressCircle---size_small","--size_medium":"bds2110ProgressCircle---size_medium","--size_large":"bds2110ProgressCircle---size_large"};
730
1067
 
731
1068
  // src/components/ui/ProgressCircle/ProgressCircle.tsx
732
- var import_design_system_foundation15 = require("@boostdev/design-system-foundation");
733
- var import_jsx_runtime15 = require("react/jsx-runtime");
1069
+ var import_design_system_foundation17 = require("@boostdev/design-system-foundation");
1070
+ var import_jsx_runtime17 = require("react/jsx-runtime");
734
1071
  var SIZE_PX = { small: 40, medium: 64, large: 96 };
735
1072
  var STROKE_WIDTH = 4;
736
1073
  function ProgressCircle({
@@ -748,18 +1085,18 @@ function ProgressCircle({
748
1085
  const circumference = 2 * Math.PI * radius;
749
1086
  const offset = circumference - percentage / 100 * circumference;
750
1087
  const cx = px / 2;
751
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1088
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
752
1089
  "div",
753
1090
  {
754
1091
  ...rest,
755
1092
  role: "progressbar",
756
1093
  "aria-label": label,
757
- "aria-valuenow": value,
1094
+ "aria-valuenow": Math.min(max, Math.max(0, value)),
758
1095
  "aria-valuemin": 0,
759
1096
  "aria-valuemax": max,
760
- className: (0, import_design_system_foundation15.cn)(ProgressCircle_default.wrapper, ProgressCircle_default[`--size_${size}`], className),
1097
+ className: (0, import_design_system_foundation17.cn)(ProgressCircle_default.wrapper, ProgressCircle_default[`--size_${size}`], className),
761
1098
  children: [
762
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1099
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
763
1100
  "svg",
764
1101
  {
765
1102
  width: px,
@@ -768,7 +1105,7 @@ function ProgressCircle({
768
1105
  "aria-hidden": "true",
769
1106
  className: ProgressCircle_default.svg,
770
1107
  children: [
771
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1108
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
772
1109
  "circle",
773
1110
  {
774
1111
  className: ProgressCircle_default.track,
@@ -779,7 +1116,7 @@ function ProgressCircle({
779
1116
  fill: "none"
780
1117
  }
781
1118
  ),
782
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1119
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
783
1120
  "circle",
784
1121
  {
785
1122
  className: ProgressCircle_default.fill,
@@ -797,7 +1134,7 @@ function ProgressCircle({
797
1134
  ]
798
1135
  }
799
1136
  ),
800
- showValue && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { className: ProgressCircle_default.value, "aria-hidden": "true", children: [
1137
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: ProgressCircle_default.value, "aria-hidden": "true", children: [
801
1138
  Math.round(percentage),
802
1139
  "%"
803
1140
  ] })
@@ -807,54 +1144,57 @@ function ProgressCircle({
807
1144
  }
808
1145
 
809
1146
  // src/components/ui/Separator/Separator.module.css
810
- var Separator_default = {"component":"bds271Separator-component","separator":"bds271Separator-separator","--horizontal":"bds271Separator---horizontal","--vertical":"bds271Separator---vertical"};
1147
+ var Separator_default = {"component":"bds2110Separator-component","separator":"bds2110Separator-separator","--horizontal":"bds2110Separator---horizontal","--vertical":"bds2110Separator---vertical"};
811
1148
 
812
1149
  // src/components/ui/Separator/Separator.tsx
813
- var import_design_system_foundation16 = require("@boostdev/design-system-foundation");
814
- var import_jsx_runtime16 = require("react/jsx-runtime");
1150
+ var import_design_system_foundation18 = require("@boostdev/design-system-foundation");
1151
+ var import_jsx_runtime18 = require("react/jsx-runtime");
815
1152
  function Separator({ orientation = "horizontal", className, ...rest }) {
816
1153
  if (orientation === "vertical") {
817
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1154
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
818
1155
  "div",
819
1156
  {
820
1157
  ...rest,
821
1158
  role: "separator",
822
1159
  "aria-orientation": "vertical",
823
- className: (0, import_design_system_foundation16.cn)(Separator_default.separator, Separator_default["--vertical"], className)
1160
+ className: (0, import_design_system_foundation18.cn)(Separator_default.separator, Separator_default["--vertical"], className)
824
1161
  }
825
1162
  );
826
1163
  }
827
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("hr", { ...rest, "aria-orientation": "horizontal", className: (0, import_design_system_foundation16.cn)(Separator_default.separator, Separator_default["--horizontal"], className) });
1164
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("hr", { ...rest, "aria-orientation": "horizontal", className: (0, import_design_system_foundation18.cn)(Separator_default.separator, Separator_default["--horizontal"], className) });
828
1165
  }
829
1166
 
830
1167
  // src/components/ui/Skeleton/Skeleton.tsx
831
- var import_design_system_foundation17 = require("@boostdev/design-system-foundation");
1168
+ var import_design_system_foundation19 = require("@boostdev/design-system-foundation");
832
1169
 
833
1170
  // src/components/ui/Skeleton/Skeleton.module.css
834
- var Skeleton_default = {"component":"bds271Skeleton-component","skeleton":"bds271Skeleton-skeleton"};
1171
+ var Skeleton_default = {"component":"bds2110Skeleton-component","skeleton":"bds2110Skeleton-skeleton"};
835
1172
 
836
1173
  // src/components/ui/Skeleton/Skeleton.tsx
837
- var import_jsx_runtime17 = require("react/jsx-runtime");
1174
+ var import_jsx_runtime19 = require("react/jsx-runtime");
838
1175
  function Skeleton({ className, ...rest }) {
839
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { ...rest, "aria-hidden": "true", className: (0, import_design_system_foundation17.cn)(Skeleton_default.skeleton, className) });
1176
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { ...rest, "aria-hidden": "true", className: (0, import_design_system_foundation19.cn)(Skeleton_default.skeleton, className) });
840
1177
  }
841
1178
 
842
1179
  // src/components/ui/SkipLink/SkipLink.module.css
843
- var SkipLink_default = {"component":"bds271SkipLink-component","skipLink":"bds271SkipLink-skipLink"};
1180
+ var SkipLink_default = {"component":"bds2110SkipLink-component","skipLink":"bds2110SkipLink-skipLink"};
844
1181
 
845
1182
  // src/components/ui/SkipLink/SkipLink.tsx
846
- var import_design_system_foundation18 = require("@boostdev/design-system-foundation");
847
- var import_jsx_runtime18 = require("react/jsx-runtime");
1183
+ var import_design_system_foundation20 = require("@boostdev/design-system-foundation");
1184
+ var import_jsx_runtime20 = require("react/jsx-runtime");
848
1185
  function SkipLink({ href = "#main", children = "Skip to main content", className, ...rest }) {
849
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("a", { ...rest, href, className: (0, import_design_system_foundation18.cn)(SkipLink_default.skipLink, className), children });
1186
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("a", { ...rest, href, className: (0, import_design_system_foundation20.cn)(SkipLink_default.skipLink, className), children });
850
1187
  }
851
1188
 
1189
+ // src/components/ui/Table/Table.tsx
1190
+ var import_react5 = require("react");
1191
+
852
1192
  // src/components/ui/Table/Table.module.css
853
- var Table_default = {"component":"bds271Table-component","wrapper":"bds271Table-wrapper","table":"bds271Table-table","caption":"bds271Table-caption","thead":"bds271Table-thead","th":"bds271Table-th","--sortable":"bds271Table---sortable","sortButton":"bds271Table-sortButton","sortIcon":"bds271Table-sortIcon","--sort-active":"bds271Table---sort-active","--sort-desc":"bds271Table---sort-desc","tbody":"bds271Table-tbody","tr":"bds271Table-tr","td":"bds271Table-td"};
1193
+ var Table_default = {"component":"bds2110Table-component","wrapper":"bds2110Table-wrapper","table":"bds2110Table-table","caption":"bds2110Table-caption","thead":"bds2110Table-thead","th":"bds2110Table-th","--sortable":"bds2110Table---sortable","sortButton":"bds2110Table-sortButton","sortIcon":"bds2110Table-sortIcon","--sort-active":"bds2110Table---sort-active","--sort-desc":"bds2110Table---sort-desc","tbody":"bds2110Table-tbody","tr":"bds2110Table-tr","td":"bds2110Table-td"};
854
1194
 
855
1195
  // src/components/ui/Table/Table.tsx
856
- var import_design_system_foundation19 = require("@boostdev/design-system-foundation");
857
- var import_jsx_runtime19 = require("react/jsx-runtime");
1196
+ var import_design_system_foundation21 = require("@boostdev/design-system-foundation");
1197
+ var import_jsx_runtime21 = require("react/jsx-runtime");
858
1198
  function Table({
859
1199
  columns,
860
1200
  rows,
@@ -862,8 +1202,14 @@ function Table({
862
1202
  sortKey,
863
1203
  sortDirection,
864
1204
  onSort,
865
- className
1205
+ rowKey,
1206
+ className,
1207
+ ...rest
866
1208
  }) {
1209
+ const generatedId = (0, import_react5.useId)();
1210
+ const captionId = caption ? `${generatedId}-caption` : void 0;
1211
+ const hasCustomLabel = "aria-label" in rest || "aria-labelledby" in rest;
1212
+ const hasAccessibleName = Boolean(caption) || hasCustomLabel;
867
1213
  const handleSort = (key) => {
868
1214
  if (!onSort) return;
869
1215
  const nextDirection = sortKey === key && sortDirection === "asc" ? "desc" : "asc";
@@ -873,62 +1219,81 @@ function Table({
873
1219
  if (sortKey !== key) return "none";
874
1220
  return sortDirection === "asc" ? "ascending" : "descending";
875
1221
  };
876
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: (0, import_design_system_foundation19.cn)(Table_default.wrapper, className), children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("table", { className: Table_default.table, children: [
877
- caption && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("caption", { className: Table_default.caption, children: caption }),
878
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("thead", { className: Table_default.thead, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("tr", { children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
879
- "th",
880
- {
881
- scope: "col",
882
- "aria-sort": col.sortable ? getAriaSort(col.key) : void 0,
883
- className: (0, import_design_system_foundation19.cn)(Table_default.th, col.sortable ? Table_default["--sortable"] : void 0),
884
- children: col.sortable ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
885
- "button",
1222
+ const getSortAriaLabel = (col) => {
1223
+ const label = col.sortLabel ?? (typeof col.header === "string" ? col.header : void 0);
1224
+ if (!label) return void 0;
1225
+ const stateSuffix = sortKey === col.key ? `, currently ${sortDirection === "asc" ? "ascending" : "descending"}` : "";
1226
+ return `Sort by ${label}${stateSuffix}`;
1227
+ };
1228
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1229
+ "div",
1230
+ {
1231
+ ...rest,
1232
+ className: (0, import_design_system_foundation21.cn)(Table_default.wrapper, className),
1233
+ tabIndex: rest.tabIndex ?? 0,
1234
+ role: hasAccessibleName ? "region" : void 0,
1235
+ "aria-labelledby": hasCustomLabel ? rest["aria-labelledby"] : captionId,
1236
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("table", { className: Table_default.table, children: [
1237
+ caption && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("caption", { id: captionId, className: Table_default.caption, children: caption }),
1238
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("thead", { className: Table_default.thead, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tr", { children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1239
+ "th",
886
1240
  {
887
- type: "button",
888
- className: Table_default.sortButton,
889
- onClick: () => handleSort(col.key),
890
- "aria-label": `Sort by ${String(col.header)}${sortKey === col.key ? `, currently ${sortDirection === "asc" ? "ascending" : "descending"}` : ""}`,
891
- children: [
892
- col.header,
893
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
894
- "svg",
895
- {
896
- "aria-hidden": "true",
897
- className: (0, import_design_system_foundation19.cn)(
898
- Table_default.sortIcon,
899
- sortKey === col.key ? Table_default["--sort-active"] : void 0,
900
- sortKey === col.key && sortDirection === "desc" ? Table_default["--sort-desc"] : void 0
901
- ),
902
- viewBox: "0 0 24 24",
903
- fill: "none",
904
- stroke: "currentColor",
905
- strokeWidth: "2",
906
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" })
907
- }
908
- )
909
- ]
910
- }
911
- ) : col.header
912
- },
913
- col.key
914
- )) }) }),
915
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("tbody", { className: Table_default.tbody, children: rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("tr", { className: Table_default.tr, children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("td", { className: Table_default.td, children: col.render ? col.render(row) : String(row[col.key] ?? "") }, col.key)) }, JSON.stringify(row) || rowIndex)) })
916
- ] }) });
1241
+ scope: "col",
1242
+ "aria-sort": col.sortable ? getAriaSort(col.key) : void 0,
1243
+ className: (0, import_design_system_foundation21.cn)(Table_default.th, col.sortable ? Table_default["--sortable"] : void 0),
1244
+ children: col.sortable ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1245
+ "button",
1246
+ {
1247
+ type: "button",
1248
+ className: Table_default.sortButton,
1249
+ onClick: () => handleSort(col.key),
1250
+ "aria-label": getSortAriaLabel(col),
1251
+ children: [
1252
+ col.header,
1253
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1254
+ "svg",
1255
+ {
1256
+ "aria-hidden": "true",
1257
+ className: (0, import_design_system_foundation21.cn)(
1258
+ Table_default.sortIcon,
1259
+ sortKey === col.key ? Table_default["--sort-active"] : void 0,
1260
+ sortKey === col.key && sortDirection === "desc" ? Table_default["--sort-desc"] : void 0
1261
+ ),
1262
+ viewBox: "0 0 24 24",
1263
+ fill: "none",
1264
+ stroke: "currentColor",
1265
+ strokeWidth: "2",
1266
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" })
1267
+ }
1268
+ )
1269
+ ]
1270
+ }
1271
+ ) : col.header
1272
+ },
1273
+ col.key
1274
+ )) }) }),
1275
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tbody", { className: Table_default.tbody, children: rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tr", { className: Table_default.tr, children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("td", { className: Table_default.td, children: col.render ? col.render(row) : String(row[col.key] ?? "") }, col.key)) }, rowKey?.(row, rowIndex) ?? rowIndex)) })
1276
+ ] })
1277
+ }
1278
+ );
917
1279
  }
918
1280
 
919
1281
  // src/components/ui/Tabs/Tabs.tsx
920
- var import_react4 = require("react");
1282
+ var import_react6 = require("react");
921
1283
 
922
1284
  // src/components/ui/Tabs/Tabs.module.css
923
- var Tabs_default = {"component":"bds271Tabs-component","tabs":"bds271Tabs-tabs","tabList":"bds271Tabs-tabList","tab":"bds271Tabs-tab","--active":"bds271Tabs---active","panel":"bds271Tabs-panel"};
1285
+ var Tabs_default = {"component":"bds2110Tabs-component","tabs":"bds2110Tabs-tabs","tabList":"bds2110Tabs-tabList","tab":"bds2110Tabs-tab","--active":"bds2110Tabs---active","panel":"bds2110Tabs-panel"};
924
1286
 
925
1287
  // src/components/ui/Tabs/Tabs.tsx
926
- var import_design_system_foundation20 = require("@boostdev/design-system-foundation");
927
- var import_jsx_runtime20 = require("react/jsx-runtime");
1288
+ var import_design_system_foundation22 = require("@boostdev/design-system-foundation");
1289
+ var import_jsx_runtime22 = require("react/jsx-runtime");
928
1290
  function Tabs({ tabs, defaultTab, className, ...rest }) {
929
- const baseId = (0, import_react4.useId)();
930
- const [activeTab, setActiveTab] = (0, import_react4.useState)(defaultTab ?? tabs[0]?.id);
931
- const tabRefs = (0, import_react4.useRef)([]);
1291
+ const baseId = (0, import_react6.useId)();
1292
+ const [activeTab, setActiveTab] = (0, import_react6.useState)(() => {
1293
+ const initialTab = tabs.find((tab) => tab.id === defaultTab && !tab.disabled) ?? tabs.find((tab) => !tab.disabled);
1294
+ return initialTab?.id;
1295
+ });
1296
+ const tabRefs = (0, import_react6.useRef)([]);
932
1297
  const enabledIndexes = tabs.map((tab, i) => ({ tab, i })).filter(({ tab }) => !tab.disabled).map(({ i }) => i);
933
1298
  const handleKeyDown = (e, index) => {
934
1299
  const pos = enabledIndexes.indexOf(index);
@@ -950,12 +1315,12 @@ function Tabs({ tabs, defaultTab, className, ...rest }) {
950
1315
  focusAt(enabledIndexes[enabledIndexes.length - 1]);
951
1316
  }
952
1317
  };
953
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { ...rest, className: (0, import_design_system_foundation20.cn)(Tabs_default.tabs, className), children: [
954
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { role: "tablist", className: Tabs_default.tabList, children: tabs.map((tab, i) => {
1318
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { ...rest, className: (0, import_design_system_foundation22.cn)(Tabs_default.tabs, className), children: [
1319
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { role: "tablist", className: Tabs_default.tabList, children: tabs.map((tab, i) => {
955
1320
  const tabId = `${baseId}-tab-${tab.id}`;
956
1321
  const panelId = `${baseId}-panel-${tab.id}`;
957
1322
  const isActive = activeTab === tab.id;
958
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1323
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
959
1324
  "button",
960
1325
  {
961
1326
  ref: (el) => {
@@ -968,7 +1333,7 @@ function Tabs({ tabs, defaultTab, className, ...rest }) {
968
1333
  "aria-controls": panelId,
969
1334
  tabIndex: isActive ? 0 : -1,
970
1335
  disabled: tab.disabled,
971
- className: (0, import_design_system_foundation20.cn)(Tabs_default.tab, isActive ? Tabs_default["--active"] : void 0),
1336
+ className: (0, import_design_system_foundation22.cn)(Tabs_default.tab, isActive ? Tabs_default["--active"] : void 0),
972
1337
  onClick: () => setActiveTab(tab.id),
973
1338
  onKeyDown: (e) => handleKeyDown(e, i),
974
1339
  children: tab.label
@@ -980,13 +1345,14 @@ function Tabs({ tabs, defaultTab, className, ...rest }) {
980
1345
  const tabId = `${baseId}-tab-${tab.id}`;
981
1346
  const panelId = `${baseId}-panel-${tab.id}`;
982
1347
  const isActive = activeTab === tab.id;
983
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1348
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
984
1349
  "div",
985
1350
  {
986
1351
  id: panelId,
987
1352
  role: "tabpanel",
988
1353
  "aria-labelledby": tabId,
989
1354
  hidden: !isActive,
1355
+ tabIndex: 0,
990
1356
  className: Tabs_default.panel,
991
1357
  children: tab.content
992
1358
  },
@@ -997,14 +1363,14 @@ function Tabs({ tabs, defaultTab, className, ...rest }) {
997
1363
  }
998
1364
 
999
1365
  // src/components/ui/Tooltip/Tooltip.tsx
1000
- var import_react5 = require("react");
1366
+ var import_react7 = require("react");
1001
1367
 
1002
1368
  // src/components/ui/Tooltip/Tooltip.module.css
1003
- var Tooltip_default = {"component":"bds271Tooltip-component","wrapper":"bds271Tooltip-wrapper","tooltip":"bds271Tooltip-tooltip","--placement_top":"bds271Tooltip---placement_top","--placement_bottom":"bds271Tooltip---placement_bottom","--placement_left":"bds271Tooltip---placement_left","--placement_right":"bds271Tooltip---placement_right"};
1369
+ var Tooltip_default = {"component":"bds2110Tooltip-component","wrapper":"bds2110Tooltip-wrapper","tooltip":"bds2110Tooltip-tooltip","--visible":"bds2110Tooltip---visible","--placement_top":"bds2110Tooltip---placement_top","--placement_bottom":"bds2110Tooltip---placement_bottom","--placement_left":"bds2110Tooltip---placement_left","--placement_right":"bds2110Tooltip---placement_right"};
1004
1370
 
1005
1371
  // src/components/ui/Tooltip/Tooltip.tsx
1006
- var import_design_system_foundation21 = require("@boostdev/design-system-foundation");
1007
- var import_jsx_runtime21 = require("react/jsx-runtime");
1372
+ var import_design_system_foundation23 = require("@boostdev/design-system-foundation");
1373
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1008
1374
  function Tooltip({
1009
1375
  content,
1010
1376
  placement = "top",
@@ -1012,29 +1378,37 @@ function Tooltip({
1012
1378
  className,
1013
1379
  ...rest
1014
1380
  }) {
1015
- const tooltipId = (0, import_react5.useId)();
1016
- const [isVisible, setIsVisible] = (0, import_react5.useState)(false);
1017
- const trigger = (0, import_react5.isValidElement)(children) ? (0, import_react5.cloneElement)(children, {
1381
+ const tooltipId = (0, import_react7.useId)();
1382
+ const [isVisible, setIsVisible] = (0, import_react7.useState)(false);
1383
+ const show = () => setIsVisible(true);
1384
+ const hide = () => setIsVisible(false);
1385
+ const handleKeyDown = (event) => {
1386
+ if (event.key === "Escape" && isVisible) {
1387
+ hide();
1388
+ }
1389
+ };
1390
+ const trigger = (0, import_react7.isValidElement)(children) ? (0, import_react7.cloneElement)(children, {
1018
1391
  "aria-describedby": tooltipId
1019
1392
  }) : children;
1020
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1393
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1021
1394
  "span",
1022
1395
  {
1023
1396
  ...rest,
1024
- className: (0, import_design_system_foundation21.cn)(Tooltip_default.wrapper, className),
1025
- onMouseEnter: () => setIsVisible(true),
1026
- onMouseLeave: () => setIsVisible(false),
1027
- onFocus: () => setIsVisible(true),
1028
- onBlur: () => setIsVisible(false),
1397
+ className: (0, import_design_system_foundation23.cn)(Tooltip_default.wrapper, className),
1398
+ onMouseEnter: show,
1399
+ onMouseLeave: hide,
1400
+ onFocus: show,
1401
+ onBlur: hide,
1402
+ onKeyDown: handleKeyDown,
1029
1403
  children: [
1030
1404
  trigger,
1031
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1405
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1032
1406
  "span",
1033
1407
  {
1034
1408
  id: tooltipId,
1035
1409
  role: "tooltip",
1036
- "aria-hidden": !isVisible,
1037
- className: (0, import_design_system_foundation21.cn)(Tooltip_default.tooltip, Tooltip_default[`--placement_${placement}`]),
1410
+ hidden: !isVisible,
1411
+ className: (0, import_design_system_foundation23.cn)(Tooltip_default.tooltip, Tooltip_default[`--placement_${placement}`], isVisible && Tooltip_default["--visible"]),
1038
1412
  children: content
1039
1413
  }
1040
1414
  )
@@ -1044,11 +1418,11 @@ function Tooltip({
1044
1418
  }
1045
1419
 
1046
1420
  // src/components/ui/Typography/Typography.module.css
1047
- var Typography_default = {"component":"bds271Typography-component","typography":"bds271Typography-typography","--h1":"bds271Typography---h1","--h2":"bds271Typography---h2","--h3":"bds271Typography---h3","--body":"bds271Typography---body","--body_s":"bds271Typography---body_s"};
1421
+ var Typography_default = {"component":"bds2110Typography-component","typography":"bds2110Typography-typography","--h1":"bds2110Typography---h1","--h2":"bds2110Typography---h2","--h3":"bds2110Typography---h3","--body":"bds2110Typography---body","--body_s":"bds2110Typography---body_s"};
1048
1422
 
1049
1423
  // src/components/ui/Typography/Typography.tsx
1050
- var import_design_system_foundation22 = require("@boostdev/design-system-foundation");
1051
- var import_jsx_runtime22 = require("react/jsx-runtime");
1424
+ var import_design_system_foundation24 = require("@boostdev/design-system-foundation");
1425
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1052
1426
  var variantToElement = {
1053
1427
  h1: "h1",
1054
1428
  h2: "h2",
@@ -1058,15 +1432,15 @@ var variantToElement = {
1058
1432
  };
1059
1433
  function Typography({ variant = "body", component, children, className, ...rest }) {
1060
1434
  const Component = component || variantToElement[variant];
1061
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Component, { ...rest, className: (0, import_design_system_foundation22.cn)(Typography_default.typography, Typography_default[`--${variant}`], className), children });
1435
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Component, { ...rest, className: (0, import_design_system_foundation24.cn)(Typography_default.typography, Typography_default[`--${variant}`], className), children });
1062
1436
  }
1063
1437
 
1064
1438
  // src/components/interaction/Button/Button.module.css
1065
- var Button_default = {"component":"bds271Button-component","button":"bds271Button-button","--default":"bds271Button---default","--outline":"bds271Button---outline","--ghost":"bds271Button---ghost","--size_small":"bds271Button---size_small","--size_medium":"bds271Button---size_medium","--size_large":"bds271Button---size_large","--hasPulse":"bds271Button---hasPulse","iconStart":"bds271Button-iconStart","iconEnd":"bds271Button-iconEnd","--iconOnly":"bds271Button---iconOnly"};
1439
+ var Button_default = {"component":"bds2110Button-component","button":"bds2110Button-button","--default":"bds2110Button---default","--outline":"bds2110Button---outline","--ghost":"bds2110Button---ghost","--size_small":"bds2110Button---size_small","--size_medium":"bds2110Button---size_medium","--size_large":"bds2110Button---size_large","--hasPulse":"bds2110Button---hasPulse","iconStart":"bds2110Button-iconStart","iconEnd":"bds2110Button-iconEnd","--iconOnly":"bds2110Button---iconOnly"};
1066
1440
 
1067
1441
  // src/components/interaction/Button/Button.tsx
1068
- var import_design_system_foundation23 = require("@boostdev/design-system-foundation");
1069
- var import_jsx_runtime23 = require("react/jsx-runtime");
1442
+ var import_design_system_foundation25 = require("@boostdev/design-system-foundation");
1443
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1070
1444
  function Button({
1071
1445
  children,
1072
1446
  className,
@@ -1084,7 +1458,7 @@ function Button({
1084
1458
  onClick,
1085
1459
  ...rest
1086
1460
  }) {
1087
- const classNames = (0, import_design_system_foundation23.cn)(
1461
+ const classNames = (0, import_design_system_foundation25.cn)(
1088
1462
  Button_default.button,
1089
1463
  Button_default[`--${variant}`],
1090
1464
  Button_default[`--size_${size}`],
@@ -1102,15 +1476,16 @@ function Button({
1102
1476
  const handleButtonClick = (e) => {
1103
1477
  onClick?.(e);
1104
1478
  };
1105
- const content = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
1106
- Boolean(iconStart) && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: Button_default.iconStart, children: iconStart }),
1479
+ const content = /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
1480
+ Boolean(iconStart) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: Button_default.iconStart, children: iconStart }),
1107
1481
  children,
1108
- Boolean(iconEnd) && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: Button_default.iconEnd, children: iconEnd })
1482
+ Boolean(iconEnd) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: Button_default.iconEnd, children: iconEnd })
1109
1483
  ] });
1110
1484
  if (href) {
1111
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1485
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1112
1486
  "a",
1113
1487
  {
1488
+ ...rest,
1114
1489
  className: classNames,
1115
1490
  href: disabled ? void 0 : href,
1116
1491
  target,
@@ -1118,26 +1493,25 @@ function Button({
1118
1493
  "aria-disabled": disabled,
1119
1494
  tabIndex: disabled ? -1 : void 0,
1120
1495
  onClick: handleAnchorClick,
1121
- ...rest,
1122
1496
  children: content
1123
1497
  }
1124
1498
  );
1125
1499
  }
1126
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1500
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1127
1501
  "button",
1128
1502
  {
1503
+ ...rest,
1129
1504
  type,
1130
1505
  className: classNames,
1131
1506
  disabled,
1132
1507
  onClick: handleButtonClick,
1133
- ...rest,
1134
1508
  children: content
1135
1509
  }
1136
1510
  );
1137
1511
  }
1138
1512
 
1139
1513
  // src/components/interaction/Command/Command.tsx
1140
- var import_react6 = require("react");
1514
+ var import_react8 = require("react");
1141
1515
 
1142
1516
  // src/polyfill-invoker-commands.ts
1143
1517
  var installed = false;
@@ -1179,11 +1553,11 @@ function installInvokerCommandsPolyfill() {
1179
1553
  }
1180
1554
 
1181
1555
  // src/components/interaction/Command/Command.module.css
1182
- var Command_default = {"component":"bds271Command-component","dialog":"bds271Command-dialog","palette":"bds271Command-palette","searchRow":"bds271Command-searchRow","searchIcon":"bds271Command-searchIcon","search":"bds271Command-search","escHint":"bds271Command-escHint","list":"bds271Command-list","groupList":"bds271Command-groupList","group":"bds271Command-group","item":"bds271Command-item","itemActive":"bds271Command-itemActive","itemLabel":"bds271Command-itemLabel","itemDesc":"bds271Command-itemDesc","shortcut":"bds271Command-shortcut","empty":"bds271Command-empty"};
1556
+ var Command_default = {"component":"bds2110Command-component","dialog":"bds2110Command-dialog","palette":"bds2110Command-palette","searchRow":"bds2110Command-searchRow","searchIcon":"bds2110Command-searchIcon","search":"bds2110Command-search","escHint":"bds2110Command-escHint","list":"bds2110Command-list","groupList":"bds2110Command-groupList","group":"bds2110Command-group","item":"bds2110Command-item","itemActive":"bds2110Command-itemActive","itemLabel":"bds2110Command-itemLabel","itemDesc":"bds2110Command-itemDesc","shortcut":"bds2110Command-shortcut","empty":"bds2110Command-empty","srOnly":"bds2110Command-srOnly"};
1183
1557
 
1184
1558
  // src/components/interaction/Command/Command.tsx
1185
- var import_design_system_foundation24 = require("@boostdev/design-system-foundation");
1186
- var import_jsx_runtime24 = require("react/jsx-runtime");
1559
+ var import_design_system_foundation26 = require("@boostdev/design-system-foundation");
1560
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1187
1561
  installInvokerCommandsPolyfill();
1188
1562
  function Command({
1189
1563
  id: idProp,
@@ -1195,20 +1569,20 @@ function Command({
1195
1569
  className,
1196
1570
  ...rest
1197
1571
  }) {
1198
- const [query, setQuery] = (0, import_react6.useState)("");
1199
- const [activeIndex, setActiveIndex] = (0, import_react6.useState)(0);
1200
- const generatedId = (0, import_react6.useId)();
1572
+ const [query, setQuery] = (0, import_react8.useState)("");
1573
+ const [activeIndex, setActiveIndex] = (0, import_react8.useState)(0);
1574
+ const generatedId = (0, import_react8.useId)();
1201
1575
  const dialogId = idProp ?? generatedId;
1202
- const dialogRef = (0, import_react6.useRef)(null);
1203
- const inputRef = (0, import_react6.useRef)(null);
1204
- const listboxId = (0, import_react6.useId)();
1205
- const filtered = (0, import_react6.useMemo)(() => {
1576
+ const dialogRef = (0, import_react8.useRef)(null);
1577
+ const inputRef = (0, import_react8.useRef)(null);
1578
+ const listboxId = (0, import_react8.useId)();
1579
+ const filtered = (0, import_react8.useMemo)(() => {
1206
1580
  const q = query.toLowerCase().trim();
1207
1581
  return q ? items.filter(
1208
1582
  (item) => item.label.toLowerCase().includes(q) || item.description?.toLowerCase().includes(q)
1209
1583
  ) : items;
1210
1584
  }, [query, items]);
1211
- const groups = (0, import_react6.useMemo)(() => {
1585
+ const groups = (0, import_react8.useMemo)(() => {
1212
1586
  const map = /* @__PURE__ */ new Map();
1213
1587
  filtered.forEach((item) => {
1214
1588
  const g = item.group ?? "";
@@ -1218,8 +1592,8 @@ function Command({
1218
1592
  });
1219
1593
  return map;
1220
1594
  }, [filtered]);
1221
- const triggerRef = (0, import_react6.useRef)(null);
1222
- (0, import_react6.useEffect)(() => {
1595
+ const triggerRef = (0, import_react8.useRef)(null);
1596
+ (0, import_react8.useEffect)(() => {
1223
1597
  const dialog = dialogRef.current;
1224
1598
  if (!dialog) return;
1225
1599
  if (isOpen && !dialog.open) {
@@ -1238,10 +1612,10 @@ function Command({
1238
1612
  document.body.style.overflow = "";
1239
1613
  };
1240
1614
  }, [isOpen]);
1241
- (0, import_react6.useEffect)(() => {
1615
+ (0, import_react8.useEffect)(() => {
1242
1616
  setActiveIndex(0);
1243
1617
  }, [query]);
1244
- (0, import_react6.useEffect)(() => {
1618
+ (0, import_react8.useEffect)(() => {
1245
1619
  const dialog = dialogRef.current;
1246
1620
  if (!dialog) return;
1247
1621
  const handleCommand = (e) => {
@@ -1275,8 +1649,11 @@ function Command({
1275
1649
  setActiveIndex((i) => Math.max(i - 1, 0));
1276
1650
  } else if (e.key === "Enter") {
1277
1651
  e.preventDefault();
1278
- filtered[activeIndex]?.onSelect();
1279
- onClose();
1652
+ const item = filtered[activeIndex];
1653
+ if (item) {
1654
+ item.onSelect();
1655
+ onClose();
1656
+ }
1280
1657
  } else if (e.key === "Escape") {
1281
1658
  onClose();
1282
1659
  }
@@ -1285,28 +1662,29 @@ function Command({
1285
1662
  item.onSelect();
1286
1663
  onClose();
1287
1664
  };
1288
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1665
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1289
1666
  "dialog",
1290
1667
  {
1291
1668
  ...rest,
1292
1669
  ref: dialogRef,
1293
1670
  id: dialogId,
1294
- className: (0, import_design_system_foundation24.cn)(Command_default.dialog, className),
1671
+ className: (0, import_design_system_foundation26.cn)(Command_default.dialog, className),
1295
1672
  "aria-label": "Command palette",
1296
1673
  "aria-modal": "true",
1297
1674
  onCancel: handleCancel,
1298
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: Command_default.palette, onKeyDown: handleKeyDown, children: [
1299
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: Command_default.searchRow, children: [
1300
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("svg", { "aria-hidden": "true", className: Command_default.searchIcon, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
1301
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
1302
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("path", { strokeLinecap: "round", d: "M21 21l-4.35-4.35" })
1675
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: Command_default.palette, onKeyDown: handleKeyDown, children: [
1676
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: Command_default.searchRow, children: [
1677
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("svg", { "aria-hidden": "true", className: Command_default.searchIcon, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [
1678
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
1679
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { strokeLinecap: "round", d: "M21 21l-4.35-4.35" })
1303
1680
  ] }),
1304
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1681
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1305
1682
  "input",
1306
1683
  {
1307
1684
  ref: inputRef,
1308
1685
  type: "search",
1309
1686
  role: "combobox",
1687
+ "aria-label": "Search commands",
1310
1688
  "aria-expanded": filtered.length > 0,
1311
1689
  "aria-controls": listboxId,
1312
1690
  "aria-autocomplete": "list",
@@ -1317,32 +1695,33 @@ function Command({
1317
1695
  onChange: (e) => setQuery(e.target.value)
1318
1696
  }
1319
1697
  ),
1320
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("kbd", { className: Command_default.escHint, children: "Esc" })
1698
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("kbd", { className: Command_default.escHint, children: "Esc" })
1321
1699
  ] }),
1322
- filtered.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { id: listboxId, role: "listbox", className: Command_default.list, "aria-label": "Commands", children: Array.from(groups.entries()).map(([group, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("li", { role: "presentation", children: [
1323
- group && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: Command_default.group, role: "presentation", children: group }),
1324
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { role: "group", "aria-label": group || void 0, className: Command_default.groupList, children: groupItems.map((item) => {
1700
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: Command_default.srOnly, "aria-live": "polite", children: filtered.length === 0 ? `Nothing matches \u201C${query}\u201D` : "" }),
1701
+ filtered.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { id: listboxId, role: "listbox", className: Command_default.list, "aria-label": "Commands", children: Array.from(groups.entries()).map(([group, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("li", { role: "presentation", children: [
1702
+ group && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: Command_default.group, role: "presentation", children: group }),
1703
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { role: "group", "aria-label": group || void 0, className: Command_default.groupList, children: groupItems.map((item) => {
1325
1704
  const flatIndex = filtered.indexOf(item);
1326
1705
  const isActive = flatIndex === activeIndex;
1327
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1706
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1328
1707
  "li",
1329
1708
  {
1330
1709
  id: `cmd-${item.id}`,
1331
1710
  role: "option",
1332
1711
  "aria-selected": isActive,
1333
- className: (0, import_design_system_foundation24.cn)(Command_default.item, isActive && Command_default.itemActive),
1712
+ className: (0, import_design_system_foundation26.cn)(Command_default.item, isActive && Command_default.itemActive),
1334
1713
  onPointerDown: (e) => e.preventDefault(),
1335
1714
  onClick: () => selectItem(item),
1336
1715
  children: [
1337
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: Command_default.itemLabel, children: item.label }),
1338
- item.description && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: Command_default.itemDesc, children: item.description }),
1339
- item.shortcut && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("kbd", { className: Command_default.shortcut, children: item.shortcut })
1716
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: Command_default.itemLabel, children: item.label }),
1717
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: Command_default.itemDesc, children: item.description }),
1718
+ item.shortcut && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("kbd", { className: Command_default.shortcut, children: item.shortcut })
1340
1719
  ]
1341
1720
  },
1342
1721
  item.id
1343
1722
  );
1344
1723
  }) })
1345
- ] }, group)) }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: Command_default.empty, "aria-live": "polite", children: [
1724
+ ] }, group)) }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: Command_default.empty, children: [
1346
1725
  "No results for \u201C",
1347
1726
  query,
1348
1727
  "\u201D"
@@ -1353,22 +1732,22 @@ function Command({
1353
1732
  }
1354
1733
 
1355
1734
  // src/components/interaction/Dialog/Dialog.tsx
1356
- var import_react7 = require("react");
1735
+ var import_react9 = require("react");
1357
1736
 
1358
1737
  // src/components/interaction/Dialog/Dialog.module.css
1359
- var Dialog_default = {"component":"bds271Dialog-component","dialog":"bds271Dialog-dialog","dialogContent":"bds271Dialog-dialogContent","closeButton":"bds271Dialog-closeButton"};
1738
+ var Dialog_default = {"component":"bds2110Dialog-component","dialog":"bds2110Dialog-dialog","dialogContent":"bds2110Dialog-dialogContent","closeButton":"bds2110Dialog-closeButton"};
1360
1739
 
1361
1740
  // src/components/interaction/Dialog/Dialog.tsx
1362
- var import_design_system_foundation25 = require("@boostdev/design-system-foundation");
1363
- var import_jsx_runtime25 = require("react/jsx-runtime");
1741
+ var import_design_system_foundation27 = require("@boostdev/design-system-foundation");
1742
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1364
1743
  installInvokerCommandsPolyfill();
1365
1744
  var FOCUSABLE_SELECTOR = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
1366
1745
  function Dialog({ children, id: idProp, isOpen = false, className, onOpen, onClose, ...rest }) {
1367
- const generatedId = (0, import_react7.useId)();
1746
+ const generatedId = (0, import_react9.useId)();
1368
1747
  const id = idProp ?? generatedId;
1369
- const dialogRef = (0, import_react7.useRef)(null);
1370
- const triggerRef = (0, import_react7.useRef)(null);
1371
- (0, import_react7.useEffect)(() => {
1748
+ const dialogRef = (0, import_react9.useRef)(null);
1749
+ const triggerRef = (0, import_react9.useRef)(null);
1750
+ (0, import_react9.useEffect)(() => {
1372
1751
  const dialog = dialogRef.current;
1373
1752
  if (!dialog) return;
1374
1753
  if (isOpen && !dialog.open) {
@@ -1384,7 +1763,7 @@ function Dialog({ children, id: idProp, isOpen = false, className, onOpen, onClo
1384
1763
  document.body.style.overflow = "";
1385
1764
  };
1386
1765
  }, [isOpen]);
1387
- (0, import_react7.useEffect)(() => {
1766
+ (0, import_react9.useEffect)(() => {
1388
1767
  const dialog = dialogRef.current;
1389
1768
  if (!dialog) return;
1390
1769
  const handleCommand = (e) => {
@@ -1406,8 +1785,10 @@ function Dialog({ children, id: idProp, isOpen = false, className, onOpen, onClo
1406
1785
  if (e.target === dialogRef.current) onClose?.();
1407
1786
  };
1408
1787
  const handleCancel = (e) => {
1409
- e.preventDefault();
1410
- onClose?.();
1788
+ if (onClose) {
1789
+ e.preventDefault();
1790
+ onClose();
1791
+ }
1411
1792
  };
1412
1793
  const handleKeyDown = (e) => {
1413
1794
  if (e.key !== "Tab") return;
@@ -1429,19 +1810,19 @@ function Dialog({ children, id: idProp, isOpen = false, className, onOpen, onClo
1429
1810
  }
1430
1811
  }
1431
1812
  };
1432
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1813
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1433
1814
  "dialog",
1434
1815
  {
1435
1816
  ...rest,
1436
1817
  ref: dialogRef,
1437
1818
  id,
1438
- className: (0, import_design_system_foundation25.cn)(className, Dialog_default.dialog),
1819
+ className: (0, import_design_system_foundation27.cn)(className, Dialog_default.dialog),
1439
1820
  "aria-modal": "true",
1440
1821
  onClick: handleBackdropClick,
1441
1822
  onCancel: handleCancel,
1442
1823
  onKeyDown: handleKeyDown,
1443
1824
  children: [
1444
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1825
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1445
1826
  "button",
1446
1827
  {
1447
1828
  type: "button",
@@ -1449,25 +1830,26 @@ function Dialog({ children, id: idProp, isOpen = false, className, onOpen, onClo
1449
1830
  commandfor: id,
1450
1831
  command: "close",
1451
1832
  "aria-label": "Close dialog",
1452
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
1833
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
1453
1834
  }
1454
1835
  ),
1455
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: Dialog_default.dialogContent, children })
1836
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: Dialog_default.dialogContent, children })
1456
1837
  ]
1457
1838
  }
1458
1839
  );
1459
1840
  }
1460
1841
 
1461
1842
  // src/components/interaction/Drawer/Drawer.tsx
1462
- var import_react8 = require("react");
1843
+ var import_react10 = require("react");
1463
1844
 
1464
1845
  // src/components/interaction/Drawer/Drawer.module.css
1465
- var Drawer_default = {"component":"bds271Drawer-component","drawer":"bds271Drawer-drawer","--side_left":"bds271Drawer---side_left","header":"bds271Drawer-header","closeButton":"bds271Drawer-closeButton","body":"bds271Drawer-body"};
1846
+ var Drawer_default = {"component":"bds2110Drawer-component","drawer":"bds2110Drawer-drawer","--side_left":"bds2110Drawer---side_left","header":"bds2110Drawer-header","closeButton":"bds2110Drawer-closeButton","body":"bds2110Drawer-body"};
1466
1847
 
1467
1848
  // src/components/interaction/Drawer/Drawer.tsx
1468
- var import_design_system_foundation26 = require("@boostdev/design-system-foundation");
1469
- var import_jsx_runtime26 = require("react/jsx-runtime");
1849
+ var import_design_system_foundation28 = require("@boostdev/design-system-foundation");
1850
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1470
1851
  installInvokerCommandsPolyfill();
1852
+ var FOCUSABLE_SELECTOR2 = 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])';
1471
1853
  function Drawer({
1472
1854
  id: idProp,
1473
1855
  isOpen,
@@ -1479,11 +1861,13 @@ function Drawer({
1479
1861
  className,
1480
1862
  ...rest
1481
1863
  }) {
1482
- const generatedId = (0, import_react8.useId)();
1864
+ const generatedId = (0, import_react10.useId)();
1483
1865
  const id = idProp ?? generatedId;
1484
- const dialogRef = (0, import_react8.useRef)(null);
1485
- const triggerRef = (0, import_react8.useRef)(null);
1486
- (0, import_react8.useEffect)(() => {
1866
+ const titleId = (0, import_react10.useId)();
1867
+ const hasCustomLabel = "aria-label" in rest || "aria-labelledby" in rest;
1868
+ const dialogRef = (0, import_react10.useRef)(null);
1869
+ const triggerRef = (0, import_react10.useRef)(null);
1870
+ (0, import_react10.useEffect)(() => {
1487
1871
  const dialog = dialogRef.current;
1488
1872
  if (!dialog) return;
1489
1873
  if (isOpen && !dialog.open) {
@@ -1499,7 +1883,7 @@ function Drawer({
1499
1883
  document.body.style.overflow = "";
1500
1884
  };
1501
1885
  }, [isOpen]);
1502
- (0, import_react8.useEffect)(() => {
1886
+ (0, import_react10.useEffect)(() => {
1503
1887
  const dialog = dialogRef.current;
1504
1888
  if (!dialog) return;
1505
1889
  const handleCommand = (e) => {
@@ -1513,35 +1897,53 @@ function Drawer({
1513
1897
  setTimeout(() => trigger?.focus(), 0);
1514
1898
  onClose();
1515
1899
  }
1516
- };
1517
- dialog.addEventListener("command", handleCommand);
1518
- return () => dialog.removeEventListener("command", handleCommand);
1519
- }, [onOpen, onClose]);
1520
- const handleClick = (e) => {
1521
- const dialog = dialogRef.current;
1522
- if (!dialog) return;
1523
- const rect = dialog.getBoundingClientRect();
1524
- const outside = e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom;
1525
- if (outside) onClose();
1526
- };
1527
- const handleCancel = (e) => {
1528
- e.preventDefault();
1529
- onClose();
1900
+ };
1901
+ dialog.addEventListener("command", handleCommand);
1902
+ return () => dialog.removeEventListener("command", handleCommand);
1903
+ }, [onOpen, onClose]);
1904
+ const handleBackdropClick = (e) => {
1905
+ if (e.target === dialogRef.current) onClose();
1906
+ };
1907
+ const handleCancel = (e) => {
1908
+ e.preventDefault();
1909
+ onClose();
1910
+ };
1911
+ const handleKeyDown = (e) => {
1912
+ if (e.key !== "Tab") return;
1913
+ const dialog = dialogRef.current;
1914
+ if (!dialog) return;
1915
+ const focusable = Array.from(dialog.querySelectorAll(FOCUSABLE_SELECTOR2));
1916
+ if (focusable.length === 0) return;
1917
+ const first = focusable[0];
1918
+ const last = focusable[focusable.length - 1];
1919
+ if (e.shiftKey) {
1920
+ if (document.activeElement === first) {
1921
+ e.preventDefault();
1922
+ last.focus();
1923
+ }
1924
+ } else {
1925
+ if (document.activeElement === last) {
1926
+ e.preventDefault();
1927
+ first.focus();
1928
+ }
1929
+ }
1530
1930
  };
1531
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1931
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1532
1932
  "dialog",
1533
1933
  {
1534
1934
  ...rest,
1535
1935
  ref: dialogRef,
1536
1936
  id,
1537
- className: (0, import_design_system_foundation26.cn)(Drawer_default.drawer, Drawer_default[`--side_${side}`], className),
1937
+ className: (0, import_design_system_foundation28.cn)(Drawer_default.drawer, Drawer_default[`--side_${side}`], className),
1538
1938
  "aria-modal": "true",
1539
- onClick: handleClick,
1939
+ "aria-labelledby": hasCustomLabel ? rest["aria-labelledby"] : title ? titleId : void 0,
1940
+ onClick: handleBackdropClick,
1540
1941
  onCancel: handleCancel,
1942
+ onKeyDown: handleKeyDown,
1541
1943
  children: [
1542
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: Drawer_default.header, children: [
1543
- !!title && title,
1544
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1944
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: Drawer_default.header, children: [
1945
+ !!title && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { id: titleId, children: title }),
1946
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1545
1947
  "button",
1546
1948
  {
1547
1949
  type: "button",
@@ -1549,25 +1951,25 @@ function Drawer({
1549
1951
  commandfor: id,
1550
1952
  command: "close",
1551
1953
  "aria-label": "Close drawer",
1552
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
1954
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) })
1553
1955
  }
1554
1956
  )
1555
1957
  ] }),
1556
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: Drawer_default.body, children })
1958
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: Drawer_default.body, children })
1557
1959
  ]
1558
1960
  }
1559
1961
  );
1560
1962
  }
1561
1963
 
1562
1964
  // src/components/interaction/DropdownMenu/DropdownMenu.tsx
1563
- var import_react9 = require("react");
1965
+ var import_react11 = require("react");
1564
1966
 
1565
1967
  // src/components/interaction/DropdownMenu/DropdownMenu.module.css
1566
- var DropdownMenu_default = {"component":"bds271DropdownMenu-component","wrapper":"bds271DropdownMenu-wrapper","menu":"bds271DropdownMenu-menu","--placement_bottom-start":"bds271DropdownMenu---placement_bottom-start","--placement_bottom-end":"bds271DropdownMenu---placement_bottom-end","separator":"bds271DropdownMenu-separator","item":"bds271DropdownMenu-item","icon":"bds271DropdownMenu-icon"};
1968
+ var DropdownMenu_default = {"component":"bds2110DropdownMenu-component","wrapper":"bds2110DropdownMenu-wrapper","menu":"bds2110DropdownMenu-menu","--placement_bottom-start":"bds2110DropdownMenu---placement_bottom-start","--placement_bottom-end":"bds2110DropdownMenu---placement_bottom-end","separator":"bds2110DropdownMenu-separator","item":"bds2110DropdownMenu-item","icon":"bds2110DropdownMenu-icon"};
1567
1969
 
1568
1970
  // src/components/interaction/DropdownMenu/DropdownMenu.tsx
1569
- var import_design_system_foundation27 = require("@boostdev/design-system-foundation");
1570
- var import_jsx_runtime27 = require("react/jsx-runtime");
1971
+ var import_design_system_foundation29 = require("@boostdev/design-system-foundation");
1972
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1571
1973
  function DropdownMenu({
1572
1974
  trigger,
1573
1975
  items,
@@ -1575,26 +1977,36 @@ function DropdownMenu({
1575
1977
  className,
1576
1978
  ...rest
1577
1979
  }) {
1578
- const [isOpen, setIsOpen] = (0, import_react9.useState)(false);
1579
- const containerRef = (0, import_react9.useRef)(null);
1580
- const menuId = (0, import_react9.useId)();
1581
- const itemRefs = (0, import_react9.useRef)([]);
1980
+ const [isOpen, setIsOpen] = (0, import_react11.useState)(false);
1981
+ const containerRef = (0, import_react11.useRef)(null);
1982
+ const menuId = (0, import_react11.useId)();
1983
+ const itemRefs = (0, import_react11.useRef)([]);
1984
+ const triggerRef = (0, import_react11.useRef)(null);
1582
1985
  const open = () => {
1986
+ triggerRef.current = document.activeElement;
1583
1987
  setIsOpen(true);
1584
1988
  };
1585
- const close = () => setIsOpen(false);
1586
- (0, import_react9.useEffect)(() => {
1989
+ const close = (restoreFocus = false) => {
1990
+ setIsOpen(false);
1991
+ if (restoreFocus) {
1992
+ triggerRef.current?.focus();
1993
+ }
1994
+ };
1995
+ (0, import_react11.useEffect)(() => {
1587
1996
  if (isOpen) {
1588
- itemRefs.current[0]?.focus();
1997
+ const firstEnabledIndex = items.findIndex((item) => !item.disabled);
1998
+ if (firstEnabledIndex !== -1) {
1999
+ itemRefs.current[firstEnabledIndex]?.focus();
2000
+ }
1589
2001
  }
1590
2002
  }, [isOpen]);
1591
- (0, import_react9.useEffect)(() => {
2003
+ (0, import_react11.useEffect)(() => {
1592
2004
  if (!isOpen) return;
1593
2005
  const handlePointerDown = (e) => {
1594
2006
  if (!containerRef.current?.contains(e.target)) close();
1595
2007
  };
1596
2008
  const handleKeyDown = (e) => {
1597
- if (e.key === "Escape") close();
2009
+ if (e.key === "Escape") close(true);
1598
2010
  };
1599
2011
  document.addEventListener("pointerdown", handlePointerDown);
1600
2012
  document.addEventListener("keydown", handleKeyDown);
@@ -1622,7 +2034,7 @@ function DropdownMenu({
1622
2034
  close();
1623
2035
  }
1624
2036
  };
1625
- const triggerEl = (0, import_react9.isValidElement)(trigger) ? (0, import_react9.cloneElement)(trigger, {
2037
+ const triggerEl = (0, import_react11.isValidElement)(trigger) ? (0, import_react11.cloneElement)(trigger, {
1626
2038
  "aria-haspopup": "menu",
1627
2039
  "aria-expanded": isOpen,
1628
2040
  "aria-controls": menuId,
@@ -1636,17 +2048,17 @@ function DropdownMenu({
1636
2048
  if (typeof existingOnClick === "function") existingOnClick(e);
1637
2049
  }
1638
2050
  }) : trigger;
1639
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { ...rest, ref: containerRef, className: (0, import_design_system_foundation27.cn)(DropdownMenu_default.wrapper, className), children: [
2051
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { ...rest, ref: containerRef, className: (0, import_design_system_foundation29.cn)(DropdownMenu_default.wrapper, className), children: [
1640
2052
  triggerEl,
1641
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2053
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1642
2054
  "ul",
1643
2055
  {
1644
2056
  id: menuId,
1645
2057
  role: "menu",
1646
- className: (0, import_design_system_foundation27.cn)(DropdownMenu_default.menu, DropdownMenu_default[`--placement_${placement}`]),
1647
- children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("li", { role: "presentation", children: [
1648
- item.separator && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("hr", { className: DropdownMenu_default.separator, role: "separator" }),
1649
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2058
+ className: (0, import_design_system_foundation29.cn)(DropdownMenu_default.menu, DropdownMenu_default[`--placement_${placement}`]),
2059
+ children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("li", { role: "presentation", children: [
2060
+ item.separator && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("hr", { className: DropdownMenu_default.separator, role: "separator" }),
2061
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1650
2062
  "button",
1651
2063
  {
1652
2064
  ref: (el) => {
@@ -1658,11 +2070,11 @@ function DropdownMenu({
1658
2070
  className: DropdownMenu_default.item,
1659
2071
  onClick: () => {
1660
2072
  item.onClick?.();
1661
- close();
2073
+ close(true);
1662
2074
  },
1663
2075
  onKeyDown: (e) => handleItemKeyDown(e, index),
1664
2076
  children: [
1665
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: DropdownMenu_default.icon, "aria-hidden": "true", children: item.icon }),
2077
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: DropdownMenu_default.icon, "aria-hidden": "true", children: item.icon }),
1666
2078
  item.label
1667
2079
  ]
1668
2080
  }
@@ -1674,14 +2086,14 @@ function DropdownMenu({
1674
2086
  }
1675
2087
 
1676
2088
  // src/components/interaction/Popover/Popover.tsx
1677
- var import_react10 = require("react");
2089
+ var import_react12 = require("react");
1678
2090
 
1679
2091
  // src/components/interaction/Popover/Popover.module.css
1680
- var Popover_default = {"component":"bds271Popover-component","wrapper":"bds271Popover-wrapper","panel":"bds271Popover-panel","g":"bds271Popover-g"};
2092
+ var Popover_default = {"component":"bds2110Popover-component","wrapper":"bds2110Popover-wrapper","panel":"bds2110Popover-panel","g":"bds2110Popover-g"};
1681
2093
 
1682
2094
  // src/components/interaction/Popover/Popover.tsx
1683
- var import_design_system_foundation28 = require("@boostdev/design-system-foundation");
1684
- var import_jsx_runtime28 = require("react/jsx-runtime");
2095
+ var import_design_system_foundation30 = require("@boostdev/design-system-foundation");
2096
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1685
2097
  installInvokerCommandsPolyfill();
1686
2098
  if (typeof window !== "undefined" && !(typeof CSS !== "undefined" && typeof CSS.supports === "function" && CSS.supports("anchor-name: --a"))) {
1687
2099
  import("@oddbird/css-anchor-positioning").catch(() => {
@@ -1695,13 +2107,13 @@ function Popover({
1695
2107
  "aria-label": ariaLabel,
1696
2108
  ...rest
1697
2109
  }) {
1698
- const [isOpen, setIsOpen] = (0, import_react10.useState)(false);
1699
- const containerRef = (0, import_react10.useRef)(null);
1700
- const panelRef = (0, import_react10.useRef)(null);
1701
- const rawId = (0, import_react10.useId)();
2110
+ const [isOpen, setIsOpen] = (0, import_react12.useState)(false);
2111
+ const containerRef = (0, import_react12.useRef)(null);
2112
+ const panelRef = (0, import_react12.useRef)(null);
2113
+ const rawId = (0, import_react12.useId)();
1702
2114
  const anchorName = `--popover-${rawId.replace(/\W/g, "") || "a"}`;
1703
2115
  const panelId = rawId;
1704
- (0, import_react10.useEffect)(() => {
2116
+ (0, import_react12.useEffect)(() => {
1705
2117
  const panel = panelRef.current;
1706
2118
  if (!panel) return;
1707
2119
  const handleToggle = (e) => {
@@ -1710,7 +2122,7 @@ function Popover({
1710
2122
  panel.addEventListener("toggle", handleToggle);
1711
2123
  return () => panel.removeEventListener("toggle", handleToggle);
1712
2124
  }, []);
1713
- (0, import_react10.useEffect)(() => {
2125
+ (0, import_react12.useEffect)(() => {
1714
2126
  if (!isOpen) return;
1715
2127
  const handleScroll = () => {
1716
2128
  const rect = containerRef.current?.getBoundingClientRect();
@@ -1727,10 +2139,9 @@ function Popover({
1727
2139
  window.removeEventListener("resize", handleScroll);
1728
2140
  };
1729
2141
  }, [isOpen]);
1730
- const trigger = (0, import_react10.isValidElement)(children) ? (0, import_react10.cloneElement)(children, {
2142
+ const trigger = (0, import_react12.isValidElement)(children) ? (0, import_react12.cloneElement)(children, {
1731
2143
  "aria-expanded": isOpen,
1732
2144
  "aria-controls": panelId,
1733
- "aria-haspopup": true,
1734
2145
  commandfor: panelId,
1735
2146
  command: "toggle-popover",
1736
2147
  style: {
@@ -1738,13 +2149,25 @@ function Popover({
1738
2149
  anchorName
1739
2150
  },
1740
2151
  // Forward any existing onClick on the child (for custom side-effects).
1741
- // Do NOT add our own toggle here commandfor/command handles it to
1742
- // avoid a double-toggle when both onClick and invoker fire.
1743
- onClick: children.props.onClick
2152
+ // commandfor/command handles the toggle when the trigger renders a
2153
+ // native <button> don't also toggle there (avoids a double-toggle).
2154
+ // Invoker commands are spec-limited to <button>, so when the actual
2155
+ // rendered element isn't one (e.g. a plain <a> or a custom non-button
2156
+ // Link), fall back to an explicit togglePopover() call instead of
2157
+ // silently going dead. Checked on the DOM node (event.currentTarget),
2158
+ // not the React element type, so wrapper components that forward
2159
+ // props onto an inner <button> (e.g. this library's Button) still
2160
+ // take the native path.
2161
+ onClick: (event) => {
2162
+ children.props.onClick?.(event);
2163
+ if (!(event.currentTarget instanceof HTMLButtonElement)) {
2164
+ panelRef.current?.togglePopover();
2165
+ }
2166
+ }
1744
2167
  }) : children;
1745
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { ...rest, ref: containerRef, className: (0, import_design_system_foundation28.cn)(Popover_default.wrapper, className), children: [
2168
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { ...rest, ref: containerRef, className: (0, import_design_system_foundation30.cn)(Popover_default.wrapper, className), children: [
1746
2169
  trigger,
1747
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2170
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1748
2171
  "div",
1749
2172
  {
1750
2173
  ref: panelRef,
@@ -1762,27 +2185,27 @@ function Popover({
1762
2185
  }
1763
2186
 
1764
2187
  // src/components/interaction/Rating/Rating.module.css
1765
- var Rating_default = {"component":"bds271Rating-component","rating":"bds271Rating-rating","star":"bds271Rating-star","--filled":"bds271Rating---filled"};
2188
+ var Rating_default = {"component":"bds2110Rating-component","rating":"bds2110Rating-rating","star":"bds2110Rating-star","--filled":"bds2110Rating---filled"};
1766
2189
 
1767
2190
  // src/components/interaction/Rating/Rating.tsx
1768
- var import_design_system_foundation29 = require("@boostdev/design-system-foundation");
1769
- var import_jsx_runtime29 = require("react/jsx-runtime");
2191
+ var import_design_system_foundation31 = require("@boostdev/design-system-foundation");
2192
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1770
2193
  function Rating({ value, max = 5, className, ...rest }) {
1771
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2194
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1772
2195
  "div",
1773
2196
  {
1774
2197
  ...rest,
1775
- className: (0, import_design_system_foundation29.cn)(Rating_default.rating, className),
2198
+ className: (0, import_design_system_foundation31.cn)(Rating_default.rating, className),
1776
2199
  role: "img",
1777
2200
  "aria-label": `${value} out of ${max} stars`,
1778
- children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2201
+ children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1779
2202
  "svg",
1780
2203
  {
1781
2204
  "aria-hidden": "true",
1782
- className: (0, import_design_system_foundation29.cn)(Rating_default.star, i < value && Rating_default["--filled"]),
2205
+ className: (0, import_design_system_foundation31.cn)(Rating_default.star, i < value && Rating_default["--filled"]),
1783
2206
  fill: "currentColor",
1784
2207
  viewBox: "0 0 24 24",
1785
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("path", { d: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" })
2208
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("path", { d: "M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z" })
1786
2209
  },
1787
2210
  i
1788
2211
  ))
@@ -1791,35 +2214,38 @@ function Rating({ value, max = 5, className, ...rest }) {
1791
2214
  }
1792
2215
 
1793
2216
  // src/components/interaction/Toast/Toast.tsx
1794
- var import_react11 = require("react");
2217
+ var import_react13 = require("react");
1795
2218
 
1796
2219
  // src/components/interaction/Toast/Toast.module.css
1797
- var Toast_default = {"component":"bds271Toast-component","toastContainer":"bds271Toast-toastContainer","toast":"bds271Toast-toast","--variant_success":"bds271Toast---variant_success","--variant_warning":"bds271Toast---variant_warning","--variant_info":"bds271Toast---variant_info","--variant_error":"bds271Toast---variant_error","message":"bds271Toast-message","closeButton":"bds271Toast-closeButton"};
2220
+ var Toast_default = {"component":"bds2110Toast-component","toastContainer":"bds2110Toast-toastContainer","toast":"bds2110Toast-toast","md":"bds2110Toast-md","--variant_success":"bds2110Toast---variant_success","--variant_warning":"bds2110Toast---variant_warning","--variant_info":"bds2110Toast---variant_info","--variant_error":"bds2110Toast---variant_error","message":"bds2110Toast-message","closeButton":"bds2110Toast-closeButton"};
1798
2221
 
1799
2222
  // src/components/interaction/Toast/Toast.tsx
1800
- var import_design_system_foundation30 = require("@boostdev/design-system-foundation");
1801
- var import_jsx_runtime30 = require("react/jsx-runtime");
2223
+ var import_design_system_foundation32 = require("@boostdev/design-system-foundation");
2224
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1802
2225
  var _ToastContext;
1803
2226
  function getToastContext() {
1804
- _ToastContext ??= (0, import_react11.createContext)(void 0);
2227
+ _ToastContext ??= (0, import_react13.createContext)(void 0);
1805
2228
  return _ToastContext;
1806
2229
  }
1807
2230
  function ToastProvider({ children }) {
1808
2231
  const ToastContext = getToastContext();
1809
- const [toasts, setToasts] = (0, import_react11.useState)([]);
1810
- const containerRef = (0, import_react11.useRef)(null);
1811
- const showToast = (0, import_react11.useCallback)((message, variant) => {
2232
+ const [toasts, setToasts] = (0, import_react13.useState)([]);
2233
+ const containerRef = (0, import_react13.useRef)(null);
2234
+ const showToast = (0, import_react13.useCallback)((message, variant) => {
1812
2235
  const id = Math.random().toString(36).substring(2, 9);
1813
2236
  setToasts((prev) => [...prev, { id, message, variant }]);
1814
2237
  }, []);
1815
- const removeToast = (0, import_react11.useCallback)((id) => {
2238
+ const removeToast = (0, import_react13.useCallback)((id) => {
1816
2239
  setToasts((prev) => prev.filter((toast) => toast.id !== id));
1817
2240
  }, []);
1818
- (0, import_react11.useEffect)(() => {
2241
+ (0, import_react13.useEffect)(() => {
1819
2242
  const container = containerRef.current;
1820
2243
  if (!container) return;
1821
2244
  if (toasts.length > 0) {
1822
- container.showPopover?.();
2245
+ try {
2246
+ container.showPopover?.();
2247
+ } catch {
2248
+ }
1823
2249
  } else {
1824
2250
  try {
1825
2251
  container.hidePopover?.();
@@ -1827,10 +2253,10 @@ function ToastProvider({ children }) {
1827
2253
  }
1828
2254
  }
1829
2255
  }, [toasts.length]);
1830
- const value = (0, import_react11.useMemo)(() => ({ showToast }), [showToast]);
1831
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(ToastContext.Provider, { value, children: [
2256
+ const value = (0, import_react13.useMemo)(() => ({ showToast }), [showToast]);
2257
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(ToastContext.Provider, { value, children: [
1832
2258
  children,
1833
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2259
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1834
2260
  "div",
1835
2261
  {
1836
2262
  ref: containerRef,
@@ -1838,11 +2264,11 @@ function ToastProvider({ children }) {
1838
2264
  role: "region",
1839
2265
  "aria-label": "Notifications",
1840
2266
  className: Toast_default.toastContainer,
1841
- children: toasts.map((toast) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2267
+ children: toasts.map((toast) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1842
2268
  ToastItem,
1843
2269
  {
1844
2270
  toast,
1845
- onRemove: () => removeToast(toast.id)
2271
+ onRemove: removeToast
1846
2272
  },
1847
2273
  toast.id
1848
2274
  ))
@@ -1851,17 +2277,17 @@ function ToastProvider({ children }) {
1851
2277
  ] });
1852
2278
  }
1853
2279
  function ToastItem({ toast, onRemove }) {
1854
- (0, import_react11.useEffect)(() => {
1855
- const timer = setTimeout(onRemove, 5e3);
2280
+ (0, import_react13.useEffect)(() => {
2281
+ const timer = setTimeout(() => onRemove(toast.id), 5e3);
1856
2282
  return () => clearTimeout(timer);
1857
- }, [onRemove]);
1858
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: (0, import_design_system_foundation30.cn)(Toast_default.toast, Toast_default[`--variant_${toast.variant}`]), role: "status", "aria-live": "polite", "aria-atomic": "true", children: [
1859
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: Toast_default.message, children: toast.message }),
1860
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("button", { type: "button", className: Toast_default.closeButton, onClick: onRemove, "aria-label": "Dismiss", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) }) })
2283
+ }, [onRemove, toast.id]);
2284
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: (0, import_design_system_foundation32.cn)(Toast_default.toast, Toast_default[`--variant_${toast.variant}`]), role: "status", "aria-live": "polite", "aria-atomic": "true", children: [
2285
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: Toast_default.message, children: toast.message }),
2286
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { type: "button", className: Toast_default.closeButton, onClick: () => onRemove(toast.id), "aria-label": "Dismiss", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M18 6L6 18M6 6l12 12" }) }) })
1861
2287
  ] });
1862
2288
  }
1863
2289
  function useToast() {
1864
- const context = (0, import_react11.useContext)(getToastContext());
2290
+ const context = (0, import_react13.useContext)(getToastContext());
1865
2291
  if (!context) {
1866
2292
  throw new Error("useToast must be used within a ToastProvider");
1867
2293
  }
@@ -1869,82 +2295,82 @@ function useToast() {
1869
2295
  }
1870
2296
 
1871
2297
  // src/components/interaction/form/Checkbox/Checkbox.tsx
1872
- var import_react12 = require("react");
2298
+ var import_react14 = require("react");
1873
2299
 
1874
2300
  // src/components/interaction/form/Checkbox/Checkbox.module.css
1875
- var Checkbox_default = {"component":"bds271Checkbox-component","checkboxGroup":"bds271Checkbox-checkboxGroup","inputWrapper":"bds271Checkbox-inputWrapper","checkbox":"bds271Checkbox-checkbox","checkboxError":"bds271Checkbox-checkboxError"};
2301
+ var Checkbox_default = {"component":"bds2110Checkbox-component","checkboxGroup":"bds2110Checkbox-checkboxGroup","inputWrapper":"bds2110Checkbox-inputWrapper","checkbox":"bds2110Checkbox-checkbox","checkboxError":"bds2110Checkbox-checkboxError"};
1876
2302
 
1877
2303
  // src/components/interaction/form/atoms/Message.module.css
1878
- var Message_default = {"component":"bds271Message-component","error":"bds271Message-error","hint":"bds271Message-hint"};
2304
+ var Message_default = {"component":"bds2110Message-component","error":"bds2110Message-error","hint":"bds2110Message-hint"};
1879
2305
 
1880
2306
  // src/components/interaction/form/atoms/Message.tsx
1881
- var import_design_system_foundation31 = require("@boostdev/design-system-foundation");
1882
- var import_jsx_runtime31 = require("react/jsx-runtime");
2307
+ var import_design_system_foundation33 = require("@boostdev/design-system-foundation");
2308
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1883
2309
  var Message = ({ message, type, inputId, className }) => {
1884
2310
  if (!message) return null;
1885
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: inputId + type, className: (0, import_design_system_foundation31.cn)(Message_default[type], className), children: message });
2311
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: inputId + type, role: type === "error" ? "alert" : void 0, className: (0, import_design_system_foundation33.cn)(Message_default[type], className), children: message });
1886
2312
  };
1887
2313
 
1888
2314
  // src/components/interaction/form/atoms/Label.module.css
1889
- var Label_default = {"component":"bds271Label-component","label":"bds271Label-label"};
2315
+ var Label_default = {"component":"bds2110Label-component","label":"bds2110Label-label"};
1890
2316
 
1891
2317
  // src/components/interaction/form/atoms/Label.tsx
1892
- var import_design_system_foundation32 = require("@boostdev/design-system-foundation");
1893
- var import_jsx_runtime32 = require("react/jsx-runtime");
2318
+ var import_design_system_foundation34 = require("@boostdev/design-system-foundation");
2319
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1894
2320
  var Label = ({ label, id, className }) => {
1895
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { htmlFor: id, className: (0, import_design_system_foundation32.cn)(Label_default.label, className), children: label });
2321
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: id, className: (0, import_design_system_foundation34.cn)(Label_default.label, className), children: label });
1896
2322
  };
1897
2323
 
1898
2324
  // src/components/interaction/form/Checkbox/Checkbox.tsx
1899
- var import_design_system_foundation34 = require("@boostdev/design-system-foundation");
2325
+ var import_design_system_foundation36 = require("@boostdev/design-system-foundation");
1900
2326
 
1901
2327
  // src/components/interaction/form/atoms/InputContainer.module.css
1902
- var InputContainer_default = {"component":"bds271InputContainer-component","container":"bds271InputContainer-container"};
2328
+ var InputContainer_default = {"component":"bds2110InputContainer-component","container":"bds2110InputContainer-container"};
1903
2329
 
1904
2330
  // src/components/interaction/form/atoms/InputContainer.tsx
1905
- var import_design_system_foundation33 = require("@boostdev/design-system-foundation");
1906
- var import_jsx_runtime33 = require("react/jsx-runtime");
2331
+ var import_design_system_foundation35 = require("@boostdev/design-system-foundation");
2332
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1907
2333
  var InputContainer = ({ children, className, ...rest }) => {
1908
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { ...rest, className: (0, import_design_system_foundation33.cn)(InputContainer_default.container, className), children });
2334
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { ...rest, className: (0, import_design_system_foundation35.cn)(InputContainer_default.container, className), children });
1909
2335
  };
1910
2336
 
1911
2337
  // src/components/interaction/form/Checkbox/Checkbox.tsx
1912
- var import_jsx_runtime34 = require("react/jsx-runtime");
2338
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1913
2339
  function Checkbox({ label, name, error, hint, className, ...props }) {
1914
- const id = name + (0, import_react12.useId)();
2340
+ const id = name + (0, import_react14.useId)();
1915
2341
  const hintId = id + "hint";
1916
2342
  const errorId = id + "error";
1917
2343
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
1918
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(InputContainer, { className: (0, import_design_system_foundation34.cn)(Checkbox_default.checkboxGroup, className), children: [
1919
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: Checkbox_default.inputWrapper, children: [
1920
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2344
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(InputContainer, { className: (0, import_design_system_foundation36.cn)(Checkbox_default.checkboxGroup, className), children: [
2345
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: Checkbox_default.inputWrapper, children: [
2346
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1921
2347
  "input",
1922
2348
  {
2349
+ ...props,
1923
2350
  "aria-describedby": describedBy,
1924
2351
  "aria-invalid": !!error,
1925
2352
  type: "checkbox",
1926
2353
  id,
1927
2354
  name,
1928
- className: (0, import_design_system_foundation34.cn)(Checkbox_default.checkbox, error && Checkbox_default.checkboxError),
1929
- ...props
2355
+ className: (0, import_design_system_foundation36.cn)(Checkbox_default.checkbox, error && Checkbox_default.checkboxError)
1930
2356
  }
1931
2357
  ),
1932
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Label, { id, label })
2358
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Label, { id, label })
1933
2359
  ] }),
1934
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Message, { inputId: id, type: "error", message: error }),
1935
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Message, { inputId: id, type: "hint", message: hint })
2360
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Message, { inputId: id, type: "error", message: error }),
2361
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Message, { inputId: id, type: "hint", message: hint })
1936
2362
  ] });
1937
2363
  }
1938
2364
 
1939
2365
  // src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx
1940
- var import_react13 = require("react");
2366
+ var import_react15 = require("react");
1941
2367
 
1942
2368
  // src/components/interaction/form/CheckboxGroup/CheckboxGroup.module.css
1943
- var CheckboxGroup_default = {"component":"bds271CheckboxGroup-component","group":"bds271CheckboxGroup-group","legend":"bds271CheckboxGroup-legend","required":"bds271CheckboxGroup-required","items":"bds271CheckboxGroup-items"};
2369
+ var CheckboxGroup_default = {"component":"bds2110CheckboxGroup-component","group":"bds2110CheckboxGroup-group","legend":"bds2110CheckboxGroup-legend","required":"bds2110CheckboxGroup-required","requiredLabel":"bds2110CheckboxGroup-requiredLabel","items":"bds2110CheckboxGroup-items"};
1944
2370
 
1945
2371
  // src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx
1946
- var import_design_system_foundation35 = require("@boostdev/design-system-foundation");
1947
- var import_jsx_runtime35 = require("react/jsx-runtime");
2372
+ var import_design_system_foundation37 = require("@boostdev/design-system-foundation");
2373
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1948
2374
  function CheckboxGroup({
1949
2375
  legend,
1950
2376
  children,
@@ -1954,39 +2380,42 @@ function CheckboxGroup({
1954
2380
  className,
1955
2381
  ...rest
1956
2382
  }) {
1957
- const id = (0, import_react13.useId)();
2383
+ const id = (0, import_react15.useId)();
1958
2384
  const hintId = id + "hint";
1959
2385
  const errorId = id + "error";
1960
2386
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
1961
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
2387
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
1962
2388
  "fieldset",
1963
2389
  {
1964
2390
  ...rest,
1965
- className: (0, import_design_system_foundation35.cn)(CheckboxGroup_default.group, className),
1966
- "aria-required": required || void 0,
2391
+ className: (0, import_design_system_foundation37.cn)(CheckboxGroup_default.group, className),
1967
2392
  "aria-describedby": describedBy,
1968
2393
  children: [
1969
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("legend", { className: CheckboxGroup_default.legend, children: [
2394
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("legend", { className: CheckboxGroup_default.legend, children: [
1970
2395
  legend,
1971
- required && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: CheckboxGroup_default.required, "aria-hidden": "true", children: " *" })
2396
+ required && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
2397
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: CheckboxGroup_default.required, "aria-hidden": "true", children: " *" }),
2398
+ " ",
2399
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: CheckboxGroup_default.requiredLabel, children: "(required)" })
2400
+ ] })
1972
2401
  ] }),
1973
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: CheckboxGroup_default.items, children }),
1974
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Message, { inputId: id, type: "error", message: error }),
1975
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Message, { inputId: id, type: "hint", message: hint })
2402
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: CheckboxGroup_default.items, children }),
2403
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Message, { inputId: id, type: "error", message: error }),
2404
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Message, { inputId: id, type: "hint", message: hint })
1976
2405
  ]
1977
2406
  }
1978
2407
  );
1979
2408
  }
1980
2409
 
1981
2410
  // src/components/interaction/form/Combobox/Combobox.tsx
1982
- var import_react14 = require("react");
2411
+ var import_react16 = require("react");
1983
2412
 
1984
2413
  // src/components/interaction/form/Combobox/Combobox.module.css
1985
- var Combobox_default = {"component":"bds271Combobox-component","formGroup":"bds271Combobox-formGroup","inputWrapper":"bds271Combobox-inputWrapper","input":"bds271Combobox-input","inputError":"bds271Combobox-inputError","chevron":"bds271Combobox-chevron","listbox":"bds271Combobox-listbox","option":"bds271Combobox-option","--highlighted":"bds271Combobox---highlighted","--selected":"bds271Combobox---selected","--disabled":"bds271Combobox---disabled"};
2414
+ var Combobox_default = {"component":"bds2110Combobox-component","formGroup":"bds2110Combobox-formGroup","inputWrapper":"bds2110Combobox-inputWrapper","input":"bds2110Combobox-input","inputError":"bds2110Combobox-inputError","chevron":"bds2110Combobox-chevron","listbox":"bds2110Combobox-listbox","option":"bds2110Combobox-option","--highlighted":"bds2110Combobox---highlighted","--selected":"bds2110Combobox---selected","--disabled":"bds2110Combobox---disabled"};
1986
2415
 
1987
2416
  // src/components/interaction/form/Combobox/Combobox.tsx
1988
- var import_design_system_foundation36 = require("@boostdev/design-system-foundation");
1989
- var import_jsx_runtime36 = require("react/jsx-runtime");
2417
+ var import_design_system_foundation38 = require("@boostdev/design-system-foundation");
2418
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1990
2419
  function Combobox({
1991
2420
  label,
1992
2421
  name,
@@ -2000,25 +2429,25 @@ function Combobox({
2000
2429
  className,
2001
2430
  ...rest
2002
2431
  }) {
2003
- const id = name + (0, import_react14.useId)();
2432
+ const id = name + (0, import_react16.useId)();
2004
2433
  const listboxId = id + "listbox";
2005
2434
  const hintId = id + "hint";
2006
2435
  const errorId = id + "error";
2007
2436
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2008
- const selectedOption = (0, import_react14.useMemo)(() => options.find((o) => o.value === value), [options, value]);
2009
- const [inputValue, setInputValue] = (0, import_react14.useState)(selectedOption?.label ?? "");
2010
- (0, import_react14.useEffect)(() => {
2437
+ const selectedOption = (0, import_react16.useMemo)(() => options.find((o) => o.value === value), [options, value]);
2438
+ const [inputValue, setInputValue] = (0, import_react16.useState)(selectedOption?.label ?? "");
2439
+ (0, import_react16.useEffect)(() => {
2011
2440
  setInputValue(selectedOption?.label ?? "");
2012
2441
  }, [selectedOption]);
2013
- const [isOpen, setIsOpen] = (0, import_react14.useState)(false);
2014
- const [highlightedIndex, setHighlightedIndex] = (0, import_react14.useState)(-1);
2015
- const containerRef = (0, import_react14.useRef)(null);
2016
- const inputRef = (0, import_react14.useRef)(null);
2442
+ const [isOpen, setIsOpen] = (0, import_react16.useState)(false);
2443
+ const [highlightedIndex, setHighlightedIndex] = (0, import_react16.useState)(-1);
2444
+ const containerRef = (0, import_react16.useRef)(null);
2445
+ const inputRef = (0, import_react16.useRef)(null);
2017
2446
  const filtered = options.filter(
2018
2447
  (o) => o.label.toLowerCase().includes(inputValue.toLowerCase())
2019
2448
  );
2020
2449
  const getOptionId = (index) => `${id}-option-${index}`;
2021
- (0, import_react14.useEffect)(() => {
2450
+ (0, import_react16.useEffect)(() => {
2022
2451
  if (!isOpen) return;
2023
2452
  const handlePointerDown = (e) => {
2024
2453
  if (!containerRef.current?.contains(e.target)) setIsOpen(false);
@@ -2045,18 +2474,31 @@ function Combobox({
2045
2474
  setIsOpen(true);
2046
2475
  return;
2047
2476
  }
2477
+ if (enabledIndexes.length === 0) {
2478
+ setHighlightedIndex(-1);
2479
+ return;
2480
+ }
2048
2481
  const pos = enabledIndexes.indexOf(highlightedIndex);
2049
- setHighlightedIndex(enabledIndexes[(pos + 1) % enabledIndexes.length] ?? 0);
2482
+ setHighlightedIndex(enabledIndexes[(pos + 1) % enabledIndexes.length]);
2050
2483
  } else if (e.key === "ArrowUp") {
2051
2484
  e.preventDefault();
2485
+ if (!isOpen) {
2486
+ setIsOpen(true);
2487
+ return;
2488
+ }
2489
+ if (enabledIndexes.length === 0) {
2490
+ setHighlightedIndex(-1);
2491
+ return;
2492
+ }
2052
2493
  const pos = enabledIndexes.indexOf(highlightedIndex);
2053
2494
  setHighlightedIndex(
2054
- enabledIndexes[(pos - 1 + enabledIndexes.length) % enabledIndexes.length] ?? 0
2495
+ enabledIndexes[(pos - 1 + enabledIndexes.length) % enabledIndexes.length]
2055
2496
  );
2056
2497
  } else if (e.key === "Enter") {
2057
2498
  e.preventDefault();
2058
- if (highlightedIndex >= 0 && filtered[highlightedIndex]) {
2059
- selectOption(filtered[highlightedIndex]);
2499
+ const option = filtered[highlightedIndex];
2500
+ if (highlightedIndex >= 0 && option && !option.disabled) {
2501
+ selectOption(option);
2060
2502
  }
2061
2503
  } else if (e.key === "Escape") {
2062
2504
  setIsOpen(false);
@@ -2065,10 +2507,10 @@ function Combobox({
2065
2507
  setIsOpen(false);
2066
2508
  }
2067
2509
  };
2068
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation36.cn)(Combobox_default.formGroup, className), children: [
2069
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Label, { id, label }),
2070
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { ref: containerRef, className: Combobox_default.inputWrapper, children: [
2071
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2510
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation38.cn)(Combobox_default.formGroup, className), children: [
2511
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Label, { id, label }),
2512
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { ref: containerRef, className: Combobox_default.inputWrapper, children: [
2513
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2072
2514
  "input",
2073
2515
  {
2074
2516
  ref: inputRef,
@@ -2080,34 +2522,35 @@ function Combobox({
2080
2522
  "aria-haspopup": "listbox",
2081
2523
  "aria-autocomplete": "list",
2082
2524
  "aria-controls": listboxId,
2083
- "aria-activedescendant": highlightedIndex >= 0 ? getOptionId(highlightedIndex) : void 0,
2525
+ "aria-activedescendant": isOpen && highlightedIndex >= 0 ? getOptionId(highlightedIndex) : void 0,
2084
2526
  "aria-invalid": !!error,
2085
2527
  "aria-describedby": describedBy,
2086
2528
  autoComplete: "off",
2087
2529
  placeholder,
2088
2530
  value: inputValue,
2089
2531
  disabled,
2090
- className: (0, import_design_system_foundation36.cn)(Combobox_default.input, error ? Combobox_default.inputError : void 0),
2532
+ className: (0, import_design_system_foundation38.cn)(Combobox_default.input, error ? Combobox_default.inputError : void 0),
2091
2533
  onChange: handleInputChange,
2092
2534
  onKeyDown: handleKeyDown,
2093
2535
  onFocus: () => setIsOpen(true)
2094
2536
  }
2095
2537
  ),
2096
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: Combobox_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" }) }) }),
2097
- isOpen && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2538
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: Combobox_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" }) }) }),
2539
+ isOpen && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2098
2540
  "ul",
2099
2541
  {
2100
2542
  id: listboxId,
2101
2543
  role: "listbox",
2544
+ "aria-label": typeof label === "string" ? label : void 0,
2102
2545
  className: Combobox_default.listbox,
2103
- children: filtered.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2546
+ children: filtered.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2104
2547
  "li",
2105
2548
  {
2106
2549
  id: getOptionId(index),
2107
2550
  role: "option",
2108
2551
  "aria-selected": option.value === value,
2109
2552
  "aria-disabled": option.disabled,
2110
- className: (0, import_design_system_foundation36.cn)(
2553
+ className: (0, import_design_system_foundation38.cn)(
2111
2554
  Combobox_default.option,
2112
2555
  index === highlightedIndex ? Combobox_default["--highlighted"] : void 0,
2113
2556
  option.value === value ? Combobox_default["--selected"] : void 0,
@@ -2124,20 +2567,21 @@ function Combobox({
2124
2567
  }
2125
2568
  )
2126
2569
  ] }),
2127
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Message, { inputId: id, type: "error", message: error }),
2128
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Message, { inputId: id, type: "hint", message: hint })
2570
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Message, { inputId: id, type: "error", message: error }),
2571
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Message, { inputId: id, type: "hint", message: hint })
2129
2572
  ] });
2130
2573
  }
2131
2574
 
2132
2575
  // src/components/interaction/form/FieldGroup/FieldGroup.tsx
2133
- var import_react15 = require("react");
2134
- var import_design_system_foundation37 = require("@boostdev/design-system-foundation");
2576
+ var import_react17 = require("react");
2577
+ var import_design_system_foundation39 = require("@boostdev/design-system-foundation");
2135
2578
 
2136
2579
  // src/components/interaction/form/FieldGroup/FieldGroup.module.css
2137
- var FieldGroup_default = {"component":"bds271FieldGroup-component","fieldGroup":"bds271FieldGroup-fieldGroup","legend":"bds271FieldGroup-legend","fields":"bds271FieldGroup-fields","--variant_horizontal":"bds271FieldGroup---variant_horizontal"};
2580
+ var FieldGroup_default = {"component":"bds2110FieldGroup-component","fieldGroup":"bds2110FieldGroup-fieldGroup","legend":"bds2110FieldGroup-legend","fields":"bds2110FieldGroup-fields","--variant_horizontal":"bds2110FieldGroup---variant_horizontal","probe":"bds2110FieldGroup-probe","tsx":"bds2110FieldGroup-tsx","probeContainer":"bds2110FieldGroup-probeContainer"};
2138
2581
 
2139
2582
  // src/components/interaction/form/FieldGroup/FieldGroup.tsx
2140
- var import_jsx_runtime37 = require("react/jsx-runtime");
2583
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2584
+ var getInlineSize = (entry) => entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;
2141
2585
  function FieldGroup({
2142
2586
  variant = "horizontal",
2143
2587
  legend,
@@ -2146,34 +2590,61 @@ function FieldGroup({
2146
2590
  style,
2147
2591
  ...rest
2148
2592
  }) {
2149
- const fieldCount = import_react15.Children.count(children);
2593
+ const fieldCount = import_react17.Children.toArray(children).length;
2150
2594
  const styleWithCount = {
2151
2595
  ...style,
2152
2596
  "--fieldGroup_field-count": fieldCount
2153
2597
  };
2154
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2598
+ const fieldsetRef = (0, import_react17.useRef)(null);
2599
+ const probeRef = (0, import_react17.useRef)(null);
2600
+ const [isCollapsed, setIsCollapsed] = (0, import_react17.useState)(false);
2601
+ (0, import_react17.useEffect)(() => {
2602
+ const fieldsetEl = fieldsetRef.current;
2603
+ const probeEl = probeRef.current;
2604
+ if (variant !== "horizontal" || !fieldsetEl || !probeEl || typeof ResizeObserver === "undefined") {
2605
+ setIsCollapsed(false);
2606
+ return;
2607
+ }
2608
+ let fieldsetSize = 0;
2609
+ let thresholdSize = 0;
2610
+ const observer = new ResizeObserver((entries) => {
2611
+ for (const entry of entries) {
2612
+ const size = getInlineSize(entry);
2613
+ if (entry.target === fieldsetEl) fieldsetSize = size;
2614
+ else if (entry.target === probeEl) thresholdSize = size;
2615
+ }
2616
+ setIsCollapsed(fieldsetSize < thresholdSize);
2617
+ });
2618
+ observer.observe(fieldsetEl);
2619
+ observer.observe(probeEl);
2620
+ return () => observer.disconnect();
2621
+ }, [variant]);
2622
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
2155
2623
  "fieldset",
2156
2624
  {
2157
2625
  ...rest,
2626
+ ref: fieldsetRef,
2158
2627
  style: styleWithCount,
2159
- className: (0, import_design_system_foundation37.cn)(FieldGroup_default.fieldGroup, FieldGroup_default[`--variant_${variant}`], className),
2628
+ className: (0, import_design_system_foundation39.cn)(FieldGroup_default.fieldGroup, FieldGroup_default[`--variant_${variant}`], className),
2629
+ "data-collapsed": variant === "horizontal" && isCollapsed ? "true" : void 0,
2160
2630
  children: [
2161
- legend !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("legend", { className: FieldGroup_default.legend, children: legend }),
2162
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: FieldGroup_default.fields, children })
2631
+ legend !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("legend", { className: FieldGroup_default.legend, children: legend }),
2632
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: FieldGroup_default.fields, children }),
2633
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: FieldGroup_default.probeContainer, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { ref: probeRef, className: FieldGroup_default.probe }) })
2163
2634
  ]
2164
2635
  }
2165
2636
  );
2166
2637
  }
2167
2638
 
2168
2639
  // src/components/interaction/form/FileInput/FileInput.tsx
2169
- var import_react16 = require("react");
2640
+ var import_react18 = require("react");
2170
2641
 
2171
2642
  // src/components/interaction/form/FileInput/FileInput.module.css
2172
- var FileInput_default = {"component":"bds271FileInput-component","formGroup":"bds271FileInput-formGroup","fieldLabel":"bds271FileInput-fieldLabel","dropZone":"bds271FileInput-dropZone","isDragging":"bds271FileInput-isDragging","hasError":"bds271FileInput-hasError","isDisabled":"bds271FileInput-isDisabled","icon":"bds271FileInput-icon","prompt":"bds271FileInput-prompt","acceptHint":"bds271FileInput-acceptHint","hiddenInput":"bds271FileInput-hiddenInput"};
2643
+ var FileInput_default = {"component":"bds2110FileInput-component","formGroup":"bds2110FileInput-formGroup","fieldLabel":"bds2110FileInput-fieldLabel","dropZone":"bds2110FileInput-dropZone","isDragging":"bds2110FileInput-isDragging","hasError":"bds2110FileInput-hasError","isDisabled":"bds2110FileInput-isDisabled","icon":"bds2110FileInput-icon","prompt":"bds2110FileInput-prompt","acceptHint":"bds2110FileInput-acceptHint","hiddenInput":"bds2110FileInput-hiddenInput"};
2173
2644
 
2174
2645
  // src/components/interaction/form/FileInput/FileInput.tsx
2175
- var import_design_system_foundation38 = require("@boostdev/design-system-foundation");
2176
- var import_jsx_runtime38 = require("react/jsx-runtime");
2646
+ var import_design_system_foundation40 = require("@boostdev/design-system-foundation");
2647
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2177
2648
  function FileInput({
2178
2649
  label,
2179
2650
  name,
@@ -2187,13 +2658,13 @@ function FileInput({
2187
2658
  className,
2188
2659
  ...rest
2189
2660
  }) {
2190
- const uid = name + (0, import_react16.useId)();
2661
+ const uid = name + (0, import_react18.useId)();
2191
2662
  const hintId = uid + "hint";
2192
2663
  const errorId = uid + "error";
2193
2664
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2194
- const inputRef = (0, import_react16.useRef)(null);
2195
- const [isDragging, setIsDragging] = (0, import_react16.useState)(false);
2196
- const [fileNames, setFileNames] = (0, import_react16.useState)([]);
2665
+ const inputRef = (0, import_react18.useRef)(null);
2666
+ const [isDragging, setIsDragging] = (0, import_react18.useState)(false);
2667
+ const [fileNames, setFileNames] = (0, import_react18.useState)([]);
2197
2668
  const isFileAccepted = (file) => {
2198
2669
  if (!accept) return true;
2199
2670
  return accept.split(",").some((token) => {
@@ -2214,7 +2685,9 @@ function FileInput({
2214
2685
  setIsDragging(false);
2215
2686
  if (disabled) return;
2216
2687
  const dt = new DataTransfer();
2217
- Array.from(e.dataTransfer.files).filter(isFileAccepted).forEach((f) => dt.items.add(f));
2688
+ const accepted = Array.from(e.dataTransfer.files).filter(isFileAccepted);
2689
+ const filesToAdd = multiple ? accepted : accepted.slice(0, 1);
2690
+ filesToAdd.forEach((f) => dt.items.add(f));
2218
2691
  if (inputRef.current) inputRef.current.files = dt.files;
2219
2692
  handleFiles(dt.files.length > 0 ? dt.files : null);
2220
2693
  };
@@ -2222,25 +2695,27 @@ function FileInput({
2222
2695
  e.preventDefault();
2223
2696
  if (!disabled) setIsDragging(true);
2224
2697
  };
2225
- const handleDragLeave = () => setIsDragging(false);
2226
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation38.cn)(FileInput_default.formGroup, className), children: [
2227
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2698
+ const handleDragLeave = (e) => {
2699
+ if (!e.currentTarget.contains(e.relatedTarget)) setIsDragging(false);
2700
+ };
2701
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation40.cn)(FileInput_default.formGroup, className), children: [
2702
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2228
2703
  "label",
2229
2704
  {
2230
2705
  htmlFor: uid,
2231
- className: (0, import_design_system_foundation38.cn)(FileInput_default.dropZone, isDragging && FileInput_default.isDragging, error && FileInput_default.hasError, disabled && FileInput_default.isDisabled),
2706
+ className: (0, import_design_system_foundation40.cn)(FileInput_default.dropZone, isDragging && FileInput_default.isDragging, error && FileInput_default.hasError, disabled && FileInput_default.isDisabled),
2232
2707
  onDrop: handleDrop,
2233
2708
  onDragOver: handleDragOver,
2234
2709
  onDragLeave: handleDragLeave,
2235
2710
  children: [
2236
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: FileInput_default.fieldLabel, children: label }),
2237
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("svg", { "aria-hidden": "true", className: FileInput_default.icon, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5" }) }),
2238
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: FileInput_default.prompt, children: fileNames.length > 0 ? fileNames.join(", ") : /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
2239
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("strong", { children: "Click to upload" }),
2711
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: FileInput_default.fieldLabel, children: label }),
2712
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("svg", { "aria-hidden": "true", className: FileInput_default.icon, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5" }) }),
2713
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: FileInput_default.prompt, children: fileNames.length > 0 ? fileNames.join(", ") : /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
2714
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("strong", { children: "Click to upload" }),
2240
2715
  " or drag and drop"
2241
2716
  ] }) }),
2242
- accept && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: FileInput_default.acceptHint, children: accept }),
2243
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2717
+ accept && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: FileInput_default.acceptHint, children: accept }),
2718
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2244
2719
  "input",
2245
2720
  {
2246
2721
  ref: inputRef,
@@ -2261,20 +2736,20 @@ function FileInput({
2261
2736
  ]
2262
2737
  }
2263
2738
  ),
2264
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Message, { inputId: uid, type: "error", message: error }),
2265
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Message, { inputId: uid, type: "hint", message: hint })
2739
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Message, { inputId: uid, type: "error", message: error }),
2740
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Message, { inputId: uid, type: "hint", message: hint })
2266
2741
  ] });
2267
2742
  }
2268
2743
 
2269
2744
  // src/components/interaction/form/FormInput/FormInput.tsx
2270
- var import_react17 = require("react");
2745
+ var import_react19 = require("react");
2271
2746
 
2272
2747
  // src/components/interaction/form/FormInput/FormInput.module.css
2273
- var FormInput_default = {"component":"bds271FormInput-component","formGroup":"bds271FormInput-formGroup","input":"bds271FormInput-input","inputError":"bds271FormInput-inputError"};
2748
+ var FormInput_default = {"component":"bds2110FormInput-component","formGroup":"bds2110FormInput-formGroup","input":"bds2110FormInput-input","g":"bds2110FormInput-g","inputError":"bds2110FormInput-inputError"};
2274
2749
 
2275
2750
  // src/components/interaction/form/FormInput/FormInput.tsx
2276
- var import_design_system_foundation39 = require("@boostdev/design-system-foundation");
2277
- var import_jsx_runtime39 = require("react/jsx-runtime");
2751
+ var import_design_system_foundation41 = require("@boostdev/design-system-foundation");
2752
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2278
2753
  function FormInput({
2279
2754
  label,
2280
2755
  name,
@@ -2283,42 +2758,43 @@ function FormInput({
2283
2758
  hint,
2284
2759
  className,
2285
2760
  required,
2761
+ "aria-label": nativeAriaLabel,
2286
2762
  ...props
2287
2763
  }) {
2288
- const id = name + (0, import_react17.useId)();
2764
+ const id = name + (0, import_react19.useId)();
2289
2765
  const hintId = id + "hint";
2290
2766
  const errorId = id + "error";
2291
2767
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2292
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(InputContainer, { className: (0, import_design_system_foundation39.cn)(FormInput_default.formGroup, className), children: [
2293
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Label, { id, label }),
2294
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2768
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(InputContainer, { className: (0, import_design_system_foundation41.cn)(FormInput_default.formGroup, className), children: [
2769
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Label, { id, label }),
2770
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2295
2771
  "input",
2296
2772
  {
2773
+ ...props,
2297
2774
  "aria-invalid": !!error,
2298
2775
  "aria-describedby": describedBy,
2299
- "aria-label": ariaLabel,
2776
+ "aria-label": ariaLabel ?? nativeAriaLabel,
2300
2777
  "aria-required": required || void 0,
2301
2778
  id,
2302
2779
  name,
2303
2780
  required,
2304
- className: (0, import_design_system_foundation39.cn)(FormInput_default.input, error && FormInput_default.inputError),
2305
- ...props
2781
+ className: (0, import_design_system_foundation41.cn)(FormInput_default.input, error && FormInput_default.inputError)
2306
2782
  }
2307
2783
  ),
2308
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Message, { inputId: id, type: "error", message: error }),
2309
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Message, { inputId: id, type: "hint", message: hint })
2784
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Message, { inputId: id, type: "error", message: error }),
2785
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Message, { inputId: id, type: "hint", message: hint })
2310
2786
  ] });
2311
2787
  }
2312
2788
 
2313
2789
  // src/components/interaction/form/NumberInput/NumberInput.tsx
2314
- var import_react18 = require("react");
2790
+ var import_react20 = require("react");
2315
2791
 
2316
2792
  // src/components/interaction/form/NumberInput/NumberInput.module.css
2317
- var NumberInput_default = {"component":"bds271NumberInput-component","formGroup":"bds271NumberInput-formGroup","inputRow":"bds271NumberInput-inputRow","input":"bds271NumberInput-input","inputError":"bds271NumberInput-inputError","stepper":"bds271NumberInput-stepper"};
2793
+ var NumberInput_default = {"component":"bds2110NumberInput-component","formGroup":"bds2110NumberInput-formGroup","inputRow":"bds2110NumberInput-inputRow","input":"bds2110NumberInput-input","inputError":"bds2110NumberInput-inputError","stepper":"bds2110NumberInput-stepper"};
2318
2794
 
2319
2795
  // src/components/interaction/form/NumberInput/NumberInput.tsx
2320
- var import_design_system_foundation40 = require("@boostdev/design-system-foundation");
2321
- var import_jsx_runtime40 = require("react/jsx-runtime");
2796
+ var import_design_system_foundation42 = require("@boostdev/design-system-foundation");
2797
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2322
2798
  function NumberInput({
2323
2799
  label,
2324
2800
  name,
@@ -2332,16 +2808,23 @@ function NumberInput({
2332
2808
  hint,
2333
2809
  onChange,
2334
2810
  className,
2811
+ decreaseLabel = "Decrease",
2812
+ increaseLabel = "Increase",
2335
2813
  ...rest
2336
2814
  }) {
2337
- const uid = name + (0, import_react18.useId)();
2815
+ const uid = name + (0, import_react20.useId)();
2338
2816
  const hintId = uid + "hint";
2339
2817
  const errorId = uid + "error";
2340
2818
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2341
- const inputRef = (0, import_react18.useRef)(null);
2819
+ const inputRef = (0, import_react20.useRef)(null);
2342
2820
  const isControlled = value !== void 0;
2343
- const [internalValue, setInternalValue] = (0, import_react18.useState)(defaultValue ?? 0);
2821
+ const [internalValue, setInternalValue] = (0, import_react20.useState)(defaultValue ?? 0);
2344
2822
  const currentValue = isControlled ? value : internalValue;
2823
+ const [controlledDraft, setControlledDraft] = (0, import_react20.useState)(() => isControlled ? String(value) : "");
2824
+ (0, import_react20.useEffect)(() => {
2825
+ if (!isControlled) return;
2826
+ setControlledDraft((prev) => parseFloat(prev) === value ? prev : String(value));
2827
+ }, [isControlled, value]);
2345
2828
  const clamp = (v) => {
2346
2829
  const withMin = min !== void 0 ? Math.max(min, v) : v;
2347
2830
  return max !== void 0 ? Math.min(max, withMin) : withMin;
@@ -2354,84 +2837,91 @@ function NumberInput({
2354
2837
  inputRef.current.value = String(next);
2355
2838
  inputRef.current.dispatchEvent(new Event("input", { bubbles: true }));
2356
2839
  }
2840
+ } else {
2841
+ setControlledDraft(String(next));
2357
2842
  }
2358
2843
  onChange?.(next);
2359
2844
  };
2360
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation40.cn)(NumberInput_default.formGroup, className), children: [
2361
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Label, { id: uid, label }),
2362
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: NumberInput_default.inputRow, children: [
2363
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2845
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(InputContainer, { ...rest, className: (0, import_design_system_foundation42.cn)(NumberInput_default.formGroup, className), children: [
2846
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Label, { id: uid, label }),
2847
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: NumberInput_default.inputRow, children: [
2848
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2364
2849
  "button",
2365
2850
  {
2366
2851
  type: "button",
2367
2852
  className: NumberInput_default.stepper,
2368
- "aria-label": "Decrease",
2853
+ "aria-label": decreaseLabel,
2369
2854
  "aria-controls": uid,
2370
2855
  disabled: disabled || min !== void 0 && currentValue <= min,
2371
2856
  onClick: () => adjust(-step),
2372
2857
  tabIndex: -1,
2373
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 12h14" }) })
2858
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 12h14" }) })
2374
2859
  }
2375
2860
  ),
2376
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2861
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2377
2862
  "input",
2378
2863
  {
2379
2864
  ref: inputRef,
2380
2865
  id: uid,
2381
2866
  type: "number",
2382
2867
  name,
2383
- ...isControlled ? { value } : { defaultValue },
2868
+ ...isControlled ? { value: controlledDraft } : { defaultValue },
2384
2869
  min,
2385
2870
  max,
2386
2871
  step,
2387
2872
  disabled,
2388
2873
  "aria-invalid": !!error,
2389
2874
  "aria-describedby": describedBy,
2390
- className: (0, import_design_system_foundation40.cn)(NumberInput_default.input, error ? NumberInput_default.inputError : void 0),
2875
+ className: (0, import_design_system_foundation42.cn)(NumberInput_default.input, error ? NumberInput_default.inputError : void 0),
2391
2876
  onChange: (e) => {
2392
- const v = parseFloat(e.target.value);
2393
- const safe = isNaN(v) ? 0 : v;
2394
- if (!isControlled) setInternalValue(safe);
2395
- onChange?.(safe);
2877
+ if (e.target.validity.badInput) return;
2878
+ const raw = e.target.value;
2879
+ if (isControlled) setControlledDraft(raw);
2880
+ if (raw === "") return;
2881
+ const parsed = parseFloat(raw);
2882
+ if (Number.isNaN(parsed)) return;
2883
+ if (!isControlled) setInternalValue(parsed);
2884
+ onChange?.(parsed);
2396
2885
  }
2397
2886
  }
2398
2887
  ),
2399
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2888
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2400
2889
  "button",
2401
2890
  {
2402
2891
  type: "button",
2403
2892
  className: NumberInput_default.stepper,
2404
- "aria-label": "Increase",
2893
+ "aria-label": increaseLabel,
2405
2894
  "aria-controls": uid,
2406
2895
  disabled: disabled || max !== void 0 && currentValue >= max,
2407
2896
  onClick: () => adjust(step),
2408
2897
  tabIndex: -1,
2409
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 5v14M5 12h14" }) })
2898
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M12 5v14M5 12h14" }) })
2410
2899
  }
2411
2900
  )
2412
2901
  ] }),
2413
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Message, { inputId: uid, type: "error", message: error }),
2414
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Message, { inputId: uid, type: "hint", message: hint })
2902
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Message, { inputId: uid, type: "error", message: error }),
2903
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Message, { inputId: uid, type: "hint", message: hint })
2415
2904
  ] });
2416
2905
  }
2417
2906
 
2418
2907
  // src/components/interaction/form/Radio/Radio.tsx
2419
- var import_react19 = require("react");
2908
+ var import_react21 = require("react");
2420
2909
 
2421
2910
  // src/components/interaction/form/Radio/Radio.module.css
2422
- var Radio_default = {"component":"bds271Radio-component","radioGroup":"bds271Radio-radioGroup","inputWrapper":"bds271Radio-inputWrapper","textWrapper":"bds271Radio-textWrapper","description":"bds271Radio-description","radio":"bds271Radio-radio","radioError":"bds271Radio-radioError"};
2911
+ var Radio_default = {"component":"bds2110Radio-component","radioGroup":"bds2110Radio-radioGroup","inputWrapper":"bds2110Radio-inputWrapper","textWrapper":"bds2110Radio-textWrapper","description":"bds2110Radio-description","radio":"bds2110Radio-radio","g":"bds2110Radio-g","radioError":"bds2110Radio-radioError"};
2423
2912
 
2424
2913
  // src/components/interaction/form/Radio/Radio.tsx
2425
- var import_design_system_foundation41 = require("@boostdev/design-system-foundation");
2426
- var import_jsx_runtime41 = require("react/jsx-runtime");
2427
- function Radio({ label, name, description, error, hint, className, ...props }) {
2428
- const id = name + (0, import_react19.useId)();
2914
+ var import_design_system_foundation43 = require("@boostdev/design-system-foundation");
2915
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2916
+ function Radio({ label, name, description, error, hint, className, id: consumerId, ...props }) {
2917
+ const id = consumerId ?? name + (0, import_react21.useId)();
2918
+ const descriptionId = id + "description";
2429
2919
  const hintId = id + "hint";
2430
2920
  const errorId = id + "error";
2431
- const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2432
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(InputContainer, { className: (0, import_design_system_foundation41.cn)(Radio_default.radioGroup, className), children: [
2433
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: Radio_default.inputWrapper, children: [
2434
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2921
+ const describedBy = [description && descriptionId, error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2922
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(InputContainer, { className: (0, import_design_system_foundation43.cn)(Radio_default.radioGroup, className), children: [
2923
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: Radio_default.inputWrapper, children: [
2924
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2435
2925
  "input",
2436
2926
  {
2437
2927
  "aria-describedby": describedBy,
@@ -2439,29 +2929,29 @@ function Radio({ label, name, description, error, hint, className, ...props }) {
2439
2929
  type: "radio",
2440
2930
  id,
2441
2931
  name,
2442
- className: (0, import_design_system_foundation41.cn)(Radio_default.radio, error && Radio_default.radioError),
2932
+ className: (0, import_design_system_foundation43.cn)(Radio_default.radio, error && Radio_default.radioError),
2443
2933
  ...props
2444
2934
  }
2445
2935
  ),
2446
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: Radio_default.textWrapper, children: [
2447
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Label, { id, label }),
2448
- description && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: Radio_default.description, children: description })
2936
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: Radio_default.textWrapper, children: [
2937
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Label, { id, label }),
2938
+ description && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { id: descriptionId, className: Radio_default.description, children: description })
2449
2939
  ] })
2450
2940
  ] }),
2451
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Message, { inputId: id, type: "error", message: error }),
2452
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Message, { inputId: id, type: "hint", message: hint })
2941
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Message, { inputId: id, type: "error", message: error }),
2942
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Message, { inputId: id, type: "hint", message: hint })
2453
2943
  ] });
2454
2944
  }
2455
2945
 
2456
2946
  // src/components/interaction/form/RadioGroup/RadioGroup.tsx
2457
- var import_react20 = require("react");
2947
+ var import_react22 = require("react");
2458
2948
 
2459
2949
  // src/components/interaction/form/RadioGroup/RadioGroup.module.css
2460
- var RadioGroup_default = {"component":"bds271RadioGroup-component","group":"bds271RadioGroup-group","legend":"bds271RadioGroup-legend","required":"bds271RadioGroup-required","items":"bds271RadioGroup-items"};
2950
+ var RadioGroup_default = {"component":"bds2110RadioGroup-component","group":"bds2110RadioGroup-group","legend":"bds2110RadioGroup-legend","required":"bds2110RadioGroup-required","requiredLabel":"bds2110RadioGroup-requiredLabel","items":"bds2110RadioGroup-items"};
2461
2951
 
2462
2952
  // src/components/interaction/form/RadioGroup/RadioGroup.tsx
2463
- var import_design_system_foundation42 = require("@boostdev/design-system-foundation");
2464
- var import_jsx_runtime42 = require("react/jsx-runtime");
2953
+ var import_design_system_foundation44 = require("@boostdev/design-system-foundation");
2954
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2465
2955
  function RadioGroup({
2466
2956
  legend,
2467
2957
  children,
@@ -2471,39 +2961,45 @@ function RadioGroup({
2471
2961
  className,
2472
2962
  ...rest
2473
2963
  }) {
2474
- const id = (0, import_react20.useId)();
2964
+ const id = (0, import_react22.useId)();
2475
2965
  const hintId = id + "hint";
2476
2966
  const errorId = id + "error";
2477
2967
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2478
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2968
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2479
2969
  "fieldset",
2480
2970
  {
2481
2971
  ...rest,
2482
- className: (0, import_design_system_foundation42.cn)(RadioGroup_default.group, className),
2483
- "aria-required": required || void 0,
2972
+ className: (0, import_design_system_foundation44.cn)(RadioGroup_default.group, className),
2484
2973
  "aria-describedby": describedBy,
2485
2974
  children: [
2486
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("legend", { className: RadioGroup_default.legend, children: [
2975
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("legend", { className: RadioGroup_default.legend, children: [
2487
2976
  legend,
2488
- required && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: RadioGroup_default.required, "aria-hidden": "true", children: " *" })
2977
+ required && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
2978
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: RadioGroup_default.required, "aria-hidden": "true", children: " *" }),
2979
+ " ",
2980
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: RadioGroup_default.requiredLabel, children: "(required)" })
2981
+ ] })
2489
2982
  ] }),
2490
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: RadioGroup_default.items, children }),
2491
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Message, { inputId: id, type: "error", message: error }),
2492
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Message, { inputId: id, type: "hint", message: hint })
2983
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: RadioGroup_default.items, children }),
2984
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Message, { inputId: id, type: "error", message: error }),
2985
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Message, { inputId: id, type: "hint", message: hint })
2493
2986
  ]
2494
2987
  }
2495
2988
  );
2496
2989
  }
2497
2990
 
2498
2991
  // src/components/interaction/form/SegmentedControl/SegmentedControl.tsx
2499
- var import_react21 = require("react");
2992
+ var import_react23 = require("react");
2500
2993
 
2501
2994
  // src/components/interaction/form/SegmentedControl/SegmentedControl.module.css
2502
- var SegmentedControl_default = {"component":"bds271SegmentedControl-component","control":"bds271SegmentedControl-control","thumb":"bds271SegmentedControl-thumb","indicator":"bds271SegmentedControl-indicator","item":"bds271SegmentedControl-item","--active":"bds271SegmentedControl---active","--disabled":"bds271SegmentedControl---disabled","--size_small":"bds271SegmentedControl---size_small","--size_large":"bds271SegmentedControl---size_large","--variant_outline":"bds271SegmentedControl---variant_outline"};
2995
+ var SegmentedControl_default = {"component":"bds2110SegmentedControl-component","control":"bds2110SegmentedControl-control","thumb":"bds2110SegmentedControl-thumb","indicator":"bds2110SegmentedControl-indicator","item":"bds2110SegmentedControl-item","--active":"bds2110SegmentedControl---active","--disabled":"bds2110SegmentedControl---disabled","--size_small":"bds2110SegmentedControl---size_small","--size_large":"bds2110SegmentedControl---size_large","--variant_outline":"bds2110SegmentedControl---variant_outline","--no-selection":"bds2110SegmentedControl---no-selection"};
2503
2996
 
2504
2997
  // src/components/interaction/form/SegmentedControl/SegmentedControl.tsx
2505
- var import_design_system_foundation43 = require("@boostdev/design-system-foundation");
2506
- var import_jsx_runtime43 = require("react/jsx-runtime");
2998
+ var import_design_system_foundation45 = require("@boostdev/design-system-foundation");
2999
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3000
+ var preventDisabledActivation = (event) => {
3001
+ event.preventDefault();
3002
+ };
2507
3003
  function SegmentedControl({
2508
3004
  children,
2509
3005
  selectedIndex: selectedIndexProp,
@@ -2513,35 +3009,55 @@ function SegmentedControl({
2513
3009
  className,
2514
3010
  ...rest
2515
3011
  }) {
2516
- const validChildren = import_react21.Children.toArray(children).filter(import_react21.isValidElement);
3012
+ const validChildren = import_react23.Children.toArray(children).filter(import_react23.isValidElement);
2517
3013
  const autoIndex = selectedIndexProp === void 0 ? validChildren.findIndex((child) => {
2518
3014
  const p = child.props;
2519
3015
  return p["aria-current"] === "page" || p["aria-pressed"] === true || p["aria-selected"] === true;
2520
3016
  }) : -1;
2521
- const activeIndex = Math.max(0, selectedIndexProp ?? (autoIndex >= 0 ? autoIndex : 0));
2522
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
3017
+ const activeIndex = validChildren.length === 0 ? void 0 : selectedIndexProp !== void 0 ? Math.min(Math.max(selectedIndexProp, 0), validChildren.length - 1) : autoIndex >= 0 ? autoIndex : void 0;
3018
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
2523
3019
  "div",
2524
3020
  {
2525
3021
  ...rest,
2526
3022
  role: "group",
2527
- className: (0, import_design_system_foundation43.cn)(SegmentedControl_default.control, SegmentedControl_default[`--size_${size}`], SegmentedControl_default[`--variant_${variant}`], className),
3023
+ className: (0, import_design_system_foundation45.cn)(
3024
+ SegmentedControl_default.control,
3025
+ SegmentedControl_default[`--size_${size}`],
3026
+ SegmentedControl_default[`--variant_${variant}`],
3027
+ activeIndex === void 0 && SegmentedControl_default["--no-selection"],
3028
+ className
3029
+ ),
2528
3030
  style: {
2529
3031
  "--control_count": validChildren.length,
2530
- "--control_selected-index": activeIndex
3032
+ ...activeIndex !== void 0 ? { "--control_selected-index": activeIndex } : {}
2531
3033
  },
2532
3034
  children: [
2533
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: SegmentedControl_default.thumb, "aria-hidden": "true" }),
2534
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: SegmentedControl_default.indicator, "aria-hidden": "true" }),
3035
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: SegmentedControl_default.thumb, "aria-hidden": "true" }),
3036
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: SegmentedControl_default.indicator, "aria-hidden": "true" }),
2535
3037
  validChildren.map((child, index) => {
2536
3038
  const isActive = index === activeIndex;
2537
3039
  const p = child.props;
2538
- const isDisabled = disabled || !!p.disabled || p["aria-disabled"] === true;
2539
- return (0, import_react21.cloneElement)(child, {
3040
+ const isDisabled2 = disabled || !!p.disabled || p["aria-disabled"] === true;
3041
+ const hasAriaState = p["aria-current"] !== void 0 || p["aria-pressed"] !== void 0 || p["aria-selected"] !== void 0;
3042
+ const stateProps = {};
3043
+ if (isDisabled2) {
3044
+ stateProps["aria-disabled"] = true;
3045
+ if (child.type === "button") {
3046
+ stateProps.disabled = true;
3047
+ } else {
3048
+ stateProps.tabIndex = -1;
3049
+ stateProps.onClick = preventDisabledActivation;
3050
+ }
3051
+ } else if (isActive && selectedIndexProp !== void 0 && !hasAriaState) {
3052
+ stateProps[child.type === "a" ? "aria-current" : "aria-pressed"] = child.type === "a" ? "page" : true;
3053
+ }
3054
+ return (0, import_react23.cloneElement)(child, {
2540
3055
  key: child.key ?? index,
2541
- className: (0, import_design_system_foundation43.cn)(
3056
+ ...stateProps,
3057
+ className: (0, import_design_system_foundation45.cn)(
2542
3058
  SegmentedControl_default.item,
2543
3059
  isActive && SegmentedControl_default["--active"],
2544
- isDisabled && SegmentedControl_default["--disabled"],
3060
+ isDisabled2 && SegmentedControl_default["--disabled"],
2545
3061
  p.className
2546
3062
  )
2547
3063
  });
@@ -2552,14 +3068,14 @@ function SegmentedControl({
2552
3068
  }
2553
3069
 
2554
3070
  // src/components/interaction/form/Select/Select.tsx
2555
- var import_react22 = require("react");
3071
+ var import_react24 = require("react");
2556
3072
 
2557
3073
  // src/components/interaction/form/Select/Select.module.css
2558
- var Select_default = {"component":"bds271Select-component","formGroup":"bds271Select-formGroup","selectWrapper":"bds271Select-selectWrapper","select":"bds271Select-select","selectError":"bds271Select-selectError","chevron":"bds271Select-chevron"};
3074
+ var Select_default = {"component":"bds2110Select-component","formGroup":"bds2110Select-formGroup","selectWrapper":"bds2110Select-selectWrapper","select":"bds2110Select-select","selectError":"bds2110Select-selectError","chevron":"bds2110Select-chevron"};
2559
3075
 
2560
3076
  // src/components/interaction/form/Select/Select.tsx
2561
- var import_design_system_foundation44 = require("@boostdev/design-system-foundation");
2562
- var import_jsx_runtime44 = require("react/jsx-runtime");
3077
+ var import_design_system_foundation46 = require("@boostdev/design-system-foundation");
3078
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2563
3079
  function Select({
2564
3080
  label,
2565
3081
  name,
@@ -2569,48 +3085,55 @@ function Select({
2569
3085
  hint,
2570
3086
  className,
2571
3087
  required,
2572
- ...props
3088
+ id,
3089
+ value,
3090
+ defaultValue,
3091
+ ...rest
2573
3092
  }) {
2574
- const id = name + (0, import_react22.useId)();
2575
- const hintId = id + "hint";
2576
- const errorId = id + "error";
3093
+ const generatedId = name + (0, import_react24.useId)();
3094
+ const selectId = id ?? generatedId;
3095
+ const hintId = selectId + "hint";
3096
+ const errorId = selectId + "error";
2577
3097
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2578
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(InputContainer, { className: (0, import_design_system_foundation44.cn)(Select_default.formGroup, className), children: [
2579
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Label, { id, label }),
2580
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: Select_default.selectWrapper, children: [
2581
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
3098
+ const isControlled = value !== void 0;
3099
+ const initialValueProps = isControlled ? { value } : { defaultValue: defaultValue ?? (placeholder ? "" : void 0) };
3100
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(InputContainer, { className: (0, import_design_system_foundation46.cn)(Select_default.formGroup, className), children: [
3101
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label, { id: selectId, label }),
3102
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: Select_default.selectWrapper, children: [
3103
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
2582
3104
  "select",
2583
3105
  {
2584
- id,
3106
+ ...rest,
3107
+ id: selectId,
2585
3108
  name,
2586
3109
  "aria-invalid": !!error,
2587
3110
  "aria-required": required || void 0,
2588
3111
  "aria-describedby": describedBy,
2589
3112
  required,
2590
- className: (0, import_design_system_foundation44.cn)(Select_default.select, error ? Select_default.selectError : void 0),
2591
- ...props,
3113
+ className: (0, import_design_system_foundation46.cn)(Select_default.select, error ? Select_default.selectError : void 0),
3114
+ ...initialValueProps,
2592
3115
  children: [
2593
- placeholder && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value: "", disabled: true, hidden: true, children: placeholder }),
2594
- options.map(({ value, label: optLabel, disabled }) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("option", { value, disabled, children: optLabel }, value))
3116
+ placeholder && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("option", { value: "", disabled: true, hidden: true, children: placeholder }),
3117
+ options.map(({ value: value2, label: optLabel, disabled }) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("option", { value: value2, disabled, children: optLabel }, value2))
2595
3118
  ]
2596
3119
  }
2597
3120
  ),
2598
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: Select_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" }) }) })
3121
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: Select_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 9l6 6 6-6" }) }) })
2599
3122
  ] }),
2600
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Message, { inputId: id, type: "error", message: error }),
2601
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Message, { inputId: id, type: "hint", message: hint })
3123
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Message, { inputId: selectId, type: "error", message: error }),
3124
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Message, { inputId: selectId, type: "hint", message: hint })
2602
3125
  ] });
2603
3126
  }
2604
3127
 
2605
3128
  // src/components/interaction/form/Slider/Slider.tsx
2606
- var import_react23 = require("react");
3129
+ var import_react25 = require("react");
2607
3130
 
2608
3131
  // src/components/interaction/form/Slider/Slider.module.css
2609
- var Slider_default = {"component":"bds271Slider-component","formGroup":"bds271Slider-formGroup","labelRow":"bds271Slider-labelRow","value":"bds271Slider-value","slider":"bds271Slider-slider","sliderError":"bds271Slider-sliderError"};
3132
+ var Slider_default = {"component":"bds2110Slider-component","formGroup":"bds2110Slider-formGroup","labelRow":"bds2110Slider-labelRow","value":"bds2110Slider-value","slider":"bds2110Slider-slider","sliderError":"bds2110Slider-sliderError"};
2610
3133
 
2611
3134
  // src/components/interaction/form/Slider/Slider.tsx
2612
- var import_design_system_foundation45 = require("@boostdev/design-system-foundation");
2613
- var import_jsx_runtime45 = require("react/jsx-runtime");
3135
+ var import_design_system_foundation47 = require("@boostdev/design-system-foundation");
3136
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2614
3137
  function Slider({
2615
3138
  label,
2616
3139
  name,
@@ -2623,56 +3146,55 @@ function Slider({
2623
3146
  onChange,
2624
3147
  ...props
2625
3148
  }) {
2626
- const id = name + (0, import_react23.useId)();
3149
+ const id = name + (0, import_react25.useId)();
2627
3150
  const hintId = id + "hint";
2628
3151
  const errorId = id + "error";
2629
3152
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2630
3153
  const isControlled = props.value !== void 0;
2631
- const [internalValue, setInternalValue] = (0, import_react23.useState)(Number(props.defaultValue ?? min));
3154
+ const [internalValue, setInternalValue] = (0, import_react25.useState)(
3155
+ Number(props.defaultValue ?? min + (max - min) / 2)
3156
+ );
2632
3157
  const currentValue = isControlled ? Number(props.value) : internalValue;
2633
3158
  const fillPct = (currentValue - min) / (max - min) * 100;
2634
3159
  const handleChange = (e) => {
2635
3160
  if (!isControlled) setInternalValue(Number(e.target.value));
2636
3161
  onChange?.(e);
2637
3162
  };
2638
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(InputContainer, { className: (0, import_design_system_foundation45.cn)(Slider_default.formGroup, className), children: [
2639
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: Slider_default.labelRow, children: [
2640
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Label, { id, label }),
2641
- showValue && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: Slider_default.value, children: currentValue })
3163
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(InputContainer, { className: (0, import_design_system_foundation47.cn)(Slider_default.formGroup, className), children: [
3164
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: Slider_default.labelRow, children: [
3165
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label, { id, label }),
3166
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: Slider_default.value, children: currentValue })
2642
3167
  ] }),
2643
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3168
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2644
3169
  "input",
2645
3170
  {
3171
+ ...props,
2646
3172
  type: "range",
2647
3173
  id,
2648
3174
  name,
2649
3175
  min,
2650
3176
  max,
3177
+ "aria-invalid": !!error,
2651
3178
  "aria-describedby": describedBy,
2652
- "aria-valuemin": min,
2653
- "aria-valuemax": max,
2654
- "aria-valuenow": currentValue,
2655
- "aria-valuetext": String(currentValue),
2656
- className: (0, import_design_system_foundation45.cn)(Slider_default.slider, error ? Slider_default.sliderError : void 0),
2657
- style: { "--slider_fill": `${fillPct}%` },
2658
- onChange: handleChange,
2659
- ...props
3179
+ className: (0, import_design_system_foundation47.cn)(Slider_default.slider, error ? Slider_default.sliderError : void 0),
3180
+ style: { ...props.style, "--slider_fill": `${fillPct}%` },
3181
+ onChange: handleChange
2660
3182
  }
2661
3183
  ),
2662
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Message, { inputId: id, type: "error", message: error }),
2663
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Message, { inputId: id, type: "hint", message: hint })
3184
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Message, { inputId: id, type: "error", message: error }),
3185
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Message, { inputId: id, type: "hint", message: hint })
2664
3186
  ] });
2665
3187
  }
2666
3188
 
2667
3189
  // src/components/interaction/form/Switch/Switch.tsx
2668
- var import_react24 = require("react");
3190
+ var import_react26 = require("react");
2669
3191
 
2670
3192
  // src/components/interaction/form/Switch/Switch.module.css
2671
- var Switch_default = {"component":"bds271Switch-component","switchGroup":"bds271Switch-switchGroup","--size_small":"bds271Switch---size_small","--size_medium":"bds271Switch---size_medium","--size_large":"bds271Switch---size_large","inputWrapper":"bds271Switch-inputWrapper","trackWrapper":"bds271Switch-trackWrapper","switch":"bds271Switch-switch","track":"bds271Switch-track","thumb":"bds271Switch-thumb","switchError":"bds271Switch-switchError"};
3193
+ var Switch_default = {"component":"bds2110Switch-component","switchGroup":"bds2110Switch-switchGroup","--size_small":"bds2110Switch---size_small","--size_medium":"bds2110Switch---size_medium","--size_large":"bds2110Switch---size_large","inputWrapper":"bds2110Switch-inputWrapper","trackWrapper":"bds2110Switch-trackWrapper","switch":"bds2110Switch-switch","track":"bds2110Switch-track","thumb":"bds2110Switch-thumb","switchError":"bds2110Switch-switchError"};
2672
3194
 
2673
3195
  // src/components/interaction/form/Switch/Switch.tsx
2674
- var import_design_system_foundation46 = require("@boostdev/design-system-foundation");
2675
- var import_jsx_runtime46 = require("react/jsx-runtime");
3196
+ var import_design_system_foundation48 = require("@boostdev/design-system-foundation");
3197
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2676
3198
  function Switch({
2677
3199
  label,
2678
3200
  name,
@@ -2683,44 +3205,45 @@ function Switch({
2683
3205
  prefix,
2684
3206
  ...props
2685
3207
  }) {
2686
- const id = name + (0, import_react24.useId)();
3208
+ const id = name + (0, import_react26.useId)();
2687
3209
  const hintId = id + "hint";
2688
3210
  const errorId = id + "error";
2689
3211
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2690
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(InputContainer, { className: (0, import_design_system_foundation46.cn)(Switch_default.switchGroup, Switch_default[`--size_${size}`], className), children: [
2691
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: Switch_default.inputWrapper, children: [
2692
- prefix && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { children: prefix }),
2693
- /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: Switch_default.trackWrapper, children: [
2694
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3212
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(InputContainer, { className: (0, import_design_system_foundation48.cn)(Switch_default.switchGroup, Switch_default[`--size_${size}`], className), children: [
3213
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: Switch_default.inputWrapper, children: [
3214
+ prefix && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: prefix }),
3215
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: Switch_default.trackWrapper, children: [
3216
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2695
3217
  "input",
2696
3218
  {
3219
+ ...props,
2697
3220
  type: "checkbox",
2698
3221
  role: "switch",
2699
3222
  id,
2700
3223
  name,
2701
3224
  "aria-describedby": describedBy,
2702
- className: (0, import_design_system_foundation46.cn)(Switch_default.switch, error ? Switch_default.switchError : void 0),
2703
- ...props
3225
+ "aria-invalid": !!error,
3226
+ className: (0, import_design_system_foundation48.cn)(Switch_default.switch, error ? Switch_default.switchError : void 0)
2704
3227
  }
2705
3228
  ),
2706
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: Switch_default.track, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: Switch_default.thumb }) })
3229
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: Switch_default.track, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: Switch_default.thumb }) })
2707
3230
  ] }),
2708
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Label, { id, label })
3231
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Label, { id, label })
2709
3232
  ] }),
2710
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Message, { inputId: id, type: "error", message: error }),
2711
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Message, { inputId: id, type: "hint", message: hint })
3233
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Message, { inputId: id, type: "error", message: error }),
3234
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Message, { inputId: id, type: "hint", message: hint })
2712
3235
  ] });
2713
3236
  }
2714
3237
 
2715
3238
  // src/components/interaction/form/Textarea/Textarea.tsx
2716
- var import_react25 = require("react");
3239
+ var import_react27 = require("react");
2717
3240
 
2718
3241
  // src/components/interaction/form/Textarea/Textarea.module.css
2719
- var Textarea_default = {"component":"bds271Textarea-component","formGroup":"bds271Textarea-formGroup","textarea":"bds271Textarea-textarea","textareaError":"bds271Textarea-textareaError"};
3242
+ var Textarea_default = {"component":"bds2110Textarea-component","formGroup":"bds2110Textarea-formGroup","textarea":"bds2110Textarea-textarea","textareaError":"bds2110Textarea-textareaError"};
2720
3243
 
2721
3244
  // src/components/interaction/form/Textarea/Textarea.tsx
2722
- var import_design_system_foundation47 = require("@boostdev/design-system-foundation");
2723
- var import_jsx_runtime47 = require("react/jsx-runtime");
3245
+ var import_design_system_foundation49 = require("@boostdev/design-system-foundation");
3246
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2724
3247
  function Textarea({
2725
3248
  label,
2726
3249
  name,
@@ -2728,15 +3251,17 @@ function Textarea({
2728
3251
  hint,
2729
3252
  className,
2730
3253
  required,
3254
+ id: idProp,
2731
3255
  ...props
2732
3256
  }) {
2733
- const id = name + (0, import_react25.useId)();
3257
+ const generatedId = (0, import_react27.useId)();
3258
+ const id = idProp ?? name + generatedId;
2734
3259
  const hintId = id + "hint";
2735
3260
  const errorId = id + "error";
2736
3261
  const describedBy = [error && errorId, hint && hintId].filter(Boolean).join(" ") || void 0;
2737
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(InputContainer, { className: (0, import_design_system_foundation47.cn)(Textarea_default.formGroup, className), children: [
2738
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Label, { id, label }),
2739
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3262
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(InputContainer, { className: (0, import_design_system_foundation49.cn)(Textarea_default.formGroup, className), children: [
3263
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Label, { id, label }),
3264
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2740
3265
  "textarea",
2741
3266
  {
2742
3267
  id,
@@ -2745,40 +3270,40 @@ function Textarea({
2745
3270
  "aria-describedby": describedBy,
2746
3271
  "aria-required": required || void 0,
2747
3272
  required,
2748
- className: (0, import_design_system_foundation47.cn)(Textarea_default.textarea, error ? Textarea_default.textareaError : void 0),
3273
+ className: (0, import_design_system_foundation49.cn)(Textarea_default.textarea, error ? Textarea_default.textareaError : void 0),
2749
3274
  ...props
2750
3275
  }
2751
3276
  ),
2752
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Message, { inputId: id, type: "error", message: error }),
2753
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Message, { inputId: id, type: "hint", message: hint })
3277
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Message, { inputId: id, type: "error", message: error }),
3278
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Message, { inputId: id, type: "hint", message: hint })
2754
3279
  ] });
2755
3280
  }
2756
3281
 
2757
3282
  // src/components/layout/ButtonGroup/ButtonGroup.module.css
2758
- var ButtonGroup_default = {"component":"bds271ButtonGroup-component","buttonGroup":"bds271ButtonGroup-buttonGroup","container":"bds271ButtonGroup-container","--variant_card":"bds271ButtonGroup---variant_card","--variant_flow":"bds271ButtonGroup---variant_flow","--variant_modal":"bds271ButtonGroup---variant_modal","--variant_content":"bds271ButtonGroup---variant_content","--variant_grid":"bds271ButtonGroup---variant_grid"};
3283
+ var ButtonGroup_default = {"component":"bds2110ButtonGroup-component","buttonGroup":"bds2110ButtonGroup-buttonGroup","container":"bds2110ButtonGroup-container","--variant_card":"bds2110ButtonGroup---variant_card","--variant_flow":"bds2110ButtonGroup---variant_flow","--variant_modal":"bds2110ButtonGroup---variant_modal","--variant_content":"bds2110ButtonGroup---variant_content"};
2759
3284
 
2760
3285
  // src/components/layout/ButtonGroup/ButtonGroup.tsx
2761
- var import_design_system_foundation48 = require("@boostdev/design-system-foundation");
2762
- var import_jsx_runtime48 = require("react/jsx-runtime");
3286
+ var import_design_system_foundation50 = require("@boostdev/design-system-foundation");
3287
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2763
3288
  function ButtonContainer({ children, className, variant, ...rest }) {
2764
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3289
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2765
3290
  "div",
2766
3291
  {
2767
3292
  ...rest,
2768
3293
  role: "group",
2769
- className: (0, import_design_system_foundation48.cn)(ButtonGroup_default.buttonGroup, className, variant && ButtonGroup_default[`--variant_${variant}`]),
2770
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: ButtonGroup_default.container, children })
3294
+ className: (0, import_design_system_foundation50.cn)(ButtonGroup_default.buttonGroup, className, variant && ButtonGroup_default[`--variant_${variant}`]),
3295
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: ButtonGroup_default.container, children })
2771
3296
  }
2772
3297
  );
2773
3298
  }
2774
3299
  var ButtonGroup = ButtonContainer;
2775
3300
 
2776
3301
  // src/components/layout/Card/Card.module.css
2777
- var Card_default = {"component":"bds271Card-component","card":"bds271Card-card","--default":"bds271Card---default","--elevated":"bds271Card---elevated","--outlined":"bds271Card---outlined","--clickable":"bds271Card---clickable","--padding-none":"bds271Card---padding-none","--padding-small":"bds271Card---padding-small","--padding-medium":"bds271Card---padding-medium","--padding-large":"bds271Card---padding-large","--padding-extra-large":"bds271Card---padding-extra-large","--text-start":"bds271Card---text-start","--text-center":"bds271Card---text-center","--text-end":"bds271Card---text-end"};
3302
+ var Card_default = {"component":"bds2110Card-component","card":"bds2110Card-card","--default":"bds2110Card---default","--elevated":"bds2110Card---elevated","--outlined":"bds2110Card---outlined","--clickable":"bds2110Card---clickable","--padding-none":"bds2110Card---padding-none","--padding-small":"bds2110Card---padding-small","--padding-medium":"bds2110Card---padding-medium","--padding-large":"bds2110Card---padding-large","--padding-extra-large":"bds2110Card---padding-extra-large","--text-start":"bds2110Card---text-start","--text-center":"bds2110Card---text-center","--text-end":"bds2110Card---text-end"};
2778
3303
 
2779
3304
  // src/components/layout/Card/Card.tsx
2780
- var import_design_system_foundation49 = require("@boostdev/design-system-foundation");
2781
- var import_jsx_runtime49 = require("react/jsx-runtime");
3305
+ var import_design_system_foundation51 = require("@boostdev/design-system-foundation");
3306
+ var import_jsx_runtime51 = require("react/jsx-runtime");
2782
3307
  function Card({
2783
3308
  children,
2784
3309
  className,
@@ -2789,7 +3314,7 @@ function Card({
2789
3314
  onClick,
2790
3315
  ...rest
2791
3316
  }) {
2792
- const classNames = (0, import_design_system_foundation49.cn)(
3317
+ const classNames = (0, import_design_system_foundation51.cn)(
2793
3318
  Card_default.card,
2794
3319
  Card_default[`--${variant}`],
2795
3320
  Card_default[`--padding-${padding}`],
@@ -2798,7 +3323,7 @@ function Card({
2798
3323
  className
2799
3324
  );
2800
3325
  const Component = as ?? (onClick ? "button" : "div");
2801
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3326
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2802
3327
  Component,
2803
3328
  {
2804
3329
  ...rest,
@@ -2811,16 +3336,19 @@ function Card({
2811
3336
  }
2812
3337
 
2813
3338
  // src/components/layout/Grid/Grid.tsx
2814
- var import_react27 = require("react");
3339
+ var import_react29 = require("react");
2815
3340
 
2816
3341
  // src/components/layout/Grid/Grid.module.css
2817
- var Grid_default = {"component":"bds271Grid-component","grid":"bds271Grid-grid","--main":"bds271Grid---main","--page":"bds271Grid---page","--funnel":"bds271Grid---funnel","--custom":"bds271Grid---custom","--centered":"bds271Grid---centered","item":"bds271Grid-item","w3":"bds271Grid-w3","org":"bds271Grid-org","ts":"bds271Grid-ts","--masonry":"bds271Grid---masonry"};
3342
+ var Grid_default = {"component":"bds2110Grid-component","grid":"bds2110Grid-grid","--main":"bds2110Grid---main","--page":"bds2110Grid---page","--funnel":"bds2110Grid---funnel","--custom":"bds2110Grid---custom","--centered":"bds2110Grid---centered","item":"bds2110Grid-item","w3":"bds2110Grid-w3","org":"bds2110Grid-org","ts":"bds2110Grid-ts","--masonry":"bds2110Grid---masonry"};
2818
3343
 
2819
3344
  // src/components/layout/Grid/Grid.tsx
2820
- var import_design_system_foundation50 = require("@boostdev/design-system-foundation");
3345
+ var import_design_system_foundation52 = require("@boostdev/design-system-foundation");
3346
+
3347
+ // src/components/layout/Grid/useIsomorphicLayoutEffect.ts
3348
+ var import_react28 = require("react");
3349
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? import_react28.useLayoutEffect : import_react28.useEffect;
2821
3350
 
2822
3351
  // src/components/layout/Grid/masonry.ts
2823
- var import_react26 = require("react");
2824
3352
  var NAMED_SPAN_VAR = {
2825
3353
  "three-quarters": "--bds-grid_columns-75",
2826
3354
  "two-thirds": "--bds-grid_columns-66",
@@ -2850,6 +3378,7 @@ function supportsNativeMasonry() {
2850
3378
  return CSS.supports("display", "grid-lanes") || CSS.supports("grid-template-rows", "masonry");
2851
3379
  }
2852
3380
  var ORIGINAL_COL_ATTR = "data-bds-masonry-original-column";
3381
+ var LAST_COL_ATTR = "data-bds-masonry-col";
2853
3382
  var LAST_SPAN_ATTR = "data-bds-masonry-span";
2854
3383
  var UNIT_ATTR = "data-bds-masonry-unit";
2855
3384
  function applyMasonryLayout(container, rawChildren, options = {}) {
@@ -2873,16 +3402,23 @@ function applyMasonryLayout(container, rawChildren, options = {}) {
2873
3402
  let col = 0;
2874
3403
  for (const child of children) {
2875
3404
  if (child.hasAttribute("data-column-span-auto")) {
2876
- if (!child.hasAttribute(ORIGINAL_COL_ATTR)) {
2877
- child.setAttribute(ORIGINAL_COL_ATTR, child.style.gridColumn);
3405
+ const currentInline = child.style.gridColumn;
3406
+ const lastWritten = child.getAttribute(LAST_COL_ATTR);
3407
+ if (!child.hasAttribute(ORIGINAL_COL_ATTR) || currentInline !== lastWritten) {
3408
+ child.setAttribute(ORIGINAL_COL_ATTR, currentInline);
2878
3409
  }
2879
3410
  const remaining = totalCols - col;
2880
3411
  const span = Math.max(1, Math.min(preferredCols, remaining));
2881
3412
  child.style.gridColumn = `span ${span}`;
3413
+ child.setAttribute(LAST_COL_ATTR, child.style.gridColumn);
2882
3414
  col = (col + span) % totalCols;
2883
3415
  } else {
2884
3416
  const consumed = Math.min(totalCols, readExplicitSpan(child, totalCols));
2885
- col = (col + consumed) % totalCols;
3417
+ if (consumed > totalCols - col) {
3418
+ col = consumed % totalCols;
3419
+ } else {
3420
+ col = (col + consumed) % totalCols;
3421
+ }
2886
3422
  }
2887
3423
  }
2888
3424
  }
@@ -2966,10 +3502,11 @@ function restoreOriginalColumn(el) {
2966
3502
  if (!el.hasAttribute(ORIGINAL_COL_ATTR)) return;
2967
3503
  el.style.gridColumn = el.getAttribute(ORIGINAL_COL_ATTR) ?? "";
2968
3504
  el.removeAttribute(ORIGINAL_COL_ATTR);
3505
+ el.removeAttribute(LAST_COL_ATTR);
2969
3506
  }
2970
3507
  function useMasonry(ref, enabled, options = {}) {
2971
3508
  const { preferredColumnSpan, rowUnitPx } = options;
2972
- (0, import_react26.useLayoutEffect)(() => {
3509
+ useIsomorphicLayoutEffect(() => {
2973
3510
  const container = ref.current;
2974
3511
  if (!container || !enabled) return;
2975
3512
  if (supportsNativeMasonry()) return;
@@ -3041,10 +3578,10 @@ function useMasonry(ref, enabled, options = {}) {
3041
3578
  }
3042
3579
 
3043
3580
  // src/components/layout/Grid/Grid.tsx
3044
- var import_jsx_runtime50 = require("react/jsx-runtime");
3581
+ var import_jsx_runtime52 = require("react/jsx-runtime");
3045
3582
  var _GridContext;
3046
3583
  function getGridContext() {
3047
- _GridContext ??= (0, import_react27.createContext)({ autoSpanMedia: false });
3584
+ _GridContext ??= (0, import_react29.createContext)({ autoSpanMedia: false });
3048
3585
  return _GridContext;
3049
3586
  }
3050
3587
  function Grid({
@@ -3061,12 +3598,12 @@ function Grid({
3061
3598
  style,
3062
3599
  ...rest
3063
3600
  }) {
3064
- const ref = (0, import_react27.useRef)(null);
3601
+ const ref = (0, import_react29.useRef)(null);
3065
3602
  useMasonry(ref, isMasonry, {
3066
3603
  preferredColumnSpan: masonryPreferredColumnSpan,
3067
3604
  rowUnitPx: masonryRowUnitPx
3068
3605
  });
3069
- const classNames = (0, import_design_system_foundation50.cn)(
3606
+ const classNames = (0, import_design_system_foundation52.cn)(
3070
3607
  Grid_default.grid,
3071
3608
  Grid_default[`--${variant}`],
3072
3609
  isCentered && Grid_default["--centered"],
@@ -3076,13 +3613,13 @@ function Grid({
3076
3613
  const composedStyle = variant === "custom" && columns !== void 0 ? { ...style, ["--grid_columns"]: columns } : style;
3077
3614
  const Component = as ?? "div";
3078
3615
  const GridContext = getGridContext();
3079
- const ctx = (0, import_react27.useMemo)(() => ({ autoSpanMedia }), [autoSpanMedia]);
3080
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Component, { ref, ...rest, className: classNames, style: composedStyle, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(GridContext.Provider, { value: ctx, children }) });
3616
+ const ctx = (0, import_react29.useMemo)(() => ({ autoSpanMedia }), [autoSpanMedia]);
3617
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Component, { ref, ...rest, className: classNames, style: composedStyle, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(GridContext.Provider, { value: ctx, children }) });
3081
3618
  }
3082
3619
 
3083
3620
  // src/components/layout/Grid/GridItem.tsx
3084
- var import_react28 = require("react");
3085
- var import_design_system_foundation51 = require("@boostdev/design-system-foundation");
3621
+ var import_react30 = require("react");
3622
+ var import_design_system_foundation53 = require("@boostdev/design-system-foundation");
3086
3623
 
3087
3624
  // src/components/layout/Grid/autoSpan.ts
3088
3625
  function aspectToColumnSpan(ratio) {
@@ -3114,7 +3651,7 @@ function mediaReadyEvent(media) {
3114
3651
  }
3115
3652
 
3116
3653
  // src/components/layout/Grid/GridItem.tsx
3117
- var import_jsx_runtime51 = require("react/jsx-runtime");
3654
+ var import_jsx_runtime53 = require("react/jsx-runtime");
3118
3655
  var GridItemSpan = {
3119
3656
  full: "full",
3120
3657
  threeQuarters: "three-quarters",
@@ -3147,11 +3684,11 @@ function GridItem({
3147
3684
  style,
3148
3685
  ...rest
3149
3686
  }) {
3150
- const { autoSpanMedia } = (0, import_react28.useContext)(getGridContext());
3687
+ const { autoSpanMedia } = (0, import_react30.useContext)(getGridContext());
3151
3688
  const effectiveSpan = columnSpan ?? (autoSpanMedia ? "auto" : "full");
3152
- const ref = (0, import_react28.useRef)(null);
3153
- const [autoSpan, setAutoSpan] = (0, import_react28.useState)("one-quarter");
3154
- (0, import_react28.useLayoutEffect)(() => {
3689
+ const ref = (0, import_react30.useRef)(null);
3690
+ const [autoSpan, setAutoSpan] = (0, import_react30.useState)("one-quarter");
3691
+ useIsomorphicLayoutEffect(() => {
3155
3692
  if (effectiveSpan !== "auto") return;
3156
3693
  const el = ref.current;
3157
3694
  if (!el) return;
@@ -3196,13 +3733,13 @@ function GridItem({
3196
3733
  };
3197
3734
  const Component = as ?? "div";
3198
3735
  const isColumnSpanAuto = columnSpan === void 0 && !hasExplicitRange;
3199
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3736
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3200
3737
  Component,
3201
3738
  {
3202
3739
  ref,
3203
3740
  ...rest,
3204
3741
  "data-column-span-auto": isColumnSpanAuto ? "" : void 0,
3205
- className: (0, import_design_system_foundation51.cn)(Grid_default.item, className),
3742
+ className: (0, import_design_system_foundation53.cn)(Grid_default.item, className),
3206
3743
  style: composedStyle,
3207
3744
  children
3208
3745
  }
@@ -3210,11 +3747,11 @@ function GridItem({
3210
3747
  }
3211
3748
 
3212
3749
  // src/components/layout/SectionHeader/SectionHeader.module.css
3213
- var SectionHeader_default = {"component":"bds271SectionHeader-component","sectionHeader":"bds271SectionHeader-sectionHeader","title":"bds271SectionHeader-title","subtitle":"bds271SectionHeader-subtitle","--start":"bds271SectionHeader---start","--center":"bds271SectionHeader---center","--end":"bds271SectionHeader---end","--medium":"bds271SectionHeader---medium","--xs":"bds271SectionHeader---xs","--small":"bds271SectionHeader---small","--large":"bds271SectionHeader---large"};
3750
+ var SectionHeader_default = {"component":"bds2110SectionHeader-component","sectionHeader":"bds2110SectionHeader-sectionHeader","title":"bds2110SectionHeader-title","subtitle":"bds2110SectionHeader-subtitle","--start":"bds2110SectionHeader---start","--center":"bds2110SectionHeader---center","--end":"bds2110SectionHeader---end","--medium":"bds2110SectionHeader---medium","--xs":"bds2110SectionHeader---xs","--small":"bds2110SectionHeader---small","--large":"bds2110SectionHeader---large"};
3214
3751
 
3215
3752
  // src/components/layout/SectionHeader/SectionHeader.tsx
3216
- var import_design_system_foundation52 = require("@boostdev/design-system-foundation");
3217
- var import_jsx_runtime52 = require("react/jsx-runtime");
3753
+ var import_design_system_foundation54 = require("@boostdev/design-system-foundation");
3754
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3218
3755
  function SectionHeader({
3219
3756
  title,
3220
3757
  subtitle,
@@ -3225,24 +3762,24 @@ function SectionHeader({
3225
3762
  ...rest
3226
3763
  }) {
3227
3764
  const Title = titleAs;
3228
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { ...rest, className: (0, import_design_system_foundation52.cn)(SectionHeader_default.sectionHeader, SectionHeader_default[`--${alignment}`], SectionHeader_default[`--${size}`], className), children: [
3229
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Title, { className: SectionHeader_default.title, children: title }),
3230
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: SectionHeader_default.subtitle, children: subtitle })
3765
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { ...rest, className: (0, import_design_system_foundation54.cn)(SectionHeader_default.sectionHeader, SectionHeader_default[`--${alignment}`], SectionHeader_default[`--${size}`], className), children: [
3766
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Title, { className: SectionHeader_default.title, children: title }),
3767
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: SectionHeader_default.subtitle, children: subtitle })
3231
3768
  ] });
3232
3769
  }
3233
3770
 
3234
3771
  // src/components/layout/IconWrapper/IconWrapper.module.css
3235
- var IconWrapper_default = {"component":"bds271IconWrapper-component","wrapper":"bds271IconWrapper-wrapper"};
3772
+ var IconWrapper_default = {"component":"bds2110IconWrapper-component","wrapper":"bds2110IconWrapper-wrapper"};
3236
3773
 
3237
3774
  // src/components/layout/IconWrapper/IconWrapper.tsx
3238
- var import_design_system_foundation53 = require("@boostdev/design-system-foundation");
3239
- var import_jsx_runtime53 = require("react/jsx-runtime");
3775
+ var import_design_system_foundation55 = require("@boostdev/design-system-foundation");
3776
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3240
3777
  function IconWrapper({ children, className, ...rest }) {
3241
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { ...rest, className: (0, import_design_system_foundation53.cn)(className, IconWrapper_default.wrapper), children });
3778
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { ...rest, className: (0, import_design_system_foundation55.cn)(className, IconWrapper_default.wrapper), children });
3242
3779
  }
3243
3780
 
3244
3781
  // src/index.ts
3245
- var import_design_system_foundation54 = require("@boostdev/design-system-foundation");
3782
+ var import_design_system_foundation56 = require("@boostdev/design-system-foundation");
3246
3783
  // Annotate the CommonJS export names for ESM import in node:
3247
3784
  0 && (module.exports = {
3248
3785
  Accordion,
@@ -3254,6 +3791,7 @@ var import_design_system_foundation54 = require("@boostdev/design-system-foundat
3254
3791
  ButtonContainer,
3255
3792
  ButtonGroup,
3256
3793
  Calendar,
3794
+ CalendarRange,
3257
3795
  Card,
3258
3796
  Carousel,
3259
3797
  Checkbox,