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
@@ -16,8 +16,8 @@ export interface OrdinalSceneContext {
16
16
  getO: (d: Datum) => string;
17
17
  multiScales: ScaleLinear<number, number>[];
18
18
  rAccessors: ((d: Datum) => number)[];
19
- resolvePieceStyle: (d: any, category?: string) => Style;
20
- resolveSummaryStyle: (d: any, category?: string) => Style;
19
+ resolvePieceStyle: (d: Datum | null, category?: string) => Style;
20
+ resolveSummaryStyle: (d: Datum | null, category?: string) => Style;
21
21
  /** For timeline: resolve rAccessor as [start, end] */
22
22
  getRawRange: (d: Datum) => [number, number] | null;
23
23
  }
@@ -3,10 +3,13 @@ import type { ScaleLinear, ScaleBand } from "d3-scale";
3
3
  import type { WindowMode, HoverAnnotationConfig, HoverData, AnnotationContext } from "../realtime/types";
4
4
  import type { AutoPlaceAnnotations } from "../recipes/annotationLayout";
5
5
  import type { SymbolName } from "./symbolPath";
6
- import type { Style, SceneDatum, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, FrameGraphicsProp, SceneAccessibilityMetadata } from "./types";
6
+ import type { Style, SceneDatum, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, FrameGraphicsProp, SceneAccessibilityMetadata, SceneRenderMode } from "./types";
7
7
  import type { AnimateProp } from "./pipelineTransitionUtils";
8
8
  import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
9
9
  import type { Datum } from "../charts/shared/datumTypes";
10
+ import type { OnObservationCallback } from "../store/ObservationStore";
11
+ import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
12
+ import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
10
13
  export type OrdinalChartType = "bar" | "clusterbar" | "point" | "swarm" | "pie" | "donut" | "boxplot" | "violin" | "histogram" | "ridgeline" | "timeline" | "funnel" | "bar-funnel" | "swimlane" | "custom";
