semiotic 3.7.4 → 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 (517) hide show
  1. package/CLAUDE.md +60 -15
  2. package/README.md +135 -24
  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 +2934 -517
  9. package/ai/surface-manifest.json +200 -0
  10. package/ai/system-prompt.md +19 -3
  11. package/dist/components/Annotation.d.ts +4 -0
  12. package/dist/components/CategoryColors.d.ts +1 -1
  13. package/dist/components/ChartContainer.d.ts +91 -0
  14. package/dist/components/ChartGrid.d.ts +11 -1
  15. package/dist/components/CircularBrush.d.ts +61 -0
  16. package/dist/components/ContextLayout.d.ts +5 -1
  17. package/dist/components/DataSummaryContext.d.ts +1 -0
  18. package/dist/components/DirectManipulationControl.d.ts +63 -0
  19. package/dist/components/LinkedCharts.d.ts +3 -1
  20. package/dist/components/MobileAnnotationCalloutList.d.ts +13 -0
  21. package/dist/components/MobileChartContainer.d.ts +51 -0
  22. package/dist/components/MobileStandardControls.d.ts +68 -0
  23. package/dist/components/SmallMultipleChart.d.ts +84 -0
  24. package/dist/components/Tooltip/FlippingTooltip.d.ts +21 -0
  25. package/dist/components/ai/ChartRecipe.d.ts +16 -0
  26. package/dist/components/ai/IntentMark.d.ts +15 -0
  27. package/dist/components/ai/chartCapabilities.d.ts +8 -1
  28. package/dist/components/ai/chartCapabilityTypes.d.ts +42 -1
  29. package/dist/components/ai/chartClinic.d.ts +91 -0
  30. package/dist/components/ai/chartRecipeRegistry.d.ts +14 -0
  31. package/dist/components/ai/chartRecipes.d.ts +278 -0
  32. package/dist/components/ai/dataPitfallsBridge.d.ts +203 -0
  33. package/dist/components/ai/dataQualityBridge.d.ts +201 -0
  34. package/dist/components/ai/describeChart.d.ts +9 -0
  35. package/dist/components/ai/describeRecipeChart.d.ts +16 -0
  36. package/dist/components/ai/generativeChart.d.ts +170 -0
  37. package/dist/components/ai/intentManifest.d.ts +62 -0
  38. package/dist/components/ai/navigationTree.d.ts +3 -0
  39. package/dist/components/ai/observedSceneAudit.d.ts +72 -0
  40. package/dist/components/ai/readerGrounding.d.ts +83 -0
  41. package/dist/components/ai/recipeCapability.d.ts +8 -0
  42. package/dist/components/ai/recipeNavigation.d.ts +13 -0
  43. package/dist/components/ai/recipeSemantics.d.ts +11 -0
  44. package/dist/components/ai/repairChartConfig.d.ts +9 -0
  45. package/dist/components/ai/suggestCharts.d.ts +11 -1
  46. package/dist/components/charts/custom/GeoCustomChart.d.ts +48 -0
  47. package/dist/components/charts/custom/NetworkCustomChart.d.ts +22 -3
  48. package/dist/components/charts/custom/OrdinalCustomChart.d.ts +8 -2
  49. package/dist/components/charts/custom/XYCustomChart.d.ts +11 -2
  50. package/dist/components/charts/geo/DistanceCartogram.d.ts +1 -1
  51. package/dist/components/charts/geo/FlowMap.d.ts +1 -1
  52. package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +1 -1
  53. package/dist/components/charts/geo/index.d.ts +2 -0
  54. package/dist/components/charts/index.d.ts +29 -1
  55. package/dist/components/charts/network/ChordDiagram.d.ts +1 -1
  56. package/dist/components/charts/network/CirclePack.d.ts +1 -1
  57. package/dist/components/charts/network/ForceDirectedGraph.d.ts +15 -5
  58. package/dist/components/charts/network/OrbitDiagram.d.ts +1 -1
  59. package/dist/components/charts/network/ProcessSankey.d.ts +1 -1
  60. package/dist/components/charts/network/SankeyDiagram.d.ts +1 -1
  61. package/dist/components/charts/network/TreeDiagram.d.ts +1 -1
  62. package/dist/components/charts/network/Treemap.d.ts +1 -1
  63. package/dist/components/charts/network/useForceLayout.d.ts +17 -0
  64. package/dist/components/charts/ordinal/BarChart.d.ts +1 -1
  65. package/dist/components/charts/ordinal/BoxPlot.d.ts +1 -1
  66. package/dist/components/charts/ordinal/DonutChart.d.ts +1 -1
  67. package/dist/components/charts/ordinal/DotPlot.d.ts +1 -1
  68. package/dist/components/charts/ordinal/FunnelChart.d.ts +1 -1
  69. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +1 -1
  70. package/dist/components/charts/ordinal/Histogram.d.ts +1 -1
  71. package/dist/components/charts/ordinal/PieChart.d.ts +1 -1
  72. package/dist/components/charts/ordinal/RidgelinePlot.d.ts +1 -1
  73. package/dist/components/charts/ordinal/StackedBarChart.d.ts +1 -1
  74. package/dist/components/charts/ordinal/SwarmPlot.d.ts +8 -1
  75. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +1 -1
  76. package/dist/components/charts/ordinal/ViolinPlot.d.ts +1 -1
  77. package/dist/components/charts/physics/ChainReactionChart.d.ts +9 -0
  78. package/dist/components/charts/physics/CollisionSwarmChart.capability.d.ts +2 -0
  79. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +47 -0
  80. package/dist/components/charts/physics/EventDropChart.capability.d.ts +2 -0
  81. package/dist/components/charts/physics/EventDropChart.d.ts +53 -0
  82. package/dist/components/charts/physics/GaltonBoardChart.capability.d.ts +2 -0
  83. package/dist/components/charts/physics/GaltonBoardChart.d.ts +66 -0
  84. package/dist/components/charts/physics/GauntletChart.capability.d.ts +2 -0
  85. package/dist/components/charts/physics/GauntletChart.d.ts +73 -0
  86. package/dist/components/charts/physics/PhysicalFlowChart.capability.d.ts +2 -0
  87. package/dist/components/charts/physics/PhysicalFlowChart.d.ts +63 -0
  88. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +120 -0
  89. package/dist/components/charts/physics/PhysicsPileChart.capability.d.ts +2 -0
  90. package/dist/components/charts/physics/PhysicsPileChart.d.ts +53 -0
  91. package/dist/components/charts/physics/ProcessFlowChart.capability.d.ts +2 -0
  92. package/dist/components/charts/physics/ProcessFlowChart.d.ts +96 -0
  93. package/dist/components/charts/physics/chainReactionOverlay.d.ts +22 -0
  94. package/dist/components/charts/physics/chainReactionRuntime.d.ts +37 -0
  95. package/dist/components/charts/physics/chainReactionTypes.d.ts +97 -0
  96. package/dist/components/charts/physics/collisionSwarmPhysics.d.ts +27 -0
  97. package/dist/components/charts/physics/dependencyMachine.d.ts +188 -0
  98. package/dist/components/charts/physics/eventDropPhysics.d.ts +64 -0
  99. package/dist/components/charts/physics/galtonBoardPhysics.d.ts +28 -0
  100. package/dist/components/charts/physics/gauntletChartProps.d.ts +67 -0
  101. package/dist/components/charts/physics/gauntletChrome.d.ts +33 -0
  102. package/dist/components/charts/physics/gauntletController.d.ts +73 -0
  103. package/dist/components/charts/physics/gauntletEffects.d.ts +36 -0
  104. package/dist/components/charts/physics/gauntletPhysics.d.ts +71 -0
  105. package/dist/components/charts/physics/gauntletRuntime.d.ts +42 -0
  106. package/dist/components/charts/physics/gauntletTypes.d.ts +213 -0
  107. package/dist/components/charts/physics/physicalFlowPhysics.d.ts +57 -0
  108. package/dist/components/charts/physics/physicsChartShared.d.ts +41 -0
  109. package/dist/components/charts/physics/physicsChartUtils.d.ts +18 -0
  110. package/dist/components/charts/physics/physicsEncoding.d.ts +142 -0
  111. package/dist/components/charts/physics/physicsHocHandle.d.ts +53 -0
  112. package/dist/components/charts/physics/physicsHocUtils.d.ts +128 -0
  113. package/dist/components/charts/physics/physicsPilePhysics.d.ts +41 -0
  114. package/dist/components/charts/physics/physicsProcessPrimitives.d.ts +38 -0
  115. package/dist/components/charts/physics/processFlowPhysics.d.ts +97 -0
  116. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +9 -1
  117. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +9 -1
  118. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +30 -1
  119. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +16 -2
  120. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +9 -1
  121. package/dist/components/charts/realtime/aggregate.d.ts +51 -0
  122. package/dist/components/charts/realtime/eventTime.d.ts +26 -0
  123. package/dist/components/charts/shared/auditMobileVisualization.d.ts +91 -0
  124. package/dist/components/charts/shared/chartDefinitionPilot.d.ts +145 -0
  125. package/dist/components/charts/shared/chartFamilySets.d.ts +20 -0
  126. package/dist/components/charts/shared/chartSpecCore.d.ts +165 -0
  127. package/dist/components/charts/shared/chartSpecs.d.ts +8 -127
  128. package/dist/components/charts/shared/chartSpecsGeo.d.ts +2 -0
  129. package/dist/components/charts/shared/chartSpecsNetwork.d.ts +2 -0
  130. package/dist/components/charts/shared/chartSpecsOrdinal.d.ts +2 -0
  131. package/dist/components/charts/shared/chartSpecsPhysics.d.ts +2 -0
  132. package/dist/components/charts/shared/chartSpecsRealtime.d.ts +2 -0
  133. package/dist/components/charts/shared/chartSpecsValue.d.ts +2 -0
  134. package/dist/components/charts/shared/chartSpecsXY.d.ts +2 -0
  135. package/dist/components/charts/shared/colorContrast.d.ts +3 -0
  136. package/dist/components/charts/shared/colorPalettes.d.ts +2 -0
  137. package/dist/components/charts/shared/colorUtils.d.ts +17 -13
  138. package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +4 -0
  139. package/dist/components/charts/shared/diagnoseConfig.d.ts +9 -14
  140. package/dist/components/charts/shared/diagnoseMisleadingChecks.d.ts +9 -0
  141. package/dist/components/charts/shared/diagnosePhysicsChecks.d.ts +3 -0
  142. package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
  143. package/dist/components/charts/shared/hooks.d.ts +28 -5
  144. package/dist/components/charts/shared/minMax.d.ts +3 -0
  145. package/dist/components/charts/shared/motionEncoding.d.ts +145 -0
  146. package/dist/components/charts/shared/radialGeometry.d.ts +0 -18
  147. package/dist/components/charts/shared/responsiveRules.d.ts +56 -0
  148. package/dist/components/charts/shared/smartTooltip.d.ts +27 -0
  149. package/dist/components/charts/shared/statisticalOverlays.d.ts +35 -0
  150. package/dist/components/charts/shared/streamPropsHelpers.d.ts +12 -2
  151. package/dist/components/charts/shared/temporalStrings.d.ts +7 -0
  152. package/dist/components/charts/shared/tooltipUtils.d.ts +2 -0
  153. package/dist/components/charts/shared/types.d.ts +49 -1
  154. package/dist/components/charts/shared/useChartSetup.d.ts +10 -3
  155. package/dist/components/charts/shared/useCustomChartSetup.d.ts +15 -6
  156. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +6 -2
  157. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +1 -1
  158. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  159. package/dist/components/charts/shared/useSyncedPushData.d.ts +49 -0
  160. package/dist/components/charts/shared/validateChartData.d.ts +1 -1
  161. package/dist/components/charts/shared/validationMap.d.ts +0 -11
  162. package/dist/components/charts/xy/AreaChart.d.ts +1 -1
  163. package/dist/components/charts/xy/BubbleChart.d.ts +1 -1
  164. package/dist/components/charts/xy/LineChart.d.ts +1 -1
  165. package/dist/components/charts/xy/MinimapChart.d.ts +1 -1
  166. package/dist/components/charts/xy/MultiAxisLineChart.d.ts +2 -2
  167. package/dist/components/charts/xy/QuadrantChart.d.ts +1 -1
  168. package/dist/components/charts/xy/Scatterplot.d.ts +10 -1
  169. package/dist/components/charts/xy/ScatterplotMatrix.d.ts +11 -1
  170. package/dist/components/charts/xy/StackedAreaChart.d.ts +9 -4
  171. package/dist/components/controls/controlAudit.d.ts +24 -0
  172. package/dist/components/controls/controlContract.d.ts +57 -0
  173. package/dist/components/data/fromArrow.d.ts +54 -0
  174. package/dist/components/data/fromFlintChart.d.ts +74 -0
  175. package/dist/components/data/fromMermaid.d.ts +47 -0
  176. package/dist/components/data/fromObservablePlot.d.ts +69 -0
  177. package/dist/components/data/fromVegaLite.d.ts +27 -0
  178. package/dist/components/data/portability/index.d.ts +17 -0
  179. package/dist/components/data/portability/result.d.ts +52 -0
  180. package/dist/components/data/portability/spec.d.ts +160 -0
  181. package/dist/components/data/portability/vegaLite.d.ts +80 -0
  182. package/dist/components/export/chartConfig.d.ts +11 -0
  183. package/dist/components/realtime/ReorderBuffer.d.ts +54 -0
  184. package/dist/components/realtime/RunningStats.d.ts +66 -0
  185. package/dist/components/realtime/WindowAccumulator.d.ts +105 -0
  186. package/dist/components/realtime/parseWindowDuration.d.ts +12 -0
  187. package/dist/components/realtime/types.d.ts +11 -0
  188. package/dist/components/recipes/annotationLayout.d.ts +29 -0
  189. package/dist/components/recipes/axisFixedForce.d.ts +119 -0
  190. package/dist/components/recipes/boba.d.ts +23 -0
  191. package/dist/components/recipes/customTooltip.d.ts +31 -0
  192. package/dist/components/recipes/cyclical.d.ts +39 -0
  193. package/dist/components/recipes/edgeRouter.d.ts +103 -0
  194. package/dist/components/recipes/forceLayout.d.ts +48 -0
  195. package/dist/components/recipes/forceLayoutAsync.d.ts +17 -0
  196. package/dist/components/recipes/gofishBobaHandwritten.d.ts +3 -0
  197. package/dist/components/recipes/gofishDisplayListFixtures.generated.d.ts +37 -0
  198. package/dist/components/recipes/gofishIR.d.ts +215 -0
  199. package/dist/components/recipes/gofishIRExamples.d.ts +38 -0
  200. package/dist/components/recipes/intervalLanes.d.ts +87 -0
  201. package/dist/components/recipes/intervals.d.ts +80 -0
  202. package/dist/components/recipes/isometricLandmarks.d.ts +88 -0
  203. package/dist/components/recipes/isotypeGlyphs.d.ts +17 -0
  204. package/dist/components/recipes/mermaidDag.d.ts +44 -0
  205. package/dist/components/recipes/mobileAnnotationStrategy.d.ts +48 -0
  206. package/dist/components/recipes/mobileChartFamilyRecipes.d.ts +59 -0
  207. package/dist/components/recipes/networkAnalysis.d.ts +102 -0
  208. package/dist/components/recipes/networkLayouts.d.ts +83 -0
  209. package/dist/components/recipes/packedClusterMatrix.d.ts +166 -0
  210. package/dist/components/recipes/physics.d.ts +122 -0
  211. package/dist/components/recipes/physicsReference.d.ts +102 -0
  212. package/dist/components/recipes/processAggregates.d.ts +32 -0
  213. package/dist/components/recipes/processChrome.d.ts +67 -0
  214. package/dist/components/recipes/processJourney.d.ts +54 -0
  215. package/dist/components/recipes/processPhysics.d.ts +300 -0
  216. package/dist/components/recipes/processVolumeGeometry.d.ts +28 -0
  217. package/dist/components/recipes/radialCoords.d.ts +69 -0
  218. package/dist/components/recipes/random.d.ts +2 -0
  219. package/dist/components/recipes/recipeChrome.d.ts +191 -0
  220. package/dist/components/recipes/recipeGlyph.d.ts +42 -0
  221. package/dist/components/recipes/recipeLegend.d.ts +109 -0
  222. package/dist/components/recipes/recipeUtils.d.ts +157 -0
  223. package/dist/components/recipes/runs.d.ts +59 -0
  224. package/dist/components/recipes/tokenEncoding.d.ts +157 -0
  225. package/dist/components/recipes/tokenLayer.d.ts +79 -0
  226. package/dist/components/recipes/unitize.d.ts +108 -0
  227. package/dist/components/recipes/vector.d.ts +28 -0
  228. package/dist/components/recipes/waffle.d.ts +43 -0
  229. package/dist/components/semiotic-ai-core.d.ts +47 -0
  230. package/dist/components/semiotic-ai.d.ts +52 -4
  231. package/dist/components/semiotic-controls.d.ts +18 -0
  232. package/dist/components/semiotic-data.d.ts +2 -0
  233. package/dist/components/semiotic-experimental.d.ts +49 -0
  234. package/dist/components/semiotic-geo.d.ts +11 -0
  235. package/dist/components/semiotic-network.d.ts +14 -1
  236. package/dist/components/semiotic-ordinal.d.ts +10 -0
  237. package/dist/components/semiotic-physics-matter.d.ts +10 -0
  238. package/dist/components/semiotic-physics-rapier.d.ts +9 -0
  239. package/dist/components/semiotic-physics.d.ts +56 -0
  240. package/dist/components/semiotic-realtime-core.d.ts +34 -0
  241. package/dist/components/semiotic-realtime-react.d.ts +10 -0
  242. package/dist/components/semiotic-realtime.d.ts +4 -22
  243. package/dist/components/semiotic-recipes-core.d.ts +92 -0
  244. package/dist/components/semiotic-recipes-react.d.ts +7 -0
  245. package/dist/components/semiotic-recipes.d.ts +4 -26
  246. package/dist/components/semiotic-server-edge.d.ts +8 -0
  247. package/dist/components/semiotic-server-node.d.ts +5 -0
  248. package/dist/components/semiotic-server.d.ts +2 -2
  249. package/dist/components/semiotic-themes-core.d.ts +53 -0
  250. package/dist/components/semiotic-themes-react.d.ts +4 -0
  251. package/dist/components/semiotic-themes.d.ts +6 -74
  252. package/dist/components/semiotic-utils-core.d.ts +46 -0
  253. package/dist/components/semiotic-utils-react.d.ts +5 -0
  254. package/dist/components/semiotic-utils.d.ts +3 -39
  255. package/dist/components/semiotic-xy.d.ts +10 -0
  256. package/dist/components/semiotic.d.ts +39 -7
  257. package/dist/components/server/animatedGif.d.ts +36 -0
  258. package/dist/components/server/renderEvidence.d.ts +1 -1
  259. package/dist/components/server/renderToStaticSVG.d.ts +3 -35
  260. package/dist/components/server/serverChartConfigShared.d.ts +17 -0
  261. package/dist/components/server/serverChartConfigs.d.ts +19 -9
  262. package/dist/components/server/serverChartConfigsCustom.d.ts +5 -0
  263. package/dist/components/server/serverChartConfigsGeo.d.ts +9 -0
  264. package/dist/components/server/serverChartConfigsNetwork.d.ts +8 -0
  265. package/dist/components/server/serverChartConfigsOrdinal.d.ts +16 -0
  266. package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
  267. package/dist/components/server/serverChartConfigsXY.d.ts +11 -0
  268. package/dist/components/server/staticGeo.d.ts +4 -0
  269. package/dist/components/server/staticLegend.d.ts +1 -1
  270. package/dist/components/server/staticNetwork.d.ts +8 -0
  271. package/dist/components/server/staticOrdinal.d.ts +11 -0
  272. package/dist/components/server/staticPhysics.d.ts +3 -0
  273. package/dist/components/server/staticSVGChrome.d.ts +110 -0
  274. package/dist/components/server/staticXY.d.ts +4 -0
  275. package/dist/components/store/ObservationStore.d.ts +23 -3
  276. package/dist/components/store/SelectionStore.d.ts +1 -1
  277. package/dist/components/store/ThemeStore.d.ts +1 -1
  278. package/dist/components/store/TooltipStore.d.ts +1 -1
  279. package/dist/components/store/createStore.d.ts +1 -1
  280. package/dist/components/store/designTokens.d.ts +15 -0
  281. package/dist/components/store/themeSerialization.d.ts +32 -0
  282. package/dist/components/store/useChartInterrogation.d.ts +9 -0
  283. package/dist/components/stream/AccessibleDataTable.d.ts +3 -13
  284. package/dist/components/stream/FocusRing.d.ts +4 -2
  285. package/dist/components/stream/GeoCanvasHitTester.d.ts +1 -1
  286. package/dist/components/stream/GeoPipelineStore.d.ts +28 -0
  287. package/dist/components/stream/NetworkHtmlMarksLayer.d.ts +44 -0
  288. package/dist/components/stream/NetworkPipelineStore.d.ts +62 -25
  289. package/dist/components/stream/NetworkSVGOverlay.d.ts +15 -0
  290. package/dist/components/stream/OrdinalPipelineStore.d.ts +64 -2
  291. package/dist/components/stream/PipelineStore.d.ts +100 -162
  292. package/dist/components/stream/SceneGraph.d.ts +14 -2
  293. package/dist/components/stream/StreamGeoFrame.d.ts +1 -1
  294. package/dist/components/stream/StreamNetworkFrame.d.ts +1 -1
  295. package/dist/components/stream/StreamOrdinalFrame.d.ts +1 -1
  296. package/dist/components/stream/StreamXYFrame.d.ts +2 -18
  297. package/dist/components/stream/accessibleDataRows.d.ts +33 -0
  298. package/dist/components/stream/accessorUtils.d.ts +23 -10
  299. package/dist/components/stream/brushAccessibility.d.ts +25 -0
  300. package/dist/components/stream/canvasBackground.d.ts +24 -0
  301. package/dist/components/stream/canvasSetup.d.ts +4 -1
  302. package/dist/components/stream/customLayout.d.ts +20 -0
  303. package/dist/components/stream/customLayoutDiagnostics.d.ts +11 -0
  304. package/dist/components/stream/customLayoutFailure.d.ts +33 -0
  305. package/dist/components/stream/customLayoutPalette.d.ts +19 -9
  306. package/dist/components/stream/customLayoutSelection.d.ts +52 -0
  307. package/dist/components/stream/frameThemeColors.d.ts +24 -0
  308. package/dist/components/stream/geoAnnotationAnchors.d.ts +14 -0
  309. package/dist/components/stream/geoCartogram.d.ts +17 -0
  310. package/dist/components/stream/geoCustomLayout.d.ts +59 -0
  311. package/dist/components/stream/geoDefaultTooltip.d.ts +11 -0
  312. package/dist/components/stream/geoFrameHelpers.d.ts +34 -0
  313. package/dist/components/stream/geoPipelineHelpers.d.ts +46 -0
  314. package/dist/components/stream/geoTypes.d.ts +56 -7
  315. package/dist/components/stream/glyphDef.d.ts +98 -0
  316. package/dist/components/stream/hitTarget.d.ts +170 -0
  317. package/dist/components/stream/hoverUtils.d.ts +3 -0
  318. package/dist/components/stream/keyboardNav.d.ts +4 -1
  319. package/dist/components/stream/layouts/forceLayoutPlugin.d.ts +9 -1
  320. package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +57 -0
  321. package/dist/components/stream/networkBezier.d.ts +10 -0
  322. package/dist/components/stream/networkColorAccessors.d.ts +49 -0
  323. package/dist/components/stream/networkCustomLayout.d.ts +66 -1
  324. package/dist/components/stream/networkDefaultTooltip.d.ts +10 -0
  325. package/dist/components/stream/networkFrameInteraction.d.ts +37 -0
  326. package/dist/components/stream/networkFramePaint.d.ts +43 -0
  327. package/dist/components/stream/networkPipelineConfig.d.ts +22 -0
  328. package/dist/components/stream/networkPipelineHelpers.d.ts +12 -0
  329. package/dist/components/stream/networkRealtimeEncoding.d.ts +41 -0
  330. package/dist/components/stream/networkTypes.d.ts +104 -5
  331. package/dist/components/stream/ordinalCanvasRenderers.d.ts +7 -0
  332. package/dist/components/stream/ordinalCustomLayout.d.ts +17 -1
  333. package/dist/components/stream/ordinalDataIndex.d.ts +5 -0
  334. package/dist/components/stream/ordinalDefaultTooltip.d.ts +10 -0
  335. package/dist/components/stream/ordinalDomain.d.ts +38 -0
  336. package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +12 -0
  337. package/dist/components/stream/ordinalPulse.d.ts +10 -0
  338. package/dist/components/stream/ordinalPulseResources.d.ts +3 -0
  339. package/dist/components/stream/ordinalSceneBuilders/sceneBuilderMap.d.ts +5 -0
  340. package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -0
  341. package/dist/components/stream/ordinalSpatialIndex.d.ts +9 -0
  342. package/dist/components/stream/ordinalTypes.d.ts +56 -8
  343. package/dist/components/stream/paintNeeds.d.ts +31 -0
  344. package/dist/components/stream/physics/CapacityQueueController.d.ts +5 -0
  345. package/dist/components/stream/physics/CapacityQueueTypes.d.ts +134 -0
  346. package/dist/components/stream/physics/MatterPhysicsEngineAdapter.d.ts +42 -0
  347. package/dist/components/stream/physics/PhysicsAccessibility.d.ts +48 -0
  348. package/dist/components/stream/physics/PhysicsAnnotations.d.ts +58 -0
  349. package/dist/components/stream/physics/PhysicsBodyBudget.d.ts +26 -0
  350. package/dist/components/stream/physics/PhysicsBodySpatialIndex.d.ts +10 -0
  351. package/dist/components/stream/physics/PhysicsCanvasTheme.d.ts +26 -0
  352. package/dist/components/stream/physics/PhysicsControllers.d.ts +75 -0
  353. package/dist/components/stream/physics/PhysicsEngineAdapter.d.ts +59 -0
  354. package/dist/components/stream/physics/PhysicsEngineConformance.d.ts +23 -0
  355. package/dist/components/stream/physics/PhysicsEvidence.d.ts +25 -0
  356. package/dist/components/stream/physics/PhysicsKernel.d.ts +207 -0
  357. package/dist/components/stream/physics/PhysicsOptionalEngineAdapters.d.ts +12 -0
  358. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +84 -0
  359. package/dist/components/stream/physics/PhysicsPipelineTypes.d.ts +181 -0
  360. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +72 -0
  361. package/dist/components/stream/physics/PhysicsSediment.d.ts +69 -0
  362. package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +18 -0
  363. package/dist/components/stream/physics/PhysicsSettledScene.d.ts +21 -0
  364. package/dist/components/stream/physics/PhysicsWorkerClient.d.ts +24 -0
  365. package/dist/components/stream/physics/PhysicsWorkerProtocol.d.ts +101 -0
  366. package/dist/components/stream/physics/PhysicsWorkerRuntime.d.ts +5 -0
  367. package/dist/components/stream/physics/RapierPhysicsEngineAdapter.d.ts +18 -0
  368. package/dist/components/stream/physics/ServiceOperationsControllers.d.ts +27 -0
  369. package/dist/components/stream/physics/ServiceOperationsTypes.d.ts +89 -0
  370. package/dist/components/stream/physics/StreamPhysicsFrame.d.ts +6 -0
  371. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +302 -0
  372. package/dist/components/stream/physics/physicsBodyCanvas.d.ts +27 -0
  373. package/dist/components/stream/physics/physicsPipelineControls.d.ts +4 -0
  374. package/dist/components/stream/physics/physicsPipelineHelpers.d.ts +41 -0
  375. package/dist/components/stream/physics/physicsPipelineObservations.d.ts +14 -0
  376. package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +9 -0
  377. package/dist/components/stream/physics/physicsRegionRuntime.d.ts +54 -0
  378. package/dist/components/stream/physics/physicsSemanticUI.d.ts +20 -0
  379. package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +16 -0
  380. package/dist/components/stream/pipelineBufferUtils.d.ts +26 -0
  381. package/dist/components/stream/pipelineConfig.d.ts +177 -0
  382. package/dist/components/stream/pipelineDecay.d.ts +20 -2
  383. package/dist/components/stream/pipelineDomainResolution.d.ts +62 -0
  384. package/dist/components/stream/pipelineIdentityOps.d.ts +26 -0
  385. package/dist/components/stream/pipelinePulse.d.ts +16 -2
  386. package/dist/components/stream/pipelineRibbons.d.ts +41 -0
  387. package/dist/components/stream/pipelineSpatialIndex.d.ts +12 -0
  388. package/dist/components/stream/pipelineStoreUpdateResults.d.ts +12 -0
  389. package/dist/components/stream/pipelineStyleResolvers.d.ts +46 -0
  390. package/dist/components/stream/pipelineTransitions.d.ts +2 -0
  391. package/dist/components/stream/pipelineUpdateContract.d.ts +62 -0
  392. package/dist/components/stream/pulseFrameRefresh.d.ts +22 -0
  393. package/dist/components/stream/renderers/glyphCanvasRenderer.d.ts +6 -0
  394. package/dist/components/stream/renderers/networkSymbolRenderer.d.ts +2 -0
  395. package/dist/components/stream/renderers/resolveCSSColor.d.ts +6 -0
  396. package/dist/components/stream/renderers/symbolCanvasRenderer.d.ts +2 -0
  397. package/dist/components/stream/sceneRevisionDiagnostics.d.ts +18 -0
  398. package/dist/components/stream/stalenessBands.d.ts +28 -0
  399. package/dist/components/stream/streamStoreSync.d.ts +37 -0
  400. package/dist/components/stream/symbolPath.d.ts +24 -0
  401. package/dist/components/stream/types.d.ts +206 -9
  402. package/dist/components/stream/useFrame.d.ts +21 -2
  403. package/dist/components/stream/useHydration.d.ts +6 -0
  404. package/dist/components/stream/useLegendCategoryEmission.d.ts +5 -0
  405. package/dist/components/stream/useStalenessCheck.d.ts +6 -1
  406. package/dist/components/stream/workerModuleUrl.d.ts +10 -0
  407. package/dist/components/stream/xyAnnotationAnchors.d.ts +13 -0
  408. package/dist/components/stream/xyCanvasRenderers.d.ts +7 -0
  409. package/dist/components/stream/xyCrosshair.d.ts +11 -0
  410. package/dist/components/stream/xyDateTicks.d.ts +9 -0
  411. package/dist/components/stream/xyDefaultTooltip.d.ts +10 -0
  412. package/dist/components/stream/xySceneBuilders/pointScene.d.ts +2 -2
  413. package/dist/components/stream/xySceneBuilders/types.d.ts +9 -4
  414. package/dist/controls.min.js +2 -0
  415. package/dist/controls.module.min.js +2 -0
  416. package/dist/forceLayoutWorker.js +1 -0
  417. package/dist/geo.min.js +1 -1
  418. package/dist/geo.module.min.js +1 -1
  419. package/dist/network.min.js +1 -1
  420. package/dist/network.module.min.js +1 -1
  421. package/dist/ordinal.min.js +1 -1
  422. package/dist/ordinal.module.min.js +1 -1
  423. package/dist/physics-matter.min.js +1 -0
  424. package/dist/physics-matter.module.min.js +1 -0
  425. package/dist/physics-rapier.min.js +1 -0
  426. package/dist/physics-rapier.module.min.js +1 -0
  427. package/dist/physics.min.js +2 -0
  428. package/dist/physics.module.min.js +2 -0
  429. package/dist/physicsWorker.js +1 -0
  430. package/dist/realtime.min.js +1 -1
  431. package/dist/realtime.module.min.js +1 -1
  432. package/dist/semiotic-ai-chunk-OG7BQUUW.module.min.js +2 -0
  433. package/dist/semiotic-ai-core.d.ts +47 -0
  434. package/dist/semiotic-ai-core.min.js +1 -0
  435. package/dist/semiotic-ai-core.module.min.js +1 -0
  436. package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +2 -0
  437. package/dist/semiotic-ai.d.ts +52 -4
  438. package/dist/semiotic-ai.min.js +1 -1
  439. package/dist/semiotic-ai.module.min.js +1 -1
  440. package/dist/semiotic-chunk-3FSVZ46U.module.min.js +2 -0
  441. package/dist/semiotic-controls.d.ts +18 -0
  442. package/dist/semiotic-data.d.ts +2 -0
  443. package/dist/semiotic-data.min.js +1 -1
  444. package/dist/semiotic-data.module.min.js +1 -1
  445. package/dist/semiotic-experimental.d.ts +49 -0
  446. package/dist/semiotic-experimental.min.js +1 -0
  447. package/dist/semiotic-experimental.module.min.js +1 -0
  448. package/dist/semiotic-geo.d.ts +11 -0
  449. package/dist/semiotic-network.d.ts +14 -1
  450. package/dist/semiotic-ordinal.d.ts +10 -0
  451. package/dist/semiotic-physics-matter.d.ts +10 -0
  452. package/dist/semiotic-physics-rapier.d.ts +9 -0
  453. package/dist/semiotic-physics.d.ts +56 -0
  454. package/dist/semiotic-realtime-core.d.ts +34 -0
  455. package/dist/semiotic-realtime-core.min.js +1 -0
  456. package/dist/semiotic-realtime-core.module.min.js +1 -0
  457. package/dist/semiotic-realtime-react.d.ts +10 -0
  458. package/dist/semiotic-realtime-react.min.js +2 -0
  459. package/dist/semiotic-realtime-react.module.min.js +2 -0
  460. package/dist/semiotic-realtime.d.ts +4 -22
  461. package/dist/semiotic-recipes-core.d.ts +92 -0
  462. package/dist/semiotic-recipes-core.min.js +1 -0
  463. package/dist/semiotic-recipes-core.module.min.js +1 -0
  464. package/dist/semiotic-recipes-react.d.ts +7 -0
  465. package/dist/semiotic-recipes-react.min.js +2 -0
  466. package/dist/semiotic-recipes-react.module.min.js +2 -0
  467. package/dist/semiotic-recipes.d.ts +4 -26
  468. package/dist/semiotic-recipes.min.js +1 -1
  469. package/dist/semiotic-recipes.module.min.js +1 -1
  470. package/dist/semiotic-server-edge.d.ts +8 -0
  471. package/dist/semiotic-server-edge.min.js +1 -0
  472. package/dist/semiotic-server-edge.module.min.js +1 -0
  473. package/dist/semiotic-server-node.d.ts +5 -0
  474. package/dist/semiotic-server-node.min.js +1 -0
  475. package/dist/semiotic-server-node.module.min.js +1 -0
  476. package/dist/semiotic-server.d.ts +2 -2
  477. package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +2 -0
  478. package/dist/semiotic-themes-core.d.ts +53 -0
  479. package/dist/semiotic-themes-core.min.js +1 -0
  480. package/dist/semiotic-themes-core.module.min.js +1 -0
  481. package/dist/semiotic-themes-react.d.ts +4 -0
  482. package/dist/semiotic-themes-react.min.js +2 -0
  483. package/dist/semiotic-themes-react.module.min.js +2 -0
  484. package/dist/semiotic-themes.d.ts +6 -74
  485. package/dist/semiotic-themes.min.js +1 -2
  486. package/dist/semiotic-themes.module.min.js +1 -2
  487. package/dist/semiotic-utils-core.d.ts +46 -0
  488. package/dist/semiotic-utils-core.min.js +1 -0
  489. package/dist/semiotic-utils-core.module.min.js +1 -0
  490. package/dist/semiotic-utils-react.d.ts +5 -0
  491. package/dist/semiotic-utils-react.min.js +2 -0
  492. package/dist/semiotic-utils-react.module.min.js +2 -0
  493. package/dist/semiotic-utils.d.ts +3 -39
  494. package/dist/semiotic-utils.min.js +1 -2
  495. package/dist/semiotic-utils.module.min.js +1 -2
  496. package/dist/semiotic-value.min.js +1 -1
  497. package/dist/semiotic-value.module.min.js +1 -1
  498. package/dist/semiotic-xy.d.ts +10 -0
  499. package/dist/semiotic.d.ts +39 -7
  500. package/dist/semiotic.min.js +1 -1
  501. package/dist/semiotic.module.min.js +1 -1
  502. package/dist/server.min.js +1 -1
  503. package/dist/server.module.min.js +1 -1
  504. package/dist/xy-chunk-IWD6IB6V.module.min.js +2 -0
  505. package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +2 -0
  506. package/dist/xy.min.js +1 -1
  507. package/dist/xy.module.min.js +1 -1
  508. package/package.json +246 -86
  509. package/spec/README.md +152 -0
  510. package/spec/bindings/README.md +35 -0
  511. package/spec/bindings/vega-lite.mjs +112 -0
  512. package/spec/v0.1/annotation-provenance.schema.json +127 -0
  513. package/spec/v0.1/audience-profile.schema.json +67 -0
  514. package/spec/v0.1/chart-capability.schema.json +186 -0
  515. package/dist/semiotic-ai-statisticalOverlays-C2PPlmXv.js +0 -1
  516. package/dist/semiotic-statisticalOverlays-C3DsOgr_.js +0 -1
  517. package/dist/xy-statisticalOverlays-C2PPlmXv.js +0 -1
