@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
package/AGENTS.md CHANGED
@@ -24,18 +24,18 @@ import '@boostdev/design-system-components/web-components';
24
24
  ## Component categories
25
25
 
26
26
  ### React (web)
27
- - **ui/**: Accordion, Alert, Avatar, Badge, Breadcrumb, Calendar, Carousel, Collapsible, DescriptionList, Link, Loading, NotificationBanner, Pagination, Progress, ProgressCircle, Separator, Skeleton, SkipLink, Table, Tabs, Tooltip, Typography
27
+ - **ui/**: Accordion, Alert, Avatar, Badge, Breadcrumb, Calendar, CalendarRange, Carousel, Collapsible, DescriptionList, Link, Loading, NotificationBanner, Pagination, Progress, ProgressCircle, Separator, Skeleton, SkipLink, Table, Tabs, Tooltip, Typography
28
28
  - **interaction/**: Button, Command, Dialog, Drawer, DropdownMenu, Popover, Rating, Toast (ToastProvider + useToast hook)
29
- - **interaction/form/**: Checkbox, CheckboxGroup, Combobox, FileInput, FormInput, NumberInput, Radio, RadioGroup, SegmentedControl, Select, Slider, Switch, Textarea (+ atom primitives: Label, Message, InputContainer)
29
+ - **interaction/form/**: Checkbox, CheckboxGroup, Combobox, FieldGroup, FileInput, FormInput, NumberInput, Radio, RadioGroup, SegmentedControl, Select, Slider, Switch, Textarea (+ atom primitives: Label, Message, InputContainer)
30
30
  - **layout/**: ButtonContainer (formerly ButtonGroup — deprecated alias still available), Card, Grid (supports `isMasonry` — CSS Grid Level 3 with row-span polyfill (auto-tunes the row-track unit to stay under browser implicit-grid caps; `masonryRowUnitPx` overrides) — and `autoSpanMedia` — per-item span derived from media aspect ratio), GridItem (supports `columnSpan="auto"`), IconWrapper, SectionHeader
31
31
 
32
32
  ### Web Components (experimental) — `src/web-components/`
33
33
  Custom elements built with Lit. Entry: `src/web-components/index.ts`. Bundled with Lit (no peer dep required).
34
34
 
35
- - **ui/**: `<bds-alert>`, `<bds-avatar>`, `<bds-badge>`, `<bds-breadcrumb>`, `<bds-button-group>`, `<bds-calendar>`, `<bds-card>`, `<bds-carousel>`, `<bds-description-list>`, `<bds-icon-wrapper>`, `<bds-link>`, `<bds-loading>`, `<bds-notification-banner>`, `<bds-pagination>`, `<bds-progress>`, `<bds-progress-circle>`, `<bds-rating>`, `<bds-section-header>`, `<bds-separator>`, `<bds-skeleton>`, `<bds-table>`, `<bds-typography>`
35
+ - **ui/**: `<bds-alert>`, `<bds-avatar>`, `<bds-badge>`, `<bds-breadcrumb>`, `<bds-button-group>`, `<bds-calendar>`, `<bds-calendar-range>`, `<bds-card>`, `<bds-carousel>`, `<bds-description-list>`, `<bds-icon-wrapper>`, `<bds-link>`, `<bds-loading>`, `<bds-notification-banner>`, `<bds-pagination>`, `<bds-progress>`, `<bds-progress-circle>`, `<bds-rating>`, `<bds-section-header>`, `<bds-separator>`, `<bds-skeleton>`, `<bds-table>`, `<bds-typography>`
36
36
  - **layout/**: `<bds-grid>`, `<bds-grid-item>`
37
37
  - **interaction/**: `<bds-accordion>`, `<bds-accordion-item>`, `<bds-button>`, `<bds-collapsible>`, `<bds-dialog>`, `<bds-drawer>`, `<bds-dropdown-menu>`, `<bds-dropdown-menu-item>`, `<bds-popover>`, `<bds-skip-link>`, `<bds-tab>`, `<bds-tab-panel>`, `<bds-tabs>`, `<bds-toast-provider>`, `<bds-tooltip>`
38
- - **interaction/form/**: `<bds-checkbox>`, `<bds-checkbox-group>`, `<bds-combobox>`, `<bds-file-input>`, `<bds-form-input>`, `<bds-number-input>`, `<bds-radio>`, `<bds-radio-group>`, `<bds-segmented-control>`, `<bds-select>`, `<bds-slider>`, `<bds-switch>`, `<bds-textarea>`
38
+ - **interaction/form/**: `<bds-checkbox>`, `<bds-checkbox-group>`, `<bds-combobox>`, `<bds-field-group>`, `<bds-file-input>`, `<bds-form-input>`, `<bds-number-input>`, `<bds-radio>`, `<bds-radio-group>`, `<bds-segmented-control>`, `<bds-select>`, `<bds-slider>`, `<bds-switch>`, `<bds-textarea>`
39
39
 
40
40
  **Not ported** (deferred): `Command` — depends on `cmdk` React library internals. Use `<bds-combobox>` as the web component alternative.
41
41
 
@@ -144,8 +144,8 @@ Components that express an active, checked, or filled state use a two-level chai
144
144
 
145
145
  ```css
146
146
  /* component var → global semantic token */
