{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "jbm",
  "homepage": "https://github.com/chekos/jbm-ui",
  "items": [
    {
      "name": "tokens",
      "type": "registry:lib",
      "title": "Tokens",
      "description": "Cream/vermilion palette, Geist stacks, radii, shadow, stage safe areas; CSS vars string for Tailwind consumers.",
      "files": [
        {
          "path": "registry/jbm/lib/tokens.ts",
          "type": "registry:lib",
          "target": "src/jbm/lib/tokens.ts"
        }
      ]
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "Uppercase tracked kicker.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/label.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/label.tsx"
        }
      ]
    },
    {
      "name": "big",
      "type": "registry:ui",
      "title": "Big",
      "description": "Display heading, 800 weight.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/big.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/big.tsx"
        }
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "Raised surface; dark variant for code.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/card.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/card.tsx"
        }
      ]
    },
    {
      "name": "chip",
      "type": "registry:ui",
      "title": "Chip",
      "description": "Outline, accent or solid pill; sans or mono.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/chip.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/chip.tsx"
        }
      ]
    },
    {
      "name": "stat-card",
      "type": "registry:ui",
      "title": "StatCard",
      "description": "Label, big value, sub; stacked or row layout.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/card"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/stat-card.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/stat-card.tsx"
        }
      ]
    },
    {
      "name": "callout",
      "type": "registry:ui",
      "title": "Callout",
      "description": "Sentence in an accent, ink or note pill.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/callout.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/callout.tsx"
        }
      ]
    },
    {
      "name": "bullet-list",
      "type": "registry:ui",
      "title": "BulletList",
      "description": "Arrow or dot list.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/bullet-list.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/bullet-list.tsx"
        }
      ]
    },
    {
      "name": "brand",
      "type": "registry:ui",
      "title": "Brand",
      "description": "tacosdedatos lockup.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/brand.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/brand.tsx"
        }
      ]
    },
    {
      "name": "paper",
      "type": "registry:ui",
      "title": "Paper",
      "description": "Paper cut-out primitives: Paper shape, Sticker (slanted note with display type), Caption.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/paper.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/paper.tsx"
        }
      ]
    },
    {
      "name": "ui-bits",
      "type": "registry:ui",
      "title": "UI bits",
      "description": "Illustrated interface pieces as paper cut-outs: UiButton, UiInput, UiCard, PhoneFrame, Badge, TokenGlyph.",
      "registryDependencies": [
        "@jbm/ui-button",
        "@jbm/ui-input",
        "@jbm/ui-card",
        "@jbm/piece",
        "@jbm/phone-frame",
        "@jbm/badge",
        "@jbm/token-glyph"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/ui-bits.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/ui-bits.tsx"
        }
      ]
    },
    {
      "name": "replay-button",
      "type": "registry:ui",
      "title": "ReplayButton",
      "description": "Controlled replay icon that charges from tail to arrowhead. Supply progress and charging state from any animation.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/replay-button.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/replay-button.tsx"
        }
      ]
    },
    {
      "name": "motion-hooks",
      "type": "registry:hook",
      "title": "Motion hooks",
      "description": "useSec, useIn, useFade, useProgress for Remotion.",
      "dependencies": [
        "remotion"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/hooks.ts",
          "type": "registry:hook",
          "target": "src/jbm/motion/hooks.ts"
        }
      ]
    },
    {
      "name": "scene",
      "type": "registry:component",
      "title": "Scene",
      "description": "Full-bleed canvas frame.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/scene.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/scene.tsx"
        }
      ]
    },
    {
      "name": "pop",
      "type": "registry:component",
      "title": "Pop",
      "description": "Spring entrance + Stagger + Leave (exit).",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/motion-hooks"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/pop.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/pop.tsx"
        }
      ]
    },
    {
      "name": "counter",
      "type": "registry:component",
      "title": "Counter",
      "description": "Number counting up.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/big",
        "@jbm/motion-hooks"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/counter.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/counter.tsx"
        }
      ]
    },
    {
      "name": "prob-bar",
      "type": "registry:component",
      "title": "ProbBar",
      "description": "Labelled probability bar that fills.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/motion-hooks",
        "@jbm/pop"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/prob-bar.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/prob-bar.tsx"
        }
      ]
    },
    {
      "name": "code-card",
      "type": "registry:component",
      "title": "CodeCard",
      "description": "Dark code card that types each line in place.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/card",
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/code-card.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/code-card.tsx"
        },
        {
          "path": "registry/jbm/motion/code-card-timing.js",
          "type": "registry:component",
          "target": "src/jbm/motion/code-card-timing.js"
        },
        {
          "path": "registry/jbm/motion/code-card-timing.d.ts",
          "type": "registry:component",
          "target": "src/jbm/motion/code-card-timing.d.ts"
        }
      ]
    },
    {
      "name": "captions",
      "type": "registry:component",
      "title": "Captions",
      "description": "Kinetic subtitle pill from aligned words.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/motion-hooks"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/captions.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/captions.tsx"
        }
      ]
    },
    {
      "name": "rebuild-screens",
      "type": "registry:component",
      "title": "RebuildScreens",
      "description": "A phone screen built piece by piece, then rebuilt on new screens on each cue; Stamp for a loud sticker.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/motion-hooks",
        "@jbm/pop",
        "@jbm/ui-bits",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/rebuild-screens.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/rebuild-screens.tsx"
        }
      ]
    },
    {
      "name": "catalog",
      "type": "registry:component",
      "title": "Catalog",
      "description": "Catalogue sheet of interface pieces that unfolds a second row of design-token glyphs.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/motion-hooks",
        "@jbm/pop",
        "@jbm/paper",
        "@jbm/ui-bits",
        "@jbm/rebuild-screens"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/catalog.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/catalog.tsx"
        }
      ]
    },
    {
      "name": "propagate",
      "type": "registry:component",
      "title": "Propagate",
      "description": "One source card fanning out to a row of screens; bug, fix and recolour cues travel down the lines.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/motion-hooks",
        "@jbm/pop",
        "@jbm/paper",
        "@jbm/ui-bits"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/propagate.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/propagate.tsx"
        }
      ]
    },
    {
      "name": "shelf",
      "type": "registry:component",
      "title": "Shelf",
      "description": "Pile of library cards on their own cues, plus Twice: a button, the same button again, a cross through the second.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/motion-hooks",
        "@jbm/pop",
        "@jbm/paper",
        "@jbm/ui-bits"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/shelf.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/shelf.tsx"
        }
      ]
    },
    {
      "name": "scene-spec",
      "type": "registry:component",
      "title": "Scene spec",
      "description": "Compose timed blocks with explicit portrait layouts, orientation overrides, and configurable safe areas.",
      "dependencies": [
        "remotion"
      ],
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/label",
        "@jbm/big",
        "@jbm/chip",
        "@jbm/stat-card",
        "@jbm/callout",
        "@jbm/bullet-list",
        "@jbm/scene",
        "@jbm/pop",
        "@jbm/code-card",
        "@jbm/brand",
        "@jbm/rebuild-screens",
        "@jbm/catalog",
        "@jbm/propagate",
        "@jbm/shelf"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/compile.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/compile.tsx"
        },
        {
          "path": "registry/jbm/motion/spec.ts",
          "type": "registry:component",
          "target": "src/jbm/motion/spec.ts"
        }
      ]
    },
    {
      "name": "ui-button",
      "type": "registry:ui",
      "title": "UiButton",
      "description": "Illustrated button with paper, ink, and accent tones.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/ui-button.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/ui-button.tsx"
        }
      ]
    },
    {
      "name": "ui-input",
      "type": "registry:ui",
      "title": "UiInput",
      "description": "Illustrated text field with a controllable cursor.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/ui-input.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/ui-input.tsx"
        }
      ]
    },
    {
      "name": "ui-card",
      "type": "registry:ui",
      "title": "UiCard",
      "description": "Illustrated card with a picture and text bars.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/ui-card.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/ui-card.tsx"
        }
      ]
    },
    {
      "name": "piece",
      "type": "registry:ui",
      "title": "Piece",
      "description": "Choose a button, input, or card illustration by kind.",
      "registryDependencies": [
        "@jbm/paper",
        "@jbm/ui-button",
        "@jbm/ui-input",
        "@jbm/ui-card"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/piece.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/piece.tsx"
        }
      ]
    },
    {
      "name": "phone-frame",
      "type": "registry:ui",
      "title": "PhoneFrame",
      "description": "Phone silhouette that holds your own content.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/phone-frame.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/phone-frame.tsx"
        }
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "Check and cross badges in paper, ink, and accent tones.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/badge.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/badge.tsx"
        }
      ]
    },
    {
      "name": "token-glyph",
      "type": "registry:ui",
      "title": "TokenGlyph",
      "description": "Color, typography, and spacing illustrations.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/token-glyph.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/token-glyph.tsx"
        }
      ]
    },
    {
      "name": "text-fill",
      "type": "registry:ui",
      "title": "Text fill",
      "description": "A controlled character sweep from muted text through vermilion into ink. Drive progress with a slider, scroll, or a video timeline.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/text-fill.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/text-fill.tsx"
        }
      ]
    },
    {
      "name": "scroll-text-fill",
      "type": "registry:ui",
      "title": "Scroll text fill",
      "description": "Scroll to bring text into focus, one character at a time. Keyboard scrolling, reversible progress, and reduced-motion support.",
      "registryDependencies": [
        "@jbm/text-fill",
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/scroll-text-fill.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/scroll-text-fill.tsx"
        }
      ]
    },
    {
      "name": "flip-text",
      "type": "registry:ui",
      "title": "Flip text",
      "description": "Letters tumble on hover with a vermilion accent. Click, tap, or use the keyboard to flip the whole phrase. Respects reduced motion.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/flip-text.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/flip-text.tsx"
        }
      ]
    },
    {
      "name": "scroll-stack",
      "type": "registry:ui",
      "title": "Scroll stack",
      "description": "Stack any React content as you scroll. Successive items scale into place while earlier ones fade. Page or contained scrolling, keyboard access, and a plain-list fallback.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/scroll-stack.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/scroll-stack.tsx"
        }
      ]
    },
    {
      "name": "rule",
      "type": "registry:ui",
      "title": "Rule",
      "description": "A labelled divider with ink or vermilion emphasis and two line weights.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/rule.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/rule.tsx"
        }
      ]
    },
    {
      "name": "action-link",
      "type": "registry:ui",
      "title": "Action Link",
      "description": "A text anchor with an optional arrow and visible hover and keyboard focus.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/action-link.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/action-link.tsx"
        }
      ]
    },
    {
      "name": "index-row",
      "type": "registry:ui",
      "title": "Index Row",
      "description": "A numbered record with optional evidence, linked title, and active state.",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/action-link"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/index-row.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/index-row.tsx"
        }
      ]
    },
    {
      "name": "figure-caption",
      "type": "registry:ui",
      "title": "Figure Caption",
      "description": "An editorial figure label, caption, and provenance that wraps on narrow screens.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/figure-caption.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/figure-caption.tsx"
        }
      ]
    },
    {
      "name": "ticket",
      "type": "registry:ui",
      "title": "Ticket",
      "description": "Admission-style surface with a colored header, flexible body, and perforated footer stub.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/ticket.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/ticket.tsx"
        }
      ]
    },
    {
      "name": "chat-bubble",
      "type": "registry:ui",
      "title": "Chat Bubble",
      "description": "Messages with optional speakers and tails, incoming/outgoing alignment, and three palette tones.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/chat-bubble.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/chat-bubble.tsx"
        }
      ]
    },
    {
      "name": "document",
      "type": "registry:ui",
      "title": "Document",
      "description": "Folded paper illustration with optional label and accent heading.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/document.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/document.tsx"
        }
      ]
    },
    {
      "name": "folder",
      "type": "registry:ui",
      "title": "Folder",
      "description": "Labelled folder illustration with a controlled open state. No built-in autoplay.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/folder.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/folder.tsx"
        }
      ]
    },
    {
      "name": "score-scale",
      "type": "registry:ui",
      "title": "Score Scale",
      "description": "A read-only score meter with endpoint labels and a controlled marker.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/score-scale.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/score-scale.tsx"
        }
      ]
    },
    {
      "name": "comparison-bars",
      "type": "registry:ui",
      "title": "Comparison Bars",
      "description": "Readable comparison rows on a shared zero-based scale, with optional emphasis.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/comparison-bars.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/comparison-bars.tsx"
        }
      ]
    },
    {
      "name": "clock",
      "type": "registry:ui",
      "title": "Clock",
      "description": "A deterministic analog clock and time label. Supply time explicitly for web or video.",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/clock.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/clock.tsx"
        }
      ]
    },
    {
      "name": "scene-geometry",
      "title": "Scene geometry",
      "description": "Shared points, bounds, arc-length path interpolation and travel tilt.",
      "type": "registry:lib",
      "registryDependencies": [],
      "files": [
        {
          "path": "registry/jbm/lib/geometry.ts",
          "type": "registry:lib",
          "target": "src/jbm/lib/geometry.ts"
        }
      ]
    },
    {
      "name": "cajon",
      "title": "Cajón",
      "description": "A fixed-size filing drawer with complete folders packed front to back.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry",
        "@jbm/folder"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/cajon.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/cajon.tsx"
        }
      ]
    },
    {
      "name": "mano",
      "title": "Mano",
      "description": "Position and rotate the independent Hand illustration with controlled coordinates.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/hand",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/mano.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/mano.tsx"
        }
      ]
    },
    {
      "name": "bandeja",
      "title": "Bandeja",
      "description": "A shallow paper tray with optional sheets.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/bandeja.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/bandeja.tsx"
        }
      ]
    },
    {
      "name": "tool-caddy",
      "title": "Tool caddy",
      "description": "An empty divided desktop organizer.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/tool-caddy.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/tool-caddy.tsx"
        }
      ]
    },
    {
      "name": "escritorio",
      "title": "Escritorio",
      "description": "An empty desk with separate finish and optional file cabinet.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry",
        "@jbm/cajon",
        "@jbm/file-cabinet"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/escritorio.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/escritorio.tsx"
        }
      ]
    },
    {
      "name": "burbuja",
      "title": "Burbuja",
      "description": "The existing ChatBubble with selected words highlighted by TextFill.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/chat-bubble",
        "@jbm/text-fill"
      ],
      "files": [
        {
          "path": "registry/jbm/motion/burbuja.tsx",
          "type": "registry:component",
          "target": "src/jbm/motion/burbuja.tsx"
        }
      ]
    },
    {
      "name": "hand",
      "title": "Hand",
      "description": "An independent hand illustration with open, pointing and pinching poses.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/hand.tsx",
          "type": "registry:component",
          "target": "src/jbm/ui/hand.tsx"
        }
      ]
    },
    {
      "name": "file-cabinet",
      "title": "File cabinet",
      "description": "A reusable cabinet containing a controlled filing drawer.",
      "type": "registry:component",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/cajon",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/file-cabinet.tsx",
          "type": "registry:component",
          "target": "src/jbm/ui/file-cabinet.tsx"
        }
      ]
    },
    {
      "name": "paper-clip",
      "title": "Paper clip",
      "description": "Independent wire clip for paper edges.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/paper-clip.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/paper-clip.tsx"
        }
      ]
    },
    {
      "name": "clipped-note",
      "title": "Clipped note",
      "description": "Paper note with an optional independent clip, rotation, and paper tones.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper",
        "@jbm/paper-clip"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/clipped-note.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/clipped-note.tsx"
        }
      ]
    },
    {
      "name": "punched-tag",
      "title": "Punched tag",
      "description": "Card-stock label with a punched hole and configurable content.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/punched-tag.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/punched-tag.tsx"
        }
      ]
    },
    {
      "name": "paper-line",
      "title": "Paper line",
      "description": "Controlled grapheme reveal, ink lift, dotted underline, and strike-through.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/paper-line.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/paper-line.tsx"
        }
      ]
    },
    {
      "name": "stamp",
      "title": "Stamp",
      "description": "Controlled ink impression with press and angle controls.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/stamp.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/stamp.tsx"
        }
      ]
    },
    {
      "name": "tape-marker",
      "title": "Tape marker",
      "description": "Independent folded paper checkpoint marker.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/tape-marker.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/tape-marker.tsx"
        }
      ]
    },
    {
      "name": "paper-tape",
      "title": "Paper tape",
      "description": "Feeding paper with shared coordinates for writing, markers, and attached notes.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/paper",
        "@jbm/tape-marker"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/paper-tape.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/paper-tape.tsx"
        }
      ]
    },
    {
      "name": "frontmatter",
      "title": "Frontmatter",
      "description": "Metadata fields with YAML delimiters, emphasis, dimming, and stacked layout.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/frontmatter.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/frontmatter.tsx"
        }
      ]
    },
    {
      "name": "folder-contents",
      "title": "Folder contents",
      "description": "Nested folders and documents with independent extraction and rigid-object reveal.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry",
        "@jbm/folder"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/folder-contents.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/folder-contents.tsx"
        }
      ]
    },
    {
      "name": "folder-carry",
      "title": "Folder carry",
      "description": "Continuous folder transport with shared tab contact geometry.",
      "type": "registry:ui",
      "registryDependencies": [
        "@jbm/tokens",
        "@jbm/scene-geometry",
        "@jbm/folder"
      ],
      "files": [
        {
          "path": "registry/jbm/ui/folder-carry.tsx",
          "type": "registry:ui",
          "target": "src/jbm/ui/folder-carry.tsx"
        }
      ]
    }
  ]
}