@@ -0,0 +1,109 @@
1
+ import type { ReactElement } from "react";
2
+ import type { LegendGroup } from "../types/legendTypes";
3
+ import { type NetworkSymbolName } from "../stream/symbolPath";
4
+ /**
5
+ * `legendGroupsFrom` — build the `LegendGroup[]` a custom-layout recipe passes
6
+ * through `frameProps.legend` (`{ legendGroups }`). All four custom-chart HOCs
7
+ * disable the built-in legend because the *layout* owns color/shape/size; without
8
+ * this, authors hand-roll the `LegendGroup` shape (its `styleFn`, custom-glyph
9
+ * `type` render functions, swatch sizing). This closes that gap without the frame
10
+ * having to guess the author's encoding — the recipe declares each channel and
11
+ * gets back a ready-to-render array.
12
+ *
13
+ * One group is emitted per provided channel, in order: **color → symbol → size**.
14
+ * Pure / SSR-safe.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <NetworkCustomChart
19
+ * layout={packedClusterMatrix}
20
+ * frameProps={{ legend: { legendGroups: legendGroupsFrom({
21
+ * colorMap: CATEGORY_COLORS, colorLabel: "Category",
22
+ * symbolMap: CLASS_SHAPES, symbolLabel: "Class",
23
+ * sizeStops: [200, 2000, 8000], sizeRadius: r, sizeLabel: "Mass (kg)",
24
+ * }) } }}
25
+ * />
26
+ * ```
27
+ */
28
+ export interface LegendGroupsInput {
29
+ /** `{category → color}` map → one swatch per entry, in insertion order. */
30
+ colorMap?: Record<string, string>;
31
+ /** Or explicit category keys, with `color` resolving each to a color. */
32
+ keys?: string[];
33
+ /** Resolve a key → color (e.g. a recipe's `ctx.resolveColor`). Used with `keys`. */
34
+ color?: (key: string) => string;
35
+ /** Color-group heading. @default "" */
36
+ colorLabel?: string;
37
+ /** Color swatch glyph — a filled square or a line stroke. @default "fill" */
38
+ colorType?: "fill" | "line";
39
+ /** `{category → glyph shape}` map → one shape swatch per entry. */
40
+ symbolMap?: Record<string, NetworkSymbolName>;
41
+ /** Fill for the shape swatches (shape, not color, is the encoding here).
42
+ * @default "var(--semiotic-text, currentColor)" */
43
+ symbolColor?: string;
44
+ /** Symbol-group heading. @default "" */
45
+ symbolLabel?: string;
46
+ /** Reference values → circle swatches sized by the mark scale. */
47
+ sizeStops?: number[];
48
+ /** Map a value → radius (px) — pass the recipe's own radius scale so the
49
+ * legend circles match the marks exactly. Required to draw the size group. */
50
+ sizeRadius?: (v: number) => number;
51
+ /** Format a size stop for its label. @default `String` */
52
+ sizeFormat?: (v: number) => string;
53
+ /** Size swatch circle fill. @default "var(--semiotic-text, currentColor)" */
54
+ sizeColor?: string;
55
+ /** Size-group heading. @default "" */
56
+ sizeLabel?: string;
57
+ }
58
+ export declare function legendGroupsFrom(input: LegendGroupsInput): LegendGroup[];
59
+ export interface LegendSwatch {
60
+ /** Legend entry label. */
61
+ label: string;
62
+ /** Filled-square swatch color (the categorical / fill case). */
63
+ color?: string;
64
+ /** Line-stroke swatch color (a horizontal bar — for line-series legends). */
65
+ line?: string;
66
+ /** Glyph-shape swatch (the per-datum shape channel). */
67
+ shape?: NetworkSymbolName;
68
+ /** Diagonal-hatch swatch (percentile / uncertainty bands). Line color comes
69
+ * from `color`, falling back to the label color. */
70
+ hatch?: boolean;
71
+ }
72
+ export interface LegendSwatchesProps {
73
+ entries: LegendSwatch[];
74
+ /** Top-left x of the legend block, in plot coordinates. */
75
+ x: number;
76
+ /** Top-left y of the legend block, in plot coordinates. */
77
+ y: number;
78
+ /** Stack entries down (`vertical`) or flow them across (`horizontal`).
79
+ * @default "vertical" */
80
+ orientation?: "vertical" | "horizontal";
81
+ /** Swatch box size in px. @default 14 */
82
+ swatchSize?: number;
83
+ /** Row height (vertical) / inter-entry gap (horizontal), px. @default 8 (+ swatch) */
84
+ gap?: number;
85
+ /** Gap between a swatch and its label, px. @default 6 */
86
+ labelGap?: number;
87
+ /** @default 12 */
88
+ fontSize?: number;
89
+ /** Label color. @default "var(--semiotic-text-secondary, #888)" */
90
+ color?: string;
91
+ className?: string;
92
+ keyId?: string | number;
93
+ }
94
+ /**
95
+ * A self-contained SVG legend a custom layout draws in its `overlays` — the
96
+ * portable counterpart to {@link legendGroupsFrom} (which feeds the *frame's*
97
+ * legend via `frameProps.legend`). Custom charts disable the built-in legend,
98
+ * so this renders swatch + label rows directly: fill squares, line bars, glyph
99
+ * shapes, and diagonal-hatch swatches, stacked or flowed. `pointerEvents: none`.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * legendSwatches({
104
+ * x: 0, y: 0, orientation: "horizontal",
105
+ * entries: SPHERES.map((s) => ({ label: s, color: COLORS[s] })),
106
+ * })
107
+ * ```
108
+ */
109
+ export declare function legendSwatches(p: LegendSwatchesProps): ReactElement;
@@ -5,6 +5,50 @@ import type { Datum } from "../charts/shared/datumTypes";
5
5
  * the boundary and lets the layout body call a single function.
