semiotic 3.6.0 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/CLAUDE.md +192 -228
  2. package/README.md +70 -17
  3. package/ai/cli.js +41 -0
  4. package/ai/componentMetadata.cjs +11 -2
  5. package/ai/dist/mcp-server.js +625 -10
  6. package/ai/examples.md +98 -0
  7. package/ai/schema.json +581 -1
  8. package/ai/system-prompt.md +7 -4
  9. package/dist/components/AccessibleNavTree.d.ts +26 -0
  10. package/dist/components/Annotation.d.ts +41 -15
  11. package/dist/components/CategoryColors.d.ts +1 -1
  12. package/dist/components/ChartContainer.d.ts +32 -2
  13. package/dist/components/ChartGrid.d.ts +1 -1
  14. package/dist/components/ContextLayout.d.ts +1 -1
  15. package/dist/components/DataSummaryContext.d.ts +1 -1
  16. package/dist/components/DetailsPanel.d.ts +1 -1
  17. package/dist/components/Legend.d.ts +3 -2
  18. package/dist/components/LinkedCharts.d.ts +1 -1
  19. package/dist/components/ThemeProvider.d.ts +1 -1
  20. package/dist/components/Tooltip/FlippingTooltip.d.ts +1 -1
  21. package/dist/components/Tooltip/Tooltip.d.ts +2 -2
  22. package/dist/components/ai/annotationProvenance.d.ts +349 -0
  23. package/dist/components/ai/audienceProfile.d.ts +60 -3
  24. package/dist/components/ai/chartCapabilityTypes.d.ts +60 -2
  25. package/dist/components/ai/chartRoles.d.ts +27 -0
  26. package/dist/components/ai/conversationArc.d.ts +379 -0
  27. package/dist/components/ai/dataScaleProfile.d.ts +320 -0
  28. package/dist/components/ai/describeChart.d.ts +114 -0
  29. package/dist/components/ai/navigationTree.d.ts +45 -0
  30. package/dist/components/ai/qualityScorecard.d.ts +11 -0
  31. package/dist/components/ai/readerGrounding.d.ts +70 -0
  32. package/dist/components/ai/suggestCharts.d.ts +34 -1
  33. package/dist/components/ai/useConversationArc.d.ts +89 -0
  34. package/dist/components/ai/useNavigationSync.d.ts +61 -0
  35. package/dist/components/ai/variantDiscovery.d.ts +168 -0
  36. package/dist/components/charts/geo/ChoroplethMap.d.ts +2 -1
  37. package/dist/components/charts/network/CirclePack.d.ts +2 -1
  38. package/dist/components/charts/network/OrbitDiagram.d.ts +1 -1
  39. package/dist/components/charts/network/TreeDiagram.d.ts +2 -1
  40. package/dist/components/charts/network/Treemap.d.ts +2 -1
  41. package/dist/components/charts/realtime/RealtimeHeatmap.d.ts +3 -0
  42. package/dist/components/charts/realtime/RealtimeHistogram.d.ts +4 -1
  43. package/dist/components/charts/realtime/RealtimeLineChart.d.ts +3 -0
  44. package/dist/components/charts/realtime/RealtimeSwarmChart.d.ts +3 -0
  45. package/dist/components/charts/realtime/RealtimeWaterfallChart.d.ts +3 -0
  46. package/dist/components/charts/shared/ChartError.d.ts +2 -1
  47. package/dist/components/charts/shared/annotationHierarchy.d.ts +42 -0
  48. package/dist/components/charts/shared/annotationResolvers.d.ts +3 -2
  49. package/dist/components/charts/shared/annotationRules.d.ts +16 -0
  50. package/dist/components/charts/shared/annotationTypes.d.ts +14 -0
  51. package/dist/components/charts/shared/auditAccessibility.d.ts +90 -0
  52. package/dist/components/charts/shared/chartSpecs.d.ts +2 -3
  53. package/dist/components/charts/shared/diagnoseConfig.d.ts +4 -6
  54. package/dist/components/charts/shared/selectionUtils.d.ts +5 -2
  55. package/dist/components/charts/shared/streamPropsHelpers.d.ts +2 -0
  56. package/dist/components/charts/shared/types.d.ts +5 -1
  57. package/dist/components/charts/shared/withChartWrapper.d.ts +1 -1
  58. package/dist/components/charts/value/BigNumber.capability.d.ts +13 -0
  59. package/dist/components/charts/value/BigNumber.d.ts +14 -0
  60. package/dist/components/charts/value/formatting.d.ts +40 -0
  61. package/dist/components/charts/value/thresholdSparkline.d.ts +40 -0
  62. package/dist/components/charts/value/types.d.ts +292 -0
  63. package/dist/components/charts/xy/MinimapChart.d.ts +2 -1
  64. package/dist/components/charts/xy/ScatterplotMatrix.d.ts +2 -1
  65. package/dist/components/realtime/lifecycleBands.d.ts +44 -0
  66. package/dist/components/realtime/types.d.ts +23 -8
  67. package/dist/components/recipes/annotationDensity.d.ts +69 -0
  68. package/dist/components/recipes/annotationLayout.d.ts +93 -0
  69. package/dist/components/semiotic-ai.d.ts +38 -15
  70. package/dist/components/semiotic-realtime.d.ts +2 -0
  71. package/dist/components/semiotic-recipes.d.ts +4 -0
  72. package/dist/components/semiotic-server.d.ts +2 -1
  73. package/dist/components/semiotic-utils.d.ts +8 -0
  74. package/dist/components/semiotic-value.d.ts +55 -0
  75. package/dist/components/semiotic.d.ts +7 -0
  76. package/dist/components/server/renderEvidence.d.ts +92 -0
  77. package/dist/components/server/renderToStaticSVG.d.ts +14 -1
  78. package/dist/components/server/staticAnnotations.d.ts +2 -0
  79. package/dist/components/stream/AccessibleDataTable.d.ts +15 -6
  80. package/dist/components/stream/FocusRing.d.ts +2 -1
  81. package/dist/components/stream/MarginalGraphics.d.ts +2 -1
  82. package/dist/components/stream/NetworkSVGOverlay.d.ts +13 -6
  83. package/dist/components/stream/OrdinalBrushOverlay.d.ts +19 -1
  84. package/dist/components/stream/OrdinalSVGOverlay.d.ts +4 -2
  85. package/dist/components/stream/SVGOverlay.d.ts +5 -2
  86. package/dist/components/stream/XYBrushOverlay.d.ts +21 -1
  87. package/dist/components/stream/geoTypes.d.ts +3 -0
  88. package/dist/components/stream/networkTypes.d.ts +2 -0
  89. package/dist/components/stream/ordinalTypes.d.ts +2 -0
  90. package/dist/components/stream/types.d.ts +2 -0
  91. package/dist/geo.min.js +1 -1
  92. package/dist/geo.module.min.js +1 -1
  93. package/dist/network.min.js +1 -1
  94. package/dist/network.module.min.js +1 -1
  95. package/dist/ordinal.min.js +1 -1
  96. package/dist/ordinal.module.min.js +1 -1
  97. package/dist/realtime.min.js +1 -1
  98. package/dist/realtime.module.min.js +1 -1
  99. package/dist/semiotic-ai.d.ts +38 -15
  100. package/dist/semiotic-ai.min.js +1 -1
  101. package/dist/semiotic-ai.module.min.js +1 -1
  102. package/dist/semiotic-realtime.d.ts +2 -0
  103. package/dist/semiotic-recipes.d.ts +4 -0
  104. package/dist/semiotic-recipes.min.js +1 -1
  105. package/dist/semiotic-recipes.module.min.js +1 -1
  106. package/dist/semiotic-server.d.ts +2 -1
  107. package/dist/semiotic-themes.min.js +1 -1
  108. package/dist/semiotic-themes.module.min.js +1 -1
  109. package/dist/semiotic-utils.d.ts +8 -0
  110. package/dist/semiotic-utils.min.js +1 -1
  111. package/dist/semiotic-utils.module.min.js +1 -1
  112. package/dist/semiotic-value.d.ts +55 -0
  113. package/dist/semiotic-value.min.js +2 -0
  114. package/dist/semiotic-value.module.min.js +2 -0
  115. package/dist/semiotic.d.ts +7 -0
  116. package/dist/semiotic.min.js +1 -1
  117. package/dist/semiotic.module.min.js +1 -1
  118. package/dist/server.min.js +1 -1
  119. package/dist/server.module.min.js +1 -1
  120. package/dist/xy.min.js +1 -1
  121. package/dist/xy.module.min.js +1 -1
  122. package/package.json +19 -5
