@d4gger/design-system 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/dist/{components/controlGroup/ControlGroup.cjs → _internal/floatingLayer.cjs} +11 -26
  2. package/dist/_internal/floatingLayer.cjs.map +7 -0
  3. package/dist/_internal/floatingLayer.d.cts +28 -0
  4. package/dist/_internal/floatingLayer.d.cts.map +1 -0
  5. package/dist/_internal/floatingLayer.d.mts +28 -0
  6. package/dist/_internal/floatingLayer.d.mts.map +1 -0
  7. package/dist/_internal/floatingLayer.d.ts +28 -0
  8. package/dist/_internal/floatingLayer.d.ts.map +1 -0
  9. package/dist/_internal/floatingLayer.js +11 -0
  10. package/dist/_internal/floatingLayer.js.map +7 -0
  11. package/dist/components/banner/Banner.cjs +105 -0
  12. package/dist/components/banner/Banner.cjs.map +7 -0
  13. package/dist/components/banner/Banner.d.cts +27 -0
  14. package/dist/components/banner/Banner.d.cts.map +1 -0
  15. package/dist/components/banner/Banner.d.mts +27 -0
  16. package/dist/components/banner/Banner.d.mts.map +1 -0
  17. package/dist/components/banner/Banner.d.ts +27 -0
  18. package/dist/components/banner/Banner.d.ts.map +1 -0
  19. package/dist/components/banner/Banner.js +80 -0
  20. package/dist/components/banner/Banner.js.map +7 -0
  21. package/dist/components/{controlGroup/controlGroup.props.cjs → banner/banner.props.cjs} +23 -16
  22. package/dist/components/banner/banner.props.cjs.map +7 -0
  23. package/dist/components/banner/banner.props.d.cts +32 -0
  24. package/dist/components/banner/banner.props.d.cts.map +1 -0
  25. package/dist/components/banner/banner.props.d.mts +32 -0
  26. package/dist/components/banner/banner.props.d.mts.map +1 -0
  27. package/dist/components/banner/banner.props.d.ts +32 -0
  28. package/dist/components/banner/banner.props.d.ts.map +1 -0
  29. package/dist/components/banner/banner.props.js +27 -0
  30. package/dist/components/banner/banner.props.js.map +7 -0
  31. package/dist/components/banner.css +60 -0
  32. package/dist/components/button-group.css +25 -0
  33. package/dist/components/button.css +9 -0
  34. package/dist/components/card.css +3 -0
  35. package/dist/components/carousel/Carousel.cjs +109 -39
  36. package/dist/components/carousel/Carousel.cjs.map +3 -3
  37. package/dist/components/carousel/Carousel.d.cts.map +1 -1
  38. package/dist/components/carousel/Carousel.d.mts.map +1 -1
  39. package/dist/components/carousel/Carousel.d.ts.map +1 -1
  40. package/dist/components/carousel/Carousel.js +111 -41
  41. package/dist/components/carousel/Carousel.js.map +3 -3
  42. package/dist/components/carousel.css +93 -26
  43. package/dist/components/chart/Chart.cjs +61 -11
  44. package/dist/components/chart/Chart.cjs.map +2 -2
  45. package/dist/components/chart/Chart.d.cts.map +1 -1
  46. package/dist/components/chart/Chart.d.mts.map +1 -1
  47. package/dist/components/chart/Chart.d.ts.map +1 -1
  48. package/dist/components/chart/Chart.js +62 -11
  49. package/dist/components/chart/Chart.js.map +2 -2
  50. package/dist/components/chart.css +10 -1
  51. package/dist/components/checkbox.css +14 -0
  52. package/dist/components/combobox/Combobox.cjs +3 -1
  53. package/dist/components/combobox/Combobox.cjs.map +2 -2
  54. package/dist/components/combobox/Combobox.d.cts.map +1 -1
  55. package/dist/components/combobox/Combobox.d.mts.map +1 -1
  56. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  57. package/dist/components/combobox/Combobox.js +3 -1
  58. package/dist/components/combobox/Combobox.js.map +2 -2
  59. package/dist/components/combobox.css +5 -1
  60. package/dist/components/command/Command.cjs +1 -1
  61. package/dist/components/command/Command.cjs.map +2 -2
  62. package/dist/components/command/Command.js +1 -1
  63. package/dist/components/command/Command.js.map +2 -2
  64. package/dist/components/context-menu.css +1 -1
  65. package/dist/components/copy-field.css +18 -0
  66. package/dist/components/copyField/CopyField.cjs +3 -3
  67. package/dist/components/copyField/CopyField.cjs.map +2 -2
  68. package/dist/components/copyField/CopyField.d.cts.map +1 -1
  69. package/dist/components/copyField/CopyField.d.mts.map +1 -1
  70. package/dist/components/copyField/CopyField.d.ts.map +1 -1
  71. package/dist/components/copyField/CopyField.js +3 -3
  72. package/dist/components/copyField/CopyField.js.map +2 -2
  73. package/dist/components/data-list.css +19 -4
  74. package/dist/components/data-table.css +190 -0
  75. package/dist/components/dataTable/DataTable.cjs +193 -68
  76. package/dist/components/dataTable/DataTable.cjs.map +3 -3
  77. package/dist/components/dataTable/DataTable.d.cts +29 -1
  78. package/dist/components/dataTable/DataTable.d.cts.map +1 -1
  79. package/dist/components/dataTable/DataTable.d.mts +29 -1
  80. package/dist/components/dataTable/DataTable.d.mts.map +1 -1
  81. package/dist/components/dataTable/DataTable.d.ts +29 -1
  82. package/dist/components/dataTable/DataTable.d.ts.map +1 -1
  83. package/dist/components/dataTable/DataTable.js +193 -68
  84. package/dist/components/dataTable/DataTable.js.map +2 -2
  85. package/dist/components/dataTable/DataTableContext.cjs +41 -0
  86. package/dist/components/dataTable/DataTableContext.cjs.map +7 -0
  87. package/dist/components/dataTable/DataTableContext.d.cts +23 -0
  88. package/dist/components/dataTable/DataTableContext.d.cts.map +1 -0
  89. package/dist/components/dataTable/DataTableContext.d.mts +23 -0
  90. package/dist/components/dataTable/DataTableContext.d.mts.map +1 -0
  91. package/dist/components/dataTable/DataTableContext.d.ts +23 -0
  92. package/dist/components/dataTable/DataTableContext.d.ts.map +1 -0
  93. package/dist/components/dataTable/DataTableContext.js +11 -0
  94. package/dist/components/dataTable/DataTableContext.js.map +7 -0
  95. package/dist/components/dataTable/DataTablePagination.cjs +72 -47
  96. package/dist/components/dataTable/DataTablePagination.cjs.map +2 -2
  97. package/dist/components/dataTable/DataTablePagination.d.cts +5 -1
  98. package/dist/components/dataTable/DataTablePagination.d.cts.map +1 -1
  99. package/dist/components/dataTable/DataTablePagination.d.mts +5 -1
  100. package/dist/components/dataTable/DataTablePagination.d.mts.map +1 -1
  101. package/dist/components/dataTable/DataTablePagination.d.ts +5 -1
  102. package/dist/components/dataTable/DataTablePagination.d.ts.map +1 -1
  103. package/dist/components/dataTable/DataTablePagination.js +75 -47
  104. package/dist/components/dataTable/DataTablePagination.js.map +2 -2
  105. package/dist/components/dataTable/DataTableToolbar.cjs +122 -93
  106. package/dist/components/dataTable/DataTableToolbar.cjs.map +2 -2
  107. package/dist/components/dataTable/DataTableToolbar.d.cts +6 -5
  108. package/dist/components/dataTable/DataTableToolbar.d.cts.map +1 -1
  109. package/dist/components/dataTable/DataTableToolbar.d.mts +6 -5
  110. package/dist/components/dataTable/DataTableToolbar.d.mts.map +1 -1
  111. package/dist/components/dataTable/DataTableToolbar.d.ts +6 -5
  112. package/dist/components/dataTable/DataTableToolbar.d.ts.map +1 -1
  113. package/dist/components/dataTable/DataTableToolbar.js +123 -94
  114. package/dist/components/dataTable/DataTableToolbar.js.map +2 -2
  115. package/dist/components/dataTable/dataTable.export.cjs +83 -0
  116. package/dist/components/dataTable/dataTable.export.cjs.map +7 -0
  117. package/dist/components/dataTable/dataTable.export.d.cts +11 -0
  118. package/dist/components/dataTable/dataTable.export.d.cts.map +1 -0
  119. package/dist/components/dataTable/dataTable.export.d.mts +11 -0
  120. package/dist/components/dataTable/dataTable.export.d.mts.map +1 -0
  121. package/dist/components/dataTable/dataTable.export.d.ts +11 -0
  122. package/dist/components/dataTable/dataTable.export.d.ts.map +1 -0
  123. package/dist/components/dataTable/dataTable.export.js +63 -0
  124. package/dist/components/dataTable/dataTable.export.js.map +7 -0
  125. package/dist/components/dataTable/dataTable.props.cjs +23 -1
  126. package/dist/components/dataTable/dataTable.props.cjs.map +2 -2
  127. package/dist/components/dataTable/dataTable.props.d.cts +21 -1
  128. package/dist/components/dataTable/dataTable.props.d.cts.map +1 -1
  129. package/dist/components/dataTable/dataTable.props.d.mts +21 -1
  130. package/dist/components/dataTable/dataTable.props.d.mts.map +1 -1
  131. package/dist/components/dataTable/dataTable.props.d.ts +21 -1
  132. package/dist/components/dataTable/dataTable.props.d.ts.map +1 -1
  133. package/dist/components/dataTable/dataTable.props.js +23 -1
  134. package/dist/components/dataTable/dataTable.props.js.map +2 -2
  135. package/dist/components/dialog/Dialog.cjs +2 -1
  136. package/dist/components/dialog/Dialog.cjs.map +2 -2
  137. package/dist/components/dialog/Dialog.d.cts.map +1 -1
  138. package/dist/components/dialog/Dialog.d.mts.map +1 -1
  139. package/dist/components/dialog/Dialog.d.ts.map +1 -1
  140. package/dist/components/dialog/Dialog.js +2 -1
  141. package/dist/components/dialog/Dialog.js.map +2 -2
  142. package/dist/components/dropdown-menu.css +1 -1
  143. package/dist/components/empty-state.css +5 -0
  144. package/dist/components/fileUpload/FileUpload.cjs +10 -1
  145. package/dist/components/fileUpload/FileUpload.cjs.map +2 -2
  146. package/dist/components/fileUpload/FileUpload.d.cts +1 -0
  147. package/dist/components/fileUpload/FileUpload.d.cts.map +1 -1
  148. package/dist/components/fileUpload/FileUpload.d.mts +1 -0
  149. package/dist/components/fileUpload/FileUpload.d.mts.map +1 -1
  150. package/dist/components/fileUpload/FileUpload.d.ts +1 -0
  151. package/dist/components/fileUpload/FileUpload.d.ts.map +1 -1
  152. package/dist/components/fileUpload/FileUpload.js +10 -1
  153. package/dist/components/fileUpload/FileUpload.js.map +2 -2
  154. package/dist/components/filter-bar.css +380 -8
  155. package/dist/components/filterBar/FilterBar.cjs +630 -1
  156. package/dist/components/filterBar/FilterBar.cjs.map +2 -2
  157. package/dist/components/filterBar/FilterBar.d.cts +132 -2
  158. package/dist/components/filterBar/FilterBar.d.cts.map +1 -1
  159. package/dist/components/filterBar/FilterBar.d.mts +132 -2
  160. package/dist/components/filterBar/FilterBar.d.mts.map +1 -1
  161. package/dist/components/filterBar/FilterBar.d.ts +132 -2
  162. package/dist/components/filterBar/FilterBar.d.ts.map +1 -1
  163. package/dist/components/filterBar/FilterBar.js +631 -2
  164. package/dist/components/filterBar/FilterBar.js.map +2 -2
  165. package/dist/components/floating-panel.css +1 -1
  166. package/dist/components/fontProvider/FontProvider.cjs +1 -1
  167. package/dist/components/fontProvider/FontProvider.cjs.map +1 -1
  168. package/dist/components/fontProvider/FontProvider.js +1 -1
  169. package/dist/components/fontProvider/FontProvider.js.map +1 -1
  170. package/dist/components/icon/Icon.cjs +25 -2
  171. package/dist/components/icon/Icon.cjs.map +2 -2
  172. package/dist/components/icon/Icon.d.cts +29 -1
  173. package/dist/components/icon/Icon.d.cts.map +1 -1
  174. package/dist/components/icon/Icon.d.mts +29 -1
  175. package/dist/components/icon/Icon.d.mts.map +1 -1
  176. package/dist/components/icon/Icon.d.ts +29 -1
  177. package/dist/components/icon/Icon.d.ts.map +1 -1
  178. package/dist/components/icon/Icon.js +33 -2
  179. package/dist/components/icon/Icon.js.map +2 -2
  180. package/dist/components/icon/icons.cjs +16 -0
  181. package/dist/components/icon/icons.cjs.map +2 -2
  182. package/dist/components/icon/icons.d.cts +40 -0
  183. package/dist/components/icon/icons.d.cts.map +1 -1
  184. package/dist/components/icon/icons.d.mts +40 -0
  185. package/dist/components/icon/icons.d.mts.map +1 -1
  186. package/dist/components/icon/icons.d.ts +40 -0
  187. package/dist/components/icon/icons.d.ts.map +1 -1
  188. package/dist/components/icon/icons.js +16 -0
  189. package/dist/components/icon/icons.js.map +2 -2
  190. package/dist/components/icon-button.css +29 -0
  191. package/dist/components/index.cjs +1 -1
  192. package/dist/components/index.cjs.map +2 -2
  193. package/dist/components/index.d.cts +1 -1
  194. package/dist/components/index.d.cts.map +1 -1
  195. package/dist/components/index.d.mts +1 -1
  196. package/dist/components/index.d.mts.map +1 -1
  197. package/dist/components/index.d.ts +1 -1
  198. package/dist/components/index.d.ts.map +1 -1
  199. package/dist/components/index.js +1 -1
  200. package/dist/components/index.js.map +1 -1
  201. package/dist/components/item/Item.cjs +1 -1
  202. package/dist/components/item/Item.cjs.map +2 -2
  203. package/dist/components/item/Item.js +1 -1
  204. package/dist/components/item/Item.js.map +2 -2
  205. package/dist/components/item.css +12 -1
  206. package/dist/components/marquee/Marquee.cjs +1 -1
  207. package/dist/components/marquee/Marquee.cjs.map +2 -2
  208. package/dist/components/marquee/Marquee.js +1 -1
  209. package/dist/components/marquee/Marquee.js.map +2 -2
  210. package/dist/components/marquee.css +6 -0
  211. package/dist/components/menu/Menu.cjs +3 -1
  212. package/dist/components/menu/Menu.cjs.map +2 -2
  213. package/dist/components/menu/Menu.d.cts.map +1 -1
  214. package/dist/components/menu/Menu.d.mts.map +1 -1
  215. package/dist/components/menu/Menu.d.ts.map +1 -1
  216. package/dist/components/menu/Menu.js +3 -1
  217. package/dist/components/menu/Menu.js.map +2 -2
  218. package/dist/components/menubar.css +1 -1
  219. package/dist/components/metric.css +5 -0
  220. package/dist/components/pagination/Pagination.cjs +143 -17
  221. package/dist/components/pagination/Pagination.cjs.map +2 -2
  222. package/dist/components/pagination/Pagination.d.cts +64 -4
  223. package/dist/components/pagination/Pagination.d.cts.map +1 -1
  224. package/dist/components/pagination/Pagination.d.mts +64 -4
  225. package/dist/components/pagination/Pagination.d.mts.map +1 -1
  226. package/dist/components/pagination/Pagination.d.ts +64 -4
  227. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  228. package/dist/components/pagination/Pagination.js +143 -17
  229. package/dist/components/pagination/Pagination.js.map +2 -2
  230. package/dist/components/pagination.css +50 -8
  231. package/dist/components/phoneInput/PhoneInput.cjs +18 -13
  232. package/dist/components/phoneInput/PhoneInput.cjs.map +2 -2
  233. package/dist/components/phoneInput/PhoneInput.d.cts.map +1 -1
  234. package/dist/components/phoneInput/PhoneInput.d.mts.map +1 -1
  235. package/dist/components/phoneInput/PhoneInput.d.ts.map +1 -1
  236. package/dist/components/phoneInput/PhoneInput.js +19 -14
  237. package/dist/components/phoneInput/PhoneInput.js.map +2 -2
  238. package/dist/components/popover/Popover.cjs +2 -1
  239. package/dist/components/popover/Popover.cjs.map +2 -2
  240. package/dist/components/popover/Popover.d.cts.map +1 -1
  241. package/dist/components/popover/Popover.d.mts.map +1 -1
  242. package/dist/components/popover/Popover.d.ts.map +1 -1
  243. package/dist/components/popover/Popover.js +2 -1
  244. package/dist/components/popover/Popover.js.map +2 -2
  245. package/dist/components/prose.css +1 -1
  246. package/dist/components/qr-code.css +5 -15
  247. package/dist/components/radio-group.css +19 -0
  248. package/dist/components/radioGroup/RadioGroup.cjs +3 -2
  249. package/dist/components/radioGroup/RadioGroup.cjs.map +2 -2
  250. package/dist/components/radioGroup/RadioGroup.d.cts.map +1 -1
  251. package/dist/components/radioGroup/RadioGroup.d.mts.map +1 -1
  252. package/dist/components/radioGroup/RadioGroup.d.ts.map +1 -1
  253. package/dist/components/radioGroup/RadioGroup.js +3 -2
  254. package/dist/components/radioGroup/RadioGroup.js.map +2 -2
  255. package/dist/components/radioGroup/radioGroup.props.cjs +1 -1
  256. package/dist/components/radioGroup/radioGroup.props.cjs.map +2 -2
  257. package/dist/components/radioGroup/radioGroup.props.d.cts +1 -1
  258. package/dist/components/radioGroup/radioGroup.props.d.mts +1 -1
  259. package/dist/components/radioGroup/radioGroup.props.d.ts +1 -1
  260. package/dist/components/radioGroup/radioGroup.props.js +1 -1
  261. package/dist/components/radioGroup/radioGroup.props.js.map +2 -2
  262. package/dist/components/rating.css +12 -0
  263. package/dist/components/result.css +2 -1
  264. package/dist/components/richTextEditor/RichTextEditor.cjs +11 -3
  265. package/dist/components/richTextEditor/RichTextEditor.cjs.map +2 -2
  266. package/dist/components/richTextEditor/RichTextEditor.d.cts.map +1 -1
  267. package/dist/components/richTextEditor/RichTextEditor.d.mts.map +1 -1
  268. package/dist/components/richTextEditor/RichTextEditor.d.ts.map +1 -1
  269. package/dist/components/richTextEditor/RichTextEditor.js +11 -3
  270. package/dist/components/richTextEditor/RichTextEditor.js.map +2 -2
  271. package/dist/components/segmented-control.css +80 -4
  272. package/dist/components/segmentedControl/SegmentedControl.cjs +18 -5
  273. package/dist/components/segmentedControl/SegmentedControl.cjs.map +2 -2
  274. package/dist/components/segmentedControl/SegmentedControl.d.cts.map +1 -1
  275. package/dist/components/segmentedControl/SegmentedControl.d.mts.map +1 -1
  276. package/dist/components/segmentedControl/SegmentedControl.d.ts.map +1 -1
  277. package/dist/components/segmentedControl/SegmentedControl.js +18 -5
  278. package/dist/components/segmentedControl/SegmentedControl.js.map +2 -2
  279. package/dist/components/segmentedControl/segmentedControl.props.cjs +10 -0
  280. package/dist/components/segmentedControl/segmentedControl.props.cjs.map +2 -2
  281. package/dist/components/segmentedControl/segmentedControl.props.d.cts +9 -0
  282. package/dist/components/segmentedControl/segmentedControl.props.d.cts.map +1 -1
  283. package/dist/components/segmentedControl/segmentedControl.props.d.mts +9 -0
  284. package/dist/components/segmentedControl/segmentedControl.props.d.mts.map +1 -1
  285. package/dist/components/segmentedControl/segmentedControl.props.d.ts +9 -0
  286. package/dist/components/segmentedControl/segmentedControl.props.d.ts.map +1 -1
  287. package/dist/components/segmentedControl/segmentedControl.props.js +10 -0
  288. package/dist/components/segmentedControl/segmentedControl.props.js.map +2 -2
  289. package/dist/components/select/Select.cjs +3 -1
  290. package/dist/components/select/Select.cjs.map +2 -2
  291. package/dist/components/select/Select.d.cts.map +1 -1
  292. package/dist/components/select/Select.d.mts.map +1 -1
  293. package/dist/components/select/Select.d.ts.map +1 -1
  294. package/dist/components/select/Select.js +3 -1
  295. package/dist/components/select/Select.js.map +2 -2
  296. package/dist/components/select.css +1 -1
  297. package/dist/components/sonner.css +1 -1
  298. package/dist/components/sortableList/SortableList.cjs +8 -2
  299. package/dist/components/sortableList/SortableList.cjs.map +2 -2
  300. package/dist/components/sortableList/SortableList.d.cts.map +1 -1
  301. package/dist/components/sortableList/SortableList.d.mts.map +1 -1
  302. package/dist/components/sortableList/SortableList.d.ts.map +1 -1
  303. package/dist/components/sortableList/SortableList.js +8 -2
  304. package/dist/components/sortableList/SortableList.js.map +2 -2
  305. package/dist/components/stat-card.css +2 -0
  306. package/dist/components/table/Table.cjs +3 -2
  307. package/dist/components/table/Table.cjs.map +2 -2
  308. package/dist/components/table/Table.d.cts.map +1 -1
  309. package/dist/components/table/Table.d.mts.map +1 -1
  310. package/dist/components/table/Table.d.ts.map +1 -1
  311. package/dist/components/table/Table.js +3 -2
  312. package/dist/components/table/Table.js.map +2 -2
  313. package/dist/components/table/table.props.cjs +6 -0
  314. package/dist/components/table/table.props.cjs.map +2 -2
  315. package/dist/components/table/table.props.d.cts +5 -0
  316. package/dist/components/table/table.props.d.cts.map +1 -1
  317. package/dist/components/table/table.props.d.mts +5 -0
  318. package/dist/components/table/table.props.d.mts.map +1 -1
  319. package/dist/components/table/table.props.d.ts +5 -0
  320. package/dist/components/table/table.props.d.ts.map +1 -1
  321. package/dist/components/table/table.props.js +6 -0
  322. package/dist/components/table/table.props.js.map +2 -2
  323. package/dist/components/table.css +20 -13
  324. package/dist/components/tabs.css +10 -0
  325. package/dist/components/timeline.css +54 -18
  326. package/dist/components/toast.css +33 -1
  327. package/dist/components/toggle-group.css +5 -0
  328. package/dist/components.css +1 -2
  329. package/dist/docs/README.md +1 -1
  330. package/dist/docs/component-contract.md +4 -4
  331. package/dist/docs/component-index.json +9 -9
  332. package/dist/docs/components/banner.md +152 -0
  333. package/dist/docs/components/button-group.md +4 -3
  334. package/dist/docs/components/button.md +2 -2
  335. package/dist/docs/components/card.md +1 -0
  336. package/dist/docs/components/carousel.md +55 -32
  337. package/dist/docs/components/chart.md +25 -7
  338. package/dist/docs/components/checkbox.md +4 -0
  339. package/dist/docs/components/combobox.md +3 -1
  340. package/dist/docs/components/command.md +2 -2
  341. package/dist/docs/components/copy-field.md +2 -2
  342. package/dist/docs/components/data-list.md +15 -3
  343. package/dist/docs/components/data-table.md +98 -17
  344. package/dist/docs/components/dialog.md +4 -0
  345. package/dist/docs/components/dropdown-menu.md +2 -1
  346. package/dist/docs/components/empty-state.md +3 -1
  347. package/dist/docs/components/file-upload.md +1 -0
  348. package/dist/docs/components/filter-bar.md +193 -8
  349. package/dist/docs/components/floating-panel.md +8 -8
  350. package/dist/docs/components/icon-button.md +4 -1
  351. package/dist/docs/components/item.md +18 -13
  352. package/dist/docs/components/marquee.md +2 -2
  353. package/dist/docs/components/menu.md +4 -1
  354. package/dist/docs/components/metric.md +4 -1
  355. package/dist/docs/components/pagination.md +88 -17
  356. package/dist/docs/components/pills.md +1 -1
  357. package/dist/docs/components/popover.md +2 -0
  358. package/dist/docs/components/prose.md +5 -1
  359. package/dist/docs/components/qr-code.md +14 -13
  360. package/dist/docs/components/radio-group.md +5 -2
  361. package/dist/docs/components/rating.md +2 -0
  362. package/dist/docs/components/result.md +6 -0
  363. package/dist/docs/components/segmented-control.md +7 -2
  364. package/dist/docs/components/select.md +3 -2
  365. package/dist/docs/components/sidebar.md +3 -1
  366. package/dist/docs/components/sonner.md +1 -1
  367. package/dist/docs/components/sortable-list.md +2 -0
  368. package/dist/docs/components/stat-card.md +5 -4
  369. package/dist/docs/components/stepper.md +1 -0
  370. package/dist/docs/components/table.md +14 -5
  371. package/dist/docs/components/tag.md +4 -2
  372. package/dist/docs/components/timeline.md +9 -5
  373. package/dist/docs/components/toast.md +1 -1
  374. package/dist/docs/components/toggle-group.md +2 -1
  375. package/dist/fonts.css +1 -1
  376. package/dist/generated/tokens.cjs +1 -1
  377. package/dist/generated/tokens.cjs.map +1 -1
  378. package/dist/generated/tokens.js +1 -1
  379. package/dist/generated/tokens.js.map +1 -1
  380. package/dist/motion.css +18 -3
  381. package/dist/styles.css +1249 -292
  382. package/dist/tokens.css +21 -15
  383. package/package.json +1 -1
  384. package/dist/components/control-group.css +0 -142
  385. package/dist/components/controlGroup/ControlGroup.cjs.map +0 -7
  386. package/dist/components/controlGroup/ControlGroup.d.cts +0 -16
  387. package/dist/components/controlGroup/ControlGroup.d.cts.map +0 -1
  388. package/dist/components/controlGroup/ControlGroup.d.mts +0 -16
  389. package/dist/components/controlGroup/ControlGroup.d.mts.map +0 -1
  390. package/dist/components/controlGroup/ControlGroup.d.ts +0 -16
  391. package/dist/components/controlGroup/ControlGroup.d.ts.map +0 -1
  392. package/dist/components/controlGroup/ControlGroup.js +0 -26
  393. package/dist/components/controlGroup/ControlGroup.js.map +0 -7
  394. package/dist/components/controlGroup/controlGroup.props.cjs.map +0 -7
  395. package/dist/components/controlGroup/controlGroup.props.d.cts +0 -18
  396. package/dist/components/controlGroup/controlGroup.props.d.cts.map +0 -1
  397. package/dist/components/controlGroup/controlGroup.props.d.mts +0 -18
  398. package/dist/components/controlGroup/controlGroup.props.d.mts.map +0 -1
  399. package/dist/components/controlGroup/controlGroup.props.d.ts +0 -18
  400. package/dist/components/controlGroup/controlGroup.props.d.ts.map +0 -1
  401. package/dist/components/controlGroup/controlGroup.props.js +0 -20
  402. package/dist/components/controlGroup/controlGroup.props.js.map +0 -7
  403. package/dist/docs/components/control-group.md +0 -261
