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.
Files changed (277) hide show
  1. package/CLAUDE.md +37 -10
  2. package/README.md +83 -56
  3. package/ai/behaviorContracts.cjs +88 -3
  4. package/ai/componentMetadata.cjs +5 -10
  5. package/ai/dist/mcp-server.js +99 -10
  6. package/ai/examples.md +198 -9
  7. package/ai/schema.json +2002 -165
  8. package/ai/surface-manifest.json +14 -10
  9. package/ai/system-prompt.md +9 -3
  10. package/dist/{chunk-chartContainerDataAudit-74TLKIP6.module.min.js → chunk-chartContainerDataAudit-JDSVSKGM.module.min.js} +1 -1
  11. package/dist/chunk-chunk-2JGJ5GUG.module.min.js +1 -0
  12. package/dist/chunk-chunk-2YAZHXL4.module.min.js +2 -0
  13. package/dist/chunk-chunk-3NGIKFD6.module.min.js +1 -0
  14. package/dist/{chunk-chunk-G7WFWHAD.module.min.js → chunk-chunk-4ITOQRXM.module.min.js} +1 -1
  15. package/dist/chunk-chunk-5SD6BHVW.module.min.js +2 -0
  16. package/dist/chunk-chunk-6V5VQVCT.module.min.js +2 -0
  17. package/dist/chunk-chunk-7TTBHSAG.module.min.js +2 -0
  18. package/dist/chunk-chunk-7ZDJSYKI.module.min.js +2 -0
  19. package/dist/chunk-chunk-BGHPD3RA.module.min.js +1 -0
  20. package/dist/chunk-chunk-BMRZ2SPU.module.min.js +2 -0
  21. package/dist/chunk-chunk-BNGBEY7N.module.min.js +2 -0
  22. package/dist/chunk-chunk-C7APLVQD.module.min.js +2 -0
  23. package/dist/chunk-chunk-DGWFBOGB.module.min.js +1 -0
  24. package/dist/chunk-chunk-DIVE2DRA.module.min.js +2 -0
  25. package/dist/chunk-chunk-FBUNUIPV.module.min.js +2 -0
  26. package/dist/chunk-chunk-FQPKOAIH.module.min.js +2 -0
  27. package/dist/chunk-chunk-FRO4TRXK.module.min.js +2 -0
  28. package/dist/chunk-chunk-G7QVPZUD.module.min.js +2 -0
  29. package/dist/chunk-chunk-GBPYV4FP.module.min.js +2 -0
  30. package/dist/chunk-chunk-GU2EJIDJ.module.min.js +2 -0
  31. package/dist/chunk-chunk-J5QD4RAM.module.min.js +2 -0
  32. package/dist/{chunk-chunk-LJLS6DY7.module.min.js → chunk-chunk-JWXLNZSM.module.min.js} +1 -1
  33. package/dist/chunk-chunk-KXAFCCDB.module.min.js +2 -0
  34. package/dist/chunk-chunk-LG7YKJAK.module.min.js +2 -0
  35. package/dist/{chunk-chunk-I36PJ4OC.module.min.js → chunk-chunk-LVHDZAT3.module.min.js} +1 -1
  36. package/dist/chunk-chunk-LWITSR2O.module.min.js +2 -0
  37. package/dist/chunk-chunk-MX35T6RX.module.min.js +2 -0
  38. package/dist/chunk-chunk-NH4MEAKP.module.min.js +2 -0
  39. package/dist/chunk-chunk-NJETWX42.module.min.js +2 -0
  40. package/dist/chunk-chunk-NW25WGLS.module.min.js +2 -0
  41. package/dist/{chunk-chunk-TMWIZL3K.module.min.js → chunk-chunk-OI7R7EJB.module.min.js} +1 -1
  42. package/dist/chunk-chunk-ONMLEXHR.module.min.js +2 -0
  43. package/dist/chunk-chunk-OY66GCE6.module.min.js +1 -0
  44. package/dist/chunk-chunk-PZFT457G.module.min.js +1 -0
  45. package/dist/chunk-chunk-Q3WW6JGR.module.min.js +1 -0
  46. package/dist/chunk-chunk-Q6XKQTOQ.module.min.js +1 -0
  47. package/dist/chunk-chunk-RJRM2E6P.module.min.js +1 -0
  48. package/dist/chunk-chunk-RPL7WYXI.module.min.js +1 -0
  49. package/dist/chunk-chunk-SV4XAZ3Q.module.min.js +1 -0
  50. package/dist/chunk-chunk-TSCFL235.module.min.js +1 -0
  51. package/dist/chunk-chunk-UOQRPGPK.module.min.js +2 -0
  52. package/dist/chunk-chunk-V3OAKG32.module.min.js +1 -0
  53. package/dist/chunk-chunk-WLOIUMWG.module.min.js +2 -0
  54. package/dist/chunk-chunk-XEGXX4F7.module.min.js +1 -0
  55. package/dist/chunk-chunk-XFRBLXYM.module.min.js +1 -0
  56. package/dist/chunk-chunk-Z2AJERX5.module.min.js +2 -0
  57. package/dist/chunk-chunk-ZXYDYAB7.module.min.js +2 -0
  58. package/dist/components/ai/SemioticVACPBridge.d.ts +22 -0
  59. package/dist/components/ai/chartCapabilities.d.ts +5 -3
  60. package/dist/components/ai/conversationArc.d.ts +2 -176
  61. package/dist/components/ai/conversationArcTypes.d.ts +202 -0
  62. package/dist/components/ai/readerGrounding.d.ts +12 -0
  63. package/dist/components/ai/vacpAdapter.d.ts +13 -0
  64. package/dist/components/ai/vacpAdapterActions.d.ts +2 -0
  65. package/dist/components/ai/vacpAdapterModel.d.ts +7 -0
  66. package/dist/components/ai/vacpAdapterRuntime.d.ts +26 -0
  67. package/dist/components/ai/vacpAdapterState.d.ts +3 -0
  68. package/dist/components/ai/vacpAdapterTypes.d.ts +169 -0
  69. package/dist/components/ai/vacpTypes.d.ts +160 -0
  70. package/dist/components/charts/custom/XYCustomChart.d.ts +3 -0
  71. package/dist/components/charts/geo/DistanceCartogram.d.ts +1 -1
  72. package/dist/components/charts/index.d.ts +7 -4
  73. package/dist/components/charts/ordinal/BarChart.d.ts +7 -14
  74. package/dist/components/charts/ordinal/GaugeChart.d.ts +3 -0
  75. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +3 -0
  76. package/dist/components/charts/ordinal/StackedBarChart.d.ts +3 -0
  77. package/dist/components/charts/ordinal/SwimlaneChart.d.ts +4 -14
  78. package/dist/components/charts/physics/ChainReactionChart.capability.d.ts +9 -0
  79. package/dist/components/charts/physics/ChainReactionChart.d.ts +29 -0
  80. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +1 -1
  81. package/dist/components/charts/physics/EventDropChart.d.ts +7 -2
  82. package/dist/components/charts/physics/GaltonBoardChart.d.ts +1 -1
  83. package/dist/components/charts/physics/{PhysicsPileChart.capability.d.ts → PacketFlowChart.capability.d.ts} +1 -1
  84. package/dist/components/charts/physics/{PhysicalFlowChart.d.ts → PacketFlowChart.d.ts} +22 -6
  85. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +1 -1
  86. package/dist/components/charts/physics/ProcessFlowChart.d.ts +7 -4
  87. package/dist/components/charts/physics/{PhysicalFlowChart.capability.d.ts → UnitPileChart.capability.d.ts} +1 -1
  88. package/dist/components/charts/physics/{PhysicsPileChart.d.ts → UnitPileChart.d.ts} +19 -6
  89. package/dist/components/charts/physics/crucibleChartProps.d.ts +1 -1
  90. package/dist/components/charts/physics/crucibleChartUtils.d.ts +9 -0
  91. package/dist/components/charts/physics/gauntletChartProps.d.ts +6 -1
  92. package/dist/components/charts/physics/gauntletTerminal.d.ts +61 -0
  93. package/dist/components/charts/physics/packetFlowSemantics.d.ts +6 -0
  94. package/dist/components/charts/physics/physicsHocUtils.d.ts +45 -2
  95. package/dist/components/charts/shared/auditAccessibilityStyles.d.ts +9 -0
  96. package/dist/components/charts/shared/chartSpecCore.d.ts +2 -4
  97. package/dist/components/charts/shared/gaugeGradient.d.ts +4 -8
  98. package/dist/components/charts/shared/gradient.d.ts +35 -0
  99. package/dist/components/charts/shared/hatchFill.d.ts +3 -10
  100. package/dist/components/charts/shared/hooks.d.ts +2 -50
  101. package/dist/components/charts/shared/knownChartComponents.d.ts +1 -1
  102. package/dist/components/charts/shared/streamPropsHelpers.d.ts +1 -2
  103. package/dist/components/charts/shared/useChartLegend.d.ts +65 -0
  104. package/dist/components/charts/shared/useChartSetup.d.ts +12 -0
  105. package/dist/components/charts/shared/useCustomChartSetup.d.ts +6 -1
  106. package/dist/components/charts/shared/useNetworkChartSetup.d.ts +1 -0
  107. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  108. package/dist/components/charts/xy/AreaChart.d.ts +25 -42
  109. package/dist/components/charts/xy/BumpChart.capability.d.ts +11 -0
  110. package/dist/components/charts/xy/BumpChart.d.ts +161 -0
  111. package/dist/components/charts/xy/DifferenceChart.d.ts +3 -10
  112. package/dist/components/charts/xy/Heatmap.d.ts +3 -0
  113. package/dist/components/charts/xy/LineChart.d.ts +6 -8
  114. package/dist/components/data/portability/capabilityBinding.d.ts +41 -0
  115. package/dist/components/data/portability/index.d.ts +2 -0
  116. package/dist/components/geometry/bumpRibbonGeometry.d.ts +36 -0
  117. package/dist/components/legendLayout.d.ts +75 -1
  118. package/dist/components/recipes/geographicDotGrid.d.ts +82 -0
  119. package/dist/components/recipes/geographicGrid.d.ts +100 -0
  120. package/dist/components/recipes/physics.d.ts +2 -0
  121. package/dist/components/recipes/physicsStageGeography.d.ts +137 -0
  122. package/dist/components/semiotic-ai.d.ts +6 -4
  123. package/dist/components/semiotic-experimental-vacp.d.ts +11 -0
  124. package/dist/components/semiotic-experimental.d.ts +6 -3
  125. package/dist/components/semiotic-geo.d.ts +5 -0
  126. package/dist/components/semiotic-network.d.ts +1 -0
  127. package/dist/components/semiotic-ordinal.d.ts +2 -0
  128. package/dist/components/semiotic-physics.d.ts +10 -6
  129. package/dist/components/semiotic-realtime-core.d.ts +1 -0
  130. package/dist/components/semiotic-recipes-core.d.ts +6 -1
  131. package/dist/components/semiotic-server-edge.d.ts +1 -1
  132. package/dist/components/semiotic-server.d.ts +1 -1
  133. package/dist/components/semiotic-xy.d.ts +4 -0
  134. package/dist/components/semiotic.d.ts +4 -4
  135. package/dist/components/server/renderEvidence.d.ts +1 -1
  136. package/dist/components/server/renderToStaticSVG.d.ts +2 -1
  137. package/dist/components/server/serverChartConfigHeatmap.d.ts +6 -0
  138. package/dist/components/server/serverChartConfigNetworkStyles.d.ts +12 -0
  139. package/dist/components/server/serverChartConfigShared.d.ts +16 -0
  140. package/dist/components/server/serverChartConfigs.d.ts +3 -2
  141. package/dist/components/server/serverChartConfigsPhysics.d.ts +2 -2
  142. package/dist/components/server/serverChartConfigsXY.d.ts +1 -1
  143. package/dist/components/server/staticLegend.d.ts +10 -2
  144. package/dist/components/server/staticSVGChrome.d.ts +14 -6
  145. package/dist/components/server/staticValue.d.ts +8 -0
  146. package/dist/components/stream/GeoSVGOverlay.d.ts +4 -10
  147. package/dist/components/stream/NetworkSVGOverlay.d.ts +2 -6
  148. package/dist/components/stream/OrdinalSVGOverlay.d.ts +2 -6
  149. package/dist/components/stream/SVGOverlay.d.ts +2 -6
  150. package/dist/components/stream/StalenessBadge.d.ts +2 -6
  151. package/dist/components/stream/geoPipelineConfig.d.ts +10 -0
  152. package/dist/components/stream/geoTypes.d.ts +3 -6
  153. package/dist/components/stream/legendRenderer.d.ts +10 -6
  154. package/dist/components/stream/ordinalTypes.d.ts +7 -31
  155. package/dist/components/stream/physics/PhysicsEvidence.d.ts +37 -0
  156. package/dist/components/stream/physics/PhysicsKernel.d.ts +1 -0
  157. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +9 -0
  158. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +2 -6
  159. package/dist/components/stream/physics/PhysicsSettledScene.d.ts +5 -0
  160. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +2 -6
  161. package/dist/components/stream/physics/physicsFramePipelineConfig.d.ts +19 -0
  162. package/dist/components/stream/physics/physicsPipelineSettle.d.ts +52 -0
  163. package/dist/components/stream/physics/physicsRegionRuntime.d.ts +23 -0
  164. package/dist/components/stream/pipelineConfig.d.ts +7 -15
  165. package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +9 -69
  166. package/dist/components/stream/renderers/cornerRadii.d.ts +2 -9
  167. package/dist/components/stream/renderers/thresholdLineSegments.d.ts +12 -0
  168. package/dist/components/stream/sceneToSVGShared.d.ts +3 -5
  169. package/dist/components/stream/types.d.ts +34 -56
  170. package/dist/components/stream/xySceneBuilders/areaGradient.d.ts +4 -20
  171. package/dist/components/stream/xySceneBuilders/types.d.ts +6 -6
  172. package/dist/components/types/legendTypes.d.ts +31 -6
  173. package/dist/controls.min.js +1 -1
  174. package/dist/controls.module.min.js +1 -1
  175. package/dist/geo.min.js +1 -1
  176. package/dist/geo.module.min.js +1 -1
  177. package/dist/network.min.js +1 -1
  178. package/dist/network.module.min.js +1 -1
  179. package/dist/ordinal.min.js +1 -1
  180. package/dist/ordinal.module.min.js +1 -1
  181. package/dist/physics.min.js +1 -1
  182. package/dist/physics.module.min.js +1 -1
  183. package/dist/physicsWorker.js +1 -1
  184. package/dist/realtime.min.js +1 -1
  185. package/dist/realtime.module.min.js +1 -1
  186. package/dist/semiotic-ai-core.min.js +1 -1
  187. package/dist/semiotic-ai-core.module.min.js +1 -1
  188. package/dist/semiotic-ai.d.ts +6 -4
  189. package/dist/semiotic-ai.min.js +1 -1
  190. package/dist/semiotic-ai.module.min.js +1 -1
  191. package/dist/semiotic-data.module.min.js +1 -1
  192. package/dist/semiotic-experimental-vacp.d.ts +11 -0
  193. package/dist/semiotic-experimental-vacp.min.js +1 -0
  194. package/dist/semiotic-experimental-vacp.module.min.js +1 -0
  195. package/dist/semiotic-experimental.d.ts +6 -3
  196. package/dist/semiotic-experimental.min.js +2 -1
  197. package/dist/semiotic-experimental.module.min.js +2 -1
  198. package/dist/semiotic-geo.d.ts +5 -0
  199. package/dist/semiotic-network.d.ts +1 -0
  200. package/dist/semiotic-ordinal.d.ts +2 -0
  201. package/dist/semiotic-physics.d.ts +10 -6
  202. package/dist/semiotic-realtime-core.d.ts +1 -0
  203. package/dist/semiotic-realtime-core.min.js +1 -1
  204. package/dist/semiotic-realtime-core.module.min.js +1 -1
  205. package/dist/semiotic-recipes-core.d.ts +6 -1
  206. package/dist/semiotic-recipes-core.min.js +1 -1
  207. package/dist/semiotic-recipes-core.module.min.js +1 -1
  208. package/dist/semiotic-recipes.min.js +1 -1
  209. package/dist/semiotic-recipes.module.min.js +1 -1
  210. package/dist/semiotic-server-edge.d.ts +1 -1
  211. package/dist/semiotic-server-edge.min.js +1 -1
  212. package/dist/semiotic-server-edge.module.min.js +1 -1
  213. package/dist/semiotic-server-node.min.js +1 -1
  214. package/dist/semiotic-server-node.module.min.js +1 -1
  215. package/dist/semiotic-server.d.ts +1 -1
  216. package/dist/semiotic-utils-core.min.js +1 -1
  217. package/dist/semiotic-utils-core.module.min.js +1 -1
  218. package/dist/semiotic-utils.min.js +1 -1
  219. package/dist/semiotic-utils.module.min.js +1 -1
  220. package/dist/semiotic-xy.d.ts +4 -0
  221. package/dist/semiotic.d.ts +4 -4
  222. package/dist/semiotic.min.js +1 -1
  223. package/dist/semiotic.module.min.js +1 -1
  224. package/dist/server.min.js +1 -1
  225. package/dist/server.module.min.js +1 -1
  226. package/dist/xy.min.js +1 -1
  227. package/dist/xy.module.min.js +1 -1
  228. package/package.json +18 -2
  229. package/spec/README.md +94 -2
  230. package/spec/bindings/README.md +14 -3
  231. package/spec/v0.1/examples/annotation-provenance-reviewed-revision.json +27 -0
  232. package/spec/v0.1/examples/annotation-provenance-watcher-threshold.json +21 -0
  233. package/spec/v0.1/examples/audience-profile-executive-review.json +24 -0
  234. package/spec/v0.1/examples/audience-profile-incident-operators.json +42 -0
  235. package/spec/v0.1/examples/chart-capability-bar-comparison.json +48 -0
  236. package/spec/v0.1/examples/chart-capability-service-flow.json +54 -0
  237. package/dist/chunk-chunk-4AANPFOX.module.min.js +0 -2
  238. package/dist/chunk-chunk-5I3UZV4Q.module.min.js +0 -2
  239. package/dist/chunk-chunk-5RKXZQ2P.module.min.js +0 -1
  240. package/dist/chunk-chunk-74CCPVXB.module.min.js +0 -1
  241. package/dist/chunk-chunk-7ALTGHK6.module.min.js +0 -1
  242. package/dist/chunk-chunk-ANYDWOZF.module.min.js +0 -1
  243. package/dist/chunk-chunk-AVBI6GDT.module.min.js +0 -1
  244. package/dist/chunk-chunk-BANTPINB.module.min.js +0 -2
  245. package/dist/chunk-chunk-C4YA6TDR.module.min.js +0 -1
  246. package/dist/chunk-chunk-C57LR3YG.module.min.js +0 -1
  247. package/dist/chunk-chunk-CKMD5NV3.module.min.js +0 -2
  248. package/dist/chunk-chunk-CO5KQMGH.module.min.js +0 -1
  249. package/dist/chunk-chunk-CWQ5YIHX.module.min.js +0 -2
  250. package/dist/chunk-chunk-E6TXX6MI.module.min.js +0 -1
  251. package/dist/chunk-chunk-GMQ5AYTD.module.min.js +0 -1
  252. package/dist/chunk-chunk-JCG72SGW.module.min.js +0 -2
  253. package/dist/chunk-chunk-K3DMEW22.module.min.js +0 -1
  254. package/dist/chunk-chunk-KT2VAZMZ.module.min.js +0 -1
  255. package/dist/chunk-chunk-L6EA5V3G.module.min.js +0 -2
  256. package/dist/chunk-chunk-LJPCLYSC.module.min.js +0 -2
  257. package/dist/chunk-chunk-LRIFN2HK.module.min.js +0 -1
  258. package/dist/chunk-chunk-N5DDKCCF.module.min.js +0 -1
  259. package/dist/chunk-chunk-NEVE562N.module.min.js +0 -1
  260. package/dist/chunk-chunk-NLO44TOS.module.min.js +0 -2
  261. package/dist/chunk-chunk-PZJ2SBLL.module.min.js +0 -2
  262. package/dist/chunk-chunk-QSQVBIJA.module.min.js +0 -1
  263. package/dist/chunk-chunk-QUJ6TTLY.module.min.js +0 -1
  264. package/dist/chunk-chunk-RBIDBUT4.module.min.js +0 -2
  265. package/dist/chunk-chunk-RCF52Z42.module.min.js +0 -2
  266. package/dist/chunk-chunk-RFLAG356.module.min.js +0 -1
  267. package/dist/chunk-chunk-RPU4IZAV.module.min.js +0 -2
  268. package/dist/chunk-chunk-SKMBCFIL.module.min.js +0 -2
  269. package/dist/chunk-chunk-TAE7W424.module.min.js +0 -2
  270. package/dist/chunk-chunk-TUBMTZMU.module.min.js +0 -2
  271. package/dist/chunk-chunk-UFFEXJQY.module.min.js +0 -1
  272. package/dist/chunk-chunk-XSCHTS4D.module.min.js +0 -2
  273. package/dist/chunk-chunk-XXWSHGPL.module.min.js +0 -2
  274. package/dist/chunk-chunk-ZOAQDIJO.module.min.js +0 -1
  275. package/dist/chunk-chunk-ZXIXAPRE.module.min.js +0 -2
  276. package/dist/chunk-statisticalOverlays-QGDLRUHX.module.min.js +0 -1
  277. package/dist/chunk-statisticalOverlays-T77OKLDY.module.min.js +0 -1
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{DEFAULT_HIT_RADIUS as m,hitTargetPoint as n,hitTargetRect as u}from"./chunk-chunk-J3XWETBJ.module.min.js";import{AreaChart as o,BubbleChart as c,CandlestickChart as h,ConnectedScatterplot as i,DifferenceChart as k,Heatmap as r,LineChart as e,MinimapChart as t,MultiAxisLineChart as p,QuadrantChart as s,Scatterplot as d,ScatterplotMatrix as j,StackedAreaChart as l,XYCustomChart as X}from"./chunk-chunk-RPU4IZAV.module.min.js";import"./chunk-chunk-YCQYG6J5.module.min.js";import"./chunk-chunk-JCG72SGW.module.min.js";import"./chunk-chunk-SKMBCFIL.module.min.js";import{StreamXYFrame_default as C}from"./chunk-chunk-CKMD5NV3.module.min.js";import"./chunk-chunk-ZXIXAPRE.module.min.js";import"./chunk-chunk-BANTPINB.module.min.js";import"./chunk-chunk-L6EA5V3G.module.min.js";import"./chunk-chunk-PZJ2SBLL.module.min.js";import"./chunk-chunk-TMWIZL3K.module.min.js";import"./chunk-chunk-XXWSHGPL.module.min.js";import{useCustomLayoutSelection as L}from"./chunk-chunk-5UKL5W76.module.min.js";import{composeStyleRules as W,makeRuleValueResolver as f,makeXYRuleContext as B,matchesThreshold as E,resolveStyleRules as I,ruleMatches as J}from"./chunk-chunk-EMO5NUGE.module.min.js";import{hatchFillId as G,hatchPatternDef as M,isHatchFill as P,resolveResponsiveRules as Z,resolveSvgFill as A,responsiveRuleMatches as H}from"./chunk-chunk-CWQ5YIHX.module.min.js";import"./chunk-chunk-JJ2OOIET.module.min.js";import"./chunk-chunk-WCX6U47H.module.min.js";import{glyphExtent as K,glyphPlacement as N}from"./chunk-chunk-KTWEBFMX.module.min.js";import"./chunk-chunk-ACLDBMRH.module.min.js";import"./chunk-chunk-YHNZCPOZ.module.min.js";export{o as AreaChart,c as BubbleChart,h as CandlestickChart,i as ConnectedScatterplot,m as DEFAULT_HIT_RADIUS,k as DifferenceChart,r as Heatmap,e as LineChart,t as MinimapChart,p as MultiAxisLineChart,s as QuadrantChart,d as Scatterplot,j as ScatterplotMatrix,l as StackedAreaChart,C as StreamXYFrame,X as XYCustomChart,W as composeStyleRules,K as glyphExtent,N as glyphPlacement,G as hatchFillId,M as hatchPatternDef,n as hitTargetPoint,u as hitTargetRect,P as isHatchFill,f as makeRuleValueResolver,B as makeXYRuleContext,E as matchesThreshold,Z as resolveResponsiveRules,I as resolveStyleRules,A as resolveSvgFill,H as responsiveRuleMatches,J as ruleMatches,L as useCustomLayoutSelection};
2
+ import{DEFAULT_HIT_RADIUS as m,hitTargetPoint as n,hitTargetRect as u}from"./chunk-chunk-J3XWETBJ.module.min.js";import{AreaChart as o,BubbleChart as c,BumpChart as h,CandlestickChart as i,ConnectedScatterplot as k,DifferenceChart as r,Heatmap as e,LineChart as t,MinimapChart as p,MultiAxisLineChart as s,QuadrantChart as d,Scatterplot as j,ScatterplotMatrix as l,StackedAreaChart as B,XYCustomChart as E,rankBumpData as X}from"./chunk-chunk-7TTBHSAG.module.min.js";import"./chunk-chunk-YCQYG6J5.module.min.js";import"./chunk-chunk-FBUNUIPV.module.min.js";import"./chunk-chunk-J5QD4RAM.module.min.js";import{StreamXYFrame_default as J}from"./chunk-chunk-KXAFCCDB.module.min.js";import"./chunk-chunk-MX35T6RX.module.min.js";import"./chunk-chunk-6V5VQVCT.module.min.js";import"./chunk-chunk-2YAZHXL4.module.min.js";import"./chunk-chunk-ONMLEXHR.module.min.js";import"./chunk-chunk-NJETWX42.module.min.js";import"./chunk-chunk-OI7R7EJB.module.min.js";import"./chunk-chunk-NH4MEAKP.module.min.js";import{useCustomLayoutSelection as H}from"./chunk-chunk-5UKL5W76.module.min.js";import"./chunk-chunk-BNGBEY7N.module.min.js";import{composeStyleRules as N,makeRuleValueResolver as T,makeXYRuleContext as f,matchesThreshold as C,resolveStyleRules as M,ruleMatches as Y}from"./chunk-chunk-EMO5NUGE.module.min.js";import"./chunk-chunk-5SD6BHVW.module.min.js";import{hatchFillId as A,hatchPatternDef as O,isHatchFill as W,resolveResponsiveRules as D,resolveSvgFill as K,responsiveRuleMatches as R}from"./chunk-chunk-7ZDJSYKI.module.min.js";import"./chunk-chunk-JJ2OOIET.module.min.js";import"./chunk-chunk-WCX6U47H.module.min.js";import{glyphExtent as U,glyphPlacement as V}from"./chunk-chunk-KTWEBFMX.module.min.js";import"./chunk-chunk-ACLDBMRH.module.min.js";import"./chunk-chunk-YHNZCPOZ.module.min.js";export{o as AreaChart,c as BubbleChart,h as BumpChart,i as CandlestickChart,k as ConnectedScatterplot,m as DEFAULT_HIT_RADIUS,r as DifferenceChart,e as Heatmap,t as LineChart,p as MinimapChart,s as MultiAxisLineChart,d as QuadrantChart,j as Scatterplot,l as ScatterplotMatrix,B as StackedAreaChart,J as StreamXYFrame,E as XYCustomChart,N as composeStyleRules,U as glyphExtent,V as glyphPlacement,A as hatchFillId,O as hatchPatternDef,n as hitTargetPoint,u as hitTargetRect,W as isHatchFill,T as makeRuleValueResolver,f as makeXYRuleContext,C as matchesThreshold,X as rankBumpData,D as resolveResponsiveRules,M as resolveStyleRules,K as resolveSvgFill,R as responsiveRuleMatches,Y as ruleMatches,H as useCustomLayoutSelection};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semiotic",
3
- "version": "3.8.5",
3
+ "version": "3.8.7",
4
4
  "mcpName": "io.github.nteract/semiotic",
