semiotic 3.7.5 → 3.8.1

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 (575) hide show
  1. package/CLAUDE.md +63 -18
  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 +1741 -163
  7. package/ai/examples.md +174 -0
  8. package/ai/schema.json +2733 -536
  9. package/ai/surface-manifest.json +201 -0
  10. package/ai/system-prompt.md +20 -4
  11. package/dist/__tests__/scenarios/mcpProtocolTypes.d.ts +20 -0
  12. package/dist/components/AccessibleNavTree.d.ts +7 -1
  13. package/dist/components/CategoryColors.d.ts +1 -1
  14. package/dist/components/ChartContainer.d.ts +91 -0
  15. package/dist/components/ChartGrid.d.ts +11 -1
  16. package/dist/components/CircularBrush.d.ts +61 -0
  17. package/dist/components/ContextLayout.d.ts +5 -1
  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 +26 -1
  29. package/dist/components/ai/chartClinic.d.ts +91 -0
  30. package/dist/components/ai/chartClinicMetadata.generated.d.ts +15 -0
  31. package/dist/components/ai/chartRecipeRegistry.d.ts +14 -0
  32. package/dist/components/ai/chartRecipes.d.ts +278 -0
  33. package/dist/components/ai/dataPitfallsBridge.d.ts +102 -0
  34. package/dist/components/ai/describeChart.d.ts +7 -0
  35. package/dist/components/ai/describeRecipeChart.d.ts +16 -0
  36. package/dist/components/ai/generativeChart.d.ts +28 -3
  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/ai/useNavigationSync.d.ts +17 -2
  47. package/dist/components/chartContainerMobile.d.ts +9 -0
  48. package/dist/components/charts/custom/GeoCustomChart.d.ts +48 -0
  49. package/dist/components/charts/custom/NetworkCustomChart.d.ts +8 -2
  50. package/dist/components/charts/custom/OrdinalCustomChart.d.ts +8 -2
  51. package/dist/components/charts/custom/XYCustomChart.d.ts +11 -2
  52. package/dist/components/charts/geo/ChoroplethMap.d.ts +19 -2
  53. package/dist/components/charts/geo/DistanceCartogram.d.ts +15 -3
  54. package/dist/components/charts/geo/FlowMap.d.ts +11 -7
  55. package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +15 -3
  56. package/dist/components/charts/geo/index.d.ts +2 -0
  57. package/dist/components/charts/index.d.ts +35 -1
  58. package/dist/components/charts/network/ChordDiagram.d.ts +10 -2
  59. package/dist/components/charts/network/CirclePack.d.ts +1 -1
  60. package/dist/components/charts/network/ForceDirectedGraph.d.ts +26 -5
  61. package/dist/components/charts/network/OrbitDiagram.d.ts +1 -1
  62. package/dist/components/charts/network/ProcessSankey.d.ts +1 -1
  63. package/dist/components/charts/network/SankeyDiagram.d.ts +10 -2
  64. package/dist/components/charts/network/TreeDiagram.d.ts +1 -1
  65. package/dist/components/charts/network/Treemap.d.ts +1 -1
  66. package/dist/components/charts/network/useForceLayout.d.ts +17 -0
  67. package/dist/components/charts/ordinal/BarChart.d.ts +22 -1
  68. package/dist/components/charts/ordinal/BoxPlot.d.ts +1 -1
  69. package/dist/components/charts/ordinal/DonutChart.d.ts +1 -1
  70. package/dist/components/charts/ordinal/DotPlot.d.ts +1 -1
  71. package/dist/components/charts/ordinal/FunnelChart.d.ts +1 -1
  72. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +12 -1
  73. package/dist/components/charts/ordinal/Histogram.d.ts +1 -1
  74. package/dist/components/charts/ordinal/PieChart.d.ts +1 -1
  75. package/dist/components/charts/ordinal/RidgelinePlot.d.ts +1 -1
  76. package/dist/components/charts/ordinal/StackedBarChart.d.ts +12 -1
  77. package/dist/components/charts/ordinal/SwarmPlot.d.ts +1 -1
  78. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +1 -1
  79. package/dist/components/charts/ordinal/ViolinPlot.d.ts +1 -1
  80. package/dist/components/charts/physics/ChainReactionChart.d.ts +9 -0
  81. package/dist/components/charts/physics/CollisionSwarmChart.capability.d.ts +2 -0
  82. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +54 -0
  83. package/dist/components/charts/physics/EventDropChart.capability.d.ts +2 -0
  84. package/dist/components/charts/physics/EventDropChart.d.ts +60 -0
  85. package/dist/components/charts/physics/GaltonBoardChart.capability.d.ts +2 -0
  86. package/dist/components/charts/physics/GaltonBoardChart.d.ts +74 -0
  87. package/dist/components/charts/physics/GauntletChart.capability.d.ts +2 -0
  88. package/dist/components/charts/physics/GauntletChart.d.ts +73 -0
  89. package/dist/components/charts/physics/PhysicalFlowChart.capability.d.ts +2 -0
  90. package/dist/components/charts/physics/PhysicalFlowChart.d.ts +63 -0
  91. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +99 -0
  92. package/dist/components/charts/physics/PhysicsPileChart.capability.d.ts +2 -0
  93. package/dist/components/charts/physics/PhysicsPileChart.d.ts +60 -0
  94. package/dist/components/charts/physics/ProcessFlowChart.capability.d.ts +2 -0
  95. package/dist/components/charts/physics/ProcessFlowChart.d.ts +96 -0
  96. package/dist/components/charts/physics/chainReactionOverlay.d.ts +22 -0
  97. package/dist/components/charts/physics/chainReactionRuntime.d.ts +37 -0
  98. package/dist/components/charts/physics/chainReactionTypes.d.ts +97 -0
  99. package/dist/components/charts/physics/collisionSwarmPhysics.d.ts +27 -0
  100. package/dist/components/charts/physics/dependencyMachine.d.ts +188 -0
  101. package/dist/components/charts/physics/eventDropPhysics.d.ts +64 -0
  102. package/dist/components/charts/physics/galtonBoardPhysics.d.ts +28 -0
  103. package/dist/components/charts/physics/gauntletChartProps.d.ts +67 -0
  104. package/dist/components/charts/physics/gauntletChrome.d.ts +33 -0
  105. package/dist/components/charts/physics/gauntletController.d.ts +73 -0
  106. package/dist/components/charts/physics/gauntletEffects.d.ts +36 -0
  107. package/dist/components/charts/physics/gauntletPhysics.d.ts +71 -0
  108. package/dist/components/charts/physics/gauntletRuntime.d.ts +42 -0
  109. package/dist/components/charts/physics/gauntletTypes.d.ts +213 -0
  110. package/dist/components/charts/physics/physicalFlowPhysics.d.ts +57 -0
  111. package/dist/components/charts/physics/physicsChartShared.d.ts +57 -0
  112. package/dist/components/charts/physics/physicsChartUtils.d.ts +18 -0
  113. package/dist/components/charts/physics/physicsCustomLayout.d.ts +32 -0
  114. package/dist/components/charts/physics/physicsEncoding.d.ts +142 -0
  115. package/dist/components/charts/physics/physicsHocHandle.d.ts +53 -0
  116. package/dist/components/charts/physics/physicsHocUtils.d.ts +128 -0
  117. package/dist/components/charts/physics/physicsPilePhysics.d.ts +41 -0
  118. package/dist/components/charts/physics/physicsProcessPrimitives.d.ts +38 -0
  119. package/dist/components/charts/physics/processFlowPhysics.d.ts +97 -0
  120. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +9 -1
  121. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +9 -1
  122. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +9 -1
  123. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +16 -2
  124. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +9 -1
  125. package/dist/components/charts/shared/AnnotationLabel.d.ts +88 -0
  126. package/dist/components/charts/shared/annotationActivation.d.ts +35 -0
  127. package/dist/components/charts/shared/annotationLabelLayout.d.ts +5 -0
  128. package/dist/components/charts/shared/annotationRules.d.ts +2 -1
  129. package/dist/components/charts/shared/auditMobileVisualization.d.ts +91 -0
  130. package/dist/components/charts/shared/chartDefinitionPilot.d.ts +145 -0
  131. package/dist/components/charts/shared/chartFamilySets.d.ts +20 -0
  132. package/dist/components/charts/shared/chartSelectionUtils.d.ts +4 -0
  133. package/dist/components/charts/shared/chartSpecCore.d.ts +165 -0
  134. package/dist/components/charts/shared/chartSpecs.d.ts +8 -127
  135. package/dist/components/charts/shared/chartSpecsGeo.d.ts +2 -0
  136. package/dist/components/charts/shared/chartSpecsNetwork.d.ts +2 -0
  137. package/dist/components/charts/shared/chartSpecsOrdinal.d.ts +2 -0
  138. package/dist/components/charts/shared/chartSpecsPhysics.d.ts +2 -0
  139. package/dist/components/charts/shared/chartSpecsRealtime.d.ts +2 -0
  140. package/dist/components/charts/shared/chartSpecsValue.d.ts +2 -0
  141. package/dist/components/charts/shared/chartSpecsXY.d.ts +2 -0
  142. package/dist/components/charts/shared/colorContrast.d.ts +3 -0
  143. package/dist/components/charts/shared/colorUtils.d.ts +16 -1
  144. package/dist/components/charts/shared/datumTypes.d.ts +2 -0
  145. package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +6 -0
  146. package/dist/components/charts/shared/diagnoseConfig.d.ts +9 -14
  147. package/dist/components/charts/shared/diagnoseMisleadingChecks.d.ts +9 -0
  148. package/dist/components/charts/shared/diagnosePhysicsChecks.d.ts +3 -0
  149. package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
  150. package/dist/components/charts/shared/formatUtils.d.ts +3 -3
  151. package/dist/components/charts/shared/hatchFill.d.ts +87 -0
  152. package/dist/components/charts/shared/hooks.d.ts +34 -10
  153. package/dist/components/charts/shared/knownChartComponents.d.ts +9 -0
  154. package/dist/components/charts/shared/leastSquaresRegression.d.ts +16 -0
  155. package/dist/components/charts/shared/mergeShapeStyle.d.ts +3 -2
  156. package/dist/components/charts/shared/motionEncoding.d.ts +145 -0
  157. package/dist/components/charts/shared/responsiveRules.d.ts +56 -0
  158. package/dist/components/charts/shared/semanticInteractions.d.ts +42 -0
  159. package/dist/components/charts/shared/sparseArray.d.ts +1 -1
  160. package/dist/components/charts/shared/streamPropsHelpers.d.ts +17 -5
  161. package/dist/components/charts/shared/styleRules.d.ts +205 -0
  162. package/dist/components/charts/shared/temporalStrings.d.ts +7 -0
  163. package/dist/components/charts/shared/tooltipUtils.d.ts +22 -9
  164. package/dist/components/charts/shared/types.d.ts +58 -7
  165. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +16 -2
  166. package/dist/components/charts/shared/useChartSetup.d.ts +11 -4
  167. package/dist/components/charts/shared/useCustomChartSetup.d.ts +17 -5
  168. package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -2
  169. package/dist/components/charts/shared/useLikertAggregation.d.ts +4 -4
  170. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +6 -2
  171. package/dist/components/charts/shared/useOrdinalBrush.d.ts +2 -1
  172. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +25 -2
  173. package/dist/components/charts/shared/useStreamingLegend.d.ts +2 -2
  174. package/dist/components/charts/shared/useSyncedPushData.d.ts +49 -0
  175. package/dist/components/charts/shared/useXYLineStyle.d.ts +10 -0
  176. package/dist/components/charts/shared/useXYPointStyle.d.ts +19 -1
  177. package/dist/components/charts/shared/validateChartData.d.ts +7 -5
  178. package/dist/components/charts/shared/validationMap.d.ts +7 -9
  179. package/dist/components/charts/shared/validationMap.generated.d.ts +6 -0
  180. package/dist/components/charts/shared/withChartWrapper.d.ts +4 -3
  181. package/dist/components/charts/value/targetPresentation.d.ts +22 -0
  182. package/dist/components/charts/value/types.d.ts +5 -6
  183. package/dist/components/charts/xy/AreaChart.d.ts +9 -1
  184. package/dist/components/charts/xy/BubbleChart.d.ts +10 -1
  185. package/dist/components/charts/xy/ConnectedScatterplot.d.ts +7 -0
  186. package/dist/components/charts/xy/DifferenceChart.d.ts +1 -52
  187. package/dist/components/charts/xy/Heatmap.d.ts +2 -2
  188. package/dist/components/charts/xy/LineChart.d.ts +12 -1
  189. package/dist/components/charts/xy/MinimapChart.d.ts +1 -1
  190. package/dist/components/charts/xy/MultiAxisLineChart.d.ts +2 -2
  191. package/dist/components/charts/xy/QuadrantChart.d.ts +8 -1
  192. package/dist/components/charts/xy/Scatterplot.d.ts +11 -1
  193. package/dist/components/charts/xy/ScatterplotMatrix.d.ts +11 -1
  194. package/dist/components/charts/xy/StackedAreaChart.d.ts +16 -4
  195. package/dist/components/charts/xy/differenceSegments.d.ts +49 -0
  196. package/dist/components/charts/xy/scatterplotMatrixInteractionTypes.d.ts +12 -0
  197. package/dist/components/controls/SentenceFilter.d.ts +97 -0
  198. package/dist/components/controls/controlAudit.d.ts +24 -0
  199. package/dist/components/controls/controlContract.d.ts +57 -0
  200. package/dist/components/data/fromFlintChart.d.ts +74 -0
  201. package/dist/components/data/fromVegaLite.d.ts +46 -9
  202. package/dist/components/data/portability/index.d.ts +6 -3
  203. package/dist/components/data/portability/result.d.ts +52 -0
  204. package/dist/components/data/portability/spec.d.ts +31 -0
  205. package/dist/components/data/portability/vegaLite.d.ts +24 -6
  206. package/dist/components/export/chartConfig.d.ts +11 -0
  207. package/dist/components/realtime/types.d.ts +11 -0
  208. package/dist/components/recipes/annotationLayout.d.ts +29 -0
  209. package/dist/components/recipes/axisFixedForce.d.ts +119 -0
  210. package/dist/components/recipes/{gofishBoba.d.ts → boba.d.ts} +2 -2
  211. package/dist/components/recipes/cyclical.d.ts +39 -0
  212. package/dist/components/recipes/edgeRouter.d.ts +103 -0
  213. package/dist/components/recipes/forceLayout.d.ts +48 -0
  214. package/dist/components/recipes/forceLayoutAsync.d.ts +17 -0
  215. package/dist/components/recipes/gofishBobaHandwritten.d.ts +3 -0
  216. package/dist/components/recipes/gofishDisplayListFixtures.generated.d.ts +37 -0
  217. package/dist/components/recipes/gofishIR.d.ts +178 -132
  218. package/dist/components/recipes/gofishIRExamples.d.ts +30 -81
  219. package/dist/components/recipes/intervalLanes.d.ts +87 -0
  220. package/dist/components/recipes/intervals.d.ts +80 -0
  221. package/dist/components/recipes/isometricLandmarks.d.ts +88 -0
  222. package/dist/components/recipes/isotypeGlyphs.d.ts +17 -0
  223. package/dist/components/recipes/mobileAnnotationStrategy.d.ts +48 -0
  224. package/dist/components/recipes/mobileChartFamilyRecipes.d.ts +59 -0
  225. package/dist/components/recipes/networkAnalysis.d.ts +102 -0
  226. package/dist/components/recipes/networkLayouts.d.ts +83 -0
  227. package/dist/components/recipes/physics.d.ts +122 -0
  228. package/dist/components/recipes/physicsReference.d.ts +102 -0
  229. package/dist/components/recipes/processAggregates.d.ts +32 -0
  230. package/dist/components/recipes/processChrome.d.ts +67 -0
  231. package/dist/components/recipes/processJourney.d.ts +54 -0
  232. package/dist/components/recipes/processPhysics.d.ts +300 -0
  233. package/dist/components/recipes/processVolumeGeometry.d.ts +28 -0
  234. package/dist/components/recipes/radialCoords.d.ts +69 -0
  235. package/dist/components/recipes/random.d.ts +2 -0
  236. package/dist/components/recipes/recipeChrome.d.ts +91 -0
  237. package/dist/components/recipes/recipeGlyph.d.ts +42 -0
  238. package/dist/components/recipes/recipeLegend.d.ts +53 -1
  239. package/dist/components/recipes/recipeUtils.d.ts +52 -0
  240. package/dist/components/recipes/runs.d.ts +59 -0
  241. package/dist/components/recipes/tokenEncoding.d.ts +157 -0
  242. package/dist/components/recipes/tokenLayer.d.ts +79 -0
  243. package/dist/components/recipes/unitize.d.ts +108 -0
  244. package/dist/components/recipes/vector.d.ts +28 -0
  245. package/dist/components/recipes/waffle.d.ts +43 -0
  246. package/dist/components/rough/createRoughRenderMode.d.ts +46 -0
  247. package/dist/components/semiotic-ai-core.d.ts +47 -0
  248. package/dist/components/semiotic-ai.d.ts +53 -9
  249. package/dist/components/semiotic-controls.d.ts +20 -0
  250. package/dist/components/semiotic-experimental.d.ts +38 -9
  251. package/dist/components/semiotic-geo.d.ts +15 -0
  252. package/dist/components/semiotic-network.d.ts +15 -0
  253. package/dist/components/semiotic-ordinal.d.ts +14 -0
  254. package/dist/components/semiotic-physics-matter.d.ts +10 -0
  255. package/dist/components/semiotic-physics-rapier.d.ts +9 -0
  256. package/dist/components/semiotic-physics.d.ts +60 -0
  257. package/dist/components/semiotic-realtime-core.d.ts +34 -0
  258. package/dist/components/semiotic-realtime-react.d.ts +10 -0
  259. package/dist/components/semiotic-realtime.d.ts +4 -30
  260. package/dist/components/semiotic-recipes-core.d.ts +92 -0
  261. package/dist/components/semiotic-recipes-react.d.ts +7 -0
  262. package/dist/components/semiotic-recipes.d.ts +4 -43
  263. package/dist/components/semiotic-rough.d.ts +4 -0
  264. package/dist/components/semiotic-server-edge.d.ts +8 -0
  265. package/dist/components/semiotic-server-node.d.ts +5 -0
  266. package/dist/components/semiotic-server.d.ts +2 -2
  267. package/dist/components/semiotic-themes-core.d.ts +53 -0
  268. package/dist/components/semiotic-themes-react.d.ts +4 -0
  269. package/dist/components/semiotic-themes.d.ts +6 -76
  270. package/dist/components/semiotic-utils-core.d.ts +50 -0
  271. package/dist/components/semiotic-utils-react.d.ts +5 -0
  272. package/dist/components/semiotic-utils.d.ts +3 -39
  273. package/dist/components/semiotic-xy.d.ts +12 -0
  274. package/dist/components/semiotic.d.ts +44 -8
  275. package/dist/components/server/animatedGif.d.ts +36 -0
  276. package/dist/components/server/optionalImageTypes.d.ts +37 -0
  277. package/dist/components/server/renderEvidence.d.ts +1 -1
  278. package/dist/components/server/renderToStaticSVG.d.ts +3 -35
  279. package/dist/components/server/serverChartConfigShared.d.ts +21 -0
  280. package/dist/components/server/serverChartConfigs.d.ts +22 -12
  281. package/dist/components/server/serverChartConfigsCustom.d.ts +5 -0
  282. package/dist/components/server/serverChartConfigsGeo.d.ts +9 -0
  283. package/dist/components/server/serverChartConfigsNetwork.d.ts +8 -0
  284. package/dist/components/server/serverChartConfigsOrdinal.d.ts +16 -0
  285. package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
  286. package/dist/components/server/serverChartConfigsXY.d.ts +11 -0
  287. package/dist/components/server/staticAnnotations.d.ts +6 -3
  288. package/dist/components/server/staticGeo.d.ts +4 -0
  289. package/dist/components/server/staticLegend.d.ts +2 -2
  290. package/dist/components/server/staticNetwork.d.ts +8 -0
  291. package/dist/components/server/staticOrdinal.d.ts +11 -0
  292. package/dist/components/server/staticPhysics.d.ts +3 -0
  293. package/dist/components/server/staticSVGChrome.d.ts +110 -0
  294. package/dist/components/server/staticXY.d.ts +4 -0
  295. package/dist/components/store/ObservationStore.d.ts +23 -2
  296. package/dist/components/store/themeSerialization.d.ts +32 -0
  297. package/dist/components/store/useChartInterrogation.d.ts +9 -0
  298. package/dist/components/stream/AccessibleDataTable.d.ts +7 -23
  299. package/dist/components/stream/AriaLiveTooltip.d.ts +9 -0
  300. package/dist/components/stream/CanvasHitTester.d.ts +4 -4
  301. package/dist/components/stream/DataSourceAdapter.d.ts +1 -1
  302. package/dist/components/stream/FocusRing.d.ts +4 -2
  303. package/dist/components/stream/FrameRuntime.d.ts +57 -0
  304. package/dist/components/stream/GeoCanvasHitTester.d.ts +1 -1
  305. package/dist/components/stream/GeoParticlePool.d.ts +1 -1
  306. package/dist/components/stream/GeoPipelineStore.d.ts +62 -3
  307. package/dist/components/stream/GeoSVGOverlay.d.ts +64 -0
  308. package/dist/components/stream/NetworkCanvasHitTester.d.ts +2 -1
  309. package/dist/components/stream/NetworkPipelineStore.d.ts +44 -36
  310. package/dist/components/stream/NetworkSSRFrame.d.ts +17 -0
  311. package/dist/components/stream/NetworkSVGOverlay.d.ts +10 -1
  312. package/dist/components/stream/OrdinalCanvasHitTester.d.ts +2 -2
  313. package/dist/components/stream/OrdinalPipelineStore.d.ts +55 -11
  314. package/dist/components/stream/OrdinalSVGOverlay.d.ts +9 -1
  315. package/dist/components/stream/OrdinalStyleResolver.d.ts +12 -0
  316. package/dist/components/stream/ParticlePool.d.ts +1 -1
  317. package/dist/components/stream/PipelineStore.d.ts +81 -174
  318. package/dist/components/stream/SVGOverlay.d.ts +6 -0
  319. package/dist/components/stream/SceneGraph.d.ts +12 -4
  320. package/dist/components/stream/StreamGeoFrame.d.ts +1 -1
  321. package/dist/components/stream/StreamNetworkFrame.d.ts +1 -1
  322. package/dist/components/stream/StreamOrdinalFrame.d.ts +1 -1
  323. package/dist/components/stream/StreamXYFrame.d.ts +2 -18
  324. package/dist/components/stream/accessibleDataRows.d.ts +33 -0
  325. package/dist/components/stream/accessorUtils.d.ts +25 -12
  326. package/dist/components/stream/annotationAccessorResolver.d.ts +2 -2
  327. package/dist/components/stream/brushAccessibility.d.ts +25 -0
  328. package/dist/components/stream/canvasBackground.d.ts +24 -0
  329. package/dist/components/stream/canvasSetup.d.ts +4 -1
  330. package/dist/components/stream/customLayoutFailure.d.ts +33 -0
  331. package/dist/components/stream/customLayoutPalette.d.ts +19 -9
  332. package/dist/components/stream/frameGraphics.d.ts +4 -0
  333. package/dist/components/stream/frameKeyboardNavigation.d.ts +45 -0
  334. package/dist/components/stream/frameThemeColors.d.ts +24 -0
  335. package/dist/components/stream/geoAnnotationAnchors.d.ts +14 -0
  336. package/dist/components/stream/geoCartogram.d.ts +17 -0
  337. package/dist/components/stream/geoCustomLayout.d.ts +59 -0
  338. package/dist/components/stream/geoDefaultTooltip.d.ts +11 -0
  339. package/dist/components/stream/geoFrameHelpers.d.ts +34 -0
  340. package/dist/components/stream/geoPipelineHelpers.d.ts +46 -0
  341. package/dist/components/stream/geoPipelineUpdateResults.d.ts +34 -0
  342. package/dist/components/stream/geoSceneBuilder.d.ts +16 -0
  343. package/dist/components/stream/geoTypes.d.ts +97 -15
  344. package/dist/components/stream/glyphDef.d.ts +98 -0
  345. package/dist/components/stream/hitTarget.d.ts +170 -0
  346. package/dist/components/stream/hitTestUtils.d.ts +2 -2
  347. package/dist/components/stream/hoverUtils.d.ts +7 -2
  348. package/dist/components/stream/keyboardNav.d.ts +4 -1
  349. package/dist/components/stream/layouts/forceLayoutPlugin.d.ts +9 -1
  350. package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +58 -0
  351. package/dist/components/stream/layouts/hierarchyUtils.d.ts +2 -2
  352. package/dist/components/stream/networkBezier.d.ts +10 -0
  353. package/dist/components/stream/networkColorAccessors.d.ts +49 -0
  354. package/dist/components/stream/networkCustomLayoutRunner.d.ts +23 -0
  355. package/dist/components/stream/networkCustomRestyle.d.ts +15 -0
  356. package/dist/components/stream/networkDefaultTooltip.d.ts +10 -0
  357. package/dist/components/stream/networkFrameAnimation.d.ts +7 -0
  358. package/dist/components/stream/networkFrameHandleTypes.d.ts +39 -0
  359. package/dist/components/stream/networkFrameInteraction.d.ts +37 -0
  360. package/dist/components/stream/networkFrameObservations.d.ts +15 -0
  361. package/dist/components/stream/networkFramePaint.d.ts +52 -0
  362. package/dist/components/stream/networkInteractionTypes.d.ts +26 -0
  363. package/dist/components/stream/networkPipelineConfig.d.ts +22 -0
  364. package/dist/components/stream/networkPipelineHelpers.d.ts +12 -0
  365. package/dist/components/stream/networkPipelineUpdateResults.d.ts +38 -0
  366. package/dist/components/stream/networkRealtimeEncoding.d.ts +41 -0
  367. package/dist/components/stream/networkTypes.d.ts +103 -51
  368. package/dist/components/stream/ordinalCanvasRenderers.d.ts +7 -0
  369. package/dist/components/stream/ordinalDataIndex.d.ts +5 -0
  370. package/dist/components/stream/ordinalDefaultTooltip.d.ts +10 -0
  371. package/dist/components/stream/ordinalDomain.d.ts +38 -0
  372. package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +31 -0
  373. package/dist/components/stream/ordinalPulse.d.ts +10 -0
  374. package/dist/components/stream/ordinalPulseResources.d.ts +3 -0
  375. package/dist/components/stream/ordinalSceneBuilders/sceneBuilderMap.d.ts +5 -0
  376. package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -2
  377. package/dist/components/stream/ordinalSpatialIndex.d.ts +9 -0
  378. package/dist/components/stream/ordinalTypes.d.ts +68 -9
  379. package/dist/components/stream/paintNeeds.d.ts +31 -0
  380. package/dist/components/stream/physics/CapacityQueueController.d.ts +5 -0
  381. package/dist/components/stream/physics/CapacityQueueTypes.d.ts +134 -0
  382. package/dist/components/stream/physics/MatterPhysicsEngineAdapter.d.ts +42 -0
  383. package/dist/components/stream/physics/PhysicsAccessibility.d.ts +48 -0
  384. package/dist/components/stream/physics/PhysicsAnnotations.d.ts +58 -0
  385. package/dist/components/stream/physics/PhysicsBodyBudget.d.ts +26 -0
  386. package/dist/components/stream/physics/PhysicsBodySpatialIndex.d.ts +10 -0
  387. package/dist/components/stream/physics/PhysicsCanvasTheme.d.ts +26 -0
  388. package/dist/components/stream/physics/PhysicsControllers.d.ts +75 -0
  389. package/dist/components/stream/physics/PhysicsEngineAdapter.d.ts +59 -0
  390. package/dist/components/stream/physics/PhysicsEngineConformance.d.ts +23 -0
  391. package/dist/components/stream/physics/PhysicsEvidence.d.ts +25 -0
  392. package/dist/components/stream/physics/PhysicsKernel.d.ts +207 -0
  393. package/dist/components/stream/physics/PhysicsOptionalEngineAdapters.d.ts +12 -0
  394. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +86 -0
  395. package/dist/components/stream/physics/PhysicsPipelineTypes.d.ts +181 -0
  396. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +78 -0
  397. package/dist/components/stream/physics/PhysicsSediment.d.ts +69 -0
  398. package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +18 -0
  399. package/dist/components/stream/physics/PhysicsSettledScene.d.ts +21 -0
  400. package/dist/components/stream/physics/PhysicsWorkerClient.d.ts +24 -0
  401. package/dist/components/stream/physics/PhysicsWorkerProtocol.d.ts +101 -0
  402. package/dist/components/stream/physics/PhysicsWorkerRuntime.d.ts +5 -0
  403. package/dist/components/stream/physics/RapierPhysicsEngineAdapter.d.ts +18 -0
  404. package/dist/components/stream/physics/ServiceOperationsControllers.d.ts +27 -0
  405. package/dist/components/stream/physics/ServiceOperationsTypes.d.ts +89 -0
  406. package/dist/components/stream/physics/StreamPhysicsFrame.d.ts +6 -0
  407. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +317 -0
  408. package/dist/components/stream/physics/physicsBodyCanvas.d.ts +27 -0
  409. package/dist/components/stream/physics/physicsFrameObservations.d.ts +19 -0
  410. package/dist/components/stream/physics/physicsFrameSetup.d.ts +4 -0
  411. package/dist/components/stream/physics/physicsPipelineControls.d.ts +4 -0
  412. package/dist/components/stream/physics/physicsPipelineHelpers.d.ts +41 -0
  413. package/dist/components/stream/physics/physicsPipelineObservations.d.ts +14 -0
  414. package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +27 -0
  415. package/dist/components/stream/physics/physicsRegionRuntime.d.ts +54 -0
  416. package/dist/components/stream/physics/physicsSemanticUI.d.ts +20 -0
  417. package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +18 -0
  418. package/dist/components/stream/pipelineBufferUtils.d.ts +26 -0
  419. package/dist/components/stream/pipelineConfig.d.ts +179 -0
  420. package/dist/components/stream/pipelineDecay.d.ts +21 -3
  421. package/dist/components/stream/pipelineDomainResolution.d.ts +62 -0
  422. package/dist/components/stream/pipelineIdentityOps.d.ts +26 -0
  423. package/dist/components/stream/pipelinePulse.d.ts +17 -3
  424. package/dist/components/stream/pipelineRibbons.d.ts +41 -0
  425. package/dist/components/stream/pipelineSpatialIndex.d.ts +12 -0
  426. package/dist/components/stream/pipelineStoreUpdateResults.d.ts +33 -0
  427. package/dist/components/stream/pipelineStyleResolvers.d.ts +46 -0
  428. package/dist/components/stream/pipelineTransitions.d.ts +3 -1
  429. package/dist/components/stream/pipelineUpdateContract.d.ts +69 -0
  430. package/dist/components/stream/pipelineUpdateStore.d.ts +21 -0
  431. package/dist/components/stream/pulseFrameRefresh.d.ts +22 -0
  432. package/dist/components/stream/renderBackend.d.ts +27 -0
  433. package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +15 -1
  434. package/dist/components/stream/renderers/geoCanvasRenderer.d.ts +3 -2
  435. package/dist/components/stream/renderers/glyphCanvasRenderer.d.ts +6 -0
  436. package/dist/components/stream/renderers/networkParticleRenderer.d.ts +1 -1
  437. package/dist/components/stream/renderers/resolveCSSColor.d.ts +6 -0
  438. package/dist/components/stream/sceneRenderBackendTypes.d.ts +28 -0
  439. package/dist/components/stream/sceneRevisionDiagnostics.d.ts +45 -0
  440. package/dist/components/stream/streamSemanticTypes.d.ts +16 -0
  441. package/dist/components/stream/streamStoreSync.d.ts +37 -0
  442. package/dist/components/stream/streamThemeTypes.d.ts +14 -0
  443. package/dist/components/stream/svgOverlayUtils.d.ts +10 -0
  444. package/dist/components/stream/test-utils/frameScheduler.d.ts +12 -0
  445. package/dist/components/stream/test-utils/revisionConsumption.d.ts +13 -0
  446. package/dist/components/stream/titleLayout.d.ts +31 -0
  447. package/dist/components/stream/types.d.ts +165 -72
  448. package/dist/components/stream/useCanvasFrameHost.d.ts +71 -0
  449. package/dist/components/stream/useFrame.d.ts +44 -2
  450. package/dist/components/stream/useHydration.d.ts +6 -0
  451. package/dist/components/stream/useLegendCategoryEmission.d.ts +5 -0
  452. package/dist/components/stream/useSemanticFrameInteractions.d.ts +22 -0
  453. package/dist/components/stream/useUpdateResultSnapshot.d.ts +7 -0
  454. package/dist/components/stream/workerModuleUrl.d.ts +10 -0
  455. package/dist/components/stream/xyAnnotationAnchors.d.ts +13 -0
  456. package/dist/components/stream/xyCanvasRenderers.d.ts +7 -0
  457. package/dist/components/stream/xyCrosshair.d.ts +11 -0
  458. package/dist/components/stream/xyDateTicks.d.ts +9 -0
  459. package/dist/components/stream/xyDefaultTooltip.d.ts +10 -0
  460. package/dist/components/stream/xyFrameAxisTypes.d.ts +50 -0
  461. package/dist/components/stream/xySceneBuilders/types.d.ts +10 -9
  462. package/dist/controls.min.js +2 -0
  463. package/dist/controls.module.min.js +2 -0
  464. package/dist/forceLayoutWorker.js +1 -0
  465. package/dist/geo.min.js +1 -1
  466. package/dist/geo.module.min.js +1 -1
  467. package/dist/network.min.js +1 -1
  468. package/dist/network.module.min.js +1 -1
  469. package/dist/ordinal.min.js +1 -1
  470. package/dist/ordinal.module.min.js +1 -1
  471. package/dist/physics-matter.min.js +1 -0
  472. package/dist/physics-matter.module.min.js +1 -0
  473. package/dist/physics-rapier.min.js +1 -0
  474. package/dist/physics-rapier.module.min.js +1 -0
  475. package/dist/physics.min.js +2 -0
  476. package/dist/physics.module.min.js +2 -0
  477. package/dist/physicsWorker.js +1 -0
  478. package/dist/realtime.min.js +1 -1
  479. package/dist/realtime.module.min.js +1 -1
  480. package/dist/rough.min.js +1 -0
  481. package/dist/rough.module.min.js +1 -0
  482. package/dist/semiotic-ai-chunk-OG7BQUUW.module.min.js +2 -0
  483. package/dist/semiotic-ai-core.d.ts +47 -0
  484. package/dist/semiotic-ai-core.min.js +1 -0
  485. package/dist/semiotic-ai-core.module.min.js +1 -0
  486. package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +2 -0
  487. package/dist/semiotic-ai.d.ts +53 -9
  488. package/dist/semiotic-ai.min.js +1 -1
  489. package/dist/semiotic-ai.module.min.js +1 -1
  490. package/dist/semiotic-chunk-3FSVZ46U.module.min.js +2 -0
  491. package/dist/semiotic-controls.d.ts +20 -0
  492. package/dist/semiotic-data.min.js +1 -1
  493. package/dist/semiotic-data.module.min.js +1 -1
  494. package/dist/semiotic-experimental.d.ts +38 -9
  495. package/dist/semiotic-experimental.min.js +1 -1
  496. package/dist/semiotic-experimental.module.min.js +1 -1
  497. package/dist/semiotic-geo.d.ts +15 -0
  498. package/dist/semiotic-network.d.ts +15 -0
  499. package/dist/semiotic-ordinal.d.ts +14 -0
  500. package/dist/semiotic-physics-matter.d.ts +10 -0
  501. package/dist/semiotic-physics-rapier.d.ts +9 -0
  502. package/dist/semiotic-physics.d.ts +60 -0
  503. package/dist/semiotic-realtime-core.d.ts +34 -0
  504. package/dist/semiotic-realtime-core.min.js +1 -0
  505. package/dist/semiotic-realtime-core.module.min.js +1 -0
  506. package/dist/semiotic-realtime-react.d.ts +10 -0
  507. package/dist/semiotic-realtime-react.min.js +2 -0
  508. package/dist/semiotic-realtime-react.module.min.js +2 -0
  509. package/dist/semiotic-realtime.d.ts +4 -30
  510. package/dist/semiotic-recipes-core.d.ts +92 -0
  511. package/dist/semiotic-recipes-core.min.js +1 -0
  512. package/dist/semiotic-recipes-core.module.min.js +1 -0
  513. package/dist/semiotic-recipes-react.d.ts +7 -0
  514. package/dist/semiotic-recipes-react.min.js +2 -0
  515. package/dist/semiotic-recipes-react.module.min.js +2 -0
  516. package/dist/semiotic-recipes.d.ts +4 -43
  517. package/dist/semiotic-recipes.min.js +1 -1
  518. package/dist/semiotic-recipes.module.min.js +1 -1
  519. package/dist/semiotic-rough.d.ts +4 -0
  520. package/dist/semiotic-server-edge.d.ts +8 -0
  521. package/dist/semiotic-server-edge.min.js +1 -0
  522. package/dist/semiotic-server-edge.module.min.js +1 -0
  523. package/dist/semiotic-server-node.d.ts +5 -0
  524. package/dist/semiotic-server-node.min.js +1 -0
  525. package/dist/semiotic-server-node.module.min.js +1 -0
  526. package/dist/semiotic-server.d.ts +2 -2
  527. package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +2 -0
  528. package/dist/semiotic-themes-core.d.ts +53 -0
  529. package/dist/semiotic-themes-core.min.js +1 -0
  530. package/dist/semiotic-themes-core.module.min.js +1 -0
  531. package/dist/semiotic-themes-react.d.ts +4 -0
  532. package/dist/semiotic-themes-react.min.js +2 -0
  533. package/dist/semiotic-themes-react.module.min.js +2 -0
  534. package/dist/semiotic-themes.d.ts +6 -76
  535. package/dist/semiotic-themes.min.js +1 -2
  536. package/dist/semiotic-themes.module.min.js +1 -2
  537. package/dist/semiotic-utils-core.d.ts +50 -0
  538. package/dist/semiotic-utils-core.min.js +1 -0
  539. package/dist/semiotic-utils-core.module.min.js +1 -0
  540. package/dist/semiotic-utils-react.d.ts +5 -0
  541. package/dist/semiotic-utils-react.min.js +2 -0
  542. package/dist/semiotic-utils-react.module.min.js +2 -0
  543. package/dist/semiotic-utils.d.ts +3 -39
  544. package/dist/semiotic-utils.min.js +1 -2
  545. package/dist/semiotic-utils.module.min.js +1 -2
  546. package/dist/semiotic-value.min.js +1 -1
  547. package/dist/semiotic-value.module.min.js +1 -1
  548. package/dist/semiotic-xy.d.ts +12 -0
  549. package/dist/semiotic.d.ts +44 -8
  550. package/dist/semiotic.min.js +1 -1
  551. package/dist/semiotic.module.min.js +1 -1
  552. package/dist/server.min.js +1 -1
  553. package/dist/server.module.min.js +1 -1
  554. package/dist/test-utils/capturedFrameProps.d.ts +67 -0
  555. package/dist/test-utils/frameMock.d.ts +12 -9
  556. package/dist/xy-chunk-IWD6IB6V.module.min.js +2 -0
  557. package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +2 -0
  558. package/dist/xy.min.js +1 -1
  559. package/dist/xy.module.min.js +1 -1
  560. package/package.json +259 -88
  561. package/spec/README.md +152 -0
  562. package/spec/bindings/README.md +35 -0
  563. package/spec/bindings/vega-lite.mjs +112 -0
  564. package/spec/v0.1/annotation-provenance.schema.json +127 -0
  565. package/spec/v0.1/audience-profile.schema.json +67 -0
  566. package/spec/v0.1/chart-capability.schema.json +186 -0
  567. package/dist/components/recipes/gofish.d.ts +0 -207
  568. package/dist/components/recipes/gofishInterpreter.d.ts +0 -52
  569. package/dist/components/recipes/gofishLambdas.d.ts +0 -145
  570. package/dist/semiotic-ai-semiotic-ai-u954ylUn.js +0 -2
  571. package/dist/semiotic-ai-statisticalOverlays-CU7jW05Q.js +0 -1
  572. package/dist/semiotic-semiotic-BmrYbi99.js +0 -2
  573. package/dist/semiotic-statisticalOverlays-IjZw8Lsu.js +0 -1
  574. package/dist/xy-semiotic-xy-Dufu3D0-.js +0 -2
  575. package/dist/xy-statisticalOverlays-3Ni9bRph.js +0 -1
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: semiotic-charts
3
+ description: Generate trustworthy, accessible, agent-legible charts with Semiotic. Use whenever you produce a data visualization in a React/TypeScript app, stream a chart as generative UI, or pick a chart type for a dataset. Emit a validated config and run the trust loop — never hand-write chart JSX that breaks on first paint.
4
+ ---
5
+
6
+ # Generating charts with Semiotic
7
+
8
+ Semiotic is a React data-visualization library whose differentiator is **trust**:
9
+ generation is cheap, but a chart that renders, that a screen-reader user can
10
+ receive, and that carries its own provenance is scarce. This skill is the
11
+ workflow for producing one.
12
+
13
+ The cardinal rule: **do not hand-write chart JSX and hope it paints.** Emit a
14
+ `{ component, props }` proposal and run it through the trust loop, which is
15
+ validated and diagnosed; when a renderer is available, proven to paint. Otherwise it returns reasons and ranked alternatives to retry with.
16
+
17
+ ## The trust loop — generate → validate → diagnose → repair → prove
18
+
19
+ `prepareChart` (from `semiotic/ai`) composes the whole loop. Call it on every
20
+ proposal before you show or stream a chart:
21
+
22
+ ```ts
23
+ import { prepareChart } from "semiotic/ai"
24
+
25
+ const result = prepareChart(
26
+ { component: "BarChart", props: { data, categoryAccessor: "region", valueAccessor: "revenue" } },
27
+ { data } // supply the data so a poor chart→data fit is caught and alternatives ranked
28
+ )
29
+
30
+ if (result.ok) {
31
+ // result.jsx is a ready JSX string; result.config is the serializable ChartConfig
32
+ } else {
33
+ // result.reasons explains why; result.repair.alternatives ranks better charts.
34
+ // Retry with a fixed prop or a suggested component — do NOT paint.
35
+ }
36
+ ```
37
+
38
+ `result` carries `{ ok, config, jsx, validation, diagnostics, repair?, reasons }`.
39
+ In a server/SSR context you can inject `render: renderChartWithEvidence` (from
40
+ `semiotic/server`) so the loop also *proves the scene is non-empty* and reads back
41
+ render evidence (mark count, domains, ARIA label) — the first-try oracle.
42
+
43
+ ### As an agent tool
44
+
45
+ `chartGenerationTool()` returns a framework-agnostic JSON-Schema tool definition;
46
+ `toAnthropicTool`, `toOpenAITool` (Chat Completions), and
47
+ `toOpenAIResponsesTool` (Responses API) shape it for provider APIs. Vercel AI SDK
48
+ and LangChain accept the same JSON Schema. `createChartToolHandler(optionsFor)` is
49
+ the execute step. No vendor SDK is required. For backend-only use, import these
50
+ helpers from `semiotic/ai/core` to avoid the chart-HOC catalog.
51
+
52
+ ### Picking a chart for a dataset
53
+
54
+ When you don't know which chart fits, ask the data, not your priors:
55
+
56
+ ```ts
57
+ import { suggestCharts } from "semiotic/ai"
58
+ const ranked = suggestCharts(data, { intent: "trend", maxResults: 3, audience })
59
+ // ranked[0].props is spreadable straight into the component.
60
+ ```
61
+
62
+ `intent` is one of: `trend`, `compare-series`, `compare-categories`, `rank`,
63
+ `part-to-whole`, `distribution`, `correlation`, `flow`, `hierarchy`, `geo`,
64
+ `outlier-detection`, `composition-over-time`, `change-detection`.
65
+
66
+ ## Hard rules (the behavior contracts)
67
+
68
+ These are enforced by validation and the `npx semiotic-ai --doctor` gate. Honor
69
+ them in every proposal:
70
+
71
+ 1. **Sub-path imports.** Import from the family entry point, not the barrel:
72
+ `semiotic/xy`, `semiotic/ordinal`, `semiotic/network`, `semiotic/geo`,
73
+ `semiotic/realtime`, `semiotic/ai`. The full `semiotic` is large; a family
74
+ entry point is a fraction of it.
75
+ 2. **Static usage requires data in props.** `renderChart`, SSR snapshots, and any
76
+ copy-paste example need `data` (or `nodes`/`edges`) present.
77
+ 3. **Push (live) mode omits `data` entirely.** Create a ref, do NOT pass
78
+ `data={[]}` (that clears the chart on every render), then call
79
+ `ref.current.push(row)` / `pushMany(rows)`. `remove(id)` / `update(id, fn)`
80
+ require a stable id accessor (`pointIdAccessor` for XY, `dataIdAccessor` for
81
+ ordinal, `nodeIDAccessor`/`edgeIdAccessor` for network).
82
+ 4. **Required prop combinations.** Beyond data, some families need a semantic
83
+ prop, in static *and* push mode: StackedAreaChart→`areaBy`,
84
+ StackedBarChart→`stackBy`, GroupedBarChart→`groupBy`, BubbleChart→`sizeBy`,
85
+ SwimlaneChart→`subcategoryAccessor`, GaugeChart→`value` (value-only, no push),
86
+ ForceDirectedGraph→materialized `nodes` + `edges` (don't infer nodes from edge
87
+ endpoints).
88
+ 5. **Categorical color via `colorBy`** (a field name), shared across charts with
89
+ `CategoryColorProvider` / `LinkedCharts`; fall back to `colorScheme`. Don't
90
+ reach for `frameProps` style functions to color by category.
91
+ 6. **`renderChart` (MCP / `semiotic/server`) is a single static snapshot.** It
92
+ can't push later. For live behavior, return React code with a ref.
93
+
94
+ ## What good output looks like
95
+
96
+ ```tsx
97
+ import { LineChart } from "semiotic/xy"
98
+
99
+ <LineChart
100
+ data={series}
101
+ xAccessor="date"
102
+ yAccessor="value"
103
+ xScaleType="time"
104
+ title="Weekly active users"
105
+ showPoints
106
+ />
107
+ ```
108
+
109
+ Annotations carry provenance and lifecycle — when you mark a point, say who/why:
110
+
111
+ ```ts
112
+ import { withProvenance } from "semiotic/ai"
113
+ const note = withProvenance(
114
+ { type: "callout", x: "2026-W14", y: 9, label: "Deploy-correlated spike" },
115
+ { provenance: { authorKind: "agent", basis: "statistical-test", confidence: 0.78 },
116
+ lifecycle: { ttlHint: "P7D", status: "proposed" } }
117
+ )
118
+ ```
119
+
120
+ ## Tooling
121
+
122
+ - **MCP server:** `npx semiotic-mcp` — tools for `renderChart` (SVG + render
123
+ evidence), `suggestCharts`, `groundChart`, `diagnoseConfig`, `repairChartConfig`,
124
+ `proposeChartVariants`, and more. Prefer these over guessing.
125
+ - **Public app profile:** `npx semiotic-mcp --profile public` exposes the five
126
+ task-oriented tools `createChart`, `improveChart`, `explainChart`,
127
+ `auditChart`, and `getChartSchema`; use it when tool discovery matters more
128
+ than expert-level control.
129
+ - **CLI gate:** `npx semiotic-ai --doctor` validates a `{ component, props }` JSON
130
+ (`--audit-a11y` for an accessibility audit). Run it before shipping generated code.
131
+ - **Machine-readable docs:** the published `llms.txt` is the chart catalog with
132
+ per-chart communicative-act labels; read it for the full surface rather than
133
+ guessing component names.
134
+ - **Portable install:** `npx semiotic-ai --skill` prints this packaged skill so a
135
+ compatible agent host can install it at its documented skill location. The
136
+ npm package includes `agent-skill/semiotic-charts/SKILL.md` for offline use.
137
+
138
+ ## Don't
139
+
140
+ - Don't hand-write chart JSX without running `prepareChart` or `--doctor`.
141
+ - Don't import charts from the bare `semiotic` barrel in production code.
142
+ - Don't pass `data={[]}` for live charts (use push mode — omit `data`).
143
+ - Don't promise live/interactive behavior from `renderChart` — it's a static snapshot.
144
+ - Don't invent a component name; if no chart fits, say so and surface alternatives
145
+ (`suggestCharts` / `repairChartConfig`) — a wrong chart deceives the reader who
146
+ can least afford it.
package/ai/cli.js CHANGED
@@ -28,6 +28,7 @@ const FILES = {
28
28
  "--schema": path.join(__dirname, "schema.json"),
29
29
  "--compact": path.join(__dirname, "system-prompt.md"),
30
30
  "--examples": path.join(__dirname, "examples.md"),
31
+ "--skill": path.join(pkgRoot, "agent-skill", "semiotic-charts", "SKILL.md"),
31
32
  }
