@astryxdesign/lab 0.0.0-bootstrap.0 → 0.1.2-canary.04e71b2

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 (513) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE +21 -0
  3. package/README.md +47 -1
  4. package/dist/Chart/Chart.d.ts +77 -0
  5. package/dist/Chart/Chart.d.ts.map +1 -0
  6. package/dist/Chart/Chart.js +247 -0
  7. package/dist/Chart/ChartArea.d.ts +28 -0
  8. package/dist/Chart/ChartArea.d.ts.map +1 -0
  9. package/dist/Chart/ChartArea.js +71 -0
  10. package/dist/Chart/ChartAxis.d.ts +27 -0
  11. package/dist/Chart/ChartAxis.d.ts.map +1 -0
  12. package/dist/Chart/ChartAxis.js +147 -0
  13. package/dist/Chart/ChartBar.d.ts +19 -0
  14. package/dist/Chart/ChartBar.d.ts.map +1 -0
  15. package/dist/Chart/ChartBar.js +61 -0
  16. package/dist/Chart/ChartBrush.d.ts +59 -0
  17. package/dist/Chart/ChartBrush.d.ts.map +1 -0
  18. package/dist/Chart/ChartBrush.js +197 -0
  19. package/dist/Chart/ChartCandlestick.d.ts +50 -0
  20. package/dist/Chart/ChartCandlestick.d.ts.map +1 -0
  21. package/dist/Chart/ChartCandlestick.js +138 -0
  22. package/dist/Chart/ChartContext.d.ts +5 -0
  23. package/dist/Chart/ChartContext.d.ts.map +1 -0
  24. package/dist/Chart/ChartContext.js +20 -0
  25. package/dist/Chart/ChartDot.d.ts +18 -0
  26. package/dist/Chart/ChartDot.d.ts.map +1 -0
  27. package/dist/Chart/ChartDot.js +43 -0
  28. package/dist/Chart/ChartDotGL.d.ts +16 -0
  29. package/dist/Chart/ChartDotGL.d.ts.map +1 -0
  30. package/dist/Chart/ChartDotGL.js +135 -0
  31. package/dist/Chart/ChartDotGLInteractive.d.ts +41 -0
  32. package/dist/Chart/ChartDotGLInteractive.d.ts.map +1 -0
  33. package/dist/Chart/ChartDotGLInteractive.js +446 -0
  34. package/dist/Chart/ChartErrorBar.d.ts +23 -0
  35. package/dist/Chart/ChartErrorBar.d.ts.map +1 -0
  36. package/dist/Chart/ChartErrorBar.js +68 -0
  37. package/dist/Chart/ChartGrid.d.ts +17 -0
  38. package/dist/Chart/ChartGrid.d.ts.map +1 -0
  39. package/dist/Chart/ChartGrid.js +67 -0
  40. package/dist/Chart/ChartHeatmapGL.d.ts +10 -0
  41. package/dist/Chart/ChartHeatmapGL.d.ts.map +1 -0
  42. package/dist/Chart/ChartHeatmapGL.js +171 -0
  43. package/dist/Chart/ChartLegend.d.ts +60 -0
  44. package/dist/Chart/ChartLegend.d.ts.map +1 -0
  45. package/dist/Chart/ChartLegend.js +161 -0
  46. package/dist/Chart/ChartLine.d.ts +23 -0
  47. package/dist/Chart/ChartLine.d.ts.map +1 -0
  48. package/dist/Chart/ChartLine.js +64 -0
  49. package/dist/Chart/ChartReferenceLine.d.ts +11 -0
  50. package/dist/Chart/ChartReferenceLine.d.ts.map +1 -0
  51. package/dist/Chart/ChartReferenceLine.js +109 -0
  52. package/dist/Chart/ChartSelect.d.ts +9 -0
  53. package/dist/Chart/ChartSelect.d.ts.map +1 -0
  54. package/dist/Chart/ChartSelect.js +90 -0
  55. package/dist/Chart/ChartStreamGL.d.ts +17 -0
  56. package/dist/Chart/ChartStreamGL.d.ts.map +1 -0
  57. package/dist/Chart/ChartStreamGL.js +157 -0
  58. package/dist/Chart/ChartTooltip.d.ts +85 -0
  59. package/dist/Chart/ChartTooltip.d.ts.map +1 -0
  60. package/dist/Chart/ChartTooltip.js +335 -0
  61. package/dist/Chart/ChartZoom.d.ts +23 -0
  62. package/dist/Chart/ChartZoom.d.ts.map +1 -0
  63. package/dist/Chart/ChartZoom.js +314 -0
  64. package/dist/Chart/formatters.d.ts +33 -0
  65. package/dist/Chart/formatters.d.ts.map +1 -0
  66. package/dist/Chart/formatters.js +101 -0
  67. package/dist/Chart/getChartColors.d.ts +56 -0
  68. package/dist/Chart/getChartColors.d.ts.map +1 -0
  69. package/dist/Chart/getChartColors.js +150 -0
  70. package/dist/Chart/index.d.ts +29 -0
  71. package/dist/Chart/index.d.ts.map +1 -0
  72. package/dist/Chart/index.js +29 -0
  73. package/dist/Chart/m4.d.ts +36 -0
  74. package/dist/Chart/m4.d.ts.map +1 -0
  75. package/dist/Chart/m4.js +106 -0
  76. package/dist/Chart/types.d.ts +55 -0
  77. package/dist/Chart/types.d.ts.map +1 -0
  78. package/dist/Chart/types.js +1 -0
  79. package/dist/Chart/useChartColors.d.ts +16 -0
  80. package/dist/Chart/useChartColors.d.ts.map +1 -0
  81. package/dist/Chart/useChartColors.js +30 -0
  82. package/dist/Chart/useChartRange.d.ts +50 -0
  83. package/dist/Chart/useChartRange.d.ts.map +1 -0
  84. package/dist/Chart/useChartRange.js +90 -0
  85. package/dist/Chart/utils.d.ts +15 -0
  86. package/dist/Chart/utils.d.ts.map +1 -0
  87. package/dist/Chart/utils.js +24 -0
  88. package/dist/Chart/webgl.d.ts +62 -0
  89. package/dist/Chart/webgl.d.ts.map +1 -0
  90. package/dist/Chart/webgl.js +169 -0
  91. package/dist/ChartV2/Chart.d.ts +32 -0
  92. package/dist/ChartV2/Chart.d.ts.map +1 -0
  93. package/dist/ChartV2/Chart.js +281 -0
  94. package/dist/ChartV2/ChartAxis.d.ts +36 -0
  95. package/dist/ChartV2/ChartAxis.d.ts.map +1 -0
  96. package/dist/ChartV2/ChartAxis.js +161 -0
  97. package/dist/ChartV2/ChartGrid.d.ts +20 -0
  98. package/dist/ChartV2/ChartGrid.d.ts.map +1 -0
  99. package/dist/ChartV2/ChartGrid.js +76 -0
  100. package/dist/ChartV2/ChartLegend.d.ts +14 -0
  101. package/dist/ChartV2/ChartLegend.d.ts.map +1 -0
  102. package/dist/ChartV2/ChartLegend.js +54 -0
  103. package/dist/ChartV2/ChartSwatch.d.ts +36 -0
  104. package/dist/ChartV2/ChartSwatch.d.ts.map +1 -0
  105. package/dist/ChartV2/ChartSwatch.js +82 -0
  106. package/dist/ChartV2/ChartTooltip.d.ts +46 -0
  107. package/dist/ChartV2/ChartTooltip.d.ts.map +1 -0
  108. package/dist/ChartV2/ChartTooltip.js +267 -0
  109. package/dist/ChartV2/ChartV2Context.d.ts +4 -0
  110. package/dist/ChartV2/ChartV2Context.d.ts.map +1 -0
  111. package/dist/ChartV2/ChartV2Context.js +12 -0
  112. package/dist/ChartV2/index.d.ts +13 -0
  113. package/dist/ChartV2/index.d.ts.map +1 -0
  114. package/dist/ChartV2/index.js +10 -0
  115. package/dist/ChartV2/layout.d.ts +25 -0
  116. package/dist/ChartV2/layout.d.ts.map +1 -0
  117. package/dist/ChartV2/layout.js +195 -0
  118. package/dist/ChartV2/legend.d.ts +18 -0
  119. package/dist/ChartV2/legend.d.ts.map +1 -0
  120. package/dist/ChartV2/legend.js +24 -0
  121. package/dist/ChartV2/marks/area.d.ts +19 -0
  122. package/dist/ChartV2/marks/area.d.ts.map +1 -0
  123. package/dist/ChartV2/marks/area.js +109 -0
  124. package/dist/ChartV2/marks/band.d.ts +9 -0
  125. package/dist/ChartV2/marks/band.d.ts.map +1 -0
  126. package/dist/ChartV2/marks/band.js +59 -0
  127. package/dist/ChartV2/marks/bar.d.ts +17 -0
  128. package/dist/ChartV2/marks/bar.d.ts.map +1 -0
  129. package/dist/ChartV2/marks/bar.js +120 -0
  130. package/dist/ChartV2/marks/candlestick.d.ts +15 -0
  131. package/dist/ChartV2/marks/candlestick.d.ts.map +1 -0
  132. package/dist/ChartV2/marks/candlestick.js +83 -0
  133. package/dist/ChartV2/marks/dot.d.ts +15 -0
  134. package/dist/ChartV2/marks/dot.d.ts.map +1 -0
  135. package/dist/ChartV2/marks/dot.js +65 -0
  136. package/dist/ChartV2/marks/dotGL.d.ts +16 -0
  137. package/dist/ChartV2/marks/dotGL.d.ts.map +1 -0
  138. package/dist/ChartV2/marks/dotGL.js +178 -0
  139. package/dist/ChartV2/marks/dotGLInteractive.d.ts +30 -0
  140. package/dist/ChartV2/marks/dotGLInteractive.d.ts.map +1 -0
  141. package/dist/ChartV2/marks/dotGLInteractive.js +464 -0
  142. package/dist/ChartV2/marks/errorBar.d.ts +27 -0
  143. package/dist/ChartV2/marks/errorBar.d.ts.map +1 -0
  144. package/dist/ChartV2/marks/errorBar.js +87 -0
  145. package/dist/ChartV2/marks/heatmapGL.d.ts +23 -0
  146. package/dist/ChartV2/marks/heatmapGL.d.ts.map +1 -0
  147. package/dist/ChartV2/marks/heatmapGL.js +242 -0
  148. package/dist/ChartV2/marks/index.d.ts +13 -0
  149. package/dist/ChartV2/marks/index.d.ts.map +1 -0
  150. package/dist/ChartV2/marks/index.js +14 -0
  151. package/dist/ChartV2/marks/line.d.ts +18 -0
  152. package/dist/ChartV2/marks/line.d.ts.map +1 -0
  153. package/dist/ChartV2/marks/line.js +76 -0
  154. package/dist/ChartV2/marks/referenceLine.d.ts +35 -0
  155. package/dist/ChartV2/marks/referenceLine.d.ts.map +1 -0
  156. package/dist/ChartV2/marks/referenceLine.js +186 -0
  157. package/dist/ChartV2/marks/streamGL.d.ts +36 -0
  158. package/dist/ChartV2/marks/streamGL.d.ts.map +1 -0
  159. package/dist/ChartV2/marks/streamGL.js +204 -0
  160. package/dist/ChartV2/tooltip.d.ts +38 -0
  161. package/dist/ChartV2/tooltip.d.ts.map +1 -0
  162. package/dist/ChartV2/tooltip.js +54 -0
  163. package/dist/ChartV2/types.d.ts +115 -0
  164. package/dist/ChartV2/types.d.ts.map +1 -0
  165. package/dist/ChartV2/types.js +35 -0
  166. package/dist/ChatReasoning/ChatReasoning.d.ts +51 -0
  167. package/dist/ChatReasoning/ChatReasoning.d.ts.map +1 -0
  168. package/dist/ChatReasoning/ChatReasoning.js +236 -0
  169. package/dist/CircularProgress/CircularProgress.d.ts +101 -0
  170. package/dist/CircularProgress/CircularProgress.d.ts.map +1 -0
  171. package/dist/CircularProgress/CircularProgress.js +263 -0
  172. package/dist/CircularProgress/index.d.ts +6 -0
  173. package/dist/CircularProgress/index.d.ts.map +1 -0
  174. package/dist/CircularProgress/index.js +8 -0
  175. package/dist/CodeBlock/index.d.ts +8 -0
  176. package/dist/CodeBlock/index.d.ts.map +1 -0
  177. package/dist/CodeBlock/index.js +9 -0
  178. package/dist/CodeEditor/CodeEditor.d.ts +46 -0
  179. package/dist/CodeEditor/CodeEditor.d.ts.map +1 -0
  180. package/dist/CodeEditor/CodeEditor.js +396 -0
  181. package/dist/CodeEditor/index.d.ts +6 -0
  182. package/dist/CodeEditor/index.d.ts.map +1 -0
  183. package/dist/CodeEditor/index.js +7 -0
  184. package/dist/Radial/RadialArea.d.ts +25 -0
  185. package/dist/Radial/RadialArea.d.ts.map +1 -0
  186. package/dist/Radial/RadialArea.js +91 -0
  187. package/dist/Radial/RadialAxis.d.ts +14 -0
  188. package/dist/Radial/RadialAxis.d.ts.map +1 -0
  189. package/dist/Radial/RadialAxis.js +55 -0
  190. package/dist/Radial/RadialChart.d.ts +70 -0
  191. package/dist/Radial/RadialChart.d.ts.map +1 -0
  192. package/dist/Radial/RadialChart.js +174 -0
  193. package/dist/Radial/RadialContext.d.ts +5 -0
  194. package/dist/Radial/RadialContext.d.ts.map +1 -0
  195. package/dist/Radial/RadialContext.js +19 -0
  196. package/dist/Radial/RadialGrid.d.ts +14 -0
  197. package/dist/Radial/RadialGrid.d.ts.map +1 -0
  198. package/dist/Radial/RadialGrid.js +70 -0
  199. package/dist/Radial/RadialSlice.d.ts +23 -0
  200. package/dist/Radial/RadialSlice.d.ts.map +1 -0
  201. package/dist/Radial/RadialSlice.js +85 -0
  202. package/dist/Radial/RadialTooltip.d.ts +44 -0
  203. package/dist/Radial/RadialTooltip.d.ts.map +1 -0
  204. package/dist/Radial/RadialTooltip.js +284 -0
  205. package/dist/Radial/index.d.ts +9 -0
  206. package/dist/Radial/index.d.ts.map +1 -0
  207. package/dist/Radial/index.js +9 -0
  208. package/dist/Radial/types.d.ts +39 -0
  209. package/dist/Radial/types.d.ts.map +1 -0
  210. package/dist/Radial/types.js +1 -0
  211. package/dist/SVGIcon/SVGIcon.d.ts +87 -0
  212. package/dist/SVGIcon/SVGIcon.d.ts.map +1 -0
  213. package/dist/SVGIcon/SVGIcon.js +299 -0
  214. package/dist/SVGIcon/icons.d.ts +49 -0
  215. package/dist/SVGIcon/icons.d.ts.map +1 -0
  216. package/dist/SVGIcon/icons.js +326 -0
  217. package/dist/SVGIcon/index.d.ts +15 -0
  218. package/dist/SVGIcon/index.d.ts.map +1 -0
  219. package/dist/SVGIcon/index.js +22 -0
  220. package/dist/SVGIcon/pathTransforms.d.ts +35 -0
  221. package/dist/SVGIcon/pathTransforms.d.ts.map +1 -0
  222. package/dist/SVGIcon/pathTransforms.js +644 -0
  223. package/dist/SVGIcon/tokens.stylex.d.ts +37 -0
  224. package/dist/SVGIcon/tokens.stylex.d.ts.map +1 -0
  225. package/dist/SVGIcon/tokens.stylex.js +40 -0
  226. package/dist/SVGIcon/variations.stylex.d.ts +44 -0
  227. package/dist/SVGIcon/variations.stylex.d.ts.map +1 -0
  228. package/dist/SVGIcon/variations.stylex.js +119 -0
  229. package/dist/SVGIcon/xif-examples.d.ts +22 -0
  230. package/dist/SVGIcon/xif-examples.d.ts.map +1 -0
  231. package/dist/SVGIcon/xif-examples.js +202 -0
  232. package/dist/SVGIcon/xif-types.d.ts +129 -0
  233. package/dist/SVGIcon/xif-types.d.ts.map +1 -0
  234. package/dist/SVGIcon/xif-types.js +1 -0
  235. package/dist/Sankey/SankeyChart.d.ts +72 -0
  236. package/dist/Sankey/SankeyChart.d.ts.map +1 -0
  237. package/dist/Sankey/SankeyChart.js +162 -0
  238. package/dist/Sankey/SankeyContext.d.ts +5 -0
  239. package/dist/Sankey/SankeyContext.d.ts.map +1 -0
  240. package/dist/Sankey/SankeyContext.js +20 -0
  241. package/dist/Sankey/SankeyGrid.d.ts +20 -0
  242. package/dist/Sankey/SankeyGrid.d.ts.map +1 -0
  243. package/dist/Sankey/SankeyGrid.js +53 -0
  244. package/dist/Sankey/SankeyLabel.d.ts +11 -0
  245. package/dist/Sankey/SankeyLabel.d.ts.map +1 -0
  246. package/dist/Sankey/SankeyLabel.js +179 -0
  247. package/dist/Sankey/SankeyLink.d.ts +29 -0
  248. package/dist/Sankey/SankeyLink.d.ts.map +1 -0
  249. package/dist/Sankey/SankeyLink.js +139 -0
  250. package/dist/Sankey/SankeyNode.d.ts +15 -0
  251. package/dist/Sankey/SankeyNode.d.ts.map +1 -0
  252. package/dist/Sankey/SankeyNode.js +56 -0
  253. package/dist/Sankey/index.d.ts +8 -0
  254. package/dist/Sankey/index.d.ts.map +1 -0
  255. package/dist/Sankey/index.js +8 -0
  256. package/dist/Sankey/layout.d.ts +26 -0
  257. package/dist/Sankey/layout.d.ts.map +1 -0
  258. package/dist/Sankey/layout.js +157 -0
  259. package/dist/Sankey/types.d.ts +84 -0
  260. package/dist/Sankey/types.d.ts.map +1 -0
  261. package/dist/Sankey/types.js +1 -0
  262. package/dist/Schedule/CalendarEvent.d.ts +36 -0
  263. package/dist/Schedule/CalendarEvent.d.ts.map +1 -0
  264. package/dist/Schedule/CalendarEvent.js +35 -0
  265. package/dist/Schedule/DayView.d.ts +8 -0
  266. package/dist/Schedule/DayView.d.ts.map +1 -0
  267. package/dist/Schedule/DayView.js +105 -0
  268. package/dist/Schedule/ListView.d.ts +6 -0
  269. package/dist/Schedule/ListView.d.ts.map +1 -0
  270. package/dist/Schedule/ListView.js +171 -0
  271. package/dist/Schedule/MonthlyView.d.ts +6 -0
  272. package/dist/Schedule/MonthlyView.d.ts.map +1 -0
  273. package/dist/Schedule/MonthlyView.js +270 -0
  274. package/dist/Schedule/Schedule.d.ts +22 -0
  275. package/dist/Schedule/Schedule.d.ts.map +1 -0
  276. package/dist/Schedule/Schedule.js +185 -0
  277. package/dist/Schedule/TimeGridView.d.ts +12 -0
  278. package/dist/Schedule/TimeGridView.d.ts.map +1 -0
  279. package/dist/Schedule/TimeGridView.js +364 -0
  280. package/dist/Schedule/WeeklyView.d.ts +9 -0
  281. package/dist/Schedule/WeeklyView.d.ts.map +1 -0
  282. package/dist/Schedule/WeeklyView.js +112 -0
  283. package/dist/Schedule/context.d.ts +20 -0
  284. package/dist/Schedule/context.d.ts.map +1 -0
  285. package/dist/Schedule/context.js +19 -0
  286. package/dist/Schedule/dateMath.d.ts +21 -0
  287. package/dist/Schedule/dateMath.d.ts.map +1 -0
  288. package/dist/Schedule/dateMath.js +63 -0
  289. package/dist/Schedule/index.d.ts +19 -0
  290. package/dist/Schedule/index.d.ts.map +1 -0
  291. package/dist/Schedule/index.js +17 -0
  292. package/dist/Schedule/plugins/PaginationPlugin.d.ts +7 -0
  293. package/dist/Schedule/plugins/PaginationPlugin.d.ts.map +1 -0
  294. package/dist/Schedule/plugins/PaginationPlugin.js +81 -0
  295. package/dist/Schedule/plugins/ViewSelectorPlugin.d.ts +11 -0
  296. package/dist/Schedule/plugins/ViewSelectorPlugin.d.ts.map +1 -0
  297. package/dist/Schedule/plugins/ViewSelectorPlugin.js +78 -0
  298. package/dist/Schedule/plugins/index.d.ts +5 -0
  299. package/dist/Schedule/plugins/index.d.ts.map +1 -0
  300. package/dist/Schedule/plugins/index.js +14 -0
  301. package/dist/Schedule/shared.d.ts +923 -0
  302. package/dist/Schedule/shared.d.ts.map +1 -0
  303. package/dist/Schedule/shared.js +1325 -0
  304. package/dist/Schedule/types.d.ts +51 -0
  305. package/dist/Schedule/types.d.ts.map +1 -0
  306. package/dist/Schedule/types.js +1 -0
  307. package/dist/Schedule/useCurrentTime.d.ts +3 -0
  308. package/dist/Schedule/useCurrentTime.d.ts.map +1 -0
  309. package/dist/Schedule/useCurrentTime.js +43 -0
  310. package/dist/Schedule/zonedDateTime.d.ts +20 -0
  311. package/dist/Schedule/zonedDateTime.d.ts.map +1 -0
  312. package/dist/Schedule/zonedDateTime.js +31 -0
  313. package/dist/Stepper/Step.d.ts +120 -0
  314. package/dist/Stepper/Step.d.ts.map +1 -0
  315. package/dist/Stepper/Step.js +573 -0
  316. package/dist/Stepper/StepStatus.d.ts +24 -0
  317. package/dist/Stepper/StepStatus.d.ts.map +1 -0
  318. package/dist/Stepper/StepStatus.js +1 -0
  319. package/dist/Stepper/Stepper.d.ts +77 -0
  320. package/dist/Stepper/Stepper.d.ts.map +1 -0
  321. package/dist/Stepper/Stepper.js +104 -0
  322. package/dist/Stepper/StepperContext.d.ts +12 -0
  323. package/dist/Stepper/StepperContext.d.ts.map +1 -0
  324. package/dist/Stepper/StepperContext.js +24 -0
  325. package/dist/Stepper/index.d.ts +8 -0
  326. package/dist/Stepper/index.d.ts.map +1 -0
  327. package/dist/Stepper/index.js +7 -0
  328. package/dist/ThreeD/ThreeDAxis.d.ts +6 -0
  329. package/dist/ThreeD/ThreeDAxis.d.ts.map +1 -0
  330. package/dist/ThreeD/ThreeDAxis.js +75 -0
  331. package/dist/ThreeD/ThreeDBar.d.ts +7 -0
  332. package/dist/ThreeD/ThreeDBar.d.ts.map +1 -0
  333. package/dist/ThreeD/ThreeDBar.js +98 -0
  334. package/dist/ThreeD/ThreeDChart.d.ts +24 -0
  335. package/dist/ThreeD/ThreeDChart.d.ts.map +1 -0
  336. package/dist/ThreeD/ThreeDChart.js +202 -0
  337. package/dist/ThreeD/ThreeDContext.d.ts +5 -0
  338. package/dist/ThreeD/ThreeDContext.d.ts.map +1 -0
  339. package/dist/ThreeD/ThreeDContext.js +19 -0
  340. package/dist/ThreeD/ThreeDGrid.d.ts +5 -0
  341. package/dist/ThreeD/ThreeDGrid.d.ts.map +1 -0
  342. package/dist/ThreeD/ThreeDGrid.js +55 -0
  343. package/dist/ThreeD/ThreeDScatter.d.ts +7 -0
  344. package/dist/ThreeD/ThreeDScatter.d.ts.map +1 -0
  345. package/dist/ThreeD/ThreeDScatter.js +57 -0
  346. package/dist/ThreeD/ThreeDScatterGL.d.ts +7 -0
  347. package/dist/ThreeD/ThreeDScatterGL.d.ts.map +1 -0
  348. package/dist/ThreeD/ThreeDScatterGL.js +243 -0
  349. package/dist/ThreeD/ThreeDSurface.d.ts +15 -0
  350. package/dist/ThreeD/ThreeDSurface.d.ts.map +1 -0
  351. package/dist/ThreeD/ThreeDSurface.js +97 -0
  352. package/dist/ThreeD/index.d.ts +10 -0
  353. package/dist/ThreeD/index.d.ts.map +1 -0
  354. package/dist/ThreeD/index.js +10 -0
  355. package/dist/ThreeD/types.d.ts +57 -0
  356. package/dist/ThreeD/types.d.ts.map +1 -0
  357. package/dist/ThreeD/types.js +1 -0
  358. package/dist/index.d.ts +26 -0
  359. package/dist/index.d.ts.map +1 -0
  360. package/dist/index.js +47 -0
  361. package/dist/lab.css +423 -0
  362. package/package.json +69 -4
  363. package/src/Chart/Chart.tsx +312 -0
  364. package/src/Chart/ChartArea.doc.mjs +16 -0
  365. package/src/Chart/ChartArea.tsx +91 -0
  366. package/src/Chart/ChartAxis.tsx +186 -0
  367. package/src/Chart/ChartBar.doc.mjs +16 -0
  368. package/src/Chart/ChartBar.tsx +71 -0
  369. package/src/Chart/ChartBrush.tsx +237 -0
  370. package/src/Chart/ChartCandlestick.doc.mjs +16 -0
  371. package/src/Chart/ChartCandlestick.tsx +186 -0
  372. package/src/Chart/ChartContext.ts +23 -0
  373. package/src/Chart/ChartDot.doc.mjs +16 -0
  374. package/src/Chart/ChartDot.tsx +44 -0
  375. package/src/Chart/ChartDotGL.doc.mjs +16 -0
  376. package/src/Chart/ChartDotGL.tsx +151 -0
  377. package/src/Chart/ChartDotGLInteractive.doc.mjs +16 -0
  378. package/src/Chart/ChartDotGLInteractive.tsx +519 -0
  379. package/src/Chart/ChartErrorBar.tsx +84 -0
  380. package/src/Chart/ChartGrid.tsx +86 -0
  381. package/src/Chart/ChartHeatmapGL.doc.mjs +16 -0
  382. package/src/Chart/ChartHeatmapGL.tsx +219 -0
  383. package/src/Chart/ChartLegend.tsx +181 -0
  384. package/src/Chart/ChartLine.doc.mjs +16 -0
  385. package/src/Chart/ChartLine.tsx +70 -0
  386. package/src/Chart/ChartReferenceLine.tsx +76 -0
  387. package/src/Chart/ChartSelect.tsx +111 -0
  388. package/src/Chart/ChartStreamGL.doc.mjs +16 -0
  389. package/src/Chart/ChartStreamGL.tsx +189 -0
  390. package/src/Chart/ChartTooltip.tsx +451 -0
  391. package/src/Chart/ChartZoom.tsx +400 -0
  392. package/src/Chart/formatters.ts +95 -0
  393. package/src/Chart/getChartColors.ts +249 -0
  394. package/src/Chart/index.ts +90 -0
  395. package/src/Chart/m4.test.ts +66 -0
  396. package/src/Chart/m4.ts +128 -0
  397. package/src/Chart/types.ts +64 -0
  398. package/src/Chart/useChartColors.ts +34 -0
  399. package/src/Chart/useChartRange.test.ts +101 -0
  400. package/src/Chart/useChartRange.ts +146 -0
  401. package/src/Chart/utils.ts +31 -0
  402. package/src/Chart/webgl.ts +192 -0
  403. package/src/ChartV2/Chart.tsx +348 -0
  404. package/src/ChartV2/ChartAxis.tsx +209 -0
  405. package/src/ChartV2/ChartGrid.tsx +99 -0
  406. package/src/ChartV2/ChartLegend.tsx +69 -0
  407. package/src/ChartV2/ChartSwatch.doc.mjs +17 -0
  408. package/src/ChartV2/ChartSwatch.tsx +86 -0
  409. package/src/ChartV2/ChartTooltip.tsx +382 -0
  410. package/src/ChartV2/ChartV2.doc.mjs +16 -0
  411. package/src/ChartV2/ChartV2Context.ts +15 -0
  412. package/src/ChartV2/index.ts +62 -0
  413. package/src/ChartV2/layout.ts +223 -0
  414. package/src/ChartV2/legend.ts +32 -0
  415. package/src/ChartV2/marks/area.tsx +122 -0
  416. package/src/ChartV2/marks/band.tsx +70 -0
  417. package/src/ChartV2/marks/bar.tsx +159 -0
  418. package/src/ChartV2/marks/candlestick.tsx +106 -0
  419. package/src/ChartV2/marks/dot.tsx +64 -0
  420. package/src/ChartV2/marks/dotGL.tsx +202 -0
  421. package/src/ChartV2/marks/dotGLInteractive.tsx +546 -0
  422. package/src/ChartV2/marks/errorBar.tsx +89 -0
  423. package/src/ChartV2/marks/heatmapGL.tsx +299 -0
  424. package/src/ChartV2/marks/index.ts +14 -0
  425. package/src/ChartV2/marks/line.tsx +94 -0
  426. package/src/ChartV2/marks/referenceLine.tsx +224 -0
  427. package/src/ChartV2/marks/streamGL.tsx +251 -0
  428. package/src/ChartV2/tooltip.ts +70 -0
  429. package/src/ChartV2/types.ts +129 -0
  430. package/src/ChatReasoning/ChatReasoning.doc.mjs +16 -0
  431. package/src/ChatReasoning/ChatReasoning.test.tsx +56 -0
  432. package/src/ChatReasoning/ChatReasoning.tsx +322 -0
  433. package/src/CircularProgress/CircularProgress.doc.mjs +174 -0
  434. package/src/CircularProgress/CircularProgress.test.tsx +157 -0
  435. package/src/CircularProgress/CircularProgress.tsx +373 -0
  436. package/src/CircularProgress/index.ts +15 -0
  437. package/src/CodeBlock/index.ts +10 -0
  438. package/src/CodeEditor/CodeEditor.doc.mjs +16 -0
  439. package/src/CodeEditor/CodeEditor.tsx +466 -0
  440. package/src/CodeEditor/index.ts +8 -0
  441. package/src/Radial/RadialArea.tsx +103 -0
  442. package/src/Radial/RadialAxis.tsx +60 -0
  443. package/src/Radial/RadialChart.doc.mjs +16 -0
  444. package/src/Radial/RadialChart.tsx +219 -0
  445. package/src/Radial/RadialContext.ts +22 -0
  446. package/src/Radial/RadialGrid.tsx +81 -0
  447. package/src/Radial/RadialSlice.tsx +130 -0
  448. package/src/Radial/RadialTooltip.tsx +347 -0
  449. package/src/Radial/index.ts +14 -0
  450. package/src/Radial/types.ts +46 -0
  451. package/src/SVGIcon/SVGIcon.doc.mjs +16 -0
  452. package/src/SVGIcon/SVGIcon.tsx +406 -0
  453. package/src/SVGIcon/icons.ts +283 -0
  454. package/src/SVGIcon/index.ts +73 -0
  455. package/src/SVGIcon/pathTransforms.ts +612 -0
  456. package/src/SVGIcon/tokens.stylex.ts +53 -0
  457. package/src/SVGIcon/variations.stylex.ts +122 -0
  458. package/src/SVGIcon/xif-examples.ts +191 -0
  459. package/src/SVGIcon/xif-types.ts +181 -0
  460. package/src/Sankey/SankeyChart.doc.mjs +16 -0
  461. package/src/Sankey/SankeyChart.tsx +220 -0
  462. package/src/Sankey/SankeyContext.ts +23 -0
  463. package/src/Sankey/SankeyGrid.tsx +69 -0
  464. package/src/Sankey/SankeyLabel.tsx +234 -0
  465. package/src/Sankey/SankeyLink.tsx +167 -0
  466. package/src/Sankey/SankeyNode.tsx +66 -0
  467. package/src/Sankey/index.ts +22 -0
  468. package/src/Sankey/layout.ts +219 -0
  469. package/src/Sankey/types.ts +93 -0
  470. package/src/Schedule/CalendarEvent.ts +74 -0
  471. package/src/Schedule/DayView.tsx +112 -0
  472. package/src/Schedule/ListView.tsx +236 -0
  473. package/src/Schedule/MonthlyView.tsx +401 -0
  474. package/src/Schedule/Schedule.doc.mjs +16 -0
  475. package/src/Schedule/Schedule.test.tsx +405 -0
  476. package/src/Schedule/Schedule.tsx +307 -0
  477. package/src/Schedule/TimeGridView.tsx +589 -0
  478. package/src/Schedule/WeeklyView.tsx +130 -0
  479. package/src/Schedule/context.tsx +49 -0
  480. package/src/Schedule/dateMath.ts +112 -0
  481. package/src/Schedule/index.ts +61 -0
  482. package/src/Schedule/plugins/PaginationPlugin.tsx +98 -0
  483. package/src/Schedule/plugins/ViewSelectorPlugin.tsx +128 -0
  484. package/src/Schedule/plugins/index.tsx +20 -0
  485. package/src/Schedule/shared.tsx +1304 -0
  486. package/src/Schedule/types.ts +86 -0
  487. package/src/Schedule/useCurrentTime.ts +50 -0
  488. package/src/Schedule/zonedDateTime.ts +71 -0
  489. package/src/Stepper/Step.doc.mjs +17 -0
  490. package/src/Stepper/Step.tsx +756 -0
  491. package/src/Stepper/StepStatus.ts +26 -0
  492. package/src/Stepper/Stepper.doc.mjs +265 -0
  493. package/src/Stepper/Stepper.test.tsx +281 -0
  494. package/src/Stepper/Stepper.tsx +157 -0
  495. package/src/Stepper/StepperContext.ts +43 -0
  496. package/src/Stepper/index.ts +14 -0
  497. package/src/ThreeD/3DBar.doc.mjs +16 -0
  498. package/src/ThreeD/3DChart.doc.mjs +16 -0
  499. package/src/ThreeD/3DScatter.doc.mjs +16 -0
  500. package/src/ThreeD/3DScatterGL.doc.mjs +16 -0
  501. package/src/ThreeD/3DSurface.doc.mjs +16 -0
  502. package/src/ThreeD/ThreeDAxis.tsx +86 -0
  503. package/src/ThreeD/ThreeDBar.tsx +130 -0
  504. package/src/ThreeD/ThreeDChart.tsx +262 -0
  505. package/src/ThreeD/ThreeDContext.ts +22 -0
  506. package/src/ThreeD/ThreeDGrid.tsx +68 -0
  507. package/src/ThreeD/ThreeDScatter.tsx +63 -0
  508. package/src/ThreeD/ThreeDScatterGL.tsx +270 -0
  509. package/src/ThreeD/ThreeDSurface.tsx +142 -0
  510. package/src/ThreeD/index.ts +11 -0
  511. package/src/ThreeD/projection.test.ts +132 -0
  512. package/src/ThreeD/types.ts +62 -0
  513. package/src/index.ts +250 -0
