rift-ds 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/behaviors/focusable.d.ts +26 -0
  4. package/behaviors/focusable.js +18 -0
  5. package/behaviors/useFocusScope.d.ts +38 -0
  6. package/behaviors/useFocusScope.js +82 -0
  7. package/behaviors/useLayer.d.ts +43 -0
  8. package/behaviors/useLayer.js +55 -0
  9. package/behaviors/useMounted.d.ts +7 -0
  10. package/behaviors/useMounted.js +14 -0
  11. package/behaviors/useScrollLock.d.ts +55 -0
  12. package/behaviors/useScrollLock.js +59 -0
  13. package/bin/rift-ds.mjs +82 -0
  14. package/charts.d.ts +16 -0
  15. package/charts.js +24 -0
  16. package/components/Accordion/Accordion.css +119 -0
  17. package/components/Accordion/Accordion.d.ts +24 -0
  18. package/components/Accordion/Accordion.js +76 -0
  19. package/components/AgentPlan/AgentPlan.css +251 -0
  20. package/components/AgentPlan/AgentPlan.d.ts +41 -0
  21. package/components/AgentPlan/AgentPlan.js +100 -0
  22. package/components/AgentRail/AgentRail.css +282 -0
  23. package/components/AgentRail/AgentRail.d.ts +72 -0
  24. package/components/AgentRail/AgentRail.js +101 -0
  25. package/components/AgentStatus/AgentStatus.css +511 -0
  26. package/components/AgentStatus/AgentStatus.d.ts +41 -0
  27. package/components/AgentStatus/AgentStatus.js +86 -0
  28. package/components/AgentStatus/AgentStatusPatterns.d.ts +17 -0
  29. package/components/AgentStatus/AgentStatusPatterns.js +20 -0
  30. package/components/AiButton/AiButton.css +559 -0
  31. package/components/AiButton/AiButton.d.ts +79 -0
  32. package/components/AiButton/AiButton.js +183 -0
  33. package/components/Alert/Alert.css +261 -0
  34. package/components/Alert/Alert.d.ts +25 -0
  35. package/components/Alert/Alert.js +53 -0
  36. package/components/AlertDialog/AlertDialog.css +133 -0
  37. package/components/AlertDialog/AlertDialog.d.ts +29 -0
  38. package/components/AlertDialog/AlertDialog.js +98 -0
  39. package/components/AnchorNav/AnchorNav.css +137 -0
  40. package/components/AnchorNav/AnchorNav.d.ts +40 -0
  41. package/components/AnchorNav/AnchorNav.js +135 -0
  42. package/components/AnimatedNumber/AnimatedNumber.css +31 -0
  43. package/components/AnimatedNumber/AnimatedNumber.d.ts +36 -0
  44. package/components/AnimatedNumber/AnimatedNumber.js +55 -0
  45. package/components/AppLayout/AppLayout.css +52 -0
  46. package/components/AppLayout/AppLayout.d.ts +33 -0
  47. package/components/AppLayout/AppLayout.js +47 -0
  48. package/components/AppSidebar/AppSidebar.css +592 -0
  49. package/components/AppSidebar/AppSidebar.d.ts +90 -0
  50. package/components/AppSidebar/AppSidebar.js +295 -0
  51. package/components/Avatar/Avatar.css +133 -0
  52. package/components/Avatar/Avatar.d.ts +20 -0
  53. package/components/Avatar/Avatar.js +58 -0
  54. package/components/Avatar/demoAvatars.d.ts +18 -0
  55. package/components/Avatar/demoAvatars.js +16 -0
  56. package/components/AvatarGroup/AvatarGroup.css +61 -0
  57. package/components/AvatarGroup/AvatarGroup.d.ts +32 -0
  58. package/components/AvatarGroup/AvatarGroup.js +31 -0
  59. package/components/Badge/Badge.css +67 -0
  60. package/components/Badge/Badge.d.ts +13 -0
  61. package/components/Badge/Badge.js +15 -0
  62. package/components/Banner/Banner.css +110 -0
  63. package/components/Banner/Banner.d.ts +36 -0
  64. package/components/Banner/Banner.js +59 -0
  65. package/components/Breadcrumb/Breadcrumb.css +100 -0
  66. package/components/Breadcrumb/Breadcrumb.d.ts +25 -0
  67. package/components/Breadcrumb/Breadcrumb.js +40 -0
  68. package/components/Button/Button.css +473 -0
  69. package/components/Button/Button.d.ts +73 -0
  70. package/components/Button/Button.js +91 -0
  71. package/components/ButtonGroup/ButtonGroup.css +39 -0
  72. package/components/ButtonGroup/ButtonGroup.d.ts +13 -0
  73. package/components/ButtonGroup/ButtonGroup.js +30 -0
  74. package/components/Card/Card.css +190 -0
  75. package/components/Card/Card.d.ts +48 -0
  76. package/components/Card/Card.js +113 -0
  77. package/components/CardStack/CardStack.css +106 -0
  78. package/components/CardStack/CardStack.d.ts +44 -0
  79. package/components/CardStack/CardStack.js +140 -0
  80. package/components/Carousel/Carousel.css +121 -0
  81. package/components/Carousel/Carousel.d.ts +25 -0
  82. package/components/Carousel/Carousel.js +160 -0
  83. package/components/Chart/AreaChart.d.ts +40 -0
  84. package/components/Chart/AreaChart.js +101 -0
  85. package/components/Chart/BarChart.d.ts +36 -0
  86. package/components/Chart/BarChart.js +107 -0
  87. package/components/Chart/Chart.css +224 -0
  88. package/components/Chart/ComboChart.d.ts +40 -0
  89. package/components/Chart/ComboChart.js +142 -0
  90. package/components/Chart/LineChart.d.ts +36 -0
  91. package/components/Chart/LineChart.js +91 -0
  92. package/components/Chart/PieChart.d.ts +36 -0
  93. package/components/Chart/PieChart.js +93 -0
  94. package/components/Chart/RadarChart.d.ts +36 -0
  95. package/components/Chart/RadarChart.js +92 -0
  96. package/components/Chart/RadialChart.d.ts +43 -0
  97. package/components/Chart/RadialChart.js +114 -0
  98. package/components/Chart/ScatterChart.d.ts +38 -0
  99. package/components/Chart/ScatterChart.js +99 -0
  100. package/components/Chart/StackedBarChart.d.ts +36 -0
  101. package/components/Chart/StackedBarChart.js +98 -0
  102. package/components/Chart/Treemap.d.ts +35 -0
  103. package/components/Chart/Treemap.js +95 -0
  104. package/components/Chart/palette.d.ts +1 -0
  105. package/components/Chart/palette.js +17 -0
  106. package/components/ChatHeader/ChatHeader.css +35 -0
  107. package/components/ChatHeader/ChatHeader.d.ts +30 -0
  108. package/components/ChatHeader/ChatHeader.js +17 -0
  109. package/components/ChatMarker/ChatMarker.css +61 -0
  110. package/components/ChatMarker/ChatMarker.d.ts +22 -0
  111. package/components/ChatMarker/ChatMarker.js +18 -0
  112. package/components/ChatMessage/ChatMessage.css +326 -0
  113. package/components/ChatMessage/ChatMessage.d.ts +74 -0
  114. package/components/ChatMessage/ChatMessage.js +71 -0
  115. package/components/ChatThread/ChatThread.css +171 -0
  116. package/components/ChatThread/ChatThread.d.ts +41 -0
  117. package/components/ChatThread/ChatThread.js +175 -0
  118. package/components/Checkbox/Checkbox.css +183 -0
  119. package/components/Checkbox/Checkbox.d.ts +81 -0
  120. package/components/Checkbox/Checkbox.js +176 -0
  121. package/components/Chip/Chip.css +231 -0
  122. package/components/Chip/Chip.d.ts +27 -0
  123. package/components/Chip/Chip.js +80 -0
  124. package/components/CircularButton/CircularButton.css +263 -0
  125. package/components/CircularButton/CircularButton.d.ts +68 -0
  126. package/components/CircularButton/CircularButton.js +72 -0
  127. package/components/CodeBlock/CodeBlock.css +189 -0
  128. package/components/CodeBlock/CodeBlock.d.ts +23 -0
  129. package/components/CodeBlock/CodeBlock.js +96 -0
  130. package/components/CodeDiff/CodeDiff.css +175 -0
  131. package/components/CodeDiff/CodeDiff.d.ts +58 -0
  132. package/components/CodeDiff/CodeDiff.js +114 -0
  133. package/components/ColorPicker/ColorPicker.css +278 -0
  134. package/components/ColorPicker/ColorPicker.d.ts +50 -0
  135. package/components/ColorPicker/ColorPicker.js +349 -0
  136. package/components/ColourSwatch/ColourSwatch.css +88 -0
  137. package/components/ColourSwatch/ColourSwatch.d.ts +34 -0
  138. package/components/ColourSwatch/ColourSwatch.js +42 -0
  139. package/components/Combobox/Combobox.css +384 -0
  140. package/components/Combobox/Combobox.d.ts +93 -0
  141. package/components/Combobox/Combobox.js +331 -0
  142. package/components/CommandPalette/CommandPalette.css +342 -0
  143. package/components/CommandPalette/CommandPalette.d.ts +62 -0
  144. package/components/CommandPalette/CommandPalette.js +247 -0
  145. package/components/Composer/Composer.css +427 -0
  146. package/components/Composer/Composer.d.ts +97 -0
  147. package/components/Composer/Composer.js +146 -0
  148. package/components/ContactCard/ContactCard.css +132 -0
  149. package/components/ContactCard/ContactCard.d.ts +24 -0
  150. package/components/ContactCard/ContactCard.js +79 -0
  151. package/components/ContextMenu/ContextMenu.css +258 -0
  152. package/components/ContextMenu/ContextMenu.d.ts +26 -0
  153. package/components/ContextMenu/ContextMenu.js +387 -0
  154. package/components/ContributionGraph/ContributionGraph.css +169 -0
  155. package/components/ContributionGraph/ContributionGraph.d.ts +34 -0
  156. package/components/ContributionGraph/ContributionGraph.js +149 -0
  157. package/components/DataTable/DataTable.css +109 -0
  158. package/components/DataTable/DataTable.d.ts +81 -0
  159. package/components/DataTable/DataTable.js +236 -0
  160. package/components/DateInput/DateInput.css +127 -0
  161. package/components/DateInput/DateInput.d.ts +44 -0
  162. package/components/DateInput/DateInput.js +82 -0
  163. package/components/DatePicker/DatePicker.css +198 -0
  164. package/components/DatePicker/DatePicker.d.ts +29 -0
  165. package/components/DatePicker/DatePicker.js +196 -0
  166. package/components/Dialog/Dialog.css +178 -0
  167. package/components/Dialog/Dialog.d.ts +39 -0
  168. package/components/Dialog/Dialog.js +99 -0
  169. package/components/Divider/Divider.css +100 -0
  170. package/components/Divider/Divider.d.ts +18 -0
  171. package/components/Divider/Divider.js +31 -0
  172. package/components/DocumentChip/DocumentChip.css +190 -0
  173. package/components/DocumentChip/DocumentChip.d.ts +41 -0
  174. package/components/DocumentChip/DocumentChip.js +78 -0
  175. package/components/Drawer/Drawer.css +262 -0
  176. package/components/Drawer/Drawer.d.ts +41 -0
  177. package/components/Drawer/Drawer.js +101 -0
  178. package/components/Dropdown/Dropdown.css +288 -0
  179. package/components/Dropdown/Dropdown.d.ts +85 -0
  180. package/components/Dropdown/Dropdown.js +308 -0
  181. package/components/DropdownMenu/DropdownMenu.css +301 -0
  182. package/components/DropdownMenu/DropdownMenu.d.ts +42 -0
  183. package/components/DropdownMenu/DropdownMenu.js +371 -0
  184. package/components/EmptyState/EmptyState.css +136 -0
  185. package/components/EmptyState/EmptyState.d.ts +27 -0
  186. package/components/EmptyState/EmptyState.js +32 -0
  187. package/components/EntityCard/EntityCard.css +69 -0
  188. package/components/EntityCard/EntityCard.d.ts +19 -0
  189. package/components/EntityCard/EntityCard.js +26 -0
  190. package/components/EventCalendar/EventCalendar.css +363 -0
  191. package/components/EventCalendar/EventCalendar.d.ts +59 -0
  192. package/components/EventCalendar/EventCalendar.js +230 -0
  193. package/components/Field/Field.css +80 -0
  194. package/components/Field/Field.d.ts +57 -0
  195. package/components/Field/Field.js +70 -0
  196. package/components/Field/FieldContext.d.ts +42 -0
  197. package/components/Field/FieldContext.js +8 -0
  198. package/components/Figure/Figure.css +71 -0
  199. package/components/Figure/Figure.d.ts +17 -0
  200. package/components/Figure/Figure.js +26 -0
  201. package/components/FileInput/FileInput.css +281 -0
  202. package/components/FileInput/FileInput.d.ts +54 -0
  203. package/components/FileInput/FileInput.js +205 -0
  204. package/components/FilterBar/FilterBar.css +202 -0
  205. package/components/FilterBar/FilterBar.d.ts +55 -0
  206. package/components/FilterBar/FilterBar.js +249 -0
  207. package/components/FunnelChart/FunnelChart.css +17 -0
  208. package/components/FunnelChart/FunnelChart.d.ts +51 -0
  209. package/components/FunnelChart/FunnelChart.js +96 -0
  210. package/components/GanttChart/GanttChart.css +326 -0
  211. package/components/GanttChart/GanttChart.d.ts +82 -0
  212. package/components/GanttChart/GanttChart.js +202 -0
  213. package/components/Gauge/Gauge.css +120 -0
  214. package/components/Gauge/Gauge.d.ts +64 -0
  215. package/components/Gauge/Gauge.js +111 -0
  216. package/components/Globe/Globe.css +155 -0
  217. package/components/Globe/Globe.d.ts +103 -0
  218. package/components/Globe/Globe.js +416 -0
  219. package/components/HoverCard/HoverCard.css +125 -0
  220. package/components/HoverCard/HoverCard.d.ts +29 -0
  221. package/components/HoverCard/HoverCard.js +83 -0
  222. package/components/ImageCompare/ImageCompare.css +112 -0
  223. package/components/ImageCompare/ImageCompare.d.ts +40 -0
  224. package/components/ImageCompare/ImageCompare.js +134 -0
  225. package/components/Input/Input.css +150 -0
  226. package/components/Input/Input.d.ts +45 -0
  227. package/components/Input/Input.js +99 -0
  228. package/components/Instructions/Instructions.css +216 -0
  229. package/components/Instructions/Instructions.d.ts +29 -0
  230. package/components/Instructions/Instructions.js +32 -0
  231. package/components/InterruptCard/InterruptCard.css +164 -0
  232. package/components/InterruptCard/InterruptCard.d.ts +54 -0
  233. package/components/InterruptCard/InterruptCard.js +57 -0
  234. package/components/Kbd/Kbd.css +28 -0
  235. package/components/Kbd/Kbd.d.ts +19 -0
  236. package/components/Kbd/Kbd.js +14 -0
  237. package/components/LegendTile/LegendTile.css +60 -0
  238. package/components/LegendTile/LegendTile.d.ts +30 -0
  239. package/components/LegendTile/LegendTile.js +21 -0
  240. package/components/Lightbox/Lightbox.css +210 -0
  241. package/components/Lightbox/Lightbox.d.ts +45 -0
  242. package/components/Lightbox/Lightbox.js +109 -0
  243. package/components/LinkList/LinkList.css +71 -0
  244. package/components/LinkList/LinkList.d.ts +24 -0
  245. package/components/LinkList/LinkList.js +42 -0
  246. package/components/MapCallout/MapCallout.css +46 -0
  247. package/components/MapCallout/MapCallout.d.ts +29 -0
  248. package/components/MapCallout/MapCallout.js +17 -0
  249. package/components/MapLegend/MapLegend.css +88 -0
  250. package/components/MapLegend/MapLegend.d.ts +40 -0
  251. package/components/MapLegend/MapLegend.js +68 -0
  252. package/components/MessageActions/MessageActions.css +85 -0
  253. package/components/MessageActions/MessageActions.d.ts +38 -0
  254. package/components/MessageActions/MessageActions.js +40 -0
  255. package/components/MessageCard/MessageCard.css +163 -0
  256. package/components/MessageCard/MessageCard.d.ts +35 -0
  257. package/components/MessageCard/MessageCard.js +30 -0
  258. package/components/Meter/Meter.css +98 -0
  259. package/components/Meter/Meter.d.ts +36 -0
  260. package/components/Meter/Meter.js +48 -0
  261. package/components/ModelPicker/ModelPicker.css +243 -0
  262. package/components/ModelPicker/ModelPicker.d.ts +60 -0
  263. package/components/ModelPicker/ModelPicker.js +261 -0
  264. package/components/MotionSwatch/MotionSwatch.css +176 -0
  265. package/components/MotionSwatch/MotionSwatch.d.ts +25 -0
  266. package/components/MotionSwatch/MotionSwatch.js +74 -0
  267. package/components/Nav/Nav.css +51 -0
  268. package/components/Nav/Nav.d.ts +19 -0
  269. package/components/Nav/Nav.js +26 -0
  270. package/components/NavList/NavList.css +155 -0
  271. package/components/NavList/NavList.d.ts +56 -0
  272. package/components/NavList/NavList.js +100 -0
  273. package/components/NotificationCenter/NotificationCenter.css +279 -0
  274. package/components/NotificationCenter/NotificationCenter.d.ts +72 -0
  275. package/components/NotificationCenter/NotificationCenter.js +145 -0
  276. package/components/NumberInput/NumberInput.css +163 -0
  277. package/components/NumberInput/NumberInput.d.ts +44 -0
  278. package/components/NumberInput/NumberInput.js +147 -0
  279. package/components/Pagination/Pagination.css +126 -0
  280. package/components/Pagination/Pagination.d.ts +22 -0
  281. package/components/Pagination/Pagination.js +84 -0
  282. package/components/Panel/Panel.css +26 -0
  283. package/components/Panel/Panel.d.ts +22 -0
  284. package/components/Panel/Panel.js +19 -0
  285. package/components/PinInput/PinInput.css +92 -0
  286. package/components/PinInput/PinInput.d.ts +46 -0
  287. package/components/PinInput/PinInput.js +161 -0
  288. package/components/Popover/Popover.css +118 -0
  289. package/components/Popover/Popover.d.ts +22 -0
  290. package/components/Popover/Popover.js +113 -0
  291. package/components/ProgressBar/ProgressBar.css +60 -0
  292. package/components/ProgressBar/ProgressBar.d.ts +16 -0
  293. package/components/ProgressBar/ProgressBar.js +27 -0
  294. package/components/PromptSuggestions/PromptSuggestions.css +264 -0
  295. package/components/PromptSuggestions/PromptSuggestions.d.ts +68 -0
  296. package/components/PromptSuggestions/PromptSuggestions.js +87 -0
  297. package/components/Prose/Prose.css +269 -0
  298. package/components/Prose/Prose.d.ts +21 -0
  299. package/components/Prose/Prose.js +14 -0
  300. package/components/Quote/Quote.css +78 -0
  301. package/components/Quote/Quote.d.ts +18 -0
  302. package/components/Quote/Quote.js +26 -0
  303. package/components/RadioButton/RadioButton.css +151 -0
  304. package/components/RadioButton/RadioButton.d.ts +90 -0
  305. package/components/RadioButton/RadioButton.js +138 -0
  306. package/components/Rating/Rating.css +74 -0
  307. package/components/Rating/Rating.d.ts +41 -0
  308. package/components/Rating/Rating.js +124 -0
  309. package/components/Reasoning/Reasoning.css +291 -0
  310. package/components/Reasoning/Reasoning.d.ts +55 -0
  311. package/components/Reasoning/Reasoning.js +99 -0
  312. package/components/RichDropdown/RichDropdown.css +239 -0
  313. package/components/RichDropdown/RichDropdown.d.ts +78 -0
  314. package/components/RichDropdown/RichDropdown.js +227 -0
  315. package/components/SectionTitle/SectionTitle.css +45 -0
  316. package/components/SectionTitle/SectionTitle.d.ts +12 -0
  317. package/components/SectionTitle/SectionTitle.js +22 -0
  318. package/components/SegmentedControl/SegmentedControl.css +231 -0
  319. package/components/SegmentedControl/SegmentedControl.d.ts +44 -0
  320. package/components/SegmentedControl/SegmentedControl.js +240 -0
  321. package/components/SelectionCard/SelectionCard.css +255 -0
  322. package/components/SelectionCard/SelectionCard.d.ts +36 -0
  323. package/components/SelectionCard/SelectionCard.js +102 -0
  324. package/components/ShaderField/ShaderField.css +24 -0
  325. package/components/ShaderField/ShaderField.d.ts +68 -0
  326. package/components/ShaderField/ShaderField.js +55 -0
  327. package/components/ShaderField/field.glsl.d.ts +39 -0
  328. package/components/ShaderField/field.glsl.js +178 -0
  329. package/components/ShaderField/useShaderField.d.ts +103 -0
  330. package/components/ShaderField/useShaderField.js +410 -0
  331. package/components/Skeleton/Skeleton.css +81 -0
  332. package/components/Skeleton/Skeleton.d.ts +16 -0
  333. package/components/Skeleton/Skeleton.js +30 -0
  334. package/components/Slider/Slider.css +104 -0
  335. package/components/Slider/Slider.d.ts +48 -0
  336. package/components/Slider/Slider.js +86 -0
  337. package/components/SourceChip/SourceChip.css +111 -0
  338. package/components/SourceChip/SourceChip.d.ts +32 -0
  339. package/components/SourceChip/SourceChip.js +31 -0
  340. package/components/SourceTrail/SourceTrail.css +209 -0
  341. package/components/SourceTrail/SourceTrail.d.ts +49 -0
  342. package/components/SourceTrail/SourceTrail.js +108 -0
  343. package/components/SpacingSwatch/SpacingSwatch.css +108 -0
  344. package/components/SpacingSwatch/SpacingSwatch.d.ts +20 -0
  345. package/components/SpacingSwatch/SpacingSwatch.js +50 -0
  346. package/components/Sparkline/Sparkline.css +76 -0
  347. package/components/Sparkline/Sparkline.d.ts +51 -0
  348. package/components/Sparkline/Sparkline.js +116 -0
  349. package/components/Spinner/Spinner.css +84 -0
  350. package/components/Spinner/Spinner.d.ts +14 -0
  351. package/components/Spinner/Spinner.js +42 -0
  352. package/components/SplitButton/SplitButton.css +93 -0
  353. package/components/SplitButton/SplitButton.d.ts +43 -0
  354. package/components/SplitButton/SplitButton.js +67 -0
  355. package/components/SplitPane/SplitPane.css +106 -0
  356. package/components/SplitPane/SplitPane.d.ts +36 -0
  357. package/components/SplitPane/SplitPane.js +130 -0
  358. package/components/Stat/Stat.css +121 -0
  359. package/components/Stat/Stat.d.ts +22 -0
  360. package/components/Stat/Stat.js +36 -0
  361. package/components/StatusDot/StatusDot.css +104 -0
  362. package/components/StatusDot/StatusDot.d.ts +34 -0
  363. package/components/StatusDot/StatusDot.js +23 -0
  364. package/components/Stepper/Stepper.css +216 -0
  365. package/components/Stepper/Stepper.d.ts +41 -0
  366. package/components/Stepper/Stepper.js +61 -0
  367. package/components/StreamingText/StreamingText.css +40 -0
  368. package/components/StreamingText/StreamingText.d.ts +62 -0
  369. package/components/StreamingText/StreamingText.js +49 -0
  370. package/components/StreamingText/useStreamReveal.d.ts +70 -0
  371. package/components/StreamingText/useStreamReveal.js +121 -0
  372. package/components/Swatch/Swatch.css +52 -0
  373. package/components/Swatch/Swatch.d.ts +34 -0
  374. package/components/Swatch/Swatch.js +44 -0
  375. package/components/Table/Table.css +223 -0
  376. package/components/Table/Table.d.ts +53 -0
  377. package/components/Table/Table.js +65 -0
  378. package/components/Tabs/Tabs.css +140 -0
  379. package/components/Tabs/Tabs.d.ts +28 -0
  380. package/components/Tabs/Tabs.js +78 -0
  381. package/components/TagInput/TagInput.css +169 -0
  382. package/components/TagInput/TagInput.d.ts +43 -0
  383. package/components/TagInput/TagInput.js +137 -0
  384. package/components/Textarea/Textarea.css +109 -0
  385. package/components/Textarea/Textarea.d.ts +43 -0
  386. package/components/Textarea/Textarea.js +86 -0
  387. package/components/ThreadPanel/ThreadPanel.css +862 -0
  388. package/components/ThreadPanel/ThreadPanel.d.ts +175 -0
  389. package/components/ThreadPanel/ThreadPanel.js +466 -0
  390. package/components/ThreadTabs/ThreadTabs.css +252 -0
  391. package/components/ThreadTabs/ThreadTabs.d.ts +54 -0
  392. package/components/ThreadTabs/ThreadTabs.js +201 -0
  393. package/components/TimePicker/TimePicker.css +230 -0
  394. package/components/TimePicker/TimePicker.d.ts +46 -0
  395. package/components/TimePicker/TimePicker.js +250 -0
  396. package/components/Timeline/Timeline.css +366 -0
  397. package/components/Timeline/Timeline.d.ts +67 -0
  398. package/components/Timeline/Timeline.js +73 -0
  399. package/components/Toast/Toast.css +363 -0
  400. package/components/Toast/Toast.d.ts +63 -0
  401. package/components/Toast/Toast.js +215 -0
  402. package/components/ToggleGroup/ToggleGroup.css +110 -0
  403. package/components/ToggleGroup/ToggleGroup.d.ts +50 -0
  404. package/components/ToggleGroup/ToggleGroup.js +73 -0
  405. package/components/ToggleSwitch/ToggleSwitch.css +172 -0
  406. package/components/ToggleSwitch/ToggleSwitch.d.ts +43 -0
  407. package/components/ToggleSwitch/ToggleSwitch.js +76 -0
  408. package/components/ToolCall/ToolCall.css +234 -0
  409. package/components/ToolCall/ToolCall.d.ts +43 -0
  410. package/components/ToolCall/ToolCall.js +90 -0
  411. package/components/Toolbar/Toolbar.css +56 -0
  412. package/components/Toolbar/Toolbar.d.ts +35 -0
  413. package/components/Toolbar/Toolbar.js +62 -0
  414. package/components/Tooltip/Tooltip.css +175 -0
  415. package/components/Tooltip/Tooltip.d.ts +22 -0
  416. package/components/Tooltip/Tooltip.js +74 -0
  417. package/components/TreeView/TreeView.css +119 -0
  418. package/components/TreeView/TreeView.d.ts +45 -0
  419. package/components/TreeView/TreeView.js +232 -0
  420. package/components/TypographySwatch/TypographySwatch.css +81 -0
  421. package/components/TypographySwatch/TypographySwatch.d.ts +24 -0
  422. package/components/TypographySwatch/TypographySwatch.js +40 -0
  423. package/components/UsageCard/UsageCard.css +30 -0
  424. package/components/UsageCard/UsageCard.d.ts +48 -0
  425. package/components/UsageCard/UsageCard.js +54 -0
  426. package/components/Waveform/Waveform.css +97 -0
  427. package/components/Waveform/Waveform.d.ts +44 -0
  428. package/components/Waveform/Waveform.js +46 -0
  429. package/components/WorldMap/WorldMap.css +234 -0
  430. package/components/WorldMap/WorldMap.d.ts +113 -0
  431. package/components/WorldMap/WorldMap.js +427 -0
  432. package/components/WorldMap/land.d.ts +14 -0
  433. package/components/WorldMap/land.js +4 -0
  434. package/components/registry.d.ts +79 -0
  435. package/components/registry.js +13 -0
  436. package/components/registry.json +1153 -0
  437. package/components/registry.json.d.ts +1156 -0
  438. package/components/registry.json.js +11 -0
  439. package/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.woff2 +0 -0
  440. package/fonts/material-symbols.css +94 -0
  441. package/fonts/presets/dm-sans-300-700-latin-ext.woff2 +0 -0
  442. package/fonts/presets/dm-sans-300-700-latin.woff2 +0 -0
  443. package/fonts/presets/fraunces-300-700-latin-ext.woff2 +0 -0
  444. package/fonts/presets/fraunces-300-700-latin.woff2 +0 -0
  445. package/fonts/presets/ibm-plex-mono-300-latin-ext.woff2 +0 -0
  446. package/fonts/presets/ibm-plex-mono-300-latin.woff2 +0 -0
  447. package/fonts/presets/ibm-plex-mono-400-latin-ext.woff2 +0 -0
  448. package/fonts/presets/ibm-plex-mono-400-latin.woff2 +0 -0
  449. package/fonts/presets/ibm-plex-mono-500-latin-ext.woff2 +0 -0
  450. package/fonts/presets/ibm-plex-mono-500-latin.woff2 +0 -0
  451. package/fonts/presets/ibm-plex-mono-600-latin-ext.woff2 +0 -0
  452. package/fonts/presets/ibm-plex-mono-600-latin.woff2 +0 -0
  453. package/fonts/presets/ibm-plex-mono-700-latin-ext.woff2 +0 -0
  454. package/fonts/presets/ibm-plex-mono-700-latin.woff2 +0 -0
  455. package/fonts/presets/ibm-plex-sans-300-700-latin-ext.woff2 +0 -0
  456. package/fonts/presets/ibm-plex-sans-300-700-latin.woff2 +0 -0
  457. package/fonts/presets/inter-300-700-latin-ext.woff2 +0 -0
  458. package/fonts/presets/inter-300-700-latin.woff2 +0 -0
  459. package/fonts/presets/inter-tight-300-900-latin-ext.woff2 +0 -0
  460. package/fonts/presets/inter-tight-300-900-latin.woff2 +0 -0
  461. package/fonts/presets/lora-400-700-latin-ext.woff2 +0 -0
  462. package/fonts/presets/lora-400-700-latin.woff2 +0 -0
  463. package/fonts/presets/montserrat-300-700-latin-ext.woff2 +0 -0
  464. package/fonts/presets/montserrat-300-700-latin.woff2 +0 -0
  465. package/fonts/presets/poppins-300-latin-ext.woff2 +0 -0
  466. package/fonts/presets/poppins-300-latin.woff2 +0 -0
  467. package/fonts/presets/poppins-400-latin-ext.woff2 +0 -0
  468. package/fonts/presets/poppins-400-latin.woff2 +0 -0
  469. package/fonts/presets/poppins-500-latin-ext.woff2 +0 -0
  470. package/fonts/presets/poppins-500-latin.woff2 +0 -0
  471. package/fonts/presets/poppins-600-latin-ext.woff2 +0 -0
  472. package/fonts/presets/poppins-600-latin.woff2 +0 -0
  473. package/fonts/presets/poppins-700-latin-ext.woff2 +0 -0
  474. package/fonts/presets/poppins-700-latin.woff2 +0 -0
  475. package/fonts/presets/source-sans-3-300-700-latin-ext.woff2 +0 -0
  476. package/fonts/presets/source-sans-3-300-700-latin.woff2 +0 -0
  477. package/fonts/presets/space-grotesk-300-700-latin-ext.woff2 +0 -0
  478. package/fonts/presets/space-grotesk-300-700-latin.woff2 +0 -0
  479. package/fonts/presets/work-sans-300-700-latin-ext.woff2 +0 -0
  480. package/fonts/presets/work-sans-300-700-latin.woff2 +0 -0
  481. package/index.d.ts +132 -0
  482. package/index.js +277 -0
  483. package/package.json +87 -0
  484. package/tokens/motion.d.ts +44 -0
  485. package/tokens/motion.js +32 -0
  486. package/tokens/presets/contrast.css +316 -0
  487. package/tokens/presets/coral.css +356 -0
  488. package/tokens/presets/forest.css +334 -0
  489. package/tokens/presets/gold.css +303 -0
  490. package/tokens/presets/mono.css +286 -0
  491. package/tokens/presets/pink.css +349 -0
  492. package/tokens/presets/presets.css +17 -0
  493. package/tokens/presets/terminal.css +378 -0
  494. package/tokens/presets/violet.css +314 -0
  495. package/tokens/presets/warm.css +320 -0
  496. package/tokens/presets/zest.css +359 -0
  497. package/tokens/registry.d.ts +22 -0
  498. package/tokens/registry.js +14 -0
  499. package/tokens/registry.json +276 -0
  500. package/tokens/registry.json.d.ts +279 -0
  501. package/tokens/registry.json.js +8 -0
  502. package/tokens/tokens-dark.css +186 -0
  503. package/tokens/tokens-light.css +276 -0
  504. package/tokens/tokens-motion.css +72 -0
  505. package/tokens/tokens-primitives.css +213 -0
  506. package/tokens/tokens-typography.css +210 -0
  507. package/tokens/tokens.css +11 -0