5
5
  "description": "Verified generative visualization for React and agents, with deterministic chart validation, repair, rendering evidence, and MCP.",
6
6
  "main": "dist/semiotic.min.js",
@@ -186,6 +186,12 @@
186
186
  "require": "./dist/semiotic-experimental.min.js",
187
187
  "default": "./dist/semiotic-experimental.module.min.js"
188
188
  },
189
+ "./experimental/vacp": {
190
+ "types": "./dist/semiotic-experimental-vacp.d.ts",
191
+ "import": "./dist/semiotic-experimental-vacp.module.min.js",
192
+ "require": "./dist/semiotic-experimental-vacp.min.js",
193
+ "default": "./dist/semiotic-experimental-vacp.module.min.js"
194
+ },
189
195
  "./value": {
190
196
  "types": "./dist/semiotic-value.d.ts",
191
197
  "import": "./dist/semiotic-value.module.min.js",
@@ -228,7 +234,7 @@
228
234
  "test:dist": "playwright test",
229
235
  "test:examples:source": "playwright test --config playwright.docs-examples.config.ts",
230
236
  "test:visual:update": "playwright test --update-snapshots",
231
- "test:visual:bootstrap": "playwright test --update-snapshots=missing",
237
+ "test:visual:bootstrap": "node scripts/run-playwright-missing-snapshot-bootstrap.mjs",
232
238
  "test:visual:update:docker": "node scripts/run-playwright-linux-bootstrap.mjs --update-snapshots=all",
233
239
  "test:visual:bootstrap:docker": "node scripts/run-playwright-linux-bootstrap.mjs --update-snapshots=missing",
234
240
  "bench": "vitest bench",
@@ -267,6 +273,10 @@
267
273
  "generate:gofish-fixtures": "node --experimental-strip-types scripts/gen-gofish-fixtures.ts --write",
268
274
  "generate:demo-gifs": "node -e \"try{require.resolve('sharp');require.resolve('gifenc')}catch{console.log('Skipping GIF generation (sharp/gifenc not installed)');process.exit(0)}\" && npx tsx scripts/generate-demo-gifs.ts",
269
275
  "generate:weather-baselines": "npx tsx scripts/generate-open-meteo-preset-baselines.mjs",
276
+ "generate:hra-wpp-pilot": "node scripts/build-hra-wpp-kidney-pilot.mjs --write",
277
+ "test:hra-wpp-pilot": "node --test scripts/build-hra-wpp-kidney-pilot.test.mjs",
278
+ "capture:conference-demo": "node scripts/capture-conference-demo.mjs",
279
+ "test:conference-demo-assets": "node --test scripts/conference-demo-assets.test.mjs",
270
280
  "generate:blog-og-cards": "node scripts/generate-blog-og-cards.mjs",
271
281
  "generate:example-og-cards": "node scripts/generate-example-og-cards.mjs",
272
282
  "generate:blog-rss": "node scripts/generate-blog-rss.mjs",
@@ -298,6 +308,11 @@
298
308
  "check:ai-surface": "node scripts/generate-ai-surface-manifest.mjs --check",
299
309
  "check:agent-skill": "node scripts/check-agent-skill.mjs",
300
310
  "eval:ai": "node scripts/run-ai-evals.mjs",
311
+ "eval:ai:openai": "node scripts/run-openai-ai-evals.mjs",
312
+ "eval:ai:trials": "node scripts/summarize-openai-ai-eval-trials.mjs",
313
+ "test:ai-evals": "node --test scripts/ai-eval-scoring.test.mjs scripts/ai-eval-report-summary.test.mjs scripts/run-openai-ai-evals.test.mjs scripts/summarize-openai-ai-eval-trials.test.mjs",
314
+ "test:ai:openai": "node --test scripts/run-openai-ai-evals.test.mjs",
315
+ "prepare:ai-evals": "node scripts/prepare-ai-evals.mjs",
301
316
  "check:ai-contracts": "node scripts/generate-ai-behavior-contracts.mjs --check",
302
317
  "check:ai-instructions": "node scripts/sync-ai-instructions.mjs --check",
303
318
  "check:ssr": "node scripts/check-ssr-alignment.js",
@@ -462,6 +477,7 @@
462
477
  "eslint": "^10.6.0",
463
478
  "eslint-plugin-react": "^7.37.5",
464
479
  "eslint-plugin-react-hooks": "^7.1.1",
480
+ "ffmpeg-static": "^5.3.0",
465
481
  "globals": "^17.7.0",
466
482
  "gofish-graphics": "^0.1.0-nightly.20260624",
467
483
  "gofish-ir": "^0.1.0-nightly.20260624",
package/spec/README.md CHANGED
@@ -47,11 +47,43 @@ faithful to the runtime contract — recognized values are documented, but a con
47
47
  own label and it is preserved. Genuinely closed unions (`lifecycle.freshness`, `lifecycle.status`,
48
48
  `lifecycle.anchor`) use a strict `enum`.
49
49
 
50
+ ### The paper/runtime union for annotation metadata
51
+
52
+ The annotation schema publishes the **union** of the research vocabulary and the fields learned
53
+ while implementing it. The paper emphasized `provenance.basis` and the editorial
54
+ `lifecycle.status` / `lifecycle.supersedes` chain; the shipping runtime added the stable and
55
+ temporal mechanics needed to make those claims survive refreshes:
56
+ `provenance.stableId`, `lifecycle.anchor`, and `lifecycle.freshness`. The remaining provenance
57
+ fields (`author`, `authorKind`, `source`, `confidence`, `createdAt`, `dataVersion`) and
58
+ `lifecycle.ttlHint` are the shared connective vocabulary.
59
+
60
+ That origin history is not a maturity label. Every field in this v0.1 union is implemented by the
61
+ reference runtime and therefore carries `x-idid-status: "shipped"`. A future paper-only or
62
+ design-only addition must carry `"proposed"` until a reference implementation makes it executable
63
+ and testable.
64
+
50
65
  Chart capabilities may also include a `mobile` block. This is intentionally part of capability,
51
66
  not rendering props: it lets a custom chart, Vega-Lite binding, or recipe adapter state its mobile
52
67
  strategy, breakpoints, mark budget, touch target, label plan, and custom scene semantics without
53
68
  requiring the receiving library to execute the renderer.
54
69
 
70
+ ### Stretch-pick admission is a rule
71
+
72
+ `AudienceProfile.exposureLevel` controls a separate, visibly labeled stretch surface; it never
73
+ silently turns a stretch into the primary recommendation. Level `0` disables stretch picks. At
74
+ level `1`, a candidate's effective familiarity must be at most `3`; level `2` widens that ceiling
75
+ to `4`. A host admits a candidate only when all of the following are true:
76
+
77
+ 1. the host's chart implementation says the chart fits the data;
78
+ 2. it is at or below the active familiarity ceiling; and
79
+ 3. it is either an explicit `targets[component].direction: "increase"` choice or scores within
80
+ the host's declared tolerance of the top familiar choice for the same task (the reference
81
+ implementation defaults to `1.5` score points).
82
+
83
+ Each admitted stretch should retain its rationale and caveats, name the familiar chart it could
84
+ replace when one exists, and ship with interpretation scaffolding. This is governed literacy
85
+ exposure, not a novelty bonus.
86
+
55
87
  ## Versioning
