@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
@@ -179,42 +179,11 @@ Box has no motion. The motion section is intentionally empty.
179
179
 
180
180
  - Box is not interactive and does not require an accessible name on its own. When Box wraps an interactive element, the interactive element's accessible name is the source.
181
181
 
182
- ## Playground demo spec
183
-
184
- **Default story:**
185
-
186
- - Renders `Box` with no extra props and a child node. Asserts the root class is `dsx-box` and the host element is a `div`.
187
-
188
- **Padding story:**
189
-
190
- - Renders `Box padding="md"` and `Box p="md"` side by side. Asserts the matching `dsx-r-p-md` class and that `--dsx-box-padding` plus `--dsx-r-p` resolve to `var(--dsx-space-md)`.
191
-
192
- **Surface story:**
193
-
194
- - Renders `Box surface="surface-raised" border borderTone="strong" radius="md" shadow="2"`. Asserts that the `dsx-box` root class is present and the inline style carries the resolved CSS variables for surface, border, and shadow.
195
-
196
- **Responsive story:**
182
+ The padding matrix uses outlined content bounds and the surface matrix uses actual Box surface props. The live example offers sm/md/lg padding controls (8/16/24px) around a fixed inner surface.
197
183
 
198
- - Renders `Box padding={{ initial: 'sm', md: 'lg' }} display={{ initial: 'flex', lg: 'grid' }}`. Asserts the `dsx-r-p-sm`, `md:dsx-r-p-lg`, and breakpoint variants for `display` resolve.
199
-
200
- **Token story:**
201
-
202
- - Box does not honor `data-accent-color`; surface tones come from `var(--dsx-color-*)` and respond to the active `Theme` wrapper automatically. Render `Box` inside a `Theme` with `accentColor="silver"` and `accentColor="bronze"`. The story asserts the surface variables come from the theme, not the brand color.
203
-
204
- **A11y story:**
205
-
206
- - Use `vitest-axe` against the rendered `Box`. The default story is a non-semantic `div` with no axe-critical content; tests assert no violations on the default render.
207
-
208
- **Props exposed in the playground controls:**
184
+ ## Playground demo spec
209
185
 
210
- | Prop | Control | Default |
211
- |---|---|---|
212
- | `display` | select | `block` |
213
- | `padding` | select | `md` |
214
- | `radius` | select | `md` |
215
- | `surface` | select | `surface` |
216
- | `border` | boolean | `false` |
217
- | `shadow` | select | `none` |
186
+ The matrix exposes padding sm/md/lg and three neutral surfaces. Every cell outlines the content bounds inside a Box with an actual padding/surface prop. The live example changes padding between 8/16/24px around an unchanged inner project surface. It uses native Buttons with aria-pressed and remains bounded at 320px.
218
187
 
219
188
  ## Wiring notes
220
189
 
@@ -112,7 +112,7 @@ Rules:
112
112
 
113
113
  **Responsive behavior:**
114
114
 
115
- - The component does not write `@media` rules. `size` is single-value only; the prop def is not `responsive: true`.
115
+ - The component does not use width breakpoints. `size` is single-value only; the prop def is not `responsive: true`.
116
116
 
117
117
  **Reduced motion:**
118
118
 
@@ -127,17 +127,18 @@ Rules:
127
127
  | Link radius | `var(--dsx-rounded-md)` | Rounded tap area. |
128
128
  | Link color | `var(--dsx-color-on-surface)` | Default link. |
129
129
  | Link hover background | `var(--dsx-effect-hover-ghost)` | Hover. |
130
- | Link hover color | `var(--dsx-color-primary)` | Hover. |
130
+ | Link hover color | `var(--dsx-color-accent-indicator)` | Hover. |
131
131
  | Link focus ring | `var(--dsx-shadow-focus-ring)` | Visible focus. |
132
132
  | Link disabled opacity | `var(--dsx-opacity-disabled)` | Disabled state. |
133
- | Page color | `var(--dsx-color-high-contrast)` | Current page text. |
133
+ | Page background | `var(--dsx-color-accent-surface)` | Subtle current-page fill. |
134
+ | Page color | `var(--dsx-color-accent-indicator)` | Current page text. |
134
135
  | Separator color | `var(--dsx-color-on-surface-variant)` | Divider. |
135
136
  | Typography (link and page) | `var(--dsx-typography-body-medium-*)` | Body copy. |
136
137
 
137
138
  Rules:
138
139
 
139
140
  - No raw color, spacing, radius, or motion values in `breadcrumb.css`.
140
- - The breadcrumb does not honor `data-accent-color`; the hover color uses `var(--dsx-color-primary)` directly because the active page is the only state the consumer needs to see in the accent color.
141
+ - Breadcrumb inherits the active theme accent roles: hover/current-page foreground uses accent-indicator and the current-page fill uses accent-surface.
141
142
 
142
143
  ## Motion contract
143
144
 
@@ -176,7 +177,7 @@ Rules:
176
177
 
177
178
  **Color and meaning:**
178
179
 
179
- - The current page is communicated by `aria-current` and the high-contrast text color. The color is not the only signal.
180
+ - The current page is communicated by `aria-current` and the accent foreground and current-page label. The color is not the only signal.
180
181
 
181
182
  **Naming:**
182
183
 
@@ -185,6 +186,8 @@ Rules:
185
186
 
186
187
  ## Playground demo spec
187
188
 
189
+ Size scales the link/page typography and padding: sm uses body-small and space-xs; md retains body-medium with space-xs/space-sm; lg uses body-large and space-sm/space-md. Link targets have a minimum 24px height, and long labels wrap within the available container.
190
+
188
191
  **Default story:**
