{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "textlab",
  "homepage": "https://textlab.dev",
  "items": [
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "text-fx",
      "type": "registry:lib",
      "title": "Text fx",
      "description": "Shared Textlab utilities: motion tokens, text splitting, triggers, frame loop, pointer and line detection.",
      "dependencies": [
        "motion@^12.38.0"
      ],
      "docs": "Import the tokens once in your root layout: import \"@/components/textlab/tokens.css\";",
      "files": [
        {
          "path": "registry/textlab/lib/a11y.tsx",
          "type": "registry:lib",
          "target": "@components/textlab/lib/a11y.tsx"
        },
        {
          "path": "registry/textlab/lib/canvas-text.tsx",
          "type": "registry:lib",
          "target": "@components/textlab/lib/canvas-text.tsx"
        },
        {
          "path": "registry/textlab/lib/draw.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/draw.ts"
        },
        {
          "path": "registry/textlab/lib/format.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/format.ts"
        },
        {
          "path": "registry/textlab/lib/index.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/index.ts"
        },
        {
          "path": "registry/textlab/lib/letters.tsx",
          "type": "registry:lib",
          "target": "@components/textlab/lib/letters.tsx"
        },
        {
          "path": "registry/textlab/lib/math.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/math.ts"
        },
        {
          "path": "registry/textlab/lib/motion-tokens.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/motion-tokens.ts"
        },
        {
          "path": "registry/textlab/lib/noise.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/noise.ts"
        },
        {
          "path": "registry/textlab/lib/physics.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/physics.ts"
        },
        {
          "path": "registry/textlab/lib/raster.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/raster.ts"
        },
        {
          "path": "registry/textlab/lib/reveal.tsx",
          "type": "registry:lib",
          "target": "@components/textlab/lib/reveal.tsx"
        },
        {
          "path": "registry/textlab/lib/rough.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/rough.ts"
        },
        {
          "path": "registry/textlab/lib/scramble.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/scramble.ts"
        },
        {
          "path": "registry/textlab/lib/split.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/split.ts"
        },
        {
          "path": "registry/textlab/lib/use-frame.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-frame.ts"
        },
        {
          "path": "registry/textlab/lib/use-hydrated.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-hydrated.ts"
        },
        {
          "path": "registry/textlab/lib/use-letter-boxes.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-letter-boxes.ts"
        },
        {
          "path": "registry/textlab/lib/use-pointer-vars.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-pointer-vars.ts"
        },
        {
          "path": "registry/textlab/lib/use-pointer.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-pointer.ts"
        },
        {
          "path": "registry/textlab/lib/use-reduced.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-reduced.ts"
        },
        {
          "path": "registry/textlab/lib/use-scroll-velocity.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-scroll-velocity.ts"
        },
        {
          "path": "registry/textlab/lib/use-split-lines.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-split-lines.ts"
        },
        {
          "path": "registry/textlab/lib/use-svg-id.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-svg-id.ts"
        },
        {
          "path": "registry/textlab/lib/use-trigger.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/use-trigger.ts"
        },
        {
          "path": "registry/textlab/lib/webgl.ts",
          "type": "registry:lib",
          "target": "@components/textlab/lib/webgl.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "text-fx-tokens",
      "type": "registry:file",
      "title": "Text fx tokens",
      "description": "Color, type and motion tokens for Textlab, with light and dark themes and the reduced-motion fallback.",
      "docs": "Import once in your root layout: import \"@/components/textlab/tokens.css\";",
      "files": [
        {
          "path": "registry/textlab/tokens.css",
          "type": "registry:file",
          "target": "@components/textlab/tokens.css"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "blur-reveal",
      "type": "registry:ui",
      "title": "Blur reveal",
      "description": "Words sharpen into focus.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/blur-reveal",
      "meta": {
        "variants": [
          "word",
          "char",
          "line"
        ],
        "docs": "https://textlab.dev/components/blur-reveal",
        "markdown": "https://textlab.dev/components/blur-reveal.md",
        "keywords": [
          "blur",
          "focus",
          "fade",
          "in view",
          "heading"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/blur-reveal/blur-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/blur-reveal/blur-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "word-reveal",
      "type": "registry:ui",
      "title": "Word reveal",
      "description": "Words rise out of a clip.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/word-reveal",
      "meta": {
        "variants": [
          "rise",
          "fall",
          "scale"
        ],
        "docs": "https://textlab.dev/components/word-reveal",
        "markdown": "https://textlab.dev/components/word-reveal.md",
        "keywords": [
          "word",
          "rise",
          "clip",
          "mask",
          "heading",
          "stagger"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/word-reveal/word-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/word-reveal/word-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "line-reveal",
      "type": "registry:ui",
      "title": "Line reveal",
      "description": "Lines lift in, re-measured on resize.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/line-reveal",
      "meta": {
        "variants": [
          "rise",
          "mask",
          "tilt"
        ],
        "docs": "https://textlab.dev/components/line-reveal",
        "markdown": "https://textlab.dev/components/line-reveal.md",
        "keywords": [
          "line",
          "paragraph",
          "resize",
          "wrap",
          "mask",
          "tilt"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/line-reveal/line-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/line-reveal/line-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "char-reveal",
      "type": "registry:ui",
      "title": "Character reveal",
      "description": "Letters arrive one at a time.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/char-reveal",
      "meta": {
        "variants": [
          "fade",
          "drop",
          "spin",
          "scale"
        ],
        "docs": "https://textlab.dev/components/char-reveal",
        "markdown": "https://textlab.dev/components/char-reveal.md",
        "keywords": [
          "character",
          "letter",
          "stagger",
          "drop",
          "spin",
          "pop"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/char-reveal/char-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/char-reveal/char-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "wipe-reveal",
      "type": "registry:ui",
      "title": "Wipe reveal",
      "description": "A soft edge uncovers the line.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/wipe-reveal",
      "meta": {
        "variants": [
          "left",
          "right",
          "center",
          "diagonal"
        ],
        "docs": "https://textlab.dev/components/wipe-reveal",
        "markdown": "https://textlab.dev/components/wipe-reveal.md",
        "keywords": [
          "wipe",
          "mask",
          "sweep",
          "unveil",
          "gradient"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/wipe-reveal/wipe-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/wipe-reveal/wipe-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "in-view-title",
      "type": "registry:ui",
      "title": "In-view title",
      "description": "Bring a section title in as it scrolls into view.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json",
        "https://textlab.dev/r/blur-reveal.json",
        "https://textlab.dev/r/word-reveal.json",
        "https://textlab.dev/r/line-reveal.json",
        "https://textlab.dev/r/wipe-reveal.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/in-view-title",
      "meta": {
        "variants": [
          "blur",
          "words",
          "lines",
          "wipe"
        ],
        "docs": "https://textlab.dev/components/in-view-title",
        "markdown": "https://textlab.dev/components/in-view-title.md",
        "keywords": [
          "in view",
          "scroll",
          "section title",
          "heading",
          "reveal on scroll"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/in-view-title/in-view-title.tsx",
          "type": "registry:component",
          "target": "@components/textlab/in-view-title/in-view-title.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-text",
      "type": "registry:ui",
      "title": "Split text",
      "description": "Stagger anything by chars, words or lines.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/split-text",
      "meta": {
        "variants": [
          "words",
          "chars",
          "lines"
        ],
        "docs": "https://textlab.dev/components/split-text",
        "markdown": "https://textlab.dev/components/split-text.md",
        "keywords": [
          "split",
          "stagger",
          "chars",
          "words",
          "lines",
          "splittext"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/split-text/split-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/split-text/split-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tracking-reveal",
      "type": "registry:ui",
      "title": "Tracking reveal",
      "description": "Letter spacing breathes open as it appears.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/tracking-reveal",
      "meta": {
        "variants": [
          "open",
          "close"
        ],
        "docs": "https://textlab.dev/components/tracking-reveal",
        "markdown": "https://textlab.dev/components/tracking-reveal.md",
        "keywords": [
          "tracking",
          "letter spacing",
          "kerning",
          "luxury",
          "breathe"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/tracking-reveal/tracking-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/tracking-reveal/tracking-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "slice-reveal",
      "type": "registry:ui",
      "title": "Slice reveal",
      "description": "The title arrives in offset horizontal slices.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/slice-reveal",
      "meta": {
        "variants": [
          "5",
          "3",
          "8"
        ],
        "docs": "https://textlab.dev/components/slice-reveal",
        "markdown": "https://textlab.dev/components/slice-reveal.md",
        "keywords": [
          "slice",
          "stripes",
          "offset",
          "print",
          "registration",
          "poster"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/slice-reveal/slice-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/slice-reveal/slice-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "focus-pull",
      "type": "registry:ui",
      "title": "Focus pull",
      "description": "Focus racks from the center letter outward.",
      "categories": [
        "text",
        "reveal"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/focus-pull",
      "meta": {
        "variants": [
          "center",
          "start",
          "end"
        ],
        "docs": "https://textlab.dev/components/focus-pull",
        "markdown": "https://textlab.dev/components/focus-pull.md",
        "keywords": [
          "focus",
          "rack focus",
          "lens",
          "blur",
          "cinematic"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/focus-pull/focus-pull.tsx",
          "type": "registry:component",
          "target": "@components/textlab/focus-pull/focus-pull.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "rolling-number",
      "type": "registry:ui",
      "title": "Rolling number",
      "description": "Each digit rolls to its new value.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/rolling-number",
      "meta": {
        "variants": [
          "shortest",
          "up",
          "down"
        ],
        "docs": "https://textlab.dev/components/rolling-number",
        "markdown": "https://textlab.dev/components/rolling-number.md",
        "keywords": [
          "number",
          "counter",
          "digits",
          "roll",
          "slot",
          "animated number",
          "ticker"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/rolling-number/rolling-number.tsx",
          "type": "registry:component",
          "target": "@components/textlab/rolling-number/rolling-number.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "odometer",
      "type": "registry:ui",
      "title": "Odometer",
      "description": "A mechanical wheel that spins past every digit.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/odometer",
      "meta": {
        "variants": [
          "mechanical",
          "smooth"
        ],
        "docs": "https://textlab.dev/components/odometer",
        "markdown": "https://textlab.dev/components/odometer.md",
        "keywords": [
          "odometer",
          "counter",
          "mechanical",
          "wheel",
          "mileage",
          "meter"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/odometer/odometer.tsx",
          "type": "registry:component",
          "target": "@components/textlab/odometer/odometer.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "split-flap",
      "type": "registry:ui",
      "title": "Split-flap board",
      "description": "An airport board that flips to the next word.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/split-flap",
      "meta": {
        "variants": [
          "dark",
          "light",
          "mini"
        ],
        "docs": "https://textlab.dev/components/split-flap",
        "markdown": "https://textlab.dev/components/split-flap.md",
        "keywords": [
          "split flap",
          "solari",
          "airport",
          "departures",
          "board",
          "flip"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/split-flap/split-flap.tsx",
          "type": "registry:component",
          "target": "@components/textlab/split-flap/split-flap.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "price-ticker",
      "type": "registry:ui",
      "title": "Price ticker",
      "description": "Prices tick with a flash of up or down.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json",
        "https://textlab.dev/r/rolling-number.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/price-ticker",
      "meta": {
        "variants": [
          "currency",
          "percent",
          "compact"
        ],
        "docs": "https://textlab.dev/components/price-ticker",
        "markdown": "https://textlab.dev/components/price-ticker.md",
        "keywords": [
          "price",
          "stock",
          "ticker",
          "currency",
          "crypto",
          "delta",
          "up down"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/price-ticker/price-ticker.tsx",
          "type": "registry:component",
          "target": "@components/textlab/price-ticker/price-ticker.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "countdown",
      "type": "registry:ui",
      "title": "Countdown",
      "description": "Count down to a moment, second by second.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json",
        "https://textlab.dev/r/rolling-number.json",
        "https://textlab.dev/r/split-flap.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/countdown",
      "meta": {
        "variants": [
          "flip",
          "roll",
          "plain"
        ],
        "docs": "https://textlab.dev/components/countdown",
        "markdown": "https://textlab.dev/components/countdown.md",
        "keywords": [
          "countdown",
          "timer",
          "launch",
          "clock",
          "days hours minutes seconds"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/countdown/countdown.tsx",
          "type": "registry:component",
          "target": "@components/textlab/countdown/countdown.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "stat-reveal",
      "type": "registry:ui",
      "title": "Stat reveal",
      "description": "A stat counts up when it scrolls in.",
      "categories": [
        "text",
        "numbers"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/stat-reveal",
      "meta": {
        "variants": [
          "count",
          "spring",
          "scramble"
        ],
        "docs": "https://textlab.dev/components/stat-reveal",
        "markdown": "https://textlab.dev/components/stat-reveal.md",
        "keywords": [
          "stat",
          "count up",
          "counter",
          "metric",
          "kpi",
          "number reveal"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/stat-reveal/stat-reveal.tsx",
          "type": "registry:component",
          "target": "@components/textlab/stat-reveal/stat-reveal.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "typewriter",
      "type": "registry:ui",
      "title": "Typewriter",
      "description": "Types, deletes and retypes with a caret.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/typewriter",
      "meta": {
        "variants": [
          "bar",
          "block",
          "underscore"
        ],
        "docs": "https://textlab.dev/components/typewriter",
        "markdown": "https://textlab.dev/components/typewriter.md",
        "keywords": [
          "typewriter",
          "typing",
          "caret",
          "cursor",
          "type and delete",
          "terminal"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/typewriter/typewriter.tsx",
          "type": "registry:component",
          "target": "@components/textlab/typewriter/typewriter.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scramble-text",
      "type": "registry:ui",
      "title": "Scramble text",
      "description": "Letters decode into place.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/scramble-text",
      "meta": {
        "variants": [
          "random",
          "symbols",
          "binary"
        ],
        "docs": "https://textlab.dev/components/scramble-text",
        "markdown": "https://textlab.dev/components/scramble-text.md",
        "keywords": [
          "scramble",
          "decrypt",
          "decode",
          "hacker",
          "shuffle",
          "cipher"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/scramble-text/scramble-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/scramble-text/scramble-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "hover-scramble",
      "type": "registry:ui",
      "title": "Hover scramble",
      "description": "Scrambles on hover, settles on leave.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/hover-scramble",
      "meta": {
        "variants": [
          "sweep",
          "all"
        ],
        "docs": "https://textlab.dev/components/hover-scramble",
        "markdown": "https://textlab.dev/components/hover-scramble.md",
        "keywords": [
          "hover",
          "scramble",
          "nav link",
          "button",
          "glitch hover"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/hover-scramble/hover-scramble.tsx",
          "type": "registry:component",
          "target": "@components/textlab/hover-scramble/hover-scramble.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "matrix-decode",
      "type": "registry:ui",
      "title": "Matrix decode",
      "description": "Glyph rain resolves into the word.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/matrix-decode",
      "meta": {
        "variants": [
          "rain",
          "flicker"
        ],
        "docs": "https://textlab.dev/components/matrix-decode",
        "markdown": "https://textlab.dev/components/matrix-decode.md",
        "keywords": [
          "matrix",
          "code rain",
          "decode",
          "hacker",
          "katakana",
          "terminal"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/matrix-decode/matrix-decode.tsx",
          "type": "registry:component",
          "target": "@components/textlab/matrix-decode/matrix-decode.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "text-morph",
      "type": "registry:ui",
      "title": "Text morph",
      "description": "One word turns into the next, letter by letter.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/text-morph",
      "meta": {
        "variants": [
          "slide",
          "blur",
          "flip"
        ],
        "docs": "https://textlab.dev/components/text-morph",
        "markdown": "https://textlab.dev/components/text-morph.md",
        "keywords": [
          "morph",
          "label",
          "flip",
          "layout animation",
          "button state",
          "text transition"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/text-morph/text-morph.tsx",
          "type": "registry:component",
          "target": "@components/textlab/text-morph/text-morph.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "word-rotator",
      "type": "registry:ui",
      "title": "Word rotator",
      "description": "Cycles words while the width follows.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/word-rotator",
      "meta": {
        "variants": [
          "slide",
          "blur",
          "flip"
        ],
        "docs": "https://textlab.dev/components/word-rotator",
        "markdown": "https://textlab.dev/components/word-rotator.md",
        "keywords": [
          "rotating words",
          "text rotate",
          "cycle",
          "hero",
          "headline"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/word-rotator/word-rotator.tsx",
          "type": "registry:component",
          "target": "@components/textlab/word-rotator/word-rotator.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "caret-morph",
      "type": "registry:ui",
      "title": "Caret morph",
      "description": "A caret that glides between words and reshapes to fit.",
      "categories": [
        "text",
        "typing"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/caret-morph",
      "meta": {
        "variants": [
          "highlight",
          "bar",
          "block"
        ],
        "docs": "https://textlab.dev/components/caret-morph",
        "markdown": "https://textlab.dev/components/caret-morph.md",
        "keywords": [
          "caret",
          "cursor",
          "selection",
          "highlight",
          "editor",
          "text cursor"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/caret-morph/caret-morph.tsx",
          "type": "registry:component",
          "target": "@components/textlab/caret-morph/caret-morph.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "gradient-text",
      "type": "registry:ui",
      "title": "Gradient text",
      "description": "Color flows slowly through the letters.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/gradient-text",
      "meta": {
        "variants": [
          "flow",
          "conic",
          "spectrum"
        ],
        "docs": "https://textlab.dev/components/gradient-text",
        "markdown": "https://textlab.dev/components/gradient-text.md",
        "keywords": [
          "gradient",
          "animated gradient",
          "rainbow",
          "conic",
          "background clip text"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/gradient-text/gradient-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/gradient-text/gradient-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shimmer-text",
      "type": "registry:ui",
      "title": "Shimmer text",
      "description": "A calm light passes across the words.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/shimmer-text",
      "meta": {
        "variants": [
          "subtle",
          "bright",
          "rainbow"
        ],
        "docs": "https://textlab.dev/components/shimmer-text",
        "markdown": "https://textlab.dev/components/shimmer-text.md",
        "keywords": [
          "shimmer",
          "loading text",
          "skeleton",
          "thinking",
          "sheen",
          "ai loading"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/shimmer-text/shimmer-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/shimmer-text/shimmer-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "neon-text",
      "type": "registry:ui",
      "title": "Neon sign",
      "description": "A neon sign that hums and flickers on.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/neon-text",
      "meta": {
        "variants": [
          "flicker",
          "steady",
          "pulse"
        ],
        "docs": "https://textlab.dev/components/neon-text",
        "markdown": "https://textlab.dev/components/neon-text.md",
        "keywords": [
          "neon",
          "glow",
          "flicker",
          "sign",
          "retro",
          "synthwave"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/neon-text/neon-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/neon-text/neon-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "aurora-text",
      "type": "registry:ui",
      "title": "Aurora text",
      "description": "Northern lights drift inside the letters.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/aurora-text",
      "meta": {
        "variants": [
          "polar",
          "ember",
          "mint"
        ],
        "docs": "https://textlab.dev/components/aurora-text",
        "markdown": "https://textlab.dev/components/aurora-text.md",
        "keywords": [
          "aurora",
          "northern lights",
          "gradient",
          "mesh gradient",
          "ambient"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/aurora-text/aurora-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/aurora-text/aurora-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "holo-text",
      "type": "registry:ui",
      "title": "Holographic text",
      "description": "Foil that shifts color as you move across it.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/holo-text",
      "meta": {
        "variants": [
          "holo",
          "foil",
          "chrome"
        ],
        "docs": "https://textlab.dev/components/holo-text",
        "markdown": "https://textlab.dev/components/holo-text.md",
        "keywords": [
          "holographic",
          "foil",
          "iridescent",
          "chrome",
          "metallic",
          "premium"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/holo-text/holo-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/holo-text/holo-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "spotlight-text",
      "type": "registry:ui",
      "title": "Spotlight text",
      "description": "A light follows the cursor and reveals the copy.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/spotlight-text",
      "meta": {
        "variants": [
          "reveal",
          "glow",
          "outline"
        ],
        "docs": "https://textlab.dev/components/spotlight-text",
        "markdown": "https://textlab.dev/components/spotlight-text.md",
        "keywords": [
          "spotlight",
          "flashlight",
          "torch",
          "cursor reveal",
          "mask",
          "hover light"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/spotlight-text/spotlight-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/spotlight-text/spotlight-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "glass-text",
      "type": "registry:ui",
      "title": "Glass text",
      "description": "Glass letters that bend the scene behind them.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/glass-text",
      "meta": {
        "variants": [
          "clear",
          "frost",
          "tinted"
        ],
        "docs": "https://textlab.dev/components/glass-text",
        "markdown": "https://textlab.dev/components/glass-text.md",
        "keywords": [
          "glass",
          "glassmorphism",
          "frosted",
          "refraction",
          "liquid glass",
          "translucent"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/glass-text/glass-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/glass-text/glass-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "ember-text",
      "type": "registry:ui",
      "title": "Ember text",
      "description": "Letters land hot and cool down to the text color.",
      "categories": [
        "text",
        "light"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/ember-text",
      "meta": {
        "variants": [
          "ember",
          "steel",
          "ice"
        ],
        "docs": "https://textlab.dev/components/ember-text",
        "markdown": "https://textlab.dev/components/ember-text.md",
        "keywords": [
          "ember",
          "fire",
          "hot metal",
          "forge",
          "glow",
          "cooling"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/ember-text/ember-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/ember-text/ember-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "gooey-text",
      "type": "registry:ui",
      "title": "Gooey text",
      "description": "Words melt into each other.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/gooey-text",
      "meta": {
        "variants": [
          "blob",
          "drip"
        ],
        "docs": "https://textlab.dev/components/gooey-text",
        "markdown": "https://textlab.dev/components/gooey-text.md",
        "keywords": [
          "gooey",
          "goo",
          "liquid",
          "metaball",
          "blob",
          "melt"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/gooey-text/gooey-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/gooey-text/gooey-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "liquid-text",
      "type": "registry:ui",
      "title": "Liquid text",
      "description": "Ripples run through the letters under the cursor.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/liquid-text",
      "meta": {
        "variants": [
          "ripple",
          "wave",
          "still"
        ],
        "docs": "https://textlab.dev/components/liquid-text",
        "markdown": "https://textlab.dev/components/liquid-text.md",
        "keywords": [
          "liquid",
          "water",
          "ripple",
          "displacement",
          "turbulence",
          "svg filter"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/liquid-text/liquid-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/liquid-text/liquid-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "ink-bleed",
      "type": "registry:ui",
      "title": "Ink bleed",
      "description": "Text soaks in like ink on paper.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/ink-bleed",
      "meta": {
        "variants": [
          "ink",
          "watercolor",
          "stamp"
        ],
        "docs": "https://textlab.dev/components/ink-bleed",
        "markdown": "https://textlab.dev/components/ink-bleed.md",
        "keywords": [
          "ink",
          "bleed",
          "watercolor",
          "stamp",
          "paper",
          "organic"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/ink-bleed/ink-bleed.tsx",
          "type": "registry:component",
          "target": "@components/textlab/ink-bleed/ink-bleed.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "chromatic-text",
      "type": "registry:ui",
      "title": "Chromatic text",
      "description": "The color channels split and rejoin.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/chromatic-text",
      "meta": {
        "variants": [
          "hover",
          "velocity",
          "pulse"
        ],
        "docs": "https://textlab.dev/components/chromatic-text",
        "markdown": "https://textlab.dev/components/chromatic-text.md",
        "keywords": [
          "chromatic aberration",
          "rgb split",
          "fringe",
          "lens",
          "glitch"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/chromatic-text/chromatic-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/chromatic-text/chromatic-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "glitch-text",
      "type": "registry:ui",
      "title": "Glitch text",
      "description": "A controlled digital glitch on cue.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/glitch-text",
      "meta": {
        "variants": [
          "slice",
          "shift",
          "scan"
        ],
        "docs": "https://textlab.dev/components/glitch-text",
        "markdown": "https://textlab.dev/components/glitch-text.md",
        "keywords": [
          "glitch",
          "rgb split",
          "distortion",
          "cyberpunk",
          "error",
          "vhs"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/glitch-text/glitch-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/glitch-text/glitch-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "heat-haze",
      "type": "registry:ui",
      "title": "Heat haze",
      "description": "A mirage warps the air around the type.",
      "categories": [
        "text",
        "distort"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/heat-haze",
      "meta": {
        "variants": [
          "haze",
          "boil"
        ],
        "docs": "https://textlab.dev/components/heat-haze",
        "markdown": "https://textlab.dev/components/heat-haze.md",
        "keywords": [
          "heat",
          "haze",
          "mirage",
          "shimmer",
          "turbulence",
          "desert"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/heat-haze/heat-haze.tsx",
          "type": "registry:component",
          "target": "@components/textlab/heat-haze/heat-haze.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scroll-fill",
      "type": "registry:ui",
      "title": "Scroll fill",
      "description": "Words light up as you read down the page.",
      "categories": [
        "text",
        "scroll"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/scroll-fill",
      "meta": {
        "variants": [
          "word",
          "char",
          "line"
        ],
        "docs": "https://textlab.dev/components/scroll-fill",
        "markdown": "https://textlab.dev/components/scroll-fill.md",
        "keywords": [
          "scroll",
          "text fill",
          "scroll reveal",
          "highlight on scroll",
          "apple scroll text",
          "reading progress"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/scroll-fill/scroll-fill.tsx",
          "type": "registry:component",
          "target": "@components/textlab/scroll-fill/scroll-fill.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scroll-skew",
      "type": "registry:ui",
      "title": "Scroll skew",
      "description": "Type leans with the speed of your scroll.",
      "categories": [
        "text",
        "scroll"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/scroll-skew",
      "meta": {
        "variants": [
          "skew",
          "stretch"
        ],
        "docs": "https://textlab.dev/components/scroll-skew",
        "markdown": "https://textlab.dev/components/scroll-skew.md",
        "keywords": [
          "scroll velocity",
          "skew on scroll",
          "momentum",
          "stretch",
          "scroll effect"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/scroll-skew/scroll-skew.tsx",
          "type": "registry:component",
          "target": "@components/textlab/scroll-skew/scroll-skew.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "velocity-marquee",
      "type": "registry:ui",
      "title": "Velocity marquee",
      "description": "A marquee that speeds up, slows and reverses with scroll.",
      "categories": [
        "text",
        "scroll"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/velocity-marquee",
      "meta": {
        "variants": [
          "single",
          "double",
          "outline"
        ],
        "docs": "https://textlab.dev/components/velocity-marquee",
        "markdown": "https://textlab.dev/components/velocity-marquee.md",
        "keywords": [
          "marquee",
          "ticker",
          "scroll velocity",
          "infinite scroll text",
          "banner"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/velocity-marquee/velocity-marquee.tsx",
          "type": "registry:component",
          "target": "@components/textlab/velocity-marquee/velocity-marquee.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "scroll-stretch",
      "type": "registry:ui",
      "title": "Scroll stretch",
      "description": "Letters stretch tall as you scroll fast.",
      "categories": [
        "text",
        "scroll"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/scroll-stretch",
      "meta": {
        "variants": [
          "vertical",
          "horizontal"
        ],
        "docs": "https://textlab.dev/components/scroll-stretch",
        "markdown": "https://textlab.dev/components/scroll-stretch.md",
        "keywords": [
          "stretch",
          "scroll velocity",
          "taffy",
          "elastic",
          "squash"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/scroll-stretch/scroll-stretch.tsx",
          "type": "registry:component",
          "target": "@components/textlab/scroll-stretch/scroll-stretch.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "depth-layers",
      "type": "registry:ui",
      "title": "Depth layers",
      "description": "Outline copies drift apart in depth as you scroll.",
      "categories": [
        "text",
        "scroll"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/depth-layers",
      "meta": {
        "variants": [
          "stack",
          "fan"
        ],
        "docs": "https://textlab.dev/components/depth-layers",
        "markdown": "https://textlab.dev/components/depth-layers.md",
        "keywords": [
          "parallax",
          "depth",
          "layers",
          "outline",
          "stack",
          "scroll"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/depth-layers/depth-layers.tsx",
          "type": "registry:component",
          "target": "@components/textlab/depth-layers/depth-layers.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "outline-draw",
      "type": "registry:ui",
      "title": "Outline draw",
      "description": "The outline draws itself, then fills.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/outline-draw",
      "meta": {
        "variants": [
          "draw-fill",
          "draw-only",
          "fill-sweep"
        ],
        "docs": "https://textlab.dev/components/outline-draw",
        "markdown": "https://textlab.dev/components/outline-draw.md",
        "keywords": [
          "outline",
          "stroke",
          "draw",
          "svg text",
          "line drawing",
          "dashoffset"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/outline-draw/outline-draw.tsx",
          "type": "registry:component",
          "target": "@components/textlab/outline-draw/outline-draw.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "signature",
      "type": "registry:ui",
      "title": "Signature",
      "description": "A handwritten signature writes itself.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/signature",
      "meta": {
        "variants": [
          "pen",
          "brush"
        ],
        "docs": "https://textlab.dev/components/signature",
        "markdown": "https://textlab.dev/components/signature.md",
        "keywords": [
          "signature",
          "handwriting",
          "script",
          "autograph",
          "write on",
          "pen"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/signature/signature.tsx",
          "type": "registry:component",
          "target": "@components/textlab/signature/signature.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "marker-highlight",
      "type": "registry:ui",
      "title": "Marker highlight",
      "description": "A highlighter swipes behind the words.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/marker-highlight",
      "meta": {
        "variants": [
          "marker",
          "underline",
          "box"
        ],
        "docs": "https://textlab.dev/components/marker-highlight",
        "markdown": "https://textlab.dev/components/marker-highlight.md",
        "keywords": [
          "highlight",
          "marker",
          "highlighter",
          "mark",
          "emphasis",
          "text highlight"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/marker-highlight/marker-highlight.tsx",
          "type": "registry:component",
          "target": "@components/textlab/marker-highlight/marker-highlight.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "underline-draw",
      "type": "registry:ui",
      "title": "Underline draw",
      "description": "A hand-drawn underline sketches in.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/underline-draw",
      "meta": {
        "variants": [
          "line",
          "wave",
          "scribble"
        ],
        "docs": "https://textlab.dev/components/underline-draw",
        "markdown": "https://textlab.dev/components/underline-draw.md",
        "keywords": [
          "underline",
          "hand drawn",
          "annotation",
          "squiggle",
          "rough notation",
          "emphasis"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/underline-draw/underline-draw.tsx",
          "type": "registry:component",
          "target": "@components/textlab/underline-draw/underline-draw.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "strike-through",
      "type": "registry:ui",
      "title": "Strike-through",
      "description": "Cross out a word and write the new one.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/strike-through",
      "meta": {
        "variants": [
          "replace",
          "line",
          "scribble"
        ],
        "docs": "https://textlab.dev/components/strike-through",
        "markdown": "https://textlab.dev/components/strike-through.md",
        "keywords": [
          "strikethrough",
          "cross out",
          "correction",
          "hand drawn",
          "edit"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/strike-through/strike-through.tsx",
          "type": "registry:component",
          "target": "@components/textlab/strike-through/strike-through.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "circle-annotate",
      "type": "registry:ui",
      "title": "Circle annotate",
      "description": "A pen circles the word that matters.",
      "categories": [
        "text",
        "draw"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/circle-annotate",
      "meta": {
        "variants": [
          "circle",
          "box",
          "bracket"
        ],
        "docs": "https://textlab.dev/components/circle-annotate",
        "markdown": "https://textlab.dev/components/circle-annotate.md",
        "keywords": [
          "circle",
          "annotation",
          "hand drawn",
          "highlight word",
          "rough notation",
          "box"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/circle-annotate/circle-annotate.tsx",
          "type": "registry:component",
          "target": "@components/textlab/circle-annotate/circle-annotate.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "magnetic-text",
      "type": "registry:ui",
      "title": "Magnetic text",
      "description": "Letters lean toward the cursor and spring back.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/magnetic-text",
      "meta": {
        "variants": [
          "attract",
          "repel"
        ],
        "docs": "https://textlab.dev/components/magnetic-text",
        "markdown": "https://textlab.dev/components/magnetic-text.md",
        "keywords": [
          "magnetic",
          "cursor",
          "hover",
          "attract",
          "repel",
          "interactive text"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/magnetic-text/magnetic-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/magnetic-text/magnetic-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "variable-proximity",
      "type": "registry:ui",
      "title": "Variable proximity",
      "description": "Weight and width swell near the cursor.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/variable-proximity",
      "meta": {
        "variants": [
          "weight",
          "width",
          "slant"
        ],
        "docs": "https://textlab.dev/components/variable-proximity",
        "markdown": "https://textlab.dev/components/variable-proximity.md",
        "keywords": [
          "variable font",
          "font weight",
          "proximity",
          "cursor",
          "wght",
          "wdth",
          "roboto flex"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/variable-proximity/variable-proximity.tsx",
          "type": "registry:component",
          "target": "@components/textlab/variable-proximity/variable-proximity.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "cursor-trail",
      "type": "registry:ui",
      "title": "Cursor trail",
      "description": "A word trails behind the cursor letter by letter.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/cursor-trail",
      "meta": {
        "variants": [
          "chain",
          "scatter"
        ],
        "docs": "https://textlab.dev/components/cursor-trail",
        "markdown": "https://textlab.dev/components/cursor-trail.md",
        "keywords": [
          "cursor trail",
          "mouse trail",
          "follow cursor",
          "snake",
          "interactive"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/cursor-trail/cursor-trail.tsx",
          "type": "registry:component",
          "target": "@components/textlab/cursor-trail/cursor-trail.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "flip-roll",
      "type": "registry:ui",
      "title": "Flip roll",
      "description": "Hover and the label rolls up into a fresh copy.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/flip-roll",
      "meta": {
        "variants": [
          "stagger",
          "up",
          "down"
        ],
        "docs": "https://textlab.dev/components/flip-roll",
        "markdown": "https://textlab.dev/components/flip-roll.md",
        "keywords": [
          "roll",
          "flip",
          "hover",
          "button text",
          "nav link",
          "text swap"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/flip-roll/flip-roll.tsx",
          "type": "registry:component",
          "target": "@components/textlab/flip-roll/flip-roll.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "tilt-text",
      "type": "registry:ui",
      "title": "Tilt text",
      "description": "Extruded type tilts toward the pointer.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/tilt-text",
      "meta": {
        "variants": [
          "extrude",
          "float",
          "shadow"
        ],
        "docs": "https://textlab.dev/components/tilt-text",
        "markdown": "https://textlab.dev/components/tilt-text.md",
        "keywords": [
          "3d text",
          "tilt",
          "extrude",
          "perspective",
          "parallax",
          "hover"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/tilt-text/tilt-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/tilt-text/tilt-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "extrude-text",
      "type": "registry:ui",
      "title": "Extrude text",
      "description": "Depth grows from the letters on hover.",
      "categories": [
        "text",
        "cursor"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/extrude-text",
      "meta": {
        "variants": [
          "block",
          "long-shadow",
          "stack"
        ],
        "docs": "https://textlab.dev/components/extrude-text",
        "markdown": "https://textlab.dev/components/extrude-text.md",
        "keywords": [
          "3d text",
          "extrude",
          "long shadow",
          "retro",
          "text shadow",
          "block letters"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/extrude-text/extrude-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/extrude-text/extrude-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "letter-drop",
      "type": "registry:ui",
      "title": "Letter drop",
      "description": "Letters fall, bounce and settle on the floor.",
      "categories": [
        "text",
        "physics"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/letter-drop",
      "meta": {
        "variants": [
          "drop",
          "pile",
          "toss"
        ],
        "docs": "https://textlab.dev/components/letter-drop",
        "markdown": "https://textlab.dev/components/letter-drop.md",
        "keywords": [
          "physics",
          "gravity",
          "bounce",
          "drop",
          "falling letters",
          "toss"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/letter-drop/letter-drop.tsx",
          "type": "registry:component",
          "target": "@components/textlab/letter-drop/letter-drop.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "elastic-text",
      "type": "registry:ui",
      "title": "Elastic text",
      "description": "Drag a letter and the word stretches like rubber.",
      "categories": [
        "text",
        "physics"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/elastic-text",
      "meta": {
        "variants": [
          "band",
          "sling"
        ],
        "docs": "https://textlab.dev/components/elastic-text",
        "markdown": "https://textlab.dev/components/elastic-text.md",
        "keywords": [
          "elastic",
          "rubber band",
          "drag",
          "stretch",
          "spring",
          "physics"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/elastic-text/elastic-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/elastic-text/elastic-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "jelly-text",
      "type": "registry:ui",
      "title": "Jelly text",
      "description": "Letters wobble like jelly when touched.",
      "categories": [
        "text",
        "physics"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/jelly-text",
      "meta": {
        "variants": [
          "squash",
          "wobble"
        ],
        "docs": "https://textlab.dev/components/jelly-text",
        "markdown": "https://textlab.dev/components/jelly-text.md",
        "keywords": [
          "jelly",
          "wobble",
          "squash and stretch",
          "springy",
          "hover",
          "bouncy"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/jelly-text/jelly-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/jelly-text/jelly-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "wave-text",
      "type": "registry:ui",
      "title": "Wave text",
      "description": "A sine wave runs through the line.",
      "categories": [
        "text",
        "physics"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/wave-text",
      "meta": {
        "variants": [
          "wave",
          "bounce",
          "float"
        ],
        "docs": "https://textlab.dev/components/wave-text",
        "markdown": "https://textlab.dev/components/wave-text.md",
        "keywords": [
          "wave",
          "bounce",
          "wavy text",
          "sine",
          "float",
          "loop"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/wave-text/wave-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/wave-text/wave-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "breathing-text",
      "type": "registry:ui",
      "title": "Breathing text",
      "description": "Weight breathes in and out over time.",
      "categories": [
        "text",
        "physics"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/breathing-text",
      "meta": {
        "variants": [
          "breathe",
          "heartbeat"
        ],
        "docs": "https://textlab.dev/components/breathing-text",
        "markdown": "https://textlab.dev/components/breathing-text.md",
        "keywords": [
          "variable font",
          "breathing",
          "weight",
          "pulse",
          "heartbeat",
          "calm"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/breathing-text/breathing-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/breathing-text/breathing-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "path-text",
      "type": "registry:ui",
      "title": "Path text",
      "description": "Text travels along a wave, circle or spiral.",
      "categories": [
        "text",
        "path"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/path-text",
      "meta": {
        "variants": [
          "wave",
          "circle",
          "spiral"
        ],
        "docs": "https://textlab.dev/components/path-text",
        "markdown": "https://textlab.dev/components/path-text.md",
        "keywords": [
          "text on path",
          "circular text",
          "badge",
          "spiral",
          "svg textpath",
          "rotating text"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/path-text/path-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/path-text/path-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "ascii-text",
      "type": "registry:ui",
      "title": "ASCII text",
      "description": "The title rendered in ASCII glyphs that ripple.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/ascii-text",
      "meta": {
        "variants": [
          "classic",
          "blocks",
          "braille"
        ],
        "docs": "https://textlab.dev/components/ascii-text",
        "markdown": "https://textlab.dev/components/ascii-text.md",
        "keywords": [
          "ascii",
          "ascii art",
          "braille",
          "terminal",
          "canvas text",
          "retro"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/ascii-text/ascii-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/ascii-text/ascii-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "dither-text",
      "type": "registry:ui",
      "title": "Dither text",
      "description": "Ordered dither and halftone dots form the type.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/dither-text",
      "meta": {
        "variants": [
          "dither",
          "halftone"
        ],
        "docs": "https://textlab.dev/components/dither-text",
        "markdown": "https://textlab.dev/components/dither-text.md",
        "keywords": [
          "dither",
          "halftone",
          "bayer",
          "print",
          "pixel",
          "risograph"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/dither-text/dither-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/dither-text/dither-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "pixel-sort",
      "type": "registry:ui",
      "title": "Pixel sort",
      "description": "Rows sort into place like a glitch artwork.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/pixel-sort",
      "meta": {
        "variants": [
          "smear",
          "sort"
        ],
        "docs": "https://textlab.dev/components/pixel-sort",
        "markdown": "https://textlab.dev/components/pixel-sort.md",
        "keywords": [
          "pixel sort",
          "glitch art",
          "datamosh",
          "smear",
          "canvas",
          "experimental"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/pixel-sort/pixel-sort.tsx",
          "type": "registry:component",
          "target": "@components/textlab/pixel-sort/pixel-sort.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "particle-text",
      "type": "registry:ui",
      "title": "Particle text",
      "description": "Particles gather into letters and scatter on touch.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/particle-text",
      "meta": {
        "variants": [
          "dust",
          "sand",
          "stars"
        ],
        "docs": "https://textlab.dev/components/particle-text",
        "markdown": "https://textlab.dev/components/particle-text.md",
        "keywords": [
          "particles",
          "particle text",
          "canvas",
          "interactive",
          "stardust",
          "sand"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/particle-text/particle-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/particle-text/particle-text.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "shader-ripple",
      "type": "registry:ui",
      "title": "Shader ripple",
      "description": "A WebGL ripple bends the title under the pointer.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/shader-ripple",
      "meta": {
        "variants": [
          "ripple",
          "lens"
        ],
        "docs": "https://textlab.dev/components/shader-ripple",
        "markdown": "https://textlab.dev/components/shader-ripple.md",
        "keywords": [
          "webgl",
          "shader",
          "ripple",
          "lens",
          "distortion",
          "glsl"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/shader-ripple/shader-ripple.tsx",
          "type": "registry:component",
          "target": "@components/textlab/shader-ripple/shader-ripple.tsx"
        },
        {
          "path": "registry/textlab/shader-ripple/gl.ts",
          "type": "registry:component",
          "target": "@components/textlab/shader-ripple/gl.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "noise-dissolve",
      "type": "registry:ui",
      "title": "Noise dissolve",
      "description": "The title forms from noise and dissolves back into it.",
      "categories": [
        "text",
        "pixel"
      ],
      "dependencies": [],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/noise-dissolve",
      "meta": {
        "variants": [
          "burn",
          "dissolve"
        ],
        "docs": "https://textlab.dev/components/noise-dissolve",
        "markdown": "https://textlab.dev/components/noise-dissolve.md",
        "keywords": [
          "dissolve",
          "burn",
          "webgl",
          "shader",
          "noise",
          "disintegrate"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/noise-dissolve/noise-dissolve.tsx",
          "type": "registry:component",
          "target": "@components/textlab/noise-dissolve/noise-dissolve.tsx"
        },
        {
          "path": "registry/textlab/noise-dissolve/gl.ts",
          "type": "registry:component",
          "target": "@components/textlab/noise-dissolve/gl.ts"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "kinetic-beat",
      "type": "registry:ui",
      "title": "Kinetic beat",
      "description": "Words hit on a beat.",
      "categories": [
        "text",
        "kinetic"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/kinetic-beat",
      "meta": {
        "variants": [
          "pop",
          "slam",
          "bounce"
        ],
        "docs": "https://textlab.dev/components/kinetic-beat",
        "markdown": "https://textlab.dev/components/kinetic-beat.md",
        "keywords": [
          "kinetic typography",
          "beat",
          "bpm",
          "lyric",
          "slogan",
          "music"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/kinetic-beat/kinetic-beat.tsx",
          "type": "registry:component",
          "target": "@components/textlab/kinetic-beat/kinetic-beat.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "word-sequence",
      "type": "registry:ui",
      "title": "Word sequence",
      "description": "A sentence choreographed word by word.",
      "categories": [
        "text",
        "kinetic"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/word-sequence",
      "meta": {
        "variants": [
          "stack",
          "stage",
          "cut"
        ],
        "docs": "https://textlab.dev/components/word-sequence",
        "markdown": "https://textlab.dev/components/word-sequence.md",
        "keywords": [
          "kinetic typography",
          "sequence",
          "title card",
          "storytelling",
          "word by word"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/word-sequence/word-sequence.tsx",
          "type": "registry:component",
          "target": "@components/textlab/word-sequence/word-sequence.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "read-along",
      "type": "registry:ui",
      "title": "Read along",
      "description": "A highlight follows the reading, word by word.",
      "categories": [
        "text",
        "kinetic"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/read-along",
      "meta": {
        "variants": [
          "highlight",
          "karaoke"
        ],
        "docs": "https://textlab.dev/components/read-along",
        "markdown": "https://textlab.dev/components/read-along.md",
        "keywords": [
          "karaoke",
          "read along",
          "highlight",
          "text to speech",
          "captions",
          "follow along"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/read-along/read-along.tsx",
          "type": "registry:component",
          "target": "@components/textlab/read-along/read-along.tsx"
        }
      ]
    },
    {
      "$schema": "https://ui.shadcn.com/schema/registry-item.json",
      "name": "echo-text",
      "type": "registry:ui",
      "title": "Echo text",
      "description": "Every change leaves fading echoes behind.",
      "categories": [
        "text",
        "kinetic"
      ],
      "dependencies": [
        "motion@^12.38.0"
      ],
      "registryDependencies": [
        "https://textlab.dev/r/text-fx.json",
        "https://textlab.dev/r/text-fx-tokens.json"
      ],
      "docs": "Docs and live preview: https://textlab.dev/components/echo-text",
      "meta": {
        "variants": [
          "trail",
          "ghost"
        ],
        "docs": "https://textlab.dev/components/echo-text",
        "markdown": "https://textlab.dev/components/echo-text.md",
        "keywords": [
          "echo",
          "ghost",
          "trail",
          "afterimage",
          "text change",
          "transition"
        ]
      },
      "files": [
        {
          "path": "registry/textlab/echo-text/echo-text.tsx",
          "type": "registry:component",
          "target": "@components/textlab/echo-text/echo-text.tsx"
        }
      ]
    }
  ]
}
