{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"components-alerts-pulse-border-alerts","type":"registry:block","title":"Pulse Border Alerts","files":[{"path":"components/blocks/components/alerts/pulse-border-alerts.tsx","content":"import { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\";\nimport { AlertCircle, AlertTriangle, CheckCircle, XCircle } from \"lucide-react\";\n\nexport default function PulseBorderAlerts() {\n  return (\n    <div className=\"flex flex-col gap-4 p-6\">\n      <Alert className=\"relative shadow-md after:absolute after:inset-0 after:border-2 after:border-current after:animate-pulse\">\n        <AlertTitle>Default Alert</AlertTitle>\n        <AlertDescription>\n          This alert has a pulsing border animation.\n        </AlertDescription>\n      </Alert>\n\n      <Alert\n        variant=\"destructive\"\n        className=\"relative shadow-md after:absolute after:inset-0 after:border-2 after:border-current after:animate-pulse\"\n      >\n        <XCircle className=\"h-4 w-4\" />\n        <AlertTitle>Destructive Alert</AlertTitle>\n        <AlertDescription>\n          This alert has a pulsing border animation.\n        </AlertDescription>\n      </Alert>\n\n      <Alert className=\"border-green-500/50 text-green-700 dark:border-green-500 dark:text-green-400 [&>svg]:text-green-500 relative shadow-md after:absolute after:inset-0 after:border-2 after:border-current after:animate-pulse\">\n        <CheckCircle className=\"h-4 w-4\" />\n        <AlertTitle>Success Alert</AlertTitle>\n        <AlertDescription>\n          This alert has a pulsing border animation.\n        </AlertDescription>\n      </Alert>\n\n      <Alert className=\"border-yellow-500/50 text-yellow-700 dark:border-yellow-500 dark:text-yellow-400 [&>svg]:text-yellow-500 relative shadow-md after:absolute after:inset-0 after:border-2 after:border-current after:animate-pulse\">\n        <AlertTriangle className=\"h-4 w-4\" />\n        <AlertTitle>Warning Alert</AlertTitle>\n        <AlertDescription>\n          This alert has a pulsing border animation.\n        </AlertDescription>\n      </Alert>\n\n      <Alert className=\"border-blue-500/50 text-blue-700 dark:border-blue-500 dark:text-blue-400 [&>svg]:text-blue-500 relative shadow-md after:absolute after:inset-0 after:border-2 after:border-current after:animate-pulse\">\n        <AlertCircle className=\"h-4 w-4\" />\n        <AlertTitle>Info Alert</AlertTitle>\n        <AlertDescription>\n          This alert has a pulsing border animation.\n        </AlertDescription>\n      </Alert>\n    </div>\n  );\n}\n","type":"registry:component","target":"components/blocks/components/alerts/pulse-border-alerts.tsx"},{"path":"components/ui/alert.tsx","content":"import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst alertVariants = cva(\n  \"group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-card text-card-foreground\",\n        destructive:\n          \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nfunction Alert({\n  className,\n  variant,\n  ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>) {\n  return (\n    <div\n      data-slot=\"alert\"\n      role=\"alert\"\n      className={cn(alertVariants({ variant }), className)}\n      {...props}\n    />\n  )\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-title\"\n      className={cn(\n        \"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction AlertDescription({\n  className,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-description\"\n      className={cn(\n        \"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction AlertAction({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"alert-action\"\n      className={cn(\"absolute top-2.5 right-3\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction }\n","type":"registry:ui","target":"components/ui/alert.tsx"}],"description":"Alerts with a border that gently pulses to catch attention over time. Use for live updates, countdowns, or urgent notices that should not be missed.","dependencies":["class-variance-authority","lucide-react"]}