147
- background-color: var(--checkbox_color-active, var(--bds-color_green));
148
- border-color: var(--checkbox_color-active, var(--bds-color_green));
147
+ background-color: var(--checkbox_color-active, var(--bdc-color_active));
148
+ border-color: var(--checkbox_color-active, var(--bdc-color_active));
149
149
  border: solid var(--checkbox_color-on-active, var(--bdc-color_on-active));
150
150
  ```
151
151
 
@@ -172,7 +172,7 @@ Prefer semantic tokens over palette tokens. Key tokens for component states:
172
172
 
173
173
  | Token | Meaning | Used in |
174
174
  |-------|---------|---------|
175
- | `--bdc-color_active` | Active / checked / filled state (= `--bds-color_green` by default) | Checkbox, Radio, Slider, Progress, ProgressCircle |
175
+ | `--bdc-color_active` | Active / checked / filled state (= `--bds-color_interactive` by default) | Checkbox, Radio, Slider, Progress, ProgressCircle |
176
176
  | `--bdc-color_on-active` | Content on active background | Checkbox tick, Radio inner dot |
177
177
  | `--bdc-color_active--subtle` | Subtle active background | Switch track when on |
178
178
  | `--bdc-color_active--strong` | Strong active foreground | Switch thumb when on |
@@ -181,11 +181,32 @@ Prefer semantic tokens over palette tokens. Key tokens for component states:
181
181
  | `--bds-color_interactive` | Focus ring colour | All focusable inputs |
182
182
  | `--bds-color_error` | Error state | All form components |
183
183
 
184
- Focus rings must use the relative-colour formula for consistency:
184
+ A relative-colour box-shadow formula is recommended for focus rings that need a soft, tinted treatment instead of the standard outline:
185
185
  ```css
186
186
  box-shadow: var(--component_focus-ring, 0 0 0 2px rgb(from var(--bds-color_interactive) r g b / 20%));
187
187
  ```
188
- Error focus rings substitute `--bds-color_error` for `--bds-color_interactive`.
188
+ Error focus rings would substitute `--bds-color_error` for `--bds-color_interactive`. Note: no component currently implements this formula — all components today use `outline: var(--bds-outline_default)` + `outline-offset: var(--bds-outline_offset)` on `:focus-visible` (see "bdc border tokens" above and "Key decisions" below).
189
+
190
+ ### Role tokens, state tokens and grounds (foundation ≥2.2.0)
191
+
192
+ Foundation 2.2.0 added named role tokens for accent colours, alongside state and additional ground tokens. These are the **canonical** names going forward for new work:
193
+
194
+ - **Role tokens** — `--bds-color_primary`, `--bds-color_secondary`, `--bds-color_accent-1`, `--bds-color_accent-2`, `--bds-color_accent-3`. Each has the full `--subtle` / `--strong` pair and an `on-` counterpart for content drawn on top (`--bds-color_on-primary`, `--bds-color_on-primary--subtle`, `--bds-color_on-primary--strong`, etc.) — same pairing law as the existing status colours.
195
+ - **Deprecated hue aliases** — `--bds-color_blue`, `--bds-color_green`, `--bds-color_orange` (and their `--subtle`/`--strong`/`on-` variants) still resolve (they now alias to `primary`/`accent-1`/`accent-2` respectively) but are deprecated and scheduled for removal in foundation 3.0. Do not migrate existing hue-name references to role names purely for its own sake — only role names are new-foundation-only, so a reference written against a hue alias keeps working on older foundations that a role-name reference would not.
196
+ - **State tokens** — `--bds-color_interactive--hover` and `--bds-color_interactive--active` give explicit hover/active treatments for interactive elements, instead of components deriving their own tint.
197
+ - **`--bds-color_on-bg--muted`** — de-emphasised text on the page background (e.g. helper text, timestamps). It is guaranteed ≥7:1 contrast against `--bds-color_bg`, so it must never be used to *look* disabled — muted text is still fully readable body content.
198
+ - **`--bds-color_on-bg--border`** — hairline/divider colour intended for use against the page background.
199
+ - **Disabled pair** — `--bds-color_disabled` (background) / `--bds-color_on-disabled` (content) are the dedicated disabled-state tokens. Never reuse `on-bg--muted` for a disabled look, and never put `on-disabled` on content that must stay readable — it is intentionally low-contrast.
200
+ - **`--bds-color_bg--strong`** (+ `--bds-color_on-bg--strong`) — a "prominent ground" for surfaces that need to read as raised above the page: it equals `--bds-color_bg` in light mode but steps up to a distinct grey-800 in dark mode, so cards, dialogs, drawers, toasts, popovers, dropdown/listbox panels and similar floating surfaces get visible separation from the page in dark mode without any extra styling. Regular in-flow content (page backgrounds, inline sections, form-control backgrounds) should keep using plain `--bds-color_bg`.
201
+
202
+ **Backwards-compatible fallback-chain pattern**: because this package's peer range is `>=2.0.0`, every reference to a token introduced after 2.0.0 must fall back to a token that exists on 2.0.0, so consumers on older foundations don't get a broken `var()`. For example, migrating a raised surface to `bg--strong` while preserving whatever hook/default that surface already had:
203
+ ```css
204
+ /* before */
205
+ background-color: var(--card_color, var(--bds-color_bg));
206
+ /* after — falls back to plain bg on foundation <2.2.0 */
207
+ background-color: var(--card_color, var(--bds-color_bg--strong, var(--bds-color_bg)));
208
+ ```
209
+ Never reference a 2.2.0+ token without this trailing fallback, and never raise the `@boostdev/design-system-foundation` peerDependency floor just to use a new token — the fallback chain is what lets new tokens ship without a breaking change.
189
210
 
190
211
  ### Semantic vs raw token layers
191
212
 
@@ -320,50 +341,55 @@ The following table lists every component-local token extracted from `src/compon
320
341
 
