@boostdev/design-system-components 2.8.0 → 2.12.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 +75 -46
  2. package/README.md +41 -20
  3. package/dist/client.cjs +1317 -779
  4. package/dist/client.css +1037 -820
  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 +1037 -820
  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-OF6FFGOT.js → chunk-3AY2YKCM.js} +77 -21
  15. package/dist/web-components/chunk-3WAV6MDN.js +212 -0
  16. package/dist/web-components/chunk-4A2YYTYN.js +93 -0
  17. package/dist/web-components/{chunk-Q4T5BJT6.js → chunk-62NK3ZSC.js} +18 -3
  18. package/dist/web-components/chunk-66M6ETWD.js +77 -0
  19. package/dist/web-components/{chunk-NCPQ7AF3.js → chunk-6G22I2CK.js} +18 -3
  20. package/dist/web-components/{chunk-QDST57JC.js → chunk-7ZOJ7N4E.js} +14 -4
  21. package/dist/web-components/{chunk-QLT6MTZF.js → chunk-AIBOHNDU.js} +10 -0
  22. package/dist/web-components/{chunk-X3NQMBAQ.js → chunk-AP4RDUL2.js} +14 -3
  23. package/dist/web-components/{chunk-QWPACK5L.js → chunk-BPYKZVDK.js} +11 -1
  24. package/dist/web-components/chunk-CUKQ2L5B.js +245 -0
  25. package/dist/web-components/chunk-DIZDCL7Z.js +14 -0
  26. package/dist/web-components/{chunk-2QA62WCQ.js → chunk-EF7IVYTY.js} +10 -0
  27. package/dist/web-components/{chunk-L3XHOMN6.js → chunk-F3ZDNHZZ.js} +26 -1
  28. package/dist/web-components/chunk-FEDABOR5.js +248 -0
  29. package/dist/web-components/{chunk-KUI55GFB.js → chunk-FUQEFHRC.js} +51 -19
  30. package/dist/web-components/{chunk-6I2DBFQ7.js → chunk-HGFCJXOQ.js} +36 -5
  31. package/dist/web-components/{chunk-YLVTEY23.js → chunk-HRD3NOA3.js} +53 -21
  32. package/dist/web-components/chunk-IDSM74LM.js +189 -0
  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-UUKSDCYS.js → chunk-J3HVUIUH.js} +87 -15
  36. package/dist/web-components/{chunk-ARMKC4BQ.js → chunk-JH6LQKLK.js} +77 -5
  37. package/dist/web-components/chunk-JMCXAAFK.js +120 -0
  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-2FGATTGT.js → chunk-NTQ4TCUT.js} +76 -55
  46. package/dist/web-components/chunk-OY74D4X6.js +302 -0
  47. package/dist/web-components/{chunk-3S42DZ7W.js → chunk-P24JYC5V.js} +7 -0
  48. package/dist/web-components/{chunk-TQ7IQ4GZ.js → chunk-PLWCDDP6.js} +72 -30
  49. package/dist/web-components/{chunk-BKIHQYJR.js → chunk-PXPPKCLT.js} +17 -2
  50. package/dist/web-components/{chunk-PC3IOQAH.js → chunk-QKWXCBTH.js} +28 -8
  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-VANAKB6D.js +152 -0
  59. package/dist/web-components/{chunk-PXZWYO6Z.js → chunk-VED2DFJ6.js} +108 -29
  60. package/dist/web-components/chunk-W6H5ID2U.js +161 -0
  61. package/dist/web-components/{chunk-FSZRP43R.js → chunk-WFVKU4GX.js} +21 -10
  62. package/dist/web-components/{chunk-OQTRTMAB.js → chunk-WIBAN7KP.js} +10 -0
  63. package/dist/web-components/chunk-X7PS7GSN.js +424 -0
  64. package/dist/web-components/chunk-XI7KRAH7.js +54 -0
  65. package/dist/web-components/{chunk-ORC56MDY.js → chunk-XIZWAWMJ.js} +45 -6
  66. package/dist/web-components/{chunk-FXURM6D5.js → chunk-YFAXGRPR.js} +10 -0
  67. package/dist/web-components/{chunk-65JXQOBA.js → chunk-Z7XTADXX.js} +52 -8
  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 +24 -8
  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 +21 -1
  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 +35 -4
  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.module.css +1 -1
  186. package/src/components/interaction/DropdownMenu/DropdownMenu.spec.tsx +34 -0
  187. package/src/components/interaction/DropdownMenu/DropdownMenu.tsx +15 -5
  188. package/src/components/interaction/DropdownMenu/index.ts +1 -0
  189. package/src/components/interaction/Popover/Popover.mdx +6 -2
  190. package/src/components/interaction/Popover/Popover.module.css +27 -19
  191. package/src/components/interaction/Popover/Popover.spec.tsx +38 -0
  192. package/src/components/interaction/Popover/Popover.tsx +19 -5
  193. package/src/components/interaction/Popover/index.ts +1 -0
  194. package/src/components/interaction/Rating/Rating.mdx +1 -1
  195. package/src/components/interaction/Rating/Rating.module.css +2 -2
  196. package/src/components/interaction/Rating/Rating.tsx +1 -1
  197. package/src/components/interaction/Rating/index.ts +1 -0
  198. package/src/components/interaction/Toast/Toast.mdx +3 -0
  199. package/src/components/interaction/Toast/Toast.module.css +36 -6
  200. package/src/components/interaction/Toast/Toast.spec.tsx +69 -1
  201. package/src/components/interaction/Toast/Toast.tsx +15 -9
  202. package/src/components/interaction/form/Checkbox/Checkbox.mdx +3 -0
  203. package/src/components/interaction/form/Checkbox/Checkbox.module.css +13 -6
  204. package/src/components/interaction/form/Checkbox/Checkbox.spec.tsx +6 -0
  205. package/src/components/interaction/form/Checkbox/Checkbox.tsx +1 -1
  206. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.mdx +16 -1
  207. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.module.css +24 -8
  208. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.spec.tsx +32 -2
  209. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx +14 -2
  210. package/src/components/interaction/form/Combobox/Combobox.mdx +11 -4
  211. package/src/components/interaction/form/Combobox/Combobox.module.css +6 -6
  212. package/src/components/interaction/form/Combobox/Combobox.spec.tsx +47 -0
  213. package/src/components/interaction/form/Combobox/Combobox.tsx +10 -5
  214. package/src/components/interaction/form/FieldGroup/FieldGroup.mdx +9 -10
  215. package/src/components/interaction/form/FieldGroup/FieldGroup.module.css +57 -23
  216. package/src/components/interaction/form/FieldGroup/FieldGroup.spec.tsx +129 -7
  217. package/src/components/interaction/form/FieldGroup/FieldGroup.tsx +72 -12
  218. package/src/components/interaction/form/FileInput/FileInput.mdx +9 -1
  219. package/src/components/interaction/form/FileInput/FileInput.module.css +8 -8
  220. package/src/components/interaction/form/FileInput/FileInput.spec.tsx +89 -1
  221. package/src/components/interaction/form/FileInput/FileInput.tsx +6 -2
  222. package/src/components/interaction/form/FormInput/FormInput.mdx +9 -5
  223. package/src/components/interaction/form/FormInput/FormInput.module.css +17 -8
  224. package/src/components/interaction/form/FormInput/FormInput.spec.tsx +20 -0
  225. package/src/components/interaction/form/FormInput/FormInput.tsx +7 -2
  226. package/src/components/interaction/form/NumberInput/NumberInput.mdx +5 -1
  227. package/src/components/interaction/form/NumberInput/NumberInput.module.css +6 -6
  228. package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +51 -0
  229. package/src/components/interaction/form/NumberInput/NumberInput.tsx +36 -8
  230. package/src/components/interaction/form/Radio/Radio.mdx +8 -1
  231. package/src/components/interaction/form/Radio/Radio.module.css +20 -7
  232. package/src/components/interaction/form/Radio/Radio.spec.tsx +15 -0
  233. package/src/components/interaction/form/Radio/Radio.tsx +10 -4
  234. package/src/components/interaction/form/RadioGroup/RadioGroup.mdx +16 -1
  235. package/src/components/interaction/form/RadioGroup/RadioGroup.module.css +24 -8
  236. package/src/components/interaction/form/RadioGroup/RadioGroup.spec.tsx +32 -2
  237. package/src/components/interaction/form/RadioGroup/RadioGroup.tsx +14 -2
  238. package/src/components/interaction/form/SegmentedControl/SegmentedControl.mdx +9 -3
  239. package/src/components/interaction/form/SegmentedControl/SegmentedControl.module.css +25 -12
  240. package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +86 -5
  241. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +44 -4
  242. package/src/components/interaction/form/Select/Select.mdx +10 -4
  243. package/src/components/interaction/form/Select/Select.module.css +4 -4
  244. package/src/components/interaction/form/Select/Select.spec.tsx +34 -0
  245. package/src/components/interaction/form/Select/Select.tsx +21 -9
  246. package/src/components/interaction/form/Slider/Slider.mdx +4 -1
  247. package/src/components/interaction/form/Slider/Slider.module.css +32 -8
  248. package/src/components/interaction/form/Slider/Slider.spec.tsx +29 -0
  249. package/src/components/interaction/form/Slider/Slider.tsx +9 -7
  250. package/src/components/interaction/form/Switch/Switch.mdx +2 -2
  251. package/src/components/interaction/form/Switch/Switch.module.css +12 -13
  252. package/src/components/interaction/form/Switch/Switch.spec.tsx +20 -0
  253. package/src/components/interaction/form/Switch/Switch.tsx +2 -1
  254. package/src/components/interaction/form/Textarea/Textarea.mdx +5 -0
  255. package/src/components/interaction/form/Textarea/Textarea.module.css +5 -5
  256. package/src/components/interaction/form/Textarea/Textarea.spec.tsx +13 -0
  257. package/src/components/interaction/form/Textarea/Textarea.tsx +3 -1
  258. package/src/components/interaction/form/atoms/Message.module.css +1 -1
  259. package/src/components/interaction/form/atoms/Message.spec.tsx +29 -0
  260. package/src/components/interaction/form/atoms/Message.tsx +1 -1
  261. package/src/components/layout/ButtonGroup/ButtonGroup.mdx +11 -0
  262. package/src/components/layout/ButtonGroup/ButtonGroup.module.css +1 -5
  263. package/src/components/layout/ButtonGroup/ButtonGroup.stories.tsx +14 -0
  264. package/src/components/layout/Card/Card.mdx +6 -1
  265. package/src/components/layout/Card/Card.module.css +27 -6
  266. package/src/components/layout/Card/Card.spec.tsx +7 -0
  267. package/src/components/layout/Card/Card.tsx +4 -3
  268. package/src/components/layout/Grid/Grid.spec.tsx +44 -0
  269. package/src/components/layout/Grid/Grid.tsx +5 -5
  270. package/src/components/layout/Grid/GridItem.tsx +6 -6
  271. package/src/components/layout/Grid/masonry.ts +31 -5
  272. package/src/components/layout/Grid/useIsomorphicLayoutEffect.ts +11 -0
  273. package/src/components/layout/IconWrapper/IconWrapper.mdx +8 -2
  274. package/src/components/layout/IconWrapper/IconWrapper.module.css +9 -6
  275. package/src/components/layout/SectionHeader/SectionHeader.mdx +4 -1
  276. package/src/components/layout/SectionHeader/SectionHeader.module.css +10 -9
  277. package/src/components/ui/Accordion/Accordion.mdx +4 -1
  278. package/src/components/ui/Accordion/Accordion.module.css +2 -1
  279. package/src/components/ui/Alert/Alert.mdx +21 -4
  280. package/src/components/ui/Alert/Alert.module.css +9 -4
  281. package/src/components/ui/Alert/Alert.spec.tsx +20 -0
  282. package/src/components/ui/Avatar/Avatar.mdx +8 -3
  283. package/src/components/ui/Avatar/Avatar.module.css +13 -8
  284. package/src/components/ui/Badge/Badge.mdx +3 -1
  285. package/src/components/ui/Breadcrumb/Breadcrumb.mdx +3 -0
  286. package/src/components/ui/Breadcrumb/Breadcrumb.module.css +4 -0
  287. package/src/components/ui/Breadcrumb/Breadcrumb.spec.tsx +12 -0
  288. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +11 -3
  289. package/src/components/ui/Calendar/Calendar.mdx +6 -0
  290. package/src/components/ui/Calendar/Calendar.module.css +69 -20
  291. package/src/components/ui/Calendar/Calendar.spec.tsx +139 -24
  292. package/src/components/ui/Calendar/Calendar.stories.tsx +14 -0
  293. package/src/components/ui/Calendar/Calendar.tsx +143 -154
  294. package/src/components/ui/Calendar/CalendarRange.mdx +39 -0
  295. package/src/components/ui/Calendar/CalendarRange.spec.tsx +119 -0
  296. package/src/components/ui/Calendar/CalendarRange.stories.tsx +51 -0
  297. package/src/components/ui/Calendar/CalendarRange.tsx +213 -0
  298. package/src/components/ui/Calendar/MonthGrid.tsx +141 -0
  299. package/src/components/ui/Calendar/calendar-core.spec.ts +176 -0
  300. package/src/components/ui/Calendar/calendar-core.ts +164 -0
  301. package/src/components/ui/Calendar/index.ts +1 -0
  302. package/src/components/ui/Carousel/Carousel.mdx +8 -3
  303. package/src/components/ui/Carousel/Carousel.module.css +7 -5
  304. package/src/components/ui/Carousel/Carousel.spec.tsx +67 -0
  305. package/src/components/ui/Carousel/Carousel.tsx +19 -7
  306. package/src/components/ui/Collapsible/Collapsible.mdx +17 -6
  307. package/src/components/ui/Collapsible/Collapsible.module.css +7 -2
  308. package/src/components/ui/Collapsible/Collapsible.spec.tsx +40 -0
  309. package/src/components/ui/Collapsible/Collapsible.tsx +19 -2
  310. package/src/components/ui/DescriptionList/DescriptionList.mdx +2 -0
  311. package/src/components/ui/Link/Link.mdx +4 -2
  312. package/src/components/ui/Loading/Loading.mdx +6 -3
  313. package/src/components/ui/Loading/Loading.module.css +7 -7
  314. package/src/components/ui/Loading/Loading.spec.tsx +12 -0
  315. package/src/components/ui/Loading/Loading.tsx +8 -3
  316. package/src/components/ui/NotificationBanner/NotificationBanner.mdx +4 -0
  317. package/src/components/ui/NotificationBanner/NotificationBanner.module.css +5 -0
  318. package/src/components/ui/NotificationBanner/NotificationBanner.spec.tsx +20 -0
  319. package/src/components/ui/Pagination/Pagination.mdx +29 -7
  320. package/src/components/ui/Pagination/Pagination.module.css +15 -14
  321. package/src/components/ui/Progress/Progress.mdx +6 -2
  322. package/src/components/ui/Progress/Progress.module.css +1 -1
  323. package/src/components/ui/Progress/Progress.spec.tsx +17 -0
  324. package/src/components/ui/Progress/Progress.tsx +2 -2
  325. package/src/components/ui/ProgressCircle/ProgressCircle.mdx +8 -4
  326. package/src/components/ui/ProgressCircle/ProgressCircle.module.css +2 -2
  327. package/src/components/ui/ProgressCircle/ProgressCircle.spec.tsx +11 -1
  328. package/src/components/ui/ProgressCircle/ProgressCircle.tsx +1 -1
  329. package/src/components/ui/Separator/Separator.mdx +7 -0
  330. package/src/components/ui/Separator/Separator.module.css +1 -0
  331. package/src/components/ui/Skeleton/Skeleton.mdx +17 -0
  332. package/src/components/ui/Skeleton/Skeleton.module.css +12 -5
  333. package/src/components/ui/SkipLink/SkipLink.mdx +19 -0
  334. package/src/components/ui/SkipLink/SkipLink.module.css +8 -7
  335. package/src/components/ui/SkipLink/SkipLink.spec.tsx +28 -0
  336. package/src/components/ui/Table/Table.mdx +14 -0
  337. package/src/components/ui/Table/Table.module.css +13 -8
  338. package/src/components/ui/Table/Table.spec.tsx +56 -0
  339. package/src/components/ui/Table/Table.tsx +44 -6
  340. package/src/components/ui/Tabs/Tabs.mdx +16 -0
  341. package/src/components/ui/Tabs/Tabs.module.css +3 -3
  342. package/src/components/ui/Tabs/Tabs.spec.tsx +20 -0
  343. package/src/components/ui/Tabs/Tabs.tsx +5 -1
  344. package/src/components/ui/Tooltip/Tooltip.mdx +9 -0
  345. package/src/components/ui/Tooltip/Tooltip.module.css +32 -12
  346. package/src/components/ui/Tooltip/Tooltip.spec.tsx +56 -0
  347. package/src/components/ui/Tooltip/Tooltip.tsx +26 -7
  348. package/src/components/ui/Typography/Typography.mdx +7 -0
  349. package/src/components/ui/Typography/Typography.module.css +5 -5
  350. package/src/index.ts +7 -3
  351. package/src/stories/DesignSystem/Borders.mdx +14 -9
  352. package/src/stories/DesignSystem/Colors.mdx +43 -41
  353. package/src/stories/DesignSystem/Overview.mdx +4 -3
  354. package/src/stories/Introduction.mdx +5 -5
  355. package/src/web-components/globals.ts +7 -0
  356. package/src/web-components/index.ts +2 -0
  357. package/src/web-components/interaction/BdsAccordion.mdx +10 -1
  358. package/src/web-components/interaction/BdsButton.mdx +15 -4
  359. package/src/web-components/interaction/BdsButton.stories.tsx +1 -1
  360. package/src/web-components/interaction/BdsCollapsible.mdx +3 -3
  361. package/src/web-components/interaction/BdsDialog.mdx +12 -7
  362. package/src/web-components/interaction/BdsDialog.stories.tsx +2 -2
  363. package/src/web-components/interaction/BdsDrawer.mdx +9 -6
  364. package/src/web-components/interaction/BdsDropdownMenu.mdx +20 -1
  365. package/src/web-components/interaction/BdsPopover.mdx +7 -3
  366. package/src/web-components/interaction/BdsSkipLink.mdx +14 -1
  367. package/src/web-components/interaction/BdsTabs.mdx +18 -1
  368. package/src/web-components/interaction/BdsToastProvider.mdx +21 -3
  369. package/src/web-components/interaction/BdsTooltip.mdx +4 -4
  370. package/src/web-components/interaction/bds-accordion-item.ts +10 -0
  371. package/src/web-components/interaction/bds-accordion.spec.ts +41 -0
  372. package/src/web-components/interaction/bds-accordion.ts +28 -2
  373. package/src/web-components/interaction/bds-button.spec.ts +81 -0
  374. package/src/web-components/interaction/bds-button.ts +55 -8
  375. package/src/web-components/interaction/bds-collapsible.spec.ts +93 -2
  376. package/src/web-components/interaction/bds-collapsible.ts +49 -7
  377. package/src/web-components/interaction/bds-dialog.spec.ts +49 -0
  378. package/src/web-components/interaction/bds-dialog.ts +69 -12
  379. package/src/web-components/interaction/bds-drawer.spec.ts +93 -4
  380. package/src/web-components/interaction/bds-drawer.ts +55 -22
  381. package/src/web-components/interaction/bds-dropdown-menu-item.ts +12 -1
  382. package/src/web-components/interaction/bds-dropdown-menu.spec.ts +63 -0
  383. package/src/web-components/interaction/bds-dropdown-menu.ts +45 -7
  384. package/src/web-components/interaction/bds-popover.spec.ts +80 -6
  385. package/src/web-components/interaction/bds-popover.ts +84 -33
  386. package/src/web-components/interaction/bds-skip-link.spec.ts +18 -0
  387. package/src/web-components/interaction/bds-skip-link.ts +29 -8
  388. package/src/web-components/interaction/bds-tab-panel.ts +10 -0
  389. package/src/web-components/interaction/bds-tab.spec.ts +25 -0
  390. package/src/web-components/interaction/bds-tab.ts +20 -5
  391. package/src/web-components/interaction/bds-tabs.spec.ts +92 -5
  392. package/src/web-components/interaction/bds-tabs.ts +42 -1
  393. package/src/web-components/interaction/bds-toast-provider.spec.ts +43 -0
  394. package/src/web-components/interaction/bds-toast-provider.ts +50 -21
  395. package/src/web-components/interaction/bds-tooltip.spec.ts +71 -0
  396. package/src/web-components/interaction/bds-tooltip.ts +100 -5
  397. package/src/web-components/interaction/form/BdsCheckbox.mdx +20 -1
  398. package/src/web-components/interaction/form/BdsCheckbox.stories.tsx +8 -0
  399. package/src/web-components/interaction/form/BdsCheckboxGroup.mdx +4 -3
  400. package/src/web-components/interaction/form/BdsCombobox.mdx +39 -2
  401. package/src/web-components/interaction/form/BdsCombobox.stories.tsx +31 -0
  402. package/src/web-components/interaction/form/BdsFieldGroup.mdx +8 -3
  403. package/src/web-components/interaction/form/BdsFieldGroup.stories.tsx +1 -1
  404. package/src/web-components/interaction/form/BdsFileInput.mdx +26 -5
  405. package/src/web-components/interaction/form/BdsFormInput.mdx +16 -1
  406. package/src/web-components/interaction/form/BdsNumberInput.mdx +34 -2
  407. package/src/web-components/interaction/form/BdsNumberInput.stories.tsx +27 -3
  408. package/src/web-components/interaction/form/BdsRadio.mdx +39 -12
  409. package/src/web-components/interaction/form/BdsRadio.stories.tsx +26 -0
  410. package/src/web-components/interaction/form/BdsRadioGroup.mdx +9 -4
  411. package/src/web-components/interaction/form/BdsSegmentedControl.mdx +37 -11
  412. package/src/web-components/interaction/form/BdsSelect.mdx +22 -4
  413. package/src/web-components/interaction/form/BdsSelect.stories.tsx +33 -0
  414. package/src/web-components/interaction/form/BdsSlider.mdx +36 -19
  415. package/src/web-components/interaction/form/BdsSlider.stories.tsx +24 -0
  416. package/src/web-components/interaction/form/BdsSwitch.mdx +38 -11
  417. package/src/web-components/interaction/form/BdsSwitch.stories.tsx +16 -0
  418. package/src/web-components/interaction/form/BdsTextarea.mdx +42 -16
  419. package/src/web-components/interaction/form/BdsTextarea.stories.tsx +21 -0
  420. package/src/web-components/interaction/form/bds-checkbox-group.spec.ts +99 -0
  421. package/src/web-components/interaction/form/bds-checkbox-group.ts +95 -9
  422. package/src/web-components/interaction/form/bds-checkbox.spec.ts +55 -0
  423. package/src/web-components/interaction/form/bds-checkbox.ts +30 -5
  424. package/src/web-components/interaction/form/bds-combobox.spec.ts +79 -0
  425. package/src/web-components/interaction/form/bds-combobox.ts +101 -16
  426. package/src/web-components/interaction/form/bds-field-group.spec.ts +158 -0
  427. package/src/web-components/interaction/form/bds-field-group.ts +167 -23
  428. package/src/web-components/interaction/form/bds-file-input.spec.ts +73 -5
  429. package/src/web-components/interaction/form/bds-file-input.ts +71 -34
  430. package/src/web-components/interaction/form/bds-form-input.spec.ts +22 -0
  431. package/src/web-components/interaction/form/bds-form-input.ts +27 -16
  432. package/src/web-components/interaction/form/bds-number-input.spec.ts +49 -0
  433. package/src/web-components/interaction/form/bds-number-input.ts +118 -29
  434. package/src/web-components/interaction/form/bds-radio-group.spec.ts +57 -0
  435. package/src/web-components/interaction/form/bds-radio-group.ts +60 -12
  436. package/src/web-components/interaction/form/bds-radio.spec.ts +123 -0
  437. package/src/web-components/interaction/form/bds-radio.ts +135 -22
  438. package/src/web-components/interaction/form/bds-segmented-control.spec.ts +55 -0
  439. package/src/web-components/interaction/form/bds-segmented-control.ts +81 -59
  440. package/src/web-components/interaction/form/bds-select.spec.ts +57 -0
  441. package/src/web-components/interaction/form/bds-select.ts +95 -7
  442. package/src/web-components/interaction/form/bds-slider.spec.ts +83 -0
  443. package/src/web-components/interaction/form/bds-slider.ts +154 -26
  444. package/src/web-components/interaction/form/bds-switch.spec.ts +68 -0
  445. package/src/web-components/interaction/form/bds-switch.ts +87 -20
  446. package/src/web-components/interaction/form/bds-textarea.spec.ts +71 -0
  447. package/src/web-components/interaction/form/bds-textarea.ts +108 -7
  448. package/src/web-components/layout/BdsGrid.mdx +6 -2
  449. package/src/web-components/layout/BdsGrid.stories.tsx +4 -0
  450. package/src/web-components/layout/bds-grid-item.spec.ts +21 -0
  451. package/src/web-components/layout/bds-grid-item.ts +17 -3
  452. package/src/web-components/layout/bds-grid.spec.ts +98 -0
  453. package/src/web-components/layout/bds-grid.ts +139 -19
  454. package/src/web-components/ui/BdsAlert.mdx +6 -5
  455. package/src/web-components/ui/BdsAlert.stories.tsx +6 -6
  456. package/src/web-components/ui/BdsAvatar.mdx +4 -2
  457. package/src/web-components/ui/BdsBreadcrumb.mdx +3 -2
  458. package/src/web-components/ui/BdsButtonContainer.mdx +64 -0
  459. package/src/web-components/ui/BdsButtonContainer.stories.tsx +84 -0
  460. package/src/web-components/ui/BdsCalendar.mdx +29 -4
  461. package/src/web-components/ui/BdsCalendar.stories.tsx +16 -18
  462. package/src/web-components/ui/BdsCalendarRange.mdx +71 -0
  463. package/src/web-components/ui/BdsCalendarRange.stories.tsx +31 -0
  464. package/src/web-components/ui/BdsCard.mdx +7 -3
  465. package/src/web-components/ui/BdsCard.stories.tsx +17 -1
  466. package/src/web-components/ui/BdsCarousel.mdx +40 -12
  467. package/src/web-components/ui/BdsDescriptionList.mdx +6 -1
  468. package/src/web-components/ui/BdsIconWrapper.mdx +3 -2
  469. package/src/web-components/ui/BdsLink.mdx +14 -2
  470. package/src/web-components/ui/BdsNotificationBanner.mdx +18 -0
  471. package/src/web-components/ui/BdsPagination.mdx +40 -1
  472. package/src/web-components/ui/BdsProgress.mdx +8 -2
  473. package/src/web-components/ui/BdsProgressCircle.mdx +5 -2
  474. package/src/web-components/ui/BdsRating.mdx +7 -0
  475. package/src/web-components/ui/BdsSectionHeader.mdx +22 -3
  476. package/src/web-components/ui/BdsSectionHeader.stories.tsx +15 -13
  477. package/src/web-components/ui/BdsTable.mdx +23 -2
  478. package/src/web-components/ui/BdsTable.stories.tsx +8 -2
  479. package/src/web-components/ui/BdsTypography.mdx +17 -1
  480. package/src/web-components/ui/bds-alert.spec.ts +17 -2
  481. package/src/web-components/ui/bds-alert.ts +31 -5
  482. package/src/web-components/ui/bds-avatar.spec.ts +29 -0
  483. package/src/web-components/ui/bds-avatar.ts +29 -11
  484. package/src/web-components/ui/bds-badge.spec.ts +5 -0
  485. package/src/web-components/ui/bds-badge.ts +11 -1
  486. package/src/web-components/ui/bds-breadcrumb.spec.ts +30 -0
  487. package/src/web-components/ui/bds-breadcrumb.ts +26 -4
  488. package/src/web-components/ui/bds-button-container.spec.ts +39 -0
  489. package/src/web-components/ui/bds-button-container.ts +123 -0
  490. package/src/web-components/ui/bds-button-group.spec.ts +14 -20
  491. package/src/web-components/ui/bds-button-group.ts +13 -64
  492. package/src/web-components/ui/bds-calendar-range.spec.ts +123 -0
  493. package/src/web-components/ui/bds-calendar-range.ts +307 -0
  494. package/src/web-components/ui/bds-calendar.spec.ts +176 -0
  495. package/src/web-components/ui/bds-calendar.ts +186 -344
  496. package/src/web-components/ui/bds-card.spec.ts +32 -0
  497. package/src/web-components/ui/bds-card.ts +35 -10
  498. package/src/web-components/ui/bds-carousel.spec.ts +147 -0
  499. package/src/web-components/ui/bds-carousel.ts +109 -32
  500. package/src/web-components/ui/bds-description-list.spec.ts +15 -0
  501. package/src/web-components/ui/bds-description-list.ts +37 -3
  502. package/src/web-components/ui/bds-icon-wrapper.spec.ts +12 -0
  503. package/src/web-components/ui/bds-icon-wrapper.ts +15 -14
  504. package/src/web-components/ui/bds-link.spec.ts +17 -0
  505. package/src/web-components/ui/bds-link.ts +26 -11
  506. package/src/web-components/ui/bds-loading.ts +10 -0
  507. package/src/web-components/ui/bds-notification-banner.spec.ts +13 -0
  508. package/src/web-components/ui/bds-notification-banner.ts +18 -1
  509. package/src/web-components/ui/bds-pagination.spec.ts +44 -0
  510. package/src/web-components/ui/bds-pagination.ts +39 -19
  511. package/src/web-components/ui/bds-progress-circle.spec.ts +21 -0
  512. package/src/web-components/ui/bds-progress-circle.ts +17 -5
  513. package/src/web-components/ui/bds-progress.spec.ts +21 -0
  514. package/src/web-components/ui/bds-progress.ts +17 -4
  515. package/src/web-components/ui/bds-rating.spec.ts +6 -0
  516. package/src/web-components/ui/bds-rating.ts +12 -2
  517. package/src/web-components/ui/bds-section-header.spec.ts +39 -8
  518. package/src/web-components/ui/bds-section-header.ts +47 -13
  519. package/src/web-components/ui/bds-separator.ts +10 -0
  520. package/src/web-components/ui/bds-skeleton.ts +10 -0
  521. package/src/web-components/ui/bds-table.spec.ts +63 -0
  522. package/src/web-components/ui/bds-table.ts +88 -28
  523. package/src/web-components/ui/bds-typography.spec.ts +47 -0
  524. package/src/web-components/ui/bds-typography.ts +28 -10
  525. package/src/web-components/ui/calendar-styles.ts +94 -0
  526. package/dist/web-components/chunk-7YURXHTS.js +0 -147
  527. package/dist/web-components/chunk-A3RLT3AS.js +0 -49
  528. package/dist/web-components/chunk-AGKJTMJI.js +0 -56
  529. package/dist/web-components/chunk-BQLZ7I4G.js +0 -56
  530. package/dist/web-components/chunk-DZOEPVFT.js +0 -107
  531. package/dist/web-components/chunk-JYYRJS2D.js +0 -118
  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
