{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "iris",
  "homepage": "https://irisui.dev",
  "items": [
    {
      "name": "foundation",
      "type": "registry:style",
      "title": "Iris UI foundation",
      "description": "Iris UI's tokens (colour, surface, ink, line, radius, shadow, spacing, type) in light and dark, the Tailwind v4 theme that maps them to utilities, motion variables, keyboard focus rules, keyframes and the Inter, Geist and JetBrains Mono fonts. Requires Tailwind v4: import components/iris/styles/foundation.css after tailwindcss. strict.css (optional, imported before foundation.css) removes Tailwind's default palette, shadows and radii.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "use-today",
      "type": "registry:lib",
      "title": "Today hook",
      "description": "The current date, stable between server and client renders.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "use-copy-feedback",
      "type": "registry:lib",
      "title": "Copy feedback hook",
      "description": "Copies text and reports a short-lived copied state.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "provider",
      "type": "registry:lib",
      "title": "Link and image provider",
      "description": "IrisProvider: lets an app swap the link and image elements Iris UI components render, such as next/link and next/image.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "media",
      "type": "registry:lib",
      "title": "Demo media",
      "description": "Sample people and photos the demos use, as initials and flat placeholder shapes.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "motion-tokens",
      "type": "registry:lib",
      "title": "Motion tokens",
      "description": "The shared motion presets (durations, easings, springs, staggers) every animated Iris UI component reads.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "utils",
      "type": "registry:lib",
      "title": "Class names",
      "description": "Cn(): clsx plus tailwind-merge, taught Iris UI's theme names.",
      "categories": [
        "foundation"
      ]
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "A clear, responsive action with quiet secondary states.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "action-button",
      "type": "registry:ui",
      "title": "Action button",
      "description": "A compact button for frequent toolbar actions.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "split-button",
      "type": "registry:ui",
      "title": "Split button",
      "description": "A primary action with a menu of nearby alternatives.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "button-group",
      "type": "registry:ui",
      "title": "Button group",
      "description": "Related actions joined into one surface with hairline dividers: a hover highlight glides between segments, the pressed one answers in place, and an attached menu can close the row.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "floating-button-group",
      "type": "registry:ui",
      "title": "Floating button group",
      "description": "Separate soft buttons in a quiet tray, with one shared highlight that morphs from button to button as you move, and a pressed state that settles in place.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "expanding-button-group",
      "type": "registry:ui",
      "title": "Expanding button group",
      "description": "Icon buttons in a compact group: the one you point at or focus grows to reveal its label while its neighbours slide aside, and an action confirms in place.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown menu",
      "description": "A focused list of actions anchored to a trigger.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Context menu",
      "description": "Secondary actions kept close to the selected object.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "copy-button",
      "type": "registry:ui",
      "title": "Copy button",
      "description": "Copy a value with immediate confirmation.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "A temporary side surface for focused work.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "theme-switch",
      "type": "registry:ui",
      "title": "Theme switcher",
      "description": "Four smooth ways to move between light and dark appearance.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "A compact identity marker for people and accounts.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "avatar-group",
      "type": "registry:ui",
      "title": "Avatar group",
      "description": "Show a team or set of contributors in a small space.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "A single line field with clear labels and useful states.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "A multiline field for notes, descriptions, and longer text.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "description": "A compact choice field with a keyboard friendly menu.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "Search and select from a list without leaving the field.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "A binary choice with a precise, legible state.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "A tactile toggle for settings that take effect immediately.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "multi-select",
      "type": "registry:ui",
      "title": "Multi-select",
      "description": "Select several values while keeping the field readable.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "number-field",
      "type": "registry:ui",
      "title": "Number field",
      "description": "Enter a bounded number with clear increment controls.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "password-field",
      "type": "registry:ui",
      "title": "Password field",
      "description": "Capture sensitive text with a visible reveal control.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "search-field",
      "type": "registry:ui",
      "title": "Search field",
      "description": "A recognizable search entry point with clear affordances.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "tag-input",
      "type": "registry:ui",
      "title": "Tag input",
      "description": "Turn short text values into removable tags.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "file-dropzone",
      "type": "registry:ui",
      "title": "File dropzone",
      "description": "A generous target for dropping one or more files.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio group",
      "description": "Choose one option from a visible set.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "segmented-control",
      "type": "registry:ui",
      "title": "Segmented control",
      "description": "Switch between a small set of related views.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "Browse dates in a clear, compact month view.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "date-picker",
      "type": "registry:ui",
      "title": "Date picker",
      "description": "Choose a date without losing context.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "time-picker",
      "type": "registry:ui",
      "title": "Time picker",
      "description": "Choose a time with sensible keyboard behavior.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "Progressively reveal supporting information in place.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "A focused surface for decisions that need attention.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "A small anchored surface for contextual information.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "Short supporting text for unfamiliar controls.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "Switch between related content in the same context.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "expandable-card",
      "type": "registry:ui",
      "title": "Expandable card",
      "description": "Give a dense card more room when requested.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "Show where a page sits in a hierarchy.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "A persistent message that helps people recover or continue.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "toast",
      "type": "registry:ui",
      "title": "Toast",
      "description": "Brief confirmation for a completed background action.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "rating",
      "type": "registry:ui",
      "title": "Rating",
      "description": "A simple, accessible way to capture a numeric opinion.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "Show how much of a known task is complete.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "Reserve space while content is still loading.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "A small label for status, category, or metadata.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "A contained group of related content and actions.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "metric-card",
      "type": "registry:ui",
      "title": "Metric card",
      "description": "A compact summary for a number that needs context.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "empty-state",
      "type": "registry:ui",
      "title": "Empty state",
      "description": "A useful next step when there is nothing to show yet.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "tree-view",
      "type": "registry:ui",
      "title": "Tree view",
      "description": "Navigate nested folders and structured content.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "pagination",
      "type": "registry:ui",
      "title": "Pagination",
      "description": "Move through a long collection with clear bounds.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "filter-toolbar",
      "type": "registry:ui",
      "title": "Filter toolbar",
      "description": "Keep collection filters close and easy to reset.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "sortable-data-table",
      "type": "registry:ui",
      "title": "Sortable data table",
      "description": "Compare structured records with sortable columns.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "sparkline",
      "type": "registry:ui",
      "title": "Sparkline",
      "description": "Show a compact trend beside a value.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "gauge",
      "type": "registry:ui",
      "title": "Gauge",
      "description": "Show a value against a known range.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "animated-counter",
      "type": "registry:ui",
      "title": "Animated counter",
      "description": "Give changing totals a clear sense of movement.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "reorderable-list",
      "type": "registry:ui",
      "title": "Reorderable list",
      "description": "Organize items with direct drag and drop.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "text-reveal",
      "type": "registry:ui",
      "title": "Text reveal",
      "description": "Reveal a short piece of content with restrained motion.",
      "categories": [
        "text"
      ]
    },
    {
      "name": "in-view-title",
      "type": "registry:ui",
      "title": "In-view title",
      "description": "Bring a section title in as it scrolls into view.",
      "categories": [
        "text"
      ]
    },
    {
      "name": "text-morph",
      "type": "registry:ui",
      "title": "Text morph",
      "description": "Morph a label into its next state, letter by letter.",
      "categories": [
        "text"
      ]
    },
    {
      "name": "text-shimmer",
      "type": "registry:ui",
      "title": "Text shimmer",
      "description": "Show ongoing work with a calm light across the words.",
      "categories": [
        "text"
      ]
    },
    {
      "name": "hold-to-confirm",
      "type": "registry:ui",
      "title": "Hold to confirm",
      "description": "Confirm a destructive action by holding, not tapping.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "swipe-actions",
      "type": "registry:ui",
      "title": "Swipe actions",
      "description": "Reveal row actions with a swipe, or from the same actions in a menu.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "reactions",
      "type": "registry:ui",
      "title": "Reactions",
      "description": "Acknowledge a post in one tap, with counts that roll.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "Pick a value or a range on a track that follows your finger.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "elastic-slider",
      "type": "registry:ui",
      "title": "Elastic slider",
      "description": "A slider that stretches like rubber past its ends, with a swaying value tag and detents the thumb clicks into.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "inline-edit",
      "type": "registry:ui",
      "title": "Inline edit",
      "description": "Rename in place: the text becomes a field without moving.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "expanding-search",
      "type": "registry:ui",
      "title": "Expanding search",
      "description": "An icon that morphs into a search field with results beneath it.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "chip-group",
      "type": "registry:ui",
      "title": "Chip group",
      "description": "Filter by a few facets with chips that morph as you pick them.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "password-strength",
      "type": "registry:ui",
      "title": "Password strength",
      "description": "Show how strong a new password is while it is typed.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "bottom-sheet",
      "type": "registry:ui",
      "title": "Bottom sheet",
      "description": "A sheet that rests at a peek or full height and follows your finger.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "hover-card",
      "type": "registry:ui",
      "title": "Hover card",
      "description": "Preview a person or link on hover or focus without leaving the page.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "resizable-panels",
      "type": "registry:ui",
      "title": "Resizable panels",
      "description": "Trade space between panes by dragging the divider between them.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "toast-stack",
      "type": "registry:ui",
      "title": "Toast stack",
      "description": "Stack short results at the edge until you reach for them.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "usage-meter",
      "type": "registry:ui",
      "title": "Usage meter",
      "description": "Show what fills an allowance and how close it is to the limit.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "onboarding-checklist",
      "type": "registry:ui",
      "title": "Onboarding checklist",
      "description": "Guide a new workspace through setup, one step at a time.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "image-compare",
      "type": "registry:ui",
      "title": "Image compare",
      "description": "Drag a divider across two images to see what changed.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "Browse a row of slides by dragging, flicking, or arrowing through them.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "card-stack",
      "type": "registry:ui",
      "title": "Card stack",
      "description": "Review a deck one card at a time, with a throw and an undo.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "bar-chart",
      "type": "registry:ui",
      "title": "Bar chart",
      "description": "Compare one measure across days and scrub any bar for its value.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "activity-heatmap",
      "type": "registry:ui",
      "title": "Activity heatmap",
      "description": "See a year of activity at a glance, one square per day.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "timeline",
      "type": "registry:ui",
      "title": "Timeline",
      "description": "Follow what happened, newest first, grouped by day.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "user-menu",
      "type": "registry:ui",
      "title": "User menu",
      "description": "Your account, settings, theme, and sign out behind the avatar. Opens as a bottom sheet on phones.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "stepper",
      "type": "registry:ui",
      "title": "Stepper",
      "description": "Show where a person is in a multi-step flow and what is done.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "signature-pad",
      "type": "registry:ui",
      "title": "Signature pad",
      "description": "Smooth ink that thins with speed, with undo, replay, and PNG or SVG export.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "icon-morph",
      "type": "registry:ui",
      "title": "Icon morph",
      "description": "Icons that morph between states: menu to close, play to pause, copy to check, and more.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "date-range-picker",
      "type": "registry:ui",
      "title": "Date range picker",
      "description": "A range picker that grows from its trigger into two months with presets and a stretching range highlight.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "color-picker",
      "type": "registry:ui",
      "title": "Color picker",
      "description": "A swatch that grows into a picker with format morphing, eyedropper, saved swatches, and contrast readout.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "morph-select",
      "type": "registry:ui",
      "title": "Morph select",
      "description": "A select whose trigger grows into the list, with a gliding highlight and type-ahead.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "line-chart",
      "type": "registry:ui",
      "title": "Line chart",
      "description": "A multi-series line chart with a gliding crosshair, legend toggles, and paths that morph between ranges.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "donut-chart",
      "type": "registry:ui",
      "title": "Donut chart",
      "description": "A donut whose arcs morph between datasets, with the active value rolling into the center.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "streamgraph",
      "type": "registry:ui",
      "title": "Streamgraph",
      "description": "Layered streams on a wiggle baseline that morph between ranges, with a layer you can isolate and read week by week.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "brush-chart",
      "type": "registry:ui",
      "title": "Brush chart",
      "description": "A dense time series with an overview strip: drag a window to zoom, resize it by its handles, and read events in place.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "ridgeline",
      "type": "registry:ui",
      "title": "Ridgeline",
      "description": "Overlapping distributions, one ridge per group: hover to lift a ridge and read its quartiles, switch datasets and every curve morphs.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "treemap",
      "type": "registry:ui",
      "title": "Treemap",
      "description": "A squarified treemap: click to drill and the tiles grow to fill the view, with a breadcrumb back and metrics that morph every tile.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "waffle-chart",
      "type": "registry:ui",
      "title": "Waffle chart",
      "description": "A ten by ten unit chart where every cell is one percent, and cells fly to their new group when the data changes.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "slope-chart",
      "type": "registry:ui",
      "title": "Slope chart",
      "description": "Before and after on two axes: lines draw in, rank moves sit beside each value, and switching datasets slides every line to its new slope.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "countdown",
      "type": "registry:ui",
      "title": "Countdown",
      "description": "A launch countdown with rolling digits that morphs into a live state at zero.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "cookie-consent",
      "type": "registry:ui",
      "title": "Cookie consent",
      "description": "A consent bar that morphs into preferences and folds into a reopen button.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "announcement-bar",
      "type": "registry:ui",
      "title": "Announcement bar",
      "description": "A top banner that rotates messages, counts down, and collapses smoothly when dismissed.",
      "categories": [
        "feedback"
      ]
    },
    {
      "name": "json-viewer",
      "type": "registry:ui",
      "title": "JSON viewer",
      "description": "A collapsible JSON tree with search, paging for long arrays, and copy value or path.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "scrub-input",
      "type": "registry:ui",
      "title": "Scrub input",
      "description": "A Figma-style number field: drag the label to scrub, or type values, units, and arithmetic.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "phone-input",
      "type": "registry:ui",
      "title": "Phone input",
      "description": "A phone field with a country picker, formatting as you type, and E.164 output.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "money-input",
      "type": "registry:ui",
      "title": "Money input",
      "description": "A currency field with live grouping, stable width, rolling digits, and minor-unit output.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "shortcut-recorder",
      "type": "registry:ui",
      "title": "Shortcut recorder",
      "description": "Record key combinations into key caps, with conflict warnings, Kbd, and a searchable cheatsheet.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "confirm-morph",
      "type": "registry:ui",
      "title": "Confirm morph",
      "description": "A destructive button that morphs into an inline confirmation, a spinner, and a result with undo.",
      "categories": [
        "actions"
      ]
    },
    {
      "name": "mention-input",
      "type": "registry:ui",
      "title": "Mention input",
      "description": "A textarea with @people and #channel mentions that act as single tokens, with suggestions at the caret.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "chat-thread",
      "type": "registry:ui",
      "title": "Chat thread",
      "description": "A chat thread with grouped messages, reactions, read receipts, typing, and a composer with attachments.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "rich-text-editor",
      "type": "registry:ui",
      "title": "Rich text editor",
      "description": "A lightweight editor with markdown shortcuts, a floating toolbar, a slash menu, and HTML and markdown output.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "billing-toggle",
      "type": "registry:ui",
      "title": "Billing toggle",
      "description": "A monthly and yearly switch with a savings badge and prices that roll to the new amount.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Scroll area",
      "description": "A native scroll container with thin overlay scrollbars and edge fades that appear only when content overflows.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "radio-cards",
      "type": "registry:ui",
      "title": "Radio cards",
      "description": "Selectable option cards with a sliding selection ring, price and description slots, and radio keyboard behavior.",
      "categories": [
        "inputs"
      ]
    },
    {
      "name": "comment-thread",
      "type": "registry:ui",
      "title": "Comment thread",
      "description": "Threaded comments with replies, reactions, mentions, inline edit, and resolve.",
      "categories": [
        "data"
      ]
    },
    {
      "name": "slot-text",
      "type": "registry:ui",
      "title": "Slot text",
      "description": "Text and numbers that spin into their new value on staggered slot machine reels.",
      "categories": [
        "special"
      ]
    },
    {
      "name": "expandable-text",
      "type": "registry:ui",
      "title": "Expandable text",
      "description": "Long text clamped to a few lines with a soft fade that glides open with Read more and closes with Show less, shown only when the text overflows.",
      "categories": [
        "disclosure"
      ]
    },
    {
      "name": "signup-form",
      "type": "registry:block",
      "title": "Sign up form",
      "description": "An account creation flow with field validation, password strength, and a clear completion state.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "logo-marquee",
      "type": "registry:block",
      "title": "Logo marquee",
      "description": "A quiet, continuously moving row of brand marks with a pause control.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "plan-comparison",
      "type": "registry:block",
      "title": "Plan comparison",
      "description": "Compare meaningful differences between plans and billing periods.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "command-palette",
      "type": "registry:block",
      "title": "Command palette",
      "description": "A complete keyboard driven action surface with search, grouped results, and shortcuts.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "notification-center",
      "type": "registry:block",
      "title": "Notification center",
      "description": "A home for updates with read state, grouped information, and animated disclosure.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "file-upload",
      "type": "registry:block",
      "title": "File upload",
      "description": "A complete file selection flow with constraints, progress, and error feedback.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "otp-input",
      "type": "registry:block",
      "title": "OTP input",
      "description": "A six digit verification flow with paste support and keyboard navigation.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "changelog-feed",
      "type": "registry:block",
      "title": "Changelog feed",
      "description": "Release notes you can filter, open in place, and scroll through month by month.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "sign-in",
      "type": "registry:block",
      "title": "Sign in",
      "description": "A sign in card that morphs from email to a six digit code to your account.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "page-header",
      "type": "registry:block",
      "title": "Page header",
      "description": "A project page header that folds into a compact bar as you scroll, with tabs whose counts roll.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "empty-states",
      "type": "registry:block",
      "title": "Empty states",
      "description": "Four empty states in one illustration whose shapes morph between scenes as you switch tabs.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "login-centered",
      "type": "registry:block",
      "title": "Centered login",
      "description": "A passkey-first login card on a quiet ring backdrop that morphs through email and code.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "site-header",
      "type": "registry:block",
      "title": "Site header",
      "description": "A sticky website header that turns solid on scroll, with a gliding active link, mega menu panels, and a mobile sheet.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "site-footer",
      "type": "registry:block",
      "title": "Site footer",
      "description": "A website footer with link columns and newsletter, a minimal layout, and a large fading brand wordmark.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "hero-section",
      "type": "registry:block",
      "title": "Hero section",
      "description": "Three full screen SaaS heroes: a live dashboard rising from the bottom edge over a drifting mesh, a workflow graph that routes sample events node by node, and editorial type over a mesh gradient.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "faq-section",
      "type": "registry:block",
      "title": "FAQ section",
      "description": "FAQs as an accordion, a topic rail, or a searchable list that highlights matches.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "contact-section",
      "type": "registry:block",
      "title": "Contact section",
      "description": "A validated contact form that morphs into a confirmation, support channels, and office cards with local times.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "blog-grid",
      "type": "registry:block",
      "title": "Blog grid",
      "description": "A blog index with a featured post, category filter, post cards, pagination and an in-place reader.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "comparison-table",
      "type": "registry:block",
      "title": "Comparison table",
      "description": "An us versus them table with a sticky header, a highlighted column, and a stacked phone view.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "stats-band",
      "type": "registry:block",
      "title": "Stats band",
      "description": "Headline numbers that count up in view, each with a tiny visual that proves it and a context line on hover, plain or in a hairline grid.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "cta-section",
      "type": "registry:block",
      "title": "CTA section",
      "description": "A call to action as a centered closing section, a split beside a setup card that completes itself, or a dismissible banner.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "newsletter-signup",
      "type": "registry:block",
      "title": "Newsletter signup",
      "description": "An email signup framed by a stack of past issues; subscribing drops the next issue, addressed to you, onto the front.",
      "categories": [
        "blocks"
      ]
    },
    {
      "name": "chip",
      "type": "registry:ui",
      "title": "Chip",
      "description": "A small monospace token for code values such as field names, IDs and flags, set inline in text.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "entity-chip",
      "type": "registry:ui",
      "title": "Entity chip",
      "description": "An inline reference to a supplier, person or record: a coloured monogram disc plus the name in a soft pill.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "progress-ring",
      "type": "registry:ui",
      "title": "Progress ring",
      "description": "A small circular progress ring with content in its center, used as a task badge.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "shimmer",
      "type": "registry:ui",
      "title": "Shimmer",
      "description": "A shimmering label: a soft gradient that sweeps across inline text to signal the agent is processing.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "status-pill",
      "type": "registry:ui",
      "title": "Status pill",
      "description": "A small rounded pill with an optional leading dot that labels the state of a run, deployment, or record.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "stream-text",
      "type": "registry:ui",
      "title": "Stream text",
      "description": "Streaming text: reveals characters quickly like a token stream, resolves the leading edge out of a soft blur, and keeps a caret that blinks once the text settles.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "text-row",
      "type": "registry:ui",
      "title": "Text row",
      "description": "A label-left, value-right row with an optional quiet meta value, the basic building block of summary cards.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "value-pill",
      "type": "registry:ui",
      "title": "Value pill",
      "description": "A soft inline pill that sets off a plain value (a date, amount, name or count) inside running text.",
      "categories": [
        "atoms"
      ]
    },
    {
      "name": "agent-screen",
      "type": "registry:component",
      "title": "Agent screen",
      "description": "Watch an agent's screen — open, teach a task, record.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "approval-card",
      "type": "registry:component",
      "title": "Approval card",
      "description": "Human-in-the-loop questions the agent asks before acting.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "chat-panel",
      "type": "registry:component",
      "title": "Chat panel",
      "description": "Tabbed chat panel with reasoning replies and a composer.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "code-block",
      "type": "registry:component",
      "title": "Code block",
      "description": "Source code with a filename, copy and collapse, or a unified diff of changed lines.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "context-cards",
      "type": "registry:component",
      "title": "Context cards",
      "description": "Retrieved knowledge chunks with their sources.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "diff-table",
      "type": "registry:component",
      "title": "Diff table",
      "description": "AI-proposed edits sweeping through tabular data.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "filter-table",
      "type": "registry:component",
      "title": "Filter table",
      "description": "Status chips that reorganize live data.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "fine-tune-card",
      "type": "registry:component",
      "title": "Fine-tune card",
      "description": "The agent adjusts design properties in an inspector.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "flowchart",
      "type": "registry:component",
      "title": "Flowchart",
      "description": "Workflow trigger and condition steps on a dotted canvas.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "glide-menu",
      "type": "registry:component",
      "title": "Glide menu",
      "description": "A wrapper that draws one shared hover highlight and glides it between the interactive rows inside it.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "insight-cards",
      "type": "registry:component",
      "title": "Insight cards",
      "description": "Paged agent insights with scrub-ready live charts.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "loading-state",
      "type": "registry:component",
      "title": "Loading state",
      "description": "Pixel-grid loader with shimmer and elapsed time.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "prompt-bar",
      "type": "registry:component",
      "title": "Prompt bar",
      "description": "Composer with @ sources, / commands, model picker, and dictation.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "recommendation-card",
      "type": "registry:component",
      "title": "Recommendation card",
      "description": "Agent suggestion with a confidence meter and actions.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "records-table",
      "type": "registry:component",
      "title": "Records table",
      "description": "CRM-style grid with tags, sorting, and relationship status.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "search-list",
      "type": "registry:component",
      "title": "Search",
      "description": "Command search with live filtering and an empty state.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "selection-actions",
      "type": "registry:component",
      "title": "Selection actions",
      "description": "Highlight a passage and hand it to the agent to rewrite.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "sidebar-nav",
      "type": "registry:component",
      "title": "Sidebar nav",
      "description": "Collapsible workspace and chat navigation with gliding hover states.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "streaming-text",
      "type": "registry:component",
      "title": "Streaming text",
      "description": "Streamed answer with inline sources, actions, and follow-ups.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "task-rows",
      "type": "registry:component",
      "title": "Task rows",
      "description": "Live agent task status — running, failed, completed.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "thinking-state",
      "type": "registry:component",
      "title": "Thinking",
      "description": "Expandable traces — steps, reasoning, search, coding.",
      "categories": [
        "ai-interface"
      ]
    },
    {
      "name": "tool-chips",
      "type": "registry:component",
      "title": "Tool chips",
      "description": "Code edits and tool calls as compact chips.",
      "categories": [
        "ai-interface"
      ]
    }
  ]
}
