{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "tween-ui",
  "homepage": "https://tween-ui.vercel.app",
  "items": [
    {
      "name": "icon-trail-button",
      "type": "registry:ui",
      "title": "Icon Trail Button",
      "description": "A pill button whose icon pill expands on hover or focus, playing out a staggered chevron trail before it parks. CSS transitions and a small state machine — no animation library.",
      "files": [
        {
          "path": "components/tweenui/icon-trail-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "icon-trail-button-demo",
      "type": "registry:example",
      "title": "Icon Trail Button Demo",
      "description": "Usage examples for Icon Trail Button.",
      "files": [
        {
          "path": "examples/icon-trail-button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "sliding-tabs",
      "type": "registry:ui",
      "title": "Sliding Tabs",
      "description": "A pill nav whose lime indicator scales in under the first tab, then slides to follow the pointer or keyboard focus. Leaving the nav returns it to the active tab.",
      "files": [
        {
          "path": "components/tweenui/sliding-tabs.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "sliding-tabs-demo",
      "type": "registry:example",
      "title": "Sliding Tabs Demo",
      "description": "Usage examples for Sliding Tabs.",
      "files": [
        {
          "path": "examples/sliding-tabs-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "avatar-reveal",
      "type": "registry:ui",
      "title": "Avatar Reveal",
      "description": "Three stacked avatars that scale and unblur in from the left on an elastic ease, then a caption slides in from the right.",
      "files": [
        {
          "path": "components/tweenui/avatar-reveal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "avatar-reveal-demo",
      "type": "registry:example",
      "title": "Avatar Reveal Demo",
      "description": "Usage examples for Avatar Reveal.",
      "files": [
        {
          "path": "examples/avatar-reveal-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "auth-modal",
      "type": "registry:ui",
      "title": "Auth Modal",
      "description": "A login modal: the backdrop fades, the panel scales up, then the close button, title, sign-in providers and email field stagger in. Closing plays the sequence in reverse.",
      "files": [
        {
          "path": "components/tweenui/auth-modal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "auth-modal-demo",
      "type": "registry:example",
      "title": "Auth Modal Demo",
      "description": "Usage examples for Auth Modal.",
      "files": [
        {
          "path": "examples/auth-modal-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "number-counter",
      "type": "registry:ui",
      "title": "Number Counter",
      "description": "An animated stats counter whose digits spin up once when the stat scrolls into view. ScrollTrigger fires it, Number Flow handles the count.",
      "files": [
        {
          "path": "components/tweenui/number-counter.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "number-counter-demo",
      "type": "registry:example",
      "title": "Number Counter Demo",
      "description": "Usage examples for Number Counter.",
      "files": [
        {
          "path": "examples/number-counter-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "voice-sample-player",
      "type": "registry:ui",
      "title": "Voice Sample Player",
      "description": "An audio player pill: press play and the name slides away, a lime waveform equalizer slides in and starts oscillating, and the icon morphs to pause. Pass a src to play real audio.",
      "files": [
        {
          "path": "components/tweenui/voice-sample-player.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "voice-sample-player-demo",
      "type": "registry:example",
      "title": "Voice Sample Player Demo",
      "description": "Usage examples for Voice Sample Player.",
      "files": [
        {
          "path": "examples/voice-sample-player-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/voice-sample-player-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "flip-card",
      "type": "registry:ui",
      "title": "Flip Card",
      "description": "A card that flips in 3D on hover or tap — the front rotates out while the back rotates in with its description, feature list and CTA staggering into place.",
      "files": [
        {
          "path": "components/tweenui/flip-card.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "flip-card-demo",
      "type": "registry:example",
      "title": "Flip Card Demo",
      "description": "Usage examples for Flip Card.",
      "files": [
        {
          "path": "examples/flip-card-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "faq-accordion",
      "type": "registry:ui",
      "title": "FAQ Accordion",
      "description": "A single-open accordion that animates its height open while the answer reveals line by line through a SplitText mask and the icon morphs from plus to minus.",
      "files": [
        {
          "path": "components/tweenui/faq-accordion.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "faq-accordion-demo",
      "type": "registry:example",
      "title": "FAQ Accordion Demo",
      "description": "Usage examples for FAQ Accordion.",
      "files": [
        {
          "path": "examples/faq-accordion-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "shiny-button",
      "type": "registry:ui",
      "title": "Shiny Button",
      "description": "A pill button with a diagonal light sweep that glides across on hover while the leading sparkle twinkles. Pure CSS — no GSAP dependency.",
      "files": [
        {
          "path": "components/tweenui/shiny-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "shiny-button-demo",
      "type": "registry:example",
      "title": "Shiny Button Demo",
      "description": "Usage examples for Shiny Button.",
      "files": [
        {
          "path": "examples/shiny-button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "text-roll-button",
      "type": "registry:ui",
      "title": "Text Roll Button",
      "description": "A pill button whose label rolls up character by character on hover — the current text lifts out the top as a fresh copy rolls in from below, on a fine per-character stagger.",
      "files": [
        {
          "path": "components/tweenui/text-roll-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "text-roll-button-demo",
      "type": "registry:example",
      "title": "Text Roll Button Demo",
      "description": "Usage examples for Text Roll Button.",
      "files": [
        {
          "path": "examples/text-roll-button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "slide-arrow-button",
      "type": "registry:ui",
      "title": "Slide Arrow Button",
      "description": "A pill button whose label rolls up on hover while the chevron slides out of its lime badge and a fresh one slides in from the left. Pure CSS — no GSAP dependency.",
      "files": [
        {
          "path": "components/tweenui/slide-arrow-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "slide-arrow-button-demo",
      "type": "registry:example",
      "title": "Slide Arrow Button Demo",
      "description": "Usage examples for Slide Arrow Button.",
      "files": [
        {
          "path": "examples/slide-arrow-button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "glow-button",
      "type": "registry:ui",
      "title": "Glow Button",
      "description": "A pill button floating over a soft red, amber, violet and cyan glow that sharpens as the button lifts and a chevron slides through its slot. Pure CSS — no GSAP dependency.",
      "files": [
        {
          "path": "components/tweenui/glow-button.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "glow-button-demo",
      "type": "registry:example",
      "title": "Glow Button Demo",
      "description": "Usage examples for Glow Button.",
      "files": [
        {
          "path": "examples/glow-button-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "logo-orbit",
      "type": "registry:ui",
      "title": "Logo Orbit",
      "description": "Logos spaced evenly around a ring that rotates continuously, each mark counter-rotated so it always stays upright. Hover pauses the orbit.",
      "files": [
        {
          "path": "components/tweenui/logo-orbit.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "logo-orbit-demo",
      "type": "registry:example",
      "title": "Logo Orbit Demo",
      "description": "Usage examples for Logo Orbit.",
      "files": [
        {
          "path": "examples/logo-orbit-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "logo-cycle",
      "type": "registry:ui",
      "title": "Logo Cycle",
      "description": "A logo row that holds a fixed count and cycles the extras: the current set staggers up and blurs out as the next slides in from below. Hover pauses the loop.",
      "files": [
        {
          "path": "components/tweenui/logo-cycle.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "logo-cycle-demo",
      "type": "registry:example",
      "title": "Logo Cycle Demo",
      "description": "Usage examples for Logo Cycle.",
      "files": [
        {
          "path": "examples/logo-cycle-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "logo-wave",
      "type": "registry:ui",
      "title": "Logo Wave",
      "description": "An endless logo strip where the mark nearest the midpoint rises and scales up while its neighbors step down into a wave. Hover pauses the marquee.",
      "files": [
        {
          "path": "components/tweenui/logo-wave.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "logo-wave-demo",
      "type": "registry:example",
      "title": "Logo Wave Demo",
      "description": "Usage examples for Logo Wave.",
      "files": [
        {
          "path": "examples/logo-wave-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "image-fan-slider",
      "type": "registry:ui",
      "title": "Image Fan Slider",
      "description": "An image gallery slider: a fan of photos that auto-advances — the active one large and sharp, its neighbors rotated and blurred on each side. Hover pauses. Pure CSS transitions.",
      "files": [
        {
          "path": "components/tweenui/image-fan-slider.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "image-fan-slider-demo",
      "type": "registry:example",
      "title": "Image Fan Slider Demo",
      "description": "Usage examples for Image Fan Slider.",
      "files": [
        {
          "path": "examples/image-fan-slider-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "morphing-text",
      "type": "registry:ui",
      "title": "Morphing Text",
      "description": "A headline text animation whose last word cycles through a list with a gooey blur morph — an SVG alpha threshold fuses the outgoing and incoming words into one liquid shape while the slot eases between word widths.",
      "files": [
        {
          "path": "components/tweenui/morphing-text.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "morphing-text-demo",
      "type": "registry:example",
      "title": "Morphing Text Demo",
      "description": "Usage examples for Morphing Text.",
      "files": [
        {
          "path": "examples/morphing-text-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "wordmark-reveal",
      "type": "registry:ui",
      "title": "Wordmark Reveal",
      "description": "A display wordmark text reveal that assembles itself on the first scroll — every letter turns in on its own vertical axis, then a script line leans in along the baseline. A cue holds the screen until you answer it, or it plays on mount with `instant`. ScrollTrigger and SplitText.",
      "files": [
        {
          "path": "components/tweenui/wordmark-reveal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "wordmark-reveal-demo",
      "type": "registry:example",
      "title": "Wordmark Reveal Demo",
      "description": "Usage examples for Wordmark Reveal.",
      "files": [
        {
          "path": "examples/wordmark-reveal-demo.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "pricing-plan-switch",
      "type": "registry:block",
      "title": "Pricing Plan Switch",
      "description": "A pricing section where picking a plan morphs the name badge, crossfades the description and spins the price with Number Flow, while the checklist lights up its included rows. A monthly/yearly toggle re-spins the price.",
      "files": [
        {
          "path": "components/tweenui/pricing-plan-switch.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pricing-plan-switch-demo",
      "type": "registry:example",
      "title": "Pricing Plan Switch Demo",
      "description": "Usage examples for Pricing Plan Switch.",
      "files": [
        {
          "path": "examples/pricing-plan-switch-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/pricing-plan-switch-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "process-card-reveal",
      "type": "registry:block",
      "title": "Process Card Reveal",
      "description": "Numbered steps on a timeline whose connector fills before the next card slides and blurs into place — image one way, copy the other. Hover pauses the loop; clicking a step jumps there.",
      "files": [
        {
          "path": "components/tweenui/process-card-reveal.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "process-card-reveal-demo",
      "type": "registry:example",
      "title": "Process Card Reveal Demo",
      "description": "Usage examples for Process Card Reveal.",
      "files": [
        {
          "path": "examples/process-card-reveal-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/process-card-reveal-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "process-sticky-steps",
      "type": "registry:block",
      "title": "Process Sticky Steps",
      "description": "A process block whose heading, divider and step numbers stay sticky inside the section while the cards scroll past them. No GSAP — just Intersection Observer.",
      "files": [
        {
          "path": "components/tweenui/process-sticky-steps.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "process-sticky-steps-demo",
      "type": "registry:example",
      "title": "Process Sticky Steps Demo",
      "description": "Usage examples for Process Sticky Steps.",
      "files": [
        {
          "path": "examples/process-sticky-steps-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/process-sticky-steps-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "strip-wipe",
      "type": "registry:block",
      "title": "Strip Wipe",
      "description": "A split testimonial slider whose photo wipes in as tiled strips beside the quote, the index ticking over on Number Flow. Prev and next reverse the wipe direction.",
      "files": [
        {
          "path": "components/tweenui/strip-wipe.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "strip-wipe-demo",
      "type": "registry:example",
      "title": "Strip Wipe Demo",
      "description": "Usage examples for Strip Wipe.",
      "files": [
        {
          "path": "examples/strip-wipe-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/strip-wipe-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "rating-carousel",
      "type": "registry:block",
      "title": "Rating Carousel",
      "description": "A Swiper testimonial row of rating cards: drag or swipe it, and off-window cards fade and blur as they leave. Autoplay pauses on hover, and dots jump to a card.",
      "files": [
        {
          "path": "components/tweenui/rating-carousel.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "rating-carousel-demo",
      "type": "registry:example",
      "title": "Rating Carousel Demo",
      "description": "Usage examples for Rating Carousel.",
      "files": [
        {
          "path": "examples/rating-carousel-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/rating-carousel-demo-2.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/rating-carousel-demo-3.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "cta-image-fan",
      "type": "registry:block",
      "title": "CTA Image Fan",
      "description": "A call-to-action with a fanned photo stack auto-advancing above the headline and a shiny button below. Built from Image Fan Slider and Shiny Button.",
      "files": [
        {
          "path": "components/tweenui/cta-image-fan.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cta-image-fan-demo",
      "type": "registry:example",
      "title": "CTA Image Fan Demo",
      "description": "Usage examples for CTA Image Fan.",
      "files": [
        {
          "path": "examples/cta-image-fan-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/cta-image-fan-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "cta-photo-headline",
      "type": "registry:block",
      "title": "CTA Photo Headline",
      "description": "A call-to-action where avatars pop in above a heading with two photos tucked into the copy — a pill that grows from the left, then a tilted square that drops into place.",
      "files": [
        {
          "path": "components/tweenui/cta-photo-headline.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cta-photo-headline-demo",
      "type": "registry:example",
      "title": "CTA Photo Headline Demo",
      "description": "Usage examples for CTA Photo Headline.",
      "files": [
        {
          "path": "examples/cta-photo-headline-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/cta-photo-headline-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "blog-hover-expand",
      "type": "registry:block",
      "title": "Blog Hover Expand",
      "description": "A three-post blog row where the hovered card grows wider, its photo scales and tilts, and the title draws an underline. Pure CSS.",
      "files": [
        {
          "path": "components/tweenui/blog-hover-expand.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "blog-hover-expand-demo",
      "type": "registry:example",
      "title": "Blog Hover Expand Demo",
      "description": "Usage examples for Blog Hover Expand.",
      "files": [
        {
          "path": "examples/blog-hover-expand-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/blog-hover-expand-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "integration-hub",
      "type": "registry:block",
      "title": "Integration Hub",
      "description": "A hub-and-spoke integrations diagram: the center pops in, paths draw out to six logos, then a dot travels each line. Uses MotionPathPlugin.",
      "files": [
        {
          "path": "components/tweenui/integration-hub.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "integration-hub-demo",
      "type": "registry:example",
      "title": "Integration Hub Demo",
      "description": "Usage examples for Integration Hub.",
      "files": [
        {
          "path": "examples/integration-hub-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/integration-hub-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "infinite-rotating-cards",
      "type": "registry:block",
      "title": "Infinite Rotating Cards",
      "description": "A hero wheel of photo cards set on a large circle so only the top arc shows, spinning slowly so the next idea always comes into view.",
      "files": [
        {
          "path": "components/tweenui/infinite-rotating-cards.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "infinite-rotating-cards-demo",
      "type": "registry:example",
      "title": "Infinite Rotating Cards Demo",
      "description": "Usage examples for Infinite Rotating Cards.",
      "files": [
        {
          "path": "examples/infinite-rotating-cards-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/infinite-rotating-cards-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "card-hover-expand",
      "type": "registry:block",
      "title": "Card Hover Expand",
      "description": "A card row where the hovered card grows wider, its photo fades in and the title drops to the bottom over a gradient. Every card stays expanded on small screens. Pure CSS.",
      "files": [
        {
          "path": "components/tweenui/card-hover-expand.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "card-hover-expand-demo",
      "type": "registry:example",
      "title": "Card Hover Expand Demo",
      "description": "Usage examples for Card Hover Expand.",
      "files": [
        {
          "path": "examples/card-hover-expand-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/card-hover-expand-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "card-spotlight-grid",
      "type": "registry:block",
      "title": "Card Spotlight Grid",
      "description": "A staggered project grid — tile heights cycle every six cards — where the hovered tile tilts toward the cursor in 3D while its siblings scale back and dim. Pointer-only.",
      "files": [
        {
          "path": "components/tweenui/card-spotlight-grid.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "card-spotlight-grid-demo",
      "type": "registry:example",
      "title": "Card Spotlight Grid Demo",
      "description": "Usage examples for Card Spotlight Grid.",
      "files": [
        {
          "path": "examples/card-spotlight-grid-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/card-spotlight-grid-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "column-drift",
      "type": "registry:block",
      "title": "Column Drift",
      "description": "Three columns of review cards that swing in from the sides as the section scrolls, then drift past each other at different speeds. Cards lift on hover with an underline wipe. GSAP + ScrollTrigger.",
      "files": [
        {
          "path": "components/tweenui/column-drift.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "column-drift-demo",
      "type": "registry:example",
      "title": "Column Drift Demo",
      "description": "Usage examples for Column Drift.",
      "files": [
        {
          "path": "examples/column-drift-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/column-drift-demo-2.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/column-drift-demo-3.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "team-scatter-focus",
      "type": "registry:block",
      "title": "Team Scatter Focus",
      "description": "A scattered team collage whose cards each fly in from their own direction, then blur and shrink back from whichever one you hover. Falls back to a stacked grid below lg.",
      "files": [
        {
          "path": "components/tweenui/team-scatter-focus.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "team-scatter-focus-demo",
      "type": "registry:example",
      "title": "Team Scatter Focus Demo",
      "description": "Usage examples for Team Scatter Focus.",
      "files": [
        {
          "path": "examples/team-scatter-focus-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/team-scatter-focus-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "tab-wipe",
      "type": "registry:block",
      "title": "Tab Wipe",
      "description": "A centered screenshot stage that wipes between slides on a clip-path edge while the incoming shot settles out of a slight scale and drift. The thumbnail strip is a real tablist, and the stage autoplays between clicks.",
      "files": [
        {
          "path": "components/tweenui/tab-wipe.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "tab-wipe-demo",
      "type": "registry:example",
      "title": "Tab Wipe Demo",
      "description": "Usage examples for Tab Wipe.",
      "files": [
        {
          "path": "examples/tab-wipe-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/tab-wipe-demo-2.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/tab-wipe-demo-3.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "logo-wall-shuffle",
      "type": "registry:block",
      "title": "Logo Wall Shuffle",
      "description": "An integrations wall of staggered logo tiles where one mark at a time lifts away and the next rises in behind it. Every tile is visited before any repeats, and the loop pauses off-screen and in background tabs.",
      "files": [
        {
          "path": "components/tweenui/logo-wall-shuffle.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "logo-wall-shuffle-demo",
      "type": "registry:example",
      "title": "Logo Wall Shuffle Demo",
      "description": "Usage examples for Logo Wall Shuffle.",
      "files": [
        {
          "path": "examples/logo-wall-shuffle-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/logo-wall-shuffle-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "testimonial-line-sweep",
      "type": "registry:block",
      "title": "Testimonial Line Sweep",
      "description": "A paged testimonial pair whose text sweeps out line by line behind masks while the portrait irises shut, then the next quote arrives the same way. Pages with buttons or arrow keys. GSAP + SplitText.",
      "files": [
        {
          "path": "components/tweenui/testimonial-line-sweep.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "testimonial-line-sweep-demo",
      "type": "registry:example",
      "title": "Testimonial Line Sweep Demo",
      "description": "Usage examples for Testimonial Line Sweep.",
      "files": [
        {
          "path": "examples/testimonial-line-sweep-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/testimonial-line-sweep-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "cta-starfall",
      "type": "registry:block",
      "title": "CTA Starfall",
      "description": "A dark call-to-action section under a slow field of drifting stars lit by a violet bloom. The field is full on the first frame rather than spawning over time, and pauses off-screen and in background tabs.",
      "files": [
        {
          "path": "components/tweenui/cta-starfall.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cta-starfall-demo",
      "type": "registry:example",
      "title": "CTA Starfall Demo",
      "description": "Usage examples for CTA Starfall.",
      "files": [
        {
          "path": "examples/cta-starfall-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/cta-starfall-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "pricing-usage-slider",
      "type": "registry:block",
      "title": "Pricing Usage Slider",
      "description": "A two-plan pricing section where the second card prices itself from a volume slider, the figure spinning with Number Flow as you drag while the track fills behind the handle.",
      "files": [
        {
          "path": "components/tweenui/pricing-usage-slider.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "pricing-usage-slider-demo",
      "type": "registry:example",
      "title": "Pricing Usage Slider Demo",
      "description": "Usage examples for Pricing Usage Slider.",
      "files": [
        {
          "path": "examples/pricing-usage-slider-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/pricing-usage-slider-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "grid-cascade",
      "type": "registry:block",
      "title": "Grid Cascade",
      "description": "A three-up testimonial grid that pages a whole set at a time — the current cards drop away on a stagger, then the next set cascades in from above, so the two never overlap mid-flight.",
      "files": [
        {
          "path": "components/tweenui/grid-cascade.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "grid-cascade-demo",
      "type": "registry:example",
      "title": "Grid Cascade Demo",
      "description": "Usage examples for Grid Cascade.",
      "files": [
        {
          "path": "examples/grid-cascade-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/grid-cascade-demo-2.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/grid-cascade-demo-3.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "cube-roll-item",
      "type": "registry:block",
      "title": "Cube Roll Item",
      "description": "A numbered section index where each row is a 3D drum that rolls a quarter turn onto a filled face on hover. The roll follows the pointer — in from the top rolls down, out through the bottom keeps rolling down — while the rules draw in on load.",
      "files": [
        {
          "path": "components/tweenui/cube-roll-item.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "cube-roll-item-demo",
      "type": "registry:example",
      "title": "Cube Roll Item Demo",
      "description": "Usage examples for Cube Roll Item.",
      "files": [
        {
          "path": "examples/cube-roll-item-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/cube-roll-item-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "shutter-slider",
      "type": "registry:block",
      "title": "Shutter Slider",
      "description": "An autoplaying feature slider. Each image opens through vertical slats that alternate from the top and bottom, the headline letters roll in like drum faces, copy lines rise through masks and the caption pulls into focus — all mirrored when you travel back.",
      "files": [
        {
          "path": "components/tweenui/shutter-slider.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "shutter-slider-demo",
      "type": "registry:example",
      "title": "Shutter Slider Demo",
      "description": "Usage examples for Shutter Slider.",
      "files": [
        {
          "path": "examples/shutter-slider-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/shutter-slider-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    },
    {
      "name": "testimonial-reel-focus",
      "type": "registry:block",
      "title": "Testimonial Reel Focus",
      "description": "A reel of testimonial cards wider than the window, run sideways by vertical page scroll from inside a sticky stage. Each card rises as it crosses in, so scrolling sends a swell along the row; a tick strip reads the run back like a scrubber, and hovering a card pulls it into focus while the rest of the row dims and blurs behind it.",
      "files": [
        {
          "path": "components/tweenui/testimonial-reel-focus.tsx",
          "type": "registry:component"
        }
      ]
    },
    {
      "name": "testimonial-reel-focus-demo",
      "type": "registry:example",
      "title": "Testimonial Reel Focus Demo",
      "description": "Usage examples for Testimonial Reel Focus.",
      "files": [
        {
          "path": "examples/testimonial-reel-focus-demo.tsx",
          "type": "registry:example"
        },
        {
          "path": "examples/testimonial-reel-focus-demo-2.tsx",
          "type": "registry:example"
        }
      ]
    }
  ]
}