@d4gger/design-system 3.0.1 → 4.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 (502) hide show
  1. package/README.md +19 -0
  2. package/dist/brand-effects.css +5 -3
  3. package/dist/components/accordion.css +9 -2
  4. package/dist/components/alert/Alert.cjs +27 -9
  5. package/dist/components/alert/Alert.cjs.map +2 -2
  6. package/dist/components/alert/Alert.d.cts +6 -0
  7. package/dist/components/alert/Alert.d.cts.map +1 -1
  8. package/dist/components/alert/Alert.d.mts +6 -0
  9. package/dist/components/alert/Alert.d.mts.map +1 -1
  10. package/dist/components/alert/Alert.d.ts +6 -0
  11. package/dist/components/alert/Alert.d.ts.map +1 -1
  12. package/dist/components/alert/Alert.js +28 -10
  13. package/dist/components/alert/Alert.js.map +2 -2
  14. package/dist/components/alert.css +73 -3
  15. package/dist/components/article-nodes.css +16 -1
  16. package/dist/components/articleNodes/ArticleNodes.cjs +46 -5
  17. package/dist/components/articleNodes/ArticleNodes.cjs.map +2 -2
  18. package/dist/components/articleNodes/ArticleNodes.d.cts +7 -3
  19. package/dist/components/articleNodes/ArticleNodes.d.cts.map +1 -1
  20. package/dist/components/articleNodes/ArticleNodes.d.mts +7 -3
  21. package/dist/components/articleNodes/ArticleNodes.d.mts.map +1 -1
  22. package/dist/components/articleNodes/ArticleNodes.d.ts +7 -3
  23. package/dist/components/articleNodes/ArticleNodes.d.ts.map +1 -1
  24. package/dist/components/articleNodes/ArticleNodes.js +46 -5
  25. package/dist/components/articleNodes/ArticleNodes.js.map +2 -2
  26. package/dist/components/articleNodes/articleExtensions.cjs +21 -4
  27. package/dist/components/articleNodes/articleExtensions.cjs.map +2 -2
  28. package/dist/components/articleNodes/articleExtensions.d.cts +8 -2
  29. package/dist/components/articleNodes/articleExtensions.d.cts.map +1 -1
  30. package/dist/components/articleNodes/articleExtensions.d.mts +8 -2
  31. package/dist/components/articleNodes/articleExtensions.d.mts.map +1 -1
  32. package/dist/components/articleNodes/articleExtensions.d.ts +8 -2
  33. package/dist/components/articleNodes/articleExtensions.d.ts.map +1 -1
  34. package/dist/components/articleNodes/articleExtensions.js +21 -4
  35. package/dist/components/articleNodes/articleExtensions.js.map +2 -2
  36. package/dist/components/articleNodes/articleNodeViews.cjs +154 -0
  37. package/dist/components/articleNodes/articleNodeViews.cjs.map +7 -0
  38. package/dist/components/articleNodes/articleNodeViews.d.cts +3 -0
  39. package/dist/components/articleNodes/articleNodeViews.d.cts.map +1 -0
  40. package/dist/components/articleNodes/articleNodeViews.d.mts +3 -0
  41. package/dist/components/articleNodes/articleNodeViews.d.mts.map +1 -0
  42. package/dist/components/articleNodes/articleNodeViews.d.ts +3 -0
  43. package/dist/components/articleNodes/articleNodeViews.d.ts.map +1 -0
  44. package/dist/components/articleNodes/articleNodeViews.js +124 -0
  45. package/dist/components/articleNodes/articleNodeViews.js.map +7 -0
  46. package/dist/components/articleNodes/articleNodes.props.cjs.map +1 -1
  47. package/dist/components/articleNodes/articleNodes.props.d.cts +25 -2
  48. package/dist/components/articleNodes/articleNodes.props.d.cts.map +1 -1
  49. package/dist/components/articleNodes/articleNodes.props.d.mts +25 -2
  50. package/dist/components/articleNodes/articleNodes.props.d.mts.map +1 -1
  51. package/dist/components/articleNodes/articleNodes.props.d.ts +25 -2
  52. package/dist/components/articleNodes/articleNodes.props.d.ts.map +1 -1
  53. package/dist/components/banner.css +5 -4
  54. package/dist/components/blockquote.css +7 -4
  55. package/dist/components/bottom-dock.css +140 -0
  56. package/dist/components/bottomDock/BottomDock.cjs +140 -0
  57. package/dist/components/bottomDock/BottomDock.cjs.map +7 -0
  58. package/dist/components/bottomDock/BottomDock.d.cts +25 -0
  59. package/dist/components/bottomDock/BottomDock.d.cts.map +1 -0
  60. package/dist/components/bottomDock/BottomDock.d.mts +25 -0
  61. package/dist/components/bottomDock/BottomDock.d.mts.map +1 -0
  62. package/dist/components/bottomDock/BottomDock.d.ts +25 -0
  63. package/dist/components/bottomDock/BottomDock.d.ts.map +1 -0
  64. package/dist/components/bottomDock/BottomDock.js +110 -0
  65. package/dist/components/bottomDock/BottomDock.js.map +7 -0
  66. package/dist/components/bottomDock/bottomDock.props.cjs +49 -0
  67. package/dist/components/bottomDock/bottomDock.props.cjs.map +7 -0
  68. package/dist/components/bottomDock/bottomDock.props.d.cts +29 -0
  69. package/dist/components/bottomDock/bottomDock.props.d.cts.map +1 -0
  70. package/dist/components/bottomDock/bottomDock.props.d.mts +29 -0
  71. package/dist/components/bottomDock/bottomDock.props.d.mts.map +1 -0
  72. package/dist/components/bottomDock/bottomDock.props.d.ts +29 -0
  73. package/dist/components/bottomDock/bottomDock.props.d.ts.map +1 -0
  74. package/dist/components/bottomDock/bottomDock.props.js +29 -0
  75. package/dist/components/bottomDock/bottomDock.props.js.map +7 -0
  76. package/dist/components/breadcrumb.css +24 -3
  77. package/dist/components/callout.css +20 -7
  78. package/dist/components/card.css +9 -1
  79. package/dist/components/code.css +29 -13
  80. package/dist/components/collapsible/Collapsible.cjs +14 -0
  81. package/dist/components/collapsible/Collapsible.cjs.map +2 -2
  82. package/dist/components/collapsible/Collapsible.d.cts.map +1 -1
  83. package/dist/components/collapsible/Collapsible.d.mts.map +1 -1
  84. package/dist/components/collapsible/Collapsible.d.ts.map +1 -1
  85. package/dist/components/collapsible/Collapsible.js +14 -0
  86. package/dist/components/collapsible/Collapsible.js.map +2 -2
  87. package/dist/components/collapsible.css +10 -1
  88. package/dist/components/command.css +0 -2
  89. package/dist/components/comment-thread.css +15 -7
  90. package/dist/components/commentThread/CommentThread.cjs +45 -17
  91. package/dist/components/commentThread/CommentThread.cjs.map +2 -2
  92. package/dist/components/commentThread/CommentThread.d.cts +6 -6
  93. package/dist/components/commentThread/CommentThread.d.cts.map +1 -1
  94. package/dist/components/commentThread/CommentThread.d.mts +6 -6
  95. package/dist/components/commentThread/CommentThread.d.mts.map +1 -1
  96. package/dist/components/commentThread/CommentThread.d.ts +6 -6
  97. package/dist/components/commentThread/CommentThread.d.ts.map +1 -1
  98. package/dist/components/commentThread/CommentThread.js +45 -17
  99. package/dist/components/commentThread/CommentThread.js.map +2 -2
  100. package/dist/components/commentThread/commentThread.props.cjs.map +1 -1
  101. package/dist/components/commentThread/commentThread.props.d.cts +24 -0
  102. package/dist/components/commentThread/commentThread.props.d.cts.map +1 -1
  103. package/dist/components/commentThread/commentThread.props.d.mts +24 -0
  104. package/dist/components/commentThread/commentThread.props.d.mts.map +1 -1
  105. package/dist/components/commentThread/commentThread.props.d.ts +24 -0
  106. package/dist/components/commentThread/commentThread.props.d.ts.map +1 -1
  107. package/dist/components/config-drawer.css +7 -3
  108. package/dist/components/configDrawer/ConfigDrawer.cjs +1 -1
  109. package/dist/components/configDrawer/ConfigDrawer.cjs.map +2 -2
  110. package/dist/components/configDrawer/ConfigDrawer.js +1 -1
  111. package/dist/components/configDrawer/ConfigDrawer.js.map +2 -2
  112. package/dist/components/context-menu.css +3 -1
  113. package/dist/components/contextMenu/ContextMenu.cjs +37 -6
  114. package/dist/components/contextMenu/ContextMenu.cjs.map +2 -2
  115. package/dist/components/contextMenu/ContextMenu.d.cts +1 -1
  116. package/dist/components/contextMenu/ContextMenu.d.cts.map +1 -1
  117. package/dist/components/contextMenu/ContextMenu.d.mts +1 -1
  118. package/dist/components/contextMenu/ContextMenu.d.mts.map +1 -1
  119. package/dist/components/contextMenu/ContextMenu.d.ts +1 -1
  120. package/dist/components/contextMenu/ContextMenu.d.ts.map +1 -1
  121. package/dist/components/contextMenu/ContextMenu.js +37 -6
  122. package/dist/components/contextMenu/ContextMenu.js.map +2 -2
  123. package/dist/components/dialog.css +1 -1
  124. package/dist/components/drawer.css +23 -6
  125. package/dist/components/dropdownMenu/DropdownMenu.cjs +10 -5
  126. package/dist/components/dropdownMenu/DropdownMenu.cjs.map +2 -2
  127. package/dist/components/dropdownMenu/DropdownMenu.d.cts.map +1 -1
  128. package/dist/components/dropdownMenu/DropdownMenu.d.mts.map +1 -1
  129. package/dist/components/dropdownMenu/DropdownMenu.d.ts.map +1 -1
  130. package/dist/components/dropdownMenu/DropdownMenu.js +10 -5
  131. package/dist/components/dropdownMenu/DropdownMenu.js.map +2 -2
  132. package/dist/components/environment-ribbon.css +73 -0
  133. package/dist/components/environmentRibbon/EnvironmentRibbon.cjs +69 -0
  134. package/dist/components/environmentRibbon/EnvironmentRibbon.cjs.map +7 -0
  135. package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts +15 -0
  136. package/dist/components/environmentRibbon/EnvironmentRibbon.d.cts.map +1 -0
  137. package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts +15 -0
  138. package/dist/components/environmentRibbon/EnvironmentRibbon.d.mts.map +1 -0
  139. package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts +15 -0
  140. package/dist/components/environmentRibbon/EnvironmentRibbon.d.ts.map +1 -0
  141. package/dist/components/environmentRibbon/EnvironmentRibbon.js +39 -0
  142. package/dist/components/environmentRibbon/EnvironmentRibbon.js.map +7 -0
  143. package/dist/components/environmentRibbon/environmentRibbon.props.cjs +39 -0
  144. package/dist/components/environmentRibbon/environmentRibbon.props.cjs.map +7 -0
  145. package/dist/components/environmentRibbon/environmentRibbon.props.d.cts +18 -0
  146. package/dist/components/environmentRibbon/environmentRibbon.props.d.cts.map +1 -0
  147. package/dist/components/environmentRibbon/environmentRibbon.props.d.mts +18 -0
  148. package/dist/components/environmentRibbon/environmentRibbon.props.d.mts.map +1 -0
  149. package/dist/components/environmentRibbon/environmentRibbon.props.d.ts +18 -0
  150. package/dist/components/environmentRibbon/environmentRibbon.props.d.ts.map +1 -0
  151. package/dist/components/environmentRibbon/environmentRibbon.props.js +19 -0
  152. package/dist/components/environmentRibbon/environmentRibbon.props.js.map +7 -0
  153. package/dist/components/field.css +5 -0
  154. package/dist/components/file-upload.css +36 -9
  155. package/dist/components/floating-panel.css +49 -18
  156. package/dist/components/floatingPanel/FloatingPanel.cjs +156 -58
  157. package/dist/components/floatingPanel/FloatingPanel.cjs.map +2 -2
  158. package/dist/components/floatingPanel/FloatingPanel.d.cts.map +1 -1
  159. package/dist/components/floatingPanel/FloatingPanel.d.mts.map +1 -1
  160. package/dist/components/floatingPanel/FloatingPanel.d.ts.map +1 -1
  161. package/dist/components/floatingPanel/FloatingPanel.js +156 -58
  162. package/dist/components/floatingPanel/FloatingPanel.js.map +2 -2
  163. package/dist/components/grid/Grid.cjs +24 -35
  164. package/dist/components/grid/Grid.cjs.map +2 -2
  165. package/dist/components/grid/Grid.d.cts.map +1 -1
  166. package/dist/components/grid/Grid.d.mts.map +1 -1
  167. package/dist/components/grid/Grid.d.ts.map +1 -1
  168. package/dist/components/grid/Grid.js +24 -35
  169. package/dist/components/grid/Grid.js.map +2 -2
  170. package/dist/components/heading/Heading.cjs +1 -8
  171. package/dist/components/heading/Heading.cjs.map +2 -2
  172. package/dist/components/heading/Heading.d.cts.map +1 -1
  173. package/dist/components/heading/Heading.d.mts.map +1 -1
  174. package/dist/components/heading/Heading.d.ts.map +1 -1
  175. package/dist/components/heading/Heading.js +1 -8
  176. package/dist/components/heading/Heading.js.map +2 -2
  177. package/dist/components/heading/heading.props.cjs +9 -9
  178. package/dist/components/heading/heading.props.cjs.map +2 -2
  179. package/dist/components/heading/heading.props.d.cts +42 -43
  180. package/dist/components/heading/heading.props.d.cts.map +1 -1
  181. package/dist/components/heading/heading.props.d.mts +42 -43
  182. package/dist/components/heading/heading.props.d.mts.map +1 -1
  183. package/dist/components/heading/heading.props.d.ts +42 -43
  184. package/dist/components/heading/heading.props.d.ts.map +1 -1
  185. package/dist/components/heading/heading.props.js +9 -9
  186. package/dist/components/heading/heading.props.js.map +2 -2
  187. package/dist/components/heading.css +127 -104
  188. package/dist/components/hover-card.css +5 -2
  189. package/dist/components/icon/Icon.cjs +19 -0
  190. package/dist/components/icon/Icon.cjs.map +2 -2
  191. package/dist/components/icon/Icon.d.cts +29 -1
  192. package/dist/components/icon/Icon.d.cts.map +1 -1
  193. package/dist/components/icon/Icon.d.mts +29 -1
  194. package/dist/components/icon/Icon.d.mts.map +1 -1
  195. package/dist/components/icon/Icon.d.ts +29 -1
  196. package/dist/components/icon/Icon.d.ts.map +1 -1
  197. package/dist/components/icon/Icon.js +25 -0
  198. package/dist/components/icon/Icon.js.map +2 -2
  199. package/dist/components/icon/icons.cjs +14 -0
  200. package/dist/components/icon/icons.cjs.map +2 -2
  201. package/dist/components/icon/icons.d.cts +35 -0
  202. package/dist/components/icon/icons.d.cts.map +1 -1
  203. package/dist/components/icon/icons.d.mts +35 -0
  204. package/dist/components/icon/icons.d.mts.map +1 -1
  205. package/dist/components/icon/icons.d.ts +35 -0
  206. package/dist/components/icon/icons.d.ts.map +1 -1
  207. package/dist/components/icon/icons.js +14 -0
  208. package/dist/components/icon/icons.js.map +2 -2
  209. package/dist/components/index.cjs +2 -0
  210. package/dist/components/index.cjs.map +2 -2
  211. package/dist/components/index.d.cts +2 -0
  212. package/dist/components/index.d.cts.map +1 -1
  213. package/dist/components/index.d.mts +2 -0
  214. package/dist/components/index.d.mts.map +1 -1
  215. package/dist/components/index.d.ts +2 -0
  216. package/dist/components/index.d.ts.map +1 -1
  217. package/dist/components/index.js +2 -0
  218. package/dist/components/index.js.map +2 -2
  219. package/dist/components/label.css +3 -0
  220. package/dist/components/link.css +33 -97
  221. package/dist/components/notification-center.css +58 -10
  222. package/dist/components/notificationCenter/NotificationCenter.cjs +27 -17
  223. package/dist/components/notificationCenter/NotificationCenter.cjs.map +2 -2
  224. package/dist/components/notificationCenter/NotificationCenter.d.cts +2 -0
  225. package/dist/components/notificationCenter/NotificationCenter.d.cts.map +1 -1
  226. package/dist/components/notificationCenter/NotificationCenter.d.mts +2 -0
  227. package/dist/components/notificationCenter/NotificationCenter.d.mts.map +1 -1
  228. package/dist/components/notificationCenter/NotificationCenter.d.ts +2 -0
  229. package/dist/components/notificationCenter/NotificationCenter.d.ts.map +1 -1
  230. package/dist/components/notificationCenter/NotificationCenter.js +28 -18
  231. package/dist/components/notificationCenter/NotificationCenter.js.map +2 -2
  232. package/dist/components/page-header.css +21 -0
  233. package/dist/components/pageHeader/PageHeader.cjs +10 -2
  234. package/dist/components/pageHeader/PageHeader.cjs.map +2 -2
  235. package/dist/components/pageHeader/PageHeader.d.cts.map +1 -1
  236. package/dist/components/pageHeader/PageHeader.d.mts.map +1 -1
  237. package/dist/components/pageHeader/PageHeader.d.ts.map +1 -1
  238. package/dist/components/pageHeader/PageHeader.js +10 -2
  239. package/dist/components/pageHeader/PageHeader.js.map +2 -2
  240. package/dist/components/pageHeader/pageHeader.props.cjs +7 -1
  241. package/dist/components/pageHeader/pageHeader.props.cjs.map +2 -2
  242. package/dist/components/pageHeader/pageHeader.props.d.cts +5 -0
  243. package/dist/components/pageHeader/pageHeader.props.d.cts.map +1 -1
  244. package/dist/components/pageHeader/pageHeader.props.d.mts +5 -0
  245. package/dist/components/pageHeader/pageHeader.props.d.mts.map +1 -1
  246. package/dist/components/pageHeader/pageHeader.props.d.ts +5 -0
  247. package/dist/components/pageHeader/pageHeader.props.d.ts.map +1 -1
  248. package/dist/components/pageHeader/pageHeader.props.js +7 -1
  249. package/dist/components/pageHeader/pageHeader.props.js.map +2 -2
  250. package/dist/components/pills/Pills.cjs +1 -1
  251. package/dist/components/pills/Pills.cjs.map +2 -2
  252. package/dist/components/pills/Pills.js +2 -2
  253. package/dist/components/pills/Pills.js.map +2 -2
  254. package/dist/components/pills.css +6 -0
  255. package/dist/components/popover.css +45 -6
  256. package/dist/components/prose.css +3 -3
  257. package/dist/components/qr-code.css +5 -2
  258. package/dist/components/qrCode/QrCode.cjs +14 -11
  259. package/dist/components/qrCode/QrCode.cjs.map +2 -2
  260. package/dist/components/qrCode/QrCode.d.cts.map +1 -1
  261. package/dist/components/qrCode/QrCode.d.mts.map +1 -1
  262. package/dist/components/qrCode/QrCode.d.ts.map +1 -1
  263. package/dist/components/qrCode/QrCode.js +14 -11
  264. package/dist/components/qrCode/QrCode.js.map +2 -2
  265. package/dist/components/resizable.css +20 -4
  266. package/dist/components/rich-text-editor.css +50 -14
  267. package/dist/components/richTextEditor/EditorTools.cjs +226 -0
  268. package/dist/components/richTextEditor/EditorTools.cjs.map +7 -0
  269. package/dist/components/richTextEditor/EditorTools.d.cts +22 -0
  270. package/dist/components/richTextEditor/EditorTools.d.cts.map +1 -0
  271. package/dist/components/richTextEditor/EditorTools.d.mts +22 -0
  272. package/dist/components/richTextEditor/EditorTools.d.mts.map +1 -0
  273. package/dist/components/richTextEditor/EditorTools.d.ts +22 -0
  274. package/dist/components/richTextEditor/EditorTools.d.ts.map +1 -0
  275. package/dist/components/richTextEditor/EditorTools.js +196 -0
  276. package/dist/components/richTextEditor/EditorTools.js.map +7 -0
  277. package/dist/components/richTextEditor/MentionSuggestions.cjs +96 -0
  278. package/dist/components/richTextEditor/MentionSuggestions.cjs.map +7 -0
  279. package/dist/components/richTextEditor/MentionSuggestions.d.cts +7 -0
  280. package/dist/components/richTextEditor/MentionSuggestions.d.cts.map +1 -0
  281. package/dist/components/richTextEditor/MentionSuggestions.d.mts +7 -0
  282. package/dist/components/richTextEditor/MentionSuggestions.d.mts.map +1 -0
  283. package/dist/components/richTextEditor/MentionSuggestions.d.ts +7 -0
  284. package/dist/components/richTextEditor/MentionSuggestions.d.ts.map +1 -0
  285. package/dist/components/richTextEditor/MentionSuggestions.js +66 -0
  286. package/dist/components/richTextEditor/MentionSuggestions.js.map +7 -0
  287. package/dist/components/richTextEditor/RichTextEditor.cjs +53 -206
  288. package/dist/components/richTextEditor/RichTextEditor.cjs.map +3 -3
  289. package/dist/components/richTextEditor/RichTextEditor.d.cts +17 -7
  290. package/dist/components/richTextEditor/RichTextEditor.d.cts.map +1 -1
  291. package/dist/components/richTextEditor/RichTextEditor.d.mts +17 -7
  292. package/dist/components/richTextEditor/RichTextEditor.d.mts.map +1 -1
  293. package/dist/components/richTextEditor/RichTextEditor.d.ts +17 -7
  294. package/dist/components/richTextEditor/RichTextEditor.d.ts.map +1 -1
  295. package/dist/components/richTextEditor/RichTextEditor.js +53 -206
  296. package/dist/components/richTextEditor/RichTextEditor.js.map +3 -3
  297. package/dist/components/richTextEditor/editorTokens.cjs +75 -0
  298. package/dist/components/richTextEditor/editorTokens.cjs.map +7 -0
  299. package/dist/components/richTextEditor/editorTokens.d.cts +21 -0
  300. package/dist/components/richTextEditor/editorTokens.d.cts.map +1 -0
  301. package/dist/components/richTextEditor/editorTokens.d.mts +21 -0
  302. package/dist/components/richTextEditor/editorTokens.d.mts.map +1 -0
  303. package/dist/components/richTextEditor/editorTokens.d.ts +21 -0
  304. package/dist/components/richTextEditor/editorTokens.d.ts.map +1 -0
  305. package/dist/components/richTextEditor/editorTokens.js +55 -0
  306. package/dist/components/richTextEditor/editorTokens.js.map +7 -0
  307. package/dist/components/scroll-area.css +12 -0
  308. package/dist/components/scrollArea/ScrollArea.cjs +12 -1
  309. package/dist/components/scrollArea/ScrollArea.cjs.map +2 -2
  310. package/dist/components/scrollArea/ScrollArea.d.cts.map +1 -1
  311. package/dist/components/scrollArea/ScrollArea.d.mts.map +1 -1
  312. package/dist/components/scrollArea/ScrollArea.d.ts.map +1 -1
  313. package/dist/components/scrollArea/ScrollArea.js +12 -1
  314. package/dist/components/scrollArea/ScrollArea.js.map +2 -2
  315. package/dist/components/segmentedControl/SegmentedControl.cjs +2 -2
  316. package/dist/components/segmentedControl/SegmentedControl.cjs.map +2 -2
  317. package/dist/components/segmentedControl/SegmentedControl.d.cts.map +1 -1
  318. package/dist/components/segmentedControl/SegmentedControl.d.mts.map +1 -1
  319. package/dist/components/segmentedControl/SegmentedControl.d.ts.map +1 -1
  320. package/dist/components/segmentedControl/SegmentedControl.js +2 -2
  321. package/dist/components/segmentedControl/SegmentedControl.js.map +2 -2
  322. package/dist/components/separator.css +3 -9
  323. package/dist/components/sidebar/Sidebar.cjs +17 -5
  324. package/dist/components/sidebar/Sidebar.cjs.map +2 -2
  325. package/dist/components/sidebar/Sidebar.d.cts +12 -1
  326. package/dist/components/sidebar/Sidebar.d.cts.map +1 -1
  327. package/dist/components/sidebar/Sidebar.d.mts +12 -1
  328. package/dist/components/sidebar/Sidebar.d.mts.map +1 -1
  329. package/dist/components/sidebar/Sidebar.d.ts +12 -1
  330. package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
  331. package/dist/components/sidebar/Sidebar.js +17 -5
  332. package/dist/components/sidebar/Sidebar.js.map +2 -2
  333. package/dist/components/sidebar/sidebar.props.cjs +8 -1
  334. package/dist/components/sidebar/sidebar.props.cjs.map +2 -2
  335. package/dist/components/sidebar/sidebar.props.d.cts +9 -1
  336. package/dist/components/sidebar/sidebar.props.d.cts.map +1 -1
  337. package/dist/components/sidebar/sidebar.props.d.mts +9 -1
  338. package/dist/components/sidebar/sidebar.props.d.mts.map +1 -1
  339. package/dist/components/sidebar/sidebar.props.d.ts +9 -1
  340. package/dist/components/sidebar/sidebar.props.d.ts.map +1 -1
  341. package/dist/components/sidebar/sidebar.props.js +8 -1
  342. package/dist/components/sidebar/sidebar.props.js.map +2 -2
  343. package/dist/components/sidebar.css +86 -13
  344. package/dist/components/sonner.css +78 -16
  345. package/dist/components/stepper.css +23 -12
  346. package/dist/components/tab-nav.css +25 -13
  347. package/dist/components/tabNav/TabNav.cjs +1 -4
  348. package/dist/components/tabNav/TabNav.cjs.map +2 -2
  349. package/dist/components/tabNav/TabNav.d.cts.map +1 -1
  350. package/dist/components/tabNav/TabNav.d.mts.map +1 -1
  351. package/dist/components/tabNav/TabNav.d.ts.map +1 -1
  352. package/dist/components/tabNav/TabNav.js +1 -4
  353. package/dist/components/tabNav/TabNav.js.map +2 -2
  354. package/dist/components/table-of-contents.css +12 -2
  355. package/dist/components/tableOfContents/TableOfContents.cjs +11 -4
  356. package/dist/components/tableOfContents/TableOfContents.cjs.map +2 -2
  357. package/dist/components/tableOfContents/TableOfContents.d.cts.map +1 -1
  358. package/dist/components/tableOfContents/TableOfContents.d.mts.map +1 -1
  359. package/dist/components/tableOfContents/TableOfContents.d.ts.map +1 -1
  360. package/dist/components/tableOfContents/TableOfContents.js +11 -4
  361. package/dist/components/tableOfContents/TableOfContents.js.map +2 -2
  362. package/dist/components/tabs/Tabs.cjs +39 -54
  363. package/dist/components/tabs/Tabs.cjs.map +2 -2
  364. package/dist/components/tabs/Tabs.d.cts.map +1 -1
  365. package/dist/components/tabs/Tabs.d.mts.map +1 -1
  366. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  367. package/dist/components/tabs/Tabs.js +39 -54
  368. package/dist/components/tabs/Tabs.js.map +2 -2
  369. package/dist/components/tabs.css +52 -7
  370. package/dist/components/text/text.props.cjs +9 -9
  371. package/dist/components/text/text.props.cjs.map +2 -2
  372. package/dist/components/text/text.props.d.cts +42 -43
  373. package/dist/components/text/text.props.d.cts.map +1 -1
  374. package/dist/components/text/text.props.d.mts +42 -43
  375. package/dist/components/text/text.props.d.mts.map +1 -1
  376. package/dist/components/text/text.props.d.ts +42 -43
  377. package/dist/components/text/text.props.d.ts.map +1 -1
  378. package/dist/components/text/text.props.js +9 -9
  379. package/dist/components/text/text.props.js.map +2 -2
  380. package/dist/components/text/typography.props.cjs +32 -0
  381. package/dist/components/text/typography.props.cjs.map +7 -0
  382. package/dist/components/text/typography.props.d.cts +3 -0
  383. package/dist/components/text/typography.props.d.cts.map +1 -0
  384. package/dist/components/text/typography.props.d.mts +3 -0
  385. package/dist/components/text/typography.props.d.mts.map +1 -0
  386. package/dist/components/text/typography.props.d.ts +3 -0
  387. package/dist/components/text/typography.props.d.ts.map +1 -0
  388. package/dist/components/text/typography.props.js +12 -0
  389. package/dist/components/text/typography.props.js.map +7 -0
  390. package/dist/components/text-field.css +1 -0
  391. package/dist/components/text.css +41 -6
  392. package/dist/components/theme-panel.css +6 -0
  393. package/dist/components/toast/Toast.cjs +3 -1
  394. package/dist/components/toast/Toast.cjs.map +2 -2
  395. package/dist/components/toast/Toast.d.cts.map +1 -1
  396. package/dist/components/toast/Toast.d.mts.map +1 -1
  397. package/dist/components/toast/Toast.d.ts.map +1 -1
  398. package/dist/components/toast/Toast.js +3 -1
  399. package/dist/components/toast/Toast.js.map +2 -2
  400. package/dist/components/toast.css +36 -36
  401. package/dist/components/toggle-tip.css +58 -9
  402. package/dist/components/toggleTip/ToggleTip.cjs +9 -5
  403. package/dist/components/toggleTip/ToggleTip.cjs.map +2 -2
  404. package/dist/components/toggleTip/ToggleTip.d.cts.map +1 -1
  405. package/dist/components/toggleTip/ToggleTip.d.mts.map +1 -1
  406. package/dist/components/toggleTip/ToggleTip.d.ts.map +1 -1
  407. package/dist/components/toggleTip/ToggleTip.js +9 -5
  408. package/dist/components/toggleTip/ToggleTip.js.map +2 -2
  409. package/dist/components/toolbar/Toolbar.cjs +10 -7
  410. package/dist/components/toolbar/Toolbar.cjs.map +2 -2
  411. package/dist/components/toolbar/Toolbar.js +10 -7
  412. package/dist/components/toolbar/Toolbar.js.map +2 -2
  413. package/dist/components/toolbar.css +58 -4
  414. package/dist/components/tooltip.css +9 -5
  415. package/dist/components/tree-view.css +17 -3
  416. package/dist/components/treeView/TreeView.cjs +76 -21
  417. package/dist/components/treeView/TreeView.cjs.map +2 -2
  418. package/dist/components/treeView/TreeView.d.cts.map +1 -1
  419. package/dist/components/treeView/TreeView.d.mts.map +1 -1
  420. package/dist/components/treeView/TreeView.d.ts.map +1 -1
  421. package/dist/components/treeView/TreeView.js +76 -21
  422. package/dist/components/treeView/TreeView.js.map +2 -2
  423. package/dist/components.css +2 -0
  424. package/dist/docs/README.md +2 -0
  425. package/dist/docs/component-contract.md +7 -4
  426. package/dist/docs/component-index.json +17 -1
  427. package/dist/docs/components/accordion.md +5 -36
  428. package/dist/docs/components/alert.md +44 -17
  429. package/dist/docs/components/article-nodes.md +59 -2
  430. package/dist/docs/components/aspect-ratio.md +3 -26
  431. package/dist/docs/components/banner.md +7 -7
  432. package/dist/docs/components/blockquote.md +15 -14
  433. package/dist/docs/components/bottom-dock.md +146 -0
  434. package/dist/docs/components/box.md +3 -34
  435. package/dist/docs/components/breadcrumb.md +13 -8
  436. package/dist/docs/components/callout.md +18 -7
  437. package/dist/docs/components/card.md +10 -3
  438. package/dist/docs/components/code.md +33 -220
  439. package/dist/docs/components/collapsible.md +16 -35
  440. package/dist/docs/components/command.md +2 -0
  441. package/dist/docs/components/comment-thread.md +51 -1
  442. package/dist/docs/components/config-drawer.md +72 -171
  443. package/dist/docs/components/container.md +2 -0
  444. package/dist/docs/components/context-menu.md +19 -5
  445. package/dist/docs/components/dialog.md +4 -2
  446. package/dist/docs/components/drawer.md +17 -6
  447. package/dist/docs/components/dropdown-menu.md +11 -2
  448. package/dist/docs/components/em.md +1 -1
  449. package/dist/docs/components/environment-ribbon.md +126 -0
  450. package/dist/docs/components/field.md +2 -0
  451. package/dist/docs/components/file-upload.md +13 -7
  452. package/dist/docs/components/floating-panel.md +79 -285
  453. package/dist/docs/components/form.md +4 -0
  454. package/dist/docs/components/grid.md +11 -60
  455. package/dist/docs/components/heading.md +35 -32
  456. package/dist/docs/components/hover-card.md +9 -1
  457. package/dist/docs/components/icon.md +1 -0
  458. package/dist/docs/components/kbd.md +2 -0
  459. package/dist/docs/components/label.md +11 -9
  460. package/dist/docs/components/link.md +31 -209
  461. package/dist/docs/components/notification-center.md +30 -15
  462. package/dist/docs/components/page-header.md +20 -6
  463. package/dist/docs/components/pagination.md +4 -0
  464. package/dist/docs/components/pills.md +13 -4
  465. package/dist/docs/components/popover.md +10 -3
  466. package/dist/docs/components/prose.md +9 -0
  467. package/dist/docs/components/qr-code.md +12 -12
  468. package/dist/docs/components/quote.md +9 -4
  469. package/dist/docs/components/resizable.md +26 -18
  470. package/dist/docs/components/rich-text-editor.md +68 -18
  471. package/dist/docs/components/scroll-area.md +17 -9
  472. package/dist/docs/components/section.md +3 -38
  473. package/dist/docs/components/segmented-control.md +1 -1
  474. package/dist/docs/components/segmented-meter.md +9 -0
  475. package/dist/docs/components/separator.md +10 -46
  476. package/dist/docs/components/sidebar.md +34 -9
  477. package/dist/docs/components/sonner.md +25 -16
  478. package/dist/docs/components/stepper.md +8 -33
  479. package/dist/docs/components/strong.md +1 -1
  480. package/dist/docs/components/tab-nav.md +33 -96
  481. package/dist/docs/components/table-of-contents.md +8 -2
  482. package/dist/docs/components/tabs.md +19 -50
  483. package/dist/docs/components/text-field.md +1 -0
  484. package/dist/docs/components/text.md +34 -28
  485. package/dist/docs/components/theme-panel.md +3 -28
  486. package/dist/docs/components/theme.md +7 -3
  487. package/dist/docs/components/toast.md +27 -13
  488. package/dist/docs/components/toggle-tip.md +58 -241
  489. package/dist/docs/components/toolbar.md +16 -39
  490. package/dist/docs/components/tooltip.md +13 -7
  491. package/dist/docs/components/tree-view.md +22 -55
  492. package/dist/docs/consumer-guide.md +11 -4
  493. package/dist/generated/tokens.cjs +1 -0
  494. package/dist/generated/tokens.cjs.map +2 -2
  495. package/dist/generated/tokens.d.cts.map +1 -1
  496. package/dist/generated/tokens.d.mts.map +1 -1
  497. package/dist/generated/tokens.d.ts.map +1 -1
  498. package/dist/generated/tokens.js +1 -0
  499. package/dist/generated/tokens.js.map +2 -2
  500. package/dist/styles.css +1921 -1349
  501. package/dist/tokens.css +346 -362
  502. package/package.json +1 -1
