@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
package/README.md CHANGED
@@ -12,6 +12,25 @@ pnpm add @d4gger/design-system react react-dom lucide-react
12
12
  React 18 and 19 are supported. Add optional peers only for the advanced
13
13
  surfaces you use.
14
14
 
15
+ ## Migrating from 3.x
16
+
17
+ Text and Heading now accept single typography and spacing values. Replace
18
+ responsive maps on `size`, `color`, `align`, `wrap`, `trim`, `weight`, and
19
+ the margin/padding props with scalar values. Choose one readable type role;
20
+ put responsive spacing and composition on layout primitives such as Flex and Grid.
21
+
22
+ ```tsx
23
+ // 3.x
24
+ <Text size={{ initial: '2', md: '3' }}>Workspace update</Text>
25
+
26
+ // 4.x
27
+ <Text size="3">Workspace update</Text>
28
+ ```
29
+
30
+ Responsive layout props remain available. There is no compatibility adapter
31
+ for the removed typography maps. Rebuild generated declarations and styles
32
+ together when upgrading.
33
+
15
34
  ## Start using it
16
35
 
17
36
  Import the complete stylesheet once at application entry:
@@ -16,10 +16,12 @@
16
16
 
17
17
  .dsx-brand-ambient {
18
18
  background-color: var(--dsx-color-background);
19
+ /* The three washes are multiples of the theme-aware ambient strength (G-16, 2026-10-05): at the dark value of 10% they are the
20
+ 22% / 12% / 8% they always were, and light, which is raised, gets the same proportions. */
19
21
  background-image:
20
- radial-gradient(ellipse 900px 500px at 15% -5%, color-mix(in srgb, var(--dsx-color-primary) 22%, transparent), transparent 55%),
21
- radial-gradient(ellipse 700px 400px at 88% 8%, color-mix(in srgb, var(--dsx-color-secondary) 12%, transparent), transparent 50%),
22
- radial-gradient(ellipse 600px 300px at 50% 100%, color-mix(in srgb, var(--dsx-color-primary) 8%, transparent), transparent 60%),
22
+ radial-gradient(ellipse 900px 500px at 15% -5%, color-mix(in srgb, var(--dsx-color-primary) calc(var(--dsx-effect-ambient-strength) * 2.2), transparent), transparent 55%),
23
+ radial-gradient(ellipse 700px 400px at 88% 8%, color-mix(in srgb, var(--dsx-color-secondary) calc(var(--dsx-effect-ambient-strength) * 1.2), transparent), transparent 50%),
24
+ radial-gradient(ellipse 600px 300px at 50% 100%, color-mix(in srgb, var(--dsx-color-primary) calc(var(--dsx-effect-ambient-strength) * 0.8), transparent), transparent 60%),
23
25
  linear-gradient(180deg, var(--dsx-color-surface) 0%, var(--dsx-color-background) 50%);
24
26
  background-repeat: no-repeat;
25
27
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  .dsx-accordion__item {
4
4
  width: 100%;
5
- overflow: hidden;
5
+ overflow: visible;
6
6
  border-bottom: var(--dsx-border-width-sm) solid var(--dsx-color-outline);
7
7
  }
8
8
 
@@ -33,10 +33,11 @@
33
33
  flex: 1;
34
34
  min-width: 0;
35
35
  text-align: start;
36
+ overflow-wrap: anywhere;
36
37
  }
37
38
 
38
39
  .dsx-accordion__trigger[data-state='open'] {
39
- color: var(--dsx-color-primary);
40
+ color: var(--dsx-color-accent-indicator);
40
41
  }
41
42
 
42
43
  .dsx-accordion__trigger:focus-visible {
@@ -89,3 +90,9 @@
89
90
  font-family: var(--dsx-typography-body-medium-font-family), sans-serif;
90
91
  font-size: var(--dsx-typography-body-medium-font-size);
91
92
  }
93
+
94
+ @media (prefers-reduced-motion: reduce) {
95
+ .dsx-accordion__chevron { transition: none; }
96
+ }
97
+
98
+ .dsx-accordion__trigger:disabled { opacity: var(--dsx-opacity-disabled); }
@@ -39,7 +39,6 @@ var React = __toESM(require("react"), 1);
39
39
  var import_classnames = __toESM(require("classnames"), 1);
40
40
  var import_react_slot = require("@radix-ui/react-slot");
41
41
  var import_extractProps = require("../../_internal/helpers/extractProps");
42
- var import_Card = require("../card/Card");
43
42
  var import_Icon = require("../icon/Icon");
44
43
  var import_alert = require("./alert.props");
45
44
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -47,6 +46,11 @@ const AlertAction = React.forwardRef(
47
46
  ({ className, ...props }, forwardedRef) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ...props, ref: forwardedRef, className: (0, import_classnames.default)("dsx-alert__action", className) })
48
47
  );
49
48
  AlertAction.displayName = "AlertAction";
