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,326 @@
1
+ /* ============================================
2
+ GANTT CHART COMPONENT
3
+ Phases and tasks as bars on a shared
4
+ timeline, with milestones and a today rule
5
+ ============================================ */
6
+
7
+ /* Card chrome, header, and padding come from the shared chart styles
8
+ (Chart.css); this file owns the axis, rows, bars, and markers. */
9
+
10
+ .ds-gantt {
11
+ /* Structural sizes, component-scoped: the sticky label rail, the smallest
12
+ timeline worth drawing before the scroll takes over, and the row rhythm. */
13
+ --ds-gantt-label-width: 172px;
14
+ --ds-gantt-track-min: 480px;
15
+ --ds-gantt-row-height: 36px;
16
+ --ds-gantt-bar-height: 20px;
17
+
18
+ min-width: 0;
19
+ }
20
+
21
+ .ds-gantt__body {
22
+ min-width: 0;
23
+ }
24
+
25
+ /* The whole drawing scrolls sideways in its own container on narrow
26
+ screens; the label column stays pinned inside it. */
27
+ .ds-gantt__scroll {
28
+ overflow-x: auto;
29
+ padding-bottom: var(--padding-050);
30
+ }
31
+
32
+ .ds-gantt__canvas {
33
+ min-width: calc(var(--ds-gantt-label-width) + var(--ds-gantt-track-min));
34
+ }
35
+
36
+ /* ============================================
37
+ AXIS — month labels
38
+ ============================================ */
39
+
40
+ .ds-gantt__axis {
41
+ display: flex;
42
+ align-items: flex-end;
43
+ height: var(--ds-gantt-row-height);
44
+ }
45
+
46
+ .ds-gantt__corner {
47
+ flex: 0 0 var(--ds-gantt-label-width);
48
+ position: sticky;
49
+ left: 0;
50
+ z-index: 2;
51
+ height: 100%;
52
+ background-color: var(--color-bg-container-primary);
53
+ }
54
+
55
+ .ds-gantt__months {
56
+ flex: 1 0 var(--ds-gantt-track-min);
57
+ position: relative;
58
+ min-width: 0;
59
+ height: 100%;
60
+ }
61
+
62
+ .ds-gantt__month-label {
63
+ position: absolute;
64
+ bottom: var(--padding-100);
65
+ padding-left: var(--padding-100);
66
+ font-family: var(--font-paragraph-sm-family);
67
+ font-size: var(--font-paragraph-sm-size);
68
+ font-weight: var(--font-paragraph-sm-weight);
69
+ line-height: var(--font-paragraph-sm-line-height);
70
+ color: var(--color-text-tertiary);
71
+ white-space: nowrap;
72
+ }
73
+
74
+ /* ============================================
75
+ ROWS
76
+ ============================================ */
77
+
78
+ .ds-gantt__rows {
79
+ position: relative;
80
+ }
81
+
82
+ .ds-gantt__list {
83
+ margin: 0;
84
+ padding: 0;
85
+ list-style: none;
86
+ }
87
+
88
+ .ds-gantt__row,
89
+ .ds-gantt__group-row {
90
+ display: flex;
91
+ align-items: center;
92
+ height: var(--ds-gantt-row-height);
93
+ border-top: var(--border-025) solid var(--color-divider);
94
+ }
95
+
96
+ .ds-gantt__label,
97
+ .ds-gantt__group-label {
98
+ flex: 0 0 var(--ds-gantt-label-width);
99
+ position: sticky;
100
+ left: 0;
101
+ z-index: 2;
102
+ align-self: stretch;
103
+ display: flex;
104
+ align-items: center;
105
+ padding-right: var(--padding-200);
106
+ background-color: var(--color-bg-container-primary);
107
+ border-right: var(--border-025) solid var(--color-divider);
108
+ min-width: 0;
109
+ }
110
+
111
+ .ds-gantt__label {
112
+ font-family: var(--font-paragraph-sm-family);
113
+ font-size: var(--font-paragraph-sm-size);
114
+ font-weight: var(--font-paragraph-sm-weight);
115
+ line-height: var(--font-paragraph-sm-line-height);
116
+ color: var(--color-text-secondary);
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ white-space: nowrap;
120
+ display: block;
121
+ align-content: center;
122
+ }
123
+
124
+ .ds-gantt__group-label {
125
+ font-family: var(--font-overline-family);
126
+ font-size: var(--font-overline-size);
127
+ font-weight: var(--font-overline-weight);
128
+ line-height: var(--font-overline-line-height);
129
+ letter-spacing: var(--font-overline-letter-spacing);
130
+ text-transform: uppercase;
131
+ color: var(--color-text-primary);
132
+ overflow: hidden;
133
+ text-overflow: ellipsis;
134
+ white-space: nowrap;
135
+ display: block;
136
+ align-content: center;
137
+ }
138
+
139
+ .ds-gantt__track {
140
+ flex: 1 0 var(--ds-gantt-track-min);
141
+ position: relative;
142
+ min-width: 0;
143
+ height: 100%;
144
+ }
145
+
146
+ /* ============================================
147
+ OVERLAY — gridlines + today rule
148
+ Drawn once behind every row, offset past the
149
+ label rail so its percentages match the bars
150
+ ============================================ */
151
+
152
+ .ds-gantt__overlay {
153
+ position: absolute;
154
+ inset: 0 0 0 var(--ds-gantt-label-width);
155
+ pointer-events: none;
156
+ }
157
+
158
+ .ds-gantt__gridline {
159
+ position: absolute;
160
+ top: 0;
161
+ bottom: 0;
162
+ width: var(--border-025);
163
+ background-color: var(--color-divider);
164
+ }
165
+
166
+ /* Today is current, not selected: the inverse role, like EventCalendar's
167
+ today chip. Teal stays reserved for the selected bar. */
168
+ .ds-gantt__today {
169
+ position: absolute;
170
+ top: 0;
171
+ bottom: 0;
172
+ width: 2px;
173
+ background-color: var(--color-bg-page-inverse);
174
+ z-index: 1;
175
+ }
176
+
177
+ /* The rule's flag: an inverse chip, like EventCalendar's today chip. It
178
+ sits in the axis row and covers whatever month label falls behind it. */
179
+ .ds-gantt__today-label {
180
+ position: absolute;
181
+ bottom: calc(100% + var(--padding-050));
182
+ left: 50%;
183
+ transform: translateX(-50%);
184
+ padding: 0 var(--padding-150);
185
+ border-radius: var(--radius-pill);
186
+ background-color: var(--color-bg-page-inverse);
187
+ font-family: var(--font-paragraph-sm-emphasis-family);
188
+ font-size: var(--font-paragraph-sm-emphasis-size);
189
+ font-weight: var(--font-paragraph-sm-emphasis-weight);
190
+ line-height: var(--font-paragraph-sm-emphasis-line-height);
191
+ color: var(--color-text-on-inverse);
192
+ white-space: nowrap;
193
+ }
194
+
195
+ /* ============================================
196
+ BARS
197
+ ============================================ */
198
+
199
+ .ds-gantt__bar {
200
+ --ds-gantt-accent: var(--color-status-neutral-border);
201
+
202
+ position: absolute;
203
+ top: 50%;
204
+ transform: translateY(-50%);
205
+ height: var(--ds-gantt-bar-height);
206
+ border: none;
207
+ border-radius: var(--radius-pill);
208
+ background-color: var(--ds-gantt-accent);
209
+ padding: 0;
210
+ overflow: hidden;
211
+ z-index: 1;
212
+ }
213
+
214
+ /* With a progress reading, the bar becomes a quiet track and the accent
215
+ fills the completed share — the ProgressBar recipe on a timeline. */
216
+ .ds-gantt__bar--tracked {
217
+ background-color: var(--color-bg-container-tertiary);
218
+ }
219
+
220
+ .ds-gantt__bar-fill {
221
+ position: absolute;
222
+ top: 0;
223
+ bottom: 0;
224
+ left: 0;
225
+ border-radius: var(--radius-pill);
226
+ background-color: var(--ds-gantt-accent);
227
+ transition: width var(--motion-duration-slow) var(--motion-ease-emphasized);
228
+ }
229
+
230
+ /* Projected work is a target, not a commitment: outline only. */
231
+ .ds-gantt__bar--projected {
232
+ background-color: transparent;
233
+ border: var(--border-025) dashed var(--ds-gantt-accent);
234
+ }
235
+
236
+ button.ds-gantt__bar {
237
+ cursor: pointer;
238
+ }
239
+
240
+ button.ds-gantt__bar:focus-visible {
241
+ outline: 2px solid var(--color-action-primary-bg);
242
+ outline-offset: 2px;
243
+ }
244
+
245
+ .ds-gantt__bar--selected {
246
+ outline: 2px solid var(--color-action-primary-bg);
247
+ outline-offset: 2px;
248
+ }
249
+
250
+ /* ============================================
251
+ ACCENTS
252
+ ============================================ */
253
+
254
+ .ds-gantt__bar--coral,
255
+ .ds-gantt__milestone--coral {
256
+ --ds-gantt-accent: var(--color-core-accent-coral);
257
+ }
258
+
259
+ .ds-gantt__bar--violet,
260
+ .ds-gantt__milestone--violet {
261
+ --ds-gantt-accent: var(--color-core-accent-violet);
262
+ }
263
+
264
+ .ds-gantt__bar--cobalt,
265
+ .ds-gantt__milestone--cobalt {
266
+ --ds-gantt-accent: var(--color-core-accent-cobalt);
267
+ }
268
+
269
+ .ds-gantt__bar--amber,
270
+ .ds-gantt__milestone--amber {
271
+ --ds-gantt-accent: var(--color-core-accent-amber);
272
+ }
273
+
274
+ .ds-gantt__bar--gold,
275
+ .ds-gantt__milestone--gold {
276
+ --ds-gantt-accent: var(--color-core-accent-gold);
277
+ }
278
+
279
+ .ds-gantt__bar--mint,
280
+ .ds-gantt__milestone--mint {
281
+ --ds-gantt-accent: var(--color-core-accent-mint);
282
+ }
283
+
284
+ /* ============================================
285
+ MILESTONES
286
+ ============================================ */
287
+
288
+ /* The accent modifiers above set --ds-gantt-accent; the fallback keeps an
289
+ unaccented diamond on the neutral role without out-ranking them. */
290
+ .ds-gantt__milestone {
291
+ position: absolute;
292
+ top: 50%;
293
+ width: 12px;
294
+ height: 12px;
295
+ transform: translate(-50%, -50%) rotate(45deg);
296
+ border-radius: var(--radius-050);
297
+ background-color: var(--ds-gantt-accent, var(--color-status-neutral-border));
298
+ z-index: 1;
299
+ }
300
+
301
+ /* ============================================
302
+ ACCESSIBILITY
303
+ ============================================ */
304
+
305
+ /* Visually hidden text carrying each row's full reading for screen readers. */
306
+ .ds-gantt__sr {
307
+ position: absolute;
308
+ width: 1px;
309
+ height: 1px;
310
+ padding: 0;
311
+ margin: -1px;
312
+ overflow: hidden;
313
+ clip: rect(0, 0, 0, 0);
314
+ white-space: nowrap;
315
+ border: 0;
316
+ }
317
+
318
+ /* ============================================
319
+ RESPONSIVE
320
+ ============================================ */
321
+
322
+ @media (max-width: 768px) {
323
+ .ds-gantt {
324
+ --ds-gantt-label-width: 120px;
325
+ }
326
+ }
@@ -0,0 +1,82 @@
1
+ import { default as React } from 'react';
2
+ /** Accent roles a Gantt bar or milestone can take — the core accent vocabulary shared with EventCalendar. */
3
+ export type GanttChartColor = 'neutral' | 'coral' | 'violet' | 'cobalt' | 'amber' | 'gold' | 'mint';
4
+ /** One task bar on the timeline. */
5
+ export interface GanttChartItem {
6
+ /** Unique item identifier. Selection and the click callback key on it. */
7
+ id: string;
8
+ /** Task name, shown in the sticky label column. */
9
+ label: string;
10
+ /** First day of the bar (YYYY-MM-DD). */
11
+ start: string;
12
+ /** Last day of the bar, inclusive (YYYY-MM-DD). */
13
+ end: string;
14
+ /** Accent for the bar, from the core accent roles. Defaults to `neutral`. */
15
+ color?: GanttChartColor;
16
+ /** Completion from 0 to 100. When set, the bar shows a quiet track with the accent filling this share; without it the whole bar takes the accent. */
17
+ progress?: number;
18
+ /** Draws the bar as a dashed outline, for planned or tentative work whose dates are targets rather than commitments. */
19
+ projected?: boolean;
20
+ /** Group heading this item sits under. Items sharing a group render under one heading row; omit for a flat chart. */
21
+ group?: string;
22
+ /** Extra line appended to the bar's tooltip and accessible text, e.g. "Target: Q4 2026". */
23
+ detail?: string;
24
+ }
25
+ /** A point-in-time marker on the timeline, drawn as a diamond on its own row. */
26
+ export interface GanttChartMilestone {
27
+ /** Unique milestone identifier. */
28
+ id: string;
29
+ /** Milestone name, shown in the sticky label column. */
30
+ label: string;
31
+ /** The day the diamond sits on (YYYY-MM-DD). */
32
+ date: string;
33
+ /** Accent for the diamond, from the core accent roles. Defaults to `neutral`. */
34
+ color?: GanttChartColor;
35
+ /** Group heading this milestone sits under, matching the items' group labels. */
36
+ group?: string;
37
+ }
38
+ /** Props owned by GanttChart itself — everything else falls through to the root div. */
39
+ type GanttChartOwnProps = {
40
+ /** Task bars, in display order. */
41
+ items: GanttChartItem[];
42
+ /** Point-in-time markers, each rendered as its own diamond row at the end of its group. */
43
+ milestones?: GanttChartMilestone[];
44
+ /** Explicit timeline window (YYYY-MM-DD both ends). Without it the range fits the data, snapped outward to whole months. */
45
+ range?: {
46
+ start: string;
47
+ end: string;
48
+ };
49
+ /** Draws the vertical today rule when today falls inside the range. */
50
+ showToday?: boolean;
51
+ /** Pins the today rule to a given day (YYYY-MM-DD) instead of the render-time clock, so a statically built page and its hydrating client can never disagree about where the rule sits. */
52
+ today?: string;
53
+ /** Draws the faint vertical gridline at each month boundary behind the bars. */
54
+ showGrid?: boolean;
55
+ /** Id of the highlighted item. Selection is controlled; pair it with `onItemClick`. */
56
+ selectedId?: string;
57
+ /** Called with the item when a bar is clicked. Bars render as buttons only when this is set; without it the chart is inert and renders from a Server Component. */
58
+ onItemClick?: (item: GanttChartItem) => void;
59
+ /** Chart title, in the shared chart header. */
60
+ title?: string;
61
+ /** Description text below the title. */
62
+ subtitle?: string;
63
+ /** Strip the card chrome (border, padding, fill) when the chart sits inside another panel that supplies the surface */
64
+ bare?: boolean;
65
+ /** Additional CSS classes */
66
+ className?: string;
67
+ };
68
+ export interface GanttChartProps extends GanttChartOwnProps, Omit<React.ComponentPropsWithoutRef<'div'>, keyof GanttChartOwnProps | 'children'> {
69
+ }
70
+ /**
71
+ * GanttChart — phases and tasks as bars on a shared timeline, with milestone
72
+ * diamonds, optional per-bar progress, month gridlines, and a today rule.
73
+ * Read-only by design: it draws a schedule, it does not edit one. Pure
74
+ * computed markup with no charting library and no hooks, so it renders from
75
+ * a Server Component; pass `onItemClick` (from a client boundary) and the
76
+ * bars become buttons with `selectedId` as the controlled highlight. It wears
77
+ * the chart family's card chrome (title, subtitle, padding) and takes `bare`
78
+ * to drop it inside a panel that supplies the surface. The label column stays
79
+ * sticky while the timeline scrolls horizontally on narrow screens.
80
+ */
81
+ export declare const GanttChart: React.ForwardRefExoticComponent<GanttChartProps & React.RefAttributes<HTMLDivElement>>;
82
+ export {};
@@ -0,0 +1,202 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import "../Chart/Chart.css";
4
+ import "./GanttChart.css";
5
+ const MS_PER_DAY = 24 * 60 * 60 * 1e3;
6
+ const parseDay = (date) => /* @__PURE__ */ new Date(`${date}T00:00:00`);
7
+ const isValidDay = (date) => !Number.isNaN(date.getTime());
8
+ const daysBetween = (from, to) => Math.round((to.getTime() - from.getTime()) / MS_PER_DAY);
9
+ const formatDay = (date) => date.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" });
10
+ const buildBlocks = (items, milestones) => {
11
+ const blocks = [];
12
+ const byGroup = /* @__PURE__ */ new Map();
13
+ const blockFor = (group) => {
14
+ let block = byGroup.get(group);
15
+ if (!block) {
16
+ block = { group, items: [], milestones: [] };
17
+ byGroup.set(group, block);
18
+ blocks.push(block);
19
+ }
20
+ return block;
21
+ };
22
+ items.forEach((item) => blockFor(item.group).items.push(item));
23
+ milestones.forEach((milestone) => blockFor(milestone.group).milestones.push(milestone));
24
+ return blocks;
25
+ };
26
+ const GanttChart = React.forwardRef(
27
+ ({
28
+ items,
29
+ milestones = [],
30
+ range,
31
+ showToday = true,
32
+ today,
33
+ showGrid = true,
34
+ selectedId,
35
+ onItemClick,
36
+ title,
37
+ subtitle,
38
+ bare = false,
39
+ className = "",
40
+ ...rest
41
+ }, ref) => {
42
+ const baseClass = "ds-gantt";
43
+ const chartClass = "ds-chart";
44
+ const classes = [chartClass, bare && `${chartClass}--bare`, baseClass, className].filter(Boolean).join(" ");
45
+ const dates = range ? [parseDay(range.start), parseDay(range.end)] : [
46
+ ...items.flatMap((item) => [parseDay(item.start), parseDay(item.end)]),
47
+ ...milestones.map((milestone) => parseDay(milestone.date))
48
+ ];
49
+ const validDates = dates.filter(isValidDay);
50
+ let rangeStart = null;
51
+ let totalDays = 0;
52
+ if (validDates.length > 0) {
53
+ const min = new Date(Math.min(...validDates.map((d) => d.getTime())));
54
+ const max = new Date(Math.max(...validDates.map((d) => d.getTime())));
55
+ if (max.getTime() >= min.getTime()) {
56
+ rangeStart = new Date(min.getFullYear(), min.getMonth(), 1);
57
+ const rangeEnd = new Date(max.getFullYear(), max.getMonth() + 1, 1);
58
+ totalDays = daysBetween(rangeStart, rangeEnd);
59
+ }
60
+ }
61
+ const drawable = rangeStart !== null && totalDays > 0;
62
+ const percentOf = (date) => rangeStart ? daysBetween(rangeStart, date) / totalDays * 100 : 0;
63
+ const clampPercent = (value) => Math.min(Math.max(value, 0), 100);
64
+ const months = [];
65
+ if (drawable && rangeStart) {
66
+ const cursor = new Date(rangeStart.getTime());
67
+ const end = new Date(rangeStart.getTime());
68
+ end.setDate(end.getDate() + totalDays);
69
+ while (cursor.getTime() < end.getTime()) {
70
+ const monthName = cursor.toLocaleDateString("en-US", { month: "short" });
71
+ const label = cursor.getMonth() === 0 || months.length === 0 ? `${monthName} ${cursor.getFullYear()}` : monthName;
72
+ months.push({ label, left: percentOf(cursor) });
73
+ cursor.setMonth(cursor.getMonth() + 1);
74
+ }
75
+ }
76
+ const now = today ? parseDay(today) : /* @__PURE__ */ new Date();
77
+ const todayStart = isValidDay(now) ? new Date(now.getFullYear(), now.getMonth(), now.getDate()) : null;
78
+ const todayPercent = drawable && todayStart ? percentOf(todayStart) : -1;
79
+ const todayVisible = showToday && drawable && todayPercent >= 0 && todayPercent <= 100;
80
+ const blocks = buildBlocks(items, milestones);
81
+ const itemText = (item) => {
82
+ const startDate = parseDay(item.start);
83
+ const endDate = parseDay(item.end);
84
+ const span = isValidDay(startDate) && isValidDay(endDate) ? `${formatDay(startDate)} to ${formatDay(endDate)}` : "";
85
+ const parts = [item.label, span];
86
+ if (typeof item.progress === "number") parts.push(`${Math.round(item.progress)}% complete`);
87
+ if (item.projected) parts.push("projected");
88
+ if (item.detail) parts.push(item.detail);
89
+ return parts.filter(Boolean).join(", ");
90
+ };
91
+ const milestoneText = (milestone) => {
92
+ const date = parseDay(milestone.date);
93
+ return isValidDay(date) ? `${milestone.label}, ${formatDay(date)}` : milestone.label;
94
+ };
95
+ const renderBar = (item) => {
96
+ const startDate = parseDay(item.start);
97
+ const endDate = parseDay(item.end);
98
+ if (!isValidDay(startDate) || !isValidDay(endDate) || endDate.getTime() < startDate.getTime()) {
99
+ return null;
100
+ }
101
+ const left = clampPercent(percentOf(startDate));
102
+ const right = clampPercent(
103
+ (daysBetween(rangeStart, endDate) + 1) / totalDays * 100
104
+ );
105
+ const width = Math.max(right - left, 0);
106
+ if (width === 0) return null;
107
+ const progress = typeof item.progress === "number" ? Math.min(Math.max(item.progress, 0), 100) : void 0;
108
+ const barClasses = [
109
+ `${baseClass}__bar`,
110
+ `${baseClass}__bar--${item.color ?? "neutral"}`,
111
+ progress !== void 0 && `${baseClass}__bar--tracked`,
112
+ item.projected && `${baseClass}__bar--projected`,
113
+ selectedId === item.id && `${baseClass}__bar--selected`
114
+ ].filter(Boolean).join(" ");
115
+ const barStyle = { left: `${left}%`, width: `${width}%` };
116
+ const text = itemText(item);
117
+ const fill = progress !== void 0 ? /* @__PURE__ */ jsx("span", { className: `${baseClass}__bar-fill`, style: { width: `${progress}%` } }) : null;
118
+ if (onItemClick) {
119
+ return /* @__PURE__ */ jsx(
120
+ "button",
121
+ {
122
+ type: "button",
123
+ className: barClasses,
124
+ style: barStyle,
125
+ title: text,
126
+ "aria-label": text,
127
+ "aria-pressed": selectedId === item.id,
128
+ onClick: () => onItemClick(item),
129
+ children: fill
130
+ }
131
+ );
132
+ }
133
+ return /* @__PURE__ */ jsxs("div", { className: barClasses, style: barStyle, title: text, children: [
134
+ fill,
135
+ /* @__PURE__ */ jsx("span", { className: `${baseClass}__sr`, children: text })
136
+ ] });
137
+ };
138
+ const renderMilestone = (milestone) => {
139
+ const date = parseDay(milestone.date);
140
+ if (!isValidDay(date)) return null;
141
+ const left = percentOf(date) + 100 / totalDays / 2;
142
+ if (left < 0 || left > 100) return null;
143
+ const text = milestoneText(milestone);
144
+ return /* @__PURE__ */ jsx(
145
+ "div",
146
+ {
147
+ className: `${baseClass}__milestone ${baseClass}__milestone--${milestone.color ?? "neutral"}`,
148
+ style: { left: `${left}%` },
149
+ title: text,
150
+ children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__sr`, children: text })
151
+ }
152
+ );
153
+ };
154
+ const overlay = /* @__PURE__ */ jsxs("div", { className: `${baseClass}__overlay`, "aria-hidden": "true", children: [
155
+ showGrid && months.slice(1).map((month) => /* @__PURE__ */ jsx("span", { className: `${baseClass}__gridline`, style: { left: `${month.left}%` } }, month.label + month.left)),
156
+ todayVisible && /* @__PURE__ */ jsx("span", { className: `${baseClass}__today`, style: { left: `${todayPercent}%` }, children: /* @__PURE__ */ jsx("span", { className: `${baseClass}__today-label`, children: "Today" }) })
157
+ ] });
158
+ return /* @__PURE__ */ jsxs("div", { ...rest, ref, className: classes, children: [
159
+ (title || subtitle) && /* @__PURE__ */ jsx("div", { className: `${chartClass}__header`, children: /* @__PURE__ */ jsxs("div", { className: `${chartClass}__header-text`, children: [
160
+ title && /* @__PURE__ */ jsx("h3", { className: `${chartClass}__title`, children: title }),
161
+ subtitle && /* @__PURE__ */ jsx("p", { className: `${chartClass}__subtitle`, children: subtitle })
162
+ ] }) }),
163
+ /* @__PURE__ */ jsx("div", { className: `${chartClass}__body ${baseClass}__body`, children: drawable && /* @__PURE__ */ jsx("div", { className: `${baseClass}__scroll`, children: /* @__PURE__ */ jsxs("div", { className: `${baseClass}__canvas`, children: [
164
+ /* @__PURE__ */ jsxs("div", { className: `${baseClass}__axis`, "aria-hidden": "true", children: [
165
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__corner` }),
166
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__months`, children: months.map((month) => /* @__PURE__ */ jsx(
167
+ "span",
168
+ {
169
+ className: `${baseClass}__month-label`,
170
+ style: { left: `${month.left}%` },
171
+ children: month.label
172
+ },
173
+ month.label + month.left
174
+ )) })
175
+ ] }),
176
+ /* @__PURE__ */ jsxs("div", { className: `${baseClass}__rows`, children: [
177
+ overlay,
178
+ blocks.map((block, blockIndex) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
179
+ block.group && /* @__PURE__ */ jsxs("div", { className: `${baseClass}__group-row`, children: [
180
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__group-label`, children: block.group }),
181
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__track` })
182
+ ] }),
183
+ /* @__PURE__ */ jsxs("ul", { className: `${baseClass}__list`, "aria-label": block.group, children: [
184
+ block.items.map((item) => /* @__PURE__ */ jsxs("li", { className: `${baseClass}__row`, children: [
185
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__label`, children: item.label }),
186
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__track`, children: renderBar(item) })
187
+ ] }, item.id)),
188
+ block.milestones.map((milestone) => /* @__PURE__ */ jsxs("li", { className: `${baseClass}__row`, children: [
189
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__label ${baseClass}__label--milestone`, children: milestone.label }),
190
+ /* @__PURE__ */ jsx("div", { className: `${baseClass}__track`, children: renderMilestone(milestone) })
191
+ ] }, milestone.id))
192
+ ] })
193
+ ] }, block.group ?? `block-${blockIndex}`))
194
+ ] })
195
+ ] }) }) })
196
+ ] });
197
+ }
198
+ );
199
+ GanttChart.displayName = "GanttChart";
200
+ export {
201
+ GanttChart
202
+ };