@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,90 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartSelect.tsx
5
+ * @output Click/tap to select data points. Pointer events.
6
+ */
7
+
8
+ import { useCallback } from 'react';
9
+ import { useChart } from "./ChartContext.js";
10
+ import { xPixel } from "./utils.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ export function ChartSelect({
13
+ onSelect,
14
+ onSelectionChange,
15
+ selected = [],
16
+ color = 'var(--color-accent)',
17
+ radius = 6
18
+ }) {
19
+ const {
20
+ width,
21
+ height,
22
+ data,
23
+ xKey,
24
+ xScale,
25
+ yScale
26
+ } = useChart();
27
+ const handlePointerUp = useCallback(e => {
28
+ const svg = e.currentTarget.ownerSVGElement;
29
+ if (!svg) {
30
+ return;
31
+ }
32
+ const pt = svg.createSVGPoint();
33
+ pt.x = e.clientX;
34
+ pt.y = e.clientY;
35
+ const local = pt.matrixTransform(e.currentTarget.getScreenCTM()?.inverse());
36
+ let closest = 0,
37
+ minDist = Infinity;
38
+ data.forEach((d, i) => {
39
+ const px = xPixel(d, xKey, xScale);
40
+ const numKeys = Object.keys(d).filter(k => k !== xKey && typeof d[k] === 'number');
41
+ const py = numKeys.length > 0 ? yScale(d[numKeys[0]]) : 0;
42
+ const dist = Math.hypot(px - local.x, py - local.y);
43
+ if (dist < minDist) {
44
+ minDist = dist;
45
+ closest = i;
46
+ }
47
+ });
48
+ if (minDist > 30) {
49
+ return;
50
+ }
51
+ onSelect?.(data[closest], closest);
52
+ if (onSelectionChange) {
53
+ if (e.shiftKey || e.metaKey) {
54
+ onSelectionChange(selected.includes(closest) ? selected.filter(i => i !== closest) : [...selected, closest]);
55
+ } else {
56
+ onSelectionChange([closest]);
57
+ }
58
+ }
59
+ }, [data, xKey, xScale, yScale, selected, onSelect, onSelectionChange]);
60
+ return /*#__PURE__*/_jsxs("g", {
61
+ children: [/*#__PURE__*/_jsx("rect", {
62
+ x: 0,
63
+ y: 0,
64
+ width: width,
65
+ height: height,
66
+ fill: "transparent",
67
+ style: {
68
+ cursor: 'pointer'
69
+ },
70
+ onPointerUp: handlePointerUp
71
+ }), selected.map(idx => {
72
+ if (idx < 0 || idx >= data.length) {
73
+ return null;
74
+ }
75
+ const d = data[idx];
76
+ const px = xPixel(d, xKey, xScale);
77
+ const yKey = Object.keys(d).find(k => k !== xKey && typeof d[k] === 'number');
78
+ const py = yKey ? yScale(d[yKey]) : 0;
79
+ return /*#__PURE__*/_jsx("circle", {
80
+ cx: px,
81
+ cy: py,
82
+ r: radius,
83
+ fill: "none",
84
+ stroke: color,
85
+ strokeWidth: 2,
86
+ pointerEvents: "none"
87
+ }, idx);
88
+ })]
89
+ });
90
+ }
@@ -0,0 +1,17 @@
1
+ import type { Ref } from 'react';
2
+ export interface ChartStreamGLProps {
3
+ /** Ref forwarded to the SVG marker element used to position the canvas. */
4
+ ref?: Ref<SVGGElement>;
5
+ /** Imperative handle ref for streaming data control. */
6
+ handleRef?: Ref<ChartStreamGLHandle>;
7
+ color: string;
8
+ bufferSize?: number;
9
+ lineWidth?: number;
10
+ opacity?: number;
11
+ }
12
+ export interface ChartStreamGLHandle {
13
+ push(x: number, y: number): void;
14
+ clear(): void;
15
+ }
16
+ export declare function ChartStreamGL({ ref, handleRef, color, bufferSize, lineWidth, opacity, }: ChartStreamGLProps): import("react").JSX.Element | null;
17
+ //# sourceMappingURL=ChartStreamGL.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartStreamGL.d.ts","sourceRoot":"","sources":["../../src/Chart/ChartStreamGL.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACvB,wDAAwD;IACxD,SAAS,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;CACf;AAqBD,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,SAAS,EACT,KAAK,EACL,UAAgB,EAChB,SAAa,EACb,OAAW,GACZ,EAAE,kBAAkB,sCA0HpB"}
@@ -0,0 +1,157 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartStreamGL.tsx
5
+ * @output WebGL streaming time-series line — ring buffer, canvas outside SVG
6
+ * @position Child of Chart; uses the chart's xScale/yScale for mapping
7
+ *
8
+ * Y-axis and x-axis domains are controlled by Chart.
9
+ * For streaming, the parent should update xDomain as new data arrives.
10
+ */
11
+
12
+ import { useRef, useEffect, useImperativeHandle, useCallback } from 'react';
13
+ import { mergeRefs } from '@astryxdesign/core/utils';
14
+ import { useChart } from "./ChartContext.js";
15
+ import { hexToGL, getWebGLContext, setupGLState, sizeCanvas, mountCanvasOverSVG, createProgram } from "./webgl.js";
16
+ import { jsx as _jsx } from "react/jsx-runtime";
17
+ const VERT = `
18
+ attribute vec2 a_position;
19
+ uniform vec2 u_resolution;
20
+ void main() {
21
+ vec2 clip = (a_position / u_resolution) * 2.0 - 1.0;
22
+ gl_Position = vec4(clip.x, -clip.y, 0.0, 1.0);
23
+ }
24
+ `;
25
+ const FRAG = `
26
+ precision mediump float;
27
+ uniform vec3 u_color;
28
+ uniform float u_opacity;
29
+ void main() {
30
+ float a = u_opacity;
31
+ gl_FragColor = vec4(u_color * a, a);
32
+ }
33
+ `;
34
+ export function ChartStreamGL({
35
+ ref,
36
+ handleRef,
37
+ color,
38
+ bufferSize = 500,
39
+ lineWidth = 2,
40
+ opacity = 1
41
+ }) {
42
+ const {
43
+ width,
44
+ height,
45
+ xScale,
46
+ yScale
47
+ } = useChart();
48
+ const canvasRef = useRef(null);
49
+ const glRef = useRef(null);
50
+ const programRef = useRef(null);
51
+ const bufRef = useRef(null);
52
+ const markerRef = useRef(null);
53
+ const ring = useRef({
54
+ data: new Float32Array(bufferSize * 2),
55
+ head: 0,
56
+ count: 0
57
+ });
58
+
59
+ // Mount canvas outside SVG
60
+ useEffect(() => {
61
+ const marker = markerRef.current;
62
+ if (!marker) {
63
+ return;
64
+ }
65
+ if (!canvasRef.current) {
66
+ canvasRef.current = document.createElement('canvas');
67
+ }
68
+ return mountCanvasOverSVG(marker, canvasRef.current, width, height);
69
+ }, [width, height]);
70
+
71
+ // Size canvas
72
+ useEffect(() => {
73
+ const canvas = canvasRef.current;
74
+ if (!canvas || width <= 0 || height <= 0) {
75
+ return;
76
+ }
77
+ sizeCanvas(canvas, width, height);
78
+ }, [width, height]);
79
+ const draw = useCallback(() => {
80
+ const canvas = canvasRef.current;
81
+ if (!canvas) {
82
+ return;
83
+ }
84
+ if (!glRef.current) {
85
+ glRef.current = getWebGLContext(canvas);
86
+ }
87
+ const gl = glRef.current;
88
+ if (!gl) {
89
+ return;
90
+ }
91
+ if (!programRef.current) {
92
+ programRef.current = createProgram(gl, VERT, FRAG);
93
+ }
94
+ const program = programRef.current;
95
+ if (!program) {
96
+ return;
97
+ }
98
+ if (!bufRef.current) {
99
+ bufRef.current = gl.createBuffer();
100
+ }
101
+ const {
102
+ data: ringData,
103
+ head,
104
+ count
105
+ } = ring.current;
106
+ if (count < 2) {
107
+ return;
108
+ }
109
+ const linearX = xScale;
110
+ const drawBuf = new Float32Array(count * 2);
111
+ for (let i = 0; i < count; i++) {
112
+ const idx = (head - count + i + bufferSize) % bufferSize * 2;
113
+ drawBuf[i * 2] = linearX(ringData[idx]);
114
+ drawBuf[i * 2 + 1] = yScale(ringData[idx + 1]);
115
+ }
116
+ gl.viewport(0, 0, canvas.width, canvas.height);
117
+ setupGLState(gl);
118
+ gl.useProgram(program);
119
+ gl.bindBuffer(gl.ARRAY_BUFFER, bufRef.current);
120
+ gl.bufferData(gl.ARRAY_BUFFER, drawBuf, gl.DYNAMIC_DRAW);
121
+ const aPos = gl.getAttribLocation(program, 'a_position');
122
+ gl.enableVertexAttribArray(aPos);
123
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
124
+ const [r, g, b] = hexToGL(color);
125
+ gl.uniform2f(gl.getUniformLocation(program, 'u_resolution'), width, height);
126
+ gl.uniform3f(gl.getUniformLocation(program, 'u_color'), r, g, b);
127
+ gl.uniform1f(gl.getUniformLocation(program, 'u_opacity'), opacity);
128
+ gl.lineWidth(lineWidth);
129
+ gl.drawArrays(gl.LINE_STRIP, 0, count);
130
+ }, [width, height, color, lineWidth, opacity, bufferSize, xScale, yScale]);
131
+ useImperativeHandle(handleRef, () => ({
132
+ push(x, y) {
133
+ const r = ring.current;
134
+ const idx = r.head * 2;
135
+ r.data[idx] = x;
136
+ r.data[idx + 1] = y;
137
+ r.head = (r.head + 1) % bufferSize;
138
+ r.count = Math.min(r.count + 1, bufferSize);
139
+ draw();
140
+ },
141
+ clear() {
142
+ ring.current.head = 0;
143
+ ring.current.count = 0;
144
+ const gl = glRef.current;
145
+ if (gl) {
146
+ gl.clearColor(0, 0, 0, 0);
147
+ gl.clear(gl.COLOR_BUFFER_BIT);
148
+ }
149
+ }
150
+ }), [bufferSize, draw]);
151
+ if (width <= 0 || height <= 0) {
152
+ return null;
153
+ }
154
+ return /*#__PURE__*/_jsx("g", {
155
+ ref: mergeRefs(markerRef, ref)
156
+ });
157
+ }
@@ -0,0 +1,85 @@
1
+ import { type ReactNode } from 'react';
2
+ /**
3
+ * Crosshair mode:
4
+ * - `'x'` — vertical line only (most common for time series)
5
+ * - `'y'` — horizontal line only
6
+ * - `'xy'` — both axes
7
+ * - `false` — no crosshair lines
8
+ */
9
+ export type ChartCrosshairMode = 'x' | 'y' | 'xy' | false;
10
+ export interface ChartTooltipProps {
11
+ /**
12
+ * Custom render function for tooltip content.
13
+ * Receives the nearest data point and its index.
14
+ * Return `null` to hide the tooltip card while keeping crosshair visible.
15
+ *
16
+ * @default Renders all keys as "key: value" lines
17
+ */
18
+ render?: (datum: Record<string, unknown>, index: number) => ReactNode;
19
+ /**
20
+ * Crosshair line display mode.
21
+ * - `'x'` — vertical crosshair line (default)
22
+ * - `'y'` — horizontal crosshair line
23
+ * - `'xy'` — both axes
24
+ * - `false` — no crosshair lines, tooltip only
25
+ *
26
+ * @default 'x'
27
+ */
28
+ crosshair?: ChartCrosshairMode;
29
+ /**
30
+ * Whether to show axis value labels on the crosshair lines.
31
+ * Only relevant when `crosshair` is not `false`.
32
+ *
33
+ * @default false
34
+ */
35
+ crosshairLabels?: boolean;
36
+ /**
37
+ * Whether to snap to the nearest data point (true) or follow
38
+ * the pointer freely (false). Snap mode finds the closest datum
39
+ * by x-distance and positions the tooltip at that point.
40
+ *
41
+ * @default true
42
+ */
43
+ snap?: boolean;
44
+ /**
45
+ * Format function for x-axis crosshair label.
46
+ */
47
+ xFormat?: (value: number | string | null) => string;
48
+ /**
49
+ * Format function for y-axis crosshair label.
50
+ */
51
+ yFormat?: (value: number) => string;
52
+ /**
53
+ * Color for crosshair lines.
54
+ * @default 'var(--color-border-emphasized)'
55
+ */
56
+ crosshairColor?: string;
57
+ /**
58
+ * Whether to show a dot indicator at the snapped data point.
59
+ * @default true
60
+ */
61
+ dot?: boolean;
62
+ }
63
+ /**
64
+ * Chart tooltip with integrated crosshair.
65
+ *
66
+ * Renders crosshair lines within the SVG and a floating tooltip card
67
+ * in the top layer (via Popover API, portaled outside the SVG).
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * // Default: vertical crosshair + tooltip card
72
+ * <ChartTooltip />
73
+ *
74
+ * // Both axes, with labels
75
+ * <ChartTooltip crosshair="xy" crosshairLabels />
76
+ *
77
+ * // Tooltip only, no crosshair lines
78
+ * <ChartTooltip crosshair={false} />
79
+ *
80
+ * // Custom render
81
+ * <ChartTooltip render={(d) => <span>{d.month}: ${d.revenue}</span>} />
82
+ * ```
83
+ */
84
+ export declare function ChartTooltip({ render, crosshair, crosshairLabels, snap, xFormat, yFormat, crosshairColor, dot, }: ChartTooltipProps): import("react").JSX.Element;
85
+ //# sourceMappingURL=ChartTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartTooltip.d.ts","sourceRoot":"","sources":["../../src/Chart/ChartTooltip.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAgC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAOpE;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAEtE;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IAEpD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAEpC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,SAAe,EACf,eAAuB,EACvB,IAAW,EACX,OAAO,EACP,OAAO,EACP,cAAiD,EACjD,GAAU,GACX,EAAE,iBAAiB,+BAyUnB"}
@@ -0,0 +1,335 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file ChartTooltip.tsx
5
+ * @output Hover tooltip with optional crosshair lines, rendered in the top layer
6
+ * @position Child of Chart; reads scales from context
7
+ *
8
+ * Combines tooltip content and crosshair display into one component.
9
+ * Uses the Astryx Layer system (Popover API) so the tooltip renders above
10
+ * all other content — portaled to the chart container div (outside SVG).
11
+ */
12
+
13
+ 'use client';
14
+
15
+ import { useState, useCallback, useRef } from 'react';
16
+ import { createPortal } from 'react-dom';
17
+ import { useLayer } from '@astryxdesign/core/Layer';
18
+ import { useChart } from "./ChartContext.js";
19
+ import { xPixel } from "./utils.js";
20
+
21
+ /**
22
+ * Crosshair mode:
23
+ * - `'x'` — vertical line only (most common for time series)
24
+ * - `'y'` — horizontal line only
25
+ * - `'xy'` — both axes
26
+ * - `false` — no crosshair lines
27
+ */
28
+ import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
29
+ /**
30
+ * Chart tooltip with integrated crosshair.
31
+ *
32
+ * Renders crosshair lines within the SVG and a floating tooltip card
33
+ * in the top layer (via Popover API, portaled outside the SVG).
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * // Default: vertical crosshair + tooltip card
38
+ * <ChartTooltip />
39
+ *
40
+ * // Both axes, with labels
41
+ * <ChartTooltip crosshair="xy" crosshairLabels />
42
+ *
43
+ * // Tooltip only, no crosshair lines
44
+ * <ChartTooltip crosshair={false} />
45
+ *
46
+ * // Custom render
47
+ * <ChartTooltip render={(d) => <span>{d.month}: ${d.revenue}</span>} />
48
+ * ```
49
+ */
50
+ export function ChartTooltip({
51
+ render,
52
+ crosshair = 'x',
53
+ crosshairLabels = false,
54
+ snap = true,
55
+ xFormat,
56
+ yFormat,
57
+ crosshairColor = 'var(--color-border-emphasized)',
58
+ dot = true
59
+ }) {
60
+ const {
61
+ data,
62
+ xKey,
63
+ xScale,
64
+ yScale,
65
+ width,
66
+ height,
67
+ svgRef,
68
+ pointerToData
69
+ } = useChart();
70
+ const [hoverState, setHoverState] = useState(null);
71
+
72
+ // Screen-space coords for the tooltip popover
73
+ const [tooltipCoords, setTooltipCoords] = useState({
74
+ x: 0,
75
+ y: 0
76
+ });
77
+ const layerContainerRef = useRef(null);
78
+ const active = useRef(false);
79
+ const layer = useLayer({
80
+ mode: 'fixed'
81
+ });
82
+
83
+ // Find nearest data point. Uses Euclidean distance for scatter (linear x)
84
+ // and x-only distance for categorical/time series (band x).
85
+ const findNearest = useCallback((px, py) => {
86
+ if (data.length === 0) {
87
+ return null;
88
+ }
89
+ let closestIdx = 0;
90
+ let minDist = Infinity;
91
+
92
+ // Determine y keys (all numeric keys that aren't xKey)
93
+ const yKeys = data.length > 0 ? Object.keys(data[0]).filter(k => k !== xKey && typeof data[0][k] === 'number') : [];
94
+ for (let i = 0; i < data.length; i++) {
95
+ const datum = data[i];
96
+ const datumPx = xPixel(datum, xKey, xScale);
97
+ const dx = datumPx - px;
98
+
99
+ // For each y key, compute distance to that point
100
+ let bestDistForDatum = Infinity;
101
+ let _bestYKey = yKeys[0];
102
+ for (const yk of yKeys) {
103
+ const yv = datum[yk];
104
+ if (typeof yv !== 'number') {
105
+ continue;
106
+ }
107
+ const datumPy = yScale(yv);
108
+ const dy = datumPy - py;
109
+ const dist = dx * dx + dy * dy; // squared euclidean
110
+ if (dist < bestDistForDatum) {
111
+ bestDistForDatum = dist;
112
+ _bestYKey = yk;
113
+ }
114
+ }
115
+ if (bestDistForDatum < minDist) {
116
+ minDist = bestDistForDatum;
117
+ closestIdx = i;
118
+ }
119
+ }
120
+ const datum = data[closestIdx];
121
+ const dpx = xPixel(datum, xKey, xScale);
122
+
123
+ // Use the y value of the closest key for this datum
124
+ let bestY = 0;
125
+ let bestPy = height / 2;
126
+ let bestDist = Infinity;
127
+ for (const yk of yKeys) {
128
+ const yv = datum[yk];
129
+ if (typeof yv !== 'number') {
130
+ continue;
131
+ }
132
+ const dpy = yScale(yv);
133
+ const dx = dpx - px;
134
+ const dy = dpy - py;
135
+ const dist = dx * dx + dy * dy;
136
+ if (dist < bestDist) {
137
+ bestDist = dist;
138
+ bestY = yv;
139
+ bestPy = dpy;
140
+ }
141
+ }
142
+ return {
143
+ index: closestIdx,
144
+ point: {
145
+ x: datum[xKey],
146
+ y: bestY,
147
+ px: dpx,
148
+ py: bestPy
149
+ }
150
+ };
151
+ }, [data, xKey, xScale, yScale, height]);
152
+ const updateTooltip = useCallback(e => {
153
+ const dataPoint = pointerToData(e);
154
+ const result = snap ? findNearest(dataPoint.px, dataPoint.py) : {
155
+ index: -1,
156
+ point: dataPoint
157
+ };
158
+ if (result) {
159
+ setHoverState(result);
160
+ setTooltipCoords({
161
+ x: e.clientX + 12,
162
+ y: e.clientY - 8
163
+ });
164
+ layer.show();
165
+ }
166
+
167
+ // Resolve portal container on first interaction
168
+ if (!layerContainerRef.current && svgRef.current) {
169
+ layerContainerRef.current = svgRef.current.parentElement;
170
+ }
171
+ }, [pointerToData, findNearest, snap, layer, svgRef]);
172
+
173
+ // Touch: tap to show, drag to scrub
174
+ const handlePointerDown = useCallback(e => {
175
+ if (e.pointerType !== 'mouse') {
176
+ e.preventDefault(); // blocks text selection on touch
177
+ active.current = true;
178
+ updateTooltip(e);
179
+ }
180
+ }, [updateTooltip]);
181
+
182
+ // Mouse: hover to show. Touch: drag to scrub (only if active).
183
+ const handlePointerMove = useCallback(e => {
184
+ if (e.pointerType !== 'mouse' && !active.current) {
185
+ return;
186
+ }
187
+ updateTooltip(e);
188
+ }, [updateTooltip]);
189
+
190
+ // Touch: lift to dismiss
191
+ const handlePointerUp = useCallback(() => {
192
+ if (active.current) {
193
+ active.current = false;
194
+ setHoverState(null);
195
+ layer.hide();
196
+ }
197
+ }, [layer]);
198
+ const handlePointerLeave = useCallback(() => {
199
+ if (!active.current) {
200
+ setHoverState(null);
201
+ layer.hide();
202
+ }
203
+ }, [layer]);
204
+ const fmtX = xFormat ?? (v => v != null ? typeof v === 'number' ? v.toFixed(1) : String(v) : '');
205
+ const fmtY = yFormat ?? (v => v.toFixed(1));
206
+ const datum = hoverState ? data[hoverState.index] : null;
207
+ const point = hoverState?.point ?? null;
208
+ const defaultRender = d => /*#__PURE__*/_jsx("div", {
209
+ style: {
210
+ display: 'flex',
211
+ flexDirection: 'column',
212
+ gap: 2,
213
+ fontSize: 12
214
+ },
215
+ children: Object.entries(d).map(([k, v]) => /*#__PURE__*/_jsxs("div", {
216
+ children: [/*#__PURE__*/_jsxs("span", {
217
+ style: {
218
+ color: 'var(--color-text-secondary)'
219
+ },
220
+ children: [k, ":"]
221
+ }), ' ', /*#__PURE__*/_jsx("span", {
222
+ style: {
223
+ fontWeight: 500
224
+ },
225
+ children: String(v)
226
+ })]
227
+ }, k))
228
+ });
229
+ const showX = crosshair === 'x' || crosshair === 'xy';
230
+ const showY = crosshair === 'y' || crosshair === 'xy';
231
+
232
+ // Portal target: the chart's container div (parent of the SVG)
233
+ const portalTarget = layerContainerRef.current ?? svgRef.current?.parentElement;
234
+ return /*#__PURE__*/_jsxs(_Fragment, {
235
+ children: [/*#__PURE__*/_jsxs("g", {
236
+ children: [/*#__PURE__*/_jsx("rect", {
237
+ x: 0,
238
+ y: 0,
239
+ width: width,
240
+ height: height,
241
+ fill: "transparent",
242
+ style: {
243
+ touchAction: 'none'
244
+ },
245
+ onPointerDown: handlePointerDown,
246
+ onPointerMove: handlePointerMove,
247
+ onPointerUp: handlePointerUp,
248
+ onPointerCancel: handlePointerUp,
249
+ onPointerLeave: handlePointerLeave
250
+ }), point && /*#__PURE__*/_jsxs(_Fragment, {
251
+ children: [showX && /*#__PURE__*/_jsx("line", {
252
+ x1: point.px,
253
+ x2: point.px,
254
+ y1: 0,
255
+ y2: height,
256
+ stroke: crosshairColor,
257
+ strokeWidth: 1,
258
+ strokeDasharray: "3 3",
259
+ pointerEvents: "none"
260
+ }), showY && /*#__PURE__*/_jsx("line", {
261
+ x1: 0,
262
+ x2: width,
263
+ y1: point.py,
264
+ y2: point.py,
265
+ stroke: crosshairColor,
266
+ strokeWidth: 1,
267
+ strokeDasharray: "3 3",
268
+ pointerEvents: "none"
269
+ }), dot && snap && hoverState && hoverState.index >= 0 && /*#__PURE__*/_jsx("circle", {
270
+ cx: point.px,
271
+ cy: point.py,
272
+ r: 4,
273
+ fill: "var(--color-background-surface)",
274
+ stroke: crosshairColor,
275
+ strokeWidth: 2,
276
+ pointerEvents: "none"
277
+ }), crosshairLabels && showX && point.x != null && /*#__PURE__*/_jsxs("g", {
278
+ transform: `translate(${point.px},${height})`,
279
+ pointerEvents: "none",
280
+ children: [/*#__PURE__*/_jsx("rect", {
281
+ x: -24,
282
+ y: 2,
283
+ width: 48,
284
+ height: 16,
285
+ rx: 4,
286
+ fill: "var(--color-background-popover)",
287
+ stroke: crosshairColor,
288
+ strokeWidth: 0.5
289
+ }), /*#__PURE__*/_jsx("text", {
290
+ y: 14,
291
+ textAnchor: "middle",
292
+ fontSize: 10,
293
+ fill: "var(--color-text-primary)",
294
+ children: fmtX(point.x)
295
+ })]
296
+ }), crosshairLabels && showY && /*#__PURE__*/_jsxs("g", {
297
+ transform: `translate(0,${point.py})`,
298
+ pointerEvents: "none",
299
+ children: [/*#__PURE__*/_jsx("rect", {
300
+ x: -48,
301
+ y: -8,
302
+ width: 44,
303
+ height: 16,
304
+ rx: 4,
305
+ fill: "var(--color-background-popover)",
306
+ stroke: crosshairColor,
307
+ strokeWidth: 0.5
308
+ }), /*#__PURE__*/_jsx("text", {
309
+ x: -26,
310
+ dy: "0.35em",
311
+ textAnchor: "middle",
312
+ fontSize: 10,
313
+ fill: "var(--color-text-primary)",
314
+ children: fmtY(point.y)
315
+ })]
316
+ })]
317
+ })]
318
+ }), portalTarget && /*#__PURE__*/createPortal(layer.render(datum && hoverState && hoverState.index >= 0 ? /*#__PURE__*/_jsx("div", {
319
+ style: {
320
+ background: 'var(--color-background-popover)',
321
+ border: '1px solid var(--color-border)',
322
+ borderRadius: 8,
323
+ padding: '8px 12px',
324
+ boxShadow: 'var(--shadow-med)',
325
+ whiteSpace: 'nowrap',
326
+ width: 'fit-content',
327
+ pointerEvents: 'none'
328
+ },
329
+ children: render ? render(datum, hoverState.index) : defaultRender(datum)
330
+ }) : null, {
331
+ x: tooltipCoords.x,
332
+ y: tooltipCoords.y
333
+ }), portalTarget)]
334
+ });
335
+ }