package/README.md CHANGED
@@ -35,11 +35,11 @@ generate correct code without examples.
35
35
  Semiotic ships with everything an AI coding assistant needs to generate
36
36
  correct visualizations without trial and error:
37
37
 
38
- - **`semiotic/ai`** — a single import with 42 HOC charts (XY, ordinal, network, realtime), optimized for LLM code generation. Geo charts are in `semiotic/geo` to keep d3-geo out of non-geo bundles.
38
+ - **`semiotic/ai`** — a single import with the 47-chart capability catalog (XY, ordinal, network, realtime, geo, value), optimized for LLM code generation. Note: the published entry files are pre-bundled, so importing one chart from `semiotic/ai` still ships most of the bundle — treat it as a codegen/tooling surface and use family subpaths (`semiotic/xy`, `semiotic/geo`, `semiotic/value`, …) in production code, at roughly half the single-chart cost.
39
39
  - **`ai/schema.json`** — machine-readable prop schemas for every component
40
40
  - **`npx semiotic-mcp`** — an MCP server for tool-based chart rendering in any MCP client
41
41
  - **`npx semiotic-ai --doctor`** — validate component + props JSON from the command line with typo suggestions and anti-pattern detection
42
- - **`diagnoseConfig(component, props)`** — programmatic anti-pattern detector with 12 checks and actionable fixes
42
+ - **`diagnoseConfig(component, props)`** — programmatic anti-pattern detector with actionable fixes, spanning validation, encoding, accessibility, and misleading-design (deception) checks
43
43
  - **`CLAUDE.md`** — instruction files auto-synced for Claude, Cursor, Copilot, Windsurf, and Cline
