semiotic 3.7.5 → 3.8.0

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 (481) hide show
  1. package/CLAUDE.md +54 -12
  2. package/README.md +121 -27
  3. package/agent-skill/semiotic-charts/SKILL.md +146 -0
  4. package/ai/cli.js +133 -45
  5. package/ai/componentMetadata.cjs +6 -1
  6. package/ai/dist/mcp-server.js +1651 -154
  7. package/ai/examples.md +174 -0
  8. package/ai/schema.json +2733 -536
  9. package/ai/surface-manifest.json +200 -0
  10. package/ai/system-prompt.md +18 -3
  11. package/dist/components/CategoryColors.d.ts +1 -1
  12. package/dist/components/ChartContainer.d.ts +91 -0
  13. package/dist/components/ChartGrid.d.ts +11 -1
  14. package/dist/components/CircularBrush.d.ts +61 -0
  15. package/dist/components/ContextLayout.d.ts +5 -1
  16. package/dist/components/DirectManipulationControl.d.ts +63 -0
  17. package/dist/components/LinkedCharts.d.ts +3 -1
  18. package/dist/components/MobileAnnotationCalloutList.d.ts +13 -0
  19. package/dist/components/MobileChartContainer.d.ts +51 -0
  20. package/dist/components/MobileStandardControls.d.ts +68 -0
  21. package/dist/components/SmallMultipleChart.d.ts +84 -0
  22. package/dist/components/Tooltip/FlippingTooltip.d.ts +21 -0
  23. package/dist/components/ai/ChartRecipe.d.ts +16 -0
  24. package/dist/components/ai/IntentMark.d.ts +15 -0
  25. package/dist/components/ai/chartCapabilities.d.ts +8 -1
  26. package/dist/components/ai/chartCapabilityTypes.d.ts +26 -1
  27. package/dist/components/ai/chartClinic.d.ts +91 -0
  28. package/dist/components/ai/chartRecipeRegistry.d.ts +14 -0
  29. package/dist/components/ai/chartRecipes.d.ts +278 -0
  30. package/dist/components/ai/dataPitfallsBridge.d.ts +102 -0
  31. package/dist/components/ai/describeChart.d.ts +7 -0
  32. package/dist/components/ai/describeRecipeChart.d.ts +16 -0
  33. package/dist/components/ai/generativeChart.d.ts +28 -3
  34. package/dist/components/ai/intentManifest.d.ts +62 -0
  35. package/dist/components/ai/navigationTree.d.ts +3 -0
  36. package/dist/components/ai/observedSceneAudit.d.ts +72 -0
  37. package/dist/components/ai/readerGrounding.d.ts +83 -0
  38. package/dist/components/ai/recipeCapability.d.ts +8 -0
  39. package/dist/components/ai/recipeNavigation.d.ts +13 -0
  40. package/dist/components/ai/recipeSemantics.d.ts +11 -0
  41. package/dist/components/ai/repairChartConfig.d.ts +9 -0
  42. package/dist/components/ai/suggestCharts.d.ts +11 -1
  43. package/dist/components/charts/custom/GeoCustomChart.d.ts +48 -0
  44. package/dist/components/charts/custom/NetworkCustomChart.d.ts +8 -2
  45. package/dist/components/charts/custom/OrdinalCustomChart.d.ts +8 -2
  46. package/dist/components/charts/custom/XYCustomChart.d.ts +11 -2
  47. package/dist/components/charts/geo/DistanceCartogram.d.ts +1 -1
  48. package/dist/components/charts/geo/FlowMap.d.ts +1 -1
  49. package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +1 -1
  50. package/dist/components/charts/geo/index.d.ts +2 -0
  51. package/dist/components/charts/index.d.ts +29 -1
  52. package/dist/components/charts/network/ChordDiagram.d.ts +1 -1
  53. package/dist/components/charts/network/CirclePack.d.ts +1 -1
  54. package/dist/components/charts/network/ForceDirectedGraph.d.ts +15 -5
  55. package/dist/components/charts/network/OrbitDiagram.d.ts +1 -1
  56. package/dist/components/charts/network/ProcessSankey.d.ts +1 -1
  57. package/dist/components/charts/network/SankeyDiagram.d.ts +1 -1
  58. package/dist/components/charts/network/TreeDiagram.d.ts +1 -1
  59. package/dist/components/charts/network/Treemap.d.ts +1 -1
  60. package/dist/components/charts/network/useForceLayout.d.ts +17 -0
  61. package/dist/components/charts/ordinal/BarChart.d.ts +1 -1
  62. package/dist/components/charts/ordinal/BoxPlot.d.ts +1 -1
  63. package/dist/components/charts/ordinal/DonutChart.d.ts +1 -1
  64. package/dist/components/charts/ordinal/DotPlot.d.ts +1 -1
  65. package/dist/components/charts/ordinal/FunnelChart.d.ts +1 -1
  66. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +1 -1
  67. package/dist/components/charts/ordinal/Histogram.d.ts +1 -1
  68. package/dist/components/charts/ordinal/PieChart.d.ts +1 -1
  69. package/dist/components/charts/ordinal/RidgelinePlot.d.ts +1 -1
  70. package/dist/components/charts/ordinal/StackedBarChart.d.ts +1 -1
  71. package/dist/components/charts/ordinal/SwarmPlot.d.ts +1 -1
  72. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +1 -1
  73. package/dist/components/charts/ordinal/ViolinPlot.d.ts +1 -1
  74. package/dist/components/charts/physics/ChainReactionChart.d.ts +9 -0
  75. package/dist/components/charts/physics/CollisionSwarmChart.capability.d.ts +2 -0
  76. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +47 -0
  77. package/dist/components/charts/physics/EventDropChart.capability.d.ts +2 -0
  78. package/dist/components/charts/physics/EventDropChart.d.ts +53 -0
  79. package/dist/components/charts/physics/GaltonBoardChart.capability.d.ts +2 -0
  80. package/dist/components/charts/physics/GaltonBoardChart.d.ts +66 -0
  81. package/dist/components/charts/physics/GauntletChart.capability.d.ts +2 -0
  82. package/dist/components/charts/physics/GauntletChart.d.ts +73 -0
  83. package/dist/components/charts/physics/PhysicalFlowChart.capability.d.ts +2 -0
  84. package/dist/components/charts/physics/PhysicalFlowChart.d.ts +63 -0
  85. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +120 -0
  86. package/dist/components/charts/physics/PhysicsPileChart.capability.d.ts +2 -0
  87. package/dist/components/charts/physics/PhysicsPileChart.d.ts +53 -0
  88. package/dist/components/charts/physics/ProcessFlowChart.capability.d.ts +2 -0
  89. package/dist/components/charts/physics/ProcessFlowChart.d.ts +96 -0
  90. package/dist/components/charts/physics/chainReactionOverlay.d.ts +22 -0
  91. package/dist/components/charts/physics/chainReactionRuntime.d.ts +37 -0
  92. package/dist/components/charts/physics/chainReactionTypes.d.ts +97 -0
  93. package/dist/components/charts/physics/collisionSwarmPhysics.d.ts +27 -0
  94. package/dist/components/charts/physics/dependencyMachine.d.ts +188 -0
  95. package/dist/components/charts/physics/eventDropPhysics.d.ts +64 -0
  96. package/dist/components/charts/physics/galtonBoardPhysics.d.ts +28 -0
  97. package/dist/components/charts/physics/gauntletChartProps.d.ts +67 -0
  98. package/dist/components/charts/physics/gauntletChrome.d.ts +33 -0
  99. package/dist/components/charts/physics/gauntletController.d.ts +73 -0
  100. package/dist/components/charts/physics/gauntletEffects.d.ts +36 -0
  101. package/dist/components/charts/physics/gauntletPhysics.d.ts +71 -0
  102. package/dist/components/charts/physics/gauntletRuntime.d.ts +42 -0
  103. package/dist/components/charts/physics/gauntletTypes.d.ts +213 -0
  104. package/dist/components/charts/physics/physicalFlowPhysics.d.ts +57 -0
  105. package/dist/components/charts/physics/physicsChartShared.d.ts +41 -0
  106. package/dist/components/charts/physics/physicsChartUtils.d.ts +18 -0
  107. package/dist/components/charts/physics/physicsEncoding.d.ts +142 -0
  108. package/dist/components/charts/physics/physicsHocHandle.d.ts +53 -0
  109. package/dist/components/charts/physics/physicsHocUtils.d.ts +128 -0
  110. package/dist/components/charts/physics/physicsPilePhysics.d.ts +41 -0
  111. package/dist/components/charts/physics/physicsProcessPrimitives.d.ts +38 -0
  112. package/dist/components/charts/physics/processFlowPhysics.d.ts +97 -0
  113. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +9 -1
  114. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +9 -1
  115. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +9 -1
  116. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +16 -2
  117. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +9 -1
  118. package/dist/components/charts/shared/auditMobileVisualization.d.ts +91 -0
  119. package/dist/components/charts/shared/chartDefinitionPilot.d.ts +145 -0
  120. package/dist/components/charts/shared/chartFamilySets.d.ts +20 -0
  121. package/dist/components/charts/shared/chartSpecCore.d.ts +165 -0
  122. package/dist/components/charts/shared/chartSpecs.d.ts +8 -127
  123. package/dist/components/charts/shared/chartSpecsGeo.d.ts +2 -0
  124. package/dist/components/charts/shared/chartSpecsNetwork.d.ts +2 -0
  125. package/dist/components/charts/shared/chartSpecsOrdinal.d.ts +2 -0
  126. package/dist/components/charts/shared/chartSpecsPhysics.d.ts +2 -0
  127. package/dist/components/charts/shared/chartSpecsRealtime.d.ts +2 -0
  128. package/dist/components/charts/shared/chartSpecsValue.d.ts +2 -0
  129. package/dist/components/charts/shared/chartSpecsXY.d.ts +2 -0
  130. package/dist/components/charts/shared/colorContrast.d.ts +3 -0
  131. package/dist/components/charts/shared/colorUtils.d.ts +16 -1
  132. package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +4 -0
  133. package/dist/components/charts/shared/diagnoseConfig.d.ts +9 -14
  134. package/dist/components/charts/shared/diagnoseMisleadingChecks.d.ts +9 -0
  135. package/dist/components/charts/shared/diagnosePhysicsChecks.d.ts +3 -0
  136. package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
  137. package/dist/components/charts/shared/hooks.d.ts +28 -5
  138. package/dist/components/charts/shared/motionEncoding.d.ts +145 -0
  139. package/dist/components/charts/shared/responsiveRules.d.ts +56 -0
  140. package/dist/components/charts/shared/streamPropsHelpers.d.ts +12 -2
  141. package/dist/components/charts/shared/temporalStrings.d.ts +7 -0
  142. package/dist/components/charts/shared/types.d.ts +49 -1
  143. package/dist/components/charts/shared/useChartSetup.d.ts +9 -2
  144. package/dist/components/charts/shared/useCustomChartSetup.d.ts +14 -5
  145. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +6 -2
  146. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +1 -1
  147. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  148. package/dist/components/charts/shared/useSyncedPushData.d.ts +49 -0
  149. package/dist/components/charts/shared/validationMap.d.ts +0 -11
  150. package/dist/components/charts/xy/AreaChart.d.ts +1 -1
  151. package/dist/components/charts/xy/BubbleChart.d.ts +1 -1
  152. package/dist/components/charts/xy/LineChart.d.ts +1 -1
  153. package/dist/components/charts/xy/MinimapChart.d.ts +1 -1
  154. package/dist/components/charts/xy/MultiAxisLineChart.d.ts +2 -2
  155. package/dist/components/charts/xy/QuadrantChart.d.ts +1 -1
  156. package/dist/components/charts/xy/Scatterplot.d.ts +1 -1
  157. package/dist/components/charts/xy/ScatterplotMatrix.d.ts +11 -1
  158. package/dist/components/charts/xy/StackedAreaChart.d.ts +9 -4
  159. package/dist/components/controls/controlAudit.d.ts +24 -0
  160. package/dist/components/controls/controlContract.d.ts +57 -0
  161. package/dist/components/data/fromFlintChart.d.ts +74 -0
  162. package/dist/components/data/fromVegaLite.d.ts +27 -0
  163. package/dist/components/data/portability/index.d.ts +6 -3
  164. package/dist/components/data/portability/result.d.ts +52 -0
  165. package/dist/components/data/portability/spec.d.ts +31 -0
  166. package/dist/components/data/portability/vegaLite.d.ts +24 -6
  167. package/dist/components/export/chartConfig.d.ts +11 -0
  168. package/dist/components/realtime/types.d.ts +11 -0
  169. package/dist/components/recipes/annotationLayout.d.ts +29 -0
  170. package/dist/components/recipes/axisFixedForce.d.ts +119 -0
  171. package/dist/components/recipes/{gofishBoba.d.ts → boba.d.ts} +2 -2
  172. package/dist/components/recipes/cyclical.d.ts +39 -0
  173. package/dist/components/recipes/edgeRouter.d.ts +103 -0
  174. package/dist/components/recipes/forceLayout.d.ts +48 -0
  175. package/dist/components/recipes/forceLayoutAsync.d.ts +17 -0
  176. package/dist/components/recipes/gofishBobaHandwritten.d.ts +3 -0
  177. package/dist/components/recipes/gofishDisplayListFixtures.generated.d.ts +37 -0
  178. package/dist/components/recipes/gofishIR.d.ts +178 -132
  179. package/dist/components/recipes/gofishIRExamples.d.ts +30 -81
  180. package/dist/components/recipes/intervalLanes.d.ts +87 -0
  181. package/dist/components/recipes/intervals.d.ts +80 -0
  182. package/dist/components/recipes/isometricLandmarks.d.ts +88 -0
  183. package/dist/components/recipes/isotypeGlyphs.d.ts +17 -0
  184. package/dist/components/recipes/mobileAnnotationStrategy.d.ts +48 -0
  185. package/dist/components/recipes/mobileChartFamilyRecipes.d.ts +59 -0
  186. package/dist/components/recipes/networkAnalysis.d.ts +102 -0
  187. package/dist/components/recipes/networkLayouts.d.ts +83 -0
  188. package/dist/components/recipes/physics.d.ts +122 -0
  189. package/dist/components/recipes/physicsReference.d.ts +102 -0
  190. package/dist/components/recipes/processAggregates.d.ts +32 -0
  191. package/dist/components/recipes/processChrome.d.ts +67 -0
  192. package/dist/components/recipes/processJourney.d.ts +54 -0
  193. package/dist/components/recipes/processPhysics.d.ts +300 -0
  194. package/dist/components/recipes/processVolumeGeometry.d.ts +28 -0
  195. package/dist/components/recipes/radialCoords.d.ts +69 -0
  196. package/dist/components/recipes/random.d.ts +2 -0
  197. package/dist/components/recipes/recipeChrome.d.ts +91 -0
  198. package/dist/components/recipes/recipeGlyph.d.ts +42 -0
  199. package/dist/components/recipes/recipeLegend.d.ts +53 -1
  200. package/dist/components/recipes/recipeUtils.d.ts +52 -0
  201. package/dist/components/recipes/runs.d.ts +59 -0
  202. package/dist/components/recipes/tokenEncoding.d.ts +157 -0
  203. package/dist/components/recipes/tokenLayer.d.ts +79 -0
  204. package/dist/components/recipes/unitize.d.ts +108 -0
  205. package/dist/components/recipes/vector.d.ts +28 -0
  206. package/dist/components/recipes/waffle.d.ts +43 -0
  207. package/dist/components/semiotic-ai-core.d.ts +47 -0
  208. package/dist/components/semiotic-ai.d.ts +50 -8
  209. package/dist/components/semiotic-controls.d.ts +18 -0
  210. package/dist/components/semiotic-experimental.d.ts +38 -9
  211. package/dist/components/semiotic-geo.d.ts +11 -0
  212. package/dist/components/semiotic-network.d.ts +11 -0
  213. package/dist/components/semiotic-ordinal.d.ts +8 -0
  214. package/dist/components/semiotic-physics-matter.d.ts +10 -0
  215. package/dist/components/semiotic-physics-rapier.d.ts +9 -0
  216. package/dist/components/semiotic-physics.d.ts +56 -0
  217. package/dist/components/semiotic-realtime-core.d.ts +34 -0
  218. package/dist/components/semiotic-realtime-react.d.ts +10 -0
  219. package/dist/components/semiotic-realtime.d.ts +4 -30
  220. package/dist/components/semiotic-recipes-core.d.ts +92 -0
  221. package/dist/components/semiotic-recipes-react.d.ts +7 -0
  222. package/dist/components/semiotic-recipes.d.ts +4 -43
  223. package/dist/components/semiotic-server-edge.d.ts +8 -0
  224. package/dist/components/semiotic-server-node.d.ts +5 -0
  225. package/dist/components/semiotic-server.d.ts +2 -2
  226. package/dist/components/semiotic-themes-core.d.ts +53 -0
  227. package/dist/components/semiotic-themes-react.d.ts +4 -0
  228. package/dist/components/semiotic-themes.d.ts +6 -76
  229. package/dist/components/semiotic-utils-core.d.ts +46 -0
  230. package/dist/components/semiotic-utils-react.d.ts +5 -0
  231. package/dist/components/semiotic-utils.d.ts +3 -39
  232. package/dist/components/semiotic-xy.d.ts +8 -0
  233. package/dist/components/semiotic.d.ts +35 -7
  234. package/dist/components/server/animatedGif.d.ts +36 -0
  235. package/dist/components/server/renderEvidence.d.ts +1 -1
  236. package/dist/components/server/renderToStaticSVG.d.ts +3 -35
  237. package/dist/components/server/serverChartConfigShared.d.ts +17 -0
  238. package/dist/components/server/serverChartConfigs.d.ts +19 -9
  239. package/dist/components/server/serverChartConfigsCustom.d.ts +5 -0
  240. package/dist/components/server/serverChartConfigsGeo.d.ts +9 -0
  241. package/dist/components/server/serverChartConfigsNetwork.d.ts +8 -0
  242. package/dist/components/server/serverChartConfigsOrdinal.d.ts +16 -0
  243. package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
  244. package/dist/components/server/serverChartConfigsXY.d.ts +11 -0
  245. package/dist/components/server/staticGeo.d.ts +4 -0
  246. package/dist/components/server/staticLegend.d.ts +1 -1
  247. package/dist/components/server/staticNetwork.d.ts +8 -0
  248. package/dist/components/server/staticOrdinal.d.ts +11 -0
  249. package/dist/components/server/staticPhysics.d.ts +3 -0
  250. package/dist/components/server/staticSVGChrome.d.ts +110 -0
  251. package/dist/components/server/staticXY.d.ts +4 -0
  252. package/dist/components/store/ObservationStore.d.ts +3 -2
  253. package/dist/components/store/themeSerialization.d.ts +32 -0
  254. package/dist/components/store/useChartInterrogation.d.ts +9 -0
  255. package/dist/components/stream/AccessibleDataTable.d.ts +3 -13
  256. package/dist/components/stream/FocusRing.d.ts +4 -2
  257. package/dist/components/stream/GeoCanvasHitTester.d.ts +1 -1
  258. package/dist/components/stream/GeoPipelineStore.d.ts +28 -0
  259. package/dist/components/stream/NetworkPipelineStore.d.ts +31 -26
  260. package/dist/components/stream/NetworkSVGOverlay.d.ts +4 -1
  261. package/dist/components/stream/OrdinalPipelineStore.d.ts +46 -2
  262. package/dist/components/stream/PipelineStore.d.ts +81 -170
  263. package/dist/components/stream/SceneGraph.d.ts +9 -1
  264. package/dist/components/stream/StreamGeoFrame.d.ts +1 -1
  265. package/dist/components/stream/StreamNetworkFrame.d.ts +1 -1
  266. package/dist/components/stream/StreamOrdinalFrame.d.ts +1 -1
  267. package/dist/components/stream/StreamXYFrame.d.ts +2 -18
  268. package/dist/components/stream/accessibleDataRows.d.ts +33 -0
  269. package/dist/components/stream/accessorUtils.d.ts +23 -10
  270. package/dist/components/stream/brushAccessibility.d.ts +25 -0
  271. package/dist/components/stream/canvasBackground.d.ts +24 -0
  272. package/dist/components/stream/canvasSetup.d.ts +4 -1
  273. package/dist/components/stream/customLayoutFailure.d.ts +33 -0
  274. package/dist/components/stream/customLayoutPalette.d.ts +19 -9
  275. package/dist/components/stream/frameThemeColors.d.ts +24 -0
  276. package/dist/components/stream/geoAnnotationAnchors.d.ts +14 -0
  277. package/dist/components/stream/geoCartogram.d.ts +17 -0
  278. package/dist/components/stream/geoCustomLayout.d.ts +59 -0
  279. package/dist/components/stream/geoDefaultTooltip.d.ts +11 -0
  280. package/dist/components/stream/geoFrameHelpers.d.ts +34 -0
  281. package/dist/components/stream/geoPipelineHelpers.d.ts +46 -0
  282. package/dist/components/stream/geoTypes.d.ts +56 -7
  283. package/dist/components/stream/glyphDef.d.ts +98 -0
  284. package/dist/components/stream/hitTarget.d.ts +170 -0
  285. package/dist/components/stream/hoverUtils.d.ts +3 -0
  286. package/dist/components/stream/keyboardNav.d.ts +4 -1
  287. package/dist/components/stream/layouts/forceLayoutPlugin.d.ts +9 -1
  288. package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +57 -0
  289. package/dist/components/stream/networkBezier.d.ts +10 -0
  290. package/dist/components/stream/networkColorAccessors.d.ts +49 -0
  291. package/dist/components/stream/networkDefaultTooltip.d.ts +10 -0
  292. package/dist/components/stream/networkFrameInteraction.d.ts +37 -0
  293. package/dist/components/stream/networkFramePaint.d.ts +43 -0
  294. package/dist/components/stream/networkPipelineConfig.d.ts +22 -0
  295. package/dist/components/stream/networkPipelineHelpers.d.ts +12 -0
  296. package/dist/components/stream/networkRealtimeEncoding.d.ts +41 -0
  297. package/dist/components/stream/networkTypes.d.ts +76 -5
  298. package/dist/components/stream/ordinalCanvasRenderers.d.ts +7 -0
  299. package/dist/components/stream/ordinalDataIndex.d.ts +5 -0
  300. package/dist/components/stream/ordinalDefaultTooltip.d.ts +10 -0
  301. package/dist/components/stream/ordinalDomain.d.ts +38 -0
  302. package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +12 -0
  303. package/dist/components/stream/ordinalPulse.d.ts +10 -0
  304. package/dist/components/stream/ordinalPulseResources.d.ts +3 -0
  305. package/dist/components/stream/ordinalSceneBuilders/sceneBuilderMap.d.ts +5 -0
  306. package/dist/components/stream/ordinalSpatialIndex.d.ts +9 -0
  307. package/dist/components/stream/ordinalTypes.d.ts +40 -8
  308. package/dist/components/stream/paintNeeds.d.ts +31 -0
  309. package/dist/components/stream/physics/CapacityQueueController.d.ts +5 -0
  310. package/dist/components/stream/physics/CapacityQueueTypes.d.ts +134 -0
  311. package/dist/components/stream/physics/MatterPhysicsEngineAdapter.d.ts +42 -0
  312. package/dist/components/stream/physics/PhysicsAccessibility.d.ts +48 -0
  313. package/dist/components/stream/physics/PhysicsAnnotations.d.ts +58 -0
  314. package/dist/components/stream/physics/PhysicsBodyBudget.d.ts +26 -0
  315. package/dist/components/stream/physics/PhysicsBodySpatialIndex.d.ts +10 -0
  316. package/dist/components/stream/physics/PhysicsCanvasTheme.d.ts +26 -0
  317. package/dist/components/stream/physics/PhysicsControllers.d.ts +75 -0
  318. package/dist/components/stream/physics/PhysicsEngineAdapter.d.ts +59 -0
  319. package/dist/components/stream/physics/PhysicsEngineConformance.d.ts +23 -0
  320. package/dist/components/stream/physics/PhysicsEvidence.d.ts +25 -0
  321. package/dist/components/stream/physics/PhysicsKernel.d.ts +207 -0
  322. package/dist/components/stream/physics/PhysicsOptionalEngineAdapters.d.ts +12 -0
  323. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +84 -0
  324. package/dist/components/stream/physics/PhysicsPipelineTypes.d.ts +181 -0
  325. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +72 -0
  326. package/dist/components/stream/physics/PhysicsSediment.d.ts +69 -0
  327. package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +18 -0
  328. package/dist/components/stream/physics/PhysicsSettledScene.d.ts +21 -0
  329. package/dist/components/stream/physics/PhysicsWorkerClient.d.ts +24 -0
  330. package/dist/components/stream/physics/PhysicsWorkerProtocol.d.ts +101 -0
  331. package/dist/components/stream/physics/PhysicsWorkerRuntime.d.ts +5 -0
  332. package/dist/components/stream/physics/RapierPhysicsEngineAdapter.d.ts +18 -0
  333. package/dist/components/stream/physics/ServiceOperationsControllers.d.ts +27 -0
  334. package/dist/components/stream/physics/ServiceOperationsTypes.d.ts +89 -0
  335. package/dist/components/stream/physics/StreamPhysicsFrame.d.ts +6 -0
  336. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +302 -0
  337. package/dist/components/stream/physics/physicsBodyCanvas.d.ts +27 -0
  338. package/dist/components/stream/physics/physicsPipelineControls.d.ts +4 -0
  339. package/dist/components/stream/physics/physicsPipelineHelpers.d.ts +41 -0
  340. package/dist/components/stream/physics/physicsPipelineObservations.d.ts +14 -0
  341. package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +9 -0
  342. package/dist/components/stream/physics/physicsRegionRuntime.d.ts +54 -0
  343. package/dist/components/stream/physics/physicsSemanticUI.d.ts +20 -0
  344. package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +16 -0
  345. package/dist/components/stream/pipelineBufferUtils.d.ts +26 -0
  346. package/dist/components/stream/pipelineConfig.d.ts +177 -0
  347. package/dist/components/stream/pipelineDecay.d.ts +20 -2
  348. package/dist/components/stream/pipelineDomainResolution.d.ts +62 -0
  349. package/dist/components/stream/pipelineIdentityOps.d.ts +26 -0
  350. package/dist/components/stream/pipelinePulse.d.ts +16 -2
  351. package/dist/components/stream/pipelineRibbons.d.ts +41 -0
  352. package/dist/components/stream/pipelineSpatialIndex.d.ts +12 -0
  353. package/dist/components/stream/pipelineStoreUpdateResults.d.ts +12 -0
  354. package/dist/components/stream/pipelineStyleResolvers.d.ts +46 -0
  355. package/dist/components/stream/pipelineTransitions.d.ts +2 -0
  356. package/dist/components/stream/pipelineUpdateContract.d.ts +62 -0
  357. package/dist/components/stream/pulseFrameRefresh.d.ts +22 -0
  358. package/dist/components/stream/renderers/glyphCanvasRenderer.d.ts +6 -0
  359. package/dist/components/stream/renderers/resolveCSSColor.d.ts +6 -0
  360. package/dist/components/stream/sceneRevisionDiagnostics.d.ts +18 -0
  361. package/dist/components/stream/streamStoreSync.d.ts +37 -0
  362. package/dist/components/stream/types.d.ts +135 -7
  363. package/dist/components/stream/useFrame.d.ts +21 -2
  364. package/dist/components/stream/useHydration.d.ts +6 -0
  365. package/dist/components/stream/useLegendCategoryEmission.d.ts +5 -0
  366. package/dist/components/stream/workerModuleUrl.d.ts +10 -0
  367. package/dist/components/stream/xyAnnotationAnchors.d.ts +13 -0
  368. package/dist/components/stream/xyCanvasRenderers.d.ts +7 -0
  369. package/dist/components/stream/xyCrosshair.d.ts +11 -0
  370. package/dist/components/stream/xyDateTicks.d.ts +9 -0
  371. package/dist/components/stream/xyDefaultTooltip.d.ts +10 -0
  372. package/dist/components/stream/xySceneBuilders/types.d.ts +4 -4
  373. package/dist/controls.min.js +2 -0
  374. package/dist/controls.module.min.js +2 -0
  375. package/dist/forceLayoutWorker.js +1 -0
  376. package/dist/geo.min.js +1 -1
  377. package/dist/geo.module.min.js +1 -1
  378. package/dist/network.min.js +1 -1
  379. package/dist/network.module.min.js +1 -1
  380. package/dist/ordinal.min.js +1 -1
  381. package/dist/ordinal.module.min.js +1 -1
  382. package/dist/physics-matter.min.js +1 -0
  383. package/dist/physics-matter.module.min.js +1 -0
  384. package/dist/physics-rapier.min.js +1 -0
  385. package/dist/physics-rapier.module.min.js +1 -0
  386. package/dist/physics.min.js +2 -0
  387. package/dist/physics.module.min.js +2 -0
  388. package/dist/physicsWorker.js +1 -0
  389. package/dist/realtime.min.js +1 -1
  390. package/dist/realtime.module.min.js +1 -1
  391. package/dist/semiotic-ai-chunk-OG7BQUUW.module.min.js +2 -0
  392. package/dist/semiotic-ai-core.d.ts +47 -0
  393. package/dist/semiotic-ai-core.min.js +1 -0
  394. package/dist/semiotic-ai-core.module.min.js +1 -0
  395. package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +2 -0
  396. package/dist/semiotic-ai.d.ts +50 -8
  397. package/dist/semiotic-ai.min.js +1 -1
  398. package/dist/semiotic-ai.module.min.js +1 -1
  399. package/dist/semiotic-chunk-3FSVZ46U.module.min.js +2 -0
  400. package/dist/semiotic-controls.d.ts +18 -0
  401. package/dist/semiotic-data.min.js +1 -1
  402. package/dist/semiotic-data.module.min.js +1 -1
  403. package/dist/semiotic-experimental.d.ts +38 -9
  404. package/dist/semiotic-experimental.min.js +1 -1
  405. package/dist/semiotic-experimental.module.min.js +1 -1
  406. package/dist/semiotic-geo.d.ts +11 -0
  407. package/dist/semiotic-network.d.ts +11 -0
  408. package/dist/semiotic-ordinal.d.ts +8 -0
  409. package/dist/semiotic-physics-matter.d.ts +10 -0
  410. package/dist/semiotic-physics-rapier.d.ts +9 -0
  411. package/dist/semiotic-physics.d.ts +56 -0
  412. package/dist/semiotic-realtime-core.d.ts +34 -0
  413. package/dist/semiotic-realtime-core.min.js +1 -0
  414. package/dist/semiotic-realtime-core.module.min.js +1 -0
  415. package/dist/semiotic-realtime-react.d.ts +10 -0
  416. package/dist/semiotic-realtime-react.min.js +2 -0
  417. package/dist/semiotic-realtime-react.module.min.js +2 -0
  418. package/dist/semiotic-realtime.d.ts +4 -30
  419. package/dist/semiotic-recipes-core.d.ts +92 -0
  420. package/dist/semiotic-recipes-core.min.js +1 -0
  421. package/dist/semiotic-recipes-core.module.min.js +1 -0
  422. package/dist/semiotic-recipes-react.d.ts +7 -0
  423. package/dist/semiotic-recipes-react.min.js +2 -0
  424. package/dist/semiotic-recipes-react.module.min.js +2 -0
  425. package/dist/semiotic-recipes.d.ts +4 -43
  426. package/dist/semiotic-recipes.min.js +1 -1
  427. package/dist/semiotic-recipes.module.min.js +1 -1
  428. package/dist/semiotic-server-edge.d.ts +8 -0
  429. package/dist/semiotic-server-edge.min.js +1 -0
  430. package/dist/semiotic-server-edge.module.min.js +1 -0
  431. package/dist/semiotic-server-node.d.ts +5 -0
  432. package/dist/semiotic-server-node.min.js +1 -0
  433. package/dist/semiotic-server-node.module.min.js +1 -0
  434. package/dist/semiotic-server.d.ts +2 -2
  435. package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +2 -0
  436. package/dist/semiotic-themes-core.d.ts +53 -0
  437. package/dist/semiotic-themes-core.min.js +1 -0
  438. package/dist/semiotic-themes-core.module.min.js +1 -0
  439. package/dist/semiotic-themes-react.d.ts +4 -0
  440. package/dist/semiotic-themes-react.min.js +2 -0
  441. package/dist/semiotic-themes-react.module.min.js +2 -0
  442. package/dist/semiotic-themes.d.ts +6 -76
  443. package/dist/semiotic-themes.min.js +1 -2
  444. package/dist/semiotic-themes.module.min.js +1 -2
  445. package/dist/semiotic-utils-core.d.ts +46 -0
  446. package/dist/semiotic-utils-core.min.js +1 -0
  447. package/dist/semiotic-utils-core.module.min.js +1 -0
  448. package/dist/semiotic-utils-react.d.ts +5 -0
  449. package/dist/semiotic-utils-react.min.js +2 -0
  450. package/dist/semiotic-utils-react.module.min.js +2 -0
  451. package/dist/semiotic-utils.d.ts +3 -39
  452. package/dist/semiotic-utils.min.js +1 -2
  453. package/dist/semiotic-utils.module.min.js +1 -2
  454. package/dist/semiotic-value.min.js +1 -1
  455. package/dist/semiotic-value.module.min.js +1 -1
  456. package/dist/semiotic-xy.d.ts +8 -0
  457. package/dist/semiotic.d.ts +35 -7
  458. package/dist/semiotic.min.js +1 -1
  459. package/dist/semiotic.module.min.js +1 -1
  460. package/dist/server.min.js +1 -1
  461. package/dist/server.module.min.js +1 -1
  462. package/dist/xy-chunk-IWD6IB6V.module.min.js +2 -0
  463. package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +2 -0
  464. package/dist/xy.min.js +1 -1
  465. package/dist/xy.module.min.js +1 -1
  466. package/package.json +239 -87
  467. package/spec/README.md +152 -0
  468. package/spec/bindings/README.md +35 -0
  469. package/spec/bindings/vega-lite.mjs +112 -0
  470. package/spec/v0.1/annotation-provenance.schema.json +127 -0
  471. package/spec/v0.1/audience-profile.schema.json +67 -0
  472. package/spec/v0.1/chart-capability.schema.json +186 -0
  473. package/dist/components/recipes/gofish.d.ts +0 -207
  474. package/dist/components/recipes/gofishInterpreter.d.ts +0 -52
  475. package/dist/components/recipes/gofishLambdas.d.ts +0 -145
  476. package/dist/semiotic-ai-semiotic-ai-u954ylUn.js +0 -2
  477. package/dist/semiotic-ai-statisticalOverlays-CU7jW05Q.js +0 -1
  478. package/dist/semiotic-semiotic-BmrYbi99.js +0 -2
  479. package/dist/semiotic-statisticalOverlays-IjZw8Lsu.js +0 -1
  480. package/dist/xy-semiotic-xy-Dufu3D0-.js +0 -2
  481. package/dist/xy-statisticalOverlays-3Ni9bRph.js +0 -1
