{
  "name": "@fma-ds",
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "homepage": "https://ds.fmartinsandre.dev.br",
  "items": [
    {
      "name": "accordion",
      "type": "registry:ui",
      "title": "Accordion",
      "description": "A vertically stacked set of headers that expand to reveal or hide associated content. Supports single or multiple items open at once.",
      "author": "@fma-ds/ds",
      "categories": [
        "disclosure"
      ],
      "files": [
        {
          "path": "src/core/accordion/accordion.tsx",
          "target": "components/fma-ds/accordion.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "disclosure",
          "collapsible",
          "react-aria"
        ],
        "contentHash": "01447dcc1482"
      }
    },
    {
      "name": "alert",
      "type": "registry:ui",
      "title": "Alert",
      "description": "A callout for important, static information — supports an icon, title, description, and an optional action, with semantic variants (destructive/info/success/warning/invert) and a `brand` variant for announcements and promos in the theme's second identity color.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/alert/alert.tsx",
          "target": "components/fma-ds/alert.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "feedback",
          "callout"
        ],
        "contentHash": "c5d30353c0e0"
      }
    },
    {
      "name": "alert-dialog",
      "type": "registry:ui",
      "title": "Alert Dialog",
      "description": "A modal dialog that interrupts the user with important content and expects an explicit response (e.g. confirming a destructive action) — unlike Dialog, it can't be dismissed by clicking outside or pressing Escape.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/alert-dialog/alert-dialog.tsx",
          "target": "components/fma-ds/alert-dialog.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "overlay",
          "modal",
          "confirmation",
          "react-aria"
        ],
        "contentHash": "a4d060a3a152"
      }
    },
    {
      "name": "app-sidebar",
      "type": "registry:block",
      "title": "App Sidebar",
      "description": "An app-shell sidebar block, collapsible to icons: a team switcher (or a static logo), one navigation section per `data.nav` entry and a user menu.\n\nDriven by an `AppSidebarData` object, so teams, sections and items are data. Render it inside a `SidebarProvider`.\n\n- **Sub-items**: expand inline (`variant: \"collapse\"`) or open a menu (`\"dropdown\"`, and always while collapsed to icons).\n- **Links**: react-aria `Link`s; wrap the app in `RouterProvider` for client-side routing.\n- **Menus**: `onTeamChange`, `onAddTeam` and `onUserAction` handle them.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/app-sidebar/app-sidebar.tsx",
          "target": "components/fma-ds/app-sidebar/app-sidebar.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/app-sidebar/nav-section.tsx",
          "target": "components/fma-ds/app-sidebar/nav-section.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/app-sidebar/nav-user.tsx",
          "target": "components/fma-ds/app-sidebar/nav-user.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/app-sidebar/team-switcher.tsx",
          "target": "components/fma-ds/app-sidebar/team-switcher.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/app-sidebar/types.ts",
          "target": "components/fma-ds/app-sidebar/types.ts",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/sidebar",
        "@fma-ds/collapsible",
        "@fma-ds/dropdown-menu",
        "@fma-ds/avatar"
      ],
      "dependencies": [
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "origin": "shadcn/ui block sidebar-07, rebuilt on the registry's react-aria Sidebar, Collapsible and DropdownMenu",
        "tags": [
          "block",
          "sidebar",
          "navigation",
          "app-shell"
        ],
        "contentHash": "82b8fa20f3f9"
      }
    },
    {
      "name": "aspect-ratio",
      "type": "registry:ui",
      "title": "Aspect Ratio",
      "description": "Constrains content (typically an image or video) to a fixed width/height ratio, so it scales without distortion or layout shift.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/aspect-ratio/aspect-ratio.tsx",
          "target": "components/fma-ds/aspect-ratio.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "media",
          "layout"
        ],
        "contentHash": "39f84ad96b3d"
      }
    },
    {
      "name": "attachment",
      "type": "registry:ui",
      "title": "Attachment",
      "description": "A file/attachment chip for chat-style UIs — shows a name, optional upload progress or error state, and an independently clickable remove action.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/attachment/attachment.tsx",
          "target": "components/fma-ds/attachment.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "chat",
          "file-upload"
        ],
        "contentHash": "93dc9b3db412"
      }
    },
    {
      "name": "auth",
      "type": "registry:block",
      "title": "Auth",
      "description": "The frame of sign-in, sign-up and password recovery screens. The fields are the app's (`TextField`, `password-input`, `input-otp`, `password-rules`).\n\n- **`AuthLayout`**: puts the `logo` on top and the content centered. With `brand` (product message, illustration) the page splits in two on wide screens, the brand area on a muted surface or, with `brandSurface=\"brand\"`, the theme's brand color; without it, the column sits on a muted page.\n- **`AuthCard`**: the form's card — `title` as the page's `h1`, `description`, your fields, and a centered `footer` for the links between screens.\n- **`AuthSubmit`**: the full-width submit button, with a spinner while `isPending`.\n- **`ResendCode`**: \"Resend code\" behind a cooldown (`cooldown` seconds, 60 by default, started on mount). It's disabled with an `m:ss` countdown, then `onResend` (pending while its promise runs) restarts it.\n\nThe stories show sign-in, forgot password and a two-step reset (the server checks the code, then the new password follows the rules).\n\nBuilt-in text is in English; translate `ResendCode` with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/auth/auth.tsx",
          "target": "components/fma-ds/auth/auth.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/card",
        "@fma-ds/spinner",
        "@fma-ds/brand"
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "auth",
          "login",
          "password",
          "otp"
        ],
        "contentHash": "c1859f7520ac"
      }
    },
    {
      "name": "avatar",
      "type": "registry:ui",
      "title": "Avatar",
      "description": "A user/entity image with a text or icon fallback for when the image fails to load. Composes into overlapping groups for showing multiple participants.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/avatar/avatar.tsx",
          "target": "components/fma-ds/avatar.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "data-display",
          "user",
          "image"
        ],
        "contentHash": "22b57a73c4cd"
      }
    },
    {
      "name": "badge",
      "type": "registry:ui",
      "title": "Badge",
      "description": "A small label for status, count, or category — inline with text or attached to another element.\n\n- **Semantic variants**: info, success, warning, destructive and invert, in solid, `-light` and `-outline` styles.\n- **Neutral**: `muted`/`muted-outline` for inactive or pending states.\n- **Brand**: `brand`, `brand-light`, `brand-outline` and `brand-dot` in the theme's second identity color, for identity labels (\"New\", \"AI\", \"Pro\"), never for status.\n- **Dots**: a `*-dot` family (primary, secondary, brand, success, warning, info, destructive, muted) that shows a colored dot before plain text, for select items and dense lists.\n- **Shape**: size and radius options.\n\nCan also render as a link.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/badge/badge.tsx",
          "target": "components/fma-ds/badge.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "data-display",
          "status",
          "label"
        ],
        "contentHash": "791065f62240"
      }
    },
    {
      "name": "brand",
      "type": "registry:lib",
      "title": "Brand",
      "description": "Class strings for the theme's second identity color (`brand`) on surfaces and decoration. Identity only: never for hover, focus, selection or status.\n\n- **`brandSurface`**: a solid brand surface whose focus ring follows the text.\n- **`brandGradient`**: a primary → brand gradient fill.\n- **`brandGradientBorder`**: a primary → brand gradient border; set the surface underneath with `--brand-border-fill`.\n- **`brandGlow`**: a soft brand glow (replaces the element's shadow).\n- **`brandSpinningBorder`**: a wrapper with a spinning gradient edge for something in progress, static with reduced motion.",
      "author": "@fma-ds/ds",
      "categories": [
        "color"
      ],
      "files": [
        {
          "path": "src/lib/brand.ts",
          "target": "lib/fma-ds/brand.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "color",
          "brand",
          "theme",
          "decoration"
        ],
        "contentHash": "8a1af4798cfd"
      }
    },
    {
      "name": "breadcrumb",
      "type": "registry:ui",
      "title": "Breadcrumb",
      "description": "Shows the user's current location within a hierarchy, as a trail of links back to parent pages, with an ellipsis for collapsing long paths.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/breadcrumb/breadcrumb.tsx",
          "target": "components/fma-ds/breadcrumb.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "navigation",
          "react-aria"
        ],
        "contentHash": "f29a2d3cb2d3"
      }
    },
    {
      "name": "bubble",
      "type": "registry:ui",
      "title": "Bubble",
      "description": "A single chat message bubble — start/end alignment for sent vs. received, several color variants, and an optional reactions pill overlaid on a corner.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/bubble/bubble.tsx",
          "target": "components/fma-ds/bubble.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "chat",
          "message"
        ],
        "contentHash": "d8c23fa4e803"
      }
    },
    {
      "name": "button",
      "type": "registry:ui",
      "title": "Button",
      "description": "Displays a button, or a component that looks like one, with a set of visual variants and sizes. Also exports LinkButton (react-aria-components' Link, same variants) for link-as-button use cases.",
      "author": "@fma-ds/ds",
      "categories": [
        "buttons"
      ],
      "files": [
        {
          "path": "src/core/button/button.tsx",
          "target": "components/fma-ds/button.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components). No asChild — use LinkButton for a link styled as a button, and isDisabled instead of disabled.",
        "tags": [
          "form",
          "interactive",
          "react-aria",
          "nova"
        ],
        "contentHash": "a6504d2df11f"
      }
    },
    {
      "name": "button-group",
      "type": "registry:ui",
      "title": "Button Group",
      "description": "Visually joins a row (or column) of buttons into one connected control, with shared borders and rounded end corners. Can include a separator or a plain text segment.",
      "author": "@fma-ds/ds",
      "categories": [
        "buttons"
      ],
      "files": [
        {
          "path": "src/core/button-group/button-group.tsx",
          "target": "components/fma-ds/button-group.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/separator"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "buttons",
          "layout"
        ],
        "contentHash": "f3df80aa3e96"
      }
    },
    {
      "name": "calendar",
      "type": "registry:ui",
      "title": "Calendar",
      "description": "A date grid for selecting a single date, multiple dates or a range.\n\n- **Navigation**: the header opens month and year grids for fast navigation.\n- **Granularity**: `granularity` switches the selection to whole months or years.\n- **Availability**: `unavailableRanges` blocks booked spans, and an already-selected value that becomes blocked travels to the nearest available date.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/calendar/calendar.tsx",
          "target": "components/fma-ds/calendar.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/select",
        "@fma-ds/use-available-date-correction",
        "@fma-ds/date-granularity",
        "@fma-ds/interval-helpers",
        "@fma-ds/types"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4",
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "form",
          "date",
          "react-aria"
        ],
        "contentHash": "95e2dacf97d5"
      }
    },
    {
      "name": "card",
      "type": "registry:ui",
      "title": "Card",
      "description": "A container for grouping related content, with header, title, description, action, content, and footer slots. Supports a compact size=\"sm\" variant.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/card/card.tsx",
          "target": "components/fma-ds/card.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova",
        "tags": [
          "layout",
          "surface",
          "nova"
        ],
        "contentHash": "6d710b43a676"
      }
    },
    {
      "name": "carousel",
      "type": "registry:ui",
      "title": "Carousel",
      "description": "A carousel for cycling through slides (images, cards, or any content) with keyboard, swipe, and button navigation.\n\nBuilt on embla-carousel-react; `CarouselPrevious`/`CarouselNext` are `Button`s wired to the carousel API.\n\n- **Autoplay**: `autoplay` (`true` or `{ delay }`, 5000 ms by default) advances on its own and wraps to the first slide. Rotation pauses while the pointer is over the carousel or focus is inside it, and starts paused under reduced motion.\n- **`CarouselAutoplayToggle`**: pause/resume — required for moving content by WCAG 2.2.2; a dev warning flags its absence.\n- **`CarouselDots`**: one dot per slide; marks the current one and goes to a slide on press.\n- **Announcements**: slide changes are announced (`aria-live`) only when not rotating.\n\nThe toggle and dots are not positioned; place them where they fit.\n\nBuilt-in labels are in English; translate them with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/carousel/carousel.tsx",
          "target": "components/fma-ds/carousel.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "embla-carousel-react@^8.6.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "data-display",
          "carousel",
          "slider",
          "embla"
        ],
        "contentHash": "db3fae44db69"
      }
    },
    {
      "name": "chart",
      "type": "registry:ui",
      "title": "Chart",
      "description": "Composable chart primitives (ChartContainer, ChartTooltip, ChartLegend) wrapping Recharts, themed via CSS custom properties from a ChartConfig. Supports area, bar, line, and pie charts.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/chart/chart.tsx",
          "target": "components/fma-ds/chart.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "recharts@3.10.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "data-display",
          "charts",
          "recharts",
          "visualization"
        ],
        "contentHash": "0eb1a539328d"
      }
    },
    {
      "name": "checkbox",
      "type": "registry:ui",
      "title": "Checkbox",
      "description": "A control for a single on/off/indeterminate value.\n\nPair it with an external `Label` (via `id`/`htmlFor`) laid out as a flex row, rather than passing label text as children.\n\n- **`CheckboxGroup`**: gathers several under one label and a `value` array (react-aria `CheckboxGroup`; each `Checkbox` takes a `value`).\n- **`CheckboxCard`**: a choice card — the whole card is the checkbox, its children are the content (an `IconTile`, `FieldContent` with `FieldTitle` and `FieldDescription`) and a square indicator sits at the end. Selected cards take a `primary` tint, hovered ones `accent`.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/checkbox/checkbox.tsx",
          "target": "components/fma-ds/checkbox.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/field"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components). Pair with an external Label via id/htmlFor — Checkbox's own children slot is for a custom indicator override, not label text.",
        "tags": [
          "form",
          "react-aria",
          "selection",
          "nova"
        ],
        "contentHash": "a62172995df6"
      }
    },
    {
      "name": "code-block",
      "type": "registry:ui",
      "title": "Code Block",
      "description": "A code block with shiki syntax highlighting, for docs and AI chat UIs. `<CodeBlock code={code} language=\"tsx\" />` is complete on its own.\n\n### Parts\n\n- **`CodeBlockHeader`**: the chrome — `CodeBlockTitle`, `CodeBlockLanguage`, `CodeBlockWrapToggle`, `CodeBlockCopyButton`, `CodeBlockDownloadButton`.\n- **`CodeBlockExpandButton`**: with `maxLines`.\n- **`CodeBlockContent`**: to place inside your own scroll container.\n- **`CodeBlockLineActions`**: one action group on the hovered or focused line.\n\nA pinned copy button stays put while the code scrolls.\n\n### Highlighting\n\nshiki loads lazily on the first highlight (JavaScript regex engine, no WebAssembly) through the `code-block-highlight` lib. Pass `lines` from `highlightCode()` in a server loader, or `highlight={false}`, to never load it. Light and dark token colors switch with the theme.\n\n### Lines\n\n- **Marking**: `showLineNumbers`/`startLine`, `highlightedLines`/`highlightedWords`/`focusedLines` (line specs like `\"2-4,7\"`), `diff` and `lineLevels` — or shiki `transformers`.\n- **`streaming`**: grows the code with a caret and stick-to-bottom, re-rendering only changed lines.\n- **`foldable`**: folds by indentation.\n- **`selectable`**: turns lines into a multi-select listbox.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/code-block/code-block.tsx",
          "target": "components/fma-ds/code-block.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/copy-button",
        "@fma-ds/code-block-highlight"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/code-block, MIT); buttons rebuilt on react-aria Button",
        "tags": [
          "data-display",
          "code",
          "syntax-highlighting",
          "shiki",
          "ai"
        ],
        "contentHash": "38255a4d8d09"
      }
    },
    {
      "name": "code-block-highlight",
      "type": "registry:lib",
      "title": "Code Block Highlight",
      "description": "The code block's shiki engine and pure helpers, with no `\"use client\"`, so a server loader can call it.\n\n- **`highlightCode(code, options)`**: returns plain-JSON `CodeBlockLine[]` — dual light/dark token colors, line state from props or shiki transformers, and unchanged lines reused so streaming re-renders one row.\n- **Loading**: shiki loads lazily on the JavaScript regex engine (no WebAssembly), one chunk per language from the static `codeBlockLanguages` map and per theme from `codeBlockThemes` (`github-light`/`github-dark`, or `css-variables` for design-token colors).\n- **Helpers**: `parseLineSpec` (`\"2-4,7\"`), `markdownFences`/`markdownCodeProps` for AI transcripts, `ansiToLines` for terminal output, `parseUnifiedDiff` for git patches and `stripNotationComments`.",
      "author": "@fma-ds/ds",
      "categories": [
        "code"
      ],
      "files": [
        {
          "path": "src/lib/code-block-highlight.ts",
          "target": "lib/fma-ds/code-block-highlight.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [
        "shiki@^4.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/code-block, MIT)",
        "tags": [
          "code",
          "syntax-highlighting",
          "shiki",
          "markdown",
          "diff"
        ],
        "contentHash": "821a624ac164"
      }
    },
    {
      "name": "collapsible",
      "type": "registry:ui",
      "title": "Collapsible",
      "description": "Shows or hides a single section of content behind a trigger. A thin wrapper around react-aria-components' Disclosure — for several mutually-exclusive sections, use Accordion instead.",
      "author": "@fma-ds/ds",
      "categories": [
        "disclosure"
      ],
      "files": [
        {
          "path": "src/core/collapsible/collapsible.tsx",
          "target": "components/fma-ds/collapsible.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "react-aria",
          "disclosure",
          "toggle"
        ],
        "contentHash": "6c2ef4e31910"
      }
    },
    {
      "name": "collection-field",
      "type": "registry:block",
      "title": "Collection Field",
      "description": "A list edited in place inside a form: the user adds an item and fills it right there (payment methods, lots, recipients).\n\nRows, state and validation stay in the app (`useFieldArray`'s `fields`, `append`, `remove`).\n\n- **`CollectionField`**: takes the `label` (a legend), `description`, the list's `error`, `itemCount`, `onAdd` and `addLabel`. `minItems` removes the remove buttons at the minimum, `maxItems` swaps the add button for a note once reached, and an empty list shows `emptyMessage`.\n- **`CollectionFieldItem`**: `label` is numbered (\"Lot 2\") and also names its remove button; `onRemove` removes it. Two layouts: `row` for a few fields side by side on wide screens, with the remove button at the end; `group` for many fields under a visible legend with a static border, so items stay apart when fields stack on small screens.\n- **`CollectionFieldSummary`** with **`CollectionFieldSummaryItem`**: the total, what is allocated and what remains (`isEmphasized`: by size and weight, with the state in words).\n- **Focus**: adding announces the new item and focuses its first field; removing announces it and focuses the add button.\n\nLists filled elsewhere and only shown here (edited in a dialog, listed in a table) are a composition of `data-grid`/`item` and `dialog`, not this block.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/collection-field/collection-field.tsx",
          "target": "components/fma-ds/collection-field/collection-field.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/description-list",
        "@fma-ds/empty",
        "@fma-ds/field"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "form",
          "field-array",
          "list",
          "repeater"
        ],
        "contentHash": "485d5b54137a"
      }
    },
    {
      "name": "color-contrast",
      "type": "registry:lib",
      "title": "Color Contrast",
      "description": "WCAG 2 contrast helpers over OKLCH. Results are oklch strings clamped to sRGB.\n\n- **Ratio**: contrast ratio and level.\n- **`passingRanges`**: the ranges of any OKLCH, HSL, HSB or RGB channel where a color passes against a background.\n- **`passingRegion`**: the passing part of a 2D color area, such as chroma × lightness.\n- **`nearestContrastColor`**: the nearest passing color that keeps its hue.",
      "author": "@fma-ds/ds",
      "categories": [
        "color"
      ],
      "files": [
        {
          "path": "src/lib/color-contrast.ts",
          "target": "lib/fma-ds/color-contrast.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [
        "culori@^4.0.2"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "color",
          "contrast",
          "accessibility",
          "oklch"
        ],
        "contentHash": "0393adeafa43"
      }
    },
    {
      "name": "color-picker",
      "type": "registry:ui",
      "title": "Color Picker",
      "description": "A composable color picker: `ColorPicker` holds the color and shares it with parts laid out in any way.\n\nWithout children, `ColorPicker` is a swatch that opens the default panel in a popover.\n\n### Parts\n\n- **`ColorPickerTrigger`** + **`ColorPickerContent`**: a popover.\n- **`ColorPickerPanel`**: a column of controls, or a standalone inline picker.\n- **`ColorPickerArea`**: OKLCH chroma × lightness at the hue (the part sRGB can't show is left blank), or HSB saturation × brightness.\n- **`ColorPickerWheel`**: a hue ring whose children fill the square inside it.\n- **`ColorPickerSlider`**: any channel of OKLCH, HSL, HSB or RGB, or alpha; horizontal or vertical, painted with the colors it reaches.\n- **`ColorPickerFields`**: a format menu with hex or per-channel fields; `ColorPickerChannelInput` for a single channel.\n- **`ColorPickerInput`**: a text field taking any CSS color (Escape reverts), with a swatch that opens the popover against it.\n- **`ColorPickerSwatches`**: presets, Tailwind's palette by default; `ColorPickerSwatch` for one.\n- **Extras**: `ColorPickerValue`, `ColorPickerCopy`, `ColorPickerEyeDropper`, `ColorPickerPreview` and `ColorPickerFixContrast`.\n- **`useColorPicker`**: reads and sets the color from custom parts.\n\n### Value\n\n- **Events**: `onChange` fires while dragging and `onChangeEnd` once an interaction ends.\n- **`format`**: what they emit — `oklch` by default, `hex`, `rgb` or `hsl`; `alpha` adds opacity controls.\n- **Forms**: `name` submits the value with a form (a hidden input), and a form reset restores the starting color.\n\n### Contrast\n\nGiven a background (`contrastWith`), every part shows contrast: the area hatches what fails AA and draws the AA and AAA thresholds across it, tracks hatch and mark them, presets failing AA are hatched, the preview shows the WCAG ratio, and \"Fix to AA/AAA\" jumps to the nearest passing lightness keeping the hue.\n\n`labels` translates every text it shows or announces.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/color-picker/color-picker.tsx",
          "target": "components/fma-ds/color-picker.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/copy-button",
        "@fma-ds/input",
        "@fma-ds/input-group",
        "@fma-ds/popover",
        "@fma-ds/select",
        "@fma-ds/color-contrast"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "culori@^4.0.2",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "color",
          "composable",
          "contrast",
          "forms",
          "oklch",
          "react-aria"
        ],
        "contentHash": "538c1f4f4734"
      }
    },
    {
      "name": "combobox",
      "type": "registry:ui",
      "title": "Combobox",
      "description": "A searchable, filterable select combining a text input with a listbox popover. Supports single selection (ComboboxValue) or a multi-select tag/chip input (ComboboxChips + ComboboxChip).",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/combobox/combobox.tsx",
          "target": "components/fma-ds/combobox.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/input-group"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "form",
          "react-aria",
          "selection",
          "autocomplete"
        ],
        "contentHash": "fbc6acc6716f"
      }
    },
    {
      "name": "command",
      "type": "registry:ui",
      "title": "Command",
      "description": "A searchable list of commands or actions, filtered live as you type.\n\n- **`CommandDialog`**: wraps it in a `Dialog` for a full command-palette (⌘K) pattern.\n- **Empty state**: pass `CommandEmpty` through `CommandList`'s `renderEmptyState`, not as a child — the list only accepts items, groups and separators.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/command/command.tsx",
          "target": "components/fma-ds/command.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/dialog",
        "@fma-ds/input-group"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "react-aria",
          "search",
          "command-palette",
          "overlay"
        ],
        "contentHash": "98fd814bfa4f"
      }
    },
    {
      "name": "confirm-dialog",
      "type": "registry:ui",
      "title": "Confirm Dialog",
      "description": "A ready-made yes/no dialog on top of the `use-dialog-promise` hook.\n\n`const ask = useDialogPromise<D>()`, render `<ConfirmDialog controller={ask} title=… />` once, then `const result = await ask.open(data)` and check `result.status`: `confirmed`, `cancelled`, or `dismissed` by Escape.\n\n- **Content**: `title` and `description` take the opened `data` when given as functions; `media` adds an icon.\n- **Actions**: `tone=\"destructive\"` marks a destructive action; `cancelLabel={null}` leaves a single action.\n- **`onConfirm`**: runs with the dialog open and the button pending; if it throws, the dialog stays open with `errorMessage`.\n\nFor dialogs that collect a value or hold a form, render your own dialog with the same hook and call `confirm(value)`.\n\nLabels default to English; pass translations through the label props.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/confirm-dialog/confirm-dialog.tsx",
          "target": "components/fma-ds/confirm-dialog.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/alert-dialog",
        "@fma-ds/button",
        "@fma-ds/use-dialog-promise"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "overlay",
          "dialog",
          "confirm",
          "alert"
        ],
        "contentHash": "cb346e883317"
      }
    },
    {
      "name": "context-menu",
      "type": "registry:ui",
      "title": "Context Menu",
      "description": "A menu that opens on right-click (or long-press on touch) instead of a regular trigger click. Supports nested submenus, separators, and keyboard shortcut display.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/context-menu/context-menu.tsx",
          "target": "components/fma-ds/context-menu.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components). The trigger region must call usePress() — wrap a plain element in react-aria-components' Pressable if it doesn't already.",
        "tags": [
          "react-aria",
          "menu",
          "context-menu",
          "nova"
        ],
        "contentHash": "0b769e753bfb"
      }
    },
    {
      "name": "copy-button",
      "type": "registry:ui",
      "title": "Copy Button",
      "description": "An icon button that copies a value too long to type (protocol, tracking code, Pix code, token) to the clipboard.\n\n- **Feedback**: the icon turns into a check, or a cross on failure, for a moment, and the outcome is announced in a separate live region.\n- **Labels**: translatable; an optional tooltip shows them.\n- **`useCopyToClipboard`**: also exported, for other triggers such as a menu item.",
      "author": "@fma-ds/ds",
      "categories": [
        "buttons"
      ],
      "files": [
        {
          "path": "src/core/copy-button/copy-button.tsx",
          "target": "components/fma-ds/copy-button.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/tooltip"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "buttons",
          "clipboard",
          "copy"
        ],
        "contentHash": "ee9f7a219cca"
      }
    },
    {
      "name": "credit-card",
      "type": "registry:ui",
      "title": "Credit Card",
      "description": "A payment card drawn from its data, to show a saved card or preview one while it's typed.\n\n- **Front**: the chip, the issuer's logo and color, the number padded with `•` and grouped by issuer (Amex 4-6-5), the holder and the expiry.\n- **Back**: the stripe, the signature panel and the security code.\n\n### Props\n\n- **Data**: `number`, `name`, `expiry` (`MM/YY`, `MM/YYYY` or digits only) and `cvc` are plain strings. `*` or `x` in `number` hide digits of a saved card.\n- **`issuer`**: `visa`, `mastercard`, `amex`… — pass it for a saved card; by default it is detected from the number.\n- **`focused`**: `number`, `name`, `expiry` or `cvc` highlights the field being typed, and `cvc` turns the card over (Amex keeps its code on the front). With reduced motion it turns without the 3D spin.\n- **Size**: its width sets its size (`w-72` by default) and the text scales with it.\n- **`labels`**: translates the captions and the accessible name. The card is one `role=\"img\"` (\"Visa card ending in 4242, expires 12/28\").\n\nLogos for Visa, Mastercard, Elo, American Express, Hipercard, Diners Club, Discover and JCB; other issuers show their name on the theme gray.\n\nIssuer detection and the form's validation (number, expiry, security code) live in the `credit-card-validation` lib, usable without the card. Pair the number field with the `credit-card` mask, which follows the issuer too.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/credit-card/credit-card.tsx",
          "target": "components/fma-ds/credit-card.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/credit-card-validation"
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "react-credit-cards-2 (https://github.com/felquis/react-credit-cards-2, MIT), ported to Tailwind",
        "tags": [
          "payment",
          "credit-card",
          "data-display",
          "form"
        ],
        "contentHash": "793d900d3ab2"
      }
    },
    {
      "name": "credit-card-validation",
      "type": "registry:lib",
      "title": "Credit Card Validation",
      "description": "Payment card helpers for forms, without React.\n\n- **`getCreditCardIssuer(number)`**: detects the issuer from the first digits with `credit-card-type` (`null` while ambiguous).\n- **`getCreditCardIssuerById`**: reads it from saved card data (`visa`, `Mastercard`, `amex`). Both return the name, valid lengths, digit groups and security-code size.\n- **`isValidCreditCardNumber`**: checks the length for the issuer and the Luhn digit.\n- **`isValidCreditCardExpiry`**: a real month not yet ended (`MM/YY`, `MM/YYYY` or digits only).\n- **`isValidCreditCardCode`**: the code size for the issuer.\n- **`getCreditCardNumberLayout`**: the digit groups for what's typed (Amex 4-6-5), used by the `credit-card` mask and component.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/lib/credit-card-validation.ts",
          "target": "lib/fma-ds/credit-card-validation.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [
        "credit-card-type@^10.3.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "forms",
          "validation",
          "credit-card",
          "payment"
        ],
        "contentHash": "32371e346133"
      }
    },
    {
      "name": "data-grid",
      "type": "registry:ui",
      "title": "Data Grid",
      "description": "A data grid driven by a TanStack Table v9 instance and rendered with react-aria's `Table`, which brings cell keyboard navigation, `aria-sort`, selection, column resizing, row drag and drop and virtualization.\n\n### Table\n\nCreate the table with `useTable({ features: dataGridFeatures, ... })`. The exported features cover sorting, filtering with facets, pagination, selection, row expanding (tree rows from `getSubRows`), row and column pinning, ordering, visibility and sizing, with client-side row models. For server-side data (or to show every row), set `manualSorting`/`manualFiltering`/`manualPagination`.\n\nColumn `meta` takes:\n\n- **`headerTitle`**, **`headerClassName`** and **`cellClassName`**.\n- **`skeleton`**: the cell shown in loading rows.\n- **`autoSize`**: the column takes the remaining width (not measured from content).\n- **`headerColSpan`**: the header spans the next visible columns on its pin side, e.g. \"Quantity\" over the amount and its unit. Covered headers take its accessible name and the last one keeps the resize handle.\n\n### Parts\n\nWrap them in `DataGrid table={table} recordCount={…}`:\n\n- **`DataGridTable`** and **`DataGridPagination`**.\n- **`DataGridColumnHeader`**: sort indicator, plus a menu for pinning, moving and visibility when `tableLayout` enables them.\n- **`DataGridColumnVisibility`**: a column visibility menu.\n- **`DataGridColumnFilter`**: faceted; use `filterFn: \"arrHas\"`.\n- **`DataGridRowSelect`**: a row checkbox, with `enableRowSelection`.\n- **`DataGridRowPin`**: pins to the top, or the bottom with `position=\"bottom\"`.\n- **`DataGridRowActions`**: a row's actions as `DropdownMenuItem`s behind a menu button, named from `rowLabel`. It doesn't trigger `onRowClick`, and with no items it shows a disabled \"no actions\" entry.\n- **`DataGridRowDragHandle`**: with `onRowsReorder`.\n- **`DataGridRowExpand`**: shows `getSubRows` children, indented by depth — or, with `getRowCanExpand` and `DataGridTable`'s `renderExpandedRow`, a full-width details row.\n- **`DataGridSelectionBar`**: shows while rows are selected — the count (announced, with how many are on other pages), your bulk actions as children and \"Clear selection\".\n\n### Rows\n\n- **`onRowClick`**: makes rows actionable (click or Enter).\n- **`onRowHover`**: fires when the pointer enters a row, e.g. to prefetch its details.\n- **`isLoading`**: shows skeleton rows (`meta.skeleton`) or a spinner.\n- **Footer**: `DataGridTable`'s `footerContent` takes footer rows (`DataGridTableFootRow` with `DataGridTableFootRowCell`, `colSpan` to span columns); `tableLayout.footerBackground` tints them.\n\n### Infinite scroll\n\n`DataGridTable`'s `onFetchMore` fires near the end of the loaded rows (`fetchMoreScrollOffset`, in viewport heights), `isFetchingMore` shows a loading row and `hasMore={false}` stops it with `allRowsLoadedMessage`. Works with `isVirtualized`.\n\n### Layout and styling\n\n- **`tableLayout.columnsDraggable`**: lets users drag headers to reorder columns; keyboard users use the header menu's move actions, and pinned columns stay put.\n- **`tableLayout`**: also takes `rowRounded`, `headerBorder` and `columnsResizeMode` (`\"onEnd\"` commits the width on release and draws a line at the pointer while dragging).\n- **`tableClassNames`**: adds classes to parts of the table (`base`, `header`, `headerSticky`, `body`, `bodyRow`, `footer`, `edgeCell`).\n- **Surfaces**: pinned cells and sticky headers paint `--data-grid-surface` (else `--card` inside a `Card`, else `--background`) and carry `data-pinned`/`data-last-col`.\n\n### i18n\n\nThe `i18n` prop on `DataGrid` replaces every built-in string (`{ labels: { sortAscending, rowsPerPage, paginationInfo: ({ from, to, count }) => …, goToPage: (page) => …, … } }`, defaults in `defaultDataGridI18n`). Specific props like `emptyMessage` or the pagination labels still win.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/data-grid/data-grid.tsx",
          "target": "components/fma-ds/data-grid.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/badge",
        "@fma-ds/button",
        "@fma-ds/checkbox",
        "@fma-ds/dropdown-menu",
        "@fma-ds/input",
        "@fma-ds/popover",
        "@fma-ds/select",
        "@fma-ds/skeleton",
        "@fma-ds/spinner"
      ],
      "dependencies": [
        "@tanstack/react-table@^9.3.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/data-grid, MIT); rendering rebuilt on react-aria Table",
        "tags": [
          "data-display",
          "table",
          "grid",
          "tanstack",
          "react-aria"
        ],
        "contentHash": "1fe5772f3aab"
      }
    },
    {
      "name": "date-availability",
      "type": "registry:lib",
      "title": "Date Availability",
      "description": "Finds the nearest date that isn't blocked by min/max or unavailable ranges, and centralizes the travel-or-clear correction policy.\n\nA blocked value moves to a valid neighbour instead of being discarded, and is cleared only when no available date exists.",
      "author": "@fma-ds/ds",
      "categories": [
        "date"
      ],
      "files": [
        {
          "path": "src/lib/date-availability.ts",
          "target": "lib/fma-ds/date-availability.ts",
          "type": "registry:lib"
        }
      ],
      "registryDependencies": [
        "@fma-ds/interval-helpers"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "date",
          "validation"
        ],
        "contentHash": "ddd34969c656"
      }
    },
    {
      "name": "date-field",
      "type": "registry:ui",
      "title": "Date Field",
      "description": "A segmented, keyboard-editable date input.\n\n- **Granularity**: `granularity` also accepts `\"month\"` and `\"year\"` for month- or year-only fields.\n- **Availability**: values blocked by `minValue`/`maxValue` or `unavailableRanges` move to the nearest available date once the field loses focus, so typing is never interrupted.\n- **`DateInput`**: exported for composing date pickers.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/date-field/date-field.tsx",
          "target": "components/fma-ds/date-field.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/use-available-date-correction",
        "@fma-ds/date-granularity",
        "@fma-ds/interval-helpers",
        "@fma-ds/types"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "form",
          "date",
          "react-aria"
        ],
        "contentHash": "e80a3917a28a"
      }
    },
    {
      "name": "date-fns-compat",
      "type": "registry:lib",
      "title": "Date Fns Compat",
      "description": "A date-fns-shaped API (`addDays`, `format`, `isBefore`, `TZDate`, …) backed by `@internationalized/date`.\n\n- **Same shape**: same names and argument order as date-fns/`@date-fns/tz`, taking and returning plain `Date` (or `TZDate`).\n- **Arithmetic**: DST-safe calendar arithmetic.\n- **Migration**: also exports `toZoned`/`fromZoned`, for moving call sites onto `ZonedDateTime` directly.",
      "author": "@fma-ds/ds",
      "categories": [
        "date"
      ],
      "files": [
        {
          "path": "src/lib/date-fns-compat/arithmetic.ts",
          "target": "lib/fma-ds/date-fns-compat/arithmetic.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/boundaries.ts",
          "target": "lib/fma-ds/date-fns-compat/boundaries.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/comparison.ts",
          "target": "lib/fma-ds/date-fns-compat/comparison.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/context.ts",
          "target": "lib/fma-ds/date-fns-compat/context.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/convert.ts",
          "target": "lib/fma-ds/date-fns-compat/convert.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/difference.ts",
          "target": "lib/fma-ds/date-fns-compat/difference.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/format.ts",
          "target": "lib/fma-ds/date-fns-compat/format.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/index.ts",
          "target": "lib/fma-ds/date-fns-compat/index.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/tz.ts",
          "target": "lib/fma-ds/date-fns-compat/tz.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/date-fns-compat/week.ts",
          "target": "lib/fma-ds/date-fns-compat/week.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "date",
          "time-zone",
          "date-fns"
        ],
        "contentHash": "1d2fce1731f8"
      }
    },
    {
      "name": "date-granularity",
      "type": "registry:lib",
      "title": "Date Granularity",
      "description": "Period helpers for month/year date selection: period start/end, same-period comparison, period-widened min/max bounds, and lifting a day-level isDateUnavailable predicate to whole months or years.",
      "author": "@fma-ds/ds",
      "categories": [
        "date"
      ],
      "files": [
        {
          "path": "src/lib/date-granularity.ts",
          "target": "lib/fma-ds/date-granularity.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "date",
          "granularity"
        ],
        "contentHash": "02393ebaf1cd"
      }
    },
    {
      "name": "date-picker",
      "type": "registry:ui",
      "title": "Date Picker",
      "description": "A typed date input paired with a calendar popover over one value, for single dates (`DatePicker`) or ranges (`DateRangePicker`).\n\n- **Granularity**: month- and year-only, as well as days.\n- **Availability**: `unavailableRanges` blocks dates.\n- **Non-modal popover**: the input stays editable while the calendar is open, and the calendar follows what is typed.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/date-picker/date-picker.tsx",
          "target": "components/fma-ds/date-picker.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/calendar",
        "@fma-ds/date-field",
        "@fma-ds/input-group",
        "@fma-ds/popover",
        "@fma-ds/date-granularity",
        "@fma-ds/types"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "form",
          "date",
          "react-aria"
        ],
        "contentHash": "0a51418ce3bf"
      }
    },
    {
      "name": "description-list",
      "type": "registry:ui",
      "title": "Description List",
      "description": "Term/value pairs on a semantic `<dl>`: `DescriptionList` > `DescriptionItem` > `DescriptionTerm` + `DescriptionDetails`.\n\n- **`layout=\"inline\"`** (default): each value at the end of its row, right-aligned with tabular numbers — for order summaries, totals and plan details.\n- **`layout=\"stacked\"`**: the value under a smaller term, in a grid whose columns you set with `className` — for record details.\n- **`divided`**: draws rules between rows.\n- **Icons**: an icon inside `DescriptionTerm` sits before the label.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/description-list/description-list.tsx",
          "target": "components/fma-ds/description-list.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "data-display",
          "list",
          "summary",
          "key-value"
        ],
        "contentHash": "0561f036df5d"
      }
    },
    {
      "name": "dialog",
      "type": "registry:ui",
      "title": "Dialog",
      "description": "A modal window layered over the page, requiring explicit action (or Escape) to dismiss. Pair with react-aria-components' DialogTrigger to wire up the trigger and open state.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/dialog/dialog.tsx",
          "target": "components/fma-ds/dialog.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "react-aria",
          "modal",
          "overlay"
        ],
        "contentHash": "bc7c3204eb2f"
      }
    },
    {
      "name": "direction",
      "type": "registry:ui",
      "title": "Direction",
      "description": "Sets LTR/RTL text-direction context for descendant react-aria-components — a compatibility shim so a Radix/Base UI-style `direction` prop keeps working via react-aria's locale system.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/direction/direction.tsx",
          "target": "components/fma-ds/direction.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "layout",
          "i18n",
          "react-aria"
        ],
        "contentHash": "74859b34147c"
      }
    },
    {
      "name": "drawer",
      "type": "registry:ui",
      "title": "Drawer",
      "description": "A panel that slides in from an edge of the screen, with swipe-to-dismiss and snap-point support. Uses @base-ui/react (not react-aria-components), so its API and data attributes differ from this repo's other overlays.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/drawer/drawer.tsx",
          "target": "components/fma-ds/drawer.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "@base-ui/react@^1.9.0",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova. Built on @base-ui/react/drawer (stable 1.x), not react-aria-components — upstream hasn't ported this component to the aria base yet; vendored unchanged.",
        "tags": [
          "@base-ui/react",
          "overlay",
          "modal"
        ],
        "contentHash": "3e2556163a9d"
      }
    },
    {
      "name": "dropdown-menu",
      "type": "registry:ui",
      "title": "Dropdown Menu",
      "description": "A menu of actions or options triggered by clicking a button. Supports nested submenus, separators, labels, and a shortcut-display slot for each item.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/dropdown-menu/dropdown-menu.tsx",
          "target": "components/fma-ds/dropdown-menu.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "react-aria",
          "menu",
          "overlay"
        ],
        "contentHash": "190a62e4bf3e"
      }
    },
    {
      "name": "emoji-picker",
      "type": "registry:ui",
      "title": "Emoji Picker",
      "description": "An emoji picker with search, skin tones, recently used emoji, custom emoji and a virtualized grid.\n\n`<EmojiPicker />` alone renders a trigger and a popover. Compose `EmojiPickerTrigger` + `EmojiPickerContent`, or `EmojiPickerPanel` in place, from `EmojiPickerSearch`, `EmojiPickerCategories`, `EmojiPickerList`, `EmojiPickerPreview` and `EmojiPickerSkinTone`.\n\n- **Search**: names, keywords and shortcodes.\n- **Categories**: a category bar that follows the scroll, plus a frequently or recently used section.\n- **Data**: emojibase, fetched once per page from jsDelivr (`dataUrl` to self-host, `locale` for 28 languages) or passed as `data`. `emojiVersion=\"auto\"` hides emoji the device can't draw.\n- **Value**: `value`/`defaultValue`/`onChange` hold the native emoji (or `:shortcode:` for a custom one). `selectionMode=\"multiple\"` toggles a list (with `max`), and `onEmojiSelect` fires on every pick, for inserting into text.\n- **Keyboard**: focus stays in the search while the arrows move through the grid (a combobox over an `aria-activedescendant` listbox); Enter picks.\n- **Persistence**: recent picks and the tone persist in localStorage (`recentStorageKey`, `skinToneStorageKey`; `null` keeps them in memory).\n- **Forms**: `name` submits with a native form.\n\nEvery string comes from `i18n`.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/emoji-picker/emoji-picker.tsx",
          "target": "components/fma-ds/emoji-picker.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/dropdown-menu",
        "@fma-ds/empty",
        "@fma-ds/input-group",
        "@fma-ds/popover",
        "@fma-ds/skeleton",
        "@fma-ds/tabs"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/emoji-picker, MIT); rebuilt on react-aria Popover, Dialog, Button, Tabs and Menu",
        "tags": [
          "forms",
          "emoji",
          "picker",
          "popover",
          "react-aria"
        ],
        "contentHash": "401d10890e88"
      }
    },
    {
      "name": "empty",
      "type": "registry:ui",
      "title": "Empty",
      "description": "A placeholder for empty states — no data, no search results, nothing configured yet. Composes an icon/media, title, description, and optional call-to-action content.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/empty/empty.tsx",
          "target": "components/fma-ds/empty.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "feedback",
          "empty-state",
          "placeholder"
        ],
        "contentHash": "970d4f33fa01"
      }
    },
    {
      "name": "error-pages",
      "type": "registry:block",
      "title": "Error Pages",
      "description": "Error screens on top of `empty` and `icon-stack`: `NotFound` (404), `Forbidden` (403) and `UnexpectedError`, plus the bare `ErrorPage` for other cases (maintenance, expired link).\n\nEach shows an icon, the status `code` as a small label, the title as the page's `h1`, a description and your `actions` (home, back, support).\n\n- **Layout**: `layout=\"page\"` fills the viewport; `layout=\"inline\"` fills the content area of the app's layout.\n- **`UnexpectedError`**: puts a \"Try again\" button first with `onRetry` (pending while its promise runs). With `error`, it adds a collapsible `ErrorDetails` with the message and stack and a button that copies them — leave `error` out where users shouldn't see it.\n- **In the app**: wiring to the router (error and not-found routes), reporting and automatic reloads.\n\nBuilt-in text is in English; translate it with `i18n.labels`, or override `title` and `description`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/error-pages/error-pages.tsx",
          "target": "components/fma-ds/error-pages/error-pages.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/collapsible",
        "@fma-ds/copy-button",
        "@fma-ds/empty",
        "@fma-ds/icon-stack"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "error",
          "404",
          "403",
          "not-found",
          "forbidden",
          "empty-state"
        ],
        "contentHash": "00336537e030"
      }
    },
    {
      "name": "event-calendar",
      "type": "registry:block",
      "title": "Event Calendar",
      "description": "A headless-first event calendar: month, week, day, N-day, agenda and resource views, with recurring events, time zones and drag and drop.\n\n- **Recurrence**: structured rules or RRULE strings.\n- **Drag and drop**: drag to move, resize and create; keyboard users create through `showDayAddButton`'s per-day buttons.\n- **i18n**: with RTL support.\n- **State**: a subscribable store (`useEventCalendar`, `useEventCalendarSelector`).\n\nCompose `<EventCalendar>` with `EventCalendarNav` and `EventCalendarContent`, or build your own parts from the hooks. Events are controlled (`events`/`onEventsChange`) or not (`defaultEvents`); `onEventUpdate` accepts, rejects or adjusts each drag.\n\nThe nav, view switcher, date picker and \"+N more\" popover use the registry's react-aria `Button`, `Tooltip`, `DropdownMenu`, `Popover` and `Calendar`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/event-calendar/event-calendar-agenda-view.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-agenda-view.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-content.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-content.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-dnd.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-dnd.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-event.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-event.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-i18n.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-i18n.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-lib.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-lib.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-merge-props.ts",
          "target": "components/fma-ds/event-calendar/event-calendar-merge-props.ts",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-month-view.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-month-view.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-nav.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-nav.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-recurrence.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-recurrence.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-resource-view.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-resource-view.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-time-grid.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-time-grid.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar-types.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar-types.tsx",
          "type": "registry:component"
        },
        {
          "path": "src/blocks/event-calendar/event-calendar.tsx",
          "target": "components/fma-ds/event-calendar/event-calendar.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/icon-stack",
        "@fma-ds/scroll-area",
        "@fma-ds/tooltip",
        "@fma-ds/popover",
        "@fma-ds/button",
        "@fma-ds/calendar",
        "@fma-ds/dropdown-menu",
        "@fma-ds/date-fns-compat"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1",
        "@internationalized/date@^3.12.4"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/event-calendar, MIT); overlays rebuilt on the registry's react-aria components",
        "tags": [
          "block",
          "calendar",
          "scheduler",
          "events",
          "recurrence"
        ],
        "contentHash": "2067b0243b9b"
      }
    },
    {
      "name": "feature-promo",
      "type": "registry:block",
      "title": "Feature Promo",
      "description": "A locked feature or an offer on a card: why it matters, what it gives and the call to action.\n\nInside `FeaturePromo`, put:\n\n- **`FeaturePromoContent`**: with `FeaturePromoTitle`, one or more `FeaturePromoDescription`, `FeaturePromoBenefits` of `FeaturePromoBenefit` (with an `icon` tile) and `FeaturePromoActions`.\n- **`FeaturePromoMedia`** (optional): a framed panel — no background images or gradients.\n- **`FeaturePromoGrid`** (optional): spans the full width with one to three columns — choice cards, `Item`s with `href` for shortcuts, or cards that explain options.\n\n`variant=\"brand\"` frames the card with a primary → brand gradient border.\n\n`layout=\"split\"` puts the media beside the content and hides it when the card is narrow; `layout=\"centered\"` stacks everything in the middle.\n\nWith a `FeaturePromoAcceptance` (a checkbox card), the buttons in `FeaturePromoActions` stay disabled until it is checked — uncontrolled (`defaultAccepted`) or controlled (`isAccepted` + `onAcceptedChange`).",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/feature-promo/feature-promo.tsx",
          "target": "components/fma-ds/feature-promo/feature-promo.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/checkbox",
        "@fma-ds/icon-tile",
        "@fma-ds/brand"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "promo",
          "upsell",
          "locked",
          "onboarding",
          "empty-state"
        ],
        "contentHash": "d3122ff1aacf"
      }
    },
    {
      "name": "field",
      "type": "registry:ui",
      "title": "Field",
      "description": "Layout primitives for building form fields. Pairs with `Label`, `Input`, and friends.\n\n- **`Field`**: the field wrapper.\n- **`FieldSet`/`FieldLegend`**: for grouping.\n- **`FieldLabel`/`FieldDescription`/`FieldError`**: the usual label + hint + error stack.\n- **`FieldSeparator`**: splits a group.\n- **`FieldHelp`**: an ⓘ button beside a label or column header that opens help in a popover (touch and keyboard, unlike a tooltip); its required `label` names the subject.\n- **`choiceCardClassName`**: the choice-card surface shared by `CheckboxCard` and `RadioCard`; hover uses `accent`. With react-aria the control is the card, instead of shadcn's `FieldLabel` wrapping a `Field`, which would nest labels.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/field/field.tsx",
          "target": "components/fma-ds/field.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/label",
        "@fma-ds/popover",
        "@fma-ds/separator"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "forms",
          "layout",
          "react-aria"
        ],
        "contentHash": "cb9b71a3043a"
      }
    },
    {
      "name": "file-type",
      "type": "registry:ui",
      "title": "File Type",
      "description": "A file type icon: a page with a folded corner and the extension label, in the format's brand or family color (Word blue, Excel green, the GitHub language colors).\n\n- **`type`**: one of 171 extensions (documents, certificates, code, config, archives…), one of 13 families (`image`, `folder`… drawn as a glyph) or any other string (a neutral labelled page).\n- **`getFileType()`**: resolves a file name, path, URL or MIME type, including well-known names without an extension (Dockerfile, `.env.local`, `go.mod`, LICENSE) and aliases such as `.cer`. `getFileTypeCategory()` returns the family.\n- **`variant`**: `outline`, `solid`, `light` or `mono` (theme gray). A `text-*` class recolors it.\n- **`size`**: from `mini` (18px, for table rows) to `xl`; a Tailwind `size-*` class scales the label and stroke with the box (container units).\n- **Content**: `label` replaces the text, `glyph` shows the family glyph and `icon` draws a custom icon.\n\nRenders a `span` with `role=\"img\"` named after the type. It has no state, so it works in Server Components.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/file-type/file-type.tsx",
          "target": "components/fma-ds/file-type.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/file-type, MIT)",
        "tags": [
          "data-display",
          "file",
          "icon",
          "upload"
        ],
        "contentHash": "5144cf26921c"
      }
    },
    {
      "name": "file-upload",
      "type": "registry:ui",
      "title": "File Upload",
      "description": "Picks files by dragging them in, pasting them or browsing, and lists them; it doesn't upload.\n\n`FileUpload` holds the `use-file-upload` state — `accept` (`.pdf,.docx`, `image/*`), `maxSize`, `multiple` + `maxFiles`, uncontrolled (`defaultValue`) or controlled (`value`/`onChange`), `isDisabled` — and the parts read it:\n\n- **`FileUploadDropzone`**: a react-aria `DropZone`, with keyboard and paste support. By default an icon, title, `description` and a trigger, highlighted with `accent` while a drag is over it.\n- **`FileUploadTrigger`**: a `FileTrigger` button.\n- **`FileUploadList`**: renders each file with a function.\n- **`FileUploadItem`**: a file-type icon or image thumbnail, name, size, optional `progress`, `error`, extra `actions` such as retry, and a remove button that keeps focus in the widget.\n- **`FileUploadError`**: a `FieldError` with the validation errors (type, size, count).\n\nUpload progress and retries stay with the app, keyed by file id.\n\nBuilt-in text is in English; translate labels and error messages with `i18n`.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/file-upload/file-upload.tsx",
          "target": "components/fma-ds/file-upload.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/field",
        "@fma-ds/file-type",
        "@fma-ds/icon-tile",
        "@fma-ds/progress",
        "@fma-ds/use-file-upload"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "form",
          "file",
          "upload",
          "dropzone",
          "react-aria"
        ],
        "contentHash": "c41bcda28536"
      }
    },
    {
      "name": "filter-toolbar",
      "type": "registry:block",
      "title": "Filter Toolbar",
      "description": "The controls above a list or `DataGrid`, composed from parts that are each controlled (`value`/`onChange`), so every filter maps to a search param.\n\n- **`FilterToolbar`**: lays the parts out, wrapping on narrow screens; its `i18n.labels` reaches every part.\n- **`FilterSearch`**: a react-aria `SearchField` that commits the term on Enter and when cleared — and, with `debounceMs`, after the user stops typing.\n- **`FilterQuickToggles`**: an outlined `ToggleGroup` for one-press filters.\n- **`FilterToolbarActions`**: holds the trailing actions, `FilterSheet` and `FilterRefresh`.\n- **`FilterSheet`**: a \"Filters\" button with the active count, opening a side `Sheet`. Its children are the `Field`s of a draft the app keeps: `onApply` commits it (return `false` to stay open), `onClear` empties it, and Enter applies.\n- **`FilterRefresh`**: spins while `isPending`.\n- **`FilterChips`**: the applied filters as a react-aria `TagGroup`, each removable with its × or Backspace/Delete, plus \"Clear filters\". Renders nothing when empty.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/filter-toolbar/filter-toolbar.tsx",
          "target": "components/fma-ds/filter-toolbar/filter-toolbar.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/badge",
        "@fma-ds/button",
        "@fma-ds/input",
        "@fma-ds/input-group",
        "@fma-ds/sheet",
        "@fma-ds/toggle-group",
        "@fma-ds/tooltip"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "filters",
          "search",
          "toolbar",
          "list"
        ],
        "contentHash": "7b36ec2c4eb6"
      }
    },
    {
      "name": "form-wizard",
      "type": "registry:block",
      "title": "Form Wizard",
      "description": "A form in steps, in a dialog or on a page (a new customer, an onboarding).\n\n`FormWizard` takes `steps` (`{ title, description }` per step) and the current step, controlled (`step`/`onStepChange`) or not (`defaultStep`).\n\n- **Navigation**: it's a react-aria `Form` whose submit is Next, so Enter advances and the current step's fields validate natively (only that step is mounted). Then `onNext(step)` runs — validate or save there (react-hook-form's `trigger`). Returning `false` or throwing keeps the user on the step, and a promise shows Next as pending. Finish runs `onNext` of the last step and then `onComplete`.\n- **`FormWizardSteps`**: the `stepper` list. Earlier steps are reachable, later ones only through Next. Titles show when the wizard is wide enough for that many steps; narrower, only the numbers, with the current title under them (container query).\n- **`FormWizardStep`**: holds a step's fields; after Back or Next, focus moves to its first field.\n- **`FormWizardFooter`**: the progress (\"Step 2 of 4\", announced politely), `children` before Back (a dialog's Cancel), Back and Next/Finish.\n\nThe values stay in the app; with react-hook-form, keep `shouldUnregister` off.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/form-wizard/form-wizard.tsx",
          "target": "components/fma-ds/form-wizard/form-wizard.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/spinner",
        "@fma-ds/stepper"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "form",
          "wizard",
          "stepper",
          "steps"
        ],
        "contentHash": "6ab43968d4da"
      }
    },
    {
      "name": "glance",
      "type": "registry:ui",
      "title": "Glance",
      "description": "A quick piece of information that opens more context one click away — an account notice, a balance, a count of pending items.\n\n`Glance` wraps react-aria's `DialogTrigger` and shares a `tone` (`default`, `info`, `success`, `warning`, `destructive`) with its parts.\n\n- **`GlanceTrigger`**: the compact button — an icon plus `GlanceText` (a `GlanceLabel` caption over a `GlanceValue`), or icon-only with `size=\"icon\"` and an `aria-label`.\n- **`GlanceIndicator`**: pins a dot or count to the trigger's corner.\n- **`GlanceContent`**: a popover holding a dialog (focus moves in, Escape closes, focus returns), laid out with `GlanceHeader`, `GlanceMedia` (an `IconTile` in the tone), `GlanceTitle`, `GlanceDescription` and `GlanceFooter`. Its children can be a function of `{ close }`, to close it from an action.\n\nTone tints the trigger like `Alert`, with no motion — urgency comes from tone and wording.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/glance/glance.tsx",
          "target": "components/fma-ds/glance.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/icon-tile",
        "@fma-ds/popover"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "overlay",
          "popover",
          "notice",
          "status",
          "header"
        ],
        "contentHash": "24871faccb10"
      }
    },
    {
      "name": "hover-card",
      "type": "registry:ui",
      "title": "Hover Card",
      "description": "A popover that shows on hover or focus instead of click, for previewing content (a profile card, a link preview) without navigating away. Unlike a tooltip, it can contain interactive content.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/hover-card/hover-card.tsx",
          "target": "components/fma-ds/hover-card.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "overlay",
          "popover",
          "react-aria"
        ],
        "contentHash": "f7733fe02493"
      }
    },
    {
      "name": "icon-stack",
      "type": "registry:ui",
      "title": "Icon Stack",
      "description": "A layered icon illustration for empty states: three receding cards drawn from `currentColor`, with an optional glyph (`children`) laid flat on the front card.\n\nPairs with `EmptyMedia`. Decorative: the SVG is hidden from assistive tech, so give the glyph `aria-hidden` too.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/icon-stack/icon-stack.tsx",
          "target": "components/fma-ds/icon-stack.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/icon-stack, MIT)",
        "tags": [
          "feedback",
          "empty-state",
          "illustration",
          "icon"
        ],
        "contentHash": "e1ff3cc7fc9a"
      }
    },
    {
      "name": "icon-tile",
      "type": "registry:ui",
      "title": "Icon Tile",
      "description": "A square surface that gives icons a consistent footprint.\n\n- **`variant`**: `outline` (bordered), `elevated` (raised chip), `soft` (tinted double container), `solid` (filled) or `frame` (double container matching `Card`). `soft` and `solid` follow `currentColor`, so a text color class retints them.\n- **`size`**: from `xs` to `xl`.\n- **`radius`**: `default` (clamped to the tile) or `full` (circular).\n\nRenders a `<span>`; wrap it in a `Button` or `Link` to make it interactive.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/icon-tile/icon-tile.tsx",
          "target": "components/fma-ds/icon-tile.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/icon-tile, MIT)",
        "tags": [
          "data-display",
          "icon",
          "surface"
        ],
        "contentHash": "47b0a69cb33e"
      }
    },
    {
      "name": "input",
      "type": "registry:ui",
      "title": "Input",
      "description": "A single-line text input, styled to match the rest of the registry. Plain native attributes (disabled, not isDisabled) since it wraps react-aria-components' bare Input rather than a higher-level field primitive.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/input/input.tsx",
          "target": "components/fma-ds/input.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "forms",
          "input",
          "react-aria"
        ],
        "contentHash": "617dcbe2db7d"
      }
    },
    {
      "name": "input-group",
      "type": "registry:ui",
      "title": "Input Group",
      "description": "Wraps an Input or Textarea with leading/trailing addons (icons, text, or buttons) inside one bordered container, so the whole group shares a single focus ring and border.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/input-group/input-group.tsx",
          "target": "components/fma-ds/input-group.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/input",
        "@fma-ds/textarea"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "forms",
          "input",
          "react-aria"
        ],
        "contentHash": "e387b2fb09b3"
      }
    },
    {
      "name": "input-masks",
      "type": "registry:lib",
      "title": "Input Masks",
      "description": "An input-mask system built on Maskito: mask option hooks, formatters and remover utilities for Brazilian documents and common formats.\n\n- **Documents**: CPF, CNPJ, CPF-or-CNPJ, CEP.\n- **Contact and payment**: phone; credit card, grouped by issuer (Amex 4-6-5, up to 19 digits).\n- **Dates and numbers**: date, date range, date-time, time, decimal.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/lib/input-masks/cep-mask.ts",
          "target": "lib/fma-ds/input-masks/cep-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/cnpj-mask.ts",
          "target": "lib/fma-ds/input-masks/cnpj-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/cnpj-or-cpf-mask.ts",
          "target": "lib/fma-ds/input-masks/cnpj-or-cpf-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/cpf-mask.ts",
          "target": "lib/fma-ds/input-masks/cpf-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/credit-card-mask.ts",
          "target": "lib/fma-ds/input-masks/credit-card-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/date-mask.ts",
          "target": "lib/fma-ds/input-masks/date-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/date-range-mask.ts",
          "target": "lib/fma-ds/input-masks/date-range-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/date-time-mask.ts",
          "target": "lib/fma-ds/input-masks/date-time-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/decimal-mask.ts",
          "target": "lib/fma-ds/input-masks/decimal-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/index.ts",
          "target": "lib/fma-ds/input-masks/index.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/pattern-mask.ts",
          "target": "lib/fma-ds/input-masks/pattern-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/phone-mask.ts",
          "target": "lib/fma-ds/input-masks/phone-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/presets.ts",
          "target": "lib/fma-ds/input-masks/presets.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/stable-mask.ts",
          "target": "lib/fma-ds/input-masks/stable-mask.ts",
          "type": "registry:lib"
        },
        {
          "path": "src/lib/input-masks/time-mask.ts",
          "target": "lib/fma-ds/input-masks/time-mask.ts",
          "type": "registry:lib"
        }
      ],
      "registryDependencies": [
        "@fma-ds/credit-card-validation",
        "@fma-ds/type-helper",
        "@fma-ds/types"
      ],
      "dependencies": [
        "@maskito/core@^5.6.0",
        "@maskito/kit@^5.6.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "forms",
          "mask",
          "input",
          "pt-BR"
        ],
        "contentHash": "7f3e9e524aa5"
      }
    },
    {
      "name": "input-otp",
      "type": "registry:ui",
      "title": "Input Otp",
      "description": "A one-time-password / verification-code input rendered as individual boxed slots, backed by a single hidden text input for real typing, paste, and autofill behavior.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/input-otp/input-otp.tsx",
          "target": "components/fma-ds/input-otp.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "input-otp@^1.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova. Built on the input-otp library, not react-aria-components.",
        "tags": [
          "forms",
          "input",
          "otp"
        ],
        "contentHash": "872cd0243092"
      }
    },
    {
      "name": "interval-helpers",
      "type": "registry:lib",
      "title": "Interval Helpers",
      "description": "Helpers for inclusive `Interval<T>` spans (e.g. unavailable date ranges), generic over any `T` with a `.compare()` method, such as `@internationalized/date`'s `DateValue`.\n\n`createIsWithinAnyInterval` plugs straight into react-aria's `isDateUnavailable` prop.",
      "author": "@fma-ds/ds",
      "categories": [
        "date"
      ],
      "files": [
        {
          "path": "src/lib/interval-helpers.ts",
          "target": "lib/fma-ds/interval-helpers.ts",
          "type": "registry:lib"
        }
      ],
      "registryDependencies": [
        "@fma-ds/types"
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "date",
          "interval"
        ],
        "contentHash": "df7e3a47b4bc"
      }
    },
    {
      "name": "item",
      "type": "registry:ui",
      "title": "Item",
      "description": "A generic row layout for lists of things — media/icon, title, description, and trailing actions.\n\n- **Rendering**: a `<div>` or, when given an `href`, a real link (hovered with the theme's `accent`).\n- **`ItemGroup`**: stacks several with consistent spacing.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/item/item.tsx",
          "target": "components/fma-ds/item.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/separator"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "layout",
          "list",
          "react-aria"
        ],
        "contentHash": "7ed39bf534dc"
      }
    },
    {
      "name": "kbd",
      "type": "registry:ui",
      "title": "Kbd",
      "description": "Displays a keyboard key or shortcut (e.g. ⌘K) inline, styled as a small pill. KbdGroup lays out several keys side by side for combos like ⌘+Shift+P.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/kbd/kbd.tsx",
          "target": "components/fma-ds/kbd.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "data-display",
          "keyboard",
          "react-aria"
        ],
        "contentHash": "e7787023a469"
      }
    },
    {
      "name": "label",
      "type": "registry:ui",
      "title": "Label",
      "description": "A form field label.\n\nPair it with a control via `id`/`htmlFor` rather than passing label text as the control's own children: several toggle-style primitives (`Checkbox`, `Switch`, `RadioGroupItem`) render their children inside a small fixed-size box meant for a custom indicator, not prose.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/label/label.tsx",
          "target": "components/fma-ds/label.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "forms",
          "label",
          "react-aria"
        ],
        "contentHash": "2afa3c4f3ff9"
      }
    },
    {
      "name": "loading-overlay",
      "type": "registry:ui",
      "title": "Loading Overlay",
      "description": "Blocks interaction while an operation runs. No brand animation: just a spinner.\n\n- **`LoadingOverlay`**: wraps a region. While `isLoading`, its children stay visible under a veil with a spinner and `label` (default \"Loading…\", announced via `role=\"status\"`), become `inert`, and the region is `aria-busy`.\n- **`LoadingScreen`**: the same for the whole app, as a non-dismissable modal (focus held, page hidden from assistive tech, scroll locked) — for operations that must finish before anything else, like saving a status change.\n\nPass a translated `label` as needed.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/loading-overlay/loading-overlay.tsx",
          "target": "components/fma-ds/loading-overlay.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "feedback",
          "loading",
          "overlay",
          "busy"
        ],
        "contentHash": "51bfa514b089"
      }
    },
    {
      "name": "marker",
      "type": "registry:ui",
      "title": "Marker",
      "description": "A small inline label used in chat/message timelines — a date separator, a status note, or similar metadata — rendered in muted text with an optional icon.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/marker/marker.tsx",
          "target": "components/fma-ds/marker.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova",
        "tags": [
          "chat",
          "data-display"
        ],
        "contentHash": "3010ea1b1e2f"
      }
    },
    {
      "name": "masked-input",
      "type": "registry:ui",
      "title": "Masked Input",
      "description": "An `Input` with live Maskito formatting. Works inside a react-aria `TextField`.\n\n- **`mask`**: a preset name (`\"cpf\"`, `\"cnpj\"`, `\"cpf-cnpj\"`, `\"cep\"`, `\"phone\"`, `\"credit-card\"`, `\"date\"`, `\"time\"`, `\"date-time\"`, `\"date-range\"`, `\"decimal\"`), a parameterized preset such as `{ type: \"decimal\", prefix: \"R$ \" }` or `{ type: \"date\", mode: \"mm/yy\" }` for a card expiry (safe to write inline), or custom Maskito options.\n- **Presets**: set `inputMode`, `autoComplete` and a placeholder.\n- **Value**: `onValueChange` receives the raw value (digits, ISO date, dot-decimal) and the masked text. `value` may be either, so a form can store only the raw value.\n\nFor other inputs, such as `InputGroupInput`, spread `useMask(...).inputProps` instead.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/masked-input/masked-input.tsx",
          "target": "components/fma-ds/masked-input.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/input",
        "@fma-ds/use-mask"
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "forms",
          "input",
          "mask",
          "pt-BR"
        ],
        "contentHash": "1ed1383fe0d0"
      }
    },
    {
      "name": "menubar",
      "type": "registry:ui",
      "title": "Menubar",
      "description": "An app-style menu bar (File, Edit, View…).\n\n- **Structure**: `Menubar` is a react-aria `Toolbar`, so arrow keys move between menus. Each `MenubarMenu` pairs a `MenubarTrigger` with a `MenubarContent` built on `DropdownMenu`, including submenus (`MenubarSub`).\n- **Checkable items**: come from react-aria selection — give a `MenubarGroup` a `selectionMode` (`\"multiple\"` or `\"single\"`) and `selectedKeys`/`onSelectionChange`, and its items show a check when selected.\n- **Opening**: menus open on press or Enter/Space/ArrowDown. While one is open, hovering another trigger or pressing ArrowLeft/ArrowRight opens the neighbouring menu.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/menubar/menubar.tsx",
          "target": "components/fma-ds/menubar.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/dropdown-menu"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "origin": "API of shadcn/ui's Menubar, rebuilt on react-aria Toolbar and the registry's DropdownMenu",
        "tags": [
          "navigation",
          "menu",
          "menubar",
          "toolbar",
          "react-aria"
        ],
        "contentHash": "f80f96b72a64"
      }
    },
    {
      "name": "message",
      "type": "registry:ui",
      "title": "Message",
      "description": "Layout for one message row in a chat UI — avatar, header, footer, and a content column that aligns to the start or end depending on who sent it. Pairs with Bubble for the actual message content.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/message/message.tsx",
          "target": "components/fma-ds/message.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova",
        "tags": [
          "chat",
          "layout"
        ],
        "contentHash": "866cf9356b98"
      }
    },
    {
      "name": "message-scroller",
      "type": "registry:ui",
      "title": "Message Scroller",
      "description": "An auto-scrolling viewport for chat message lists: sticks to the latest message as new ones arrive, and shows a jump-to-end/start button once the user scrolls away.\n\n**Experimental**: it doesn't sit on react-aria-components like the rest of this registry, and `@shadcn/react` is still pre-1.0.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/message-scroller/message-scroller.tsx",
          "target": "components/fma-ds/message-scroller.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "@shadcn/react@^0.3.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova. Built on @shadcn/react/message-scroller, not react-aria-components — upstream hasn't ported this one to the aria base yet.",
        "tags": [
          "chat",
          "scroll",
          "@shadcn/react"
        ],
        "contentHash": "3ae18a214230"
      }
    },
    {
      "name": "native-select",
      "type": "registry:ui",
      "title": "Native Select",
      "description": "A styled wrapper around the real, native <select> — use it when you need actual native select behavior (mobile OS pickers, form autofill, no JS dependency) instead of react-aria-components' custom Select.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/native-select/native-select.tsx",
          "target": "components/fma-ds/native-select.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "form",
          "select",
          "native"
        ],
        "contentHash": "b79652053c23"
      }
    },
    {
      "name": "navigation-menu",
      "type": "registry:ui",
      "title": "Navigation Menu",
      "description": "Site-header navigation: a `<nav>` list of top-level links and disclosure dropdowns. For app command menus use `Menubar` or `DropdownMenu`.\n\n- **Items**: a `NavigationMenuItem` holds either a `NavigationMenuLink` or a `NavigationMenuTrigger` (a button with `aria-expanded`) plus its `NavigationMenuContent` (a popover).\n- **Closing**: Escape or a click outside closes the dropdown and returns focus to the trigger; following a link closes it too.\n- **Links**: style plain links like triggers with `navigationMenuTriggerStyle()`, and mark the current page with `aria-current=\"page\"`.\n- **Hover**: dropdowns open on press; with `openOnHover` they also open when the pointer rests on a trigger (`delay`, `closeDelay`). That's a non-modal \"peek\" that leaves focus alone, switches at once to another trigger and closes when the pointer leaves or on Escape. Pressing a peeked trigger keeps it open as a regular dropdown.\n- **`NavigationMenuIndicator`**: add it after the list for an arrow that slides under the open trigger.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/navigation-menu/navigation-menu.tsx",
          "target": "components/fma-ds/navigation-menu.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "origin": "API of shadcn/ui's NavigationMenu, rebuilt on react-aria Button, Popover, Dialog and Link",
        "tags": [
          "navigation",
          "menu",
          "header",
          "react-aria"
        ],
        "contentHash": "151881ea0fc1"
      }
    },
    {
      "name": "notification-center",
      "type": "registry:block",
      "title": "Notification Center",
      "description": "Notifications in the header and on their own page, driven by props and callbacks (no server state).\n\n- **`NotificationMenu`**: the bell — an icon `GlanceTrigger` whose `GlanceIndicator` shows the unread count (also in the button's name). It opens a panel with the recent items, \"Mark all as read\" (`onMarkAllAsRead`), loading and empty states and a \"View all\" link (`viewAllHref`).\n- **`NotificationList`**: every notification as cards with a read/unread `Badge`, for a page paired with `Pagination`.\n- **`NotificationItem`**: an unread dot (or an `icon`), the title — a link when it has `href`, calling `onOpen` — the message, the date (formatted in the `I18nProvider` locale) and icon buttons for `onMarkAsRead` and `onDelete`, described by the title.\n\nUrgent notifications are a `ConfirmDialog` opened with `useDialogPromise`.\n\nBuilt-in text is in English; override it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/notification-center/notification-center.tsx",
          "target": "components/fma-ds/notification-center/notification-center.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/badge",
        "@fma-ds/button",
        "@fma-ds/empty",
        "@fma-ds/glance",
        "@fma-ds/skeleton",
        "@fma-ds/tooltip"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "notifications",
          "header",
          "popover",
          "list"
        ],
        "contentHash": "4ba2b130b1df"
      }
    },
    {
      "name": "order-summary",
      "type": "registry:block",
      "title": "Order Summary",
      "description": "What the user is about to confirm before buying: lines, an applicable benefit, discounts, the total and the action.\n\n`OrderSummary` takes the `title`, `totalLabel`, `total` and optional `totalDescription` (values formatted by the app) and the `action` button.\n\n- **Large screens**: a card that sticks while the page scrolls — put it in the side column.\n- **Smaller screens**: a bar fixed to the bottom with the total and the action; the total opens the lines in a bottom sheet. Leave room under the page, e.g. `pb-28 lg:pb-0`.\n\nIts children sit in a `description-list`:\n\n- **`OrderSummaryLine`**: `label`, `value` and a `description` under the label — an item, a fee, who the order is for. `tone=\"discount\"` for a negative value.\n- **`OrderSummaryOption`**: a benefit behind a `Switch`, such as the account balance, its amount struck through while off.\n\nThe total stands apart by size and weight, not only color.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/order-summary/order-summary.tsx",
          "target": "components/fma-ds/order-summary/order-summary.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/card",
        "@fma-ds/description-list",
        "@fma-ds/separator",
        "@fma-ds/sheet",
        "@fma-ds/switch"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "checkout",
          "summary",
          "order",
          "total"
        ],
        "contentHash": "917b083c47a4"
      }
    },
    {
      "name": "page-header",
      "type": "registry:block",
      "title": "Page Header",
      "description": "The top of a page, composed from parts: breadcrumbs, the title with its description and actions, and an optional sub-page nav.\n\n- **`PageHeaderBreadcrumbs`**: an `items` trail whose last entry is the current page.\n- **`PageHeaderContent`**: heading on one side, actions on the other, stacked on narrow screens.\n- **`PageHeaderHeading`**: `PageHeaderTitle` (the `<h1>`, with an `isLoading` skeleton) and `PageHeaderDescription`. Anything that belongs beside the title, like a status select, goes inside it too.\n- **`PageHeaderActions`**: buttons that stretch on mobile.\n- **`PageHeaderNav`**: an area's sub-pages, usually a `TabNav`.\n\nWrap the app in react-aria's `RouterProvider` so breadcrumb and tab links route client-side.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/page-header/page-header.tsx",
          "target": "components/fma-ds/page-header/page-header.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/breadcrumb",
        "@fma-ds/skeleton"
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "header",
          "page",
          "breadcrumb",
          "navigation"
        ],
        "contentHash": "b977a28df88b"
      }
    },
    {
      "name": "pagination",
      "type": "registry:ui",
      "title": "Pagination",
      "description": "Page-number navigation built from LinkButton — previous/next controls, numbered links, and an ellipsis for collapsed ranges.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/pagination/pagination.tsx",
          "target": "components/fma-ds/pagination.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "navigation",
          "links",
          "react-aria"
        ],
        "contentHash": "cfb64741af70"
      }
    },
    {
      "name": "panel-card",
      "type": "registry:block",
      "title": "Panel Card",
      "description": "A panel on a `Card` — a dashboard chart or table, or one resource and its status (a contract, the current plan) — with a standard header and a body that handles its own states.\n\n### `PanelCardHeader`\n\n- **`title`**: a heading, `headingLevel` 2 by default.\n- **`icon`**: shown in a `soft` `IconTile`.\n- **`description`** and **`status`**: a `Badge` next to the title.\n- **`help`**: opened by an ⓘ button in a popover, so it works with touch and keyboard.\n- **`updatedAt`**: a `Date` or timestamp, formatted with `Intl` in the react-aria locale; `isRefreshing` shows a spinner next to it while the content stays on screen.\n- **`toolbar`**: a slot for the card's own controls, which wraps below the title on narrow cards.\n\n### `PanelCardBody`\n\nShows the first state that applies — `isLoading` (skeleton, first load only), `isError` (message plus \"Try again\" with `onRetry`), `isEmpty` (`Empty`) — or its children. `emptyState`/`errorState` replace the built-in messages (e.g. a missing resource with the action that adds it).\n\n### What goes where\n\n- **Body**: charts, tables, `stat-cards` and `description-list`; problems with the resource go in an `Alert` there, not in the card colors.\n- **`CardFooter`**: actions.\n\n`PanelCard`'s `i18n.labels` reaches every built-in text.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/panel-card/panel-card.tsx",
          "target": "components/fma-ds/panel-card/panel-card.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/card",
        "@fma-ds/empty",
        "@fma-ds/field",
        "@fma-ds/icon-tile",
        "@fma-ds/skeleton",
        "@fma-ds/spinner"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "dashboard",
          "card",
          "chart",
          "status"
        ],
        "contentHash": "293c6339cf41"
      }
    },
    {
      "name": "password-input",
      "type": "registry:ui",
      "title": "Password Input",
      "description": "A password field with a show/hide toggle, built on `InputGroup`. Pair it with `password-rules` when creating a password.\n\n- **Toggle**: a button named by `toggleLabel` (default \"Show password\"; pass a translation as needed) whose `aria-pressed` reports whether the text is revealed.\n- **Visibility**: uncontrolled (`defaultRevealed`) or controlled (`isRevealed`/`onRevealedChange`).\n- **Input**: the rest of the props go to the input, so it works inside a react-aria `TextField` (label, description, validation) and takes `autoComplete=\"current-password\"` or `\"new-password\"`.\n\nHides Edge's built-in reveal button.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/password-input/password-input.tsx",
          "target": "components/fma-ds/password-input.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/input-group"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "form",
          "input",
          "password",
          "react-aria"
        ],
        "contentHash": "cec54111bd25"
      }
    },
    {
      "name": "password-rules",
      "type": "registry:ui",
      "title": "Password Rules",
      "description": "The rules a new password must follow, each marked pending, met or unmet as the user types — by icon and a screen-reader state label (`stateLabels`), not color alone.\n\n- **`rules`**: takes `PasswordRule` objects (`id`, `label`, `test(value, confirmation)`).\n- **`passwordRules`**: builds the usual ones — `minLength(n)`, `maxLength(n)`, `uppercase()`, `lowercase()`, `number()`, `special()`, `match()` against `confirmation` — each taking a `label` to translate it. Defaults to 8+ characters, upper, lower and a number.\n- **Neutral start**: rules stay neutral until there's something to judge.\n- **Validation**: the pure helpers `evaluatePasswordRules` and `isPasswordValid` share the same rules for form validation.\n\nGive it an `id` and point the input's `aria-describedby` at it.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/password-rules/password-rules.tsx",
          "target": "components/fma-ds/password-rules.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "form",
          "password",
          "validation"
        ],
        "contentHash": "eec8b40a9a92"
      }
    },
    {
      "name": "payment-card",
      "type": "registry:block",
      "title": "Payment Card",
      "description": "The payment card screens: the saved card and the form to add one.\n\n### Saved card\n\n- **`PaymentCardDetails`**: draws the saved card (`credit-card`) beside a `description-list` (issuer, last digits, holder, expiry) from the gateway's data (`number` with hidden digits, `issuer`, `name`, `expiry`), with `actions` under it.\n- **`PaymentCardRemove`**: the destructive button that asks through a `ConfirmDialog` and runs `onRemove` with the dialog pending, showing an error if it throws.\n\n### Adding a card\n\n`PaymentCardForm` is a react-aria `Form` that lays `PaymentCardPreview` beside `PaymentCardFields` (stacked when narrow). The fields are ready-made react-aria `TextField`s that feed the live preview with their value and focus (the code field turns the card):\n\n- **`PaymentCardNumberField`**: masked by issuer.\n- **`PaymentCardNameField`**: `part=\"first\"`/`\"last\"` split it for gateways that take them apart.\n- **`PaymentCardExpiryField`**: `MM/YY`.\n- **`PaymentCardCodeField`**: digits, sized by the issuer.\n\nEach takes `value`/`onChange` or `defaultValue`, `name`, `validate`, `isInvalid` and `errorMessage` (for react-hook-form's `Controller`), `label` and `description`. Validate with the `credit-card-validation` lib.\n\nBuilt-in text is in English; translate it with `label`, `placeholder` and `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/payment-card/payment-card.tsx",
          "target": "components/fma-ds/payment-card/payment-card.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/confirm-dialog",
        "@fma-ds/credit-card",
        "@fma-ds/description-list",
        "@fma-ds/input",
        "@fma-ds/label",
        "@fma-ds/masked-input",
        "@fma-ds/use-dialog-promise",
        "@fma-ds/credit-card-validation"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "payment",
          "credit-card",
          "form",
          "billing"
        ],
        "contentHash": "0ecb95fbae48"
      }
    },
    {
      "name": "plan-builder",
      "type": "registry:block",
      "title": "Plan Builder",
      "description": "Build what the user is about to buy by choosing quantities, with the price in real time: a custom plan with several resources, or a quantity of one item (extra notes, credits).\n\n- **`PlanBuilder`**: lays out the resources and its `summary` (an `OrderSummary`: a sticky card on large screens, a bar fixed to the bottom on smaller ones). `isCalculating` turns every `PlanPrice` (a price formatted by the app) into a skeleton while the app recalculates.\n- **`PlanResource`**: a card with `icon`, `title`, `description` and a controlled `Slider` named by `label` (`value`/`onChange`, `minValue`/`maxValue`/`step`, `marks`, `formatValue`, `limit` for stock or quota left, `isDisabled`). A `hint` under the slider says why it stops or is disabled, and an optional `included` accordion lists what comes with it.\n- **`PlanResourceAddon`**: an add-on as a child of the resource — a switch with label and description.\n\nThe price, debouncing, limits and notices stay in the app.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/plan-builder/plan-builder.tsx",
          "target": "components/fma-ds/plan-builder/plan-builder.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/accordion",
        "@fma-ds/card",
        "@fma-ds/icon-tile",
        "@fma-ds/skeleton",
        "@fma-ds/slider",
        "@fma-ds/switch"
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "checkout",
          "plan",
          "pricing",
          "slider",
          "quantity"
        ],
        "contentHash": "ff4c976d1e45"
      }
    },
    {
      "name": "popover",
      "type": "registry:ui",
      "title": "Popover",
      "description": "A non-modal floating panel anchored to a trigger — for supplementary controls or content (e.g. a settings form) that shouldn't block the rest of the page.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/popover/popover.tsx",
          "target": "components/fma-ds/popover.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "overlay",
          "floating",
          "react-aria"
        ],
        "contentHash": "a551050591e6"
      }
    },
    {
      "name": "pricing-plans",
      "type": "registry:block",
      "title": "Pricing Plans",
      "description": "Choose one of a few fixed plans, then confirm. For a plan built from quantities and add-ons, use `plan-builder`.\n\n- **`PricingPlans`**: lays out the options and an optional `summary` (an `OrderSummary` with the chosen plan and a \"Continue\" action: a sticky card on large screens, a bar fixed to the bottom on smaller ones).\n- **`PricingPeriod`**: the billing period as a segmented toggle that always has one selected (`value`/`onChange`; `PricingPeriodOption` with an `id`, and a `Badge` inside for the saving).\n- **`PricingPlanGroup`**: a radio group of `PricingPlan` cards, stacked in one list on small screens and side by side in equal columns once its own width fits them.\n- **`PricingPlan`**: `name`, `badge` (\"Most popular\"), `description`, `price` and `period` formatted by the app, `priceNote` (the equivalent, \"R$ 718,80 per year\") and `isFeatured` for a brand glow and a `brand` badge (the border is left to the selected plan). The radio is named by the plan and described by its price.\n- **`PricingPlanFeature`**: what the plan has; `isIncluded={false}` shows a dash, muted text and \"Not included\" read before it.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/pricing-plans/pricing-plans.tsx",
          "target": "components/fma-ds/pricing-plans/pricing-plans.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/badge",
        "@fma-ds/radio-group",
        "@fma-ds/toggle-group",
        "@fma-ds/brand"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "checkout",
          "plan",
          "pricing",
          "subscription"
        ],
        "contentHash": "4cae110cc392"
      }
    },
    {
      "name": "progress",
      "type": "registry:ui",
      "title": "Progress",
      "description": "A horizontal progress bar communicating the completion of a task, determinate or indeterminate, with optional label/value slots.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/progress/progress.tsx",
          "target": "components/fma-ds/progress.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "feedback",
          "loading",
          "react-aria"
        ],
        "contentHash": "420a59f1d1dc"
      }
    },
    {
      "name": "questionnaire",
      "type": "registry:ui",
      "title": "Questionnaire",
      "description": "A multi-step form/survey block (progress, choices, text input, previous/skip/next/submit) for chat-kit style conversational flows.\n\n**Experimental**: built on `@shadcn/react`, not react-aria-components — upstream hasn't ported it to the aria base yet, and `@shadcn/react` is still pre-1.0.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/questionnaire/questionnaire.tsx",
          "target": "components/fma-ds/questionnaire.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "@shadcn/react@^0.3.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "experimental",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "chat",
          "form",
          "@shadcn/react"
        ],
        "contentHash": "1c7f3ec3e00f"
      }
    },
    {
      "name": "radio-group",
      "type": "registry:ui",
      "title": "Radio Group",
      "description": "A set of mutually-exclusive radio options.\n\nPair each `RadioGroupItem` with an external `Label` via `id`/`htmlFor` — its own children slot is for a custom indicator, not label text.\n\n- **`RadioCard`**: a choice card — the whole card is the radio, its children are the content (an `IconTile`, `FieldContent` with `FieldTitle` and `FieldDescription`) and a round indicator sits at the end. Selected cards take a `primary` tint, hovered ones `accent`.\n- **Layout**: lay several out with a `className` grid on the group.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/radio-group/radio-group.tsx",
          "target": "components/fma-ds/radio-group.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/field"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "form",
          "selection",
          "react-aria"
        ],
        "contentHash": "9a6e0dbcbeb6"
      }
    },
    {
      "name": "resizable",
      "type": "registry:ui",
      "title": "Resizable",
      "description": "Resizable split panes (panel group, panel, drag handle) built on react-resizable-panels — for layouts like a sidebar/editor split the user can drag to resize.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/resizable/resizable.tsx",
          "target": "components/fma-ds/resizable.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-resizable-panels@^4.14.8"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "layout",
          "panels",
          "react-resizable-panels"
        ],
        "contentHash": "d88bd34b533c"
      }
    },
    {
      "name": "scroll-area",
      "type": "registry:ui",
      "title": "Scroll Area",
      "description": "A scrollable container with a themeable, always-consistent-looking scrollbar via native scrollbar-width/scrollbar-color — no JS scrollbar emulation.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/scroll-area/scroll-area.tsx",
          "target": "components/fma-ds/scroll-area.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "layout",
          "scroll"
        ],
        "contentHash": "260611f8747c"
      }
    },
    {
      "name": "select",
      "type": "registry:ui",
      "title": "Select",
      "description": "A listbox-style picker (react-aria-components' Select) with a trigger, popover, groups, and an optional search input — richer than the native <select> (see native-select for that).",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/select/select.tsx",
          "target": "components/fma-ds/select.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/input-group"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "form",
          "select",
          "react-aria"
        ],
        "contentHash": "805467049070"
      }
    },
    {
      "name": "separator",
      "type": "registry:ui",
      "title": "Separator",
      "description": "A thin visual divider between content, horizontal or vertical.",
      "author": "@fma-ds/ds",
      "categories": [
        "layout"
      ],
      "files": [
        {
          "path": "src/core/separator/separator.tsx",
          "target": "components/fma-ds/separator.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "layout",
          "divider",
          "react-aria"
        ],
        "contentHash": "cf7194ee7b02"
      }
    },
    {
      "name": "settings-form",
      "type": "registry:block",
      "title": "Settings Form",
      "description": "A long edit form in sections, saved as a whole (account, company, preferences).\n\n- **`SettingsForm`**: a react-aria `Form` that only shows state the app owns, so react-hook-form or any other form state fits: `isDirty` (enables Save and Discard), `isPending` (spinner on Save, `aria-busy`) and `onReset` (adds a Discard button that should restore the saved values).\n- **`SettingsSection`**: groups fields under a `title` and `description` (a labelled group) stacked above them, leaving the width to the fields next to an app sidebar. The fields fall into a two-column grid when there's room (container query); `col-span-full` takes the whole row.\n- **`SettingsFormFooter`**: a save bar stuck to the bottom of the viewport with a polite status line (no changes / unsaved / saving), optional children before the buttons, Discard and Save.\n\nWarning before leaving with unsaved changes stays in the app, since it depends on the router; use `confirm-dialog`.\n\nBuilt-in text is in English; translate it with `i18n.labels`.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/settings-form/settings-form.tsx",
          "target": "components/fma-ds/settings-form/settings-form.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/spinner"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "form",
          "settings",
          "fields"
        ],
        "contentHash": "2d3831fee4d1"
      }
    },
    {
      "name": "sheet",
      "type": "registry:ui",
      "title": "Sheet",
      "description": "A modal panel that slides in from an edge of the screen (top/right/bottom/left) — for navigation drawers, filters, or forms that need more room than a popover.\n\n- **`size`**: `sm` (384px, default), `md` (448px) or `lg` (672px) caps a left/right sheet from the `sm` breakpoint up; a width in `className` replaces it.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/sheet/sheet.tsx",
          "target": "components/fma-ds/sheet.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "overlay",
          "modal",
          "drawer",
          "react-aria"
        ],
        "contentHash": "68c99528f19b"
      }
    },
    {
      "name": "sidebar",
      "type": "registry:ui",
      "title": "Sidebar",
      "description": "A collapsible application sidebar with a mobile drawer fallback, a Cmd/Ctrl+B keyboard shortcut, and composable header/content/footer/menu slots.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/sidebar/sidebar.tsx",
          "target": "components/fma-ds/sidebar.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/input",
        "@fma-ds/separator",
        "@fma-ds/sheet",
        "@fma-ds/skeleton",
        "@fma-ds/tooltip",
        "@fma-ds/use-mobile"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "navigation",
          "layout",
          "react-aria"
        ],
        "contentHash": "a8982072190c"
      }
    },
    {
      "name": "skeleton",
      "type": "registry:ui",
      "title": "Skeleton",
      "description": "A pulsing placeholder block for content that's still loading — size and shape it with className to match whatever it stands in for.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/skeleton/skeleton.tsx",
          "target": "components/fma-ds/skeleton.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "feedback",
          "loading"
        ],
        "contentHash": "335c31b596ed"
      }
    },
    {
      "name": "slider",
      "type": "registry:ui",
      "title": "Slider",
      "description": "A draggable single- or range-value slider, horizontal or vertical. Pass an array default/value to get one thumb per value.\n\n- **`label`**: names it above the track.\n- **`showValue`**: prints the value (or range) beside it, formatted by `formatValue` (\"200 pedidos\") or `formatOptions` (currency, percent — also what screen readers announce).\n- **`marks`**: labelled stops under the track (`number` or `{ value, label }`). Clicking one moves the nearest thumb there and fires `onChangeEnd`, while the keyboard keeps using the thumb.\n- **`limit`**: caps the value below `maxValue` (stock left, plan quota). The scale and marks still run to `maxValue`, the track above the limit is drawn as unavailable and its marks are disabled.\n- **`description`**: under the track, says why, and is read with the value.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/slider/slider.tsx",
          "target": "components/fma-ds/slider.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/label"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components)",
        "tags": [
          "forms",
          "input",
          "react-aria"
        ],
        "contentHash": "d2abc2cf276f"
      }
    },
    {
      "name": "sonner",
      "type": "registry:ui",
      "title": "Sonner",
      "description": "A themed wrapper around the sonner toast library. Renders the toast viewport (Toaster); call toast() from \"sonner\" anywhere to actually show one.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/sonner/sonner.tsx",
          "target": "components/fma-ds/sonner.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "lucide-react@^1.61.0",
        "next-themes@^0.4.6",
        "sonner@^2.0.8"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "feedback",
          "toast"
        ],
        "contentHash": "8be1aecebe8b"
      }
    },
    {
      "name": "sortable",
      "type": "registry:ui",
      "title": "Sortable",
      "description": "A reorderable list, row or grid (`layout`: `vertical`, `horizontal`, `grid`).\n\nGive it the items as `value` (or `defaultValue`) with `onChange`, and one `SortableItem` per item whose `id` matches `getKey(item)` (defaults to `item.id`) — as static children or a render function.\n\n- **Pointer**: items drag from anywhere; a line marks the drop position.\n- **`SortableItemHandle`**: required on every item — the visible grip and its keyboard / screen-reader drag button. Enter starts, arrows pick the drop position, Enter drops; arrows reach it in a vertical list, Tab in a row or grid.\n- **`isDisabled`**: pins an item in place.\n- **`selectionMode`**: lets several selected items move together.\n- **`renderDragPreview`**: replaces the browser's drag snapshot.\n- **Events**: `onChange` also gets the moved keys and the drop target; `onDragStart`/`onDragEnd` follow react-aria.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/sortable/sortable.tsx",
          "target": "components/fma-ds/sortable.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "data-display",
          "drag-and-drop",
          "reorder",
          "list",
          "react-aria"
        ],
        "contentHash": "0f29f5662dc9"
      }
    },
    {
      "name": "spinner",
      "type": "registry:ui",
      "title": "Spinner",
      "description": "A spinning loading indicator icon (role=\"status\"), sized via className — drop it inside a disabled button or empty state while something loads.",
      "author": "@fma-ds/ds",
      "categories": [
        "feedback"
      ],
      "files": [
        {
          "path": "src/core/spinner/spinner.tsx",
          "target": "components/fma-ds/spinner.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "feedback",
          "loading"
        ],
        "contentHash": "d8ff8cb260b4"
      }
    },
    {
      "name": "stat-cards",
      "type": "registry:block",
      "title": "Stat Cards",
      "description": "Totals above a list or on a dashboard: figures on their own or on cards that are static, pressable, links or filters.\n\n### `Stat`\n\nA label (`StatLabel`), a value (`StatValue`, formatted by the app, with `isLoading` and `isUnavailable` states), an optional `StatIcon` (a `soft` `IconTile`) and a `StatDescription`.\n\n- **`tone`**: `default`, `success`, `warning`, `info`, `destructive` or `muted`; tints the icon and the value.\n- **`size=\"lg\"`**: enlarges the value.\n\nOn its own, `Stat` has no surface, for several figures inside one card.\n\n### Cards\n\n- **`StatCard`**: static.\n- **`StatCardButton`**: runs `onPress`, or opens a dialog as the child of a `DialogTrigger`.\n- **`StatCardLink`**: navigates, e.g. to the list already filtered.\n- **`StatCardToggle`**: the selectable cards of a `StatCardGroup`, a react-aria `ToggleButtonGroup` that filters a list. `selectionMode=\"single\"` behaves like radios and `\"multiple\"` like checkboxes, controlled by `selectedKeys`/`onSelectionChange` so it maps to a search param.\n\n`StatGrid` and `StatCardGroup` lay cards out in as many columns as fit, and their `i18n.labels` reach every value inside.",
      "author": "@fma-ds/ds",
      "categories": [
        "blocks"
      ],
      "files": [
        {
          "path": "src/blocks/stat-cards/stat-cards.tsx",
          "target": "components/fma-ds/stat-cards/stat-cards.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/icon-tile",
        "@fma-ds/skeleton"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "original",
        "license": "MIT",
        "tags": [
          "block",
          "stats",
          "dashboard",
          "totals",
          "filters"
        ],
        "contentHash": "69acf80190a0"
      }
    },
    {
      "name": "stepper",
      "type": "registry:ui",
      "title": "Stepper",
      "description": "Multi-step navigation, horizontal or vertical, built on react-aria `Tabs`.\n\n- **Keyboard**: arrow keys, Home and End move between steps; Enter or Space selects one (manual activation).\n- **Value**: `value`/`defaultValue`/`onValueChange` hold the current step.\n- **`StepperItem`**: a tab whose `data-state` is `completed` (before the current step, or `isCompleted`), `active` or `inactive`. `isDisabled` skips it and `isLoading` shows the loading indicator.\n- **`indicators`**: swaps an indicator's content per state.\n- **`StepperContent`**: panels with the current step's content.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/stepper/stepper.tsx",
          "target": "components/fma-ds/stepper.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/stepper, MIT); rebuilt on react-aria Tabs",
        "tags": [
          "navigation",
          "stepper",
          "wizard",
          "tabs",
          "react-aria"
        ],
        "contentHash": "32ceb5334598"
      }
    },
    {
      "name": "switch",
      "type": "registry:ui",
      "title": "Switch",
      "description": "A two-state on/off toggle switch, in default and compact sizes.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/switch/switch.tsx",
          "target": "components/fma-ds/switch.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components). Pair with an external Label via id/htmlFor — its own children slot is for a custom thumb, not label text.",
        "tags": [
          "forms",
          "toggle",
          "react-aria"
        ],
        "contentHash": "5288d48ef28b"
      }
    },
    {
      "name": "tab-nav",
      "type": "registry:ui",
      "title": "Tab Nav",
      "description": "Navigation between the pages of an area that looks like tabs: a `<nav>` of react-aria links where the current page carries `aria-current=\"page\"`.\n\nUnlike `Tabs` there are no panels — each item is a route — so use it for sub-pages and `Tabs` for in-page views.\n\n- **`variant`**: matches the tab styles — `default` (segmented on `muted`, the current page raised) or `line` (underlined).\n- **Current item**: when `isCurrent` is set or its `href` matches `TabNav`'s `currentHref` (exactly, or with `matchPrefix` also on sub-paths).\n- **`TabNavItem`**: takes an icon before its label; **`TabNavSeparator`** divides groups.\n- **Overflow**: when items don't fit, the strip scrolls sideways and keeps the current page in view.\n\nWrap the app in react-aria's `RouterProvider` for client routing.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/tab-nav/tab-nav.tsx",
          "target": "components/fma-ds/tab-nav.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "navigation",
          "tabs",
          "routing",
          "react-aria"
        ],
        "contentHash": "52832920fc1b"
      }
    },
    {
      "name": "table",
      "type": "registry:ui",
      "title": "Table",
      "description": "Semantic table primitives (header, body, rows, cells, footer, caption) built on react-aria-components' Table for accessible, sorting/selection-ready markup.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/table/table.tsx",
          "target": "components/fma-ds/table.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "data-display",
          "table",
          "react-aria"
        ],
        "contentHash": "d259b727adf3"
      }
    },
    {
      "name": "tabs",
      "type": "registry:ui",
      "title": "Tabs",
      "description": "A tab list and its panels for switching between related views, with default and line visual variants, horizontal or vertical orientation.",
      "author": "@fma-ds/ds",
      "categories": [
        "navigation"
      ],
      "files": [
        {
          "path": "src/core/tabs/tabs.tsx",
          "target": "components/fma-ds/tabs.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "navigation",
          "disclosure",
          "react-aria"
        ],
        "contentHash": "604995a8a7d9"
      }
    },
    {
      "name": "textarea",
      "type": "registry:ui",
      "title": "Textarea",
      "description": "A multi-line text input that auto-sizes to its content by default (field-sizing-content), rather than staying a fixed number of rows.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/textarea/textarea.tsx",
          "target": "components/fma-ds/textarea.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "forms",
          "input",
          "react-aria"
        ],
        "contentHash": "def7395a10b5"
      }
    },
    {
      "name": "theme-amber-minimal",
      "type": "registry:theme",
      "title": "Amber Minimal",
      "description": "Amber accents on white and near-black, Inter and tight 0.375rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/inter@^5.3.0",
        "@fontsource/source-serif-4@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Inter, sans-serif",
          "font-serif": "Source Serif 4, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(1 0 0)",
          "foreground": "oklch(0.269 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.269 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.269 0 0)",
          "primary": "oklch(0.769 0.165 70.08)",
          "primary-foreground": "oklch(0 0 0)",
          "secondary": "oklch(0.967 0.003 264.542)",
          "secondary-foreground": "oklch(0.446 0.026 256.802)",
          "muted": "oklch(0.985 0.002 247.839)",
          "muted-foreground": "oklch(0.551 0.023 264.364)",
          "accent": "oklch(0.987 0.021 95.277)",
          "accent-foreground": "oklch(0.473 0.125 46.201)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.269 0 0)",
          "invert-foreground": "oklch(1 0 0)",
          "brand": "oklch(0.769 0.165 70.08)",
          "brand-foreground": "oklch(0 0 0)",
          "border": "oklch(0.928 0.006 264.531)",
          "input": "oklch(0.928 0.006 264.531)",
          "ring": "oklch(0.669 0.165 70.08)",
          "chart-1": "oklch(0.669 0.165 70.08)",
          "chart-2": "oklch(0.666 0.157 58.318)",
          "chart-3": "oklch(0.555 0.146 48.998)",
          "chart-4": "oklch(0.473 0.125 46.201)",
          "chart-5": "oklch(0.414 0.105 45.904)",
          "sidebar": "oklch(0.985 0.002 247.839)",
          "sidebar-foreground": "oklch(0.269 0 0)",
          "sidebar-primary": "oklch(0.669 0.165 70.08)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.987 0.021 95.277)",
          "sidebar-accent-foreground": "oklch(0.473 0.125 46.201)",
          "sidebar-border": "oklch(0.928 0.006 264.531)",
          "sidebar-ring": "oklch(0.669 0.165 70.08)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)",
          "radius": "0.375rem"
        },
        "dark": {
          "background": "oklch(0.205 0 0)",
          "foreground": "oklch(0.922 0 0)",
          "card": "oklch(0.269 0 0)",
          "card-foreground": "oklch(0.922 0 0)",
          "popover": "oklch(0.269 0 0)",
          "popover-foreground": "oklch(0.922 0 0)",
          "primary": "oklch(0.769 0.165 70.08)",
          "primary-foreground": "oklch(0 0 0)",
          "secondary": "oklch(0.269 0 0)",
          "secondary-foreground": "oklch(0.922 0 0)",
          "muted": "oklch(0.239 0 0)",
          "muted-foreground": "oklch(0.715 0 0)",
          "accent": "oklch(0.473 0.125 46.201)",
          "accent-foreground": "oklch(0.924 0.115 95.746)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.922 0 0)",
          "invert-foreground": "oklch(0.205 0 0)",
          "brand": "oklch(0.769 0.165 70.08)",
          "brand-foreground": "oklch(0 0 0)",
          "border": "oklch(0.371 0 0)",
          "input": "oklch(0.371 0 0)",
          "ring": "oklch(0.669 0.165 70.08)",
          "chart-1": "oklch(0.837 0.164 84.429)",
          "chart-2": "oklch(0.666 0.157 58.318)",
          "chart-3": "oklch(0.473 0.125 46.201)",
          "chart-4": "oklch(0.555 0.146 48.998)",
          "chart-5": "oklch(0.473 0.125 46.201)",
          "sidebar": "oklch(0.168 0 0)",
          "sidebar-foreground": "oklch(0.922 0 0)",
          "sidebar-primary": "oklch(0.669 0.165 70.08)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.473 0.125 46.201)",
          "sidebar-accent-foreground": "oklch(0.924 0.115 95.746)",
          "sidebar-border": "oklch(0.371 0 0)",
          "sidebar-ring": "oklch(0.669 0.165 70.08)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)"
        }
      },
      "css": {
        "@import \"@fontsource/inter/400.css\"": {},
        "@import \"@fontsource/inter/500.css\"": {},
        "@import \"@fontsource/inter/600.css\"": {},
        "@import \"@fontsource/inter/700.css\"": {},
        "@import \"@fontsource/source-serif-4/400.css\"": {},
        "@import \"@fontsource/source-serif-4/500.css\"": {},
        "@import \"@fontsource/source-serif-4/600.css\"": {},
        "@import \"@fontsource/source-serif-4/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/amber-minimal.json",
        "tags": [
          "amber",
          "minimal",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          }
        },
        "contentHash": "2d02d282c1d1"
      }
    },
    {
      "name": "theme-caffeine",
      "type": "registry:theme",
      "title": "Caffeine",
      "description": "Coffee-brown primary with a latte-colored secondary; the dark mode inverts to a cream primary.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "files": [],
      "cssVars": {
        "theme": {},
        "light": {
          "background": "oklch(0.982 0 0)",
          "foreground": "oklch(0.244 0 0)",
          "card": "oklch(0.991 0 0)",
          "card-foreground": "oklch(0.244 0 0)",
          "popover": "oklch(0.991 0 0)",
          "popover-foreground": "oklch(0.244 0 0)",
          "primary": "oklch(0.434 0.039 41.994)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.92 0.065 74.369)",
          "secondary-foreground": "oklch(0.35 0.069 40.829)",
          "muted": "oklch(0.952 0 0)",
          "muted-foreground": "oklch(0.503 0 0)",
          "accent": "oklch(0.931 0 0)",
          "accent-foreground": "oklch(0.244 0 0)",
          "destructive": "oklch(0.627 0.194 33.339)",
          "destructive-foreground": "oklch(0.507 0.194 33.339)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.244 0 0)",
          "invert-foreground": "oklch(0.982 0 0)",
          "brand": "oklch(0.434 0.039 41.994)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.882 0 0)",
          "input": "oklch(0.882 0 0)",
          "ring": "oklch(0.434 0.039 41.994)",
          "chart-1": "oklch(0.434 0.039 41.994)",
          "chart-2": "oklch(0.92 0.065 74.369)",
          "chart-3": "oklch(0.931 0 0)",
          "chart-4": "oklch(0.937 0.052 75.501)",
          "chart-5": "oklch(0.434 0.044 41.675)",
          "sidebar": "oklch(0.988 0 0)",
          "sidebar-foreground": "oklch(0.264 0 0)",
          "sidebar-primary": "oklch(0.325 0 0)",
          "sidebar-primary-foreground": "oklch(0.988 0 0)",
          "sidebar-accent": "oklch(0.976 0 0)",
          "sidebar-accent-foreground": "oklch(0.325 0 0)",
          "sidebar-border": "oklch(0.94 0 0)",
          "sidebar-ring": "oklch(0.773 0 0)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.178 0 0)",
          "foreground": "oklch(0.949 0 0)",
          "card": "oklch(0.213 0 0)",
          "card-foreground": "oklch(0.949 0 0)",
          "popover": "oklch(0.213 0 0)",
          "popover-foreground": "oklch(0.949 0 0)",
          "primary": "oklch(0.925 0.052 66.173)",
          "primary-foreground": "oklch(0.203 0.024 200.196)",
          "secondary": "oklch(0.316 0.019 63.699)",
          "secondary-foreground": "oklch(0.925 0.052 66.173)",
          "muted": "oklch(0.252 0 0)",
          "muted-foreground": "oklch(0.77 0 0)",
          "accent": "oklch(0.285 0 0)",
          "accent-foreground": "oklch(0.949 0 0)",
          "destructive": "oklch(0.627 0.194 33.339)",
          "destructive-foreground": "oklch(0.727 0.194 33.339)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.949 0 0)",
          "invert-foreground": "oklch(0.178 0 0)",
          "brand": "oklch(0.925 0.052 66.173)",
          "brand-foreground": "oklch(0.203 0.024 200.196)",
          "border": "oklch(0.235 0.012 91.747)",
          "input": "oklch(0.402 0 0)",
          "ring": "oklch(0.925 0.052 66.173)",
          "chart-1": "oklch(0.925 0.052 66.173)",
          "chart-2": "oklch(0.316 0.019 63.699)",
          "chart-3": "oklch(0.285 0 0)",
          "chart-4": "oklch(0.348 0.022 67)",
          "chart-5": "oklch(0.924 0.053 67.086)",
          "sidebar": "oklch(0.21 0.006 285.885)",
          "sidebar-foreground": "oklch(0.967 0.001 286.375)",
          "sidebar-primary": "oklch(0.488 0.217 264.376)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.274 0.005 286.033)",
          "sidebar-accent-foreground": "oklch(0.967 0.001 286.375)",
          "sidebar-border": "oklch(0.274 0.005 286.033)",
          "sidebar-ring": "oklch(0.871 0.005 286.286)"
        }
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/caffeine.json",
        "tags": [
          "brown",
          "warm"
        ],
        "contentHash": "d54fc65d0aa0"
      }
    },
    {
      "name": "theme-catppuccin",
      "type": "registry:theme",
      "title": "Catppuccin",
      "description": "Catppuccin's Latte and Mocha pastels: mauve primary, sky accent, Montserrat and Fira Code.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/montserrat@^5.3.0",
        "@fontsource/fira-code@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Montserrat, sans-serif",
          "font-serif": "Georgia, serif",
          "font-mono": "Fira Code, monospace"
        },
        "light": {
          "background": "oklch(0.958 0.006 264.532)",
          "foreground": "oklch(0.435 0.043 279.325)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.435 0.043 279.325)",
          "popover": "oklch(0.857 0.014 268.476)",
          "popover-foreground": "oklch(0.435 0.043 279.325)",
          "primary": "oklch(0.555 0.25 297.016)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.857 0.014 268.476)",
          "secondary-foreground": "oklch(0.435 0.043 279.325)",
          "muted": "oklch(0.906 0.012 264.507)",
          "muted-foreground": "oklch(0.547 0.034 279.084)",
          "accent": "oklch(0.652 0.145 235.382)",
          "accent-foreground": "oklch(1 0 0)",
          "destructive": "oklch(0.55 0.216 19.809)",
          "destructive-foreground": "oklch(0.43 0.216 19.809)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.435 0.043 279.325)",
          "invert-foreground": "oklch(0.958 0.006 264.532)",
          "brand": "oklch(0.555 0.25 297.016)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.808 0.017 271.198)",
          "input": "oklch(0.857 0.014 268.476)",
          "ring": "oklch(0.555 0.25 297.016)",
          "chart-1": "oklch(0.555 0.25 297.016)",
          "chart-2": "oklch(0.652 0.145 235.382)",
          "chart-3": "oklch(0.625 0.177 140.445)",
          "chart-4": "oklch(0.692 0.204 42.429)",
          "chart-5": "oklch(0.714 0.105 33.097)",
          "sidebar": "oklch(0.933 0.009 264.521)",
          "sidebar-foreground": "oklch(0.435 0.043 279.325)",
          "sidebar-primary": "oklch(0.555 0.25 297.016)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.652 0.145 235.382)",
          "sidebar-accent-foreground": "oklch(1 0 0)",
          "sidebar-border": "oklch(0.808 0.017 271.198)",
          "sidebar-ring": "oklch(0.555 0.25 297.016)",
          "shadow-2xs": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-xs": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-sm": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 1px 2px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-md": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 2px 4px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-lg": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 4px 6px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-xl": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 8px 10px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-2xl": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 30%)",
          "radius": "0.35rem"
        },
        "dark": {
          "background": "oklch(0.216 0.025 284.065)",
          "foreground": "oklch(0.879 0.043 272.277)",
          "card": "oklch(0.243 0.03 283.911)",
          "card-foreground": "oklch(0.879 0.043 272.277)",
          "popover": "oklch(0.404 0.032 280.152)",
          "popover-foreground": "oklch(0.879 0.043 272.277)",
          "primary": "oklch(0.787 0.119 304.769)",
          "primary-foreground": "oklch(0.243 0.03 283.911)",
          "secondary": "oklch(0.477 0.034 278.643)",
          "secondary-foreground": "oklch(0.879 0.043 272.277)",
          "muted": "oklch(0.297 0.029 276.214)",
          "muted-foreground": "oklch(0.751 0.04 273.932)",
          "accent": "oklch(0.847 0.083 210.255)",
          "accent-foreground": "oklch(0.243 0.03 283.911)",
          "destructive": "oklch(0.756 0.13 2.764)",
          "destructive-foreground": "oklch(0.856 0.13 2.764)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.879 0.043 272.277)",
          "invert-foreground": "oklch(0.216 0.025 284.065)",
          "brand": "oklch(0.787 0.119 304.769)",
          "brand-foreground": "oklch(0.243 0.03 283.911)",
          "border": "oklch(0.324 0.032 281.978)",
          "input": "oklch(0.324 0.032 281.978)",
          "ring": "oklch(0.787 0.119 304.769)",
          "chart-1": "oklch(0.787 0.119 304.769)",
          "chart-2": "oklch(0.847 0.083 210.255)",
          "chart-3": "oklch(0.858 0.109 142.715)",
          "chart-4": "oklch(0.824 0.101 52.629)",
          "chart-5": "oklch(0.923 0.024 30.492)",
          "sidebar": "oklch(0.183 0.02 284.204)",
          "sidebar-foreground": "oklch(0.879 0.043 272.277)",
          "sidebar-primary": "oklch(0.787 0.119 304.769)",
          "sidebar-primary-foreground": "oklch(0.243 0.03 283.911)",
          "sidebar-accent": "oklch(0.847 0.083 210.255)",
          "sidebar-accent-foreground": "oklch(0.243 0.03 283.911)",
          "sidebar-border": "oklch(0.404 0.032 280.152)",
          "sidebar-ring": "oklch(0.787 0.119 304.769)",
          "shadow-2xs": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-xs": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-sm": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 1px 2px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-md": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 2px 4px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-lg": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 4px 6px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-xl": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 12%), 0px 8px 10px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-2xl": "0px 4px 6px 0px oklch(0.316 0.067 281.836 / 30%)"
        }
      },
      "css": {
        "@import \"@fontsource/montserrat/400.css\"": {},
        "@import \"@fontsource/montserrat/500.css\"": {},
        "@import \"@fontsource/montserrat/600.css\"": {},
        "@import \"@fontsource/montserrat/700.css\"": {},
        "@import \"@fontsource/fira-code/400.css\"": {},
        "@import \"@fontsource/fira-code/500.css\"": {},
        "@import \"@fontsource/fira-code/600.css\"": {},
        "@import \"@fontsource/fira-code/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/catppuccin.json",
        "tags": [
          "violet",
          "pastel",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.316 0.067 281.836)",
            "opacity": 0.12,
            "blur": "6px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "4px"
          },
          "dark": {
            "color": "oklch(0.316 0.067 281.836)",
            "opacity": 0.12,
            "blur": "6px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "4px"
          }
        },
        "contentHash": "f5d336b5b6b4"
      }
    },
    {
      "name": "theme-claude",
      "type": "registry:theme",
      "title": "Claude",
      "description": "Claude's warm palette: terracotta primary on cream and warm charcoal, system fonts and 0.5rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "files": [],
      "cssVars": {
        "theme": {},
        "light": {
          "background": "oklch(0.982 0.005 95.099)",
          "foreground": "oklch(0.344 0.027 95.723)",
          "card": "oklch(0.982 0.005 95.099)",
          "card-foreground": "oklch(0.191 0.002 106.586)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.267 0.02 98.939)",
          "primary": "oklch(0.617 0.138 39.043)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.924 0.014 92.989)",
          "secondary-foreground": "oklch(0.433 0.018 98.605)",
          "muted": "oklch(0.934 0.015 90.239)",
          "muted-foreground": "oklch(0.606 0.007 97.423)",
          "accent": "oklch(0.924 0.014 92.989)",
          "accent-foreground": "oklch(0.267 0.02 98.939)",
          "destructive": "oklch(0.191 0.002 106.586)",
          "destructive-foreground": "oklch(0.071 0.002 106.586)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.344 0.027 95.723)",
          "invert-foreground": "oklch(0.982 0.005 95.099)",
          "brand": "oklch(0.617 0.138 39.043)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.885 0.007 97.363)",
          "input": "oklch(0.762 0.016 98.353)",
          "ring": "oklch(0.617 0.138 39.043)",
          "chart-1": "oklch(0.558 0.128 42.996)",
          "chart-2": "oklch(0.69 0.158 290.411)",
          "chart-3": "oklch(0.882 0.028 93.128)",
          "chart-4": "oklch(0.882 0.04 298.179)",
          "chart-5": "oklch(0.561 0.135 42.058)",
          "sidebar": "oklch(0.966 0.008 98.879)",
          "sidebar-foreground": "oklch(0.359 0.005 106.652)",
          "sidebar-primary": "oklch(0.617 0.138 39.043)",
          "sidebar-primary-foreground": "oklch(0.988 0 0)",
          "sidebar-accent": "oklch(0.924 0.014 92.989)",
          "sidebar-accent-foreground": "oklch(0.325 0 0)",
          "sidebar-border": "oklch(0.94 0 0)",
          "sidebar-ring": "oklch(0.773 0 0)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.268 0.004 106.643)",
          "foreground": "oklch(0.807 0.014 93.014)",
          "card": "oklch(0.268 0.004 106.643)",
          "card-foreground": "oklch(0.982 0.005 95.099)",
          "popover": "oklch(0.308 0.004 106.604)",
          "popover-foreground": "oklch(0.921 0.004 106.478)",
          "primary": "oklch(0.672 0.131 38.756)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.982 0.005 95.099)",
          "secondary-foreground": "oklch(0.308 0.004 106.604)",
          "muted": "oklch(0.221 0.004 106.707)",
          "muted-foreground": "oklch(0.771 0.017 99.066)",
          "accent": "oklch(0.213 0.008 95.424)",
          "accent-foreground": "oklch(0.966 0.008 98.879)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.807 0.014 93.014)",
          "invert-foreground": "oklch(0.268 0.004 106.643)",
          "brand": "oklch(0.672 0.131 38.756)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.362 0.01 106.893)",
          "input": "oklch(0.434 0.011 100.219)",
          "ring": "oklch(0.672 0.131 38.756)",
          "chart-1": "oklch(0.558 0.128 42.996)",
          "chart-2": "oklch(0.69 0.158 290.411)",
          "chart-3": "oklch(0.213 0.008 95.424)",
          "chart-4": "oklch(0.307 0.052 289.323)",
          "chart-5": "oklch(0.561 0.135 42.058)",
          "sidebar": "oklch(0.236 0.002 67.708)",
          "sidebar-foreground": "oklch(0.807 0.014 93.014)",
          "sidebar-primary": "oklch(0.325 0 0)",
          "sidebar-primary-foreground": "oklch(0.988 0 0)",
          "sidebar-accent": "oklch(0.168 0.002 106.618)",
          "sidebar-accent-foreground": "oklch(0.807 0.014 93.014)",
          "sidebar-border": "oklch(0.94 0 0)",
          "sidebar-ring": "oklch(0.773 0 0)"
        }
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/claude.json",
        "tags": [
          "orange",
          "warm",
          "sans"
        ],
        "contentHash": "46f7855a0dc2"
      }
    },
    {
      "name": "theme-clean-slate",
      "type": "registry:theme",
      "title": "Clean Slate",
      "description": "Slate grays with an indigo primary, Inter and a navy dark mode.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/inter@^5.3.0",
        "@fontsource/merriweather@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Inter, sans-serif",
          "font-serif": "Merriweather, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(0.984 0.003 247.858)",
          "foreground": "oklch(0.279 0.037 260.031)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.279 0.037 260.031)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.279 0.037 260.031)",
          "primary": "oklch(0.585 0.204 277.117)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.928 0.006 264.531)",
          "secondary-foreground": "oklch(0.373 0.031 259.733)",
          "muted": "oklch(0.967 0.003 264.542)",
          "muted-foreground": "oklch(0.551 0.023 264.364)",
          "accent": "oklch(0.93 0.033 272.788)",
          "accent-foreground": "oklch(0.373 0.031 259.733)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.279 0.037 260.031)",
          "invert-foreground": "oklch(0.984 0.003 247.858)",
          "brand": "oklch(0.585 0.204 277.117)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.872 0.009 258.338)",
          "input": "oklch(0.872 0.009 258.338)",
          "ring": "oklch(0.585 0.204 277.117)",
          "chart-1": "oklch(0.585 0.204 277.117)",
          "chart-2": "oklch(0.511 0.23 276.966)",
          "chart-3": "oklch(0.457 0.215 277.023)",
          "chart-4": "oklch(0.398 0.177 277.366)",
          "chart-5": "oklch(0.359 0.135 278.697)",
          "sidebar": "oklch(0.967 0.003 264.542)",
          "sidebar-foreground": "oklch(0.279 0.037 260.031)",
          "sidebar-primary": "oklch(0.585 0.204 277.117)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.93 0.033 272.788)",
          "sidebar-accent-foreground": "oklch(0.373 0.031 259.733)",
          "sidebar-border": "oklch(0.872 0.009 258.338)",
          "sidebar-ring": "oklch(0.585 0.204 277.117)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.208 0.04 265.755)",
          "foreground": "oklch(0.929 0.013 255.508)",
          "card": "oklch(0.279 0.037 260.031)",
          "card-foreground": "oklch(0.929 0.013 255.508)",
          "popover": "oklch(0.279 0.037 260.031)",
          "popover-foreground": "oklch(0.929 0.013 255.508)",
          "primary": "oklch(0.68 0.158 276.935)",
          "primary-foreground": "oklch(0.208 0.04 265.755)",
          "secondary": "oklch(0.335 0.033 260.912)",
          "secondary-foreground": "oklch(0.872 0.009 258.338)",
          "muted": "oklch(0.243 0.038 259.944)",
          "muted-foreground": "oklch(0.714 0.019 261.325)",
          "accent": "oklch(0.373 0.031 259.733)",
          "accent-foreground": "oklch(0.872 0.009 258.338)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.929 0.013 255.508)",
          "invert-foreground": "oklch(0.208 0.04 265.755)",
          "brand": "oklch(0.68 0.158 276.935)",
          "brand-foreground": "oklch(0.208 0.04 265.755)",
          "border": "oklch(0.446 0.026 256.802)",
          "input": "oklch(0.446 0.026 256.802)",
          "ring": "oklch(0.68 0.158 276.935)",
          "chart-1": "oklch(0.68 0.158 276.935)",
          "chart-2": "oklch(0.585 0.204 277.117)",
          "chart-3": "oklch(0.511 0.23 276.966)",
          "chart-4": "oklch(0.457 0.215 277.023)",
          "chart-5": "oklch(0.398 0.177 277.366)",
          "sidebar": "oklch(0.279 0.037 260.031)",
          "sidebar-foreground": "oklch(0.929 0.013 255.508)",
          "sidebar-primary": "oklch(0.68 0.158 276.935)",
          "sidebar-primary-foreground": "oklch(0.208 0.04 265.755)",
          "sidebar-accent": "oklch(0.373 0.031 259.733)",
          "sidebar-accent-foreground": "oklch(0.872 0.009 258.338)",
          "sidebar-border": "oklch(0.446 0.026 256.802)",
          "sidebar-ring": "oklch(0.68 0.158 276.935)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)"
        }
      },
      "css": {
        "@import \"@fontsource/inter/400.css\"": {},
        "@import \"@fontsource/inter/500.css\"": {},
        "@import \"@fontsource/inter/600.css\"": {},
        "@import \"@fontsource/inter/700.css\"": {},
        "@import \"@fontsource/merriweather/400.css\"": {},
        "@import \"@fontsource/merriweather/500.css\"": {},
        "@import \"@fontsource/merriweather/600.css\"": {},
        "@import \"@fontsource/merriweather/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/clean-slate.json",
        "tags": [
          "indigo",
          "slate",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          }
        },
        "contentHash": "2e78bcd57042"
      }
    },
    {
      "name": "theme-cobalt",
      "type": "registry:theme",
      "title": "Cobalt",
      "description": "Deep blue primary and sidebar, green brand, Inter and 0.5rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/inter@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Inter, sans-serif"
        },
        "light": {
          "background": "oklch(0.985 0.002 247.839)",
          "foreground": "oklch(0.22 0.02 242.347)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.22 0.02 242.347)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.22 0.02 242.347)",
          "primary": "oklch(0.401 0.179 245.492)",
          "primary-foreground": "oklch(0.98 0.003 286.351)",
          "secondary": "oklch(0.95 0.015 245.492)",
          "secondary-foreground": "oklch(0.401 0.179 245.492)",
          "muted": "oklch(0.965 0.01 245.789)",
          "muted-foreground": "oklch(0.543 0.031 244.27)",
          "accent": "oklch(0.941 0.02 244.17)",
          "accent-foreground": "oklch(0.25 0.019 242.359)",
          "destructive": "oklch(0.66 0.195 23.586)",
          "destructive-foreground": "oklch(0.449 0.184 29.234)",
          "info": "oklch(0.585 0.161 249.24)",
          "info-foreground": "oklch(0.39 0.107 248.84)",
          "success": "oklch(0.6 0.13 170)",
          "success-foreground": "oklch(0.42 0.1 170)",
          "warning": "oklch(0.72 0.155 65.19)",
          "warning-foreground": "oklch(0.419 0.094 64.99)",
          "invert": "oklch(0.242 0.019 242.356)",
          "invert-foreground": "oklch(0.921 0.009 242.337)",
          "brand": "oklch(0.631 0.186 133.208)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.9 0.011 245.788)",
          "input": "oklch(0.921 0.009 242.337)",
          "ring": "oklch(0.401 0.179 245.492)",
          "chart-1": "oklch(0.327 0.139 244.722)",
          "chart-2": "oklch(0.401 0.179 245.492)",
          "chart-3": "oklch(0.764 0.149 228.712)",
          "chart-4": "oklch(0.865 0.097 220.116)",
          "chart-5": "oklch(0.955 0.046 203.07)",
          "sidebar": "oklch(0.401 0.179 245.492)",
          "sidebar-foreground": "oklch(0.98 0.003 286.351)",
          "sidebar-primary": "oklch(0.572 0.155 245.492)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.47 0.135 245.492)",
          "sidebar-accent-foreground": "oklch(0.98 0.003 286.351)",
          "sidebar-border": "oklch(0.49 0.07 245.492)",
          "sidebar-ring": "oklch(0.72 0.1 245.492)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.29 0.022 244.5)",
          "foreground": "oklch(0.93 0.008 242.3)",
          "card": "oklch(0.345 0.028 244.5)",
          "card-foreground": "oklch(0.93 0.008 242.3)",
          "popover": "oklch(0.355 0.028 244.5)",
          "popover-foreground": "oklch(0.93 0.008 242.3)",
          "primary": "oklch(0.68 0.15 245.492)",
          "primary-foreground": "oklch(0.2 0.04 245.492)",
          "secondary": "oklch(0.4 0.03 245.492)",
          "secondary-foreground": "oklch(0.82 0.11 245.492)",
          "muted": "oklch(0.38 0.026 244.5)",
          "muted-foreground": "oklch(0.77 0.022 242.4)",
          "accent": "oklch(0.43 0.075 245.3)",
          "accent-foreground": "oklch(0.95 0.008 242.3)",
          "destructive": "oklch(0.64 0.185 23.586)",
          "destructive-foreground": "oklch(0.77 0.13 22)",
          "info": "oklch(0.66 0.14 249.24)",
          "info-foreground": "oklch(0.79 0.1 249.24)",
          "success": "oklch(0.68 0.12 170)",
          "success-foreground": "oklch(0.8 0.1 170)",
          "warning": "oklch(0.76 0.15 65.19)",
          "warning-foreground": "oklch(0.84 0.12 70)",
          "invert": "oklch(0.921 0.009 242.337)",
          "invert-foreground": "oklch(0.242 0.019 242.356)",
          "brand": "oklch(0.631 0.186 133.208)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.45 0.028 244.5)",
          "input": "oklch(0.47 0.028 244.5)",
          "ring": "oklch(0.72 0.13 245.492)",
          "chart-1": "oklch(0.48 0.16 244.722)",
          "chart-2": "oklch(0.6 0.17 245.492)",
          "chart-3": "oklch(0.74 0.14 228.712)",
          "chart-4": "oklch(0.82 0.1 220.116)",
          "chart-5": "oklch(0.9 0.055 203.07)",
          "sidebar": "oklch(0.33 0.075 245.492)",
          "sidebar-foreground": "oklch(0.95 0.008 242.3)",
          "sidebar-primary": "oklch(0.56 0.16 245.492)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.4 0.085 245.492)",
          "sidebar-accent-foreground": "oklch(0.95 0.008 242.3)",
          "sidebar-border": "oklch(0.46 0.065 245.492)",
          "sidebar-ring": "oklch(0.68 0.12 245.492)"
        }
      },
      "css": {
        "@import \"@fontsource/inter/400.css\"": {},
        "@import \"@fontsource/inter/500.css\"": {},
        "@import \"@fontsource/inter/600.css\"": {},
        "@import \"@fontsource/inter/700.css\"": {}
      },
      "meta": {
        "source": "original",
        "license": "MIT",
        "tags": [
          "blue",
          "green",
          "sans"
        ],
        "contentHash": "56170988e2c0"
      }
    },
    {
      "name": "theme-cosmic-night",
      "type": "registry:theme",
      "title": "Cosmic Night",
      "description": "Lavender and indigo, with a deep navy-black dark mode and Inter.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/inter@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Inter, sans-serif",
          "font-serif": "Georgia, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(0.973 0.013 286.15)",
          "foreground": "oklch(0.301 0.057 282.418)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.301 0.057 282.418)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.301 0.057 282.418)",
          "primary": "oklch(0.542 0.179 288.033)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.917 0.044 292.69)",
          "secondary-foreground": "oklch(0.414 0.104 288.174)",
          "muted": "oklch(0.958 0.013 286.145)",
          "muted-foreground": "oklch(0.543 0.047 284.743)",
          "accent": "oklch(0.922 0.037 262.141)",
          "accent-foreground": "oklch(0.301 0.057 282.418)",
          "destructive": "oklch(0.686 0.206 14.994)",
          "destructive-foreground": "oklch(0.566 0.206 14.994)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.301 0.057 282.418)",
          "invert-foreground": "oklch(0.973 0.013 286.15)",
          "brand": "oklch(0.542 0.179 288.033)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.911 0.022 285.962)",
          "input": "oklch(0.911 0.022 285.962)",
          "ring": "oklch(0.542 0.179 288.033)",
          "chart-1": "oklch(0.542 0.179 288.033)",
          "chart-2": "oklch(0.704 0.16 288.988)",
          "chart-3": "oklch(0.568 0.211 276.707)",
          "chart-4": "oklch(0.636 0.192 281.805)",
          "chart-5": "oklch(0.451 0.176 279.384)",
          "sidebar": "oklch(0.958 0.013 286.145)",
          "sidebar-foreground": "oklch(0.301 0.057 282.418)",
          "sidebar-primary": "oklch(0.542 0.179 288.033)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.922 0.037 262.141)",
          "sidebar-accent-foreground": "oklch(0.301 0.057 282.418)",
          "sidebar-border": "oklch(0.911 0.022 285.962)",
          "sidebar-ring": "oklch(0.542 0.179 288.033)",
          "shadow-2xs": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-xs": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-sm": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 1px 2px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-md": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 2px 4px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-lg": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 4px 6px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-xl": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 8px 10px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-2xl": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 30%)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.174 0.023 283.8)",
          "foreground": "oklch(0.918 0.026 285.883)",
          "card": "oklch(0.228 0.038 282.932)",
          "card-foreground": "oklch(0.918 0.026 285.883)",
          "popover": "oklch(0.228 0.038 282.932)",
          "popover-foreground": "oklch(0.918 0.026 285.883)",
          "primary": "oklch(0.716 0.16 290.396)",
          "primary-foreground": "oklch(0.174 0.023 283.8)",
          "secondary": "oklch(0.314 0.074 283.459)",
          "secondary-foreground": "oklch(0.837 0.085 285.911)",
          "muted": "oklch(0.271 0.062 281.438)",
          "muted-foreground": "oklch(0.717 0.046 285.174)",
          "accent": "oklch(0.335 0.083 280.97)",
          "accent-foreground": "oklch(0.918 0.026 285.883)",
          "destructive": "oklch(0.686 0.206 14.994)",
          "destructive-foreground": "oklch(0.786 0.206 14.994)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.918 0.026 285.883)",
          "invert-foreground": "oklch(0.174 0.023 283.8)",
          "brand": "oklch(0.716 0.16 290.396)",
          "brand-foreground": "oklch(0.174 0.023 283.8)",
          "border": "oklch(0.326 0.06 282.583)",
          "input": "oklch(0.326 0.06 282.583)",
          "ring": "oklch(0.716 0.16 290.396)",
          "chart-1": "oklch(0.716 0.16 290.396)",
          "chart-2": "oklch(0.638 0.105 274.912)",
          "chart-3": "oklch(0.748 0.123 244.749)",
          "chart-4": "oklch(0.712 0.098 186.676)",
          "chart-5": "oklch(0.755 0.183 346.812)",
          "sidebar": "oklch(0.228 0.038 282.932)",
          "sidebar-foreground": "oklch(0.918 0.026 285.883)",
          "sidebar-primary": "oklch(0.716 0.16 290.396)",
          "sidebar-primary-foreground": "oklch(0.174 0.023 283.8)",
          "sidebar-accent": "oklch(0.335 0.083 280.97)",
          "sidebar-accent-foreground": "oklch(0.918 0.026 285.883)",
          "sidebar-border": "oklch(0.326 0.06 282.583)",
          "sidebar-ring": "oklch(0.716 0.16 290.396)",
          "shadow-2xs": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-xs": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 6%)",
          "shadow-sm": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 1px 2px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-md": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 2px 4px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-lg": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 4px 6px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-xl": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 12%), 0px 8px 10px -1px oklch(0.316 0.067 281.836 / 12%)",
          "shadow-2xl": "0px 4px 10px 0px oklch(0.316 0.067 281.836 / 30%)"
        }
      },
      "css": {
        "@import \"@fontsource/inter/400.css\"": {},
        "@import \"@fontsource/inter/500.css\"": {},
        "@import \"@fontsource/inter/600.css\"": {},
        "@import \"@fontsource/inter/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/cosmic-night.json",
        "tags": [
          "violet",
          "indigo",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.316 0.067 281.836)",
            "opacity": 0.12,
            "blur": "10px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "4px"
          },
          "dark": {
            "color": "oklch(0.316 0.067 281.836)",
            "opacity": 0.12,
            "blur": "10px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "4px"
          }
        },
        "contentHash": "8e5928034702"
      }
    },
    {
      "name": "theme-default",
      "type": "registry:theme",
      "title": "Default",
      "description": "The stock fma-ds theme from styles.css: neutral grays, Geist and 0.625rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "files": [],
      "cssVars": {
        "theme": {},
        "light": {
          "background": "oklch(1 0 0)",
          "foreground": "oklch(0.145 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.145 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.145 0 0)",
          "primary": "oklch(0.205 0 0)",
          "primary-foreground": "oklch(0.985 0 0)",
          "secondary": "oklch(0.97 0 0)",
          "secondary-foreground": "oklch(0.205 0 0)",
          "muted": "oklch(0.97 0 0)",
          "muted-foreground": "oklch(0.556 0 0)",
          "accent": "oklch(0.97 0 0)",
          "accent-foreground": "oklch(0.205 0 0)",
          "destructive": "oklch(0.577 0.245 27.325)",
          "destructive-foreground": "oklch(0.444 0.177 26.899)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.145 0 0)",
          "invert-foreground": "oklch(0.985 0 0)",
          "brand": "oklch(0.205 0 0)",
          "brand-foreground": "oklch(0.985 0 0)",
          "border": "oklch(0.922 0 0)",
          "input": "oklch(0.922 0 0)",
          "ring": "oklch(0.708 0 0)",
          "chart-1": "oklch(0.87 0 0)",
          "chart-2": "oklch(0.556 0 0)",
          "chart-3": "oklch(0.439 0 0)",
          "chart-4": "oklch(0.371 0 0)",
          "chart-5": "oklch(0.269 0 0)",
          "sidebar": "oklch(0.985 0 0)",
          "sidebar-foreground": "oklch(0.145 0 0)",
          "sidebar-primary": "oklch(0.205 0 0)",
          "sidebar-primary-foreground": "oklch(0.985 0 0)",
          "sidebar-accent": "oklch(0.97 0 0)",
          "sidebar-accent-foreground": "oklch(0.205 0 0)",
          "sidebar-border": "oklch(0.922 0 0)",
          "sidebar-ring": "oklch(0.708 0 0)",
          "radius": "0.625rem"
        },
        "dark": {
          "background": "oklch(0.145 0 0)",
          "foreground": "oklch(0.985 0 0)",
          "card": "oklch(0.205 0 0)",
          "card-foreground": "oklch(0.985 0 0)",
          "popover": "oklch(0.205 0 0)",
          "popover-foreground": "oklch(0.985 0 0)",
          "primary": "oklch(0.922 0 0)",
          "primary-foreground": "oklch(0.205 0 0)",
          "secondary": "oklch(0.269 0 0)",
          "secondary-foreground": "oklch(0.985 0 0)",
          "muted": "oklch(0.269 0 0)",
          "muted-foreground": "oklch(0.708 0 0)",
          "accent": "oklch(0.269 0 0)",
          "accent-foreground": "oklch(0.985 0 0)",
          "destructive": "oklch(0.704 0.191 22.216)",
          "destructive-foreground": "oklch(0.808 0.114 19.571)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.985 0 0)",
          "invert-foreground": "oklch(0.145 0 0)",
          "brand": "oklch(0.922 0 0)",
          "brand-foreground": "oklch(0.205 0 0)",
          "border": "oklch(1 0 0 / 10%)",
          "input": "oklch(1 0 0 / 15%)",
          "ring": "oklch(0.556 0 0)",
          "chart-1": "oklch(0.87 0 0)",
          "chart-2": "oklch(0.556 0 0)",
          "chart-3": "oklch(0.439 0 0)",
          "chart-4": "oklch(0.371 0 0)",
          "chart-5": "oklch(0.269 0 0)",
          "sidebar": "oklch(0.205 0 0)",
          "sidebar-foreground": "oklch(0.985 0 0)",
          "sidebar-primary": "oklch(0.488 0.243 264.376)",
          "sidebar-primary-foreground": "oklch(0.985 0 0)",
          "sidebar-accent": "oklch(0.269 0 0)",
          "sidebar-accent-foreground": "oklch(0.985 0 0)",
          "sidebar-border": "oklch(1 0 0 / 10%)",
          "sidebar-ring": "oklch(0.556 0 0)"
        }
      },
      "meta": {
        "source": "original",
        "license": "MIT",
        "tags": [
          "neutral",
          "sans"
        ],
        "contentHash": "fa288628710a"
      }
    },
    {
      "name": "theme-elegant-luxury",
      "type": "registry:theme",
      "title": "Elegant Luxury",
      "description": "Burgundy primary with cream and gold accents, Poppins and Libre Baskerville.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/poppins@^5.3.0",
        "@fontsource/libre-baskerville@^5.3.0",
        "@fontsource/ibm-plex-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Poppins, sans-serif",
          "font-serif": "Libre Baskerville, serif",
          "font-mono": "IBM Plex Mono, monospace"
        },
        "light": {
          "background": "oklch(0.978 0.004 56.375)",
          "foreground": "oklch(0.218 0 0)",
          "card": "oklch(0.978 0.004 56.375)",
          "card-foreground": "oklch(0.218 0 0)",
          "popover": "oklch(0.978 0.004 56.375)",
          "popover-foreground": "oklch(0.218 0 0)",
          "primary": "oklch(0.465 0.147 24.938)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.963 0.038 89.094)",
          "secondary-foreground": "oklch(0.485 0.102 75.115)",
          "muted": "oklch(0.943 0.007 53.444)",
          "muted-foreground": "oklch(0.444 0.01 73.639)",
          "accent": "oklch(0.962 0.058 95.617)",
          "accent-foreground": "oklch(0.396 0.133 25.723)",
          "destructive": "oklch(0.444 0.161 26.899)",
          "destructive-foreground": "oklch(0.324 0.161 26.899)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.218 0 0)",
          "invert-foreground": "oklch(0.978 0.004 56.375)",
          "brand": "oklch(0.465 0.147 24.938)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.936 0.032 80.994)",
          "input": "oklch(0.936 0.032 80.994)",
          "ring": "oklch(0.465 0.147 24.938)",
          "chart-1": "oklch(0.505 0.19 27.518)",
          "chart-2": "oklch(0.465 0.147 24.938)",
          "chart-3": "oklch(0.396 0.133 25.723)",
          "chart-4": "oklch(0.555 0.146 48.998)",
          "chart-5": "oklch(0.473 0.125 46.201)",
          "sidebar": "oklch(0.943 0.007 53.444)",
          "sidebar-foreground": "oklch(0.218 0 0)",
          "sidebar-primary": "oklch(0.465 0.147 24.938)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.962 0.058 95.617)",
          "sidebar-accent-foreground": "oklch(0.396 0.133 25.723)",
          "sidebar-border": "oklch(0.936 0.032 80.994)",
          "sidebar-ring": "oklch(0.465 0.147 24.938)",
          "shadow-2xs": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 6%)",
          "shadow-xs": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 6%)",
          "shadow-sm": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 1px 2px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-md": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 2px 4px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-lg": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 4px 6px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-xl": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 8px 10px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-2xl": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 30%)",
          "radius": "0.375rem"
        },
        "dark": {
          "background": "oklch(0.216 0.006 56.043)",
          "foreground": "oklch(0.97 0.001 106.424)",
          "card": "oklch(0.268 0.006 34.297)",
          "card-foreground": "oklch(0.97 0.001 106.424)",
          "popover": "oklch(0.268 0.006 34.297)",
          "popover-foreground": "oklch(0.97 0.001 106.424)",
          "primary": "oklch(0.505 0.19 27.518)",
          "primary-foreground": "oklch(0.978 0.004 56.375)",
          "secondary": "oklch(0.473 0.125 46.201)",
          "secondary-foreground": "oklch(0.962 0.058 95.617)",
          "muted": "oklch(0.229 0.006 56.071)",
          "muted-foreground": "oklch(0.869 0.004 56.366)",
          "accent": "oklch(0.555 0.146 48.998)",
          "accent-foreground": "oklch(0.962 0.058 95.617)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.97 0.001 106.424)",
          "invert-foreground": "oklch(0.216 0.006 56.043)",
          "brand": "oklch(0.505 0.19 27.518)",
          "brand-foreground": "oklch(0.978 0.004 56.375)",
          "border": "oklch(0.374 0.009 67.558)",
          "input": "oklch(0.374 0.009 67.558)",
          "ring": "oklch(0.505 0.19 27.518)",
          "chart-1": "oklch(0.711 0.166 22.216)",
          "chart-2": "oklch(0.637 0.208 25.331)",
          "chart-3": "oklch(0.577 0.215 27.325)",
          "chart-4": "oklch(0.837 0.164 84.429)",
          "chart-5": "oklch(0.769 0.165 70.08)",
          "sidebar": "oklch(0.216 0.006 56.043)",
          "sidebar-foreground": "oklch(0.97 0.001 106.424)",
          "sidebar-primary": "oklch(0.505 0.19 27.518)",
          "sidebar-primary-foreground": "oklch(0.978 0.004 56.375)",
          "sidebar-accent": "oklch(0.555 0.146 48.998)",
          "sidebar-accent-foreground": "oklch(0.962 0.058 95.617)",
          "sidebar-border": "oklch(0.374 0.009 67.558)",
          "sidebar-ring": "oklch(0.505 0.19 27.518)",
          "shadow-2xs": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 6%)",
          "shadow-xs": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 6%)",
          "shadow-sm": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 1px 2px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-md": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 2px 4px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-lg": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 4px 6px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-xl": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 12%), 1px 8px 10px -3px oklch(0.279 0.087 24.82 / 12%)",
          "shadow-2xl": "1px 1px 16px -2px oklch(0.279 0.087 24.82 / 30%)"
        }
      },
      "css": {
        "@import \"@fontsource/poppins/400.css\"": {},
        "@import \"@fontsource/poppins/500.css\"": {},
        "@import \"@fontsource/poppins/600.css\"": {},
        "@import \"@fontsource/poppins/700.css\"": {},
        "@import \"@fontsource/libre-baskerville/400.css\"": {},
        "@import \"@fontsource/libre-baskerville/700.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/400.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/500.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/600.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/elegant-luxury.json",
        "tags": [
          "red",
          "gold",
          "warm",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.279 0.087 24.82)",
            "opacity": 0.12,
            "blur": "16px",
            "spread": "-2px",
            "offsetX": "1px",
            "offsetY": "1px"
          },
          "dark": {
            "color": "oklch(0.279 0.087 24.82)",
            "opacity": 0.12,
            "blur": "16px",
            "spread": "-2px",
            "offsetX": "1px",
            "offsetY": "1px"
          }
        },
        "contentHash": "38fe1918be5b"
      }
    },
    {
      "name": "theme-graphite",
      "type": "registry:theme",
      "title": "Graphite",
      "description": "Monochrome graphite grays from light to charcoal, Montserrat and soft shadows.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/montserrat@^5.3.0",
        "@fontsource/fira-code@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Montserrat, sans-serif",
          "font-serif": "Georgia, serif",
          "font-mono": "Fira Code, monospace"
        },
        "light": {
          "background": "oklch(0.955 0 0)",
          "foreground": "oklch(0.321 0 0)",
          "card": "oklch(0.97 0 0)",
          "card-foreground": "oklch(0.321 0 0)",
          "popover": "oklch(0.97 0 0)",
          "popover-foreground": "oklch(0.321 0 0)",
          "primary": "oklch(0.489 0 0)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.907 0 0)",
          "secondary-foreground": "oklch(0.321 0 0)",
          "muted": "oklch(0.885 0 0)",
          "muted-foreground": "oklch(0.51 0 0)",
          "accent": "oklch(0.808 0 0)",
          "accent-foreground": "oklch(0.321 0 0)",
          "destructive": "oklch(0.559 0.19 25.863)",
          "destructive-foreground": "oklch(0.439 0.19 25.863)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.321 0 0)",
          "invert-foreground": "oklch(0.955 0 0)",
          "brand": "oklch(0.489 0 0)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.858 0 0)",
          "input": "oklch(0.907 0 0)",
          "ring": "oklch(0.489 0 0)",
          "chart-1": "oklch(0.489 0 0)",
          "chart-2": "oklch(0.486 0.036 196.028)",
          "chart-3": "oklch(0.653 0 0)",
          "chart-4": "oklch(0.732 0 0)",
          "chart-5": "oklch(0.808 0 0)",
          "sidebar": "oklch(0.937 0 0)",
          "sidebar-foreground": "oklch(0.321 0 0)",
          "sidebar-primary": "oklch(0.489 0 0)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.808 0 0)",
          "sidebar-accent-foreground": "oklch(0.321 0 0)",
          "sidebar-border": "oklch(0.858 0 0)",
          "sidebar-ring": "oklch(0.489 0 0)",
          "shadow-2xs": "0px 2px 0px 0px oklch(0.321 0 0 / 1%)",
          "shadow-xs": "0px 2px 0px 0px oklch(0.321 0 0 / 1%)",
          "shadow-sm": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 1px 2px -1px oklch(0.321 0 0 / 1%)",
          "shadow-md": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 2px 4px -1px oklch(0.321 0 0 / 1%)",
          "shadow-lg": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 4px 6px -1px oklch(0.321 0 0 / 1%)",
          "shadow-xl": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 8px 10px -1px oklch(0.321 0 0 / 1%)",
          "shadow-2xl": "0px 2px 0px 0px oklch(0.321 0 0 / 4%)",
          "radius": "0.35rem"
        },
        "dark": {
          "background": "oklch(0.218 0 0)",
          "foreground": "oklch(0.885 0 0)",
          "card": "oklch(0.244 0 0)",
          "card-foreground": "oklch(0.885 0 0)",
          "popover": "oklch(0.244 0 0)",
          "popover-foreground": "oklch(0.885 0 0)",
          "primary": "oklch(0.706 0 0)",
          "primary-foreground": "oklch(0.218 0 0)",
          "secondary": "oklch(0.309 0 0)",
          "secondary-foreground": "oklch(0.885 0 0)",
          "muted": "oklch(0.285 0 0)",
          "muted-foreground": "oklch(0.6 0 0)",
          "accent": "oklch(0.371 0 0)",
          "accent-foreground": "oklch(0.885 0 0)",
          "destructive": "oklch(0.659 0.153 22.17)",
          "destructive-foreground": "oklch(0.759 0.153 22.17)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.885 0 0)",
          "invert-foreground": "oklch(0.218 0 0)",
          "brand": "oklch(0.706 0 0)",
          "brand-foreground": "oklch(0.218 0 0)",
          "border": "oklch(0.329 0 0)",
          "input": "oklch(0.309 0 0)",
          "ring": "oklch(0.706 0 0)",
          "chart-1": "oklch(0.706 0 0)",
          "chart-2": "oklch(0.671 0.034 206.348)",
          "chart-3": "oklch(0.545 0 0)",
          "chart-4": "oklch(0.46 0 0)",
          "chart-5": "oklch(0.371 0 0)",
          "sidebar": "oklch(0.239 0 0)",
          "sidebar-foreground": "oklch(0.885 0 0)",
          "sidebar-primary": "oklch(0.706 0 0)",
          "sidebar-primary-foreground": "oklch(0.218 0 0)",
          "sidebar-accent": "oklch(0.371 0 0)",
          "sidebar-accent-foreground": "oklch(0.885 0 0)",
          "sidebar-border": "oklch(0.329 0 0)",
          "sidebar-ring": "oklch(0.706 0 0)",
          "shadow-2xs": "0px 2px 0px 0px oklch(0.321 0 0 / 1%)",
          "shadow-xs": "0px 2px 0px 0px oklch(0.321 0 0 / 1%)",
          "shadow-sm": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 1px 2px -1px oklch(0.321 0 0 / 1%)",
          "shadow-md": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 2px 4px -1px oklch(0.321 0 0 / 1%)",
          "shadow-lg": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 4px 6px -1px oklch(0.321 0 0 / 1%)",
          "shadow-xl": "0px 2px 0px 0px oklch(0.321 0 0 / 1%), 0px 8px 10px -1px oklch(0.321 0 0 / 1%)",
          "shadow-2xl": "0px 2px 0px 0px oklch(0.321 0 0 / 4%)"
        }
      },
      "css": {
        "@import \"@fontsource/montserrat/400.css\"": {},
        "@import \"@fontsource/montserrat/500.css\"": {},
        "@import \"@fontsource/montserrat/600.css\"": {},
        "@import \"@fontsource/montserrat/700.css\"": {},
        "@import \"@fontsource/fira-code/400.css\"": {},
        "@import \"@fontsource/fira-code/500.css\"": {},
        "@import \"@fontsource/fira-code/600.css\"": {},
        "@import \"@fontsource/fira-code/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/graphite.json",
        "tags": [
          "gray",
          "monochrome",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.321 0 0 / 10%)",
            "opacity": 0.15,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "2px"
          },
          "dark": {
            "color": "oklch(0.321 0 0 / 10%)",
            "opacity": 0.15,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "2px"
          }
        },
        "contentHash": "50ec598a08a0"
      }
    },
    {
      "name": "theme-indigo",
      "type": "registry:theme",
      "title": "Indigo",
      "description": "Indigo primary and sidebar, violet brand, DM Sans and 0.625rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/dm-sans@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "DM Sans, sans-serif"
        },
        "light": {
          "background": "oklch(0.985 0.002 259.028)",
          "foreground": "oklch(0.22 0.02 281.536)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.22 0.02 281.536)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.22 0.02 281.536)",
          "primary": "oklch(0.478 0.141 284.681)",
          "primary-foreground": "oklch(0.98 0.003 284.681)",
          "secondary": "oklch(0.95 0.015 284.681)",
          "secondary-foreground": "oklch(0.478 0.141 284.681)",
          "muted": "oklch(0.965 0.01 284.978)",
          "muted-foreground": "oklch(0.543 0.031 283.459)",
          "accent": "oklch(0.941 0.02 283.359)",
          "accent-foreground": "oklch(0.25 0.019 281.548)",
          "destructive": "oklch(0.66 0.195 23.586)",
          "destructive-foreground": "oklch(0.449 0.184 29.234)",
          "info": "oklch(0.585 0.161 249.24)",
          "info-foreground": "oklch(0.39 0.107 248.84)",
          "success": "oklch(0.644 0.175 146.88)",
          "success-foreground": "oklch(0.396 0.135 142.495)",
          "warning": "oklch(0.72 0.155 65.19)",
          "warning-foreground": "oklch(0.419 0.094 64.99)",
          "invert": "oklch(0.242 0.019 281.545)",
          "invert-foreground": "oklch(0.921 0.009 281.526)",
          "brand": "oklch(0.543 0.281 306.592)",
          "brand-foreground": "oklch(0.98 0.003 306.592)",
          "border": "oklch(0.9 0.011 284.977)",
          "input": "oklch(0.921 0.009 281.526)",
          "ring": "oklch(0.478 0.141 284.681)",
          "chart-1": "oklch(0.327 0.139 283.911)",
          "chart-2": "oklch(0.401 0.179 284.681)",
          "chart-3": "oklch(0.764 0.135 239.901)",
          "chart-4": "oklch(0.865 0.082 231.305)",
          "chart-5": "oklch(0.955 0.036 214.259)",
          "sidebar": "oklch(0.478 0.141 284.681)",
          "sidebar-foreground": "oklch(0.98 0.003 311.54)",
          "sidebar-primary": "oklch(0.572 0.155 284.681)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.47 0.135 284.681)",
          "sidebar-accent-foreground": "oklch(0.98 0.003 311.54)",
          "sidebar-border": "oklch(0.49 0.07 284.681)",
          "sidebar-ring": "oklch(0.72 0.1 284.681)",
          "radius": "0.625rem"
        },
        "dark": {
          "background": "oklch(0.29 0.022 283.689)",
          "foreground": "oklch(0.93 0.008 281.489)",
          "card": "oklch(0.345 0.028 283.689)",
          "card-foreground": "oklch(0.93 0.008 281.489)",
          "popover": "oklch(0.355 0.028 283.689)",
          "popover-foreground": "oklch(0.93 0.008 281.489)",
          "primary": "oklch(0.68 0.15 284.681)",
          "primary-foreground": "oklch(0.179 0.019 284.681)",
          "secondary": "oklch(0.4 0.03 284.681)",
          "secondary-foreground": "oklch(0.82 0.11 284.681)",
          "muted": "oklch(0.38 0.026 283.689)",
          "muted-foreground": "oklch(0.77 0.022 281.589)",
          "accent": "oklch(0.43 0.075 284.489)",
          "accent-foreground": "oklch(0.95 0.008 281.489)",
          "destructive": "oklch(0.64 0.185 23.586)",
          "destructive-foreground": "oklch(0.77 0.13 22)",
          "info": "oklch(0.66 0.14 249.24)",
          "info-foreground": "oklch(0.79 0.1 249.24)",
          "success": "oklch(0.69 0.16 146.88)",
          "success-foreground": "oklch(0.8 0.13 146.88)",
          "warning": "oklch(0.76 0.15 65.19)",
          "warning-foreground": "oklch(0.84 0.12 70)",
          "invert": "oklch(0.921 0.009 281.526)",
          "invert-foreground": "oklch(0.242 0.019 281.545)",
          "brand": "oklch(0.7 0.155 306.592)",
          "brand-foreground": "oklch(0.179 0.019 306.592)",
          "border": "oklch(0.45 0.028 283.689)",
          "input": "oklch(0.47 0.028 283.689)",
          "ring": "oklch(0.72 0.13 284.681)",
          "chart-1": "oklch(0.48 0.16 283.911)",
          "chart-2": "oklch(0.6 0.17 284.681)",
          "chart-3": "oklch(0.74 0.14 239.901)",
          "chart-4": "oklch(0.82 0.1 231.305)",
          "chart-5": "oklch(0.9 0.055 214.259)",
          "sidebar": "oklch(0.33 0.075 284.681)",
          "sidebar-foreground": "oklch(0.95 0.008 281.489)",
          "sidebar-primary": "oklch(0.56 0.16 284.681)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.4 0.085 284.681)",
          "sidebar-accent-foreground": "oklch(0.95 0.008 281.489)",
          "sidebar-border": "oklch(0.46 0.065 284.681)",
          "sidebar-ring": "oklch(0.68 0.12 284.681)"
        }
      },
      "css": {
        "@import \"@fontsource/dm-sans/400.css\"": {},
        "@import \"@fontsource/dm-sans/500.css\"": {},
        "@import \"@fontsource/dm-sans/600.css\"": {},
        "@import \"@fontsource/dm-sans/700.css\"": {}
      },
      "meta": {
        "source": "original",
        "license": "MIT",
        "tags": [
          "indigo",
          "violet",
          "sans"
        ],
        "contentHash": "1f131d0e3e37"
      }
    },
    {
      "name": "theme-kodama-grove",
      "type": "registry:theme",
      "title": "Kodama Grove",
      "description": "Parchment and olive greens with Merriweather throughout; a warm forest dark mode.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/merriweather@^5.3.0",
        "@fontsource/source-serif-4@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Merriweather, serif",
          "font-serif": "Source Serif 4, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(0.88 0.053 91.789)",
          "foreground": "oklch(0.426 0.031 59.215)",
          "card": "oklch(0.894 0.039 87.568)",
          "card-foreground": "oklch(0.426 0.031 59.215)",
          "popover": "oklch(0.938 0.033 89.851)",
          "popover-foreground": "oklch(0.426 0.031 59.215)",
          "primary": "oklch(0.656 0.105 118.908)",
          "primary-foreground": "oklch(1 0.007 88.641)",
          "secondary": "oklch(0.853 0.063 91.149)",
          "secondary-foreground": "oklch(0.426 0.031 59.215)",
          "muted": "oklch(0.853 0.063 91.149)",
          "muted-foreground": "oklch(0.546 0.026 60.932)",
          "accent": "oklch(0.836 0.071 90.327)",
          "accent-foreground": "oklch(0.426 0.031 59.215)",
          "destructive": "oklch(0.714 0.098 29.983)",
          "destructive-foreground": "oklch(0.584 0.098 29.983)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.426 0.031 59.215)",
          "invert-foreground": "oklch(0.88 0.053 91.789)",
          "brand": "oklch(0.656 0.105 118.908)",
          "brand-foreground": "oklch(1 0.007 88.641)",
          "border": "oklch(0.692 0.044 59.845)",
          "input": "oklch(0.836 0.071 90.327)",
          "ring": "oklch(0.655 0.056 130.849)",
          "chart-1": "oklch(0.655 0.056 130.849)",
          "chart-2": "oklch(0.676 0.057 132.448)",
          "chart-3": "oklch(0.819 0.033 136.654)",
          "chart-4": "oklch(0.593 0.046 137.622)",
          "chart-5": "oklch(0.518 0.039 137.189)",
          "sidebar": "oklch(0.863 0.064 90.516)",
          "sidebar-foreground": "oklch(0.426 0.031 59.215)",
          "sidebar-primary": "oklch(0.655 0.056 130.849)",
          "sidebar-primary-foreground": "oklch(1 0.007 88.641)",
          "sidebar-accent": "oklch(0.923 0.017 88.003)",
          "sidebar-accent-foreground": "oklch(0.426 0.031 59.215)",
          "sidebar-border": "oklch(0.907 0.017 88.004)",
          "sidebar-ring": "oklch(0.655 0.056 130.849)",
          "shadow-2xs": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 1%)",
          "shadow-xs": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 1%)",
          "shadow-sm": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 1px 2px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-md": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 2px 4px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-lg": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 4px 6px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-xl": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 8px 10px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-2xl": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 6%)",
          "radius": "0.425rem"
        },
        "dark": {
          "background": "oklch(0.33 0.021 88.074)",
          "foreground": "oklch(0.922 0.023 82.119)",
          "card": "oklch(0.358 0.017 82.326)",
          "card-foreground": "oklch(0.922 0.023 82.119)",
          "popover": "oklch(0.358 0.017 82.326)",
          "popover-foreground": "oklch(0.922 0.023 82.119)",
          "primary": "oklch(0.676 0.057 132.448)",
          "primary-foreground": "oklch(0.269 0.01 61.021)",
          "secondary": "oklch(0.445 0.024 84.55)",
          "secondary-foreground": "oklch(0.922 0.023 82.119)",
          "muted": "oklch(0.389 0.02 82.708)",
          "muted-foreground": "oklch(0.71 0.017 73.618)",
          "accent": "oklch(0.654 0.072 90.763)",
          "accent-foreground": "oklch(0.269 0.01 61.021)",
          "destructive": "oklch(0.629 0.082 31.296)",
          "destructive-foreground": "oklch(0.729 0.082 31.296)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.922 0.023 82.119)",
          "invert-foreground": "oklch(0.33 0.021 88.074)",
          "brand": "oklch(0.676 0.057 132.448)",
          "brand-foreground": "oklch(0.269 0.01 61.021)",
          "border": "oklch(0.445 0.024 84.55)",
          "input": "oklch(0.445 0.024 84.55)",
          "ring": "oklch(0.676 0.057 132.448)",
          "chart-1": "oklch(0.676 0.057 132.448)",
          "chart-2": "oklch(0.735 0.056 130.849)",
          "chart-3": "oklch(0.593 0.046 137.622)",
          "chart-4": "oklch(0.654 0.072 90.763)",
          "chart-5": "oklch(0.518 0.039 137.189)",
          "sidebar": "oklch(0.33 0.021 88.074)",
          "sidebar-foreground": "oklch(0.922 0.023 82.119)",
          "sidebar-primary": "oklch(0.676 0.057 132.448)",
          "sidebar-primary-foreground": "oklch(0.269 0.01 61.021)",
          "sidebar-accent": "oklch(0.654 0.072 90.763)",
          "sidebar-accent-foreground": "oklch(0.269 0.01 61.021)",
          "sidebar-border": "oklch(0.445 0.024 84.55)",
          "sidebar-ring": "oklch(0.676 0.057 132.448)",
          "shadow-2xs": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 1%)",
          "shadow-xs": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 1%)",
          "shadow-sm": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 1px 2px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-md": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 2px 4px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-lg": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 4px 6px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-xl": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 2%), 3px 8px 10px -1px oklch(0.509 0.063 128.776 / 2%)",
          "shadow-2xl": "3px 3px 2px 0px oklch(0.509 0.063 128.776 / 6%)"
        }
      },
      "css": {
        "@import \"@fontsource/merriweather/400.css\"": {},
        "@import \"@fontsource/merriweather/500.css\"": {},
        "@import \"@fontsource/merriweather/600.css\"": {},
        "@import \"@fontsource/merriweather/700.css\"": {},
        "@import \"@fontsource/source-serif-4/400.css\"": {},
        "@import \"@fontsource/source-serif-4/500.css\"": {},
        "@import \"@fontsource/source-serif-4/600.css\"": {},
        "@import \"@fontsource/source-serif-4/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/kodama-grove.json",
        "tags": [
          "green",
          "warm",
          "serif"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.509 0.063 128.776 / 15%)",
            "opacity": 0.15,
            "blur": "2px",
            "spread": "0px",
            "offsetX": "3px",
            "offsetY": "3px"
          },
          "dark": {
            "color": "oklch(0.509 0.063 128.776 / 15%)",
            "opacity": 0.15,
            "blur": "2px",
            "spread": "0px",
            "offsetX": "3px",
            "offsetY": "3px"
          }
        },
        "contentHash": "230d23d7cb5b"
      }
    },
    {
      "name": "theme-modern-minimal",
      "type": "registry:theme",
      "title": "Modern Minimal",
      "description": "White surfaces with a bright blue primary, Inter and tight 0.375rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/inter@^5.3.0",
        "@fontsource/source-serif-4@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Inter, sans-serif",
          "font-serif": "Source Serif 4, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(1 0 0)",
          "foreground": "oklch(0.321 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.321 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.321 0 0)",
          "primary": "oklch(0.623 0.188 259.815)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.967 0.003 264.542)",
          "secondary-foreground": "oklch(0.446 0.026 256.802)",
          "muted": "oklch(0.985 0.002 247.839)",
          "muted-foreground": "oklch(0.551 0.023 264.364)",
          "accent": "oklch(0.951 0.025 236.824)",
          "accent-foreground": "oklch(0.379 0.138 265.522)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.321 0 0)",
          "invert-foreground": "oklch(1 0 0)",
          "brand": "oklch(0.623 0.188 259.815)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.928 0.006 264.531)",
          "input": "oklch(0.928 0.006 264.531)",
          "ring": "oklch(0.623 0.188 259.815)",
          "chart-1": "oklch(0.623 0.188 259.815)",
          "chart-2": "oklch(0.546 0.215 262.881)",
          "chart-3": "oklch(0.488 0.217 264.376)",
          "chart-4": "oklch(0.424 0.181 265.638)",
          "chart-5": "oklch(0.379 0.138 265.522)",
          "sidebar": "oklch(0.985 0.002 247.839)",
          "sidebar-foreground": "oklch(0.321 0 0)",
          "sidebar-primary": "oklch(0.623 0.188 259.815)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.951 0.025 236.824)",
          "sidebar-accent-foreground": "oklch(0.379 0.138 265.522)",
          "sidebar-border": "oklch(0.928 0.006 264.531)",
          "sidebar-ring": "oklch(0.623 0.188 259.815)",
          "radius": "0.375rem"
        },
        "dark": {
          "background": "oklch(0.205 0 0)",
          "foreground": "oklch(0.922 0 0)",
          "card": "oklch(0.269 0 0)",
          "card-foreground": "oklch(0.922 0 0)",
          "popover": "oklch(0.269 0 0)",
          "popover-foreground": "oklch(0.922 0 0)",
          "primary": "oklch(0.623 0.188 259.815)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.269 0 0)",
          "secondary-foreground": "oklch(0.922 0 0)",
          "muted": "oklch(0.239 0 0)",
          "muted-foreground": "oklch(0.715 0 0)",
          "accent": "oklch(0.379 0.138 265.522)",
          "accent-foreground": "oklch(0.882 0.057 254.128)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.922 0 0)",
          "invert-foreground": "oklch(0.205 0 0)",
          "brand": "oklch(0.623 0.188 259.815)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.371 0 0)",
          "input": "oklch(0.371 0 0)",
          "ring": "oklch(0.623 0.188 259.815)",
          "chart-1": "oklch(0.714 0.143 254.624)",
          "chart-2": "oklch(0.623 0.188 259.815)",
          "chart-3": "oklch(0.546 0.215 262.881)",
          "chart-4": "oklch(0.488 0.217 264.376)",
          "chart-5": "oklch(0.424 0.181 265.638)",
          "sidebar": "oklch(0.205 0 0)",
          "sidebar-foreground": "oklch(0.922 0 0)",
          "sidebar-primary": "oklch(0.623 0.188 259.815)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.379 0.138 265.522)",
          "sidebar-accent-foreground": "oklch(0.882 0.057 254.128)",
          "sidebar-border": "oklch(0.371 0 0)",
          "sidebar-ring": "oklch(0.623 0.188 259.815)"
        }
      },
      "css": {
        "@import \"@fontsource/inter/400.css\"": {},
        "@import \"@fontsource/inter/500.css\"": {},
        "@import \"@fontsource/inter/600.css\"": {},
        "@import \"@fontsource/inter/700.css\"": {},
        "@import \"@fontsource/source-serif-4/400.css\"": {},
        "@import \"@fontsource/source-serif-4/500.css\"": {},
        "@import \"@fontsource/source-serif-4/600.css\"": {},
        "@import \"@fontsource/source-serif-4/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/modern-minimal.json",
        "tags": [
          "blue",
          "minimal",
          "sans"
        ],
        "contentHash": "62c46e1d76f9"
      }
    },
    {
      "name": "theme-mono",
      "type": "registry:theme",
      "title": "Mono",
      "description": "Stark grayscale with Geist Mono everywhere and square corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/geist-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Geist Mono, monospace",
          "font-serif": "Geist Mono, monospace",
          "font-mono": "Geist Mono, monospace"
        },
        "light": {
          "background": "oklch(1 0 0)",
          "foreground": "oklch(0.145 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.145 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.145 0 0)",
          "primary": "oklch(0.556 0 0)",
          "primary-foreground": "oklch(0.985 0 0)",
          "secondary": "oklch(0.97 0 0)",
          "secondary-foreground": "oklch(0.205 0 0)",
          "muted": "oklch(0.97 0 0)",
          "muted-foreground": "oklch(0.549 0 0)",
          "accent": "oklch(0.97 0 0)",
          "accent-foreground": "oklch(0.205 0 0)",
          "destructive": "oklch(0.583 0.239 28.476)",
          "destructive-foreground": "oklch(0.463 0.239 28.476)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.145 0 0)",
          "invert-foreground": "oklch(1 0 0)",
          "brand": "oklch(0.556 0 0)",
          "brand-foreground": "oklch(0.985 0 0)",
          "border": "oklch(0.922 0 0)",
          "input": "oklch(0.922 0 0)",
          "ring": "oklch(0.709 0 0)",
          "chart-1": "oklch(0.556 0 0)",
          "chart-2": "oklch(0.556 0 0)",
          "chart-3": "oklch(0.556 0 0)",
          "chart-4": "oklch(0.556 0 0)",
          "chart-5": "oklch(0.556 0 0)",
          "sidebar": "oklch(0.985 0 0)",
          "sidebar-foreground": "oklch(0.145 0 0)",
          "sidebar-primary": "oklch(0.205 0 0)",
          "sidebar-primary-foreground": "oklch(0.985 0 0)",
          "sidebar-accent": "oklch(0.97 0 0)",
          "sidebar-accent-foreground": "oklch(0.205 0 0)",
          "sidebar-border": "oklch(0.922 0 0)",
          "sidebar-ring": "oklch(0.709 0 0)",
          "shadow-2xs": "0px 1px 0px 0px oklch(0 0 0 / 0%)",
          "shadow-xs": "0px 1px 0px 0px oklch(0 0 0 / 0%)",
          "shadow-sm": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 1px 2px -1px oklch(0 0 0 / 0%)",
          "shadow-md": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 2px 4px -1px oklch(0 0 0 / 0%)",
          "shadow-lg": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 4px 6px -1px oklch(0 0 0 / 0%)",
          "shadow-xl": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 8px 10px -1px oklch(0 0 0 / 0%)",
          "shadow-2xl": "0px 1px 0px 0px oklch(0 0 0 / 0%)",
          "radius": "0rem"
        },
        "dark": {
          "background": "oklch(0.145 0 0)",
          "foreground": "oklch(0.985 0 0)",
          "card": "oklch(0.213 0 0)",
          "card-foreground": "oklch(0.985 0 0)",
          "popover": "oklch(0.269 0 0)",
          "popover-foreground": "oklch(0.985 0 0)",
          "primary": "oklch(0.556 0 0)",
          "primary-foreground": "oklch(0.985 0 0)",
          "secondary": "oklch(0.269 0 0)",
          "secondary-foreground": "oklch(0.985 0 0)",
          "muted": "oklch(0.269 0 0)",
          "muted-foreground": "oklch(0.709 0 0)",
          "accent": "oklch(0.371 0 0)",
          "accent-foreground": "oklch(0.985 0 0)",
          "destructive": "oklch(0.702 0.189 22.228)",
          "destructive-foreground": "oklch(0.802 0.189 22.228)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.985 0 0)",
          "invert-foreground": "oklch(0.145 0 0)",
          "brand": "oklch(0.556 0 0)",
          "brand-foreground": "oklch(0.985 0 0)",
          "border": "oklch(0.341 0 0)",
          "input": "oklch(0.439 0 0)",
          "ring": "oklch(0.556 0 0)",
          "chart-1": "oklch(0.556 0 0)",
          "chart-2": "oklch(0.556 0 0)",
          "chart-3": "oklch(0.556 0 0)",
          "chart-4": "oklch(0.556 0 0)",
          "chart-5": "oklch(0.556 0 0)",
          "sidebar": "oklch(0.205 0 0)",
          "sidebar-foreground": "oklch(0.985 0 0)",
          "sidebar-primary": "oklch(0.985 0 0)",
          "sidebar-primary-foreground": "oklch(0.205 0 0)",
          "sidebar-accent": "oklch(0.269 0 0)",
          "sidebar-accent-foreground": "oklch(0.985 0 0)",
          "sidebar-border": "oklch(1 0 0)",
          "sidebar-ring": "oklch(0.439 0 0)",
          "shadow-2xs": "0px 1px 0px 0px oklch(0 0 0 / 0%)",
          "shadow-xs": "0px 1px 0px 0px oklch(0 0 0 / 0%)",
          "shadow-sm": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 1px 2px -1px oklch(0 0 0 / 0%)",
          "shadow-md": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 2px 4px -1px oklch(0 0 0 / 0%)",
          "shadow-lg": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 4px 6px -1px oklch(0 0 0 / 0%)",
          "shadow-xl": "0px 1px 0px 0px oklch(0 0 0 / 0%), 0px 8px 10px -1px oklch(0 0 0 / 0%)",
          "shadow-2xl": "0px 1px 0px 0px oklch(0 0 0 / 0%)"
        }
      },
      "css": {
        "@import \"@fontsource/geist-mono/400.css\"": {},
        "@import \"@fontsource/geist-mono/500.css\"": {},
        "@import \"@fontsource/geist-mono/600.css\"": {},
        "@import \"@fontsource/geist-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/mono.json",
        "tags": [
          "gray",
          "monospace",
          "sharp"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "1px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "1px"
          }
        },
        "contentHash": "fc049daae33f"
      }
    },
    {
      "name": "theme-nature",
      "type": "registry:theme",
      "title": "Nature",
      "description": "Forest greens over warm off-white, with Montserrat for UI and Merriweather for serif text.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/montserrat@^5.3.0",
        "@fontsource/merriweather@^5.3.0",
        "@fontsource/source-code-pro@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Montserrat, sans-serif",
          "font-serif": "Merriweather, serif",
          "font-mono": "Source Code Pro, monospace"
        },
        "light": {
          "background": "oklch(0.971 0.007 80.721)",
          "foreground": "oklch(0.3 0.036 30.204)",
          "card": "oklch(0.971 0.007 80.721)",
          "card-foreground": "oklch(0.3 0.036 30.204)",
          "popover": "oklch(0.971 0.007 80.721)",
          "popover-foreground": "oklch(0.3 0.036 30.204)",
          "primary": "oklch(0.523 0.135 144.167)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.957 0.021 147.636)",
          "secondary-foreground": "oklch(0.425 0.116 144.308)",
          "muted": "oklch(0.937 0.014 74.422)",
          "muted-foreground": "oklch(0.45 0.049 39.211)",
          "accent": "oklch(0.895 0.05 146.037)",
          "accent-foreground": "oklch(0.425 0.116 144.308)",
          "destructive": "oklch(0.539 0.194 26.725)",
          "destructive-foreground": "oklch(0.419 0.194 26.725)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.3 0.036 30.204)",
          "invert-foreground": "oklch(0.971 0.007 80.721)",
          "brand": "oklch(0.523 0.135 144.167)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.881 0.021 74.643)",
          "input": "oklch(0.881 0.021 74.643)",
          "ring": "oklch(0.523 0.135 144.167)",
          "chart-1": "oklch(0.673 0.162 144.208)",
          "chart-2": "oklch(0.575 0.145 144.181)",
          "chart-3": "oklch(0.523 0.135 144.167)",
          "chart-4": "oklch(0.425 0.116 144.308)",
          "chart-5": "oklch(0.216 0.045 145.726)",
          "sidebar": "oklch(0.937 0.014 74.422)",
          "sidebar-foreground": "oklch(0.3 0.036 30.204)",
          "sidebar-primary": "oklch(0.523 0.135 144.167)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.895 0.05 146.037)",
          "sidebar-accent-foreground": "oklch(0.425 0.116 144.308)",
          "sidebar-border": "oklch(0.881 0.021 74.643)",
          "sidebar-ring": "oklch(0.523 0.135 144.167)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.268 0.028 150.768)",
          "foreground": "oklch(0.942 0.01 72.659)",
          "card": "oklch(0.333 0.027 146.987)",
          "card-foreground": "oklch(0.942 0.01 72.659)",
          "popover": "oklch(0.333 0.027 146.987)",
          "popover-foreground": "oklch(0.942 0.01 72.659)",
          "primary": "oklch(0.673 0.162 144.208)",
          "primary-foreground": "oklch(0.216 0.045 145.726)",
          "secondary": "oklch(0.394 0.027 142.993)",
          "secondary-foreground": "oklch(0.897 0.017 142.552)",
          "muted": "oklch(0.293 0.021 147.75)",
          "muted-foreground": "oklch(0.858 0.017 76.096)",
          "accent": "oklch(0.575 0.145 144.181)",
          "accent-foreground": "oklch(0.942 0.01 72.659)",
          "destructive": "oklch(0.539 0.194 26.725)",
          "destructive-foreground": "oklch(0.639 0.194 26.725)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.942 0.01 72.659)",
          "invert-foreground": "oklch(0.268 0.028 150.768)",
          "brand": "oklch(0.673 0.162 144.208)",
          "brand-foreground": "oklch(0.216 0.045 145.726)",
          "border": "oklch(0.394 0.027 142.993)",
          "input": "oklch(0.394 0.027 142.993)",
          "ring": "oklch(0.673 0.162 144.208)",
          "chart-1": "oklch(0.766 0.118 145.295)",
          "chart-2": "oklch(0.718 0.142 144.889)",
          "chart-3": "oklch(0.673 0.162 144.208)",
          "chart-4": "oklch(0.629 0.154 144.203)",
          "chart-5": "oklch(0.575 0.145 144.181)",
          "sidebar": "oklch(0.268 0.028 150.768)",
          "sidebar-foreground": "oklch(0.942 0.01 72.659)",
          "sidebar-primary": "oklch(0.673 0.162 144.208)",
          "sidebar-primary-foreground": "oklch(0.216 0.045 145.726)",
          "sidebar-accent": "oklch(0.575 0.145 144.181)",
          "sidebar-accent-foreground": "oklch(0.942 0.01 72.659)",
          "sidebar-border": "oklch(0.394 0.027 142.993)",
          "sidebar-ring": "oklch(0.673 0.162 144.208)"
        }
      },
      "css": {
        "@import \"@fontsource/montserrat/400.css\"": {},
        "@import \"@fontsource/montserrat/500.css\"": {},
        "@import \"@fontsource/montserrat/600.css\"": {},
        "@import \"@fontsource/montserrat/700.css\"": {},
        "@import \"@fontsource/merriweather/400.css\"": {},
        "@import \"@fontsource/merriweather/500.css\"": {},
        "@import \"@fontsource/merriweather/600.css\"": {},
        "@import \"@fontsource/merriweather/700.css\"": {},
        "@import \"@fontsource/source-code-pro/400.css\"": {},
        "@import \"@fontsource/source-code-pro/500.css\"": {},
        "@import \"@fontsource/source-code-pro/600.css\"": {},
        "@import \"@fontsource/source-code-pro/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/nature.json",
        "tags": [
          "green",
          "warm",
          "sans"
        ],
        "contentHash": "be55712e7a4a"
      }
    },
    {
      "name": "theme-northern-lights",
      "type": "registry:theme",
      "title": "Northern Lights",
      "description": "Aurora greens and blues on light gray with Plus Jakarta Sans; dark slate mode.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/plus-jakarta-sans@^5.3.0",
        "@fontsource/source-serif-4@^5.3.0",
        "@fontsource/jetbrains-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Plus Jakarta Sans, sans-serif",
          "font-serif": "Source Serif 4, serif",
          "font-mono": "JetBrains Mono, monospace"
        },
        "light": {
          "background": "oklch(0.982 0.001 286.375)",
          "foreground": "oklch(0.321 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.321 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.321 0 0)",
          "primary": "oklch(0.649 0.154 150.307)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.665 0.141 261.338)",
          "secondary-foreground": "oklch(1 0 0)",
          "muted": "oklch(0.883 0.028 98.103)",
          "muted-foreground": "oklch(0.538 0 0)",
          "accent": "oklch(0.827 0.108 211.963)",
          "accent-foreground": "oklch(0.321 0 0)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.321 0 0)",
          "invert-foreground": "oklch(0.982 0.001 286.375)",
          "brand": "oklch(0.649 0.154 150.307)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.87 0 0)",
          "input": "oklch(0.87 0 0)",
          "ring": "oklch(0.649 0.154 150.307)",
          "chart-1": "oklch(0.649 0.154 150.307)",
          "chart-2": "oklch(0.665 0.141 261.338)",
          "chart-3": "oklch(0.827 0.108 211.963)",
          "chart-4": "oklch(0.588 0.099 245.739)",
          "chart-5": "oklch(0.59 0.161 148.241)",
          "sidebar": "oklch(0.982 0.001 286.375)",
          "sidebar-foreground": "oklch(0.321 0 0)",
          "sidebar-primary": "oklch(0.649 0.154 150.307)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.827 0.108 211.963)",
          "sidebar-accent-foreground": "oklch(0.321 0 0)",
          "sidebar-border": "oklch(0.87 0 0)",
          "sidebar-ring": "oklch(0.649 0.154 150.307)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.23 0.012 264.293)",
          "foreground": "oklch(0.922 0 0)",
          "card": "oklch(0.321 0.008 223.666)",
          "card-foreground": "oklch(0.922 0 0)",
          "popover": "oklch(0.321 0.008 223.666)",
          "popover-foreground": "oklch(0.922 0 0)",
          "primary": "oklch(0.649 0.154 150.307)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.588 0.099 245.739)",
          "secondary-foreground": "oklch(0.922 0 0)",
          "muted": "oklch(0.387 0 0)",
          "muted-foreground": "oklch(0.715 0 0)",
          "accent": "oklch(0.665 0.141 261.338)",
          "accent-foreground": "oklch(1 0 0)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.922 0 0)",
          "invert-foreground": "oklch(0.23 0.012 264.293)",
          "brand": "oklch(0.649 0.154 150.307)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.387 0 0)",
          "input": "oklch(0.387 0 0)",
          "ring": "oklch(0.649 0.154 150.307)",
          "chart-1": "oklch(0.649 0.154 150.307)",
          "chart-2": "oklch(0.588 0.099 245.739)",
          "chart-3": "oklch(0.665 0.141 261.338)",
          "chart-4": "oklch(0.827 0.108 211.963)",
          "chart-5": "oklch(0.59 0.161 148.241)",
          "sidebar": "oklch(0.23 0.012 264.293)",
          "sidebar-foreground": "oklch(0.922 0 0)",
          "sidebar-primary": "oklch(0.649 0.154 150.307)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.665 0.141 261.338)",
          "sidebar-accent-foreground": "oklch(1 0 0)",
          "sidebar-border": "oklch(0.387 0 0)",
          "sidebar-ring": "oklch(0.649 0.154 150.307)"
        }
      },
      "css": {
        "@import \"@fontsource/plus-jakarta-sans/400.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/500.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/600.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/700.css\"": {},
        "@import \"@fontsource/source-serif-4/400.css\"": {},
        "@import \"@fontsource/source-serif-4/500.css\"": {},
        "@import \"@fontsource/source-serif-4/600.css\"": {},
        "@import \"@fontsource/source-serif-4/700.css\"": {},
        "@import \"@fontsource/jetbrains-mono/400.css\"": {},
        "@import \"@fontsource/jetbrains-mono/500.css\"": {},
        "@import \"@fontsource/jetbrains-mono/600.css\"": {},
        "@import \"@fontsource/jetbrains-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/northern-lights.json",
        "tags": [
          "green",
          "blue",
          "sans"
        ],
        "contentHash": "29bbe017b3aa"
      }
    },
    {
      "name": "theme-ocean-breeze",
      "type": "registry:theme",
      "title": "Ocean Breeze",
      "description": "Sea-green primary over a pale sky-blue background with DM Sans and Lora; navy dark mode.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/dm-sans@^5.3.0",
        "@fontsource/lora@^5.3.0",
        "@fontsource/ibm-plex-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "DM Sans, sans-serif",
          "font-serif": "Lora, serif",
          "font-mono": "IBM Plex Mono, monospace"
        },
        "light": {
          "background": "oklch(0.975 0.013 244.251)",
          "foreground": "oklch(0.373 0.031 259.733)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.373 0.031 259.733)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.373 0.031 259.733)",
          "primary": "oklch(0.643 0.192 149.579)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.951 0.025 236.824)",
          "secondary-foreground": "oklch(0.446 0.026 256.802)",
          "muted": "oklch(0.967 0.003 264.542)",
          "muted-foreground": "oklch(0.551 0.023 264.364)",
          "accent": "oklch(0.95 0.051 163.051)",
          "accent-foreground": "oklch(0.373 0.031 259.733)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.373 0.031 259.733)",
          "invert-foreground": "oklch(0.975 0.013 244.251)",
          "brand": "oklch(0.643 0.192 149.579)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.928 0.006 264.531)",
          "input": "oklch(0.928 0.006 264.531)",
          "ring": "oklch(0.643 0.192 149.579)",
          "chart-1": "oklch(0.643 0.192 149.579)",
          "chart-2": "oklch(0.696 0.149 162.48)",
          "chart-3": "oklch(0.596 0.127 163.225)",
          "chart-4": "oklch(0.508 0.105 165.612)",
          "chart-5": "oklch(0.432 0.086 166.913)",
          "sidebar": "oklch(0.951 0.025 236.824)",
          "sidebar-foreground": "oklch(0.373 0.031 259.733)",
          "sidebar-primary": "oklch(0.643 0.192 149.579)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.95 0.051 163.051)",
          "sidebar-accent-foreground": "oklch(0.373 0.031 259.733)",
          "sidebar-border": "oklch(0.928 0.006 264.531)",
          "sidebar-ring": "oklch(0.643 0.192 149.579)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.208 0.04 265.755)",
          "foreground": "oklch(0.872 0.009 258.338)",
          "card": "oklch(0.279 0.037 260.031)",
          "card-foreground": "oklch(0.872 0.009 258.338)",
          "popover": "oklch(0.279 0.037 260.031)",
          "popover-foreground": "oklch(0.872 0.009 258.338)",
          "primary": "oklch(0.773 0.153 163.223)",
          "primary-foreground": "oklch(0.208 0.04 265.755)",
          "secondary": "oklch(0.335 0.033 260.912)",
          "secondary-foreground": "oklch(0.712 0.013 286.066)",
          "muted": "oklch(0.246 0.028 259.963)",
          "muted-foreground": "oklch(0.551 0.023 264.364)",
          "accent": "oklch(0.373 0.031 259.733)",
          "accent-foreground": "oklch(0.712 0.013 286.066)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.737 0.208 25.331)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.872 0.009 258.338)",
          "invert-foreground": "oklch(0.208 0.04 265.755)",
          "brand": "oklch(0.773 0.153 163.223)",
          "brand-foreground": "oklch(0.208 0.04 265.755)",
          "border": "oklch(0.446 0.026 256.802)",
          "input": "oklch(0.446 0.026 256.802)",
          "ring": "oklch(0.773 0.153 163.223)",
          "chart-1": "oklch(0.773 0.153 163.223)",
          "chart-2": "oklch(0.785 0.133 181.912)",
          "chart-3": "oklch(0.723 0.192 149.579)",
          "chart-4": "oklch(0.696 0.149 162.48)",
          "chart-5": "oklch(0.596 0.127 163.225)",
          "sidebar": "oklch(0.279 0.037 260.031)",
          "sidebar-foreground": "oklch(0.872 0.009 258.338)",
          "sidebar-primary": "oklch(0.773 0.153 163.223)",
          "sidebar-primary-foreground": "oklch(0.208 0.04 265.755)",
          "sidebar-accent": "oklch(0.373 0.031 259.733)",
          "sidebar-accent-foreground": "oklch(0.712 0.013 286.066)",
          "sidebar-border": "oklch(0.446 0.026 256.802)",
          "sidebar-ring": "oklch(0.773 0.153 163.223)",
          "shadow-2xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-xs": "0px 4px 8px -1px oklch(0 0 0 / 5%)",
          "shadow-sm": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 1px 2px -2px oklch(0 0 0 / 10%)",
          "shadow-md": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 2px 4px -2px oklch(0 0 0 / 10%)",
          "shadow-lg": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 4px 6px -2px oklch(0 0 0 / 10%)",
          "shadow-xl": "0px 4px 8px -1px oklch(0 0 0 / 10%), 0px 8px 10px -2px oklch(0 0 0 / 10%)",
          "shadow-2xl": "0px 4px 8px -1px oklch(0 0 0 / 25%)"
        }
      },
      "css": {
        "@import \"@fontsource/dm-sans/400.css\"": {},
        "@import \"@fontsource/dm-sans/500.css\"": {},
        "@import \"@fontsource/dm-sans/600.css\"": {},
        "@import \"@fontsource/dm-sans/700.css\"": {},
        "@import \"@fontsource/lora/400.css\"": {},
        "@import \"@fontsource/lora/500.css\"": {},
        "@import \"@fontsource/lora/600.css\"": {},
        "@import \"@fontsource/lora/700.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/400.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/500.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/600.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/ocean-breeze.json",
        "tags": [
          "green",
          "blue",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0.1,
            "blur": "8px",
            "spread": "-1px",
            "offsetX": "0px",
            "offsetY": "4px"
          }
        },
        "contentHash": "202ce6c6373e"
      }
    },
    {
      "name": "theme-plum",
      "type": "registry:theme",
      "title": "Plum",
      "description": "Deep purple primary and sidebar, pink brand, Manrope and 0.5rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/manrope@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Manrope, sans-serif"
        },
        "light": {
          "background": "oklch(0.985 0.002 296.657)",
          "foreground": "oklch(0.22 0.02 327.165)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0.22 0.02 327.165)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0.22 0.02 327.165)",
          "primary": "oklch(0.329 0.166 330.31)",
          "primary-foreground": "oklch(0.98 0.003 330.31)",
          "secondary": "oklch(0.95 0.015 330.31)",
          "secondary-foreground": "oklch(0.329 0.166 330.31)",
          "muted": "oklch(0.965 0.01 330.607)",
          "muted-foreground": "oklch(0.543 0.031 329.088)",
          "accent": "oklch(0.941 0.02 328.988)",
          "accent-foreground": "oklch(0.25 0.019 327.177)",
          "destructive": "oklch(0.55 0.2 27)",
          "destructive-foreground": "oklch(0.45 0.18 27)",
          "info": "oklch(0.585 0.161 249.24)",
          "info-foreground": "oklch(0.39 0.107 248.84)",
          "success": "oklch(0.644 0.175 146.88)",
          "success-foreground": "oklch(0.396 0.135 142.495)",
          "warning": "oklch(0.72 0.155 65.19)",
          "warning-foreground": "oklch(0.419 0.094 64.99)",
          "invert": "oklch(0.242 0.019 327.174)",
          "invert-foreground": "oklch(0.921 0.009 327.155)",
          "brand": "oklch(0.636 0.254 36.044)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.9 0.011 330.606)",
          "input": "oklch(0.921 0.009 327.155)",
          "ring": "oklch(0.329 0.166 330.31)",
          "chart-1": "oklch(0.327 0.139 329.54)",
          "chart-2": "oklch(0.401 0.179 330.31)",
          "chart-3": "oklch(0.764 0.122 277.53)",
          "chart-4": "oklch(0.865 0.066 268.934)",
          "chart-5": "oklch(0.955 0.022 251.888)",
          "sidebar": "oklch(0.329 0.166 330.31)",
          "sidebar-foreground": "oklch(0.98 0.003 335.169)",
          "sidebar-primary": "oklch(0.572 0.155 330.31)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.47 0.135 330.31)",
          "sidebar-accent-foreground": "oklch(0.98 0.003 335.169)",
          "sidebar-border": "oklch(0.49 0.07 330.31)",
          "sidebar-ring": "oklch(0.72 0.1 330.31)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.29 0.022 329.318)",
          "foreground": "oklch(0.93 0.008 327.118)",
          "card": "oklch(0.345 0.028 329.318)",
          "card-foreground": "oklch(0.93 0.008 327.118)",
          "popover": "oklch(0.355 0.028 329.318)",
          "popover-foreground": "oklch(0.93 0.008 327.118)",
          "primary": "oklch(0.68 0.15 330.31)",
          "primary-foreground": "oklch(0.179 0.019 330.31)",
          "secondary": "oklch(0.4 0.03 330.31)",
          "secondary-foreground": "oklch(0.82 0.11 330.31)",
          "muted": "oklch(0.38 0.026 329.318)",
          "muted-foreground": "oklch(0.77 0.022 327.218)",
          "accent": "oklch(0.43 0.075 330.118)",
          "accent-foreground": "oklch(0.95 0.008 327.118)",
          "destructive": "oklch(0.62 0.19 29)",
          "destructive-foreground": "oklch(0.77 0.13 27)",
          "info": "oklch(0.66 0.14 249.24)",
          "info-foreground": "oklch(0.79 0.1 249.24)",
          "success": "oklch(0.69 0.16 146.88)",
          "success-foreground": "oklch(0.8 0.13 146.88)",
          "warning": "oklch(0.76 0.15 65.19)",
          "warning-foreground": "oklch(0.84 0.12 70)",
          "invert": "oklch(0.921 0.009 327.155)",
          "invert-foreground": "oklch(0.242 0.019 327.174)",
          "brand": "oklch(0.636 0.254 36.044)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.45 0.028 329.318)",
          "input": "oklch(0.47 0.028 329.318)",
          "ring": "oklch(0.72 0.13 330.31)",
          "chart-1": "oklch(0.48 0.16 329.54)",
          "chart-2": "oklch(0.6 0.17 330.31)",
          "chart-3": "oklch(0.74 0.135 277.53)",
          "chart-4": "oklch(0.82 0.089 268.934)",
          "chart-5": "oklch(0.9 0.05 251.888)",
          "sidebar": "oklch(0.33 0.075 330.31)",
          "sidebar-foreground": "oklch(0.95 0.008 327.118)",
          "sidebar-primary": "oklch(0.56 0.16 330.31)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.4 0.085 330.31)",
          "sidebar-accent-foreground": "oklch(0.95 0.008 327.118)",
          "sidebar-border": "oklch(0.46 0.065 330.31)",
          "sidebar-ring": "oklch(0.68 0.12 330.31)"
        }
      },
      "css": {
        "@import \"@fontsource/manrope/400.css\"": {},
        "@import \"@fontsource/manrope/500.css\"": {},
        "@import \"@fontsource/manrope/600.css\"": {},
        "@import \"@fontsource/manrope/700.css\"": {}
      },
      "meta": {
        "source": "original",
        "license": "MIT",
        "tags": [
          "purple",
          "pink",
          "sans"
        ],
        "contentHash": "a00aac48a78e"
      }
    },
    {
      "name": "theme-soft-pop",
      "type": "registry:theme",
      "title": "Soft Pop",
      "description": "Indigo, teal and amber pops on a soft off-white, DM Sans and round 1rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/dm-sans@^5.3.0",
        "@fontsource/space-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "DM Sans, sans-serif",
          "font-serif": "DM Sans, sans-serif",
          "font-mono": "Space Mono, monospace"
        },
        "light": {
          "background": "oklch(0.979 0.008 121.627)",
          "foreground": "oklch(0 0 0)",
          "card": "oklch(1 0 0)",
          "card-foreground": "oklch(0 0 0)",
          "popover": "oklch(1 0 0)",
          "popover-foreground": "oklch(0 0 0)",
          "primary": "oklch(0.511 0.23 276.966)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.644 0.123 182.503)",
          "secondary-foreground": "oklch(1 0 0)",
          "muted": "oklch(0.955 0 0)",
          "muted-foreground": "oklch(0.321 0 0)",
          "accent": "oklch(0.769 0.165 70.08)",
          "accent-foreground": "oklch(0 0 0)",
          "destructive": "oklch(0.637 0.208 25.331)",
          "destructive-foreground": "oklch(0.517 0.208 25.331)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0 0 0)",
          "invert-foreground": "oklch(0.979 0.008 121.627)",
          "brand": "oklch(0.511 0.23 276.966)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0 0 0)",
          "input": "oklch(0.556 0 0)",
          "ring": "oklch(0.785 0.104 274.713)",
          "chart-1": "oklch(0.511 0.23 276.966)",
          "chart-2": "oklch(0.644 0.123 182.503)",
          "chart-3": "oklch(0.769 0.165 70.08)",
          "chart-4": "oklch(0.656 0.212 354.308)",
          "chart-5": "oklch(0.723 0.192 149.579)",
          "sidebar": "oklch(0.979 0.008 121.627)",
          "sidebar-foreground": "oklch(0 0 0)",
          "sidebar-primary": "oklch(0.511 0.23 276.966)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.769 0.165 70.08)",
          "sidebar-accent-foreground": "oklch(0 0 0)",
          "sidebar-border": "oklch(0 0 0)",
          "sidebar-ring": "oklch(0.785 0.104 274.713)",
          "shadow-2xs": "0px 0px 0px 0px oklch(0.218 0 0 / 3%)",
          "shadow-xs": "0px 0px 0px 0px oklch(0.218 0 0 / 3%)",
          "shadow-sm": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 1px 2px -1px oklch(0.218 0 0 / 5%)",
          "shadow-md": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 2px 4px -1px oklch(0.218 0 0 / 5%)",
          "shadow-lg": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 4px 6px -1px oklch(0.218 0 0 / 5%)",
          "shadow-xl": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 8px 10px -1px oklch(0.218 0 0 / 5%)",
          "shadow-2xl": "0px 0px 0px 0px oklch(0.218 0 0 / 13%)",
          "radius": "1rem"
        },
        "dark": {
          "background": "oklch(0 0 0)",
          "foreground": "oklch(1 0 0)",
          "card": "oklch(0.246 0.022 257.282)",
          "card-foreground": "oklch(1 0 0)",
          "popover": "oklch(0.246 0.022 257.282)",
          "popover-foreground": "oklch(1 0 0)",
          "primary": "oklch(0.68 0.158 276.935)",
          "primary-foreground": "oklch(0 0 0)",
          "secondary": "oklch(0.785 0.133 181.912)",
          "secondary-foreground": "oklch(0 0 0)",
          "muted": "oklch(0.321 0 0)",
          "muted-foreground": "oklch(0.845 0 0)",
          "accent": "oklch(0.879 0.153 91.605)",
          "accent-foreground": "oklch(0 0 0)",
          "destructive": "oklch(0.711 0.166 22.216)",
          "destructive-foreground": "oklch(0.811 0.166 22.216)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(1 0 0)",
          "invert-foreground": "oklch(0 0 0)",
          "brand": "oklch(0.68 0.158 276.935)",
          "brand-foreground": "oklch(0 0 0)",
          "border": "oklch(0.446 0 0)",
          "input": "oklch(1 0 0)",
          "ring": "oklch(0.68 0.158 276.935)",
          "chart-1": "oklch(0.68 0.158 276.935)",
          "chart-2": "oklch(0.785 0.133 181.912)",
          "chart-3": "oklch(0.879 0.153 91.605)",
          "chart-4": "oklch(0.725 0.175 349.761)",
          "chart-5": "oklch(0.8 0.182 151.711)",
          "sidebar": "oklch(0 0 0)",
          "sidebar-foreground": "oklch(1 0 0)",
          "sidebar-primary": "oklch(0.68 0.158 276.935)",
          "sidebar-primary-foreground": "oklch(0 0 0)",
          "sidebar-accent": "oklch(0.879 0.153 91.605)",
          "sidebar-accent-foreground": "oklch(0 0 0)",
          "sidebar-border": "oklch(1 0 0)",
          "sidebar-ring": "oklch(0.68 0.158 276.935)",
          "shadow-2xs": "0px 0px 0px 0px oklch(0.218 0 0 / 3%)",
          "shadow-xs": "0px 0px 0px 0px oklch(0.218 0 0 / 3%)",
          "shadow-sm": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 1px 2px -1px oklch(0.218 0 0 / 5%)",
          "shadow-md": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 2px 4px -1px oklch(0.218 0 0 / 5%)",
          "shadow-lg": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 4px 6px -1px oklch(0.218 0 0 / 5%)",
          "shadow-xl": "0px 0px 0px 0px oklch(0.218 0 0 / 5%), 0px 8px 10px -1px oklch(0.218 0 0 / 5%)",
          "shadow-2xl": "0px 0px 0px 0px oklch(0.218 0 0 / 13%)"
        }
      },
      "css": {
        "@import \"@fontsource/dm-sans/400.css\"": {},
        "@import \"@fontsource/dm-sans/500.css\"": {},
        "@import \"@fontsource/dm-sans/600.css\"": {},
        "@import \"@fontsource/dm-sans/700.css\"": {},
        "@import \"@fontsource/space-mono/400.css\"": {},
        "@import \"@fontsource/space-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/soft-pop.json",
        "tags": [
          "indigo",
          "colorful",
          "rounded",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.218 0 0)",
            "opacity": 0.05,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "0px"
          },
          "dark": {
            "color": "oklch(0.218 0 0)",
            "opacity": 0.05,
            "blur": "0px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "0px"
          }
        },
        "contentHash": "d7a1c7c9ad59"
      }
    },
    {
      "name": "theme-starry-night",
      "type": "registry:theme",
      "title": "Starry Night",
      "description": "Deep night blue with a golden secondary and Libre Baskerville, after Van Gogh.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/libre-baskerville@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Libre Baskerville, serif"
        },
        "light": {
          "background": "oklch(0.975 0.005 258.325)",
          "foreground": "oklch(0.256 0.043 268.066)",
          "card": "oklch(0.934 0.013 251.563)",
          "card-foreground": "oklch(0.256 0.043 268.066)",
          "popover": "oklch(0.986 0.028 98.054)",
          "popover-foreground": "oklch(0.256 0.043 268.066)",
          "primary": "oklch(0.481 0.118 263.376)",
          "primary-foreground": "oklch(0.986 0.028 98.054)",
          "secondary": "oklch(0.857 0.116 81.009)",
          "secondary-foreground": "oklch(0.256 0.043 268.066)",
          "muted": "oklch(0.92 0.008 106.556)",
          "muted-foreground": "oklch(0.481 0.118 263.376)",
          "accent": "oklch(0.66 0.071 234.039)",
          "accent-foreground": "oklch(1 0.028 98.054)",
          "destructive": "oklch(0.261 0.038 322.527)",
          "destructive-foreground": "oklch(0.141 0.038 322.527)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.256 0.043 268.066)",
          "invert-foreground": "oklch(0.975 0.005 258.325)",
          "brand": "oklch(0.481 0.118 263.376)",
          "brand-foreground": "oklch(0.986 0.028 98.054)",
          "border": "oklch(0.779 0.016 251.193)",
          "input": "oklch(0.69 0.071 234.039)",
          "ring": "oklch(0.857 0.116 81.009)",
          "chart-1": "oklch(0.481 0.118 263.376)",
          "chart-2": "oklch(0.857 0.116 81.009)",
          "chart-3": "oklch(0.66 0.071 234.039)",
          "chart-4": "oklch(0.779 0.016 251.193)",
          "chart-5": "oklch(0.261 0.038 322.527)",
          "sidebar": "oklch(0.934 0.013 251.563)",
          "sidebar-foreground": "oklch(0.256 0.043 268.066)",
          "sidebar-primary": "oklch(0.481 0.118 263.376)",
          "sidebar-primary-foreground": "oklch(0.986 0.028 98.054)",
          "sidebar-accent": "oklch(0.857 0.116 81.009)",
          "sidebar-accent-foreground": "oklch(0.256 0.043 268.066)",
          "sidebar-border": "oklch(0.779 0.016 251.193)",
          "sidebar-ring": "oklch(0.857 0.116 81.009)",
          "radius": "0.5rem"
        },
        "dark": {
          "background": "oklch(0.22 0.02 275.844)",
          "foreground": "oklch(0.937 0.013 266.697)",
          "card": "oklch(0.27 0.041 281.304)",
          "card-foreground": "oklch(0.937 0.013 266.697)",
          "popover": "oklch(0.27 0.041 281.304)",
          "popover-foreground": "oklch(0.91 0.144 95.112)",
          "primary": "oklch(0.481 0.118 263.376)",
          "primary-foreground": "oklch(0.91 0.144 95.112)",
          "secondary": "oklch(0.91 0.144 95.112)",
          "secondary-foreground": "oklch(0.27 0.041 281.304)",
          "muted": "oklch(0.242 0.032 281.089)",
          "muted-foreground": "oklch(0.624 0.041 262.037)",
          "accent": "oklch(0.847 0.052 264.775)",
          "accent-foreground": "oklch(0.22 0.02 275.844)",
          "destructive": "oklch(0.528 0.12 357.113)",
          "destructive-foreground": "oklch(0.628 0.12 357.113)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.937 0.013 266.697)",
          "invert-foreground": "oklch(0.22 0.02 275.844)",
          "brand": "oklch(0.481 0.118 263.376)",
          "brand-foreground": "oklch(0.91 0.144 95.112)",
          "border": "oklch(0.307 0.029 281.768)",
          "input": "oklch(0.481 0.118 263.376)",
          "ring": "oklch(0.91 0.144 95.112)",
          "chart-1": "oklch(0.481 0.118 263.376)",
          "chart-2": "oklch(0.91 0.144 95.112)",
          "chart-3": "oklch(0.69 0.071 234.039)",
          "chart-4": "oklch(0.624 0.041 262.037)",
          "chart-5": "oklch(0.528 0.12 357.113)",
          "sidebar": "oklch(0.27 0.041 281.304)",
          "sidebar-foreground": "oklch(0.937 0.013 266.697)",
          "sidebar-primary": "oklch(0.481 0.118 263.376)",
          "sidebar-primary-foreground": "oklch(0.91 0.144 95.112)",
          "sidebar-accent": "oklch(0.91 0.144 95.112)",
          "sidebar-accent-foreground": "oklch(0.27 0.041 281.304)",
          "sidebar-border": "oklch(0.307 0.029 281.768)",
          "sidebar-ring": "oklch(0.91 0.144 95.112)"
        }
      },
      "css": {
        "@import \"@fontsource/libre-baskerville/400.css\"": {},
        "@import \"@fontsource/libre-baskerville/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/starry-night.json",
        "tags": [
          "blue",
          "gold",
          "serif"
        ],
        "contentHash": "05d5bca938e3"
      }
    },
    {
      "name": "theme-supabase",
      "type": "registry:theme",
      "title": "Supabase",
      "description": "Supabase's emerald green on near-white and near-black, Outfit with loose tracking and 0.5rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/outfit@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Outfit, sans-serif",
          "tracking-tighter": "calc(var(--tracking-normal) - 0.05em)",
          "tracking-tight": "calc(var(--tracking-normal) - 0.025em)",
          "tracking-wide": "calc(var(--tracking-normal) + 0.025em)",
          "tracking-wider": "calc(var(--tracking-normal) + 0.05em)",
          "tracking-widest": "calc(var(--tracking-normal) + 0.1em)"
        },
        "light": {
          "background": "oklch(0.991 0 0)",
          "foreground": "oklch(0.205 0 0)",
          "card": "oklch(0.991 0 0)",
          "card-foreground": "oklch(0.205 0 0)",
          "popover": "oklch(0.991 0 0)",
          "popover-foreground": "oklch(0.439 0 0)",
          "primary": "oklch(0.835 0.13 160.908)",
          "primary-foreground": "oklch(0.263 0.015 166.459)",
          "secondary": "oklch(0.994 0 0)",
          "secondary-foreground": "oklch(0.205 0 0)",
          "muted": "oklch(0.946 0 0)",
          "muted-foreground": "oklch(0.243 0 0)",
          "accent": "oklch(0.946 0 0)",
          "accent-foreground": "oklch(0.243 0 0)",
          "destructive": "oklch(0.552 0.193 32.727)",
          "destructive-foreground": "oklch(0.432 0.193 32.727)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.205 0 0)",
          "invert-foreground": "oklch(0.991 0 0)",
          "brand": "oklch(0.835 0.13 160.908)",
          "brand-foreground": "oklch(0.263 0.015 166.459)",
          "border": "oklch(0.904 0 0)",
          "input": "oklch(0.973 0 0)",
          "ring": "oklch(0.835 0.13 160.908)",
          "chart-1": "oklch(0.835 0.13 160.908)",
          "chart-2": "oklch(0.623 0.188 259.815)",
          "chart-3": "oklch(0.606 0.219 292.717)",
          "chart-4": "oklch(0.769 0.165 70.08)",
          "chart-5": "oklch(0.696 0.149 162.48)",
          "sidebar": "oklch(0.991 0 0)",
          "sidebar-foreground": "oklch(0.545 0 0)",
          "sidebar-primary": "oklch(0.835 0.13 160.908)",
          "sidebar-primary-foreground": "oklch(0.263 0.015 166.459)",
          "sidebar-accent": "oklch(0.946 0 0)",
          "sidebar-accent-foreground": "oklch(0.243 0 0)",
          "sidebar-border": "oklch(0.904 0 0)",
          "sidebar-ring": "oklch(0.835 0.13 160.908)",
          "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 9%)",
          "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 9%)",
          "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 1px 2px -1px oklch(0 0 0 / 17%)",
          "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 2px 4px -1px oklch(0 0 0 / 17%)",
          "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 4px 6px -1px oklch(0 0 0 / 17%)",
          "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 8px 10px -1px oklch(0 0 0 / 17%)",
          "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 43%)",
          "radius": "0.5rem",
          "tracking-normal": "0.025em"
        },
        "dark": {
          "background": "oklch(0.182 0 0)",
          "foreground": "oklch(0.929 0.013 255.508)",
          "card": "oklch(0.205 0 0)",
          "card-foreground": "oklch(0.929 0.013 255.508)",
          "popover": "oklch(0.26 0 0)",
          "popover-foreground": "oklch(0.735 0 0)",
          "primary": "oklch(0.436 0.104 156.756)",
          "primary-foreground": "oklch(0.921 0.013 167.156)",
          "secondary": "oklch(0.26 0 0)",
          "secondary-foreground": "oklch(0.985 0 0)",
          "muted": "oklch(0.239 0 0)",
          "muted-foreground": "oklch(0.712 0 0)",
          "accent": "oklch(0.313 0 0)",
          "accent-foreground": "oklch(0.985 0 0)",
          "destructive": "oklch(0.312 0.085 29.788)",
          "destructive-foreground": "oklch(0.512 0.085 29.788)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.929 0.013 255.508)",
          "invert-foreground": "oklch(0.182 0 0)",
          "brand": "oklch(0.436 0.104 156.756)",
          "brand-foreground": "oklch(0.921 0.013 167.156)",
          "border": "oklch(0.281 0 0)",
          "input": "oklch(0.26 0 0)",
          "ring": "oklch(0.8 0.182 151.711)",
          "chart-1": "oklch(0.8 0.182 151.711)",
          "chart-2": "oklch(0.714 0.143 254.624)",
          "chart-3": "oklch(0.709 0.159 293.541)",
          "chart-4": "oklch(0.837 0.164 84.429)",
          "chart-5": "oklch(0.784 0.133 181.912)",
          "sidebar": "oklch(0.182 0 0)",
          "sidebar-foreground": "oklch(0.63 0 0)",
          "sidebar-primary": "oklch(0.436 0.104 156.756)",
          "sidebar-primary-foreground": "oklch(0.921 0.013 167.156)",
          "sidebar-accent": "oklch(0.313 0 0)",
          "sidebar-accent-foreground": "oklch(0.985 0 0)",
          "sidebar-border": "oklch(0.281 0 0)",
          "sidebar-ring": "oklch(0.8 0.182 151.711)",
          "shadow-2xs": "0px 1px 3px 0px oklch(0 0 0 / 9%)",
          "shadow-xs": "0px 1px 3px 0px oklch(0 0 0 / 9%)",
          "shadow-sm": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 1px 2px -1px oklch(0 0 0 / 17%)",
          "shadow-md": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 2px 4px -1px oklch(0 0 0 / 17%)",
          "shadow-lg": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 4px 6px -1px oklch(0 0 0 / 17%)",
          "shadow-xl": "0px 1px 3px 0px oklch(0 0 0 / 17%), 0px 8px 10px -1px oklch(0 0 0 / 17%)",
          "shadow-2xl": "0px 1px 3px 0px oklch(0 0 0 / 43%)"
        }
      },
      "css": {
        "@import \"@fontsource/outfit/400.css\"": {},
        "@import \"@fontsource/outfit/500.css\"": {},
        "@import \"@fontsource/outfit/600.css\"": {},
        "@import \"@fontsource/outfit/700.css\"": {},
        "@layer base": {
          "body": {
            "letter-spacing": "var(--tracking-normal)"
          }
        }
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/supabase.json",
        "tags": [
          "green",
          "neutral",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0.17,
            "blur": "3px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "1px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0.17,
            "blur": "3px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "1px"
          }
        },
        "contentHash": "7868e6fd17de"
      }
    },
    {
      "name": "theme-vintage-paper",
      "type": "registry:theme",
      "title": "Vintage Paper",
      "description": "Parchment backgrounds, brown ink and Libre Baskerville for an old-print feel.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/libre-baskerville@^5.3.0",
        "@fontsource/lora@^5.3.0",
        "@fontsource/ibm-plex-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Libre Baskerville, serif",
          "font-serif": "Lora, serif",
          "font-mono": "IBM Plex Mono, monospace"
        },
        "light": {
          "background": "oklch(0.958 0.015 90.236)",
          "foreground": "oklch(0.376 0.022 64.343)",
          "card": "oklch(0.991 0.01 87.47)",
          "card-foreground": "oklch(0.376 0.022 64.343)",
          "popover": "oklch(0.991 0.01 87.47)",
          "popover-foreground": "oklch(0.376 0.022 64.343)",
          "primary": "oklch(0.618 0.078 65.544)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.885 0.03 85.565)",
          "secondary-foreground": "oklch(0.431 0.03 64.929)",
          "muted": "oklch(0.924 0.019 83.064)",
          "muted-foreground": "oklch(0.539 0.039 71.165)",
          "accent": "oklch(0.835 0.043 88.806)",
          "accent-foreground": "oklch(0.376 0.022 64.343)",
          "destructive": "oklch(0.547 0.144 32.915)",
          "destructive-foreground": "oklch(0.427 0.144 32.915)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0.376 0.022 64.343)",
          "invert-foreground": "oklch(0.958 0.015 90.236)",
          "brand": "oklch(0.618 0.078 65.544)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.861 0.032 84.588)",
          "input": "oklch(0.861 0.032 84.588)",
          "ring": "oklch(0.618 0.078 65.544)",
          "chart-1": "oklch(0.618 0.078 65.544)",
          "chart-2": "oklch(0.56 0.062 68.581)",
          "chart-3": "oklch(0.485 0.057 72.683)",
          "chart-4": "oklch(0.678 0.062 64.775)",
          "chart-5": "oklch(0.726 0.058 66.697)",
          "sidebar": "oklch(0.924 0.019 83.064)",
          "sidebar-foreground": "oklch(0.376 0.022 64.343)",
          "sidebar-primary": "oklch(0.618 0.078 65.544)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.835 0.043 88.806)",
          "sidebar-accent-foreground": "oklch(0.376 0.022 64.343)",
          "sidebar-border": "oklch(0.861 0.032 84.588)",
          "sidebar-ring": "oklch(0.618 0.078 65.544)",
          "shadow-2xs": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 6%)",
          "shadow-xs": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 6%)",
          "shadow-sm": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 1px 2px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-md": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 2px 4px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-lg": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 4px 6px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-xl": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 8px 10px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-2xl": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 30%)",
          "radius": "0.25rem"
        },
        "dark": {
          "background": "oklch(0.275 0.014 57.652)",
          "foreground": "oklch(0.924 0.019 83.064)",
          "card": "oklch(0.324 0.016 59.06)",
          "card-foreground": "oklch(0.924 0.019 83.064)",
          "popover": "oklch(0.324 0.016 59.06)",
          "popover-foreground": "oklch(0.924 0.019 83.064)",
          "primary": "oklch(0.726 0.058 66.697)",
          "primary-foreground": "oklch(0.275 0.014 57.652)",
          "secondary": "oklch(0.38 0.018 57.128)",
          "secondary-foreground": "oklch(0.924 0.019 83.064)",
          "muted": "oklch(0.294 0.013 62.13)",
          "muted-foreground": "oklch(0.798 0.024 82.108)",
          "accent": "oklch(0.419 0.028 56.34)",
          "accent-foreground": "oklch(0.924 0.019 83.064)",
          "destructive": "oklch(0.547 0.144 32.915)",
          "destructive-foreground": "oklch(0.647 0.144 32.915)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.924 0.019 83.064)",
          "invert-foreground": "oklch(0.275 0.014 57.652)",
          "brand": "oklch(0.726 0.058 66.697)",
          "brand-foreground": "oklch(0.275 0.014 57.652)",
          "border": "oklch(0.38 0.018 57.128)",
          "input": "oklch(0.38 0.018 57.128)",
          "ring": "oklch(0.726 0.058 66.697)",
          "chart-1": "oklch(0.726 0.058 66.697)",
          "chart-2": "oklch(0.678 0.062 64.775)",
          "chart-3": "oklch(0.618 0.078 65.544)",
          "chart-4": "oklch(0.56 0.062 68.581)",
          "chart-5": "oklch(0.485 0.057 72.683)",
          "sidebar": "oklch(0.275 0.014 57.652)",
          "sidebar-foreground": "oklch(0.924 0.019 83.064)",
          "sidebar-primary": "oklch(0.726 0.058 66.697)",
          "sidebar-primary-foreground": "oklch(0.275 0.014 57.652)",
          "sidebar-accent": "oklch(0.419 0.028 56.34)",
          "sidebar-accent-foreground": "oklch(0.924 0.019 83.064)",
          "sidebar-border": "oklch(0.38 0.018 57.128)",
          "sidebar-ring": "oklch(0.726 0.058 66.697)",
          "shadow-2xs": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 6%)",
          "shadow-xs": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 6%)",
          "shadow-sm": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 1px 2px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-md": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 2px 4px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-lg": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 4px 6px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-xl": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 12%), 2px 8px 10px -1px oklch(0.325 0.015 63.479 / 12%)",
          "shadow-2xl": "2px 3px 5px 0px oklch(0.325 0.015 63.479 / 30%)"
        }
      },
      "css": {
        "@import \"@fontsource/libre-baskerville/400.css\"": {},
        "@import \"@fontsource/libre-baskerville/700.css\"": {},
        "@import \"@fontsource/lora/400.css\"": {},
        "@import \"@fontsource/lora/500.css\"": {},
        "@import \"@fontsource/lora/600.css\"": {},
        "@import \"@fontsource/lora/700.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/400.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/500.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/600.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/vintage-paper.json",
        "tags": [
          "brown",
          "warm",
          "serif"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0.325 0.015 63.479)",
            "opacity": 0.12,
            "blur": "5px",
            "spread": "0px",
            "offsetX": "2px",
            "offsetY": "3px"
          },
          "dark": {
            "color": "oklch(0.325 0.015 63.479)",
            "opacity": 0.12,
            "blur": "5px",
            "spread": "0px",
            "offsetX": "2px",
            "offsetY": "3px"
          }
        },
        "contentHash": "75d349aa4e4b"
      }
    },
    {
      "name": "theme-violet-bloom",
      "type": "registry:theme",
      "title": "Violet Bloom",
      "description": "Vivid violet primary on near-white, Plus Jakarta Sans and very round 1.4rem corners.",
      "author": "@fma-ds/ds",
      "categories": [
        "theme"
      ],
      "dependencies": [
        "@fontsource/plus-jakarta-sans@^5.3.0",
        "@fontsource/lora@^5.3.0",
        "@fontsource/ibm-plex-mono@^5.3.0"
      ],
      "files": [],
      "cssVars": {
        "theme": {
          "font-sans": "Plus Jakarta Sans, sans-serif",
          "font-serif": "Lora, serif",
          "font-mono": "IBM Plex Mono, monospace"
        },
        "light": {
          "background": "oklch(0.994 0 0)",
          "foreground": "oklch(0 0 0)",
          "card": "oklch(0.994 0 0)",
          "card-foreground": "oklch(0 0 0)",
          "popover": "oklch(0.991 0 0)",
          "popover-foreground": "oklch(0 0 0)",
          "primary": "oklch(0.539 0.271 286.746)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.954 0.006 255.476)",
          "secondary-foreground": "oklch(0.134 0 0)",
          "muted": "oklch(0.97 0 0)",
          "muted-foreground": "oklch(0.439 0 0)",
          "accent": "oklch(0.939 0.029 266.368)",
          "accent-foreground": "oklch(0.545 0.19 259.485)",
          "destructive": "oklch(0.629 0.19 23.07)",
          "destructive-foreground": "oklch(0.509 0.19 23.07)",
          "info": "oklch(0.546 0.245 262.881)",
          "info-foreground": "oklch(0.424 0.199 265.638)",
          "success": "oklch(0.527 0.154 150.069)",
          "success-foreground": "oklch(0.448 0.119 151.328)",
          "warning": "oklch(0.555 0.163 48.998)",
          "warning-foreground": "oklch(0.473 0.137 46.201)",
          "invert": "oklch(0 0 0)",
          "invert-foreground": "oklch(0.994 0 0)",
          "brand": "oklch(0.539 0.271 286.746)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.93 0.009 286.216)",
          "input": "oklch(0.94 0 0)",
          "ring": "oklch(0 0 0)",
          "chart-1": "oklch(0.746 0.148 156.45)",
          "chart-2": "oklch(0.539 0.271 286.746)",
          "chart-3": "oklch(0.734 0.176 50.552)",
          "chart-4": "oklch(0.583 0.181 259.728)",
          "chart-5": "oklch(0.559 0 0)",
          "sidebar": "oklch(0.978 0.005 247.876)",
          "sidebar-foreground": "oklch(0 0 0)",
          "sidebar-primary": "oklch(0 0 0)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.94 0 0)",
          "sidebar-accent-foreground": "oklch(0 0 0)",
          "sidebar-border": "oklch(0.94 0 0)",
          "sidebar-ring": "oklch(0 0 0)",
          "shadow-2xs": "0px 2px 3px 0px oklch(0 0 0 / 8%)",
          "shadow-xs": "0px 2px 3px 0px oklch(0 0 0 / 8%)",
          "shadow-sm": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 1px 2px -1px oklch(0 0 0 / 16%)",
          "shadow-md": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 2px 4px -1px oklch(0 0 0 / 16%)",
          "shadow-lg": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 4px 6px -1px oklch(0 0 0 / 16%)",
          "shadow-xl": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 8px 10px -1px oklch(0 0 0 / 16%)",
          "shadow-2xl": "0px 2px 3px 0px oklch(0 0 0 / 40%)",
          "radius": "1.4rem",
          "spacing": "0.27rem"
        },
        "dark": {
          "background": "oklch(0.222 0.006 271.139)",
          "foreground": "oklch(0.955 0 0)",
          "card": "oklch(0.257 0.008 274.653)",
          "card-foreground": "oklch(0.955 0 0)",
          "popover": "oklch(0.257 0.008 274.653)",
          "popover-foreground": "oklch(0.955 0 0)",
          "primary": "oklch(0.613 0.229 291.744)",
          "primary-foreground": "oklch(1 0 0)",
          "secondary": "oklch(0.294 0.013 272.931)",
          "secondary-foreground": "oklch(0.955 0 0)",
          "muted": "oklch(0.294 0.013 272.931)",
          "muted-foreground": "oklch(0.706 0 0)",
          "accent": "oklch(0.279 0.037 260.031)",
          "accent-foreground": "oklch(0.786 0.115 246.66)",
          "destructive": "oklch(0.711 0.166 22.216)",
          "destructive-foreground": "oklch(0.811 0.166 22.216)",
          "info": "oklch(0.707 0.165 254.624)",
          "info-foreground": "oklch(0.809 0.105 251.813)",
          "success": "oklch(0.792 0.209 151.711)",
          "success-foreground": "oklch(0.871 0.15 154.449)",
          "warning": "oklch(0.828 0.189 84.429)",
          "warning-foreground": "oklch(0.879 0.169 91.605)",
          "invert": "oklch(0.955 0 0)",
          "invert-foreground": "oklch(0.222 0.006 271.139)",
          "brand": "oklch(0.613 0.229 291.744)",
          "brand-foreground": "oklch(1 0 0)",
          "border": "oklch(0.329 0.009 268.384)",
          "input": "oklch(0.329 0.009 268.384)",
          "ring": "oklch(0.613 0.229 291.744)",
          "chart-1": "oklch(0.8 0.182 151.711)",
          "chart-2": "oklch(0.613 0.229 291.744)",
          "chart-3": "oklch(0.808 0.103 19.571)",
          "chart-4": "oklch(0.669 0.157 260.106)",
          "chart-5": "oklch(0.706 0 0)",
          "sidebar": "oklch(0.201 0.004 286.04)",
          "sidebar-foreground": "oklch(0.955 0 0)",
          "sidebar-primary": "oklch(0.613 0.229 291.744)",
          "sidebar-primary-foreground": "oklch(1 0 0)",
          "sidebar-accent": "oklch(0.294 0.013 272.931)",
          "sidebar-accent-foreground": "oklch(0.613 0.229 291.744)",
          "sidebar-border": "oklch(0.329 0.009 268.384)",
          "sidebar-ring": "oklch(0.613 0.229 291.744)",
          "shadow-2xs": "0px 2px 3px 0px oklch(0 0 0 / 8%)",
          "shadow-xs": "0px 2px 3px 0px oklch(0 0 0 / 8%)",
          "shadow-sm": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 1px 2px -1px oklch(0 0 0 / 16%)",
          "shadow-md": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 2px 4px -1px oklch(0 0 0 / 16%)",
          "shadow-lg": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 4px 6px -1px oklch(0 0 0 / 16%)",
          "shadow-xl": "0px 2px 3px 0px oklch(0 0 0 / 16%), 0px 8px 10px -1px oklch(0 0 0 / 16%)",
          "shadow-2xl": "0px 2px 3px 0px oklch(0 0 0 / 40%)"
        }
      },
      "css": {
        "@import \"@fontsource/plus-jakarta-sans/400.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/500.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/600.css\"": {},
        "@import \"@fontsource/plus-jakarta-sans/700.css\"": {},
        "@import \"@fontsource/lora/400.css\"": {},
        "@import \"@fontsource/lora/500.css\"": {},
        "@import \"@fontsource/lora/600.css\"": {},
        "@import \"@fontsource/lora/700.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/400.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/500.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/600.css\"": {},
        "@import \"@fontsource/ibm-plex-mono/700.css\"": {}
      },
      "meta": {
        "source": "third-party",
        "license": "Apache-2.0",
        "origin": "https://tweakcn.com/r/themes/violet-bloom.json",
        "tags": [
          "violet",
          "rounded",
          "sans"
        ],
        "shadow": {
          "light": {
            "color": "oklch(0 0 0)",
            "opacity": 0.16,
            "blur": "3px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "2px"
          },
          "dark": {
            "color": "oklch(0 0 0)",
            "opacity": 0.16,
            "blur": "3px",
            "spread": "0px",
            "offsetX": "0px",
            "offsetY": "2px"
          }
        },
        "contentHash": "987137c3db18"
      }
    },
    {
      "name": "time-picker",
      "type": "registry:ui",
      "title": "Time Picker",
      "description": "A composable time picker: hour, minute, second and AM/PM columns, in a popover or in place.\n\n- **Layouts**: in a popover (`TimePickerTrigger` + `TimePickerContent`), behind a typable field (`TimePickerInput`, which reads `930`, `14h30`, `2:30 pm`…) or in place (`TimePickerPanel`). `<TimePicker />` alone renders a trigger and a popover.\n- **Value**: `@internationalized/date` `Time` objects (`value`/`defaultValue`/`onChange`, `null` when empty).\n- **Columns**: `hourCycle`, `granularity` and `periodPosition` shape them.\n- **Choices**: `hourStep`/`minuteStep`/`secondStep`, `minValue`/`maxValue` (an overnight window when min > max) and `isTimeUnavailable` narrow them, and a pick moves to the nearest selectable time.\n- **`requireConfirm`**: keeps picks as a draft until OK.\n- **Keyboard**: each column is an `aria-activedescendant` listbox — arrows, Home/End, PageUp/PageDown and typed digits pick, Left/Right move between columns, Enter commits and closes.\n- **Forms**: `name` submits `HH:mm` (or `HH:mm:ss`) with a native form; `isRequired`, `isInvalid`, `isReadOnly` and `isDisabled` work as in react-aria.\n- **`useTimePicker()`**: exposes the state inside a picker.\n\nEvery string comes from `i18n`.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/core/time-picker/time-picker.tsx",
          "target": "components/fma-ds/time-picker.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/button",
        "@fma-ds/input-group",
        "@fma-ds/popover"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4",
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/time-picker, MIT); rebuilt on react-aria Popover, Dialog and Button",
        "tags": [
          "forms",
          "time",
          "picker",
          "popover",
          "react-aria"
        ],
        "contentHash": "79c8a802fbb2"
      }
    },
    {
      "name": "timeline",
      "type": "registry:ui",
      "title": "Timeline",
      "description": "A vertical or horizontal timeline rendered as an ordered list.\n\n- **`value`**: the current step. Items with `step <= value` get `data-completed` (filled indicator and separator), and the current one gets `aria-current=\"step\"`.\n- **`TimelineItem`**: composed from `TimelineHeader` (`TimelineDate`, `TimelineTitle`, `TimelineIndicator`), `TimelineSeparator` and `TimelineContent`.",
      "author": "@fma-ds/ds",
      "categories": [
        "data-display"
      ],
      "files": [
        {
          "path": "src/core/timeline/timeline.tsx",
          "target": "components/fma-ds/timeline.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0"
      ],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/docs/components/base/timeline, MIT)",
        "tags": [
          "data-display",
          "timeline",
          "steps",
          "progress"
        ],
        "contentHash": "dcac7712c5ba"
      }
    },
    {
      "name": "toggle",
      "type": "registry:ui",
      "title": "Toggle",
      "description": "A single two-state pressable button (on/off) — the single-button counterpart to `ToggleGroup`.\n\n- **Styles**: `default` and `outline` variants, in three sizes.\n- **States**: pressed uses `accent` (the theme's selected surface); hover stays `muted`, as in shadcn, so hovering and pressed look different.",
      "author": "@fma-ds/ds",
      "categories": [
        "buttons"
      ],
      "files": [
        {
          "path": "src/core/toggle/toggle.tsx",
          "target": "components/fma-ds/toggle.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "customized",
        "license": "MIT",
        "tags": [
          "buttons",
          "toggle",
          "react-aria"
        ],
        "contentHash": "faf5ba6b500f"
      }
    },
    {
      "name": "toggle-group",
      "type": "registry:ui",
      "title": "Toggle Group",
      "description": "A connected row (or column) of Toggle buttons sharing one visual variant/size/spacing, for grouped single- or multi-select controls (e.g. text formatting).",
      "author": "@fma-ds/ds",
      "categories": [
        "buttons"
      ],
      "files": [
        {
          "path": "src/core/toggle-group/toggle-group.tsx",
          "target": "components/fma-ds/toggle-group.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/toggle"
      ],
      "dependencies": [
        "class-variance-authority@^0.7.1",
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "buttons",
          "toggle",
          "react-aria"
        ],
        "contentHash": "c25eb7aa70d6"
      }
    },
    {
      "name": "tooltip",
      "type": "registry:ui",
      "title": "Tooltip",
      "description": "A short, non-interactive hint that appears on hover or keyboard focus of its trigger.",
      "author": "@fma-ds/ds",
      "categories": [
        "overlay"
      ],
      "files": [
        {
          "path": "src/core/tooltip/tooltip.tsx",
          "target": "components/fma-ds/tooltip.tsx",
          "type": "registry:component"
        }
      ],
      "dependencies": [
        "cn@^0.5.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "origin": "shadcn/ui, style: aria-nova (base: react-aria-components). TooltipTrigger wraps [trigger, Tooltip] and opens with no delay by default (delay=0).",
        "tags": [
          "overlay",
          "react-aria"
        ],
        "contentHash": "392de9b1f8d4"
      }
    },
    {
      "name": "trace",
      "type": "registry:ui",
      "title": "Trace",
      "description": "A compact activity log for AI agents.\n\n- **`Trace`**: stacks `TraceLine`s — an optional `TraceIcon`, a `TraceTitle` and a `TraceDescription` — each with a `status` of running (shimmering title), pending or error.\n- **`TraceCollapsible`**: wrap a line in it, with `TraceCollapsibleTrigger` and `TraceCollapsibleContent`, to reveal the details of a step.",
      "author": "@fma-ds/ds",
      "categories": [
        "chat"
      ],
      "files": [
        {
          "path": "src/core/trace/trace.tsx",
          "target": "components/fma-ds/trace.tsx",
          "type": "registry:component"
        }
      ],
      "registryDependencies": [
        "@fma-ds/collapsible"
      ],
      "dependencies": [
        "cn@^0.5.0",
        "lucide-react@^1.61.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "experimental",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "chat",
          "ai",
          "agent",
          "collapsible"
        ],
        "contentHash": "4a929bd79dfa"
      }
    },
    {
      "name": "type-helper",
      "type": "registry:lib",
      "title": "Type Helper",
      "description": "Runtime type-checking helpers (typeHelper.isString/isNumber/isArray/...) built on Object.prototype.toString, usable as TypeScript type guards.",
      "author": "@fma-ds/ds",
      "categories": [
        "utils"
      ],
      "files": [
        {
          "path": "src/lib/type-helper.ts",
          "target": "lib/fma-ds/type-helper.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "types",
          "guards"
        ],
        "contentHash": "4cec5bed7f04"
      }
    },
    {
      "name": "types",
      "type": "registry:lib",
      "title": "Types",
      "description": "Shared type utilities: Brand<T, B> for nominal typing of structurally-identical types, and Interval<T> for inclusive from/to spans.",
      "author": "@fma-ds/ds",
      "categories": [
        "utils"
      ],
      "files": [
        {
          "path": "src/lib/types.ts",
          "target": "lib/fma-ds/types.ts",
          "type": "registry:lib"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "types",
          "typescript"
        ],
        "contentHash": "8da1100122a1"
      }
    },
    {
      "name": "use-available-date-correction",
      "type": "registry:hook",
      "title": "Use Available Date Correction",
      "description": "useAvailableDateCorrection: revalidates an already-committed date value against min/max/unavailable ranges whenever the value or constraints change, correcting it through the date-availability travel-or-clear policy.",
      "author": "@fma-ds/ds",
      "categories": [
        "date"
      ],
      "files": [
        {
          "path": "src/hooks/use-available-date-correction.ts",
          "target": "hooks/fma-ds/use-available-date-correction.ts",
          "type": "registry:hook"
        }
      ],
      "registryDependencies": [
        "@fma-ds/date-availability",
        "@fma-ds/types"
      ],
      "dependencies": [
        "@internationalized/date@^3.12.4"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "date",
          "hook",
          "validation"
        ],
        "contentHash": "20d67fbe12a2"
      }
    },
    {
      "name": "use-dialog-promise",
      "type": "registry:hook",
      "title": "Use Dialog Promise",
      "description": "`useDialogPromise<D, V>()`: state and promise for a dialog you render yourself.\n\n- **`open(data)`**: opens it and returns a promise of a `DialogResult<V>` that never rejects — `{ status: \"confirmed\", value }`, `{ status: \"cancelled\" }` or `{ status: \"dismissed\" }` (Escape, outside click, a new open or unmount).\n- **`dialogProps`**: spread `isOpen`/`onOpenChange` on any overlay (`AlertDialog`, `Dialog`, `Sheet`), and call `confirm(value)` or `cancel()` from it.\n- **Async confirm**: `confirm(async () => value)` keeps the dialog open with `isPending` until it resolves, and open with `error` if it throws.\n- **`data`**: holds what `open` passed (kept after closing for exit animations), so the dialog can be its own component that receives the controller.",
      "author": "@fma-ds/ds",
      "categories": [
        "utils"
      ],
      "files": [
        {
          "path": "src/hooks/use-dialog-promise.ts",
          "target": "hooks/fma-ds/use-dialog-promise.ts",
          "type": "registry:hook"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "hook",
          "dialog",
          "promise",
          "overlay"
        ],
        "contentHash": "c0a98d264636"
      }
    },
    {
      "name": "use-file-upload",
      "type": "registry:hook",
      "title": "Use File Upload",
      "description": "`useFileUpload`: headless state for picking files, without uploading them.\n\n- **`addFiles`**: validates each file against `accept` (extensions and MIME types, as in `<input accept>`), `maxSize` and, with `multiple`, `maxFiles` (a batch that goes over is rejected whole), and skips duplicates. Without `multiple`, a new file replaces the current one.\n- **State**: uncontrolled (`defaultValue`) or controlled (`value`/`onChange`); takes `isDisabled`.\n- **Returns**: `files` (`{ id, file }`, where `file` is a `File` or metadata of one already stored) plus `errors` as `{ code, message, file }`, with `messages` to translate them.\n- **Helpers**: also exports `formatBytes` and `matchesAccept`.\n\nProgress and retries stay with the caller, keyed by file id.\n\nBased on reui's hook, with its batch, stale-state and StrictMode bugs fixed and its DOM drag handlers left to react-aria's `DropZone` (see `file-upload`).",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/hooks/use-file-upload.ts",
          "target": "hooks/fma-ds/use-file-upload.ts",
          "type": "registry:hook"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "third-party",
        "license": "MIT",
        "origin": "reui.io (https://reui.io/r/use-file-upload.json, MIT)",
        "tags": [
          "hook",
          "forms",
          "file",
          "upload"
        ],
        "contentHash": "96b78ef16db8"
      }
    },
    {
      "name": "use-mask",
      "type": "registry:hook",
      "title": "Use Mask",
      "description": "`useMask`: applies an `input-masks` preset (`\"cpf\"`, `\"phone\"`, `{ type: \"decimal\", prefix: \"R$ \" }`…) or custom Maskito options to any input.\n\n- **`inputProps`**: spread onto `Input`, `InputGroupInput` or a native input; it carries the masked value, Maskito's ref, and per-preset `inputMode`, `autoComplete` and placeholder.\n- **Value**: reports the raw value through `onValueChange`, and accepts a raw or masked controlled value.\n- **`TextField`**: reads the value of an enclosing react-aria `TextField`.",
      "author": "@fma-ds/ds",
      "categories": [
        "forms"
      ],
      "files": [
        {
          "path": "src/hooks/use-mask.ts",
          "target": "hooks/fma-ds/use-mask.ts",
          "type": "registry:hook"
        }
      ],
      "registryDependencies": [
        "@fma-ds/input-masks"
      ],
      "dependencies": [
        "@maskito/react@^5.6.0",
        "react-aria-components@^1.22.1"
      ],
      "meta": {
        "status": "stable",
        "source": "original",
        "license": "MIT",
        "tags": [
          "hook",
          "forms",
          "mask",
          "pt-BR"
        ],
        "contentHash": "25d968e24406"
      }
    },
    {
      "name": "use-mobile",
      "type": "registry:hook",
      "title": "Use Mobile",
      "description": "useIsMobile: reports whether the viewport is below the 768px mobile breakpoint, updating on resize. Used by sidebar.",
      "author": "@fma-ds/ds",
      "categories": [
        "utils"
      ],
      "files": [
        {
          "path": "src/hooks/use-mobile.ts",
          "target": "hooks/fma-ds/use-mobile.ts",
          "type": "registry:hook"
        }
      ],
      "dependencies": [],
      "meta": {
        "status": "stable",
        "source": "shadcn",
        "license": "MIT",
        "tags": [
          "hook",
          "responsive"
        ],
        "contentHash": "21eff740f9e5"
      }
    }
  ]
}
