semiotic 3.8.0 → 3.8.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 (331) hide show
  1. package/CLAUDE.md +14 -9
  2. package/README.md +56 -55
  3. package/ai/behaviorContracts.cjs +9 -0
  4. package/ai/dist/mcp-server.js +240 -30
  5. package/ai/schema.json +616 -42
  6. package/ai/surface-manifest.json +3 -2
  7. package/ai/system-prompt.md +7 -3
  8. package/dist/__tests__/scenarios/mcpProtocolTypes.d.ts +20 -0
  9. package/dist/chunk-OrdinalBrushOverlay-PXHQYDB2.module.min.js +2 -0
  10. package/dist/chunk-XYBrushOverlay-ECZJJLAJ.module.min.js +1 -0
  11. package/dist/chunk-XYBrushOverlay-EP2SV3UI.module.min.js +2 -0
  12. package/dist/chunk-chunk-255KDHW5.module.min.js +1 -0
  13. package/dist/chunk-chunk-27HVVXS6.module.min.js +1 -0
  14. package/dist/chunk-chunk-2CXCXRB4.module.min.js +1 -0
  15. package/dist/chunk-chunk-2JGJ5GUG.module.min.js +2 -0
  16. package/dist/chunk-chunk-2UN3ANRN.module.min.js +2 -0
  17. package/dist/chunk-chunk-2VUEY5TH.module.min.js +1 -0
  18. package/dist/chunk-chunk-2WVCH4PL.module.min.js +1 -0
  19. package/dist/chunk-chunk-5UKL5W76.module.min.js +2 -0
  20. package/dist/chunk-chunk-5WEFWNUW.module.min.js +2 -0
  21. package/dist/chunk-chunk-6F6GEAQU.module.min.js +1 -0
  22. package/dist/chunk-chunk-7LHMKRKE.module.min.js +2 -0
  23. package/dist/chunk-chunk-BHYTYMY2.module.min.js +2 -0
  24. package/dist/chunk-chunk-C6EJ4IOD.module.min.js +2 -0
  25. package/dist/chunk-chunk-CA3YDW6F.module.min.js +1 -0
  26. package/dist/chunk-chunk-CP3EN6KZ.module.min.js +1 -0
  27. package/dist/chunk-chunk-CYIML3AV.module.min.js +2 -0
  28. package/dist/chunk-chunk-DNY43POY.module.min.js +1 -0
  29. package/dist/chunk-chunk-DSNGDNJY.module.min.js +1 -0
  30. package/dist/chunk-chunk-E7MIQX7D.module.min.js +2 -0
  31. package/dist/chunk-chunk-EMO5NUGE.module.min.js +1 -0
  32. package/dist/chunk-chunk-ES4DCG3L.module.min.js +1 -0
  33. package/dist/chunk-chunk-FAKO3RGQ.module.min.js +2 -0
  34. package/dist/chunk-chunk-FYY2ACNJ.module.min.js +2 -0
  35. package/dist/chunk-chunk-G7WFWHAD.module.min.js +2 -0
  36. package/dist/chunk-chunk-GMQ5AYTD.module.min.js +1 -0
  37. package/dist/chunk-chunk-H4PPRW6N.module.min.js +1 -0
  38. package/dist/chunk-chunk-IFYPMWKY.module.min.js +1 -0
  39. package/dist/chunk-chunk-J3ELI22J.module.min.js +1 -0
  40. package/dist/chunk-chunk-J3QOW4OE.module.min.js +0 -0
  41. package/dist/chunk-chunk-J3XWETBJ.module.min.js +2 -0
  42. package/dist/chunk-chunk-JCG72SGW.module.min.js +2 -0
  43. package/dist/{semiotic-ai-chunk-OG7BQUUW.module.min.js → chunk-chunk-JJ2OOIET.module.min.js} +0 -1
  44. package/dist/chunk-chunk-KTWEBFMX.module.min.js +2 -0
  45. package/dist/chunk-chunk-L6D3I3V7.module.min.js +2 -0
  46. package/dist/chunk-chunk-M337NY6L.module.min.js +1 -0
  47. package/dist/chunk-chunk-NO4MCQVD.module.min.js +1 -0
  48. package/dist/chunk-chunk-ODUZEEBH.module.min.js +2 -0
  49. package/dist/chunk-chunk-P6UBCMSQ.module.min.js +2 -0
  50. package/dist/chunk-chunk-Q2YADC2V.module.min.js +2 -0
  51. package/dist/chunk-chunk-QRIBHZYW.module.min.js +1 -0
  52. package/dist/chunk-chunk-QSQVBIJA.module.min.js +1 -0
  53. package/dist/chunk-chunk-RCF52Z42.module.min.js +2 -0
  54. package/dist/chunk-chunk-RH5TSQPH.module.min.js +1 -0
  55. package/dist/chunk-chunk-ROP4HI7H.module.min.js +2 -0
  56. package/dist/chunk-chunk-RZH7VZYS.module.min.js +2 -0
  57. package/dist/chunk-chunk-SIRIJ3DY.module.min.js +1 -0
  58. package/dist/chunk-chunk-STZFFTAN.module.min.js +2 -0
  59. package/dist/chunk-chunk-SV4XAZ3Q.module.min.js +1 -0
  60. package/dist/chunk-chunk-T27ZEV6A.module.min.js +1 -0
  61. package/dist/chunk-chunk-U3AGQ5EF.module.min.js +2 -0
  62. package/dist/chunk-chunk-U66USBWU.module.min.js +1 -0
  63. package/dist/chunk-chunk-VVCA3DB7.module.min.js +1 -0
  64. package/dist/chunk-chunk-W3DB2MN4.module.min.js +2 -0
  65. package/dist/chunk-chunk-WCX6U47H.module.min.js +2 -0
  66. package/dist/chunk-chunk-WDIN4LRC.module.min.js +1 -0
  67. package/dist/chunk-chunk-XEVJDUTH.module.min.js +1 -0
  68. package/dist/chunk-chunk-XOYX77KF.module.min.js +2 -0
  69. package/dist/chunk-chunk-YCQYG6J5.module.min.js +2 -0
  70. package/dist/chunk-chunk-YHNZCPOZ.module.min.js +2 -0
  71. package/dist/chunk-chunk-YWZB3KPI.module.min.js +2 -0
  72. package/dist/chunk-chunk-Z5KXAVQD.module.min.js +2 -0
  73. package/dist/chunk-chunk-ZCNBUZPL.module.min.js +2 -0
  74. package/dist/chunk-chunk-ZLKRTF5N.module.min.js +2 -0
  75. package/dist/chunk-chunk-ZTNVDWAK.module.min.js +2 -0
  76. package/dist/chunk-statisticalOverlays-6MVAK5RW.module.min.js +2 -0
  77. package/dist/components/AccessibleNavTree.d.ts +7 -1
  78. package/dist/components/ai/chartClinicMetadata.generated.d.ts +15 -0
  79. package/dist/components/ai/useNavigationSync.d.ts +17 -2
  80. package/dist/components/chartContainerMobile.d.ts +9 -0
  81. package/dist/components/charts/geo/ChoroplethMap.d.ts +19 -2
  82. package/dist/components/charts/geo/DistanceCartogram.d.ts +14 -2
  83. package/dist/components/charts/geo/FlowMap.d.ts +10 -6
  84. package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +14 -2
  85. package/dist/components/charts/index.d.ts +6 -0
  86. package/dist/components/charts/network/ChordDiagram.d.ts +9 -1
  87. package/dist/components/charts/network/ForceDirectedGraph.d.ts +11 -0
  88. package/dist/components/charts/network/SankeyDiagram.d.ts +9 -1
  89. package/dist/components/charts/ordinal/BarChart.d.ts +21 -0
  90. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +11 -0
  91. package/dist/components/charts/ordinal/StackedBarChart.d.ts +11 -0
  92. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +7 -0
  93. package/dist/components/charts/physics/EventDropChart.d.ts +7 -0
  94. package/dist/components/charts/physics/GaltonBoardChart.d.ts +8 -0
  95. package/dist/components/charts/physics/PhysicalFlowChart.d.ts +7 -0
  96. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +4 -25
  97. package/dist/components/charts/physics/PhysicsPileChart.d.ts +7 -0
  98. package/dist/components/charts/physics/physicsChartShared.d.ts +17 -1
  99. package/dist/components/charts/physics/physicsCustomLayout.d.ts +32 -0
  100. package/dist/components/charts/shared/AnnotationLabel.d.ts +88 -0
  101. package/dist/components/charts/shared/annotationActivation.d.ts +35 -0
  102. package/dist/components/charts/shared/annotationLabelLayout.d.ts +5 -0
  103. package/dist/components/charts/shared/annotationRules.d.ts +2 -1
  104. package/dist/components/charts/shared/auditAccessibilityText.d.ts +13 -0
  105. package/dist/components/charts/shared/chartSelectionUtils.d.ts +4 -0
  106. package/dist/components/charts/shared/chartSpecCore.d.ts +3 -3
  107. package/dist/components/charts/shared/datumTypes.d.ts +2 -0
  108. package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +2 -0
  109. package/dist/components/charts/shared/formatUtils.d.ts +3 -3
  110. package/dist/components/charts/shared/hatchFill.d.ts +87 -0
  111. package/dist/components/charts/shared/hooks.d.ts +7 -6
  112. package/dist/components/charts/shared/knownChartComponents.d.ts +9 -0
  113. package/dist/components/charts/shared/leastSquaresRegression.d.ts +16 -0
  114. package/dist/components/charts/shared/mergeShapeStyle.d.ts +3 -2
  115. package/dist/components/charts/shared/semanticInteractions.d.ts +42 -0
  116. package/dist/components/charts/shared/sparseArray.d.ts +1 -1
  117. package/dist/components/charts/shared/streamPropsHelpers.d.ts +6 -4
  118. package/dist/components/charts/shared/styleRules.d.ts +205 -0
  119. package/dist/components/charts/shared/tooltipUtils.d.ts +22 -9
  120. package/dist/components/charts/shared/types.d.ts +9 -6
  121. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +16 -2
  122. package/dist/components/charts/shared/useChartSetup.d.ts +2 -2
  123. package/dist/components/charts/shared/useCustomChartSetup.d.ts +3 -0
  124. package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -2
  125. package/dist/components/charts/shared/useLikertAggregation.d.ts +4 -4
  126. package/dist/components/charts/shared/useOrdinalBrush.d.ts +2 -1
  127. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +24 -1
  128. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  129. package/dist/components/charts/shared/useXYLineStyle.d.ts +10 -0
  130. package/dist/components/charts/shared/useXYPointStyle.d.ts +19 -1
  131. package/dist/components/charts/shared/validateChartData.d.ts +7 -5
  132. package/dist/components/charts/shared/validationMap.d.ts +11 -2
  133. package/dist/components/charts/shared/validationMap.generated.d.ts +6 -0
  134. package/dist/components/charts/shared/withChartWrapper.d.ts +4 -3
  135. package/dist/components/charts/value/targetPresentation.d.ts +22 -0
  136. package/dist/components/charts/value/types.d.ts +5 -6
  137. package/dist/components/charts/xy/AreaChart.d.ts +8 -0
  138. package/dist/components/charts/xy/BubbleChart.d.ts +9 -0
  139. package/dist/components/charts/xy/ConnectedScatterplot.d.ts +7 -0
  140. package/dist/components/charts/xy/DifferenceChart.d.ts +1 -52
  141. package/dist/components/charts/xy/Heatmap.d.ts +2 -2
  142. package/dist/components/charts/xy/LineChart.d.ts +11 -0
  143. package/dist/components/charts/xy/QuadrantChart.d.ts +7 -0
  144. package/dist/components/charts/xy/Scatterplot.d.ts +10 -0
  145. package/dist/components/charts/xy/StackedAreaChart.d.ts +7 -0
  146. package/dist/components/charts/xy/differenceSegments.d.ts +49 -0
  147. package/dist/components/charts/xy/scatterplotMatrixInteractionTypes.d.ts +12 -0
  148. package/dist/components/controls/SentenceFilter.d.ts +97 -0
  149. package/dist/components/data/fromVegaLite.d.ts +19 -9
  150. package/dist/components/rough/createRoughRenderMode.d.ts +46 -0
  151. package/dist/components/semiotic-ai.d.ts +3 -1
  152. package/dist/components/semiotic-controls.d.ts +2 -0
  153. package/dist/components/semiotic-geo.d.ts +4 -0
  154. package/dist/components/semiotic-network.d.ts +4 -0
  155. package/dist/components/semiotic-ordinal.d.ts +6 -0
  156. package/dist/components/semiotic-physics.d.ts +4 -0
  157. package/dist/components/semiotic-rough.d.ts +4 -0
  158. package/dist/components/semiotic-utils-core.d.ts +4 -0
  159. package/dist/components/semiotic-xy.d.ts +4 -0
  160. package/dist/components/semiotic.d.ts +9 -1
  161. package/dist/components/server/optionalImageTypes.d.ts +37 -0
  162. package/dist/components/server/serverChartConfigShared.d.ts +9 -5
  163. package/dist/components/server/serverChartConfigs.d.ts +4 -4
  164. package/dist/components/server/staticAnnotations.d.ts +6 -3
  165. package/dist/components/server/staticLegend.d.ts +1 -1
  166. package/dist/components/server/staticNetwork.d.ts +4 -4
  167. package/dist/components/server/staticSVGChrome.d.ts +5 -4
  168. package/dist/components/store/ObservationStore.d.ts +21 -1
  169. package/dist/components/stream/AccessibleDataTable.d.ts +4 -10
  170. package/dist/components/stream/AriaLiveTooltip.d.ts +9 -0
  171. package/dist/components/stream/CanvasHitTester.d.ts +4 -4
  172. package/dist/components/stream/DataSourceAdapter.d.ts +1 -1
  173. package/dist/components/stream/FrameRuntime.d.ts +57 -0
  174. package/dist/components/stream/GeoParticlePool.d.ts +1 -1
  175. package/dist/components/stream/GeoPipelineStore.d.ts +43 -12
  176. package/dist/components/stream/GeoSVGOverlay.d.ts +64 -0
  177. package/dist/components/stream/NetworkCanvasHitTester.d.ts +2 -1
  178. package/dist/components/stream/NetworkPipelineStore.d.ts +24 -21
  179. package/dist/components/stream/NetworkSSRFrame.d.ts +17 -0
  180. package/dist/components/stream/NetworkSVGOverlay.d.ts +6 -0
  181. package/dist/components/stream/OrdinalBrushOverlay.d.ts +1 -2
  182. package/dist/components/stream/OrdinalBrushOverlayLazy.d.ts +9 -0
  183. package/dist/components/stream/OrdinalCanvasHitTester.d.ts +2 -2
  184. package/dist/components/stream/OrdinalPipelineStore.d.ts +13 -13
  185. package/dist/components/stream/OrdinalSVGOverlay.d.ts +9 -1
  186. package/dist/components/stream/OrdinalStyleResolver.d.ts +12 -0
  187. package/dist/components/stream/ParticlePool.d.ts +1 -1
  188. package/dist/components/stream/PipelineStore.d.ts +12 -16
  189. package/dist/components/stream/SVGOverlay.d.ts +6 -0
  190. package/dist/components/stream/SceneGraph.d.ts +3 -3
  191. package/dist/components/stream/XYBrushOverlayLazy.d.ts +17 -0
  192. package/dist/components/stream/accessorUtils.d.ts +2 -2
  193. package/dist/components/stream/annotationAccessorResolver.d.ts +2 -2
  194. package/dist/components/stream/frameGraphics.d.ts +4 -0
  195. package/dist/components/stream/frameKeyboardNavigation.d.ts +45 -0
  196. package/dist/components/stream/geoPipelineHelpers.d.ts +3 -3
  197. package/dist/components/stream/geoPipelineUpdateResults.d.ts +34 -0
  198. package/dist/components/stream/geoSceneBuilder.d.ts +16 -0
  199. package/dist/components/stream/geoTypes.d.ts +48 -15
  200. package/dist/components/stream/hitTestUtils.d.ts +2 -2
  201. package/dist/components/stream/hoverUtils.d.ts +4 -2
  202. package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +1 -0
  203. package/dist/components/stream/layouts/hierarchyUtils.d.ts +2 -2
  204. package/dist/components/stream/networkCustomLayoutRunner.d.ts +23 -0
  205. package/dist/components/stream/networkCustomRestyle.d.ts +15 -0
  206. package/dist/components/stream/networkFrameAnimation.d.ts +7 -0
  207. package/dist/components/stream/networkFrameHandleTypes.d.ts +39 -0
  208. package/dist/components/stream/networkFrameObservations.d.ts +15 -0
  209. package/dist/components/stream/networkFramePaint.d.ts +11 -2
  210. package/dist/components/stream/networkInteractionTypes.d.ts +26 -0
  211. package/dist/components/stream/networkPipelineConfig.d.ts +2 -2
  212. package/dist/components/stream/networkPipelineUpdateResults.d.ts +38 -0
  213. package/dist/components/stream/networkTypes.d.ts +37 -56
  214. package/dist/components/stream/ordinalCanvasRenderers.d.ts +2 -2
  215. package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +20 -1
  216. package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -2
  217. package/dist/components/stream/ordinalTypes.d.ts +30 -3
  218. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +2 -0
  219. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +6 -0
  220. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +21 -6
  221. package/dist/components/stream/physics/physicsFrameObservations.d.ts +19 -0
  222. package/dist/components/stream/physics/physicsFrameSetup.d.ts +4 -0
  223. package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +19 -1
  224. package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +3 -1
  225. package/dist/components/stream/pipelineConfig.d.ts +4 -2
  226. package/dist/components/stream/pipelineDecay.d.ts +2 -2
  227. package/dist/components/stream/pipelinePulse.d.ts +2 -2
  228. package/dist/components/stream/pipelineStoreUpdateResults.d.ts +23 -2
  229. package/dist/components/stream/pipelineTransitions.d.ts +1 -1
  230. package/dist/components/stream/pipelineUpdateContract.d.ts +7 -0
  231. package/dist/components/stream/pipelineUpdateStore.d.ts +21 -0
  232. package/dist/components/stream/renderBackend.d.ts +27 -0
  233. package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +15 -1
  234. package/dist/components/stream/renderers/geoCanvasRenderer.d.ts +3 -2
  235. package/dist/components/stream/renderers/networkParticleRenderer.d.ts +1 -1
  236. package/dist/components/stream/sceneRenderBackendTypes.d.ts +28 -0
  237. package/dist/components/stream/sceneRevisionDiagnostics.d.ts +31 -4
  238. package/dist/components/stream/streamSemanticTypes.d.ts +16 -0
  239. package/dist/components/stream/streamThemeTypes.d.ts +14 -0
  240. package/dist/components/stream/svgOverlayUtils.d.ts +10 -0
  241. package/dist/components/stream/test-utils/frameScheduler.d.ts +12 -0
  242. package/dist/components/stream/test-utils/revisionConsumption.d.ts +13 -0
  243. package/dist/components/stream/titleLayout.d.ts +31 -0
  244. package/dist/components/stream/types.d.ts +30 -65
  245. package/dist/components/stream/useCanvasFrameHost.d.ts +71 -0
  246. package/dist/components/stream/useFrame.d.ts +23 -0
  247. package/dist/components/stream/useLegendCategoryEmission.d.ts +3 -3
  248. package/dist/components/stream/useSemanticFrameInteractions.d.ts +22 -0
  249. package/dist/components/stream/useUpdateResultSnapshot.d.ts +7 -0
  250. package/dist/components/stream/xyFrameAxisTypes.d.ts +50 -0
  251. package/dist/components/stream/xySceneBuilders/types.d.ts +6 -5
  252. package/dist/controls.min.js +1 -1
  253. package/dist/controls.module.min.js +1 -1
  254. package/dist/forceLayoutWorker.js +1 -1
  255. package/dist/geo.min.js +1 -1
  256. package/dist/geo.module.min.js +1 -1
  257. package/dist/network.min.js +1 -1
  258. package/dist/network.module.min.js +1 -1
  259. package/dist/ordinal.min.js +1 -1
  260. package/dist/ordinal.module.min.js +1 -1
  261. package/dist/physics-matter.min.js +1 -1
  262. package/dist/physics-matter.module.min.js +1 -1
  263. package/dist/physics-rapier.min.js +1 -1
  264. package/dist/physics-rapier.module.min.js +1 -1
  265. package/dist/physics.min.js +1 -1
  266. package/dist/physics.module.min.js +1 -1
  267. package/dist/physicsWorker.js +1 -1
  268. package/dist/realtime.min.js +1 -1
  269. package/dist/realtime.module.min.js +1 -1
  270. package/dist/rough.min.js +1 -0
  271. package/dist/rough.module.min.js +1 -0
  272. package/dist/semiotic-ai-core.min.js +1 -1
  273. package/dist/semiotic-ai-core.module.min.js +1 -1
  274. package/dist/semiotic-ai.d.ts +3 -1
  275. package/dist/semiotic-ai.min.js +1 -1
  276. package/dist/semiotic-ai.module.min.js +1 -1
  277. package/dist/semiotic-controls.d.ts +2 -0
  278. package/dist/semiotic-data.min.js +1 -1
  279. package/dist/semiotic-data.module.min.js +1 -1
  280. package/dist/semiotic-experimental.min.js +1 -1
  281. package/dist/semiotic-experimental.module.min.js +1 -1
  282. package/dist/semiotic-geo.d.ts +4 -0
  283. package/dist/semiotic-network.d.ts +4 -0
  284. package/dist/semiotic-ordinal.d.ts +6 -0
  285. package/dist/semiotic-physics.d.ts +4 -0
  286. package/dist/semiotic-realtime-core.min.js +1 -1
  287. package/dist/semiotic-realtime-core.module.min.js +1 -1
  288. package/dist/semiotic-realtime-react.min.js +1 -1
  289. package/dist/semiotic-realtime-react.module.min.js +1 -1
  290. package/dist/semiotic-recipes-core.min.js +1 -1
  291. package/dist/semiotic-recipes-core.module.min.js +1 -1
  292. package/dist/semiotic-recipes-react.min.js +1 -1
  293. package/dist/semiotic-recipes-react.module.min.js +1 -1
  294. package/dist/semiotic-recipes.min.js +1 -1
  295. package/dist/semiotic-recipes.module.min.js +1 -1
  296. package/dist/semiotic-rough.d.ts +4 -0
  297. package/dist/semiotic-server-edge.min.js +1 -1
  298. package/dist/semiotic-server-edge.module.min.js +1 -1
  299. package/dist/semiotic-server-node.min.js +1 -1
  300. package/dist/semiotic-server-node.module.min.js +1 -1
  301. package/dist/semiotic-themes-core.min.js +1 -1
  302. package/dist/semiotic-themes-core.module.min.js +1 -1
  303. package/dist/semiotic-themes-react.min.js +1 -1
  304. package/dist/semiotic-themes-react.module.min.js +1 -1
  305. package/dist/semiotic-themes.min.js +1 -1
  306. package/dist/semiotic-themes.module.min.js +1 -1
  307. package/dist/semiotic-utils-core.d.ts +4 -0
  308. package/dist/semiotic-utils-core.min.js +1 -1
  309. package/dist/semiotic-utils-core.module.min.js +1 -1
  310. package/dist/semiotic-utils-react.min.js +1 -1
  311. package/dist/semiotic-utils-react.module.min.js +1 -1
  312. package/dist/semiotic-utils.min.js +1 -1
  313. package/dist/semiotic-utils.module.min.js +1 -1
  314. package/dist/semiotic-value.min.js +1 -1
  315. package/dist/semiotic-value.module.min.js +1 -1
  316. package/dist/semiotic-xy.d.ts +4 -0
  317. package/dist/semiotic.d.ts +9 -1
  318. package/dist/semiotic.min.js +1 -1
  319. package/dist/semiotic.module.min.js +1 -1
  320. package/dist/server.min.js +1 -1
  321. package/dist/server.module.min.js +1 -1
  322. package/dist/test-utils/capturedFrameProps.d.ts +67 -0
  323. package/dist/test-utils/frameMock.d.ts +12 -9
  324. package/dist/xy.min.js +1 -1
  325. package/dist/xy.module.min.js +1 -1
  326. package/package.json +29 -10
  327. package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +0 -2
  328. package/dist/semiotic-chunk-3FSVZ46U.module.min.js +0 -2
  329. package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +0 -2
  330. package/dist/xy-chunk-IWD6IB6V.module.min.js +0 -2
  331. package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +0 -2
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { GeoProjection, GeoPath, GeoPermissibleObjects } from "d3-geo";
3
3
  import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