44
44
  - **`llms.txt`** — machine-readable documentation following the emerging standard
45
45
 
@@ -71,6 +71,13 @@ with d3-geo projections, zoom/pan, tile basemaps, and drag-rotate globe spinning
71
71
  LOESS smoothing, forecast with confidence envelopes, and anomaly detection.
72
72
  Marginal distribution graphics on scatterplot axes with a single prop.
73
73
 
74
+ **First-class annotations.** Annotations are data-bound objects, not post-hoc
75
+ artwork. Labels, callouts, thresholds, enclosures, statistical overlays, and
76
+ React widgets move with the chart and render through browser, SSR, and export
77
+ paths. Opt into placement, hierarchy, density, progressive disclosure,
78
+ audience-aware amount, provenance, and editorial lifecycle when the chart
79
+ needs to communicate more than its encoding alone.
80
+
74
81
  ### Start simple, go deep
75
82
 
76
83
  | Layer | For | Example |
@@ -278,6 +285,27 @@ configToJSX(config)
278
285
  Supports bar, line, area, point, rect, arc, tick marks with encoding translation
279
286
  for color, size, aggregation, and binning.
280
287
 
288
+ ### Conversation Arc Telemetry
289
+
290
+ Capture and replay the path an AI-assisted chart session took:
291
+
292
+ ```ts
293
+ import {
294
+ createLocalStorageConversationArcSink,
295
+ enableConversationArc,
296
+ getConversationArcStore,
297
+ loadConversationArc,
298
+ registerConversationArcSink,
299
+ } from "semiotic/ai"
300
+
301
+ const sink = createLocalStorageConversationArcSink({ key: "my-app:arc" })
302
+ registerConversationArcSink(sink)
303
+ enableConversationArc({ sessionId: "session-abc" })
304
+
305
+ getConversationArcStore().record({ type: "chart-rendered", component: "LineChart" })
306
+ loadConversationArc(sink.load(), { enabled: false })
307
+ ```
308
+
281
309
  ## Bundle Sizes
