{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "announcement-banner", "title": "Announcement Banner", "description": "Dismissable top-of-page animated banner with multiple color variants", "dependencies": [ "motion" ], "files": [ { "path": "registry/pioneerui/announcement-banner.tsx", "content": "\"use client\"\n\nimport React, { useState } from \"react\"\nimport { motion, AnimatePresence } from \"motion/react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface AnnouncementBannerProps extends React.HTMLAttributes {\n message: string\n href?: string\n cta?: string\n variant?: \"default\" | \"primary\" | \"warning\" | \"success\"\n dismissible?: boolean\n icon?: React.ReactNode\n onDismiss?: () => void\n}\n\nconst XIcon = () => (\n \n \n \n \n)\n\nconst ArrowRight = () => (\n \n \n \n \n)\n\nexport function AnnouncementBanner({\n message,\n href,\n cta,\n variant = \"default\",\n dismissible = true,\n icon,\n onDismiss,\n className,\n ...props\n}: AnnouncementBannerProps) {\n const [visible, setVisible] = useState(true)\n\n const variantClass = {\n default: \"bg-muted border-b text-foreground\",\n primary: \"bg-primary text-primary-foreground\",\n warning: \"bg-amber-500 text-white\",\n success: \"bg-emerald-500 text-white\",\n }[variant]\n\n const handleDismiss = () => {\n setVisible(false)\n onDismiss?.()\n }\n\n return (\n \n {visible && (\n \n
\n {icon && {icon}}\n\n
\n {message}\n {href && cta && (\n \n {cta}\n \n \n )}\n
\n\n {dismissible && (\n \n \n \n )}\n
\n \n )}\n
\n )\n}\n", "type": "registry:ui", "target": "components/pioneerui/announcement-banner.tsx" } ], "type": "registry:ui" }