4
- import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, SceneDatum, PointSceneNode, GlyphSceneNode, ThemeSemanticColors, SceneAccessibilityMetadata } from "./types";
4
+ import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, SceneDatum, PointSceneNode, GlyphSceneNode, ThemeSemanticColors, SceneAccessibilityMetadata, SceneRenderMode } from "./types";
5
5
  import type { AnimateProp } from "./pipelineTransitionUtils";
6
6
  import type { HoverAnnotationConfig, HoverData } from "../realtime/types";
7
7
  import type { GeoParticleStyle } from "./GeoParticlePool";
@@ -11,6 +11,9 @@ import type { MarginType } from "../types/marginType";
11
11
  import type { GeoCustomLayout } from "./geoCustomLayout";
12
12
  import type { CustomLayoutSelection } from "./customLayoutSelection";
13
13
  import type { CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
14
+ import type { OnObservationCallback } from "../store/ObservationStore";
15
+ import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
16
+ import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
14
17
  export type ProjectionProp = GeoProjection | ProjectionName | ProjectionConfig;
15
18
  export type ProjectionName = "mercator" | "equalEarth" | "albersUsa" | "orthographic" | "naturalEarth" | "equirectangular";
16
19
  export interface ProjectionConfig {
@@ -69,7 +72,7 @@ export interface GeoLineSceneNode {
69
72
  export type GeoSceneNode = GeoAreaSceneNode | PointSceneNode | GlyphSceneNode | GeoLineSceneNode;
70
73
  export interface GeoScales {
71
74
  projection: GeoProjection;
72
- geoPath: GeoPath<any, GeoPermissibleObjects>;
75
+ geoPath: GeoPath<void, GeoPermissibleObjects>;
73
76
  projectedPoint: (lon: number, lat: number) => [number, number] | null;
74
77
  invertedPoint: (px: number, py: number) => [number, number] | null;
75
78
  }
@@ -77,19 +80,20 @@ export interface GeoPipelineConfig {
77
80
  projection: ProjectionProp;
78
81
  projectionExtent?: [[number, number], [number, number]];
79
82
  /**
80
- * Auto-fit padding as a **fraction** of the plot (0–0.5), not pixels.
81
- * `0.1` insets the fitted geography 10% from each edge. A value `>= 1` is
82
- * almost always a pixel mistake and collapses the projection off-canvas.
83
+ * Projection-fit padding as a finite fraction of the plot, not pixels.
84
+ * Valid values are in `[0, 0.5)`; `0.1` insets automatic fitting 10% from
85
+ * each edge. `null` and `undefined` use `0`; other values throw `RangeError`
86
+ * at the config boundary. Ignored when `projectionExtent` is supplied.
83
87
  * @default 0
84
88
  */
85
- fitPadding?: number;
89
+ fitPadding?: number | null;
86
90
  xAccessor?: string | ((d: Datum) => number);
87
91
  yAccessor?: string | ((d: Datum) => number);
88
92
  lineDataAccessor?: string | ((d: Datum) => Datum[]);
89
93
  lineType?: "geo" | "line";
90
94
  /** Flow rendering style: "basic" (straight/great-circle), "offset" (bidirectional offset), "arc" (curved arcs) @default "basic" */
91
95
  flowStyle?: "basic" | "offset" | "arc";
92
- areaStyle?: Style | ((d: Datum) => Style);
96
+ areaStyle?: Style | ((d: GeoJSON.Feature) => Style);
93
97
  pointStyle?: (d: Datum) => Style & {
94
98
  r?: number;
95
99
  };
@@ -103,6 +107,10 @@ export interface GeoPipelineConfig {
103
107
  themeDiverging?: string;
104
108
  graticule?: boolean | GraticuleConfig;
105
109
  projectionTransform?: DistanceCartogramConfig;
110
+ /** Maximum retained points and lines after the store enters streaming mode. @default 500 */
111
+ windowSize?: number;
112
+ /** Logical clock used for Geo pulse and transition work. */
113
+ clock?: import("./FrameRuntime").FrameClock;
106
114
  decay?: DecayConfig;
107
115
  pulse?: PulseConfig;
108
116
  transition?: TransitionConfig;
@@ -125,12 +133,13 @@ export interface StreamGeoFrameProps<T = Datum> {
125
133
  projection: ProjectionProp;
126
134
  projectionExtent?: [[number, number], [number, number]];
127
135
  /**
128
- * Auto-fit padding as a **fraction** of the plot (0–0.5), not pixels.
129
- * `0.1` insets the fitted geography 10% from each edge. A value `>= 1` is
130
- * almost always a pixel mistake and collapses the projection off-canvas.
136
+ * Projection-fit padding as a finite fraction of the plot, not pixels.
137
+ * Valid values are in `[0, 0.5)`; `0.1` insets automatic fitting 10% from
138
+ * each edge. `null` and `undefined` use `0`; other values throw `RangeError`
139
+ * at the config boundary. Ignored when `projectionExtent` is supplied.
131
140
  * @default 0
132
141
  */
133
- fitPadding?: number;
142
+ fitPadding?: number | null;
134
143
  areas?: GeoJSON.Feature[];
135
144
  points?: T[];
136
145
  lines?: T[];
@@ -190,7 +199,11 @@ export interface StreamGeoFrameProps<T = Datum> {
190
199
  className?: string;
191
200
  background?: string;
192
201
  runtimeMode?: "bounded" | "streaming";
193
- areaStyle?: Style | ((d: Datum) => Style);
202
+ /** Maximum retained points and lines after imperative streaming begins. @default 500 */
203
+ windowSize?: number;
204
+ /** Optional scene paint backend. Exact projected geometry remains interactive. */
205
+ renderMode?: SceneRenderMode<GeoSceneNode>;
206
+ areaStyle?: Style | ((d: GeoJSON.Feature) => Style);
194
207
  pointStyle?: (d: Datum) => Style & {
195
208
  r?: number;
196
209
  };
@@ -214,9 +227,17 @@ export interface StreamGeoFrameProps<T = Datum> {
214
227
  * @default false
215
228
  */
216
229
  allowTooltipOverflow?: boolean;
217
- customClickBehavior?: (d: HoverData | null) => void;
218
- customHoverBehavior?: (d: HoverData | null) => void;
230
+ customClickBehavior?: SemanticClickBehavior<HoverData>;
231
+ customHoverBehavior?: SemanticHoverBehavior<HoverData>;
232
+ /** Structured interaction observations, including semantic focus/activate. */
233
+ onObservation?: OnObservationCallback;
234
+ /** @internal HOC observation callback forwarded only to annotation widgets. */
235
+ annotationObservationCallback?: OnObservationCallback;
236
+ /** Chart instance identifier included in observation events. */
237
+ chartId?: string;
219
238
  annotations?: Datum[];
239
+ /** Observe activation of widget annotations without replacing widget behavior. */
240
+ onAnnotationActivate?: OnAnnotationActivateCallback;
220
241
  autoPlaceAnnotations?: AutoPlaceAnnotations;
221
242
  decay?: DecayConfig;
222
243
  pulse?: PulseConfig;
@@ -226,6 +247,18 @@ export interface StreamGeoFrameProps<T = Datum> {
226
247
  * Set `{ intro: false }` to disable the intro animation. */
227
248
  animate?: AnimateProp;
228
249
  staleness?: StalenessConfig;
250
+ /** Optional rAF seam for deterministic host scheduling. */
251
+ frameScheduler?: import("./useFrame").FrameScheduler;
252
+ /** Monotonic wall-clock seam for deterministic replay, tests, or evidence capture. */
253
+ clock?: import("./FrameRuntime").FrameClock;
254
+ /** Injectable random source for frame-local stochastic work. */
255
+ random?: import("./FrameRuntime").FrameRandom;
256
+ /** Serializable deterministic random seed. Ignored when `random` is supplied. */
257
+ seed?: number;
258
+ /** Freeze logical animation time and cancel queued work while paused. */
259
+ paused?: boolean;
260
+ /** Freeze logical animation time while the page is hidden. Defaults to true for Geo frames. */
261
+ suspendWhenHidden?: boolean;
229
262
  backgroundGraphics?: ReactNode;
230
263
  foregroundGraphics?: ReactNode;
231
264
  title?: string | ReactNode;
@@ -271,7 +304,7 @@ export interface StreamGeoFrameHandle {
271
304
  getLines(): Datum[];
272
305
  clear(): void;
273
306
  getProjection(): GeoProjection | null;
274
- getGeoPath(): GeoPath<any, GeoPermissibleObjects> | null;
307
+ getGeoPath(): GeoPath<void, GeoPermissibleObjects> | null;
275
308
  /** Get cartogram layout info (center position, max cost, radius) */
276
309
  getCartogramLayout(): {
277
310
  cx: number;
@@ -27,11 +27,11 @@ export declare function getHitRadius(nodeRadius: number | undefined, maxDistance
27
27
  * Convert a value to a Date if possible. Returns null for non-date values.
28
28
  * Treats numbers > 1e9 as millisecond timestamps.
29
29
  */
30
- export declare function toDate(value: any): Date | null;
30
+ export declare function toDate(value: Date | number | string | null | undefined): Date | null;
31
31
  /**
32
32
  * Detect whether a tick marks a time boundary (new month or year) compared to the previous tick.
33
33
  */
34
- export declare function isTimeLandmark(value: any, prevValue: any): boolean;
34
+ export declare function isTimeLandmark(value: Date | number | string | null | undefined, prevValue: Date | number | string | null | undefined): boolean;
35
35
  /**
36
36
  * Normalize an angle to the [0, 2π) range.
37
37
  */
@@ -7,6 +7,8 @@
7
7
  * property flattening that are handled at the call site.
8
8
  */
9
9
  import type { HoverData } from "../realtime/types";
10
+ import type { Datum } from "../charts/shared/datumTypes";
11
+ export type RawHoverDatum = Datum | Datum[] | null;
10
12
  /**
11
13
  * Minimal shape a Stream Frame's internal hover handler needs from a pointer
12
14
  * event. React.MouseEvent satisfies this structurally, as does the plain
@@ -22,7 +24,7 @@ export interface HoverPointerCoords {
22
24
  }
23
25
  export declare const TOUCH_HIT_RADIUS = 24;
24
26
  export declare function getPointerHitRadius(baseRadius: number, pointerType?: string): number;
25
- export declare function normalizeHoverDatum(rawDatum: any): any;
27
+ export declare function normalizeHoverDatum(rawDatum: RawHoverDatum): Datum | null;
26
28
  /**
27
29
  * Build a HoverData object from a raw datum and pixel coordinates.
28
30
  * The raw datum is preserved as `hover.data` for tooltip / callback
@@ -30,4 +32,4 @@ export declare function normalizeHoverDatum(rawDatum: any): any;
30
32
  * relevant to a specific frame family — `category`, `stats`,
31
33
  * `nodeOrEdge`, `xValue`, etc. — is layered in via `extra`.
32
34
  */
33
- export declare function buildHoverData(rawDatum: any, x: number, y: number, extra?: Partial<HoverData>): HoverData;
35
+ export declare function buildHoverData(rawDatum: RawHoverDatum, x: number, y: number, extra?: Partial<HoverData>): HoverData;
@@ -17,6 +17,7 @@ export interface FrameForceWorkerRequest {
17
17
  chartType: "force";
18
18
  iterations?: number;
19
19
  forceStrength?: number;
20
+ seed?: number;
20
21
  };
21
22
  size: [number, number];
22
23
  }
@@ -20,7 +20,7 @@ export declare function parseColor(color: string): [number, number, number];
20
20
  * Uses perceived luminance (ITU-R BT.601).
21
21
  */
22
22
  export declare function contrastTextColor(bgColor: string): string;
23
- export declare function resolveChildrenAccessor(accessor: string | ((d: Datum) => any[]) | undefined): ((d: Datum) => any[]) | undefined;
24
- export declare function resolveNodeId(d: any, config: NetworkPipelineConfig, index: number): string;
23
+ export declare function resolveChildrenAccessor(accessor: string | ((d: Datum) => Datum[]) | undefined): ((d: Datum) => Datum[]) | undefined;
24
+ export declare function resolveNodeId(d: Datum, config: NetworkPipelineConfig, index: number): string;
25
25
  export declare function resolveLabelFn(nodeLabel: string | ((d: Datum) => string) | undefined): ((d: Datum) => string) | null;
26
26
  export declare function resolveDefaultNodeSize(nodeSize: number | string | ((d: Datum) => number) | undefined): number;
@@ -0,0 +1,23 @@
1
+ import type { NetworkLayoutResult } from "./networkCustomLayout";
2
+ import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
3
+ import type { NetworkPipelineConfig, RealtimeEdge, RealtimeNode } from "./networkTypes";
4
+ interface NetworkCustomLayoutRunInput {
5
+ config: NetworkPipelineConfig;
6
+ customLayout: NonNullable<NetworkPipelineConfig["customNetworkLayout"]>;
7
+ size: [number, number];
8
+ nodes: RealtimeNode[];
9
+ edges: RealtimeEdge[];
10
+ previousResult: NetworkLayoutResult | null;
11
+ revision: number;
12
+ }
13
+ export type NetworkCustomLayoutRunResult = {
14
+ kind: "success";
15
+ result: NetworkLayoutResult;
16
+ } | {
17
+ kind: "failure";
18
+ diagnostic: CustomLayoutFailureDiagnostic;
19
+ preservedLastGoodScene: boolean;
20
+ };
21
+ /** Runs user-provided network layout code behind the common failure boundary. */
22
+ export declare function runNetworkCustomLayout({ config, customLayout, size, nodes, edges, previousResult, revision }: NetworkCustomLayoutRunInput): NetworkCustomLayoutRunResult;
23
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { CustomLayoutSelection } from "./customLayoutSelection";
2
+ import type { NetworkLayoutResult } from "./networkCustomLayout";
3
+ import type { NetworkSceneEdge, NetworkSceneNode } from "./networkTypes";
4
+ import type { Style } from "./types";
5
+ export declare function snapshotNetworkCustomStyles(nodes: NetworkSceneNode[], edges: NetworkSceneEdge[]): WeakMap<object, Style>;
6
+ interface NetworkRestyleInput {
7
+ nodes: NetworkSceneNode[];
8
+ edges: NetworkSceneEdge[];
9
+ restyle: NetworkLayoutResult["restyle"];
10
+ restyleEdge: NetworkLayoutResult["restyleEdge"];
11
+ baseStyles: WeakMap<object, Style>;
12
+ selection: CustomLayoutSelection | null;
13
+ }
14
+ export declare function restyleNetworkCustomScene({ nodes, edges, restyle, restyleEdge, baseStyles, selection }: NetworkRestyleInput): boolean;
15
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Whether the network paint loop needs another animation frame.
3
+ *
4
+ * Particles are continuous only for sankey and custom layouts; pulse and
5
+ * pipeline animations apply to every chart type.
6
+ */
7
+ export declare function shouldContinueNetworkAnimation(chartType: string, hasCustomNetworkLayout: boolean, showParticles: boolean, hasPulse: boolean, isStoreAnimating: boolean): boolean;
@@ -0,0 +1,39 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ import type { EdgePush, RealtimeEdge, RealtimeNode } from "./networkTypes";
3
+ import type { CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
4
+ import type { NetworkLayoutResult } from "./networkCustomLayout";
5
+ /** Imperative API exposed by `StreamNetworkFrame` refs. */
6
+ export interface StreamNetworkFrameHandle {
7
+ push(edge: EdgePush): void;
8
+ pushMany(edges: EdgePush[]): void;
9
+ /** Remove a node by ID. Also removes connected edges. */
10
+ removeNode(id: string): boolean;
11
+ /** Remove edges by source+target, or by edge ID when edgeIdAccessor is configured. */
12
+ removeEdge(sourceIdOrEdgeId: string, targetId?: string): boolean;
13
+ /** Update a node's data by ID. Returns previous data. */
14
+ updateNode(id: string, updater: (data: Datum) => Datum): Datum | null;
15
+ /** Update all edges between source+target. Returns array of previous data. */
16
+ updateEdge(sourceId: string, targetId: string, updater: (data: Datum) => Datum): Datum[];
17
+ clear(): void;
18
+ getTopology(): {
19
+ nodes: RealtimeNode[];
20
+ edges: RealtimeEdge[];
21
+ };
22
+ getTopologyDiff(): {
23
+ addedNodes: string[];
24
+ removedNodes: string[];
25
+ addedEdges: string[];
26
+ removedEdges: string[];
27
+ };
28
+ relayout(): void;
29
+ getTension(): number;
30
+ /** The most recent custom layout result (sceneNodes/sceneEdges/overlays as
31
+ * returned by `customNetworkLayout`) - host readback so pages that need the
32
+ * computed placement do not re-run the layout. Null before the first layout
33
+ * or when no custom layout is configured. A failed retry retains the prior
34
+ * good result; inspect `getLayoutFailure()` to distinguish recovery. */
35
+ getCustomLayout(): NetworkLayoutResult | null;
36
+ /** The latest custom-layout failure, if any. Cleared by a successful layout,
37
+ * removing the custom layout, or `clear()`. */
38
+ getLayoutFailure(): CustomLayoutFailureDiagnostic | null;
39
+ }
@@ -0,0 +1,15 @@
1
+ import { type SemanticClickBehavior, type SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
2
+ import type { HoverData } from "../realtime/types";
3
+ import type { OnObservationCallback } from "../store/ObservationStore";
4
+ interface NetworkObservationBehaviorOptions {
5
+ customHoverBehavior?: SemanticHoverBehavior<HoverData>;
6
+ customClickBehavior?: SemanticClickBehavior<HoverData>;
7
+ onObservation?: OnObservationCallback;
8
+ chartId?: string;
9
+ }
10
+ /** Adds the standard observation vocabulary to the network behavior callbacks. */
11
+ export declare function useNetworkObservationBehaviors({ customHoverBehavior: customHoverBehaviorProp, customClickBehavior: customClickBehaviorProp, onObservation, chartId }: NetworkObservationBehaviorOptions): {
12
+ customHoverBehavior: SemanticHoverBehavior<HoverData>;
13
+ customClickBehavior: SemanticClickBehavior<HoverData>;
14
+ };
15
+ export {};
@@ -1,21 +1,30 @@
1
1
  import type { NetworkPipelineStore } from "./NetworkPipelineStore";
2
- import type { NetworkPipelineConfig, ParticleStyle, RealtimeEdge } from "./networkTypes";
2
+ import type { SceneRevisionDiagnostics } from "./sceneRevisionDiagnostics";
3
+ import type { NetworkPipelineConfig, ParticleStyle, RealtimeEdge, NetworkSceneNode, NetworkSceneEdge } from "./networkTypes";
3
4
  import type { MarginType } from "../types/marginType";
4
- import type { DecayConfig, PulseConfig, StalenessConfig } from "./types";
5
+ import type { DecayConfig, PulseConfig, StalenessConfig, SceneRenderMode } from "./types";
5
6
  export interface NetworkFramePaintContext {
6
7
  canvas: HTMLCanvasElement;
7
8
  store: NetworkPipelineStore;
9
+ sceneRevisionDiagnostics?: SceneRevisionDiagnostics;
8
10
  size: [number, number];
9
11
  margin: MarginType;
10
12
  adjustedWidth: number;
11
13
  adjustedHeight: number;
12
14
  background?: string;
15
+ renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
16
+ /** Skip opaque canvas fill when an SVG backgroundGraphics layer is present. */
17
+ hasBackgroundGraphics?: boolean;
13
18
  dirtyRef: {
14
19
  current: boolean;
15
20
  };
16
21
  lastFrameTimeRef: {
17
22
  current: number;
18
23
  };
24
+ /** FrameRuntime logical timestamp for this paint. */
25
+ now: number;
26
+ /** FrameRuntime random source for particle placement/spawn sampling. */
27
+ random: () => number;
19
28
  reducedMotion: boolean;
20
29
  showParticles: boolean;
21
30
  isContinuous: boolean;
@@ -0,0 +1,26 @@
1
+ import type { ReactNode } from "react";
2
+ import type { Datum } from "../charts/shared/datumTypes";
3
+ import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
4
+ import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
5
+ import type { AnnotationContext, HoverData } from "../realtime/types";
6
+ import type { AutoPlaceAnnotations } from "../recipes/annotationLayout";
7
+ import type { OnObservationCallback } from "../store/ObservationStore";
8
+ /** Interaction and annotation callbacks shared by every network chart layout. */
9
+ export interface StreamNetworkInteractionProps<Node, Edge> {
10
+ enableHover?: boolean;
11
+ tooltipContent?: (d: HoverData) => ReactNode;
12
+ customHoverBehavior?: SemanticHoverBehavior<HoverData>;
13
+ customClickBehavior?: SemanticClickBehavior<HoverData>;
14
+ /** Observation callback — emits hover/click events to the ObservationStore and this callback. */
15
+ onObservation?: OnObservationCallback;
16
+ /** @internal HOC observation callback forwarded only to annotation widgets. */
17
+ annotationObservationCallback?: OnObservationCallback;
18
+ /** Chart instance identifier for observation filtering. */
19
+ chartId?: string;
20
+ onTopologyChange?: (nodes: Node[], edges: Edge[]) => void;
21
+ annotations?: Datum[];
22
+ /** Observe activation of widget annotations without replacing widget behavior. */
23
+ onAnnotationActivate?: OnAnnotationActivateCallback;
24
+ autoPlaceAnnotations?: AutoPlaceAnnotations;
25
+ svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
26
+ }
@@ -5,7 +5,7 @@
5
5
  import type { SemioticTheme } from "../store/ThemeStore";
6
6
  import type { NetworkPipelineConfig } from "./networkTypes";
7
7
  import type { StreamNetworkFrameProps } from "./networkTypes";
8
- export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "nodeStyle" | "edgeStyle" | "nodeLabel" | "showLabels" | "labelMode" | "colorBy" | "colorScheme" | "edgeColorBy" | "edgeOpacity" | "colorByDepth" | "nodeSize" | "nodeSizeRange" | "decay" | "pulse" | "transition" | "staleness" | "thresholds" | "orbitMode" | "orbitSize" | "orbitSpeed" | "orbitRevolution" | "orbitRevolutionStyle" | "orbitEccentricity" | "orbitShowRings" | "orbitAnimated" | "customNetworkLayout" | "onLayoutError" | "layoutConfig"> & {
8
+ export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "nodeStyle" | "edgeStyle" | "nodeLabel" | "showLabels" | "labelMode" | "colorBy" | "colorScheme" | "edgeColorBy" | "edgeOpacity" | "colorByDepth" | "nodeSize" | "nodeSizeRange" | "decay" | "pulse" | "transition" | "staleness" | "thresholds" | "orbitMode" | "orbitSize" | "orbitSpeed" | "orbitRevolution" | "orbitRevolutionStyle" | "orbitEccentricity" | "orbitShowRings" | "orbitAnimated" | "clock" | "random" | "seed" | "customNetworkLayout" | "onLayoutError" | "layoutConfig"> & {
9
9
  tensionConfig: NetworkPipelineConfig["tensionConfig"];
10
10
  showParticles: boolean;
11
11
  particleStyle: NetworkPipelineConfig["particleStyle"];
@@ -14,7 +14,7 @@ export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartT
14
14
  };
15
15
  export declare function buildNetworkPipelineConfig(sources: NetworkPipelineConfigSources): NetworkPipelineConfig;
16
16
  /** Fields that force re-ingest / re-layout when changed. */
17
- export type NetworkLayoutConfigSignature = Pick<NetworkPipelineConfigSources, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "tensionConfig" | "customNetworkLayout"> & {
17
+ export type NetworkLayoutConfigSignature = Pick<NetworkPipelineConfigSources, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "random" | "seed" | "tensionConfig" | "customNetworkLayout"> & {
18
18
  orbitMode?: NetworkPipelineConfigSources["orbitMode"];
19
19
  orbitSize?: NetworkPipelineConfigSources["orbitSize"];
20
20
  orbitEccentricity?: NetworkPipelineConfigSources["orbitEccentricity"];
@@ -0,0 +1,38 @@
1
+ import { type ChangeSet, type Invalidation, type UpdateResult } from "./pipelineUpdateContract";
2
+ /**
3
+ * The retained topology is unchanged by most config updates. The distinction
4
+ * is public here because callers must not mistake a config patch for a new
5
+ * ingest: only accessor/chart-type patches need the retained raw graph
6
+ * re-derived before the declared layout work runs.
7
+ */
8
+ export type NetworkRetainedDataEffect = "preserve" | "rebuild";
9
+ export interface NetworkConfigPatchDependency {
10
+ readonly retainedData: NetworkRetainedDataEffect;
11
+ readonly invalidations: readonly Invalidation[];
12
+ }
13
+ /**
14
+ * Network's config dependency table. It is deliberately key-level rather
15
+ * than a single conservative fallback so an integration can inspect whether
16
+ * a patch rebuilds retained topology, relays out marks, repaints styles, or
17
+ * only changes future work. Unknown future keys retain the safe layout
18
+ * fallback below until they receive an explicit entry.
19
+ */
20
+ export declare const NETWORK_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, NetworkConfigPatchDependency>>;
21
+ export interface NetworkConfigPatchClassification {
22
+ readonly retainedData: NetworkRetainedDataEffect;
23
+ readonly invalidations: ReadonlySet<Invalidation>;
24
+ }
25
+ /** Union the declared effects for a patch after its effective keys are known. */
26
+ export declare function classifyNetworkConfigPatch(keys: readonly string[]): NetworkConfigPatchClassification;
27
+ type DataChangeKind = Extract<ChangeSet["kind"], "ingest" | "replace" | "remove" | "update" | "clear">;
28
+ /** Result bookkeeping and explicit config-patch dependency policy for Network. */
29
+ export declare class NetworkPipelineUpdateResults {
30
+ private tracker;
31
+ get last(): UpdateResult;
32
+ subscribe(listener: () => void): () => void;
33
+ recordData(kind: DataChangeKind, count?: number): UpdateResult;
34
+ recordNoop(kind: DataChangeKind | "restyle"): UpdateResult;
35
+ recordRestyle(hasCustomRestyle: boolean): UpdateResult;
36
+ recordConfig(keys: readonly string[]): UpdateResult;
37
+ }
38
+ export {};
@@ -1,13 +1,17 @@
1
1
  import type { ReactNode } from "react";
2
- import type { OnObservationCallback } from "../store/ObservationStore";
3
- import type { HoverData, AnnotationContext } from "../realtime/types";
2
+ import type { HoverData } from "../realtime/types";
3
+ import type { Datum } from "../charts/shared/datumTypes";
4
+ type NetworkDatumComparator = {
5
+ bivarianceHack(a: Datum, b: Datum): number;
6
+ }["bivarianceHack"];
7
+ type NetworkGroupComparator = (a: number, b: number) => number;
4
8
  import type { LegendGroup, LegendLayout } from "../types/legendTypes";
5
- import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, SceneDatum, SceneAccessibilityMetadata } from "./types";
9
+ import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, SceneDatum, SceneAccessibilityMetadata, SceneRenderMode } from "./types";
6
10
  import type { AnimateProp } from "./pipelineTransitionUtils";
7
- import type { Datum } from "../charts/shared/datumTypes";
8
- import type { AutoPlaceAnnotations } from "../recipes/annotationLayout";
9
11
  import type { NetworkSymbolName } from "./symbolPath";
10
12
  import type { GlyphDef } from "./glyphDef";
13
+ import type { StreamNetworkFrameHandle } from "./networkFrameHandleTypes";
14
+ import type { StreamNetworkInteractionProps } from "./networkInteractionTypes";
11
15
  export interface TensionConfig {
12
16
  weightChange: number;
13
17
  newEdge: number;
@@ -184,6 +188,8 @@ export interface RealtimeNetworkFrameProps {
184
188
  tensionConfig?: Partial<TensionConfig>;
185
189
  showParticles?: boolean;
186
190
  particleStyle?: ParticleStyle;
191
+ /** Optional scene paint backend. Exact node and edge geometry remains interactive. */
192
+ renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
187
193
  colorBy?: string | ((d: RealtimeNode) => string);
188
194
  colorScheme?: string | string[] | Record<string, string>;
189
195
  edgeColorBy?: "source" | "target" | ((d: RealtimeEdge) => string);
@@ -445,6 +451,12 @@ export interface ThresholdAlertConfig {
445
451
  }
446
452
  export interface NetworkPipelineConfig {
447
453
  chartType: NetworkChartType;
454
+ /** Frame-owned logical clock for ingest, live encodings, and transitions. */
455
+ clock?: import("./FrameRuntime").FrameClock;
456
+ /** Frame-local random source used by synchronous force layout. */
457
+ random?: import("./FrameRuntime").FrameRandom;
458
+ /** Serializable deterministic seed, including the force-worker protocol. */
459
+ seed?: number;
448
460
  nodeIDAccessor?: string | ((d: Datum) => string);
449
461
  sourceAccessor?: string | ((d: Datum) => string);
450
462
  targetAccessor?: string | ((d: Datum) => string);
@@ -457,14 +469,14 @@ export interface NetworkPipelineConfig {
457
469
  nodeAlign?: "justify" | "left" | "right" | "center";
458
470
  nodePaddingRatio?: number;
459
471
  nodeWidth?: number;
460
- edgeSort?: (a: unknown, b: unknown) => number;
472
+ edgeSort?: NetworkDatumComparator;
461
473
  iterations?: number;
462
474
  forceStrength?: number;
463
475
  /** @internal Skip simulation after worker-computed positions are applied. */
464
476
  __skipForceSimulation?: boolean;
465
477
  padAngle?: number;
466
478
  groupWidth?: number;
467
- sortGroups?: (a: unknown, b: unknown) => number;
479
+ sortGroups?: NetworkGroupComparator;
468
480
  treeOrientation?: "vertical" | "horizontal" | "radial";
469
481
  edgeType?: "line" | "curve";
470
482
  padding?: number;
@@ -541,7 +553,7 @@ export interface NetworkPipelineConfig {
541
553
  * `buildScene` (re-emitting dimmed marks) without a re-ingest or re-layout. */
542
554
  layoutSelection?: import("./networkCustomLayout").NetworkLayoutSelection | null;
543
555
  }
544
- export interface StreamNetworkFrameProps<T = Datum> {
556
+ export interface StreamNetworkFrameProps<T = Datum> extends StreamNetworkInteractionProps<RealtimeNode, RealtimeEdge> {
545
557
  chartType: NetworkChartType;
546
558
  nodes?: T[];
547
559
  edges?: T[] | T;
@@ -570,8 +582,10 @@ export interface StreamNetworkFrameProps<T = Datum> {
570
582
  onLayoutStateChange?: (state: "pending" | "ready" | "error") => void;
571
583
  padAngle?: number;
572
584
  groupWidth?: number;
573
- sortGroups?: (a: unknown, b: unknown) => number;
574
- edgeSort?: (a: unknown, b: unknown) => number;
585
+ sortGroups?: NetworkGroupComparator;
586
+ edgeSort?: NetworkDatumComparator;
587
+ /** Optional scene paint backend. Exact node and edge geometry remains interactive. */
588
+ renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
575
589
  treeOrientation?: "vertical" | "horizontal" | "radial";
576
590
  edgeType?: "line" | "curve";
577
591
  padding?: number;
@@ -602,18 +616,6 @@ export interface StreamNetworkFrameProps<T = Datum> {
602
616
  };
603
617
  className?: string;
604
618
  background?: string;
605
- enableHover?: boolean;
606
- tooltipContent?: (d: HoverData) => ReactNode;
607
- customHoverBehavior?: (d: HoverData | null) => void;
608
- customClickBehavior?: (d: HoverData | null) => void;
609
- /** Observation callback — emits hover/click events to the ObservationStore and this callback */
610
- onObservation?: OnObservationCallback;
611
- /** Chart instance identifier for observation filtering */
612
- chartId?: string;
613
- onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void;
614
- annotations?: Datum[];
615
- autoPlaceAnnotations?: AutoPlaceAnnotations;
616
- svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
617
619
  legend?: ReactNode | {
618
620
  legendGroups: LegendGroup[];
619
621
  };
@@ -638,6 +640,18 @@ export interface StreamNetworkFrameProps<T = Datum> {
638
640
  * Set `{ intro: false }` to disable the intro animation. */
639
641
  animate?: AnimateProp;
640
642
  staleness?: StalenessConfig;
643
+ /** Optional rAF seam for deterministic host scheduling. */
644
+ frameScheduler?: import("./useFrame").FrameScheduler;
645
+ /** Monotonic wall-clock seam used to derive logical frame time. */
646
+ clock?: import("./FrameRuntime").FrameClock;
647
+ /** Injectable random source for force layout and particles. */
648
+ random?: import("./FrameRuntime").FrameRandom;
649
+ /** Serializable deterministic random seed. Ignored when `random` is supplied. */
650
+ seed?: number;
651
+ /** Freeze logical animation time and cancel queued work while paused. */
652
+ paused?: boolean;
653
+ /** Freeze logical animation time while the document is hidden. Defaults to true. */
654
+ suspendWhenHidden?: boolean;
641
655
  thresholds?: ThresholdAlertConfig;
642
656
  orbitMode?: "flat" | "solar" | "atomic" | number[];
643
657
  orbitSize?: number | ((node: Datum) => number);
@@ -666,38 +680,5 @@ export interface StreamNetworkFrameProps<T = Datum> {
666
680
  * `selection` / `linkedHover` wiring; render-only (no re-ingest on change). */
667
681
  layoutSelection?: import("./networkCustomLayout").NetworkLayoutSelection | null;
668
682
  }
669
- export interface StreamNetworkFrameHandle {
670
- push(edge: EdgePush): void;
671
- pushMany(edges: EdgePush[]): void;
672
- /** Remove a node by ID. Also removes connected edges. */
673
- removeNode(id: string): boolean;
674
- /** Remove edges by source+target, or by edge ID when edgeIdAccessor is configured. */
675
- removeEdge(sourceIdOrEdgeId: string, targetId?: string): boolean;
676
- /** Update a node's data by ID. Returns previous data. */
677
- updateNode(id: string, updater: (data: Datum) => Datum): Datum | null;
678
- /** Update all edges between source+target. Returns array of previous data. */
679
- updateEdge(sourceId: string, targetId: string, updater: (data: Datum) => Datum): Datum[];
680
- clear(): void;
681
- getTopology(): {
682
- nodes: RealtimeNode[];
683
- edges: RealtimeEdge[];
684
- };
685
- getTopologyDiff(): {
686
- addedNodes: string[];
687
- removedNodes: string[];
688
- addedEdges: string[];
689
- removedEdges: string[];
690
- };
691
- relayout(): void;
692
- getTension(): number;
693
- /** The most recent custom layout result (sceneNodes/sceneEdges/overlays as
694
- * returned by `customNetworkLayout`) — host readback so pages that need the
695
- * computed placement don't re-run the layout. Null before the first layout
696
- * or when no custom layout is configured. A failed retry retains the prior
697
- * good result; inspect `getLayoutFailure()` to distinguish recovery. */
698
- getCustomLayout(): import("./networkCustomLayout").NetworkLayoutResult | null;
699
- /** The latest custom-layout failure, if any. Cleared by a successful layout,
700
- * removing the custom layout, or `clear()`. */
701
- getLayoutFailure(): import("./customLayoutFailure").CustomLayoutFailureDiagnostic | null;
702
- }
683
+ export type { StreamNetworkFrameHandle } from "./networkFrameHandleTypes";
703
684
  export type NetworkRendererFn = (ctx: CanvasRenderingContext2D, nodes: NetworkSceneNode[], edges: NetworkSceneEdge[], size: [number, number]) => void;
@@ -2,6 +2,6 @@
2
2
  * Chart-type → canvas renderer dispatch for StreamOrdinalFrame.
3
3
  * Connectors are always included when the chart type builds them into the scene.
4
4
  */
5
- import type { OrdinalChartType } from "./ordinalTypes";
6
- export type OrdinalAnyRendererFn = (ctx: CanvasRenderingContext2D, nodes: any[], scales: any, layout: any) => void;
5
+ import type { OrdinalChartType, OrdinalRendererFn } from "./ordinalTypes";
6
+ export type OrdinalAnyRendererFn = OrdinalRendererFn;
7
7
  export declare const ORDINAL_CANVAS_RENDERERS: Record<OrdinalChartType, OrdinalAnyRendererFn[]>;
@@ -1,9 +1,28 @@
1
- import { type ChangeSet, type UpdateResult } from "./pipelineUpdateContract";
1
+ import { type ChangeSet, type Invalidation, type UpdateResult } from "./pipelineUpdateContract";
2
+ /** Whether a config patch re-derives retained ordinal data resources. */
3
+ export type OrdinalRetainedDataEffect = "preserve" | "rebuild";
4
+ export interface OrdinalConfigPatchDependency {
5
+ readonly retainedData: OrdinalRetainedDataEffect;
6
+ readonly invalidations: readonly Invalidation[];
7
+ }
8
+ /**
9
+ * Ordinal's key-level patch policy. Category/value/order accessors re-derive
10
+ * retained categorical state. Layout, style, and future-only controls expose
11
+ * distinct revision effects instead of the previous blanket scene rebuild.
12
+ */
13
+ export declare const ORDINAL_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, OrdinalConfigPatchDependency>>;
14
+ export interface OrdinalConfigPatchClassification {
15
+ readonly retainedData: OrdinalRetainedDataEffect;
16
+ readonly invalidations: ReadonlySet<Invalidation>;
17
+ }
18
+ /** Union the declared effects for a patch after its effective keys are known. */
19
+ export declare function classifyOrdinalConfigPatch(keys: readonly string[]): OrdinalConfigPatchClassification;
2
20
  type DataChangeKind = Extract<ChangeSet["kind"], "ingest" | "replace" | "remove" | "update" | "clear">;
3
21
  /** Result bookkeeping and invalidation policy for the Ordinal store pilot. */
4
22
  export declare class OrdinalPipelineUpdateResults {
5
23
  private tracker;
6
24
  get last(): UpdateResult;
25
+ subscribe(listener: () => void): () => void;
7
26
  recordData(kind: DataChangeKind, count?: number): UpdateResult;
8
27
  recordNoop(kind: DataChangeKind | "restyle"): UpdateResult;
9
28
  recordRestyle(hasCustomRestyle: boolean): UpdateResult;