@@ -28,7 +28,7 @@ No slots: flat export. The component renders a single Radix `SeparatorPrimitive.
28
28
  | Prop | Type | Default | Required | Description | Responsive |
29
29
  |---|---|---|---|---|---|
30
30
  | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | no | Sets `data-orientation` on the host and the matching CSS rule. | no |
31
- | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Reserved hook for the `data-size` attribute. The current CSS only uses the orientation attribute to size the line; `data-size` is the contract for future per-size thickness overrides. | no |
31
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Retained data-size hook; all sizes paint the canonical 1px non-emphasis divider. | no |
32
32
  | `variant` | `'default' \| 'decorative'` | `'default'` | no | When `'decorative'`, applies the `dsx-separator--decorative` modifier class. | no |
33
33
  | `color` | `string` | `undefined` | no | Free-form accent color name forwarded to `data-accent-color` on the host. | no |
34
34
  | `decorative` | `boolean` | `true` | no | Radix boolean: when true, the host is given `role="none"` and removed from the accessibility tree's semantic structure. When false, the host keeps `role="separator"`. | no |
@@ -39,7 +39,7 @@ Rules that apply to this row:
39
39
 
40
40
  - The component extends `React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>`, so every standard Radix `Separator.Root` attribute is forwarded.
41
41
  - `decorative` is the Radix accessibility opt-out. `Separator` defaults to `decorative={true}`; pass `decorative={false}` to expose the separator to assistive tech as a thematic break. The default is intentional: most separators are visual-only and the default should not add noise to the accessibility tree.
42
- - The CSS file does not yet read `data-size`; the attribute is the public contract for future per-size thickness overrides and is asserted by the test suite.
42
+ - Size does not alter divider thickness; the 1px policy applies at every size.
43
43
 
44
44
  ## CSS class contract
45
45
 
@@ -51,8 +51,8 @@ Rules that apply to this row:
51
51
  |---|---|---|---|
52
52
  | `data-orientation` | `horizontal`, `vertical` | `.dsx-separator[data-orientation='horizontal']`, `.dsx-separator[data-orientation='vertical']` | `separator.css` |
53
53
  | (no attribute) | (presence) | `dsx-separator--decorative` when `variant === 'decorative'` | `separator.css` |
54
- | `data-size` | `sm`, `md`, `lg` | reserved for future thickness overrides | `separator.css` (no rule yet) |
55
- | `data-accent-color` | (any accent token name) | reserved for future accent overrides | `separator.css` (no rule yet) |
54
+ | `data-size` | `sm`, `md`, `lg` | retained attribute; fixed 1px paint | `separator.css` |
55
+ | `data-accent-color` | (any accent token name) | decorative accent-border paint | `separator.css` |
56
56
 
57
57
  **Slot classes:** none.
58
58
 
@@ -72,9 +72,10 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
72
72
  |---|---|---|
73
73
  | Background (default) | `var(--dsx-control-separator-color-strong)` | Default line color. |
74
74
  | Background (decorative) | `var(--dsx-color-separator-muted)` | Muted line color for the `decorative` variant. |
75
+ | Background (explicit color) | `var(--dsx-color-accent-border)` | Decorative accent rule; overrides the neutral variant color. |
75
76
  | Margin block (horizontal) | `var(--dsx-space-sm)` | Vertical breathing room around a horizontal line. |
76
77
  | Margin inline (vertical) | `var(--dsx-space-xs)` | Horizontal breathing room around a vertical line. |
77
- | Border width | `var(--dsx-border-width-md)` (default `var(--dsx-border-width-sm)`) | The painted line thickness. |
78
+ | Border width | `var(--dsx-boundary-divider-width)` | The painted line thickness. |
78
79
  | Min height (vertical) | `var(--dsx-size-lg)` | Minimum line length for the vertical orientation. |
79
80
 
80
81
  Rules:
@@ -82,6 +83,7 @@ Rules:
82
83
  - No raw color, spacing, radius, or motion values in `separator.css`. The line is a `background` of the host; it is not a border.
83
84
  - The default and decorative variants use different tokens. The decorative token is intentionally lighter; the default token is the strong control line color.
84
85
  - Alpha is not used. The line colors are solid.
86
+ - Neutral default/decorative dividers deliberately retain their gray colors across accents. Explicit accent dividers use accent-border: step 8 in light appearance and step 11 in dark appearance. Readable ink, focus and selection retain accent-indicator. Neutral aliases rebind to the nearest appearance and gray boundary.
85
87
 
86
88
  ## Motion contract
87
89
 
@@ -120,49 +122,11 @@ Rules:
120
122
 
121
123
  - The separator does not need an accessible name. The Radix primitive handles `aria-hidden` and `role` based on `decorative`. Pair a non-decorative separator with surrounding landmarks (headings, sections) so the thematic break is announced in context.
122
124
 
123
- ## Playground demo spec
124
-
125
- **Default story:**
126
-
127
- - Renders `Separator`. Asserts the host has `dsx-separator`, `data-orientation="horizontal"`, and `role="none"` (the default `decorative` flag strips the semantic role from the accessibility tree).
128
-
129
- **Orientation story** (one per orientation):
130
-
131
- - Renders Separator with `orientation="horizontal"` and `orientation="vertical"`. Asserts the matching `data-orientation` attribute and the matching CSS rule (width vs height).
132
-
133
- **Size story** (one per size):
134
-
135
- - Renders Separator with `size="sm"`, `size="md"`, and `size="lg"`. Asserts the matching `data-size` value on the host. The current CSS does not switch the painted thickness per size; the story documents that the attribute is the contract for future overrides.
136
-
137
- **Variant story** (one per variant):
138
-
139
- - Renders Separator with `variant="default"` and `variant="decorative"`. Asserts the `dsx-separator--decorative` modifier class is present on the decorative variant and absent on the default.
140
-
141
- **State story:**
125
+ Matrix cells place each orientation between text, rather than rendering a free-floating line. Live examples show horizontal section division, vertical metadata division, decorative tone and the reserved data-accent-color hook.
142
126
 
143
- - Renders Separator with `decorative={false}`. Asserts the host has `role="separator"` instead of `role="none"`. For a non-decorative vertical separator, asserts `aria-orientation="vertical"` is also on the host.
144
-
145
- **Composition story:**
146
-
147
- - Renders Separator inside a `Flex` row to verify the vertical orientation has a meaningful min height and does not collapse to zero.
148
-
149
- **Token story:**
150
-
151
- - Renders inside a `Theme` wrapper with `accentColor="amber"`, `accentColor="silver"`, and `accentColor="bronze"`. Asserts the line color is unchanged across accents (the current CSS does not read `data-accent-color`; the story documents the contract for future accent overrides).
152
-
153
- **A11y story:**
154
-
155
- - Uses `vitest-axe` against a rendered default Separator. Asserts there are no axe violations.
156
-
157
- **Props exposed in the playground controls:**
127
+ ## Playground demo spec
158
128
 
159
- | Prop | Control | Default |
160
- |---|---|---|
161
- | `orientation` | select (`horizontal`, `vertical`) | `horizontal` |
162
- | `size` | select (`sm`, `md`, `lg`) | `md` |
163
- | `variant` | select (`default`, `decorative`) | `default` |
164
- | `color` | text | (empty) |
165
- | `decorative` | boolean | `true` |
129
+ Matrix cells place horizontal or vertical lines between Overview and Details text with a bounded 220px frame. All size hooks remain shown and paint the canonical 1px thickness. The live example includes a horizontal section divider, vertical metadata divider, decorative tone, and an accent line using color="inherit" through the existing data-accent-color hook. The semantic divider uses decorative={false}; the other lines are decorative.
166
130
 
167
131
  ## Wiring notes
168
132
 
@@ -46,14 +46,14 @@ A panel and cabinet shell navigation surface. The DS `Sidebar` exposes a provide
46
46
  | `Sidebar.MenuBadge` | `<span>` | `dsx-sidebar__menu-badge` plus the text Badge classes or the `--ring` / `--accent` modifier + `data-slot="sidebar-menu-badge"` + `data-state` | A count, proportional usage ring, or quiet accent value. Remains in the DOM but is visually hidden when the panel collapses. |
47
47
  | `Sidebar.MenuAction` | `<button>` (or `Slot` child when `asChild`) | `dsx-sidebar__menu-action dsx-button` + `data-slot="sidebar-menu-action"` + `data-state` | An action button revealed on hover. |
48
48
  | `Sidebar.MenuButton` | `<button>` (or `Slot` child when `asChild`) | `dsx-sidebar__menu-button dsx-button` + `dsx-sidebar__menu-button-text` (when children are a string or number) + `data-slot="sidebar-menu-button"` + `data-active` + `data-state` | A menu button. |
49
- | `Sidebar.MenuSkeleton` | `<div>` | `dsx-sidebar__menu-skeleton` + `dsx-skeleton dsx-skeleton--circle` (icon) + `dsx-skeleton dsx-skeleton--text-line` (label) + `data-slot="sidebar-menu-skeleton"` + `data-show-icon` + `data-state` | A loading placeholder for a menu row. |
49
+ | `Sidebar.MenuSkeleton` | `<div>` | `dsx-sidebar__menu-skeleton` + `dsx-skeleton dsx-skeleton--circle` (icon) + `dsx-skeleton dsx-skeleton--text-line` (label) + `data-slot="sidebar-menu-skeleton"` + `data-show-icon` + `data-state` | A loading placeholder for a menu row. Inside a `Sidebar.MenuItem` (a flex row) it takes the item's width (`.dsx-sidebar__menu-item > .dsx-sidebar__menu-skeleton { flex: 1 }`); on its own it is as wide as its parent. |
50
50
  | `Sidebar.MenuSub` | `<ul>` | `dsx-sidebar__menu-sub` + `data-slot="sidebar-menu-sub"` + `data-state` | A nested menu list. |
51
51
  | `Sidebar.MenuSubItem` | `<li>` | `dsx-sidebar__menu-sub-item` + `data-slot="sidebar-menu-sub-item"` + `data-state` | A nested menu row. |
52
52
  | `Sidebar.MenuSubButton` | `<button>` (or `Slot` child when `asChild`) | `dsx-sidebar__menu-sub-button dsx-button` + `dsx-sidebar__menu-button-text` (when children are a string or number) + `data-slot="sidebar-menu-sub-button"` + `data-active` + `data-state` | A nested menu button. |
53
53
  | `Sidebar.MenuSubTrigger` | `<button>` (or `Slot` child when `asChild`) | `dsx-sidebar__menu-sub-trigger dsx-button` + `dsx-sidebar__menu-sub-trigger-chevron` (`chevron-right`, rotates 90° on open) + `data-slot="sidebar-menu-sub-trigger"` + `data-state` (`open` \| `closed`) + `aria-expanded` | The parent button that toggles a `Sidebar.MenuSub`. Composes the public `Collapsible` primitive. Decided in Direction #4 Q5; `mode="both"` is rejected. |
54
54
  | `Sidebar.Separator` | `<div role="separator" aria-orientation="horizontal">` | `dsx-sidebar__separator dsx-separator dsx-separator--decorative` + `data-slot="sidebar-separator"` + `data-state` | A horizontal divider. |
55
55
  | `Sidebar.Trigger` | `<button aria-label="Expand sidebar" \| "Collapse sidebar" \| "Pin sidebar" \| "Unpin sidebar">` | `dsx-sidebar__trigger dsx-button` + `dsx-button__icon` (panel-state glyph) + `dsx-sidebar__trigger-label` (text) + `data-slot="sidebar-trigger"` + `data-state` | A toggle button used inside the panel or the inset. Hover-preview mode uses dashed/solid panel semantics instead of directional chevrons. |
56
- | `Sidebar.mobile-trigger` (internal) | `<button aria-label="Open sidebar">` | `dsx-sidebar__mobile-trigger` + `data-slot="sidebar-mobile-trigger"` | The mobile sheet trigger, mounted by `Sidebar.Provider` when `mobile="sheet"` and the viewport is below `mobileBreakpoint`. |
56
+ | `Sidebar.mobile-trigger` (internal) | `<button aria-label="Open sidebar">` | `dsx-sidebar__mobile-trigger` + `data-slot="sidebar-mobile-trigger"` | The mobile sheet trigger, mounted by `Sidebar.Provider` when `mobile="sheet"` and the viewport is below `mobileBreakpoint`, unless `mobileTrigger` is `false`. |
57
57
  | `Sidebar.SkipLink` | `<a>` | `dsx-sidebar__skip-link` | Focus-revealed skip link targeting `targetId` (`main` by default). |
58
58
 
59
59
  The roster's `Parent / Slots` column lists every slot above plus `Sidebar.Inset` and `Sidebar.Trigger`. The source exports the full set through `Object.assign` on `Sidebar` (alias of `Sidebar.Root`), and also re-exports the named components individually. The spec records the runtime shape; the roster's slot list is the contract for canonical anatomy.
@@ -71,9 +71,11 @@ The roster's `Parent / Slots` column lists every slot above plus `Sidebar.Inset`
71
71
  | `hoverExpand` | `boolean` | `false` | no | In icon mode, temporarily expands the collapsed rail on pointer hover or keyboard focus. The preview overlays the inset and never changes the persisted preference. `Escape` closes a keyboard-opened preview. | no |
72
72
  | `previewOpen` | `boolean` | `false` | no | Holds the temporary icon-mode preview open for a consumer-owned flyout or other adjacent interaction. It does not change the persisted preference. | no |
73
73
  | `mobile` | `'sheet' \| 'drawer' \| 'none'` | `'sheet'` | no | Mobile fallback mode. `sheet` mounts a `Sheet` trigger; `none` skips the mobile fallback. | no |
74
+ | `mobileTrigger` | `boolean` | `true` | no | Whether the provider mounts its floating "Open sidebar" button in mobile sheet mode. Set `false` when the app opens the drawer from its own control, a header button or a dock item (`BottomDock`'s "More"), with `useSidebar().setMobileSheetOpen(true)`. The drawer, its own close button and its focus handling are unchanged; with `mobile="none"` the prop has no effect. Not written to the DOM. | no |
74
75
  | `mobileBreakpoint` | `number` | `768` | no | Viewport width below which the provider treats the device as mobile. The provider also matches `(pointer: coarse)`. | no |
75
76
  | `defaultSubmenuMode` | `'click' \| 'hover'` | `'click'` | no | Default toggle mode for every `Sidebar.MenuSubTrigger` under this provider. Individual triggers override per-section. | no |
76
77
  | `submenuOpenOnActive` | `boolean` | `true` | no | Default for `openOnActive` on every `Sidebar.MenuSubTrigger` under this provider. | no |
78
+ | `variant` | `'default' \| 'floating'` | `'default'` | no | `floating` draws the inline panel as a rounded, bordered, shadowed glass surface set off from the viewport edge, with a gap around it and between it and the inset, over whatever the page paints behind. It never applies to the mobile drawer: while the sidebar renders as the drawer, the variant has no visual effect and `data-variant` reads `default`. Specified for `collapsible="icon"` and `"none"`; with `"offcanvas"` a collapsed panel hides without a border sliver, and the recovery rail keeps its default look. | no |
77
79
  | `className` | `string` | `undefined` | no | Extra classes appended to `dsx-sidebar-provider`. | no |
78
80
  | `children` | `React.ReactNode` | `undefined` | no | Provider children. In mobile sheet mode, each Sidebar root preserves its named `<nav>` wrapper, classes, and consumer props inside `Sheet.Content`; sibling inset content remains inline. | no |
79
81
 
@@ -106,7 +108,7 @@ The roster's `Parent / Slots` column lists every slot above plus `Sidebar.Inset`
106
108
 
107
109
  ### `Sidebar.MenuSubTrigger`
108
110
 
109
- The parent button that toggles a `Sidebar.MenuSub`. Composes the public `Collapsible` primitive: the open state lives on a consumer-owned `Collapsible` root (`asChild` over the `MenuItem`), this trigger owns the click toggle and mirrors `open` / `onOpenChange` for hover timers, Arrow keys, and auto-open. `CollapsibleTrigger` is deliberately NOT in the composition (its span + chevron pair breaks Radix Slot's single-child rule). `CollapsibleContent` takes `forceMount` so the closed sub stays in the DOM and `openOnActive` can see an active descendant on mount. Direction #4 Q5 verdict: `click` is the default mode, `hover` is opt-in per trigger, `both` is rejected (hover/click race conditions). Hover mode is suppressed on coarse pointers and degrades to tap-to-toggle.
111
+ The parent button that toggles a `Sidebar.MenuSub`. Composes the public `Collapsible` primitive: the open state lives on a consumer-owned `Collapsible` root (`asChild` over the `MenuItem`), this trigger owns the click toggle and mirrors `open` / `onOpenChange` for hover timers, Arrow keys, and auto-open. `CollapsibleTrigger` is deliberately NOT in the composition (its span + chevron pair breaks Radix Slot's single-child rule). `CollapsibleContent` takes `forceMount` so the closed sub stays in the DOM and `openOnActive` can see an active descendant on mount; a sub that mounts closed is hidden at rest by the Collapsible's motion styles (`collapsible.md` § Force-mounted content, G-14), and a collapsed one is out of the tab order. The trigger is a row like any `MenuButton` (same padding, icon column, fill and type: G-13). Direction #4 Q5 verdict: `click` is the default mode, `hover` is opt-in per trigger, `both` is rejected (hover/click race conditions). Hover mode is suppressed on coarse pointers and degrades to tap-to-toggle.
110
112
 
111
113
  | Prop | Type | Default | Required | Description | Responsive |
112
114
  |---|---|---|---|---|---|
@@ -186,10 +188,11 @@ Standard React HTML attributes plus the `role="separator"` and `aria-orientation
186
188
 
