semiotic 3.8.5 → 3.8.7
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 +37 -10
- package/README.md +83 -56
- package/ai/behaviorContracts.cjs +88 -3
- package/ai/componentMetadata.cjs +5 -10
- package/ai/dist/mcp-server.js +99 -10
- package/ai/examples.md +198 -9
- package/ai/schema.json +2002 -165
- package/ai/surface-manifest.json +14 -10
- package/ai/system-prompt.md +9 -3
- package/dist/{chunk-chartContainerDataAudit-74TLKIP6.module.min.js → chunk-chartContainerDataAudit-JDSVSKGM.module.min.js} +1 -1
- package/dist/chunk-chunk-2JGJ5GUG.module.min.js +1 -0
- package/dist/chunk-chunk-2YAZHXL4.module.min.js +2 -0
- package/dist/chunk-chunk-3NGIKFD6.module.min.js +1 -0
- package/dist/{chunk-chunk-G7WFWHAD.module.min.js → chunk-chunk-4ITOQRXM.module.min.js} +1 -1
- package/dist/chunk-chunk-5SD6BHVW.module.min.js +2 -0
- package/dist/chunk-chunk-6V5VQVCT.module.min.js +2 -0
- package/dist/chunk-chunk-7TTBHSAG.module.min.js +2 -0
- package/dist/chunk-chunk-7ZDJSYKI.module.min.js +2 -0
- package/dist/chunk-chunk-BGHPD3RA.module.min.js +1 -0
- package/dist/chunk-chunk-BMRZ2SPU.module.min.js +2 -0
- package/dist/chunk-chunk-BNGBEY7N.module.min.js +2 -0
- package/dist/chunk-chunk-C7APLVQD.module.min.js +2 -0
- package/dist/chunk-chunk-DGWFBOGB.module.min.js +1 -0
- package/dist/chunk-chunk-DIVE2DRA.module.min.js +2 -0
- package/dist/chunk-chunk-FBUNUIPV.module.min.js +2 -0
- package/dist/chunk-chunk-FQPKOAIH.module.min.js +2 -0
- package/dist/chunk-chunk-FRO4TRXK.module.min.js +2 -0
- package/dist/chunk-chunk-G7QVPZUD.module.min.js +2 -0
- package/dist/chunk-chunk-GBPYV4FP.module.min.js +2 -0
- package/dist/chunk-chunk-GU2EJIDJ.module.min.js +2 -0
- package/dist/chunk-chunk-J5QD4RAM.module.min.js +2 -0
- package/dist/{chunk-chunk-LJLS6DY7.module.min.js → chunk-chunk-JWXLNZSM.module.min.js} +1 -1
- package/dist/chunk-chunk-KXAFCCDB.module.min.js +2 -0
- package/dist/chunk-chunk-LG7YKJAK.module.min.js +2 -0
- package/dist/{chunk-chunk-I36PJ4OC.module.min.js → chunk-chunk-LVHDZAT3.module.min.js} +1 -1
- package/dist/chunk-chunk-LWITSR2O.module.min.js +2 -0
- package/dist/chunk-chunk-MX35T6RX.module.min.js +2 -0
- package/dist/chunk-chunk-NH4MEAKP.module.min.js +2 -0
- package/dist/chunk-chunk-NJETWX42.module.min.js +2 -0
- package/dist/chunk-chunk-NW25WGLS.module.min.js +2 -0
- package/dist/{chunk-chunk-TMWIZL3K.module.min.js → chunk-chunk-OI7R7EJB.module.min.js} +1 -1
- package/dist/chunk-chunk-ONMLEXHR.module.min.js +2 -0
- package/dist/chunk-chunk-OY66GCE6.module.min.js +1 -0
- package/dist/chunk-chunk-PZFT457G.module.min.js +1 -0
- package/dist/chunk-chunk-Q3WW6JGR.module.min.js +1 -0
- package/dist/chunk-chunk-Q6XKQTOQ.module.min.js +1 -0
- package/dist/chunk-chunk-RJRM2E6P.module.min.js +1 -0
- package/dist/chunk-chunk-RPL7WYXI.module.min.js +1 -0
- package/dist/chunk-chunk-SV4XAZ3Q.module.min.js +1 -0
- package/dist/chunk-chunk-TSCFL235.module.min.js +1 -0
- package/dist/chunk-chunk-UOQRPGPK.module.min.js +2 -0
- package/dist/chunk-chunk-V3OAKG32.module.min.js +1 -0
- package/dist/chunk-chunk-WLOIUMWG.module.min.js +2 -0
- package/dist/chunk-chunk-XEGXX4F7.module.min.js +1 -0
- package/dist/chunk-chunk-XFRBLXYM.module.min.js +1 -0
- package/dist/chunk-chunk-Z2AJERX5.module.min.js +2 -0
- package/dist/chunk-chunk-ZXYDYAB7.module.min.js +2 -0
- package/dist/components/ai/SemioticVACPBridge.d.ts +22 -0
- package/dist/components/ai/chartCapabilities.d.ts +5 -3
- package/dist/components/ai/conversationArc.d.ts +2 -176
- package/dist/components/ai/conversationArcTypes.d.ts +202 -0
- package/dist/components/ai/readerGrounding.d.ts +12 -0
- package/dist/components/ai/vacpAdapter.d.ts +13 -0
- package/dist/components/ai/vacpAdapterActions.d.ts +2 -0
- package/dist/components/ai/vacpAdapterModel.d.ts +7 -0
- package/dist/components/ai/vacpAdapterRuntime.d.ts +26 -0
- package/dist/components/ai/vacpAdapterState.d.ts +3 -0
- package/dist/components/ai/vacpAdapterTypes.d.ts +169 -0
- package/dist/components/ai/vacpTypes.d.ts +160 -0
- package/dist/components/charts/custom/XYCustomChart.d.ts +3 -0
- package/dist/components/charts/geo/DistanceCartogram.d.ts +1 -1
- package/dist/components/charts/index.d.ts +7 -4
- package/dist/components/charts/ordinal/BarChart.d.ts +7 -14
- package/dist/components/charts/ordinal/GaugeChart.d.ts +3 -0
- package/dist/components/charts/ordinal/GroupedBarChart.d.ts +3 -0
- package/dist/components/charts/ordinal/StackedBarChart.d.ts +3 -0
- package/dist/components/charts/ordinal/SwimlaneChart.d.ts +4 -14
- package/dist/components/charts/physics/ChainReactionChart.capability.d.ts +9 -0
- package/dist/components/charts/physics/ChainReactionChart.d.ts +29 -0
- package/dist/components/charts/physics/CollisionSwarmChart.d.ts +1 -1
- package/dist/components/charts/physics/EventDropChart.d.ts +7 -2
- package/dist/components/charts/physics/GaltonBoardChart.d.ts +1 -1
- package/dist/components/charts/physics/{PhysicsPileChart.capability.d.ts → PacketFlowChart.capability.d.ts} +1 -1
- package/dist/components/charts/physics/{PhysicalFlowChart.d.ts → PacketFlowChart.d.ts} +22 -6
- package/dist/components/charts/physics/PhysicsCustomChart.d.ts +1 -1
- package/dist/components/charts/physics/ProcessFlowChart.d.ts +7 -4
- package/dist/components/charts/physics/{PhysicalFlowChart.capability.d.ts → UnitPileChart.capability.d.ts} +1 -1
- package/dist/components/charts/physics/{PhysicsPileChart.d.ts → UnitPileChart.d.ts} +19 -6
- package/dist/components/charts/physics/crucibleChartProps.d.ts +1 -1
- package/dist/components/charts/physics/crucibleChartUtils.d.ts +9 -0
- package/dist/components/charts/physics/gauntletChartProps.d.ts +6 -1
- package/dist/components/charts/physics/gauntletTerminal.d.ts +61 -0
- package/dist/components/charts/physics/packetFlowSemantics.d.ts +6 -0
- package/dist/components/charts/physics/physicsHocUtils.d.ts +45 -2
- package/dist/components/charts/shared/auditAccessibilityStyles.d.ts +9 -0
- package/dist/components/charts/shared/chartSpecCore.d.ts +2 -4
- package/dist/components/charts/shared/gaugeGradient.d.ts +4 -8
- package/dist/components/charts/shared/gradient.d.ts +35 -0
- package/dist/components/charts/shared/hatchFill.d.ts +3 -10
- package/dist/components/charts/shared/hooks.d.ts +2 -50
- package/dist/components/charts/shared/knownChartComponents.d.ts +1 -1
- package/dist/components/charts/shared/streamPropsHelpers.d.ts +1 -2
- package/dist/components/charts/shared/useChartLegend.d.ts +65 -0
- package/dist/components/charts/shared/useChartSetup.d.ts +12 -0
- package/dist/components/charts/shared/useCustomChartSetup.d.ts +6 -1
- package/dist/components/charts/shared/useNetworkChartSetup.d.ts +1 -0
- package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
- package/dist/components/charts/xy/AreaChart.d.ts +25 -42
- package/dist/components/charts/xy/BumpChart.capability.d.ts +11 -0
- package/dist/components/charts/xy/BumpChart.d.ts +161 -0
- package/dist/components/charts/xy/DifferenceChart.d.ts +3 -10
- package/dist/components/charts/xy/Heatmap.d.ts +3 -0
- package/dist/components/charts/xy/LineChart.d.ts +6 -8
- package/dist/components/data/portability/capabilityBinding.d.ts +41 -0
- package/dist/components/data/portability/index.d.ts +2 -0
- package/dist/components/geometry/bumpRibbonGeometry.d.ts +36 -0
- package/dist/components/legendLayout.d.ts +75 -1
- package/dist/components/recipes/geographicDotGrid.d.ts +82 -0
- package/dist/components/recipes/geographicGrid.d.ts +100 -0
- package/dist/components/recipes/physics.d.ts +2 -0
- package/dist/components/recipes/physicsStageGeography.d.ts +137 -0
- package/dist/components/semiotic-ai.d.ts +6 -4
- package/dist/components/semiotic-experimental-vacp.d.ts +11 -0
- package/dist/components/semiotic-experimental.d.ts +6 -3
- package/dist/components/semiotic-geo.d.ts +5 -0
- package/dist/components/semiotic-network.d.ts +1 -0
- package/dist/components/semiotic-ordinal.d.ts +2 -0
- package/dist/components/semiotic-physics.d.ts +10 -6
- package/dist/components/semiotic-realtime-core.d.ts +1 -0
- package/dist/components/semiotic-recipes-core.d.ts +6 -1
- package/dist/components/semiotic-server-edge.d.ts +1 -1
- package/dist/components/semiotic-server.d.ts +1 -1
- package/dist/components/semiotic-xy.d.ts +4 -0
- package/dist/components/semiotic.d.ts +4 -4
- package/dist/components/server/renderEvidence.d.ts +1 -1
- package/dist/components/server/renderToStaticSVG.d.ts +2 -1
- package/dist/components/server/serverChartConfigHeatmap.d.ts +6 -0
- package/dist/components/server/serverChartConfigNetworkStyles.d.ts +12 -0
- package/dist/components/server/serverChartConfigShared.d.ts +16 -0
- package/dist/components/server/serverChartConfigs.d.ts +3 -2
- package/dist/components/server/serverChartConfigsPhysics.d.ts +2 -2
- package/dist/components/server/serverChartConfigsXY.d.ts +1 -1
- package/dist/components/server/staticLegend.d.ts +10 -2
- package/dist/components/server/staticSVGChrome.d.ts +14 -6
- package/dist/components/server/staticValue.d.ts +8 -0
- package/dist/components/stream/GeoSVGOverlay.d.ts +4 -10
- package/dist/components/stream/NetworkSVGOverlay.d.ts +2 -6
- package/dist/components/stream/OrdinalSVGOverlay.d.ts +2 -6
- package/dist/components/stream/SVGOverlay.d.ts +2 -6
- package/dist/components/stream/StalenessBadge.d.ts +2 -6
- package/dist/components/stream/geoPipelineConfig.d.ts +10 -0
- package/dist/components/stream/geoTypes.d.ts +3 -6
- package/dist/components/stream/legendRenderer.d.ts +10 -6
- package/dist/components/stream/ordinalTypes.d.ts +7 -31
- package/dist/components/stream/physics/PhysicsEvidence.d.ts +37 -0
- package/dist/components/stream/physics/PhysicsKernel.d.ts +1 -0
- package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +9 -0
- package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +2 -6
- package/dist/components/stream/physics/PhysicsSettledScene.d.ts +5 -0
- package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +2 -6
- package/dist/components/stream/physics/physicsFramePipelineConfig.d.ts +19 -0
- package/dist/components/stream/physics/physicsPipelineSettle.d.ts +52 -0
- package/dist/components/stream/physics/physicsRegionRuntime.d.ts +23 -0
- package/dist/components/stream/pipelineConfig.d.ts +7 -15
- package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +9 -69
- package/dist/components/stream/renderers/cornerRadii.d.ts +2 -9
- package/dist/components/stream/renderers/thresholdLineSegments.d.ts +12 -0
- package/dist/components/stream/sceneToSVGShared.d.ts +3 -5
- package/dist/components/stream/types.d.ts +34 -56
- package/dist/components/stream/xySceneBuilders/areaGradient.d.ts +4 -20
- package/dist/components/stream/xySceneBuilders/types.d.ts +6 -6
- package/dist/components/types/legendTypes.d.ts +31 -6
- package/dist/controls.min.js +1 -1
- package/dist/controls.module.min.js +1 -1
- 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.min.js +1 -1
- package/dist/physics.module.min.js +1 -1
- package/dist/physicsWorker.js +1 -1
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/semiotic-ai-core.min.js +1 -1
- package/dist/semiotic-ai-core.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +6 -4
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-data.module.min.js +1 -1
- package/dist/semiotic-experimental-vacp.d.ts +11 -0
- package/dist/semiotic-experimental-vacp.min.js +1 -0
- package/dist/semiotic-experimental-vacp.module.min.js +1 -0
- package/dist/semiotic-experimental.d.ts +6 -3
- package/dist/semiotic-experimental.min.js +2 -1
- package/dist/semiotic-experimental.module.min.js +2 -1
- package/dist/semiotic-geo.d.ts +5 -0
- package/dist/semiotic-network.d.ts +1 -0
- package/dist/semiotic-ordinal.d.ts +2 -0
- package/dist/semiotic-physics.d.ts +10 -6
- package/dist/semiotic-realtime-core.d.ts +1 -0
- package/dist/semiotic-realtime-core.min.js +1 -1
- package/dist/semiotic-realtime-core.module.min.js +1 -1
- package/dist/semiotic-recipes-core.d.ts +6 -1
- package/dist/semiotic-recipes-core.min.js +1 -1
- package/dist/semiotic-recipes-core.module.min.js +1 -1
- package/dist/semiotic-recipes.min.js +1 -1
- package/dist/semiotic-recipes.module.min.js +1 -1
- package/dist/semiotic-server-edge.d.ts +1 -1
- package/dist/semiotic-server-edge.min.js +1 -1
- package/dist/semiotic-server-edge.module.min.js +1 -1
- package/dist/semiotic-server-node.min.js +1 -1
- package/dist/semiotic-server-node.module.min.js +1 -1
- package/dist/semiotic-server.d.ts +1 -1
- package/dist/semiotic-utils-core.min.js +1 -1
- package/dist/semiotic-utils-core.module.min.js +1 -1
- package/dist/semiotic-utils.min.js +1 -1
- package/dist/semiotic-utils.module.min.js +1 -1
- package/dist/semiotic-xy.d.ts +4 -0
- package/dist/semiotic.d.ts +4 -4
- 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/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +18 -2
- package/spec/README.md +94 -2
- package/spec/bindings/README.md +14 -3
- package/spec/v0.1/examples/annotation-provenance-reviewed-revision.json +27 -0
- package/spec/v0.1/examples/annotation-provenance-watcher-threshold.json +21 -0
- package/spec/v0.1/examples/audience-profile-executive-review.json +24 -0
- package/spec/v0.1/examples/audience-profile-incident-operators.json +42 -0
- package/spec/v0.1/examples/chart-capability-bar-comparison.json +48 -0
- package/spec/v0.1/examples/chart-capability-service-flow.json +54 -0
- package/dist/chunk-chunk-4AANPFOX.module.min.js +0 -2
- package/dist/chunk-chunk-5I3UZV4Q.module.min.js +0 -2
- package/dist/chunk-chunk-5RKXZQ2P.module.min.js +0 -1
- package/dist/chunk-chunk-74CCPVXB.module.min.js +0 -1
- package/dist/chunk-chunk-7ALTGHK6.module.min.js +0 -1
- package/dist/chunk-chunk-ANYDWOZF.module.min.js +0 -1
- package/dist/chunk-chunk-AVBI6GDT.module.min.js +0 -1
- package/dist/chunk-chunk-BANTPINB.module.min.js +0 -2
- package/dist/chunk-chunk-C4YA6TDR.module.min.js +0 -1
- package/dist/chunk-chunk-C57LR3YG.module.min.js +0 -1
- package/dist/chunk-chunk-CKMD5NV3.module.min.js +0 -2
- package/dist/chunk-chunk-CO5KQMGH.module.min.js +0 -1
- package/dist/chunk-chunk-CWQ5YIHX.module.min.js +0 -2
- package/dist/chunk-chunk-E6TXX6MI.module.min.js +0 -1
- package/dist/chunk-chunk-GMQ5AYTD.module.min.js +0 -1
- package/dist/chunk-chunk-JCG72SGW.module.min.js +0 -2
- package/dist/chunk-chunk-K3DMEW22.module.min.js +0 -1
- package/dist/chunk-chunk-KT2VAZMZ.module.min.js +0 -1
- package/dist/chunk-chunk-L6EA5V3G.module.min.js +0 -2
- package/dist/chunk-chunk-LJPCLYSC.module.min.js +0 -2
- package/dist/chunk-chunk-LRIFN2HK.module.min.js +0 -1
- package/dist/chunk-chunk-N5DDKCCF.module.min.js +0 -1
- package/dist/chunk-chunk-NEVE562N.module.min.js +0 -1
- package/dist/chunk-chunk-NLO44TOS.module.min.js +0 -2
- package/dist/chunk-chunk-PZJ2SBLL.module.min.js +0 -2
- package/dist/chunk-chunk-QSQVBIJA.module.min.js +0 -1
- package/dist/chunk-chunk-QUJ6TTLY.module.min.js +0 -1
- package/dist/chunk-chunk-RBIDBUT4.module.min.js +0 -2
- package/dist/chunk-chunk-RCF52Z42.module.min.js +0 -2
- package/dist/chunk-chunk-RFLAG356.module.min.js +0 -1
- package/dist/chunk-chunk-RPU4IZAV.module.min.js +0 -2
- package/dist/chunk-chunk-SKMBCFIL.module.min.js +0 -2
- package/dist/chunk-chunk-TAE7W424.module.min.js +0 -2
- package/dist/chunk-chunk-TUBMTZMU.module.min.js +0 -2
- package/dist/chunk-chunk-UFFEXJQY.module.min.js +0 -1
- package/dist/chunk-chunk-XSCHTS4D.module.min.js +0 -2
- package/dist/chunk-chunk-XXWSHGPL.module.min.js +0 -2
- package/dist/chunk-chunk-ZOAQDIJO.module.min.js +0 -1
- package/dist/chunk-chunk-ZXIXAPRE.module.min.js +0 -2
- package/dist/chunk-statisticalOverlays-QGDLRUHX.module.min.js +0 -1
- package/dist/chunk-statisticalOverlays-T77OKLDY.module.min.js +0 -1
package/ai/componentMetadata.cjs
CHANGED
|
@@ -4,7 +4,7 @@ const CATEGORY_ORDER = ["xy", "ordinal", "network", "geo", "realtime", "physics"
|
|
|
4
4
|
|
|
5
5
|
const COMPONENTS_BY_CATEGORY = {
|
|
6
6
|
xy: [
|
|
7
|
-
"LineChart", "AreaChart", "DifferenceChart", "StackedAreaChart", "Scatterplot", "QuadrantChart",
|
|
7
|
+
"LineChart", "BumpChart", "AreaChart", "DifferenceChart", "StackedAreaChart", "Scatterplot", "QuadrantChart",
|
|
8
8
|
"MultiAxisLineChart", "CandlestickChart", "BubbleChart", "Heatmap",
|
|
9
9
|
"ConnectedScatterplot", "ScatterplotMatrix", "MinimapChart",
|
|
10
10
|
],
|
|
@@ -25,8 +25,9 @@ const COMPONENTS_BY_CATEGORY = {
|
|
|
25
25
|
"RealtimeWaterfallChart", "RealtimeHeatmap",
|
|
26
26
|
],
|
|
27
27
|
physics: [
|
|
28
|
-
"GaltonBoardChart", "EventDropChart", "
|
|
29
|
-
"
|
|
28
|
+
"GaltonBoardChart", "EventDropChart", "UnitPileChart", "CollisionSwarmChart",
|
|
29
|
+
"PacketFlowChart", "ProcessFlowChart", "GauntletChart", "CrucibleChart",
|
|
30
|
+
"ChainReactionChart",
|
|
30
31
|
],
|
|
31
32
|
value: [
|
|
32
33
|
"BigNumber",
|
|
@@ -67,17 +68,11 @@ function metadataForComponent(entryOrName) {
|
|
|
67
68
|
// any other static HOC. Matches the name-prefix exclusion the
|
|
68
69
|
// check-surface-parity script applies.
|
|
69
70
|
const isPushOnly = category === "realtime" && name.startsWith("Realtime")
|
|
70
|
-
// Value-family charts (BigNumber, future SingleValueFrame HOCs)
|
|
71
|
-
// render via react-dom/server in a normal React tree, but they do
|
|
72
|
-
// not route through the frame-driven `renderChart` path in
|
|
73
|
-
// serverChartConfigs.ts — so they are not MCP-renderable. Mirrors
|
|
74
|
-
// the `hoc-ssr-only` special feature documented in chartSpecs.ts.
|
|
75
|
-
const isValueCategory = category === "value"
|
|
76
71
|
return {
|
|
77
72
|
name,
|
|
78
73
|
category,
|
|
79
74
|
importPath: importPathForCategory(category),
|
|
80
|
-
renderable: !isPushOnly
|
|
75
|
+
renderable: !isPushOnly,
|
|
81
76
|
description: typeof entryOrName === "string" ? undefined : entryOrName.description,
|
|
82
77
|
}
|
|
83
78
|
}
|
package/ai/dist/mcp-server.js
CHANGED
|
@@ -6898,6 +6898,7 @@ var require_componentMetadata = __commonJS({
|
|
|
6898
6898
|
var COMPONENTS_BY_CATEGORY = {
|
|
6899
6899
|
xy: [
|
|
6900
6900
|
"LineChart",
|
|
6901
|
+
"BumpChart",
|
|
6901
6902
|
"AreaChart",
|
|
6902
6903
|
"DifferenceChart",
|
|
6903
6904
|
"StackedAreaChart",
|
|
@@ -6955,12 +6956,13 @@ var require_componentMetadata = __commonJS({
|
|
|
6955
6956
|
physics: [
|
|
6956
6957
|
"GaltonBoardChart",
|
|
6957
6958
|
"EventDropChart",
|
|
6958
|
-
"
|
|
6959
|
+
"UnitPileChart",
|
|
6959
6960
|
"CollisionSwarmChart",
|
|
6960
|
-
"
|
|
6961
|
+
"PacketFlowChart",
|
|
6961
6962
|
"ProcessFlowChart",
|
|
6962
6963
|
"GauntletChart",
|
|
6963
|
-
"CrucibleChart"
|
|
6964
|
+
"CrucibleChart",
|
|
6965
|
+
"ChainReactionChart"
|
|
6964
6966
|
],
|
|
6965
6967
|
value: [
|
|
6966
6968
|
"BigNumber"
|
|
@@ -6990,12 +6992,11 @@ var require_componentMetadata = __commonJS({
|
|
|
6990
6992
|
const name = typeof entryOrName === "string" ? entryOrName : entryOrName.name;
|
|
6991
6993
|
const category = categoryForComponent(name);
|
|
6992
6994
|
const isPushOnly = category === "realtime" && name.startsWith("Realtime");
|
|
6993
|
-
const isValueCategory = category === "value";
|
|
6994
6995
|
return {
|
|
6995
6996
|
name,
|
|
6996
6997
|
category,
|
|
6997
6998
|
importPath: importPathForCategory(category),
|
|
6998
|
-
renderable: !isPushOnly
|
|
6999
|
+
renderable: !isPushOnly,
|
|
6999
7000
|
description: typeof entryOrName === "string" ? void 0 : entryOrName.description
|
|
7000
7001
|
};
|
|
7001
7002
|
}
|
|
@@ -7518,7 +7519,7 @@ var require_behaviorContracts = __commonJS({
|
|
|
7518
7519
|
required: ["value"],
|
|
7519
7520
|
staticRequired: ["value"],
|
|
7520
7521
|
pushRequired: [],
|
|
7521
|
-
summary: "GaugeChart is value-only. thresholds,
|
|
7522
|
+
summary: "GaugeChart is value-only. Its thresholds use { value, color, label? }; BigNumber thresholds use the distinct { at, level, color?, label? } vocabulary."
|
|
7522
7523
|
},
|
|
7523
7524
|
{
|
|
7524
7525
|
component: "ForceDirectedGraph",
|
|
@@ -7556,7 +7557,16 @@ var require_behaviorContracts = __commonJS({
|
|
|
7556
7557
|
"SankeyDiagram",
|
|
7557
7558
|
"ChordDiagram",
|
|
7558
7559
|
"ProportionalSymbolMap",
|
|
7559
|
-
"DistanceCartogram"
|
|
7560
|
+
"DistanceCartogram",
|
|
7561
|
+
"GaltonBoardChart",
|
|
7562
|
+
"EventDropChart",
|
|
7563
|
+
"UnitPileChart",
|
|
7564
|
+
"CollisionSwarmChart",
|
|
7565
|
+
"PacketFlowChart",
|
|
7566
|
+
"ProcessFlowChart",
|
|
7567
|
+
"GauntletChart",
|
|
7568
|
+
"CrucibleChart",
|
|
7569
|
+
"ChainReactionChart"
|
|
7560
7570
|
];
|
|
7561
7571
|
var STATIC_DATA_COMPONENTS = loadStaticDataComponentsFromSchema();
|
|
7562
7572
|
var BEHAVIOR_CONTRACTS2 = [
|
|
@@ -7614,6 +7624,18 @@ var require_behaviorContracts = __commonJS({
|
|
|
7614
7624
|
summary: "HOC push mode is selected by omitting the data prop entirely. Passing data={[]} is static empty data and can clear/reinitialize the frame on render.",
|
|
7615
7625
|
agentAction: "For live charts, create a ref, omit data, then call ref.current.push() or pushMany(). For static renderChart/MCP snapshots, provide data because renderChart cannot push later."
|
|
7616
7626
|
},
|
|
7627
|
+
{
|
|
7628
|
+
id: "streaming.serialized-proposal-snapshot",
|
|
7629
|
+
category: "streaming",
|
|
7630
|
+
title: "Serialized proposals keep the initial snapshot",
|
|
7631
|
+
severity: "warning",
|
|
7632
|
+
appliesTo: {
|
|
7633
|
+
components: PUSH_MODE_COMPONENTS
|
|
7634
|
+
},
|
|
7635
|
+
summary: "A JSON component/props proposal for MCP, SSR, or evaluation is a static snapshot even when the request mentions future pushes. Keep the supplied initial rows in the component's real data prop and do not invent pushRows, pushRequirement, ref, or method props.",
|
|
7636
|
+
agentAction: "Return renderable initial props in JSON. If the requested deliverable is React push code, separately omit the controlled data prop in JSX, attach a ref, and call the documented imperative method from an effect or event handler.",
|
|
7637
|
+
example: 'JSON snapshot: { "component": "LineChart", "props": { "data": [{"week":1,"users":120}], "xAccessor":"week", "yAccessor":"users" } }. React push code instead omits data and calls ref.current?.push(row).'
|
|
7638
|
+
},
|
|
7617
7639
|
{
|
|
7618
7640
|
id: "streaming.ref-mutations-require-id-accessors",
|
|
7619
7641
|
category: "streaming",
|
|
@@ -7633,6 +7655,66 @@ var require_behaviorContracts = __commonJS({
|
|
|
7633
7655
|
appliesTo: {},
|
|
7634
7656
|
summary: "MCP renderChart and semiotic/server renderChart render a single static SVG/PNG snapshot. Browser-only realtime components and future ref pushes are not renderable through that path.",
|
|
7635
7657
|
agentAction: "Use renderChart only with renderable HOC components and complete static data. For live behavior, return React code with a ref and do not promise MCP-rendered output."
|
|
7658
|
+
},
|
|
7659
|
+
{
|
|
7660
|
+
id: "serialization.formatters-are-react-callbacks",
|
|
7661
|
+
category: "serialization",
|
|
7662
|
+
title: "Axis formatters are React callbacks",
|
|
7663
|
+
severity: "error",
|
|
7664
|
+
appliesTo: {
|
|
7665
|
+
propsAny: ["xFormat", "yFormat", "categoryFormat", "valueFormat"]
|
|
7666
|
+
},
|
|
7667
|
+
summary: "xFormat, yFormat, categoryFormat, and valueFormat are callback props, not d3 format strings or axis-title strings. They are intentionally absent from JSON/MCP schemas and string values fail validation.",
|
|
7668
|
+
agentAction: "In serialized props, omit formatter callbacks and use xLabel, yLabel, categoryLabel, or valueLabel for axis titles. In React JSX, pass a function such as xFormat={value => formatAxis(value)}.",
|
|
7669
|
+
example: 'JSON: { "xLabel": "Payload (KB)", "yLabel": "Response time (ms)" }. React-only: xFormat={value => formatNumber(value, { maximumFractionDigits: 0 })}.'
|
|
7670
|
+
},
|
|
7671
|
+
{
|
|
7672
|
+
id: "value.bignumber-wire-contract",
|
|
7673
|
+
category: "value",
|
|
7674
|
+
title: "Value components do not inherit chart-HOC props",
|
|
7675
|
+
severity: "error",
|
|
7676
|
+
appliesTo: {
|
|
7677
|
+
components: ["BigNumber"]
|
|
7678
|
+
},
|
|
7679
|
+
summary: "BigNumber is a value component, not a chart HOC, so it does not inherit the common chart-HOC prop list. It uses label as its visible heading and supports description and summary; title and accessibleTable are invalid. Its percent format expects a ratio such as 0.97 and renders it as 97%.",
|
|
7680
|
+
agentAction: 'Validate BigNumber against its own prop schema and remove inherited chart-HOC props such as title and accessibleTable before returning a proposal. Use label, description, and summary for text. For a 97-of-100 KPI, either pass value={0.97} with format="percent" or pass value={97} with format="number" and suffix="%"; do not combine value={97} with format="percent".',
|
|
7681
|
+
example: '{ "component": "BigNumber", "props": { "value": 97, "label": "SLA attainment", "format": "number", "suffix": "%", "target": { "value": 99, "label": "target", "format": "number" } } }'
|
|
7682
|
+
},
|
|
7683
|
+
{
|
|
7684
|
+
id: "geo.proportional-symbol-wire-shape",
|
|
7685
|
+
category: "geo",
|
|
7686
|
+
title: "Proportional symbol maps use geographic props",
|
|
7687
|
+
severity: "error",
|
|
7688
|
+
appliesTo: {
|
|
7689
|
+
components: ["ProportionalSymbolMap"]
|
|
7690
|
+
},
|
|
7691
|
+
summary: "ProportionalSymbolMap reads point rows from points, longitude from xAccessor (default lon), latitude from yAccessor (default lat), and radius from sizeBy. sizeRange is the two-number pixel-radius range.",
|
|
7692
|
+
agentAction: "Use points, xAccessor, yAccessor, and sizeBy. Do not rename points to data or sizeBy to valueAccessor merely because the map renders circles.",
|
|
7693
|
+
example: '{ "points": [{"city":"A","longitude":-122.4,"latitude":37.8,"incidents":18}], "xAccessor":"longitude", "yAccessor":"latitude", "sizeBy":"incidents", "sizeRange":[5,40] }'
|
|
7694
|
+
},
|
|
7695
|
+
{
|
|
7696
|
+
id: "physics.sample-and-mechanical-inputs",
|
|
7697
|
+
category: "physics",
|
|
7698
|
+
title: "Physics charts separate chart mode from simulation input",
|
|
7699
|
+
severity: "warning",
|
|
7700
|
+
appliesTo: {
|
|
7701
|
+
components: ["GaltonBoardChart", "UnitPileChart", "CollisionSwarmChart"]
|
|
7702
|
+
},
|
|
7703
|
+
summary: `Sample simulations use data plus the chart's accessors. Seeded no-data demonstrations use simulationMode="mechanical" (legacy mode="mechanical" remains accepted); mode otherwise carries chart display modes such as primary or sparkline.`,
|
|
7704
|
+
agentAction: "For observed Galton values pass data + valueAccessor. For unit piles pass data + categoryAccessor + valueAccessor. Use seed for reproducibility, bins for Galton columns, and unitValue for the amount represented by one UnitPile body.",
|
|
7705
|
+
example: '{ "component": "GaltonBoardChart", "props": { "data": [{"id":"a","value":1}], "valueAccessor":"value", "bins":4, "seed":42 } }'
|
|
7706
|
+
},
|
|
7707
|
+
{
|
|
7708
|
+
id: "physics.push-uses-source-records",
|
|
7709
|
+
category: "physics",
|
|
7710
|
+
title: "Physics push methods ingest source records",
|
|
7711
|
+
severity: "error",
|
|
7712
|
+
appliesTo: {
|
|
7713
|
+
components: ["GaltonBoardChart", "EventDropChart", "UnitPileChart", "CollisionSwarmChart"]
|
|
7714
|
+
},
|
|
7715
|
+
summary: "Physics HOC refs push source records through the chart's accessors. pushRows and dataIdAccessor are not component props; stable source id fields are retained on spawned bodies without an invented accessor.",
|
|
7716
|
+
agentAction: "For React live code, call ref.current?.push(row) or pushMany(rows). For serialized snapshots, append the rows to data. Keep category/value/time accessors, but omit pushRows and dataIdAccessor.",
|
|
7717
|
+
example: 'ref.current?.push({ id: "c", team: "Blue", value: 2 }); <UnitPileChart ref={ref} categoryAccessor="team" valueAccessor="value" unitValue={1} />'
|
|
7636
7718
|
}
|
|
7637
7719
|
];
|
|
7638
7720
|
function hasOwn(value, key) {
|
|
@@ -7686,6 +7768,7 @@ var require_behaviorContracts = __commonJS({
|
|
|
7686
7768
|
lines.push(` ${formatRequiredCombination(combo)}`);
|
|
7687
7769
|
}
|
|
7688
7770
|
}
|
|
7771
|
+
if (contract.example) lines.push(` Example: ${contract.example}`);
|
|
7689
7772
|
lines.push(` Action: ${contract.agentAction}`);
|
|
7690
7773
|
}
|
|
7691
7774
|
return lines.join("\n");
|
|
@@ -7708,6 +7791,9 @@ var require_behaviorContracts = __commonJS({
|
|
|
7708
7791
|
const combos = contract.combinations.map(formatRequiredCombination).join(" ");
|
|
7709
7792
|
lines.push(` Required combinations: ${combos}`);
|
|
7710
7793
|
}
|
|
7794
|
+
if (!compact && contract.example) {
|
|
7795
|
+
lines.push(` Example: \`${contract.example}\``);
|
|
7796
|
+
}
|
|
7711
7797
|
}
|
|
7712
7798
|
lines.push("", DOC_MARKER_END);
|
|
7713
7799
|
return lines.join("\n");
|
|
@@ -33016,6 +33102,7 @@ var import_geo = require("semiotic/geo");
|
|
|
33016
33102
|
var COMPONENT_REGISTRY = {
|
|
33017
33103
|
LineChart: { component: import_ai.LineChart, category: "xy" },
|
|
33018
33104
|
AreaChart: { component: import_ai.AreaChart, category: "xy" },
|
|
33105
|
+
BumpChart: { component: import_ai.BumpChart, category: "xy" },
|
|
33019
33106
|
DifferenceChart: { component: import_ai.DifferenceChart, category: "xy" },
|
|
33020
33107
|
StackedAreaChart: { component: import_ai.StackedAreaChart, category: "xy" },
|
|
33021
33108
|
Scatterplot: { component: import_ai.Scatterplot, category: "xy" },
|
|
@@ -33057,12 +33144,14 @@ var COMPONENT_REGISTRY = {
|
|
|
33057
33144
|
DistanceCartogram: { component: import_geo.DistanceCartogram, category: "geo" },
|
|
33058
33145
|
GaltonBoardChart: { component: import_ai.GaltonBoardChart, category: "physics" },
|
|
33059
33146
|
EventDropChart: { component: import_ai.EventDropChart, category: "physics" },
|
|
33060
|
-
|
|
33147
|
+
UnitPileChart: { component: import_ai.UnitPileChart, category: "physics" },
|
|
33061
33148
|
CollisionSwarmChart: { component: import_ai.CollisionSwarmChart, category: "physics" },
|
|
33062
|
-
|
|
33149
|
+
PacketFlowChart: { component: import_ai.PacketFlowChart, category: "physics" },
|
|
33063
33150
|
ProcessFlowChart: { component: import_ai.ProcessFlowChart, category: "physics" },
|
|
33064
33151
|
GauntletChart: { component: import_ai.GauntletChart, category: "physics" },
|
|
33065
|
-
CrucibleChart: { component: import_ai.CrucibleChart, category: "physics" }
|
|
33152
|
+
CrucibleChart: { component: import_ai.CrucibleChart, category: "physics" },
|
|
33153
|
+
ChainReactionChart: { component: import_ai.ChainReactionChart, category: "physics" },
|
|
33154
|
+
BigNumber: { component: import_ai.BigNumber, category: "value" }
|
|
33066
33155
|
};
|
|
33067
33156
|
|
|
33068
33157
|
// ai/renderHOCToSVG.tsx
|
package/ai/examples.md
CHANGED
|
@@ -57,6 +57,34 @@ const data = [
|
|
|
57
57
|
|
|
58
58
|
Key props: `lineBy` groups flat array into separate lines, `colorBy` colors them
|
|
59
59
|
|
|
60
|
+
### LineChart (dynamic value accessor)
|
|
61
|
+
|
|
62
|
+
When each row identifies which numeric field to plot, use an accessor function
|
|
63
|
+
instead of forcing the value through a single field name. This is especially
|
|
64
|
+
useful for multi-line data with a different metric per series.
|
|
65
|
+
|
|
66
|
+
```jsx
|
|
67
|
+
import { LineChart } from "semiotic/ai"
|
|
68
|
+
|
|
69
|
+
const data = [
|
|
70
|
+
{ timestamp: 1, metricLabel: "valueA", valueA: 12, valueB: 60 },
|
|
71
|
+
{ timestamp: 2, metricLabel: "valueA", valueA: 18, valueB: 55 },
|
|
72
|
+
{ timestamp: 1, metricLabel: "valueB", valueA: 12, valueB: 60 },
|
|
73
|
+
{ timestamp: 2, metricLabel: "valueB", valueA: 18, valueB: 55 }
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
<LineChart
|
|
77
|
+
data={data}
|
|
78
|
+
xAccessor="timestamp"
|
|
79
|
+
yAccessor={(d) => d[d.metricLabel]}
|
|
80
|
+
lineBy="metricLabel"
|
|
81
|
+
colorBy="metricLabel"
|
|
82
|
+
/>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Key props: accessors accept a field-name string or a function. Prefer a string
|
|
86
|
+
for a direct lookup; use a function for a computed or dynamic value.
|
|
87
|
+
|
|
60
88
|
### Scatterplot
|
|
61
89
|
|
|
62
90
|
```jsx
|
|
@@ -147,7 +175,12 @@ const data = [
|
|
|
147
175
|
data={data}
|
|
148
176
|
xAccessor="month"
|
|
149
177
|
yAccessor="revenue"
|
|
150
|
-
gradientFill
|
|
178
|
+
gradientFill={{
|
|
179
|
+
stops: [
|
|
180
|
+
{ offset: 0, opacity: 0.8 },
|
|
181
|
+
{ offset: 1, opacity: 0.05 }
|
|
182
|
+
]
|
|
183
|
+
}}
|
|
151
184
|
xLabel="Month"
|
|
152
185
|
yLabel="Revenue ($)"
|
|
153
186
|
/>
|
|
@@ -180,7 +213,12 @@ const data = [
|
|
|
180
213
|
y0Accessor="p5"
|
|
181
214
|
showLine={false}
|
|
182
215
|
areaOpacity={0.3}
|
|
183
|
-
gradientFill
|
|
216
|
+
gradientFill={{
|
|
217
|
+
stops: [
|
|
218
|
+
{ offset: 0, opacity: 0.8 },
|
|
219
|
+
{ offset: 1, opacity: 0.05 }
|
|
220
|
+
]
|
|
221
|
+
}}
|
|
184
222
|
width={600}
|
|
185
223
|
height={400}
|
|
186
224
|
/>
|
|
@@ -235,6 +273,38 @@ Fills the region between two series with a color that switches based on which se
|
|
|
235
273
|
|
|
236
274
|
Key props: `seriesALabel` / `seriesBLabel` (legend + tooltip), `seriesAColor` / `seriesBColor` (defaults to `var(--semiotic-danger)` / `var(--semiotic-info)`), `showLines` (default `true` — draws both series on top of the fill), `areaOpacity` (0.6), `gradientFill` (same shape as AreaChart), `windowSize` (max raw rows in push buffer; FIFO eviction). Push API: `ref.current.push({ x, a, b })` — accessor outputs coerce through a `toNumber` helper so `Date` (time series) and numeric strings (CSV/JSON) work transparently.
|
|
237
275
|
|
|
276
|
+
### BumpChart
|
|
277
|
+
|
|
278
|
+
```jsx
|
|
279
|
+
import { BumpChart } from "semiotic/ai"
|
|
280
|
+
|
|
281
|
+
const data = [
|
|
282
|
+
{ quarter: "Q1", team: "North", sales: 420 },
|
|
283
|
+
{ quarter: "Q1", team: "South", sales: 380 },
|
|
284
|
+
{ quarter: "Q1", team: "East", sales: 510 },
|
|
285
|
+
{ quarter: "Q1", team: "West", sales: 290 },
|
|
286
|
+
{ quarter: "Q2", team: "North", sales: 460 },
|
|
287
|
+
{ quarter: "Q2", team: "South", sales: 500 },
|
|
288
|
+
{ quarter: "Q2", team: "East", sales: 480 },
|
|
289
|
+
{ quarter: "Q2", team: "West", sales: 350 },
|
|
290
|
+
{ quarter: "Q3", team: "North", sales: 610 },
|
|
291
|
+
{ quarter: "Q3", team: "South", sales: 470 },
|
|
292
|
+
{ quarter: "Q3", team: "East", sales: 520 },
|
|
293
|
+
{ quarter: "Q3", team: "West", sales: 540 }
|
|
294
|
+
]
|
|
295
|
+
|
|
296
|
+
<BumpChart
|
|
297
|
+
data={data}
|
|
298
|
+
xAccessor="quarter"
|
|
299
|
+
yAccessor="sales"
|
|
300
|
+
lineBy="team"
|
|
301
|
+
highlightTop={2}
|
|
302
|
+
xLabel="Quarter"
|
|
303
|
+
/>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Ranks every series within each x-column and connects each series' rank across columns — the classic "who's leading over time" chart. `yAccessor` is the magnitude used to rank (highest value = rank 1 by default; use `rankDirection="ascending"` when lower is better). `highlightTop` colors only the N best series by mean rank and greys the rest via `neutralColor`. Set `ribbon={true}` to encode the raw magnitude as true perpendicular-offset ribbon width instead of fixed-width lines — line and ribbon share the same centerline geometry, so `animate` tweens only the width. Endpoint labels show by default (`showLabels`).
|
|
307
|
+
|
|
238
308
|
### StackedAreaChart
|
|
239
309
|
|
|
240
310
|
```jsx
|
|
@@ -784,6 +854,33 @@ Key props: **`edges`** (required), shows bidirectional relationships in a circle
|
|
|
784
854
|
|
|
785
855
|
## Realtime — Push API via Ref
|
|
786
856
|
|
|
857
|
+
### Serialized snapshot versus React push code
|
|
858
|
+
|
|
859
|
+
When an MCP, SSR, or evaluation request asks for component/props JSON and also
|
|
860
|
+
mentions future pushes, keep the supplied initial rows in the serialized
|
|
861
|
+
snapshot. `pushRows`, `pushRequirement`, `ref`, and `method` are orchestration
|
|
862
|
+
instructions, not chart props.
|
|
863
|
+
|
|
864
|
+
```json
|
|
865
|
+
{
|
|
866
|
+
"component": "LineChart",
|
|
867
|
+
"props": {
|
|
868
|
+
"data": [
|
|
869
|
+
{ "week": 1, "users": 120 },
|
|
870
|
+
{ "week": 2, "users": 138 }
|
|
871
|
+
],
|
|
872
|
+
"xAccessor": "week",
|
|
873
|
+
"yAccessor": "users",
|
|
874
|
+
"xLabel": "Week",
|
|
875
|
+
"yLabel": "Active users"
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
React push code has a different lifecycle: omit `data`, attach a ref, and push
|
|
881
|
+
the initial or newly arrived rows from an effect. Formatter callbacks such as
|
|
882
|
+
`xFormat` are JSX-only; serialized axis titles belong in `xLabel` and `yLabel`.
|
|
883
|
+
|
|
787
884
|
### RealtimeLineChart
|
|
788
885
|
|
|
789
886
|
```jsx
|
|
@@ -1264,6 +1361,40 @@ Key APIs: `WordTrailsWordInfo` gives `word`, `column`, `weight`, and `segment` p
|
|
|
1264
1361
|
|
|
1265
1362
|
---
|
|
1266
1363
|
|
|
1364
|
+
## Geographic Charts
|
|
1365
|
+
|
|
1366
|
+
### ProportionalSymbolMap
|
|
1367
|
+
|
|
1368
|
+
```jsx
|
|
1369
|
+
import { ProportionalSymbolMap } from "semiotic/geo"
|
|
1370
|
+
|
|
1371
|
+
const incidents = [
|
|
1372
|
+
{ id: "a", city: "A", longitude: -122.4, latitude: 37.8, incidents: 18 },
|
|
1373
|
+
{ id: "b", city: "B", longitude: -74.0, latitude: 40.7, incidents: 31 },
|
|
1374
|
+
{ id: "c", city: "C", longitude: -87.6, latitude: 41.9, incidents: 12 },
|
|
1375
|
+
]
|
|
1376
|
+
|
|
1377
|
+
<ProportionalSymbolMap
|
|
1378
|
+
points={incidents}
|
|
1379
|
+
xAccessor="longitude"
|
|
1380
|
+
yAccessor="latitude"
|
|
1381
|
+
sizeBy="incidents"
|
|
1382
|
+
sizeRange={[5, 40]}
|
|
1383
|
+
colorBy="city"
|
|
1384
|
+
showLegend
|
|
1385
|
+
/>
|
|
1386
|
+
```
|
|
1387
|
+
|
|
1388
|
+
The geographic wire vocabulary is deliberate: rows live in `points`,
|
|
1389
|
+
longitude and latitude use `xAccessor` and `yAccessor`, and symbol radius uses
|
|
1390
|
+
`sizeBy`. Do not substitute the generic `data` or `valueAccessor` names.
|
|
1391
|
+
|
|
1392
|
+
For live React code, omit `points` and push source records through the ref:
|
|
1393
|
+
`ref.current?.push({ id, longitude, latitude, incidents })`. For a static JSON
|
|
1394
|
+
snapshot, keep all observed records in `points`.
|
|
1395
|
+
|
|
1396
|
+
---
|
|
1397
|
+
|
|
1267
1398
|
## Physics Charts — Motion With A Settled Projection
|
|
1268
1399
|
|
|
1269
1400
|
### GaltonBoardChart (distribution drop)
|
|
@@ -1310,12 +1441,12 @@ import { EventDropChart } from "semiotic/physics"
|
|
|
1310
1441
|
|
|
1311
1442
|
Key props: `timeAccessor` assigns the event-time window, `arrivalAccessor` controls arrival replay, `windows.size` creates barriers, and `watermark.delay` sends late events to the late path.
|
|
1312
1443
|
|
|
1313
|
-
###
|
|
1444
|
+
### UnitPileChart (unitized category piles)
|
|
1314
1445
|
|
|
1315
1446
|
```jsx
|
|
1316
|
-
import {
|
|
1447
|
+
import { UnitPileChart } from "semiotic/physics"
|
|
1317
1448
|
|
|
1318
|
-
<
|
|
1449
|
+
<UnitPileChart
|
|
1319
1450
|
data={[
|
|
1320
1451
|
{ category: "Orders", value: 18 },
|
|
1321
1452
|
{ category: "Queued", value: 11 },
|
|
@@ -1331,6 +1462,34 @@ import { PhysicsPileChart } from "semiotic/physics"
|
|
|
1331
1462
|
|
|
1332
1463
|
Key props: `unitValue` controls how many simulated bodies appear. Increase it for large values so the settled piles remain readable and the frame budget stays bounded.
|
|
1333
1464
|
|
|
1465
|
+
For a live unit pile, the ref ingests the same source-row shape the static
|
|
1466
|
+
`data` prop uses:
|
|
1467
|
+
|
|
1468
|
+
```jsx
|
|
1469
|
+
import { useEffect, useRef } from "react"
|
|
1470
|
+
import { UnitPileChart } from "semiotic/physics"
|
|
1471
|
+
|
|
1472
|
+
const pileRef = useRef(null)
|
|
1473
|
+
|
|
1474
|
+
useEffect(() => {
|
|
1475
|
+
pileRef.current?.push({ id: "c", team: "Blue", value: 2 })
|
|
1476
|
+
}, [])
|
|
1477
|
+
|
|
1478
|
+
<UnitPileChart
|
|
1479
|
+
ref={pileRef}
|
|
1480
|
+
categoryAccessor="team"
|
|
1481
|
+
valueAccessor="value"
|
|
1482
|
+
unitValue={1}
|
|
1483
|
+
seed={42}
|
|
1484
|
+
title="Queued work by team"
|
|
1485
|
+
/>
|
|
1486
|
+
```
|
|
1487
|
+
|
|
1488
|
+
`pushRows` and `dataIdAccessor` are not physics chart props. Keep an `id` on
|
|
1489
|
+
source records when identity matters; the physics HOC retains it on the spawned
|
|
1490
|
+
bodies. For a static JSON proposal, append the incoming rows to `data` so the
|
|
1491
|
+
snapshot can render immediately.
|
|
1492
|
+
|
|
1334
1493
|
### CollisionSwarmChart (axis-preserving collision layout)
|
|
1335
1494
|
|
|
1336
1495
|
```jsx
|
|
@@ -1355,12 +1514,12 @@ import { CollisionSwarmChart } from "semiotic/physics"
|
|
|
1355
1514
|
Key props: `xAccessor` preserves the quantitative position, `groupAccessor` creates lanes, and collision settings separate overlapping records without losing the axis.
|
|
1356
1515
|
|
|
1357
1516
|
|
|
1358
|
-
###
|
|
1517
|
+
### PacketFlowChart (packet flow over routes)
|
|
1359
1518
|
|
|
1360
1519
|
```jsx
|
|
1361
|
-
import {
|
|
1520
|
+
import { PacketFlowChart } from "semiotic/physics"
|
|
1362
1521
|
|
|
1363
|
-
<
|
|
1522
|
+
<PacketFlowChart
|
|
1364
1523
|
nodes={[
|
|
1365
1524
|
{ id: "Inbound", x: 0.08, y: 0.5 },
|
|
1366
1525
|
{ id: "Queue", x: 0.45, y: 0.32 },
|
|
@@ -1407,6 +1566,36 @@ import { ProcessFlowChart } from "semiotic/physics"
|
|
|
1407
1566
|
|
|
1408
1567
|
Key props: `stages` declare force / capacity / absorb behavior, `groupBy` forms feature sockets that complete when every member is absorbed, and `liveCapacity` installs FIFO queue controllers for capacitated stages. Prefer ProcessFlowChart for many independent work items; use GauntletChart for one compound project degraded by gates.
|
|
1409
1568
|
|
|
1569
|
+
### ChainReactionChart (dependency reach and blockers)
|
|
1570
|
+
|
|
1571
|
+
```jsx
|
|
1572
|
+
import { ChainReactionChart } from "semiotic/physics"
|
|
1573
|
+
|
|
1574
|
+
const releaseTasks = [
|
|
1575
|
+
{ id: "brief", title: "Brief", lane: "Product", dependsOn: [], status: "done", completedAt: 1 },
|
|
1576
|
+
{ id: "privacy", title: "Privacy review", lane: "Product", dependsOn: ["brief"], status: "blocked", blocker: "Legal review" },
|
|
1577
|
+
{ id: "schema", title: "Schema", lane: "Data", dependsOn: ["privacy"], status: "waiting" },
|
|
1578
|
+
{ id: "ingest", title: "Ingest", lane: "Data", dependsOn: ["schema"], status: "waiting" },
|
|
1579
|
+
]
|
|
1580
|
+
|
|
1581
|
+
<ChainReactionChart
|
|
1582
|
+
data={releaseTasks}
|
|
1583
|
+
taskIDAccessor="id"
|
|
1584
|
+
labelAccessor="title"
|
|
1585
|
+
laneAccessor="lane"
|
|
1586
|
+
dependencyAccessor="dependsOn"
|
|
1587
|
+
statusAccessor="status"
|
|
1588
|
+
completionTimeAccessor="completedAt"
|
|
1589
|
+
blockerAccessor="blocker"
|
|
1590
|
+
currentTime={10}
|
|
1591
|
+
mode="snapshot"
|
|
1592
|
+
insight="blocker-amplification"
|
|
1593
|
+
size={[800, 420]}
|
|
1594
|
+
/>
|
|
1595
|
+
```
|
|
1596
|
+
|
|
1597
|
+
Key props: `dependencyAccessor` must name explicit prerequisite ids — the chart never invents edges from a flat table. `statusAccessor` and `completionTimeAccessor` are authored task facts; delivery balls only enact satisfied prerequisites. Use `insight="blocker-amplification"` to expose how many unfinished downstream tasks and lanes each blocker reaches.
|
|
1598
|
+
|
|
1410
1599
|
### GauntletChart (compound project through timed gates)
|
|
1411
1600
|
|
|
1412
1601
|
```jsx
|
|
@@ -1548,7 +1737,7 @@ import { BigNumber } from "semiotic/value"
|
|
|
1548
1737
|
/>
|
|
1549
1738
|
```
|
|
1550
1739
|
|
|
1551
|
-
Key props: `value` (the
|
|
1740
|
+
Key props: `value` (the focal number), `label` (the visible heading), `description` and `summary` (accessible text), `comparison`, `target`, and `thresholds`. BigNumber does not use chart-frame `title` or `accessibleTable` props. Built-in `format` values are `"number"`, `"currency"`, `"percent"`, `"compact"`, and `"duration"`; custom formatter functions are React-only. `"percent"` treats its input as a ratio, so `0.97` renders as 97%. For an existing 0–100 value such as 97, use `format="number"` with `suffix="%"`. Suppress decoration via `mode="thumbnail"` for dense grids or `mode="inline"` for prose. Stream via `ref.current.push({ value, time })` — pair with `stalenessThreshold` to dim the card when updates stop.
|
|
1552
1741
|
|
|
1553
1742
|
### BigNumber with a Semiotic chart embedded via `trendSlot` (wide / rectangular)
|
|
1554
1743
|
|