189
192
 
190
193
  - Renders a `Breadcrumb` with three items: Home (link), Products (link), Keyboard (page). Asserts the root has `dsx-breadcrumb` and `data-size="md"`. Asserts the page has `aria-current="page"`.
@@ -273,7 +276,7 @@ Rules:
273
276
  | `<Link text>` | typography | `var(--dsx-typography-body-medium-*)` | Typography | `typography` |
274
277
  | `<Link text>` | color | `var(--dsx-color-on-surface)` | Color | `fills` |
275
278
  | `<Page text>` | typography | `var(--dsx-typography-body-medium-*)` | Typography | `typography` |
276
- | `<Page text>` | color | `var(--dsx-color-high-contrast)` | Color | `fills` |
279
+ | `<Page text>` | color | `var(--dsx-color-accent-indicator)` | Color | `fills` |
277
280
  | `<Separator icon>` | color | `var(--dsx-color-on-surface-variant)` | Color | `fills` |
278
281
 
279
282
  ### State transformations
@@ -281,8 +284,8 @@ Rules:
281
284
  | State | Link fill | Link background |
282
285
  |---|---|---|
283
286
  | `default` | `var(--dsx-color-on-surface)` | `transparent` |
284
- | `hover` | `var(--dsx-color-primary)` | `var(--dsx-effect-hover-ghost)` |
285
- | `focus-visible` | `var(--dsx-color-primary)` | `var(--dsx-shadow-focus-ring)` |
287
+ | `hover` | `var(--dsx-color-accent-indicator)` | `var(--dsx-effect-hover-ghost)` |
288
+ | `focus-visible` | `var(--dsx-color-accent-indicator)` | `var(--dsx-shadow-focus-ring)` |
286
289
  | `disabled` | `var(--dsx-color-on-surface)` with `var(--dsx-opacity-disabled)` | `transparent` |
287
290
 
288
291
  ### Variant model
@@ -295,3 +298,5 @@ Rules:
295
298
  - [ ] Token bindings resolve at the values `DESIGN.md` describes.
296
299
  - [ ] Component is promoted to Main Component under `Components`.
297
300
  - [ ] `penpotUtils.shapeStructure(board, 3)` matches the expected hierarchy.
301
+
302
+ Current-page text pairs accent-indicator with accent-surface, retaining readable foreground contrast in both appearances.
@@ -16,7 +16,7 @@ depends_on: []
16
16
 
17
17
  ## Purpose
18
18
 
19
- A bordered inline notice: an icon, a message, and an optional trailing action column. Distinct from `Alert` (in-page flow banner) and `Toast`/`Sonner` (transient) — `Callout` is a persistent, bordered box, most often used for contextual tips, warnings, or dismissible product notices.
19
+ A bordered inline notice: an icon, a message, and an optional action row. Distinct from `Alert` (in-page flow banner) and `Toast`/`Sonner` (transient) — `Callout` is a persistent, bordered box, most often used for contextual tips, warnings, or dismissible product notices.
20
20
 
21
21
  ## Anatomy & slots
22
22
 
@@ -26,10 +26,10 @@ A bordered inline notice: an icon, a message, and an optional trailing action co
26
26
 
27
27
  | Slot | Element | Renders | Notes |
28
28
  |---|---|---|---|
29
- | `Callout.Root` | `<div>` | `dsx-callout` | 3-column grid: `auto 1fr auto` (icon, text, actions). |
29
+ | `Callout.Root` | `<div>` | `dsx-callout` | Two-column grid: icon plus minmax(0, 1fr) content. Title, text and actions stack in column 2. |
30
30
  | `Callout.Icon` | `<div>` | `dsx-callout__icon` | Grid column 1. Sized by the `size` prop. |
31
31
  | `Callout.Text` | `<p>` | `dsx-callout__text` | Grid column 2. The message body. |
32
- | `Callout.Actions` | `<div>` | `dsx-callout__actions` | Grid column 3. **Optional** — a callout with no actions renders correctly; the 3rd grid track collapses to 0 width when nothing occupies it. Holds a dismiss button and/or other actions. |
32
+ | `Callout.Actions` | `<div>` | `dsx-callout__actions` | Optional wrapping action row in content column 2, below title/text. Without an Icon, all content uses column 1. |
33
33
 
34
34
  ## Props contract
35
35
 
@@ -94,7 +94,9 @@ Rules that apply to this row:
94
94
 
95
95
  Rules:
96
96
 
97
- - No raw color, spacing, or radius values in `callout.css`. The action column introduced no new tokens — it reuses `--dsx-space-xs` for its internal gap.
97
+ - No raw color, spacing, or radius values in `callout.css`. The action row introduces no new tokens — it reuses `--dsx-space-xs` for its internal gap.
98
+
99
+ When no `Callout.Icon` is rendered, Title, Text and Actions occupy the first grid column. No empty icon gutter is reserved.
98
100
 
99
101
  ## Motion contract
100
102
 
@@ -178,7 +180,7 @@ Rules:
178
180
 
179
181
  **State boundaries:**
180
182
 
181
- - Owned by `Callout`: the root class, variant/size modifier classes, the grid layout, and the three slot classes.
183
+ - Owned by `Callout`: the root class, variant/size modifier classes, the grid layout, and its slot classes.
182
184
  - Owned by the consumer: the message content, which action(s) render inside `Callout.Actions`, and any dismissal state/persistence (e.g. per-user dismissal tracked on the backend, per the `dashboard_notices` ask this slot was added for).