321
342
  | Component | Tokens |
322
343
  |---|---|
323
- | Accordion | `--accordion_border`, `--accordion_radius`, `--accordion_trigger-bg--hover` |
324
- | Alert | `--alert_bg`, `--alert_text`, `--alert_border`, `--alert_bg--info`, `--alert_text--info`, `--alert_border--info`, `--alert_bg--success`, `--alert_text--success`, `--alert_border--success`, `--alert_bg--warning`, `--alert_text--warning`, `--alert_border--warning`, `--alert_bg--error`, `--alert_text--error`, `--alert_border--error`, `--alert_dismiss-border`, `--alert_dismiss-radius`, `--alert_dismiss-opacity--hover` |
344
+ | Accordion | `--accordion_border`, `--accordion_radius`, `--accordion_trigger-bg--hover`, `--accordion_shadow` |
345
+ | Alert | `--alert_bg`, `--alert_text`, `--alert_border`, `--alert_bg--info`, `--alert_text--info`, `--alert_border--info`, `--alert_bg--success`, `--alert_text--success`, `--alert_border--success`, `--alert_bg--warning`, `--alert_text--warning`, `--alert_border--warning`, `--alert_bg--error`, `--alert_text--error`, `--alert_border--error`, `--alert_dismiss-border`, `--alert_dismiss-radius`, `--alert_dismiss-opacity--hover`, `--alert_dismiss-shadow`, `--alert_dismiss-size`, `--alert_radius` |
325
346
  | Avatar | `--avatar_size`, `--avatar_radius`, `--avatar_bg`, `--avatar_text` |
326
347
  | Badge | `--badge_radius`, `--badge_font-size`, `--badge_bg`, `--badge_text`, `--badge_bg--primary`, `--badge_text--primary`, `--badge_bg--secondary`, `--badge_text--secondary`, `--badge_bg--success`, `--badge_text--success`, `--badge_bg--error`, `--badge_text--error`, `--badge_bg--warning`, `--badge_text--warning` |
327
348
  | Button | `--button_color`, `--button_on-color`, `--button_color--on-bg`, `--button_radius`, `--button_height`, `--button_font-size`, `--button_bg`, `--button_text`, `--button_border`, `--button_pulse-color`, `--button_bg--hover`, `--button_text--hover`, `--button_border--hover`, `--button_pulse-color--hover`, `--button_bg--outline`, `--button_text--outline`, `--button_border--outline`, `--button_bg--outline-hover`, `--button_text--outline-hover`, `--button_border--outline-hover` |