282
310
 
283
311
  Semiotic ships 12 entry points. **Don't import from `"semiotic"` unless you need everything** — use the sub-path that matches your chart type:
@@ -287,18 +315,19 @@ Semiotic ships 12 entry points. **Don't import from `"semiotic"` unless you need
287
315
 
288
316
  | Entry Point | gzip | What's inside |
289
317
  |---|---|---|
290
- | `semiotic/xy` | **86 KB** | LineChart, AreaChart, Scatterplot, Heatmap, + 8 more XY charts |
291
- | `semiotic/ordinal` | **70 KB** | BarChart, PieChart, BoxPlot, Histogram, + 11 more categorical charts |
292
- | `semiotic/network` | **64 KB** | ForceDirectedGraph, SankeyDiagram, ProcessSankey, Treemap, + 4 more |
293
- | `semiotic/geo` | **52 KB** | ChoroplethMap, FlowMap, DistanceCartogram, ProportionalSymbolMap |
294
- | `semiotic/realtime` | **91 KB** | RealtimeLineChart, RealtimeHistogram, + 4 streaming charts |
295
- | `semiotic/server` | **122 KB** | renderChart, renderDashboard, renderToImage, renderToAnimatedGif |
296
- | `semiotic/utils` | **22 KB** | ThemeProvider, validators, serialization — no chart components |
297
- | `semiotic/recipes` | **5 KB** | Pure layout functions (waffle, marimekko, flextree, dagre, …) |
318
+ | `semiotic/xy` | **90 KB** | LineChart, AreaChart, Scatterplot, Heatmap, + 8 more XY charts |
319
+ | `semiotic/ordinal` | **74 KB** | BarChart, PieChart, BoxPlot, Histogram, + 11 more categorical charts |
320
+ | `semiotic/network` | **68 KB** | ForceDirectedGraph, SankeyDiagram, ProcessSankey, Treemap, + 4 more |
321
+ | `semiotic/geo` | **55 KB** | ChoroplethMap, FlowMap, DistanceCartogram, ProportionalSymbolMap |
322
+ | `semiotic/realtime` | **95 KB** | RealtimeLineChart, RealtimeHistogram, + 4 streaming charts |
323
+ | `semiotic/server` | **128 KB** | renderChart, renderDashboard, renderToImage, renderToAnimatedGif |
324
+ | `semiotic/utils` | **38 KB** | ThemeProvider, validators, serialization — no chart components |
325
+ | `semiotic/recipes` | **9 KB** | Pure layout functions (waffle, marimekko, flextree, dagre, …) |
298
326
  | `semiotic/themes` | **4 KB** | Theme presets only (tufte, carbon, etc.) |
299
327
  | `semiotic/data` | **3 KB** | bin, rollup, groupBy, pivot, fromVegaLite |
300
- | `semiotic/ai` | **211 KB** | All 42 HOCs + validation optimized for LLM code generation |
301
- | `semiotic` | **190 KB** | Everything below (full bundle) |
328
+ | `semiotic/value` | **6 KB** | BigNumber focal-value KPI / scorecard (SingleValueFrame POC) |
329
+ | `semiotic/ai` | **250 KB** | All 47 schema-backed charts + validation — optimized for LLM code generation |
330
+ | `semiotic` | **203 KB** | Everything below (full bundle) |
302
331
 
303
332
  <!-- semiotic-bundle-sizes:end -->
304
333
 
@@ -382,14 +411,17 @@ Add to your MCP client config (e.g. `claude_desktop_config.json` for Claude Desk
382
411
  }