56
88
 
57
89
  The spec is versioned by directory (`v0.1/`). A `0.x` line may add `proposed` fields and tighten
@@ -65,6 +97,30 @@ The canonical files ship in the `semiotic` npm tarball and are exposed as
65
97
  `semiotic/spec/v0.1/<schema-name>` resource paths; they also remain available in this directory
66
98
  for repository consumers.
67
99
 
100
+ The exact npm resource paths are:
101
+
102
+ ```text
103
+ semiotic/spec/v0.1/chart-capability.schema.json
104
+ semiotic/spec/v0.1/audience-profile.schema.json
105
+ semiotic/spec/v0.1/annotation-provenance.schema.json
106
+ semiotic/spec/v0.1/examples/<example-name>.json
107
+ semiotic/spec/bindings/vega-lite.mjs
108
+ ```
109
+
110
+ CommonJS can load a schema directly:
111
+
112
+ ```js
113
+ const capabilitySchema =
114
+ require("semiotic/spec/v0.1/chart-capability.schema.json")
115
+ ```
116
+
117
+ Node ESM can use a JSON import attribute:
118
+
119
+ ```js
120
+ import capabilitySchema from
121
+ "semiotic/spec/v0.1/chart-capability.schema.json" with { type: "json" }
122
+ ```
123
+
68
124
  ## Validation