49
+ const isAlertAction = (node) => React.isValidElement(node) && node.type === AlertAction;
50
+ function splitAlertChildren(children) {
51
+ const nodes = React.Children.toArray(children);
52
+ return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) };
53
+ }
50
54
  const AlertRoot = React.forwardRef((props, forwardedRef) => {
51
55
  const {
52
56
  asChild,
@@ -54,6 +58,7 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
54
58
  color,
55
59
  highContrast = false,
56
60
  icon,
61
+ children,
57
62
  role,
58
63
  size = "md",
59
64
  variant = "default",
@@ -61,19 +66,27 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
61
66
  } = (0, import_extractProps.extractProps)(props, import_alert.alertPropDefs);
62
67
  const Comp = asChild ? import_react_slot.Slot : "div";
63
68
  const fallbackIcon = variant === "success" ? "check-circle" : variant === "default" ? "info" : "alert-triangle";
69
+ const child = asChild ? React.Children.only(children) : null;
70
+ const { actions, body } = splitAlertChildren(child ? child.props.children : children);
71
+ const content = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
72
+ icon === null ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Icon.Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-alert__main", children: [
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__content", children: body }),
75
+ actions.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__actions", children: actions }) : null
76
+ ] })
77
+ ] });
64
78
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
- import_Card.CardRoot,
79
+ Comp,
66
80
  {
67
- asChild: true,
81
+ ...alertProps,
82
+ ref: forwardedRef,
83
+ role: role ?? "alert",
68
84
  className: (0, import_classnames.default)("dsx-alert", className),
69
85
  "data-accent-color": color,
70
86
  "data-high-contrast": highContrast ? "true" : void 0,
71
87
  "data-size": size,
72
88
  "data-variant": variant,
73
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Comp, { ...alertProps, ref: forwardedRef, role: role ?? "alert", children: [
74
- icon === null ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Icon.Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
75
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "dsx-alert__content", children: alertProps.children })
76
- ] })
89
+ children: child ? React.cloneElement(child, void 0, content) : content
77
90
  }
78
91
  );
79
92
  });
@@ -84,16 +97,21 @@ const AlertTitle = React.forwardRef((props, forwardedRef) => {
84
97
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, { ...titleProps, ref: forwardedRef, className: (0, import_classnames.default)("dsx-alert__title", className) });
85
98
  });
86
99
  AlertTitle.displayName = "AlertTitle";
100
+ const isLineClamp = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
87
101
  const AlertDescription = React.forwardRef(
88
102
  (props, forwardedRef) => {
89
- const { asChild, className, ...descriptionProps } = (0, import_extractProps.extractProps)(props, import_alert.alertDescriptionPropDefs);
103
+ const { lineClamp, style, ...ownProps } = props;
104
+ const { asChild, className, ...descriptionProps } = (0, import_extractProps.extractProps)(ownProps, import_alert.alertDescriptionPropDefs);
90
105
  const Comp = asChild ? import_react_slot.Slot : "p";
106
+ const clamp = isLineClamp(lineClamp) ? lineClamp : void 0;
91
107
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
92
108
  Comp,
93
109
  {
94
110
  ...descriptionProps,
95
111
  ref: forwardedRef,
96
- className: (0, import_classnames.default)("dsx-alert__description", className)
112
+ className: (0, import_classnames.default)("dsx-alert__description", className),
113
+ "data-line-clamp": clamp,
114
+ style: clamp ? { ...style, "--dsx-alert-line-clamp": clamp } : style
97
115
  }
98
116
  );
99
117
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/alert/Alert.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { CardRoot } from '../card/Card'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n\n return (\n <CardRoot\n asChild\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n <Comp {...alertProps} ref={forwardedRef} role={role ?? 'alert'}>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__content\">{alertProps.children}</div>\n </Comp>\n </CardRoot>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {}\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n const { asChild, className, ...descriptionProps } = extractProps(props, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,wBAAuB;AACvB,wBAAqB;AAErB,0BAA6B;AAC7B,kBAAyB;AACzB,kBAAqB;AACrB,mBAA4E;AAQxE;AAFJ,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,iBACxB,4CAAC,SAAK,GAAG,OAAO,KAAK,cAAc,eAAW,kBAAAA,SAAW,qBAAqB,SAAS,GAAG;AAE9F;AACA,YAAY,cAAc;AAS1B,MAAM,YAAY,MAAM,WAAqC,CAAC,OAAO,iBAAiB;AACpF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAG;AAAA,EACL,QAAI,kCAAa,OAAO,0BAAa;AACrC,QAAM,OAAO,UAAU,yBAAO;AAC9B,QAAM,eAAe,YAAY,YAAY,iBAAiB,YAAY,YAAY,SAAS;AAE/F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAO;AAAA,MACP,eAAW,kBAAAA,SAAW,aAAa,SAAS;AAAA,MAC5C,qBAAmB;AAAA,MACnB,sBAAoB,eAAe,SAAS;AAAA,MAC5C,aAAW;AAAA,MACX,gBAAc;AAAA,MAEd,uDAAC,QAAM,GAAG,YAAY,KAAK,cAAc,MAAM,QAAQ,SACpD;AAAA,iBAAS,OAAO,OACf,4CAAC,UAAK,eAAY,QAAO,WAAU,mBAChC,kBAAQ,4CAAC,oBAAK,MAAM,cAAc,MAAK,MAAK,aAAY,6CAA4C,GACvG;AAAA,QAEF,4CAAC,SAAI,WAAU,sBAAsB,qBAAW,UAAS;AAAA,SAC3D;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,UAAU,cAAc;AAOxB,MAAM,aAAa,MAAM,WAA+C,CAAC,OAAO,iBAAiB;AAC/F,QAAM,EAAE,SAAS,WAAW,GAAG,WAAW,QAAI,kCAAa,OAAO,+BAAkB;AACpF,QAAM,OAAO,UAAU,yBAAO;AAE9B,SAAO,4CAAC,QAAM,GAAG,YAAY,KAAK,cAAc,eAAW,kBAAAA,SAAW,oBAAoB,SAAS,GAAG;AACxG,CAAC;AACD,WAAW,cAAc;AASzB,MAAM,mBAAmB,MAAM;AAAA,EAC7B,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,SAAS,WAAW,GAAG,iBAAiB,QAAI,kCAAa,OAAO,qCAAwB;AAChG,UAAM,OAAO,UAAU,yBAAO;AAE9B,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,eAAW,kBAAAA,SAAW,0BAA0B,SAAS;AAAA;AAAA,IAC3D;AAAA,EAEJ;AACF;AACA,iBAAiB,cAAc;AAE/B,MAAM,QAIF,OAAO,OAAO,WAAW;AAAA,EAC3B,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AACV,CAAC;",
4
+ "sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\nconst isAlertAction = (node: React.ReactNode): boolean => React.isValidElement(node) && node.type === AlertAction\n\n// An `Alert.Action` that is a direct child sits beside the content, not inside it, in one `.dsx-alert__actions` group: the\n// group trails the row, and wraps below the text as a whole when it is narrow, under the text and not under the icon (the\n// icon is one column, the text and the group are the other: `.dsx-alert__main`). A consumer who nests an action in their own\n// wrapper keeps it in the content.\nfunction splitAlertChildren(children: React.ReactNode): { actions: React.ReactNode[]; body: React.ReactNode[] } {\n const nodes = React.Children.toArray(children)\n return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) }\n}\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n children,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n const child = asChild ? React.Children.only(children) as React.ReactElement<{ children?: React.ReactNode }> : null\n const { actions, body } = splitAlertChildren(child ? child.props.children : children)\n const content = <>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__main\">\n <div className=\"dsx-alert__content\">{body}</div>\n {actions.length > 0 ? <div className=\"dsx-alert__actions\">{actions}</div> : null}\n </div>\n </>\n\n return (\n <Comp\n {...alertProps}\n ref={forwardedRef}\n role={role ?? 'alert'}\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n {child ? React.cloneElement(child, undefined, content) : content}\n </Comp>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {\n /**\n * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else\n * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the\n * element (`scrollHeight > clientHeight`) and drop the prop to show everything.\n */\n lineClamp?: number\n}\n\nconst isLineClamp = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n // `lineClamp` is behaviour-only, so it stays out of extractProps (it has no class mapping and would leak to the DOM).\n const { lineClamp, style, ...ownProps } = props\n const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n const clamp = isLineClamp(lineClamp) ? lineClamp : undefined\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n data-line-clamp={clamp}\n style={clamp ? ({ ...style, '--dsx-alert-line-clamp': clamp } as React.CSSProperties) : style}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
5
+ "mappings": "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",
6
6
  "names": ["classNames"]
7
7
  }
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
14
14
  declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
15
15
  type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
16
16
  interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
17
+ /**
18
+ * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
19
+ * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
20
+ * element (`scrollHeight > clientHeight`) and drop the prop to show everything.
21
+ */
22
+ lineClamp?: number;
17
23
  }