@@ -30,19 +30,30 @@ Use `<bds-radio>` for single-choice selection from a set of options. Always grou
30
30
  ### Disabled
31
31
  <Canvas of={Stories.Disabled} />
32
32
 
33
+ ### With description
34
+ <Canvas of={Stories.WithDescription} />
35
+
36
+ ### With error
37
+ <Canvas of={Stories.WithError} />
38
+
39
+ ### Group (mutually exclusive selection)
40
+ <Canvas of={Stories.Group} />
41
+
33
42
  ## Props
34
43
 
35
44
  <ArgTypes of={Stories} />
36
45
 
37
46
  ## Attributes
38
47
 
39
- | Attribute | Type | Default | Description |
40
- |------------|---------|---------|--------------------------------------------------|
41
- | `name` | string | `""` | Form field name (groups radio buttons) |
42
- | `value` | string | `""` | Value submitted when this option is selected |
43
- | `checked` | boolean | `false` | Whether this option is selected |
44
- | `required` | boolean | `false` | Marks the field as required |
45
- | `disabled` | boolean | `false` | Disables this radio option |
48
+ | Attribute | Type | Default | Description |
49
+ |---------------|---------|---------|------------------------------------------------------------------|
50
+ | `name` | string | `""` | Form field name — radios sharing a `name` form a mutually exclusive group |
51
+ | `value` | string | `""` | Value submitted when this option is selected |
52
+ | `checked` | boolean | `false` | Whether this option is selected |
53
+ | `required` | boolean | `false` | Marks the field as required |
54
+ | `disabled` | boolean | `false` | Disables this radio option |
55
+ | `error` | boolean | `false` | Error visual state; sets `aria-invalid="true"` on the input |
56
+ | `description` | string | — | Supporting text rendered below the label, wired via `aria-describedby` |
46
57
 
