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
@@ -1,169 +1,215 @@
1
1
  import type { Datum } from "../charts/shared/datumTypes";
2
- import type { CustomLayout } from "../stream/customLayout";
3
2
  import type { NetworkCustomLayout } from "../stream/networkCustomLayout";
4
- import type { OrdinalCustomLayout } from "../stream/ordinalCustomLayout";
5
- import type { GofishLambda } from "./gofishLambdas";
6
3
  /**
7
- * Experimental GoFish Frontend IR → Semiotic custom-layout adapter.
4
+ * Experimental GoFish **DisplayList** → Semiotic custom-layout adapter.
8
5
  *
9
- * This is the GoFish analogue of `fromVegaLite`. Where `fromVegaLite` maps a
10
- * Vega-Lite spec onto a built-in HOC component + props, `unstable_fromGofishIR` maps a
11
- * GoFish *Frontend IR* document (the JSON artifact GoFish's `to_ir` /
12
- * serialization frontend emits see the `gofish-ir` package) onto Semiotic's
13
- * custom-layout surface.
6
+ * GoFish's `toDisplayList({ w, h })` is the post-layout *render IR*: a flat,
7
+ * ordered list of positioned primitives in absolute viewport pixels. The layout
8
+ * solve has already run operators, constraints, channels, and the coordinate
9
+ * transforms are all consumed, so a polar petal arrives as a baked `path`, a
10
+ * treemap cell as a baked `rect`. Josh Pollock shipped this stage specifically
11
+ * for this adapter (it is the analogue of running a chart to SVG but stopping
12
+ * one step earlier, before backend emission).
14
13
  *
15
- * Unlike a recognizer, this *interprets* the spec: `unstable_fromGofishIR` picks a
16
- * frame family, then hands the IR to `interpretGofishIR` (see
17
- * `gofishInterpreter.ts`), which walks `data operators mark` and executes
18
- * `group`/`spread`/`stack`/`scatter`/`treemap`/`layer`, the `polar`/`unit`
19
- * coordinate transforms, mark channels through scales, and `connect`/`ref`/
20
- * `arrow` relations. The two sanctioned non-grammar paths — `derive` and
21
- * `mark-fn` — resolve through the lambda registry. Any spec built from the
22
- * supported grammar renders; it is not limited to known archetypes.
14
+ * That makes the adapter's job small and faithful: GoFish owns the geometry; we
15
+ * map each item onto Semiotic's custom-layout surface *by its `role`*, exactly
16
+ * as the reference backends do (`displayListToSVG` emits SVG tags; we emit
17
+ * scene-nodes + overlays):
23
18
  *
24
- * Frame family (hybrid): `arrow`/pointer specs network; the boba volume
25
- * signature ordinal (Semiotic owns the category axis, the interpreter owns
26
- * the within-cup composition); everything else XY. The Python Tutor memory
27
- * diagram is a genuinely bespoke diagram beyond the grammar, so it stays a
28
- * chart-level escape hatch rendered by `gofishPythonTutorNetworkLayout`.
19
+ * - **`role: "overlay"`** chrome (axis ticks, labels, glyph detail). Rendered
20
+ * verbatim into one ordered SVG overlay layer (a JSX port of GoFish's
21
+ * reference `displayListToSVG`), so painter order and every `kind` including
22
+ * warped `path`s, `image`s, and Porter-Duff `composite`/`mask` graphs stay
23
+ * pixel-faithful.
24
+ * - **`role: "node"`** — data-bearing marks. Rendered into the same SVG layer
25
+ * *and* given a transparent hit-rect scene node carrying the item's `datum`,
26
+ * so Semiotic stays authoritative for hit-testing, tooltips, `onObservation`,
27
+ * cross-chart selection, keyboard a11y, and SSR mark-count evidence.
29
28
  *
30
- * Scope: GoFish Frontend IR v0. This is a PR-preview adapter named
31
- * `unstable-gofish-ir-adapter`, not a release API commitment. Constructs outside the interpreter's
32
- * allocation model (`table`, `cut`, `mask`, free-form `.constrain`, …) record
33
- * a warning and fall back rather than silently mis-rendering.
29
+ * Because a display list is **viewport-baked** solved at one `{ w, h }`, not
30
+ * cacheable the result always mounts on `NetworkCustomChart` (the scale-free
31
+ * family: plot-relative pixel coordinates, no data scales to fight the baked
32
+ * geometry). The adapter surfaces the document's `viewport` as `width`/`height`;
33
+ * the list is only valid at that size, so on resize or data change the host
34
+ * re-calls `toDisplayList` and re-runs the adapter rather than rescaling an old
35
+ * document.
36
+ *
37
+ * Scope: GoFish DisplayList IR v0 (`ir: "gofish-display-list"`). This is a
38
+ * PR-preview adapter named `unstable-gofish-displaylist-adapter`, exposed from
39
+ * `semiotic/experimental`; it is not a release API commitment.
34
40
  */