@@ -25,6 +25,10 @@
25
25
  border-bottom: 0;
26
26
  }
27
27
 
28
+ .dsx-table__body tr {
29
+ transition: background-color var(--dsx-motion-duration-fast) var(--dsx-motion-easing-standard);
30
+ }
31
+
28
32
  .dsx-table__body tr:hover {
29
33
  background: var(--dsx-effect-hover-ghost);
30
34
  }
@@ -52,10 +56,6 @@
52
56
  font-weight: var(--dsx-typography-label-large-font-weight);
53
57
  }
54
58
 
55
- .dsx-table__row:hover {
56
- background: var(--dsx-color-high-contrast-container);
57
- }
58
-
59
59
  .dsx-table__row:last-child .dsx-table__cell {
60
60
  border-bottom: 0;
61
61
  }
@@ -84,7 +84,14 @@
84
84
  }
85
85
 
86
86
  .dsx-table[data-variant='ghost'] .dsx-table__row:hover {
87
- background: var(--dsx-color-high-contrast-container);
87
+ background: var(--dsx-effect-hover-ghost);
88
+ }
89
+
90
+ /* ---- separator ---- */
91
+
92
+ .dsx-table[data-separator='grid'] .dsx-table__head:not(:last-child),
93
+ .dsx-table[data-separator='grid'] .dsx-table__cell:not(:last-child) {
94
+ border-right: var(--dsx-border-width-sm) solid var(--dsx-color-outline);
88
95
  }