383
412
  ```
384
413
 
385
- No API keys or authentication required. The server runs locally via stdio. HTTP mode is also available for inspectors and web clients: `npx semiotic-mcp --http --port 3001`.
414
+ No API keys or authentication required. The server runs locally via stdio. HTTP mode is also available for inspectors, web clients, and ChatGPT Apps SDK experiments: `npx semiotic-mcp --http --port 3001`.
415
+
416
+ For ChatGPT developer mode, expose the HTTP endpoint over HTTPS with a tunnel and create a connector that points at `https://<your-tunnel>/mcp`. The experimental Apps SDK surface is `renderInteractiveChart`, which returns a `text/html;profile=mcp-app` widget template plus a hidden SVG payload rendered by Semiotic on the MCP server.
386
417
 
387
418
  ### Tools
388
419
 
389
420
  | Tool | Description |
390
421
  |------|-------------|
391
- | **`renderChart`** | Render a Semiotic chart to static SVG. Supports the components returned by `getSchema` that are marked `[renderable]`. Pass `{ component: "LineChart", props: { data: [...], xAccessor: "x", yAccessor: "y" } }`. Returns SVG string or validation errors with fix suggestions. |
392
- | **`getSchema`** | Return the prop schema for a specific component. Pass `{ component: "LineChart" }` to get its props, or omit `component` to list all 46 chart schemas. Components marked `[renderable]` are available through `renderChart`; realtime charts require a browser/live environment. |
422
+ | **`renderChart`** | Render a Semiotic chart to static SVG. Supports the components returned by `getSchema` that are marked `[renderable]`. Pass `{ component: "LineChart", props: { data: [...], xAccessor: "x", yAccessor: "y" } }`. Returns SVG string plus a "Render evidence" JSON block (mark counts by scene type, resolved axis domains, empty flag, annotation count, accessible name) so agents can verify the chart drew data marks, or validation errors with fix suggestions. |
423
+ | **`renderInteractiveChart`** | Render a static-data chart as a ChatGPT Apps widget. Uses the same Semiotic server render path as `renderChart`, then hydrates an iframe UI with fit, zoom, data, hover, and render-evidence controls. |
424
+ | **`getSchema`** | Return the prop schema for a specific component. Pass `{ component: "LineChart" }` to get its props, or omit `component` to list all 47 chart schemas. Components marked `[renderable]` are available through `renderChart`; realtime charts require a browser/live environment. |
393
425
  | **`suggestChart`** | Legacy sample-row recommender. Pass `{ data: [{...}, ...] }` with 1–5 sample objects plus optional broad intent/capability filters. |
394
426
  | **`suggestCharts`** | Capability-based recommender for bounded row data. Returns ranked chart suggestions with scores, reasons, caveats, import paths, and ready-to-use props. |
395
427
  | **`suggestStreamCharts`** | Recommend realtime charts from a stream schema, throughput, and retention hints. |
@@ -410,6 +442,7 @@ No API keys or authentication required. The server runs locally via stdio. HTTP
410
442
  | **`semiotic://behavior-contracts`** | Agent-visible semantic rules for color precedence, required prop combinations, push refs, and renderability. |
411
443
  | **`semiotic://system-prompt`** | Compact AI instructions with import rules, chart props, SSR guidance, and pitfalls. |
412
444
  | **`semiotic://examples`** | Copy-paste chart examples by data shape. |
445
+ | **`ui://semiotic/chart-widget.html`** | ChatGPT Apps / MCP Apps widget template used by `renderInteractiveChart`. |
413
446
 
414
447
  ### Prompts
415
448
 