187
189
  ### `useSidebar` hook
188
190
 
189
- Returns the `SidebarContext` value or a no-op fallback (`expanded: true`, `setExpanded: () => {}`, `mobileSheetOpen: false`, `setMobileSheetOpen: () => {}`, `isMobile: false`) when the consumer renders a sidebar slot outside `Sidebar.Provider`.
191
+ Returns the `SidebarContext` value or a no-op fallback (`expanded: true`, `setExpanded: () => {}`, `mobileSheetOpen: false`, `setMobileSheetOpen: () => {}`, `isMobile: false`, `variant: 'default'`) when the consumer renders a sidebar slot outside `Sidebar.Provider`.
190
192
 
191
193
  Rules:
192
194
 
195
+ - `variant` is the variant in effect, not the raw prop: `floating` only while the sidebar renders inline. The provider and the root write it as `data-variant`; `Sidebar.Inset` is deliberately unmarked and keeps no surface of its own, so the page behind the panel shows through.
193
196
  - The `data-state` and `data-collapsed` attributes are written by `getSidebarDataAttributes` and applied to the `Provider`, the `Root`, and every slot that reads from `useSidebar()`. The `data-state` value is `expanded` or `collapsed`.
194
197
  - `Sidebar.MenuButton` and `Sidebar.MenuSubButton` write `data-active` when `isActive` is `true` and wrap string or number children in `<span class="dsx-sidebar__menu-button-text">`. The wrapping span is omitted when `asChild` is set.