18
24
  declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
19
25
  declare const Alert: typeof AlertRoot & {
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.d.cts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAID,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFAkCb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;CAAG;AAE/B,QAAA,MAAM,gBAAgB,oGAarB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"Alert.d.cts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
14
14
  declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
15
15
  type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
16
16
  interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
17
+ /**
18
+ * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
19
+ * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
20
+ * element (`scrollHeight > clientHeight`) and drop the prop to show everything.
21
+ */
22
+ lineClamp?: number;
17
23
  }
18
24
  declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
19
25
  declare const Alert: typeof AlertRoot & {
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.d.mts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAID,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFAkCb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;CAAG;AAE/B,QAAA,MAAM,gBAAgB,oGAarB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"Alert.d.mts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
@@ -14,6 +14,12 @@ interface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTit
14
14
  declare const AlertTitle: React.ForwardRefExoticComponent<AlertTitleProps & React.RefAttributes<HTMLHeadingElement>>;
15
15
  type AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>;
16
16
  interface AlertDescriptionProps extends React.ComponentPropsWithoutRef<'p'>, AlertDescriptionOwnProps {
17
+ /**
18
+ * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else
19
+ * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the
20
+ * element (`scrollHeight > clientHeight`) and drop the prop to show everything.
21
+ */
22
+ lineClamp?: number;
17
23
  }
18
24
  declare const AlertDescription: React.ForwardRefExoticComponent<AlertDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
19
25
  declare const Alert: typeof AlertRoot & {
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAID,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFAkCb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;CAAG;AAE/B,QAAA,MAAM,gBAAgB,oGAarB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAIpE,QAAA,MAAM,WAAW,mKAIhB,CAAA;AAeD,KAAK,aAAa,GAAG,eAAe,CAAC,OAAO,aAAa,CAAC,GAAG;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACvB,CAAA;AAED,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;CAAG;AAEnG,QAAA,MAAM,SAAS,mFA2Cb,CAAA;AAIF,KAAK,kBAAkB,GAAG,eAAe,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEpE,UAAU,eAAgB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,kBAAkB;CAAG;AAE7F,QAAA,MAAM,UAAU,4FAKd,CAAA;AAIF,KAAK,wBAAwB,GAAG,eAAe,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEhF,UAAU,qBACR,SAAQ,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACzC,wBAAwB;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,QAAA,MAAM,gBAAgB,oGAkBrB,CAAA;AAGD,QAAA,MAAM,KAAK,EAAE,OAAO,SAAS,GAAG;IAC9B,KAAK,EAAE,OAAO,UAAU,CAAA;IACxB,WAAW,EAAE,OAAO,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,WAAW,CAAA;CAK1B,CAAA;AAEF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;AACtE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
@@ -2,14 +2,18 @@ import * as React from "react";
2
2
  import classNames from "classnames";
3
3
  import { Slot } from "@radix-ui/react-slot";
4
4
  import { extractProps } from "../../_internal/helpers/extractProps.js";
5
- import { CardRoot } from "../card/Card.js";
6
5
  import { Icon } from "../icon/Icon.js";
7
6
  import { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from "./alert.props.js";
8
- import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
8
  const AlertAction = React.forwardRef(
10
9
  ({ className, ...props }, forwardedRef) => /* @__PURE__ */ jsx("div", { ...props, ref: forwardedRef, className: classNames("dsx-alert__action", className) })
11
10
  );
12
11
  AlertAction.displayName = "AlertAction";
12
+ const isAlertAction = (node) => React.isValidElement(node) && node.type === AlertAction;
13
+ function splitAlertChildren(children) {
14
+ const nodes = React.Children.toArray(children);
15
+ return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) };
16
+ }
13
17
  const AlertRoot = React.forwardRef((props, forwardedRef) => {
14
18
  const {
15
19
  asChild,
@@ -17,6 +21,7 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
17
21
  color,
18
22
  highContrast = false,
19
23
  icon,
24
+ children,
20
25
  role,
21
26
  size = "md",
22
27
  variant = "default",
@@ -24,19 +29,27 @@ const AlertRoot = React.forwardRef((props, forwardedRef) => {
24
29
  } = extractProps(props, alertPropDefs);
25
30
  const Comp = asChild ? Slot : "div";
26
31
  const fallbackIcon = variant === "success" ? "check-circle" : variant === "default" ? "info" : "alert-triangle";
32
+ const child = asChild ? React.Children.only(children) : null;
33
+ const { actions, body } = splitAlertChildren(child ? child.props.children : children);
34
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
35
+ icon === null ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ jsx(Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
36
+ /* @__PURE__ */ jsxs("div", { className: "dsx-alert__main", children: [
37
+ /* @__PURE__ */ jsx("div", { className: "dsx-alert__content", children: body }),
38
+ actions.length > 0 ? /* @__PURE__ */ jsx("div", { className: "dsx-alert__actions", children: actions }) : null
39
+ ] })
40
+ ] });
27
41
  return /* @__PURE__ */ jsx(
28
- CardRoot,
42
+ Comp,
29
43
  {
30
- asChild: true,
44
+ ...alertProps,
45
+ ref: forwardedRef,
46
+ role: role ?? "alert",
31
47
  className: classNames("dsx-alert", className),
32
48
  "data-accent-color": color,
33
49
  "data-high-contrast": highContrast ? "true" : void 0,
34
50
  "data-size": size,
35
51
  "data-variant": variant,
36
- children: /* @__PURE__ */ jsxs(Comp, { ...alertProps, ref: forwardedRef, role: role ?? "alert", children: [
37
- icon === null ? null : /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "dsx-alert__icon", children: icon ?? /* @__PURE__ */ jsx(Icon, { name: fallbackIcon, size: "md", strokeWidth: "var(--dsx-icon-stroke-width-strong, 2.25)" }) }),
38
- /* @__PURE__ */ jsx("div", { className: "dsx-alert__content", children: alertProps.children })
39
- ] })
52
+ children: child ? React.cloneElement(child, void 0, content) : content
40
53
  }
41
54
  );
42
55
  });