328
- | Calendar | `--calendar_border`, `--calendar_radius`, `--calendar_shadow`, `--calendar_button-radius`, `--calendar_navBtn-bg--hover`, `--calendar_day-bg--hover`, `--calendar_today-color`, `--calendar_today-border`, `--calendar_day-bg--selected`, `--calendar_day-color--selected` |
329
- | Card | `--card_color`, `--card_on-color`, `--card_shadow--default`, `--card_shadow--elevated`, `--card_shadow--outlined`, `--card_border`, `--card_padding`, `--card_shadow--clickable-hover`, `--card_shadow--default-hover`, `--card_shadow--elevated-hover`, `--card_shadow--outlined-hover` |
330
- | Carousel | `--carousel_indicator-radius`, `--carousel_navBtn-bg--hover` |
331
- | Checkbox | `--checkbox_color`, `--checkbox_border`, `--checkbox_radius`, `--checkbox_shadow`, `--checkbox_color_bg`, `--checkbox_color-active`, `--checkbox_color-on-active` |
332
- | Collapsible | `--collapsible_border-width`, `--collapsible_border-color`, `--collapsible_border-radius`, `--collapsible_color`, `--collapsible_bg`, `--collapsible_bg--hover`, `--collapsible_on-color` |
333
- | Combobox | `--combobox_border`, `--combobox_radius`, `--combobox_shadow`, `--combobox_color_bg`, `--combobox_color`, `--combobox_on-color`, `--combobox_listbox-border`, `--combobox_listbox-radius`, `--combobox_listbox-shadow`, `--combobox_option-bg--highlighted`, `--combobox_option-color--highlighted` |
334
- | Command | `--command_color`, `--command_on-color`, `--command_border`, `--command_shadow`, `--command_item-bg--active` |
349
+ | ButtonContainer | `--buttonGroup_gap` |
350
+ | Calendar | `--calendar_border`, `--calendar_radius`, `--calendar_shadow`, `--calendar_button-radius`, `--calendar_navBtn-bg--hover`, `--calendar_day-bg--hover`, `--calendar_today-color`, `--calendar_today-border`, `--calendar_day-bg--selected`, `--calendar_day-color--selected`, `--calendar_day-bg--in-range`, `--calendar_size`, `--calendar_today-shadow` |
351
+ | Card | `--card_color`, `--card_on-color`, `--card_shadow--default`, `--card_shadow--elevated`, `--card_shadow--outlined`, `--card_border`, `--card_padding`, `--card_shadow--clickable-hover`, `--card_shadow--default-hover`, `--card_shadow--elevated-hover`, `--card_shadow--outlined-hover`, `--card_radius`, `--card_shadow--active`, `--card_transition` |
352
+ | Carousel | `--carousel_indicator-radius`, `--carousel_navBtn-bg--hover`, `--carousel_navBtn-radius`, `--carousel_navBtn-shadow` |
353
+ | Checkbox | `--checkbox_color`, `--checkbox_border`, `--checkbox_radius`, `--checkbox_shadow`, `--checkbox_color_bg`, `--checkbox_color-active`, `--checkbox_color-on-active`, `--checkbox_gap`, `--checkbox_offset`, `--checkbox_size` |
354
+ | CheckboxGroup | `--checkboxGroup_gap`, `--checkboxGroup_items-gap`, `--checkboxGroup_legend-color`, `--checkboxGroup_legend-font-family`, `--checkboxGroup_legend-font-size`, `--checkboxGroup_legend-font-weight`, `--checkboxGroup_legend-gap`, `--checkboxGroup_required-color` |
355
+ | Collapsible | `--collapsible_border-width`, `--collapsible_border-color`, `--collapsible_border-radius`, `--collapsible_color`, `--collapsible_bg`, `--collapsible_bg--hover`, `--collapsible_on-color`, `--collapsible_border` |
356
+ | Combobox | `--combobox_border`, `--combobox_radius`, `--combobox_shadow`, `--combobox_color_bg`, `--combobox_color`, `--combobox_on-color`, `--combobox_listbox-border`, `--combobox_listbox-radius`, `--combobox_listbox-shadow`, `--combobox_option-bg--highlighted`, `--combobox_option-color--highlighted`, `--combobox_listbox-bg`, `--combobox_listbox-max-block-size`, `--combobox_listbox-padding-block`, `--combobox_option-font-size`, `--combobox_option-padding-block`, `--combobox_option-padding-inline` |
357
+ | Command | `--command_color`, `--command_on-color`, `--command_border`, `--command_shadow`, `--command_item-bg--active`, `--command_kbd-radius`, `--command_radius` |
335
358
  | Dialog | `--dialog_border`, `--dialog_radius`, `--dialog_shadow`, `--dialog_color`, `--dialog_on-color`, `--dialog_close-radius`, `--dialog_close-border` |
336
- | Drawer | `--drawer_color`, `--drawer_on-color`, `--drawer_close-radius`, `--drawer_close-bg--hover` |
359
+ | Drawer | `--drawer_color`, `--drawer_on-color`, `--drawer_close-radius`, `--drawer_close-bg--hover`, `--drawer_shadow` |
337
360
  | DropdownMenu | `--dropdown_border`, `--dropdown_radius`, `--dropdown_color`, `--dropdown_on-color`, `--dropdown_shadow`, `--dropdown_item-bg--hover`, `--dropdown_item-color--hover` |