@@ -16,17 +16,22 @@ import type { Datum } from "../charts/shared/datumTypes";
16
16
  * Consumed by: StreamOrdinalFrame (sole consumer).
17
17
  */
18
18
  import { type ScaleLinear } from "d3-scale";
19
- import { type Quadtree } from "d3-quadtree";
19
+ import type { Quadtree } from "d3-quadtree";
20
20
  import type { OrdinalPipelineConfig, OrdinalScales, OrdinalSceneNode, OrdinalColumn, OrdinalLayout } from "./ordinalTypes";
21
21
  import type { Changeset, PointSceneNode } from "./types";
22
22
  import type { ActiveTransition } from "./pipelineTransitionUtils";
23
+ import type { OrdinalLayoutResult } from "./ordinalCustomLayout";
23
24
  import type { CustomLayoutSelection } from "./customLayoutSelection";
25
+ import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
26
+ import type { UpdateResult } from "./pipelineUpdateContract";
24
27
  export declare class OrdinalPipelineStore {
25
28
  private buffer;
26
29
  private rExtent;
27
30
  /** Per-accessor extents for multiAxis mode */
28
31
  private rExtents;
29
32
  private config;
33
+ private windowSizeWarned;
34
+ private updateResults;
30
35
  private getO;
31
36
  private getR;
32
37
  /** All resolved rAccessors (length > 1 when multiAxis) */
@@ -57,6 +62,15 @@ export declare class OrdinalPipelineStore {
57
62
  columns: Record<string, OrdinalColumn>;
58
63
  /** Overlays returned from customLayout (consumed by StreamOrdinalFrame). */
59
64
  customLayoutOverlays: import("react").ReactNode;
65
+ /** Most recent custom layout result for host readback (`getCustomLayout()`).
66
+ * Null before the first layout or without a custom layout. A failed rerun
67
+ * keeps the last successful result while its scene remains recoverable. */
68
+ lastCustomLayoutResult: OrdinalLayoutResult | null;
69
+ /** Latest custom-layout failure for frame-handle readback. */
70
+ lastCustomLayoutFailure: CustomLayoutFailureDiagnostic | null;
71
+ /** Lets `computeScene` retain a prior scene without mutating it after an
72
+ * exception from `buildSceneNodes`. */
73
+ private _customLayoutFailedThisBuild;
60
74
  private _customLayoutDiagnosticsWarned;
61
75
  /** Per-frame restyle callback from the custom layout result (see OrdinalLayoutResult.restyle). */
62
76
  private _customRestyle;
@@ -67,7 +81,8 @@ export declare class OrdinalPipelineStore {
67
81
  version: number;
68
82
  /** Bumped whenever the buffer is mutated. Used to invalidate per-frame caches. */
69
83
  private _dataVersion;
70
- private static readonly QUADTREE_THRESHOLD;
84
+ /** Materialized source data, cached for pulse/decay animation frames. */
85
+ private _bufferArrayCache;
71
86
  private _pointQuadtree;
72
87
  /** Largest visual point radius in the current scene. */
73
88
  private _maxPointRadius;
@@ -77,7 +92,14 @@ export declare class OrdinalPipelineStore {
77
92
  private _categoryIndexCache;
78
93
  private _hasRenderedOnce;
79
94
  constructor(config: OrdinalPipelineConfig);
95
+ /**
96
+ * Keep the optional pulse timestamp ring in lockstep with the datum ring.
97
+ * Enabling pulse after mount must seed timestamps for retained rows; an
98
+ * empty ring would associate later timestamps with the wrong datum index.
99
+ */
100
+ private syncPulseTimestampBuffer;
80
101
  ingest(changeset: Changeset): boolean;
102
+ ingestWithResult(changeset: Changeset): UpdateResult;
81
103
  private pushValueExtent;
82
104
  private evictValueExtent;
83
105
  /** For timeline type: resolve rAccessor as a [start, end] pair */
@@ -119,6 +141,12 @@ export declare class OrdinalPipelineStore {
119
141
  get maxPointRadius(): number;
120
142
  private applyDecay;
121
143
  private applyPulse;
144
+ /**
145
+ * Refresh only pulse-derived fields on the existing scene. This deliberately
146
+ * avoids a scene/layout rebuild on every rAF pulse tick.
147
+ */
148
+ refreshPulse(now: number): boolean;
149
+ hasActivePulsesAt(now: number): boolean;
122
150
  get hasActivePulses(): boolean;
123
151
  /** Synthesize a zero-state prevPositionMap for animated intro (first render). */
124
152
  private synthesizeIntroPositions;
@@ -136,7 +164,15 @@ export declare class OrdinalPipelineStore {
136
164
  * after the server already painted the chart.
137
165
  */
138
166
  cancelIntroAnimation(): void;
167
+ /**
168
+ * Materialize the ring buffer at most once per data version. Pulse decay
169
+ * ticks reuse this array and the datum/category index caches rather than
170
+ * allocating a fresh copy at animation-frame frequency.
171
+ */
172
+ private getBufferArray;
139
173
  getData(): Datum[];
174
+ /** Most recent additive update result for revision-aware hosts and tests. */
175
+ getLastUpdateResult(): UpdateResult;
140
176
  /**
141
177
  * Remove data items by ID. Requires dataIdAccessor to be configured.
142
178
  * Returns the removed items. Marks the store dirty for scene rebuild.
@@ -160,5 +196,13 @@ export declare class OrdinalPipelineStore {
160
196
  * No-op when the layout supplied no `restyle`.
161
197
  */
162
198
  restyleScene(selection: CustomLayoutSelection | null): void;
199
+ /**
200
+ * Re-derive every retained fact that depends on the category/value
201
+ * accessors. `updateConfig` can change an accessor without a subsequent
202
+ * ingest (the normal React path), so clearing only a cache would leave the
203
+ * next scene with an empty/stale domain against the existing buffer.
204
+ */
205
+ private rebuildAccessorDerivedState;
163
206
  updateConfig(config: Partial<OrdinalPipelineConfig>): void;
207
+ updateConfigWithResult(config: Partial<OrdinalPipelineConfig>): UpdateResult;
164
208
  }
@@ -1,160 +1,42 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
- import { type Quadtree } from "d3-quadtree";
2
+ /**
3
+ * PipelineStore — stateful pipeline for XY/streaming chart data.
4
+ *
5
+ * Owns: data ingestion (RingBuffer), extent tracking, scale computation,
6
+ * scene layout delegation (via xySceneBuilders/), transition animation,
7
+ * decay/pulse/staleness encoding, and quadtree spatial indexing.
8
+ *
9
+ * Scene building was extracted to xySceneBuilders/ — this store constructs
10
+ * an XYSceneContext and dispatches to the appropriate builder function.
11
+ *
12
+ * Key dependencies:
13
+ * xySceneBuilders/ — per-chartType scene layout (line, area, point, etc.)
14
+ * SceneGraph — node constructors (buildLineNode, buildPointNode, etc.)
15
+ * RingBuffer — sliding window data storage
16
+ * IncrementalExtent — O(1) min/max tracking
17
+ *
18
+ * Consumed by: StreamXYFrame (sole consumer).
19
+ */
3
20
  import { RingBuffer } from "../realtime/RingBuffer";
4
- import type { Changeset, StreamChartType, StreamScales, StreamLayout, SceneNode, PointSceneNode, CandlestickStyle, Style, ArrowOfTime, WindowMode, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, CurveType, BarStyle, ThemeSemanticColors, BandConfig } from "./types";
5
- import type { SymbolName } from "./symbolPath";
6
- import { type CoercibleNumber } from "./accessorUtils";
7
- import type { ActiveTransition } from "./pipelineTransitionUtils";
21
+ import type { Changeset, StreamScales, StreamLayout, SceneNode } from "./types";
22
+ import { type ActiveTransition } from "./pipelineTransitionUtils";
8
23
  import type { ResolvedRibbon } from "./xySceneBuilders/ribbonScene";
9
- import type { CustomLayout } from "./customLayout";
24
+ import type { LayoutResult } from "./customLayout";
10
25
  import type { CustomLayoutSelection } from "./customLayoutSelection";
11
- import type { MarginType } from "../types/marginType";
12
- export interface PipelineConfig {
13
- chartType: StreamChartType;
14
- runtimeMode?: "streaming" | "bounded";
15
- windowSize: number;
16
- windowMode: WindowMode;
17
- arrowOfTime: ArrowOfTime;
18
- extentPadding: number;
19
- /** Pixel inset on scale ranges to prevent glyph clipping at chart edges. Default 0. */
20
- scalePadding?: number;
21
- /** When `"exact"`, the x and y axis domains pin to the literal data
22
- * min/max — `extentPadding` is skipped so the first and last ticks
23
- * read as the actual data bounds. Default `"nice"` keeps the existing
24
- * padded domain so glyphs at the extremes don't clip the plot edge. */
25
- axisExtent?: import("../charts/shared/axisExtent").AxisExtentMode;
26
- maxCapacity?: number;
27
- xAccessor?: string | ((d: Datum) => CoercibleNumber);
28
- yAccessor?: string | ((d: Datum) => CoercibleNumber);
29
- timeAccessor?: string | ((d: Datum) => CoercibleNumber);
30
- valueAccessor?: string | ((d: Datum) => CoercibleNumber);
31
- colorAccessor?: string | ((d: Datum) => string);
32
- sizeAccessor?: string | ((d: Datum) => CoercibleNumber);
33
- /** Categorical accessor → glyph shape (scatter/bubble). Emits SymbolSceneNodes. */
34
- symbolAccessor?: string | ((d: Datum) => string);
35
- /** Explicit `{category → shape}` map; unmapped categories auto-assign. */
36
- symbolMap?: Record<string, SymbolName>;
37
- groupAccessor?: string | ((d: Datum) => string);
38
- categoryAccessor?: string | ((d: Datum) => string);
39
- lineDataAccessor?: string;
40
- xScaleType?: "linear" | "log" | "time";
41
- yScaleType?: "linear" | "log";
42
- xExtent?: [number | undefined, number | undefined] | [number];
43
- yExtent?: [number | undefined, number | undefined] | [number];
44
- sizeRange?: [number, number];
45
- binSize?: number;
46
- normalize?: boolean;
47
- /** Stacked area baseline mode. Only consulted by stackedarea chart type. */
48
- baseline?: "zero" | "wiggle" | "silhouette";
49
- /** Stack order — see StreamXYFrameProps.stackOrder. */
50
- stackOrder?: "key" | "insideOut" | "asc" | "desc";
51
- openAccessor?: string | ((d: Datum) => CoercibleNumber);
52
- highAccessor?: string | ((d: Datum) => CoercibleNumber);
53
- lowAccessor?: string | ((d: Datum) => CoercibleNumber);
54
- closeAccessor?: string | ((d: Datum) => CoercibleNumber);
55
- candlestickStyle?: CandlestickStyle;
56
- /** Internal: set by PipelineStore when open/close accessors are both missing */
57
- candlestickRangeMode?: boolean;
58
- boundsAccessor?: string | ((d: Datum) => CoercibleNumber);
59
- boundsStyle?: any;
60
- y0Accessor?: string | ((d: Datum) => CoercibleNumber);
61
- band?: BandConfig | BandConfig[];
62
- gradientFill?: {
63
- topOpacity: number;
64
- bottomOpacity: number;
65
- } | {
66
- colorStops: Array<{
67
- offset: number;
68
- color: string;
69
- }>;
70
- };
71
- areaGroups?: Set<string>;
72
- lineGradient?: {
73
- colorStops: Array<{
74
- offset: number;
75
- color: string;
76
- }>;
77
- };
78
- lineStyle?: any;
79
- pointStyle?: (d: Datum) => Style & {
80
- r?: number;
81
- };
82
- areaStyle?: (d: Datum) => Style;
83
- swarmStyle?: {
84
- radius?: number;
85
- fill?: string;
86
- opacity?: number;
87
- stroke?: string;
88
- strokeWidth?: number;
89
- };
90
- waterfallStyle?: {
91
- positiveColor?: string;
92
- negativeColor?: string;
93
- connectorStroke?: string;
94
- connectorWidth?: number;
95
- gap?: number;
96
- stroke?: string;
97
- strokeWidth?: number;
98
- };
99
- colorScheme?: string | string[];
100
- /** Theme categorical palette — used as fallback when colorScheme is not an explicit array */
101
- themeCategorical?: string[];
102
- /**
103
- * Theme-resolved semantic role colors. Scene builders use these as the
104
- * default before falling back to hardcoded hex. Populated by the Stream
105
- * Frame from the in-memory `SemioticTheme.colors` object at render time
106
- * — the values are concrete hex (or whatever the preset declares), not
107
- * `var(...)` strings, and so this channel does NOT participate in the
108
- * DOM CSS cascade. Changing the ambient theme (`<ThemeProvider>`) or
109
- * swapping to a nested provider is how you override these values.
110
- *
111
- * Per-scope overrides via CSS custom properties
112
- * (e.g. `<div style={{ "--semiotic-danger": "#c00" }}>`) work only for
113
- * values a user explicitly passes through as `var(--...)` strings in
114
- * chart props — those are resolved via `getComputedStyle` in the
115
- * canvas renderer at paint time (see `resolveCSSColor.ts`). The theme
116
- * defaults in this field don't read CSS.
117
- */
118
- themeSemantic?: ThemeSemanticColors;
119
- /** Theme sequential scheme name (e.g. "blues") — fallback when `colorScheme` is not explicitly set for magnitude encodings (heatmap, choropleth, size). */
120
- themeSequential?: string;
121
- /** Theme diverging scheme name (e.g. "RdBu") — fallback when `colorScheme` is not explicitly set for midpoint encodings (likert, bivariate, ± deviation). */
122
- themeDiverging?: string;
123
- barColors?: Record<string, string>;
124
- /** Histogram bar style — fill/stroke/strokeWidth/gap. Accepted by RealtimeHistogram and routed through to the bar scene builder. */
125
- barStyle?: BarStyle;
126
- annotations?: Datum[];
127
- decay?: DecayConfig;
128
- pulse?: PulseConfig;
129
- transition?: TransitionConfig;
130
- /** Whether to animate elements on first render (points scale up, lines/areas clip from left, rects grow from baseline) */
131
- introAnimation?: boolean;
132
- staleness?: StalenessConfig;
133
- heatmapAggregation?: "count" | "sum" | "mean";
134
- heatmapXBins?: number;
135
- heatmapYBins?: number;
136
- showValues?: boolean;
137
- heatmapValueFormat?: (v: number) => string;
138
- pointIdAccessor?: string | ((d: Datum) => string);
139
- curve?: CurveType;
140
- /** When provided, replaces chart-type dispatch in scene building.
141
- * Receives a LayoutContext (scales, dimensions, theme, resolveColor)
142
- * and returns scene nodes plus optional overlays. */
143
- customLayout?: CustomLayout;
144
- /** User-supplied config blob threaded through to LayoutContext.config. */
145
- layoutConfig?: object;
146
- /** Resolved margin — passed through so LayoutContext.dimensions.margin reflects what the frame actually used. */
147
- layoutMargin?: MarginType;
148
- /** Resolved shared selection projected into LayoutContext.selection. Owned by
149
- * a dedicated frame effect (kept off the rebuild-triggering path). */
150
- layoutSelection?: CustomLayoutSelection | null;
151
- }
26
+ import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
27
+ import { type PipelineConfig } from "./pipelineConfig";
28
+ import type { UpdateResult } from "./pipelineUpdateContract";
29
+ export type { PipelineConfig } from "./pipelineConfig";
30
+ export type { ChangeSet, Invalidation, RevisionSet, UpdateResult, } from "./pipelineUpdateContract";
31
+ export { DEFAULT_GROWING_MAX_CAPACITY, GROWING_CAPACITY_WARN_THRESHOLD } from "./pipelineConfig";
152
32
  export declare class PipelineStore {
153
33
  private buffer;
154
34
  private xExtent;
155
35
  private yExtent;
156
36
  private config;
157
37
  private growingCap;
38
+ private growingCapacityWarned;
39
+ private windowSizeWarned;
158
40
  private getX;
159
41
  private getY;
160
42
  private getGroup;
@@ -206,17 +88,32 @@ export declare class PipelineStore {
206
88
  private _stackExtentCache;
207
89
  /** Monotonic counter incremented on each ingest — used as part of cache keys */
208
90
  private _ingestVersion;
91
+ /** Datum→index map for decay/pulse, cached by `_ingestVersion`. */
92
+ private _datumIndexCache;
209
93
  /** Cached materialized array from buffer.toArray() — only rebuilt when buffer changes */
210
94
  private _bufferArrayCache;
211
95
  /** True when the buffer has been mutated since last toArray() call */
212
96
  private _bufferDirty;
213
97
  private needsFullRebuild;
214
98
  private lastLayout;
99
+ private updateResults;
215
100
  scales: StreamScales | null;
216
101
  scene: SceneNode[];
217
102
  version: number;
218
103
  /** Overlays returned from customLayout (consumed by StreamXYFrame for SVGOverlay). */
219
104
  customLayoutOverlays: import("react").ReactNode;
105
+ /** The most recent custom layout result, exposed for host readback via the
106
+ * frame handle's `getCustomLayout()` — so a page that needs the computed
107
+ * placement (stats, inspectors) doesn't re-run the layout. Null before the
108
+ * first layout or when no custom layout is set. A rerun failure preserves
109
+ * this last successful result when it is safe to do so. */
110
+ lastCustomLayoutResult: LayoutResult | null;
111
+ /** Latest custom-layout failure for frame-handle readback. */
112
+ lastCustomLayoutFailure: CustomLayoutFailureDiagnostic | null;
113
+ /** Set only while `buildSceneNodes` is recovering from a layout exception.
114
+ * `computeScene` uses it to retain the previous scene/scales without applying
115
+ * a new transition, pulse, or decay pass to that retained output. */
116
+ private _customLayoutFailedThisBuild;
220
117
  private _customLayoutDiagnosticsWarned;
221
118
  /** Per-frame restyle callback from the custom layout result (see LayoutResult.restyle). */
222
119
  private _customRestyle;
@@ -226,14 +123,23 @@ export declare class PipelineStore {
226
123
  private _baseStyles;
227
124
  /** True when the x accessor returns Date objects (auto-detected on first data ingestion) */
228
125
  xIsDate: boolean;
229
- private _quadtree;
230
- /** Largest visual point radius in the current scene. The hit tester uses
231
- * this to widen its quadtree query so points with big radii (bubble) don't
232
- * fall outside the search region. */
233
- private _maxPointRadius;
234
- private static readonly QUADTREE_THRESHOLD;
126
+ private spatialIndex;
235
127
  constructor(config: PipelineConfig);
128
+ /**
129
+ * Keep pulse timestamps structurally coupled to the datum ring when pulse
130
+ * is changed after construction. A fresh timestamp ring must be seeded for
131
+ * already-retained data; otherwise the next push would be timestamp index 0
132
+ * while its datum is at the end of the data ring.
133
+ */
134
+ private syncPulseTimestampBuffer;
236
135
  private pushDatumYExtent;
136
+ /**
137
+ * Remove every y-domain contribution made by {@link pushDatumYExtent}.
138
+ * Keeping these paths paired is important: a ribbon/band can extend the
139
+ * visible domain beyond the point itself, so removing or replacing that
140
+ * datum must evict its envelope extrema too.
141
+ */
142
+ private evictDatumYExtent;
237
143
  private rebuildYExtent;
238
144
  private rebuildExtents;
239
145
  private _lastBoundedInsertsRef;
@@ -250,20 +156,14 @@ export declare class PipelineStore {
250
156
  * meaningful — streaming consumers don't pass the same array twice.
251
157
  */
252
158
  ingest(changeset: Changeset): boolean;
159
+ /** Additive explicit-result form of {@link ingest}; `ingest()` remains unchanged. */
160
+ ingestWithResult(changeset: Changeset): UpdateResult;
253
161
  /**
254
162
  * Recompute scales and scene graph for the current buffer contents.
255
163
  */
256
164
  computeScene(layout: StreamLayout): void;
257
- /**
258
- * Build or clear the quadtree spatial index for point scene nodes.
259
- * Only built for scatter/bubble charts with >QUADTREE_THRESHOLD points.
260
- */
261
- private rebuildQuadtree;
262
- /**
263
- * Get the quadtree spatial index, if available.
264
- * Returns null when chart type is not scatter/bubble or point count is below threshold.
265
- */
266
- get quadtree(): Quadtree<PointSceneNode> | null;
165
+ /** Get the retained point-scene spatial index, if available. */
166
+ get quadtree(): import("d3-quadtree").Quadtree<import("./types").PointSceneNode> | null;
267
167
  /** Largest visual point radius in the current scene. */
268
168
  get maxPointRadius(): number;
269
169
  /**
@@ -274,8 +174,12 @@ export declare class PipelineStore {
274
174
  private buildSceneNodes;
275
175
  private resolveBoundsStyle;
276
176
  computeDecayOpacity(bufferIndex: number, bufferSize: number): number;
177
+ private getDatumIndexMap;
277
178
  private applyDecay;
278
179
  private applyPulse;
180
+ /** Refresh pulse fields without rebuilding layout; retained custom scenes stay immutable. */
181
+ refreshPulse(now: number): boolean;
182
+ hasActivePulsesAt(now: number): boolean;
279
183
  get hasActivePulses(): boolean;
280
184
  private get transitionContext();
281
185
  private snapshotPositions;
@@ -317,13 +221,6 @@ export declare class PipelineStore {
317
221
  private resolveColorMap;
318
222
  private resolveLineStyle;
319
223
  private resolveAreaStyle;
320
- /** Resolve a group name to a color from the cached color map or a dedicated group palette.
321
- * First checks _colorMapCache (populated by resolveColorMap when colorAccessor is set).
322
- * Falls back to _groupColorMap (insertion-order, never mutates _colorMapCache).
323
- *
324
- * FIFO-evicts the oldest entry when the map exceeds `GROUP_COLOR_MAP_CAP`. The palette index
325
- * uses `_groupColorCounter` (monotonic, decoupled from map size) so eviction doesn't cause
326
- * new groups to collide with existing entries on a shrunk map. */
327
224
  private resolveGroupColor;
328
225
  /**
329
226
  * Return a cached materialized array of the buffer contents.
@@ -333,6 +230,8 @@ export declare class PipelineStore {
333
230
  */
334
231
  private getBufferArray;
335
232
  getData(): Datum[];
233
+ /** Most recent additive update result for revision-aware hosts and tests. */
234
+ getLastUpdateResult(): UpdateResult;
336
235
  /**
337
236
  * Remove data points by ID. Requires pointIdAccessor to be configured.
338
237
  * Returns the removed items. Marks the store dirty for scene rebuild.
@@ -360,11 +259,23 @@ export declare class PipelineStore {
360
259
  * triggering one. The frame then either repaints (restyle) or rebuilds. */
361
260
  setLayoutSelection(selection: CustomLayoutSelection | null): void;
362
261
  private applyCustomRestyle;
262
+ /**
263
+ * "Styles changed, repaint the data canvas without rebuilding the scene."
264
+ * Set by {@link restyleScene}; consumed once per frame by the render loop.
265
+ * Kept separate from the dirty flag so a style-only selection change repaints
266
+ * without forcing a layout/scene rebuild (the point of the restyle fast path).
267
+ */
268
+ private _stylePaintPending;
269
+ /** Consume the style-only repaint signal (see {@link _stylePaintPending}). */
270
+ consumeStylePaintPending(): boolean;
363
271
  /**
364
272
  * Re-apply the custom layout's `restyle` to the existing scene for
365
273
  * `selection`, off each node's base style — no relayout, no quadtree rebuild
366
274
  * (positions are unchanged). No-op when the layout supplied no `restyle`.
275
+ * Flags a style-only repaint so the render loop redraws the mutated styles.
367
276
  */
368
277
  restyleScene(selection: CustomLayoutSelection | null): void;
369
278
  updateConfig(config: Partial<PipelineConfig>): void;
279
+ /** Additive explicit-result form of {@link updateConfig}. */
280
+ updateConfigWithResult(config: Partial<PipelineConfig>): UpdateResult;
370
281
  }
@@ -5,7 +5,7 @@ export declare function buildLineNode(data: Datum[], scales: StreamScales, xGet:
5
5
  export declare function buildAreaNode(data: Datum[], scales: StreamScales, xGet: (d: Datum) => number, yGet: (d: Datum) => number, baselineY: number, style: Style, group?: string, y0Get?: (d: Datum) => number): AreaSceneNode;
6
6
  /** Per-group-per-x stacked top values, keyed by group then x */
7
7
  export type StackedTops = Map<string, Map<number, number>>;
8
- export type StackBaseline = "zero" | "wiggle" | "silhouette";
8
+ export type StackBaseline = "zero" | "wiggle" | "silhouette" | "diverging";
9
9
  /**
10
10
  * Compute per-x stack baseline offsets. Shared between scene rendering
11
11
  * (`buildStackedAreaNodes`) and extent computation (`PipelineStore`) so
@@ -17,8 +17,16 @@ export type StackBaseline = "zero" | "wiggle" | "silhouette";
17
17
  * xValues — sorted unique x values
18
18
  * groupKeys — group keys in stacking order (same order both callers use)
19
19
  * valueAt — (groupKey, x) → group's value at x (0 if absent)
20
+ *
21
+ * `"diverging"` returns zero offsets — positives and negatives stack from
22
+ * y=0 independently inside {@link buildStackedAreaNodes}.
20
23
  */
21
24
  export declare function computeStackOffsets(xValues: number[], groupKeys: string[], valueAt: (groupKey: string, x: number) => number, baseline: StackBaseline): Map<number, number>;
25
+ /**
26
+ * Diverging stack extent: positives accumulate above 0, negatives below.
27
+ * Shared by PipelineStore auto-extent and any host that needs matching bounds.
28
+ */
29
+ export declare function computeDivergingStackExtent(xValues: number[], groupKeys: string[], valueAt: (groupKey: string, x: number) => number): [number, number];
22
30
  export declare function buildStackedAreaNodes(groups: {
23
31
  key: string;
24
32
  data: Datum[];
@@ -1,5 +1,5 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import * as React from "react";
3
3
  import type { StreamGeoFrameProps, StreamGeoFrameHandle } from "./geoTypes";
4
- declare const StreamGeoFrame: React.ForwardRefExoticComponent<StreamGeoFrameProps<Datum> & React.RefAttributes<StreamGeoFrameHandle>>;
4
+ declare const StreamGeoFrame: React.NamedExoticComponent<StreamGeoFrameProps<Datum> & React.RefAttributes<StreamGeoFrameHandle>>;
5
5
  export default StreamGeoFrame;
@@ -1,5 +1,5 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import * as React from "react";
3
3
  import type { StreamNetworkFrameProps, StreamNetworkFrameHandle } from "./networkTypes";
4
- declare const StreamNetworkFrame: React.ForwardRefExoticComponent<StreamNetworkFrameProps<Datum> & React.RefAttributes<StreamNetworkFrameHandle>>;
4
+ declare const StreamNetworkFrame: React.NamedExoticComponent<StreamNetworkFrameProps<Datum> & React.RefAttributes<StreamNetworkFrameHandle>>;
5
5
  export default StreamNetworkFrame;
@@ -1,5 +1,5 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import * as React from "react";
3
3
  import type { StreamOrdinalFrameProps, StreamOrdinalFrameHandle } from "./ordinalTypes";
4
- declare const StreamOrdinalFrame: React.ForwardRefExoticComponent<StreamOrdinalFrameProps<Datum> & React.RefAttributes<StreamOrdinalFrameHandle<Datum>>>;
4
+ declare const StreamOrdinalFrame: React.NamedExoticComponent<StreamOrdinalFrameProps<Datum> & React.RefAttributes<StreamOrdinalFrameHandle<Datum>>>;
5
5
  export default StreamOrdinalFrame;
@@ -1,22 +1,6 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
2
  import * as React from "react";
3
3
  import type { StreamXYFrameProps, StreamXYFrameHandle } from "./types";
4
- /**
5
- * Append a 2-char hex alpha to an existing CSS color, returning a valid
6
- * CSS color string. The naive `${color}${alpha}` concatenation only works
7
- * when `color` is a 6-char `#rrggbb`; shorthand `#rgb` produces the
8
- * invalid 5-char `#rgbXX`, which `ctx.strokeStyle`/`fillStyle` silently
9
- * rejects (falling back to `#000000` — black, invisible on dark themes).
10
- * The /cookbook/marginal-graphics crosshair invisibility was caused
11
- * precisely by `--semiotic-text-secondary: "#aaa"` hitting this path.
12
- *
13
- * Handles:
14
- * • 3-char hex (`#abc`) → expanded to 6-char then concatenated
15
- * • 6-char hex (`#aabbcc`) → concatenated directly
16
- * • `rgb(...)` → repacked as `rgba(..., a)` with numeric alpha
17
- * Any other form (named colors, hsl(), oklch(), etc.) falls back to the
18
- * raw color without alpha — degrades gracefully.
19
- */
20
- export declare function withAlpha(color: string, alphaHex: string): string;
21
- declare const StreamXYFrame: React.ForwardRefExoticComponent<StreamXYFrameProps<Datum> & React.RefAttributes<StreamXYFrameHandle<Datum>>>;
4
+ export { withAlpha } from "./frameThemeColors";
5
+ declare const StreamXYFrame: React.NamedExoticComponent<StreamXYFrameProps<Datum> & React.RefAttributes<StreamXYFrameHandle<Datum>>>;
22
6
  export default StreamXYFrame;
@@ -0,0 +1,33 @@
1
+ /** Structural scene node accepted from any frame family. */
2
+ export type AccessibleSceneNode = {
3
+ type?: unknown;
4
+ datum?: unknown;
5
+ accessibleDatum?: unknown;
6
+ accessibility?: unknown;
7
+ group?: unknown;
8
+ value?: unknown;
9
+ category?: unknown;
10
+ label?: unknown;
11
+ name?: unknown;
12
+ properties?: unknown;
13
+ tableFields?: unknown;
14
+ x?: unknown;
15
+ y?: unknown;
16
+ w?: unknown;
17
+ h?: unknown;
18
+ path?: unknown;
19
+ topPath?: unknown;
20
+ openY?: unknown;
21
+ closeY?: unknown;
22
+ highY?: unknown;
23
+ lowY?: unknown;
24
+ };
25
+ export interface DataRow {
26
+ label: string;
27
+ values: Record<string, string | number>;
28
+ }
29
+ /**
30
+ * Extract user-facing table rows from scene nodes. Geometry is ignored; rich
31
+ * accessibleDatum/tableFields metadata takes precedence over the render datum.
32
+ */
33
+ export declare function extractAllRows(scene: AccessibleSceneNode[]): DataRow[];
@@ -1,15 +1,28 @@
1
1
  /**
2
- * Compare two accessor specs for equivalence.
3
- * - Same reference: always equivalent (`===`)
4
- * - String accessors: exact string match
5
- * - Function accessors: `.toString()` comparison (catches inline arrow functions
6
- * like `d => d.value` that are recreated on every render but have identical source)
7
- * - Mismatched types or undefined vs defined: not equivalent
2
+ * Compare two accessor specs for equivalence, using **identity** semantics.
3
+ * - String accessors: compared by value (`"value" === "value"`).
4
+ * - Function accessors: compared by reference. Two distinct function objects are
5
+ * NOT equivalent, even when their source text matches.
6
+ * - Mismatched types or `undefined` vs defined: not equivalent.
8
7
  *
9
- * **Known limitation**: `.toString()` compares source text, not closure bindings.
10
- * Two functions with identical source but different captured variables will appear
11
- * equivalent. For closures that depend on changing values, use `useCallback` with
12
- * the variable in the dependency array so the reference changes when behavior changes.
8
+ * **Why identity, not source text.** A previous implementation compared
9
+ * `a.toString() === b.toString()` to treat re-created inline arrows
10
+ * (`d => d.value`) as equivalent across renders. That was a correctness bug:
11
+ * `.toString()` compares source text, not captured variables, so two closures
12
+ * with identical source but different bindings — `makeAccessor(1)` vs
13
+ * `makeAccessor(10)` — compared equal, and the store retained a stale
14
+ * domain/scene against a genuinely different accessor. Identity comparison also
15
+ * matches how the frames already decide a config changed
16
+ * (`useStableShallow` compares function props by identity), so the store no
17
+ * longer second-guesses a change the frame already detected.
18
+ *
19
+ * **Consumer contract.** Passing a *new* function accessor (a fresh inline
20
+ * arrow every render) now triggers a rebuild, because the library can no longer
21
+ * prove the new closure is semantically identical. Use a string accessor
22
+ * (always referentially stable) or memoize the function with `useCallback`. For
23
+ * the rare case where a stable function's captured semantics change *without*
24
+ * its identity changing, bump the pipeline config's `accessorRevision` to force
25
+ * re-derivation.
13
26
  */
14
27
  export declare function accessorsEquivalent(a: string | ((...args: any[]) => any) | undefined, b: string | ((...args: any[]) => any) | undefined): boolean;
15
28
  export type CoercibleNumber = number | Date | string;
@@ -0,0 +1,25 @@
1
+ import * as React from "react";
2
+ export type BrushKeyboardAction = {
3
+ type: "nudge";
4
+ direction: "left" | "right" | "up" | "down";
5
+ resize: boolean;
6
+ } | {
7
+ type: "clear";
8
+ };
9
+ export interface BrushAccessibilityOptions {
10
+ label?: string;
11
+ description?: string;
12
+ onAction?: (action: BrushKeyboardAction) => void;
13
+ }
14
+ /** Shared ARIA and keyboard vocabulary for frame-owned D3 brushes. */
15
+ export declare function useBrushAccessibility({ label, description, onAction, }?: BrushAccessibilityOptions): {
16
+ description: string;
17
+ descriptionId: string;
18
+ svgProps: {
19
+ role: string;
20
+ tabIndex: number;
21
+ "aria-label": string;
22
+ "aria-describedby": string;
23
+ onKeyDown: (event: React.KeyboardEvent<SVGSVGElement>) => void;
24
+ };
25
+ };
@@ -0,0 +1,24 @@
1
+ export interface PaintCanvasBackgroundOptions {
2
+ /** Explicit chart background color (or CSS var). */
3
+ background?: string;
4
+ /**
5
+ * When true, skip the fill so an SVG backgroundGraphics layer shows through.
6
+ * Equivalent to frames' `backgroundGraphics` prop being set.
7
+ */
8
+ hasBackgroundGraphics?: boolean;
9
+ /**
10
+ * Theme fallback when `background` is unset (e.g. `--semiotic-bg`).
11
+ * Empty / transparent values are ignored.
12
+ */
13
+ themeBackground?: string;
14
+ /** Fill origin (plot-local or canvas-local depending on frame transform). */
15
+ x?: number;
16
+ y?: number;
17
+ width: number;
18
+ height: number;
19
+ }
20
+ /**
21
+ * Paint an opaque chart background when appropriate.
22
+ * Returns true if a fill was applied.
23
+ */
24
+ export declare function paintCanvasBackground(ctx: CanvasRenderingContext2D, options: PaintCanvasBackgroundOptions): boolean;
@@ -21,6 +21,9 @@ export interface CanvasMargin {
21
21
  */
22
22
  export declare function prepareCanvas(canvas: HTMLCanvasElement, size: [number, number], margin: CanvasMargin, dpr: number): CanvasRenderingContext2D | null;
23
23
  /**
24
- * Get the current devicePixelRatio, defaulting to 1 in non-browser environments.
24
+ * Get the effective canvas devicePixelRatio, defaulting to 1 in non-browser
25
+ * environments. Mobile/coarse-pointer screens are capped at 2x to avoid
26
+ * allocating very large backing stores on high-density phones; desktop stays
27
+ * crisper but still caps pathological DPR values at 3x.
25
28
  */
26
29
  export declare function getDevicePixelRatio(): number;