@@ -461,6 +494,25 @@ Args: {
461
494
  → Returns: <svg>...</svg>
462
495
  ```
463
496
 
497
+ ### Example: render a ChatGPT Apps widget
498
+
499
+ ```
500
+ Tool: renderInteractiveChart
501
+ Args: {
502
+ "component": "BarChart",
503
+ "props": {
504
+ "title": "Revenue by Quarter",
505
+ "data": [
506
+ { "quarter": "Q1", "revenue": 120 },
507
+ { "quarter": "Q2", "revenue": 180 }
508
+ ],
509
+ "categoryAccessor": "quarter",
510
+ "valueAccessor": "revenue"
511
+ }
512
+ }
513
+ → Returns: structured chart summary for the model + hidden SVG/widget metadata for ChatGPT.
514
+ ```
515
+
464
516
  ### Example: diagnose a broken config
465
517
 
466
518
  ```
@@ -509,7 +561,7 @@ Semiotic is indexed by AI-coding-agent documentation tools so your assistant (Cl
509
561
 
510
562
  Agent-facing API surface:
511
563
 
512
- - **`CLAUDE.md`**, **`ai/schema.json`**, **`ai/behaviorContracts.cjs`** — bundled in the npm tarball (see `package.json#files`); agents that install Semiotic locally read these directly. `CLAUDE.md` is the quick-start cheat sheet (HOC props, push API, theming, usage notes); `ai/schema.json` is the JSON Schema for every chart's prop surface (46 charts); `ai/behaviorContracts.cjs` carries the agent-visible semantic rules (color precedence, push-mode requirements, ID-accessor contracts).
564
+ - **`CLAUDE.md`**, **`ai/schema.json`**, **`ai/behaviorContracts.cjs`** — bundled in the npm tarball (see `package.json#files`); agents that install Semiotic locally read these directly. `CLAUDE.md` is the quick-start cheat sheet (HOC props, push API, theming, usage notes); `ai/schema.json` is the JSON Schema for every chart's prop surface (47 charts); `ai/behaviorContracts.cjs` carries the agent-visible semantic rules (color precedence, push-mode requirements, ID-accessor contracts).
513
565
  - [**`semiotic.nteract.io/llms.txt`**](https://semiotic.nteract.io/llms.txt) + [**`/llms-full.txt`**](https://semiotic.nteract.io/llms-full.txt) — deployed at the docs site per the [llms.txt standard](https://llmstxt.org). Agents fetch the navigation map (`llms.txt`) or the full inlined docs (`llms-full.txt`) over HTTP; they're not part of the npm package itself.
514
566
 
515
567
  ## Documentation
@@ -519,7 +571,8 @@ Agent-facing API surface:
519
571
  - [Getting Started](https://semiotic.nteract.io/getting-started)
520
572
  - [Charts](https://semiotic.nteract.io/charts) — chart types with live examples
521
573
  - [Frames](https://semiotic.nteract.io/frames) — full Frame API reference
522
- - [Features](https://semiotic.nteract.io/features) — axes, annotations, tooltips, styling, Vega-Lite translator
574
+ - [Features](https://semiotic.nteract.io/features) — axes, tooltips, interaction, responsive behavior, and composition
575
+ - [Annotations](https://semiotic.nteract.io/annotations) — first-class annotation types, design guidance, provenance, and lifecycle
523
576
  - [Cookbook](https://semiotic.nteract.io/cookbook) — advanced patterns and recipes
524
577
  - [Playground](https://semiotic.nteract.io/playground) — interactive prop exploration
525
578
 
package/ai/cli.js CHANGED
@@ -48,6 +48,8 @@ Usage:
48
48
  npx semiotic-ai --compact Print ai/system-prompt.md (compact prompt)
49
49
  npx semiotic-ai --examples Print ai/examples.md (copy-paste examples)
50
50
  npx semiotic-ai --doctor Validate { component, props, usageMode? } JSON from stdin
51
+ npx semiotic-ai --audit-a11y Audit { component, props, inChartContainer?, describe?, navigable? }
52
+ JSON against Chartability (POUR-CAF) accessibility heuristics
51
53
  npx semiotic-ai --help Show this help message
52
54
  `.trim()
53
55
 
@@ -341,6 +343,45 @@ if (flag === "--doctor") {
341
343
  process.exit(0)
342
344
  }
343
345
 
346
+ // --audit-a11y: grade component + props against Chartability heuristics
347
+ if (flag === "--audit-a11y") {
348
+ const input = readJSONInput("Usage: npx semiotic-ai --audit-a11y '{\"component\":\"LineChart\",\"props\":{\"data\":[...],\"xAccessor\":\"x\",\"yAccessor\":\"y\"}}'\n echo '{\"component\":\"BarChart\",\"props\":{...},\"inChartContainer\":true}' | npx semiotic-ai --audit-a11y")
349
+
350
+ try {
351
+ const { component, props, inChartContainer, describe, navigable } = JSON.parse(input)
352
+ if (!component || !props) {
353
+ console.error("Input must be JSON with { component, props } fields.")
354
+ process.exit(1)
355
+ }
356
+
357
+ // Load the audit from dist (same strategy as --doctor). It lives in the
358
+ // semiotic/ai bundle; a clean source checkout without a build can't run it.
359
+ const distPath = path.join(pkgRoot, "dist", "semiotic-ai.min.js")
360
+ let auditAccessibility, formatAccessibilityAudit
361
+ try {
362
+ if (!process.env.SEMIOTIC_AI_SCHEMA_ONLY) {
363
+ const mod = require(distPath)
364
+ auditAccessibility = mod.auditAccessibility
365
+ formatAccessibilityAudit = mod.formatAccessibilityAudit
366
+ }
367
+ } catch (e) {
368
+ // Dist unavailable.
369
+ }
370
+
371
+ if (!auditAccessibility || !formatAccessibilityAudit) {
372
+ console.error("Accessibility audit requires the built library. Run `npm run dist` first, or use the MCP `auditAccessibility` tool.")
373
+ process.exit(2)
374
+ }
375
+
376
+ const result = auditAccessibility(component, props, { inChartContainer: inChartContainer === true, describe: describe === true, navigable: navigable === true })
377
+ console.log(formatAccessibilityAudit(result))
378
+ process.exit(result.ok ? 0 : 1)
379
+ } catch (err) {
380
+ console.error(`Failed to parse input: ${errorMessage(err)}`)
381
+ process.exit(1)
382
+ }
383
+ }
384
+
344
385
  const filePath = flag ? FILES[flag] : FILES.default
345
386
 
346
387
  if (!filePath) {
@@ -1,6 +1,6 @@
1
1
  "use strict"
2
2
 
3
- const CATEGORY_ORDER = ["xy", "ordinal", "network", "geo", "realtime"]
3
+ const CATEGORY_ORDER = ["xy", "ordinal", "network", "geo", "realtime", "value"]
4
4
 
5
5
  const COMPONENTS_BY_CATEGORY = {
6
6
  xy: [
@@ -24,6 +24,9 @@ const COMPONENTS_BY_CATEGORY = {
24
24
  "RealtimeLineChart", "RealtimeHistogram", "TemporalHistogram", "RealtimeSwarmChart",
25
25
  "RealtimeWaterfallChart", "RealtimeHeatmap",
26
26
  ],
27
+ value: [
28
+ "BigNumber",
29
+ ],
27
30
  }
28
31
 
29
32
  const COMPONENT_TO_CATEGORY = new Map()
@@ -59,11 +62,17 @@ function metadataForComponent(entryOrName) {
59
62
  // any other static HOC. Matches the name-prefix exclusion the
60
63
  // check-surface-parity script applies.
61
64
  const isPushOnly = category === "realtime" && name.startsWith("Realtime")
65
+ // Value-family charts (BigNumber, future SingleValueFrame HOCs)
66
+ // render via react-dom/server in a normal React tree, but they do
67
+ // not route through the frame-driven `renderChart` path in
68
+ // serverChartConfigs.ts — so they are not MCP-renderable. Mirrors
69
+ // the `hoc-ssr-only` special feature documented in chartSpecs.ts.
70
+ const isValueCategory = category === "value"
62
71
  return {
63
72
  name,
64
73
  category,
65
74
  importPath: importPathForCategory(category),
66
- renderable: !isPushOnly,
75
+ renderable: !isPushOnly && !isValueCategory,
67
76
  description: typeof entryOrName === "string" ? undefined : entryOrName.description,
68
77
  }
69
78
  }