338
- | FieldGroup | `--fieldGroup_gap`, `--fieldGroup_min-field-width`, `--fieldGroup_legend-padding-block`, `--fieldGroup_legend-gap`, `--fieldGroup_legend-border-block-end`, `--fieldGroup_legend-color`, `--fieldGroup_legend-font-size`, `--fieldGroup_legend-font-weight`, `--fieldGroup_legend-line-height` |
339
- | FileInput | `--fileInput_color`, `--fileInput_border-color`, `--fileInput_border-color--hover`, `--fileInput_bg--hover` |
340
- | FormInput | `--input_border`, `--input_radius`, `--input_shadow`, `--input_color`, `--input_color_bg` |
361
+ | FieldGroup | `--fieldGroup_gap`, `--fieldGroup_min-field-width`, `--fieldGroup_collapse-threshold`, `--fieldGroup_legend-padding-block`, `--fieldGroup_legend-gap`, `--fieldGroup_legend-border-block-end`, `--fieldGroup_legend-color`, `--fieldGroup_legend-font-size`, `--fieldGroup_legend-font-weight`, `--fieldGroup_legend-line-height`, `--fieldGroup_legend-font-family` |
362
+ | FileInput | `--fileInput_color`, `--fileInput_border-color`, `--fileInput_border-color--hover`, `--fileInput_bg--hover`, `--fileInput_bg--dragging`, `--fileInput_border`, `--fileInput_font-size`, `--fileInput_font-size--hint`, `--fileInput_gap`, `--fileInput_label-margin`, `--fileInput_padding`, `--fileInput_radius` |
363
+ | FormInput | `--input_border`, `--input_radius`, `--input_shadow`, `--input_color`, `--input_color_bg`, `--formInput_border`, `--formInput_color`, `--formInput_color_bg`, `--formInput_font-family`, `--formInput_font-size`, `--formInput_padding`, `--formInput_radius`, `--formInput_shadow` |
341
364
  | Grid | `--grid_gap`, `--grid_columns` |
342
- | IconWrapper | `--icon-wrapper-radius`, `--icon-wrapper-color`, `--icon-wrapper_on-color` |
365
+ | IconWrapper | `--icon-wrapper-radius`, `--icon-wrapper-color`, `--icon-wrapper_on-color`, `--icon-wrapper_color`, `--icon-wrapper_margin-block-end`, `--icon-wrapper_margin-block-start`, `--icon-wrapper_radius`, `--icon-wrapper_size` |
343
366
  | Link | `--link_color`, `--link_color-hover`, `--link_color--default`, `--link_color-hover--default`, `--link_color--subtle`, `--link_color-hover--subtle`, `--link_color--standalone`, `--link_color-hover--standalone` |
344
- | Loading | `--loading_radius` |
345
- | NotificationBanner | `--banner_bg`, `--banner_text`, `--banner_border`, `--banner_bg--info`, `--banner_text--info`, `--banner_border--info`, `--banner_bg--success`, `--banner_text--success`, `--banner_border--success`, `--banner_bg--warning`, `--banner_text--warning`, `--banner_border--warning`, `--banner_bg--error`, `--banner_text--error`, `--banner_border--error`, `--banner_dismiss-radius`, `--banner_dismiss-border`, `--banner_dismiss-opacity--hover` |
346
- | NumberInput | `--numberInput_border`, `--numberInput_radius`, `--numberInput_shadow`, `--numberInput_color`, `--numberInput_stepper-bg`, `--numberInput_stepper-color`, `--numberInput_stepper-bg--hover`, `--numberInput_stepper-opacity--hover` |
347
- | Pagination | `--pagination_radius`, `--btn_bg`, `--btn_color`, `--btn_border`, `--btn_bg--hover`, `--btn_color--hover`, `--btn_bg--active`, `--btn_color--active`, `--btn_border--active` |
367
+ | Loading | `--loading_radius`, `--loading_color` |
368
+ | NotificationBanner | `--banner_bg`, `--banner_text`, `--banner_border`, `--banner_bg--info`, `--banner_text--info`, `--banner_border--info`, `--banner_bg--success`, `--banner_text--success`, `--banner_border--success`, `--banner_bg--warning`, `--banner_text--warning`, `--banner_border--warning`, `--banner_bg--error`, `--banner_text--error`, `--banner_border--error`, `--banner_dismiss-radius`, `--banner_dismiss-border`, `--banner_dismiss-opacity--hover`, `--banner_dismiss-size` |
369
+ | NumberInput | `--numberInput_border`, `--numberInput_radius`, `--numberInput_shadow`, `--numberInput_color`, `--numberInput_stepper-bg`, `--numberInput_stepper-color`, `--numberInput_stepper-bg--hover`, `--numberInput_stepper-opacity--hover`, `--numberInput_font-size`, `--numberInput_padding`, `--numberInput_stepper-padding` |
370
+ | Pagination | `--pagination_radius`, `--btn_bg`, `--btn_color`, `--btn_border`, `--btn_bg--hover`, `--btn_color--hover`, `--btn_bg--active`, `--btn_color--active`, `--btn_border--active`, `--pagination_item-bg`, `--pagination_item-bg--active`, `--pagination_item-bg--hover`, `--pagination_item-border`, `--pagination_item-border--active`, `--pagination_item-color`, `--pagination_item-color--active`, `--pagination_item-color--hover` |
348
371
  | Popover | `--popover_z-index`, `--popover_max-width`, `--popover_max-height`, `--popover_border`, `--popover_radius`, `--popover_color`, `--popover_on-color`, `--popover_shadow` |
