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,175 @@
1
+ import { default as React } from 'react';
2
+ export interface ThreadPanelThreadAction {
3
+ /** Stable identifier reported through `onThreadAction`. */
4
+ id: string;
5
+ /** Menu row text. */
6
+ label: string;
7
+ /** Leading icon on the menu row — Material Symbol name (string) or custom element (ReactNode). */
8
+ icon?: string | React.ReactNode;
9
+ /** Destructive styling (the error text colour) for delete-like actions. */
10
+ destructive?: boolean;
11
+ }
12
+ export interface ThreadPanelThread {
13
+ /** Stable identifier: `activeThreadId` matches against it and `onThreadSelect` reports it. */
14
+ id: string;
15
+ /** The thread's one-line title. Overflow fades out under a trailing mask rather than clipping; the full text stays readable in the row's native tooltip. */
16
+ title: string;
17
+ /** Optional href — the row renders as an `<a>` for real navigation instead of a `<button>`. */
18
+ href?: string;
19
+ /** Small trailing annotation in the caption face, e.g. a relative timestamp. */
20
+ meta?: string;
21
+ /** The title is still being generated: the row shows a shimmer bar in the title's place and hides its menu, keeping `title` (e.g. "New chat") as the accessible name. */
22
+ pending?: boolean;
23
+ /** This thread's own menu actions, overriding the panel-wide `threadActions`. */
24
+ actions?: ThreadPanelThreadAction[];
25
+ /** Quiet second line under the title in the caption face — a repo, an environment, a one-line summary. Overflows under the same trailing mask as the title. */
26
+ description?: string;
27
+ /** The thread holds unseen activity: a small status dot leads the row. The dot is decorative — put the state in `meta` or `description` when it must be read aloud. */
28
+ unread?: boolean;
29
+ /** Trailing icon before the meta — Material Symbol name (string) or custom element (ReactNode), e.g. `cloud` for a session that lives remotely. */
30
+ icon?: string | React.ReactNode;
31
+ /** Marks the thread pinned with a trailing pin glyph. A marker only: the host groups pinned threads (typically a leading group) and offers pin/unpin through the row menu. */
32
+ pinned?: boolean;
33
+ }
34
+ export interface ThreadPanelGroup {
35
+ /** Group heading in the overline face, e.g. a project or repo name. Omit for an unlabelled run of threads. */
36
+ label?: string;
37
+ /** The group's threads, in display order. */
38
+ threads: ThreadPanelThread[];
39
+ }
40
+ export interface ThreadPanelControl {
41
+ /** Stable identifier reported through `onControlSelect`. */
42
+ id: string;
43
+ /** Leading icon on the row — Material Symbol name (string) or custom element (ReactNode). */
44
+ icon: string | React.ReactNode;
45
+ /** Row text. */
46
+ label: string;
47
+ /** Optional href — the row renders as an `<a>` instead of a `<button>`. */
48
+ href?: string;
49
+ }
50
+ export interface ThreadPanelProject {
51
+ /** Stable identifier: `activeProjectId` matches against it and `onProjectSelect` reports it. */
52
+ id: string;
53
+ /** The project's name. */
54
+ label: string;
55
+ /** Leading icon on the row — Material Symbol name (string) or custom element (ReactNode). Defaults to `folder`. */
56
+ icon?: string | React.ReactNode;
57
+ /** Small trailing annotation in the caption face, e.g. how recently the project was touched. */
58
+ meta?: string;
59
+ /** Optional href — the row renders as an `<a>` instead of a `<button>`. */
60
+ href?: string;
61
+ }
62
+ export interface ThreadPanelProfile {
63
+ /** The signed-in person's display name; also seeds the Avatar's initials. */
64
+ name: string;
65
+ /** Quiet caption beside the name, e.g. the plan or workspace. */
66
+ meta?: string;
67
+ /** Replace the initials Avatar with a custom element, e.g. an `<Avatar src>`. */
68
+ avatar?: React.ReactNode;
69
+ }
70
+ /** Props owned by ThreadPanel itself — everything else falls through to the root `<div>`. */
71
+ type ThreadPanelOwnProps = {
72
+ /** The history, in display order. A flat list is one group with no label. */
73
+ groups: ThreadPanelGroup[];
74
+ /** Id of the thread on stage. Its row renders filled and carries `aria-current`. */
75
+ activeThreadId?: string;
76
+ /** Fires with the clicked thread's id. Rows with an `href` navigate as well. */
77
+ onThreadSelect?: (id: string) => void;
78
+ /** Shared menu actions for every thread row, behind a hover-revealed trailing trigger; a thread's own `actions` overrides the set. The menu renders only when `onThreadAction` is also given, and never on a `pending` row. */
79
+ threadActions?: ThreadPanelThreadAction[];
80
+ /** Fires with the thread's id and the chosen action's id. */
81
+ onThreadAction?: (threadId: string, actionId: string) => void;
82
+ /** Accessible name for a row's menu trigger; the thread's title is appended after it. */
83
+ threadMenuLabel?: string;
84
+ /** Id of the thread being renamed: its row swaps to an inline text field, prefilled with the title and selected. The host owns the state, like everything else. */
85
+ renamingThreadId?: string;
86
+ /** Fires with the thread's id and the trimmed new title when a rename commits (Enter, or focus leaving the field). An empty or unchanged value fires `onRenameCancel` instead. */
87
+ onThreadRename?: (threadId: string, title: string) => void;
88
+ /** Fires when a rename ends without a change: Escape, an empty value, or an unchanged title. */
89
+ onRenameCancel?: () => void;
90
+ /** Accessible name for the inline rename field. */
91
+ renameLabel?: string;
92
+ /** Brand mark slot at the top, e.g. a logo `<img>`. While collapsed it doubles as the expand button, AppSidebar's contract. */
93
+ logo?: React.ReactNode;
94
+ /** Brand name beside the logo. The header row renders only when `logo`, `logoText`, or `onExpandedChange` is given. */
95
+ logoText?: string;
96
+ /** Text for the new-thread row. The row renders when this, `onNewThread`, or `newThreadHref` is given. */
97
+ newThreadLabel?: string;
98
+ /** Icon for the new-thread row — Material Symbol name (string) or custom element (ReactNode). Defaults to the pen-in-a-box `edit_square`, the same glyph chat headers use for New chat. */
99
+ newThreadIcon?: string | React.ReactNode;
100
+ /** Keyboard hint rendered as compact Kbds at the row's trailing edge, e.g. `["Ctrl", "N"]`. Decorative — the host owns the actual binding. */
101
+ newThreadShortcut?: string[];
102
+ /** Fires when the new-thread row is clicked. */
103
+ onNewThread?: () => void;
104
+ /** Optional href — the new-thread row renders as an `<a>`. */
105
+ newThreadHref?: string;
106
+ /** Standing rows between the new-thread action and the history, e.g. Automations or Settings. */
107
+ controls?: ThreadPanelControl[];
108
+ /** Fires with the clicked control's id. Rows with an `href` navigate as well. */
109
+ onControlSelect?: (id: string) => void;
110
+ /** Project rows between the standing controls and the history, under their own overline header. The section renders only when non-empty; collapsed, the rows fold to icon circles like the controls. */
111
+ projects?: ThreadPanelProject[];
112
+ /** The projects section's overline header text. */
113
+ projectsLabel?: string;
114
+ /** Id of the open project. Its row renders filled and carries `aria-current`. */
115
+ activeProjectId?: string;
116
+ /** Fires with the clicked project's id. Rows with an `href` navigate as well. */
117
+ onProjectSelect?: (id: string) => void;
118
+ /** Fires when the header's trailing new-project button is pressed. The button renders only when this is given. */
119
+ onProjectCreate?: () => void;
120
+ /** Accessible name for the new-project button. */
121
+ newProjectLabel?: string;
122
+ /** Text for the quiet trailing row that reveals older threads, e.g. "Show 20 more". Renders only when given. */
123
+ moreLabel?: string;
124
+ /** Fires when the more row is clicked. */
125
+ onShowMore?: () => void;
126
+ /** Accessible name for the scrollable history region. */
127
+ historyLabel?: string;
128
+ /** Whether the panel is expanded (280px, labels and history showing). Collapsed it is AppSidebar's 64px icon rail: circular icon rows, the history faded out, the avatar alone in the footer. */
129
+ expanded?: boolean;
130
+ /** Fires with the next state when the toggle (or, collapsed, the logo) is pressed. The toggle renders only when this is given; the panel is controlled, so the host owns the state. */
131
+ onExpandedChange?: (expanded: boolean) => void;
132
+ /** Accessible name for the header toggle while expanded. */
133
+ collapseLabel?: string;
134
+ /** Accessible name for the expand affordance while collapsed. */
135
+ expandLabel?: string;
136
+ /** The signed-in person, rendered as the footer's Avatar row. */
137
+ profile?: ThreadPanelProfile;
138
+ /** Rendered in the footer above the profile row — a theme toggle, a storage meter. Fades out while collapsed, AppSidebar's contract. */
139
+ footerSlot?: React.ReactNode;
140
+ /** Additional CSS classes */
141
+ className?: string;
142
+ };
143
+ export interface ThreadPanelProps extends ThreadPanelOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof ThreadPanelOwnProps> {
144
+ }
145
+ /**
146
+ * ThreadPanel is the session-history rail of a chat or agent product: brand
147
+ * header, a new-thread action with an optional shortcut hint, standing
148
+ * control rows, an optional projects section with its own new-project
149
+ * button, the grouped thread history (the one region that scrolls), and a
150
+ * footer for the profile row and host furniture like a theme toggle.
151
+ * Thread rows scale from a bare title to the full detail anatomy: an
152
+ * unread dot, a quiet description line, a trailing glyph, a pin marker,
153
+ * and the meta caption.
154
+ *
155
+ * Fully controlled and stateless: the host owns the active thread, the
156
+ * navigation, the expanded state, and what selecting a row means. Every
157
+ * section is optional, so the panel scales from a bare thread list to the
158
+ * full anatomy. Thread rows carry the lifecycle affordances of a real chat
159
+ * history: a `pending` thread shows a shimmer in its title's place while
160
+ * the host generates a name, `threadActions` puts a hover-revealed overflow
161
+ * menu (DropdownMenu, compact) on every row for rename and delete, and
162
+ * `renamingThreadId` swaps a row to an inline rename field — all still
163
+ * controlled from outside. Expand and collapse follow AppSidebar's
164
+ * choreography: the panel owns its width (280px expanded, a 64px icon rail
165
+ * collapsed), the sweeping clip and the labels' opacity fades carry the
166
+ * transition, rows collapse to circular icon buttons, and while collapsed
167
+ * the logo doubles as the expand button. Carries no `'use client'`
168
+ * directive — rendered without callbacks (href navigation only) it works
169
+ * from a React Server Component; the menu and rename affordances need
170
+ * callbacks, so they belong to client hosts by nature.
171
+ *
172
+ * Forwards a ref to the root `<div>` and spreads unrecognised props onto it.
173
+ */
174
+ export declare const ThreadPanel: React.ForwardRefExoticComponent<ThreadPanelProps & React.RefAttributes<HTMLDivElement>>;
175
+ export {};
@@ -0,0 +1,466 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { Avatar } from "../Avatar/Avatar.js";
4
+ import { DropdownMenu } from "../DropdownMenu/DropdownMenu.js";
5
+ import { Kbd } from "../Kbd/Kbd.js";
6
+ import "./ThreadPanel.css";
7
+ import "../../fonts/material-symbols.css";
8
+ const baseClass = "ds-thread-panel";
9
+ function ActionRow({
10
+ className,
11
+ href,
12
+ onClick,
13
+ ariaCurrent,
14
+ title,
15
+ children
16
+ }) {
17
+ if (href) {
18
+ return /* @__PURE__ */ jsx(
19
+ "a",
20
+ {
21
+ className,
22
+ href,
23
+ onClick,
24
+ "aria-current": ariaCurrent === "true" ? "page" : ariaCurrent,
25
+ title,
26
+ children
27
+ }
28
+ );
29
+ }
30
+ return /* @__PURE__ */ jsx(
31
+ "button",
32
+ {
33
+ type: "button",
34
+ className,
35
+ onClick,
36
+ "aria-current": ariaCurrent,
37
+ title,
38
+ children
39
+ }
40
+ );
41
+ }
42
+ function RenameField({
43
+ baseClass: baseClass2,
44
+ defaultValue,
45
+ label,
46
+ onSubmit,
47
+ onCancel
48
+ }) {
49
+ const commit = (el) => {
50
+ const value = el.value.trim();
51
+ if (value && value !== defaultValue) onSubmit(value);
52
+ else onCancel?.();
53
+ };
54
+ const refocusRow = (el) => {
55
+ const row = el.closest("li");
56
+ const tryFocus = (attempt) => {
57
+ const target = row?.querySelector("button, a");
58
+ if (target) target.focus();
59
+ else if (attempt < 3) requestAnimationFrame(() => tryFocus(attempt + 1));
60
+ };
61
+ requestAnimationFrame(() => tryFocus(0));
62
+ };
63
+ return /* @__PURE__ */ jsx(
64
+ "input",
65
+ {
66
+ className: `${baseClass2}__rename`,
67
+ type: "text",
68
+ defaultValue,
69
+ "aria-label": label,
70
+ ref: (el) => {
71
+ if (el && document.activeElement !== el) {
72
+ el.focus();
73
+ el.select();
74
+ }
75
+ },
76
+ onKeyDown: (e) => {
77
+ if (e.key === "Enter") {
78
+ e.preventDefault();
79
+ e.stopPropagation();
80
+ refocusRow(e.currentTarget);
81
+ commit(e.currentTarget);
82
+ } else if (e.key === "Escape") {
83
+ e.stopPropagation();
84
+ refocusRow(e.currentTarget);
85
+ onCancel?.();
86
+ }
87
+ },
88
+ onBlur: (e) => commit(e.currentTarget)
89
+ }
90
+ );
91
+ }
92
+ const ThreadPanel = React.forwardRef(
93
+ ({
94
+ groups,
95
+ activeThreadId,
96
+ onThreadSelect,
97
+ threadActions,
98
+ onThreadAction,
99
+ threadMenuLabel = "Thread options",
100
+ renamingThreadId,
101
+ onThreadRename,
102
+ onRenameCancel,
103
+ renameLabel = "Rename thread",
104
+ logo,
105
+ logoText,
106
+ newThreadLabel,
107
+ newThreadIcon = "edit_square",
108
+ newThreadShortcut,
109
+ onNewThread,
110
+ newThreadHref,
111
+ controls,
112
+ onControlSelect,
113
+ projects,
114
+ projectsLabel = "Projects",
115
+ activeProjectId,
116
+ onProjectSelect,
117
+ onProjectCreate,
118
+ newProjectLabel = "New project",
119
+ moreLabel,
120
+ onShowMore,
121
+ historyLabel = "Thread history",
122
+ expanded = true,
123
+ onExpandedChange,
124
+ collapseLabel = "Collapse the panel",
125
+ expandLabel = "Expand the panel",
126
+ profile,
127
+ footerSlot,
128
+ className = "",
129
+ ...rest
130
+ }, ref) => {
131
+ const classes = [
132
+ baseClass,
133
+ expanded && `${baseClass}--expanded`,
134
+ className
135
+ ].filter(Boolean).join(" ");
136
+ const iconClass = "material-symbols-rounded";
137
+ const showHeader = Boolean(logo || logoText || onExpandedChange);
138
+ const showNew = Boolean(newThreadLabel || onNewThread || newThreadHref);
139
+ const showFooter = Boolean(footerSlot || profile);
140
+ const logoExpands = Boolean(logo && !expanded && onExpandedChange);
141
+ const toggle = onExpandedChange && /* @__PURE__ */ jsx(
142
+ "button",
143
+ {
144
+ type: "button",
145
+ className: [
146
+ `${baseClass}__toggle`,
147
+ !logo && `${baseClass}__toggle--standalone`
148
+ ].filter(Boolean).join(" "),
149
+ "aria-label": expanded ? collapseLabel : expandLabel,
150
+ "aria-expanded": expanded,
151
+ onClick: () => onExpandedChange(!expanded),
152
+ children: /* @__PURE__ */ jsx("span", { className: iconClass, "aria-hidden": "true", children: expanded ? "left_panel_close" : "left_panel_open" })
153
+ }
154
+ );
155
+ const expandOnClick = !expanded && onExpandedChange ? (e) => {
156
+ rest.onClick?.(e);
157
+ const target = e.target;
158
+ if (target.closest("button, a, [role='button']")) return;
159
+ onExpandedChange(true);
160
+ } : void 0;
161
+ return /* @__PURE__ */ jsxs(
162
+ "div",
163
+ {
164
+ ...rest,
165
+ ref,
166
+ className: classes,
167
+ onClick: expandOnClick ?? rest.onClick,
168
+ children: [
169
+ showHeader && /* @__PURE__ */ jsxs(
170
+ "div",
171
+ {
172
+ className: [
173
+ `${baseClass}__header`,
174
+ !logo && `${baseClass}__header--bare`
175
+ ].filter(Boolean).join(" "),
176
+ children: [
177
+ /* @__PURE__ */ jsxs(
178
+ "div",
179
+ {
180
+ className: `${baseClass}__header-inner`,
181
+ onClick: logoExpands ? () => onExpandedChange?.(true) : void 0,
182
+ role: logoExpands ? "button" : void 0,
183
+ tabIndex: logoExpands ? 0 : void 0,
184
+ "aria-label": logoExpands ? expandLabel : void 0,
185
+ onKeyDown: logoExpands ? (e) => {
186
+ if (e.key === "Enter" || e.key === " ") {
187
+ e.preventDefault();
188
+ onExpandedChange?.(true);
189
+ }
190
+ } : void 0,
191
+ children: [
192
+ logo && /* @__PURE__ */ jsx("span", { className: `${baseClass}__logo`, "aria-hidden": "true", children: logo }),
193
+ logoText && /* @__PURE__ */ jsx("span", { className: `${baseClass}__brand`, children: logoText })
194
+ ]
195
+ }
196
+ ),
197
+ toggle
198
+ ]
199
+ }
200
+ ),
201
+ showNew && /* @__PURE__ */ jsxs(
202
+ ActionRow,
203
+ {
204
+ className: `${baseClass}__new`,
205
+ href: newThreadHref,
206
+ onClick: onNewThread,
207
+ children: [
208
+ /* @__PURE__ */ jsx(
209
+ "span",
210
+ {
211
+ className: `${baseClass}__new-icon${typeof newThreadIcon === "string" ? ` ${iconClass}` : ""}`,
212
+ "aria-hidden": "true",
213
+ children: newThreadIcon
214
+ }
215
+ ),
216
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__new-label`, children: newThreadLabel ?? "New thread" }),
217
+ newThreadShortcut && newThreadShortcut.length > 0 && /* @__PURE__ */ jsx("span", { className: `${baseClass}__new-kbd`, "aria-hidden": "true", children: newThreadShortcut.map((key) => /* @__PURE__ */ jsx(Kbd, { size: "compact", children: key }, key)) })
218
+ ]
219
+ }
220
+ ),
221
+ controls && controls.length > 0 && /* @__PURE__ */ jsx("div", { className: `${baseClass}__controls`, children: controls.map((control) => /* @__PURE__ */ jsxs(
222
+ ActionRow,
223
+ {
224
+ className: `${baseClass}__control`,
225
+ href: control.href,
226
+ onClick: onControlSelect ? () => onControlSelect(control.id) : void 0,
227
+ children: [
228
+ /* @__PURE__ */ jsx(
229
+ "span",
230
+ {
231
+ className: `${baseClass}__control-icon${typeof control.icon === "string" ? ` ${iconClass}` : ""}`,
232
+ "aria-hidden": "true",
233
+ children: control.icon
234
+ }
235
+ ),
236
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__control-label`, children: control.label })
237
+ ]
238
+ },
239
+ control.id
240
+ )) }),
241
+ projects && projects.length > 0 && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__projects`, children: [
242
+ /* @__PURE__ */ jsxs("div", { className: `${baseClass}__projects-header`, children: [
243
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__projects-label`, children: projectsLabel }),
244
+ onProjectCreate && /* @__PURE__ */ jsx(
245
+ "button",
246
+ {
247
+ type: "button",
248
+ className: `${baseClass}__projects-add`,
249
+ "aria-label": newProjectLabel,
250
+ onClick: onProjectCreate,
251
+ children: /* @__PURE__ */ jsx("span", { className: iconClass, "aria-hidden": "true", children: "add" })
252
+ }
253
+ )
254
+ ] }),
255
+ /* @__PURE__ */ jsx("ul", { className: `${baseClass}__list`, "aria-label": projectsLabel, children: projects.map((project) => {
256
+ const active = project.id === activeProjectId;
257
+ return /* @__PURE__ */ jsx("li", { className: `${baseClass}__row`, children: /* @__PURE__ */ jsxs(
258
+ ActionRow,
259
+ {
260
+ className: [
261
+ `${baseClass}__project`,
262
+ active && `${baseClass}__project--active`
263
+ ].filter(Boolean).join(" "),
264
+ href: project.href,
265
+ onClick: onProjectSelect ? () => onProjectSelect(project.id) : void 0,
266
+ ariaCurrent: active ? project.href ? "page" : "true" : void 0,
267
+ title: project.label,
268
+ children: [
269
+ /* @__PURE__ */ jsx(
270
+ "span",
271
+ {
272
+ className: `${baseClass}__project-icon${typeof project.icon === "string" || project.icon == null ? ` ${iconClass}` : ""}`,
273
+ "aria-hidden": "true",
274
+ children: project.icon ?? "folder"
275
+ }
276
+ ),
277
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__project-label`, children: project.label }),
278
+ project.meta && /* @__PURE__ */ jsx("span", { className: `${baseClass}__meta`, children: project.meta })
279
+ ]
280
+ }
281
+ ) }, project.id);
282
+ }) })
283
+ ] }),
284
+ /* @__PURE__ */ jsxs("nav", { className: `${baseClass}__history`, "aria-label": historyLabel, children: [
285
+ groups.map(
286
+ (group, index) => group.threads.length > 0 && /* @__PURE__ */ jsxs(
287
+ "div",
288
+ {
289
+ className: `${baseClass}__group`,
290
+ children: [
291
+ group.label && /* @__PURE__ */ jsx("span", { className: `${baseClass}__group-label`, children: group.label }),
292
+ /* @__PURE__ */ jsx(
293
+ "ul",
294
+ {
295
+ className: `${baseClass}__list`,
296
+ "aria-label": group.label,
297
+ children: group.threads.map((thread) => {
298
+ const active = thread.id === activeThreadId;
299
+ const actions = thread.actions ?? threadActions;
300
+ const showMenu = Boolean(
301
+ actions && actions.length > 0 && onThreadAction && !thread.pending
302
+ );
303
+ const renaming = Boolean(
304
+ thread.id === renamingThreadId && onThreadRename
305
+ );
306
+ return /* @__PURE__ */ jsx(
307
+ "li",
308
+ {
309
+ className: [
310
+ `${baseClass}__row`,
311
+ showMenu && `${baseClass}__row--with-menu`
312
+ ].filter(Boolean).join(" "),
313
+ children: renaming ? /* @__PURE__ */ jsx(
314
+ RenameField,
315
+ {
316
+ baseClass,
317
+ defaultValue: thread.title,
318
+ label: renameLabel,
319
+ onSubmit: (value) => onThreadRename?.(thread.id, value),
320
+ onCancel: onRenameCancel
321
+ }
322
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
323
+ /* @__PURE__ */ jsxs(
324
+ ActionRow,
325
+ {
326
+ className: [
327
+ `${baseClass}__thread`,
328
+ active && `${baseClass}__thread--active`,
329
+ thread.description && !thread.pending && `${baseClass}__thread--detailed`,
330
+ thread.unread && `${baseClass}__thread--unread`
331
+ ].filter(Boolean).join(" "),
332
+ href: thread.href,
333
+ onClick: onThreadSelect ? () => onThreadSelect(thread.id) : void 0,
334
+ ariaCurrent: active ? thread.href ? "page" : "true" : void 0,
335
+ title: thread.title,
336
+ children: [
337
+ thread.unread && !thread.pending && /* @__PURE__ */ jsx(
338
+ "span",
339
+ {
340
+ className: `${baseClass}__unread`,
341
+ "aria-hidden": "true"
342
+ }
343
+ ),
344
+ thread.pending ? (
345
+ /* The naming state: the shimmer holds the
346
+ title's place; the row's accessible name
347
+ comes from its tooltip. */
348
+ /* @__PURE__ */ jsx(
349
+ "span",
350
+ {
351
+ className: `${baseClass}__title ${baseClass}__title--pending`,
352
+ children: /* @__PURE__ */ jsx(
353
+ "span",
354
+ {
355
+ className: `${baseClass}__title-shimmer`,
356
+ "aria-hidden": "true"
357
+ }
358
+ )
359
+ }
360
+ )
361
+ ) : /* @__PURE__ */ jsx("span", { className: `${baseClass}__title`, children: thread.title }),
362
+ !thread.pending && (thread.icon || thread.pinned || thread.meta) && /* @__PURE__ */ jsxs("span", { className: `${baseClass}__trail`, children: [
363
+ thread.icon && /* @__PURE__ */ jsx(
364
+ "span",
365
+ {
366
+ className: `${baseClass}__thread-icon${typeof thread.icon === "string" ? ` ${iconClass}` : ""}`,
367
+ "aria-hidden": "true",
368
+ children: thread.icon
369
+ }
370
+ ),
371
+ thread.pinned && /* @__PURE__ */ jsx(
372
+ "span",
373
+ {
374
+ className: `${baseClass}__pin ${iconClass}`,
375
+ "aria-hidden": "true",
376
+ children: "keep"
377
+ }
378
+ ),
379
+ thread.meta && /* @__PURE__ */ jsx("span", { className: `${baseClass}__meta`, children: thread.meta })
380
+ ] }),
381
+ thread.description && !thread.pending && /* @__PURE__ */ jsx(
382
+ "span",
383
+ {
384
+ className: `${baseClass}__description`,
385
+ children: thread.description
386
+ }
387
+ )
388
+ ]
389
+ }
390
+ ),
391
+ showMenu && actions && /* @__PURE__ */ jsx(
392
+ DropdownMenu,
393
+ {
394
+ className: `${baseClass}__menu`,
395
+ align: "end",
396
+ size: "compact",
397
+ items: actions.map((action) => ({
398
+ label: action.label,
399
+ icon: action.icon,
400
+ destructive: action.destructive,
401
+ onClick: () => onThreadAction?.(thread.id, action.id)
402
+ })),
403
+ trigger: /* @__PURE__ */ jsx(
404
+ "button",
405
+ {
406
+ type: "button",
407
+ className: `${baseClass}__menu-trigger`,
408
+ "aria-label": `${threadMenuLabel}: ${thread.title}`,
409
+ children: /* @__PURE__ */ jsx(
410
+ "span",
411
+ {
412
+ className: iconClass,
413
+ "aria-hidden": "true",
414
+ children: "more_horiz"
415
+ }
416
+ )
417
+ }
418
+ )
419
+ }
420
+ )
421
+ ] })
422
+ },
423
+ thread.id
424
+ );
425
+ })
426
+ }
427
+ )
428
+ ]
429
+ },
430
+ group.label ?? index
431
+ )
432
+ ),
433
+ moreLabel && /* @__PURE__ */ jsx(
434
+ "button",
435
+ {
436
+ type: "button",
437
+ className: `${baseClass}__more`,
438
+ onClick: onShowMore,
439
+ children: moreLabel
440
+ }
441
+ )
442
+ ] }),
443
+ showFooter && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__footer`, children: [
444
+ footerSlot && /* @__PURE__ */ jsx("div", { className: `${baseClass}__footer-slot`, children: footerSlot }),
445
+ profile && /* @__PURE__ */ jsxs(
446
+ "div",
447
+ {
448
+ className: `${baseClass}__profile`,
449
+ title: expanded ? void 0 : profile.name,
450
+ children: [
451
+ profile.avatar ?? /* @__PURE__ */ jsx(Avatar, { name: profile.name, size: "sm" }),
452
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__profile-name`, children: profile.name }),
453
+ profile.meta && /* @__PURE__ */ jsx("span", { className: `${baseClass}__profile-meta`, children: profile.meta })
454
+ ]
455
+ }
456
+ )
457
+ ] })
458
+ ]
459
+ }
460
+ );
461
+ }
462
+ );
463
+ ThreadPanel.displayName = "ThreadPanel";
464
+ export {
465
+ ThreadPanel
466
+ };