@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,101 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ import {describe, it, expect} from 'vitest';
4
+ import {renderHook, act} from '@testing-library/react';
5
+ import {useChartRange} from './useChartRange';
6
+
7
+ describe('useChartRange', () => {
8
+ it('initializes with zero domain', () => {
9
+ const {result} = renderHook(() => useChartRange({xWindow: 300}));
10
+ expect(result.current.xDomain).toEqual([0, 0]);
11
+ expect(result.current.yDomain).toEqual([0, 1]);
12
+ });
13
+
14
+ it('uses fixed yDomain when provided', () => {
15
+ const {result} = renderHook(() =>
16
+ useChartRange({xWindow: 300, yDomain: [0, 100]}),
17
+ );
18
+ expect(result.current.yDomain).toEqual([0, 100]);
19
+ });
20
+
21
+ it('grows xDomain during warmup then slides', () => {
22
+ const {result} = renderHook(() => useChartRange({xWindow: 100}));
23
+
24
+ // During warmup: [0, x]
25
+ act(() => {
26
+ result.current.push(50, 10);
27
+ });
28
+ expect(result.current.xDomain).toEqual([0, 50]);
29
+
30
+ // Still warmup
31
+ act(() => {
32
+ result.current.push(80, 20);
33
+ });
34
+ expect(result.current.xDomain).toEqual([0, 80]);
35
+
36
+ // Full window: slides
37
+ act(() => {
38
+ result.current.push(150, 20);
39
+ });
40
+ expect(result.current.xDomain).toEqual([50, 150]);
41
+ });
42
+
43
+ it('auto-tracks y range with padding', () => {
44
+ const {result} = renderHook(() =>
45
+ useChartRange({xWindow: 100, yPadding: 0.1}),
46
+ );
47
+
48
+ act(() => {
49
+ result.current.push(1, 50);
50
+ });
51
+ // Single point: range=1 (fallback), pad=0.1
52
+ expect(result.current.yDomain[0]).toBeLessThan(50);
53
+ expect(result.current.yDomain[1]).toBeGreaterThan(50);
54
+
55
+ act(() => {
56
+ result.current.push(2, 100);
57
+ });
58
+ // Range 50-100, padding 10% = 5
59
+ expect(result.current.yDomain[0]).toBeCloseTo(45, 0);
60
+ expect(result.current.yDomain[1]).toBeCloseTo(105, 0);
61
+ });
62
+
63
+ it('does not auto-track y when fixed yDomain is set', () => {
64
+ const {result} = renderHook(() =>
65
+ useChartRange({xWindow: 100, yDomain: [0, 100]}),
66
+ );
67
+
68
+ act(() => {
69
+ result.current.push(1, 200);
70
+ });
71
+ expect(result.current.yDomain).toEqual([0, 100]);
72
+ });
73
+
74
+ it('centers y around zero when yCenter is true', () => {
75
+ const {result} = renderHook(() =>
76
+ useChartRange({xWindow: 100, yCenter: true, yPadding: 0}),
77
+ );
78
+
79
+ act(() => {
80
+ result.current.push(1, -30);
81
+ result.current.push(2, 10);
82
+ });
83
+ expect(result.current.yDomain[0]).toBe(-30);
84
+ expect(result.current.yDomain[1]).toBe(30);
85
+ });
86
+
87
+ it('resets state', () => {
88
+ const {result} = renderHook(() => useChartRange({xWindow: 200}));
89
+
90
+ act(() => {
91
+ result.current.push(500, 99);
92
+ });
93
+ expect(result.current.xDomain[1]).toBe(500);
94
+
95
+ act(() => {
96
+ result.current.reset();
97
+ });
98
+ expect(result.current.xDomain).toEqual([0, 0]);
99
+ expect(result.current.yDomain).toEqual([0, 1]);
100
+ });
101
+ });
@@ -0,0 +1,146 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file useChartRange.ts
5
+ * @output Hook that tracks streaming data ranges and provides domains for Chart
6
+ * @position Helper hook; sits between the data source and Chart props
7
+ *
8
+ * Manages xDomain/yDomain as state. Domain updates are synchronous with
9
+ * every push — no throttling. The chart's declared domain must always
10
+ * match the data being rendered (Tier 1 guarantee).
11
+ */
12
+
13
+ import {useState, useRef, useCallback} from 'react';
14
+ import type {ChartStreamGLHandle} from './ChartStreamGL';
15
+
16
+ export interface UseChartRangeOptions {
17
+ /** Sliding window size for x-axis (number of ticks visible). Required. */
18
+ xWindow: number;
19
+ /**
20
+ * Fixed y-axis domain. When provided, y auto-tracking is disabled.
21
+ * Use when the range is known (e.g. 0-100 for percentages).
22
+ */
23
+ yDomain?: [number, number];
24
+ /**
25
+ * Padding factor for auto-tracked y-axis (default: 0.1 = 10%).
26
+ * Applied symmetrically above max and below min.
27
+ */
28
+ yPadding?: number;
29
+ /**
30
+ * Anchor y=0 in the center of the y-axis (default: false).
31
+ * When true, y-domain is always symmetric around 0.
32
+ */
33
+ yCenter?: boolean;
34
+ }
35
+
36
+ export interface UseChartRangeReturn {
37
+ /** Current x-axis domain — pass to Chart xDomain prop */
38
+ xDomain: [number, number];
39
+ /** Current y-axis domain — pass to Chart yDomain prop */
40
+ yDomain: [number, number];
41
+ /**
42
+ * Push a data point. Updates domains synchronously, then optionally
43
+ * forwards to a stream ref.
44
+ */
45
+ push(
46
+ x: number,
47
+ y: number,
48
+ streamRef?: React.RefObject<ChartStreamGLHandle | null>,
49
+ ): void;
50
+ /** Reset all tracking state */
51
+ reset(): void;
52
+ }
53
+
54
+ /**
55
+ * Tracks streaming data ranges and provides xDomain/yDomain for Chart.
56
+ *
57
+ * Domain updates are synchronous with every push — no throttling, no lag.
58
+ * This ensures the chart's declared domain always matches the rendered data.
59
+ *
60
+ * @example
61
+ * ```
62
+ * const {xDomain, yDomain, push} = useChartRange({xWindow: 300, yPadding: 0.1});
63
+ *
64
+ * <Chart xDomain={xDomain} yDomain={yDomain} ...>
65
+ * <ChartStreamGL handleRef={streamRef} ... />
66
+ * </Chart>
67
+ * ```
68
+ */
69
+ export function useChartRange({
70
+ xWindow,
71
+ yDomain: fixedYDomain,
72
+ yPadding = 0.1,
73
+ yCenter = false,
74
+ }: UseChartRangeOptions): UseChartRangeReturn {
75
+ const [xDomain, setXDomain] = useState<[number, number]>([0, 0]);
76
+ const [yDomain, setYDomain] = useState<[number, number]>(
77
+ fixedYDomain ?? [0, 1],
78
+ );
79
+
80
+ const rangeRef = useRef({
81
+ yMin: fixedYDomain ? fixedYDomain[0] : Infinity,
82
+ yMax: fixedYDomain ? fixedYDomain[1] : -Infinity,
83
+ });
84
+
85
+ const push = useCallback(
86
+ (
87
+ x: number,
88
+ y: number,
89
+ streamRef?: React.RefObject<ChartStreamGLHandle | null>,
90
+ ) => {
91
+ // Forward to stream
92
+ streamRef?.current?.push(x, y);
93
+
94
+ // x domain: during warmup grow from [0, x], once full slide
95
+ const xMin = x >= xWindow ? x - xWindow : 0;
96
+ const xMax = x >= xWindow ? x : Math.max(x, 1);
97
+ setXDomain([xMin, xMax]);
98
+
99
+ // y domain: track min/max, update on every push
100
+ if (!fixedYDomain) {
101
+ const r = rangeRef.current;
102
+ let changed = false;
103
+ if (y < r.yMin) {
104
+ r.yMin = y;
105
+ changed = true;
106
+ }
107
+ if (y > r.yMax) {
108
+ r.yMax = y;
109
+ changed = true;
110
+ }
111
+
112
+ if (changed) {
113
+ const range = r.yMax - r.yMin || 1;
114
+ const pad = range * yPadding;
115
+ let min = r.yMin - pad;
116
+ let max = r.yMax + pad;
117
+
118
+ if (yCenter) {
119
+ const abs = Math.max(Math.abs(min), Math.abs(max));
120
+ min = -abs;
121
+ max = abs;
122
+ }
123
+
124
+ setYDomain([min, max]);
125
+ }
126
+ }
127
+ },
128
+ [xWindow, fixedYDomain, yPadding, yCenter],
129
+ );
130
+
131
+ const reset = useCallback(() => {
132
+ rangeRef.current = {
133
+ yMin: fixedYDomain ? fixedYDomain[0] : Infinity,
134
+ yMax: fixedYDomain ? fixedYDomain[1] : -Infinity,
135
+ };
136
+ setXDomain([0, 0]);
137
+ setYDomain(fixedYDomain ?? [0, 1]);
138
+ }, [fixedYDomain]);
139
+
140
+ return {
141
+ xDomain,
142
+ yDomain: fixedYDomain ?? yDomain,
143
+ push,
144
+ reset,
145
+ };
146
+ }
@@ -0,0 +1,31 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file utils.ts
5
+ * @output Shared utilities for chart components
6
+ * @position Internal helpers; consumed by mark, axis, and interaction components
7
+ */
8
+
9
+ import type {ScaleBand} from 'd3-scale';
10
+ import type {ChartScale} from './types';
11
+
12
+ /** Type guard for d3 band scales */
13
+ export function isBandScale(scale: ChartScale): scale is ScaleBand<string> {
14
+ return typeof scale === 'function' && 'bandwidth' in scale;
15
+ }
16
+
17
+ /**
18
+ * Get the x pixel position for a datum using the chart's xKey and xScale.
19
+ * For band scales, returns the center of the band.
20
+ */
21
+ export function xPixel(
22
+ d: Record<string, unknown>,
23
+ xKey: string,
24
+ xScale: ChartScale,
25
+ ): number {
26
+ const raw = d[xKey];
27
+ if (isBandScale(xScale)) {
28
+ return (xScale(String(raw)) ?? 0) + xScale.bandwidth() / 2;
29
+ }
30
+ return (xScale as (v: number) => number)(raw as number);
31
+ }
@@ -0,0 +1,192 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file webgl.ts
5
+ * @output Shared WebGL utilities for chart components
6
+ * @position Internal helpers; consumed by all GL mark components
7
+ *
8
+ * Provides:
9
+ * - Canvas mounting outside SVG (avoids foreignObject DPR blur)
10
+ * - Premultiplied alpha setup (correct compositing over page)
11
+ * - Shader compilation helpers
12
+ * - Smoothstep circle fragment for crisp point sprites
13
+ */
14
+
15
+ /** Compile a WebGL shader, returns null on failure */
16
+ export function compileShader(
17
+ gl: WebGLRenderingContext,
18
+ type: number,
19
+ src: string,
20
+ ): WebGLShader | null {
21
+ const s = gl.createShader(type);
22
+ if (!s) {
23
+ return null;
24
+ }
25
+ gl.shaderSource(s, src);
26
+ gl.compileShader(s);
27
+ if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) {
28
+ gl.deleteShader(s);
29
+ return null;
30
+ }
31
+ return s;
32
+ }
33
+
34
+ /** Link a vertex + fragment shader into a program */
35
+ export function createProgram(
36
+ gl: WebGLRenderingContext,
37
+ vertSrc: string,
38
+ fragSrc: string,
39
+ ): WebGLProgram | null {
40
+ const vs = compileShader(gl, gl.VERTEX_SHADER, vertSrc);
41
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, fragSrc);
42
+ if (!vs || !fs) {
43
+ return null;
44
+ }
45
+ const p = gl.createProgram();
46
+ if (!p) {
47
+ return null;
48
+ }
49
+ gl.attachShader(p, vs);
50
+ gl.attachShader(p, fs);
51
+ gl.linkProgram(p);
52
+ if (!gl.getProgramParameter(p, gl.LINK_STATUS)) {
53
+ gl.deleteProgram(p);
54
+ return null;
55
+ }
56
+ return p;
57
+ }
58
+
59
+ /** Parse hex (#RRGGBB) to [r, g, b] floats 0-1 */
60
+ export function hexToGL(hex: string): [number, number, number] {
61
+ const n = parseInt(hex.replace('#', ''), 16);
62
+ return [(n >> 16) / 255, ((n >> 8) & 0xff) / 255, (n & 0xff) / 255];
63
+ }
64
+
65
+ /** DPR with supersampling for crisp circles */
66
+ export function getCanvasDPR(): number {
67
+ return (window.devicePixelRatio || 2) * 2;
68
+ }
69
+
70
+ /**
71
+ * Create or get a WebGL context with correct alpha settings.
72
+ * Uses premultiplied alpha for correct compositing over the page.
73
+ */
74
+ export function getWebGLContext(
75
+ canvas: HTMLCanvasElement,
76
+ ): WebGLRenderingContext | null {
77
+ return canvas.getContext('webgl', {
78
+ alpha: true,
79
+ premultipliedAlpha: true,
80
+ antialias: true,
81
+ });
82
+ }
83
+
84
+ /**
85
+ * Set up standard GL state for chart rendering:
86
+ * - Clear with transparent
87
+ * - Enable premultiplied alpha blending
88
+ */
89
+ export function setupGLState(gl: WebGLRenderingContext): void {
90
+ gl.clearColor(0, 0, 0, 0);
91
+ gl.clear(gl.COLOR_BUFFER_BIT);
92
+ gl.enable(gl.BLEND);
93
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
94
+ }
95
+
96
+ /**
97
+ * Size a canvas for sharp rendering, accounting for DPR.
98
+ * Returns the DPR used.
99
+ */
100
+ export function sizeCanvas(
101
+ canvas: HTMLCanvasElement,
102
+ width: number,
103
+ height: number,
104
+ ): number {
105
+ const dpr = getCanvasDPR();
106
+ canvas.width = width * dpr;
107
+ canvas.height = height * dpr;
108
+ canvas.style.width = `${width}px`;
109
+ canvas.style.height = `${height}px`;
110
+ return dpr;
111
+ }
112
+
113
+ /**
114
+ * Mount a canvas as an absolute-positioned sibling to an SVG element.
115
+ * Automatically aligns with the SVG marker's position — no manual margin
116
+ * offset needed. This is a Tier 1 guarantee: the canvas lands exactly
117
+ * where the SVG content area is, regardless of chart margins or transforms.
118
+ *
119
+ * Call from a useEffect. Returns a cleanup function.
120
+ */
121
+ export function mountCanvasOverSVG(
122
+ svgMarker: SVGGraphicsElement,
123
+ canvas: HTMLCanvasElement,
124
+ width: number,
125
+ height: number,
126
+ ): (() => void) | undefined {
127
+ const svg = svgMarker.ownerSVGElement;
128
+ if (!svg) {
129
+ return;
130
+ }
131
+ const parent = svg.parentElement;
132
+ if (!parent) {
133
+ return;
134
+ }
135
+
136
+ if (getComputedStyle(parent).position === 'static') {
137
+ parent.style.position = 'relative';
138
+ }
139
+
140
+ canvas.style.position = 'absolute';
141
+ canvas.style.pointerEvents = 'none';
142
+
143
+ // Compute offset from the SVG marker's actual screen position.
144
+ // The marker sits inside the chart's <g transform="translate(margin)">
145
+ // so its bounding rect includes the margin offset automatically.
146
+ // This is a Tier 1 guarantee — we derive position from the SVG, not from props.
147
+ const parentRect = parent.getBoundingClientRect();
148
+ const markerCTM = svgMarker.getScreenCTM();
149
+ if (markerCTM) {
150
+ canvas.style.left = `${markerCTM.e - parentRect.left}px`;
151
+ canvas.style.top = `${markerCTM.f - parentRect.top}px`;
152
+ } else {
153
+ canvas.style.left = '0';
154
+ canvas.style.top = '0';
155
+ }
156
+ canvas.style.width = `${width}px`;
157
+ canvas.style.height = `${height}px`;
158
+
159
+ parent.appendChild(canvas);
160
+
161
+ return () => {
162
+ if (canvas.parentElement === parent) {
163
+ parent.removeChild(canvas);
164
+ }
165
+ };
166
+ }
167
+
168
+ /**
169
+ * GLSL fragment for premultiplied-alpha circle with smoothstep AA.
170
+ * Use in fragment shaders that render point sprites.
171
+ *
172
+ * Expects:
173
+ * - varying float v_alpha (the final alpha before edge AA)
174
+ * - uniform vec3 u_color
175
+ *
176
+ * Returns: gl_FragColor with premultiplied alpha
177
+ */
178
+ export const CIRCLE_FRAG_BODY = `
179
+ vec2 coord = gl_PointCoord - vec2(0.5);
180
+ float dist = length(coord);
181
+ if (dist > 0.5) discard;
182
+ float edge = 1.0 - smoothstep(0.48, 0.5, dist);
183
+ float a = v_alpha * edge;
184
+ gl_FragColor = vec4(u_color * a, a);
185
+ `;
186
+
187
+ /**
188
+ * Smoothstep compensation factor for gl_PointSize.
189
+ * The visible circle radius is 0.48 of the point sprite (smoothstep starts there),
190
+ * so we scale up by 1/0.96 to match SVG circle radius exactly.
191
+ */
192
+ export const POINT_SIZE_COMPENSATION = 1.0 / 0.96;