349
- | Progress | `--progress_height`, `--progress_radius`, `--progress_color-active` |
350
- | ProgressCircle | `--progressCircle_color-active` |
351
- | Radio | `--radio_color`, `--radio_border`, `--radio_radius`, `--radio_shadow`, `--radio_color_bg`, `--radio_color-active`, `--radio_description-color` |
372
+ | Progress | `--progress_height`, `--progress_radius`, `--progress_color-active`, `--progress_color-track` |
373
+ | ProgressCircle | `--progressCircle_color-active`, `--progressCircle_color-track`, `--progressCircle_font-size--small` |
374
+ | Radio | `--radio_color`, `--radio_border`, `--radio_radius`, `--radio_shadow`, `--radio_color_bg`, `--radio_color-active`, `--radio_description-color`, `--radio_offset`, `--radio_size` |
375
+ | RadioGroup | `--radioGroup_gap`, `--radioGroup_items-gap`, `--radioGroup_legend-color`, `--radioGroup_legend-font-family`, `--radioGroup_legend-font-size`, `--radioGroup_legend-font-weight`, `--radioGroup_legend-gap`, `--radioGroup_required-color` |
352
376
  | Rating | `--rating_color`, `--rating_color--filled` |
353
- | SectionHeader | `--sectionHeader-title-color`, `--sectionHeader_subtitle-color`, `--sectionHeader_title-size`, `--sectionHeader_title-line-height`, `--sectionHeader_title-weight`, `--sectionHeader_subtitle-size` |
354
- | SegmentedControl | `--control_track-bg`, `--control_radius`, `--control_thumb-radius`, `--control_thumb-bg`, `--control_label-color`, `--control_label-color--active`, `--control_label-color--hover`, `--control_item-bg`, `--control_item-bg--active`, `--control_indicator-color` |
355
- | Select | `--select_border`, `--select_radius`, `--select_shadow`, `--select_color_bg`, `--select_color`, `--select_chevron-color` |
356
- | Separator | `--separator_color`, `--separator_thickness` |
357
- | Slider | `--slider_color`, `--slider_track-radius`, `--slider_color-active`, `--slider_track-bg`, `--slider_thumb-radius`, `--slider_color--error` |
358
- | Switch | `--switch_color`, `--switch_track-radius`, `--switch_track-bg`, `--switch_shadow`, `--switch_thumb-bg`, `--switch_thumb-radius`, `--switch_border-color--error`, `--switch_track-bg--active`, `--switch_thumb-bg--active` |
359
- | Table | `--table_border`, `--table_radius`, `--table_sortBtn-color--hover`, `--table_row-bg--hover` |
360
- | Tabs | `--tab_color`, `--tab_border-color`, `--tab_color--active`, `--tab_border-color--active`, `--tab_color--hover` |
361
- | Textarea | `--textarea_border`, `--textarea_radius`, `--textarea_shadow`, `--textarea_color_bg`, `--textarea_color` |
362
- | Toast | `--toast_color`, `--toast_on-color`, `--toast_color--success`, `--toast_on-color--success`, `--toast_color--warning`, `--toast_on-color--warning`, `--toast_color--info`, `--toast_on-color--info`, `--toast_color--error`, `--toast_on-color--error` |
363
- | Tooltip | `--tooltip_radius`, `--tooltip_bg`, `--tooltip_text` |
364
- | Typography | `--typography_color` |
365
-
366
- Components not listed have no component-local override tokens: Breadcrumb, ButtonContainer, CheckboxGroup, DescriptionList, GridItem, InputContainer, Label, Message, RadioGroup, Skeleton, SkipLink.
377
+ | SectionHeader | `--sectionHeader-title-color`, `--sectionHeader_subtitle-color`, `--sectionHeader_title-size`, `--sectionHeader_title-line-height`, `--sectionHeader_title-weight`, `--sectionHeader_subtitle-size`, `--sectionHeader_gap`, `--sectionHeader_subtitle-line-height`, `--sectionHeader_title-color` |
378
+ | SegmentedControl | `--control_track-bg`, `--control_radius`, `--control_thumb-radius`, `--control_thumb-bg`, `--control_label-color`, `--control_label-color--active`, `--control_label-color--hover`, `--control_item-bg`, `--control_item-bg--active`, `--control_indicator-color`, `--control_item-padding`, `--control_thumb-shadow`, `--control_track-pad` |
379
+ | Select | `--select_border`, `--select_radius`, `--select_shadow`, `--select_color_bg`, `--select_color`, `--select_chevron-color`, `--select_chevron-size`, `--select_padding`, `--select_padding-end` |
380
+ | Separator | `--separator_color`, `--separator_thickness`, `--separator_length` |
381
+ | Skeleton | `--skeleton_color-base`, `--skeleton_color-highlight`, `--skeleton_min-block-size`, `--skeleton_radius` |
382
+ | SkipLink | `--skip-link_border`, `--skip-link_font-size`, `--skip-link_inset`, `--skip-link_padding`, `--skip-link_radius`, `--skip-link_shadow`, `--skip-link_z-index` |
383
+ | Slider | `--slider_color`, `--slider_track-height`, `--slider_thumb-size`, `--slider_track-radius`, `--slider_color-active`, `--slider_track-bg`, `--slider_thumb-radius`, `--slider_color--error` |
384
+ | Switch | `--switch_color`, `--switch_thumb-size`, `--switch_track-pad`, `--switch_track-radius`, `--switch_track-bg`, `--switch_shadow`, `--switch_thumb-bg`, `--switch_thumb-radius`, `--switch_border-color--error`, `--switch_track-bg--active`, `--switch_thumb-bg--active` |
385
+ | Table | `--table_border`, `--table_radius`, `--table_sortBtn-color--hover`, `--table_row-bg--hover`, `--table_cell-padding`, `--table_font-size`, `--table_header-font-size`, `--table_shadow` |
386
+ | Tabs | `--tab_color`, `--tab_border-color`, `--tab_color--active`, `--tab_border-color--active`, `--tab_color--hover`, `--tab_padding`, `--tabs_gap`, `--tabs_panel-padding` |
387
+ | Textarea | `--textarea_border`, `--textarea_radius`, `--textarea_shadow`, `--textarea_color_bg`, `--textarea_color`, `--textarea_font-family`, `--textarea_font-size`, `--textarea_line-height`, `--textarea_min-block-size`, `--textarea_padding` |
388
+ | Toast | `--toast_color`, `--toast_on-color`, `--toast_color--success`, `--toast_on-color--success`, `--toast_color--warning`, `--toast_on-color--warning`, `--toast_color--info`, `--toast_on-color--info`, `--toast_color--error`, `--toast_on-color--error`, `--toast_radius`, `--toast_shadow` |
389
+ | Tooltip | `--tooltip_radius`, `--tooltip_bg`, `--tooltip_text`, `--tooltip_font-size`, `--tooltip_max-inline-size`, `--tooltip_offset`, `--tooltip_padding` |
390
+ | Typography | `--typography_color`, `--typography_font-size--body`, `--typography_font-size--body_s`, `--typography_font-size--h1`, `--typography_font-size--h2`, `--typography_font-size--h3` |
391
+
392
+ Components not listed have no component-local override tokens: Breadcrumb, DescriptionList, GridItem, InputContainer, Label, Message.
367
393
 