69
125
 
70
126
  These are plain [JSON Schema 2020-12](https://json-schema.org/draft/2020-12) documents. Validate
@@ -72,6 +128,18 @@ with any compliant validator (ajv, `jsonschema`, etc.) — no library dependency
72
128
  is the point. A reference implementation also ships small dependency-free structural validators
73
129
  (see *The Vega-Lite binding*, below) for hosts that do not want to pull in a full schema engine.
74
130
 
131
+ ## Worked examples
132
+
133
+ Each schema has exactly two canonical JSON fixtures. They are packed with npm and validated in CI
134
+ against both the published Draft 2020-12 schema and the reference implementation's
135
+ dependency-free structural validator.
136
+
137
+ | Schema | Example 1 | Example 2 |
138
+ |---|---|---|
139
+ | Chart Capability | [`chart-capability-bar-comparison.json`](./v0.1/examples/chart-capability-bar-comparison.json) — a familiar categorical comparison with a ranked variant and mobile contract | [`chart-capability-service-flow.json`](./v0.1/examples/chart-capability-service-flow.json) — an operational flow view with accessible interaction alternatives and a namespaced domain extension |
140
+ | Audience Profile | [`audience-profile-executive-review.json`](./v0.1/examples/audience-profile-executive-review.json) — visual executive readers with inspectable adoption targets | [`audience-profile-incident-operators.json`](./v0.1/examples/audience-profile-incident-operators.json) — screen-reader reception plus namespaced role, literacy, and decision context |
141
+ | Annotation Provenance & Lifecycle | [`annotation-provenance-watcher-threshold.json`](./v0.1/examples/annotation-provenance-watcher-threshold.json) — a proposed watcher threshold with semantic anchoring | [`annotation-provenance-reviewed-revision.json`](./v0.1/examples/annotation-provenance-reviewed-revision.json) — a human-reviewed accepted note that supersedes an earlier claim |
142
+
75
143
  ## The Vega-Lite binding (carrying IDID metadata on a portable spec)
76
144
 
77
145
  Vega-Lite is the closest thing the ecosystem has to a neutral chart-interchange format, but it has
@@ -98,8 +166,11 @@ namespaced key:
98
166
  }