89
96
 
90
97
  /* ---- layout ---- */
@@ -112,16 +119,16 @@
112
119
 
113
120
  /* ---- cell justify ---- */
114
121
 
115
- .dsx-table__cell[data-justify='start'] {
116
- justify-content: flex-start;
122
+ .dsx-table .dsx-table__cell[data-justify='start'] {
123
+ text-align: start;
117
124
  }
118
125
 
119
- .dsx-table__cell[data-justify='center'] {
120
- justify-content: center;
126
+ .dsx-table .dsx-table__cell[data-justify='center'] {
127
+ text-align: center;
121
128
  }
122
129
 
123
- .dsx-table__cell[data-justify='end'] {
124
- justify-content: flex-end;
130
+ .dsx-table .dsx-table__cell[data-justify='end'] {
131
+ text-align: end;
125
132
  }
126
133
 
127
134
  /* ---- cell width ---- */
@@ -158,12 +165,12 @@
158
165
  /* ---- column header cell ---- */
159
166
 
160
167
  .dsx-table__column-header-cell {
161
- cursor: pointer;
162
- user-select: none;
168
+ cursor: default;
163
169
  }
164
170
 
165
171
  .dsx-table__column-header-cell[data-sortable='true'] {
166
172
  cursor: pointer;
173
+ user-select: none;
167
174
  }
168
175
 
169
176
  .dsx-table__column-header-cell[data-sorted='asc']::after,
@@ -5,6 +5,13 @@
5
5
  display: inline-flex;
6
6
  align-items: center;
7
7
  width: fit-content;
8
+ /* Narrow-container rule: cap at the container and scroll internally —
9
+ same containment as the segmented-control/button/toggle-group family.
10
+ A 5-tab strip wider than a 320px viewport scrolls instead of bleeding
11
+ with unreachable tabs. No visual change at widths that fit. */
12
+ min-width: 0;
13
+ max-width: 100%;
14
+ overflow-x: auto;
8
15
  border-bottom: var(--dsx-border-width-md, var(--dsx-border-width-sm)) solid var(--dsx-control-separator-color);
9
16
  gap: var(--dsx-space-xs);
10
17
  }
@@ -22,6 +29,9 @@
22
29
  display: inline-flex;
23
30
  align-items: center;
24
31
  justify-content: center;
32
+ /* Never compress inside the scrolled list — labels would truncate
33
+ otherwise. No effect in roomy containers. */
34
+ flex-shrink: 0;
25
35
  padding: var(--dsx-space-sm) var(--dsx-space-md);
26
36
  border: 0;
27
37
  border-radius: var(--dsx-rounded-md);
@@ -4,6 +4,8 @@
4
4
  display: flex;
5
5
  flex-direction: column;
6
6
  box-sizing: border-box;
7
+ min-width: 0;
8
+ max-width: 100%;
7
9
  }
8
10
 
9
11
  .dsx-timeline--left {
@@ -17,6 +19,8 @@
17
19
  .dsx-timeline__item {
18
20
  display: flex;
19
21
  position: relative;
22
+ min-width: 0;
23
+ max-width: 100%;
20
24
  }
21
25
 
22
26
  .dsx-timeline--left .dsx-timeline__item {
@@ -24,36 +28,49 @@
24
28
  gap: var(--dsx-space-lg);
25
29
  }
26
30
 
31
+ /* Alternate variant: centered dot-column spine with parity-split content.
32
+ Shares Stepper's vertical rail engine (see stepper.css
33
+ `.dsx-stepper--vertical .dsx-stepper__item:not(:last-child)::after`): the
34
+ connector is item-local, anchored at the marker bottom (`top` = marker
35
+ size) and stretched to the item bottom (`bottom: 0`), centered on the dot
36
+ column via `calc(marker-size / 2 - rail-width / 2)`. Timeline keeps its own
37
+ Connector DOM node (Stepper draws via ::after and hides its Separator) and
38
+ its own rail width (`--dsx-border-width-sm`); the geometry recipe is shared,
39
+ the slot API and ARIA roles stay distinct. Keep in sync with stepper.css. */
27
40
  .dsx-timeline--alternate .dsx-timeline__item {
28
- flex-direction: row;
41
+ display: grid;
42
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
43
+ column-gap: var(--dsx-space-lg);
29
44
  width: 100%;
30
45
  }
31
46
 
32
- /* Zigzag: even items flip marker/content to the opposite side. This is a
33
- per-item flip, not a shared centered spine — the connector position is
34
- re-anchored to the marker's new (right) edge to match.
35
- :nth-child()/[data-size] are wrapped in :where() so these rules tie the
36
- file's pre-existing (0,3,0) ceiling on source order instead of exceeding
37
- it — same technique as the V-2 card-selection fix. */
38
- .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(even)) {
39
- flex-direction: row-reverse;
47
+ /* Parity split: the 1fr tracks exist without any spacer element, so equal
48
+ fr shares keep the marker exactly on the centerline in both parities.
49
+ Odd items read content-left, even items read content-right. */
50
+ .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(odd)) .dsx-timeline__content {
51
+ grid-column: 1;
52
+ grid-row: 1;
53
+ text-align: right;
40
54
  }
41
55
 
42
- .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__content {
43
- text-align: right;
56
+ .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(odd)) .dsx-timeline__marker {
57
+ grid-column: 2;
58
+ grid-row: 1;
44
59
  }
45
60
 
46
- .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__connector {
47
- left: auto;
48
- right: calc(var(--dsx-size-md) / 2 - var(--dsx-border-width-sm) / 2);
61
+ .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__marker {
62
+ grid-column: 2;
63
+ grid-row: 1;
49
64
  }
50
65
 
51
- .dsx-timeline--alternate:where([data-size='sm']) .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__connector {
52
- right: calc(var(--dsx-size-sm) / 2 - var(--dsx-border-width-sm) / 2);
66
+ .dsx-timeline--alternate .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__content {
67
+ grid-column: 3;
68
+ grid-row: 1;
69
+ text-align: left;
53
70
  }
54
71
 
55
- .dsx-timeline--alternate:where([data-size='lg']) .dsx-timeline__item:where(:nth-child(even)) .dsx-timeline__connector {
56
- right: calc(var(--dsx-size-lg) / 2 - var(--dsx-border-width-sm) / 2);
72
+ .dsx-timeline--alternate .dsx-timeline__content {
73
+ min-width: 0;
57
74
  }
58
75
 
59
76
  .dsx-timeline__marker {
@@ -94,6 +111,19 @@
94
111
  top: var(--dsx-size-lg);
95
112
  }
96
113
 
114
+ /* Centered spine: the connector runs down the item's vertical centerline,
115
+ which is the marker center because both halves are equal flex: 1. `top`
116
+ still follows the marker size via the base size rules above — only the
117
+ horizontal anchor is overridden here. Specificity (0,3,0) ties the base
118
+ size rules, so this block must stay after them in source order. */
119
+ .dsx-timeline--alternate[data-size='sm'] .dsx-timeline__connector,
120
+ .dsx-timeline--alternate[data-size='md'] .dsx-timeline__connector,
121
+ .dsx-timeline--alternate:not([data-size]) .dsx-timeline__connector,
122
+ .dsx-timeline--alternate[data-size='lg'] .dsx-timeline__connector {
123
+ left: calc(50% - var(--dsx-border-width-sm) / 2);
124
+ right: auto;
125
+ }
126
+
97
127
  .dsx-timeline__item--active .dsx-timeline__marker {
98
128
  border-color: var(--dsx-color-primary);
99
129
  background: var(--dsx-color-primary);
@@ -123,11 +153,17 @@
123
153
  background: var(--dsx-color-primary);
124
154
  }
125
155
 
156
+ .dsx-timeline__item--error .dsx-timeline__connector {
157
+ background: var(--dsx-color-error);
158
+ }
159
+
126
160
  .dsx-timeline__content {
127
161
  display: flex;
128
162
  flex-direction: column;
129
163
  gap: var(--dsx-space-2xs);
130
164
  flex: 1;
165
+ min-width: 0;
166
+ overflow-wrap: anywhere;
131
167
  padding-bottom: var(--dsx-space-lg);
132
168
  }
133
169
 
@@ -32,7 +32,39 @@
32
32
  background-color: var(--dsx-color-surface);
33
33
  border-radius: var(--dsx-rounded-md);
34
34
  border: var(--dsx-border-width-sm) solid var(--dsx-color-outline);
35
- box-shadow: var(--dsx-shadow-elevation-2);
35
+ box-shadow: var(--dsx-shadow-elevation-5); /* Spotlight (B4 Q3): below dialogs, above all menus */
36
+ }
37
+
38
+ /* Predetermined slot placement for action-bearing toasts: without it all
39
+ four slots land as flex siblings in one row, so title + description sit
40
+ side by side and squeeze the action (destructive story). Text stacks in
41
+ column one, action pins center-right, close top-right — no consumer
42
+ wrapper needed. Action-less toasts keep the flex row above untouched. */
43
+ .dsx-toast:has(.dsx-toast__action) {
44
+ display: grid;
45
+ grid-template-columns: minmax(0, 1fr) auto auto;
46
+ grid-template-areas:
47
+ "title action close"
48
+ "description action close";
49
+ align-items: center;
50
+ }
51
+
52
+ .dsx-toast:has(.dsx-toast__action) .dsx-toast__title {
53
+ grid-area: title;
54
+ }
55
+
56
+ .dsx-toast:has(.dsx-toast__action) .dsx-toast__description {
57
+ grid-area: description;
58
+ }
59
+
60
+ .dsx-toast:has(.dsx-toast__action) .dsx-toast__action {
61
+ grid-area: action;
62
+ align-self: center;
63
+ }
64
+
65
+ .dsx-toast:has(.dsx-toast__action) .dsx-toast__close {
66
+ grid-area: close;
67
+ align-self: start;
36
68
  }
37
69
 
38
70
  .dsx-toast[data-variant='success'] {
@@ -6,6 +6,11 @@
6
6
  align-items: stretch;
7
7
  gap: 0;
8
8
  isolation: isolate;
9
+ /* Narrow-container rule (TMA re-audit 2026-09-23): the fused frame cannot
10
+ wrap, so cap at the container and scroll instead of hard-clipping the
11
+ last item on 320px screens. */
12
+ max-width: 100%;
13
+ overflow-x: auto;
9
14
  }
10
15
 
11
16
  .dsx-toggle-group__item {
@@ -8,13 +8,13 @@
8
8
  @import 'components/aspect-ratio.css';
9
9
  @import 'components/avatar.css';
10
10
  @import 'components/badge.css';
11
+ @import 'components/banner.css';
11
12
  @import 'components/button.css';
12
13
  @import 'components/card.css';
13
14
  @import 'components/carousel.css';
14
15
  @import 'components/checkbox.css';
15
16
  @import 'components/checkbox-cards.css';
16
17
  @import 'components/checkbox-group.css';
17
- @import 'components/control-group.css';
18
18
  @import 'components/context-menu.css';
19
19
  @import 'components/color-picker.css';
20
20
  @import 'components/color-swatch.css';
@@ -158,7 +158,6 @@
158
158
  .dsx-date-picker__trigger,
159
159
  .dsx-theme,
160
160
  .dsx-input-group,
161
- .dsx-control-group,
162
161
  .dsx-item,
163
162
  .dsx-kbd,
164
163
  .dsx-calendar,
@@ -70,6 +70,7 @@ They describe public intent and contracts; TypeScript declarations remain the ex
70
70
  - [Alert](./components/alert.md)
71
71
  - [AlertDialog](./components/alert-dialog.md)
72
72
  - [ArticleNodes](./components/article-nodes.md)
73
+ - [Banner](./components/banner.md)
73
74
  - [Breadcrumb](./components/breadcrumb.md)
74
75
  - [ButtonGroup](./components/button-group.md)
75
76
  - [Calendar](./components/calendar.md)
@@ -86,7 +87,6 @@ They describe public intent and contracts; TypeScript declarations remain the ex
86
87
  - [Command](./components/command.md)
87
88
  - [CommentThread](./components/comment-thread.md)
88
89
  - [ContextMenu](./components/context-menu.md)
89
- - [ControlGroup](./components/control-group.md)
90
90
  - [CopyField](./components/copy-field.md)
91
91
  - [DataList](./components/data-list.md)
92
92
  - [DataTable](./components/data-table.md)
@@ -47,6 +47,7 @@ from the closest RT category (see legend).
47
47
  | AspectRatio | RT AspectRatio | — | — | — | — | — | Layout utility |
48
48
  | Avatar | RT Avatar | ✓ | ✓ | ✓ | ✓ | ✓ | Full set |
49
49
  | Badge | RT Badge | ✓ | ✓ | ✓ | ✓ | ✓ | Full set |
50
+ | Banner | Custom → none | ✓ | — | — | — | — | Hero mass; wash/fill variant |
50
51
  | Blockquote | RT Blockquote | — | — | — | — | — | Typographic; no styling props in RT |
51
52
  | Box | RT Box (layout) | — | — | — | — | — | Layout; no styling attrs |
52
53
  | Breadcrumb | Custom → none | — | ✓ | — | — | — | Size only; no RT counterpart |
@@ -71,7 +72,6 @@ from the closest RT category (see legend).
71
72
  | ConfigDrawer | Custom → none | — | — | — | — | — | Configuration UI; no data-* styling |
72
73
  | Container | RT Container | — | ✓ | — | — | — | Layout; size only in RT |
73
74
  | ContextMenu | Primitive → Dialog | — | ✓ | — | — | — | Content size by Dialog analogy |
74
- | ControlGroup | Custom → InputGroup/ButtonGroup | — | ✓ | — | ✓ | — | Wraps unlike controls (Select, ToggleGroup, Button); size + radius only, no variant/accent/high-contrast of its own |
75
75
  | CopyButton | Custom → Button | ✓ | ✓ | ✓ | ✓ | ✓ | Button clone; full contract |
76
76
  | CopyField | Custom → TextField | — | ✓ | — | — | — | Read-only field composition; size only on the root |
77
77
  | DataList | RT DataList | ✓ | ✓ | — | — | — | RT DataList: variant+size, no C/R/H |
@@ -86,7 +86,7 @@ from the closest RT category (see legend).
86
86
  | EmptyState | Custom → none | ✓ | ✓ | — | — | — | Size + variant (`default`/`unavailable`) |
87
87
  | Field | Custom → none | — | ✓ | — | — | — | Form field wrapper; size only |
88
88
  | FileUpload | Custom → TextField | — | ✓ | — | — | — | Input-like; size only |
89
- | FilterBar | Custom → none | — | ✓ | — | — | — | Toolbar composition; size only on the root |
89
+ | FilterBar | Custom → none | — | ✓ | — | — | — | Toolbar composition; size only on the root (Rules/Rule/Builder/Search write no V/C/R/H attrs) |
90
90
  | Flex | RT Flex (layout) | — | — | — | — | — | Layout; no styling attrs |
91
91
  | FloatingPanel | Custom → Card | — | ✓ | — | — | — | Panel; size only |
92
92
  | FontProvider | Utility → none | — | — | — | — | — | No styling |
@@ -189,9 +189,9 @@ from the closest RT category (see legend).
189
189
  | V+S | Card, DataList, NativeSelect, SegmentedControl, Select, StatCard, Table, TabNav, Tabs, Toast | 10 |
190
190
  | S+C+H | Heading, Link, Text | 3 |
191
191
  | S+C | SegmentedMeter, Separator, Status | 3 |
192
- | S+R | ControlGroup, InputOtp, ScrollArea | 3 |
192
+ | S+R | InputOtp, ScrollArea | 2 |
193
193
  | S only | AlertDialog, Breadcrumb, ButtonGroup, Calendar (see above), Carousel, CodeInput,<br>ColorPicker, ColorSwatch, Command, Container, ContextMenu, CopyField, DataTable,<br>DatePicker, Dialog, Drawer, DropdownMenu, EmptyState, Field, FileUpload, FilterBar,<br>FloatingPanel, HoverCard, Icon, InputGroup, Kbd, Label, Menu, Menubar, Metric,<br>NavigationMenu, Pagination, Popover, QrCode, Section, Sheet, Spinner, Stepper,<br>Timeline, TimePicker, ToggleTip, Toolbar, TreeView | 43 |
194
- | None | AccessibleIcon, Accordion, ArticleNodes, AspectRatio, Blockquote, Box, Chart,<br>Collapsible, CommentThread, ConfigDrawer, DirectionProvider, Em, Flex, FontProvider,<br>Form, Grid, Inset, Item, Marquee, NotificationCenter, PageContent, PageHeader, Prose, Quote,<br>Resizable, Result, RichTextEditor, Sidebar, Skeleton, Slot, Sonner, SortableList, Stack, Strong,<br>TableOfContents, Theme, ThemePanel, ThemeProvider, Tooltip, VisuallyHidden | 40 |
194
+ | None | AccessibleIcon, Accordion, ArticleNodes, AspectRatio, Banner, Blockquote, Box, Chart,<br>Collapsible, CommentThread, ConfigDrawer, DirectionProvider, Em, Flex, FontProvider,<br>Form, Grid, Inset, Item, Marquee, NotificationCenter, PageContent, PageHeader, Prose, Quote,<br>Resizable, Result, RichTextEditor, Sidebar, Skeleton, Slot, Sonner, SortableList, Stack, Strong,<br>TableOfContents, Theme, ThemePanel, ThemeProvider, Tooltip, VisuallyHidden | 41 |
195
195
 
196
196
  **Total components covered: 131**
197
197
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "3.0.0",
3
+ "packageVersion": "3.0.1",
4
4
  "generatedFrom": "docs/design-system",
5
5
  "components": [
6
6
  {
@@ -435,6 +435,14 @@
435
435
  "status": "canonical",
436
436
  "documentation": "./components/article-nodes.md"
437
437
  },
438
+ {
439
+ "name": "Banner",
440
+ "slug": "banner",
441
+ "category": "Components",
442
+ "archetype": "composite",
443
+ "status": "canonical",
444
+ "documentation": "./components/banner.md"
445
+ },
438
446
  {
439
447
  "name": "Breadcrumb",
440
448
  "slug": "breadcrumb",
@@ -563,14 +571,6 @@
563
571
  "status": "canonical",
564
572
  "documentation": "./components/context-menu.md"
565
573
  },
566
- {
567
- "name": "ControlGroup",
568
- "slug": "control-group",
569
- "category": "Components",
570
- "archetype": "composite",
571
- "status": "canonical",
572
- "documentation": "./components/control-group.md"
573
- },
574
574
  {
575
575
  "name": "CopyField",
576
576
  "slug": "copy-field",
@@ -0,0 +1,152 @@
1
+ ---
2
+ title: Banner
3
+ status: canonical
4
+ category: Components
5
+ archetype: composite
6
+ depends_on:
7
+ - Text
8
+ ---
9
+
10
+ # Banner
11
+
12
+ Examples keep the headline value numeric and put units in Label or Footnote, preserving readable hero typography at narrow widths. Arbitrary consumer text still wraps within the surface.
13
+
14
+ > Consumer note: this document describes public intent and contracts; the package TypeScript declarations are the exact API.
15
+
16
+ ## Purpose
17
+
18
+ A hero mass: one label, one headline value, and an optional footnote over an accent wash or solid accent fill. A single mass by construction — it replaces Card-plus-StatCard nesting, which double-frames.
19
+
20
+ ## Anatomy & slots
21
+
22
+ **Parent:** `Banner` (alias of `Banner.Root`).
23
+
24
+ **Slots:**
25
+
26
+ | Slot | Element | Renders | Notes |
27
+ |---|---|---|---|
28
+ | `Banner.Root` | `<section>` | Hero surface + class | `role="group"`, consumer `aria-label`. Writes `dsx-banner`. Supports `asChild`. |
29
+ | `Banner.Label` | `<span>` | Uppercase muted label + class | Renders `Text` label-small. Writes `dsx-banner__label`. |
30
+ | `Banner.Value` | `<span>` | Headline value + class | Uses a span with the display-medium token ramp. Writes `dsx-banner__value`. |
31
+ | `Banner.Footnote` | `<span>` | Muted footnote + class | Renders `Text` body-small. Writes `dsx-banner__footnote`. Optional. |
32
+
33
+ ## Props contract
34
+
35
+ | Prop | Type | Default | Required | Description | Responsive |
36
+ |---|---|---|---|---|---|
37
+ | `variant` | `'wash' \| 'fill'` | `'wash'` | no | Hero treatment; writes `data-variant`. `fill` is the solid-accent mass reusing Button primary's compliance (`accent-track` + `accent-contrast`). | no |
38
+ | `asChild` | `boolean` | `false` | no | Renders the root through `Slot`; consumer supplies the host element. | no |
39
+ | `className` | `string` | `undefined` | no | Extra classes appended to `dsx-banner`. | no |
40
+
41
+ Rules:
42
+
43
+ - Slots take no props besides `asChild` and `className`; all copy is children.
44
+ - `variant="wash"` is the default; `variant="fill"` uses accent-track and accent-contrast. There are no size or tone variants.
45
+ - Long values, identifiers, and footnotes wrap within the available width; content is never silently truncated.
46
+
47
+ ## CSS class contract
48
+
49
+ **Root class:** `dsx-banner`
50
+
51
+ **Slot classes:**
52
+
53
+ | Slot | Class | CSS file |
54
+ |---|---|---|
55
+ | `Banner.Root` | `dsx-banner` | `banner.css` |
56
+ | `Banner.Label` | `dsx-banner__label` | `banner.css` |
57
+ | `Banner.Value` | `dsx-banner__value` | `banner.css` |
58
+ | `Banner.Footnote` | `dsx-banner__footnote` | `banner.css` |
59
+
60
+ The enum PropDef emits `dsx-banner-variant-wash` / `dsx-banner-variant-fill`; the fill alias shares the data-variant paint rules.
61
+
62
+ **Responsive behavior:**
63
+
64
+ - The component does not write `@media` rules.
65
+
66
+ ## Token mapping
67
+
68
+ Every CSS value the component paints is a `var(--dsx-*)` token.
69
+
70
+ | Property | Token | Role |
71
+ |---|---|---|
72
+ | Root background | `var(--dsx-color-accent-surface)` | Hero wash (wash variant) |
73
+ | Fill background | `var(--dsx-color-accent-track)` | Solid accent mass (fill variant) |
74
+ | Fill text | `var(--dsx-color-accent-contrast)` | Compliant text on fill (near-black on spark, white elsewhere) |
75
+ | Root radius | `var(--dsx-rounded-lg)` | Hero corner roundness |
76
+ | Root padding | `var(--dsx-space-lg)` | Hero internal spacing |
77
+ | Root gap | `var(--dsx-space-xs)` | Stack rhythm label/value/footnote |
78
+ | Label typography | `var(--dsx-typography-label-small-*)` | Label type scale |
79
+ | Label color | `var(--dsx-color-on-surface-variant)` | Muted label on wash |
80
+ | Value typography | `var(--dsx-typography-display-medium-*)` | Headline value type scale |
81
+ | Value color | `var(--dsx-color-on-surface)` | Value ink on wash |
82
+ | Footnote typography | `var(--dsx-typography-body-small-*)` | Footnote type scale |
83
+ | Footnote color | `var(--dsx-color-on-surface-variant)` | Muted footnote on wash |
84
+
85
+ ## Motion contract
86
+
87
+ None — no transitions, no animation. Pressed/`focus-visible` states do not apply (non-interactive).
88
+
89
+ ## Accessibility
90
+
91
+ **Roles:**
92
+
93
+ - `group` (from `<section>` with consumer `aria-label`).
94
+
95
+ **Naming:**
96
+
97
+ - The Root must have an accessible name via `aria-label` when the hero purpose is not obvious from context.
98
+
99
+ **Color and meaning:**
100
+
101
+ - The wash is decorative; label/value text carries all meaning with `on-surface` contrast.
102
+
103
+ ## Playground demo spec
104
+
105
+ **Default story:**
106
+
107
+ - Renders `Banner` with Label + Value. Asserts the root class is `dsx-banner` and the host element is `SECTION`.
108
+
109
+ **Footnote story:**
110
+
111
+ - Renders with `Banner.Footnote`. Asserts `dsx-banner__footnote` is present.
112
+
113
+ **Variant story:**
114
+
115
+ - Renders with `variant="fill"`. Asserts `data-variant="fill"` and the fill background token.
116
+
117
+ **A11y story:**
118
+
119
+ - Uses `vitest-axe` against the hero. Asserts there are no axe violations.
120
+
121
+ **Props exposed in the playground controls:**
122
+
123
+ `variant`: select (`wash`, `fill`), default `wash`.
124
+
125
+ ## Deliberate divergences (researched, 2026-10-02)
126
+
127
+ Sibling-repo survey (Primer `Banner`/`PageHeader`/`Card`, Radix `Callout`/`Card`, Lobe docs-kit hero, NetBird `AnnouncementBanner`):
128
+
129
+ - **No border, no leading icon.** Status banners pair their wash with a colored border + icon (Primer muted border, Radix accent ring). Banner is a hero mass, not an alert strip — the wash-vs-solid distinction alone carries the hierarchy. If an icon is ever needed, it becomes a new slot, not an ad-hoc child.
130
+ - **Shared display-medium with StatCard.** Real heroes and stat cards share their value scale (Lobe h1 vs feature numbers differ by context, not by component); surface treatment — wash vs solid + shadow — is the differentiator, not type size.
131
+ - **Padding kept symmetric with StatCard (`space-lg`).** Radix tightens Callout below Card; Banner keeps the roomier rhythm because hero values (45 days) run larger than list text. Revisit only with screenshot evidence.
132
+ - **Name vs M2 Banner.** Material's Banner is a top-of-screen informational strip with acknowledgment actions — a different pattern. Ours is the marketing sense (hero banner). The spec's Purpose line is the disambiguator; do not reshape this component toward alert-strip behavior (that is `Callout`).
133
+
134
+ ## Wiring notes
135
+
136
+ **Composes from:**
137
+
138
+ - `Text`: Label (label-small) and Footnote (body-small). Value uses the display-medium token ramp directly.
139
+
140
+ **Used by (planned):**
141
+
142
+ - TMA user-console referral balance hero, home status hero (wash variant), subscription heroes — replacing Card-plus-StatCard nesting in each.
143
+
144
+ **State boundaries:**
145
+
146
+ - Owned by Banner: the wash surface, the label/value/footnote stack, the CSS classes.
147
+ - Owned by the consumer: the copy, the `aria-label`, the surrounding page.
148
+
149
+ **Boundary rules:**
150
+
151
+ - App-owned data: copy, aria-label.
152
+ - DS-owned visuals: wash, radius, padding, slot classes.
@@ -45,7 +45,7 @@ The root renders a `<div role="group">`. Children of the group share the first/l
45
45
  Rules:
46
46
 
47
47
  - `Omit<HTMLAttributes<HTMLDivElement>, ...>` is not applied; the type is a direct extension, so any `<div>` prop is forwarded.
48
- - The component does not own the buttons themselves. The consumer is responsible for sizing each `Button` to match the group's `size` token, and for keyboard semantics on every child.
48
+ - The component does not own the buttons themselves. The group drives children min-height from its own `data-size`; the consumer remains responsible for keyboard semantics on every child.
49
49
 
50
50
  ## CSS class contract
51
51
 
@@ -55,7 +55,7 @@ Rules:
55
55
 
56
56
  | Attribute | Allowed values | Class | CSS file |
57
57
  |---|---|---|---|
58
- | `data-size` | `sm`, `md`, `lg` | `.dsx-button-group[data-size='sm'\|'md'\|'lg']` does not exist today; size is enforced by the children's own `data-size` hooks | `button-group.css` |
58
+ | `data-size` | `sm`, `md`, `lg` | `.dsx-button-group[data-size='sm'\|'md'\|'lg'] > *` sets the matching density min-height token on every direct child, so the three sizes differ without consumer sizing | `button-group.css` |
59
59
  | (variant) | `default`, `outline` | `.dsx-button-group--default`, `.dsx-button-group--outline` | `button-group.css` |
60
60
 
61
61
  **Slot classes:**
@@ -69,6 +69,7 @@ Rules:
69
69
 
70
70
  - The component does not write `@media` rules. None of its prop defs are `responsive: true`. Size and variant are single-value only.
71
71
  - The component's CSS file is breakpoint-agnostic.
72
+ - Narrow containers: the root caps at `max-width: 100%` with `overflow-x: auto` — the fused frame cannot wrap, so an over-wide group scrolls instead of hard-clipping its last action (proven 2026-09-23 in a definite 272px column: group caps at 272, `scrollWidth` 298 reachable by touch scroll).
72
73
 
73
74
  **Reduced motion:**
74
75
 
@@ -94,7 +95,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
94
95
 
95
96
  Rules:
96
97
 
97
- - The component does not paint its own background, border, or shadow. Visual treatment is delegated to the children, which means the group's appearance is fully driven by the `Button` variant chosen for each child.
98
+ - The component paints no background, border, or shadow of its own. In `default`, children render borderless (`border-color: transparent`) for the fused cluster; in `outline`, children keep their own joined borders, which read as the container edge. Beyond that, visual treatment is delegated to the children.
98
99
 
99
100
  ## Motion contract
100
101
 
@@ -61,7 +61,7 @@ Rules:
61
61
  | `data-size` | `sm`, `md`, `lg`, `icon` | `.dsx-button[data-size='sm']` etc. | `button.css` |
62
62
  | `data-radius` | `none`, `sm`, `md`, `lg`, `full` | `.dsx-button[data-radius='none']` etc. | `button.css` |
63
63
  | `data-accent-color` | `rift`, `warp`, `ray` (or any custom string) | `.dsx-button[data-accent-color='...']` (CSS hook) | `button.css` |
64
- | `data-halo` | `true` | `.dsx-button:where([data-variant='primary'])[data-halo='true']` (resting accent ring; hover/active keep it, no shadow morph without it) | `button.css` |
64
+ | `data-halo` | `true` | Resting accent ring on every variant (`.dsx-button:where([data-variant='…'])[data-halo='true']`; hover/active keep it, no shadow morph without it) | `button.css` |
65
65
  | `data-high-contrast` | `true` | `.dsx-button:where([data-variant='primary'])[data-high-contrast='true']` etc. (variant-specific HC overrides) | `button.css` |
66
66
  | `data-loading` | `true` | `.dsx-button[data-loading='true']` | `button.css` (writes to cursor and spinner positioning) |
67
67
  | `data-disabled` | `true` | `.dsx-button[data-disabled='true']` | `button.css` |
@@ -112,7 +112,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
112
112
  | Background (primary) | `var(--dsx-color-accent-track)` | Primary fill (ramp step 9). |
113
113
  | Text (primary) | `var(--dsx-color-accent-contrast)` | Primary text. |
114
114
  | Border (primary) | `var(--dsx-color-accent-track)` | Primary edge. |
115
- | Box shadow (primary) | `var(--dsx-shadow-accent-ring)` | Resting halo — open decision vs the 2026-09-05 remove-halo proposal. |
115
+ | Box shadow (primary) | `var(--dsx-shadow-accent-ring)` | Resting halo — locked 2026-09-22 for every variant (was primary-only; settles the 2026-09-05 remove-halo proposal toward keep-and-extend). |
116
116
  | Box shadow (primary HC) | `var(--dsx-shadow-accent-glow)` | High-contrast primary elevation. |
117
117
  | Background (primary HC) | `var(--dsx-color-accent-indicator)` | High-contrast primary fill. |
118
118
  | Text (primary HC) | `var(--dsx-color-on-high-contrast)` | High-contrast primary text. |
@@ -93,6 +93,7 @@ The normalization is a one-way mapping: `outline` is the only variant that produ
93
93
  **Responsive behavior:**
94
94
 
95
95
  - The component does not write `@media` rules. `size`, `variant`, and `radius` are single-value only.
96
+ - The root can shrink within its parent and is capped at the available width. Unbroken headings and identifiers wrap without truncation; Content and Footer retain their wrapping layout.
96
97
 
97
98
  **Reduced motion:**
98
99