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
@@ -0,0 +1,88 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ import type { GeoCustomLayout } from "../stream/geoCustomLayout";
3
+ export type LandmarkKind = "city" | "culture" | "monument" | "faith" | "nature" | "knowledge" | "defense" | "arena" | "transport";
4
+ export type IsometricTerrainKind = "land" | "ocean" | "forest" | "grassland" | "cropland" | "wetland" | "urban" | "scrub" | "bare" | "snow";
5
+ export interface IsometricTerrainCell {
6
+ kind: IsometricTerrainKind;
7
+ /** Fraction of the geographic cell covered by this terrain, from 0 to 1. */
8
+ coverage?: number;
9
+ /** Optional per-cell color override. */
10
+ fill?: string;
11
+ }
12
+ export interface IsometricLandmarkConfig {
13
+ /** Geographic center represented by the middle grid cell. */
14
+ center: {
15
+ lon: number;
16
+ lat: number;
17
+ };
18
+ /** Datum id forced into the middle cell. */
19
+ centerId?: string;
20
+ /** Odd number of rows/columns. @default 5 */
21
+ gridSize?: number;
22
+ /** Half-width of the local square represented by the board. @default 75 */
23
+ gridRadiusKm?: number;
24
+ /** Isometric tile dimensions in pixels. @default 80×40 */
25
+ tileWidth?: number;
26
+ tileHeight?: number;
27
+ /** Source-data accessors. */
28
+ idAccessor?: string | ((d: Datum) => string);
29
+ nameAccessor?: string | ((d: Datum) => string);
30
+ longitudeAccessor?: string | ((d: Datum) => number);
31
+ latitudeAccessor?: string | ((d: Datum) => number);
32
+ kindAccessor?: string | ((d: Datum) => LandmarkKind);
33
+ /** Lower values win when live and fallback candidates share a cell. */
34
+ candidatePriorityAccessor?: string | ((d: Datum) => number);
35
+ /** Optional replacement sprite URLs. Transparent PNGs work best. */
36
+ sprites?: Partial<Record<LandmarkKind, string>>;
37
+ /** Rendered resource sprite size. @default 32 */
38
+ resourceSpriteSize?: number;
39
+ /** Rendered major-city sprite size. @default 64 */
40
+ citySpriteSize?: number;
41
+ /** Civ-style terrain palette. */
42
+ terrainColors?: string[];
43
+ /** Geographic terrain classification keyed by `tile-{row}-{column}`. */
44
+ terrainByCell?: Record<string, IsometricTerrainKind | IsometricTerrainCell>;
45
+ /** Civ-style colors used for classified terrain cells. */
46
+ terrainPalette?: Partial<Record<IsometricTerrainKind, string>>;
47
+ tileStroke?: string;
48
+ showCityLabel?: boolean;
49
+ }
50
+ export interface IsometricLandmarkTile {
51
+ id: string;
52
+ row: number;
53
+ column: number;
54
+ centerXKm: number;
55
+ centerYKm: number;
56
+ terrainIndex: number;
57
+ landmark: (Datum & {
58
+ id: string;
59
+ name: string;
60
+ kind: LandmarkKind;
61
+ lon: number;
62
+ lat: number;
63
+ distanceKm: number;
64
+ }) | null;
65
+ /** All candidates assigned to the cell, with the displayed landmark first. */
66
+ landmarks: Array<Datum & {
67
+ id: string;
68
+ name: string;
69
+ kind: LandmarkKind;
70
+ lon: number;
71
+ lat: number;
72
+ distanceKm: number;
73
+ }>;
74
+ }
75
+ export declare const DEFAULT_ISOMETRIC_SPRITE_SIZES: {
76
+ readonly resource: 32;
77
+ readonly city: 64;
78
+ };
79
+ /**
80
+ * Quantize geographic landmarks into an odd square grid and choose one
81
+ * representative per cell. Selection balances proximity to the cell center
82
+ * with category reuse so a dense class does not consume the whole board.
83
+ */
84
+ export declare function selectIsometricLandmarks(points: Datum[], config: IsometricLandmarkConfig): IsometricLandmarkTile[];
85
+ /**
86
+ * Isometric landmark board for `GeoCustomChart`.
87
+ */
88
+ export declare const isometricLandmarkLayout: GeoCustomLayout<IsometricLandmarkConfig>;
@@ -0,0 +1,17 @@
1
+ import type { GlyphDef } from "../stream/glyphDef";
2
+ export declare const isotypeInk = "#334155";
3
+ export declare const isotypePaper = "#f8fafc";
4
+ export declare const isotypeGhost = "#cbd5e1";
5
+ export declare const isotypeServerGlyph: GlyphDef;
6
+ export declare const isotypeChipGlyph: GlyphDef;
7
+ export declare const isotypeBoltGlyph: GlyphDef;
8
+ export declare const isotypeBusGlyph: GlyphDef;
9
+ export declare const isotypePersonPath = "M 9.12,3.34 C 8.28,3.29 7.44,3.40 6.64,3.69 4.17,3.63 1.97,5.37 0.91,7.51 -1.32,11.80 2.55,17.76 8.19,16.55 11.62,16.13 15.55,14.04 16.17,10.33 16.38,6.53 12.77,3.52 9.12,3.34 Z M 9.35,19.86 C 8.89,19.84 8.41,19.92 7.92,20.11 5.12,21.55 3.72,24.68 2.79,27.54 2.32,29.86 0.87,32.04 1.36,34.49 1.63,37.60 8.04,38.95 8.04,38.95 8.04,38.95 14.67,39.65 16.50,36.33 17.16,31.95 16.34,27.23 14.01,23.42 13.07,21.69 11.36,19.92 9.35,19.86 Z";
10
+ export declare const isotypePersonGlyph: GlyphDef;
11
+ export declare const isotypeNetworkGlyphs: {
12
+ readonly server: GlyphDef;
13
+ readonly chip: GlyphDef;
14
+ readonly bolt: GlyphDef;
15
+ readonly bus: GlyphDef;
16
+ readonly person: GlyphDef;
17
+ };
@@ -0,0 +1,48 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ export type MobileAnnotationStrategyMode = "plot" | "callout-list" | "hybrid";
3
+ export interface MobileAnnotationStrategyConfig {
4
+ /** Activate the strategy explicitly. When omitted, width/breakpoint decides. */
5
+ active?: boolean;
6
+ /** Measured plot/container width in CSS pixels. */
7
+ width?: number;
8
+ /** Width at or below which the strategy activates. Default 480. */
9
+ breakpoint?: number;
10
+ /** Plot-only, list-only, or hybrid visible-plus-list behavior. Default "hybrid". */
11
+ strategy?: MobileAnnotationStrategyMode;
12
+ /** Maximum persistent note annotations left in the plot. Alias: maxAnnotations. */
13
+ maxPlotAnnotations?: number;
14
+ maxAnnotations?: number;
15
+ /** Minimum number of note annotations kept in the plot. Default 1. */
16
+ minPlotAnnotations?: number;
17
+ minVisible?: number;
18
+ /** Maximum callout-list items. Default 6. */
19
+ maxCalloutItems?: number;
20
+ /** Keep primary/emergency notes in the plot before lower-priority notes. Default true. */
21
+ preservePrimary?: boolean;
22
+ /** Prefer mobileText/shortText over full label. Default true. */
23
+ preferShortText?: boolean;
24
+ /** Field or function used as an explicit priority score. */
25
+ priorityAccessor?: string | ((annotation: Datum, index: number) => number | undefined);
26
+ /** Optional filter for annotations that should move into the callout list. */
27
+ calloutFilter?: (annotation: Datum, index: number) => boolean;
28
+ }
29
+ export interface MobileAnnotationCalloutItem {
30
+ id: string;
31
+ label: string;
32
+ shortLabel?: string;
33
+ pointId?: string | number;
34
+ emphasis?: string;
35
+ source?: string;
36
+ priority: number;
37
+ annotation: Datum;
38
+ }
39
+ export interface MobileAnnotationStrategyResult {
40
+ active: boolean;
41
+ strategy: MobileAnnotationStrategyMode;
42
+ budget: number;
43
+ visible: Datum[];
44
+ deferred: Datum[];
45
+ calloutList: MobileAnnotationCalloutItem[];
46
+ hidden: Datum[];
47
+ }
48
+ export declare function mobileAnnotationStrategy(annotations: readonly Datum[] | undefined, config?: MobileAnnotationStrategyConfig): MobileAnnotationStrategyResult;
@@ -0,0 +1,59 @@
1
+ import type { ResponsiveRule } from "../charts/shared/responsiveRules";
2
+ import type { MobileInteractionConfig, MobileSnapBehavior, MobileStandardControlsMode } from "../charts/shared/types";
3
+ import type { MobileVisualizationContract } from "../charts/shared/auditMobileVisualization";
4
+ export type MobileChartFamily = "line" | "area" | "ordinal" | "scatter" | "network" | "geo" | "small-multiple";
5
+ export interface MobileChartFamilyRecipeOptions {
6
+ breakpoint?: number;
7
+ targetSize?: number;
8
+ mode?: "mobile" | false;
9
+ density?: "comfortable" | "compact" | "dense";
10
+ transformProfile?: "overview" | "compare" | "inspect";
11
+ keepAxes?: boolean;
12
+ showLegend?: boolean;
13
+ directLabel?: boolean;
14
+ maxAnnotations?: number;
15
+ maxCalloutItems?: number;
16
+ chartHeight?: number;
17
+ mobileColumns?: number;
18
+ tabletColumns?: number;
19
+ snap?: MobileSnapBehavior;
20
+ standardControls?: MobileStandardControlsMode;
21
+ summary?: string;
22
+ }
23
+ export interface MobileChartFamilyRecipe {
24
+ family: MobileChartFamily;
25
+ props: Record<string, unknown>;
26
+ responsiveRules: ResponsiveRule<Record<string, unknown>>[];
27
+ mobileInteraction: MobileInteractionConfig;
28
+ mobileSemantics: MobileVisualizationContract;
29
+ }
30
+ export declare function mobileLineChartRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
31
+ export declare function mobileAreaChartRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
32
+ export declare function mobileOrdinalChartRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
33
+ export declare function mobileScatterplotRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
34
+ export declare function mobileNetworkChartRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
35
+ export declare function mobileGeoChartRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
36
+ export declare function mobileSmallMultipleRecipe(options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
37
+ export declare function mobileChartFamilyRecipe(family: MobileChartFamily, options?: MobileChartFamilyRecipeOptions): MobileChartFamilyRecipe;
38
+ export interface MobileBrushAlternativeOptions {
39
+ targetSize?: number;
40
+ controls?: Array<"range-inputs" | "chip-filter" | "clear" | "stepper">;
41
+ summary?: string;
42
+ }
43
+ export declare function mobileBrushAlternatives(options?: MobileBrushAlternativeOptions): {
44
+ mobileInteraction: {
45
+ enabled: boolean;
46
+ targetSize: number;
47
+ tapToSelect: boolean;
48
+ tapToLockTooltip: boolean;
49
+ standardControls: "brush";
50
+ };
51
+ mobileSemantics: {
52
+ interaction: {
53
+ primary: "filter";
54
+ alternatives: ("clear" | "range-inputs" | "chip-filter" | "stepper")[];
55
+ summary: string;
56
+ };
57
+ };
58
+ controls: ("clear" | "range-inputs" | "chip-filter" | "stepper")[];
59
+ };
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Network-analysis kit — pure graph algorithms for network visualizations.
3
+ *
4
+ * These are the primitives most network charts end up hand-rolling: adjacency,
5
+ * breadth-first distances, shortest paths, ego networks, degree / betweenness /
6
+ * closeness centrality, clustering coefficient, and the "spatial problem"
7
+ * detector (nodes drawn closer than their graph distance warrants). They pair
8
+ * naturally with `ForceDirectedGraph`, `NetworkCustomChart`, and the layout
9
+ * recipes: size nodes by centrality, highlight an ego network on hover, trace a
10
+ * shortest path, or diagnose a misleading layout.
11
+ *
12
+ * All functions are pure and dependency-free. Edges are treated as undirected.
13
+ */
14
+ export interface GraphNode {
15
+ id: string;
16
+ }
17
+ export interface GraphEdge {
18
+ source: string;
19
+ target: string;
20
+ value?: number;
21
+ }
22
+ export interface Point {
23
+ x: number;
24
+ y: number;
25
+ }
26
+ /** Build an undirected adjacency map: node id → set of neighbor ids. */
27
+ export declare function buildAdjacency(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Map<string, Set<string>>;
28
+ /**
29
+ * Build a **directed** adjacency map: node id → set of successor ids, following
30
+ * `source → target` only. The directed sibling of {@link buildAdjacency}, for
31
+ * DAG / flow / dependency graphs where edge direction carries meaning.
32
+ */
33
+ export declare function buildDirectedAdjacency(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Map<string, Set<string>>;
34
+ /**
35
+ * The set of nodes reachable from `start` by following the adjacency (BFS).
36
+ * Works on either an undirected ({@link buildAdjacency}) or directed
37
+ * ({@link buildDirectedAdjacency}) adjacency map.
38
+ *
39
+ * `start` itself is excluded unless it is reachable via a cycle, or
40
+ * `includeStart` is set — so on a DAG this is exactly the descendant set, and
41
+ * on a cyclic graph a node that can reach itself is reported as such.
42
+ */
43
+ export declare function reachableFrom(adjacency: Map<string, Set<string>>, start: string, options?: {
44
+ includeStart?: boolean;
45
+ }): Set<string>;
46
+ /** Degree (neighbor count) per node id. */
47
+ export declare function degree(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Record<string, number>;
48
+ /** Breadth-first hop distance from `start` to every reachable node. */
49
+ export declare function bfsDistances(adjacency: Map<string, Set<string>>, start: string): Record<string, number>;
50
+ /**
51
+ * Unweighted shortest path between two node ids (BFS). Returns the path as an
52
+ * ordered list of ids (inclusive of both ends), or `[]` if unreachable.
53
+ */
54
+ export declare function shortestPath(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>, source: string, target: string): string[];
55
+ /**
56
+ * The ego network of a node: itself plus every node within `depth` hops.
57
+ * Returns the set of member ids (use it to highlight neighbors on hover).
58
+ */
59
+ export declare function egoNetwork(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>, id: string, depth?: number): Set<string>;
60
+ /**
61
+ * Betweenness centrality (Brandes' algorithm, unweighted, undirected). Higher
62
+ * scores mark bridge nodes that many shortest paths pass through. Raw scores;
63
+ * wrap with {@link normalizeScores} for a 0–1 encoding (e.g. node size).
64
+ */
65
+ export declare function betweenness(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Record<string, number>;
66
+ /**
67
+ * Closeness centrality: the inverse of the mean shortest-path distance to all
68
+ * reachable nodes. Higher = more central. Raw scores; see {@link normalizeScores}.
69
+ */
70
+ export declare function closeness(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Record<string, number>;
71
+ /**
72
+ * Local clustering coefficient per node (0–1): the fraction of a node's
73
+ * neighbor pairs that are themselves connected.
74
+ */
75
+ export declare function clustering(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>): Record<string, number>;
76
+ /** Rescale a score map to 0–1 by its maximum (for size/opacity encodings). */
77
+ export declare function normalizeScores(scores: Record<string, number>): Record<string, number>;
78
+ export interface ProximityProblemOptions {
79
+ /** Minimum graph-hop distance for a pair to count as "far". @default 4 */
80
+ minHops?: number;
81
+ /** Starting screen-distance threshold (in the units of `positions`). @default 0.08 */
82
+ startThreshold?: number;
83
+ /** Cap the threshold search at this distance before relaxing `minHops`. @default 0.2 */
84
+ maxThreshold?: number;
85
+ }
86
+ export interface ProximityProblemResult {
87
+ /** Ids drawn misleadingly close given their graph distance. */
88
+ problemIds: Set<string>;
89
+ /** The screen-distance threshold at which offenders were found. */
90
+ threshold: number;
91
+ /** The graph-hop distance used. */
92
+ minHops: number;
93
+ }
94
+ /**
95
+ * The "spatial problem": find nodes drawn near each other on screen yet far
96
+ * apart (or disconnected) in the graph — proximity pretending to be kinship,
97
+ * the classic force-layout lie. `positions` is a map of node id → screen point
98
+ * (any consistent coordinate space; distances are compared in those units).
99
+ * The search escalates the distance threshold, then relaxes `minHops`, until at
100
+ * least one offending pair is found.
101
+ */
102
+ export declare function proximityProblem(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>, positions: Record<string, Point>, options?: ProximityProblemOptions): ProximityProblemResult;
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Deterministic, physics-free network layouts — the classic static forms that
3
+ * predate (and often out-read) the force-directed hairball: the arc diagram,
4
+ * the adjacency matrix, and the circular layout.
5
+ *
6
+ * These are composable positioner / structure helpers (not full scene layouts):
7
+ * they return normalized positions or a matrix structure that you render inside
8
+ * a `NetworkCustomChart` layout, so you keep full control of styling. Pure and
9
+ * dependency-free.
10
+ */
11
+ import type { GraphNode, GraphEdge, Point } from "./networkAnalysis";
12
+ /**
13
+ * Order node ids by community/group then descending degree, so related nodes sit
14
+ * together and hubs lead — the ordering that makes arc diagrams and adjacency
15
+ * matrices legible. Pass `groupAccessor` to read the grouping field (default
16
+ * `"group"`); nodes without one are ordered by degree alone.
17
+ */
18
+ export declare function orderByGroupDegree<N extends GraphNode>(nodes: ReadonlyArray<N>, edges: ReadonlyArray<GraphEdge>, groupAccessor?: keyof N | ((n: N) => number | string)): string[];
19
+ export interface ArcLayoutOptions {
20
+ /** Baseline y position in [0, 1]. @default 0.62 */
21
+ baseline?: number;
22
+ /** Horizontal inset kept clear at each end, in [0, 0.5). @default 0.06 */
23
+ inset?: number;
24
+ }
25
+ /**
26
+ * Arc diagram: lay the ordered ids out along a horizontal baseline. Draw each
27
+ * edge as an arc with {@link arcPath}. Returns id → {x, y} in [0, 1].
28
+ */
29
+ export declare function arcLayout(ids: ReadonlyArray<string>, options?: ArcLayoutOptions): Record<string, Point>;
30
+ /**
31
+ * An SVG path string for an arc between two points that share a baseline (as in
32
+ * an arc diagram). The arc bows away from the baseline by `heightRatio` of the
33
+ * span. Coordinates are whatever space you pass (typically already projected
34
+ * into the plot).
35
+ */
36
+ export declare function arcPath(a: Point, b: Point, heightRatio?: number): string;
37
+ export interface CircularLayoutOptions {
38
+ /** Ring radius in [0, 0.5]. @default 0.42 */
39
+ radius?: number;
40
+ /** Center point in [0, 1]. @default { x: 0.5, y: 0.5 } */
41
+ center?: Point;
42
+ /** Start angle in radians (0 = up). @default 0 */
43
+ startAngle?: number;
44
+ }
45
+ /**
46
+ * Circular layout: place the ordered ids evenly around a ring. Position carries
47
+ * no meaning (edges cross the interior) — offered mainly as a labeled, stable
48
+ * arrangement. Returns id → {x, y} in [0, 1].
49
+ */
50
+ export declare function circularLayout(ids: ReadonlyArray<string>, options?: CircularLayoutOptions): Record<string, Point>;
51
+ export interface MatrixCell {
52
+ /** Row index (into the ordered id list). */
53
+ row: number;
54
+ /** Column index. */
55
+ col: number;
56
+ source: string;
57
+ target: string;
58
+ /** Summed edge value between the pair (defaults to 1 per edge). */
59
+ value: number;
60
+ }
61
+ export interface AdjacencyMatrix {
62
+ /** The ordered ids used for rows and columns. */
63
+ order: string[];
64
+ /** One cell per connected (i, j) pair, both triangles (symmetric). */
65
+ cells: MatrixCell[];
66
+ /** Number of rows/columns (`order.length`). */
67
+ size: number;
68
+ /** Maximum cell value (for opacity/intensity encoding). */
69
+ maxValue: number;
70
+ }
71
+ export interface AdjacencyMatrixOptions {
72
+ /** Explicit row/column order; defaults to {@link orderByGroupDegree}. */
73
+ order?: ReadonlyArray<string>;
74
+ /** Group accessor used when computing the default order. @default "group" */
75
+ groupAccessor?: keyof GraphNode | ((n: GraphNode) => number | string);
76
+ }
77
+ /**
78
+ * Adjacency matrix structure: every connection becomes a filled cell, so nothing
79
+ * overlaps and dense graphs stay legible. Returns the ordered ids plus the cell
80
+ * list; render each cell at `(col, row)` in your layout. Symmetric (both
81
+ * triangles filled); the diagonal is omitted.
82
+ */
83
+ export declare function adjacencyMatrix(nodes: ReadonlyArray<GraphNode>, edges: ReadonlyArray<GraphEdge>, options?: AdjacencyMatrixOptions): AdjacencyMatrix;
@@ -0,0 +1,122 @@
1
+ import type { VisualToken } from "./tokenEncoding";
2
+ import { type PhysicsBoundsColliderOptions, type PhysicsPlotBounds, type PhysicsQueuedSpawn, type PhysicsSpawnPacingOptions, type PhysicsXBinColliderOptions } from "../stream/physics/PhysicsPipelineStore";
3
+ import type { PhysicsBodyShape, PhysicsColliderSpec } from "../stream/physics/PhysicsKernel";
4
+ import type { PhysicsSedimentBinSnapshot, PhysicsSedimentColumn, PhysicsSedimentHeightfieldOptions } from "../stream/physics/PhysicsSediment";
5
+ export type NumericScale = (value: number) => number;
6
+ export type BandScale<T = string | number> = ((value: T) => number | undefined) & {
7
+ bandwidth?: () => number;
8
+ };
9
+ export interface PhysicsScaleColliderOptions<TBand = string | number> {
10
+ plot: PhysicsPlotBounds;
11
+ idPrefix?: string;
12
+ bounds?: false | PhysicsBoundsColliderOptions;
13
+ xBins?: Omit<PhysicsXBinColliderOptions, "idPrefix" | "yTop" | "yBottom"> & {
14
+ idPrefix?: string;
15
+ yTop?: number;
16
+ yBottom?: number;
17
+ };
18
+ xBands?: PhysicsBandColliderOptions<TBand>;
19
+ yBands?: PhysicsBandColliderOptions<TBand>;
20
+ }
21
+ export interface PhysicsBandColliderOptions<TBand = string | number> {
22
+ values: readonly TBand[];
23
+ scale: BandScale<TBand>;
24
+ bandwidth?: number;
25
+ wallThickness?: number;
26
+ includeBoundaryWalls?: boolean;
27
+ includeInteriorWalls?: boolean;
28
+ idPrefix?: string;
29
+ }
30
+ export interface GaltonPegsOptions {
31
+ plot: PhysicsPlotBounds;
32
+ rows: number;
33
+ columns?: number;
34
+ pegRadius?: number;
35
+ idPrefix?: string;
36
+ yStart?: number;
37
+ yEnd?: number;
38
+ stagger?: boolean;
39
+ restitution?: number;
40
+ friction?: number;
41
+ }
42
+ export interface SpawnFromTokensOptions<D = unknown> {
43
+ idPrefix?: string;
44
+ x?: number | ((token: VisualToken<D>, index: number) => number);
45
+ y?: number | ((token: VisualToken<D>, index: number) => number);
46
+ radius?: number | ((token: VisualToken<D>, index: number) => number);
47
+ shape?: PhysicsBodyShape | ((token: VisualToken<D>, index: number) => PhysicsBodyShape);
48
+ mass?: number | ((token: VisualToken<D>, index: number) => number);
49
+ vx?: number | ((token: VisualToken<D>, index: number) => number);
50
+ vy?: number | ((token: VisualToken<D>, index: number) => number);
51
+ jitter?: number | {
52
+ x?: number;
53
+ y?: number;
54
+ };
55
+ seed?: number;
56
+ spawnAt?: number | ((token: VisualToken<D>, index: number) => number);
57
+ datum?: (token: VisualToken<D>, index: number) => unknown;
58
+ }
59
+ export interface SedimentBakeOptions extends PhysicsSedimentHeightfieldOptions {
60
+ idPrefix?: string;
61
+ collider?: boolean;
62
+ colliderThickness?: number;
63
+ restitution?: number;
64
+ friction?: number;
65
+ }
66
+ export interface SedimentBakeResult {
67
+ columns: PhysicsSedimentColumn[];
68
+ colliders: PhysicsColliderSpec[];
69
+ }
70
+ export interface ArrivalReplayOptions {
71
+ timeAccessor?: string | ((spawn: PhysicsQueuedSpawn, index: number) => unknown);
72
+ timeScale?: number;
73
+ startAt?: number;
74
+ rebase?: boolean;
75
+ sort?: boolean;
76
+ }
77
+ /**
78
+ * Build chart-aligned static colliders from a plot rectangle plus optional
79
+ * continuous bins or band-scale lanes.
80
+ */
81
+ export declare function collidersFromScales<TBand = string | number>(options: PhysicsScaleColliderOptions<TBand>): PhysicsColliderSpec[];
82
+ /**
83
+ * Generate deterministic square peg colliders for Galton/Plinko-style custom
84
+ * layouts. Square AABBs are intentional: they work with the built-in kernel's
85
+ * small default collider vocabulary while still reading as point pegs.
86
+ */
87
+ export declare function galtonPegs(options: GaltonPegsOptions): PhysicsColliderSpec[];
88
+ /**
89
+ * Convert visual tokens into physics body spawns. Pair with
90
+ * `generateTokens()` / `layoutTokenGrid()` for HOPs, unitized piles, or
91
+ * posterior-sample demos inside `PhysicsCustomChart`.
92
+ */
93
+ export declare function spawnFromTokens<D = unknown>(tokens: readonly VisualToken<D>[], options?: SpawnFromTokensOptions<D>): PhysicsQueuedSpawn[];
94
+ /**
95
+ * Turn sediment snapshots into drawable columns and optional static colliders.
96
+ * Use the columns for overlays and the colliders when old data should become
97
+ * a physical resting surface for live bodies.
98
+ */
99
+ export declare function sedimentBake(bins: PhysicsSedimentBinSnapshot[], options?: SedimentBakeOptions): SedimentBakeResult;
100
+ /**
101
+ * Prepare initial spawns for event-time/arrival-time replay. The returned
102
+ * object spreads directly into a `PhysicsCustomChart` layout result.
103
+ */
104
+ export declare function arrivalReplay(spawns: readonly PhysicsQueuedSpawn[], options?: ArrivalReplayOptions): {
105
+ initialSpawns: PhysicsQueuedSpawn[];
106
+ initialSpawnPacing: PhysicsSpawnPacingOptions;
107
+ };
108
+ export type { PhysicsColliderSpec, PhysicsPlotBounds, PhysicsQueuedSpawn, PhysicsSedimentBinSnapshot, PhysicsSedimentColumn, PhysicsSedimentHeightfieldOptions, PhysicsSpawnPacingOptions };
109
+ export { absorbRegion, bodyGroupSpec, capacitatedRegion, chargeGateRegion, forceFieldRegion, membraneRegion, portalRegion, pressureFieldRegion, processLaneWalls, processStageLayout, processStageRegions, routeSurfaceRegion, stageTargetInVolume } from "./processPhysics";
110
+ export { aggregateRegionCounts, groupCompletionRows, regionCountsToProjectionRows } from "./processAggregates";
111
+ export { processVolumePolygons } from "./processVolumeGeometry";
112
+ export { comparePhysicsTrace, physicsReferenceEnvelope } from "./physicsReference";
113
+ export type { PhysicsReferenceBandSelector, PhysicsReferenceEnvelope, PhysicsReferenceEnvelopeOptions, PhysicsReferenceEnvelopePoint, PhysicsReferenceSampleGrid, PhysicsReferenceTrace, PhysicsScalarTraceSample, PhysicsTraceAccessor, PhysicsTraceComparison, PhysicsTraceComparisonOptions, PhysicsTraceComparisonPoint, PhysicsTraceComparisonStatus, PhysicsTraceInterpolation, PhysicsTraceOutsideDomain } from "./physicsReference";
114
+ export { createProcessJourneyLedger, processJourneyRows, updateProcessJourney } from "./processJourney";
115
+ export { composePhysicsControllers, createCapacityQueueController, createPortalController, createDependencyGateController, createServiceLevelController, createServiceResourcePoolController } from "../stream/physics/PhysicsControllers";
116
+ export type { CapacityQueueAbandonedInfo, CapacityQueueAgeSummary, CapacityQueueBlockedInfo, CapacityQueueControllerOptions, CapacityQueueProcessedInfo, CapacityQueueSnapshot, CapacityQueueVisitInfo, CapacityQueueWindowSnapshot, ComposedPhysicsControllers, DependencyGateController, DependencyGateOptions, DependencyGateSnapshot, PhysicsController, PhysicsControllerTickContext, ServiceLevelCaseInfo, ServiceLevelCaseState, ServiceLevelController, ServiceLevelControllerOptions, ServiceLevelSnapshot, ServiceResourceAssignment, ServiceResourceDefinition, ServiceResourcePoolController, ServiceResourcePoolOptions, ServiceResourcePoolSnapshot } from "../stream/physics/PhysicsControllers";
117
+ export { processChrome } from "./processChrome";
118
+ export type { ProcessChromeGroup, ProcessChromeLayout, ProcessChromeOptions, ProcessChromeStage } from "./processChrome";
119
+ export type { BodyGroupSpec, BodyGroupSpecOptions, ProcessMembraneDef, ProcessRegionBaseOptions, ProcessStageRegionOptions, ProcessStageDef, ProcessVolumeLayout, ProcessVolumeLayoutOptions, ProcessVolumeMembraneBand, ProcessVolumeShape, ProcessVolumeStageBand } from "./processPhysics";
120
+ export type { RegionCountBucket, RegionCountMap } from "./processAggregates";
121
+ export type { ProcessVolumePoint, ProcessVolumePolygon, ProcessVolumePolygonRole } from "./processVolumeGeometry";
122
+ export type { ProcessJourneyEntityState, ProcessJourneyLedger, ProcessJourneyRow, ProcessJourneyStage, ProcessJourneyUpdateOptions } from "./processJourney";
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Pure reference-envelope helpers for physics evidence traces.
3
+ *
4
+ * Physics motion does not provide its own baseline. These helpers align
5
+ * repeated or supplied scalar traces onto one clock, summarize their
6
+ * distribution, and compare a live trace with the resulting reference band.
7
+ */
8
+ export type PhysicsTraceInterpolation = "step" | "linear";
9
+ export type PhysicsTraceOutsideDomain = "omit" | "clamp";
10
+ export type PhysicsTraceAccessor<TSample> = string | ((sample: TSample, index: number, traceId: string) => unknown);
11
+ export interface PhysicsReferenceTrace<TSample = PhysicsScalarTraceSample> {
12
+ id: string;
13
+ samples: readonly TSample[];
14
+ }
15
+ export interface PhysicsScalarTraceSample {
16
+ time: number;
17
+ value: number;
18
+ }
19
+ export type PhysicsReferenceSampleGrid = readonly number[] | {
20
+ start: number;
21
+ end: number;
22
+ step: number;
23
+ };
24
+ export interface PhysicsReferenceEnvelopeOptions<TSample> {
25
+ runs: readonly PhysicsReferenceTrace<TSample>[];
26
+ sampleAt: PhysicsReferenceSampleGrid;
27
+ timeAccessor?: PhysicsTraceAccessor<TSample>;
28
+ valueAccessor?: PhysicsTraceAccessor<TSample>;
29
+ /** Quantiles use the R-7 linear estimator. Defaults to 0.1, 0.5, and 0.9. */
30
+ quantiles?: readonly number[];
31
+ interpolation?: PhysicsTraceInterpolation;
32
+ /** Whether values outside each run's authored domain are omitted or held. */
33
+ outsideDomain?: PhysicsTraceOutsideDomain;
34
+ }
35
+ export interface PhysicsReferenceEnvelopePoint {
36
+ time: number;
37
+ count: number;
38
+ min: number | null;
39
+ max: number | null;
40
+ median: number | null;
41
+ /** Keys are normalized decimal quantiles, for example `quantiles[0.9]`. */
42
+ quantiles: Partial<Record<number, number | null>>;
43
+ }
44
+ export interface PhysicsReferenceEnvelope {
45
+ points: PhysicsReferenceEnvelopePoint[];
46
+ quantiles: number[];
47
+ interpolation: PhysicsTraceInterpolation;
48
+ outsideDomain: PhysicsTraceOutsideDomain;
49
+ runCount: number;
50
+ }
51
+ export type PhysicsReferenceBandSelector = "min" | "median" | "max" | number;
52
+ export type PhysicsTraceComparisonStatus = "below" | "inside" | "above" | "unobserved";
53
+ export interface PhysicsTraceComparisonPoint {
54
+ time: number;
55
+ value: number | null;
56
+ lower: number | null;
57
+ upper: number | null;
58
+ status: PhysicsTraceComparisonStatus;
59
+ }
60
+ export interface PhysicsTraceComparisonOptions<TSample> {
61
+ timeAccessor?: PhysicsTraceAccessor<TSample>;
62
+ valueAccessor?: PhysicsTraceAccessor<TSample>;
63
+ /** Defaults to the envelope's interpolation. */
64
+ interpolation?: PhysicsTraceInterpolation;
65
+ /** Defaults to the envelope's outside-domain policy. */
66
+ outsideDomain?: PhysicsTraceOutsideDomain;
67
+ /** Defaults to the envelope's lowest quantile, then `min`. */
68
+ lower?: PhysicsReferenceBandSelector;
69
+ /** Defaults to the envelope's highest quantile, then `max`. */
70
+ upper?: PhysicsReferenceBandSelector;
71
+ /** Identifier supplied to function accessors. Defaults to `trace`. */
72
+ traceId?: string;
73
+ }
74
+ export interface PhysicsTraceComparison {
75
+ points: PhysicsTraceComparisonPoint[];
76
+ sampleCount: number;
77
+ observedSamples: number;
78
+ belowSamples: number;
79
+ insideSamples: number;
80
+ aboveSamples: number;
81
+ totalDuration: number;
82
+ observedDuration: number;
83
+ unobservedDuration: number;
84
+ belowDuration: number;
85
+ insideDuration: number;
86
+ aboveDuration: number;
87
+ peakExcess: number;
88
+ peakExcessAt: number | null;
89
+ peakDeficit: number;
90
+ peakDeficitAt: number | null;
91
+ }
92
+ /**
93
+ * Align irregular scalar traces to a common clock and derive a deterministic
94
+ * quantile envelope. Invalid samples are omitted; inputs are never mutated.
95
+ */
96
+ export declare function physicsReferenceEnvelope<TSample = PhysicsScalarTraceSample>(options: PhysicsReferenceEnvelopeOptions<TSample>): PhysicsReferenceEnvelope;
97
+ /**
98
+ * Compare one irregular trace with a reference envelope. Durations use
99
+ * left-held intervals for step traces and exact linear boundary crossings for
100
+ * linear traces. Equality with either band edge is inside the reference.
101
+ */
102
+ export declare function comparePhysicsTrace<TSample = PhysicsScalarTraceSample>(trace: readonly TSample[], envelope: PhysicsReferenceEnvelope, options?: PhysicsTraceComparisonOptions<TSample>): PhysicsTraceComparison;
@@ -0,0 +1,32 @@
1
+ /** Pure settled projections derived from physics events and body groups. */
2
+ import type { StreamPhysicsRegionEvent } from "../stream/physics/StreamPhysicsFrame";
3
+ import type { BodyGroupSpec } from "./processPhysics";
4
+ export interface RegionCountBucket {
5
+ id: string;
6
+ label?: string;
7
+ count: number;
8
+ bodyIds: string[];
9
+ }
10
+ export type RegionCountMap = Record<string, RegionCountBucket>;
11
+ /** Reduce region-enter events into per-region unique body counts. */
12
+ export declare function aggregateRegionCounts(previous: RegionCountMap, event: Pick<StreamPhysicsRegionEvent, "type" | "bodyId" | "region">): RegionCountMap;
13
+ export declare function regionCountsToProjectionRows(counts: RegionCountMap, order?: readonly string[]): Array<{
14
+ label: string;
15
+ value: number;
16
+ }>;
17
+ /**
18
+ * Group-completion ledger for all-members, any-member, and weighted-threshold
19
+ * stories. Pure: callers supply which member ids have been absorbed.
20
+ */
21
+ export declare function groupCompletionRows(groups: readonly BodyGroupSpec[], absorbedBodyIds: ReadonlySet<string> | readonly string[]): Array<{
22
+ id: string;
23
+ label: string;
24
+ mode: "allMembersAbsorbed" | "anyAbsorbed" | "threshold";
25
+ complete: boolean;
26
+ absorbed: number;
27
+ total: number;
28
+ absorbedValue: number;
29
+ totalValue: number;
30
+ threshold?: number;
31
+ missing: string[];
32
+ }>;