99
167
  ```
100
168
 
101
- A consumer reads `spec.usermeta.idid.capability` and routes it straight into a chart-suggestion
102
- engine; the spec still renders as ordinary Vega-Lite everywhere else.
169
+ A consumer reads `spec.usermeta.idid.capability` as the static scoring and communication metadata
170
+ for its own chart implementation; the spec still renders as ordinary Vega-Lite everywhere else.
171
+ A portable descriptor deliberately has no executable `fits` or `buildProps` functions. A host
172
+ whose suggestion engine requires those functions must resolve the descriptor's `component` to a
173
+ host implementation rather than inventing a permissive fit.
103
174
 
104
175
  ### Provenanced annotations → `usermeta.idid.annotations`
105
176
 
@@ -145,6 +216,27 @@ semantics. Unsupported composition or chart semantics must return a typed refusa
145
216
  plausible fallback. IDID-enriched annotation layers recover their one base view, while arbitrary
146
217
  Vega-Lite layer composition remains deliberately unsupported.
147
218
 
219
+ ## Appendix: typology crosswalk
220
+
221
+ The core schemas are intentionally small. They carry axes that already have interoperable runtime
222
+ behavior and leave organization- or domain-specific classifications in namespaced extension
223
+ vocabularies. Because the three root schemas permit additional properties, a consumer can add one
224
+ object such as `x-example-context` without pretending its local ontology is universal.
225
+
226
+ | Typology axis | Where it lives in v0.1 | Core or extension? |
227
+ |---|---|---|
228
+ | Data/domain entity + scale | `ChartCapability.family`, `tags`, and `mobile` describe chart/rendering characteristics, not domain entities or scientific/organizational scale. Put entity types, units, granularity, and domain scale in a namespaced context object. | **Extension vocabulary.** Do not overload `family` with a domain ontology. |
229
+ | Analytical task | `ChartCapability.intentScores`, keyed by open intent ids. The schema lists the reference implementation's 13 recognized tasks without closing the vocabulary. | **Core field; extensible values.** |
230
+ | Communicative act | Some acts can be inferred by a host from the strongest analytical intent, but v0.1 has no separate act field for report, alert, explain, persuade, teach, and similar purposes. | **Extension vocabulary** when task and act differ. |
231
+ | Audience role + literacy | `AudienceProfile.familiarity`, `targets`, and `exposureLevel` carry chart familiarity and governed literacy growth. Job/reader role, domain knowledge, and mastered visualization concepts are not core fields. | **Mixed:** chart familiarity/growth are core; role, domain literacy, and concept mastery are extensions. |
232
+ | Reception modality | `AudienceProfile.receptionModality`: `visual`, `screen-reader`, `sonified`, or `agent`. | **Core field and closed vocabulary in v0.1.** |
233
+ | Decision/use context | No core field. Put decision type, workflow stage, urgency, cadence, collaboration setting, or regulatory context in a namespaced context object. | **Extension vocabulary.** |
234
+ | Provenance + lifecycle | An annotation's `provenance` records actor, evidence basis, confidence, time/data version, and stable identity; `lifecycle` records freshness, editorial status, supersession, TTL, and anchoring. | **Core fields.** Open source/basis labels permit local evidence vocabularies; freshness/status/anchor remain closed. |
235
+
236
+ Extension vocabularies should be documented, versioned, and preserved verbatim by bindings. They
237
+ should graduate into a future core schema only after more than one adopter needs interoperable
238
+ behavior, not merely because one domain has a useful label.
239
+
148
240
  ---
149
241
 
150
242
  *This directory is the canonical published copy of the schemas and is packed unchanged into npm.
@@ -17,17 +17,28 @@ meaning travel together.
17
17
  import {
18
18
  attachIdid, readIdid, attachIdidAnnotations, readIdidAnnotations,
19
19
  suggestionInputFromSpec,
20
- } from "./vega-lite.mjs"
20
+ } from "semiotic/spec/bindings/vega-lite.mjs"
21
21
 
22
22
  let spec = { mark: "bar", encoding: { /* … */ } }
23
23
  spec = attachIdid(spec, { capability, audience }) // ride under usermeta.idid
24
24
  spec = attachIdidAnnotations(spec, [provenancedNote]) // + a note with its evidence
25
25
 
26
- // An IDID-aware host reads it back and acts on it — e.g. routes the carried
27
- // capability + audience through any chart-suggestion engine:
26
+ // An IDID-aware host reads it back and acts on it:
28
27
  const input = suggestionInputFromSpec(spec) // { capability, audience } | null
29
28
  ```