47
58
  ## Slots
48
59
 
@@ -52,9 +63,23 @@ Use `<bds-radio>` for single-choice selection from a set of options. Always grou
52
63
 
53
64
  ## Events
54
65
 
55
- | Event | Detail | Description |
56
- |----------|--------|------------------------------------------------|
57
- | `change` | — | Native change event forwarded from the inner `<input>` |
66
+ | Event | Detail | Description |
67
+ |--------------|--------------------------------------|---------------------------------------------------------------------|
68
+ | `bds-change` | `{ value: string, checked: true }` | Fired when this radio becomes checked via user interaction (click or arrow-key navigation). Composed — crosses the shadow boundary, unlike the native `change` event. |
69
+
70
+ ## Overridable CSS custom properties
71
+
72
+ | Token | Default | Description |
73
+ |------------------------------|-----------------------------------|-------------------------------------------------|
74
+ | `--radio_color` | `--bds-color_on-bg` (via `--radio_border-color`, deprecated) | Border/text colour driving the `currentcolor` frame |
75
+ | `--radio_border` | `none` | Border shorthand around the frame |
76
+ | `--radio_radius` | `--bds-border_radius--circle` | Corner radius |
77
+ | `--radio_shadow` | `--bdc-outline_shadow` | Extra box-shadow layered with the inset border |
78
+ | `--radio_color_bg` | `--bds-color_bg` | Background colour |
79
+ | `--radio_color-active` | `--bdc-color_active` | Colour of the inner dot / border when checked |
80
+ | `--radio_description-color` | `--bds-color_on-bg--subtle` | Colour of the `description` text |
81
+
82
+ > `--radio_border-color` is a **deprecated alias** for `--radio_color` — it still works but new code should use `--radio_color`.
58
83
 