@@ -0,0 +1,237 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartBrush.tsx
5
+ * @output Drag-to-select region. Supports x-only or 2D (xy) brush modes.
6
+ * @position Child of Chart; reads scales from context
7
+ */
8
+
9
+ import React, {useState, useCallback, useRef} from 'react';
10
+ import {useChart} from './ChartContext';
11
+ import {isBandScale} from './utils';
12
+ import type {ScaleLinear} from 'd3-scale';
13
+
14
+ /**
15
+ * Brush direction mode:
16
+ * - `'x'` — horizontal range selection (default)
17
+ * - `'xy'` — 2D rectangular selection
18
+ */
19
+ export type BrushMode = 'x' | 'xy';
20
+
21
+ export interface BrushRange {
22
+ x: [number, number];
23
+ y?: [number, number];
24
+ }
25
+
26
+ export interface ChartBrushProps {
27
+ /**
28
+ * Brush direction mode.
29
+ * - `'x'` — horizontal selection (default, good for time ranges)
30
+ * - `'xy'` — rectangular 2D selection (good for scatter plots)
31
+ *
32
+ * @default 'x'
33
+ */
34
+ mode?: BrushMode;
35
+
36
+ /**
37
+ * Called when the user finishes a brush gesture.
38
+ * Receives the selected range in data coordinates and the matching data points.
39
+ */
40
+ onBrush?: (range: BrushRange, data: Record<string, unknown>[]) => void;
41
+
42
+ /**
43
+ * Called when the brush is cleared (click without drag).
44
+ */
45
+ onClear?: () => void;
46
+
47
+ /**
48
+ * Brush overlay color.
49
+ * @default 'var(--color-accent)'
50
+ */
51
+ color?: string;
52
+
53
+ /**
54
+ * Brush overlay opacity.
55
+ * @default 0.15
56
+ */
57
+ opacity?: number;
58
+ }
59
+
60
+ function localCoords(e: React.PointerEvent<SVGRectElement>): {
61
+ x: number;
62
+ y: number;
63
+ } {
64
+ const svg = e.currentTarget.ownerSVGElement;
65
+ if (!svg) {
66
+ return {x: 0, y: 0};
67
+ }
68
+ const pt = svg.createSVGPoint();
69
+ pt.x = e.clientX;
70
+ pt.y = e.clientY;
71
+ const local = pt.matrixTransform(e.currentTarget.getScreenCTM()?.inverse());
72
+ return {x: local.x, y: local.y};
73
+ }
74
+
75
+ /**
76
+ * Brush interaction for range selection.
77
+ *
78
+ * @example
79
+ * ```tsx
80
+ * // X-only (default)
81
+ * <ChartBrush onBrush={({x}) => setZoom(x)} />
82
+ *
83
+ * // 2D rectangular
84
+ * <ChartBrush mode="xy" onBrush={({x, y}, points) => setSelected(points)} />
85
+ * ```
86
+ */
87
+ export function ChartBrush({
88
+ mode = 'x',
89
+ onBrush,
90
+ onClear,
91
+ color = 'var(--color-accent)',
92
+ opacity = 0.15,
93
+ }: ChartBrushProps) {
94
+ const {width, height, data, xKey, xScale, yScale} = useChart();
95
+ const [brush, setBrush] = useState<{
96
+ x0: number;
97
+ y0: number;
98
+ x1: number;
99
+ y1: number;
100
+ } | null>(null);
101
+ const dragging = useRef(false);
102
+ const startRef = useRef({x: 0, y: 0});
103
+
104
+ const onPointerDown = useCallback((e: React.PointerEvent<SVGRectElement>) => {
105
+ (e.target as Element).setPointerCapture(e.pointerId);
106
+ dragging.current = true;
107
+ const {x, y} = localCoords(e);
108
+ startRef.current = {x, y};
109
+ setBrush({x0: x, y0: y, x1: x, y1: y});
110
+ }, []);
111
+
112
+ const onPointerMove = useCallback(
113
+ (e: React.PointerEvent<SVGRectElement>) => {
114
+ if (!dragging.current) {
115
+ return;
116
+ }
117
+ const {x, y} = localCoords(e);
118
+ const {x: sx, y: sy} = startRef.current;
119
+
120
+ if (mode === 'x') {
121
+ setBrush({
122
+ x0: Math.min(sx, x),
123
+ y0: 0,
124
+ x1: Math.max(sx, x),
125
+ y1: height,
126
+ });
127
+ } else {
128
+ setBrush({
129
+ x0: Math.min(sx, x),
130
+ y0: Math.min(sy, y),
131
+ x1: Math.max(sx, x),
132
+ y1: Math.max(sy, y),
133
+ });
134
+ }
135
+ },
136
+ [mode, height],
137
+ );
138
+
139
+ const onPointerUp = useCallback(() => {
140
+ dragging.current = false;
141
+ if (!brush) {
142
+ return;
143
+ }
144
+
145
+ const dx = Math.abs(brush.x1 - brush.x0);
146
+ const dy = Math.abs(brush.y1 - brush.y0);
147
+
148
+ // Too small — treat as click (clear)
149
+ if (dx < 3 && (mode === 'x' || dy < 3)) {
150
+ setBrush(null);
151
+ onClear?.();
152
+ return;
153
+ }
154
+
155
+ if (isBandScale(xScale)) {
156
+ // Band scale — can't invert meaningfully for range
157
+ setBrush(null);
158
+ return;
159
+ }
160
+
161
+ const linear = xScale as ScaleLinear<number, number>;
162
+ const xMin = linear.invert(brush.x0);
163
+ const xMax = linear.invert(brush.x1);
164
+
165
+ const range: BrushRange = {x: [xMin, xMax]};
166
+
167
+ let selected: Record<string, unknown>[];
168
+
169
+ if (mode === 'xy') {
170
+ const yMin = yScale.invert(brush.y1); // y is inverted (top=0)
171
+ const yMax = yScale.invert(brush.y0);
172
+ range.y = [yMin, yMax];
173
+
174
+ selected = data.filter(d => {
175
+ const xv = d[xKey];
176
+ if (typeof xv !== 'number' || xv < xMin || xv > xMax) {
177
+ return false;
178
+ }
179
+ // Check all numeric values against y range
180
+ return Object.entries(d).some(
181
+ ([k, v]) =>
182
+ k !== xKey && typeof v === 'number' && v >= yMin && v <= yMax,
183
+ );
184
+ });
185
+ } else {
186
+ selected = data.filter(d => {
187
+ const v = d[xKey];
188
+ return typeof v === 'number' && v >= xMin && v <= xMax;
189
+ });
190
+ }
191
+
192
+ onBrush?.(range, selected);
193
+ }, [brush, mode, xScale, yScale, data, xKey, onBrush, onClear]);
194
+
195
+ const rectX = brush ? brush.x0 : 0;
196
+ const rectY = brush ? brush.y0 : 0;
197
+ const rectW = brush ? brush.x1 - brush.x0 : 0;
198
+ const rectH = brush ? brush.y1 - brush.y0 : 0;
199
+
200
+ const brushRectStyle: React.CSSProperties = {
201
+ cursor: 'crosshair',
202
+ touchAction: 'none',
203
+ userSelect: 'none',
204
+ };
205
+
206
+ return (
207
+ <g>
208
+ <rect
209
+ x={0}
210
+ y={0}
211
+ width={width}
212
+ height={height}
213
+ fill="transparent"
214
+ style={brushRectStyle}
215
+ onPointerDown={onPointerDown}
216
+ onPointerMove={onPointerMove}
217
+ onPointerUp={onPointerUp}
218
+ onPointerCancel={onPointerUp}
219
+ />
220
+ {brush && (rectW > 1 || rectH > 1) && (
221
+ <rect
222
+ x={rectX}
223
+ y={rectY}
224
+ width={rectW}
225
+ height={rectH}
226
+ fill={color}
227
+ fillOpacity={opacity}
228
+ stroke={color}
229
+ strokeWidth={1}
230
+ strokeOpacity={0.4}
231
+ rx={mode === 'xy' ? 2 : 0}
232
+ pointerEvents="none"
233
+ />
234
+ )}
235
+ </g>
236
+ );
237
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('../../core/src/docs-types').ComponentDoc} */
4
+
5
+ export const docs = {
6
+ name: 'ChartCandlestick',
7
+ displayName: 'Chart Candlestick',
8
+ group: 'Chart',
9
+ category: 'Data Visualization',
10
+
11
+ usage: {
12
+ description: '',
13
+ },
14
+
15
+ props: [],
16
+ };
@@ -0,0 +1,186 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartCandlestick.tsx
5
+ * @output Renders candlestick/box-whisker marks for OHLC or statistical data
6
+ * @position Child of Chart; reads scales from context
7
+ *
8
+ * Two variants:
9
+ * - `'default'` — filled body with whiskers (traditional candlestick/box plot)
10
+ * - `'bar'` — OHLC bar — vertical line with open/close ticks
11
+ */
12
+
13
+ import {useChart} from './ChartContext';
14
+ import {isBandScale} from './utils';
15
+
16
+ export interface ChartCandlestickProps {
17
+ /** Data key for the high/max value (top of whisker) */
18
+ high: string;
19
+ /** Data key for the low/min value (bottom of whisker) */
20
+ low: string;
21
+ /** Data key for the open/Q1 value (bottom of body) */
22
+ open: string;
23
+ /** Data key for the close/Q3 value (top of body) */
24
+ close: string;
25
+ /**
26
+ * Visual variant:
27
+ * - `'default'` — filled body with whiskers
28
+ * - `'bar'` — OHLC bar — vertical range line, left tick at open, right tick at close
29
+ */
30
+ variant?: 'default' | 'bar';
31
+ /** Color when close >= open (bullish / positive) */
32
+ upColor?: string;
33
+ /** Color when close < open (bearish / negative) */
34
+ downColor?: string;
35
+ /** Fixed color — overrides up/down logic. Use for box plots. */
36
+ color?: string;
37
+ /** Body width as fraction of band width (default: 0.6) */
38
+ bodyWidth?: number;
39
+ /** Stroke width for whiskers and bar lines */
40
+ strokeWidth?: number;
41
+ /** Corner radius on body (default variant only) */
42
+ radius?: number;
43
+ }
44
+
45
+ /**
46
+ * Candlestick / box-whisker marks.
47
+ *
48
+ * @example
49
+ * ```
50
+ * // Financial OHLC
51
+ * <ChartCandlestick
52
+ * high="high" low="low" open="open" close="close"
53
+ * upColor={useChartColors().semantic.positive}
54
+ * downColor={useChartColors().semantic.negative}
55
+ * />
56
+ *
57
+ * // OHLC bar
58
+ * <ChartCandlestick
59
+ * variant="bar"
60
+ * high="max" low="min" open="q1" close="median"
61
+ * color={useChartColors().categorical(1)[0]}
62
+ * />
63
+ * ```
64
+ */
65
+ export function ChartCandlestick({
66
+ high,
67
+ low,
68
+ open,
69
+ close,
70
+ variant = 'default',
71
+ upColor,
72
+ downColor,
73
+ color,
74
+ bodyWidth = 0.6,
75
+ strokeWidth = 1.5,
76
+ radius = 2,
77
+ }: ChartCandlestickProps) {
78
+ const {data, xKey, xScale, yScale} = useChart();
79
+
80
+ if (!isBandScale(xScale)) {
81
+ return null;
82
+ }
83
+ const bw = xScale.bandwidth();
84
+
85
+ return (
86
+ <g>
87
+ {data.map((d, i) => {
88
+ const xVal = xScale(String(d[xKey]));
89
+ if (xVal == null) {
90
+ return null;
91
+ }
92
+
93
+ const hVal = typeof d[high] === 'number' ? (d[high] as number) : 0;
94
+ const lVal = typeof d[low] === 'number' ? (d[low] as number) : 0;
95
+ const oVal = typeof d[open] === 'number' ? (d[open] as number) : 0;
96
+ const cVal = typeof d[close] === 'number' ? (d[close] as number) : 0;
97
+
98
+ const isUp = cVal >= oVal;
99
+ const fill =
100
+ color ??
101
+ (isUp
102
+ ? (upColor ?? 'var(--color-data-categorical-green)')
103
+ : (downColor ?? 'var(--color-data-categorical-red)'));
104
+ const centerX = xVal + bw / 2;
105
+
106
+ const yHigh = yScale(hVal);
107
+ const yLow = yScale(lVal);
108
+ const yOpen = yScale(oVal);
109
+ const yClose = yScale(cVal);
110
+ const bodyTop = Math.min(yOpen, yClose);
111
+ const bodyBot = Math.max(yOpen, yClose);
112
+
113
+ if (variant === 'bar') {
114
+ // OHLC bar: vertical line (high→low), left tick at open, right tick at close
115
+ const tickLen = bw * bodyWidth * 0.4;
116
+ return (
117
+ <g key={i}>
118
+ {/* Vertical range line: high to low */}
119
+ <line
120
+ x1={centerX}
121
+ x2={centerX}
122
+ y1={yHigh}
123
+ y2={yLow}
124
+ stroke={fill}
125
+ strokeWidth={strokeWidth}
126
+ />
127
+ {/* Open tick — extends left */}
128
+ <line
129
+ x1={centerX - tickLen}
130
+ x2={centerX}
131
+ y1={yOpen}
132
+ y2={yOpen}
133
+ stroke={fill}
134
+ strokeWidth={strokeWidth}
135
+ />
136
+ {/* Close tick — extends right */}
137
+ <line
138
+ x1={centerX}
139
+ x2={centerX + tickLen}
140
+ y1={yClose}
141
+ y2={yClose}
142
+ stroke={fill}
143
+ strokeWidth={strokeWidth}
144
+ />
145
+ </g>
146
+ );
147
+ }
148
+
149
+ // Default variant: filled body with whiskers
150
+ const bodyW = bw * bodyWidth;
151
+ const bodyX = centerX - bodyW / 2;
152
+ const bodyH = Math.max(1, bodyBot - bodyTop);
153
+
154
+ return (
155
+ <g key={i}>
156
+ <line
157
+ x1={centerX}
158
+ x2={centerX}
159
+ y1={yHigh}
160
+ y2={bodyTop}
161
+ stroke={fill}
162
+ strokeWidth={strokeWidth}
163
+ />
164
+ <line
165
+ x1={centerX}
166
+ x2={centerX}
167
+ y1={bodyBot}
168
+ y2={yLow}
169
+ stroke={fill}
170
+ strokeWidth={strokeWidth}
171
+ />
172
+ <rect
173
+ x={bodyX}
174
+ y={bodyTop}
175
+ width={bodyW}
176
+ height={bodyH}
177
+ fill={fill}
178
+ rx={radius}
179
+ ry={radius}
180
+ />
181
+ </g>
182
+ );
183
+ })}
184
+ </g>
185
+ );
186
+ }
@@ -0,0 +1,23 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartContext.ts
5
+ * @output React context for sharing scales and dimensions between chart components
6
+ * @position Consumed by Chart (provider) and all child components (consumers)
7
+ */
8
+
9
+ import {createContext, useContext} from 'react';
10
+ import type {ChartContext} from './types';
11
+
12
+ const ChartCtx = createContext<ChartContext | null>(null);
13
+
14
+ export const ChartProvider = ChartCtx.Provider;
15
+
16
+ /** Access the chart context. Throws if used outside <Chart>. */
17
+ export function useChart(): ChartContext {
18
+ const ctx = useContext(ChartCtx);
19
+ if (!ctx) {
20
+ throw new Error('Chart components must be used inside <Chart>');
21
+ }
22
+ return ctx;
23
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('../../core/src/docs-types').ComponentDoc} */
4
+
5
+ export const docs = {
6
+ name: 'ChartDot',
7
+ displayName: 'Chart Dot',
8
+ group: 'Chart',
9
+ category: 'Data Visualization',
10
+
11
+ usage: {
12
+ description: '',
13
+ },
14
+
15
+ props: [],
16
+ };
@@ -0,0 +1,44 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartDot.tsx
5
+ * @output Renders scatter dots for a data key
6
+ * @position Child of Chart; reads scales from context
7
+ */
8
+
9
+ import {useChart} from './ChartContext';
10
+ import {xPixel} from './utils';
11
+
12
+ export interface ChartDotProps {
13
+ /** Which data key for the y values */
14
+ dataKey: string;
15
+ /** Dot fill color */
16
+ color: string;
17
+ /** Dot radius */
18
+ radius?: number;
19
+ }
20
+
21
+ /**
22
+ * Scatter dot marks.
23
+ *
24
+ * @example
25
+ * ```
26
+ * <ChartDot dataKey="outliers" color={useChartColors().categorical(3)[2]} />
27
+ * ```
28
+ */
29
+ export function ChartDot({dataKey, color, radius = 4}: ChartDotProps) {
30
+ const {data, xKey, xScale, yScale} = useChart();
31
+
32
+ return (
33
+ <g>
34
+ {data.map((d, i) => {
35
+ const x = xPixel(d, xKey, xScale);
36
+ const yVal =
37
+ typeof d[dataKey] === 'number' ? (d[dataKey] as number) : 0;
38
+ return (
39
+ <circle key={i} cx={x} cy={yScale(yVal)} r={radius} fill={color} />
40
+ );
41
+ })}
42
+ </g>
43
+ );
44
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('../../core/src/docs-types').ComponentDoc} */
4
+
5
+ export const docs = {
6
+ name: 'ChartDotGL',
7
+ displayName: 'Chart Dot GL',
8
+ group: 'Chart',
9
+ category: 'Data Visualization',
10
+
11
+ usage: {
12
+ description: '',
13
+ },
14
+
15
+ props: [],
16
+ };
@@ -0,0 +1,151 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartDotGL.tsx
5
+ * @output WebGL scatter — single draw call, canvas mounted outside SVG for sharp DPR
6
+ * @position Child of Chart; reads scales from context
7
+ */
8
+
9
+ import {useRef, useEffect, useCallback} from 'react';
10
+ import {useChart} from './ChartContext';
11
+ import {xPixel} from './utils';
12
+ import {
13
+ hexToGL,
14
+ getWebGLContext,
15
+ setupGLState,
16
+ sizeCanvas,
17
+ mountCanvasOverSVG,
18
+ createProgram,
19
+ POINT_SIZE_COMPENSATION,
20
+ } from './webgl';
21
+
22
+ export interface ChartDotGLProps {
23
+ dataKey: string;
24
+ color: string;
25
+ size?: number;
26
+ opacity?: number;
27
+ }
28
+
29
+ const VERT = `
30
+ attribute vec2 a_position;
31
+ uniform vec2 u_resolution;
32
+ uniform float u_size;
33
+ varying float v_alpha;
34
+ void main() {
35
+ vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;
36
+ gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);
37
+ gl_PointSize = u_size * ${POINT_SIZE_COMPENSATION.toFixed(6)};
38
+ v_alpha = 1.0;
39
+ }
40
+ `;
41
+
42
+ const FRAG = `
43
+ precision mediump float;
44
+ uniform vec3 u_color;
45
+ uniform float u_opacity;
46
+ varying float v_alpha;
47
+ void main() {
48
+ float v_alpha_final = u_opacity;
49
+ vec2 coord = gl_PointCoord - vec2(0.5);
50
+ float dist = length(coord);
51
+ if (dist > 0.5) discard;
52
+ float edge = 1.0 - smoothstep(0.48, 0.5, dist);
53
+ float a = v_alpha_final * edge;
54
+ gl_FragColor = vec4(u_color * a, a);
55
+ }
56
+ `;
57
+
58
+ /**
59
+ * WebGL scatter plot. Canvas mounted outside SVG for sharp Retina rendering.
60
+ *
61
+ * @example
62
+ * ```
63
+ * <ChartDotGL dataKey="value" color={colors.categorical(1)[0]} />
64
+ * ```
65
+ */
66
+ export function ChartDotGL({
67
+ dataKey,
68
+ color,
69
+ size = 6,
70
+ opacity = 0.8,
71
+ }: ChartDotGLProps) {
72
+ const {data, xKey, xScale, yScale, width, height} = useChart();
73
+ const canvasRef = useRef<HTMLCanvasElement | null>(null);
74
+ const glRef = useRef<WebGLRenderingContext | null>(null);
75
+ const programRef = useRef<WebGLProgram | null>(null);
76
+ const markerRef = useRef<SVGGElement>(null);
77
+
78
+ const getPositions = useCallback((): Float32Array => {
79
+ const positions: number[] = [];
80
+ for (const d of data) {
81
+ const x = xPixel(d, xKey, xScale);
82
+ const yVal = typeof d[dataKey] === 'number' ? (d[dataKey] as number) : 0;
83
+ positions.push(x, yScale(yVal));
84
+ }
85
+ return new Float32Array(positions);
86
+ }, [data, xKey, dataKey, xScale, yScale]);
87
+
88
+ // Mount canvas outside SVG
89
+ useEffect(() => {
90
+ const marker = markerRef.current;
91
+ if (!marker) {
92
+ return;
93
+ }
94
+ if (!canvasRef.current) {
95
+ canvasRef.current = document.createElement('canvas');
96
+ }
97
+ return mountCanvasOverSVG(marker, canvasRef.current, width, height);
98
+ }, [width, height]);
99
+
100
+ // Draw
101
+ useEffect(() => {
102
+ const canvas = canvasRef.current;
103
+ if (!canvas || width <= 0 || height <= 0) {
104
+ return;
105
+ }
106
+
107
+ const dpr = sizeCanvas(canvas, width, height);
108
+
109
+ if (!glRef.current) {
110
+ glRef.current = getWebGLContext(canvas);
111
+ }
112
+ const gl = glRef.current;
113
+ if (!gl) {
114
+ return;
115
+ }
116
+
117
+ if (!programRef.current) {
118
+ programRef.current = createProgram(gl, VERT, FRAG);
119
+ }
120
+ const program = programRef.current;
121
+ if (!program) {
122
+ return;
123
+ }
124
+
125
+ gl.viewport(0, 0, canvas.width, canvas.height);
126
+ setupGLState(gl);
127
+ gl.useProgram(program);
128
+
129
+ const positions = getPositions();
130
+ const posBuffer = gl.createBuffer();
131
+ gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);
132
+ gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW);
133
+ const aPos = gl.getAttribLocation(program, 'a_position');
134
+ gl.enableVertexAttribArray(aPos);
135
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
136
+
137
+ const [r, g, b] = hexToGL(color);
138
+ gl.uniform2f(gl.getUniformLocation(program, 'u_resolution'), width, height);
139
+ gl.uniform3f(gl.getUniformLocation(program, 'u_color'), r, g, b);
140
+ gl.uniform1f(gl.getUniformLocation(program, 'u_size'), size * dpr);
141
+ gl.uniform1f(gl.getUniformLocation(program, 'u_opacity'), opacity);
142
+
143
+ gl.drawArrays(gl.POINTS, 0, positions.length / 2);
144
+ gl.deleteBuffer(posBuffer);
145
+ }, [width, height, color, size, opacity, getPositions]);
146
+
147
+ if (width <= 0 || height <= 0) {
148
+ return null;
149
+ }
150
+ return <g ref={markerRef} />;
151
+ }
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /** @type {import('../../core/src/docs-types').ComponentDoc} */
4
+
5
+ export const docs = {
6
+ name: 'ChartDotGLInteractive',
7
+ displayName: 'Chart Dot GL Interactive',
8
+ group: 'Chart',
9
+ category: 'Data Visualization',
10
+
11
+ usage: {
12
+ description: '',
13
+ },
14
+
15
+ props: [],
16
+ };