30
29
 
30
+ The binding is available from the npm package at
31
+ `semiotic/spec/bindings/vega-lite.mjs`; the three schemas and six worked
32
+ fixtures resolve under `semiotic/spec/v0.1/`.
33
+
34
+ `suggestionInputFromSpec` extracts metadata; it does not invent executable
35
+ chart behavior. The portable capability contains static rubric/intent metadata
36
+ but deliberately omits host-specific `fits` and `buildProps` functions. A host
37
+ with a suggestion engine that requires those functions must resolve
38
+ `capability.component` to its own implementation before scoring it. This
39
+ standalone binding refuses to assume that every carried chart fits every
40
+ dataset.
41
+
31
42
  The output is byte-compatible with Semiotic's TypeScript binding
32
43
  (`semiotic/experimental`: `unstable_attachIDID`, `unstable_readIDID`,
33
44
  `unstable_attachIDIDAnnotations`, …), so a spec enriched in one can be read in
@@ -0,0 +1,27 @@
1
+ {
2
+ "type": "callout",
3
+ "x": "2026-07-25T14:18:00Z",
4
+ "y": 1280,
5
+ "label": "Database pool saturation confirmed after trace review.",
6
+ "provenance": {
7
+ "author": "operator-17",
8
+ "authorKind": "human",
9
+ "source": "user",
10
+ "basis": "manual-review",
11
+ "confidence": 1,
12
+ "createdAt": "2026-07-25T14:31:00Z",
13
+ "dataVersion": "incident-1842-window-8",
14
+ "stableId": "annotation:incident-1842:confirmed-cause"
15
+ },
16
+ "lifecycle": {
17
+ "freshness": "fresh",
18
+ "status": "accepted",
19
+ "supersedes": "annotation:incident-1842:suspected-cause",
20
+ "ttlHint": 86400000,
21
+ "anchor": "fixed"
22
+ },
23
+ "x-example-context": {
24
+ "review": "incident-1842-postmortem",
25
+ "decisionUse": "retain as the accepted causal note"
26
+ }
27
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "type": "y-threshold",
3
+ "value": 1000,
4
+ "label": "SLA breach threshold",
5
+ "provenance": {
6
+ "author": "latency-watcher",
7
+ "authorKind": "watcher",
8
+ "source": "computed",
9
+ "basis": "statistical-test",
10
+ "confidence": 0.82,
11
+ "createdAt": "2026-07-25T14:00:00Z",
12
+ "dataVersion": "incident-1842-window-7",
13
+ "stableId": "annotation:incident-1842:latency-threshold"
14
+ },
15
+ "lifecycle": {
16
+ "freshness": "fresh",
17
+ "status": "proposed",
18
+ "ttlHint": "PT6H",
19
+ "anchor": "semantic"
20
+ }
21
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "name": "Quarterly executive review",
4
+ "familiarity": {
5
+ "BarChart": 5,
6
+ "LineChart": 5,
7
+ "PieChart": 5,
8
+ "BoxPlot": 2
9
+ },
10
+ "targets": {
11
+ "PieChart": {
12
+ "direction": "decrease",
13
+ "weight": 2,
14
+ "reason": "Prefer position and length when exact category comparison matters."
15
+ },
16
+ "BoxPlot": {
17
+ "direction": "increase",
18
+ "weight": 1,
19
+ "reason": "Build familiarity with distribution rather than reporting only averages."
20
+ }
21
+ },
22
+ "exposureLevel": 1,
23
+ "receptionModality": "visual"
24
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "name": "Incident review operators",
4
+ "familiarity": {
5
+ "LineChart": 5,
6
+ "Heatmap": 4,
7
+ "SankeyDiagram": 3,
8
+ "ForceDirectedGraph": 2
9
+ },
10
+ "targets": {
11
+ "SankeyDiagram": {
12
+ "direction": "increase",
13
+ "weight": 2,
14
+ "reason": "Practice tracing affected traffic through service dependencies."
15
+ }
16
+ },
17
+ "exposureLevel": 2,
18
+ "receptionModality": "screen-reader",
19
+ "x-example-context": {
20
+ "roles": [
21
+ "on-call operator",
22
+ "incident commander"
23
+ ],
24
+ "visualizationLiteracy": {
25
+ "mastered": [
26
+ "ordered-series",
27
+ "threshold"
28
+ ],
29
+ "learning": [
30
+ "flow"
31
+ ]
32
+ },
33
+ "domainKnowledge": [
34
+ "service topology",
35
+ "latency objectives"
36
+ ],
37
+ "useContext": {
38
+ "decision": "incident triage",
39
+ "cadence": "live"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "component": "BarChart",
4
+ "family": "categorical",
5
+ "importPath": "semiotic/ordinal",
6
+ "rubric": {
7
+ "familiarity": 5,
8
+ "accuracy": 5,
9
+ "precision": 4
10
+ },
11
+ "intentScores": {
12
+ "compare-categories": 5,
13
+ "rank": 4
14
+ },
15
+ "variants": [
16
+ {
17
+ "key": "ranked",
18
+ "label": "Ranked bars",
19
+ "description": "Sort categories by value when rank is the primary task.",
20
+ "intentDeltas": {
21
+ "rank": 1
22
+ },
23
+ "props": {
24
+ "sort": "descending"
25
+ }
26
+ }
27
+ ],
28
+ "caveats": [
29
+ "Dense category sets should be filtered or grouped before rendering."
30
+ ],
31
+ "mobile": {
32
+ "strategy": "direct-labels",
33
+ "responsive": true,
34
+ "breakpoints": [
35
+ 480
36
+ ],
37
+ "maxMarks": 12,
38
+ "minimumHitTarget": 24,
39
+ "labels": {
40
+ "strategy": "direct",
41
+ "minFontSize": 12
42
+ }
43
+ },
44
+ "tags": [
45
+ "comparison",
46
+ "categorical"
47
+ ]
48
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "specVersion": "0.1",
3
+ "component": "SankeyDiagram",
4
+ "family": "flow",
5
+ "importPath": "semiotic/network",
6
+ "rubric": {
7
+ "familiarity": 3,
8
+ "accuracy": 4,
9
+ "precision": 2
10
+ },
11
+ "intentScores": {
12
+ "flow": 5,
13
+ "change-detection": 3
14
+ },
15
+ "caveats": [
16
+ "Link width supports flow comparison but is not a precise lookup channel.",
17
+ "Cycles require a host-specific layout strategy."
18
+ ],
19
+ "mobile": {
20
+ "strategy": "summary-cards",
21
+ "responsive": true,
22
+ "minViewportWidth": 320,
23
+ "maxMarks": 40,
24
+ "summary": "Lead with the largest sources, destinations, and bottlenecks.",
25
+ "interaction": {
26
+ "primary": "select-flow",
27
+ "alternatives": [
28
+ "accessible-flow-table"
29
+ ],
30
+ "hoverFallback": "focus-or-tap",
31
+ "targetSize": 24
32
+ },
33
+ "custom": {
34
+ "dataBearingSceneNodes": true,
35
+ "stableIds": true,
36
+ "navigationGranularity": "source, target, then link"
37
+ }
38
+ },
39
+ "tags": [
40
+ "flow",
41
+ "operations"
42
+ ],
43
+ "x-example-context": {
44
+ "domainEntities": [
45
+ "service",
46
+ "request"
47
+ ],
48
+ "domainScale": {
49
+ "entityLevel": "service",
50
+ "measure": "requests-per-minute"
51
+ },
52
+ "communicativeAct": "diagnose"
53
+ }
54
+ }