195
198
  - `Sidebar.Provider` registers a `keydown` listener on `document` for the toggle shortcut. The listener is removed on cleanup and is a no-op when `toggleShortcut` is `false`. The shortcut is `Ctrl+B` on Windows and Linux, `Cmd+B` on macOS.
@@ -215,7 +218,8 @@ Rules:
215
218
  | `data-pinned-state` | `expanded`, `collapsed` | Records the persisted/manual state while `data-state` may temporarily be `expanded` for a preview. | `sidebar.css` |
216
219
  | `data-transitions-ready` | `true`, `false` | Prevents persisted state hydration from replaying panel motion on route remount. | `sidebar.css` |
217
220
  | `data-effect` | `none`, `ambient` | Selects the Sidebar surface effect. | `sidebar.css` |
218
- | `data-variant` | `ring`, `accent` | Marks a proportional ring or quiet accent `MenuBadge`; text badges omit the attribute. | `sidebar.css` |
221
+ | `data-variant` (provider, root) | `default`, `floating` | `.dsx-sidebar-provider:where([data-variant='floating'])`, `.dsx-sidebar[data-variant='floating']`: glass panel, offset and gap. Always written; `floating` only while the sidebar renders inline. | `sidebar.css` |
222
+ | `data-variant` (`MenuBadge`) | `ring`, `accent` | Marks a proportional ring or quiet accent `MenuBadge`; text badges omit the attribute. | `sidebar.css` |
219
223
  | `data-active` | `true` | `.dsx-sidebar__menu-button[data-active='true']`, `.dsx-sidebar__menu-sub-button[data-active='true']` | `sidebar.css` |
