semiotic 3.0.0-beta.2 → 3.0.0-beta.4

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 (342) hide show
  1. package/CLAUDE.md +93 -753
  2. package/README.md +92 -7
  3. package/ai/dist/componentRegistry.js +26 -0
  4. package/ai/dist/{ai/mcp-server.js → mcp-server.js} +1 -1
  5. package/ai/dist/{ai/renderHOCToSVG.js → renderHOCToSVG.js} +2 -2
  6. package/dist/ChartContainer.d.ts +60 -0
  7. package/dist/DetailsPanel.d.ts +37 -0
  8. package/dist/LinkedCharts.d.ts +2 -0
  9. package/dist/Tooltip/Tooltip.d.ts +2 -2
  10. package/dist/charts/index.d.ts +1 -1
  11. package/dist/charts/ordinal/BarChart.d.ts +1 -0
  12. package/dist/charts/ordinal/BoxPlot.d.ts +1 -0
  13. package/dist/charts/ordinal/DonutChart.d.ts +1 -0
  14. package/dist/charts/ordinal/DotPlot.d.ts +1 -0
  15. package/dist/charts/ordinal/GroupedBarChart.d.ts +1 -0
  16. package/dist/charts/ordinal/Histogram.d.ts +1 -0
  17. package/dist/charts/ordinal/PieChart.d.ts +1 -0
  18. package/dist/charts/ordinal/RidgelinePlot.d.ts +1 -0
  19. package/dist/charts/ordinal/StackedBarChart.d.ts +1 -0
  20. package/dist/charts/ordinal/SwarmPlot.d.ts +1 -0
  21. package/dist/charts/ordinal/ViolinPlot.d.ts +1 -0
  22. package/dist/charts/realtime/RealtimeHeatmap.d.ts +11 -0
  23. package/dist/charts/realtime/RealtimeHistogram.d.ts +15 -1
  24. package/dist/charts/realtime/RealtimeLineChart.d.ts +6 -0
  25. package/dist/charts/realtime/RealtimeSwarmChart.d.ts +6 -0
  26. package/dist/charts/realtime/RealtimeWaterfallChart.d.ts +6 -0
  27. package/dist/charts/shared/annotationRules.d.ts +3 -0
  28. package/dist/charts/shared/colorUtils.d.ts +17 -11
  29. package/dist/charts/shared/hooks.d.ts +96 -1
  30. package/dist/charts/shared/loess.d.ts +13 -0
  31. package/dist/charts/shared/networkUtils.d.ts +31 -0
  32. package/dist/charts/shared/tooltipUtils.d.ts +16 -0
  33. package/dist/charts/shared/types.d.ts +17 -2
  34. package/dist/charts/shared/validateChartData.d.ts +2 -3
  35. package/dist/charts/shared/validateProps.d.ts +18 -0
  36. package/dist/charts/xy/AreaChart.d.ts +4 -0
  37. package/dist/charts/xy/BubbleChart.d.ts +6 -0
  38. package/dist/charts/xy/Heatmap.d.ts +4 -0
  39. package/dist/charts/xy/LineChart.d.ts +6 -0
  40. package/dist/charts/xy/Scatterplot.d.ts +4 -0
  41. package/dist/charts/xy/StackedAreaChart.d.ts +4 -0
  42. package/dist/data/fromVegaLite.d.ts +48 -0
  43. package/dist/export/chartConfig.d.ts +29 -0
  44. package/dist/export/selectionSerializer.d.ts +20 -0
  45. package/dist/geometry/sankeyLinks.d.ts +1 -1
  46. package/dist/network.min.js +1 -1
  47. package/dist/network.module.min.js +1 -1
  48. package/dist/ordinal.min.js +1 -1
  49. package/dist/ordinal.module.min.js +1 -1
  50. package/dist/realtime/types.d.ts +20 -6
  51. package/dist/realtime.min.js +1 -1
  52. package/dist/realtime.module.min.js +1 -1
  53. package/dist/semiotic-ai.d.ts +14 -0
  54. package/dist/semiotic-ai.min.js +1 -1
  55. package/dist/semiotic-ai.module.min.js +1 -1
  56. package/dist/semiotic-data.d.ts +2 -0
  57. package/dist/semiotic-data.min.js +1 -1
  58. package/dist/semiotic-data.module.min.js +1 -1
  59. package/dist/semiotic-network.d.ts +9 -19
  60. package/dist/semiotic-ordinal.d.ts +12 -14
  61. package/dist/semiotic-xy.d.ts +12 -18
  62. package/dist/semiotic.d.ts +16 -13
  63. package/dist/semiotic.min.js +1 -1
  64. package/dist/semiotic.module.min.js +1 -1
  65. package/dist/server.min.js +1 -1
  66. package/dist/server.module.min.js +1 -1
  67. package/dist/store/ObservationStore.d.ts +61 -0
  68. package/dist/store/SelectionStore.d.ts +9 -1
  69. package/dist/store/ThemeStore.d.ts +6 -1
  70. package/dist/store/TooltipStore.d.ts +3 -1
  71. package/dist/store/createStore.d.ts +4 -1
  72. package/dist/store/useObservation.d.ts +18 -0
  73. package/dist/stream/MarginalGraphics.d.ts +1 -1
  74. package/dist/stream/NetworkPipelineStore.d.ts +44 -0
  75. package/dist/stream/OrdinalCanvasHitTester.d.ts +1 -0
  76. package/dist/stream/OrdinalSVGOverlay.d.ts +6 -2
  77. package/dist/stream/ParticlePool.d.ts +2 -1
  78. package/dist/stream/PipelineStore.d.ts +11 -0
  79. package/dist/stream/SVGOverlay.d.ts +21 -2
  80. package/dist/stream/SceneGraph.d.ts +1 -1
  81. package/dist/stream/networkTypes.d.ts +58 -1
  82. package/dist/stream/ordinalTypes.d.ts +13 -0
  83. package/dist/stream/types.d.ts +14 -0
  84. package/dist/types/annotationTypes.d.ts +10 -0
  85. package/dist/types/networkTypes.d.ts +1 -2
  86. package/dist/xy.min.js +1 -1
  87. package/dist/xy.module.min.js +1 -1
  88. package/package.json +30 -42
  89. package/ai/dist/ai/componentRegistry.js +0 -45
  90. package/ai/dist/src/components/Annotation.js +0 -358
  91. package/ai/dist/src/components/AnnotationLayer/AnnotationLayer.js +0 -369
  92. package/ai/dist/src/components/Axis/Axis.js +0 -374
  93. package/ai/dist/src/components/Axis/axisTitle.js +0 -14
  94. package/ai/dist/src/components/Axis/index.js +0 -7
  95. package/ai/dist/src/components/Axis/summaryGraphic.js +0 -37
  96. package/ai/dist/src/components/Brush.js +0 -84
  97. package/ai/dist/src/components/ChartErrorBoundary.js +0 -91
  98. package/ai/dist/src/components/DividedLine.js +0 -65
  99. package/ai/dist/src/components/Legend.js +0 -140
  100. package/ai/dist/src/components/LinkedCharts.js +0 -95
  101. package/ai/dist/src/components/ThemeProvider.js +0 -79
  102. package/ai/dist/src/components/Tooltip/Tooltip.js +0 -309
  103. package/ai/dist/src/components/TooltipPositioner/index.js +0 -132
  104. package/ai/dist/src/components/annotationLayerBehavior/annotationHandling.js +0 -73
  105. package/ai/dist/src/components/annotationLayerBehavior/d3labeler.js +0 -254
  106. package/ai/dist/src/components/annotationRules/baseRules.js +0 -150
  107. package/ai/dist/src/components/annotationRules/networkframeRules.js +0 -196
  108. package/ai/dist/src/components/annotationRules/xyframeRules.js +0 -297
  109. package/ai/dist/src/components/batchWork.js +0 -35
  110. package/ai/dist/src/components/charts/index.js +0 -109
  111. package/ai/dist/src/components/charts/network/ChordDiagram.js +0 -142
  112. package/ai/dist/src/components/charts/network/CirclePack.js +0 -108
  113. package/ai/dist/src/components/charts/network/ForceDirectedGraph.js +0 -121
  114. package/ai/dist/src/components/charts/network/SankeyDiagram.js +0 -155
  115. package/ai/dist/src/components/charts/network/TreeDiagram.js +0 -110
  116. package/ai/dist/src/components/charts/network/Treemap.js +0 -106
  117. package/ai/dist/src/components/charts/ordinal/BarChart.js +0 -156
  118. package/ai/dist/src/components/charts/ordinal/BoxPlot.js +0 -139
  119. package/ai/dist/src/components/charts/ordinal/DonutChart.js +0 -130
  120. package/ai/dist/src/components/charts/ordinal/DotPlot.js +0 -126
  121. package/ai/dist/src/components/charts/ordinal/GroupedBarChart.js +0 -129
  122. package/ai/dist/src/components/charts/ordinal/Histogram.js +0 -132
  123. package/ai/dist/src/components/charts/ordinal/PieChart.js +0 -128
  124. package/ai/dist/src/components/charts/ordinal/RidgelinePlot.js +0 -130
  125. package/ai/dist/src/components/charts/ordinal/StackedBarChart.js +0 -130
  126. package/ai/dist/src/components/charts/ordinal/SwarmPlot.js +0 -147
  127. package/ai/dist/src/components/charts/ordinal/ViolinPlot.js +0 -138
  128. package/ai/dist/src/components/charts/realtime/RealtimeHeatmap.js +0 -79
  129. package/ai/dist/src/components/charts/realtime/RealtimeHistogram.js +0 -114
  130. package/ai/dist/src/components/charts/realtime/RealtimeLineChart.js +0 -93
  131. package/ai/dist/src/components/charts/realtime/RealtimeSwarmChart.js +0 -105
  132. package/ai/dist/src/components/charts/realtime/RealtimeWaterfallChart.js +0 -106
  133. package/ai/dist/src/components/charts/shared/ChartError.js +0 -72
  134. package/ai/dist/src/components/charts/shared/colorUtils.js +0 -138
  135. package/ai/dist/src/components/charts/shared/formatUtils.js +0 -213
  136. package/ai/dist/src/components/charts/shared/hooks.js +0 -49
  137. package/ai/dist/src/components/charts/shared/legendUtils.js +0 -57
  138. package/ai/dist/src/components/charts/shared/selectionUtils.js +0 -67
  139. package/ai/dist/src/components/charts/shared/tooltipUtils.js +0 -79
  140. package/ai/dist/src/components/charts/shared/types.js +0 -2
  141. package/ai/dist/src/components/charts/shared/validateChartData.js +0 -82
  142. package/ai/dist/src/components/charts/shared/validateProps.js +0 -736
  143. package/ai/dist/src/components/charts/xy/AreaChart.js +0 -230
  144. package/ai/dist/src/components/charts/xy/BubbleChart.js +0 -251
  145. package/ai/dist/src/components/charts/xy/Heatmap.js +0 -235
  146. package/ai/dist/src/components/charts/xy/LineChart.js +0 -307
  147. package/ai/dist/src/components/charts/xy/MinimapChart.js +0 -298
  148. package/ai/dist/src/components/charts/xy/Scatterplot.js +0 -172
  149. package/ai/dist/src/components/charts/xy/ScatterplotMatrix.js +0 -426
  150. package/ai/dist/src/components/charts/xy/StackedAreaChart.js +0 -231
  151. package/ai/dist/src/components/constants/coordinateNames.js +0 -11
  152. package/ai/dist/src/components/constants/frame_props.js +0 -251
  153. package/ai/dist/src/components/data/dataFunctions.js +0 -487
  154. package/ai/dist/src/components/data/multiAccessorUtils.js +0 -14
  155. package/ai/dist/src/components/data/transforms.js +0 -143
  156. package/ai/dist/src/components/data/unflowedFunctions.js +0 -5
  157. package/ai/dist/src/components/export/exportChart.js +0 -121
  158. package/ai/dist/src/components/generic_utilities/functions.js +0 -5
  159. package/ai/dist/src/components/geometry/areaDrawing.js +0 -312
  160. package/ai/dist/src/components/geometry/contourLayout.js +0 -73
  161. package/ai/dist/src/components/geometry/hexbinLayout.js +0 -163
  162. package/ai/dist/src/components/geometry/lineDrawing.js +0 -356
  163. package/ai/dist/src/components/geometry/sankeyLinks.js +0 -331
  164. package/ai/dist/src/components/geometry/summaryLayouts.js +0 -136
  165. package/ai/dist/src/components/index.js +0 -18
  166. package/ai/dist/src/components/processing/InteractionItems.js +0 -223
  167. package/ai/dist/src/components/processing/hierarchyUtils.js +0 -104
  168. package/ai/dist/src/components/processing/layouts/chordLayout.js +0 -58
  169. package/ai/dist/src/components/processing/layouts/forceLayout.js +0 -142
  170. package/ai/dist/src/components/processing/layouts/hierarchyLayout.js +0 -31
  171. package/ai/dist/src/components/processing/layouts/index.js +0 -32
  172. package/ai/dist/src/components/processing/layouts/sankeyLayout.js +0 -96
  173. package/ai/dist/src/components/processing/layouts/simpleLayouts.js +0 -34
  174. package/ai/dist/src/components/processing/layouts/types.js +0 -2
  175. package/ai/dist/src/components/processing/networkDefaults.js +0 -39
  176. package/ai/dist/src/components/realtime/BinAccumulator.js +0 -36
  177. package/ai/dist/src/components/realtime/IncrementalExtent.js +0 -55
  178. package/ai/dist/src/components/realtime/RingBuffer.js +0 -104
  179. package/ai/dist/src/components/realtime/renderers/barRenderer.js +0 -133
  180. package/ai/dist/src/components/realtime/renderers/candlestickRenderer.js +0 -7
  181. package/ai/dist/src/components/realtime/renderers/lineRenderer.js +0 -164
  182. package/ai/dist/src/components/realtime/renderers/swarmRenderer.js +0 -91
  183. package/ai/dist/src/components/realtime/renderers/types.js +0 -2
  184. package/ai/dist/src/components/realtime/renderers/waterfallRenderer.js +0 -163
  185. package/ai/dist/src/components/realtime/types.js +0 -2
  186. package/ai/dist/src/components/semiotic-ai.js +0 -89
  187. package/ai/dist/src/components/semiotic-data.js +0 -12
  188. package/ai/dist/src/components/semiotic-network.js +0 -38
  189. package/ai/dist/src/components/semiotic-ordinal.js +0 -28
  190. package/ai/dist/src/components/semiotic-realtime.js +0 -30
  191. package/ai/dist/src/components/semiotic-server.js +0 -8
  192. package/ai/dist/src/components/semiotic-xy.js +0 -35
  193. package/ai/dist/src/components/semiotic.js +0 -109
  194. package/ai/dist/src/components/server/renderToStaticSVG.js +0 -594
  195. package/ai/dist/src/components/store/SelectionStore.js +0 -91
  196. package/ai/dist/src/components/store/ThemeStore.js +0 -78
  197. package/ai/dist/src/components/store/TooltipStore.js +0 -13
  198. package/ai/dist/src/components/store/createStore.js +0 -81
  199. package/ai/dist/src/components/store/useSelection.js +0 -133
  200. package/ai/dist/src/components/stream/CanvasHitTester.js +0 -164
  201. package/ai/dist/src/components/stream/DataSourceAdapter.js +0 -99
  202. package/ai/dist/src/components/stream/MarginalGraphics.js +0 -266
  203. package/ai/dist/src/components/stream/NetworkCanvasHitTester.js +0 -228
  204. package/ai/dist/src/components/stream/NetworkPipelineStore.js +0 -498
  205. package/ai/dist/src/components/stream/NetworkSVGOverlay.js +0 -70
  206. package/ai/dist/src/components/stream/NetworkSceneGraph.js +0 -38
  207. package/ai/dist/src/components/stream/OrdinalCanvasHitTester.js +0 -146
  208. package/ai/dist/src/components/stream/OrdinalPipelineStore.js +0 -786
  209. package/ai/dist/src/components/stream/OrdinalSVGOverlay.js +0 -130
  210. package/ai/dist/src/components/stream/ParticlePool.js +0 -174
  211. package/ai/dist/src/components/stream/PipelineStore.js +0 -1243
  212. package/ai/dist/src/components/stream/SVGOverlay.js +0 -129
  213. package/ai/dist/src/components/stream/SceneGraph.js +0 -132
  214. package/ai/dist/src/components/stream/StreamNetworkFrame.js +0 -561
  215. package/ai/dist/src/components/stream/StreamOrdinalFrame.js +0 -492
  216. package/ai/dist/src/components/stream/StreamXYFrame.js +0 -590
  217. package/ai/dist/src/components/stream/accessorUtils.js +0 -20
  218. package/ai/dist/src/components/stream/index.js +0 -32
  219. package/ai/dist/src/components/stream/layouts/chordLayoutPlugin.js +0 -352
  220. package/ai/dist/src/components/stream/layouts/forceLayoutPlugin.js +0 -230
  221. package/ai/dist/src/components/stream/layouts/hierarchyLayoutPlugin.js +0 -568
  222. package/ai/dist/src/components/stream/layouts/index.js +0 -28
  223. package/ai/dist/src/components/stream/layouts/sankeyLayoutPlugin.js +0 -245
  224. package/ai/dist/src/components/stream/networkTypes.js +0 -17
  225. package/ai/dist/src/components/stream/ordinalSceneBuilders/barScene.js +0 -126
  226. package/ai/dist/src/components/stream/ordinalSceneBuilders/connectorScene.js +0 -62
  227. package/ai/dist/src/components/stream/ordinalSceneBuilders/pieScene.js +0 -33
  228. package/ai/dist/src/components/stream/ordinalSceneBuilders/pointScene.js +0 -63
  229. package/ai/dist/src/components/stream/ordinalSceneBuilders/statisticalScene.js +0 -278
  230. package/ai/dist/src/components/stream/ordinalSceneBuilders/timelineScene.js +0 -30
  231. package/ai/dist/src/components/stream/ordinalSceneBuilders/types.js +0 -2
  232. package/ai/dist/src/components/stream/ordinalTypes.js +0 -2
  233. package/ai/dist/src/components/stream/renderers/areaCanvasRenderer.js +0 -48
  234. package/ai/dist/src/components/stream/renderers/barCanvasRenderer.js +0 -70
  235. package/ai/dist/src/components/stream/renderers/boxplotCanvasRenderer.js +0 -75
  236. package/ai/dist/src/components/stream/renderers/candlestickCanvasRenderer.js +0 -28
  237. package/ai/dist/src/components/stream/renderers/connectorCanvasRenderer.js +0 -47
  238. package/ai/dist/src/components/stream/renderers/heatmapCanvasRenderer.js +0 -31
  239. package/ai/dist/src/components/stream/renderers/lineCanvasRenderer.js +0 -140
  240. package/ai/dist/src/components/stream/renderers/networkArcRenderer.js +0 -38
  241. package/ai/dist/src/components/stream/renderers/networkCircleRenderer.js +0 -37
  242. package/ai/dist/src/components/stream/renderers/networkEdgeRenderer.js +0 -102
  243. package/ai/dist/src/components/stream/renderers/networkParticleRenderer.js +0 -63
  244. package/ai/dist/src/components/stream/renderers/networkRectRenderer.js +0 -35
  245. package/ai/dist/src/components/stream/renderers/pointCanvasRenderer.js +0 -38
  246. package/ai/dist/src/components/stream/renderers/swarmCanvasRenderer.js +0 -10
  247. package/ai/dist/src/components/stream/renderers/types.js +0 -2
  248. package/ai/dist/src/components/stream/renderers/violinCanvasRenderer.js +0 -47
  249. package/ai/dist/src/components/stream/renderers/waterfallCanvasRenderer.js +0 -38
  250. package/ai/dist/src/components/stream/renderers/wedgeCanvasRenderer.js +0 -33
  251. package/ai/dist/src/components/stream/types.js +0 -2
  252. package/ai/dist/src/components/types/annotationTypes.js +0 -2
  253. package/ai/dist/src/components/types/canvasTypes.js +0 -2
  254. package/ai/dist/src/components/types/generalTypes.js +0 -2
  255. package/ai/dist/src/components/types/interactionTypes.js +0 -2
  256. package/ai/dist/src/components/types/legendTypes.js +0 -2
  257. package/ai/dist/src/components/types/networkTypes.js +0 -2
  258. package/ai/dist/src/components/types/ordinalTypes.js +0 -2
  259. package/ai/dist/src/components/types/xyTypes.js +0 -2
  260. package/ai/dist/src/components/useBoundingRect.js +0 -24
  261. package/ai/dist/src/components/visualizationLayerBehavior/axis.js +0 -301
  262. package/ai/dist/src/components/visualizationLayerBehavior/general.js +0 -435
  263. package/ai/dist/src/setupTests.js +0 -4
  264. package/dist/AnnotationLayer/AnnotationLayer.d.ts +0 -25
  265. package/dist/Axis/Axis.d.ts +0 -7
  266. package/dist/Axis/axisTitle.d.ts +0 -10
  267. package/dist/Axis/index.d.ts +0 -2
  268. package/dist/Axis/summaryGraphic.d.ts +0 -17
  269. package/dist/Brush.d.ts +0 -12
  270. package/dist/DividedLine.d.ts +0 -16
  271. package/dist/TooltipPositioner/index.d.ts +0 -7
  272. package/dist/annotationLayerBehavior/annotationHandling.d.ts +0 -19
  273. package/dist/annotationLayerBehavior/d3labeler.d.ts +0 -9
  274. package/dist/annotationRules/baseRules.d.ts +0 -25
  275. package/dist/annotationRules/networkframeRules.d.ts +0 -48
  276. package/dist/annotationRules/xyframeRules.d.ts +0 -117
  277. package/dist/batchWork.d.ts +0 -6
  278. package/dist/constants/coordinateNames.d.ts +0 -8
  279. package/dist/constants/frame_props.d.ts +0 -13
  280. package/dist/data/dataFunctions.d.ts +0 -45
  281. package/dist/data/multiAccessorUtils.d.ts +0 -1
  282. package/dist/data/unflowedFunctions.d.ts +0 -1
  283. package/dist/generic_utilities/functions.d.ts +0 -1
  284. package/dist/geometry/areaDrawing.d.ts +0 -21
  285. package/dist/geometry/contourLayout.d.ts +0 -6
  286. package/dist/geometry/hexbinLayout.d.ts +0 -7
  287. package/dist/geometry/lineDrawing.d.ts +0 -71
  288. package/dist/geometry/summaryLayouts.d.ts +0 -45
  289. package/dist/index.d.ts +0 -1
  290. package/dist/network.js +0 -7495
  291. package/dist/network.js.map +0 -1
  292. package/dist/network.module.js +0 -7458
  293. package/dist/network.module.js.map +0 -1
  294. package/dist/ordinal.js +0 -6497
  295. package/dist/ordinal.js.map +0 -1
  296. package/dist/ordinal.module.js +0 -6465
  297. package/dist/ordinal.module.js.map +0 -1
  298. package/dist/processing/InteractionItems.d.ts +0 -13
  299. package/dist/processing/hierarchyUtils.d.ts +0 -16
  300. package/dist/processing/layouts/chordLayout.d.ts +0 -2
  301. package/dist/processing/layouts/forceLayout.d.ts +0 -3
  302. package/dist/processing/layouts/hierarchyLayout.d.ts +0 -10
  303. package/dist/processing/layouts/index.d.ts +0 -8
  304. package/dist/processing/layouts/sankeyLayout.d.ts +0 -8
  305. package/dist/processing/layouts/simpleLayouts.d.ts +0 -7
  306. package/dist/processing/layouts/types.d.ts +0 -17
  307. package/dist/processing/networkDefaults.d.ts +0 -36
  308. package/dist/realtime/renderers/barRenderer.d.ts +0 -2
  309. package/dist/realtime/renderers/candlestickRenderer.d.ts +0 -2
  310. package/dist/realtime/renderers/lineRenderer.d.ts +0 -2
  311. package/dist/realtime/renderers/swarmRenderer.d.ts +0 -2
  312. package/dist/realtime.js +0 -7072
  313. package/dist/realtime.js.map +0 -1
  314. package/dist/realtime.module.js +0 -7043
  315. package/dist/realtime.module.js.map +0 -1
  316. package/dist/semiotic-ai.js +0 -13323
  317. package/dist/semiotic-ai.js.map +0 -1
  318. package/dist/semiotic-ai.module.js +0 -13264
  319. package/dist/semiotic-ai.module.js.map +0 -1
  320. package/dist/semiotic-data.js +0 -141
  321. package/dist/semiotic-data.js.map +0 -1
  322. package/dist/semiotic-data.module.js +0 -136
  323. package/dist/semiotic-data.module.js.map +0 -1
  324. package/dist/semiotic.js +0 -16351
  325. package/dist/semiotic.js.map +0 -1
  326. package/dist/semiotic.module.js +0 -16265
  327. package/dist/semiotic.module.js.map +0 -1
  328. package/dist/server.js +0 -5191
  329. package/dist/server.js.map +0 -1
  330. package/dist/server.module.js +0 -5166
  331. package/dist/server.module.js.map +0 -1
  332. package/dist/stream/NetworkSceneGraph.d.ts +0 -14
  333. package/dist/stream/index.d.ts +0 -16
  334. package/dist/types/canvasTypes.d.ts +0 -9
  335. package/dist/types/xyTypes.d.ts +0 -24
  336. package/dist/useBoundingRect.d.ts +0 -2
  337. package/dist/visualizationLayerBehavior/axis.d.ts +0 -36
  338. package/dist/visualizationLayerBehavior/general.d.ts +0 -80
  339. package/dist/xy.js +0 -6993
  340. package/dist/xy.js.map +0 -1
  341. package/dist/xy.module.js +0 -6957
  342. package/dist/xy.module.js.map +0 -1