32
33
 
33
34
  function errorMessage(err) {
@@ -47,8 +48,11 @@ Usage:
47
48
  npx semiotic-ai --suggest Recommend charts from { data, intent? } JSON
48
49
  npx semiotic-ai --compact Print ai/system-prompt.md (compact prompt)
49
50
  npx semiotic-ai --examples Print ai/examples.md (copy-paste examples)
51
+ npx semiotic-ai --skill Print the portable Semiotic Agent Skill
50
52
  npx semiotic-ai --doctor Validate { component, props, usageMode? } JSON from stdin
53
+ (exits nonzero on errors; add --json for a machine-readable report)
51
54
  npx semiotic-ai --audit-a11y Audit { component, props, inChartContainer?, describe?, navigable? }
55
+ npx semiotic-ai --audit-mobile Audit { component, props, viewportWidth?, targetSize?, inChartContainer? }
52
56
  JSON against Chartability (POUR-CAF) accessibility heuristics
53
57
  npx semiotic-ai --help Show this help message
54
58
  `.trim()
@@ -186,8 +190,15 @@ function validatePropsWithSchema(componentName, props, usageMode = "static") {
186
190
  continue
187
191
  }
188
192
 
189
- if (propSchema.type && !schemaTypeMatches(value, propSchema.type)) {
190
- const expected = Array.isArray(propSchema.type) ? propSchema.type.join(" | ") : propSchema.type
193
+ // Prefer the full runtime type surface (`x-semiotic-runtime-types`, e.g.
194
+ // ["string","function"]) over the wire-only `type` ("string"), so a valid
195
+ // function value for a prop like `colorBy`/`onBrush` is still accepted. The
196
+ // wire `type` keyword is standards-valid JSON Schema and never lists
197
+ // "function"; the runtime extension carries it. Falls back to `type` for
198
+ // props with no runtime-only alternatives.
199
+ const effectiveType = propSchema["x-semiotic-runtime-types"] || propSchema.type
200
+ if (effectiveType && !schemaTypeMatches(value, effectiveType)) {
201
+ const expected = Array.isArray(effectiveType) ? effectiveType.join(" | ") : effectiveType
191
202
  errors.push(`"${propName}" should be ${expected}, got ${describeActualType(value)}.`)
192
203
  }
193
204
 
@@ -202,6 +213,8 @@ function validatePropsWithSchema(componentName, props, usageMode = "static") {
202
213
  }
203
214
  }
204
215
 
216
+ // Returns true when the schema-only validation passed, so the caller can set
217
+ // the process exit code (nonzero on failure — this is a CI gate).
205
218
  function printSchemaOnlyDoctorResult(component, props, usageMode) {
206
219
  const result = validatePropsWithSchema(component, props, usageMode)
207
220
  if (usageMode === "push") {
@@ -216,6 +229,7 @@ function printSchemaOnlyDoctorResult(component, props, usageMode) {
216
229
  }
217
230
  }
218
231
  printDoctorBehaviorContracts(component, props)
232
+ return result.valid
219
233
  }
220
234
 
221
235
  function printDoctorBehaviorContracts(component, props) {
@@ -229,8 +243,11 @@ function printDoctorBehaviorContracts(component, props) {
229
243
  }
230
244
 
231
245
  function readJSONInput(usage) {
232
- if (process.argv[3]) {
233
- return process.argv.slice(3).join(" ")
246
+ // Skip flag tokens (e.g. `--json`) so `--doctor --json` still reads the JSON
247
+ // from stdin rather than trying to parse the flag as the input.
248
+ const positional = process.argv.slice(3).filter((arg) => !arg.startsWith("--"))
249
+ if (positional.length > 0) {
250
+ return positional.join(" ")
234
251
  }
235
252
  if (!process.stdin.isTTY) {
236
253
  return fs.readFileSync(0, "utf-8")
@@ -255,6 +272,11 @@ if (flag === "--schema" && process.argv[3]) {
255
272
  process.exit(0)
256
273
  }
257
274
 
275
+ if (flag === "--skill") {
276
+ console.log(fs.readFileSync(FILES["--skill"], "utf-8"))
277
+ process.exit(0)
278
+ }
279
+
258
280
  if (flag === "--suggest") {
259
281
  const input = readJSONInput("Usage: npx semiotic-ai --suggest '{\"data\":[{\"category\":\"A\",\"value\":10}],\"intent\":\"comparison\"}'")
260
282
  try {
@@ -272,10 +294,15 @@ if (flag === "--suggest") {
272
294
  if (flag === "--doctor") {
273
295
  const input = readJSONInput("Usage: npx semiotic-ai --doctor '{\"component\":\"LineChart\",\"props\":{\"data\":[...]},\"usageMode\":\"static\"}'\n echo '{\"component\":\"LineChart\",\"props\":{\"xAccessor\":\"x\",\"yAccessor\":\"y\"},\"usageMode\":\"push\"}' | npx semiotic-ai --doctor")
274
296
 
297
+ // `--json` emits a stable machine-readable report instead of the human text.
298
+ const asJson = process.argv.includes("--json")
299
+
275
300
  try {
276
301
  const { component, props, usageMode: rawUsageMode } = JSON.parse(input)
277
302
  if (!component || !props) {
278
- console.error("Input must be JSON with { component, props } fields.")
303
+ const msg = "Input must be JSON with { component, props } fields."
304
+ if (asJson) console.log(JSON.stringify({ ok: false, error: msg }, null, 2))
305
+ else console.error(msg)
279
306
  process.exit(1)
280
307
  }
281
308
  const usageMode = normalizeUsageMode(rawUsageMode)
@@ -294,68 +321,88 @@ if (flag === "--doctor") {
294
321
  // packaged schema so the CLI still catches basic agent mistakes.
295
322
  }
296
323
 
297
- if (!diagnoseConfig && !validateProps) {
298
- printSchemaOnlyDoctorResult(component, props, usageMode)
299
- process.exit(0)
300
- }
324
+ // Tracks whether the doctor found any error-level problem. The process
325
+ // MUST exit nonzero when this is false so CI/agents can gate on it.
326
+ let ok
301
327
 
302
- if (diagnoseConfig) {
328
+ if (!diagnoseConfig && !validateProps) {
329
+ if (asJson) {
330
+ const result = validatePropsWithSchema(component, props, usageMode)
331
+ ok = result.valid
332
+ console.log(JSON.stringify({ component, usageMode, mode: "schema-only", ok, errors: result.errors }, null, 2))
333
+ } else {
334
+ ok = printSchemaOnlyDoctorResult(component, props, usageMode)
335
+ }
336
+ } else if (diagnoseConfig) {
303
337
  // Use the full anti-pattern detector
304
338
  const result = diagnoseConfig(component, props)
305
339
  const diagnoses = usageMode === "push"
306
340
  ? result.diagnoses.filter((d) => d.code !== "VALIDATION" || !shouldSkipMissingRequiredProp(component, "data", usageMode) || d.message !== `"data" is required for ${component}.`)
307
341
  : result.diagnoses
308
- const ok = diagnoses.every((d) => d.severity === "warning")
309
-
310
- if (usageMode === "push") {
311
- console.log(` Usage mode: push (data prop may be omitted; use a ref to push data)`)
312
- }
342
+ ok = diagnoses.every((d) => d.severity === "warning")
313
343
 
314
- // Show data shape summary
315
- if (props.data && Array.isArray(props.data) && props.data.length > 0) {
316
- const sample = props.data[0]
317
- console.log(` Data shape: ${props.data.length} items, keys: [${Object.keys(sample).join(", ")}]`)
318
- }
344
+ if (asJson) {
345
+ console.log(JSON.stringify({ component, usageMode, mode: "diagnose", ok, diagnoses }, null, 2))
346
+ } else {
347
+ if (usageMode === "push") {
348
+ console.log(` Usage mode: push (data prop may be omitted; use a ref to push data)`)
349
+ }
319
350
 
320
- if (ok && diagnoses.length === 0) {
321
- console.log(`✓ ${component}: configuration looks good.`)
322
- } else if (ok) {
323
- console.log(`✓ ${component}: configuration OK with warnings:`)
324
- for (const d of diagnoses) {
325
- console.log(` ⚠ [${d.code}] ${d.message}`)
326
- if (d.fix) console.log(` Fix: ${d.fix}`)
351
+ // Show data shape summary
352
+ if (props.data && Array.isArray(props.data) && props.data.length > 0) {
353
+ const sample = props.data[0]
354
+ console.log(` Data shape: ${props.data.length} items, keys: [${Object.keys(sample).join(", ")}]`)
327
355
  }
328
- } else {
329
- console.log(`✗ ${component}: issues detected.`)
330
- for (const d of diagnoses) {
331
- const icon = d.severity === "error" ? "✗" : "⚠"
332
- console.log(` ${icon} [${d.code}] ${d.message}`)
333
- if (d.fix) console.log(` Fix: ${d.fix}`)
356
+
357
+ if (ok && diagnoses.length === 0) {
358
+ console.log(`✓ ${component}: configuration looks good.`)
359
+ } else if (ok) {
360
+ console.log(`✓ ${component}: configuration OK with warnings:`)
361
+ for (const d of diagnoses) {
362
+ console.log(` ⚠ [${d.code}] ${d.message}`)
363
+ if (d.fix) console.log(` Fix: ${d.fix}`)
364
+ }
365
+ } else {
366
+ console.log(`✗ ${component}: issues detected.`)
367
+ for (const d of diagnoses) {
368
+ const icon = d.severity === "error" ? "✗" : "⚠"
369
+ console.log(` ${icon} [${d.code}] ${d.message}`)
370
+ if (d.fix) console.log(` Fix: ${d.fix}`)
371
+ }
334
372
  }
373
+ printDoctorBehaviorContracts(component, props)
335
374
  }
336
- printDoctorBehaviorContracts(component, props)
337
375
  } else {
338
376
  // Fallback to validateProps only
339
377
  const result = validateProps(component, props)
340
378
  const errors = filterUsageModeErrors(component, result.errors, usageMode)
341
- if (usageMode === "push") {
342
- console.log(` Usage mode: push (data prop may be omitted; use a ref to push data)`)
343
- }
344
- if (errors.length === 0) {
345
- console.log(`✓ ${component}: props are valid.`)
379
+ ok = errors.length === 0
380
+ if (asJson) {
381
+ console.log(JSON.stringify({ component, usageMode, mode: "validate", ok, errors }, null, 2))
346
382
  } else {
347
- console.log(`✗ ${component}: validation failed.`)
348
- for (const err of errors) {
349
- console.log(` • ${err}`)
383
+ if (usageMode === "push") {
384
+ console.log(` Usage mode: push (data prop may be omitted; use a ref to push data)`)
350
385
  }
386
+ if (ok) {
387
+ console.log(`✓ ${component}: props are valid.`)
388
+ } else {
389
+ console.log(`✗ ${component}: validation failed.`)
390
+ for (const err of errors) {
391
+ console.log(` • ${err}`)
392
+ }
393
+ }
394
+ printDoctorBehaviorContracts(component, props)
351
395
  }
352
- printDoctorBehaviorContracts(component, props)
353
396
  }
397
+
398
+ // Exit nonzero when an error-level problem was found (warnings still exit 0).
399
+ process.exit(ok ? 0 : 1)
354
400
  } catch (err) {
355
- console.error(`Failed to parse input: ${errorMessage(err)}`)
401
+ const msg = `Failed to parse input: ${errorMessage(err)}`
402
+ if (asJson) console.log(JSON.stringify({ ok: false, error: msg }, null, 2))
403
+ else console.error(msg)
356
404
  process.exit(1)
357
405
  }
358
- process.exit(0)
359
406
  }
360
407
 
361
408
  // --audit-a11y: grade component + props against Chartability heuristics
@@ -397,6 +444,47 @@ if (flag === "--audit-a11y") {
397
444
  }
398
445
  }
399
446
 
447
+ // --audit-mobile: grade component + props for mobile visualization risks
448
+ if (flag === "--audit-mobile") {
449
+ const input = readJSONInput("Usage: npx semiotic-ai --audit-mobile '{\"component\":\"LineChart\",\"props\":{\"data\":[...],\"xAccessor\":\"x\",\"yAccessor\":\"y\"},\"viewportWidth\":390}'\n echo '{\"component\":\"Scatterplot\",\"props\":{...},\"targetSize\":44}' | npx semiotic-ai --audit-mobile")
450
+
451
+ try {
452
+ const { component, props, viewportWidth, targetSize, inChartContainer } = JSON.parse(input)
453
+ if (!component || !props) {
454
+ console.error("Input must be JSON with { component, props } fields.")
455
+ process.exit(1)
456
+ }
457
+
458
+ const distPath = path.join(pkgRoot, "dist", "semiotic-ai.min.js")
459
+ let auditMobileVisualization, formatMobileVisualizationAudit
460
+ try {
461
+ if (!process.env.SEMIOTIC_AI_SCHEMA_ONLY) {
462
+ const mod = require(distPath)
463
+ auditMobileVisualization = mod.auditMobileVisualization
464
+ formatMobileVisualizationAudit = mod.formatMobileVisualizationAudit
465
+ }
466
+ } catch (e) {
467
+ // Dist unavailable.
468
+ }
469
+
470
+ if (!auditMobileVisualization || !formatMobileVisualizationAudit) {
471
+ console.error("Mobile visualization audit requires the built library. Run `npm run dist` first, or use the MCP `auditMobileVisualization` tool.")
472
+ process.exit(2)
473
+ }
474
+
475
+ const result = auditMobileVisualization(component, props, {
476
+ viewportWidth: typeof viewportWidth === "number" ? viewportWidth : undefined,
477
+ targetSize: typeof targetSize === "number" ? targetSize : undefined,
478
+ inChartContainer: inChartContainer === true,
479
+ })
480
+ console.log(formatMobileVisualizationAudit(result))
481
+ process.exit(result.ok ? 0 : 1)
482
+ } catch (err) {
483
+ console.error(`Failed to parse input: ${errorMessage(err)}`)
484
+ process.exit(1)
485
+ }
486
+ }
487
+
400
488
  const filePath = flag ? FILES[flag] : FILES.default
401
489
 
402
490
  if (!filePath) {
@@ -1,6 +1,6 @@
1
1
  "use strict"
2
2
 
3
- const CATEGORY_ORDER = ["xy", "ordinal", "network", "geo", "realtime", "value"]
3
+ const CATEGORY_ORDER = ["xy", "ordinal", "network", "geo", "realtime", "physics", "value"]
4
4
 
5
5
  const COMPONENTS_BY_CATEGORY = {
6
6
  xy: [
@@ -24,6 +24,10 @@ const COMPONENTS_BY_CATEGORY = {
24
24
  "RealtimeLineChart", "RealtimeHistogram", "TemporalHistogram", "RealtimeSwarmChart",
25
25
  "RealtimeWaterfallChart", "RealtimeHeatmap",
26
26
  ],
27
+ physics: [
28
+ "GaltonBoardChart", "EventDropChart", "PhysicsPileChart", "CollisionSwarmChart",
29
+ "PhysicalFlowChart", "ProcessFlowChart", "GauntletChart",
30
+ ],
27
31
  value: [
28
32
  "BigNumber",
29
33
  ],
@@ -49,6 +53,7 @@ function categoryForComponent(name) {
49
53
  }
50
54
 
51
55
  function importPathForCategory(category) {
56
+ if (category === "physics") return "semiotic/physics"
52
57
  return category === "geo" ? "semiotic/geo" : `semiotic/${category}`
53
58
  }
54
59