@@ -0,0 +1,95 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { ResponsiveContainer, Treemap as Treemap$1, Tooltip } from "recharts";
4
+ import { getChartSeriesColors } from "./palette.js";
5
+ import "./Chart.css";
6
+ function getCSSVar(name, fallback) {
7
+ return `var(${name}, ${fallback})`;
8
+ }
9
+ function TreemapContent(props) {
10
+ const { x, y, width, height, name, index, color } = props;
11
+ if (width < 4 || height < 4) return null;
12
+ const seriesColors = getChartSeriesColors();
13
+ const fill = color || seriesColors[index % seriesColors.length];
14
+ const textColor = getCSSVar("--color-text-primary", "#050505");
15
+ const showLabel = width > 50 && height > 28;
16
+ return /* @__PURE__ */ jsxs("g", { children: [
17
+ /* @__PURE__ */ jsx(
18
+ "rect",
19
+ {
20
+ x,
21
+ y,
22
+ width,
23
+ height,
24
+ rx: 4,
25
+ ry: 4,
26
+ style: { fill, stroke: getCSSVar("--color-bg-container-primary", "#FFFFFF"), strokeWidth: 2 }
27
+ }
28
+ ),
29
+ showLabel && /* @__PURE__ */ jsx(
30
+ "text",
31
+ {
32
+ x: x + width / 2,
33
+ y: y + height / 2,
34
+ textAnchor: "middle",
35
+ dominantBaseline: "central",
36
+ style: { fill: textColor, fontSize: 12, fontWeight: 600 },
37
+ children: name
38
+ }
39
+ )
40
+ ] });
41
+ }
42
+ function TreemapTooltip({ active, payload }) {
43
+ if (!active || !payload?.length) return null;
44
+ const entry = payload[0];
45
+ return /* @__PURE__ */ jsxs("div", { className: "ds-chart__tooltip", children: [
46
+ /* @__PURE__ */ jsx("div", { className: "ds-chart__tooltip-label", children: entry.name }),
47
+ /* @__PURE__ */ jsxs("div", { className: "ds-chart__tooltip-row", children: [
48
+ /* @__PURE__ */ jsx("span", { className: "ds-chart__tooltip-name", children: "Size" }),
49
+ /* @__PURE__ */ jsx("span", { className: "ds-chart__tooltip-value", children: entry.value?.toLocaleString() })
50
+ ] })
51
+ ] });
52
+ }
53
+ const Treemap = ({
54
+ data,
55
+ dataKey = "size",
56
+ title,
57
+ subtitle,
58
+ summaryItems,
59
+ height = 350,
60
+ bare = false,
61
+ className = ""
62
+ }) => {
63
+ const baseClass = "ds-chart";
64
+ const classes = [baseClass, bare ? `${baseClass}--bare` : "", className].filter(Boolean).join(" ");
65
+ const renderTooltip = useCallback(
66
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
67
+ (props) => /* @__PURE__ */ jsx(TreemapTooltip, { ...props }),
68
+ []
69
+ );
70
+ return /* @__PURE__ */ jsxs("div", { className: classes, children: [
71
+ (title || subtitle || summaryItems) && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__header`, children: [
72
+ /* @__PURE__ */ jsxs("div", { className: `${baseClass}__header-text`, children: [
73
+ title && /* @__PURE__ */ jsx("h3", { className: `${baseClass}__title`, children: title }),
74
+ subtitle && /* @__PURE__ */ jsx("p", { className: `${baseClass}__subtitle`, children: subtitle })
75
+ ] }),
76
+ summaryItems && summaryItems.length > 0 && /* @__PURE__ */ jsx("div", { className: `${baseClass}__summary`, children: summaryItems.map((item, i) => /* @__PURE__ */ jsxs("div", { className: `${baseClass}__summary-item`, children: [
77
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__summary-label`, children: item.label }),
78
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__summary-value`, children: typeof item.value === "number" ? item.value.toLocaleString() : item.value })
79
+ ] }, i)) })
80
+ ] }),
81
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__body`, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height, children: /* @__PURE__ */ jsx(
82
+ Treemap$1,
83
+ {
84
+ data,
85
+ dataKey,
86
+ aspectRatio: 4 / 3,
87
+ content: /* @__PURE__ */ jsx(TreemapContent, {}),
88
+ children: /* @__PURE__ */ jsx(Tooltip, { content: renderTooltip })
89
+ }
90
+ ) }) })
91
+ ] });
92
+ };
93
+ export {
94
+ Treemap
95
+ };
@@ -0,0 +1 @@
1
+ export declare function getChartSeriesColors(): string[];
@@ -0,0 +1,17 @@
1
+ const SERIES_FALLBACKS = [
2
+ "#0E6E8F",
3
+ "#06D6A0",
4
+ "#FFD166",
5
+ "#EF476F",
6
+ "#9E47EF",
7
+ "#EF8247",
8
+ "#1E47B0"
9
+ ];
10
+ function getChartSeriesColors() {
11
+ return SERIES_FALLBACKS.map(
12
+ (fallback, i) => `var(--color-chart-series-${i + 1}, ${fallback})`
13
+ );
14
+ }
15
+ export {
16
+ getChartSeriesColors
17
+ };
@@ -0,0 +1,35 @@
1
+ /* ============================================
2
+ CHAT HEADER COMPONENT
3
+ Top row of a chat surface: title on the
4
+ left, controls on the right. No divider —
5
+ it floats free of the transcript.
6
+ ============================================ */
7
+
8
+ /* Base */
9
+ .ds-chat-header {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ gap: var(--gap-400);
14
+ padding: var(--padding-150) var(--padding-400);
15
+ }
16
+
17
+ /* Title */
18
+ .ds-chat-header__title {
19
+ font-family: var(--font-title-body-family);
20
+ font-size: var(--font-title-body-size);
21
+ font-weight: var(--font-title-body-weight);
22
+ line-height: var(--font-title-body-line-height);
23
+ color: var(--color-text-primary);
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ white-space: nowrap;
27
+ }
28
+
29
+ /* Actions */
30
+ .ds-chat-header__actions {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: var(--gap-100);
34
+ flex-shrink: 0;
35
+ }
@@ -0,0 +1,30 @@
1
+ import { default as React } from 'react';
2
+ /** Props owned by ChatHeader itself — everything else falls through to the root element. */
3
+ type ChatHeaderOwnProps = {
4
+ /**
5
+ * The chat or assistant name. Deliberately shadows the native `title`
6
+ * tooltip attribute — a header's title is content, not a tooltip. Pass a
7
+ * string for the default treatment, or your own heading element.
8
+ */
9
+ title?: React.ReactNode;
10
+ /**
11
+ * Trailing controls: a new-chat CircularButton, a view switcher, a close
12
+ * button. The slot only lays them out — each control owns its behaviour.
13
+ */
14
+ actions?: React.ReactNode;
15
+ /** Additional CSS classes */
16
+ className?: string;
17
+ };
18
+ export interface ChatHeaderProps extends ChatHeaderOwnProps, Omit<React.ComponentPropsWithoutRef<'header'>, keyof ChatHeaderOwnProps> {
19
+ }
20
+ /**
21
+ * ChatHeader is the top row of a chat surface: the conversation's name on the
22
+ * left, its controls on the right. It draws no bottom border — like the
23
+ * composer below, it floats free of the transcript, and the thread's own
24
+ * padding provides the separation.
25
+ *
26
+ * Purely presentational, so it renders from a Server Component; the controls
27
+ * passed into `actions` bring their own interactivity.
28
+ */
29
+ export declare const ChatHeader: React.ForwardRefExoticComponent<ChatHeaderProps & React.RefAttributes<HTMLElement>>;
30
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import "./ChatHeader.css";
4
+ const ChatHeader = React.forwardRef(
5
+ ({ title, actions, className = "", ...rest }, ref) => {
6
+ const baseClass = "ds-chat-header";
7
+ const classes = [baseClass, className].filter(Boolean).join(" ");
8
+ return /* @__PURE__ */ jsxs("header", { ...rest, ref, className: classes, children: [
9
+ typeof title === "string" ? /* @__PURE__ */ jsx("span", { className: `${baseClass}__title`, children: title }) : title,
10
+ actions && /* @__PURE__ */ jsx("div", { className: `${baseClass}__actions`, children: actions })
11
+ ] });
12
+ }
13
+ );
14
+ ChatHeader.displayName = "ChatHeader";
15
+ export {
16
+ ChatHeader
17
+ };
@@ -0,0 +1,61 @@
1
+ /* ============================================
2
+ CHAT MARKER COMPONENT
3
+ Inline conversation separator for dates and system notes
4
+ ============================================ */
5
+
6
+ .ds-chat-marker {
7
+ display: flex;
8
+ align-items: center;
9
+ gap: var(--gap-300);
10
+ width: 100%;
11
+ }
12
+
13
+ /* Flanking lines — kept as flex spacers when bare, so the label
14
+ stays centred either way */
15
+ .ds-chat-marker::before,
16
+ .ds-chat-marker::after {
17
+ content: '';
18
+ flex: 1;
19
+ height: var(--border-025);
20
+ background-color: var(--color-divider);
21
+ }
22
+
23
+ .ds-chat-marker--bare::before,
24
+ .ds-chat-marker--bare::after {
25
+ background-color: transparent;
26
+ }
27
+
28
+ /* ============================================
29
+ LABEL
30
+ ============================================ */
31
+
32
+ .ds-chat-marker__label {
33
+ flex-shrink: 0;
34
+ display: inline-flex;
35
+ align-items: center;
36
+ gap: var(--gap-100);
37
+ font-family: var(--font-paragraph-sm-family);
38
+ font-size: var(--font-paragraph-sm-size);
39
+ font-weight: var(--font-paragraph-sm-weight);
40
+ line-height: var(--font-paragraph-sm-line-height);
41
+ letter-spacing: var(--font-paragraph-sm-letter-spacing);
42
+ color: var(--color-text-tertiary);
43
+ }
44
+
45
+ .ds-chat-marker__icon {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ }
49
+
50
+ .ds-chat-marker__icon .material-symbols-rounded {
51
+ --icon-size: var(--icon-size-500);
52
+ }
53
+
54
+ /* Icons take the colour of the text around them. Explicit, not just
55
+ inherited by default: a consumer stylesheet that sets a colour on
56
+ .material-symbols-rounded itself (a common global default) would
57
+ otherwise override inheritance and detach the icon from the state
58
+ colours this component sets on its parents. */
59
+ .ds-chat-marker .material-symbols-rounded {
60
+ color: inherit;
61
+ }
@@ -0,0 +1,22 @@
1
+ import { default as React } from 'react';
2
+ /** Props owned by ChatMarker itself — everything else falls through to the root element. */
3
+ type ChatMarkerOwnProps = {
4
+ /** Leading icon — a Material Symbol name, or any custom element. */
5
+ icon?: string | React.ReactNode;
6
+ /** Draw the flanking divider lines. Turn off for a bare centred note. */
7
+ line?: boolean;
8
+ /** Additional CSS classes */
9
+ className?: string;
10
+ /** The marker text, e.g. "Today" or "Chat renamed". */
11
+ children?: React.ReactNode;
12
+ };
13
+ export interface ChatMarkerProps extends ChatMarkerOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof ChatMarkerOwnProps> {
14
+ }
15
+ /**
16
+ * ChatMarker is the inline separator a conversation uses for anything that
17
+ * is not a turn: date breaks, joins, mode changes, system notes. It reads
18
+ * as furniture rather than as a message — quiet tertiary text between two
19
+ * divider lines, so the eye skips it while scanning turns.
20
+ */
21
+ export declare const ChatMarker: React.ForwardRefExoticComponent<ChatMarkerProps & React.RefAttributes<HTMLDivElement>>;
22
+ export {};
@@ -0,0 +1,18 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import "./ChatMarker.css";
4
+ import "../../fonts/material-symbols.css";
5
+ const ChatMarker = React.forwardRef(
6
+ ({ icon, line = true, className = "", children, ...rest }, ref) => {
7
+ const baseClass = "ds-chat-marker";
8
+ const classes = [baseClass, line ? "" : `${baseClass}--bare`, className].filter(Boolean).join(" ");
9
+ return /* @__PURE__ */ jsx("div", { ...rest, ref, className: classes, role: "separator", children: /* @__PURE__ */ jsxs("span", { className: `${baseClass}__label`, children: [
10
+ icon && /* @__PURE__ */ jsx("span", { className: `${baseClass}__icon`, "aria-hidden": "true", children: typeof icon === "string" ? /* @__PURE__ */ jsx("span", { className: "material-symbols-rounded", children: icon }) : icon }),
11
+ children
12
+ ] }) });
13
+ }
14
+ );
15
+ ChatMarker.displayName = "ChatMarker";
16
+ export {
17
+ ChatMarker
18
+ };
@@ -0,0 +1,326 @@
1
+ /* ============================================
2
+ CHAT MESSAGE COMPONENT
3
+ A single chat turn: avatar, author, timestamp,
4
+ and bubble or plain content aligned by role.
5
+
6
+ Bubble surfaces come only from the four
7
+ --color-chat-bubble-* tokens — never the
8
+ container ramp directly — so re-theming a chat
9
+ means repointing those four and nothing else.
10
+ ============================================ */
11
+
12
+ .ds-chat-message {
13
+ /* Gutter width matches the Avatar sm footprint, so a run of turns keeps
14
+ its left edge whether or not each row shows its avatar. Consumers can
15
+ repoint it for a larger avatar. */
16
+ --ds-chat-message-gutter: var(--icon-size-800);
17
+
18
+ display: flex;
19
+ align-items: flex-start;
20
+ gap: var(--gap-300);
21
+ width: 100%;
22
+ }
23
+
24
+ .ds-chat-message--user {
25
+ flex-direction: row-reverse;
26
+ }
27
+
28
+ /* ============================================
29
+ GUTTER
30
+ ============================================ */
31
+
32
+ .ds-chat-message__gutter {
33
+ flex: none;
34
+ display: flex;
35
+ justify-content: center;
36
+ width: var(--ds-chat-message-gutter);
37
+ }
38
+
39
+ /* Hidden, not removed — the reserved width is what keeps a run aligned */
40
+ .ds-chat-message__gutter--hidden {
41
+ visibility: hidden;
42
+ }
43
+
44
+ /* ============================================
45
+ BODY
46
+ ============================================ */
47
+
48
+ .ds-chat-message__body {
49
+ flex: 1;
50
+ min-width: 0;
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: flex-start;
54
+ gap: var(--gap-100);
55
+ }
56
+
57
+ .ds-chat-message--user .ds-chat-message__body {
58
+ align-items: flex-end;
59
+ }
60
+
61
+ /* ============================================
62
+ META ROW
63
+ ============================================ */
64
+
65
+ .ds-chat-message__meta {
66
+ display: flex;
67
+ align-items: baseline;
68
+ gap: var(--gap-200);
69
+ }
70
+
71
+ .ds-chat-message__author {
72
+ font-family: var(--font-paragraph-sm-emphasis-family);
73
+ font-size: var(--font-paragraph-sm-emphasis-size);
74
+ font-weight: var(--font-paragraph-sm-emphasis-weight);
75
+ line-height: var(--font-paragraph-sm-emphasis-line-height);
76
+ letter-spacing: var(--font-paragraph-sm-emphasis-letter-spacing);
77
+ color: var(--color-text-secondary);
78
+ }
79
+
80
+ .ds-chat-message__timestamp {
81
+ font-family: var(--font-paragraph-sm-family);
82
+ font-size: var(--font-paragraph-sm-size);
83
+ font-weight: var(--font-paragraph-sm-weight);
84
+ line-height: var(--font-paragraph-sm-line-height);
85
+ letter-spacing: var(--font-paragraph-sm-letter-spacing);
86
+ font-variant-numeric: tabular-nums;
87
+ color: var(--color-text-tertiary);
88
+ }
89
+
90
+ /* ============================================
91
+ CONTENT
92
+ ============================================ */
93
+
94
+ .ds-chat-message__content {
95
+ font-family: var(--font-paragraph-family);
96
+ font-size: var(--font-paragraph-size);
97
+ font-weight: var(--font-paragraph-weight);
98
+ line-height: var(--font-paragraph-line-height);
99
+ letter-spacing: var(--font-paragraph-letter-spacing);
100
+ /* Content never pushes the turn wider than its container — an unbroken
101
+ run (a URL, a token) wraps inside the bubble or column instead. */
102
+ min-width: 0;
103
+ max-width: 100%;
104
+ overflow-wrap: anywhere;
105
+ }
106
+
107
+ /* Plain — the assistant default: no surface, full width, primary text */
108
+ .ds-chat-message--plain .ds-chat-message__content {
109
+ width: 100%;
110
+ color: var(--color-text-primary);
111
+ }
112
+
113
+ /* Card furniture inside a turn steps clear of the content around it — at
114
+ the body's default rhythm an adjacent text line sits close enough to read
115
+ as a caption rather than a neighbouring block. Margins, not gap, so a
116
+ card standing alone adds nothing. */
117
+ .ds-chat-message__content > .ds-message-card:not(:first-child),
118
+ .ds-chat-message__content > .ds-interrupt-card:not(:first-child),
119
+ .ds-chat-message__content > .ds-tool-call:not(:first-child) {
120
+ margin-top: var(--gap-300);
121
+ }
122
+
123
+ .ds-chat-message__content > .ds-message-card:not(:last-child),
124
+ .ds-chat-message__content > .ds-interrupt-card:not(:last-child),
125
+ .ds-chat-message__content > .ds-tool-call:not(:last-child) {
126
+ margin-bottom: var(--gap-300);
127
+ }
128
+
129
+ /* Bubble — capped width so a short line never drags a surface across the
130
+ whole row; the fallback is the sanctioned consumer-override hook */
131
+ .ds-chat-message--bubble .ds-chat-message__content {
132
+ max-width: var(--ds-chat-message-max-width, 75%);
133
+ padding: var(--padding-300) var(--padding-500);
134
+ border-radius: var(--radius-600);
135
+ }
136
+
137
+ /* Sent — the user's own turns */
138
+ .ds-chat-message--bubble.ds-chat-message--user .ds-chat-message__content {
139
+ background-color: var(--color-chat-bubble-sent-bg);
140
+ color: var(--color-chat-bubble-sent-text);
141
+ }
142
+
143
+ /* Received — an assistant turn opted into a bubble */
144
+ .ds-chat-message--bubble.ds-chat-message--assistant .ds-chat-message__content {
145
+ background-color: var(--color-chat-bubble-received-bg);
146
+ color: var(--color-chat-bubble-received-text);
147
+ }
148
+
149
+ /* Tail — the speaker-side bottom corner squares off to point at them */
150
+ .ds-chat-message--tail.ds-chat-message--bubble.ds-chat-message--user
151
+ .ds-chat-message__content {
152
+ border-bottom-right-radius: var(--radius-100);
153
+ }
154
+
155
+ .ds-chat-message--tail.ds-chat-message--bubble.ds-chat-message--assistant
156
+ .ds-chat-message__content {
157
+ border-bottom-left-radius: var(--radius-100);
158
+ }
159
+
160
+ /* ============================================
161
+ GROUPED
162
+ A follow-on row in the same speaker's run:
163
+ no meta, avatar hidden but gutter kept, and
164
+ the row pulls up towards the one above so the
165
+ run reads as one utterance. The negative
166
+ margin offsets part of the container's gap.
167
+ ============================================ */
168
+
169
+ .ds-chat-message--grouped {
170
+ margin-top: calc(-1 * var(--gap-200));
171
+ }
172
+
173
+ /* ============================================
174
+ COMPACT
175
+ ============================================ */
176
+
177
+ .ds-chat-message--compact .ds-chat-message__content {
178
+ font-family: var(--font-paragraph-sm-family);
179
+ font-size: var(--font-paragraph-sm-size);
180
+ font-weight: var(--font-paragraph-sm-weight);
181
+ line-height: var(--font-paragraph-sm-line-height);
182
+ letter-spacing: var(--font-paragraph-sm-letter-spacing);
183
+ }
184
+
185
+ .ds-chat-message--compact.ds-chat-message--bubble .ds-chat-message__content {
186
+ padding: var(--padding-150) var(--padding-300);
187
+ }
188
+
189
+ /* ============================================
190
+ PENDING
191
+ Three dots pulsing in sequence while the
192
+ first content is still on its way.
193
+ ============================================ */
194
+
195
+ .ds-chat-message__pending {
196
+ --ds-chat-message-pending-cycle: var(--motion-duration-loop-matrix);
197
+
198
+ display: inline-flex;
199
+ align-items: center;
200
+ }
201
+
202
+ .ds-chat-message__dots {
203
+ display: inline-flex;
204
+ align-items: center;
205
+ gap: var(--gap-100);
206
+ }
207
+
208
+ .ds-chat-message__dot {
209
+ width: var(--gap-200);
210
+ height: var(--gap-200);
211
+ border-radius: var(--radius-pill);
212
+ background-color: var(--color-text-tertiary);
213
+ opacity: 0.25;
214
+ animation: ds-chat-message-dot var(--ds-chat-message-pending-cycle)
215
+ var(--motion-ease-linear) infinite;
216
+ }
217
+
218
+ .ds-chat-message__dot:nth-child(2) {
219
+ animation-delay: calc(var(--ds-chat-message-pending-cycle) / 6);
220
+ }
221
+
222
+ .ds-chat-message__dot:nth-child(3) {
223
+ animation-delay: calc(var(--ds-chat-message-pending-cycle) / 3);
224
+ }
225
+
226
+ /* Each dot brightens and falls back within the first half of the cycle, so
227
+ the stagger reads as a wave rather than three independent blinkers */
228
+ @keyframes ds-chat-message-dot {
229
+ 0%,
230
+ 60%,
231
+ 100% {
232
+ opacity: 0.25;
233
+ }
234
+
235
+ 30% {
236
+ opacity: 1;
237
+ }
238
+ }
239
+
240
+ /* ============================================
241
+ ACTIONS
242
+ Hidden until the row is hovered or holds
243
+ keyboard focus; touch has no hover, so there
244
+ they stay visible.
245
+
246
+ Opacity only, never visibility: hidden would
247
+ drop the buttons from the tab order, so a
248
+ message with no other focusable child could
249
+ never match :focus-within and keyboard users
250
+ could never reach the actions. Invisible-but-
251
+ tabbable is the point — the first Tab into a
252
+ button reveals the row.
253
+ ============================================ */
254
+
255
+ .ds-chat-message__actions {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: var(--gap-100);
259
+ /* The row hides with opacity, not display, so this offset is always
260
+ reserved — the body's own gap plus this margin sets the row a full
261
+ --gap-400 off the content without loosening the meta stack above. */
262
+ margin-top: var(--gap-300);
263
+ opacity: 0;
264
+ transition: opacity var(--motion-duration-fast) var(--motion-ease-standard);
265
+ }
266
+
267
+ .ds-chat-message:hover .ds-chat-message__actions,
268
+ .ds-chat-message:focus-within .ds-chat-message__actions {
269
+ opacity: 1;
270
+ }
271
+
272
+ /* showActions pins the row on: the actions are part of the response, not a
273
+ secondary affordance to discover. */
274
+ .ds-chat-message--show-actions .ds-chat-message__actions {
275
+ opacity: 1;
276
+ }
277
+
278
+ @media (hover: none) {
279
+ .ds-chat-message__actions {
280
+ opacity: 1;
281
+ }
282
+ }
283
+
284
+ /* ============================================
285
+ FOOTER
286
+ ============================================ */
287
+
288
+ .ds-chat-message__footer {
289
+ display: flex;
290
+ align-items: center;
291
+ flex-wrap: wrap;
292
+ gap: var(--gap-100);
293
+ }
294
+
295
+ /* ============================================
296
+ VISUALLY HIDDEN
297
+ The pending label is for screen readers only.
298
+ ============================================ */
299
+
300
+ .ds-chat-message__sr-only {
301
+ position: absolute;
302
+ width: 1px;
303
+ height: 1px;
304
+ padding: 0;
305
+ margin: -1px;
306
+ overflow: hidden;
307
+ clip: rect(0, 0, 0, 0);
308
+ white-space: nowrap;
309
+ border: 0;
310
+ }
311
+
312
+ /* ============================================
313
+ REDUCED MOTION
314
+ The global guard collapses the loop to its
315
+ final frame, which is the dim phase — three
316
+ near-invisible dots. Park them at a legible
317
+ static opacity instead; the visually hidden
318
+ label still says what is happening.
319
+ ============================================ */
320
+
321
+ @media (prefers-reduced-motion: reduce) {
322
+ .ds-chat-message__dot {
323
+ animation: none;
324
+ opacity: 0.55;
325
+ }
326
+ }