368
394
  ## MCP server
369
395
 
@@ -375,8 +401,11 @@ https://ds.boostdev.nl/api/mcp
375
401
 
376
402
  Connect to it to look up component props, CSS custom properties, and tokens without reading source files. Use
377
403
  `ds_get_component` before writing any component code — it returns the props interface **and** all
378
- overridable CSS custom properties with their defaults. Override CSS variables on the component
379
- element or any parent in plain CSS (no `@layer` needed):
404
+ overridable CSS custom properties with their defaults.
405
+
406
+ `ds_get_component` covers three platforms via the `platform` argument: `"web"` (default — React components, props + CSS custom properties), `"web-component"` (framework-agnostic `<bds-*>` custom elements — attributes, CSS custom properties, `bds-*` events, and slots), and `"native"` (React Native). `ds_list_components` and `ds_search` include all three.
407
+
408
+ Override CSS variables on the component element or any parent in plain CSS (no `@layer` needed):
380
409
 
381
410
  ```css
382
411
  .my-branded-button {
package/README.md CHANGED
@@ -346,6 +346,22 @@ import { SegmentedControl } from '@boostdev/design-system-components';
346
346
 
347
347
  Children-based API — pass `<button>`, `<a>`, or router `<Link>` elements directly. Active item is set via `selectedIndex` or auto-detected from `aria-current="page"` / `aria-pressed={true}` / `aria-selected={true}`. Variants: `outline` (default) · `filled`. Sizes: `small` · `medium` (default) · `large`.
348
348
 
349
+ #### FieldGroup
350
+
351
+ ```tsx
352
+ import { FieldGroup, FormInput } from '@boostdev/design-system-components';
353
+
354
+ <FieldGroup legend="Address" variant="horizontal">
355
+ <FormInput label="Street" name="street" />
356
+ <FormInput label="City" name="city" />
357
+ </FieldGroup>
358
+ ```
359
+
360
+ Semantically groups related fields under a single `<fieldset>`. `horizontal` (default) lays fields
361
+ into a row that collapses to a single column via a CSS container query when the group itself is too
362
+ narrow; `vertical` always stacks. Accepts any form control as a child. Omit `legend` and provide
363
+ `aria-label` / `aria-labelledby` when the surrounding context already names the group.
364
+
349
365
  ---
350
366
 
351
367
  ### Layout components
@@ -500,8 +516,8 @@ Every component exposes CSS custom properties as a styling API. Set them on a pa
500
516
  ```css
501
517
  /* Override the button colour for a specific context */
