{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "tomei",
  "homepage": "https://tomei.zubeyr.dev",
  "items": [
    {
      "name": "date-picker",
      "type": "registry:component",
      "title": "Date Picker",
      "description": "Date, date range, date + time, time and month pickers that share the Date Range Picker’s calendar and panel: typed entry in plain words, dayjs-powered locale formatting, translatable labels, min and max limits, Today, Now and This month shortcuts, clear, keyboard navigation and a panel that flips to stay on screen.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "inputs",
        "date"
      ],
      "dependencies": [
        "lucide-react",
        "dayjs"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/date-range-picker.json"
      ],
      "cssVars": {
        "light": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/date-picker/date-picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/date-picker.tsx"
        },
        {
          "path": "registry/dashboard/components/date-picker/date-range-field.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/date-range-field.tsx"
        },
        {
          "path": "registry/dashboard/components/date-picker/date-time-picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/date-time-picker.tsx"
        },
        {
          "path": "registry/dashboard/components/date-picker/locale.ts",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/locale.ts"
        },
        {
          "path": "registry/dashboard/components/date-picker/month-picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/month-picker.tsx"
        },
        {
          "path": "registry/dashboard/components/date-picker/picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/picker.tsx"
        },
        {
          "path": "registry/dashboard/components/date-picker/time-picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-picker/time-picker.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "dialog",
      "type": "registry:component",
      "title": "Dialog",
      "description": "A modal dialog and a confirm dialog: focus moves in and back out, Tab stays inside, Escape and outside clicks close, background scroll locks, nested dialogs stack, and it slides up as a sheet on phones.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "overlays"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "cssVars": {
        "light": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/dialog/dialog.tsx",
          "type": "registry:component",
          "target": "components/dashboard/dialog/dialog.tsx"
        },
        {
          "path": "registry/dashboard/components/dialog/modal.ts",
          "type": "registry:component",
          "target": "components/dashboard/dialog/modal.ts"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "drawer",
      "type": "registry:component",
      "title": "Drawer",
      "description": "A side or bottom drawer for record details and quick edits: header with actions, scrolling body, sticky footer, focus trap, Escape and outside-click close, scroll lock and a bottom sheet on phones.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "overlays"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/dialog.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/components/drawer/drawer.tsx",
          "type": "registry:component",
          "target": "components/dashboard/drawer.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "order-edit",
      "type": "registry:block",
      "title": "Order Edit",
      "description": "A CRM record edit page: a clickable stage path, editable line items with a product picker, custom items, price and quantity edits and restore, live totals with balance due or refund, a schema-driven record form, a review of unsaved changes, undo/redo and a floating Cancel and Save toolbar. Pass your own sections, values, items and catalog to reuse it for deals, quotes or invoices.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "forms",
        "crm"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/sidebar.json",
        "https://tomei.zubeyr.dev/ui/r/button.json",
        "https://tomei.zubeyr.dev/ui/r/badge.json",
        "https://tomei.zubeyr.dev/ui/r/record-form.json",
        "https://tomei.zubeyr.dev/ui/r/use-history.json",
        "https://tomei.zubeyr.dev/ui/r/toast.json",
        "https://tomei.zubeyr.dev/ui/r/popover.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/pages/order-edit/order-edit.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/order-edit.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-edit/changes.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/changes.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-edit/data.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/data.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-edit/line-item-editor.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/line-item-editor.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-edit/stage-path.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/stage-path.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-edit/totals.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-edit/totals.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "pages"
      }
    },
    {
      "name": "popover",
      "type": "registry:component",
      "title": "Popover",
      "description": "A lightweight popover anchored to any trigger: opens beside or above it, stays on screen and escapes scrolling containers, closes on outside click or Escape, and hands a close() to its content.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "overlays"
      ],
      "cssVars": {
        "light": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/popover/popover.tsx",
          "type": "registry:component",
          "target": "components/dashboard/popover.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "toast",
      "type": "registry:component",
      "title": "Toast",
      "description": "Notifications you can raise from anywhere with toast(): success, error, warning, info and loading tones, a promise helper for saves, action buttons like Undo, pause on hover, stacking with “clear all”, and screen-reader announcements.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "docs": "Mount <Toaster /> once near the root of your app, then call toast(\"Saved\") from anywhere.",
      "categories": [
        "dashboard",
        "feedback",
        "overlays"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "cssVars": {
        "light": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/toast/toast.tsx",
          "type": "registry:component",
          "target": "components/dashboard/toast.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "image-edit",
      "type": "registry:block",
      "title": "Image Edit",
      "description": "A product image editor: light and colour adjustments, stackable filter presets, crop with aspect ratios, zoom, straighten, rotate, flip and drag to reposition, hold-to-compare, undo/redo and a floating Cancel and Save toolbar.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "media",
        "editor"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/sidebar.json",
        "https://tomei.zubeyr.dev/ui/r/button.json",
        "https://tomei.zubeyr.dev/ui/r/use-history.json",
        "https://tomei.zubeyr.dev/ui/r/toast.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/pages/image-edit/image-edit.tsx",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/image-edit.tsx"
        },
        {
          "path": "registry/dashboard/pages/image-edit/edits.ts",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/edits.ts"
        },
        {
          "path": "registry/dashboard/pages/image-edit/panel.tsx",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/panel.tsx"
        },
        {
          "path": "registry/dashboard/pages/image-edit/picture.tsx",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/picture.tsx"
        },
        {
          "path": "registry/dashboard/pages/image-edit/slider.tsx",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/slider.tsx"
        },
        {
          "path": "registry/dashboard/pages/image-edit/stage.tsx",
          "type": "registry:component",
          "target": "components/dashboard/image-edit/stage.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "pages"
      }
    },
    {
      "name": "order-detail",
      "type": "registry:block",
      "title": "Order Detail",
      "description": "A record detail page: header with status badges and navigation, a customer note, line items, a payment summary and a side panel with contact, address, conversion, tags and timeline.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "detail",
        "layout"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/sidebar.json",
        "https://tomei.zubeyr.dev/ui/r/button.json",
        "https://tomei.zubeyr.dev/ui/r/badge.json",
        "https://tomei.zubeyr.dev/ui/r/timeline.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/pages/order-detail/order-detail.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/order-detail.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/data.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/data.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/info-section.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/info-section.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/line-items.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/line-items.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/note.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/note.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/page-header.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/page-header.tsx"
        },
        {
          "path": "registry/dashboard/pages/order-detail/summary-list.tsx",
          "type": "registry:component",
          "target": "components/dashboard/order-detail/summary-list.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "pages"
      }
    },
    {
      "name": "record-form",
      "type": "registry:component",
      "title": "Record Form",
      "description": "A schema-driven CRM form built on react-hook-form: describe sections and fields as data and get accordion, tab, card or step-by-step layouts, an edit mode and a click-to-edit view mode, 17 field types including people pickers, files, time, month, lists and editable tables with totals, calculated fields, show/hide and required-when conditions, validation rules through one resolver that also takes Zod, Valibot or ArkType, uploads with progress and retry, role permissions, drafts, autosave, a leave warning, translations and dayjs-powered locale dates.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "docs": "const form = useForm<FormValues>({ defaultValues, resolver: recordFormResolver({ sections }) }) then <RecordForm form={form} sections={sections} />.\nZod, Valibot or ArkType: recordFormResolver({ sections, schema }). Validation timing is plain react-hook-form: useForm({ mode: \"onBlur\" }).\nSaving: <RecordForm onSubmit={save} /> for the steps layout, or form.handleSubmit(save) on your own button; call form.reset(values) after a save.\nChanges: const changes = useFormChanges(form, sections) then <ChangeList changes={changes} />.\nUploads: pass upload={xhrUploader({ url: \"/api/upload\" })} or your own (file, { onProgress, signal }) => Promise<{ url }>.\nRoles: permissions: { view, edit } on fields and sections, then roles={user.roles} on RecordForm and recordFormResolver.\nTranslations: messages={{ required: \"{label} est obligatoire\" }} or translate={(key, vars) => i18n.t(`form.${key}`, vars)}; import a dayjs locale and pass locale=\"fr\". Pass the same to recordFormResolver for error messages.\nDrafts and autosave: <RecordForm draftKey=\"order-1078\" autosave={{ save }} />.",
      "categories": [
        "dashboard",
        "forms",
        "crm"
      ],
      "dependencies": [
        "dayjs",
        "react-hook-form",
        "react-dropzone"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/input.json",
        "https://tomei.zubeyr.dev/ui/r/date-picker.json",
        "https://tomei.zubeyr.dev/ui/r/toast.json",
        "https://tomei.zubeyr.dev/ui/r/popover.json",
        "https://tomei.zubeyr.dev/ui/r/dialog.json"
      ],
      "cssVars": {
        "light": {
          "shadow-button": "0 1px 2px rgb(0 0 0 / 0.05), 0 0 0 1px rgb(0 0 0 / 0.1), inset 0 1px 0 rgb(255 255 255 / 0.8)",
          "shadow-card": "0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 1px rgb(0 0 0 / 0.07)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-button": "0 0 0 1px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(255 255 255 / 0.06)",
          "shadow-card": "0 4px 4px rgb(42 42 42 / 0.32), 0 0 0 1px #0e0e0e, inset 0 1px 0 rgb(255 255 255 / 0.08), inset 0 0 0 1px rgb(255 255 255 / 0.08)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/record-form/record-form.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/record-form.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/changes.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/changes.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/context.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/context.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/controls.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/controls.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/dates.ts",
          "type": "registry:component",
          "target": "components/dashboard/record-form/dates.ts"
        },
        {
          "path": "registry/dashboard/components/record-form/drafts.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/drafts.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/field-control.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/field-control.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/files.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/files.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/group.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/group.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/i18n.ts",
          "type": "registry:component",
          "target": "components/dashboard/record-form/i18n.ts"
        },
        {
          "path": "registry/dashboard/components/record-form/items.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/items.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/lookup.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/lookup.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/number-input.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/number-input.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/phone.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/phone.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/resolver.ts",
          "type": "registry:component",
          "target": "components/dashboard/record-form/resolver.ts"
        },
        {
          "path": "registry/dashboard/components/record-form/rich-text.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/rich-text.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/rows.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/rows.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/schema.ts",
          "type": "registry:component",
          "target": "components/dashboard/record-form/schema.ts"
        },
        {
          "path": "registry/dashboard/components/record-form/signature.tsx",
          "type": "registry:component",
          "target": "components/dashboard/record-form/signature.tsx"
        },
        {
          "path": "registry/dashboard/components/record-form/upload.ts",
          "type": "registry:component",
          "target": "components/dashboard/record-form/upload.ts"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "timeline",
      "type": "registry:block",
      "title": "Timeline",
      "description": "An activity timeline with a comment box on top and dated events below, newest first. Comments post instantly and call onComment.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "activity",
        "lists"
      ],
      "files": [
        {
          "path": "registry/dashboard/blocks/timeline/timeline.tsx",
          "type": "registry:component",
          "target": "components/dashboard/timeline.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "blocks"
      }
    },
    {
      "name": "use-history",
      "type": "registry:component",
      "title": "Use History",
      "description": "An undo/redo hook for any state. Consecutive edits to the same field merge into one step, and Ctrl+Z / Ctrl+Shift+Z hotkeys are opt-in so typing in inputs keeps its native undo.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "hooks",
        "state"
      ],
      "files": [
        {
          "path": "registry/dashboard/components/use-history/use-history.ts",
          "type": "registry:component",
          "target": "components/dashboard/use-history.ts"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "analytics-dashboard",
      "type": "registry:block",
      "title": "Analytics Dashboard",
      "description": "A complete analytics screen: sidebar, search header, date range picker and a grid of line, bar, donut and ranked cards.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "analytics",
        "layout"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/sidebar.json",
        "https://tomei.zubeyr.dev/ui/r/input.json",
        "https://tomei.zubeyr.dev/ui/r/button.json",
        "https://tomei.zubeyr.dev/ui/r/date-range-picker.json",
        "https://tomei.zubeyr.dev/ui/r/card.json",
        "https://tomei.zubeyr.dev/ui/r/line-chart-card.json",
        "https://tomei.zubeyr.dev/ui/r/bar-chart-card.json",
        "https://tomei.zubeyr.dev/ui/r/donut-chart-card.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/pages/analytics-dashboard/analytics-dashboard.tsx",
          "type": "registry:component",
          "target": "components/dashboard/analytics-dashboard/analytics-dashboard.tsx"
        },
        {
          "path": "registry/dashboard/pages/analytics-dashboard/data.ts",
          "type": "registry:component",
          "target": "components/dashboard/analytics-dashboard/data.ts"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "pages"
      }
    },
    {
      "name": "badge",
      "type": "registry:component",
      "title": "Badge",
      "description": "Status pills for tables and lists: neutral, success, warning, attention, critical and info, with a filled dot or hollow ring.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "status",
        "pills"
      ],
      "files": [
        {
          "path": "registry/dashboard/components/badge/badge.tsx",
          "type": "registry:component",
          "target": "components/dashboard/badge.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "bar-chart-card",
      "type": "registry:block",
      "title": "Bar Chart Card",
      "description": "Grouped bars comparing two periods side by side, with rounded caps and a legend.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "charts"
      ],
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/card.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/blocks/bar-chart-card/bar-chart-card.tsx",
          "type": "registry:component",
          "target": "components/dashboard/bar-chart-card.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "blocks"
      }
    },
    {
      "name": "button",
      "type": "registry:component",
      "title": "Button",
      "description": "A tactile dashboard button with layered inset shadows. Primary, secondary, ghost and danger variants, icon sizes and a loading state.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "buttons"
      ],
      "cssVars": {
        "light": {
          "shadow-button": "0 1px 2px rgb(0 0 0 / 0.05), 0 0 0 1px rgb(0 0 0 / 0.1), inset 0 1px 0 rgb(255 255 255 / 0.8)",
          "shadow-button-primary": "0 1px 2px rgb(0 0 0 / 0.2), 0 0 0 1px var(--primary), inset 0 1px 0 rgb(255 255 255 / 0.14)"
        },
        "dark": {
          "shadow-button": "0 0 0 1px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(255 255 255 / 0.06)",
          "shadow-button-primary": "0 1px 2px rgb(0 0 0 / 0.32), 0 0 0 1px rgb(255 255 255 / 0.9), inset 0 -2px 4px rgb(0 0 0 / 0.06)"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/button/button.tsx",
          "type": "registry:component",
          "target": "components/dashboard/button.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "card",
      "type": "registry:component",
      "title": "Card",
      "description": "A dashboard card with a dotted-underline title, headline value with trend, an action slot and a legend.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "charts",
        "cards"
      ],
      "cssVars": {
        "light": {
          "shadow-card": "0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 1px rgb(0 0 0 / 0.07)"
        },
        "dark": {
          "shadow-card": "0 4px 4px rgb(42 42 42 / 0.32), 0 0 0 1px #0e0e0e, inset 0 1px 0 rgb(255 255 255 / 0.08), inset 0 0 0 1px rgb(255 255 255 / 0.08)"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/card/card.tsx",
          "type": "registry:component",
          "target": "components/dashboard/card.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "data-table",
      "type": "registry:component",
      "title": "Data Table",
      "description": "An index table with view tabs, search, filter chips, a sort menu, sortable headers, row selection with bulk actions, loading rows and an empty state.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "tables",
        "filters"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/popover.json"
      ],
      "cssVars": {
        "light": {
          "shadow-button": "0 1px 2px rgb(0 0 0 / 0.05), 0 0 0 1px rgb(0 0 0 / 0.1), inset 0 1px 0 rgb(255 255 255 / 0.8)",
          "shadow-card": "0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 1px rgb(0 0 0 / 0.07)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-button": "0 0 0 1px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(255 255 255 / 0.06)",
          "shadow-card": "0 4px 4px rgb(42 42 42 / 0.32), 0 0 0 1px #0e0e0e, inset 0 1px 0 rgb(255 255 255 / 0.08), inset 0 0 0 1px rgb(255 255 255 / 0.08)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/data-table/data-table.tsx",
          "type": "registry:component",
          "target": "components/dashboard/data-table.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "date-range-picker",
      "type": "registry:component",
      "title": "Date Range Picker",
      "description": "An analytics-style range picker: presets, typed start and end dates, two months side by side, hover preview, keyboard navigation and Apply/Cancel.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "inputs",
        "date"
      ],
      "cssVars": {
        "light": {
          "shadow-button": "0 1px 2px rgb(0 0 0 / 0.05), 0 0 0 1px rgb(0 0 0 / 0.1), inset 0 1px 0 rgb(255 255 255 / 0.8)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.08)"
        },
        "dark": {
          "shadow-button": "0 0 0 1px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.1), inset 0 0 0 1px rgb(255 255 255 / 0.06)",
          "shadow-overlay": "0 16px 40px rgb(0 0 0 / 0.5), 0 0 0 1px #0e0e0e"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/date-range-picker/date-range-picker.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-range-picker/date-range-picker.tsx"
        },
        {
          "path": "registry/dashboard/components/date-range-picker/calendar-month.tsx",
          "type": "registry:component",
          "target": "components/dashboard/date-range-picker/calendar-month.tsx"
        },
        {
          "path": "registry/dashboard/components/date-range-picker/dates.ts",
          "type": "registry:component",
          "target": "components/dashboard/date-range-picker/dates.ts"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "donut-chart-card",
      "type": "registry:block",
      "title": "Donut Chart Card",
      "description": "A donut breakdown with the total and trend in the centre and a legend listing each slice with its change.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "charts"
      ],
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/card.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/blocks/donut-chart-card/donut-chart-card.tsx",
          "type": "registry:component",
          "target": "components/dashboard/donut-chart-card.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "blocks"
      }
    },
    {
      "name": "input",
      "type": "registry:component",
      "title": "Input",
      "description": "A quiet dashboard input with optional leading and trailing slots, plus a Field wrapper for label, hint and error.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "inputs",
        "forms"
      ],
      "files": [
        {
          "path": "registry/dashboard/components/input/input.tsx",
          "type": "registry:component",
          "target": "components/dashboard/input.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "line-chart-card",
      "type": "registry:block",
      "title": "Line Chart Card",
      "description": "Smooth area chart comparing this period against the last, with a dotted comparison line, trend and legend.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "charts"
      ],
      "dependencies": [
        "recharts"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/card.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/blocks/line-chart-card/line-chart-card.tsx",
          "type": "registry:component",
          "target": "components/dashboard/line-chart-card.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "blocks"
      }
    },
    {
      "name": "magnetic-button",
      "type": "registry:component",
      "title": "Magnetic Button",
      "description": "A rolling pill that leans toward the cursor. The label springs further than the pill, so it strains against the edge holding it.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "landing",
        "buttons"
      ],
      "dependencies": [
        "motion"
      ],
      "files": [
        {
          "path": "registry/landing/components/magnetic-button/magnetic-button.tsx",
          "type": "registry:component",
          "target": "components/landing/magnetic-button/magnetic-button.tsx"
        },
        {
          "path": "registry/landing/components/magnetic-button/magnetic.tsx",
          "type": "registry:component",
          "target": "components/landing/magnetic-button/magnetic.tsx"
        }
      ],
      "meta": {
        "scenario": "landing",
        "kind": "components"
      }
    },
    {
      "name": "orders-dashboard",
      "type": "registry:block",
      "title": "Orders Dashboard",
      "description": "An orders screen: sidebar with nested links, page actions, stat cards and an index table with views, search, filter chips, sorting and bulk selection.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "tables",
        "layout"
      ],
      "dependencies": [
        "lucide-react"
      ],
      "registryDependencies": [
        "https://tomei.zubeyr.dev/ui/r/sidebar.json",
        "https://tomei.zubeyr.dev/ui/r/button.json",
        "https://tomei.zubeyr.dev/ui/r/badge.json",
        "https://tomei.zubeyr.dev/ui/r/data-table.json",
        "https://tomei.zubeyr.dev/ui/r/stat-card.json",
        "https://tomei.zubeyr.dev/ui/r/date-range-picker.json"
      ],
      "files": [
        {
          "path": "registry/dashboard/pages/orders-dashboard/orders-dashboard.tsx",
          "type": "registry:component",
          "target": "components/dashboard/orders-dashboard/orders-dashboard.tsx"
        },
        {
          "path": "registry/dashboard/pages/orders-dashboard/orders.tsx",
          "type": "registry:component",
          "target": "components/dashboard/orders-dashboard/orders.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "pages"
      }
    },
    {
      "name": "sidebar",
      "type": "registry:component",
      "title": "Sidebar",
      "description": "A dashboard sidebar for light and dark mode: brand header, titled groups, counts and external links.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "navigation",
        "layout"
      ],
      "files": [
        {
          "path": "registry/dashboard/components/sidebar/sidebar.tsx",
          "type": "registry:component",
          "target": "components/dashboard/sidebar.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    },
    {
      "name": "stacked-cards",
      "type": "registry:block",
      "title": "Stacked Cards",
      "description": "Cards that pin under each other as you scroll, leaving a pile of numbered headers. Pure CSS sticky, no JavaScript.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "landing",
        "scroll",
        "cards"
      ],
      "files": [
        {
          "path": "registry/landing/sections/stacked-cards/stacked-cards.tsx",
          "type": "registry:component",
          "target": "components/landing/stacked-cards.tsx"
        }
      ],
      "meta": {
        "scenario": "landing",
        "kind": "sections"
      }
    },
    {
      "name": "stat-card",
      "type": "registry:component",
      "title": "Stat Card",
      "description": "A compact metric card: uppercase label with an optional info hint, the value, a supporting line, an optional change and an optional bar sparkline.",
      "author": "Zubeyr <https://zubeyr.dev>",
      "categories": [
        "dashboard",
        "metrics",
        "cards"
      ],
      "cssVars": {
        "light": {
          "shadow-card": "0 1px 2px rgb(0 0 0 / 0.04), 0 0 0 1px rgb(0 0 0 / 0.07)"
        },
        "dark": {
          "shadow-card": "0 4px 4px rgb(42 42 42 / 0.32), 0 0 0 1px #0e0e0e, inset 0 1px 0 rgb(255 255 255 / 0.08), inset 0 0 0 1px rgb(255 255 255 / 0.08)"
        }
      },
      "files": [
        {
          "path": "registry/dashboard/components/stat-card/stat-card.tsx",
          "type": "registry:component",
          "target": "components/dashboard/stat-card.tsx"
        }
      ],
      "meta": {
        "scenario": "dashboard",
        "kind": "components"
      }
    }
  ]
}
