{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "author": "Lopifi (https://lopifi.com)",
  "categories": [
    "system-states",
    "finance",
    "accounting"
  ],
  "dependencies": [
    "sonner"
  ],
  "description": "Sonner, configured to our tokens.",
  "files": [
    {
      "content": "\"use client\";\n\nimport type * as React from \"react\";\nimport { Toaster as SonnerToaster, toast as sonnerToast } from \"sonner\";\n\n/**\n * Configured to our tokens: 400ms ease in, 200ms out, transitions not\n * keyframes, stack offsets −0.05 scale / −16px / −0.2 opacity, swipe-dismiss\n * at 45px. Auto-dismiss pauses on tab hide.\n *\n * Never the only channel for a critical error — toasts are timed and\n * dismissible; a failed payment persists inline.\n */\nexport function Toaster() {\n  return (\n    <SonnerToaster\n      gap={8}\n      offset={24}\n      position=\"bottom-right\"\n      style={\n        {\n          \"--toast-transition-duration\": \"400ms\",\n          \"--width\": \"360px\",\n        } as React.CSSProperties\n      }\n      toastOptions={{\n        classNames: {\n          actionButton: \"ml-auto rounded-sm bg-accent px-3 py-1.5 text-label font-medium text-accent-fg\",\n          cancelButton: \"text-label text-text-secondary\",\n          description: \"text-caption text-text-secondary\",\n          title: \"text-body font-medium text-text-primary\",\n          toast:\n            \"flex w-full items-start gap-3 rounded-md border border-border bg-surface-raised p-4 shadow-elevation-2\",\n        },\n        unstyled: true,\n      }}\n      visibleToasts={3}\n    />\n  );\n}\n\nexport const toast = sonnerToast;\n",
      "path": "components/ledger/toast.tsx",
      "target": "components/ledger/toast.tsx",
      "type": "registry:component"
    }
  ],
  "name": "toast",
  "registryDependencies": [
    "@lopifi/theme"
  ],
  "title": "Toast",
  "type": "registry:component"
}