59
84
  ## Usage in plain HTML
60
85
 
@@ -67,6 +92,8 @@ Use `<bds-radio>` for single-choice selection from a set of options. Always grou
67
92
  ## Accessibility
68
93
 
69
94
  - The inner `<input type="radio">` is associated with a `<label>` via matching `id`/`for` attributes
70
- - Radios with the same `name` form a mutually exclusive group for keyboard navigation
95
+ - Radios sharing a `name` form a real mutually exclusive group: checking one unchecks the others (searched within the same document/shadow root), and `ArrowUp`/`ArrowDown`/`ArrowLeft`/`ArrowRight` move selection between them
96
+ - Roving `tabindex`: only the checked radio (or the first radio if none is checked) is a tab stop within its group, matching native `<input type="radio">` keyboard semantics
97
+ - `error` sets `aria-invalid="true"` on the inner input; `description` is wired via `aria-describedby`
71
98
  - Use `<bds-radio-group>` to wrap related radios in a `<fieldset>`/`<legend>` for proper screen reader announcements
72
- - Participates in HTML forms via the Form-Associated Custom Elements API
99
+ - Participates in HTML forms via the Form-Associated Custom Elements API; `formResetCallback` restores the radio's initial `checked` state on form reset
@@ -8,6 +8,8 @@ function BdsRadio({
8
8
  checked,
9
9
  required,
10
10
  disabled,
11
+ error,
12
+ description,
11
13
  children,
12
14
  }: {
13
15
  name?: string;
@@ -15,6 +17,8 @@ function BdsRadio({
15
17
  checked?: boolean;
16
18
  required?: boolean;
17
19
  disabled?: boolean;
20
+ error?: boolean;
21
+ description?: string;
18
22
  children?: React.ReactNode;
19
23
  }) {
20
24
  return React.createElement(
@@ -25,6 +29,8 @@ function BdsRadio({
25
29
  checked: checked || undefined,
26
30
  required: required || undefined,
27
31
  disabled: disabled || undefined,
32
+ error: error || undefined,
33
+ description,
28
34
  },
29
35
  children,
30
36
  );
@@ -39,6 +45,8 @@ const meta = {
39
45
  checked: { control: 'boolean' },
40
46
  required: { control: 'boolean' },
41
47
  disabled: { control: 'boolean' },
48
+ error: { control: 'boolean' },
49
+ description: { control: 'text' },
42
50
  },
43
51
  } satisfies Meta<typeof BdsRadio>;
44
52
 
@@ -56,3 +64,21 @@ export const Checked: Story = {
56
64
  export const Disabled: Story = {
57
65
  args: { name: 'size', value: 'm', disabled: true, children: 'Medium (disabled)' },
58
66
  };
67
+
68
+ export const WithDescription: Story = {
69
+ args: { name: 'size', value: 'm', description: 'Fits most people', children: 'Medium' },
70
+ };
71
+
72
+ export const WithError: Story = {
73
+ args: { name: 'size', value: 'm', error: true, children: 'Medium' },
74
+ };
75
+
76
+ export const Group: Story = {
77
+ render: () => (
78
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>
79
+ {React.createElement('bds-radio', { name: 'group-size', value: 's' }, 'Small')}
80
+ {React.createElement('bds-radio', { name: 'group-size', value: 'm', checked: true }, 'Medium')}
81
+ {React.createElement('bds-radio', { name: 'group-size', value: 'l' }, 'Large')}
82
+ </div>
83
+ ),
84
+ };
@@ -45,8 +45,8 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
45
45
  | `name` | string | `""` | Shared name propagated to all slotted `<bds-radio>` elements |
46
46
  | `error` | string | — | Error message shown below items; takes priority over `hint` |
47
47
  | `hint` | string | — | Helper text shown below items |
48
- | `required` | boolean | `false` | Shows a required indicator on the legend |
49
- | `disabled` | boolean | `false` | Disables the entire fieldset |
48
+ | `required` | boolean | `false` | Shows a required indicator on the legend and sets `aria-required` on the fieldset |
49
+ | `disabled` | boolean | `false` | Disables the fieldset **and** propagates `disabled` to every slotted `<bds-radio>` |
50
50
 
51
51
  ## Slots
52
52
 
@@ -54,6 +54,10 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
54
54
  |-------------|---------------------------|
55
55
  | `(default)` | `<bds-radio>` elements |
56
56
 
57
+ ## Overridable CSS custom properties
58
+
59
+ The legend uses `var(--bds-font_weight--medium)` (matching the React `RadioGroup`). `bds-radio-group` has no component-local override tokens of its own — style slotted `<bds-radio>` elements directly via their own tokens.
60
+
57
61
  ## Usage in plain HTML
58
62
 
59
63
  ```html
@@ -68,6 +72,7 @@ Use `<bds-radio-group>` whenever you have a set of mutually exclusive options. T
68
72
 
69
73
  - Renders a `<fieldset>` with a `<legend>`, which is announced as a group by screen readers
70
74
  - The `name` attribute is automatically propagated to all slotted `<bds-radio>` elements
71
- - `required` adds a visual asterisk to the legend
72
- - `disabled` on the group disables all contained radios via the native `<fieldset disabled>` behaviour
75
+ - `required` adds a visual asterisk to the legend and sets `aria-required="true"` on the fieldset
76
+ - `disabled` on the group disables the native `<fieldset>` **and** is explicitly propagated (attribute set/removed) to every slotted `<bds-radio>` — a shadow-DOM `<fieldset disabled>` alone has no effect on slotted light-DOM content, so this propagation is required for the group's `disabled` state to actually disable its radios. A `<bds-radio>` that was already individually marked `disabled` in markup stays disabled if the group is later re-enabled.
77
+ - `aria-describedby` on the fieldset references the error/hint message id so assistive technology announces it alongside the group
73
78
  - Error messages use `role="alert"` so they are announced immediately
@@ -52,9 +52,10 @@ Use `<bds-segmented-control>` for mutually exclusive view or mode toggles where
52
52
 
53
53
  ## Events
54
54
 
55
- | Event | Detail | Description |
56
- |----------|--------|----------------------------------------------------------|
57
- | `change` | — | Fired when a new segment is selected (radio mode only) |
55
+ | Event | Detail | Description |
56
+ |--------------|-----------------|-----------------------------------------------------------------------|
57
+ | `bds-change` | `{ value }` | Fired when a new segment is selected (radio mode only) |
58
+ | `change` | — | **Deprecated** alias for `bds-change`, kept for backward compatibility |
58
59
 
59
60
  ## Usage in plain HTML
60
61
 
@@ -76,19 +77,44 @@ Use `<bds-segmented-control>` for mutually exclusive view or mode toggles where
76
77
 
77
78
  ## CSS Custom Properties
78
79
 
80
+ Token names match the React `SegmentedControl` component (`--control_*`) so themes
81
+ written against React apply here unchanged. The previous web-component-only
82
+ `--segmented_*` names still work as deprecated aliases.
83
+
79
84
  | Property | Default | Description |
80
85
  |----------|---------|-------------|
81
- | `--segmented_color_bg` | `var(--bds-color_bg--subtle)` | Track background colour (both variants) |
82
- | `--segmented_item-bg` | `transparent` | Inactive item background (outline variant) |
83
- | `--segmented_item-bg--active` | `var(--bds-color_bg)` | Active item background (outline variant) |
84
- | `--segmented_thumb-color` | `var(--bds-color_interactive)` | Filled thumb colour (filled variant) |
85
- | `--segmented_color` | `var(--bds-color_on-bg)` | Item text colour |
86
- | `--segmented_color--active` | `var(--bds-color_on-interactive)` (filled) / `var(--bds-color_interactive)` (outline) | Active item text colour |
86
+ | `--control_track-pad` | `var(--bds-space_xxs)` | Padding between the track edge and the items/thumb |
87
+ | `--control_track-bg` | `var(--bds-color_bg--subtle)` | Track background colour (both variants) |
88
+ | `--control_radius` | `var(--bds-border_radius--full)` | Track (outer) border radius — pill by default |
89
+ | `--control_thumb-radius` | `var(--bds-border_radius--full)` | Thumb, indicator, and item border radius |
90
+ | `--control_thumb-bg` | `var(--bds-color_interactive)` | Filled thumb colour (filled variant) |
91
+ | `--control_thumb-shadow` | `var(--bds-shadow_s)` | Filled thumb box-shadow (filled variant) |
92
+ | `--control_indicator-width` | `2px` | Inset border width of the sliding indicator (outline variant) |
93
+ | `--control_indicator-color` | `var(--bds-color_interactive)` | Inset border colour of the sliding indicator (outline variant) |
94
+ | `--control_item-bg` | `transparent` | Inactive item background (outline variant) |
95
+ | `--control_item-bg--active` | `var(--bds-color_bg)` | Active item background (outline variant) |
96
+ | `--control_label-color` | `var(--bds-color_on-bg)` | Item text colour |
97
+ | `--control_label-color--active` | `var(--bds-color_on-interactive)` (filled) / `var(--bds-color_interactive)` (outline) | Active item text colour |
98
+ | `--control_label-color--hover` | `var(--bds-color_on-bg)` | Inactive, non-disabled item text colour on hover (fine pointers only) |
99
+
100
+ <details>
101
+ <summary>Deprecated aliases</summary>
102
+
103
+ | Old property | Maps to |
104
+ |--------------|---------|
105
+ | `--segmented_color_bg` | `--control_track-bg` |
106
+ | `--segmented_item-bg` | `--control_item-bg` |
107
+ | `--segmented_item-bg--active` | `--control_item-bg--active` |
108
+ | `--segmented_thumb-color` | `--control_thumb-bg` |
109
+ | `--segmented_color` | `--control_label-color` |
110
+ | `--segmented_color--active` | `--control_label-color--active` |
111
+
112
+ </details>
87
113
 
88
114
  ## Accessibility
89
115
 
90
- - In radio mode, each option renders as a visually hidden `<input type="radio">` inside a `<label>`, so keyboard users can navigate with arrow keys
91
- - In link mode, options render as `<a>` elements with `aria-current="page"` on the active item
116
+ - In radio mode, each option renders as a visually hidden `<input type="radio">` inside a `<label>`, so keyboard users can navigate with arrow keys; the visible `<label>` shows a focus ring when its radio has keyboard (`:focus-visible`) focus
117
+ - In link mode, options render as `<a>` elements with `aria-current="page"` on the active item and get the focus ring directly
92
118
  - Disabled options have `aria-disabled="true"` and remove the `href` from link mode items
93
119
  - `disabled` on the host element disables all options
94
120
  - The sliding thumb and indicator use `aria-hidden="true"` so they are not announced by screen readers
@@ -27,6 +27,15 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
27
27
  ### With placeholder
28
28
  <Canvas of={Stories.WithPlaceholder} />
29
29
 
30
+ ### With label
31
+ <Canvas of={Stories.WithLabel} />
32
+
33
+ ### With hint
34
+ <Canvas of={Stories.WithHint} />
35
+
36
+ ### With error
37
+ <Canvas of={Stories.WithError} />
38
+
30
39
  ### Required
31
40
  <Canvas of={Stories.Required} />
32
41
 
@@ -48,20 +57,26 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
48
57
  | `value` | string | `""` | Currently selected value |
49
58
  | `options` | string | `"[]"` | JSON array of `{ value, label, disabled? }` option objects |
50
59
  | `placeholder` | string | `""` | Placeholder option label (disabled, empty value) |
60
+ | `label` | string | `""` | Visible label text (rendered as a shadow `<label for>`) |
61
+ | `hint` | string | — | Helper text shown below the select |
62
+ | `error` | string | — | Error message; when set the select enters error state |
51
63
  | `required` | boolean | `false` | Marks the field as required |
52
64
  | `disabled` | boolean | `false` | Disables the select |
53
65
 
66
+ When `label` is omitted, set `aria-label` on the host element (`<bds-select aria-label="Country">`) and it is forwarded to the inner `<select>` so the control still has an accessible name.
67
+
54
68
  ## Events
55
69
 
56
- | Event | Detail | Description |
57
- |----------|--------|-------------------------------------------------------|
58
- | `change` | — | Native change event forwarded from the inner `<select>` |
70
+ | Event | Detail | Description |
71
+ |--------------|----------------------|-----------------------------------------|
72
+ | `bds-change` | `{ value: string }` | Fired when the selected value changes |
59
73
 
60
74
  ## Usage in plain HTML
61
75
 
62
76
  ```html
63
77
  <bds-select
64
78
  name="country"
79
+ label="Country"
65
80
  placeholder="Choose a country…"
66
81
  options='[{"value":"nl","label":"Netherlands"},{"value":"be","label":"Belgium"}]'
67
82
  ></bds-select>
@@ -70,7 +85,10 @@ Use `<bds-select>` for pick-from-list dropdowns where users cannot type to searc
70
85
  ## Accessibility
71
86
 
72
87
  - Wraps a native `<select>` which has full browser and assistive technology support
88
+ - `label` renders a shadow `<label for>` associated with the inner `<select>` via matching `id`/`for`; if omitted, a host `aria-label` is forwarded to the select instead
89
+ - `error` sets `aria-invalid="true"` and links the error message via `aria-describedby`; the message uses `role="alert"` so it is announced immediately
90
+ - `hint` is linked via `aria-describedby` for screen reader announcement
73
91
  - The custom chevron icon is `aria-hidden="true"` to avoid duplicate announcements
74
- - `required` uses the native `<select required>` attribute for browser validation
92
+ - `required` uses the native `<select required>` attribute for browser validation and sets `aria-required="true"`
75
93
  - `disabled` uses the native `<select disabled>` attribute
76
94
  - Participates in HTML forms via the Form-Associated Custom Elements API
@@ -22,6 +22,9 @@ function BdsSelect({
22
22
  value,
23
23
  options,
24
24
  placeholder,
25
+ label,
26
+ hint,
27
+ error,
25
28
  required,
26
29
  disabled,
27
30
  }: {
@@ -29,6 +32,9 @@ function BdsSelect({
29
32
  value?: string;
30
33
  options?: string;
31
34
  placeholder?: string;
35
+ label?: string;
36
+ hint?: string;
37
+ error?: string;
32
38
  required?: boolean;
33
39
  disabled?: boolean;
34
40
  }) {
@@ -37,6 +43,9 @@ function BdsSelect({
37
43
  value,
38
44
  options,
39
45
  placeholder,
46
+ label,
47
+ hint,
48
+ error,
40
49
  required: required || undefined,
41
50
  disabled: disabled || undefined,
42
51
  });
@@ -71,6 +80,30 @@ export const WithPlaceholder: Story = {
71
80
  args: { name: 'country', options: COUNTRIES, placeholder: 'Choose a country…' },
72
81
  };
73
82
 
83
+ export const WithLabel: Story = {
84
+ args: { name: 'country', options: COUNTRIES, label: 'Country', placeholder: 'Choose a country…' },
85
+ };
86
+
87
+ export const WithHint: Story = {
88
+ args: {
89
+ name: 'country',
90
+ options: COUNTRIES,
91
+ label: 'Country',
92
+ placeholder: 'Choose a country…',
93
+ hint: 'Used to calculate shipping costs',
94
+ },
95
+ };
96
+
97
+ export const WithError: Story = {
98
+ args: {
99
+ name: 'country',
100
+ options: COUNTRIES,
101
+ label: 'Country',
102
+ placeholder: 'Choose a country…',
103
+ error: 'Please select a country',
104
+ },
105
+ };
106
+
74
107
  export const Required: Story = {
75
108
  args: { name: 'country', options: COUNTRIES, placeholder: 'Choose a country…', required: true },
76
109
  };
@@ -5,7 +5,7 @@ import * as Stories from './BdsSlider.stories';
5
5
 
6
6
  # &lt;bds-slider&gt;
7
7
 
8
- Form-associated range slider. Wraps a native `<input type="range">` with a styled fill track driven by the `--slider_fill` CSS custom property.
8
+ Form-associated range slider. Wraps a native `<input type="range">` with a styled fill track driven by the `--slider_fill` CSS custom property, plus label/hint/error wiring matching the other form web components.
9
9
 
10
10
  > **Status: experimental** — API may change before stable release.
11
11
 
@@ -30,6 +30,12 @@ Use `<bds-slider>` for continuous or stepped numeric ranges — volume controls,
30
30
  ### With custom min/max (1–5)
31
31
  <Canvas of={Stories.WithMinMax} />
32
32
 
33
+ ### With label and value
34
+ <Canvas of={Stories.WithLabel} />
35
+
36
+ ### Error state
37
+ <Canvas of={Stories.WithError} />
38
+
33
39
  ### Disabled
34
40
  <Canvas of={Stories.Disabled} />
35
41
 
@@ -39,39 +45,50 @@ Use `<bds-slider>` for continuous or stepped numeric ranges — volume controls,
39
45
 
40
46
  ## Attributes
41
47
 
42
- | Attribute | Type | Default | Description |
43
- |------------|---------|---------|------------------------------------------|
44
- | `name` | string | `""` | Form field name |
45
- | `value` | number | `0` | Current value |
46
- | `min` | number | `0` | Minimum value |
47
- | `max` | number | `100` | Maximum value |
48
- | `step` | number | `1` | Step increment |
49
- | `disabled` | boolean | `false` | Disables the slider |
48
+ | Attribute | Type | Default | Description |
49
+ |--------------|---------|---------|-------------------------------------------------------|
50
+ | `name` | string | `""` | Form field name |
51
+ | `value` | number | `0` | Current value |
52
+ | `min` | number | `0` | Minimum value |
53
+ | `max` | number | `100` | Maximum value |
54
+ | `step` | number | `1` | Step increment |
55
+ | `label` | string | `""` | Visible label text, associated with the input via `for`/`id` |
56
+ | `hint` | string | — | Helper text shown below the slider |
57
+ | `error` | string | — | Error message; when set the slider enters error state and the input gets `aria-invalid="true"` |
58
+ | `show-value` | boolean | `false` | Shows the current value next to the label |
59
+ | `disabled` | boolean | `false` | Disables the slider |
50
60
 
51
61
  ## Events
52
62
 
53
- | Event | Detail | Description |
54
- |----------|--------|--------------------------------------|
55
- | `input` | — | Fired continuously as the user drags |
56
- | `change` | — | Fired when the user releases |
63
+ | Event | Detail | Description |
64
+ |--------------|-------------------|-----------------------------------------------------------------------------------------------------------|
65
+ | `input` | — | Native event, fired continuously as the user drags |
66
+ | `bds-change` | `{ value: number }` | Fired when the user releases. Re-dispatched from the host as a composed event so it reliably crosses the shadow boundary — the native `change` event does not. |
57
67
 
58
68
  ## CSS Custom Properties
59
69
 
60
- | Property | Description |
61
- |-------------------------|-----------------------------------------|
62
- | `--slider_fill-color` | Fill track colour (defaults to `--bds-color_interactive`) |
63
- | `--slider_track-color` | Unfilled track colour (defaults to `--bds-color_bg--subtle`) |
64
- | `--slider_thumb-color` | Thumb colour (defaults to `--bds-color_interactive`) |
70
+ | Property | Description | Default |
71
+ |---------------------------|-------------------------------------------------------|-----------------------------------|
72
+ | `--slider_color` | Track `color` (used as a fallback text/context colour) | `--bds-color_on-bg` |
73
+ | `--slider_color-active` | Fill track + thumb colour | `--bdc-color_active` |
74
+ | `--slider_color--error` | Fill track + thumb colour when `error` is set | `--bds-color_error` |
75
+ | `--slider_track-bg` | Unfilled track colour | `--bds-color_bg--subtle` |
76
+ | `--slider_track-height` | Track thickness | `--bds-space_xxs` |
77
+ | `--slider_track-radius` | Track corner radius | `--bds-border_radius--full` |
78
+ | `--slider_thumb-size` | Thumb diameter | `calc(--bds-space_s * 2)` |
79
+ | `--slider_thumb-radius` | Thumb corner radius | `--bds-border_radius--circle` |
65
80
 
66
81
  ## Usage in plain HTML
67
82
 
68
83
  ```html
69
- <bds-slider name="volume" value="50" min="0" max="100" step="5"></bds-slider>
84
+ <bds-slider name="volume" label="Volume" value="50" min="0" max="100" step="5" show-value></bds-slider>
70
85
  ```
71
86
 
72
87
  ## Accessibility
73
88
 
74
89
  - Wraps a native `<input type="range">` which has full browser and assistive technology support
90
+ - `label` renders a shadow `<label for>` bound to the input — set it so the slider has an accessible name
91
+ - `hint`/`error` text is wired to the input via `aria-describedby`; `error` also sets `aria-invalid="true"`
75
92
  - Arrow keys adjust the value by `step`
76
93
  - `disabled` prevents interaction and reduces opacity
77
94
  - Participates in HTML forms via the Form-Associated Custom Elements API
@@ -8,6 +8,10 @@ function BdsSlider({
8
8
  min,
9
9
  max,
10
10
  step,
11
+ label,
12
+ hint,
13
+ error,
14
+ showValue,
11
15
  disabled,
12
16
  }: {
13
17
  name?: string;
@@ -15,6 +19,10 @@ function BdsSlider({
15
19
  min?: number;
16
20
  max?: number;
17
21
  step?: number;
22
+ label?: string;
23
+ hint?: string;
24
+ error?: string;
25
+ showValue?: boolean;
18
26
  disabled?: boolean;
19
27
  }) {
20
28
  return React.createElement('bds-slider', {
@@ -23,6 +31,10 @@ function BdsSlider({
23
31
  min,
24
32
  max,
25
33
  step,
34
+ label,
35
+ hint,
36
+ error,
37
+ 'show-value': showValue || undefined,
26
38
  disabled: disabled || undefined,
27
39
  });
28
40
  }
@@ -37,6 +49,10 @@ const meta = {
37
49
  min: { control: 'number' },
38
50
  max: { control: 'number' },
39
51
  step: { control: 'number' },
52
+ label: { control: 'text' },
53
+ hint: { control: 'text' },
54
+ error: { control: 'text' },
55
+ showValue: { control: 'boolean' },
40
56
  disabled: { control: 'boolean' },
41
57
  },
42
58
  decorators: [
@@ -63,6 +79,14 @@ export const WithMinMax: Story = {
63
79
  args: { name: 'rating', value: 3, min: 1, max: 5 },
64
80
  };
65
81
 
82
+ export const WithLabel: Story = {
83
+ args: { name: 'volume', label: 'Volume', value: 50, showValue: true, hint: 'Adjust the playback volume' },
84
+ };
85
+
86
+ export const WithError: Story = {
87
+ args: { name: 'volume', label: 'Volume', value: 90, error: 'Value exceeds the recommended maximum' },
88
+ };
89
+
66
90
  export const Disabled: Story = {
67
91
  args: { name: 'volume', value: 40, disabled: true },
68
92
  };
@@ -30,19 +30,27 @@ Use `<bds-switch>` for binary on/off settings where the change takes immediate e
30
30
  ### Disabled
31
31
  <Canvas of={Stories.Disabled} />
32
32
 
33
+ ### Small size
34
+ <Canvas of={Stories.Small} />
35
+
36
+ ### With error
37
+ <Canvas of={Stories.WithError} />
38
+
33
39
  ## Props
34
40
 
35
41
  <ArgTypes of={Stories} />
36
42
 
37
43
  ## Attributes
38
44
 
39
- | Attribute | Type | Default | Description |
40
- |------------|---------|---------|--------------------------------------------------|
41
- | `name` | string | `""` | Form field name |
42
- | `value` | string | `"on"` | Value submitted when the switch is on |
43
- | `checked` | boolean | `false` | Whether the switch is on |
44
- | `required` | boolean | `false` | Marks the field as required |
45
- | `disabled` | boolean | `false` | Disables the switch |
45
+ | Attribute | Type | Default | Description |
46
+ |------------|---------|------------|--------------------------------------------------------------|
47
+ | `name` | string | `""` | Form field name |
48
+ | `value` | string | `"on"` | Value submitted when the switch is on |
49
+ | `checked` | boolean | `false` | Whether the switch is on |
50
+ | `required` | boolean | `false` | Marks the field as required |
51
+ | `disabled` | boolean | `false` | Disables the switch |
52
+ | `error` | string | — | Error message; when set the track shows the error colour and the input reports `aria-invalid="true"` |
53
+ | `size` | string | `"medium"` | Track/thumb size: `small`, `medium`, `large` |
46
54
 
47
55
  ## Slots
48
56
 
@@ -52,21 +60,40 @@ Use `<bds-switch>` for binary on/off settings where the change takes immediate e
52
60
 
53
61
  ## Events
54
62
 
55
- | Event | Detail | Description |
56
- |----------|--------|------------------------------------------------|
57
- | `change` | — | Fired when the switch state changes |
63
+ | Event | Detail | Description |
64
+ |--------------|------------------------|----------------------------------------------------------------------------------------------------------------|
65
+ | `bds-change` | `{ checked: boolean }` | Composed event fired when the switch is toggled; crosses the shadow boundary so it can be listened for on the host element |
58
66
 
59
67
  ## Usage in plain HTML
60
68
 
61
69
  ```html
62
70
  <bds-switch name="notifications" value="enabled">Enable notifications</bds-switch>
63
71
  <bds-switch name="darkMode" value="on" checked>Dark mode</bds-switch>
72
+ <bds-switch name="compact" size="small">Compact mode</bds-switch>
73
+ <bds-switch name="terms" required error="You must accept the terms">Accept terms</bds-switch>
64
74
  ```
65
75
 
76
+ ## CSS custom properties
77
+
78
+ | Property | Default | Description |
79
+ |----------------------------------|-------------------------------------------|---------------------------------------------|
80
+ | `--switch_color` | `var(--bds-color_on-bg)` | Label text colour |
81
+ | `--switch_thumb-size` | `1.25em` (`1em` small / `1.5em` large) | Thumb diameter — also drives track sizing |
82
+ | `--switch_track-pad` | `var(--bds-space_xxxs)` | Padding between track edge and thumb |
83
+ | `--switch_track-radius` | `var(--bds-border_radius--full)` | Track corner radius |
84
+ | `--switch_track-bg` | `var(--bds-color_grey--subtle)` | Track background when off |
85
+ | `--switch_track-bg--active` | `var(--bdc-color_active--subtle)` | Track background when on |
86
+ | `--switch_thumb-bg` | `var(--bds-color_interactive)` | Thumb (and track border) colour when off |
87
+ | `--switch_thumb-bg--active` | `var(--bds-color_interactive)` | Thumb colour when on |
88
+ | `--switch_thumb-radius` | `var(--bds-border_radius--circle)` | Thumb corner radius |
89
+ | `--switch_border-color--error` | `var(--bds-color_error)` | Track border colour when `error` is set |
90
+ | `--switch_shadow` | `var(--bdc-outline_shadow)` | Track box-shadow tail |
91
+
66
92
  ## Accessibility
67
93
 
68
94
  - Uses `role="switch"` on the inner `<input type="checkbox">` for correct screen reader announcement
69
95
  - The inner `<input>` is associated with a `<label>` via matching `id`/`for` attributes
70
96
  - The visual track and thumb are inside the `<label>` — clicking the label or the track both toggle the switch
71
97
  - `disabled` sets `pointer-events: none` and reduces opacity
72
- - Participates in HTML forms via the Form-Associated Custom Elements API
98
+ - `error` sets `aria-invalid="true"` on the inner input
99
+ - Participates in HTML forms via the Form-Associated Custom Elements API; `formResetCallback` restores the switch's initial `checked` state on form reset
@@ -8,6 +8,8 @@ function BdsSwitch({
8
8
  checked,
9
9
  required,
10
10
  disabled,
11
+ error,
12
+ size,
11
13
  children,
12
14
  }: {
13
15
  name?: string;
@@ -15,6 +17,8 @@ function BdsSwitch({
15
17
  checked?: boolean;
16
18
  required?: boolean;
17
19
  disabled?: boolean;
20
+ error?: string;
21
+ size?: 'small' | 'medium' | 'large';
18
22
  children?: React.ReactNode;
19
23
  }) {
20
24
  return React.createElement(
@@ -25,6 +29,8 @@ function BdsSwitch({
25
29
  checked: checked || undefined,
26
30
  required: required || undefined,
27
31
  disabled: disabled || undefined,
32
+ error,
33
+ size,
28
34
  },
29
35
  children,
30
36
  );
@@ -39,6 +45,8 @@ const meta = {
39
45
  checked: { control: 'boolean' },
40
46
  required: { control: 'boolean' },
41
47
  disabled: { control: 'boolean' },
48
+ error: { control: 'text' },
49
+ size: { control: 'select', options: ['small', 'medium', 'large'] },
42
50
  },
43
51
  } satisfies Meta<typeof BdsSwitch>;
44
52
 
@@ -56,3 +64,11 @@ export const Checked: Story = {
56
64
  export const Disabled: Story = {
57
65
  args: { name: 'notifications', value: 'enabled', disabled: true, children: 'Notifications (disabled)' },
58
66
  };
67
+
68
+ export const Small: Story = {
69
+ args: { name: 'compact', value: 'enabled', size: 'small', children: 'Compact mode' },
70
+ };
71
+
72
+ export const WithError: Story = {
73
+ args: { name: 'terms', value: 'accepted', required: true, error: 'You must accept the terms', children: 'Accept terms' },
74
+ };