@@ -47,16 +60,21 @@ const AlertTitle = React.forwardRef((props, forwardedRef) => {
47
60
  return /* @__PURE__ */ jsx(Comp, { ...titleProps, ref: forwardedRef, className: classNames("dsx-alert__title", className) });
48
61
  });
49
62
  AlertTitle.displayName = "AlertTitle";
63
+ const isLineClamp = (value) => typeof value === "number" && Number.isInteger(value) && value >= 1;
50
64
  const AlertDescription = React.forwardRef(
51
65
  (props, forwardedRef) => {
52
- const { asChild, className, ...descriptionProps } = extractProps(props, alertDescriptionPropDefs);
66
+ const { lineClamp, style, ...ownProps } = props;
67
+ const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs);
53
68
  const Comp = asChild ? Slot : "p";
69
+ const clamp = isLineClamp(lineClamp) ? lineClamp : void 0;
54
70
  return /* @__PURE__ */ jsx(
55
71
  Comp,
56
72
  {
57
73
  ...descriptionProps,
58
74
  ref: forwardedRef,
59
- className: classNames("dsx-alert__description", className)
75
+ className: classNames("dsx-alert__description", className),
76
+ "data-line-clamp": clamp,
77
+ style: clamp ? { ...style, "--dsx-alert-line-clamp": clamp } : style
60
78
  }
61
79
  );
62
80
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/alert/Alert.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { CardRoot } from '../card/Card'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n\n return (\n <CardRoot\n asChild\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n <Comp {...alertProps} ref={forwardedRef} role={role ?? 'alert'}>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__content\">{alertProps.children}</div>\n </Comp>\n </CardRoot>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {}\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n const { asChild, className, ...descriptionProps } = extractProps(props, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
5
- "mappings": "AAAA,YAAY,WAAW;AACvB,OAAO,gBAAgB;AACvB,SAAS,YAAY;AAErB,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,0BAA0B,eAAe,0BAA0B;AAQxE,cAoCE,YApCF;AAFJ,MAAM,cAAc,MAAM;AAAA,EACxB,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,iBACxB,oBAAC,SAAK,GAAG,OAAO,KAAK,cAAc,WAAW,WAAW,qBAAqB,SAAS,GAAG;AAE9F;AACA,YAAY,cAAc;AAS1B,MAAM,YAAY,MAAM,WAAqC,CAAC,OAAO,iBAAiB;AACpF,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAG;AAAA,EACL,IAAI,aAAa,OAAO,aAAa;AACrC,QAAM,OAAO,UAAU,OAAO;AAC9B,QAAM,eAAe,YAAY,YAAY,iBAAiB,YAAY,YAAY,SAAS;AAE/F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAO;AAAA,MACP,WAAW,WAAW,aAAa,SAAS;AAAA,MAC5C,qBAAmB;AAAA,MACnB,sBAAoB,eAAe,SAAS;AAAA,MAC5C,aAAW;AAAA,MACX,gBAAc;AAAA,MAEd,+BAAC,QAAM,GAAG,YAAY,KAAK,cAAc,MAAM,QAAQ,SACpD;AAAA,iBAAS,OAAO,OACf,oBAAC,UAAK,eAAY,QAAO,WAAU,mBAChC,kBAAQ,oBAAC,QAAK,MAAM,cAAc,MAAK,MAAK,aAAY,6CAA4C,GACvG;AAAA,QAEF,oBAAC,SAAI,WAAU,sBAAsB,qBAAW,UAAS;AAAA,SAC3D;AAAA;AAAA,EACF;AAEJ,CAAC;AACD,UAAU,cAAc;AAOxB,MAAM,aAAa,MAAM,WAA+C,CAAC,OAAO,iBAAiB;AAC/F,QAAM,EAAE,SAAS,WAAW,GAAG,WAAW,IAAI,aAAa,OAAO,kBAAkB;AACpF,QAAM,OAAO,UAAU,OAAO;AAE9B,SAAO,oBAAC,QAAM,GAAG,YAAY,KAAK,cAAc,WAAW,WAAW,oBAAoB,SAAS,GAAG;AACxG,CAAC;AACD,WAAW,cAAc;AASzB,MAAM,mBAAmB,MAAM;AAAA,EAC7B,CAAC,OAAO,iBAAiB;AACvB,UAAM,EAAE,SAAS,WAAW,GAAG,iBAAiB,IAAI,aAAa,OAAO,wBAAwB;AAChG,UAAM,OAAO,UAAU,OAAO;AAE9B,WACE;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACJ,KAAK;AAAA,QACL,WAAW,WAAW,0BAA0B,SAAS;AAAA;AAAA,IAC3D;AAAA,EAEJ;AACF;AACA,iBAAiB,cAAc;AAE/B,MAAM,QAIF,OAAO,OAAO,WAAW;AAAA,EAC3B,OAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AACV,CAAC;",
4
+ "sourcesContent": ["import * as React from 'react'\nimport classNames from 'classnames'\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { extractProps } from '../../_internal/helpers/extractProps'\nimport { Icon } from '../icon/Icon'\nimport { alertDescriptionPropDefs, alertPropDefs, alertTitlePropDefs } from './alert.props'\n\nimport type { GetPropDefTypes } from '../../_internal/props/propDef'\n\ntype AlertActionElement = React.ComponentRef<'div'>\n\nconst AlertAction = React.forwardRef<AlertActionElement, React.ComponentPropsWithoutRef<'div'>>(\n ({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('dsx-alert__action', className)} />\n ),\n)\nAlertAction.displayName = 'AlertAction'\n\nconst isAlertAction = (node: React.ReactNode): boolean => React.isValidElement(node) && node.type === AlertAction\n\n// An `Alert.Action` that is a direct child sits beside the content, not inside it, in one `.dsx-alert__actions` group: the\n// group trails the row, and wraps below the text as a whole when it is narrow, under the text and not under the icon (the\n// icon is one column, the text and the group are the other: `.dsx-alert__main`). A consumer who nests an action in their own\n// wrapper keeps it in the content.\nfunction splitAlertChildren(children: React.ReactNode): { actions: React.ReactNode[]; body: React.ReactNode[] } {\n const nodes = React.Children.toArray(children)\n return { actions: nodes.filter(isAlertAction), body: nodes.filter((node) => !isAlertAction(node)) }\n}\n\ntype AlertElement = React.ComponentRef<'div'>\ntype AlertOwnProps = GetPropDefTypes<typeof alertPropDefs> & {\n icon?: React.ReactNode\n}\n\ninterface AlertProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color'>, AlertOwnProps {}\n\nconst AlertRoot = React.forwardRef<AlertElement, AlertProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n color,\n highContrast = false,\n icon,\n children,\n role,\n size = 'md',\n variant = 'default',\n ...alertProps\n } = extractProps(props, alertPropDefs)\n const Comp = asChild ? Slot : 'div'\n const fallbackIcon = variant === 'success' ? 'check-circle' : variant === 'default' ? 'info' : 'alert-triangle'\n const child = asChild ? React.Children.only(children) as React.ReactElement<{ children?: React.ReactNode }> : null\n const { actions, body } = splitAlertChildren(child ? child.props.children : children)\n const content = <>\n {icon === null ? null : (\n <span aria-hidden=\"true\" className=\"dsx-alert__icon\">\n {icon ?? <Icon name={fallbackIcon} size=\"md\" strokeWidth=\"var(--dsx-icon-stroke-width-strong, 2.25)\" />}\n </span>\n )}\n <div className=\"dsx-alert__main\">\n <div className=\"dsx-alert__content\">{body}</div>\n {actions.length > 0 ? <div className=\"dsx-alert__actions\">{actions}</div> : null}\n </div>\n </>\n\n return (\n <Comp\n {...alertProps}\n ref={forwardedRef}\n role={role ?? 'alert'}\n className={classNames('dsx-alert', className)}\n data-accent-color={color}\n data-high-contrast={highContrast ? 'true' : undefined}\n data-size={size}\n data-variant={variant}\n >\n {child ? React.cloneElement(child, undefined, content) : content}\n </Comp>\n )\n})\nAlertRoot.displayName = 'Alert'\n\ntype AlertTitleElement = React.ComponentRef<'h5'>\ntype AlertTitleOwnProps = GetPropDefTypes<typeof alertTitlePropDefs>\n\ninterface AlertTitleProps extends React.ComponentPropsWithoutRef<'h5'>, AlertTitleOwnProps {}\n\nconst AlertTitle = React.forwardRef<AlertTitleElement, AlertTitleProps>((props, forwardedRef) => {\n const { asChild, className, ...titleProps } = extractProps(props, alertTitlePropDefs)\n const Comp = asChild ? Slot : 'h5'\n\n return <Comp {...titleProps} ref={forwardedRef} className={classNames('dsx-alert__title', className)} />\n})\nAlertTitle.displayName = 'AlertTitle'\n\ntype AlertDescriptionElement = React.ComponentRef<'p'>\ntype AlertDescriptionOwnProps = GetPropDefTypes<typeof alertDescriptionPropDefs>\n\ninterface AlertDescriptionProps\n extends React.ComponentPropsWithoutRef<'p'>,\n AlertDescriptionOwnProps {\n /**\n * Clamp the text to this many lines (a whole number of 1 or more); the rest is clipped with an ellipsis. Anything else\n * leaves the text unclamped. Whether the text is clipped, and how to reveal it, is the consumer's: it can measure the\n * element (`scrollHeight > clientHeight`) and drop the prop to show everything.\n */\n lineClamp?: number\n}\n\nconst isLineClamp = (value: unknown): value is number =>\n typeof value === 'number' && Number.isInteger(value) && value >= 1\n\nconst AlertDescription = React.forwardRef<AlertDescriptionElement, AlertDescriptionProps>(\n (props, forwardedRef) => {\n // `lineClamp` is behaviour-only, so it stays out of extractProps (it has no class mapping and would leak to the DOM).\n const { lineClamp, style, ...ownProps } = props\n const { asChild, className, ...descriptionProps } = extractProps(ownProps, alertDescriptionPropDefs)\n const Comp = asChild ? Slot : 'p'\n const clamp = isLineClamp(lineClamp) ? lineClamp : undefined\n\n return (\n <Comp\n {...descriptionProps}\n ref={forwardedRef}\n className={classNames('dsx-alert__description', className)}\n data-line-clamp={clamp}\n style={clamp ? ({ ...style, '--dsx-alert-line-clamp': clamp } as React.CSSProperties) : style}\n />\n )\n },\n)\nAlertDescription.displayName = 'AlertDescription'\n\nconst Alert: typeof AlertRoot & {\n Title: typeof AlertTitle\n Description: typeof AlertDescription\n Action: typeof AlertAction\n} = Object.assign(AlertRoot, {\n Title: AlertTitle,\n Description: AlertDescription,\n Action: AlertAction,\n})\n\nexport { Alert, AlertAction, AlertDescription, AlertRoot, AlertTitle }\nexport type { AlertDescriptionProps, AlertProps, AlertTitleProps }\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -2,6 +2,7 @@
2
2
  @import '../../_internal/baseCard.css';
3
3
 
4
4
  .dsx-alert {
5
+ box-sizing: border-box;
5
6
  display: flex;
6
7
  align-items: flex-start;
7
8
  gap: var(--dsx-space-md);
@@ -23,16 +24,53 @@
23
24
  color: currentColor;
24
25
  }
25
26
 
26
- .dsx-alert__action {
27
- align-self: center;
27
+ .dsx-alert__icon { flex-shrink: 0; }
28
+
29
+ /* The icon is one column; the text and the actions are the other. Only this column wraps, so actions that drop below the text
30
+ start under the text and not under the icon (G-15, 2026-10-05). The gap is the alert's own, per size. */
31
+ .dsx-alert__main {
32
+ display: flex;
33
+ flex: 1 1 0;
34
+ flex-wrap: wrap;
35
+ align-items: flex-start;
36
+ gap: inherit;
37
+ min-width: 0;
28
38
  }
29
39
 
40
+ /* The basis is the width the text needs to read before the actions wrap below it; min() keeps it from overflowing a column
41
+ narrower than that. */
30
42
  .dsx-alert__content {
31
43
  display: grid;
32
44
  gap: var(--dsx-space-xs);
33
- flex: 1;
45
+ flex: 1 1 min(calc(var(--dsx-size-xl) * 5), 100%);
46
+ min-width: 0;
47
+ overflow-wrap: anywhere;
48
+ }
49
+
50
+ /* The direct-child Alert.Actions are one group. The content grows to push the group to the end of the row, and when the text
51
+ would drop under its readable width the group wraps below it as a whole, at the start of the column. It has no auto margin:
52
+ that would push a wrapped group to the far edge. Its own buttons wrap inside it when even the group is too wide. */
53
+ .dsx-alert__actions {
54
+ display: flex;
55
+ flex: 0 0 auto;
56
+ flex-wrap: wrap;
57
+ align-items: flex-start;
58
+ gap: var(--dsx-space-sm);
59
+ max-width: 100%;
60
+ }
61
+
62
+ .dsx-alert__action {
63
+ align-self: flex-start;
64
+ justify-content: flex-start;
65
+ flex-wrap: wrap;
66
+ gap: var(--dsx-space-sm);
34
67
  }
35
68
 
69
+ .dsx-alert[data-variant='warning'] { border-color: var(--dsx-color-warning); }
70
+ .dsx-alert[data-variant='success'] { border-color: var(--dsx-color-success); }
71
+ .dsx-alert[data-variant='destructive'] { border-color: var(--dsx-color-error); }
72
+ .dsx-alert[data-high-contrast='true'] { border-color: var(--dsx-color-high-contrast-border); }
73
+
36
74
  .dsx-alert__title {
37
75
  margin: 0;
38
76
  font-family: var(--dsx-typography-label-large-font-family), sans-serif;
@@ -72,3 +110,35 @@
72
110
  min-width: var(--dsx-size-lg);
73
111
  min-height: var(--dsx-size-lg);
74
112
  }
113
+
114
+ /* With a trailing action, the icon, the first line of text and the action share one centre at any width: all
115
+ three get a control-height row, and the first line's box is that tall (`::first-line`). Alerts without an
116
+ action are untouched. Kept last so it wins over the size rules above. */
117
+ :where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) :is(.dsx-alert__icon, .dsx-alert__action) {
118
+ min-height: var(--dsx-size-lg);
119
+ }
120
+
121
+ :where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__content > :where(:first-child)::first-line {
122
+ line-height: var(--dsx-size-lg);
123
+ }
124
+
125
+ /* `lineClamp` on Alert.Description: the text stops after that many lines with an ellipsis. */
126
+ .dsx-alert__description[data-line-clamp] {
127
+ display: -webkit-box;
128
+ -webkit-box-orient: vertical;
129
+ -webkit-line-clamp: var(--dsx-alert-line-clamp);
130
+ overflow: hidden;
131
+ }
132
+
133
+ /* Whether `::first-line` reaches into a clamped description depends on the engine (Chromium draws it as a block
134
+ container, WebKit and Gecko as a legacy flexbox), so the control-height first line above is switched off for it and
135
+ the same centring is done with padding in every engine: the first line sits on the middle of the control row (`lh`
136
+ is the element's own line height). */
137
+ :where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__description[data-line-clamp] {
138
+ padding-block-start: calc((var(--dsx-size-lg) - 1lh) / 2);
139
+ }
140
+
141
+ /* Same specificity as the first-line rule it switches off (0,1,1), so source order decides: this one comes last. */
142
+ :where(.dsx-alert:has(> .dsx-alert__main > .dsx-alert__actions)) .dsx-alert__description:where([data-line-clamp])::first-line {
143
+ line-height: inherit;
144
+ }
@@ -2,7 +2,22 @@
2
2
  .dsx-article-image__media, .dsx-before-after img { display: block; width: 100%; height: auto; border-radius: var(--dsx-rounded-md); }
3
3
  .dsx-article-image figcaption { margin-block-start: var(--dsx-space-sm); color: var(--dsx-color-on-surface-variant); text-align: center; }
4
4
  .dsx-article-embed, .dsx-article-poll { display: grid; gap: var(--dsx-space-sm); padding: var(--dsx-space-md); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-md); background: var(--dsx-color-surface-raised); }
5
+ .dsx-article-image, .dsx-article-embed, .dsx-article-poll, .dsx-before-after { min-width: 0; overflow-wrap: anywhere; }
5
6
  .dsx-before-after { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--dsx-space-sm); overflow-x: auto; }
6
7
  .dsx-before-after > div { min-width: var(--dsx-size-3xl); }
7
8
  .dsx-before-after span { display: block; margin-block-start: var(--dsx-space-xs); color: var(--dsx-color-on-surface-variant); }
8
- .dsx-article-poll button { min-height: var(--dsx-size-lg); }
9
+ .dsx-article-poll__option { min-width: 0; width: 100%; }
10
+ .dsx-article-video { margin: var(--dsx-space-md) 0; min-width: 0; }
11
+ .dsx-article-video__media { display: block; width: 100%; border-radius: var(--dsx-rounded-md); }
12
+ .dsx-article-video figcaption { margin-block-start: var(--dsx-space-sm); color: var(--dsx-color-on-surface-variant); }
13
+ .dsx-article-platform-tabs { min-width: 0; }
14
+ .dsx-article-poll__result { display: grid; gap: var(--dsx-space-xs); min-width: 0; }
15
+ .dsx-article-poll__result progress { width: 100%; accent-color: var(--dsx-color-accent-indicator); }
16
+ .dsx-article-poll__actions { display: flex; flex-wrap: wrap; gap: var(--dsx-space-sm); }
17
+ .dsx-article-editor-block { display: grid; gap: var(--dsx-space-md); min-width: 0; margin-block: var(--dsx-space-md); padding: var(--dsx-space-md); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-md); background: var(--dsx-color-surface); }
18
+ .dsx-article-editor-block[aria-current='true'] { border-color: var(--dsx-color-accent-border); }
19
+ .dsx-article-editor-block__controls { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--dsx-space-sm); }
20
+ .dsx-article-editor-block__actions { display: flex; flex-wrap: wrap; gap: var(--dsx-space-xs); }
21
+ .dsx-article-editor-block__fields { display: grid; gap: var(--dsx-space-sm); min-width: 0; }
22
+ .dsx-article-editor-block__content { min-width: 0; }
23
+ .dsx-article-editor-block__textarea { width: 100%; min-height: var(--dsx-size-4xl); display: block; padding: var(--dsx-space-sm); border: var(--dsx-border-width-sm) solid var(--dsx-color-outline); border-radius: var(--dsx-rounded-sm); background: var(--dsx-color-surface-raised); color: var(--dsx-color-on-surface); font: inherit; }
@@ -30,12 +30,17 @@ var ArticleNodes_exports = {};
30
30
  __export(ArticleNodes_exports, {
31
31
  ArticleEmbed: () => ArticleEmbed,
32
32
  ArticleImage: () => ArticleImage,
33
+ ArticleMaterialLink: () => ArticleMaterialLink,
34
+ ArticlePlatformTabs: () => ArticlePlatformTabs,
33
35
  ArticlePoll: () => ArticlePoll,
36
+ ArticleVideo: () => ArticleVideo,
34
37
  BeforeAfterComparison: () => BeforeAfterComparison
35
38
  });