183
185
 
184
186
  **Boundary rules:**
@@ -193,7 +195,7 @@ Rules:
193
195
  ### Root board
194
196
 
195
197
  - **Name**: `Components / Callout`.
196
- - **Layout**: `Grid`, columns `auto 1fr auto`, gap per `size`.
198
+ - **Layout**: `Grid`, columns `auto minmax(0, 1fr)`, gap per `size`.
197
199
 
198
200
  ### Layer tree
199
201
 
@@ -217,4 +219,13 @@ Rules:
217
219
 
218
220
  - [ ] Token bindings resolve at the values `DESIGN.md` describes.
219
221
  - [ ] Component is promoted to Main Component under `Components`.
220
- - [ ] Grid renders correctly with `Actions` present and absent (3rd column collapses to 0 width when empty).
222
+ - [ ] Grid renders with optional Title, Icon and Actions; actions wrap below copy.
223
+
224
+ ## Overlay review composition
225
+
226
+ `Callout.Title` is an existing h3 slot with class `dsx-callout__title`. Its
227
+ heading, Text and wrapping Actions stack beside an Icon that spans the rows.
228
+ Without Icon the root becomes a single column. Text has margin=0 and
229
+ min-width=0; long copy wraps. Existing tone values info/warning/success/danger
230
+ select semantic border and icon colors; highContrast uses the high-contrast
231
+ foreground. `/docs/callout` shows all tones and real dismiss/restore actions.
@@ -126,15 +126,15 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
126
126
  | Glass inset rim | `var(--dsx-effect-panel-glass-rim)` | Theme-aware subtle inset perimeter |
127
127
  | Glass border | `var(--dsx-effect-panel-glass-border)` | Theme-aware outer edge |
128
128
  | Shadow (glass) | `var(--dsx-shadow-panel-shadow)` | Glass shadow |
129
- | Glass backdrop | `var(--dsx-effect-panel-glass-backdrop-filter)` | Glass blur |
129
+ | Glass backdrop | `var(--dsx-effect-panel-glass-backdrop-filter)` | Glass blur. Declared as `-webkit-backdrop-filter` first and the standard `backdrop-filter` last: the Next/Turbopack CSS pipeline drops the standard line when it comes first, and the blur silently disappears (B-1, 2026-10-04). This spec directs that order in `_internal/baseCard.css`; `src/test/styles/backdrop-filter-order.test.ts` guards it for every rule in the package. |
130
130
  | Surface (elevated) | `var(--dsx-color-surface-raised)` | Elevated surface |
131
131
  | Shadow (elevated) | `var(--dsx-shadow-elevation-3, var(--dsx-effect-shadow-3))` (hover: `--elevation-4`) | Elevated shadow |
132
132
  | Surface (filled) | `var(--dsx-color-surface)` | Filled surface (no shadow) |
133
133
  | Surface (outline) | `transparent` (plus `--dsx-effect-panel-solid-backdrop-filter`) | Compatibility outline surface |
134
134
  | Active / selected surface | `var(--dsx-color-accent-surface)` | Active / selected card |
135
- | Active / selected border | `var(--dsx-color-accent-indicator)` | Active / selected card edge |
135
+ | Active / selected edge | `var(--dsx-boundary-selected-ring)` | Local accent-indicator 2px inset ring on every variant, including legacy outline; physical border is transparent, including under an outer light Theme |
136
136
  | High-contrast surface | `var(--dsx-color-high-contrast-container)` | High-contrast card |
137
- | High-contrast border | `var(--dsx-color-high-contrast-border)` | High-contrast card edge |
137
+ | High-contrast edge | `var(--dsx-boundary-high-contrast-ring)` | Local 2px inset ring; physical border is transparent |
138
138
  | High-contrast text | `var(--dsx-color-high-contrast)` | High-contrast text |
139
139
  | Hover border | `var(--dsx-color-outline-variant)` | Hover border color |
140
140
  | Hover background | `var(--dsx-effect-hover-layer)` over surface-raised | Hover surface |
@@ -148,6 +148,13 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
148
148
 
149
149
  The component is static. Hover state changes are instant; no transition is applied.
150
150
 
151
+ Selected and high-contrast edges survive hover. For the color-role repair,
152
+ the owning spec explicitly permits the narrow `baseCard.css` selector change:
153
+ exclude selected/high-contrast cards from generic hover and static-accent
154
+ edge/hover paint, and exclude selected cards from the light glass shadow override. This
155
+ keeps the shared engine from replacing their inset rings; Alert and FileUpload
156
+ behavior is unchanged by these Card-only exclusions.
157
+
151
158
  ## Accessibility
152
159
 
153
160
  **Roles:**
@@ -8,256 +8,69 @@ depends_on: []
8
8
 
9
9
  # Code
10
10
 
11
- > Consumer note: this document describes public intent and contracts; the package TypeScript declarations are the exact API.
11
+ > Source of truth: the package source at `package_path`. The spec mirrors source in the same change.
12
12
 
13
13
  ## Purpose
14
14
 
15
- An inline monospace code token that renders a `<code>` element with a `variant` background and border treatment, a `tone` color override, a `size` scale, an optional `color` accent, a `highContrast` toggle, and the shared `asChild` infra. For multi-line code, compose inside a `<pre>`.
15
+ Monospace inline code with four treatments, three genuine sizes, optional accent foreground, tone and high contrast. Multi-line code uses a consumer-owned `pre > Code` composition and an overflow container.
16
16
 
17
17
  ## Anatomy & slots
18
18
 