220
224
  | `data-state` (sub-trigger) | `open`, `closed` | `:where(.dsx-sidebar__menu-sub-trigger[data-state='open']) > .dsx-sidebar__menu-sub-trigger-chevron { transform: rotate(90deg) }` with `transition-transform` (`:where` keeps it at 0,1,0) | `sidebar.css` |
221
225
  | `data-show-icon` | `true`, `false` | (icon visibility inside the skeleton) | `sidebar.css` |
@@ -265,6 +269,8 @@ Rules:
265
269
 
266
270
  - The CSS file collapses the panel through the `data-state` attribute. The mobile sheet fallback is mounted by `Sidebar.Provider` based on `window.innerWidth` and `matchMedia('(pointer: coarse)')`, gated by `mobileBreakpoint` and the `mobile` prop.
267
271
  - The component does not write `@media` rules; the mobile behavior is runtime-driven, not CSS-driven.
272
+ - `dsx-sidebar__menu-sub-trigger` shares the base rule of `dsx-sidebar__menu-button` (display, `--dsx-space-sm` padding, transparent fill, no border, label type, `--dsx-shadow-focus-ring` on `:focus-visible`), so a parent row and a plain row have one geometry: the icon in the same column, no browser button fill when the parent is neither open nor active. Open and active states are the parent's own rules after it.
273
+ - The mobile drawer (`dsx-sidebar__mobile-sheet`) is flush with the viewport on three sides, so it keeps the structural border on its free inline-end edge only (`border-block-width: 0`, `border-inline-start-width: 0`), and it does not scroll itself (`overflow: hidden`): the nav fills it (`height: 100%`) and its content area owns the scrolling. The base dialog surface that Drawer shares draws the border all round, which is right for a floating panel and wrong for a full-height sheet.
268
274
 