11
14
  export interface OrdinalScales {
12
15
  o: ScaleBand<string>;
@@ -280,6 +283,8 @@ export interface OrdinalPipelineConfig {
280
283
  /** Whether to animate elements on first render (bars grow from baseline, wedges sweep in) */
281
284
  introAnimation?: boolean;
282
285
  staleness?: StalenessConfig;
286
+ /** Frame-owned logical clock for ingest, pulse, staleness, and transitions. */
287
+ clock?: import("./FrameRuntime").FrameClock;
283
288
  /** When provided, replaces chart-type dispatch in scene building.
284
289
  * Receives an OrdinalLayoutContext (scales, dimensions, theme,
285
290
  * resolveColor) and returns scene nodes plus optional overlays. */
@@ -384,6 +389,8 @@ export interface StreamOrdinalFrameProps<T = Datum> {
384
389
  * it's a band scale, not a continuous one. Ignored when explicit
385
390
  * `rTickValues` are provided — caller has hand-picked positions. */
386
391
  axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
392
+ /** Optional scene paint backend. Exact scene geometry remains interactive. */
393
+ renderMode?: SceneRenderMode<OrdinalSceneNode>;
387
394
  pieceStyle?: (d: Datum, category?: string) => Style;
388
395
  summaryStyle?: (d: Datum, category?: string) => Style;
389
396
  colorScheme?: string | string[] | Record<string, string>;
@@ -409,9 +416,17 @@ export interface StreamOrdinalFrameProps<T = Datum> {
409
416
  enableHover?: boolean;
410
417
  hoverAnnotation?: boolean | HoverAnnotationConfig;
411
418
  tooltipContent?: (d: HoverData) => ReactNode;
412
- customHoverBehavior?: (d: HoverData | null) => void;
413
- customClickBehavior?: (d: HoverData | null) => void;
419
+ customHoverBehavior?: SemanticHoverBehavior<HoverData>;
420
+ customClickBehavior?: SemanticClickBehavior<HoverData>;
421
+ /** Structured interaction observations, including semantic focus/activate. */
422
+ onObservation?: OnObservationCallback;
423
+ /** @internal HOC observation callback forwarded only to annotation widgets. */
424
+ annotationObservationCallback?: OnObservationCallback;
425
+ /** Chart instance identifier included in observation events. */
426
+ chartId?: string;
414
427
  annotations?: Datum[];
428
+ /** Observe activation of widget annotations without replacing widget behavior. */
429
+ onAnnotationActivate?: OnAnnotationActivateCallback;
415
430
  autoPlaceAnnotations?: AutoPlaceAnnotations;
416
431
  svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
417
432
  showGrid?: boolean;
@@ -460,6 +475,18 @@ export interface StreamOrdinalFrameProps<T = Datum> {
460
475
  * Set `{ intro: false }` to disable the intro animation. */
461
476
  animate?: AnimateProp;
462
477
  staleness?: StalenessConfig;
478
+ /** Optional rAF seam for deterministic host scheduling. */
479
+ frameScheduler?: import("./useFrame").FrameScheduler;
480
+ /** Monotonic wall-clock seam used to derive logical frame time. */
481
+ clock?: import("./FrameRuntime").FrameClock;
482
+ /** Injectable frame-local random source. Ordinal rendering currently has no stochastic layout. */
483
+ random?: import("./FrameRuntime").FrameRandom;
484
+ /** Serializable deterministic random seed for future ordinal stochastic work. */
485
+ seed?: number;
486
+ /** Freeze logical animation time and cancel queued work while paused. */
487
+ paused?: boolean;
488
+ /** Freeze logical animation time while the document is hidden. Defaults to true. */
489
+ suspendWhenHidden?: boolean;
463
490
  /** Render a visually-hidden data table from the scene graph for screen readers */
464
491
  accessibleTable?: boolean;
465
492
  /** Accessible description overriding the auto-generated aria-label on the chart container */
@@ -56,6 +56,8 @@ export declare class PhysicsPipelineStore {
56
56
  recordObservation(record: PhysicsObservationRecord): PhysicsObservationEvent;
57
57
  /** Most recent explicit update result for a revision-aware host or tool. */
58
58
  getLastUpdateResult(): UpdateResult;
59
+ getUpdateSnapshot(): UpdateResult;
60
+ subscribeUpdateResult(listener: () => void): () => void;
59
61
  version(): number;
60
62
  setPaused(paused: boolean): void;
61
63
  setVisible(visible: boolean): void;
@@ -10,6 +10,8 @@ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../../type
10
10
  import { type AutoPlaceAnnotations } from "../../recipes/annotationLayout";
11
11
  import type { AnnotationContext } from "../../realtime/types";
12
12
  import type { PhysicsBodyState } from "./PhysicsKernel";
13
+ import type { OnObservationCallback } from "../../store/ObservationStore";
14
+ import { type OnAnnotationActivateCallback } from "../../charts/shared/annotationActivation";
13
15
  export type PhysicsAnnotationAnchorNode = {
14
16
  pointId?: string;
15
17
  x: number;
@@ -47,6 +49,10 @@ export interface PhysicsSVGOverlayProps {
47
49
  /** Live body anchors for pointId / bodyId annotations. */
48
50
  pointNodes?: PhysicsAnnotationAnchorNode[];
49
51
  annotations?: Datum[];
52
+ onAnnotationActivate?: OnAnnotationActivateCallback;
53
+ onObservation?: OnObservationCallback;
54
+ chartId?: string;
55
+ chartType?: string;
50
56
  autoPlaceAnnotations?: AutoPlaceAnnotations;
51
57
  svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
52
58
  /** Optional foreground SVG already composed into the frame stack. */
@@ -157,7 +157,7 @@ export type StreamPhysicsBodyForce = StreamPhysicsRegionVector | ((context: Stre
157
157
  export interface PhysicsHoverData {
158
158
  __semioticHoverData: true;
159
159
  body: PhysicsBodyState;
160
- data: unknown;
160
+ data: Datum | PhysicsBodyState;
161
161
  id: string;
162
162
  type: "body";
163
163
  x: number;
@@ -183,6 +183,17 @@ export interface StreamPhysicsFrameProps {
183
183
  * deterministic clock for replayable tests or evidence capture.
184
184
  */
185
185
  clock?: () => number;
186
+ /**
187
+ * Host-level random seam for frame-local visual work. It deliberately does
188
+ * not replace the physics kernel's deterministic random source.
189
+ */
190
+ random?: () => number;
191
+ /**
192
+ * Serializable deterministic seed for frame-local work and, when
193
+ * `config.kernel.seed` is omitted, the built-in physics kernel. An explicit
194
+ * kernel seed always wins so existing simulation snapshots remain stable.
195
+ */
196
+ seed?: number;
186
197
  bodySemanticItemLimit?: number;
187
198
  bodySemanticItems?: boolean | PhysicsBodySemanticItemAccessor;
188
199
  bodySemanticUpdateMs?: number;
@@ -230,6 +241,8 @@ export interface StreamPhysicsFrameProps {
230
241
  * `physics: "barrier"|"sensor"` also feed colliders via PhysicsAnnotations.
231
242
  */
232
243
  annotations?: Datum[];
244
+ /** Observe activation of widget annotations without replacing widget behavior. */
245
+ onAnnotationActivate?: import("../../charts/shared/annotationActivation").OnAnnotationActivateCallback;
233
246
  autoPlaceAnnotations?: AutoPlaceAnnotations;
234
247
  svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => React.ReactNode;
235
248
  legend?: React.ReactNode | {
@@ -257,11 +270,13 @@ export interface StreamPhysicsFrameProps {
257
270
  * Click on a body (or empty canvas when null). Prefer this over
258
271
  * `onBodyPointerDown` when you only need the Semiotic click contract.
259
272
  */
260
- onClick?: (datum: unknown | null, event: {
261
- x: number;
262
- y: number;
263
- body: PhysicsBodyState | null;
264
- }) => void;
273
+ onClick?: {
274
+ bivarianceHack(datum: Datum | null, event: {
275
+ x: number;
276
+ y: number;
277
+ body: PhysicsBodyState | null;
278
+ }): void;
279
+ }["bivarianceHack"];
265
280
  onRegionEvent?: (event: StreamPhysicsRegionEvent) => void;
266
281
  onSimulationExecutionChange?: (state: StreamPhysicsExecutionState) => void;
267
282
  onBodyPointerDown?: (body: PhysicsBodyState | null, event: React.PointerEvent<HTMLCanvasElement>) => void;
@@ -0,0 +1,19 @@
1
+ import type { ObservationInputType, OnObservationCallback } from "../../store/ObservationStore";
2
+ interface CurrentRef<T> {
3
+ current: T;
4
+ }
5
+ export type PhysicsFrameObservationType = "hover" | "hover-end" | "click" | "click-end" | "focus" | "activate";
6
+ export interface PhysicsFrameObservationPayload {
7
+ datum?: unknown;
8
+ x?: number;
9
+ y?: number;
10
+ inputType?: ObservationInputType;
11
+ }
12
+ interface PhysicsFrameObservationOptions {
13
+ onObservationRef: CurrentRef<OnObservationCallback | undefined>;
14
+ chartIdRef: CurrentRef<string | undefined>;
15
+ wallClockRef: CurrentRef<() => number>;
16
+ }
17
+ /** Builds a stable emitter while reading the frame's latest callback and clock refs. */
18
+ export declare function usePhysicsFrameObservationEmitter({ onObservationRef, chartIdRef, wallClockRef }: PhysicsFrameObservationOptions): (type: PhysicsFrameObservationType, payload?: PhysicsFrameObservationPayload) => void;
19
+ export {};
@@ -0,0 +1,4 @@
1
+ import { PhysicsPipelineStore, type PhysicsPipelineConfig, type PhysicsQueuedSpawn, type PhysicsSpawnPacingOptions } from "./PhysicsPipelineStore";
2
+ /** Create the retained simulation store and seed its initial queued bodies. */
3
+ export declare function createPhysicsFrameStore(config: PhysicsPipelineConfig | undefined, initialSpawns: PhysicsQueuedSpawn[] | undefined, initialSpawnPacing: PhysicsSpawnPacingOptions | undefined): PhysicsPipelineStore;
4
+ export declare function defaultPhysicsFrameClock(): number;
@@ -3,7 +3,25 @@ import type { PhysicsPipelineConfig } from "./PhysicsPipelineTypes";
3
3
  import type { Invalidation } from "../pipelineUpdateContract";
4
4
  export declare const PHYSICS_BODY_INVALIDATIONS: readonly Invalidation[];
5
5
  export declare const PHYSICS_MOTION_INVALIDATIONS: readonly Invalidation[];
6
- export declare const PHYSICS_CONFIG_INVALIDATIONS: readonly Invalidation[];
7
6
  export declare const PHYSICS_STATE_INVALIDATIONS: readonly Invalidation[];
7
+ /** Whether a config patch rebuilds Physics' retained simulation resource. */
8
+ export type PhysicsRetainedDataEffect = "preserve" | "rebuild";
9
+ export interface PhysicsConfigPatchDependency {
10
+ readonly retainedData: PhysicsRetainedDataEffect;
11
+ readonly invalidations: readonly Invalidation[];
12
+ }
13
+ /**
14
+ * Physics config changes either rebuild the retained engine, affect the next
15
+ * simulated geometry, alter capacity presentation, or only change future
16
+ * stepping/observation behavior. This keeps direct store consumers from
17
+ * treating every physics option as a full scene-layout update.
18
+ */
19
+ export declare const PHYSICS_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, PhysicsConfigPatchDependency>>;
20
+ export interface PhysicsConfigPatchClassification {
21
+ readonly retainedData: PhysicsRetainedDataEffect;
22
+ readonly invalidations: ReadonlySet<Invalidation>;
23
+ }
24
+ /** Union the declared effects for a patch after its effective keys are known. */
25
+ export declare function classifyPhysicsConfigPatch(keys: readonly string[]): PhysicsConfigPatchClassification;
8
26
  export declare function physicsKernelOptionsEqual(a: PhysicsKernelOptions | undefined, b: PhysicsKernelOptions | undefined): boolean;
9
27
  export declare function changedPhysicsConfigKeys(config: PhysicsPipelineConfig, previous: PhysicsPipelineConfig): string[];
@@ -1,9 +1,11 @@
1
1
  import { type MutableRefObject, type RefObject } from "react";
2
+ import type { FrameRuntime } from "../FrameRuntime";
2
3
  import type { PhysicsPipelineStore } from "./PhysicsPipelineStore";
3
4
  import type { PhysicsWorkerCommand } from "./PhysicsWorkerProtocol";
4
5
  export declare function isPhysicsDocumentVisible(): boolean;
5
6
  interface PhysicsFrameLifecyclePolicyInput {
6
7
  cancelRender: () => void;
8
+ frameRuntime: FrameRuntime;
7
9
  lastFrameTimeRef: MutableRefObject<number | null>;
8
10
  paused: boolean;
9
11
  postWorkerCommand: (command: PhysicsWorkerCommand, notifyTick?: boolean) => void;
@@ -12,5 +14,5 @@ interface PhysicsFrameLifecyclePolicyInput {
12
14
  suspendWhenHidden: boolean;
13
15
  }
14
16
  /** Keep pause and page-visibility scheduling policy consistent for physics frames. */
15
- export declare function usePhysicsFrameLifecyclePolicy({ cancelRender, lastFrameTimeRef, paused, postWorkerCommand, requestRender, storeRef, suspendWhenHidden }: PhysicsFrameLifecyclePolicyInput): void;
17
+ export declare function usePhysicsFrameLifecyclePolicy({ cancelRender, frameRuntime, lastFrameTimeRef, paused, postWorkerCommand, requestRender, storeRef, suspendWhenHidden }: PhysicsFrameLifecyclePolicyInput): void;
16
18
  export {};
@@ -11,6 +11,8 @@ import type { MarginType } from "../types/marginType";
11
11
  export interface PipelineConfig {
12
12
  chartType: StreamChartType;
13
13
  runtimeMode?: "streaming" | "bounded";
14
+ /** Optional monotonic clock owned by a frame runtime or embedding host. */
15
+ clock?: () => number;
14
16
  windowSize: number;
15
17
  windowMode: WindowMode;
16
18
  arrowOfTime: ArrowOfTime;
@@ -71,7 +73,7 @@ export interface PipelineConfig {
71
73
  /** Internal: set by PipelineStore when open/close accessors are both missing */
72
74
  candlestickRangeMode?: boolean;
73
75
  boundsAccessor?: string | ((d: Datum) => CoercibleNumber);
74
- boundsStyle?: any;
76
+ boundsStyle?: Style | ((d: Datum, group?: string) => Style);
75
77
  y0Accessor?: string | ((d: Datum) => CoercibleNumber);
76
78
  band?: BandConfig | BandConfig[];
77
79
  gradientFill?: {
@@ -90,7 +92,7 @@ export interface PipelineConfig {
90
92
  color: string;
91
93
  }>;
92
94
  };
93
- lineStyle?: any;
95
+ lineStyle?: Style | ((d: Datum, group?: string) => Style);
94
96
  pointStyle?: (d: Datum) => Style & {
95
97
  r?: number;
96
98
  };
@@ -1,4 +1,4 @@
1
- import type { Datum } from "../charts/shared/datumTypes";
1
+ import type { Datum, DatumValue } from "../charts/shared/datumTypes";
2
2
  /**
3
3
  * Shared decay encoding utilities for all pipeline stores.
4
4
  *
@@ -37,4 +37,4 @@ export declare function buildDatumIndexMap(data: readonly Datum[]): Map<Datum, n
37
37
  *
38
38
  * @param indexMap Optional prebuilt datum→index map (see {@link buildDatumIndexMap}).
39
39
  */
40
- export declare function applyDecay(decay: DecayConfig, nodes: SceneNode[], data: Datum[], indexMap?: Map<any, number>): void;
40
+ export declare function applyDecay(decay: DecayConfig, nodes: SceneNode[], data: Datum[], indexMap?: Map<DatumValue, number>): void;
@@ -1,4 +1,4 @@
1
- import type { Datum } from "../charts/shared/datumTypes";
1
+ import type { Datum, DatumValue } from "../charts/shared/datumTypes";
2
2
  /**
3
3
  * Pulse encoding for XY pipeline scene nodes.
4
4
  *
@@ -21,7 +21,7 @@ export declare function computePulseIntensity(pulse: PulseConfig, insertTime: nu
21
21
  * @param indexMap Optional prebuilt datum→index map so a scene pass that
22
22
  * also runs decay can share one O(n) walk of the buffer.
23
23
  */
24
- export declare function applyPulse(pulse: PulseConfig, nodes: SceneNode[], data: Datum[], timestampBuffer: RingBuffer<number>, indexMap?: Map<any, number>, now?: number): boolean;
24
+ export declare function applyPulse(pulse: PulseConfig, nodes: SceneNode[], data: Datum[], timestampBuffer: RingBuffer<number>, indexMap?: Map<DatumValue, number>, now?: number): boolean;
25
25
  /**
26
26
  * Update the pulse-owned fields for a node that the pipeline has matched to
27
27
  * source data. Keeping this narrow is important for custom layouts: nodes
@@ -1,12 +1,33 @@
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 XY data resources. */
3
+ export type XYRetainedDataEffect = "preserve" | "rebuild";
4
+ export interface XYConfigPatchDependency {
5
+ readonly retainedData: XYRetainedDataEffect;
6
+ readonly invalidations: readonly Invalidation[];
7
+ }
8
+ /**
9
+ * XY's explicit config-patch dependency table. Accessor and chart-mode
10
+ * changes re-derive retained data; scale/layout keys preserve data while
11
+ * rebuilding derived scene state; styling and overlays repaint their own
12
+ * layers. Mount-only and future-work keys intentionally have no immediate
13
+ * revision effect.
14
+ */
15
+ export declare const XY_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, XYConfigPatchDependency>>;
16
+ export interface XYConfigPatchClassification {
17
+ readonly retainedData: XYRetainedDataEffect;
18
+ readonly invalidations: ReadonlySet<Invalidation>;
19
+ }
20
+ /** Union the declared effects for a patch after its effective keys are known. */
21
+ export declare function classifyXYConfigPatch(keys: readonly string[]): XYConfigPatchClassification;
2
22
  type DataChangeKind = Extract<ChangeSet["kind"], "ingest" | "replace" | "remove" | "update" | "clear">;
3
23
  /** Result bookkeeping and invalidation policy for the XY PipelineStore pilot. */
4
24
  export declare class PipelineStoreUpdateResults {
5
25
  private tracker;
6
26
  get last(): UpdateResult;
27
+ subscribe(listener: () => void): () => void;
7
28
  recordData(kind: DataChangeKind, count?: number): UpdateResult;
8
29
  recordNoop(kind: DataChangeKind | "restyle"): UpdateResult;
9
30
  recordRestyle(hasCustomRestyle: boolean): UpdateResult;
10
- recordConfig(keys: readonly string[], requiresRebuild: boolean, extentAccessorChanged: boolean): UpdateResult;
31
+ recordConfig(keys: readonly string[]): UpdateResult;
11
32
  }
12
33
  export {};
@@ -65,7 +65,7 @@ export interface TransitionState {
65
65
  * Detects entering nodes (new, no prev match) and exiting nodes (prev, no new match).
66
66
  * Mutates scene and exitNodes in place. Returns updated state.
67
67
  */
68
- export declare function startTransition(ctx: TransitionContext, transition: TransitionConfig, state: TransitionState, prevPositionMap: Map<string, PrevPosition>, prevPathMap: Map<string, PrevPath>): TransitionState;
68
+ export declare function startTransition(ctx: TransitionContext, transition: TransitionConfig, state: TransitionState, prevPositionMap: Map<string, PrevPosition>, prevPathMap: Map<string, PrevPath>, startTime?: number): TransitionState;
69
69
  /**
70
70
  * Advance the transition animation. Returns true if still animating.
71
71
  * Mutates scene nodes in place.
@@ -54,9 +54,16 @@ export declare function createUpdateResult(changeSet: ChangeSet, invalidations:
54
54
  * keeps revision bookkeeping out of family-specific data/layout code while
55
55
  * preserving each store's existing mutation API.
56
56
  */
57
+ export type UpdateResultListener = () => void;
58
+ export interface UpdateResultStore {
59
+ getUpdateSnapshot(): UpdateResult;
60
+ subscribeUpdateResult(listener: UpdateResultListener): () => void;
61
+ }
57
62
  export declare class UpdateResultTracker {
58
63
  private revisions;
59
64
  private latest;
65
+ private listeners;
60
66
  get last(): UpdateResult;
67
+ subscribe(listener: UpdateResultListener): () => void;
61
68
  record(changeSet: ChangeSet, invalidations: Iterable<Invalidation>): UpdateResult;
62
69
  }
@@ -0,0 +1,21 @@
1
+ import type { UpdateResult } from "./pipelineUpdateContract";
2
+ import type { CustomLayoutSelection } from "./customLayoutSelection";
3
+ export type { UpdateResult } from "./pipelineUpdateContract";
4
+ /** Shared additive update-result read and subscription surface for stream stores. */
5
+ export interface PipelineUpdateResultSource {
6
+ readonly last: UpdateResult;
7
+ subscribe(listener: () => void): () => void;
8
+ }
9
+ /** Public lifecycle surface installed on each stream store prototype. */
10
+ export interface UpdateResultStore {
11
+ getLastUpdateResult(): UpdateResult;
12
+ getUpdateSnapshot(): UpdateResult;
13
+ subscribeUpdateResult(listener: () => void): () => void;
14
+ setLayoutSelection(selection: CustomLayoutSelection | null): void;
15
+ markStylePaintPending(): void;
16
+ consumeStylePaintPending(): boolean;
17
+ }
18
+ /** Adds the shared lifecycle methods without imposing a base-class constructor. */
19
+ export declare function attachUpdateResultStore(target: {
20
+ prototype: object;
21
+ }): void;
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ import type { SceneRenderBackend, SceneRenderMode, Style } from "./types";
3
+ type SceneLike = {
4
+ type?: string;
5
+ datum?: unknown;
6
+ style?: Style;
7
+ };
8
+ /** Resolve a whole-scene or per-datum renderer. The legacy `sketchy` token
9
+ * stays on the existing built-in rendering path. */
10
+ export declare function resolveSceneRenderBackend<Node extends SceneLike>(renderMode: SceneRenderMode<Node> | undefined, node: Node): SceneRenderBackend<Node> | undefined;
11
+ /** Paint nodes in scene order, delegating unsupported runs to the built-in renderer. */
12
+ export declare function paintSceneWithBackend<Node extends SceneLike>(args: {
13
+ context: CanvasRenderingContext2D;
14
+ nodes: Node[];
15
+ renderMode: SceneRenderMode<Node> | undefined;
16
+ pixelRatio: number;
17
+ paintBuiltIn: (nodes: Node[]) => void;
18
+ }): void;
19
+ /** Try a backend for SSR/static SVG, then invoke the existing converter. */
20
+ export declare function renderSceneWithBackend<Node extends SceneLike>(args: {
21
+ node: Node;
22
+ index: number;
23
+ renderMode: SceneRenderMode<Node> | undefined;
24
+ fallback: () => React.ReactNode;
25
+ }): React.ReactNode;
26
+ export declare function resetRenderBackendWarningsForTests(): void;
27
+ export {};
@@ -16,6 +16,7 @@
16
16
  * mechanical bits that recur regardless of the shape being painted.
17
17
  */
18
18
  import type { CurveType } from "../types";
19
+ import { type HatchFill } from "../../charts/shared/hatchFill";
19
20
  import type { CurveFactory } from "d3-shape";
20
21
  /**
21
22
  * Structural shapes for the gradient configs the helpers accept. Kept
@@ -61,7 +62,20 @@ export declare function resolveCurveFactory(curve: CurveType | undefined): Curve
61
62
  * `(typeof X === "string" ? resolveCSSColor(ctx, X) : X) || fallback`,
62
63
  * repeated once per renderer per fill/stroke site.
63
64
  */
64
- export declare function resolveCanvasFill(ctx: CanvasRenderingContext2D, fill: string | CanvasPattern | null | undefined, fallback: string): string | CanvasPattern;
65
+ export declare function resolveCanvasFill(ctx: CanvasRenderingContext2D, fill: string | HatchFill | CanvasPattern | null | undefined, fallback: string): string | CanvasPattern;
66
+ /**
67
+ * Narrow a possibly-`HatchFill` `style.fill` to the `string | CanvasPattern`
68
+ * a canvas `fillStyle` accepts, for the direct-assign sites that don't
69
+ * otherwise route through {@link resolveCanvasFill}. Returns `undefined` for a
70
+ * nullish (or unresolvable) fill so callers can apply their own fallback with
71
+ * `?? "…"`.
72
+ *
73
+ * Delegates to {@link resolveCanvasFill} so behavior stays consistent: string
74
+ * fills (including `var(--…)`) resolve through `resolveCSSColor` — a raw CSS
75
+ * variable written straight to `fillStyle` would silently paint black — and a
76
+ * `HatchFill` resolves to its `CanvasPattern` (or its resolved background).
77
+ */
78
+ export declare function coerceCanvasFill(ctx: CanvasRenderingContext2D, fill: string | HatchFill | CanvasPattern | null | undefined): string | CanvasPattern | undefined;
65
79
  /**
66
80
  * Build a linear gradient from a `FillGradient` config. Returns `null`
67
81
  * when the gradient cannot be constructed (fewer than two valid color
@@ -1,4 +1,5 @@
1
- import type { GeoSceneNode } from "../geoTypes";
1
+ import type { GeoScales, GeoSceneNode } from "../geoTypes";
2
+ import type { StreamLayout } from "../types";
2
3
  /**
3
4
  * Canvas renderer for GeoAreaSceneNode — projected geographic polygons.
4
5
  * Uses Path2D for GPU-accelerated rendering of complex geo paths.
@@ -6,4 +7,4 @@ import type { GeoSceneNode } from "../geoTypes";
6
7
  * Points and lines in a geo frame are rendered by the existing
7
8
  * pointCanvasRenderer and lineCanvasRenderer respectively.
8
9
  */
9
- export declare function geoCanvasRenderer(ctx: CanvasRenderingContext2D, nodes: GeoSceneNode[], _scales: any, _layout: any): void;
10
+ export declare function geoCanvasRenderer(ctx: CanvasRenderingContext2D, nodes: GeoSceneNode[], _scales: GeoScales, _layout: StreamLayout): void;
@@ -8,4 +8,4 @@ export declare function renderNetworkParticles(ctx: CanvasRenderingContext2D, po
8
8
  /**
9
9
  * Spawn particles for all edges proportional to their value.
10
10
  */
11
- export declare function spawnNetworkParticles(pool: ParticlePool, edges: RealtimeEdge[], deltaTime: number, style: ParticleStyle): void;
11
+ export declare function spawnNetworkParticles(pool: ParticlePool, edges: RealtimeEdge[], deltaTime: number, style: ParticleStyle, random?: () => number): void;
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from "react";
2
+ import type { Datum } from "../charts/shared/datumTypes";
3
+ import type { Style } from "./types";
4
+ /**
5
+ * Optional paint backend for pre-computed scene nodes. A backend may change
6
+ * how a mark looks, but it must not mutate the scene node: original geometry
7
+ * remains authoritative for interaction, focus, transitions, and accessibility.
8
+ */
9
+ export interface SceneRenderBackend<Node = unknown> {
10
+ readonly id: string;
11
+ cacheKey(node: Node, style: Style): string;
12
+ drawCanvas(args: {
13
+ context: CanvasRenderingContext2D;
14
+ node: Node;
15
+ style: Style;
16
+ pixelRatio: number;
17
+ }): boolean;
18
+ renderStaticSVG(args: {
19
+ node: Node;
20
+ style: Style;
21
+ key: string;
22
+ }): ReactNode | null;
23
+ }
24
+ /** A backend can cover the whole scene or be selected per datum. */
25
+ export type SceneRenderDatum<Node> = Node extends {
26
+ datum?: infer NodeDatum;
27
+ } ? Exclude<NodeDatum, undefined> | null : Datum | null;
28
+ export type SceneRenderMode<Node = unknown> = "sketchy" | SceneRenderBackend<Node> | ((datum: SceneRenderDatum<Node>, node: Node) => "sketchy" | SceneRenderBackend<Node> | undefined);
@@ -1,18 +1,45 @@
1
- import type { RevisionSet, UpdateResult } from "./pipelineUpdateContract";
2
- type SceneRevisionSet = Pick<RevisionSet, "sceneGeometry" | "layout" | "domain">;
3
- interface SceneRevisionCheck {
1
+ import type { RevisionSet, UpdateResult, UpdateResultStore } from "./pipelineUpdateContract";
2
+ export type SceneRevisionSet = Pick<RevisionSet, "sceneGeometry" | "layout" | "domain">;
3
+ export interface SceneRevisionCheck {
4
4
  revisions: SceneRevisionSet;
5
5
  signature: string;
6
6
  sawSignals: boolean;
7
7
  wasUnconsumed: boolean;
8
8
  warnUnconsumed: boolean;
9
9
  }
10
- /** Development-only consumption and duplicate-compute diagnostics for an XY scene host. */
10
+ interface SceneRevisionStore extends UpdateResultStore {
11
+ getLastUpdateResult(): UpdateResult;
12
+ }
13
+ /** Development-only consumption and duplicate-compute diagnostics for a scene host. */
11
14
  export declare class SceneRevisionDiagnostics {
15
+ private readonly hostName;
16
+ constructor(hostName?: string);
12
17
  private lastConsumed;
18
+ private lastObserved;
13
19
  private lastDuplicateWarning;
14
20
  private lastUnconsumedWarning;
21
+ /**
22
+ * Accept a React external-store observation without participating in frame
23
+ * scheduling or paint. The imperative result passed to beforeCompute remains
24
+ * authoritative; retaining the high-water mark only protects development
25
+ * diagnostics when React observes an update between frame passes.
26
+ */
27
+ observeUpdateResult(updateResult: UpdateResult): void;
15
28
  beforeCompute(updateResult: UpdateResult, isTransitioning: boolean): SceneRevisionCheck;
16
29
  afterCompute(check: SceneRevisionCheck, computedScene: boolean, dimsChanged: boolean): void;
17
30
  }
31
+ /** Keep a frame's development-only revision tracker stable across renders. */
32
+ export declare function useSceneRevisionDiagnostics(hostName: string): import("react").RefObject<SceneRevisionDiagnostics>;
33
+ /** Wrap an unconditional scene build with the common revision accounting. */
34
+ export declare function runSceneBuild(diagnostics: SceneRevisionDiagnostics, store: SceneRevisionStore, build: () => void, isTransitioning?: boolean, dimsChanged?: boolean): void;
35
+ /**
36
+ * Observes external-store revisions without putting diagnostics on a React
37
+ * render path. Stores can record non-invalidating operational results during
38
+ * host effects, so a useSyncExternalStore subscription here could feed those
39
+ * diagnostics back into the host's render cycle.
40
+ */
41
+ export declare const SceneRevisionDiagnosticsObserver: import("react").MemoExoticComponent<({ store, diagnostics }: {
42
+ store: UpdateResultStore;
43
+ diagnostics: SceneRevisionDiagnostics;
44
+ }) => null>;
18
45
  export {};
@@ -0,0 +1,16 @@
1
+ import type { OnObservationCallback } from "../store/ObservationStore";
2
+ import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
3
+ import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
4
+ /** Interaction props shared by all Stream Frame families. */
5
+ export interface StreamSemanticInteractionProps<Hover> {
6
+ customHoverBehavior?: SemanticHoverBehavior<Hover>;
7
+ customClickBehavior?: SemanticClickBehavior<Hover>;
8
+ /** Structured interaction observations, including semantic focus/activate. */
9
+ onObservation?: OnObservationCallback;
10
+ /** @internal HOC observation callback forwarded only to annotation widgets. */
11
+ annotationObservationCallback?: OnObservationCallback;
12
+ /** Chart instance identifier included in observation events. */
13
+ chartId?: string;
14
+ /** Observe activation of widget annotations without replacing widget behavior. */
15
+ onAnnotationActivate?: OnAnnotationActivateCallback;
16
+ }
@@ -0,0 +1,14 @@
1
+ export interface ThemeSemanticColors {
2
+ primary?: string;
3
+ secondary?: string;
4
+ success?: string;
5
+ danger?: string;
6
+ warning?: string;
7
+ error?: string;
8
+ info?: string;
9
+ text?: string;
10
+ textSecondary?: string;
11
+ border?: string;
12
+ grid?: string;
13
+ surface?: string;
14
+ }
@@ -0,0 +1,10 @@
1
+ export declare function resolveHorizontalTickAnchor(mode: "middle" | "edges" | undefined, isLeftmost: boolean, isRightmost: boolean): "start" | "middle" | "end";
2
+ export declare function resolveVerticalTickBaseline(mode: "middle" | "edges" | undefined, isTopmost: boolean, isBottommost: boolean): "hanging" | "middle" | "auto";
3
+ export declare function tickPixelExtent(ticks: Array<{
4
+ pixel: number;
5
+ }>): {
6
+ min: number | null;
7
+ max: number | null;
8
+ };
9
+ export declare function resolveGridDash(style: "dashed" | "dotted" | string | undefined): string | undefined;
10
+ export declare function jaggedBaselinePath(orient: "left" | "right" | "top" | "bottom", width: number, height: number): string;
@@ -0,0 +1,12 @@
1
+ import type { FrameScheduler } from "../useFrame";
2
+ /**
3
+ * Deterministic rAF scheduler for frame tests. It deliberately permits zero
4
+ * as the first handle so tests cannot rely on truthiness for pending work.
5
+ */
6
+ export declare function createFrameScheduler(firstHandle?: number): {
7
+ scheduler: FrameScheduler;
8
+ requestedHandles: number[];
9
+ cancelledHandles: number[];
10
+ readonly pendingCount: number;
11
+ flush(timestamp?: number): void;
12
+ };
@@ -0,0 +1,13 @@
1
+ import { SceneRevisionDiagnostics, type SceneRevisionCheck } from "../sceneRevisionDiagnostics";
2
+ import type { UpdateResult } from "../pipelineUpdateContract";
3
+ export interface UnconsumedSceneRevisionProbe {
4
+ diagnostics: SceneRevisionDiagnostics;
5
+ initial: SceneRevisionCheck;
6
+ later: SceneRevisionCheck;
7
+ }
8
+ /**
9
+ * Assert the contract that a later style/state result cannot conceal scene
10
+ * work that a host has not consumed. Callers finish the probe with
11
+ * `diagnostics.afterCompute(probe.later, false, false)` and assert its warning.
12
+ */
13
+ export declare function assertUnconsumedSceneRevisionSurvivesLaterUpdate(initialResult: UpdateResult, laterResult: UpdateResult, hostName?: string): UnconsumedSceneRevisionProbe;