@@ -1,590 +0,0 @@
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
- const React = __importStar(require("react"));
38
- const react_1 = require("react");
39
- const d3_brush_1 = require("d3-brush");
40
- const d3_selection_1 = require("d3-selection");
41
- const DataSourceAdapter_1 = require("./DataSourceAdapter");
42
- const PipelineStore_1 = require("./PipelineStore");
43
- const CanvasHitTester_1 = require("./CanvasHitTester");
44
- const SVGOverlay_1 = require("./SVGOverlay");
45
- // Canvas renderers
46
- const lineCanvasRenderer_1 = require("./renderers/lineCanvasRenderer");
47
- const areaCanvasRenderer_1 = require("./renderers/areaCanvasRenderer");
48
- const pointCanvasRenderer_1 = require("./renderers/pointCanvasRenderer");
49
- const barCanvasRenderer_1 = require("./renderers/barCanvasRenderer");
50
- const swarmCanvasRenderer_1 = require("./renderers/swarmCanvasRenderer");
51
- const waterfallCanvasRenderer_1 = require("./renderers/waterfallCanvasRenderer");
52
- const heatmapCanvasRenderer_1 = require("./renderers/heatmapCanvasRenderer");
53
- const candlestickCanvasRenderer_1 = require("./renderers/candlestickCanvasRenderer");
54
- // ── Renderer dispatch ──────────────────────────────────────────────────
55
- const RENDERERS = {
56
- line: [areaCanvasRenderer_1.areaCanvasRenderer, lineCanvasRenderer_1.lineCanvasRenderer],
57
- area: [areaCanvasRenderer_1.areaCanvasRenderer],
58
- stackedarea: [areaCanvasRenderer_1.areaCanvasRenderer],
59
- scatter: [pointCanvasRenderer_1.pointCanvasRenderer],
60
- bubble: [pointCanvasRenderer_1.pointCanvasRenderer],
61
- heatmap: [heatmapCanvasRenderer_1.heatmapCanvasRenderer],
62
- bar: [barCanvasRenderer_1.barCanvasRenderer],
63
- swarm: [swarmCanvasRenderer_1.swarmCanvasRenderer],
64
- waterfall: [waterfallCanvasRenderer_1.waterfallCanvasRenderer],
65
- candlestick: [candlestickCanvasRenderer_1.candlestickCanvasRenderer]
66
- };
67
- // ── Defaults ───────────────────────────────────────────────────────────
68
- const DEFAULT_MARGIN = { top: 20, right: 20, bottom: 30, left: 40 };
69
- const LIGHT_THEME = {
70
- axisStroke: "#ccc",
71
- tickText: "#666",
72
- crosshair: "rgba(0, 0, 0, 0.25)",
73
- hoverFill: "rgba(255, 255, 255, 0.3)",
74
- hoverStroke: "rgba(0, 0, 0, 0.4)",
75
- pointRing: "white"
76
- };
77
- function resolveThemeColors(el) {
78
- if (!el)
79
- return LIGHT_THEME;
80
- const style = getComputedStyle(el);
81
- const textSecondary = style.getPropertyValue("--text-secondary").trim();
82
- const textPrimary = style.getPropertyValue("--text-primary").trim();
83
- const surface3 = style.getPropertyValue("--surface-3").trim();
84
- const surface0 = style.getPropertyValue("--surface-0").trim();
85
- if (!textSecondary && !textPrimary)
86
- return LIGHT_THEME;
87
- return {
88
- axisStroke: surface3 || LIGHT_THEME.axisStroke,
89
- tickText: textSecondary || LIGHT_THEME.tickText,
90
- crosshair: textSecondary ? `${textSecondary}66` : LIGHT_THEME.crosshair,
91
- hoverFill: surface0 ? `${surface0}4D` : LIGHT_THEME.hoverFill,
92
- hoverStroke: textSecondary ? `${textSecondary}99` : LIGHT_THEME.hoverStroke,
93
- pointRing: surface0 || LIGHT_THEME.pointRing
94
- };
95
- }
96
- // ── Tooltip ────────────────────────────────────────────────────────────
97
- const defaultTooltipStyle = {
98
- background: "rgba(0, 0, 0, 0.85)",
99
- color: "white",
100
- padding: "6px 10px",
101
- borderRadius: 4,
102
- fontSize: 12,
103
- lineHeight: 1.5,
104
- boxShadow: "0 2px 8px rgba(0, 0, 0, 0.15)",
105
- pointerEvents: "none",
106
- whiteSpace: "nowrap"
107
- };
108
- function DefaultTooltip({ hover }) {
109
- const fmtValue = (v) => Number.isInteger(v) ? String(v) : v.toFixed(2);
110
- return (React.createElement("div", { className: "semiotic-tooltip", style: defaultTooltipStyle },
111
- React.createElement("div", { style: { fontWeight: 600, marginBottom: 2 } }, fmtValue(hover.value)),
112
- React.createElement("div", { style: { opacity: 0.7, fontSize: 11 } }, fmtValue(hover.time))));
113
- }
114
- // ── Crosshair drawing ──────────────────────────────────────────────────
115
- function drawCrosshair(ctx, hover, width, height, config, pointColor, theme) {
116
- const showCrosshair = config.crosshair !== false;
117
- if (!showCrosshair)
118
- return;
119
- ctx.save();
120
- const crossStyle = typeof config.crosshair === "object" ? config.crosshair : {};
121
- ctx.strokeStyle = crossStyle.stroke || theme.crosshair;
122
- ctx.lineWidth = crossStyle.strokeWidth || 1;
123
- if (crossStyle.strokeDasharray) {
124
- ctx.setLineDash(crossStyle.strokeDasharray.split(/[\s,]+/).map(Number));
125
- }
126
- else {
127
- ctx.setLineDash([4, 4]);
128
- }
129
- ctx.beginPath();
130
- ctx.moveTo(hover.x, 0);
131
- ctx.lineTo(hover.x, height);
132
- ctx.stroke();
133
- ctx.beginPath();
134
- ctx.moveTo(0, hover.y);
135
- ctx.lineTo(width, hover.y);
136
- ctx.stroke();
137
- ctx.restore();
138
- // Point indicator
139
- ctx.beginPath();
140
- ctx.arc(hover.x, hover.y, 4, 0, Math.PI * 2);
141
- ctx.fillStyle = pointColor;
142
- ctx.fill();
143
- ctx.strokeStyle = theme.pointRing;
144
- ctx.lineWidth = 2;
145
- ctx.stroke();
146
- }
147
- function BrushOverlay({ width, height, totalWidth, totalHeight, margin, dimension, scales, onBrush }) {
148
- const svgRef = (0, react_1.useRef)(null);
149
- const brushRef = (0, react_1.useRef)(null);
150
- (0, react_1.useEffect)(() => {
151
- if (!svgRef.current)
152
- return;
153
- const g = (0, d3_selection_1.select)(svgRef.current).select(".brush-g");
154
- const brushFn = dimension === "x"
155
- ? (0, d3_brush_1.brushX)()
156
- : dimension === "y"
157
- ? (0, d3_brush_1.brushY)()
158
- : (0, d3_brush_1.brush)();
159
- brushFn.extent([[0, 0], [width, height]]);
160
- brushFn.on("brush end", (event) => {
161
- if (!scales)
162
- return;
163
- if (!event.selection) {
164
- onBrush(null);
165
- return;
166
- }
167
- let xRange;
168
- let yRange;
169
- if (dimension === "x") {
170
- const [px0, px1] = event.selection;
171
- xRange = [scales.x.invert(px0), scales.x.invert(px1)];
172
- yRange = [scales.y.invert(height), scales.y.invert(0)];
173
- }
174
- else if (dimension === "y") {
175
- const [py0, py1] = event.selection;
176
- xRange = [scales.x.invert(0), scales.x.invert(width)];
177
- yRange = [scales.y.invert(py1), scales.y.invert(py0)];
178
- }
179
- else {
180
- const [[px0, py0], [px1, py1]] = event.selection;
181
- xRange = [scales.x.invert(px0), scales.x.invert(px1)];
182
- yRange = [scales.y.invert(py1), scales.y.invert(py0)];
183
- }
184
- onBrush({ x: xRange, y: yRange });
185
- });
186
- g.call(brushFn);
187
- brushRef.current = brushFn;
188
- // Style the brush selection rectangle
189
- g.select(".selection")
190
- .attr("fill", "steelblue")
191
- .attr("fill-opacity", 0.15)
192
- .attr("stroke", "steelblue")
193
- .attr("stroke-width", 1);
194
- return () => {
195
- brushFn.on("brush end", null);
196
- brushRef.current = null;
197
- };
198
- }, [width, height, dimension, scales, onBrush]);
199
- return (React.createElement("svg", { ref: svgRef, width: totalWidth, height: totalHeight, style: {
200
- position: "absolute",
201
- top: 0,
202
- left: 0,
203
- // Allow pointer events only on the brush overlay itself
204
- pointerEvents: "all"
205
- } },
206
- React.createElement("g", { className: "brush-g", transform: `translate(${margin.left},${margin.top})` })));
207
- }
208
- // ── StreamXYFrame ──────────────────────────────────────────────────────
209
- const StreamXYFrame = (0, react_1.forwardRef)(function StreamXYFrame(props, ref) {
210
- const { chartType, runtimeMode, data, xAccessor, yAccessor, colorAccessor, sizeAccessor, groupAccessor, lineDataAccessor, curve, normalize, binSize, valueAccessor, arrowOfTime = "right", windowMode = "sliding", windowSize = 200, timeAccessor, xExtent, yExtent, extentPadding = 0.1, sizeRange, size = [500, 300], margin: marginProp, className, background, lineStyle, pointStyle, areaStyle, barStyle, waterfallStyle, swarmStyle, barColors, colorScheme, boundsAccessor, boundsStyle, openAccessor, highAccessor, lowAccessor, closeAccessor, candlestickStyle, showAxes = true, xLabel, yLabel, xFormat, yFormat, tickFormatTime, tickFormatValue, hoverAnnotation, tooltipContent, customHoverBehavior, enableHover, annotations, svgAnnotationRules, showGrid, legend, backgroundGraphics, foregroundGraphics, title, categoryAccessor, brush, onBrush, decay, pulse, transition, staleness, heatmapAggregation, heatmapXBins, heatmapYBins, marginalGraphics } = props;
211
- const margin = { ...DEFAULT_MARGIN, ...marginProp };
212
- // Auto-expand margins to at least 60px when marginals are configured
213
- if (marginalGraphics) {
214
- const MIN_MARGINAL = 60;
215
- if (marginalGraphics.top && margin.top < MIN_MARGINAL)
216
- margin.top = MIN_MARGINAL;
217
- if (marginalGraphics.bottom && margin.bottom < MIN_MARGINAL)
218
- margin.bottom = MIN_MARGINAL;
219
- if (marginalGraphics.left && margin.left < MIN_MARGINAL)
220
- margin.left = MIN_MARGINAL;
221
- if (marginalGraphics.right && margin.right < MIN_MARGINAL)
222
- margin.right = MIN_MARGINAL;
223
- }
224
- const adjustedWidth = size[0] - margin.left - margin.right;
225
- const adjustedHeight = size[1] - margin.top - margin.bottom;
226
- // Determine effective hover annotation config
227
- const effectiveHoverAnnotation = hoverAnnotation ?? enableHover;
228
- // ── Refs ─────────────────────────────────────────────────────────────
229
- const canvasRef = (0, react_1.useRef)(null);
230
- const rafRef = (0, react_1.useRef)(0);
231
- const dirtyRef = (0, react_1.useRef)(false);
232
- const [annotationFrame, setAnnotationFrame] = (0, react_1.useState)(0);
233
- // Scales state: updated after each scene computation so SVGOverlay re-renders
234
- const [currentScales, setCurrentScales] = (0, react_1.useState)(null);
235
- // Hover state: ref for canvas (sync), React state for tooltip (async)
236
- const hoverRef = (0, react_1.useRef)(null);
237
- const [hoverPoint, setHoverPoint] = (0, react_1.useState)(null);
238
- // Staleness state
239
- const [isStale, setIsStale] = (0, react_1.useState)(false);
240
- // Marginal data values
241
- const [marginalXValues, setMarginalXValues] = (0, react_1.useState)([]);
242
- const [marginalYValues, setMarginalYValues] = (0, react_1.useState)([]);
243
- // Render function ref (always-fresh closure)
244
- const renderFnRef = (0, react_1.useRef)(() => { });
245
- // ── Pipeline ─────────────────────────────────────────────────────────
246
- const isStreaming = runtimeMode === "streaming" || ["bar", "swarm", "waterfall"].includes(chartType);
247
- const pipelineConfig = (0, react_1.useMemo)(() => ({
248
- chartType,
249
- runtimeMode: isStreaming ? "streaming" : "bounded",
250
- windowSize,
251
- windowMode,
252
- arrowOfTime: isStreaming ? arrowOfTime : "right",
253
- extentPadding,
254
- xAccessor: isStreaming ? undefined : xAccessor,
255
- yAccessor: isStreaming ? undefined : yAccessor,
256
- timeAccessor: isStreaming ? timeAccessor : undefined,
257
- valueAccessor,
258
- colorAccessor,
259
- sizeAccessor,
260
- groupAccessor,
261
- categoryAccessor,
262
- lineDataAccessor,
263
- xExtent,
264
- yExtent,
265
- sizeRange,
266
- binSize,
267
- normalize,
268
- boundsAccessor,
269
- boundsStyle,
270
- openAccessor,
271
- highAccessor,
272
- lowAccessor,
273
- closeAccessor,
274
- candlestickStyle,
275
- lineStyle,
276
- pointStyle,
277
- areaStyle,
278
- swarmStyle,
279
- colorScheme,
280
- barColors,
281
- annotations,
282
- decay,
283
- pulse,
284
- transition,
285
- staleness,
286
- heatmapAggregation,
287
- heatmapXBins,
288
- heatmapYBins
289
- }), [
290
- chartType, windowSize, windowMode, arrowOfTime, extentPadding,
291
- xAccessor, yAccessor, timeAccessor, valueAccessor,
292
- colorAccessor, sizeAccessor, groupAccessor, categoryAccessor,
293
- lineDataAccessor, xExtent, yExtent, sizeRange, binSize, normalize,
294
- boundsAccessor, boundsStyle,
295
- openAccessor, highAccessor, lowAccessor, closeAccessor, candlestickStyle,
296
- lineStyle, pointStyle, areaStyle, swarmStyle, colorScheme, barColors, annotations,
297
- decay, pulse, transition, staleness,
298
- heatmapAggregation, heatmapXBins, heatmapYBins,
299
- isStreaming
300
- ]);
301
- const storeRef = (0, react_1.useRef)(null);
302
- if (!storeRef.current) {
303
- storeRef.current = new PipelineStore_1.PipelineStore(pipelineConfig);
304
- }
305
- // ── Stable scheduleRender ────────────────────────────────────────────
306
- const scheduleRender = (0, react_1.useCallback)(() => {
307
- if (rafRef.current)
308
- return;
309
- rafRef.current = requestAnimationFrame(() => renderFnRef.current());
310
- }, []);
311
- // Update config when it changes — also schedule re-render since style
312
- // callbacks (pointStyle, areaStyle, etc.) may have changed.
313
- (0, react_1.useEffect)(() => {
314
- storeRef.current?.updateConfig(pipelineConfig);
315
- dirtyRef.current = true;
316
- scheduleRender();
317
- }, [pipelineConfig, scheduleRender]);
318
- // ── DataSourceAdapter ────────────────────────────────────────────────
319
- const adapterRef = (0, react_1.useRef)(null);
320
- if (!adapterRef.current) {
321
- adapterRef.current = new DataSourceAdapter_1.DataSourceAdapter((changeset) => {
322
- const store = storeRef.current;
323
- if (!store)
324
- return;
325
- const needsRender = store.ingest(changeset);
326
- if (needsRender) {
327
- dirtyRef.current = true;
328
- scheduleRender();
329
- }
330
- });
331
- }
332
- // ── Push API (ref handle) ────────────────────────────────────────────
333
- const pushPoint = (0, react_1.useCallback)((datum) => {
334
- adapterRef.current?.push(datum);
335
- }, []);
336
- const pushManyPoints = (0, react_1.useCallback)((data) => {
337
- adapterRef.current?.pushMany(data);
338
- }, []);
339
- const clearAll = (0, react_1.useCallback)(() => {
340
- adapterRef.current?.clear();
341
- storeRef.current?.clear();
342
- dirtyRef.current = true;
343
- scheduleRender();
344
- }, [scheduleRender]);
345
- (0, react_1.useImperativeHandle)(ref, () => ({
346
- push: pushPoint,
347
- pushMany: pushManyPoints,
348
- clear: clearAll,
349
- getData: () => storeRef.current?.getData() ?? [],
350
- getScales: () => storeRef.current?.scales ?? null,
351
- getExtents: () => storeRef.current?.getExtents() ?? null
352
- }), [pushPoint, pushManyPoints, clearAll]);
353
- // ── Controlled data prop ─────────────────────────────────────────────
354
- (0, react_1.useEffect)(() => {
355
- if (!data)
356
- return;
357
- adapterRef.current?.setBoundedData(data);
358
- }, [data]);
359
- // ── Hover handlers ───────────────────────────────────────────────────
360
- const hoverHandlerRef = (0, react_1.useRef)(() => { });
361
- const hoverLeaveRef = (0, react_1.useRef)(() => { });
362
- hoverHandlerRef.current = (e) => {
363
- if (!effectiveHoverAnnotation)
364
- return;
365
- const canvas = canvasRef.current;
366
- if (!canvas)
367
- return;
368
- const rect = canvas.getBoundingClientRect();
369
- const chartX = e.clientX - rect.left - margin.left;
370
- const chartY = e.clientY - rect.top - margin.top;
371
- if (chartX < 0 || chartX > adjustedWidth || chartY < 0 || chartY > adjustedHeight) {
372
- if (hoverRef.current) {
373
- hoverRef.current = null;
374
- setHoverPoint(null);
375
- if (customHoverBehavior)
376
- customHoverBehavior(null);
377
- scheduleRender();
378
- }
379
- return;
380
- }
381
- const store = storeRef.current;
382
- if (!store || store.scene.length === 0)
383
- return;
384
- // Hit test against scene graph
385
- const hit = (0, CanvasHitTester_1.findNearestNode)(store.scene, chartX, chartY);
386
- if (!hit) {
387
- if (hoverRef.current) {
388
- hoverRef.current = null;
389
- setHoverPoint(null);
390
- if (customHoverBehavior)
391
- customHoverBehavior(null);
392
- scheduleRender();
393
- }
394
- return;
395
- }
396
- const hover = {
397
- data: hit.datum,
398
- time: hit.x,
399
- value: hit.y,
400
- x: hit.x,
401
- y: hit.y
402
- };
403
- hoverRef.current = hover;
404
- setHoverPoint(hover);
405
- if (customHoverBehavior)
406
- customHoverBehavior(hover);
407
- scheduleRender();
408
- };
409
- hoverLeaveRef.current = () => {
410
- if (hoverRef.current) {
411
- hoverRef.current = null;
412
- setHoverPoint(null);
413
- if (customHoverBehavior)
414
- customHoverBehavior(null);
415
- scheduleRender();
416
- }
417
- };
418
- const onMouseMove = (0, react_1.useCallback)((e) => hoverHandlerRef.current(e), []);
419
- const onMouseLeave = (0, react_1.useCallback)(() => hoverLeaveRef.current(), []);
420
- // ── Render function ──────────────────────────────────────────────────
421
- renderFnRef.current = () => {
422
- rafRef.current = 0;
423
- const canvas = canvasRef.current;
424
- if (!canvas)
425
- return;
426
- const ctx = canvas.getContext("2d");
427
- if (!ctx)
428
- return;
429
- const store = storeRef.current;
430
- if (!store)
431
- return;
432
- const now = typeof performance !== "undefined" ? performance.now() : Date.now();
433
- // Advance transition animation (before scene rebuild)
434
- const isTransitioning = store.advanceTransition(now);
435
- // Compute scene graph (scales + scene nodes) — skip if mid-transition
436
- if (!isTransitioning) {
437
- store.computeScene({ width: adjustedWidth, height: adjustedHeight });
438
- }
439
- // DPR setup
440
- const dpr = typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1;
441
- canvas.width = size[0] * dpr;
442
- canvas.height = size[1] * dpr;
443
- canvas.style.width = `${size[0]}px`;
444
- canvas.style.height = `${size[1]}px`;
445
- ctx.scale(dpr, dpr);
446
- ctx.translate(margin.left, margin.top);
447
- ctx.clearRect(-margin.left, -margin.top, size[0], size[1]);
448
- const theme = resolveThemeColors(canvas);
449
- // Staleness dimming
450
- const staleThreshold = staleness?.threshold ?? 5000;
451
- const currentlyStale = staleness && store.lastIngestTime > 0 &&
452
- (now - store.lastIngestTime) > staleThreshold;
453
- if (currentlyStale) {
454
- ctx.globalAlpha = staleness?.dimOpacity ?? 0.5;
455
- }
456
- // Background
457
- if (background) {
458
- ctx.fillStyle = background;
459
- ctx.fillRect(0, 0, adjustedWidth, adjustedHeight);
460
- }
461
- // Render data marks via canvas renderers
462
- const renderers = RENDERERS[chartType];
463
- if (renderers && store.scales) {
464
- for (const renderer of renderers) {
465
- renderer(ctx, store.scene, store.scales, { width: adjustedWidth, height: adjustedHeight });
466
- }
467
- }
468
- // Reset alpha after staleness dimming
469
- if (currentlyStale) {
470
- ctx.globalAlpha = 1;
471
- }
472
- // Draw crosshair on hover
473
- if (effectiveHoverAnnotation && hoverRef.current && store.scales) {
474
- const config = typeof effectiveHoverAnnotation === "object" ? effectiveHoverAnnotation : {};
475
- drawCrosshair(ctx, hoverRef.current, adjustedWidth, adjustedHeight, config, "#007bff", theme);
476
- }
477
- const wasDirty = dirtyRef.current;
478
- dirtyRef.current = false;
479
- // Push scales into React state so SVGOverlay renders axes/grid
480
- if (wasDirty && store.scales) {
481
- setCurrentScales(store.scales);
482
- // Extract x/y values for marginal graphics
483
- if (marginalGraphics) {
484
- const rawData = store.getData();
485
- const getX = typeof xAccessor === "function"
486
- ? xAccessor
487
- : (d) => d[xAccessor || "x"];
488
- const getY = typeof yAccessor === "function"
489
- ? yAccessor
490
- : (d) => d[yAccessor || "y"];
491
- setMarginalXValues(rawData.map(d => getX(d)).filter((v) => typeof v === "number" && isFinite(v)));
492
- setMarginalYValues(rawData.map(d => getY(d)).filter((v) => typeof v === "number" && isFinite(v)));
493
- }
494
- }
495
- // Trigger React re-render for SVG annotations
496
- if (wasDirty && annotations && annotations.length > 0 && svgAnnotationRules) {
497
- setAnnotationFrame(f => f + 1);
498
- }
499
- // Update staleness React state for badge
500
- if (staleness?.showBadge) {
501
- setIsStale(!!currentlyStale);
502
- }
503
- // Schedule next frame for continuous rendering (pulse/transitions)
504
- if (isTransitioning || store.hasActivePulses) {
505
- rafRef.current = requestAnimationFrame(() => renderFnRef.current());
506
- }
507
- };
508
- // ── Lifecycle ────────────────────────────────────────────────────────
509
- (0, react_1.useEffect)(() => {
510
- scheduleRender();
511
- return () => {
512
- if (rafRef.current)
513
- cancelAnimationFrame(rafRef.current);
514
- };
515
- }, [scheduleRender]);
516
- // Re-render when visual props change
517
- (0, react_1.useEffect)(() => {
518
- dirtyRef.current = true;
519
- scheduleRender();
520
- }, [chartType, adjustedWidth, adjustedHeight, showAxes, background, lineStyle, scheduleRender]);
521
- // Staleness check timer
522
- (0, react_1.useEffect)(() => {
523
- if (!staleness)
524
- return;
525
- const interval = setInterval(() => {
526
- const store = storeRef.current;
527
- if (!store || store.lastIngestTime === 0)
528
- return;
529
- const now = typeof performance !== "undefined" ? performance.now() : Date.now();
530
- const threshold = staleness.threshold ?? 5000;
531
- const stale = (now - store.lastIngestTime) > threshold;
532
- if (stale !== isStale) {
533
- setIsStale(stale);
534
- dirtyRef.current = true;
535
- scheduleRender();
536
- }
537
- }, 1000);
538
- return () => clearInterval(interval);
539
- }, [staleness, isStale, scheduleRender]);
540
- // ── Tooltip positioning ──────────────────────────────────────────────
541
- const tooltipRendered = effectiveHoverAnnotation && hoverPoint
542
- ? (tooltipContent ? tooltipContent(hoverPoint) : React.createElement(DefaultTooltip, { hover: hoverPoint }))
543
- : null;
544
- const tooltipElement = tooltipRendered ? (React.createElement("div", { className: "stream-frame-tooltip", style: {
545
- position: "absolute",
546
- left: margin.left + hoverPoint.x,
547
- top: margin.top + hoverPoint.y,
548
- transform: `translate(${hoverPoint.x > adjustedWidth * 0.7 ? "calc(-100% - 12px)" : "12px"}, ${hoverPoint.y < adjustedHeight * 0.3 ? "4px" : "calc(-100% - 4px)"})`,
549
- pointerEvents: "none",
550
- zIndex: 1
551
- } }, tooltipRendered)) : null;
552
- // ── Render ───────────────────────────────────────────────────────────
553
- return (React.createElement("div", { className: `stream-xy-frame${className ? ` ${className}` : ""}`, style: {
554
- position: "relative",
555
- width: size[0],
556
- height: size[1]
557
- }, onMouseMove: effectiveHoverAnnotation ? onMouseMove : undefined, onMouseLeave: effectiveHoverAnnotation ? onMouseLeave : undefined },
558
- backgroundGraphics && (React.createElement("svg", { style: {
559
- position: "absolute",
560
- left: 0,
561
- top: 0,
562
- width: size[0],
563
- height: size[1],
564
- pointerEvents: "none"
565
- } }, backgroundGraphics)),
566
- React.createElement("canvas", { ref: canvasRef, style: {
567
- position: "absolute",
568
- left: 0,
569
- top: 0
570
- } }),
571
- React.createElement(SVGOverlay_1.SVGOverlay, { width: adjustedWidth, height: adjustedHeight, totalWidth: size[0], totalHeight: size[1], margin: margin, scales: currentScales, showAxes: showAxes, xLabel: xLabel, yLabel: yLabel, xFormat: xFormat || tickFormatTime, yFormat: yFormat || tickFormatValue, showGrid: showGrid, title: title, legend: legend, foregroundGraphics: foregroundGraphics, marginalGraphics: marginalGraphics, xValues: marginalXValues, yValues: marginalYValues, annotations: annotations, svgAnnotationRules: svgAnnotationRules, annotationFrame: annotationFrame }),
572
- (brush || onBrush) && (React.createElement(BrushOverlay, { width: adjustedWidth, height: adjustedHeight, totalWidth: size[0], totalHeight: size[1], margin: margin, dimension: brush?.dimension ?? "xy", scales: currentScales, onBrush: onBrush ?? (() => { }) })),
573
- staleness?.showBadge && (React.createElement("div", { className: "stream-staleness-badge", style: {
574
- position: "absolute",
575
- ...(staleness.badgePosition === "top-left" ? { top: 4, left: 4 } :
576
- staleness.badgePosition === "bottom-left" ? { bottom: 4, left: 4 } :
577
- staleness.badgePosition === "bottom-right" ? { bottom: 4, right: 4 } :
578
- { top: 4, right: 4 }),
579
- padding: "2px 8px",
580
- borderRadius: 4,
581
- fontSize: 11,
582
- fontWeight: 600,
583
- pointerEvents: "none",
584
- background: isStale ? "#dc3545" : "#28a745",
585
- color: "white"
586
- } }, isStale ? "STALE" : "LIVE")),
587
- tooltipElement));
588
- });
589
- StreamXYFrame.displayName = "StreamXYFrame";
590
- exports.default = StreamXYFrame;
@@ -1,20 +0,0 @@
1
- "use strict";
2
- // ── Accessor resolution ────────────────────────────────────────────────
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.resolveAccessor = resolveAccessor;
5
- exports.resolveStringAccessor = resolveStringAccessor;
6
- function resolveAccessor(accessor, fallback) {
7
- if (typeof accessor === "function")
8
- return (d) => +accessor(d);
9
- const key = accessor || fallback;
10
- return (d) => +d[key];
11
- }
12
- function resolveStringAccessor(accessor, fallback) {
13
- if (typeof accessor === "function")
14
- return accessor;
15
- if (accessor)
16
- return (d) => String(d[accessor]);
17
- if (fallback)
18
- return (d) => String(d[fallback]);
19
- return undefined;
20
- }
@@ -1,32 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.heatmapCanvasRenderer = exports.waterfallCanvasRenderer = exports.swarmCanvasRenderer = exports.barCanvasRenderer = exports.pointCanvasRenderer = exports.areaCanvasRenderer = exports.lineCanvasRenderer = exports.findNearestIndex = exports.findNearestNode = exports.PipelineStore = exports.DataSourceAdapter = exports.SVGOverlay = exports.StreamXYFrame = void 0;
7
- var StreamXYFrame_1 = require("./StreamXYFrame");
8
- Object.defineProperty(exports, "StreamXYFrame", { enumerable: true, get: function () { return __importDefault(StreamXYFrame_1).default; } });
9
- var SVGOverlay_1 = require("./SVGOverlay");
10
- Object.defineProperty(exports, "SVGOverlay", { enumerable: true, get: function () { return SVGOverlay_1.SVGOverlay; } });
11
- var DataSourceAdapter_1 = require("./DataSourceAdapter");
12
- Object.defineProperty(exports, "DataSourceAdapter", { enumerable: true, get: function () { return DataSourceAdapter_1.DataSourceAdapter; } });
13
- var PipelineStore_1 = require("./PipelineStore");
14
- Object.defineProperty(exports, "PipelineStore", { enumerable: true, get: function () { return PipelineStore_1.PipelineStore; } });
15
- var CanvasHitTester_1 = require("./CanvasHitTester");
16
- Object.defineProperty(exports, "findNearestNode", { enumerable: true, get: function () { return CanvasHitTester_1.findNearestNode; } });
17
- Object.defineProperty(exports, "findNearestIndex", { enumerable: true, get: function () { return CanvasHitTester_1.findNearestIndex; } });
18
- // Renderers
19
- var lineCanvasRenderer_1 = require("./renderers/lineCanvasRenderer");
20
- Object.defineProperty(exports, "lineCanvasRenderer", { enumerable: true, get: function () { return lineCanvasRenderer_1.lineCanvasRenderer; } });
21
- var areaCanvasRenderer_1 = require("./renderers/areaCanvasRenderer");
22
- Object.defineProperty(exports, "areaCanvasRenderer", { enumerable: true, get: function () { return areaCanvasRenderer_1.areaCanvasRenderer; } });
23
- var pointCanvasRenderer_1 = require("./renderers/pointCanvasRenderer");
24
- Object.defineProperty(exports, "pointCanvasRenderer", { enumerable: true, get: function () { return pointCanvasRenderer_1.pointCanvasRenderer; } });
25
- var barCanvasRenderer_1 = require("./renderers/barCanvasRenderer");
26
- Object.defineProperty(exports, "barCanvasRenderer", { enumerable: true, get: function () { return barCanvasRenderer_1.barCanvasRenderer; } });
27
- var swarmCanvasRenderer_1 = require("./renderers/swarmCanvasRenderer");
28
- Object.defineProperty(exports, "swarmCanvasRenderer", { enumerable: true, get: function () { return swarmCanvasRenderer_1.swarmCanvasRenderer; } });
29
- var waterfallCanvasRenderer_1 = require("./renderers/waterfallCanvasRenderer");
30
- Object.defineProperty(exports, "waterfallCanvasRenderer", { enumerable: true, get: function () { return waterfallCanvasRenderer_1.waterfallCanvasRenderer; } });
31
- var heatmapCanvasRenderer_1 = require("./renderers/heatmapCanvasRenderer");
32
- Object.defineProperty(exports, "heatmapCanvasRenderer", { enumerable: true, get: function () { return heatmapCanvasRenderer_1.heatmapCanvasRenderer; } });