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,252 @@
1
+ /* ============================================
2
+ THREAD TABS COMPONENT
3
+ The strip of open chat sessions across a conversation's top edge: pill
4
+ tabs with a leading glyph, an unread dot, a hover-revealed close button,
5
+ and a trailing new-tab action. Deliberately surface-less — the host
6
+ paints the band it sits on.
7
+
8
+ Enter/exit is the grid-track idiom (Accordion's height trick turned
9
+ sideways): each item is a one-column grid whose track animates between
10
+ 0fr and 1fr, so a new tab glides open in place and a closed one folds
11
+ away while its neighbours slide over — no measurement, no FLIP. The
12
+ entrance rides the entrance ease at the slow beat; the exit is quicker
13
+ (the base beat), since a dismissal should feel lighter than an arrival.
14
+ ============================================ */
15
+
16
+ .ds-thread-tabs {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: var(--gap-100);
20
+ min-width: 0;
21
+ }
22
+
23
+ /* ============================================
24
+ LIST — the scrolling run of tabs
25
+ ============================================ */
26
+
27
+ .ds-thread-tabs__list {
28
+ margin: 0;
29
+ padding: 0;
30
+ list-style: none;
31
+ display: flex;
32
+ align-items: center;
33
+ min-width: 0;
34
+ /* A crowded strip scrolls sideways; the strip is its own scroll
35
+ affordance, so no bar. */
36
+ overflow-x: auto;
37
+ scrollbar-width: none;
38
+ }
39
+
40
+ /* ============================================
41
+ ITEMS — the animated columns
42
+ The inter-tab gap lives on the items (not the list) so an entering or
43
+ leaving tab can fold its own gap in and out with its column.
44
+ ============================================ */
45
+
46
+ .ds-thread-tabs__item {
47
+ display: grid;
48
+ grid-template-columns: 1fr;
49
+ flex: none;
50
+ min-width: 0;
51
+ }
52
+
53
+ .ds-thread-tabs__item + .ds-thread-tabs__item {
54
+ margin-inline-start: var(--gap-100);
55
+ }
56
+
57
+ .ds-thread-tabs__item--entering {
58
+ animation: ds-thread-tabs-in var(--motion-duration-slow)
59
+ var(--motion-ease-entrance);
60
+ }
61
+
62
+ .ds-thread-tabs__item--leaving {
63
+ pointer-events: none;
64
+ animation: ds-thread-tabs-out var(--motion-duration-base)
65
+ var(--motion-ease-emphasized) forwards;
66
+ }
67
+
68
+ @keyframes ds-thread-tabs-in {
69
+ from {
70
+ grid-template-columns: 0fr;
71
+ margin-inline-start: 0;
72
+ opacity: 0;
73
+ }
74
+ }
75
+
76
+ @keyframes ds-thread-tabs-out {
77
+ to {
78
+ grid-template-columns: 0fr;
79
+ margin-inline-start: 0;
80
+ opacity: 0;
81
+ }
82
+ }
83
+
84
+ /* The track's window: the pill inside keeps its natural width and is
85
+ revealed or wiped by the collapsing column. */
86
+ .ds-thread-tabs__cell {
87
+ min-width: 0;
88
+ overflow: hidden;
89
+ }
90
+
91
+ /* ============================================
92
+ TAB — the pill
93
+ 32px pills on the buttons' radius; the active tab wears ThreadPanel's
94
+ active-row fill, so the strip and the rail mark "on stage" the same way.
95
+ ============================================ */
96
+
97
+ .ds-thread-tabs__tab {
98
+ display: flex;
99
+ align-items: center;
100
+ height: 32px;
101
+ min-width: 0;
102
+ /* Keep a long session title from eating the strip; the label masks out
103
+ and stays readable in the tab's tooltip (ThreadPanel's manner). */
104
+ max-width: 220px;
105
+ border-radius: var(--radius-pill);
106
+ transition: background-color var(--motion-duration-fast)
107
+ var(--motion-ease-standard);
108
+ }
109
+
110
+ .ds-thread-tabs__tab:hover {
111
+ background-color: var(--color-action-passive-bg-hover);
112
+ }
113
+
114
+ .ds-thread-tabs__tab--active {
115
+ background-color: var(--color-bg-container-tertiary);
116
+ }
117
+
118
+ .ds-thread-tabs__trigger {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: var(--gap-100);
122
+ min-width: 0;
123
+ height: 100%;
124
+ padding: 0 var(--padding-300);
125
+ border: none;
126
+ border-radius: var(--radius-pill);
127
+ background: transparent;
128
+ cursor: pointer;
129
+ text-align: left;
130
+ color: var(--color-text-secondary);
131
+ transition: color var(--motion-duration-fast) var(--motion-ease-standard);
132
+ }
133
+
134
+ /* With a close button beside it, the trigger cedes its trailing inset to
135
+ the button's own margin so the pill's right edge stays balanced. */
136
+ .ds-thread-tabs__tab--closable .ds-thread-tabs__trigger {
137
+ padding-inline-end: var(--padding-100);
138
+ }
139
+
140
+ .ds-thread-tabs__tab--active .ds-thread-tabs__trigger {
141
+ color: var(--color-text-primary);
142
+ }
143
+
144
+ .ds-thread-tabs__trigger:focus-visible,
145
+ .ds-thread-tabs__close:focus-visible,
146
+ .ds-thread-tabs__add:focus-visible {
147
+ outline: 2px solid var(--color-action-primary-bg);
148
+ outline-offset: -2px;
149
+ }
150
+
151
+ /* The unread dot: a small status disc leading the label. Sized on the gap
152
+ scale — there is no icon token this small (ThreadPanel's dot restated). */
153
+ .ds-thread-tabs__unread {
154
+ flex: none;
155
+ width: var(--gap-200);
156
+ height: var(--gap-200);
157
+ border-radius: var(--radius-pill);
158
+ background-color: var(--color-status-info-icon);
159
+ }
160
+
161
+ .ds-thread-tabs__icon {
162
+ --icon-size: var(--icon-size-500);
163
+ flex: none;
164
+ color: var(--color-icon-secondary);
165
+ }
166
+
167
+ .ds-thread-tabs__label {
168
+ min-width: 0;
169
+ overflow: hidden;
170
+ white-space: nowrap;
171
+ font-family: var(--font-paragraph-sm-family);
172
+ font-size: var(--font-paragraph-sm-size);
173
+ font-weight: var(--font-paragraph-sm-weight);
174
+ line-height: var(--font-paragraph-sm-line-height);
175
+ /* A long label dissolves at the trailing edge instead of clipping to an
176
+ ellipsis; the full text stays in the tab's tooltip.
177
+ ds-allow(color): mask alpha keywords (black/transparent), not palette colours */
178
+ -webkit-mask-image: linear-gradient(
179
+ to right,
180
+ black calc(100% - var(--gap-400)),
181
+ transparent
182
+ );
183
+ mask-image: linear-gradient(
184
+ to right,
185
+ black calc(100% - var(--gap-400)),
186
+ transparent
187
+ );
188
+ }
189
+
190
+ /* ============================================
191
+ CLOSE — hover-revealed, geometry-stable
192
+ The button always holds its seat (states never move the label); it fades
193
+ in on hover or keyboard focus, and stands revealed on the active tab.
194
+ ============================================ */
195
+
196
+ .ds-thread-tabs__close {
197
+ --icon-size: var(--icon-size-500);
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ width: 24px;
202
+ height: 24px;
203
+ flex: none;
204
+ margin-inline-end: var(--padding-100);
205
+ padding: 0;
206
+ border: none;
207
+ border-radius: var(--radius-pill);
208
+ background: transparent;
209
+ color: var(--color-icon-primary);
210
+ cursor: pointer;
211
+ opacity: 0;
212
+ pointer-events: none;
213
+ transition: opacity var(--motion-duration-fast) var(--motion-ease-standard),
214
+ background-color var(--motion-duration-fast) var(--motion-ease-standard);
215
+ }
216
+
217
+ .ds-thread-tabs__tab:hover .ds-thread-tabs__close,
218
+ .ds-thread-tabs__tab:focus-within .ds-thread-tabs__close,
219
+ .ds-thread-tabs__tab--active .ds-thread-tabs__close {
220
+ opacity: 1;
221
+ pointer-events: auto;
222
+ }
223
+
224
+ .ds-thread-tabs__close:hover {
225
+ background-color: var(--color-bg-container-secondary);
226
+ }
227
+
228
+ /* ============================================
229
+ ADD — the trailing new-tab action
230
+ ============================================ */
231
+
232
+ .ds-thread-tabs__add {
233
+ --icon-size: var(--icon-size-500);
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ width: 28px;
238
+ height: 28px;
239
+ flex: none;
240
+ padding: 0;
241
+ border: none;
242
+ border-radius: var(--radius-pill);
243
+ background: transparent;
244
+ color: var(--color-icon-primary);
245
+ cursor: pointer;
246
+ transition: background-color var(--motion-duration-fast)
247
+ var(--motion-ease-standard);
248
+ }
249
+
250
+ .ds-thread-tabs__add:hover {
251
+ background-color: var(--color-action-passive-bg-hover);
252
+ }
@@ -0,0 +1,54 @@
1
+ import { default as React } from 'react';
2
+ export interface ThreadTab {
3
+ /** Stable identifier: `activeId` matches against it and the callbacks report it. */
4
+ id: string;
5
+ /** The tab's one-line label. Overflow fades out under a trailing mask rather than clipping; the full text stays readable in the tab's native tooltip. */
6
+ label: string;
7
+ /** The tab's leading icon — Material Symbol name (string) or custom element (ReactNode). */
8
+ icon?: string | React.ReactNode;
9
+ /** The thread holds unseen activity: a small status dot leads the label. The dot is decorative — keep the state readable elsewhere when it must be announced. */
10
+ unread?: boolean;
11
+ }
12
+ /** Props owned by ThreadTabs itself — everything else falls through to the root `<div>`. */
13
+ type ThreadTabsOwnProps = {
14
+ /** The open tabs, in display order. A tab added between renders glides open in place; a removed one folds away while its neighbours slide over. */
15
+ tabs: ThreadTab[];
16
+ /** Id of the tab on stage. Its pill renders filled and carries `aria-current`. */
17
+ activeId?: string;
18
+ /** Fires with the clicked tab's id. */
19
+ onTabSelect?: (id: string) => void;
20
+ /** Fires with the tab's id when its close button is pressed, or Delete lands on the focused tab. The close affordance renders only when this is given. */
21
+ onTabClose?: (id: string) => void;
22
+ /** Accessible name for a tab's close button; the tab's label is appended after it. */
23
+ closeLabel?: string;
24
+ /** Fires when the trailing new-tab button is pressed. The button renders only when this is given. */
25
+ onAdd?: () => void;
26
+ /** Accessible name for the new-tab button. */
27
+ addLabel?: string;
28
+ /** Accessible name for the tab strip. */
29
+ ariaLabel?: string;
30
+ /** Additional CSS classes */
31
+ className?: string;
32
+ };
33
+ export interface ThreadTabsProps extends ThreadTabsOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof ThreadTabsOwnProps> {
34
+ }
35
+ /**
36
+ * ThreadTabs is the strip of open chat sessions across a conversation's top
37
+ * edge: pill tabs with a leading glyph, an unread dot, a hover-revealed
38
+ * close button, and a trailing new-tab action. Fully controlled — the host
39
+ * owns which tabs exist and which is active; the strip owns the
40
+ * choreography of a tab arriving and leaving. A removed tab is kept on
41
+ * stage just long enough to fold away (its neighbours slide over as its
42
+ * column collapses), and a new one glides open in place — no measurement,
43
+ * just the grid-track idiom turned sideways.
44
+ *
45
+ * Tabs are a labelled list of buttons, not an ARIA tablist: like
46
+ * ThreadPanel's rows they select sessions rather than switch local panels,
47
+ * and the active tab announces itself with `aria-current`. Arrow keys,
48
+ * Home and End move focus along the strip; Delete closes the focused tab
49
+ * when the host wires `onTabClose`.
50
+ *
51
+ * Forwards a ref to the root `<div>` and spreads unrecognised props onto it.
52
+ */
53
+ export declare const ThreadTabs: React.ForwardRefExoticComponent<ThreadTabsProps & React.RefAttributes<HTMLDivElement>>;
54
+ export {};
@@ -0,0 +1,201 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import React from "react";
4
+ import "./ThreadTabs.css";
5
+ import "../../fonts/material-symbols.css";
6
+ const baseClass = "ds-thread-tabs";
7
+ const ThreadTabs = React.forwardRef(
8
+ ({
9
+ tabs,
10
+ activeId,
11
+ onTabSelect,
12
+ onTabClose,
13
+ closeLabel = "Close thread",
14
+ onAdd,
15
+ addLabel = "New thread",
16
+ ariaLabel = "Open threads",
17
+ className = "",
18
+ ...rest
19
+ }, ref) => {
20
+ const iconClass = "material-symbols-rounded";
21
+ const listRef = React.useRef(null);
22
+ const enteredRef = React.useRef(
23
+ new Set(tabs.map((tab) => tab.id))
24
+ );
25
+ const [prevTabs, setPrevTabs] = React.useState(tabs);
26
+ const [leaving, setLeaving] = React.useState([]);
27
+ if (prevTabs !== tabs) {
28
+ setPrevTabs(tabs);
29
+ const nextIds = new Set(tabs.map((tab) => tab.id));
30
+ const removed = prevTabs.filter((tab) => !nextIds.has(tab.id));
31
+ setLeaving((current) => {
32
+ const kept = current.filter((l) => !nextIds.has(l.tab.id));
33
+ const added = removed.map((tab) => {
34
+ const index = prevTabs.findIndex((p) => p.id === tab.id);
35
+ return {
36
+ tab,
37
+ afterId: index > 0 ? prevTabs[index - 1].id : null
38
+ };
39
+ });
40
+ return added.length > 0 || kept.length !== current.length ? [...kept, ...added] : current;
41
+ });
42
+ }
43
+ const entries = React.useMemo(() => {
44
+ const list = tabs.map((tab) => ({ tab, leaving: false }));
45
+ for (const l of leaving) {
46
+ const index = l.afterId == null ? 0 : list.findIndex((entry) => entry.tab.id === l.afterId) + 1;
47
+ list.splice(index < 0 ? list.length : index, 0, {
48
+ tab: l.tab,
49
+ leaving: true
50
+ });
51
+ }
52
+ return list;
53
+ }, [tabs, leaving]);
54
+ const liveTriggers = () => Array.from(
55
+ listRef.current?.querySelectorAll(
56
+ `.${baseClass}__item:not(.${baseClass}__item--leaving) .${baseClass}__trigger`
57
+ ) ?? []
58
+ );
59
+ const moveFocus = (from, key) => {
60
+ const triggers = liveTriggers();
61
+ const index = triggers.indexOf(from);
62
+ if (index < 0 || triggers.length === 0) return;
63
+ let target;
64
+ if (key === "ArrowRight") {
65
+ target = triggers[(index + 1) % triggers.length];
66
+ } else if (key === "ArrowLeft") {
67
+ target = triggers[(index - 1 + triggers.length) % triggers.length];
68
+ } else if (key === "Home") {
69
+ target = triggers[0];
70
+ } else if (key === "End") {
71
+ target = triggers[triggers.length - 1];
72
+ }
73
+ target?.focus();
74
+ };
75
+ const closeTab = (id, from) => {
76
+ const item = from.closest(`.${baseClass}__item`);
77
+ if (item && item.contains(document.activeElement)) {
78
+ const items = Array.from(
79
+ listRef.current?.querySelectorAll(
80
+ `.${baseClass}__item:not(.${baseClass}__item--leaving)`
81
+ ) ?? []
82
+ );
83
+ const index = items.indexOf(item);
84
+ const neighbour = items[index + 1] ?? items[index - 1];
85
+ neighbour?.querySelector(`.${baseClass}__trigger`)?.focus();
86
+ }
87
+ onTabClose?.(id);
88
+ };
89
+ const classes = [baseClass, className].filter(Boolean).join(" ");
90
+ return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
91
+ /* @__PURE__ */ jsx("ul", { className: `${baseClass}__list`, "aria-label": ariaLabel, ref: listRef, children: entries.map(({ tab, leaving: isLeaving }) => {
92
+ const active = !isLeaving && tab.id === activeId;
93
+ const entering = !isLeaving && !enteredRef.current.has(tab.id);
94
+ return /* @__PURE__ */ jsx(
95
+ "li",
96
+ {
97
+ className: [
98
+ `${baseClass}__item`,
99
+ entering && `${baseClass}__item--entering`,
100
+ isLeaving && `${baseClass}__item--leaving`
101
+ ].filter(Boolean).join(" "),
102
+ onAnimationEnd: (e) => {
103
+ if (e.target !== e.currentTarget) return;
104
+ if (e.animationName === "ds-thread-tabs-in") {
105
+ enteredRef.current.add(tab.id);
106
+ } else if (e.animationName === "ds-thread-tabs-out") {
107
+ enteredRef.current.delete(tab.id);
108
+ setLeaving(
109
+ (current) => current.filter((l) => l.tab.id !== tab.id)
110
+ );
111
+ }
112
+ },
113
+ children: /* @__PURE__ */ jsx("div", { className: `${baseClass}__cell`, children: /* @__PURE__ */ jsxs(
114
+ "div",
115
+ {
116
+ className: [
117
+ `${baseClass}__tab`,
118
+ active && `${baseClass}__tab--active`,
119
+ onTabClose && `${baseClass}__tab--closable`
120
+ ].filter(Boolean).join(" "),
121
+ children: [
122
+ /* @__PURE__ */ jsxs(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ className: `${baseClass}__trigger`,
127
+ title: tab.label,
128
+ "aria-current": active ? "true" : void 0,
129
+ tabIndex: isLeaving ? -1 : 0,
130
+ onClick: onTabSelect && !isLeaving ? () => onTabSelect(tab.id) : void 0,
131
+ onKeyDown: (e) => {
132
+ if (e.key === "ArrowRight" || e.key === "ArrowLeft" || e.key === "Home" || e.key === "End") {
133
+ e.preventDefault();
134
+ moveFocus(e.currentTarget, e.key);
135
+ } else if (e.key === "Delete" && onTabClose) {
136
+ e.preventDefault();
137
+ closeTab(tab.id, e.currentTarget);
138
+ }
139
+ },
140
+ children: [
141
+ tab.unread && /* @__PURE__ */ jsx(
142
+ "span",
143
+ {
144
+ className: `${baseClass}__unread`,
145
+ "aria-hidden": "true"
146
+ }
147
+ ),
148
+ tab.icon && (typeof tab.icon === "string" ? /* @__PURE__ */ jsx(
149
+ "span",
150
+ {
151
+ className: `${baseClass}__icon ${iconClass}`,
152
+ "aria-hidden": "true",
153
+ children: tab.icon
154
+ }
155
+ ) : /* @__PURE__ */ jsx(
156
+ "span",
157
+ {
158
+ className: `${baseClass}__icon`,
159
+ "aria-hidden": "true",
160
+ children: tab.icon
161
+ }
162
+ )),
163
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__label`, children: tab.label })
164
+ ]
165
+ }
166
+ ),
167
+ onTabClose && /* @__PURE__ */ jsx(
168
+ "button",
169
+ {
170
+ type: "button",
171
+ className: `${baseClass}__close`,
172
+ "aria-label": `${closeLabel}: ${tab.label}`,
173
+ tabIndex: isLeaving ? -1 : 0,
174
+ onClick: (e) => closeTab(tab.id, e.currentTarget),
175
+ children: /* @__PURE__ */ jsx("span", { className: iconClass, "aria-hidden": "true", children: "close" })
176
+ }
177
+ )
178
+ ]
179
+ }
180
+ ) })
181
+ },
182
+ tab.id
183
+ );
184
+ }) }),
185
+ onAdd && /* @__PURE__ */ jsx(
186
+ "button",
187
+ {
188
+ type: "button",
189
+ className: `${baseClass}__add`,
190
+ "aria-label": addLabel,
191
+ onClick: onAdd,
192
+ children: /* @__PURE__ */ jsx("span", { className: iconClass, "aria-hidden": "true", children: "add" })
193
+ }
194
+ )
195
+ ] });
196
+ }
197
+ );
198
+ ThreadTabs.displayName = "ThreadTabs";
199
+ export {
200
+ ThreadTabs
201
+ };