269
275
  **Reduced motion:**
270
276
 
@@ -284,9 +290,18 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
284
290
  | Panel width (icon collapsed) | `var(--dsx-sidebar-width-collapsed)` | Persistent slim icon rail. |
285
291
  | Panel preview layout | `calc(var(--dsx-sidebar-width-collapsed) - var(--dsx-sidebar-width))` | Negative inline-end margin lets temporary expansion overlay rather than reflow the inset. |
286
292
  | Panel background | `var(--dsx-color-surface)` | Panel surface. |
287
- | Panel ambient effect | `var(--dsx-color-accent-9)` mixed with transparency | Optional subscription-aware accent wash without a literal starfield. |
293
+ | Panel ambient effect | `var(--dsx-color-accent-9)` mixed with transparency at `var(--dsx-effect-ambient-strength)` (10% in dark, 16% in light), from the top-left corner, plus a second source at the foot: an ellipse anchored to the bottom edge at 0.9× the same strength | Optional subscription-aware accent wash without a literal starfield. The strength is theme-aware (G-16): the same wash read about half as strong on the pale light surface. The foot glow (G-17, 2026-10-05) lights the lower half the corner radial never reached (about 35% of the panel) and leaves the nav a calm middle. |
294
+ | Trigger | transparent fill, `inset 0 0 0 var(--dsx-border-width-sm) var(--dsx-color-accent-7)` ring, `var(--dsx-color-accent-11)` glyph; hover fill `var(--dsx-color-accent-3)` and ring `var(--dsx-color-accent-8)` | A quiet outline (G-18, 2026-10-05). The raised disc it replaced (`surface-raised` fill, drop shadow) vanished on dark, where shadows do not read, and on the tinted panel. Scale jobs: border step 7, text step 11, one step up on hover. The focus ring still replaces the ring; the pin / unpin glyphs of hover-expand mode live in the same button. |
295
+ | Active row wash (light) | `var(--dsx-color-accent-4)` on `MenuButton`, `MenuSubButton` and `MenuSubTrigger` when `data-active='true'`, under `:where([data-dsx-theme='light'])`; dark keeps `accent-3` at 50% | G-19 (2026-10-05): accent-3 at 50% over a tinted light panel is nearly the panel's colour, so in light the row was marked only by its underline and text. Step 4 is the scale's soft-component step. |
288
296
  | Panel border | `none` (CSS keyword) | The slim shell uses surface contrast and elevation instead of a boxed edge. |
289
297
  | Panel shadow | `var(--dsx-effect-shadow-1)` | Panel elevation. |
298
+ | Floating: provider padding and gap | `var(--dsx-space-3)` | The space around the panel and between the panel and the inset. Never a sidebar margin: the preview and pin-docking motion animate `margin-inline-end` and `width`. |
299
+ | Floating: panel offset and height | `var(--dsx-space-3)` (`top`), `calc(100dvh - var(--dsx-space-3) - var(--dsx-space-3))` (`height`) | Keeps the sticky panel inside the same inset on every side. |
300
+ | Floating: panel background | `var(--dsx-color-panel-translucent)` | Glass surface; the ambient effect's gradient still paints over it. |
301
+ | Floating: panel backdrop | `var(--dsx-effect-panel-glass-backdrop-filter)` | Glass blur. |
302
+ | Floating: panel border | `var(--dsx-border-width-sm) solid var(--dsx-panel-border-color)` | Glass edge; dropped (`border-width: 0`) when an `offcanvas` panel is collapsed so a zero-width panel leaves no sliver. |
303
+ | Floating: panel radius | `var(--dsx-rounded-xl)` | Follows the global radius setting. |
304
+ | Floating: panel shadow | `var(--dsx-panel-shadow)` | Floating elevation. |
290
305
  | Panel motion duration | `var(--dsx-motion-duration-normal, 250ms)` | Width transition. |
291
306
  | Panel motion easing | `var(--dsx-motion-easing-standard, ease)` | Width easing. |
292
307
  | Inset flex | `1` (CSS keyword) | Fill remaining width. |
@@ -358,7 +373,7 @@ Rules:
358
373
  - Offcanvas collapsed content is removed from interaction and the accessibility
359
374
  tree. The external recovery rail owns `aria-controls` and `aria-expanded`.
360
375
  - `Sidebar.GroupLabel` is a non-semantic `<div>`; consumers can set `role="heading"` plus `aria-level` when the label needs to be a heading.
361
- - The mobile sheet trigger (when mounted by `Sidebar.Provider`) is a button with `aria-label="Open sidebar"`.
376
+ - The mobile sheet trigger (when mounted by `Sidebar.Provider`) is a button with `aria-label="Open sidebar"`. With `mobileTrigger={false}` the app's own control carries that role and must be a real button with its own accessible name. The drawer's own labels ("Close navigation", "Navigation") are fixed English strings today.
362
377
  - `useSidebar` returns a no-op fallback when the consumer renders a sidebar slot outside `Sidebar.Provider`, so the component never throws.
363
378
 
364
379
  **Keyboard:**
@@ -392,6 +407,8 @@ Rules:
392
407
 
393
408
  - The panel landmark has a default `aria-label="Sidebar"`. The rail and trigger have default `aria-label` values (`Expand sidebar` / `Collapse sidebar`). Override the labels when the panel needs product-specific copy.
394
409
 
410
+ Submenu parent triggers use `--dsx-rounded-sm`, matching navigation rows rather than the Button pill radius. The playground lab composes Sidebar.Inset with content that changes on navigation and utility actions, so active state has a visible result. The demo bounds its navigation height to 560px and reserves header clearance for the mobile menu control. Routing remains app-owned.
411
+
395
412
  ## Playground demo spec
396
413
 
397
414
  **Default story:**
@@ -402,19 +419,26 @@ Rules:
402
419
 
403
420
  - Renders the provider with `defaultExpanded={false}`. Asserts `data-state="collapsed"`, `data-collapsed="true"`, and the `dsx-sidebar-default-expanded` class on the panel.
404
421
  - Renders a composed fixture with `effect="ambient"` alongside the default `none` surface so the optional token-driven accent wash is visible in the Playground.
422
+ - Renders the provider with `variant="floating"` and asserts `data-variant="floating"` on the provider and the root, no `data-variant` on `Sidebar.Inset`, and `data-variant="default"` while the sidebar renders as the mobile drawer. The docs lab toggles `default` / `floating` over the brand haze (`dsx-brand-ambient`), because a glass panel only reads as glass over something.
405
423
 
406
424
  **State story:**
407
425
 
408
426
  - Renders a `MenuButton` with `isActive` and asserts `data-active="true"` plus the `dsx-sidebar-menu-button-active` class. Toggles the panel via the `Rail` click and asserts the `data-state` flips on the provider, the panel, the header, the footer, and the content. Renders a `MenuBadge` with text `12` and asserts the badge stays in the DOM when the panel collapses while CSS visually hides it.
