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.
- package/CLAUDE.md +63 -18
- package/README.md +121 -27
- package/agent-skill/semiotic-charts/SKILL.md +146 -0
- package/ai/cli.js +133 -45
- package/ai/componentMetadata.cjs +6 -1
- package/ai/dist/mcp-server.js +1741 -163
- package/ai/examples.md +174 -0
- package/ai/schema.json +2733 -536
- package/ai/surface-manifest.json +201 -0
- package/ai/system-prompt.md +20 -4
- package/dist/__tests__/scenarios/mcpProtocolTypes.d.ts +20 -0
- package/dist/components/AccessibleNavTree.d.ts +7 -1
- package/dist/components/CategoryColors.d.ts +1 -1
- package/dist/components/ChartContainer.d.ts +91 -0
- package/dist/components/ChartGrid.d.ts +11 -1
- package/dist/components/CircularBrush.d.ts +61 -0
- package/dist/components/ContextLayout.d.ts +5 -1
- package/dist/components/DirectManipulationControl.d.ts +63 -0
- package/dist/components/LinkedCharts.d.ts +3 -1
- package/dist/components/MobileAnnotationCalloutList.d.ts +13 -0
- package/dist/components/MobileChartContainer.d.ts +51 -0
- package/dist/components/MobileStandardControls.d.ts +68 -0
- package/dist/components/SmallMultipleChart.d.ts +84 -0
- package/dist/components/Tooltip/FlippingTooltip.d.ts +21 -0
- package/dist/components/ai/ChartRecipe.d.ts +16 -0
- package/dist/components/ai/IntentMark.d.ts +15 -0
- package/dist/components/ai/chartCapabilities.d.ts +8 -1
- package/dist/components/ai/chartCapabilityTypes.d.ts +26 -1
- package/dist/components/ai/chartClinic.d.ts +91 -0
- package/dist/components/ai/chartClinicMetadata.generated.d.ts +15 -0
- package/dist/components/ai/chartRecipeRegistry.d.ts +14 -0
- package/dist/components/ai/chartRecipes.d.ts +278 -0
- package/dist/components/ai/dataPitfallsBridge.d.ts +102 -0
- package/dist/components/ai/describeChart.d.ts +7 -0
- package/dist/components/ai/describeRecipeChart.d.ts +16 -0
- package/dist/components/ai/generativeChart.d.ts +28 -3
- package/dist/components/ai/intentManifest.d.ts +62 -0
- package/dist/components/ai/navigationTree.d.ts +3 -0
- package/dist/components/ai/observedSceneAudit.d.ts +72 -0
- package/dist/components/ai/readerGrounding.d.ts +83 -0
- package/dist/components/ai/recipeCapability.d.ts +8 -0
- package/dist/components/ai/recipeNavigation.d.ts +13 -0
- package/dist/components/ai/recipeSemantics.d.ts +11 -0
- package/dist/components/ai/repairChartConfig.d.ts +9 -0
- package/dist/components/ai/suggestCharts.d.ts +11 -1
- package/dist/components/ai/useNavigationSync.d.ts +17 -2
- package/dist/components/chartContainerMobile.d.ts +9 -0
- package/dist/components/charts/custom/GeoCustomChart.d.ts +48 -0
- package/dist/components/charts/custom/NetworkCustomChart.d.ts +8 -2
- package/dist/components/charts/custom/OrdinalCustomChart.d.ts +8 -2
- package/dist/components/charts/custom/XYCustomChart.d.ts +11 -2
- package/dist/components/charts/geo/ChoroplethMap.d.ts +19 -2
- package/dist/components/charts/geo/DistanceCartogram.d.ts +15 -3
- package/dist/components/charts/geo/FlowMap.d.ts +11 -7
- package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +15 -3
- package/dist/components/charts/geo/index.d.ts +2 -0
- package/dist/components/charts/index.d.ts +35 -1
- package/dist/components/charts/network/ChordDiagram.d.ts +10 -2
- package/dist/components/charts/network/CirclePack.d.ts +1 -1
- package/dist/components/charts/network/ForceDirectedGraph.d.ts +26 -5
- package/dist/components/charts/network/OrbitDiagram.d.ts +1 -1
- package/dist/components/charts/network/ProcessSankey.d.ts +1 -1
- package/dist/components/charts/network/SankeyDiagram.d.ts +10 -2
- package/dist/components/charts/network/TreeDiagram.d.ts +1 -1
- package/dist/components/charts/network/Treemap.d.ts +1 -1
- package/dist/components/charts/network/useForceLayout.d.ts +17 -0
- package/dist/components/charts/ordinal/BarChart.d.ts +22 -1
- package/dist/components/charts/ordinal/BoxPlot.d.ts +1 -1
- package/dist/components/charts/ordinal/DonutChart.d.ts +1 -1
- package/dist/components/charts/ordinal/DotPlot.d.ts +1 -1
- package/dist/components/charts/ordinal/FunnelChart.d.ts +1 -1
- package/dist/components/charts/ordinal/GroupedBarChart.d.ts +12 -1
- package/dist/components/charts/ordinal/Histogram.d.ts +1 -1
- package/dist/components/charts/ordinal/PieChart.d.ts +1 -1
- package/dist/components/charts/ordinal/RidgelinePlot.d.ts +1 -1
- package/dist/components/charts/ordinal/StackedBarChart.d.ts +12 -1
- package/dist/components/charts/ordinal/SwarmPlot.d.ts +1 -1
- package/dist/components/charts/ordinal/SwimlaneChart.d.ts +1 -1
- package/dist/components/charts/ordinal/ViolinPlot.d.ts +1 -1
- package/dist/components/charts/physics/ChainReactionChart.d.ts +9 -0
- package/dist/components/charts/physics/CollisionSwarmChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/CollisionSwarmChart.d.ts +54 -0
- package/dist/components/charts/physics/EventDropChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/EventDropChart.d.ts +60 -0
- package/dist/components/charts/physics/GaltonBoardChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/GaltonBoardChart.d.ts +74 -0
- package/dist/components/charts/physics/GauntletChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/GauntletChart.d.ts +73 -0
- package/dist/components/charts/physics/PhysicalFlowChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/PhysicalFlowChart.d.ts +63 -0
- package/dist/components/charts/physics/PhysicsCustomChart.d.ts +99 -0
- package/dist/components/charts/physics/PhysicsPileChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/PhysicsPileChart.d.ts +60 -0
- package/dist/components/charts/physics/ProcessFlowChart.capability.d.ts +2 -0
- package/dist/components/charts/physics/ProcessFlowChart.d.ts +96 -0
- package/dist/components/charts/physics/chainReactionOverlay.d.ts +22 -0
- package/dist/components/charts/physics/chainReactionRuntime.d.ts +37 -0
- package/dist/components/charts/physics/chainReactionTypes.d.ts +97 -0
- package/dist/components/charts/physics/collisionSwarmPhysics.d.ts +27 -0
- package/dist/components/charts/physics/dependencyMachine.d.ts +188 -0
- package/dist/components/charts/physics/eventDropPhysics.d.ts +64 -0
- package/dist/components/charts/physics/galtonBoardPhysics.d.ts +28 -0
- package/dist/components/charts/physics/gauntletChartProps.d.ts +67 -0
- package/dist/components/charts/physics/gauntletChrome.d.ts +33 -0
- package/dist/components/charts/physics/gauntletController.d.ts +73 -0
- package/dist/components/charts/physics/gauntletEffects.d.ts +36 -0
- package/dist/components/charts/physics/gauntletPhysics.d.ts +71 -0
- package/dist/components/charts/physics/gauntletRuntime.d.ts +42 -0
- package/dist/components/charts/physics/gauntletTypes.d.ts +213 -0
- package/dist/components/charts/physics/physicalFlowPhysics.d.ts +57 -0
- package/dist/components/charts/physics/physicsChartShared.d.ts +57 -0
- package/dist/components/charts/physics/physicsChartUtils.d.ts +18 -0
- package/dist/components/charts/physics/physicsCustomLayout.d.ts +32 -0
- package/dist/components/charts/physics/physicsEncoding.d.ts +142 -0
- package/dist/components/charts/physics/physicsHocHandle.d.ts +53 -0
- package/dist/components/charts/physics/physicsHocUtils.d.ts +128 -0
- package/dist/components/charts/physics/physicsPilePhysics.d.ts +41 -0
- package/dist/components/charts/physics/physicsProcessPrimitives.d.ts +38 -0
- package/dist/components/charts/physics/processFlowPhysics.d.ts +97 -0
- package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +9 -1
- package/dist/components/charts/realtime/RealtimeHistogram.d.ts +9 -1
- package/dist/components/charts/realtime/RealtimeLineChart.d.ts +9 -1
- package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +16 -2
- package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +9 -1
- package/dist/components/charts/shared/AnnotationLabel.d.ts +88 -0
- package/dist/components/charts/shared/annotationActivation.d.ts +35 -0
- package/dist/components/charts/shared/annotationLabelLayout.d.ts +5 -0
- package/dist/components/charts/shared/annotationRules.d.ts +2 -1
- package/dist/components/charts/shared/auditMobileVisualization.d.ts +91 -0
- package/dist/components/charts/shared/chartDefinitionPilot.d.ts +145 -0
- package/dist/components/charts/shared/chartFamilySets.d.ts +20 -0
- package/dist/components/charts/shared/chartSelectionUtils.d.ts +4 -0
- package/dist/components/charts/shared/chartSpecCore.d.ts +165 -0
- package/dist/components/charts/shared/chartSpecs.d.ts +8 -127
- package/dist/components/charts/shared/chartSpecsGeo.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsNetwork.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsOrdinal.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsPhysics.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsRealtime.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsValue.d.ts +2 -0
- package/dist/components/charts/shared/chartSpecsXY.d.ts +2 -0
- package/dist/components/charts/shared/colorContrast.d.ts +3 -0
- package/dist/components/charts/shared/colorUtils.d.ts +16 -1
- package/dist/components/charts/shared/datumTypes.d.ts +2 -0
- package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +6 -0
- package/dist/components/charts/shared/diagnoseConfig.d.ts +9 -14
- package/dist/components/charts/shared/diagnoseMisleadingChecks.d.ts +9 -0
- package/dist/components/charts/shared/diagnosePhysicsChecks.d.ts +3 -0
- package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
- package/dist/components/charts/shared/formatUtils.d.ts +3 -3
- package/dist/components/charts/shared/hatchFill.d.ts +87 -0
- package/dist/components/charts/shared/hooks.d.ts +34 -10
- package/dist/components/charts/shared/knownChartComponents.d.ts +9 -0
- package/dist/components/charts/shared/leastSquaresRegression.d.ts +16 -0
- package/dist/components/charts/shared/mergeShapeStyle.d.ts +3 -2
- package/dist/components/charts/shared/motionEncoding.d.ts +145 -0
- package/dist/components/charts/shared/responsiveRules.d.ts +56 -0
- package/dist/components/charts/shared/semanticInteractions.d.ts +42 -0
- package/dist/components/charts/shared/sparseArray.d.ts +1 -1
- package/dist/components/charts/shared/streamPropsHelpers.d.ts +17 -5
- package/dist/components/charts/shared/styleRules.d.ts +205 -0
- package/dist/components/charts/shared/temporalStrings.d.ts +7 -0
- package/dist/components/charts/shared/tooltipUtils.d.ts +22 -9
- package/dist/components/charts/shared/types.d.ts +58 -7
- package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +16 -2
- package/dist/components/charts/shared/useChartSetup.d.ts +11 -4
- package/dist/components/charts/shared/useCustomChartSetup.d.ts +17 -5
- package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -2
- package/dist/components/charts/shared/useLikertAggregation.d.ts +4 -4
- package/dist/components/charts/shared/useNetworkChartSetup.d.ts +6 -2
- package/dist/components/charts/shared/useOrdinalBrush.d.ts +2 -1
- package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +25 -2
- package/dist/components/charts/shared/useStreamingLegend.d.ts +2 -2
- package/dist/components/charts/shared/useSyncedPushData.d.ts +49 -0
- package/dist/components/charts/shared/useXYLineStyle.d.ts +10 -0
- package/dist/components/charts/shared/useXYPointStyle.d.ts +19 -1
- package/dist/components/charts/shared/validateChartData.d.ts +7 -5
- package/dist/components/charts/shared/validationMap.d.ts +7 -9
- package/dist/components/charts/shared/validationMap.generated.d.ts +6 -0
- package/dist/components/charts/shared/withChartWrapper.d.ts +4 -3
- package/dist/components/charts/value/targetPresentation.d.ts +22 -0
- package/dist/components/charts/value/types.d.ts +5 -6
- package/dist/components/charts/xy/AreaChart.d.ts +9 -1
- package/dist/components/charts/xy/BubbleChart.d.ts +10 -1
- package/dist/components/charts/xy/ConnectedScatterplot.d.ts +7 -0
- package/dist/components/charts/xy/DifferenceChart.d.ts +1 -52
- package/dist/components/charts/xy/Heatmap.d.ts +2 -2
- package/dist/components/charts/xy/LineChart.d.ts +12 -1
- package/dist/components/charts/xy/MinimapChart.d.ts +1 -1
- package/dist/components/charts/xy/MultiAxisLineChart.d.ts +2 -2
- package/dist/components/charts/xy/QuadrantChart.d.ts +8 -1
- package/dist/components/charts/xy/Scatterplot.d.ts +11 -1
- package/dist/components/charts/xy/ScatterplotMatrix.d.ts +11 -1
- package/dist/components/charts/xy/StackedAreaChart.d.ts +16 -4
- package/dist/components/charts/xy/differenceSegments.d.ts +49 -0
- package/dist/components/charts/xy/scatterplotMatrixInteractionTypes.d.ts +12 -0
- package/dist/components/controls/SentenceFilter.d.ts +97 -0
- package/dist/components/controls/controlAudit.d.ts +24 -0
- package/dist/components/controls/controlContract.d.ts +57 -0
- package/dist/components/data/fromFlintChart.d.ts +74 -0
- package/dist/components/data/fromVegaLite.d.ts +46 -9
- package/dist/components/data/portability/index.d.ts +6 -3
- package/dist/components/data/portability/result.d.ts +52 -0
- package/dist/components/data/portability/spec.d.ts +31 -0
- package/dist/components/data/portability/vegaLite.d.ts +24 -6
- package/dist/components/export/chartConfig.d.ts +11 -0
- package/dist/components/realtime/types.d.ts +11 -0
- package/dist/components/recipes/annotationLayout.d.ts +29 -0
- package/dist/components/recipes/axisFixedForce.d.ts +119 -0
- package/dist/components/recipes/{gofishBoba.d.ts → boba.d.ts} +2 -2
- package/dist/components/recipes/cyclical.d.ts +39 -0
- package/dist/components/recipes/edgeRouter.d.ts +103 -0
- package/dist/components/recipes/forceLayout.d.ts +48 -0
- package/dist/components/recipes/forceLayoutAsync.d.ts +17 -0
- package/dist/components/recipes/gofishBobaHandwritten.d.ts +3 -0
- package/dist/components/recipes/gofishDisplayListFixtures.generated.d.ts +37 -0
- package/dist/components/recipes/gofishIR.d.ts +178 -132
- package/dist/components/recipes/gofishIRExamples.d.ts +30 -81
- package/dist/components/recipes/intervalLanes.d.ts +87 -0
- package/dist/components/recipes/intervals.d.ts +80 -0
- package/dist/components/recipes/isometricLandmarks.d.ts +88 -0
- package/dist/components/recipes/isotypeGlyphs.d.ts +17 -0
- package/dist/components/recipes/mobileAnnotationStrategy.d.ts +48 -0
- package/dist/components/recipes/mobileChartFamilyRecipes.d.ts +59 -0
- package/dist/components/recipes/networkAnalysis.d.ts +102 -0
- package/dist/components/recipes/networkLayouts.d.ts +83 -0
- package/dist/components/recipes/physics.d.ts +122 -0
- package/dist/components/recipes/physicsReference.d.ts +102 -0
- package/dist/components/recipes/processAggregates.d.ts +32 -0
- package/dist/components/recipes/processChrome.d.ts +67 -0
- package/dist/components/recipes/processJourney.d.ts +54 -0
- package/dist/components/recipes/processPhysics.d.ts +300 -0
- package/dist/components/recipes/processVolumeGeometry.d.ts +28 -0
- package/dist/components/recipes/radialCoords.d.ts +69 -0
- package/dist/components/recipes/random.d.ts +2 -0
- package/dist/components/recipes/recipeChrome.d.ts +91 -0
- package/dist/components/recipes/recipeGlyph.d.ts +42 -0
- package/dist/components/recipes/recipeLegend.d.ts +53 -1
- package/dist/components/recipes/recipeUtils.d.ts +52 -0
- package/dist/components/recipes/runs.d.ts +59 -0
- package/dist/components/recipes/tokenEncoding.d.ts +157 -0
- package/dist/components/recipes/tokenLayer.d.ts +79 -0
- package/dist/components/recipes/unitize.d.ts +108 -0
- package/dist/components/recipes/vector.d.ts +28 -0
- package/dist/components/recipes/waffle.d.ts +43 -0
- package/dist/components/rough/createRoughRenderMode.d.ts +46 -0
- package/dist/components/semiotic-ai-core.d.ts +47 -0
- package/dist/components/semiotic-ai.d.ts +53 -9
- package/dist/components/semiotic-controls.d.ts +20 -0
- package/dist/components/semiotic-experimental.d.ts +38 -9
- package/dist/components/semiotic-geo.d.ts +15 -0
- package/dist/components/semiotic-network.d.ts +15 -0
- package/dist/components/semiotic-ordinal.d.ts +14 -0
- package/dist/components/semiotic-physics-matter.d.ts +10 -0
- package/dist/components/semiotic-physics-rapier.d.ts +9 -0
- package/dist/components/semiotic-physics.d.ts +60 -0
- package/dist/components/semiotic-realtime-core.d.ts +34 -0
- package/dist/components/semiotic-realtime-react.d.ts +10 -0
- package/dist/components/semiotic-realtime.d.ts +4 -30
- package/dist/components/semiotic-recipes-core.d.ts +92 -0
- package/dist/components/semiotic-recipes-react.d.ts +7 -0
- package/dist/components/semiotic-recipes.d.ts +4 -43
- package/dist/components/semiotic-rough.d.ts +4 -0
- package/dist/components/semiotic-server-edge.d.ts +8 -0
- package/dist/components/semiotic-server-node.d.ts +5 -0
- package/dist/components/semiotic-server.d.ts +2 -2
- package/dist/components/semiotic-themes-core.d.ts +53 -0
- package/dist/components/semiotic-themes-react.d.ts +4 -0
- package/dist/components/semiotic-themes.d.ts +6 -76
- package/dist/components/semiotic-utils-core.d.ts +50 -0
- package/dist/components/semiotic-utils-react.d.ts +5 -0
- package/dist/components/semiotic-utils.d.ts +3 -39
- package/dist/components/semiotic-xy.d.ts +12 -0
- package/dist/components/semiotic.d.ts +44 -8
- package/dist/components/server/animatedGif.d.ts +36 -0
- package/dist/components/server/optionalImageTypes.d.ts +37 -0
- package/dist/components/server/renderEvidence.d.ts +1 -1
- package/dist/components/server/renderToStaticSVG.d.ts +3 -35
- package/dist/components/server/serverChartConfigShared.d.ts +21 -0
- package/dist/components/server/serverChartConfigs.d.ts +22 -12
- package/dist/components/server/serverChartConfigsCustom.d.ts +5 -0
- package/dist/components/server/serverChartConfigsGeo.d.ts +9 -0
- package/dist/components/server/serverChartConfigsNetwork.d.ts +8 -0
- package/dist/components/server/serverChartConfigsOrdinal.d.ts +16 -0
- package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
- package/dist/components/server/serverChartConfigsXY.d.ts +11 -0
- package/dist/components/server/staticAnnotations.d.ts +6 -3
- package/dist/components/server/staticGeo.d.ts +4 -0
- package/dist/components/server/staticLegend.d.ts +2 -2
- package/dist/components/server/staticNetwork.d.ts +8 -0
- package/dist/components/server/staticOrdinal.d.ts +11 -0
- package/dist/components/server/staticPhysics.d.ts +3 -0
- package/dist/components/server/staticSVGChrome.d.ts +110 -0
- package/dist/components/server/staticXY.d.ts +4 -0
- package/dist/components/store/ObservationStore.d.ts +23 -2
- package/dist/components/store/themeSerialization.d.ts +32 -0
- package/dist/components/store/useChartInterrogation.d.ts +9 -0
- package/dist/components/stream/AccessibleDataTable.d.ts +7 -23
- package/dist/components/stream/AriaLiveTooltip.d.ts +9 -0
- package/dist/components/stream/CanvasHitTester.d.ts +4 -4
- package/dist/components/stream/DataSourceAdapter.d.ts +1 -1
- package/dist/components/stream/FocusRing.d.ts +4 -2
- package/dist/components/stream/FrameRuntime.d.ts +57 -0
- package/dist/components/stream/GeoCanvasHitTester.d.ts +1 -1
- package/dist/components/stream/GeoParticlePool.d.ts +1 -1
- package/dist/components/stream/GeoPipelineStore.d.ts +62 -3
- package/dist/components/stream/GeoSVGOverlay.d.ts +64 -0
- package/dist/components/stream/NetworkCanvasHitTester.d.ts +2 -1
- package/dist/components/stream/NetworkPipelineStore.d.ts +44 -36
- package/dist/components/stream/NetworkSSRFrame.d.ts +17 -0
- package/dist/components/stream/NetworkSVGOverlay.d.ts +10 -1
- package/dist/components/stream/OrdinalCanvasHitTester.d.ts +2 -2
- package/dist/components/stream/OrdinalPipelineStore.d.ts +55 -11
- package/dist/components/stream/OrdinalSVGOverlay.d.ts +9 -1
- package/dist/components/stream/OrdinalStyleResolver.d.ts +12 -0
- package/dist/components/stream/ParticlePool.d.ts +1 -1
- package/dist/components/stream/PipelineStore.d.ts +81 -174
- package/dist/components/stream/SVGOverlay.d.ts +6 -0
- package/dist/components/stream/SceneGraph.d.ts +12 -4
- package/dist/components/stream/StreamGeoFrame.d.ts +1 -1
- package/dist/components/stream/StreamNetworkFrame.d.ts +1 -1
- package/dist/components/stream/StreamOrdinalFrame.d.ts +1 -1
- package/dist/components/stream/StreamXYFrame.d.ts +2 -18
- package/dist/components/stream/accessibleDataRows.d.ts +33 -0
- package/dist/components/stream/accessorUtils.d.ts +25 -12
- package/dist/components/stream/annotationAccessorResolver.d.ts +2 -2
- package/dist/components/stream/brushAccessibility.d.ts +25 -0
- package/dist/components/stream/canvasBackground.d.ts +24 -0
- package/dist/components/stream/canvasSetup.d.ts +4 -1
- package/dist/components/stream/customLayoutFailure.d.ts +33 -0
- package/dist/components/stream/customLayoutPalette.d.ts +19 -9
- package/dist/components/stream/frameGraphics.d.ts +4 -0
- package/dist/components/stream/frameKeyboardNavigation.d.ts +45 -0
- package/dist/components/stream/frameThemeColors.d.ts +24 -0
- package/dist/components/stream/geoAnnotationAnchors.d.ts +14 -0
- package/dist/components/stream/geoCartogram.d.ts +17 -0
- package/dist/components/stream/geoCustomLayout.d.ts +59 -0
- package/dist/components/stream/geoDefaultTooltip.d.ts +11 -0
- package/dist/components/stream/geoFrameHelpers.d.ts +34 -0
- package/dist/components/stream/geoPipelineHelpers.d.ts +46 -0
- package/dist/components/stream/geoPipelineUpdateResults.d.ts +34 -0
- package/dist/components/stream/geoSceneBuilder.d.ts +16 -0
- package/dist/components/stream/geoTypes.d.ts +97 -15
- package/dist/components/stream/glyphDef.d.ts +98 -0
- package/dist/components/stream/hitTarget.d.ts +170 -0
- package/dist/components/stream/hitTestUtils.d.ts +2 -2
- package/dist/components/stream/hoverUtils.d.ts +7 -2
- package/dist/components/stream/keyboardNav.d.ts +4 -1
- package/dist/components/stream/layouts/forceLayoutPlugin.d.ts +9 -1
- package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +58 -0
- package/dist/components/stream/layouts/hierarchyUtils.d.ts +2 -2
- package/dist/components/stream/networkBezier.d.ts +10 -0
- package/dist/components/stream/networkColorAccessors.d.ts +49 -0
- package/dist/components/stream/networkCustomLayoutRunner.d.ts +23 -0
- package/dist/components/stream/networkCustomRestyle.d.ts +15 -0
- package/dist/components/stream/networkDefaultTooltip.d.ts +10 -0
- package/dist/components/stream/networkFrameAnimation.d.ts +7 -0
- package/dist/components/stream/networkFrameHandleTypes.d.ts +39 -0
- package/dist/components/stream/networkFrameInteraction.d.ts +37 -0
- package/dist/components/stream/networkFrameObservations.d.ts +15 -0
- package/dist/components/stream/networkFramePaint.d.ts +52 -0
- package/dist/components/stream/networkInteractionTypes.d.ts +26 -0
- package/dist/components/stream/networkPipelineConfig.d.ts +22 -0
- package/dist/components/stream/networkPipelineHelpers.d.ts +12 -0
- package/dist/components/stream/networkPipelineUpdateResults.d.ts +38 -0
- package/dist/components/stream/networkRealtimeEncoding.d.ts +41 -0
- package/dist/components/stream/networkTypes.d.ts +103 -51
- package/dist/components/stream/ordinalCanvasRenderers.d.ts +7 -0
- package/dist/components/stream/ordinalDataIndex.d.ts +5 -0
- package/dist/components/stream/ordinalDefaultTooltip.d.ts +10 -0
- package/dist/components/stream/ordinalDomain.d.ts +38 -0
- package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +31 -0
- package/dist/components/stream/ordinalPulse.d.ts +10 -0
- package/dist/components/stream/ordinalPulseResources.d.ts +3 -0
- package/dist/components/stream/ordinalSceneBuilders/sceneBuilderMap.d.ts +5 -0
- package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -2
- package/dist/components/stream/ordinalSpatialIndex.d.ts +9 -0
- package/dist/components/stream/ordinalTypes.d.ts +68 -9
- package/dist/components/stream/paintNeeds.d.ts +31 -0
- package/dist/components/stream/physics/CapacityQueueController.d.ts +5 -0
- package/dist/components/stream/physics/CapacityQueueTypes.d.ts +134 -0
- package/dist/components/stream/physics/MatterPhysicsEngineAdapter.d.ts +42 -0
- package/dist/components/stream/physics/PhysicsAccessibility.d.ts +48 -0
- package/dist/components/stream/physics/PhysicsAnnotations.d.ts +58 -0
- package/dist/components/stream/physics/PhysicsBodyBudget.d.ts +26 -0
- package/dist/components/stream/physics/PhysicsBodySpatialIndex.d.ts +10 -0
- package/dist/components/stream/physics/PhysicsCanvasTheme.d.ts +26 -0
- package/dist/components/stream/physics/PhysicsControllers.d.ts +75 -0
- package/dist/components/stream/physics/PhysicsEngineAdapter.d.ts +59 -0
- package/dist/components/stream/physics/PhysicsEngineConformance.d.ts +23 -0
- package/dist/components/stream/physics/PhysicsEvidence.d.ts +25 -0
- package/dist/components/stream/physics/PhysicsKernel.d.ts +207 -0
- package/dist/components/stream/physics/PhysicsOptionalEngineAdapters.d.ts +12 -0
- package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +86 -0
- package/dist/components/stream/physics/PhysicsPipelineTypes.d.ts +181 -0
- package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +78 -0
- package/dist/components/stream/physics/PhysicsSediment.d.ts +69 -0
- package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +18 -0
- package/dist/components/stream/physics/PhysicsSettledScene.d.ts +21 -0
- package/dist/components/stream/physics/PhysicsWorkerClient.d.ts +24 -0
- package/dist/components/stream/physics/PhysicsWorkerProtocol.d.ts +101 -0
- package/dist/components/stream/physics/PhysicsWorkerRuntime.d.ts +5 -0
- package/dist/components/stream/physics/RapierPhysicsEngineAdapter.d.ts +18 -0
- package/dist/components/stream/physics/ServiceOperationsControllers.d.ts +27 -0
- package/dist/components/stream/physics/ServiceOperationsTypes.d.ts +89 -0
- package/dist/components/stream/physics/StreamPhysicsFrame.d.ts +6 -0
- package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +317 -0
- package/dist/components/stream/physics/physicsBodyCanvas.d.ts +27 -0
- package/dist/components/stream/physics/physicsFrameObservations.d.ts +19 -0
- package/dist/components/stream/physics/physicsFrameSetup.d.ts +4 -0
- package/dist/components/stream/physics/physicsPipelineControls.d.ts +4 -0
- package/dist/components/stream/physics/physicsPipelineHelpers.d.ts +41 -0
- package/dist/components/stream/physics/physicsPipelineObservations.d.ts +14 -0
- package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +27 -0
- package/dist/components/stream/physics/physicsRegionRuntime.d.ts +54 -0
- package/dist/components/stream/physics/physicsSemanticUI.d.ts +20 -0
- package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +18 -0
- package/dist/components/stream/pipelineBufferUtils.d.ts +26 -0
- package/dist/components/stream/pipelineConfig.d.ts +179 -0
- package/dist/components/stream/pipelineDecay.d.ts +21 -3
- package/dist/components/stream/pipelineDomainResolution.d.ts +62 -0
- package/dist/components/stream/pipelineIdentityOps.d.ts +26 -0
- package/dist/components/stream/pipelinePulse.d.ts +17 -3
- package/dist/components/stream/pipelineRibbons.d.ts +41 -0
- package/dist/components/stream/pipelineSpatialIndex.d.ts +12 -0
- package/dist/components/stream/pipelineStoreUpdateResults.d.ts +33 -0
- package/dist/components/stream/pipelineStyleResolvers.d.ts +46 -0
- package/dist/components/stream/pipelineTransitions.d.ts +3 -1
- package/dist/components/stream/pipelineUpdateContract.d.ts +69 -0
- package/dist/components/stream/pipelineUpdateStore.d.ts +21 -0
- package/dist/components/stream/pulseFrameRefresh.d.ts +22 -0
- package/dist/components/stream/renderBackend.d.ts +27 -0
- package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +15 -1
- package/dist/components/stream/renderers/geoCanvasRenderer.d.ts +3 -2
- package/dist/components/stream/renderers/glyphCanvasRenderer.d.ts +6 -0
- package/dist/components/stream/renderers/networkParticleRenderer.d.ts +1 -1
- package/dist/components/stream/renderers/resolveCSSColor.d.ts +6 -0
- package/dist/components/stream/sceneRenderBackendTypes.d.ts +28 -0
- package/dist/components/stream/sceneRevisionDiagnostics.d.ts +45 -0
- package/dist/components/stream/streamSemanticTypes.d.ts +16 -0
- package/dist/components/stream/streamStoreSync.d.ts +37 -0
- package/dist/components/stream/streamThemeTypes.d.ts +14 -0
- package/dist/components/stream/svgOverlayUtils.d.ts +10 -0
- package/dist/components/stream/test-utils/frameScheduler.d.ts +12 -0
- package/dist/components/stream/test-utils/revisionConsumption.d.ts +13 -0
- package/dist/components/stream/titleLayout.d.ts +31 -0
- package/dist/components/stream/types.d.ts +165 -72
- package/dist/components/stream/useCanvasFrameHost.d.ts +71 -0
- package/dist/components/stream/useFrame.d.ts +44 -2
- package/dist/components/stream/useHydration.d.ts +6 -0
- package/dist/components/stream/useLegendCategoryEmission.d.ts +5 -0
- package/dist/components/stream/useSemanticFrameInteractions.d.ts +22 -0
- package/dist/components/stream/useUpdateResultSnapshot.d.ts +7 -0
- package/dist/components/stream/workerModuleUrl.d.ts +10 -0
- package/dist/components/stream/xyAnnotationAnchors.d.ts +13 -0
- package/dist/components/stream/xyCanvasRenderers.d.ts +7 -0
- package/dist/components/stream/xyCrosshair.d.ts +11 -0
- package/dist/components/stream/xyDateTicks.d.ts +9 -0
- package/dist/components/stream/xyDefaultTooltip.d.ts +10 -0
- package/dist/components/stream/xyFrameAxisTypes.d.ts +50 -0
- package/dist/components/stream/xySceneBuilders/types.d.ts +10 -9
- package/dist/controls.min.js +2 -0
- package/dist/controls.module.min.js +2 -0
- package/dist/forceLayoutWorker.js +1 -0
- package/dist/geo.min.js +1 -1
- package/dist/geo.module.min.js +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/physics-matter.min.js +1 -0
- package/dist/physics-matter.module.min.js +1 -0
- package/dist/physics-rapier.min.js +1 -0
- package/dist/physics-rapier.module.min.js +1 -0
- package/dist/physics.min.js +2 -0
- package/dist/physics.module.min.js +2 -0
- package/dist/physicsWorker.js +1 -0
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/rough.min.js +1 -0
- package/dist/rough.module.min.js +1 -0
- package/dist/semiotic-ai-chunk-OG7BQUUW.module.min.js +2 -0
- package/dist/semiotic-ai-core.d.ts +47 -0
- package/dist/semiotic-ai-core.min.js +1 -0
- package/dist/semiotic-ai-core.module.min.js +1 -0
- package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +2 -0
- package/dist/semiotic-ai.d.ts +53 -9
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-chunk-3FSVZ46U.module.min.js +2 -0
- package/dist/semiotic-controls.d.ts +20 -0
- package/dist/semiotic-data.min.js +1 -1
- package/dist/semiotic-data.module.min.js +1 -1
- package/dist/semiotic-experimental.d.ts +38 -9
- package/dist/semiotic-experimental.min.js +1 -1
- package/dist/semiotic-experimental.module.min.js +1 -1
- package/dist/semiotic-geo.d.ts +15 -0
- package/dist/semiotic-network.d.ts +15 -0
- package/dist/semiotic-ordinal.d.ts +14 -0
- package/dist/semiotic-physics-matter.d.ts +10 -0
- package/dist/semiotic-physics-rapier.d.ts +9 -0
- package/dist/semiotic-physics.d.ts +60 -0
- package/dist/semiotic-realtime-core.d.ts +34 -0
- package/dist/semiotic-realtime-core.min.js +1 -0
- package/dist/semiotic-realtime-core.module.min.js +1 -0
- package/dist/semiotic-realtime-react.d.ts +10 -0
- package/dist/semiotic-realtime-react.min.js +2 -0
- package/dist/semiotic-realtime-react.module.min.js +2 -0
- package/dist/semiotic-realtime.d.ts +4 -30
- package/dist/semiotic-recipes-core.d.ts +92 -0
- package/dist/semiotic-recipes-core.min.js +1 -0
- package/dist/semiotic-recipes-core.module.min.js +1 -0
- package/dist/semiotic-recipes-react.d.ts +7 -0
- package/dist/semiotic-recipes-react.min.js +2 -0
- package/dist/semiotic-recipes-react.module.min.js +2 -0
- package/dist/semiotic-recipes.d.ts +4 -43
- package/dist/semiotic-recipes.min.js +1 -1
- package/dist/semiotic-recipes.module.min.js +1 -1
- package/dist/semiotic-rough.d.ts +4 -0
- package/dist/semiotic-server-edge.d.ts +8 -0
- package/dist/semiotic-server-edge.min.js +1 -0
- package/dist/semiotic-server-edge.module.min.js +1 -0
- package/dist/semiotic-server-node.d.ts +5 -0
- package/dist/semiotic-server-node.min.js +1 -0
- package/dist/semiotic-server-node.module.min.js +1 -0
- package/dist/semiotic-server.d.ts +2 -2
- package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +2 -0
- package/dist/semiotic-themes-core.d.ts +53 -0
- package/dist/semiotic-themes-core.min.js +1 -0
- package/dist/semiotic-themes-core.module.min.js +1 -0
- package/dist/semiotic-themes-react.d.ts +4 -0
- package/dist/semiotic-themes-react.min.js +2 -0
- package/dist/semiotic-themes-react.module.min.js +2 -0
- package/dist/semiotic-themes.d.ts +6 -76
- package/dist/semiotic-themes.min.js +1 -2
- package/dist/semiotic-themes.module.min.js +1 -2
- package/dist/semiotic-utils-core.d.ts +50 -0
- package/dist/semiotic-utils-core.min.js +1 -0
- package/dist/semiotic-utils-core.module.min.js +1 -0
- package/dist/semiotic-utils-react.d.ts +5 -0
- package/dist/semiotic-utils-react.min.js +2 -0
- package/dist/semiotic-utils-react.module.min.js +2 -0
- package/dist/semiotic-utils.d.ts +3 -39
- package/dist/semiotic-utils.min.js +1 -2
- package/dist/semiotic-utils.module.min.js +1 -2
- package/dist/semiotic-value.min.js +1 -1
- package/dist/semiotic-value.module.min.js +1 -1
- package/dist/semiotic-xy.d.ts +12 -0
- package/dist/semiotic.d.ts +44 -8
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/test-utils/capturedFrameProps.d.ts +67 -0
- package/dist/test-utils/frameMock.d.ts +12 -9
- package/dist/xy-chunk-IWD6IB6V.module.min.js +2 -0
- package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +2 -0
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +259 -88
- package/spec/README.md +152 -0
- package/spec/bindings/README.md +35 -0
- package/spec/bindings/vega-lite.mjs +112 -0
- package/spec/v0.1/annotation-provenance.schema.json +127 -0
- package/spec/v0.1/audience-profile.schema.json +67 -0
- package/spec/v0.1/chart-capability.schema.json +186 -0
- package/dist/components/recipes/gofish.d.ts +0 -207
- package/dist/components/recipes/gofishInterpreter.d.ts +0 -52
- package/dist/components/recipes/gofishLambdas.d.ts +0 -145
- package/dist/semiotic-ai-semiotic-ai-u954ylUn.js +0 -2
- package/dist/semiotic-ai-statisticalOverlays-CU7jW05Q.js +0 -1
- package/dist/semiotic-semiotic-BmrYbi99.js +0 -2
- package/dist/semiotic-statisticalOverlays-IjZw8Lsu.js +0 -1
- package/dist/xy-semiotic-xy-Dufu3D0-.js +0 -2
- 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
|
-
|
|
190
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
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
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
-
|
|
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
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
console.log(
|
|
333
|
-
|
|
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
|
-
|
|
342
|
-
|
|
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
|
-
|
|
348
|
-
|
|
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
|
-
|
|
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) {
|
package/ai/componentMetadata.cjs
CHANGED
|
@@ -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
|
|