6
6
  */
7
7
  export declare function resolveAccessor<T = unknown>(a: string | ((d: Datum) => T)): (d: Datum) => T;
8
+ /**
9
+ * Read a field off a network-ingest wrapper (`node.data.<key>`) or the node
10
+ * itself, with a fallback. Network recipes receive `RealtimeNode`/`RealtimeEdge`
11
+ * wrappers whose user data lives under `.data`; several recipes (lineageDag,
12
+ * mermaidDag, packedClusterMatrix, …) each re-declared this identical reader, so
13
+ * it lives here once. Returns `unknown` — narrow at the call site.
14
+ */
15
+ export declare function readField(d: unknown, key: string, fallback: unknown): unknown;
16
+ /**
17
+ * Return the **raw user datum** from a value that may be a frame wrapper.
18
+ *
19
+ * Stream Frames and custom-layout scene nodes carry the user's object under
20
+ * `.data` (a `RealtimeNode` / `SceneDatum` wrapper), and some interaction
21
+ * payloads nest it under `.datum` (hit-test results, certain tooltip inputs) —
22
+ * the wrapped-vs-raw split that bites every `onObservation` consumer. This
23
+ * collapses all of it: `unwrapDatum(value)` always yields the object you
24
+ * passed in, whether the frame wrapped it (either way) or not.
25
+ *
26
+ * This is **the** unwrap path for both `onObservation` handlers and
27
+ * `frameProps.tooltipContent` renderers — call it once on the incoming value
28
+ * instead of hand-rolling `x.data ?? x` guards (and never pre-unwrap the
29
+ * argument yourself: `unwrapDatum(x?.data ?? x)` can double-unwrap a raw datum
30
+ * that legitimately carries a `data` field).
31
+ *
32
+ * Heuristic footgun: any value with a top-level `data` (or `datum`) property is
33
+ * treated as a wrapper. If your *raw* datum legitimately has its own such
34
+ * field, this returns that field instead of the datum — rename the field or
35
+ * read it directly.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * onObservation={(o) => {
40
+ * if (o.type === "hover") setActive(unwrapDatum(o.datum))
41
+ * }}
42
+ * ```
43
+ */
44
+ export declare function unwrapDatum<T = Datum>(value: unknown): T | null;
45
+ /**
46
+ * Group items into a `Map` keyed by a derived string. Insertion order is
47
+ * preserved both for keys and within each bucket — recipes rely on stable
48
+ * ordering for deterministic layout. Several recipes re-declared this; it lives
49
+ * here once.
50
+ */
51
+ export declare function groupBy<T>(items: readonly T[], key: (item: T) => string): Map<string, T[]>;
8
52
  /**
9
53
  * Build a datum object whose own-properties are safe to set from
10
54
  * user-supplied accessor names. `Object.create(null)` produces a
@@ -25,3 +69,116 @@ export declare function resolveAccessor<T = unknown>(a: string | ((d: Datum) =>
25
69
  * scattered across each recipe's inner loops.
26
70
  */
