semiotic 2.0.3 → 3.0.0-beta.2

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 (508) hide show
  1. package/CLAUDE.md +828 -0
  2. package/README.md +215 -37
  3. package/ai/cli.js +48 -0
  4. package/ai/dist/ai/componentRegistry.js +45 -0
  5. package/ai/dist/ai/mcp-server.js +99 -0
  6. package/ai/dist/ai/renderHOCToSVG.js +77 -0
  7. package/ai/dist/src/components/Annotation.js +358 -0
  8. package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +369 -0
  9. package/ai/dist/src/components/Axis/Axis.js +374 -0
  10. package/ai/dist/src/components/Axis/axisTitle.js +14 -0
  11. package/ai/dist/src/components/Axis/index.js +7 -0
  12. package/ai/dist/src/components/Axis/summaryGraphic.js +37 -0
  13. package/ai/dist/src/components/Brush.js +84 -0
  14. package/ai/dist/src/components/ChartErrorBoundary.js +91 -0
  15. package/ai/dist/src/components/DividedLine.js +65 -0
  16. package/ai/dist/src/components/Legend.js +140 -0
  17. package/ai/dist/src/components/LinkedCharts.js +95 -0
  18. package/ai/dist/src/components/ThemeProvider.js +79 -0
  19. package/ai/dist/src/components/Tooltip/Tooltip.js +309 -0
  20. package/ai/dist/src/components/TooltipPositioner/index.js +132 -0
  21. package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +73 -0
  22. package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +254 -0
  23. package/ai/dist/src/components/annotationRules/baseRules.js +150 -0
  24. package/ai/dist/src/components/annotationRules/networkframeRules.js +196 -0
  25. package/ai/dist/src/components/annotationRules/xyframeRules.js +297 -0
  26. package/ai/dist/src/components/batchWork.js +35 -0
  27. package/ai/dist/src/components/charts/index.js +109 -0
  28. package/ai/dist/src/components/charts/network/ChordDiagram.js +142 -0
  29. package/ai/dist/src/components/charts/network/CirclePack.js +108 -0
  30. package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +121 -0
  31. package/ai/dist/src/components/charts/network/SankeyDiagram.js +155 -0
  32. package/ai/dist/src/components/charts/network/TreeDiagram.js +110 -0
  33. package/ai/dist/src/components/charts/network/Treemap.js +106 -0
  34. package/ai/dist/src/components/charts/ordinal/BarChart.js +156 -0
  35. package/ai/dist/src/components/charts/ordinal/BoxPlot.js +139 -0
  36. package/ai/dist/src/components/charts/ordinal/DonutChart.js +130 -0
  37. package/ai/dist/src/components/charts/ordinal/DotPlot.js +126 -0
  38. package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +129 -0
  39. package/ai/dist/src/components/charts/ordinal/Histogram.js +132 -0
  40. package/ai/dist/src/components/charts/ordinal/PieChart.js +128 -0
  41. package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +130 -0
  42. package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +130 -0
  43. package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +147 -0
  44. package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +138 -0
  45. package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +79 -0
  46. package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +114 -0
  47. package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +93 -0
  48. package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +105 -0
  49. package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +106 -0
  50. package/ai/dist/src/components/charts/shared/ChartError.js +72 -0
  51. package/ai/dist/src/components/charts/shared/colorUtils.js +138 -0
  52. package/ai/dist/src/components/charts/shared/formatUtils.js +213 -0
  53. package/ai/dist/src/components/charts/shared/hooks.js +49 -0
  54. package/ai/dist/src/components/charts/shared/legendUtils.js +57 -0
  55. package/ai/dist/src/components/charts/shared/selectionUtils.js +67 -0
  56. package/ai/dist/src/components/charts/shared/tooltipUtils.js +79 -0
  57. package/ai/dist/src/components/charts/shared/types.js +2 -0
  58. package/ai/dist/src/components/charts/shared/validateChartData.js +82 -0
  59. package/ai/dist/src/components/charts/shared/validateProps.js +736 -0
  60. package/ai/dist/src/components/charts/xy/AreaChart.js +230 -0
  61. package/ai/dist/src/components/charts/xy/BubbleChart.js +251 -0
  62. package/ai/dist/src/components/charts/xy/Heatmap.js +235 -0
  63. package/ai/dist/src/components/charts/xy/LineChart.js +307 -0
  64. package/ai/dist/src/components/charts/xy/MinimapChart.js +298 -0
  65. package/ai/dist/src/components/charts/xy/Scatterplot.js +172 -0
  66. package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +426 -0
  67. package/ai/dist/src/components/charts/xy/StackedAreaChart.js +231 -0
  68. package/ai/dist/src/components/constants/coordinateNames.js +11 -0
  69. package/ai/dist/src/components/constants/frame_props.js +251 -0
  70. package/ai/dist/src/components/data/dataFunctions.js +487 -0
  71. package/ai/dist/src/components/data/multiAccessorUtils.js +14 -0
  72. package/ai/dist/src/components/data/transforms.js +143 -0
  73. package/ai/dist/src/components/data/unflowedFunctions.js +5 -0
  74. package/ai/dist/src/components/export/exportChart.js +121 -0
  75. package/ai/dist/src/components/generic_utilities/functions.js +5 -0
  76. package/ai/dist/src/components/geometry/areaDrawing.js +312 -0
  77. package/ai/dist/src/components/geometry/contourLayout.js +73 -0
  78. package/ai/dist/src/components/geometry/hexbinLayout.js +163 -0
  79. package/ai/dist/src/components/geometry/lineDrawing.js +356 -0
  80. package/ai/dist/src/components/geometry/sankeyLinks.js +331 -0
  81. package/ai/dist/src/components/geometry/summaryLayouts.js +136 -0
  82. package/ai/dist/src/components/index.js +18 -0
  83. package/ai/dist/src/components/processing/InteractionItems.js +223 -0
  84. package/ai/dist/src/components/processing/hierarchyUtils.js +104 -0
  85. package/ai/dist/src/components/processing/layouts/chordLayout.js +58 -0
  86. package/ai/dist/src/components/processing/layouts/forceLayout.js +142 -0
  87. package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +31 -0
  88. package/ai/dist/src/components/processing/layouts/index.js +32 -0
  89. package/ai/dist/src/components/processing/layouts/sankeyLayout.js +96 -0
  90. package/ai/dist/src/components/processing/layouts/simpleLayouts.js +34 -0
  91. package/ai/dist/src/components/processing/layouts/types.js +2 -0
  92. package/ai/dist/src/components/processing/networkDefaults.js +39 -0
  93. package/ai/dist/src/components/realtime/BinAccumulator.js +36 -0
  94. package/ai/dist/src/components/realtime/IncrementalExtent.js +55 -0
  95. package/ai/dist/src/components/realtime/RingBuffer.js +104 -0
  96. package/ai/dist/src/components/realtime/renderers/barRenderer.js +133 -0
  97. package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +7 -0
  98. package/ai/dist/src/components/realtime/renderers/lineRenderer.js +164 -0
  99. package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +91 -0
  100. package/ai/dist/src/components/realtime/renderers/types.js +2 -0
  101. package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +163 -0
  102. package/ai/dist/src/components/realtime/types.js +2 -0
  103. package/ai/dist/src/components/semiotic-ai.js +89 -0
  104. package/ai/dist/src/components/semiotic-data.js +12 -0
  105. package/ai/dist/src/components/semiotic-network.js +38 -0
  106. package/ai/dist/src/components/semiotic-ordinal.js +28 -0
  107. package/ai/dist/src/components/semiotic-realtime.js +30 -0
  108. package/ai/dist/src/components/semiotic-server.js +8 -0
  109. package/ai/dist/src/components/semiotic-xy.js +35 -0
  110. package/ai/dist/src/components/semiotic.js +109 -0
  111. package/ai/dist/src/components/server/renderToStaticSVG.js +594 -0
  112. package/ai/dist/src/components/store/SelectionStore.js +91 -0
  113. package/ai/dist/src/components/store/ThemeStore.js +78 -0
  114. package/ai/dist/src/components/store/TooltipStore.js +13 -0
  115. package/ai/dist/src/components/store/createStore.js +81 -0
  116. package/ai/dist/src/components/store/useSelection.js +133 -0
  117. package/ai/dist/src/components/stream/CanvasHitTester.js +164 -0
  118. package/ai/dist/src/components/stream/DataSourceAdapter.js +99 -0
  119. package/ai/dist/src/components/stream/MarginalGraphics.js +266 -0
  120. package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +228 -0
  121. package/ai/dist/src/components/stream/NetworkPipelineStore.js +498 -0
  122. package/ai/dist/src/components/stream/NetworkSVGOverlay.js +70 -0
  123. package/ai/dist/src/components/stream/NetworkSceneGraph.js +38 -0
  124. package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +146 -0
  125. package/ai/dist/src/components/stream/OrdinalPipelineStore.js +786 -0
  126. package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +130 -0
  127. package/ai/dist/src/components/stream/ParticlePool.js +174 -0
  128. package/ai/dist/src/components/stream/PipelineStore.js +1243 -0
  129. package/ai/dist/src/components/stream/SVGOverlay.js +129 -0
  130. package/ai/dist/src/components/stream/SceneGraph.js +132 -0
  131. package/ai/dist/src/components/stream/StreamNetworkFrame.js +561 -0
  132. package/ai/dist/src/components/stream/StreamOrdinalFrame.js +492 -0
  133. package/ai/dist/src/components/stream/StreamXYFrame.js +590 -0
  134. package/ai/dist/src/components/stream/accessorUtils.js +20 -0
  135. package/ai/dist/src/components/stream/index.js +32 -0
  136. package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +352 -0
  137. package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +230 -0
  138. package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +568 -0
  139. package/ai/dist/src/components/stream/layouts/index.js +28 -0
  140. package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +245 -0
  141. package/ai/dist/src/components/stream/networkTypes.js +17 -0
  142. package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +126 -0
  143. package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +62 -0
  144. package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +33 -0
  145. package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +63 -0
  146. package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +278 -0
  147. package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +30 -0
  148. package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +2 -0
  149. package/ai/dist/src/components/stream/ordinalTypes.js +2 -0
  150. package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +48 -0
  151. package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +70 -0
  152. package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +75 -0
  153. package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +28 -0
  154. package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +47 -0
  155. package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +31 -0
  156. package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +140 -0
  157. package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +38 -0
  158. package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +37 -0
  159. package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +102 -0
  160. package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +63 -0
  161. package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +35 -0
  162. package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +38 -0
  163. package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +10 -0
  164. package/ai/dist/src/components/stream/renderers/types.js +2 -0
  165. package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +47 -0
  166. package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +38 -0
  167. package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +33 -0
  168. package/ai/dist/src/components/stream/types.js +2 -0
  169. package/ai/dist/src/components/types/annotationTypes.js +2 -0
  170. package/ai/dist/src/components/types/canvasTypes.js +2 -0
  171. package/ai/dist/src/components/types/generalTypes.js +2 -0
  172. package/ai/dist/src/components/types/interactionTypes.js +2 -0
  173. package/ai/dist/src/components/types/legendTypes.js +2 -0
  174. package/ai/dist/src/components/types/networkTypes.js +2 -0
  175. package/ai/dist/src/components/types/ordinalTypes.js +2 -0
  176. package/ai/dist/src/components/types/xyTypes.js +2 -0
  177. package/ai/dist/src/components/useBoundingRect.js +24 -0
  178. package/ai/dist/src/components/visualizationLayerBehavior/axis.js +301 -0
  179. package/ai/dist/src/components/visualizationLayerBehavior/general.js +435 -0
  180. package/ai/dist/src/setupTests.js +4 -0
  181. package/ai/examples.md +489 -0
  182. package/ai/schema.json +1338 -0
  183. package/ai/system-prompt.md +41 -0
  184. package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -1
  185. package/dist/Axis/axisTitle.d.ts +3 -3
  186. package/dist/Axis/summaryGraphic.d.ts +1 -1
  187. package/dist/ChartErrorBoundary.d.ts +39 -0
  188. package/dist/LinkedCharts.d.ts +42 -0
  189. package/dist/ThemeProvider.d.ts +12 -0
  190. package/dist/Tooltip/Tooltip.d.ts +141 -0
  191. package/dist/TooltipPositioner/index.d.ts +1 -1
  192. package/dist/annotationLayerBehavior/annotationHandling.d.ts +2 -2
  193. package/dist/annotationRules/networkframeRules.d.ts +2 -2
  194. package/dist/annotationRules/xyframeRules.d.ts +2 -2
  195. package/dist/batchWork.d.ts +1 -1
  196. package/dist/charts/index.d.ts +74 -0
  197. package/dist/charts/network/ChordDiagram.d.ts +36 -0
  198. package/dist/charts/network/CirclePack.d.ts +32 -0
  199. package/dist/charts/network/ForceDirectedGraph.d.ts +38 -0
  200. package/dist/charts/network/SankeyDiagram.d.ts +38 -0
  201. package/dist/charts/network/TreeDiagram.d.ts +34 -0
  202. package/dist/charts/network/Treemap.d.ts +33 -0
  203. package/dist/charts/ordinal/BarChart.d.ts +32 -0
  204. package/dist/charts/ordinal/BoxPlot.d.ts +27 -0
  205. package/dist/charts/ordinal/DonutChart.d.ts +23 -0
  206. package/dist/charts/ordinal/DotPlot.d.ts +27 -0
  207. package/dist/charts/ordinal/GroupedBarChart.d.ts +26 -0
  208. package/dist/charts/ordinal/Histogram.d.ts +26 -0
  209. package/dist/charts/ordinal/PieChart.d.ts +21 -0
  210. package/dist/charts/ordinal/RidgelinePlot.d.ts +34 -0
  211. package/dist/charts/ordinal/StackedBarChart.d.ts +27 -0
  212. package/dist/charts/ordinal/SwarmPlot.d.ts +29 -0
  213. package/dist/charts/ordinal/ViolinPlot.d.ts +28 -0
  214. package/dist/charts/realtime/RealtimeHeatmap.d.ts +95 -0
  215. package/dist/charts/realtime/RealtimeHistogram.d.ts +119 -0
  216. package/dist/charts/realtime/RealtimeLineChart.d.ts +98 -0
  217. package/dist/charts/realtime/RealtimeSwarmChart.d.ts +100 -0
  218. package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +97 -0
  219. package/dist/charts/shared/ChartError.d.ts +19 -0
  220. package/dist/charts/shared/colorUtils.d.ts +62 -0
  221. package/dist/charts/shared/formatUtils.d.ts +94 -0
  222. package/dist/charts/shared/hooks.d.ts +20 -0
  223. package/dist/charts/shared/legendUtils.d.ts +32 -0
  224. package/dist/charts/shared/selectionUtils.d.ts +51 -0
  225. package/dist/charts/shared/tooltipUtils.d.ts +18 -0
  226. package/dist/charts/shared/types.d.ts +97 -0
  227. package/dist/charts/shared/validateChartData.d.ts +41 -0
  228. package/dist/charts/shared/validateProps.d.ts +18 -0
  229. package/dist/charts/xy/AreaChart.d.ts +130 -0
  230. package/dist/charts/xy/BubbleChart.d.ts +164 -0
  231. package/dist/charts/xy/Heatmap.d.ts +156 -0
  232. package/dist/charts/xy/LineChart.d.ts +196 -0
  233. package/dist/charts/xy/MinimapChart.d.ts +73 -0
  234. package/dist/charts/xy/Scatterplot.d.ts +55 -0
  235. package/dist/charts/xy/ScatterplotMatrix.d.ts +71 -0
  236. package/dist/charts/xy/StackedAreaChart.d.ts +134 -0
  237. package/dist/constants/frame_props.d.ts +9 -0
  238. package/dist/data/dataFunctions.d.ts +10 -11
  239. package/dist/data/transforms.d.ts +45 -0
  240. package/dist/export/exportChart.d.ts +16 -0
  241. package/dist/{svg → geometry}/areaDrawing.d.ts +3 -13
  242. package/dist/geometry/contourLayout.d.ts +6 -0
  243. package/dist/geometry/hexbinLayout.d.ts +7 -0
  244. package/dist/{svg → geometry}/lineDrawing.d.ts +7 -35
  245. package/dist/geometry/sankeyLinks.d.ts +2 -0
  246. package/dist/geometry/summaryLayouts.d.ts +45 -0
  247. package/dist/index.d.ts +1 -125
  248. package/dist/network.js +7495 -0
  249. package/dist/network.js.map +1 -0
  250. package/dist/network.min.js +1 -0
  251. package/dist/network.module.js +7458 -0
  252. package/dist/network.module.js.map +1 -0
  253. package/dist/network.module.min.js +1 -0
  254. package/dist/ordinal.js +6497 -0
  255. package/dist/ordinal.js.map +1 -0
  256. package/dist/ordinal.min.js +1 -0
  257. package/dist/ordinal.module.js +6465 -0
  258. package/dist/ordinal.module.js.map +1 -0
  259. package/dist/ordinal.module.min.js +1 -0
  260. package/dist/processing/InteractionItems.d.ts +5 -4
  261. package/dist/processing/hierarchyUtils.d.ts +16 -0
  262. package/dist/processing/layouts/chordLayout.d.ts +2 -0
  263. package/dist/processing/layouts/forceLayout.d.ts +3 -0
  264. package/dist/processing/layouts/hierarchyLayout.d.ts +10 -0
  265. package/dist/processing/layouts/index.d.ts +8 -0
  266. package/dist/processing/layouts/sankeyLayout.d.ts +8 -0
  267. package/dist/processing/layouts/simpleLayouts.d.ts +7 -0
  268. package/dist/processing/layouts/types.d.ts +17 -0
  269. package/dist/processing/networkDefaults.d.ts +36 -0
  270. package/dist/realtime/BinAccumulator.d.ts +8 -0
  271. package/dist/realtime/IncrementalExtent.d.ts +13 -0
  272. package/dist/realtime/RingBuffer.d.ts +19 -0
  273. package/dist/realtime/renderers/barRenderer.d.ts +2 -0
  274. package/dist/realtime/renderers/candlestickRenderer.d.ts +2 -0
  275. package/dist/realtime/renderers/lineRenderer.d.ts +2 -0
  276. package/dist/realtime/renderers/swarmRenderer.d.ts +2 -0
  277. package/dist/realtime/renderers/types.d.ts +9 -0
  278. package/dist/realtime/renderers/waterfallRenderer.d.ts +3 -0
  279. package/dist/realtime/types.d.ts +113 -0
  280. package/dist/realtime.js +7072 -0
  281. package/dist/realtime.js.map +1 -0
  282. package/dist/realtime.min.js +1 -0
  283. package/dist/realtime.module.js +7043 -0
  284. package/dist/realtime.module.js.map +1 -0
  285. package/dist/realtime.module.min.js +1 -0
  286. package/dist/semiotic-ai.d.ts +36 -0
  287. package/dist/semiotic-ai.js +13323 -0
  288. package/dist/semiotic-ai.js.map +1 -0
  289. package/dist/semiotic-ai.min.js +1 -0
  290. package/dist/semiotic-ai.module.js +13264 -0
  291. package/dist/semiotic-ai.module.js.map +1 -0
  292. package/dist/semiotic-ai.module.min.js +1 -0
  293. package/dist/semiotic-data.d.ts +5 -0
  294. package/dist/semiotic-data.js +141 -0
  295. package/dist/semiotic-data.js.map +1 -0
  296. package/dist/semiotic-data.min.js +1 -0
  297. package/dist/semiotic-data.module.js +136 -0
  298. package/dist/semiotic-data.module.js.map +1 -0
  299. package/dist/semiotic-data.module.min.js +1 -0
  300. package/dist/semiotic-network.d.ts +23 -0
  301. package/dist/semiotic-ordinal.d.ts +19 -0
  302. package/dist/semiotic-realtime.d.ts +22 -0
  303. package/dist/semiotic-server.d.ts +1 -0
  304. package/dist/semiotic-xy.d.ts +21 -0
  305. package/dist/semiotic.d.ts +41 -28
  306. package/dist/semiotic.js +16257 -13130
  307. package/dist/semiotic.js.map +1 -0
  308. package/dist/semiotic.min.js +1 -0
  309. package/dist/semiotic.module.js +16198 -13100
  310. package/dist/semiotic.module.js.map +1 -0
  311. package/dist/semiotic.module.min.js +1 -0
  312. package/dist/server/renderToStaticSVG.d.ts +9 -0
  313. package/dist/server.js +5191 -0
  314. package/dist/server.js.map +1 -0
  315. package/dist/server.min.js +1 -0
  316. package/dist/server.module.js +5166 -0
  317. package/dist/server.module.js.map +1 -0
  318. package/dist/server.module.min.js +1 -0
  319. package/dist/store/SelectionStore.d.ts +29 -0
  320. package/dist/store/ThemeStore.d.ts +26 -0
  321. package/dist/store/useSelection.d.ts +66 -0
  322. package/dist/stream/CanvasHitTester.d.ts +18 -0
  323. package/dist/stream/DataSourceAdapter.d.ts +32 -0
  324. package/dist/stream/MarginalGraphics.d.ts +19 -0
  325. package/dist/stream/NetworkCanvasHitTester.d.ts +14 -0
  326. package/dist/stream/NetworkPipelineStore.d.ts +74 -0
  327. package/dist/stream/NetworkSVGOverlay.d.ts +40 -0
  328. package/dist/stream/NetworkSceneGraph.d.ts +14 -0
  329. package/dist/stream/OrdinalCanvasHitTester.d.ts +9 -0
  330. package/dist/stream/OrdinalPipelineStore.d.ts +65 -0
  331. package/dist/stream/OrdinalSVGOverlay.d.ts +34 -0
  332. package/dist/stream/ParticlePool.d.ts +28 -0
  333. package/dist/stream/PipelineStore.d.ts +161 -0
  334. package/dist/stream/SVGOverlay.d.ts +37 -0
  335. package/dist/stream/SceneGraph.d.ts +16 -0
  336. package/dist/stream/StreamNetworkFrame.d.ts +4 -0
  337. package/dist/stream/StreamOrdinalFrame.d.ts +4 -0
  338. package/dist/stream/StreamXYFrame.d.ts +4 -0
  339. package/dist/stream/accessorUtils.d.ts +2 -0
  340. package/dist/stream/index.d.ts +16 -0
  341. package/dist/stream/layouts/chordLayoutPlugin.d.ts +8 -0
  342. package/dist/stream/layouts/forceLayoutPlugin.d.ts +9 -0
  343. package/dist/stream/layouts/hierarchyLayoutPlugin.d.ts +17 -0
  344. package/dist/stream/layouts/index.d.ts +11 -0
  345. package/dist/stream/layouts/sankeyLayoutPlugin.d.ts +8 -0
  346. package/dist/stream/networkTypes.d.ts +346 -0
  347. package/dist/stream/ordinalSceneBuilders/barScene.d.ts +4 -0
  348. package/dist/stream/ordinalSceneBuilders/connectorScene.d.ts +3 -0
  349. package/dist/stream/ordinalSceneBuilders/pieScene.d.ts +3 -0
  350. package/dist/stream/ordinalSceneBuilders/pointScene.d.ts +4 -0
  351. package/dist/stream/ordinalSceneBuilders/statisticalScene.d.ts +6 -0
  352. package/dist/stream/ordinalSceneBuilders/timelineScene.d.ts +3 -0
  353. package/dist/stream/ordinalSceneBuilders/types.d.ts +21 -0
  354. package/dist/stream/ordinalTypes.d.ts +225 -0
  355. package/dist/stream/renderers/areaCanvasRenderer.d.ts +7 -0
  356. package/dist/stream/renderers/barCanvasRenderer.d.ts +7 -0
  357. package/dist/stream/renderers/boxplotCanvasRenderer.d.ts +2 -0
  358. package/dist/stream/renderers/candlestickCanvasRenderer.d.ts +2 -0
  359. package/dist/stream/renderers/connectorCanvasRenderer.d.ts +2 -0
  360. package/dist/stream/renderers/heatmapCanvasRenderer.d.ts +6 -0
  361. package/dist/stream/renderers/lineCanvasRenderer.d.ts +8 -0
  362. package/dist/stream/renderers/networkArcRenderer.d.ts +5 -0
  363. package/dist/stream/renderers/networkCircleRenderer.d.ts +5 -0
  364. package/dist/stream/renderers/networkEdgeRenderer.d.ts +10 -0
  365. package/dist/stream/renderers/networkParticleRenderer.d.ts +11 -0
  366. package/dist/stream/renderers/networkRectRenderer.d.ts +5 -0
  367. package/dist/stream/renderers/pointCanvasRenderer.d.ts +7 -0
  368. package/dist/stream/renderers/swarmCanvasRenderer.d.ts +7 -0
  369. package/dist/stream/renderers/types.d.ts +7 -0
  370. package/dist/stream/renderers/violinCanvasRenderer.d.ts +2 -0
  371. package/dist/stream/renderers/waterfallCanvasRenderer.d.ts +8 -0
  372. package/dist/stream/renderers/wedgeCanvasRenderer.d.ts +2 -0
  373. package/dist/stream/types.d.ts +307 -0
  374. package/dist/types/annotationTypes.d.ts +13 -18
  375. package/dist/types/canvasTypes.d.ts +1 -1
  376. package/dist/types/generalTypes.d.ts +41 -36
  377. package/dist/types/interactionTypes.d.ts +7 -9
  378. package/dist/types/legendTypes.d.ts +2 -2
  379. package/dist/types/networkTypes.d.ts +40 -30
  380. package/dist/types/ordinalTypes.d.ts +27 -18
  381. package/dist/types/xyTypes.d.ts +1 -95
  382. package/dist/visualizationLayerBehavior/axis.d.ts +3 -5
  383. package/dist/visualizationLayerBehavior/general.d.ts +8 -12
  384. package/dist/xy.js +6993 -0
  385. package/dist/xy.js.map +1 -0
  386. package/dist/xy.min.js +1 -0
  387. package/dist/xy.module.js +6957 -0
  388. package/dist/xy.module.js.map +1 -0
  389. package/dist/xy.module.min.js +1 -0
  390. package/package.json +123 -67
  391. package/dist/AnnotationLayer/helpers.d.ts +0 -6
  392. package/dist/AnnotationLayer/index.d.ts +0 -2
  393. package/dist/FacetController.d.ts +0 -12
  394. package/dist/Frame.d.ts +0 -2
  395. package/dist/InteractionLayer.d.ts +0 -3
  396. package/dist/Mark/Mark.d.ts +0 -3
  397. package/dist/Mark/Mark.types.d.ts +0 -10
  398. package/dist/Mark/constants/markTransition.d.ts +0 -10
  399. package/dist/Mark/markBehavior/drawing.d.ts +0 -13
  400. package/dist/MiniMap.d.ts +0 -14
  401. package/dist/MinimapXYFrame.d.ts +0 -10
  402. package/dist/NetworkFrame.d.ts +0 -4
  403. package/dist/OrdinalFrame.d.ts +0 -4
  404. package/dist/ResponsiveFrame.d.ts +0 -22
  405. package/dist/ResponsiveMinimapXYFrame.d.ts +0 -6
  406. package/dist/ResponsiveNetworkFrame.d.ts +0 -6
  407. package/dist/ResponsiveOrdinalFrame.d.ts +0 -6
  408. package/dist/ResponsiveXYFrame.d.ts +0 -6
  409. package/dist/SpanOrDiv.d.ts +0 -10
  410. package/dist/SparkFrame.d.ts +0 -14
  411. package/dist/SparkNetworkFrame.d.ts +0 -5
  412. package/dist/SparkOrdinalFrame.d.ts +0 -5
  413. package/dist/SparkXYFrame.d.ts +0 -5
  414. package/dist/VisualizationLayer.d.ts +0 -33
  415. package/dist/XYFrame.d.ts +0 -4
  416. package/dist/annotationRules/orframeRules.d.ts +0 -105
  417. package/dist/components/Annotation.d.ts +0 -3
  418. package/dist/components/AnnotationLayer/AnnotationLayer.d.ts +0 -26
  419. package/dist/components/Axis/Axis.d.ts +0 -7
  420. package/dist/components/Axis/axisTitle.d.ts +0 -10
  421. package/dist/components/Axis/index.d.ts +0 -2
  422. package/dist/components/Axis/summaryGraphic.d.ts +0 -17
  423. package/dist/components/Brush.d.ts +0 -12
  424. package/dist/components/DividedLine.d.ts +0 -16
  425. package/dist/components/FacetController.d.ts +0 -12
  426. package/dist/components/Frame.d.ts +0 -2
  427. package/dist/components/InteractionLayer.d.ts +0 -3
  428. package/dist/components/Legend.d.ts +0 -3
  429. package/dist/components/Mark/Mark.d.ts +0 -3
  430. package/dist/components/Mark/Mark.types.d.ts +0 -10
  431. package/dist/components/Mark/markBehavior/drawing.d.ts +0 -13
  432. package/dist/components/MiniMap.d.ts +0 -14
  433. package/dist/components/MinimapXYFrame.d.ts +0 -10
  434. package/dist/components/NetworkFrame.d.ts +0 -4
  435. package/dist/components/OrdinalFrame.d.ts +0 -4
  436. package/dist/components/ResponsiveFrame.d.ts +0 -22
  437. package/dist/components/ResponsiveMinimapXYFrame.d.ts +0 -6
  438. package/dist/components/ResponsiveNetworkFrame.d.ts +0 -6
  439. package/dist/components/ResponsiveOrdinalFrame.d.ts +0 -6
  440. package/dist/components/ResponsiveXYFrame.d.ts +0 -6
  441. package/dist/components/SpanOrDiv.d.ts +0 -10
  442. package/dist/components/SparkFrame.d.ts +0 -14
  443. package/dist/components/SparkNetworkFrame.d.ts +0 -5
  444. package/dist/components/SparkOrdinalFrame.d.ts +0 -5
  445. package/dist/components/SparkXYFrame.d.ts +0 -5
  446. package/dist/components/TooltipPositioner/index.d.ts +0 -7
  447. package/dist/components/VisualizationLayer.d.ts +0 -33
  448. package/dist/components/XYFrame.d.ts +0 -4
  449. package/dist/components/annotationLayerBehavior/annotationHandling.d.ts +0 -19
  450. package/dist/components/annotationLayerBehavior/d3labeler.d.ts +0 -9
  451. package/dist/components/annotationRules/baseRules.d.ts +0 -25
  452. package/dist/components/annotationRules/networkframeRules.d.ts +0 -48
  453. package/dist/components/annotationRules/orframeRules.d.ts +0 -105
  454. package/dist/components/annotationRules/xyframeRules.d.ts +0 -117
  455. package/dist/components/batchWork.d.ts +0 -6
  456. package/dist/components/constants/coordinateNames.d.ts +0 -8
  457. package/dist/components/constants/frame_props.d.ts +0 -4
  458. package/dist/components/constants/jsx.d.ts +0 -19
  459. package/dist/components/data/dataFunctions.d.ts +0 -46
  460. package/dist/components/data/multiAccessorUtils.d.ts +0 -1
  461. package/dist/components/data/unflowedFunctions.d.ts +0 -1
  462. package/dist/components/generic_utilities/functions.d.ts +0 -1
  463. package/dist/components/index.d.ts +0 -125
  464. package/dist/components/interactionLayerBehavior/InteractionCanvas.d.ts +0 -20
  465. package/dist/components/processing/InteractionItems.d.ts +0 -12
  466. package/dist/components/processing/network.d.ts +0 -114
  467. package/dist/components/processing/ordinal.d.ts +0 -102
  468. package/dist/components/processing/xyDrawing.d.ts +0 -135
  469. package/dist/components/semiotic.d.ts +0 -35
  470. package/dist/components/store/TooltipStore.d.ts +0 -2
  471. package/dist/components/store/createStore.d.ts +0 -1
  472. package/dist/components/svg/SvgHelper.d.ts +0 -37
  473. package/dist/components/svg/areaDrawing.d.ts +0 -31
  474. package/dist/components/svg/ckmeans.d.ts +0 -69
  475. package/dist/components/svg/frameFunctions.d.ts +0 -119
  476. package/dist/components/svg/lineDrawing.d.ts +0 -99
  477. package/dist/components/svg/networkDrawing.d.ts +0 -134
  478. package/dist/components/svg/pieceDrawing.d.ts +0 -13
  479. package/dist/components/svg/pieceLayouts.d.ts +0 -71
  480. package/dist/components/svg/summaryLayouts.d.ts +0 -74
  481. package/dist/components/types/annotationTypes.d.ts +0 -140
  482. package/dist/components/types/canvasTypes.d.ts +0 -9
  483. package/dist/components/types/generalTypes.d.ts +0 -236
  484. package/dist/components/types/interactionTypes.d.ts +0 -74
  485. package/dist/components/types/legendTypes.d.ts +0 -20
  486. package/dist/components/types/networkTypes.d.ts +0 -165
  487. package/dist/components/types/ordinalTypes.d.ts +0 -103
  488. package/dist/components/types/xyTypes.d.ts +0 -118
  489. package/dist/components/useBoundingRect.d.ts +0 -2
  490. package/dist/components/useDerivedStateFromProps.d.ts +0 -1
  491. package/dist/components/useLegacyUnmountCallback.d.ts +0 -1
  492. package/dist/components/visualizationLayerBehavior/axis.d.ts +0 -38
  493. package/dist/components/visualizationLayerBehavior/general.d.ts +0 -84
  494. package/dist/constants/jsx.d.ts +0 -19
  495. package/dist/interactionLayerBehavior/InteractionCanvas.d.ts +0 -20
  496. package/dist/processing/network.d.ts +0 -114
  497. package/dist/processing/ordinal.d.ts +0 -102
  498. package/dist/processing/xyDrawing.d.ts +0 -135
  499. package/dist/setupTests.d.ts +0 -1
  500. package/dist/svg/SvgHelper.d.ts +0 -37
  501. package/dist/svg/ckmeans.d.ts +0 -69
  502. package/dist/svg/frameFunctions.d.ts +0 -119
  503. package/dist/svg/networkDrawing.d.ts +0 -134
  504. package/dist/svg/pieceDrawing.d.ts +0 -13
  505. package/dist/svg/pieceLayouts.d.ts +0 -71
  506. package/dist/svg/summaryLayouts.d.ts +0 -74
  507. package/dist/useDerivedStateFromProps.d.ts +0 -1
  508. package/dist/useLegacyUnmountCallback.d.ts +0 -1
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ "use strict";
3
+ var _a;
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.useSelectionSelector = exports.SelectionProvider = void 0;
6
+ exports.buildPredicate = buildPredicate;
7
+ const createStore_1 = require("./createStore");
8
+ // ── Predicate builders ─────────────────────────────────────────────────────
9
+ function buildClausePredicate(clause) {
10
+ const fieldTests = [];
11
+ for (const [field, constraint] of Object.entries(clause.fields)) {
12
+ if (constraint.type === "point") {
13
+ fieldTests.push((d) => constraint.values.has(d[field]));
14
+ }
15
+ else {
16
+ const [lo, hi] = constraint.range;
17
+ fieldTests.push((d) => {
18
+ const v = d[field];
19
+ return v >= lo && v <= hi;
20
+ });
21
+ }
22
+ }
23
+ // All fields in a clause must match (AND within clause)
24
+ return (d) => fieldTests.every((fn) => fn(d));
25
+ }
26
+ function buildPredicate(selection, requestingClientId) {
27
+ const clausePredicates = [];
28
+ for (const [clientId, clause] of selection.clauses) {
29
+ // In crossfilter mode, exclude the requesting client's own clause
30
+ if (selection.resolution === "crossfilter" && clientId === requestingClientId)
31
+ continue;
32
+ clausePredicates.push(buildClausePredicate(clause));
33
+ }
34
+ if (clausePredicates.length === 0)
35
+ return () => true;
36
+ return selection.resolution === "intersect"
37
+ ? (d) => clausePredicates.every((fn) => fn(d))
38
+ : (d) => clausePredicates.some((fn) => fn(d));
39
+ }
40
+ // ── Store factory ──────────────────────────────────────────────────────────
41
+ function ensureSelection(selections, name) {
42
+ let sel = selections.get(name);
43
+ if (!sel) {
44
+ sel = { name, resolution: "union", clauses: new Map() };
45
+ selections.set(name, sel);
46
+ }
47
+ return sel;
48
+ }
49
+ _a = (0, createStore_1.createStore)((set) => ({
50
+ selections: new Map(),
51
+ setClause(selectionName, clause) {
52
+ set((current) => {
53
+ const selections = new Map(current.selections);
54
+ const sel = ensureSelection(selections, selectionName);
55
+ const clauses = new Map(sel.clauses);
56
+ clauses.set(clause.clientId, clause);
57
+ selections.set(selectionName, { ...sel, clauses });
58
+ return { selections };
59
+ });
60
+ },
61
+ clearClause(selectionName, clientId) {
62
+ set((current) => {
63
+ const existing = current.selections.get(selectionName);
64
+ if (!existing)
65
+ return {};
66
+ const selections = new Map(current.selections);
67
+ const clauses = new Map(existing.clauses);
68
+ clauses.delete(clientId);
69
+ selections.set(selectionName, { ...existing, clauses });
70
+ return { selections };
71
+ });
72
+ },
73
+ setResolution(selectionName, mode) {
74
+ set((current) => {
75
+ const selections = new Map(current.selections);
76
+ const sel = ensureSelection(selections, selectionName);
77
+ selections.set(selectionName, { ...sel, resolution: mode });
78
+ return { selections };
79
+ });
80
+ },
81
+ clearSelection(selectionName) {
82
+ set((current) => {
83
+ const selections = new Map(current.selections);
84
+ const sel = selections.get(selectionName);
85
+ if (sel) {
86
+ selections.set(selectionName, { ...sel, clauses: new Map() });
87
+ }
88
+ return { selections };
89
+ });
90
+ }
91
+ })), exports.SelectionProvider = _a[0], exports.useSelectionSelector = _a[1];
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ "use strict";
3
+ var _a;
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.useThemeSelector = exports.ThemeProvider = exports.DARK_THEME = exports.LIGHT_THEME = void 0;
6
+ const createStore_1 = require("./createStore");
7
+ // ── Presets ─────────────────────────────────────────────────────────────────
8
+ exports.LIGHT_THEME = {
9
+ mode: "light",
10
+ colors: {
11
+ primary: "#00a2ce",
12
+ categorical: [
13
+ "#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd",
14
+ "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"
15
+ ],
16
+ sequential: "blues",
17
+ background: "transparent",
18
+ text: "#333",
19
+ textSecondary: "#666",
20
+ grid: "#e0e0e0",
21
+ border: "#ccc"
22
+ },
23
+ typography: {
24
+ fontFamily: "sans-serif",
25
+ titleSize: 16,
26
+ labelSize: 12,
27
+ tickSize: 10
28
+ }
29
+ };
30
+ exports.DARK_THEME = {
31
+ mode: "dark",
32
+ colors: {
33
+ primary: "#4fc3f7",
34
+ categorical: [
35
+ "#4fc3f7", "#ffb74d", "#81c784", "#ef5350", "#ba68c8",
36
+ "#a1887f", "#f06292", "#90a4ae", "#dce775", "#4dd0e1"
37
+ ],
38
+ sequential: "blues",
39
+ background: "#1a1a2e",
40
+ text: "#e0e0e0",
41
+ textSecondary: "#aaa",
42
+ grid: "#333",
43
+ border: "#555"
44
+ },
45
+ typography: {
46
+ fontFamily: "sans-serif",
47
+ titleSize: 16,
48
+ labelSize: 12,
49
+ tickSize: 10
50
+ }
51
+ };
52
+ _a = (0, createStore_1.createStore)((set) => ({
53
+ theme: exports.LIGHT_THEME,
54
+ setTheme(theme) {
55
+ set((current) => {
56
+ if (theme === "light") {
57
+ return { theme: exports.LIGHT_THEME };
58
+ }
59
+ if (theme === "dark") {
60
+ return { theme: exports.DARK_THEME };
61
+ }
62
+ return {
63
+ theme: {
64
+ ...current.theme,
65
+ ...theme,
66
+ colors: {
67
+ ...current.theme.colors,
68
+ ...(theme.colors || {})
69
+ },
70
+ typography: {
71
+ ...current.theme.typography,
72
+ ...(theme.typography || {})
73
+ }
74
+ }
75
+ };
76
+ });
77
+ }
78
+ })), exports.ThemeProvider = _a[0], exports.useThemeSelector = _a[1];
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useTooltip = exports.TooltipProvider = void 0;
5
+ const createStore_1 = require("./createStore");
6
+ let [TooltipProvider, useTooltip] = (0, createStore_1.createStore)((set) => ({
7
+ tooltip: null,
8
+ changeTooltip(tooltip) {
9
+ set(() => ({ tooltip }));
10
+ }
11
+ }));
12
+ exports.TooltipProvider = TooltipProvider;
13
+ exports.useTooltip = useTooltip;
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.createStore = createStore;
38
+ const React = __importStar(require("react"));
39
+ const react_1 = require("react");
40
+ function useSyncExternalStoreShim(subscribe, getSnapshot) {
41
+ const [value, setValue] = (0, react_1.useState)(getSnapshot);
42
+ (0, react_1.useLayoutEffect)(() => {
43
+ return subscribe(() => setValue(getSnapshot));
44
+ }, [subscribe]);
45
+ return value;
46
+ }
47
+ function createStore(fn) {
48
+ let Ctx = (0, react_1.createContext)(null);
49
+ // Shared fallback source for when there's no provider in the tree.
50
+ // This allows hooks to be called unconditionally (rules of hooks)
51
+ // without crashing. The fallback state is inert (empty selections, etc.).
52
+ let fallbackSource = createSource(fn);
53
+ function Provider({ children }) {
54
+ let source = (0, react_1.useMemo)(() => createSource(fn), []);
55
+ return React.createElement(Ctx.Provider, { value: source, children: children });
56
+ }
57
+ let useSelector = (selector) => {
58
+ let source = (0, react_1.useContext)(Ctx) ?? fallbackSource;
59
+ let getSnapshot = () => selector(source.getState());
60
+ return useSyncExternalStoreShim(source.subscribe, getSnapshot);
61
+ };
62
+ return [Provider, useSelector];
63
+ }
64
+ function createSource(fn) {
65
+ let events = new EventTarget();
66
+ let state = fn(set);
67
+ function set(fn) {
68
+ state = Object.assign(state, fn(state));
69
+ events.dispatchEvent(new CustomEvent("update"));
70
+ }
71
+ function subscribe(cb) {
72
+ events.addEventListener("update", cb);
73
+ return () => events.removeEventListener("update", cb);
74
+ }
75
+ return {
76
+ getState() {
77
+ return state;
78
+ },
79
+ subscribe
80
+ };
81
+ }
@@ -0,0 +1,133 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useSelection = useSelection;
5
+ exports.useLinkedHover = useLinkedHover;
6
+ exports.useBrushSelection = useBrushSelection;
7
+ exports.useFilteredData = useFilteredData;
8
+ const react_1 = require("react");
9
+ const SelectionStore_1 = require("./SelectionStore");
10
+ function useSelection(options) {
11
+ const autoId = (0, react_1.useId)();
12
+ const clientId = options.clientId || autoId;
13
+ const { name } = options;
14
+ const selection = (0, SelectionStore_1.useSelectionSelector)((state) => state.selections.get(name));
15
+ const setClause = (0, SelectionStore_1.useSelectionSelector)((state) => state.setClause);
16
+ const clearClauseFn = (0, SelectionStore_1.useSelectionSelector)((state) => state.clearClause);
17
+ const isActive = (0, react_1.useMemo)(() => {
18
+ if (!selection)
19
+ return false;
20
+ return selection.clauses.size > 0;
21
+ }, [selection]);
22
+ const predicate = (0, react_1.useMemo)(() => {
23
+ if (!selection || selection.clauses.size === 0)
24
+ return () => true;
25
+ return (0, SelectionStore_1.buildPredicate)(selection, clientId);
26
+ }, [selection, clientId]);
27
+ const selectPoints = (0, react_1.useCallback)((fieldValues) => {
28
+ const fields = {};
29
+ for (const [field, values] of Object.entries(fieldValues)) {
30
+ fields[field] = { type: "point", values: new Set(values) };
31
+ }
32
+ const clause = {
33
+ clientId,
34
+ type: "point",
35
+ fields
36
+ };
37
+ setClause(name, clause);
38
+ }, [clientId, name, setClause]);
39
+ const selectInterval = (0, react_1.useCallback)((fieldRanges) => {
40
+ const fields = {};
41
+ for (const [field, range] of Object.entries(fieldRanges)) {
42
+ fields[field] = { type: "interval", range };
43
+ }
44
+ const clause = {
45
+ clientId,
46
+ type: "interval",
47
+ fields
48
+ };
49
+ setClause(name, clause);
50
+ }, [clientId, name, setClause]);
51
+ const clear = (0, react_1.useCallback)(() => {
52
+ clearClauseFn(name, clientId);
53
+ }, [clearClauseFn, name, clientId]);
54
+ return { predicate, isActive, selectPoints, selectInterval, clear, clientId };
55
+ }
56
+ function useLinkedHover(options) {
57
+ const selName = options.name || "hover";
58
+ const { fields } = options;
59
+ const { predicate, isActive, selectPoints, clear, clientId } = useSelection({
60
+ name: selName,
61
+ fields
62
+ });
63
+ const onHover = (0, react_1.useCallback)((datum) => {
64
+ if (!datum) {
65
+ clear();
66
+ return;
67
+ }
68
+ const fieldValues = {};
69
+ for (const field of fields) {
70
+ const val = datum[field];
71
+ if (val !== undefined) {
72
+ fieldValues[field] = [val];
73
+ }
74
+ }
75
+ if (Object.keys(fieldValues).length > 0) {
76
+ selectPoints(fieldValues);
77
+ }
78
+ }, [fields, selectPoints, clear]);
79
+ return { onHover, predicate, isActive };
80
+ }
81
+ function useBrushSelection(options) {
82
+ const { name, xField, yField } = options;
83
+ const { predicate, isActive, selectInterval, clear, clientId } = useSelection({
84
+ name,
85
+ fields: [xField, yField].filter(Boolean)
86
+ });
87
+ const brushType = xField && yField ? "xyBrush" : xField ? "xBrush" : "yBrush";
88
+ const handleBrush = (0, react_1.useCallback)((extent) => {
89
+ if (!extent) {
90
+ clear();
91
+ return;
92
+ }
93
+ const fieldRanges = {};
94
+ if (brushType === "xyBrush" && Array.isArray(extent) && extent.length === 2) {
95
+ // extent = [[x0, y0], [x1, y1]]
96
+ if (xField)
97
+ fieldRanges[xField] = [Math.min(extent[0][0], extent[1][0]), Math.max(extent[0][0], extent[1][0])];
98
+ if (yField)
99
+ fieldRanges[yField] = [Math.min(extent[0][1], extent[1][1]), Math.max(extent[0][1], extent[1][1])];
100
+ }
101
+ else if (brushType === "xBrush" && Array.isArray(extent)) {
102
+ if (xField)
103
+ fieldRanges[xField] = [Math.min(...extent), Math.max(...extent)];
104
+ }
105
+ else if (brushType === "yBrush" && Array.isArray(extent)) {
106
+ if (yField)
107
+ fieldRanges[yField] = [Math.min(...extent), Math.max(...extent)];
108
+ }
109
+ if (Object.keys(fieldRanges).length > 0) {
110
+ selectInterval(fieldRanges);
111
+ }
112
+ }, [brushType, xField, yField, selectInterval, clear]);
113
+ const brushInteraction = (0, react_1.useMemo)(() => ({
114
+ brush: brushType,
115
+ during: handleBrush,
116
+ end: handleBrush
117
+ }), [brushType, handleBrush]);
118
+ return { brushInteraction, predicate, isActive, clear };
119
+ }
120
+ // ── useFilteredData ────────────────────────────────────────────────────────
121
+ /**
122
+ * Returns the subset of `data` that matches the given selection.
123
+ * In crossfilter mode, pass the consumer's clientId so its own clause is excluded.
124
+ */
125
+ function useFilteredData(data, selectionName, clientId) {
126
+ const selection = (0, SelectionStore_1.useSelectionSelector)((state) => state.selections.get(selectionName));
127
+ return (0, react_1.useMemo)(() => {
128
+ if (!selection || selection.clauses.size === 0)
129
+ return data;
130
+ const pred = (0, SelectionStore_1.buildPredicate)(selection, clientId);
131
+ return data.filter(pred);
132
+ }, [data, selection, clientId]);
133
+ }
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findNearestNode = findNearestNode;
4
+ exports.findNearestIndex = findNearestIndex;
5
+ /**
6
+ * Find the nearest scene node to the given pixel coordinates.
7
+ * Dispatches to type-specific hit testers for optimal performance.
8
+ */
9
+ function findNearestNode(scene, px, py, maxDistance = 30) {
10
+ let best = null;
11
+ for (const node of scene) {
12
+ let result = null;
13
+ switch (node.type) {
14
+ case "point":
15
+ result = hitTestPoint(node, px, py);
16
+ break;
17
+ case "line":
18
+ result = hitTestLine(node, px, py);
19
+ break;
20
+ case "rect":
21
+ result = hitTestRect(node, px, py);
22
+ break;
23
+ case "heatcell":
24
+ result = hitTestHeatcell(node, px, py);
25
+ break;
26
+ case "area":
27
+ // Skip non-interactive areas (e.g. decorative bounds bands)
28
+ if (node.interactive === false)
29
+ break;
30
+ // Areas are hit-tested by finding nearest x on the top path
31
+ result = hitTestAreaPath(node, px, py);
32
+ break;
33
+ case "candlestick":
34
+ result = hitTestCandlestick(node, px, py);
35
+ break;
36
+ }
37
+ if (result && result.distance < maxDistance) {
38
+ if (!best || result.distance < best.distance) {
39
+ best = result;
40
+ }
41
+ }
42
+ }
43
+ return best;
44
+ }
45
+ function hitTestPoint(node, px, py) {
46
+ const dx = px - node.x;
47
+ const dy = py - node.y;
48
+ const dist = Math.sqrt(dx * dx + dy * dy);
49
+ // Hit radius includes the point's visual radius plus a tolerance
50
+ if (dist > node.r + 5)
51
+ return null;
52
+ return { node, datum: node.datum, x: node.x, y: node.y, distance: dist };
53
+ }
54
+ function hitTestLine(node, px, py) {
55
+ if (node.path.length === 0)
56
+ return null;
57
+ // Binary search for nearest x in the path
58
+ const idx = binarySearchPath(node.path, px);
59
+ if (idx < 0)
60
+ return null;
61
+ const [nx, ny] = node.path[idx];
62
+ const dx = px - nx;
63
+ const dy = py - ny;
64
+ const dist = Math.sqrt(dx * dx + dy * dy);
65
+ // For line data, the datum is the array; return the index as well
66
+ const datum = Array.isArray(node.datum) && node.datum[idx]
67
+ ? node.datum[idx]
68
+ : node.datum;
69
+ return { node, datum, x: nx, y: ny, distance: dist };
70
+ }
71
+ function hitTestRect(node, px, py) {
72
+ if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {
73
+ // Center of rect
74
+ const cx = node.x + node.w / 2;
75
+ const cy = node.y + node.h / 2;
76
+ return { node, datum: node.datum, x: cx, y: cy, distance: 0 };
77
+ }
78
+ return null;
79
+ }
80
+ function hitTestHeatcell(node, px, py) {
81
+ if (px >= node.x && px <= node.x + node.w && py >= node.y && py <= node.y + node.h) {
82
+ const cx = node.x + node.w / 2;
83
+ const cy = node.y + node.h / 2;
84
+ return { node, datum: node.datum, x: cx, y: cy, distance: 0 };
85
+ }
86
+ return null;
87
+ }
88
+ function hitTestCandlestick(node, px, py) {
89
+ const halfBody = node.bodyWidth / 2;
90
+ // Hit the body area (wider target)
91
+ const bodyTop = Math.min(node.openY, node.closeY);
92
+ const bodyBottom = Math.max(node.openY, node.closeY);
93
+ const bodyHeight = Math.max(bodyBottom - bodyTop, 1);
94
+ if (px >= node.x - halfBody - 3 && px <= node.x + halfBody + 3 &&
95
+ py >= node.highY - 3 && py <= node.lowY + 3) {
96
+ // Hover target: center of the body
97
+ const cy = bodyTop + bodyHeight / 2;
98
+ const dx = px - node.x;
99
+ const dy = py - cy;
100
+ return { node, datum: node.datum, x: node.x, y: cy, distance: Math.sqrt(dx * dx + dy * dy) };
101
+ }
102
+ return null;
103
+ }
104
+ function hitTestAreaPath(node, px, py) {
105
+ if (node.topPath.length === 0)
106
+ return null;
107
+ const idx = binarySearchPath(node.topPath, px);
108
+ if (idx < 0)
109
+ return null;
110
+ const [nx, ny] = node.topPath[idx];
111
+ const dx = px - nx;
112
+ const dy = py - ny;
113
+ const dist = Math.sqrt(dx * dx + dy * dy);
114
+ return { node: node, datum: node.datum, x: nx, y: ny, distance: dist };
115
+ }
116
+ /**
117
+ * Binary search for the nearest point by x-coordinate in a sorted path.
118
+ */
119
+ function binarySearchPath(path, targetX) {
120
+ if (path.length === 0)
121
+ return -1;
122
+ let lo = 0;
123
+ let hi = path.length - 1;
124
+ while (lo < hi) {
125
+ const mid = (lo + hi) >> 1;
126
+ if (path[mid][0] < targetX)
127
+ lo = mid + 1;
128
+ else
129
+ hi = mid;
130
+ }
131
+ // Check if lo-1 is closer
132
+ if (lo > 0) {
133
+ const dLo = Math.abs(path[lo][0] - targetX);
134
+ const dPrev = Math.abs(path[lo - 1][0] - targetX);
135
+ if (dPrev <= dLo)
136
+ return lo - 1;
137
+ }
138
+ return lo;
139
+ }
140
+ /**
141
+ * Binary search for nearest point by time value in a RingBuffer.
142
+ */
143
+ function findNearestIndex(buf, targetTime, getTime) {
144
+ if (buf.size === 0)
145
+ return -1;
146
+ let lo = 0;
147
+ let hi = buf.size - 1;
148
+ while (lo < hi) {
149
+ const mid = (lo + hi) >> 1;
150
+ const t = getTime(buf.get(mid));
151
+ if (t < targetTime)
152
+ lo = mid + 1;
153
+ else
154
+ hi = mid;
155
+ }
156
+ if (lo > 0) {
157
+ const tLo = getTime(buf.get(lo));
158
+ const tPrev = getTime(buf.get(lo - 1));
159
+ if (Math.abs(tPrev - targetTime) <= Math.abs(tLo - targetTime)) {
160
+ return lo - 1;
161
+ }
162
+ }
163
+ return lo;
164
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSourceAdapter = void 0;
4
+ /**
5
+ * DataSourceAdapter normalizes all data ingestion paths into uniform changesets:
6
+ *
7
+ * 1. Bounded (props): `data` array → changeset(s) with `bounded: true`
8
+ * 2. Streaming (push): `ref.push()` → micro-changeset with `bounded: false`
9
+ * 3. Hybrid: `data` prop first, then `push()` — seamless transition
10
+ *
11
+ * For large bounded datasets (above CHUNK_THRESHOLD), data is automatically
12
+ * chunked and ingested progressively across multiple animation frames. This
13
+ * keeps the UI responsive while the chart draws incrementally. The first chunk
14
+ * renders immediately so the user sees data right away.
15
+ */
16
+ /** Datasets larger than this are chunked for progressive rendering */
17
+ const CHUNK_THRESHOLD = 5000;
18
+ /** Number of items per progressive chunk */
19
+ const CHUNK_SIZE = 5000;
20
+ class DataSourceAdapter {
21
+ constructor(callback) {
22
+ this.lastBoundedData = null;
23
+ this.chunkTimer = 0;
24
+ this.callback = callback;
25
+ }
26
+ /**
27
+ * Ingest a bounded data array (from props).
28
+ *
29
+ * Small datasets emit a single changeset synchronously.
30
+ * Large datasets (> CHUNK_THRESHOLD) are split into chunks that render
31
+ * progressively: the first chunk fires immediately (bounded: true to
32
+ * reset + seed the buffer), subsequent chunks arrive on successive
33
+ * animation frames (bounded: false so they append without clearing).
34
+ */
35
+ setBoundedData(data) {
36
+ if (data === this.lastBoundedData)
37
+ return;
38
+ this.lastBoundedData = data;
39
+ // Cancel any in-flight progressive ingestion
40
+ if (this.chunkTimer) {
41
+ cancelAnimationFrame(this.chunkTimer);
42
+ this.chunkTimer = 0;
43
+ }
44
+ if (data.length <= CHUNK_THRESHOLD) {
45
+ // Small dataset — ingest all at once
46
+ this.callback({ inserts: data, bounded: true });
47
+ return;
48
+ }
49
+ // Large dataset — progressive chunked ingestion.
50
+ // First chunk is bounded: true (resets buffer and sizes it to full length).
51
+ // Subsequent chunks are bounded: false (appends without clearing).
52
+ this.callback({ inserts: data.slice(0, CHUNK_SIZE), bounded: true, totalSize: data.length });
53
+ let offset = CHUNK_SIZE;
54
+ const scheduleNext = () => {
55
+ if (offset >= data.length)
56
+ return;
57
+ // Check that this is still the active dataset
58
+ if (data !== this.lastBoundedData)
59
+ return;
60
+ const end = Math.min(offset + CHUNK_SIZE, data.length);
61
+ this.callback({ inserts: data.slice(offset, end), bounded: false });
62
+ offset = end;
63
+ if (offset < data.length) {
64
+ this.chunkTimer = requestAnimationFrame(scheduleNext);
65
+ }
66
+ else {
67
+ this.chunkTimer = 0;
68
+ }
69
+ };
70
+ this.chunkTimer = requestAnimationFrame(scheduleNext);
71
+ }
72
+ /**
73
+ * Push a single datum (streaming mode).
74
+ * Emits a micro-changeset with `bounded: false`.
75
+ */
76
+ push(datum) {
77
+ this.callback({ inserts: [datum], bounded: false });
78
+ }
79
+ /**
80
+ * Push multiple data (streaming batch).
81
+ * Emits a single changeset with `bounded: false`.
82
+ */
83
+ pushMany(data) {
84
+ if (data.length === 0)
85
+ return;
86
+ this.callback({ inserts: data, bounded: false });
87
+ }
88
+ /**
89
+ * Reset the adapter state.
90
+ */
91
+ clear() {
92
+ if (this.chunkTimer) {
93
+ cancelAnimationFrame(this.chunkTimer);
94
+ this.chunkTimer = 0;
95
+ }
96
+ this.lastBoundedData = null;
97
+ }
98
+ }
99
+ exports.DataSourceAdapter = DataSourceAdapter;