{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "blaze-motion",
  "homepage": "https://motion.asmitsah.dev",
  "items": [
    {
      "name": "provider",
      "type": "registry:block",
      "title": "Motion engine (base)",
      "description": "The shared engine base every blaze-motion component needs — the single tune surface (the `feel` block in lib/motion.ts) plus the <MotionProvider>. Install once, retune everything from one place. Pulled in automatically by any component.",
      "dependencies": ["motion"],
      "docs": "Mount <MotionProvider> once in your root layout, wrapping {children}. Retune the whole engine from the `feel` block at the top of lib/motion.ts. LazyMotion is `strict`, so primitives import `m` from motion/react-m — a raw motion.* throws.",
      "files": [
        { "path": "lib/motion.ts", "type": "registry:lib", "target": "@lib/motion.ts" },
        {
          "path": "components/motion/motion-provider.tsx",
          "type": "registry:component",
          "target": "@components/motion/motion-provider.tsx"
        }
      ]
    },
    {
      "name": "cinematic-image",
      "type": "registry:component",
      "title": "Cinematic Image",
      "description": "Cinematic scale-down settle (110% → 100%) for large images inside an overflow-hidden frame.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/cinematic-image.tsx",
          "type": "registry:component",
          "target": "@components/motion/cinematic-image.tsx"
        }
      ]
    },
    {
      "name": "clip-reveal",
      "type": "registry:component",
      "title": "Clip Reveal",
      "description": "Directional clip/wipe reveal — content wipes open from a chosen edge.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/clip-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/clip-reveal.tsx"
        }
      ]
    },
    {
      "name": "fade",
      "type": "registry:component",
      "title": "Fade",
      "description": "One prop-driven fade — a refined opacity fade with an optional subtle directional drift (direction, default \"up\"), an optional blur focus-in (blur), and an inView/mount trigger. Covers above-the-fold fades and scroll reveals alike.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/fade.tsx",
          "type": "registry:component",
          "target": "@components/motion/fade.tsx"
        }
      ]
    },
    {
      "name": "grayscale-reveal",
      "type": "registry:component",
      "title": "Grayscale Reveal",
      "description": "Grayscale → color image reveal — grayscale(1) fades to grayscale(0) alongside opacity, on a slow ease.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/grayscale-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/grayscale-reveal.tsx"
        }
      ]
    },
    {
      "name": "grow-from-origin",
      "type": "registry:component",
      "title": "Grow from Origin",
      "description": "Fade + scale (~0.85 → 1) anchored to a transform-origin corner — the dropdown/tooltip/popover entrance.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/grow-from-origin.tsx",
          "type": "registry:component",
          "target": "@components/motion/grow-from-origin.tsx"
        }
      ]
    },
    {
      "name": "inset-frame-reveal",
      "type": "registry:component",
      "title": "Inset Frame Reveal",
      "description": "Window settle — a uniform clip-path frame insets in from the edges, then opens to reveal.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/inset-frame-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/inset-frame-reveal.tsx"
        }
      ]
    },
    {
      "name": "line-reveal",
      "type": "registry:component",
      "title": "Line Reveal",
      "description": "Per-line rise + fade, staggered and calm — for body copy / multiline blocks; each line clips inside its own mask.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/line-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/line-reveal.tsx"
        }
      ]
    },
    {
      "name": "mask-text-reveal",
      "type": "registry:component",
      "title": "Mask Text Reveal",
      "description": "Masked text reveal — words rise out from behind a clip mask, token by token.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/mask-text-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/mask-text-reveal.tsx"
        }
      ]
    },
    {
      "name": "perspective-tilt-in",
      "type": "registry:component",
      "title": "Perspective Tilt In",
      "description": "Reveal with a whisper of depth — rise + rotateX settle over a perspective, one straight ease-out.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/perspective-tilt-in.tsx",
          "type": "registry:component",
          "target": "@components/motion/perspective-tilt-in.tsx"
        }
      ]
    },
    {
      "name": "radial-stagger",
      "type": "registry:component",
      "title": "Radial Stagger",
      "description": "Radial stagger — grid tiles spring in, ordered by their distance from a center point.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/radial-stagger.tsx",
          "type": "registry:component",
          "target": "@components/motion/radial-stagger.tsx"
        }
      ]
    },
    {
      "name": "scale-in",
      "type": "registry:component",
      "title": "Scale In",
      "description": "Soft 0.95 → 1 grow + fade on a straight ease tween, never a spring.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/scale-in.tsx",
          "type": "registry:component",
          "target": "@components/motion/scale-in.tsx"
        }
      ]
    },
    {
      "name": "scale-x-reveal",
      "type": "registry:component",
      "title": "Scale X Reveal",
      "description": "A rule / divider draws open — scaleX 0 → 1 + fade from the left.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/scale-x-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/scale-x-reveal.tsx"
        }
      ]
    },
    {
      "name": "sibling-dimming",
      "type": "registry:component",
      "title": "Sibling Dimming",
      "description": "Sibling dimming — hovering one item dims every non-hovered sibling to 50%. Pure CSS.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/sibling-dimming.tsx",
          "type": "registry:component",
          "target": "@components/motion/sibling-dimming.tsx"
        }
      ]
    },
    {
      "name": "slide",
      "type": "registry:component",
      "title": "Slide",
      "description": "Directional slide — content slides in from a chosen direction and distance tier, with fade.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/slide.tsx",
          "type": "registry:component",
          "target": "@components/motion/slide.tsx"
        }
      ]
    },
    {
      "name": "spring-pop",
      "type": "registry:component",
      "title": "Spring Pop",
      "description": "Spring pop entrance — a natural ~1.05 overshoot that emerges from the spring itself, plus fade.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/spring-pop.tsx",
          "type": "registry:component",
          "target": "@components/motion/spring-pop.tsx"
        }
      ]
    },
    {
      "name": "stagger",
      "type": "registry:component",
      "title": "Stagger",
      "description": "Linear stagger — children rise into view in sequence with a tunable per-child step and start delay.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/stagger.tsx",
          "type": "registry:component",
          "target": "@components/motion/stagger.tsx"
        }
      ]
    },
    {
      "name": "text-reveal",
      "type": "registry:component",
      "title": "Text Reveal",
      "description": "Word-by-word text reveal — tokens rise and fade in sequence as the line enters view.",
      "dependencies": ["motion"],
      "registryDependencies": ["https://motion.asmitsah.dev/r/provider.json"],
      "files": [
        {
          "path": "components/motion/text-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/text-reveal.tsx"
        }
      ]
    },
    {
      "name": "all",
      "type": "registry:block",
      "title": "blaze-motion",
      "description": "The full motion engine in one install — the tuned tokens (lib/motion.ts), the provider, and every motion primitive. Self-contained; retune the whole set from the `feel` block in lib/motion.ts.",
      "dependencies": ["motion"],
      "docs": "Mount <MotionProvider> once in your root layout, then wrap anything in <Fade> / <Stagger> / <Slide> / etc. Retune the whole engine from the `feel` block at the top of lib/motion.ts. Primitives import `m` from motion/react-m — a raw motion.* throws under strict LazyMotion.",
      "files": [
        { "path": "lib/motion.ts", "type": "registry:lib", "target": "@lib/motion.ts" },
        {
          "path": "components/motion/motion-provider.tsx",
          "type": "registry:component",
          "target": "@components/motion/motion-provider.tsx"
        },
        {
          "path": "components/motion/cinematic-image.tsx",
          "type": "registry:component",
          "target": "@components/motion/cinematic-image.tsx"
        },
        {
          "path": "components/motion/clip-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/clip-reveal.tsx"
        },
        {
          "path": "components/motion/fade.tsx",
          "type": "registry:component",
          "target": "@components/motion/fade.tsx"
        },
        {
          "path": "components/motion/grayscale-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/grayscale-reveal.tsx"
        },
        {
          "path": "components/motion/grow-from-origin.tsx",
          "type": "registry:component",
          "target": "@components/motion/grow-from-origin.tsx"
        },
        {
          "path": "components/motion/inset-frame-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/inset-frame-reveal.tsx"
        },
        {
          "path": "components/motion/line-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/line-reveal.tsx"
        },
        {
          "path": "components/motion/mask-text-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/mask-text-reveal.tsx"
        },
        {
          "path": "components/motion/perspective-tilt-in.tsx",
          "type": "registry:component",
          "target": "@components/motion/perspective-tilt-in.tsx"
        },
        {
          "path": "components/motion/radial-stagger.tsx",
          "type": "registry:component",
          "target": "@components/motion/radial-stagger.tsx"
        },
        {
          "path": "components/motion/scale-in.tsx",
          "type": "registry:component",
          "target": "@components/motion/scale-in.tsx"
        },
        {
          "path": "components/motion/scale-x-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/scale-x-reveal.tsx"
        },
        {
          "path": "components/motion/sibling-dimming.tsx",
          "type": "registry:component",
          "target": "@components/motion/sibling-dimming.tsx"
        },
        {
          "path": "components/motion/slide.tsx",
          "type": "registry:component",
          "target": "@components/motion/slide.tsx"
        },
        {
          "path": "components/motion/spring-pop.tsx",
          "type": "registry:component",
          "target": "@components/motion/spring-pop.tsx"
        },
        {
          "path": "components/motion/stagger.tsx",
          "type": "registry:component",
          "target": "@components/motion/stagger.tsx"
        },
        {
          "path": "components/motion/text-reveal.tsx",
          "type": "registry:component",
          "target": "@components/motion/text-reveal.tsx"
        }
      ]
    }
  ]
}