35
- export declare const EXPERIMENTAL_GOFISH_ADAPTER_NAME = "unstable-gofish-ir-adapter";
36
- /** Explicit field-accessor channel form, emitted by `field(name)`. */
37
- export interface GofishFieldAccessor {
38
- type: "field";
39
- name: string;
40
- measure?: string;
41
+ export declare const EXPERIMENTAL_GOFISH_ADAPTER_NAME = "unstable-gofish-displaylist-adapter";
42
+ /** Resolved paint carried by a display item. */
43
+ export interface GofishDisplayStyle {
44
+ fill?: string;
45
+ stroke?: string;
46
+ strokeWidth?: number;
47
+ opacity?: number;
48
+ fillOpacity?: number;
49
+ /** CSS `mix-blend-mode`. */
50
+ mixBlendMode?: string;
51
+ /** SVG `stroke-dasharray`. */
52
+ strokeDasharray?: string;
53
+ /** A `url(#id)` reference to a user-supplied filter def. */
54
+ filter?: string;
41
55
  }
42
- /** A data-driven channel value, emitted by `datum(v)` / `v(...)`. */
43
- export interface GofishDatumValue {
44
- type: "datum";
45
- datum?: unknown;
46
- offset?: number;
47
- [key: string]: unknown;
56
+ /** One source row, or the rows of an aggregate mark. Provenance, not a binding. */
57
+ export type GofishDisplayDatum = Record<string, unknown> | Array<Record<string, unknown>>;
58
+ export interface GofishDisplayItemBase {
59
+ style?: GofishDisplayStyle;
60
+ datum?: GofishDisplayDatum;
61
+ /** `"node"` (data-bearing) or `"overlay"` (chrome). Defaults to `"node"`. */
62
+ role?: "node" | "overlay";
63
+ id?: string;
48
64
  }
49
- /** The right-hand side of a mark or operator channel (`h: …`, `fill: …`). */
50
- export type GofishChannelValue = string | number | boolean | null | GofishFieldAccessor | GofishDatumValue | {
51
- __gofish_lambda: string;
52
- };
53
- export interface GofishOperatorIR {
54
- type: string;
55
- by?: string;
56
- dir?: "x" | "y";
57
- x?: GofishChannelValue;
58
- y?: GofishChannelValue;
59
- spacing?: number | [number, number];
60
- [key: string]: unknown;
65
+ export interface GofishRectItem extends GofishDisplayItemBase {
66
+ kind: "rect";
67
+ x: number;
68
+ y: number;
69
+ w: number;
70
+ h: number;
71
+ rx?: number;
72
+ ry?: number;
61
73
  }
62
- export interface GofishMarkIR {
63
- type: string;
64
- __combinator?: true;
65
- children?: GofishMarkIR[];
66
- source?: GofishMarkIR;
67
- options?: Record<string, unknown>;
68
- origin?: {
69
- name?: string;
70
- };
71
- name?: string;
72
- [key: string]: unknown;
74
+ export interface GofishEllipseItem extends GofishDisplayItemBase {
75
+ kind: "ellipse";
76
+ cx: number;
77
+ cy: number;
78
+ rx: number;
79
+ ry: number;
73
80
  }
74
- export interface GofishChartIR {
75
- type: "chart";
76
- data?: GofishDataIR | null;
77
- operators?: GofishOperatorIR[];
78
- mark: GofishMarkIR;
79
- options?: Record<string, unknown>;
80
- connect?: GofishMarkIR;
81
- name?: string;
81
+ export interface GofishPathItem extends GofishDisplayItemBase {
82
+ kind: "path";
83
+ /** SVG path data in absolute pixels (coordinate transform already applied). */
84
+ d: string;
82
85
  }
83
- export interface GofishLayerIR {
84
- type: "layer";
85
- charts: GofishChartIR[];
86
- options?: Record<string, unknown>;
86
+ export interface GofishTextItem extends GofishDisplayItemBase {
87
+ kind: "text";
88
+ x: number;
89
+ y: number;
90
+ text: string;
91
+ fontSize?: number;
92
+ fontFamily?: string;
93
+ textAnchor?: "start" | "middle" | "end";
94
+ dominantBaseline?: "auto" | "central" | "middle" | "hanging" | "mathematical";
95
+ /** Rotation in degrees about `(x, y)` (SVG `rotate(deg, x, y)` convention). */
96
+ rotate?: number;
87
97
  }
88
- export interface GofishRawMarkIR {
89
- type: "raw-mark";
90
- mark: GofishMarkIR;
91
- options?: Record<string, unknown>;
98
+ export interface GofishImageItem extends GofishDisplayItemBase {
99
+ kind: "image";
100
+ x: number;
101
+ y: number;
102
+ w: number;
103
+ h: number;
104
+ href: string;
105
+ preserveAspectRatio?: string;
92
106
  }
93
- export type GofishDataIR = {
94
- type: "inline";
95
- rows: Array<Record<string, unknown>>;
96
- } | {
97
- type: "select";
98
- layer: string;
99
- mode?: "one" | "all";
100
- } | {
101
- type: "external";
102
- id?: string;
103
- };
104
- export type GofishRootIR = GofishChartIR | GofishLayerIR | GofishRawMarkIR;
105
- export interface GofishIRDocument {
107
+ export interface GofishGroupItem extends GofishDisplayItemBase {
108
+ kind: "group";
109
+ transform: {
110
+ translate?: [number, number];
111
+ scale?: [number, number];
112
+ };
113
+ children: GofishDisplayItem[];
114
+ }
115
+ export interface GofishCompositeItem extends GofishDisplayItemBase {
116
+ kind: "composite";
117
+ operator: "over" | "atop" | "in" | "out" | "xor";
118
+ blendMode?: string;
119
+ bbox: {
120
+ x: number;
121
+ y: number;
122
+ w: number;
123
+ h: number;
124
+ };
125
+ source: GofishDisplayItem[];
126
+ dest: GofishDisplayItem[];
127
+ }
128
+ export interface GofishMaskItem extends GofishDisplayItemBase {
129
+ kind: "mask";
130
+ bbox: {
131
+ x: number;
132
+ y: number;
133
+ w: number;
134
+ h: number;
135
+ };
136
+ mask: GofishDisplayItem[];
137
+ content: GofishDisplayItem[];
138
+ }
139
+ export type GofishDisplayItem = GofishRectItem | GofishEllipseItem | GofishPathItem | GofishTextItem | GofishImageItem | GofishGroupItem | GofishCompositeItem | GofishMaskItem;
140
+ export interface GofishDisplayListDocument {
106
141
  irVersion: number;
107
142
  ir: string;
108
143
  $schema?: string;
109
- root: GofishRootIR;
144
+ viewport: {
145
+ w: number;
146
+ h: number;
147
+ };
148
+ items: GofishDisplayItem[];
110
149
  }
111
- export type GofishChartFamily = "xy" | "network" | "ordinal";
112
- export type GofishRecipeName =
113
- /** XY / ordinal charts are produced by the IR interpreter, not a named recipe. */
114
- "gofishInterpreter"
115
- /** The Python Tutor memory diagram is a bespoke network glyph (chart-level escape hatch). */
116
- | "gofishPythonTutorNetworkLayout";
117
150
  /**
118
- * The translated chart, spreadable into `XYCustomChart` / `NetworkCustomChart`.
119
- * Mirrors `fromVegaLite`'s `{ component, props, warnings }` for the
120
- * custom-layout surface.
151
+ * The translated chart, spreadable into `NetworkCustomChart`. Mirrors
152
+ * `fromVegaLite`'s `{ component, props, warnings }` for the custom-layout
153
+ * surface — a baked display list is always scale-free, so the family is fixed.
121
154
  */
122
155
  export interface GofishChartConfig {
123
- family: GofishChartFamily;
124
- /** Which `gofish.tsx` recipe the IR resolved to. */
125
- recipe: GofishRecipeName;
126
- /** Layout function to pass as `layout` on `XYCustomChart` — null otherwise. */
127
- layout: CustomLayout<Record<string, unknown>> | null;
128
- /** Layout function to pass as `layout` on `NetworkCustomChart` — null otherwise. */
129
- networkLayout: NetworkCustomLayout<Record<string, unknown>> | null;
130
- /** Layout function to pass as `layout` on `OrdinalCustomChart` null otherwise. */
131
- ordinalLayout: OrdinalCustomLayout<Record<string, unknown>> | null;
132
- /** Accessor config derived from the IR; pass as `layoutConfig`. */
133
- layoutConfig: Record<string, unknown>;
134
- /** Category accessor for ordinal charts (the frame builds the o-scale from it). */
135
- categoryAccessor?: string;
136
- /** Value accessor for ordinal charts (the frame builds the r-scale from it). */
137
- valueAccessor?: string;
138
- /** Inline data to seed the chart (`data` / `pushMany`). Empty for network. */
139
- data: Datum[];
140
- /** Node/edge graph for `NetworkCustomChart` (memory diagram only). */
141
- graph: {
142
- nodes: Datum[];
143
- edges: Datum[];
144
- } | null;
156
+ /** Always `"network"`: absolute-pixel primitives have no data scales. */
157
+ family: "network";
158
+ /** Pass as `layout` on `NetworkCustomChart`. */
159
+ networkLayout: NetworkCustomLayout<{
160
+ displayList?: GofishDisplayListDocument;
161
+ }>;
162
+ /**
163
+ * Pass as `layoutConfig`. Carries the document so a host can swap the baked
164
+ * list through `layoutConfig` (the cheap re-render path) without re-ingesting
165
+ * the `nodes` topology.
166
+ */
167
+ layoutConfig: {
168
+ displayList: GofishDisplayListDocument;
169
+ };
170
+ /** Row data from `role:"node"` items — pass as `nodes` (seeds non-empty state + selection). */
171
+ nodes: Datum[];
172
+ /** A display list is a flat primitive list — no relational edges. */
173
+ edges: Datum[];
174
+ /**
175
+ * The viewport this list was solved at. Use as the chart `width`/`height`
176
+ * (with `margin={0}`); the geometry is only valid at this size.
177
+ */
178
+ width: number;
179
+ height: number;
145
180
  irVersion: number;
146
181
  warnings?: string[];
147
182
  }
148
183
  export interface FromGofishIROptions {
149
- /** Force a frame family instead of inferring it. */
150
- family?: GofishChartFamily;
151
- /** Per-call `derive`/`mark-fn` lambda overrides (merged over the registry). */
152
- lambdas?: Record<string, GofishLambda>;
184
+ /**
185
+ * Override the document carried in `layoutConfig` (rarely needed — the
186
+ * returned `layoutConfig.displayList` already holds the parsed document).
187
+ */
188
+ displayList?: GofishDisplayListDocument;
153
189
  }
154
190
  /**
155
- * Translate a GoFish Frontend IR document into a Semiotic custom-layout config
156
- * by *interpreting* the spec.
191
+ * Translate a GoFish DisplayList document into a Semiotic custom-layout config
192
+ * for `NetworkCustomChart`.
157
193
  *
158
194
  * @example
159
195
  * ```tsx
160
196
  * import { unstable_fromGofishIR } from "semiotic/experimental"
161
- * import { XYCustomChart } from "semiotic/xy"
197
+ * import { NetworkCustomChart } from "semiotic/network"
198
+ *
199
+ * // In a host, the document comes from GoFish's layout pass:
200
+ * // const doc = await chart(data).flow(...).mark(...).toDisplayList({ w, h })
201
+ * const cfg = unstable_fromGofishIR(doc)
162
202
  *
163
- * const cfg = unstable_fromGofishIR(flowerIR)
164
- * <XYCustomChart data={cfg.data} layout={cfg.layout} />
203
+ * <NetworkCustomChart
204
+ * nodes={cfg.nodes}
205
+ * layout={cfg.networkLayout}
206
+ * layoutConfig={cfg.layoutConfig}
207
+ * width={cfg.width}
208
+ * height={cfg.height}
209
+ * margin={0}
210
+ * />
165
211
  * ```
166
212
  */
167
- export declare function unstable_fromGofishIR(doc: GofishIRDocument, options?: FromGofishIROptions): GofishChartConfig;
213
+ export declare function unstable_fromGofishIR(doc: GofishDisplayListDocument, options?: FromGofishIROptions): GofishChartConfig;
168
214
  /** @deprecated Internal compatibility alias for the temporary GoFish PR preview. */
169
215
  export declare const fromGofishIR: typeof unstable_fromGofishIR;
@@ -1,89 +1,38 @@
1
- import type { GofishIRDocument } from "./gofishIR";
2
- /** The Python Tutor heap/stack snapshot, inlined as a single IR data row. */
3
- export declare const pythonTutorDiagramRow: {
4
- kind: string;
5
- stack: ({
6
- name: string;
7
- value: {
8
- pointer: number;
9
- };
10
- } | {
11
- name: string;
12
- value: string;
13
- })[];
14
- heap: {
15
- values: (string | {
16
- pointer: number;
17
- })[];
18
- }[];
19
- heapArrangement: (number | null)[][];
20
- };
1
+ import type { GofishDisplayListDocument } from "./gofishIR";
2
+ import { gofishDisplayListExamples as generatedExamples } from "./gofishDisplayListFixtures.generated";
21
3
  /**
22
- * Deterministic Titanic passenger sample (no RNG), mirroring the docs page so
23
- * the IR document is self-contained. Kept modest per class so the inline rows
24
- * stay reasonable to ship and display.
25
- */
26
- export declare function buildTitanicSampleRows(): Array<Record<string, unknown>>;
27
- /**
28
- * A meadow: one green stem per lake (a `scatter` placing each lake's bar at its
29
- * x), topped by a polar fan of species petals. Single-chart form so the
30
- * interpreter renders it directly: `scatter(by:lake)` → per lake a `layer` of
31
- * a stem `rect` (height = summed catch) and a `polar` `stack` of `petal`s
32
- * around the angle axis.
33
- */
34
- export declare const flowerIR: GofishIRDocument;
35
- /**
36
- * A row of pictorial bottles, one per category, each filled to its `amount`
37
- * percentage. Grammar-first with one `derive`: `bottleGeometry` emits the
38
- * per-bottle normalized geometry under `_b`; the marks render it with the
39
- * reusable `image` + clip primitives — an `image` of the bottle silhouette, a
40
- * green fill `rect` clipped to that silhouette, a fill line, a percentage
41
- * label, a category label, and a transparent hit rect carrying the datum.
42
- */
43
- export declare const bottleIR: GofishIRDocument;
44
- /**
45
- * Stacked species bars laid out radially per lake (polar coord), with one
46
- * cross-lake ribbon per species connecting the matching segments.
47
- */
48
- export declare const polarRibbonIR: GofishIRDocument;
49
- /**
50
- * A bar chart that's treemap-filled and circle-filled: a `spread` lays one
51
- * equal-width bar per passenger class whose HEIGHT encodes the class's total
52
- * fare (`sizeBy`), and that bar rectangle becomes a squarified `treemap` of its
53
- * passengers — every fare-sized cell rendered as an inscribed circle coloured
54
- * by survival.
55
- */
56
- export declare const titanicCircleTreemapIR: GofishIRDocument;
57
- /**
58
- * A Python Tutor runtime memory diagram: a global frame of variable bindings
59
- * whose pointers arrow into a heap of linked tuples. Encoded as a `layer` of a
60
- * `spread` (frame + heap) plus `arrow` connectors over `ref`s; the snapshot
61
- * itself travels as a single inline data row consumed by the network recipe.
62
- */
63
- export declare const pythonMemoryIR: GofishIRDocument;
64
- /**
65
- * A boba-shop menu: four bubble-tea drinks spread along the category axis, each
66
- * fully data-driven. Per drink, the tea + tapioca + ice volumes (plus the
67
- * cup-size parameters) add up to a total volume that determines the drink
68
- * height; the pearls stack at the bottom and the ice floats at the surface — so
69
- * "Extra Boba" grows a taller pearl bed, "Light Ice" reads as mostly tea, and
70
- * "Mega" is a bigger cup of everything.
4
+ * Canonical GoFish **DisplayList** documents for the adapter gallery.
5
+ *
6
+ * Most are *real* baked render-IR documents — the output of `gofish-graphics`'
7
+ * `toDisplayList({ w, h })` layout pass — generated by
8
+ * `scripts/gen-gofish-fixtures.ts` and checked in so the adapter tests and the
9
+ * `/interoperability/gofish` page stay deterministic and never depend on the
10
+ * GoFish nightly at runtime. Each stands in for what a host gets by calling
11
+ * `await spec.toDisplayList({ w, h })`.
12
+ *
13
+ * The one exception is **boba**, which is *hand-written* (`gofishBobaHandwritten.ts`,
14
+ * no `gofish-graphics` at all) — the counter-proof that the DisplayList is an
15
+ * open, host-emittable format, not something only GoFish can produce.
71
16
  *
72
- * Grammar-first, per the "follow the spec as far as it can" rule: the cup, tea,
73
- * straw, and lid are real `polygon`/`line` marks and the pearls/ice are real
74
- * `circle`/`rect` marks. The one genuinely non-grammar step — the
75
- * frustum-volume → drink-height solve and tapioca/ice packing — lives in a
76
- * single `derive` lambda (`bobaGeometry`) that emits each cup's geometry the
77
- * marks read (`_g.*`) plus a shared `_g.box` aspect for the `uniform` unit fit,
78
- * so the cups sit on one shelf with aligned straws. Derived from Krist
79
- * Wongsuphasawat's "Boba Science" notebook. Routed to the ordinal frame.
17
+ * Regenerate the baked set after a GoFish bump with:
18
+ * `node --experimental-strip-types scripts/gen-gofish-fixtures.ts --write`
80
19
  */
81
- export declare const bobaIR: GofishIRDocument;
20
+ export declare const flowerIR: GofishDisplayListDocument;
21
+ export declare const polarribbonIR: GofishDisplayListDocument;
22
+ export declare const treemapIR: GofishDisplayListDocument;
23
+ export declare const bottleIR: GofishDisplayListDocument;
24
+ export declare const bobaIR: GofishDisplayListDocument;
25
+ export declare const pythonIR: GofishDisplayListDocument;
82
26
  export interface GofishIRExample {
83
- key: "flower" | "bottle" | "polar" | "titanic" | "python" | "boba";
27
+ /** Generated keys (derived so new baked fixtures never drift this) plus the hand-written `boba`. */
28
+ key: (typeof generatedExamples)[number]["key"] | "boba";
84
29
  label: string;
85
- doc: GofishIRDocument;
30
+ doc: GofishDisplayListDocument;
31
+ /** A one-line note on what the document demonstrates. */
32
+ blurb: string;
33
+ /** The upstream example this mirrors. */
86
34
  source: string;
35
+ /** True for the hand-emitted document (no GoFish bake). */
36
+ handWritten?: boolean;
87
37
  }
88
- /** All five examples, in gallery order. */
89
38
  export declare const gofishIRExamples: readonly GofishIRExample[];
@@ -0,0 +1,87 @@
1
+ import type { OrdinalCustomLayout } from "../stream/ordinalCustomLayout";
2
+ import type { Datum } from "../charts/shared/datumTypes";
3
+ /**
4
+ * `intervalLanesLayout` — a Gantt / swimlane timeline as an `OrdinalCustomChart`
5
+ * layout. Each ordinal **lane** holds events that occupy a `[start, end]` span on
6
+ * a shared time axis; concurrent events within a lane are packed into stacked
7
+ * sub-tracks ({@link packIntervals}). The recipe emits one real, hit-tested,
8
+ * theme-colored rect per event (so every bar inherits keyboard nav, tooltips,
9
+ * selection, and transitions) and draws lane labels, optional period bands, and
10
+ * a time axis in `overlays`.
11
+ *
12
+ * Sibling to `flextreeLayout` / `dagreLayout`. The complement to a
13
+ * concurrency line — see {@link activeCountOverDomain}.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { OrdinalCustomChart } from "semiotic/ordinal"
18
+ * import { intervalLanesLayout } from "semiotic/recipes"
19
+ *
20
+ * <OrdinalCustomChart
21
+ * data={wars}
22
+ * layout={intervalLanesLayout}
23
+ * categoryAccessor="sphere"
24
+ * valueAccessor="startYear"
25
+ * oExtent={SPHERES}
26
+ * layoutConfig={{
27
+ * laneAccessor: "sphere", startAccessor: "startYear", endAccessor: "endYear",
28
+ * domain: [1775, 2015], unit: 1, color: (d, lane) => COLORS[lane],
29
+ * axisTicks: [1800, 1850, 1900, 1950, 2000],
30
+ * }}
31
+ * width={900} height={620}
32
+ * />
33
+ * ```
34
+ */
35
+ export interface IntervalLanesConfig<T = Datum> {
36
+ /** Which lane each record belongs to. */
37
+ laneAccessor: string | ((d: T) => string);
38
+ /** Interval start, in the same units as `domain`. */
39
+ startAccessor: string | ((d: T) => number);
40
+ /** Interval end, in the same units as `domain`. */
41
+ endAccessor: string | ((d: T) => number);
42
+ /** `[min, max]` of the time axis. */
43
+ domain: [number, number];
44
+ /** Lane order. @default the chart's `o` scale domain (its `oExtent`), else the
45
+ * distinct lane values in first-seen order. */
46
+ lanes?: string[];
47
+ /** Per-record fill. @default `ctx.resolveColor(lane)`. */
48
+ color?: (d: T, lane: string) => string;
49
+ /** Stable id per record → bar transition identity. @default none */
50
+ idAccessor?: string | ((d: T) => string);
51
+ /** Extend each bar this many domain units past `end`, so inclusive whole-unit
52
+ * intervals (e.g. years) fill their final unit. @default 0 */
53
+ unit?: number;
54
+ /** Vertical gap between stacked sub-tracks, px. @default 1.5 */
55
+ barGap?: number;
56
+ /** Minimum rendered interval width, px. Keeps zero- and short-duration
57
+ * events visible and hoverable on long domains. @default 2 */
58
+ minBarWidth?: number;
59
+ /** @default 3.5 */
60
+ minBarHeight?: number;
61
+ /** @default 10 */
62
+ maxBarHeight?: number;
63
+ /** Vertical padding inside each lane, px. @default 7 */
64
+ lanePadding?: number;
65
+ /** Bar corner radius, px. @default 2 */
66
+ cornerRadius?: number;
67
+ /** Reserve this many px at the bottom (for a caller-drawn strip, e.g. a
68
+ * concurrency line). Lanes fill the remaining height. @default 0 */
69
+ bottomInset?: number;
70
+ /** Draw a label to the left of each lane. @default true */
71
+ showLaneLabels?: boolean;
72
+ /** Gap between the plot's left edge and lane labels, px. @default 12 */
73
+ laneLabelGap?: number;
74
+ /** Alternating background period bands across the full plot height. */
75
+ periods?: Array<{
76
+ start: number;
77
+ end: number;
78
+ name?: string;
79
+ }>;
80
+ /** Draw a top time axis with gridlines. @default true */
81
+ showAxis?: boolean;
82
+ /** Explicit axis tick values. @default ~7 evenly-spaced across `domain`. */
83
+ axisTicks?: number[];
84
+ /** Format axis tick labels. @default `String` */
85
+ tickFormat?: (v: number) => string;
86
+ }
87
+ export declare const intervalLanesLayout: OrdinalCustomLayout<IntervalLanesConfig>;
@@ -0,0 +1,80 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ /**
3
+ * Interval (Gantt/timeline) packing + temporal-density helpers — the generic
4
+ * geometry behind any "events that overlap in time" view. A swimlane/Gantt
5
+ * layout packs concurrent intervals into sub-tracks; its natural companion is a
6
+ * concurrency line counting how many intervals are active over the domain.
7
+ *
8
+ * Pure / SSR-safe. Accessors may be a field name or a function.
9
+ */
10
+ type Accessor<T> = string | ((item: T) => number);
11
+ export interface PackedInterval<T> {
12
+ /** The original item. */
13
+ item: T;
14
+ /** Zero-based sub-track index the greedy packer assigned. Concurrent
15
+ * intervals get distinct tracks; non-overlapping intervals reuse a track. */
16
+ track: number;
17
+ }
18
+ export interface PackIntervalsResult<T> {
19
+ /** Each input item paired with its assigned sub-track. Input order preserved
20
+ * unless `sort` is left on (the default), which sorts by start ascending. */
21
+ packed: PackedInterval<T>[];
22
+ /** Number of sub-tracks used — the lane needs this many rows. */
23
+ trackCount: number;
24
+ }
25
+ export interface PackIntervalsOptions<T> {
26
+ /** Interval start accessor. @default `"start"` */
27
+ start?: Accessor<T>;
28
+ /** Interval end accessor. @default `"end"` */
29
+ end?: Accessor<T>;
30
+ /** Sort by start ascending (then longest-first) before packing — the stable,
31
+ * gap-minimizing order. Set `false` if the input is already ordered and you
32
+ * want that order preserved. @default true */
33
+ sort?: boolean;
34
+ }
35
+ /**
36
+ * Greedy interval packing: assign each interval to the first sub-track whose
37
+ * last interval has already ended, otherwise open a new track. The textbook
38
+ * Gantt/swimlane packer. O(n·tracks).
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const { packed, trackCount } = packIntervals(wars, { start: "startTime", end: "endTime" })
43
+ * // bar y = laneTop + track * (barHeight + gap)
44
+ * ```
45
+ */
46
+ export declare function packIntervals<T = Datum>(items: readonly T[], options?: PackIntervalsOptions<T>): PackIntervalsResult<T>;
47
+ export interface ActiveCount {
48
+ /** Domain position (e.g. a year). */
49
+ value: number;
50
+ /** Number of intervals active at this position. */
51
+ count: number;
52
+ }
53
+ export interface ActiveCountOptions<T> {
54
+ /** Interval start accessor. @default `"start"` */
55
+ start?: Accessor<T>;
56
+ /** Interval end accessor. @default `"end"` */
57
+ end?: Accessor<T>;
58
+ /** `[min, max]` domain to sample across (inclusive of both ends). */
59
+ domain: [number, number];
60
+ /** Sample spacing. @default 1 */
61
+ step?: number;
62
+ /** Count an interval active at position `v` when `start <= v <= end`
63
+ * (`"closed"`, the default — natural for whole-unit intervals like years),
64
+ * or when `start <= v < end` (`"half-open"`). @default "closed" */
65
+ bounds?: "closed" | "half-open";
66
+ }
67
+ /**
68
+ * Count how many intervals are active at each sampled position across a domain —
69
+ * the concurrency series you draw as a step line beneath packed interval lanes.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const counts = activeCountOverDomain(wars, {
74
+ * start: "startYear", end: "endYear", domain: [1775, 2015],
75
+ * })
76
+ * // → [{ value: 1775, count: 1 }, { value: 1776, count: 2 }, ...]
77
+ * ```
78
+ */
79
+ export declare function activeCountOverDomain<T = Datum>(items: readonly T[], options: ActiveCountOptions<T>): ActiveCount[];
80
+ export {};