36
39
  module.exports = __toCommonJS(ArticleNodes_exports);
37
40
  var React = __toESM(require("react"), 1);
38
41
  var import_classnames = __toESM(require("classnames"), 1);
42
+ var import_Button = require("../button/Button");
43
+ var import_Tabs = require("../tabs/Tabs");
39
44
  var import_jsx_runtime = require("react/jsx-runtime");
40
45
  const ArticleImage = ({ caption, className, alt = "", ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("figure", { className: "dsx-article-image", children: [
41
46
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", { ...props, alt, className: (0, import_classnames.default)("dsx-article-image__media", className) }),
@@ -61,16 +66,52 @@ const BeforeAfterComparison = ({ beforeSrc, afterSrc, beforeAlt, afterAlt, befor
61
66
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: afterLabel })
62
67
  ] })
63
68
  ] });
64
- const ArticlePoll = ({ pollId, question, options = [], state = "ready", onLoad, onVote, className, ...props }) => {
69
+ const ArticleVideo = ({ caption, className, controls = true, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("figure", { className: "dsx-article-video", children: [
70
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("video", { ...props, controls, className: (0, import_classnames.default)("dsx-article-video__media", className) }),
71
+ caption ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("figcaption", { children: caption }) : null
72
+ ] });
73
+ const ArticleMaterialLink = ({ materialId, href, children, unavailableLabel = "Material unavailable", ...props }) => {
74
+ let allowed = false;
75
+ try {
76
+ allowed = ["http:", "https:"].includes(new URL(href ?? "", "https://example.invalid").protocol);
77
+ } catch {
78
+ }
79
+ return href && allowed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { ...props, href, "data-dsx-material-id": materialId, children }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "status", "data-dsx-material-id": materialId, children: unavailableLabel });
80
+ };
81
+ const ArticlePlatformTabs = ({ tabs, value, onValueChange, className, dir, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Tabs.Tabs, { ...props, dir: dir === "rtl" || dir === "ltr" ? dir : void 0, className: (0, import_classnames.default)("dsx-article-platform-tabs", className), defaultValue: tabs[0]?.platform, value, onValueChange, children: [
82
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Tabs.Tabs.List, { "aria-label": "Platform instructions", children: [
83
+ tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Trigger, { value: tab.platform, children: tab.label }, tab.platform)),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Indicator, {})
85
+ ] }),
86
+ tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tabs.Tabs.Content, { value: tab.platform, children: tab.content }, tab.platform))
87
+ ] });
88
+ const ArticlePoll = ({ pollId, question, options = [], state = "ready", onLoad, onVote, selection, multiple = false, onSelectionChange, onSubmit, onRetract, totalVotes, className, ...props }) => {
65
89
  React.useEffect(() => {
66
90
  onLoad?.(pollId);
67
91
  }, [pollId, onLoad]);
92
+ const controlled = selection !== void 0;
93
+ const total = totalVotes ?? options.reduce((sum, option) => sum + (option.votes ?? 0), 0);
94
+ const inert = state === "closed" || state === "loading" || state === "error" || !controlled && state !== "ready";
68
95
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ...props, className: (0, import_classnames.default)("dsx-article-poll", className), "data-dsx-poll-id": pollId, "data-state": state, "aria-busy": state === "loading" || void 0, children: [
69
96
  question ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: question }) : null,
