{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "subconscious",
  "homepage": "https://design.subconscious.ai",
  "items": [
    {
      "name": "subconscious-base",
      "type": "registry:base",
      "title": "Subconscious design base",
      "description": "Framework-independent contract, themes, fonts, editorial grammar, and shadcn token bridge. No JavaScript or analytics.",
      "files": [
        {
          "path": "contract.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/contract.css"
        },
        {
          "path": "derived.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/derived.css"
        },
        {
          "path": "fonts.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/fonts.css"
        },
        {
          "path": "shadcn.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/shadcn.css"
        },
        {
          "path": "preview/themes.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/themes.css"
        },
        {
          "path": "registry/styles/editorial-base.css",
          "type": "registry:file",
          "target": "~/src/styles/subconscious/index.css"
        }
      ]
    },
    {
      "name": "rail",
      "type": "registry:ui",
      "title": "Rail",
      "description": "The canonical responsive content spine with contained mobile padding.",
      "files": [
        {
          "path": "registry/components/rail.tsx",
          "type": "registry:ui",
          "target": "@ui/rail.tsx"
        },
        {
          "path": "registry/styles/rail.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/rail.css"
        }
      ]
    },
    {
      "name": "theme-provider",
      "type": "registry:component",
      "title": "ThemeProvider",
      "description": "Typed React state for the canonical data-theme, data-mode, and data-scale contract.",
      "files": [
        {
          "path": "registry/components/theme-provider.tsx",
          "type": "registry:ui",
          "target": "@ui/theme-provider.tsx"
        },
        {
          "path": "registry/lib/subconscious-themes.ts",
          "type": "registry:lib",
          "target": "@lib/subconscious-themes.ts"
        }
      ]
    },
    {
      "name": "use-reveal",
      "type": "registry:hook",
      "title": "useReveal",
      "description": "Reduced-motion-aware IntersectionObserver hook for the canonical data-revealed choreography.",
      "files": [
        {
          "path": "registry/hooks/use-reveal.ts",
          "type": "registry:hook",
          "target": "@hooks/use-reveal.ts"
        }
      ]
    },
    {
      "name": "seo-templates",
      "type": "registry:lib",
      "title": "SEO templates",
      "description": "Framework-independent robots.txt and sitemap.xml builders with the canonical AI crawler policy.",
      "files": [
        {
          "path": "registry/lib/seo-templates.mjs",
          "type": "registry:file",
          "target": "~/lib/seo-templates.mjs"
        }
      ]
    },
    {
      "name": "editorial-decision-page",
      "type": "registry:block",
      "title": "Editorial decision page",
      "description": "A complete consumer-owned editorial page composition using the public base, Rail, Wordmark, and Button primitives.",
      "registryDependencies": [
        "@subconscious/rail",
        "@subconscious/wordmark",
        "@subconscious/b-button"
      ],
      "files": [
        {
          "path": "registry/blocks/editorial-decision-page.tsx",
          "type": "registry:component",
          "target": "@components/blocks/editorial-decision-page.tsx"
        },
        {
          "path": "registry/blocks/editorial-decision-page.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/editorial-decision-page.css"
        }
      ],
      "docs": "Import src/styles/subconscious/editorial-decision-page.css after the Subconscious base. Supply consumer-owned copy and actions through props.",
      "categories": [
        "editorial",
        "marketing",
        "sample"
      ]
    },
    {
      "name": "evidence-adapters",
      "type": "registry:lib",
      "title": "Evidence adapters",
      "description": "Pure PyMC, DoWhy and W&B adapters that turn saved producer output into one EvidenceDataset without recomputing statistics.",
      "files": [
        {
          "path": "registry/evidence/adapters/pymc.ts",
          "type": "registry:lib",
          "target": "@components/evidence/adapters/pymc.ts"
        },
        {
          "path": "registry/evidence/adapters/dowhy.ts",
          "type": "registry:lib",
          "target": "@components/evidence/adapters/dowhy.ts"
        },
        {
          "path": "registry/evidence/adapters/wandb.ts",
          "type": "registry:lib",
          "target": "@components/evidence/adapters/wandb.ts"
        },
        {
          "path": "registry/evidence/community-interval-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/community-interval-adapter.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        }
      ],
      "docs": "pymcForest and pymcDraws read the saved get_community_bayesian_check result and the population_mean draws export. dowhyContrast reads the stored get_community_causal_contrast result; dowhyGraph reads its DOT graph or NetworkX node-link JSON. wandbRun, wandbTable and wandbHistory read a run export the host already fetched.",
      "categories": [
        "evidence",
        "causal-inference"
      ]
    },
    {
      "name": "causal-dag",
      "type": "registry:block",
      "title": "Causal graph",
      "description": "The causal graph grammar: an EvidenceDataset's graph laid out in layers, or left to right as a tree when every node has one parent and the layers are wider than the frame, with the effect of interest as the one red arrow. Every variable and edge is keyboard-inspectable and listed in the plotted values.",
      "dependencies": [
        "d3-dag@^1.2.2",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/causal-dag.tsx",
          "type": "registry:component",
          "target": "@components/evidence/causal-dag.tsx"
        },
        {
          "path": "registry/evidence/presets/causal-dag.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/causal-dag.ts"
        },
        {
          "path": "registry/evidence/causal-graph.ts",
          "type": "registry:lib",
          "target": "@components/evidence/causal-graph.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/causal-dag-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/causal-dag-grammar.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <CausalDag dataset={dowhyContrast(result)} /> with the evidence-adapters item. It throws when the dataset has no graph or the graph is not a valid DAG. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/causal-dag.ts. A graph whose nodes carry a stage (draft, testing, killed) draws as a family of variants, each a dot, forked left to right from its parent framing.",
      "categories": [
        "evidence",
        "charts",
        "causal-inference"
      ],
      "meta": {
        "presets": [
          "message-and-concept-variants"
        ]
      }
    },
    {
      "name": "flow-plot",
      "type": "registry:block",
      "title": "Flow plot",
      "description": "The flow grammar: each stock's flows in and out and its net change, as signed bars from zero, such as people moving between labor-force states or a county's components of change. Reads an EvidenceDataset's flows and the stocks they name in metrics, in the chart frame.",
      "files": [
        {
          "path": "registry/evidence/flow-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/flow-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/flow-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/flow-plot.ts"
        },
        {
          "path": "registry/evidence/ranked-bars.tsx",
          "type": "registry:component",
          "target": "@components/evidence/ranked-bars.tsx"
        },
        {
          "path": "registry/evidence/presets/ranked-bars.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/ranked-bars.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/ranked-bars-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/ranked-bars-grammar.ts"
        },
        {
          "path": "registry/evidence/flow-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/flow-grammar.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <FlowPlot dataset={dataset} /> with flows whose from and to name stocks in metrics. A preset with layout \"network\" draws a closed system as stocks and the arcs between them. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/flow-plot.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "current-population-survey",
          "population-estimates-program"
        ]
      }
    },
    {
      "name": "surface-plot",
      "type": "registry:block",
      "title": "Surface plot",
      "description": "The surface grammar: rows as a matrix of tones in up to four round bins, with each threshold traced along the cell edges where values cross it. Reads an EvidenceDataset's rows and thresholds in the chart frame, with arrow-key inspection.",
      "dependencies": [
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/surface-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/surface-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/surface-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/surface-plot.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/surface-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/surface-grammar.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <SurfacePlot dataset={wandbTable(table, roles, title)} /> with the evidence-adapters item: group is the row and label the column. It throws when the dataset has no rows or a row and column pair repeats. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/surface-plot.ts. The basket-size preset plots pairs (x against y) instead, such as wandbTable with x.estimate and y.estimate roles; the workforce preset reads each cell's referencePoint as what the panel saw.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "basket-size-and-repeat-purchase",
          "workforce-movement-panels",
          "campaign-exposure-history",
          "interview-and-focus-group-themes"
        ]
      }
    },
    {
      "name": "chart-samples",
      "type": "registry:lib",
      "title": "Chart samples",
      "description": "Illustrative sample datasets for the chart grammars' catalog presets: the numbers and labels each source composition shows, keyed by catalog id, and marked as samples from the public-domain reference study, never measured results.",
      "files": [
        {
          "path": "registry/evidence/samples/forest-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/forest-plot.ts"
        },
        {
          "path": "registry/evidence/samples/agreement-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/agreement-plot.ts"
        },
        {
          "path": "registry/evidence/samples/ranked-bars.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/ranked-bars.ts"
        },
        {
          "path": "registry/evidence/samples/ridgeline-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/ridgeline-plot.ts"
        },
        {
          "path": "registry/evidence/samples/distribution-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/distribution-plot.ts"
        },
        {
          "path": "registry/evidence/samples/funnel-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/funnel-plot.ts"
        },
        {
          "path": "registry/evidence/samples/series-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/series-plot.ts"
        },
        {
          "path": "registry/evidence/samples/threshold-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/threshold-plot.ts"
        },
        {
          "path": "registry/evidence/samples/small-multiples.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/small-multiples.ts"
        },
        {
          "path": "registry/evidence/samples/causal-dag.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/causal-dag.ts"
        },
        {
          "path": "registry/evidence/samples/flow-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/flow-plot.ts"
        },
        {
          "path": "registry/evidence/samples/surface-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/samples/surface-plot.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        }
      ],
      "docs": "Render <RankedBars dataset={SAMPLES['consumer-expenditure-survey']} preset=\"consumer-expenditure-survey\" /> with SAMPLES from samples/ranked-bars to see a preset before data arrives. Then pass an adapter's output as dataset, such as wandbTable(...) or pymcForest(...), and keep the preset.",
      "categories": [
        "evidence",
        "charts"
      ]
    },
    {
      "name": "effect-interval-plot",
      "type": "registry:block",
      "title": "Effect interval plot",
      "description": "The forest grammar: estimates with confidence or credible intervals, a decision threshold, keyboard-focusable marks, a narrative summary and an accessible data table. ForestPlot draws an EvidenceDataset's rows or refutation checks in the chart frame, with the AMCE and REFUTATION presets.",
      "dependencies": [
        "@visx/group@^4.0.0",
        "@visx/scale@^4.0.0",
        "@visx/shape@^4.0.0",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/effect-interval-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/effect-interval-plot.tsx"
        },
        {
          "path": "registry/evidence/forest-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/forest-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/forest-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/forest-plot.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/styles.tsx",
          "type": "registry:component",
          "target": "@components/evidence/styles.tsx"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/lib/subconscious-charts.ts",
          "type": "registry:lib",
          "target": "@lib/subconscious-charts.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/forest-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/forest-grammar.ts"
        },
        {
          "path": "registry/evidence/forest-funnel-shared.ts",
          "type": "registry:lib",
          "target": "@components/evidence/forest-funnel-shared.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "categories": [
        "evidence",
        "charts",
        "causal-inference"
      ],
      "docs": "Render <ForestPlot dataset={pymcForest(check)} /> with the evidence-adapters item, or preset={REFUTATION} with dowhyContrast(result). The red rule reads from the keyboard after the rows. A preset with layout: 'ranges' stacks each group's intervals as thin bars with no point, its typical range in bold. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/forest-plot.ts.",
      "meta": {
        "presets": [
          "prior-campaign-outcomes",
          "advertised-salary-ranges"
        ]
      }
    },
    {
      "name": "agreement-plot",
      "type": "registry:block",
      "title": "Agreement plot",
      "description": "The agreement grammar: one quantity from two sources, such as a human study against a synthetic run. The xy layout draws each pair with 95% bars on both axes against y = x; the paired layout draws one row per pair with its gap. Reads an EvidenceDataset's pairs in the chart frame, with arrow-key inspection.",
      "dependencies": [
        "@visx/scale@^4.0.0",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/agreement-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/agreement-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/agreement-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/agreement-plot.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/agreement-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/agreement-grammar.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <AgreementPlot dataset={wandbTable(table, { ...DITTO_FIDELITY_LEVELS, unit, axisLabel }, title)} preset={FIDELITY} /> with the evidence-adapters item. It throws when the dataset has no pairs. frame={false} drops the header and footer for a host view. A preset with layout: 'slope' draws x and y as two columns, one line per pair labelled at both ends, with a pair's detail beside its label. FIDELITY_SAMPLE in the chart-samples item is a Ditto study record's levels drawn with FIDELITY. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/agreement-plot.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "brand-and-creative-guidelines",
          "lost-customer-feedback"
        ]
      }
    },
    {
      "name": "ranked-bars",
      "type": "registry:block",
      "title": "Ranked bars",
      "description": "The ranked-bars grammar: rows as bars from zero, negatives to the left, or each group's rows stacked as shares with base and opt-out segments in a reference tone. Reads an EvidenceDataset's rows in the chart frame; stacked segments are keyboard reachable.",
      "files": [
        {
          "path": "registry/evidence/ranked-bars.tsx",
          "type": "registry:component",
          "target": "@components/evidence/ranked-bars.tsx"
        },
        {
          "path": "registry/evidence/presets/ranked-bars.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/ranked-bars.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/ranked-bars-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/ranked-bars-grammar.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <RankedBars dataset={dataset} variant=\"ranked\" /> or variant=\"stacked\" for shares by group. It throws when the dataset has no rows. The catalog forms (variant=\"mekko\", \"butterfly\", \"columns\", \"pareto\", \"rank-curve\" or \"strip\") read the same rows; a row's weight sets a mekko bar's width and its rank its place on a rank curve. frame={false} drops the header and footer for a host view. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/ranked-bars.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "consumer-expenditure-survey",
          "consumer-price-index",
          "job-openings-and-labor-turnover-survey",
          "county-business-patterns",
          "trade-area-movement-flows",
          "skills-and-tooling-mentions",
          "support-and-feedback-themes",
          "channel-and-placement-history",
          "support-conversation-topics"
        ]
      }
    },
    {
      "name": "ridgeline-plot",
      "type": "registry:block",
      "title": "Ridgeline plot",
      "description": "The ridgeline grammar: one row per distribution on a shared axis, each with its shape, central value and interval, under group headings. Reads an EvidenceDataset's distributions in the chart frame: a producer density as given, or a kernel density of posterior draws, with arrow-key inspection.",
      "dependencies": [
        "@visx/scale@^4.0.0",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/ridgeline-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/ridgeline-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/ridgeline-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/ridgeline-plot.ts"
        },
        {
          "path": "registry/evidence/ridgeline-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/ridgeline-grammar.ts"
        },
        {
          "path": "registry/evidence/distribution-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/distribution-family.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <RidgelinePlot dataset={pymcDraws(draws, check)} /> with the evidence-adapters item, or pass distributions with a producer density. It throws when the dataset has no distributions. Pass domain to keep the axis while filtering, and frame={false} to drop the header and footer for a host view. A preset can draw each row as a histogram, as its draws sorted into bars on a rank axis, as stacked dots, or as a rug of ticks with a rule and each row's share past it. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/ridgeline-plot.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "american-community-survey",
          "media-consumption-panels",
          "review-and-rating-streams",
          "job-postings-by-metro"
        ]
      }
    },
    {
      "name": "distribution-plot",
      "type": "registry:block",
      "title": "Distribution plot",
      "description": "The distribution grammar: one to three distributions overlaid on one axis, such as treatment and control outcomes or propensity scores. Each strip prints its summary, effective N and share at or below each threshold, and the producer's common support draws as a band. Reads an EvidenceDataset's distributions, thresholds and support in the chart frame.",
      "dependencies": [
        "@visx/scale@^4.0.0",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/distribution-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/distribution-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/distribution-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/distribution-plot.ts"
        },
        {
          "path": "registry/evidence/distribution-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/distribution-grammar.ts"
        },
        {
          "path": "registry/evidence/distribution-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/distribution-family.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <DistributionPlot dataset={dataset} /> with one distribution per arm, its draws or density, and its effectiveN. Add thresholds for a break-even line and support for the common support. It throws when the dataset has no distributions or more than three: use ridgeline-plot for those. A preset can instead draw a beeswarm of every draw (sized by weights, labelled by names), cumulative share curves, or a rug over a histogram of bins, for any number of draws. frame={false} drops the header and footer for a host view. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/distribution-plot.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "current-employment-statistics",
          "national-center-for-education-statistics",
          "social-engagement-signals",
          "purchase-history-cohorts",
          "product-catalog-attributes"
        ]
      }
    },
    {
      "name": "funnel-plot",
      "type": "registry:block",
      "title": "Funnel plot",
      "description": "The funnel grammar: estimates against their sizes on a log axis, inside or outside the producer's two limits, such as a precision funnel of hiring rates by company size. Red marks only the points outside the limits. Reads an EvidenceDataset's pairs (x is the size, y the estimate) and its two limit series in the chart frame.",
      "dependencies": [
        "@visx/scale@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/funnel-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/funnel-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/funnel-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/funnel-plot.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/funnel-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/funnel-grammar.ts"
        },
        {
          "path": "registry/evidence/forest-funnel-shared.ts",
          "type": "registry:lib",
          "target": "@components/evidence/forest-funnel-shared.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <FunnelPlot dataset={dataset} preset={{ kicker: 'Funnel', xLabel: 'Applicants' }} />. Each pair's x.value is its size and y.value its estimate; series holds exactly two limits from the producer. It throws when either slot is empty. A preset can shade the band between the limits, red the points its signal names instead of the points outside, label callouts beside their dots (a pair's detail and its own interval), and run sizes down the plot as rows (orientation: 'vertical'). frame={false} drops the header and footer for a host view. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/funnel-plot.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "decennial-census",
          "company-hiring-velocity"
        ]
      }
    },
    {
      "name": "series-plot",
      "type": "registry:block",
      "title": "Series plot",
      "description": "The series grammar: one line per series on an ordered axis, such as a W&B run's history by step. Points that carry intervals draw as a fan, and thresholds draw as red rules. A catalog preset lays series in lanes, round a clock or as a connected path, and draws signed areas, horizons, revisions, bars, stems or dots, with x spans and moments from the dataset. Every point is a keyboard-inspectable mark. Reads an EvidenceDataset's series in the chart frame.",
      "dependencies": [
        "@visx/scale@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/series-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/series-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/series-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/series-plot.ts"
        },
        {
          "path": "registry/evidence/series-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-grammar.ts"
        },
        {
          "path": "registry/evidence/series-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-family.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <SeriesPlot dataset={wandbHistory(history, { title, x: '_step', keys })} /> with the evidence-adapters item. For a scenario fan, give each point intervals (P10 to P90 is a 0.8 quantile interval) and add the business line to thresholds. It throws when the dataset has no series. frame={false} drops the header and footer for a host view. For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/series-plot.ts. Lanes group series by their group (a merchant's first print and settled value), a context series sets reference: true, and dataset.xMarks draws spans (a promotion window) and moments (a pack resize).",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "producer-price-index",
          "integrated-postsecondary-education-data-system",
          "merchant-level-spend-trends",
          "search-demand-by-category",
          "site-and-app-browse-trends",
          "offer-and-promotion-structures",
          "customer-satisfaction-surveys",
          "product-review-themes"
        ]
      }
    },
    {
      "name": "threshold-plot",
      "type": "registry:block",
      "title": "Threshold plot",
      "description": "The threshold grammar: metrics against decision thresholds, such as a fit's R squared against the producer's bands or PyMC r-hat and ESS against the convergence gate, and a regression discontinuity at a cutoff. Red marks the thresholds; the marks show position and the producer gives the verdict.",
      "dependencies": [
        "@visx/scale@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/threshold-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/threshold-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/threshold-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/threshold-plot.ts"
        },
        {
          "path": "registry/evidence/threshold-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/threshold-grammar.ts"
        },
        {
          "path": "registry/evidence/series-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-family.ts"
        },
        {
          "path": "registry/evidence/series-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-grammar.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/causal/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/causal/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <ThresholdPlot dataset={{ ...wandbRun(run, { metrics }), thresholds }} />, or <ThresholdPlot dataset={convergenceMetrics(pymcForest(check)).rHat} preset={CONVERGENCE} /> with the evidence-adapters item. It throws when the dataset has no metrics or thresholds. <DiscontinuityPlot data={data} source={source} cutoff={cutoff} /> draws a regression discontinuity inside a host frame, as the causal explorer does. A preset's layout reads the first threshold as a cutoff on x and splits series at it (discontinuity: each line's jump; stacked: shares by x), or stacks pairs as a dot histogram against tier cutoffs (dots). For a catalog preset, pass preset=\"<id>\" with an id from meta.presets, the id of the source composition it keeps; the chart-samples item holds each preset's sample data in samples/threshold-plot.ts.",
      "categories": [
        "evidence",
        "charts",
        "causal-inference"
      ],
      "meta": {
        "presets": [
          "national-health-interview-survey",
          "behavioral-risk-factor-surveillance-system",
          "customer-segments-and-loyalty-tiers"
        ]
      }
    },
    {
      "name": "small-multiples",
      "type": "registry:block",
      "title": "Small multiples",
      "description": "One chart grammar per group on one shared scale, in one frame with one headline, one readout and one list of plotted values. Facets an EvidenceDataset's rows, pairs or series by group; a series facet draws as a series plot with the preset's bars, stems, dots or clock, and facets on one x key share its span. Inspecting a mark in one facet dims the others.",
      "dependencies": [
        "@visx/scale@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/small-multiples.tsx",
          "type": "registry:component",
          "target": "@components/evidence/small-multiples.tsx"
        },
        {
          "path": "registry/evidence/presets/small-multiples.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/small-multiples.ts"
        },
        {
          "path": "registry/evidence/series-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/series-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/series-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/series-plot.ts"
        },
        {
          "path": "registry/evidence/small-multiples-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/small-multiples-grammar.ts"
        },
        {
          "path": "registry/evidence/series-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-grammar.ts"
        },
        {
          "path": "registry/evidence/series-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-family.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        }
      ],
      "docs": "Render <SmallMultiples dataset={dataset} slot=\"pairs\" child={Facet} />, where Facet is a module-level component such as (props: FacetProps) => <AgreementPlot {...props} preset={FIDELITY} /> from the agreement-plot item, or <SmallMultiples dataset={dataset} preset=\"<id>\" /> for a catalog preset, which names its slot and draws each series facet with SeriesPlot. It throws when the slot is empty. Ids are in meta.presets; the chart-samples item holds each preset's sample data in samples/small-multiples.ts.",
      "categories": [
        "evidence",
        "charts"
      ],
      "meta": {
        "presets": [
          "vital-statistics-records",
          "point-of-interest-visit-panels",
          "anonymized-transaction-panels"
        ]
      }
    },
    {
      "name": "rehoboam-evidence-view",
      "type": "registry:block",
      "title": "Rehoboam evidence views",
      "description": "Twelve executive views of saved Rehoboam analytics results, chosen by view ID: the effect of each option, what matters most, scenario share of choice, how respondents divide, a two-group comparison, who answered, held-out predictive fit, and five paired findings (who agrees, how tested levels differ, what the average conceals) that lead with the measured finding and the next comparison. Each view validates its result before drawing, labels uncertainty as the producer measured it, and keeps provenance in a collapsed Source note.",
      "dependencies": [
        "@visx/group@^4.0.0",
        "@visx/scale@^4.0.0",
        "@visx/shape@^4.0.0",
        "@visx/text@^4.0.0"
      ],
      "files": [
        {
          "path": "registry/evidence/rehoboam-evidence-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-evidence-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-view-registry.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-view-registry.ts"
        },
        {
          "path": "registry/evidence/rehoboam-view-kit.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-view-kit.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-shared.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-shared.ts"
        },
        {
          "path": "registry/evidence/rehoboam-effect-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-effect-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-effect-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-effect-adapter.ts"
        },
        {
          "path": "registry/evidence/community-interval-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/community-interval-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-importance-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-importance-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-importance-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-importance-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-market-share-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-market-share-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-market-share-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-market-share-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-respondent-distribution-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-respondent-distribution-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-respondent-distribution-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-respondent-distribution-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-segment-comparison-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-segment-comparison-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-segment-comparison-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-segment-comparison-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-study-overview-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-study-overview-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-study-overview-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-study-overview-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-predictive-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-predictive-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-predictive-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-predictive-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-paired-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-paired-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-paired-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-paired-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-consequence-view.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-consequence-view.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-consequence-adapter.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-consequence-adapter.ts"
        },
        {
          "path": "registry/evidence/rehoboam-paired-findings-types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/rehoboam-paired-findings-types.ts"
        },
        {
          "path": "registry/evidence/rehoboam-finding-frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-finding-frame.tsx"
        },
        {
          "path": "registry/evidence/rehoboam-marks.tsx",
          "type": "registry:component",
          "target": "@components/evidence/rehoboam-marks.tsx"
        },
        {
          "path": "registry/evidence/agreement-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/agreement-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/agreement-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/agreement-plot.ts"
        },
        {
          "path": "registry/evidence/ranked-bars.tsx",
          "type": "registry:component",
          "target": "@components/evidence/ranked-bars.tsx"
        },
        {
          "path": "registry/evidence/presets/ranked-bars.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/ranked-bars.ts"
        },
        {
          "path": "registry/evidence/ridgeline-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/ridgeline-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/ridgeline-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/ridgeline-plot.ts"
        },
        {
          "path": "registry/evidence/series-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-family.ts"
        },
        {
          "path": "registry/evidence/series-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-grammar.ts"
        },
        {
          "path": "registry/evidence/threshold-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/threshold-grammar.ts"
        },
        {
          "path": "registry/evidence/small-multiples-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/small-multiples-grammar.ts"
        },
        {
          "path": "registry/evidence/distribution-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/distribution-family.ts"
        },
        {
          "path": "registry/evidence/distribution-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/distribution-grammar.ts"
        },
        {
          "path": "registry/evidence/ridgeline-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/ridgeline-grammar.ts"
        },
        {
          "path": "registry/evidence/grammars.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammars.ts"
        },
        {
          "path": "registry/evidence/surface-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/surface-grammar.ts"
        },
        {
          "path": "registry/evidence/causal-dag-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/causal-dag-grammar.ts"
        },
        {
          "path": "registry/evidence/flow-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/flow-grammar.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/forest-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/forest-grammar.ts"
        },
        {
          "path": "registry/evidence/ranked-bars-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/ranked-bars-grammar.ts"
        },
        {
          "path": "registry/evidence/agreement-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/agreement-grammar.ts"
        },
        {
          "path": "registry/evidence/funnel-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/funnel-grammar.ts"
        },
        {
          "path": "registry/evidence/forest-funnel-shared.ts",
          "type": "registry:lib",
          "target": "@components/evidence/forest-funnel-shared.ts"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        },
        {
          "path": "registry/evidence/effect-interval-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/effect-interval-plot.tsx"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/styles.tsx",
          "type": "registry:component",
          "target": "@components/evidence/styles.tsx"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        },
        {
          "path": "registry/lib/subconscious-charts.ts",
          "type": "registry:lib",
          "target": "@lib/subconscious-charts.ts"
        }
      ],
      "categories": [
        "evidence",
        "charts",
        "causal-inference",
        "rehoboam"
      ],
      "docs": "Render with <RehoboamEvidenceView view={view} /> from @/components/evidence/rehoboam-evidence-view, where `view` is the `view` object Rehoboam attaches to an analytics chart: { id, result }. Call validateRehoboamView(view) (it throws the reason) or isRenderableRehoboamView(view) first and, when it fails, render the analytics chart's Vega-Lite `spec` (the object that carries `view`) as the fallback; an unvalidated bad view renders an explicit error, never a guessed chart. The item fetches nothing and imports no host store, route or HTTP client. View IDs, the customer question each answers, and the Rehoboam operation that must produce `result`: effect-interval/v1 (get_amce, get_community_bayesian_check or get_community_causal_contrast): how much does each option move choice, and how sure are we? Needs rows with estimate, lower, upper, units and interval_method. importance-ranking/v1 (get_feature_importance): which attribute matters most to the most respondents? Needs percent shares that sum to 100. market-share/v1 (get_market_share): what share of choice does each product in this scenario win? Needs choice probabilities that sum to 1; pass `scenario` hooks to let the reader edit products, otherwise it is read-only. respondent-distribution/v1 (get_posterior_distribution): do respondents agree, or do they divide? Needs respondent-level utility summaries per level. segment-comparison/v1 (compare_segments): how do two groups differ? Needs exactly two groups with matching rows; pass `comparison` hooks to let the reader pick groups. study-overview/v1 (get_study_overview): who answered this Study? Needs respondent counts and shares against one denominator. saved-predictive/v1 (get_community_bayesian_check): did the saved model predict held-out choices? Needs observed and replicated choice rates per position with a 95% replicated range. paired-agreement/v1, tested-level-differences/v1, paired-spread/v1, importance-composition/v1 and saved-offer-change/v1 (get_paired_findings, result version paired-findings/v4): do respondents agree on each tested comparison, how do tested levels differ, and what does the average conceal? Each shows the Study's question, the producer's finding, how far it goes toward the recorded objective (naming any missing business input such as market_size or unit_cost instead of an optimum), and the producer's next comparison, then respondent counts by side, 10th-90th percentile bands, point masses, the selected comparison's exact values and coverage. Importance composition keeps the matched exported cohort, native importance, exact contribution points and reconciliation status distinct from get_feature_importance. Saved-offer change keeps baseline focus, candidate, competitors and actual opt-out, with descriptive audience groups. Continuous price and missing offers show producer prerequisite codes and guidance; no replacement or financial outcome is inferred. Pass onPrepareComparison to receive the typed ProposedComparison (kind prepare_comparison_draft or prepare_simulator_draft; your app prepares the draft and owns navigation); without it the views show the evidence and no button. Bands are respondent spread, never a confidence or credible interval. Input types are generated from the producer schema: rehoboam-paired-findings-types.ts. Every result must carry status ok, a run_id and non-empty producer warnings; the five paired findings list the warnings inside the collapsed Source note, where every view keeps its provenance. Not supported: any other view ID or operation, a paired result of another version, unit or interval kind, a next comparison whose action differs from the selected comparison, a result with status other than ok, missing warnings, unknown units or interval methods, reversed or non-finite bounds, and totals that do not reconcile. Producer ranges are labelled as ranges, never as confidence or credible intervals. Example payloads for every ID live in tests/fixtures/rehoboam-*.json in the design-system repository; they are not installed with this item (the largest are thousands of lines), so fetch them from the repository to try a view or to see a valid and an invalid result; the paired views are the `view` of each chart in rehoboam-paired-findings-*-2acdf539.json. Retained community intervals preserve logit credible coefficients separately from clustered percentage-point contrasts; the three native DoWhy refuters are point-only profile-row diagnostics. Failed-fit posterior ranges are withheld. These views add technical evidence to existing Insights/chat, not a separate Decision Lab page."
    },
    {
      "name": "intervention-simulator",
      "type": "registry:block",
      "registryDependencies": [
        "https://design.subconscious.ai/r/motion.json"
      ],
      "title": "Intervention simulator",
      "description": "Pick an intervention (one level of each attribute) and a price, or optimize for revenue, profit or market share, on a share-against-profit chart with the efficient frontier. The producer supplies each intervention's predicted share at each grid price; the block adds the consumer's costs, finds the frontier and each goal's best point, previews a goal before it is pressed, and glides the plan along its curve.",
      "files": [
        {
          "path": "registry/evidence/intervention-simulator/InterventionSimulator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/intervention-simulator/InterventionSimulator.tsx"
        },
        {
          "path": "registry/evidence/intervention-simulator/FrontierPlot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/intervention-simulator/FrontierPlot.tsx"
        },
        {
          "path": "registry/evidence/intervention-simulator/model.ts",
          "type": "registry:lib",
          "target": "@components/evidence/intervention-simulator/model.ts"
        },
        {
          "path": "registry/evidence/intervention-simulator/motion.ts",
          "type": "registry:lib",
          "target": "@components/evidence/intervention-simulator/motion.ts"
        },
        {
          "path": "registry/evidence/intervention-simulator/styles.ts",
          "type": "registry:lib",
          "target": "@components/evidence/intervention-simulator/styles.ts"
        }
      ],
      "categories": [
        "evidence",
        "charts",
        "simulation"
      ]
    },
    {
      "name": "evidence-observation",
      "type": "registry:block",
      "title": "Evidence observation",
      "description": "Renders market-ontology EvidenceObservation 1.0.0 without collapsing measured zero, absence, coverage, freshness, grain, license, or provenance.",
      "files": [
        {
          "path": "registry/components/evidence-observation.tsx",
          "type": "registry:component",
          "target": "@components/evidence/evidence-observation.tsx"
        },
        {
          "path": "registry/styles/evidence-observation.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/evidence-observation.css"
        }
      ],
      "categories": [
        "evidence",
        "provenance",
        "receipts"
      ]
    },
    {
      "name": "entity-grid",
      "type": "registry:block",
      "title": "Entity grid",
      "description": "A contract-themed Glide Data Grid wrapper for high-volume entity tables. Consumers own queries, sorting, filtering, persistence, and authorization.",
      "dependencies": [
        "@glideapps/glide-data-grid@6.0.4-alpha24",
        "lodash@^4.17.21",
        "marked@^16.4.1",
        "react-responsive-carousel@^3.2.23"
      ],
      "files": [
        {
          "path": "registry/components/entity-grid.tsx",
          "type": "registry:component",
          "target": "@components/entity-grid.tsx"
        },
        {
          "path": "registry/styles/entity-grid.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/entity-grid.css"
        }
      ],
      "docs": "Glide 6.0.4 alpha is pinned because it is the first published line declaring React 19 peer support. Use this block for high-volume tables; keep small semantic tables as HTML.",
      "categories": [
        "data",
        "tables",
        "product"
      ]
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "cn utility",
      "description": "clsx + tailwind-merge class composer.",
      "dependencies": [
        "clsx",
        "tailwind-merge"
      ],
      "files": [
        {
          "path": "registry/lib/utils.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "motion",
      "type": "registry:lib",
      "title": "Motion tokens",
      "description": "The derived.css eases and durations for JS.",
      "files": [
        {
          "path": "registry/lib/motion.ts",
          "type": "registry:lib"
        }
      ]
    },
    {
      "name": "b-button",
      "type": "registry:component",
      "title": "Button — .b[data-dir] engine",
      "description": "The canonical Subconscious button: one engine, eight directions, four looks (primary, secondary, ghost, danger). Pure CSS sweep and arrow swap on hover; the React wrapper has no runtime motion dependency.",
      "files": [
        {
          "path": "registry/components/b-button.tsx",
          "type": "registry:ui",
          "target": "@ui/b-button.tsx"
        },
        {
          "path": "registry/styles/b-button.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/b-button.css"
        }
      ]
    },
    {
      "name": "dialog",
      "type": "registry:component",
      "title": "Dialog — accessible stop-the-world behavior",
      "description": "Individually installable Radix Dialog composition. Radix owns focus trapping, Escape, return focus, portal behavior, and ARIA wiring; the component owns only the Subconscious token skin.",
      "dependencies": [
        "@radix-ui/react-dialog"
      ],
      "files": [
        {
          "path": "registry/components/dialog.tsx",
          "type": "registry:component"
        },
        {
          "path": "registry/styles/dialog.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/dialog.css"
        }
      ]
    },
    {
      "name": "dag-mark",
      "type": "registry:component",
      "title": "DagMark — the brand mark (do-calculus DAG)",
      "description": "60×42 SVG of the do-calculus DAG: latent confounder C, intervention T, outcome O, with the signal-red T→O arrow carrying the causal claim. The brand's ONLY canonical causal ornament. CSS animation draws it in on [data-revealed] ancestors.",
      "files": [
        {
          "path": "registry/components/dag-mark.tsx",
          "type": "registry:ui",
          "target": "@ui/dag-mark.tsx"
        },
        {
          "path": "registry/styles/dag-mark.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/dag-mark.css"
        }
      ]
    },
    {
      "name": "wordmark",
      "type": "registry:component",
      "title": "Wordmark — the brand lockup",
      "description": "Lowercase 'subconscious.ai' + the DagMark inline. The canonical page-level masthead lockup. Includes DagMark by default; pass showDagMark={false} for standalone wordmark uses.",
      "registryDependencies": [
        "https://design.subconscious.ai/r/dag-mark.json"
      ],
      "files": [
        {
          "path": "registry/components/wordmark.tsx",
          "type": "registry:ui",
          "target": "@ui/wordmark.tsx"
        },
        {
          "path": "registry/styles/wordmark.css",
          "type": "registry:style",
          "target": "~/src/styles/subconscious/wordmark.css"
        }
      ]
    },
    {
      "name": "mast",
      "type": "registry:component",
      "title": "Mast — editorial masthead",
      "description": "Canonical 3-column newspaper-style page header (wordmark / title / date). 4-column nav variant adds navlinks + CTA. Slot order is positional — no class needed on children. The 'this is a Subconscious surface' signal.",
      "files": [
        {
          "path": "registry/components/mast.tsx",
          "type": "registry:component"
        },
        {
          "path": "registry/styles/mast.css",
          "type": "registry:style"
        }
      ]
    },
    {
      "name": "use-debounce",
      "type": "registry:hook",
      "title": "useDebounce",
      "description": "Debounces a changing value (KokonutUI, MIT).",
      "files": [
        {
          "path": "registry/hooks/use-debounce.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "use-auto-resize-textarea",
      "type": "registry:hook",
      "title": "useAutoResizeTextarea",
      "description": "Grows a textarea with its content (KokonutUI, MIT).",
      "files": [
        {
          "path": "registry/hooks/use-auto-resize-textarea.ts",
          "type": "registry:hook"
        }
      ]
    },
    {
      "name": "toolbar",
      "type": "registry:component",
      "title": "Toolbar",
      "description": "Multi-action toolbar (KokonutUI, MIT), bridged to the Subconscious contract tokens.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/toolbar.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "loader",
      "type": "registry:component",
      "title": "Loader",
      "description": "Concentric conic-gradient loader (KokonutUI, MIT), drawn in --foreground so it theme-tracks.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/loader.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "particle-button",
      "type": "registry:component",
      "title": "Particle Button",
      "description": "Button that bursts a canvas-confetti cheer on click (KokonutUI, MIT).",
      "dependencies": [
        "canvas-confetti",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "button"
      ],
      "files": [
        {
          "path": "registry/components/particle-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "social-button",
      "type": "registry:component",
      "title": "Social Button",
      "description": "Share button that expands a row of channel actions (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "button"
      ],
      "files": [
        {
          "path": "registry/components/social-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "slide-text-button",
      "type": "registry:component",
      "title": "Slide Text Button",
      "description": "Link button with a vertical text-slide hover (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/slide-text-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "avatar-picker",
      "type": "registry:component",
      "title": "Avatar Picker",
      "description": "Profile-setup card with an avatar stage and username field (KokonutUI, MIT). Chrome is contract-bridged; the avatar artwork keeps its illustration color.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "button",
        "card",
        "input"
      ],
      "files": [
        {
          "path": "registry/components/avatar-picker.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "team-selector",
      "type": "registry:component",
      "title": "Team Selector",
      "description": "Stepper that reveals an overlapping avatar stack as the count grows (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/components/team-selector.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "action-search-bar",
      "type": "registry:component",
      "title": "Action Search Bar",
      "description": "Command-style search with a debounced filtered action list (KokonutUI, MIT). Category icons use the contract chart palette.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/use-debounce.json",
        "input"
      ],
      "files": [
        {
          "path": "registry/components/action-search-bar.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "ai-input-search",
      "type": "registry:component",
      "title": "AI Input Search",
      "description": "Auto-resizing prompt input with a toggleable web-search affordance (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "https://design.subconscious.ai/r/use-auto-resize-textarea.json",
        "textarea"
      ],
      "files": [
        {
          "path": "registry/components/ai-input-search.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "type-writer",
      "type": "registry:component",
      "title": "Typewriter",
      "description": "Looping typewriter title with natural typing variance and a blinking caret (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/type-writer.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "dynamic-text",
      "type": "registry:component",
      "title": "Dynamic Text",
      "description": "Rapidly cycles a phrase through a sequence with a slide transition (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/dynamic-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "sliced-text",
      "type": "registry:component",
      "title": "Sliced Text",
      "description": "Heading sliced horizontally that re-aligns on hover (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/sliced-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "scroll-text",
      "type": "registry:component",
      "title": "Scroll Text",
      "description": "Scroll-snapping word list that highlights the centered item via IntersectionObserver (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/scroll-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "shimmer-text",
      "type": "registry:component",
      "title": "Shimmer Text",
      "description": "Heading with a looping shimmer sweep (KokonutUI, MIT). The sweep runs --foreground -> --muted-foreground -> --foreground so it theme-tracks.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/shimmer-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "attract-button",
      "type": "registry:component",
      "title": "Attract Button",
      "description": "Button whose scattered particles spring to center on hover (KokonutUI, MIT), bridged to contract tokens.",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "button"
      ],
      "files": [
        {
          "path": "registry/components/attract-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "hold-button",
      "type": "registry:component",
      "title": "Hold Button — press-and-hold to commit",
      "description": "KokonutUI hold-to-confirm, bridged to the contract: deliberate intent sustained into effect. Two registers (default --color, danger --red); cva and the five-color variant map dropped; onHoldComplete added (upstream filled to 100% and did nothing).",
      "dependencies": [
        "motion",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "button"
      ],
      "files": [
        {
          "path": "registry/components/hold-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "image-comparison",
      "type": "registry:component",
      "title": "Image Comparison — Stated vs Revealed as a gesture",
      "description": "Motion Primitives' before/after clip-path slider (MIT, first MP adoption), bridged to the contract. Compound API: ImageComparison + Image/Content panes + Slider. The brand's canonical use compares a stated claim against revealed behavior in one drag.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/image-comparison.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "text-scramble",
      "type": "registry:component",
      "title": "Text Scramble — noise resolving into signal",
      "description": "Motion Primitives (MIT). Per-character scramble that resolves into the true string — the revealed truth emerging. Use at most once per surface.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/text-scramble.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "text-morph",
      "type": "registry:component",
      "title": "Text Morph — one claim becoming another",
      "description": "Motion Primitives (MIT). Per-character layout morph between strings; spring pinned overdamped (Rule 01).",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/text-morph.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "infinite-slider",
      "type": "registry:component",
      "title": "Infinite Slider — the logo rail",
      "description": "Motion Primitives (MIT). Constant-velocity marquee with hover speed. Allowed for the 'in production at' logo rail ONLY (curated map).",
      "dependencies": [
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/infinite-slider.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "sliding-number",
      "type": "registry:component",
      "title": "Sliding Number — directional numeric change",
      "description": "Motion Primitives (MIT), extended with mechanical place-value wheels. Each ones, tens, hundreds, and fractional wheel travels only the steps its place performs; increases roll up and decreases roll down. Fixed precision, accessible static value, overdamped spring, and instant reduced-motion fallback.",
      "dependencies": [
        "motion",
        "react-use-measure"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/sliding-number.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "animated-number-text",
      "type": "registry:component",
      "title": "Animated Number Text — live values in formatted copy",
      "description": "Tokenizes input-sensitive formatted copy and delegates every number to SlidingNumber while preserving signs, precision, units, punctuation, zero-padded ranks, and one accessible static sentence.",
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json",
        "https://design.subconscious.ai/r/sliding-number.json"
      ],
      "files": [
        {
          "path": "registry/components/animated-number-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "scroll-progress",
      "type": "registry:component",
      "title": "Scroll Progress — reading state",
      "description": "Motion Primitives (MIT). 1px reading-progress rule for long-form pages. Style with --color; never red.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/scroll-progress.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "animated-background",
      "type": "registry:component",
      "title": "Animated Background — the hover highlight",
      "description": "Motion Primitives (MIT). Shared layout highlight that slides between nav/toolbar items — motion showing where you are.",
      "dependencies": [
        "motion"
      ],
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/animated-background.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "command-button",
      "type": "registry:component",
      "title": "Command Button",
      "description": "Button with its keyboard shortcut drawn as platform keycaps; the shortcut clicks it (KokonutUI, MIT), bridged to contract tokens.",
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/command-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "range",
      "type": "registry:component",
      "title": "Range",
      "description": "Touch-correct native <input type=\"range\"> themed by the canonical .ds-range rule (2px ink track, sharp 16px filled thumb, touch-action: manipulation).",
      "registryDependencies": [
        "https://design.subconscious.ai/r/utils.json"
      ],
      "files": [
        {
          "path": "registry/components/range.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "public-data-navigators",
      "type": "registry:block",
      "title": "15 public-data navigators",
      "description": "Interactive navigators over 15 U.S. public statistical sources (NHIS, BRFSS, ACS, Decennial, PEP, CPS, CPI, CES, JOLTS, CEX, PPI, CBP, IPEDS, NCES, vital statistics). DuckDB-WASM queries published Parquet in the browser; every frame checks its drawn numbers against stored golden answers and states the source's measurement trap.",
      "dependencies": [
        "motion",
        "@duckdb/duckdb-wasm@1.32.0"
      ],
      "files": [
        {
          "path": "registry/evidence/public-data/AcsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/AcsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/BrfssNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/BrfssNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CbpNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CbpNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CesNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CesNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CexNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CexNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CpiNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CpiNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CpsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CpsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/DecennialNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/DecennialNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/IpedsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/IpedsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/JoltsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/JoltsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/NcesNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/NcesNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/NhisNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/NhisNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/PepNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PepNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/PpiNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PpiNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/VitalNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/VitalNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/duckdb.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/duckdb.ts"
        },
        {
          "path": "registry/evidence/public-data/transport.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/transport.tsx"
        },
        {
          "path": "registry/evidence/public-data/kit.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/kit.tsx"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        },
        {
          "path": "registry/evidence/public-data/ChangeOverTime.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/ChangeOverTime.tsx"
        },
        {
          "path": "registry/evidence/public-data/PublicDataNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PublicDataNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/navigators.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/navigators.ts"
        }
      ],
      "docs": "Wrap in PublicDataTransportProvider to use an application service, or PublicDataContext.Provider to self-host the browser data (default: the published v3 set). Colors follow the page's design-system theme and mode. DuckDB-WASM loads from jsDelivr unless setDuckDBBundles is called first. See registry/evidence/public-data/README.md."
    },
    {
      "name": "causal-evidence",
      "type": "registry:block",
      "title": "Causal evidence: discontinuity explorer",
      "description": "Draws a regression-discontinuity result computed upstream with statsmodels, PyMC and DoWhy: the mean at each value of the running variable, a line fitted on each side, the jump with its 95% interval, the same test at every other cutoff (drag to try one), and the jump as each engine estimates it, with PyMC as a posterior density. It fits nothing in the browser and follows the page's design-system theme and mode.",
      "dependencies": [
        "motion",
        "@visx/scale@^4.0.0"
      ],
      "registryDependencies": [
        "@subconscious/public-data-navigators"
      ],
      "files": [
        {
          "path": "registry/evidence/causal/DiscontinuityExplorer.tsx",
          "type": "registry:component",
          "target": "@components/evidence/causal/DiscontinuityExplorer.tsx"
        },
        {
          "path": "registry/evidence/causal/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/causal/types.ts"
        },
        {
          "path": "registry/evidence/causal/examples/medicare-65.json",
          "type": "registry:file",
          "target": "@components/evidence/causal/examples/medicare-65.json"
        },
        {
          "path": "registry/evidence/threshold-plot.tsx",
          "type": "registry:component",
          "target": "@components/evidence/threshold-plot.tsx"
        },
        {
          "path": "registry/evidence/presets/threshold-plot.ts",
          "type": "registry:lib",
          "target": "@components/evidence/presets/threshold-plot.ts"
        },
        {
          "path": "registry/evidence/series-family.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-family.ts"
        },
        {
          "path": "registry/evidence/series-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/series-grammar.ts"
        },
        {
          "path": "registry/evidence/threshold-grammar.ts",
          "type": "registry:lib",
          "target": "@components/evidence/threshold-grammar.ts"
        },
        {
          "path": "registry/evidence/grammar-core.ts",
          "type": "registry:lib",
          "target": "@components/evidence/grammar-core.ts"
        },
        {
          "path": "registry/evidence/format.ts",
          "type": "registry:lib",
          "target": "@components/evidence/format.ts"
        },
        {
          "path": "registry/evidence/types.ts",
          "type": "registry:lib",
          "target": "@components/evidence/types.ts"
        }
      ],
      "docs": "Pass a subconscious.causal.discontinuity/v1 object as `data` (see types.ts). examples/medicare-65.json is a worked example: the uninsured rate by age around Medicare at 65 from the 2022 ACS (IPUMS USA) and NHIS 2023, reproduced from rehoboam's pilots/community_analytics proof_rd.py. See registry/evidence/causal/README.md."
    },
    {
      "name": "source-explorer",
      "type": "registry:block",
      "title": "45 source experiences",
      "description": "One browser for the 45 sources: the fifteen public-data navigators draw real extracts, and every other source draws its chart grammar's catalog preset with its illustrative sample. Replay, keyboard inspection and source documentation.",
      "dependencies": [
        "motion",
        "@duckdb/duckdb-wasm@1.32.0"
      ],
      "registryDependencies": [
        "@subconscious/agreement-plot",
        "@subconscious/causal-dag",
        "@subconscious/distribution-plot",
        "@subconscious/effect-interval-plot",
        "@subconscious/flow-plot",
        "@subconscious/funnel-plot",
        "@subconscious/ranked-bars",
        "@subconscious/ridgeline-plot",
        "@subconscious/series-plot",
        "@subconscious/small-multiples",
        "@subconscious/surface-plot",
        "@subconscious/threshold-plot",
        "@subconscious/chart-samples"
      ],
      "files": [
        {
          "path": "registry/evidence/public-data/AcsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/AcsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/BrfssNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/BrfssNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CbpNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CbpNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CesNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CesNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CexNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CexNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CpiNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CpiNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/CpsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/CpsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/DecennialNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/DecennialNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/IpedsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/IpedsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/JoltsNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/JoltsNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/NcesNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/NcesNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/NhisNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/NhisNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/PepNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PepNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/PpiNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PpiNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/VitalNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/VitalNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/duckdb.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/duckdb.ts"
        },
        {
          "path": "registry/evidence/public-data/transport.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/transport.tsx"
        },
        {
          "path": "registry/evidence/public-data/kit.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/kit.tsx"
        },
        {
          "path": "registry/evidence/public-data/frame.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/frame.tsx"
        },
        {
          "path": "registry/evidence/public-data/palette.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/palette.ts"
        },
        {
          "path": "registry/evidence/public-data/ChangeOverTime.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/ChangeOverTime.tsx"
        },
        {
          "path": "registry/evidence/public-data/PublicDataNavigator.tsx",
          "type": "registry:component",
          "target": "@components/evidence/public-data/PublicDataNavigator.tsx"
        },
        {
          "path": "registry/evidence/public-data/navigators.ts",
          "type": "registry:lib",
          "target": "@components/evidence/public-data/navigators.ts"
        },
        {
          "path": "registry/evidence/source-compositions/SourceExplorer.tsx",
          "type": "registry:component",
          "target": "@components/evidence/source-compositions/SourceExplorer.tsx"
        },
        {
          "path": "registry/evidence/source-compositions/PresetSource.tsx",
          "type": "registry:component",
          "target": "@components/evidence/source-compositions/PresetSource.tsx"
        },
        {
          "path": "registry/evidence/source-compositions/catalog.json",
          "type": "registry:lib",
          "target": "@components/evidence/source-compositions/catalog.json"
        },
        {
          "path": "registry/evidence/source-compositions/explorer-styles.ts",
          "type": "registry:lib",
          "target": "@components/evidence/source-compositions/explorer-styles.ts"
        },
        {
          "path": "registry/evidence/source-compositions/sources.json",
          "type": "registry:lib",
          "target": "@components/evidence/source-compositions/sources.json"
        },
        {
          "path": "registry/evidence/source-compositions/ExpandedExample.tsx",
          "type": "registry:component",
          "target": "@components/evidence/source-compositions/ExpandedExample.tsx"
        }
      ],
      "docs": "See registry/evidence/source-compositions/README.md. Render SourceExplorer; supply the page foreground/background tokens. Examples are not live customer data or fitted analytical results."
    }
  ]
}