502
518
  .hero .button {
503
- --button_color: var(--bds-brand);
504
- --button_on-color: var(--bds-on-brand);
519
+ --button_color: var(--bds-color_success);
520
+ --button_on-color: var(--bds-color_on-success);
505
521
  }
506
522
  ```
507
523
 
@@ -535,22 +551,24 @@ shapes from the foundation. Override the component-scoped variable to change ind
535
551
  ### Overriding active/checked state colour
536
552
 
537
553
  Components with a checked or filled state (Checkbox, Radio, Slider, Progress, ProgressCircle)
538
- expose a component-scoped variable that falls back to the global `--bds-active` token:
554
+ expose a component-scoped variable that falls back to the shared `--bdc-color_active` hook token
555
+ (defined in `src/css/bdc.css`, defaults to `--bds-color_interactive`):
539
556
 
540
557
  ```css
541
558
  /* Override the active colour for a single checkbox */
542
559
  .my-checkbox {
543
- --checkbox_color-active: var(--bds-brand);
544
- --checkbox_color-on-active: var(--bds-on-brand);
560
+ --checkbox_color-active: var(--bds-color_blue);
561
+ --checkbox_color-on-active: var(--bds-color_white);
545
562
  }
546
563
 
547
564
  /* Override for all sliders in a section */
548
565
  .settings-panel {
549
- --slider_color-active: var(--bds-important);
566
+ --slider_color-active: var(--bds-color_green);
550
567
  }
551
568
  ```
552
569
 
553
- The two-level chain means you can also override at the global token level — see Theming below.
570
+ The two-level chain means you can also override `--bdc-color_active` / `--bdc-color_on-active`
571
+ once to retheme every component's active state at the same time — see Theming below.
554
572
 
555
573
  ---
556
574
 
@@ -563,28 +581,31 @@ retheme all components at once:
563
581
  /* tokens.config.css — import after the design system CSS */
564
582
  @layer boostdev.tokens.override {
565
583
  :root {
566
- --bds-cta: var(--bds-BASE__color--orange);
567
- --bds-on-cta: var(--bds-BASE__color--white);
568
- --bds-interactive: var(--bds-BASE__color--orange);
584
+ --bds-color_interactive: var(--bds-color_orange);
585
+ --bds-color_on-interactive: var(--bds-color_white);
569
586
  }
570
587
  }
571
588
  ```
572
589
 
590
+ On foundation `>=2.2.0`, prefer the named role tokens (`--bds-color_primary`, `--bds-color_secondary`,
591
+ `--bds-color_accent-1..3`, each with `--subtle`/`--strong` steps and `on-` pairs) over the deprecated
592
+ hue names (`--bds-color_blue`, `--bds-color_green`, `--bds-color_orange`) for new theming work. Raised
593
+ surfaces — cards, dialogs, drawers, popovers, dropdown panels, toasts — use `--bds-color_bg--strong`,
594
+ which matches `--bds-color_bg` in light mode but steps up to a distinct tone in dark mode for visible
595
+ separation from the page.
596
+
573
597
  ### Active state tokens
574
598
 
575
- The `--bds-active` family controls the checked/filled/selected colour across all form controls
576
- and progress indicators. Override it once to retheme checkboxes, radio buttons, sliders, progress
577
- bars, and the switch thumb simultaneously:
599
+ The `--bdc-color_active` family (defined in `src/css/bdc.css`) controls the checked/filled/selected
600
+ colour across form controls and progress indicators. Override it once to retheme checkboxes, radio
601
+ buttons, sliders, and progress bars simultaneously:
578
602
 
579
603
  ```css
580
604
  @layer boostdev.tokens.override {
581
605
  :root {
582
- --bds-active: var(--bds-BASE__color--blue);
583
- --bds-on-active: var(--bds-BASE__color--white);
584
- --bds-active--subtle: var(--bds-BASE__color--blue--100); /* Switch track */
585
- --bds-on-active--subtle: var(--bds-BASE__color--blue--900);
586
- --bds-active--strong: var(--bds-BASE__color--blue--700); /* Switch thumb */
587
- --bds-on-active--strong: var(--bds-BASE__color--white);
606
+ --bdc-color_active: var(--bds-color_blue);
607
+ --bdc-color_on-active: var(--bds-color_white);
608
+ --bdc-color_active--subtle: var(--bds-color_blue--subtle); /* Switch track */
588
609
  }
589
610
  }
590
611
  ```
@@ -600,7 +621,7 @@ pnpm build # compile to dist/
600
621
  pnpm typecheck # TypeScript check (library code only)
601
622
  pnpm lint # ESLint
602
623
  pnpm lint:css # Stylelint
603
- pnpm test # Vitest — 1122 tests
624
+ pnpm test # Vitest — runs the full test suite
604
625
  pnpm mcp:start # Start the MCP server locally (http://localhost:3001/api/mcp)
605
626
  pnpm storybook # Storybook dev server on port 6006
606
627
  ```