409
427
  - Renders `MenuBadge variant="accent"` as quiet numeric metadata without the filled Badge surface; `variant="ring"` remains reserved for a genuine `value / max` ratio.
410
428
 
429
+ **Mobile story:**
430
+
431
+ - At a phone width in `mobile="sheet"` mode, asserts the floating "Open sidebar" button is mounted by default, is absent with `mobileTrigger={false}` (checked next to a default provider, because the drawer's chunk is lazy), and that an app control calling `useSidebar().setMobileSheetOpen(true)` still opens the drawer. The registry has no phone-width fixture for this: the drawer is a portal bound to the window, so `Sidebar.test.tsx` and the `frontend` user-shell render carry it. `src/test/styles/sidebar-mobile-sheet.test.ts` guards the sheet's three CSS rules (free-edge border only, no own scroll, nav sized to the sheet); jsdom has no layout, so the scrollbar and outline themselves are proved in the browser (`docs/feature/design-system/sidebar-sheet-chrome/verification.md`).
432
+
411
433
  **Composition story:**
412
434
 
413
435
  - Renders a `Sidebar.Content` with two `Sidebar.Group` blocks, each containing a `GroupLabel`, a `GroupContent`, and a `Menu` with `MenuItem` and `MenuButton` rows. Adds a `Sidebar.Separator` between the groups and a `Sidebar.MenuSub` with `Sidebar.MenuSubItem` and `Sidebar.MenuSubButton` rows in one of the menus. Asserts every slot renders the right `dsx-sidebar__*` class.
436
+ - `src/test/styles/sidebar-sub-trigger-row.test.ts` guards the shared row base of `MenuButton` and `MenuSubTrigger` (padding, fill, border, focus ring): the parent row sat 8px right of the others and showed a grey button fill when idle (G-13, 2026-10-05). `Collapsible.test.tsx` guards the closed force-mounted panel (G-14).
437
+ - `src/test/styles/shell-look-pass.test.ts` guards the ambient wash's second source (G-17), the outline trigger and the order of its focus ring (G-18), and the light active-row wash with its (0,2,0) selector and source order (G-19); `apps/playground/tests/user-shell-frame-browser.spec.ts` measures all three on the user-shell frame for Rift, Warp and Ray in both themes.
414
438
 
415
439
  **Token story:**
416
440
 
417
- - Sidebar does not own a `data-accent-color` hook, so the token story is omitted. The active menu button background tracks `var(--dsx-color-accent-surface)` and the active text tracks `var(--dsx-color-accent-indicator)`, which are theme-aware.
441
+ - Sidebar does not own a `data-accent-color` hook, so the token story is omitted. The active row's wash is `var(--dsx-color-accent-3)` at 50% in dark and `var(--dsx-color-accent-4)` in light (G-19), and its text tracks `var(--dsx-color-accent-indicator)`, which is theme-aware.
418
442
 
419
443
  **A11y story:**
420
444
 
@@ -427,6 +451,7 @@ Rules:
427
451
  | `defaultExpanded` | boolean | `true` |
428
452
  | `hoverExpand` | boolean | `false` |
429
453
  | `previewOpen` | boolean | `false` |
454
+ | `variant` | select | `default` |
430
455
 
431
456
  ## Wiring notes
432
457
 
@@ -447,7 +472,7 @@ Rules:
447
472
 
448
473
  **State boundaries:**
449
474
 
450
- - Owned by `Sidebar`: the expanded / collapsed state, the temporary hover/focus preview, the persisted state in localStorage or cookies, the mobile detection, the global `Ctrl+B` / `Cmd+B` shortcut, the active menu button flag, the `data-state`, `data-collapsed`, `data-preview-expanded`, and `data-pinned-state` attributes, and the `data-active` attribute.
475
+ - Owned by `Sidebar`: the expanded / collapsed state, the temporary hover/focus preview, the persisted state in localStorage or cookies, the mobile detection, the global `Ctrl+B` / `Cmd+B` shortcut, the active menu button flag, the `data-state`, `data-collapsed`, `data-preview-expanded`, `data-pinned-state` and `data-variant` attributes, and the `data-active` attribute.
451
476
  - Owned by the consumer: the route map, the active-page detection, the disabled reasons, the auth and permissions policy, and the persistence target.
452
477
 
453
478
  **Boundary rules:**
@@ -65,7 +65,7 @@ The CSS file also targets `[data-sonner-toaster]` and `[data-sonner-toast]` dire
65
65
  **Responsive behavior:**
66
66
 
67
67
  - The component does not write `@media` rules. None of its prop defs are `responsive: true`.
68
- - The component's CSS file is breakpoint-agnostic, but the toaster layout shifts to a full-width style under `max-width: 640px` so mobile viewports receive a sensible default.
68
+ - The package stylesheet uses an intrinsic viewport width cap at every width; it has no width media queries. The adapter retains its own positioning rules and mobileOffset API.
69
69
 
70
70
  **Reduced motion:**
71
71
 
@@ -81,32 +81,33 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
81
81
  | Toaster z-index | `var(--dsx-z-index-toast)` | Toast stack. |
82
82
  | Toaster gap | `var(--dsx-space-md)` | Space between toasts. |
83
83
  | Toaster padding | `var(--dsx-space-md)` | Inner gutter. |
84
- | Toast padding block | `var(--dsx-space-sm)` | Toast vertical padding. |
84
+ | Toast padding block | `var(--dsx-space-md)` | Toast vertical padding. |
85
85
  | Toast padding inline | `var(--dsx-space-md)` | Toast horizontal padding. |
86
86
  | Toast background | `var(--dsx-color-surface)` | Resting toast surface. |
87
87
  | Toast radius | `var(--dsx-rounded-md)` | Toast corner roundness. |
88
88
  | Toast border | `var(--dsx-border-width-sm) solid var(--dsx-color-outline)` | Toast edge. |
89
89
  | Toast shadow | `var(--dsx-shadow-elevation-5)` | Spotlight: below dialogs, above all menus (B4 Q3). |
90
- | Toast gap | `var(--dsx-space-md)` | Gap between icon, title, description, and buttons. |
90
+ | Toast gap | `var(--dsx-space-sm)` | Gap between icon, body and close; action row below. |
91
91
  | Success border | `var(--dsx-color-success)` | Success variant edge. |
92
92
  | Error background | `var(--dsx-color-error-container)` | Error variant surface. |
93
93
  | Error border | `var(--dsx-color-error)` | Error variant edge. |
94
94
  | Error text | `var(--dsx-color-on-error-container)` | Error variant text. |
95
- | Warning border | `var(--dsx-color-tertiary)` | Warning variant edge. |
96
- | Info border | `var(--dsx-color-secondary)` | Info variant edge. |
95
+ | Warning border | `var(--dsx-color-warning)` | Warning variant edge. |
96
+ | Info border | `var(--dsx-color-info)` | Info variant edge. |
97
97
  | Title typography | `var(--dsx-typography-label-large-*)` | Toast title. |
98
+ | Title line-height | `var(--dsx-size-md)` | First line centred with the 24px icon/Close boxes. |
98
99
  | Title text | `var(--dsx-color-on-surface)` | Default title color. |
99
100
  | Description typography | `var(--dsx-typography-body-medium-*)` | Toast description. |
100
101
  | Description text | `var(--dsx-color-on-surface-variant)` | Default description color. |
101
102
  | Action, cancel, close | `var(--dsx-color-on-surface-variant)` | Default button text. |
102
- | Action, cancel, close padding | `var(--dsx-space-xs) var(--dsx-space-sm)` | Button padding. |
103
+ | Action / cancel padding and height | `var(--dsx-space-xs) var(--dsx-space-sm)`, minimum `--dsx-size-lg` | Labelled controls below the message. |
104
+ | Close dimensions / padding | `--dsx-size-md`, `0` | 24px box at the trailing top edge. |
103
105
  | Action, cancel, close radius | `var(--dsx-rounded-sm)` | Button corner roundness. |
104
106
  | Action, cancel, close hover background | `var(--dsx-color-high-contrast-container)` | Hover affordance. |
105
107
  | Action, cancel, close hover text | `var(--dsx-color-high-contrast)` | Hover affordance. |
106
108
  | Error title, description, close text | `var(--dsx-color-on-error-container)` | Error variant text. |
107
- | Mobile width | `calc(100vw - var(--dsx-size-md))` | Mobile max width. |
108
- | Mobile padding | `var(--dsx-space-sm)` | Mobile padding. |
109
- | Mobile inset | `var(--dsx-space-3)` | Mobile offset. |
109
+
110
+ The first row places an optional icon, a shrinkable message body and a trailing Close in separate columns. The title line-height uses size-md (24px), aligning its first line with the centres of the 24px icon and Close boxes, including wrapped titles. Action and cancel controls occupy a second row below the message, preserving readable label widths. Without an icon, the message starts in the first column.
110
111
 
111
112
  ## Motion contract
112
113
 
@@ -131,7 +132,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
131
132
 
132
133
  **Focus:**
133
134
 
134
- - Visible focus ring via the host application's focus styles. The DS does not add a custom focus ring; apps that need a custom ring can target the action, cancel, and close buttons from the host.
135
+ - Action, cancel and close controls have the package focus ring and a minimum 24px control box. Actions retain their intrinsic label width; the text column shrinks and wraps within the available toast width.
135
136
 
136
137
  **Reduced motion:**
137
138
 
@@ -165,7 +166,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
165
166
 
166
167
  **Token story:**
167
168
 
168
- - Renders inside a `Theme` wrapper with `accentColor="amber"`, `accentColor="silver"`, and `accentColor="bronze"`. Asserts the toaster host renders inside the wrapper and the variant borders continue to render with the package tokens.
169
+ - Renders inside a `Theme` wrapper with `accentColor="rift"`, `accentColor="astral"`, and `accentColor="spark"`. Asserts the toaster host renders inside the wrapper and the variant borders continue to render with the package tokens.
169
170
 
170
171
  **Props exposed in the playground controls:**
171
172
 
@@ -186,7 +187,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
186
187
 
187
188
  **Used by:**
188
189
 
189
- - `NotificationCenter`: composes `Sonner` plus `Toast`, `Card`, and `DataList` for the inbox-style notification surface. The pattern-level `NotificationCenter` is the intended product composition; `Sonner` itself is a leaf surface.
190
+ - Consumers compose transient notifications with `Sonner`; `NotificationCenter` is a separate inbox surface and does not render this adapter internally.
190
191
 
191
192
  **State boundaries:**
192
193
 
@@ -228,8 +229,8 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
228
229
  | Success toast | stroke | `var(--dsx-color-success)` | Color | `strokes` |
229
230
  | Error toast | fill | `var(--dsx-color-error-container)` | Color | `fills` |
230
231
  | Error toast | stroke | `var(--dsx-color-error)` | Color | `strokes` |
231
- | Warning toast | stroke | `var(--dsx-color-tertiary)` | Color | `strokes` |
232
- | Info toast | stroke | `var(--dsx-color-secondary)` | Color | `strokes` |
232
+ | Warning toast | stroke | `var(--dsx-color-warning)` | Color | `strokes` |
233
+ | Info toast | stroke | `var(--dsx-color-info)` | Color | `strokes` |
233
234
  | Title | text fill | `var(--dsx-color-on-surface)` | Color | `fills` |
234
235
  | Description | text fill | `var(--dsx-color-on-surface-variant)` | Color | `fills` |
235
236
  | Error title, description | text fill | `var(--dsx-color-on-error-container)` | Color | `fills` |
@@ -241,8 +242,8 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
241
242
  | `default` | `var(--dsx-color-surface)` | `var(--dsx-color-outline)` | `var(--dsx-color-on-surface)` |
242
243
  | `success` | `var(--dsx-color-surface)` | `var(--dsx-color-success)` | `var(--dsx-color-on-surface)` |
243
244
  | `error` | `var(--dsx-color-error-container)` | `var(--dsx-color-error)` | `var(--dsx-color-on-error-container)` |
244
- | `warning` | `var(--dsx-color-surface)` | `var(--dsx-color-tertiary)` | `var(--dsx-color-on-surface)` |
245
- | `info` | `var(--dsx-color-surface)` | `var(--dsx-color-secondary)` | `var(--dsx-color-on-surface)` |
245
+ | `warning` | `var(--dsx-color-surface)` | `var(--dsx-color-warning)` | `var(--dsx-color-on-surface)` |
246
+ | `info` | `var(--dsx-color-surface)` | `var(--dsx-color-info)` | `var(--dsx-color-on-surface)` |
246
247
 
247
248
  ### Variant model
248
249
 
@@ -257,3 +258,11 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
257
258
  - [ ] Token bindings resolve at the values `DESIGN.md` describes.
258
259
  - [ ] Component is promoted to Main Component under `Components`.
259
260
  - [ ] `penpotUtils.shapeStructure(board, 3)` matches the expected hierarchy.
261
+
262
+ ## Overlay review fixture
263
+
264
+ `/docs/sonner` owns one Toaster in its live example; matrix buttons use that
265
+ host rather than mounting duplicates. One action emits one notification.
266
+ Save draft with undo updates visible feedback through its action callback.
267
+ The adapter retains its preferred width, capped by viewport minus
268
+ dialog-viewport-gap. Package padding remains space-md at every width.
@@ -38,7 +38,7 @@ A multi-step wizard or progress indicator that pairs a numbered indicator with a
38
38
 
39
39
  - The root is a flex container. In `orientation="horizontal"` (the default) it is a `flex-direction: row` with `align-items: center`. In `orientation="vertical"` it is a `flex-direction: column` with `align-items: flex-start`.
40
40
  - `Stepper.Item` is a flex container. In horizontal orientation the item itself flips to `flex-direction: column` so the indicator sits above the label / description. In vertical orientation the item stays in a `flex-direction: row` and is `width: 100%` so the indicator, label, description, and content lay out side by side.
41
- - `Stepper.Indicator` is a circular `var(--dsx-size-md)` badge with a 1px outline. It uses the `label-medium` type ramp. State colors (complete, current, error, disabled) are applied via the parent `Item`'s modifier class.
41
+ - `Stepper.Indicator` is a circular `var(--dsx-stepper-indicator-size)` badge with a 1px outline. It uses the `label-medium` type ramp. State colors (complete, current, error, disabled) are applied via the parent `Item`'s modifier class.
42
42
  - `Stepper.Separator` is the connector. In horizontal orientation it is a `flex: 1` bar that fills the available space; in vertical orientation it is a `var(--dsx-border-width-lg)` wide, `var(--dsx-space-lg)` tall bar offset to the right of the indicator.
43
43
 
44
44
  ## Props contract
@@ -107,36 +107,11 @@ These slots accept only `asChild` plus the standard HTML attribute surface for t
107
107
 
108
108
  ## Token mapping
109
109
 
110
- Every CSS value the component paints is a `var(--dsx-*)` token.
110
+ Indicator diameter is a component-local size variable: sm → `var(--dsx-size-md)` (24px), md → `var(--dsx-size-lg)` (32px), lg → `var(--dsx-size-xl)` (40px). The same variable anchors both orientations’ connectors. Labels/descriptions wrap within their column.
111
111
 
112
- | Property | Token | Role |
113
- |---|---|---|
114
- | Item gap | `var(--dsx-space-sm)` | Gap between indicator and label / description |
115
- | Indicator size | `var(--dsx-size-md)` | Indicator width and height |
116
- | Indicator border | `var(--dsx-border-width-sm) solid var(--dsx-color-outline)` | Indicator edge |
117
- | Indicator background | `var(--dsx-color-surface)` | Indicator surface |
118
- | Indicator radius | `var(--dsx-rounded-full)` | Circular indicator |
119
- | Indicator type ramp | `var(--dsx-typography-label-medium-*)` | Indicator number |
120
- | Indicator text color | `var(--dsx-color-on-surface-variant)` | Indicator text |
121
- | Complete indicator | `var(--dsx-color-success)` (border + background), `var(--dsx-color-on-success)` (text) | Success palette |
122
- | Current indicator | `var(--dsx-color-primary)` (border + background), `var(--dsx-color-on-primary)` (text) | Primary palette |
123
- | Error indicator | `var(--dsx-color-error)` (border + background), `var(--dsx-color-on-error)` (text) | Error palette |
124
- | Disabled item | `var(--dsx-opacity-disabled)` | Disabled opacity |
125
- | Label type ramp | `var(--dsx-typography-label-large-*)` | Label text |
126
- | Label color | `var(--dsx-color-on-surface)` | Default label color |
127
- | Pending / disabled label | `var(--dsx-color-on-surface-variant)` | Pending / disabled label color |
128
- | Description color | `var(--dsx-color-on-surface-variant)` | Description text |
129
- | Description type ramp | `var(--dsx-typography-body-medium-*)` | Description text |
130
- | Separator height | `var(--dsx-border-width-lg)` | Default connector thickness |
131
- | Separator background | `var(--dsx-color-outline-variant)` | Default connector color |
132
- | Separator radius | `var(--dsx-rounded-full)` | Connector roundness |
133
- | Separator min-width | `var(--dsx-space-md)` | Min horizontal connector length |
134
- | Horizontal separator offset | `margin-top: calc(var(--dsx-size-md) / 2 - var(--dsx-border-width-lg) / 2)`, `margin-left: var(--dsx-space-sm)`, `margin-right: var(--dsx-space-sm)` | Alignment with the indicator centerline |
135
- | Vertical separator width | `var(--dsx-border-width-lg)` | Vertical connector thickness |
136
- | Vertical separator height | `var(--dsx-space-lg)` | Vertical connector length |
137
- | Vertical separator offset | `flex: 0`, `margin-left: calc(var(--dsx-size-md) / 2 - var(--dsx-border-width-lg) / 2)`, `min-height: var(--dsx-space-lg)` | Centered alignment with the indicator centerline |
138
- | Complete-separator color | `var(--dsx-color-primary)` | Connector after a complete step |
139
- | Content margin-top | `var(--dsx-space-lg)` | Panel offset |
112
+ Horizontal items share equal widths; each non-final item draws a connector from the indicator edge to the next item. Vertical items draw a connector from the indicator bottom through the item padding. `Stepper.Separator` remains a supported DOM slot and is visually hidden in both shipped orientations.
113
+
114
+ Indicators retain state tokens: complete uses success/on-success; current uses primary/on-primary; error uses error/on-error; pending uses surface/outline/on-surface-variant. Disabled opacity uses opacity-disabled. Connector thickness uses border-width-lg, resting color outline-variant, completed color primary. Labels and descriptions use label-large/body-medium typography. Item gap uses space-sm; horizontal column gap uses space-lg.
140
115
 
141
116
  ## Motion contract
142
117
 
@@ -183,9 +158,9 @@ The component has no motion. State transitions (complete / current / pending / e
183
158
  The vertical `Stepper` layout previously had two visual defects:
184
159
 
185
160
  1. The `.dsx-stepper--vertical .dsx-stepper__separator` override did not reset the base `flex: 1`, causing the separator to grow along the main axis in vertical orientation.
186
- 2. The `margin-left` was `calc(var(--dsx-size-md) / 2)` without subtracting half the separator width, offsetting the connector from the indicator centerline.
161
+ 2. The `margin-left` was `calc(var(--dsx-stepper-indicator-size) / 2)` without subtracting half the separator width, offsetting the connector from the indicator centerline.
187
162
 
188
- Both issues are now fixed: the vertical override sets `flex: 0` and uses `margin-left: calc(var(--dsx-size-md) / 2 - var(--dsx-border-width-lg) / 2)` to center the connector under the indicator.
163
+ Both issues are now fixed: the vertical override sets `flex: 0` and uses `margin-left: calc(var(--dsx-stepper-indicator-size) / 2 - var(--dsx-border-width-lg) / 2)` to center the connector under the indicator.
189
164
 
190
165
  ## Playground demo spec
191
166
 
@@ -229,7 +204,7 @@ Both issues are now fixed: the vertical override sets `flex: 0` and uses `margin
229
204
  **Used by:**
230
205
 
231
206
  - App-level onboarding flows, multi-step forms, and wizard navigation. The roster explicitly calls out that `Stepper` is a composite, not a pattern, and that it must compose primitive `Indicator + Separator + Label` parts rather than a parallel visual shell.
232
- - Timeline (rail recipe consumer, CSS contract only — no component dependency): Timeline reuses the vertical rail geometry (dot-column centering calc, marker-bottom anchor, size-aware offsets, active-state recolor) for its left rail and centered alternate spine, while keeping its own Item/Marker/Content/Connector API, its own event states, and its own (non-progressbar) semantics. The vertical rail rules in `stepper.css` are the layout engine of record; keep them in sync with `timeline.css`.
207
+ - Timeline (rail recipe consumer, CSS contract only — no component dependency): Timeline reuses the vertical rail geometry (dot-column centering calc, marker-bottom anchor, size-aware offsets, active-state recolor) for its left rail and centered alternate spine, while keeping its own Item/Marker/Content/Connector API, its own event states, and its own (non-progressbar) semantics. The components share the rail recipe but own their size variables independently.
233
208
 
234
209
  **State boundaries:**
235
210
 
@@ -105,7 +105,7 @@ Rules:
105
105
 
106
106
  ## Playground demo spec
107
107
 
108
- `Strong` is registered in `apps/playground/lib/registry/typography.tsx` under the `strong` key. The registry entry imports `strongPropDefs` and renders the component with a sample strong span. Per-component route: `/docs/strong`.
108
+ `Strong` is registered in `apps/playground/lib/registry/typography.tsx` under the `strong` key. The registry entry imports `strongPropDefs` and renders the component with a sample strong span. Per-component route: `/docs/strong`. The live example uses English and Russian sentence context plus a slotted span.
109
109
 
110
110
  **Default story:**
111
111