70
- state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "alert", children: "Poll unavailable" }) : options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", disabled: state !== "ready", onClick: () => onVote?.(pollId, option.id), children: [
71
- option.label,
72
- option.votes === void 0 ? null : ` (${option.votes})`
73
- ] }, option.id))
97
+ state === "closed" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "status", children: "Poll closed" }) : null,
98
+ state === "error" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { role: "alert", children: "Poll unavailable" }) : options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-article-poll__result", children: [
99
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_Button.Button, { className: "dsx-article-poll__option", type: "button", size: "lg", variant: selection?.includes(option.id) ? "secondary" : "outline", "aria-pressed": controlled ? selection.includes(option.id) : void 0, disabled: inert, onClick: () => {
100
+ if (!controlled) {
101
+ onVote?.(pollId, option.id);
102
+ return;
103
+ }
104
+ onSelectionChange?.(multiple ? selection.includes(option.id) ? selection.filter((id) => id !== option.id) : [...selection, option.id] : [option.id]);
105
+ }, children: [
106
+ option.label,
107
+ option.votes === void 0 ? null : ` (${option.votes})`
108
+ ] }),
109
+ option.votes !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("progress", { "aria-label": `${String(option.label)} results`, value: option.votes, max: Math.max(total, 1) }) : null
110
+ ] }, option.id)),
111
+ controlled && !inert ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "dsx-article-poll__actions", children: [
112
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.Button, { type: "button", size: "lg", disabled: !selection.length || !onSubmit, onClick: () => onSubmit?.(pollId, selection), children: state === "voted" ? "Change vote" : "Vote" }),
113
+ state === "voted" && onRetract ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Button.Button, { type: "button", size: "lg", variant: "outline", onClick: () => onRetract(pollId), children: "Retract vote" }) : null
114
+ ] }) : null
74
115
  ] });
75
116
  };
76
117
  //# sourceMappingURL=ArticleNodes.cjs.map