27
71
  export declare function createSafeDatum(populate: (set: (key: string, value: unknown) => void) => void): Datum;
72
+ /**
73
+ * A `{field, value}` highlight target — or an array of them, AND-combined (a
74
+ * datum must match every entry to count as a match, e.g. a region×orbit cell).
75
+ * `value` is coerced to a string before comparison; a nullish `value` matches
76
+ * anything (so `{ field, value: null }` is a no-op constraint).
77
+ */
78
+ export type HighlightMatch = {
79
+ field: string;
80
+ value: unknown;
81
+ } | ReadonlyArray<{
82
+ field: string;
83
+ value: unknown;
84
+ }>;
85
+ /**
86
+ * Whether `datum` satisfies a `{field, value}` highlight (or every entry of an
87
+ * array). A nullish/empty `highlight` matches everything — the "no highlight
88
+ * active" case. Several recipes hand-rolled this exact field/value loop.
89
+ */
90
+ export declare function matchesHighlight(datum: Datum, highlight: HighlightMatch | null | undefined): boolean;
91
+ export interface DimOptions {
92
+ /** A datum is lit only if this predicate passes (e.g. a shared-selection
93
+ * predicate, or `parallelCoordinates`'s `highlightFn`). Omit ⇒ no constraint. */
94
+ predicate?: ((d: Datum) => boolean) | null;
95
+ /** A datum is lit only if it matches this `{field, value}` (or all, for an
96
+ * array). Omit ⇒ no constraint. Composes with `predicate` (both must pass). */
97
+ highlight?: HighlightMatch | null;
98
+ /** Opacity used when no cue is active (nothing is dimmed). @default 1 */
99
+ baseOpacity?: number;
100
+ /** Opacity for marks that don't match an active cue. @default 0.16 */
101
+ dimOpacity?: number;
102
+ /** Additive opacity boost for matching marks when a cue is active, capped at 1
103
+ * (e.g. `parallelCoordinates` lifts its 0.45 line opacity by 0.4 on match). @default 0 */
104
+ brighten?: number;
105
+ }
106
+ /**
107
+ * The highlight/dim opacity rule, shared across custom-layout recipes. A mark is
108
+ * "lit" when it satisfies **every** active cue (`highlight` AND `predicate`); if
109
+ * no cue is active nothing is dimmed and every mark gets `baseOpacity`. Lit marks
110
+ * get `min(1, baseOpacity + brighten)`, dimmed marks get `dimOpacity`.
111
+ *
112
+ * This is the one rule `packedClusterMatrix` and `parallelCoordinates` each
113
+ * hand-rolled; centralizing it keeps the "matching marks stay lit, the rest dim"
114
+ * behavior identical. (Recipes whose dimming composes several cues with priority
115
+ * and rescue rules — e.g. `lineageDag`'s reach-set-over-selection — keep their
116
+ * bespoke logic; this helper is for the common AND-of-cues case.)
117
+ */
118
+ export declare function dimFor(datum: Datum, opts?: DimOptions): number;
119
+ /**
120
+ * Join layout-affecting inputs into a stable content-signature string. Pass the
121
+ * primitives that change the geometry (dimensions, gaps, orders, a per-datum
122
+ * fingerprint) — NOT styling/interaction inputs (color, shade, highlight) — so a
123
+ * re-style or a returning resize reuses a cached layout instead of recomputing it.
124
+ * Pairs with {@link LayoutCache}.
125
+ */
126
+ export declare function signatureKey(parts: ReadonlyArray<string | number | boolean | null | undefined>): string;
127
+ /**
128
+ * A tiny bounded geometry cache for expensive layouts (force packing, tree/DAG
129
+ * positioning). Key it with a {@link signatureKey} of the layout-affecting inputs
130
+ * so re-styling on interaction never re-runs the layout.
131
+ *
132
+ * **The sharp edge:** on `NetworkCustomChart`/`*CustomChart`, `ctx.nodes` is a
133
+ * *fresh array each `buildScene`* and a `layoutConfig` change re-runs the layout
134
+ * without re-ingesting topology — so cache by *content* (a fingerprint of the
135
+ * data), never by array identity. Over `maxSize` distinct keys it clears wholesale
136
+ * (these layouts churn a handful of signatures, not thousands).
137
+ */
138
+ export declare class LayoutCache<V> {
139
+ private readonly maxSize;
140
+ private store;
141
+ constructor(maxSize?: number);
142
+ get(key: string): V | undefined;
143
+ set(key: string, value: V): void;
144
+ /** Return the cached value for `key`, or compute + store it on a miss. */
145
+ getOrCompute(key: string, compute: () => V): V;
146
+ clear(): void;
147
+ get size(): number;
148
+ }
149
+ /**
150
+ * A reusable lightness shader for one base color. Interpolating in CIELAB keeps
151
+ * the hue and chroma roughly fixed while only lightness moves, so a categorical
152
+ * hue can carry a second *continuous* channel as shade (e.g. age, recency).
153
+ *
154
+ * The returned function takes `t ∈ [0,1]`: `0` lightens toward white, `1`
155
+ * darkens toward black, `0.5` returns the base. `strength` (0..1) caps how far
156
+ * each direction travels. Pure / SSR-safe — no DOM. Build once per base color
157
+ * (it captures two interpolators) and call per datum.
158
+ */
159
+ export declare function makeShade(baseColor: string, strength?: number): (t: number) => string;
160
+ /** One-shot form of {@link makeShade}: perceptual lightness shade of `baseColor`. */
161
+ export declare function shade(baseColor: string, t: number, strength?: number): string;
162
+ /** Build a scene-node `datum` from a flat field map (a thin wrapper over
163
+ * {@link createSafeDatum}, used by recipes that synthesize per-glyph data). */
164
+ export declare function datumFromFields(fields: Record<string, unknown>): Datum;
165
+ /** A stable, URL/key-safe id from an arbitrary label — for keyed overlays and
166
+ * transition identity (`"Extra Boba" → "extra-boba"`). */
167
+ export declare function stableGlyphId(value: string): string;
168
+ /** Clamp `value` into `[min, max]`. The one-liner every layout re-declares to
169
+ * keep a radius, opacity, or pixel position inside its valid range. */
170
+ export declare function clamp(value: number, min: number, max: number): number;
171
+ /** Coerce to a finite non-negative number. Shared by tally/token helpers so
172
+ * non-finite inputs fail closed instead of leaking NaN into geometry. */
173
+ export declare function nonNegativeFinite(value: number | undefined): number;
174
+ /** Arithmetic mean of a numeric list; `0` for an empty list (so it's safe to
175
+ * feed an unfiltered slice). Recipes average angles, positions, and weights. */
176
+ export declare function mean(values: readonly number[]): number;
177
+ /**
178
+ * Turn a hex color (`#rgb` or `#rrggbb`) into an `rgba(…)` string at `alpha`.
179
+ * The dimming-by-alpha helper a custom layout reaches for when it must express
180
+ * hover/selection fade as a *fill color* (e.g. inside a recipe's `resolveColor`
181
+ * callback, where the frame's opacity channel isn't available). Non-hex input
182
+ * is returned unchanged so it composes with CSS-var / `rgb()` colors.
183
+ */
184
+ export declare function withAlpha(color: string, alpha: number): string;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Run-length encoding for sequential/categorical series — the "collapse a
3
+ * per-step categorical field into drawable runs" operation that condition
4
+ * strips, status timelines, and calendar ribbons all need. A custom layout
5
+ * draws one rect per run instead of one per step.
6
+ *
7
+ * Pure / SSR-safe. Several custom charts re-derived this with three slightly
8
+ * different signatures (value-change by index, value-change by domain coord,
9
+ * boolean-present); this is the single form that covers all three.
10
+ */
11
+ export interface Run<V> {
12
+ /** The constant value over the run. */
13
+ value: V;
14
+ /** Run start on the domain axis — the array index of the first item, or the
15
+ * `coord` of the first item when `coord` is supplied. Inclusive. */
16
+ start: number;
17
+ /** Run end on the domain axis. Half-open: the run covers `[start, end)`. With
18
+ * `coord`, this is the next item's coord (or the last coord + `step` for the
19
+ * final run / a run that precedes a gap). Without `coord`, the index after
20
+ * the run's last item. */
21
+ end: number;
22
+ /** Number of consecutive items in the run. */
23
+ count: number;
24
+ /** Index of the run's first item in the input array. */
25
+ startIndex: number;
26
+ /** Index of the run's last item in the input array (inclusive). */
27
+ endIndex: number;
28
+ }
29
+ export interface RunOptions<T, V> {
30
+ /** Map an item to its position on the domain axis (e.g. day-of-year). When
31
+ * omitted, the array index is used and runs are index-based. A gap in
32
+ * `coord` (a jump larger than `step`) closes the current run. */
33
+ coord?: (item: T, index: number) => number;
34
+ /** Width of one item on the domain axis — closes the final run and detects
35
+ * gaps when `coord` is supplied. @default 1 */
36
+ step?: number;
37
+ /** Custom equality for grouping adjacent items. @default `Object.is` */
38
+ equals?: (a: V, b: V) => boolean;
39
+ /** Presence mode: only items with a truthy value form runs; falsy items break
40
+ * the current run and are excluded entirely (the boolean condition-strip
41
+ * variant). @default false */
42
+ truthyOnly?: boolean;
43
+ }
44
+ /**
45
+ * Collapse a sequential series into runs of equal adjacent values.
46
+ *
47
+ * @example value-change runs over a domain coordinate (a condition ring/strip)
48
+ * ```ts
49
+ * runs(days, (d) => d.condition, { coord: (d) => d.day, step: 1 })
50
+ * // → [{ value: "clear", start: 0, end: 5, count: 5, ... }, ...]
51
+ * ```
52
+ * @example boolean present/absent runs (a "freezing days" strip)
53
+ * ```ts
54
+ * runs(days, (d) => d.belowFreezing, { truthyOnly: true })
55
+ * ```
56
+ */
57
+ export declare function runs<T, V = unknown>(items: readonly T[], value: (item: T, index: number) => V, opts?: RunOptions<T, V>): Run<V>[];
58
+ /** Alias for {@link runs} — the textbook name for the transform. */
59
+ export declare const runLengthEncode: typeof runs;
@@ -0,0 +1,157 @@
1
+ export type TokenType = "dot" | "icon" | "glyph";
2
+ export type TokenSemantics = "observed-unit" | "unitized-measure" | "possible-outcome" | "posterior-sample" | "hypothetical-case" | "risk-case" | "topic-anchor" | "decorative";
3
+ export type TokenCountStrategy = "actual" | "unitized" | "fixed-denominator" | "quantile" | "sample" | "posterior-sample" | "random-sample";
4
+ export type TokenLayout = "row" | "column" | "grid" | "stack" | "bar-segment" | "waffle" | "beeswarm" | "dotplot" | "quantile-strip" | "small-multiple";
5
+ export type TokenLabelPolicy = "text-plus-token" | "text-plus-icon" | "text-only" | "token-only" | "icon-only" | "none";
6
+ export type TokenTaskIntent = "precise-comparison" | "frequency-reasoning" | "probability-estimation" | "risk-communication" | "memory" | "editorial-engagement" | "public-explanation" | "support-decision" | "measure" | "estimate probability" | "understand risk" | "remember" | "decide";
7
+ export type TokenCapabilityIntent = "compare-categories" | "distribution" | "part-to-whole" | "rank" | "outlier-detection";
8
+ export interface TokenEncoding {
9
+ tokenType: TokenType;
10
+ tokenSemantics: TokenSemantics;
11
+ countStrategy: TokenCountStrategy;
12
+ layout?: TokenLayout;
13
+ /** Named icon/glyph key in host code; Semiotic keeps this semantic, not visual. */
14
+ token?: string;
15
+ icon?: string;
16
+ /** Value represented by one complete token for unitized measures. */
17
+ unitValue?: number;
18
+ /** Alias for `unitValue`, matching the lower-level `unitize` helper. */
19
+ unit?: number;
20
+ /** Human-readable meaning, e.g. "one token = 1,000 commuters". */
21
+ unitMeaning?: string;
22
+ tokenCount?: number;
23
+ maxTokens?: number;
24
+ minFraction?: number;
25
+ numerator?: number;
26
+ denominator?: number;
27
+ labelPolicy?: TokenLabelPolicy;
28
+ seed?: number;
29
+ }
30
+ export interface TokenGeneratorInput<D = unknown> {
31
+ value?: number;
32
+ /** Scenario/projection endpoint for `unitized` tallies. */
33
+ rangeValue?: number;
34
+ numerator?: number;
35
+ denominator?: number;
36
+ samples?: readonly number[];
37
+ data?: readonly D[];
38
+ valueAccessor?: keyof D | ((d: D) => number);
39
+ }
40
+ export interface VisualToken<D = unknown> {
41
+ index: number;
42
+ tokenType: TokenType;
43
+ tokenSemantics: TokenSemantics;
44
+ countStrategy: TokenCountStrategy;
45
+ fraction: number;
46
+ startFraction: number;
47
+ value: number;
48
+ start: number;
49
+ end: number;
50
+ unitValue?: number;
51
+ unitMeaning?: string;
52
+ highlighted?: boolean;
53
+ /** Marks a token as the projected/scenario extension of a range tally. */
54
+ range?: "scenario";
55
+ quantile?: number;
56
+ sample?: number;
57
+ datum?: D;
58
+ }
59
+ export type TokenDiagnosticCode = "TOKEN_SEMANTICS_UNCLEAR" | "MISSING_COUNT_STRATEGY" | "ICON_ONLY_LABELS" | "TOO_MANY_VISIBLE_TOKENS" | "DECORATIVE_PICTOGRAPHS" | "TOKEN_STRATEGY_MISMATCH" | "MISSING_UNIT_VALUE" | "MISSING_UNIT_MEANING";
60
+ export interface TokenDiagnostic {
61
+ code: TokenDiagnosticCode;
62
+ severity: "warning" | "info";
63
+ message: string;
64
+ }
65
+ export interface TokenDiagnosticsContext {
66
+ visibleTokens?: number;
67
+ maxRecommendedTokens?: number;
68
+ }
69
+ export interface TokenSet<D = unknown> {
70
+ tokens: VisualToken<D>[];
71
+ encoding: TokenEncoding;
72
+ /**
73
+ * Strategy-specific source total: value-space for `unitized`/numeric `actual`,
74
+ * denominator for `fixed-denominator`, sample count for sample/quantile
75
+ * strategies, and observed datum count for data-backed `actual`.
76
+ */
77
+ total: number;
78
+ /**
79
+ * Strategy-specific visible amount: represented value for `unitized`, visible
80
+ * token count for fixed-denominator/sample/quantile/data-backed actual.
81
+ */
82
+ shown: number;
83
+ overflow: boolean;
84
+ numerator?: number;
85
+ denominator?: number;
86
+ unitValue?: number;
87
+ /** Projected/scenario endpoint when input.rangeValue is supplied. */
88
+ rangeTotal?: number;
89
+ /** Tokens extending a unitized tally from total to rangeTotal. */
90
+ rangeTokens?: VisualToken<D>[];
91
+ diagnostics: TokenDiagnostic[];
92
+ }
93
+ export interface TokenGridOptions {
94
+ x?: number;
95
+ y?: number;
96
+ columns?: number;
97
+ rows?: number;
98
+ cellWidth?: number;
99
+ cellHeight?: number;
100
+ gutter?: number;
101
+ flow?: "row" | "column";
102
+ columnDirection?: "right" | "left";
103
+ rowDirection?: "down" | "up";
104
+ /** Anchor within each cell for the returned point. `[0.5, 1]` is useful for feet-down glyphs. */
105
+ anchor?: [number, number];
106
+ }
107
+ export interface PositionedToken<D = unknown> extends VisualToken<D> {
108
+ x: number;
109
+ y: number;
110
+ row: number;
111
+ column: number;
112
+ }
113
+ export interface TokenEncodingSuggestion {
114
+ recommendedEncoding: string;
115
+ tokenEncoding?: TokenEncoding;
116
+ rationale: string;
117
+ warnings: TokenDiagnostic[];
118
+ alternatives: string[];
119
+ }
120
+ export interface SuggestTokenEncodingInput {
121
+ taskIntent: TokenTaskIntent;
122
+ dataType?: "count" | "measure" | "distribution" | "probability" | "risk" | "category";
123
+ audience?: "expert" | "general-public" | "internal";
124
+ precisionNeed?: "low" | "medium" | "high";
125
+ availableSpace?: "small" | "medium" | "large";
126
+ concreteEntity?: string;
127
+ }
128
+ export declare function normalizeTokenEncoding(encoding: TokenEncoding): TokenEncoding;
129
+ /**
130
+ * Generate visible token records from a semantic token encoding.
131
+ *
132
+ * This is the frame-agnostic bridge between the strategy layer ("each token
133
+ * is a case / unit / possible outcome") and today's glyph/dot/icon renderers.
134
+ * `unitized` delegates to `unitize`, so fractional final glyphs keep the same
135
+ * ISOTYPE partial-fill convention used by existing custom layouts.
136
+ */
137
+ export declare function generateTokens<D = unknown>(input: number | readonly number[] | TokenGeneratorInput<D>, encoding: TokenEncoding): TokenSet<D>;
138
+ /**
139
+ * Position generated tokens in a deterministic row/column grid. The returned
140
+ * `(x, y)` is the anchor point inside each cell, so use `[0.5, 1]` for
141
+ * baseline-standing ISOTYPE glyphs and `[0.5, 0.5]` for centered dots/icons.
142
+ */
143
+ export declare function layoutTokenGrid<D = unknown>(tokenSetOrTokens: TokenSet<D> | readonly VisualToken<D>[], options?: TokenGridOptions): PositionedToken<D>[];
144
+ export declare function diagnoseTokenEncoding(encoding: Partial<TokenEncoding>, context?: TokenDiagnosticsContext): TokenDiagnostic[];
145
+ /**
146
+ * Bridge token-task intents into the chart capability taxonomy used by
147
+ * `suggestCharts`. Human-friendly aliases normalize first, so callers can use
148
+ * either the canonical token intent (`probability-estimation`) or the UI label
149
+ * alias (`estimate probability`).
150
+ */
151
+ export declare function tokenTaskIntentToCapabilityIntents(intent: TokenTaskIntent): TokenCapabilityIntent[];
152
+ /**
153
+ * Task-aware defaults for tokenized reasoning. This does not render a chart;
154
+ * it returns the semantic encoding Semiotic/IDID can explain, critique, or
155
+ * hand to `generateTokens` before a custom layout stamps dots/icons/glyphs.
156
+ */
157
+ export declare function suggestTokenEncoding(input: SuggestTokenEncodingInput): TokenEncodingSuggestion;
@@ -0,0 +1,79 @@
1
+ import type { GlyphDef } from "../stream/glyphDef";
2
+ import type { SceneAccessibilityMetadata, SceneDatum, SceneNode, Style } from "../stream/types";
3
+ import type { SymbolName } from "../stream/symbolPath";
4
+ import { type PositionedToken, type TokenEncoding, type TokenGeneratorInput, type TokenGridOptions, type TokenLayout, type TokenSet, type VisualToken } from "./tokenEncoding";
5
+ export type TokenLayerInput<D> = number | readonly number[] | TokenGeneratorInput<D> | TokenSet<D>;
6
+ export type TokenLayerValue<T, D> = T | ((token: PositionedToken<D>) => T | undefined);
7
+ export interface TokenPosition {
8
+ x: number;
9
+ y: number;
10
+ row?: number;
11
+ column?: number;
12
+ }
13
+ export interface TokenLayerOptions<D = unknown> extends TokenGridOptions {
14
+ /** Override the encoding's preferred layout for this placement. */
15
+ layout?: TokenLayout;
16
+ /** Plot-space width used to infer grid columns or normalize quantile strips. */
17
+ width?: number;
18
+ /** Plot-space height used to normalize quantile strips. */
19
+ height?: number;
20
+ /** Rendered glyph height / symbol diameter / dot diameter. @default 12
21
+ * For user-facing ISOTYPE/icon arrays, prefer 16px+ in the final layout. */
22
+ tokenSize?: TokenLayerValue<number, D>;
23
+ /** Dot radius. Defaults to half tokenSize. */
24
+ radius?: TokenLayerValue<number, D>;
25
+ /** Primary mark paint. Prefer passing ctx.resolveColor(...) from custom layouts. */
26
+ color?: TokenLayerValue<string, D>;
27
+ /** Paint for unhighlighted fixed-denominator tokens. */
28
+ inactiveColor?: TokenLayerValue<string, D>;
29
+ /** Paint for projected/scenario range tokens when includeRange is true. */
30
+ rangeColor?: TokenLayerValue<string, D>;
31
+ /** Accent paint for glyph role fills. */
32
+ accent?: TokenLayerValue<string, D>;
33
+ /** Ghost paint for partial glyph fills. */
34
+ ghostColor?: TokenLayerValue<string | undefined, D>;
35
+ /** Symbol shape for dot/icon fallback rendering. */
36
+ symbolType?: TokenLayerValue<SymbolName, D>;
37
+ /** Custom origin-centered SVG path for symbol nodes. */
38
+ symbolPath?: TokenLayerValue<string | undefined, D>;
39
+ /** Composite pictogram definition for icon/glyph tokens. */
40
+ glyph?: TokenLayerValue<GlyphDef | undefined, D>;
41
+ /** Partial-fill axis for glyph tokens. */
42
+ fractionDirection?: TokenLayerValue<"horizontal" | "vertical", D>;
43
+ rotation?: TokenLayerValue<number | undefined, D>;
44
+ style?: TokenLayerValue<Style | undefined, D>;
45
+ datum?: TokenLayerValue<SceneDatum, D>;
46
+ accessibleDatum?: TokenLayerValue<SceneAccessibilityMetadata["accessibleDatum"], D>;
47
+ accessibility?: TokenLayerValue<SceneAccessibilityMetadata["accessibility"], D>;
48
+ pointId?: TokenLayerValue<string | undefined, D>;
49
+ idPrefix?: string;
50
+ include?: (token: PositionedToken<D>) => boolean;
51
+ /** Render `TokenSet.rangeTokens` after base tokens for unitized scenario tallies. */
52
+ includeRange?: boolean;
53
+ /** Custom placement hook for scale-driven strips, stacks, map clusters, etc. */
54
+ positionToken?: (token: VisualToken<D>, index: number, tokens: readonly VisualToken<D>[]) => TokenPosition;
55
+ /** Maps a sample/value to plot-space x for quantile/sample strips. */
56
+ valueToX?: (value: number, token: VisualToken<D>) => number;
57
+ /** Maps a sample/value to plot-space y for quantile/sample strips. */
58
+ valueToY?: (value: number, token: VisualToken<D>) => number;
59
+ }
60
+ export interface TokenLayerConfig<D = unknown> {
61
+ input: TokenLayerInput<D>;
62
+ encoding?: TokenEncoding;
63
+ options?: TokenLayerOptions<D>;
64
+ }
65
+ export interface TokenLayerResult<D = unknown> {
66
+ tokenSet: TokenSet<D>;
67
+ positionedTokens: PositionedToken<D>[];
68
+ nodes: SceneNode[];
69
+ }
70
+ /**
71
+ * Frame-agnostic rendering helper for tokenized reasoning.
72
+ *
73
+ * `tokenLayer` is the scene-node bridge for ISOTYPE/icon arrays, risk grids,
74
+ * quantile dotplots, and hybrid bar-token layouts. It creates the semantic
75
+ * tokens, positions them, and returns ordinary Semiotic scene nodes so custom
76
+ * charts still get canvas/SVG rendering, hit testing, keyboard navigation,
77
+ * pointId annotations, transitions, and accessible table rows.
78
+ */
79
+ export declare function tokenLayer<D = unknown>({ input, encoding, options, }: TokenLayerConfig<D>): TokenLayerResult<D>;