19
- **Parent:** `Code` (no compound; flat polymorphic export).
20
-
21
- **Slots:**
22
-
23
- No slots: flat export. The component renders a single `<code>` host element (or the consumer's host element when `as` or `asChild` is set) with the `dsx-code` root class, the variant modifier class, and any `tone` modifier class.
19
+ A single `<code>` root with `dsx-code`; no compound slots. `asChild` slots a consumer host. Native code attributes and refs are forwarded.
24
20
 
25
21
  ## Props contract
26
22
 
27
23
  | Prop | Type | Default | Required | Description | Responsive |
28
24
  |---|---|---|---|---|---|
29
- | `variant` | `'solid' \| 'soft' \| 'outline' \| 'ghost'` | `'soft'` | no | Code treatment. Writes the `dsx-code--{variant}` modifier class and the `data-variant` attribute. `solid` paints a primary background; `soft` paints a sunken surface with an outline; `outline` paints a transparent background with an inset outline; `ghost` paints nothing. | no |
30
- | `tone` | `'default' \| 'muted' \| 'inverse'` | `'default'` | no | Tone modifier. Writes `dsx-code--{tone}` for `muted` and `inverse`. The CSS combines `dsx-code--solid.dsx-code--muted` and `dsx-code--soft.dsx-code--inverse` for tone-on-variant pairings. | no |
31
- | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Code cap size. Writes the `data-size` attribute. | no |
32
- | `color` | `string` | `undefined` | no | Free-form accent color. Writes the `data-accent-color` attribute. The component is not opinionated about the value; consumers that pass it get the `data-accent-color` attribute for downstream CSS targeting. | no |
33
- | `highContrast` | `boolean` | `false` | no | When `true`, writes `data-high-contrast="true"`. | no |
34
- | `asChild` | `boolean` | `false` | no | Renders the host through `Slot` from `@radix-ui/react-slot`; consumer supplies the host element. | no |
35
- | `className` | `string` | `undefined` | no | Extra classes appended to `dsx-code`. | no |
36
- | `style` | `React.CSSProperties` | `undefined` | no | Extra inline style forwarded to the host element. | no |
37
- | `children` | `React.ReactNode` | `undefined` | no | Code body (typically a short token, a function name, or a small literal). | no |
38
-
39
- Rules that apply to this row:
40
-
41
- - `Code` extends `Omit<ComponentPropsWithoutRef<'code'>, 'color'>` because `color` is redefined by the prop def bag.
42
- - `variant`, `tone`, `size`, `color`, `highContrast`, and `asChild` flow through `extractProps` and the prop def bag.
43
- - `data-variant`, `data-size`, `data-accent-color`, and `data-high-contrast` are written alongside the modifier classes so the CSS can target them through attribute selectors.
44
- - The `color` prop in the prop def has `default: undefined` and an empty `values: [] as const` array, so the runtime accepts any string but the prop def does not enumerate values. The TS type resolves to `string | undefined`.
25
+ | `variant` | `'solid' \| 'soft' \| 'outline' \| 'ghost'` | `'soft'` | no | Writes `dsx-code--{variant}` and `data-variant`. | no |
26
+ | `tone` | `'default' \| 'muted' \| 'inverse'` | `'default'` | no | Non-default tones write `dsx-code--{tone}`. | no |
27
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | no | Writes `data-size`; small is 0.85×, default 1× and large 1.15× the code font-size token. Inline gutter remains compact at all sizes; ghost has none. | no |
28
+ | `color` | `'rift' \| 'warp' \| 'ray' \| string` | `undefined` | no | Writes `data-accent-color`; recognized accents resolve semantic tokens, including astral/spark. Unknown strings retain ambient tokens. | no |
29
+ | `highContrast` | `boolean` | `false` | no | Writes `data-high-contrast="true"` and paints a real contrast treatment. | no |
30
+ | `asChild` | `boolean` | `false` | no | Slot the consumer host. | no |
31
+ | `className` | `string` | `undefined` | no | Additional classes. | no |
32
+ | `style` | `React.CSSProperties` | `undefined` | no | Forwarded style. | no |
33
+ | `children` | `React.ReactNode` | `undefined` | no | Code content. | no |
45
34
 
46
35
  ## CSS class contract
47
36
 
48
- **Root class:** `dsx-code`
49
-
50
- **Modifier classes** (driven by the `variant` and `tone` prop defs and the `data-*` attributes):
51
-
52
- | Attribute | Allowed values | Class | CSS file |
53
- |---|---|---|---|
54
- | (class) | `solid`, `soft`, `outline`, `ghost` | `dsx-code--{variant}` | `code.css` |
55
- | (class) | `muted`, `inverse` | `dsx-code--muted`, `dsx-code--inverse` | `code.css` |
56
- | `data-variant` | `solid`, `soft`, `outline`, `ghost` | `.dsx-code[data-variant='{variant}']` | `code.css` |
57
- | `data-size` | `sm`, `md`, `lg` | (CSS contract for size) | n/a |
58
- | `data-accent-color` | any custom string | (no rule in the source CSS) | n/a |
59
- | `data-high-contrast` | `true` | (no rule in the source CSS) | n/a |
60
-
61
- **Slot classes:** none.
62
-
63
- **Responsive behavior:**
64
-
65
- - The component does not write `@media` rules. `size` is single-value only; the prop def is not `responsive: true`. The CSS for `data-size` is left to downstream CSS.
37
+ Root: `dsx-code`. Modifier classes: `dsx-code--solid`, `--soft`, `--outline`, `--ghost`, `--muted`, `--inverse`. Attributes: `data-variant`, `data-size`, `data-accent-color`, `data-high-contrast`. There are no viewport breakpoints.
66
38
 
67
- **Reduced motion:**
68
-
69
- - Code has no motion. No transitions or animations are declared in `code.css`.
39
+ - Soft: contextual neutral wash, normal foreground, no outline. It remains an inline text treatment rather than an input frame.
40
+ - Solid: accent-track fill with accent-contrast foreground. Muted and inverse retain that readable filled pairing.
41
+ - Outline: transparent with an inset outline.
42
+ - Ghost: transparent, no outline or padding at every size.
43
+ - A non-solid explicit color uses accent-indicator, except inverse tone, which preserves its inverse foreground.
44
+ - Soft inverse uses the inverse-background / on-inverse-background pair and no shadow.
45
+ - High contrast: soft uses high-contrast-container / high-contrast; solid uses high-contrast / on-high-contrast; outline and ghost use high-contrast ink. Inverse soft/outline/ghost retain their inverse foreground and surface pairing when high contrast is enabled. The inverse context already supplies the contrasting pair; a normal-surface ink must not replace it.
70
46
 
71
47
  ## Token mapping
72
48
 
73
- Every CSS value the component paints is a `var(--dsx-*)` token.
74
-
75
49
  | Property | Token | Role |
76
50
  |---|---|---|
77
- | Font family | `var(--dsx-typography-code-font-family)` | Monospace stack (token-backed; see rules). |
78
- | Font size | `var(--dsx-typography-code-font-size)` | Default code size. |
79
- | Font weight | `var(--dsx-typography-code-font-weight)` | Code weight. |
80
- | Line height | `var(--dsx-typography-code-line-height)` | Code rhythm. |
81
- | Letter spacing | `var(--dsx-typography-code-letter-spacing)` | Code tracking. |
82
- | Border radius | `var(--dsx-rounded-sm)` | Code cap roundness. |
83
- | Padding | `var(--dsx-space-0-5, 2px) var(--dsx-space-1-5, 6px)` | Inline gutter. |
84
- | Background (soft) | `var(--dsx-color-surface-sunken)` | Soft surface (Direction #3 Q1 pick: sunken, pressed into the page). |
85
- | Border (soft) | `var(--dsx-color-outline-variant)` | Soft outline (via `inset 0 0 0 1px`). |
86
- | Background (solid) | `var(--dsx-color-primary)` | Solid surface. |
87
- | Color (solid) | `var(--dsx-color-on-primary)` | Solid text. |
88
- | Outline (outline) | `var(--dsx-shadow-inset-outline)` | Inset outline. |
89
- | Color (outline) | `var(--dsx-color-on-surface)` | Outline text. |
90
- | Color (ghost) | `var(--dsx-color-on-surface)` | Ghost text. |
91
- | Color (muted) | `var(--dsx-color-on-surface-variant)` | Muted tone. |
92
- | Color (solid + muted) | `color-mix(in srgb, var(--dsx-color-on-primary) 65%, transparent)` | Muted text on solid. |
93
- | Color (inverse) | `var(--dsx-color-on-inverse-background)` | Inverse-context color. |
94
- | Background (soft + inverse) | `color-mix(in srgb, var(--dsx-color-on-high-contrast) 15%, transparent)` | Inverse soft surface. |
95
- | Color (soft + inverse) | `var(--dsx-color-on-high-contrast)` | Inverse soft text. |
51
+ | Typography | `--dsx-typography-code-*` | JetBrains Mono family, font size, weight, line height, tracking, axes, case and decoration. |
52
+ | Small / large font size | code font-size × 0.85 / × 1.15 | Existing scale preserved. |
53
+ | Padding | `--dsx-space-0-5`, `--dsx-space-1-5` | Compact inline gutters at every size; ghost has zero padding. |
54
+ | Radius / outline | `--dsx-rounded-sm` / `--dsx-shadow-inset-outline` | Cap geometry; edge belongs to the outline variant only. |
55
+ | Soft | `--dsx-code-soft-background`, `--dsx-color-on-surface` | Neutral wash from the dedicated gray-alpha-3 effect; also used by the consumer preformatted example. |
56
+ | Solid | `--dsx-color-accent-track`, `--dsx-color-accent-contrast` | Filled code with readable foreground. |
57
+ | Accent / muted / inverse | `--dsx-color-accent-indicator`, `--dsx-color-on-surface-variant`, inverse-background + on-inverse-background | Context roles. |
58
+ | High contrast | high-contrast-container + high-contrast, high-contrast + on-high-contrast | Self-contained soft/solid pairs. |
96
59
 
97
- Rules:
98
-
99
- - The monospace font stack resolves from `var(--dsx-typography-code-font-family)` (the `code` node in `tokens/typography.json`); it is token-backed, not a CSS hard-code.
100
- - The `color-mix` expressions are token-driven; the alpha is encoded in the token, not as a raw value.
60
+ No local alpha mixing or primitive accent ramp reference is authored here. The component bridge references the existing gray-12-at-10% effect and is rebound at local theme/accent/gray boundaries. Soft and ghost stay distinct on page, shell and raised backgrounds.
101
61
 
102
62
  ## Motion contract
103
63
 
104
- | Region | Token | Default | Reduced |
105
- |---|---|---|---|
106
- | (none) | `none` | `none` | `none` |
107
-
108
- Rules:
109
-
110
- - Code has no motion. The motion section is intentionally empty.
64
+ Static typography; no animation or transition.
111
65
 
112
66
  ## Accessibility
113
67
 
114
- **Roles:**
115
-
116
- - The component renders a `<code>` by default (or the consumer's host element when `as` / `asChild` is set). The semantic role of an inline code token is preserved.
117
-
118
- **Keyboard:**
119
-
120
- - Code is not interactive. No keyboard contract beyond the page-level Tab order.
121
-
122
- **Focus:**
123
-
124
- - Code has no focusable surface. Focus management is the consumer's responsibility when the code is wrapped in a focusable container.
125
-
126
- **Reduced motion:**
127
-
128
- - N/A. Code has no motion.
129
-
130
- **Color and meaning:**
131
-
132
- - The `variant` and `tone` props are visual modifiers. The code body itself carries the meaning.
133
-
134
- **Naming:**
135
-
136
- - No accessible name is required by default. Consumers that need an announced label for a code token (e.g. an inline icon) should supply `aria-label`.
68
+ Native `<code>` semantics are preserved. The component is non-interactive; no focus or touch target is required. Consumer hosts through `asChild` own their semantics. Surrounding copy explains the snippet. Preformatted content keeps its whitespace and can scroll horizontally in the consumer's bounded overflow region.
137
69
 
138
70
  ## Playground demo spec
139
71
 
140
- `Code` is registered in `apps/playground/lib/registry/typography.tsx` under the `code` key. The registry entry imports `codePropDefs` and renders the component with a sample code token. Per-component route: `/docs/code`.
141
-
142
- **Default story:**
143
-
144
- - Renders `Code` with a default code string. Asserts the root class is `dsx-code` and the variant modifier is `dsx-code--soft`. The `data-variant` attribute is `soft` and the `data-size` attribute is `md`. Host element is `CODE`.
145
-
146
- **Variant story:**
147
-
148
- - Renders Code with each `variant` value. Asserts the matching `dsx-code--{variant}` class and the matching `data-variant` attribute.
149
-
150
- **Size story:**
151
-
152
- - Renders Code with each `size` value. Asserts the `data-size` attribute on the root.
153
-
154
- **Color story:**
155
-
156
- - Renders Code with a `color` value (e.g. `color="blue"`). Asserts the `data-accent-color` attribute on the root.
157
-
158
- **Composition story** (for `asChild`):
159
-
160
- - Renders Code with `asChild` wrapping a `<span>` element. Asserts the host element is `SPAN` and the `dsx-code` class is preserved.
161
-
162
- **State story:**
163
-
164
- - Renders Code in muted and inverse states, including the variant-on-tone pairings (`solid` + `muted`, `soft` + `inverse`).
165
-
166
- **Token story:**
167
-
168
- - Renders inside a `Theme` wrapper. Code is not themed by `data-accent-color`; the story documents that the variant surfaces are visually unchanged across accent colors.
169
-
170
- **A11y story:**
171
-
172
- - The default render passes the `vitest-axe` no-violations check.
173
-
174
- **Props exposed in the playground controls:**
175
-
176
- | Prop | Control | Default |
177
- |---|---|---|
178
- | `variant` | select | `soft` |
179
- | `tone` | select | `default` |
180
- | `size` | select | `md` |
181
- | `color` | text | (empty) |
182
- | `highContrast` | boolean | `false` |
183
- | `asChild` | boolean | `false` |
72
+ `/docs/code`, typography registry. Matrix forwards all props. The live example compares all variants and sizes, muted/inverse/high-contrast states, all five accent strings, a slotted host, real inline configuration names and a preformatted snippet, and soft/ghost comparisons on page, shell and raised backgrounds. Inverse code has its paired background. Solid foreground remains readable on every accent in both appearances.
184
73
 
185
74
  ## Wiring notes
186
75
 
187
- **Composes from:**
188
-
189
- - `@radix-ui/react-slot` for `asChild`.
190
- - `_internal/helpers/extractProps` for the prop def bag.
191
- - `_internal/props/{asChild,highContrast}.prop` for the shared prop defs.
192
- - `_internal/cn` (via `classNames`) for class merging.
193
- - No DS component composition. Code is a leaf primitive.
194
-
195
- **Used by:**
196
-
197
- - The Playground typography registry, in-product inline code tokens, and any app surface that needs a monospace accent (command palettes, key hints, code samples, file paths).
198
-
199
- **State boundaries:**
200
-
201
- - Owned by Code: the root class, the variant and tone modifier classes, the `data-variant`, `data-size`, `data-accent-color`, and `data-high-contrast` attributes, and the prop def bag.
202
- - Owned by the consumer: the code body, the host element when `as` / `asChild` is set, and any extra `className` / `style` applied through prop forwarding.
203
-
204
- **Boundary rules:**
205
-
206
- - App-owned data: the code string, the surrounding prose context, and the host element when `asChild` is set.
207
- - DS-owned visuals: the `dsx-code` root class, the variant and tone modifier classes, the data attributes, and the prop def bag.
208
-
209
- ## Penpot build recipe
210
-
211
- > Optional. Penpot is a visual reference, not a code authority. The Code recipe tracks the variant, tone, size, color, and high-contrast contract.
212
-
213
- The package does not yet publish a Penpot asset for Code. The recipe is visual reference only and tracks the CSS contract.
214
-
215
- ### Root board
216
-
217
- - **Name**: `Primitives / Code`.
218
- - **Dimensions**: `auto × auto` (inline token).
219
- - **Layout**: `Flex` (inline).
220
- - **Sizing**: `horizontalSizing = 'auto'`, `verticalSizing = 'auto'`.
221
-
222
- ### Layer tree
223
-
224
- ```
225
- <Root Board: Code>
226
- └── <Text: code body (monospace)>
227
- ```
228
-
229
- ### Token bindings (Penpot properties)
230
-
231
- | Shape | Property | Token | Token type | Penpot property name |
232
- |---|---|---|---|---|
233
- | Root | typography | `--dsx-typography-code-*` token family | Typography | `typography` |
234
- | Root | radius | `--dsx-rounded-sm` | Radius | `radius` |
235
- | Root (soft) | fill | `--dsx-color-surface-raised` | Color | `fills` (state) |
236
- | Root (soft) | stroke | `--dsx-color-outline-variant` | Color | `strokes` (state) |
237
- | Root (solid) | fill | `--dsx-color-primary` | Color | `fills` (state) |
238
- | Root (solid) | text fill | `--dsx-color-on-primary` | Color | `fills` (state) |
239
- | Root (outline) | stroke | `--dsx-shadow-inset-outline` | Color | `strokes` (state) |
240
-
241
- ### State transformations
242
-
243
- | State | Root fill | Root stroke | Text fill |
244
- |---|---|---|---|
245
- | `soft` (default) | `--dsx-color-surface-raised` | `--dsx-color-outline-variant` | `--dsx-color-on-surface` |
246
- | `solid` | `--dsx-color-primary` | (none) | `--dsx-color-on-primary` |
247
- | `outline` | `transparent` | `--dsx-shadow-inset-outline` | `--dsx-color-on-surface` |
248
- | `ghost` | `transparent` | (none) | `--dsx-color-on-surface` |
249
-
250
- ### Variant model
251
-
252
- - `variant`: `soft`, `solid`, `outline`, `ghost`. Default `soft`.
253
- - `tone`: `default`, `muted`, `inverse`. Default `default`.
254
- - `size`: `sm`, `md`, `lg`. Default `md`.
255
- - `color` and `highContrast` documented in the spec body.
256
- - Total members: variant × tone × size = 4 × 3 × 3 = 36, plus the high-contrast toggle.
257
-
258
- ### Validation checklist
259
-
260
- - [ ] Token bindings resolve at the values `DESIGN.md` describes.
261
- - [ ] Component is promoted to Main Component under `Primitives`.
262
- - [ ] `penpotUtils.shapeStructure(board, 3)` matches the expected hierarchy.
263
- - [ ] Monospace font stack resolves from `--dsx-typography-code-font-family`; treat it as token-backed in Penpot.
76
+ Radix Slot implements `asChild`; `extractProps` consumes `codePropDefs`; classnames merges the root/modifiers. Code is a leaf primitive; the token layer scopes accent values. Apps own text, host, code language, syntax highlighting and preformatted overflow layout.
@@ -73,7 +73,7 @@ Rules:
73
73
 
74
74
  **Responsive behavior:**
75
75
 
76
- - The component does not write `@media` rules. The motion and layout are single-value only.
76
+ - The component does not use width breakpoints. The motion and layout are single-value only.
77
77
 
78
78
  **Reduced motion:**
79
79
 
@@ -86,7 +86,11 @@ Rules:
86
86
  }
87
87
  }
88
88
  ```
89
- The expand/collapse keyframes (`dsx-collapsible-expand`, `dsx-collapsible-collapse`) are gated off when the user prefers reduced motion. The chevron rotation uses `var(--dsx-motion-duration-fast)` and is not explicitly gated at the CSS level; the token layer should map it to `0` under reduced motion.
89
+ The expand/collapse keyframes (`dsx-collapsible-expand`, `dsx-collapsible-collapse`) are gated off when the user prefers reduced motion. The chevron rotation uses `var(--dsx-motion-duration-fast)` and is disabled in component CSS under reduced motion.
90
+
91
+ **Force-mounted content** (`Collapsible.Content forceMount`, used by `Sidebar.MenuSubTrigger`):
92
+
93
+ - The closed look of the content is the end frame of `dsx-collapsible-collapse` (`height: 0`, `opacity: 0`, `visibility: hidden`, held by the `both` fill). A force-mounted panel that first mounts closed never plays that animation, because Radix suppresses the mount animation by writing `animation-name: none` on the element. The runtime-inserted style block therefore hides it at rest: `.dsx-collapsible__content[data-state='closed']:where([style*='animation-name: none']) { display: none; }`. After any toggle Radix puts the animation back and the panel animates out as usual. Without this rule a closed sidebar parent listed all of its children (G-14, 2026-10-05).
90
94
 
91
95
  ## Token mapping
92
96
 
@@ -98,7 +102,7 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
98
102
  | Trigger padding | `var(--dsx-space-md)` | Internal gutter |
99
103
  | Trigger color | `var(--dsx-color-on-surface)` | Closed trigger text |
100
104
  | Trigger label type | `var(--dsx-typography-label-large-font-family)`, `var(--dsx-typography-label-large-font-size)` | Trigger text ramp |
101
- | Trigger open color | `var(--dsx-color-primary)` | Open trigger text |
105
+ | Trigger open color | `var(--dsx-color-accent-indicator)` | Open trigger text |
102
106
  | Trigger focus ring | `var(--dsx-shadow-focus-ring)` | Focus indicator |
103
107
  | Chevron transition | `var(--dsx-motion-duration-fast, 150ms) var(--dsx-motion-easing-standard, ease)` | Rotate transition |
104
108
  | Content padding | `var(--dsx-space-md)` | Inner content gutter |
@@ -107,12 +111,14 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
107
111
  | Expand/collapse duration | `var(--dsx-motion-duration-normal)` | Keyframe duration |
108
112
  | Expand/collapse easing | `var(--dsx-motion-easing-in-out)` | Keyframe easing |
109
113
 
114
+ Content height and vertical padding animate together from zero to their measured/underlying values. This prevents padding from clamping the first animation frames. The underlying endpoint retains consumer padding overrides, including `asChild` hosts. No wrapper is added.
115
+
110
116
  ## Motion contract
111
117
 
112
118
  | Region | Token | Default | Reduced |
113
119
  |---|---|---|---|
114
- | `dsx-collapsible__content` height + opacity | `var(--dsx-motion-duration-normal)` + `var(--dsx-motion-easing-in-out)` | 200ms in-out (token-dependent) | `animation: none !important` via the runtime-inserted `prefers-reduced-motion` block |
115
- | `dsx-collapsible__chevron` rotate | `var(--dsx-motion-duration-fast)` + `var(--dsx-motion-easing-standard)` | 150ms standard (token-dependent) | Token-layer override; the chevron transition is not explicitly gated at the CSS level |
120
+ | `dsx-collapsible__content` height + block-axis padding + opacity | `var(--dsx-motion-duration-normal)` + `var(--dsx-motion-easing-in-out)` | motion-duration-normal (token-dependent) | `animation: none !important` via the runtime-inserted `prefers-reduced-motion` block |
121
+ | `dsx-collapsible__chevron` rotate | `var(--dsx-motion-duration-fast)` + `var(--dsx-motion-easing-standard)` | 150ms standard (token-dependent) | Transition disabled in component CSS |
116
122
 
117
123
  ## Accessibility
118
124
 
@@ -126,15 +132,15 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
126
132
  |---|---|
127
133
  | `Tab` | Moves focus to the trigger. |
128
134
  | `Enter`, `Space` | Toggles the open state. |
129
- | `Escape` | Collapses the content if the content has focus. Behavior is owned by Radix. |
130
135
 
131
136
  **Focus:**
132
137
 
133
138
  - The trigger renders a visible focus ring via `box-shadow: var(--dsx-shadow-focus-ring)` on `:focus-visible`.
139
+ - A collapsed force-mounted panel is out of the tab order: the end frame of the collapse animation sets `visibility: hidden`, and a panel that mounted closed is `display: none`. Radix unmounts a panel that is not force-mounted.
134
140
 
135
141
  **Reduced motion:**
136
142
 
137
- - The runtime-inserted style block disables the expand/collapse keyframes when `prefers-reduced-motion: reduce` matches. The chevron rotation is not explicitly gated; consumers should rely on the global motion token override.
143
+ - The runtime-inserted style block disables the expand/collapse keyframes when `prefers-reduced-motion: reduce` matches. The chevron transition is disabled in component CSS as well.
138
144
 
139
145
  **Color and meaning:**
140
146
 
@@ -144,36 +150,11 @@ Every CSS value the component paints is a `var(--dsx-*)` token.
144
150
 
145
151
  - `Collapsible.Trigger` is the interactive element; the consumer's `children` become the button's accessible name.
146
152
 
147
- ## Playground demo spec
148
-
149
- **Default story:**
150
-
151
- - Renders a `Collapsible` with a trigger and content. Asserts the root renders as a transparent host and the trigger and content are present.
152
-
153
- **State story:**
154
-
155
- - Renders with `open`. Asserts the trigger has `data-state="open"` and the content is visible.
156
- - Renders with `defaultOpen={false}` and triggers a click. Asserts the trigger's `data-state` flips from `closed` to `open`.
157
- - Renders with `disabled`. Asserts the trigger is disabled and the content does not toggle.
153
+ The live example embeds a disclosure and moving footer in a project card. Disabled and initially expanded warp/ray examples remain separate.
158
154
 
159
- **Composition story:**
160
-
161
- - Renders the root wrapped in a `Card` to demonstrate the surface composition pattern. Asserts the trigger and content are present inside the card.
162
-
163
- **Token story:**
164
-
165
- - Renders inside a `Theme` wrapper with `accentColor="silver"` and `accentColor="bronze"`. Collapsible does not track `data-accent-color`; the story asserts the open trigger color continues to resolve through `var(--dsx-color-primary)`.
166
-
167
- **A11y story:**
168
-
169
- - Uses `vitest-axe` against the rendered default story. Asserts no axe violations.
170
-
171
- **Props exposed in the playground controls:**
155
+ ## Playground demo spec
172
156
 
173
- | Prop | Control | Default |
174
- |---|---|---|
175
- | `open` | boolean | `false` |
176
- | `disabled` | boolean | `false` |
157
+ The default render is a disclosure within a bounded consumer surface. The live project card includes fixed introductory content, optional project details, and a footer that moves with the disclosure. Separate disabled and initially expanded warp/ray examples expose the behavior and accent state. Normal-motion probes sample expansion and collapse; reduced motion skips both animations.
177
158
 
178
159
  ## Wiring notes
179
160
 
@@ -236,6 +236,8 @@ The palette has no mount or exit motion. Item selection and hover animate throug
236
236
  - `Command` accepts an optional `label` for the palette. When omitted, the input placeholder and surrounding context must provide a meaningful name.
237
237
  - Each `CommandItem` needs a meaningful label. The optional `CommandShortcut` is decorative.
238
238
 
239
+ `Command.Shortcut` displays a hint; consumers wire the handler. The live playground example implements ⌘P/⌘S and Ctrl+P/Ctrl+S while focus is inside the palette and explains that scope. `Command.Separator` owns the group boundary; headings do not add a second rule.
240
+
239
241
  ## Playground demo spec
240
242
 
241
243
  **Default story:**