{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ds-announcement-badge",
  "title": "AnnouncementBadge",
  "description": "Badge ou pill de anúncio para o topo de seções hero com micro-animação e suporte a ping.",
  "dependencies": [
    "class-variance-authority",
    "lucide-react"
  ],
  "registryDependencies": [],
  "files": [
    {
      "path": "components/ds/ds-announcement-badge.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ArrowRightIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\n// ── Types ──\n\nexport interface AnnouncementBadgeProps\n  extends\n    Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"ping\">,\n    VariantProps<typeof announcementBadgeVariants> {\n  ping?: boolean\n  showArrow?: boolean\n  icon?: React.ReactNode\n  tag?: string\n}\n\n// ── Variants ──\n\nexport const announcementBadgeVariants = cva(\n  \"group inline-flex items-center gap-2 rounded-full border text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none\",\n  {\n    variants: {\n      variant: {\n        default:\n          \"border-border/60 bg-muted/60 text-muted-foreground backdrop-blur-sm hover:bg-muted hover:text-foreground\",\n        outline:\n          \"border-border bg-background text-foreground hover:bg-muted/50\",\n        glow: \"border-primary/30 bg-primary/10 text-primary shadow-[0_0_12px_oklch(var(--primary)/0.15)] hover:bg-primary/20\",\n        gradient:\n          \"border-border/40 bg-gradient-to-r from-primary/10 via-muted/40 to-primary/10 text-foreground hover:border-border\",\n      },\n      size: {\n        sm: \"h-7 px-2.5 py-0.5 text-xs [&>svg]:size-3\",\n        md: \"h-8 px-3 py-1 text-xs [&>svg]:size-3.5\",\n        lg: \"h-9 px-3.5 py-1.5 text-sm [&>svg]:size-4\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\n// ── Component ──\n\nexport const AnnouncementBadge = React.forwardRef<\n  HTMLAnchorElement,\n  AnnouncementBadgeProps\n>(\n  (\n    {\n      className,\n      variant,\n      size,\n      ping = false,\n      showArrow = true,\n      icon,\n      tag,\n      children,\n      href,\n      ...props\n    },\n    ref\n  ) => {\n    const content = (\n      <>\n        {ping && (\n          <span\n            className=\"relative flex size-2 items-center justify-center\"\n            aria-hidden=\"true\"\n          >\n            <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-primary opacity-75\" />\n            <span className=\"relative inline-flex size-1.5 rounded-full bg-primary\" />\n          </span>\n        )}\n\n        {icon && <span className=\"shrink-0\">{icon}</span>}\n\n        {tag && (\n          <span className=\"rounded-full bg-primary/15 px-1.5 py-0.5 text-xs font-semibold text-primary\">\n            {tag}\n          </span>\n        )}\n\n        <span className=\"truncate\">{children}</span>\n\n        {showArrow && (\n          <ArrowRightIcon\n            aria-hidden=\"true\"\n            className=\"shrink-0 transition-transform duration-200 group-hover:translate-x-0.5\"\n          />\n        )}\n      </>\n    )\n\n    if (href) {\n      return (\n        <a\n          ref={ref}\n          href={href}\n          className={cn(\n            announcementBadgeVariants({ variant, size }),\n            className\n          )}\n          {...props}\n        >\n          {content}\n        </a>\n      )\n    }\n\n    const divProps = { ...props } as Record<string, unknown>\n    delete divProps.target\n    delete divProps.rel\n    delete divProps.download\n    delete divProps.hrefLang\n    delete divProps.media\n    delete divProps.referrerPolicy\n    delete divProps.type\n\n    return (\n      <div\n        ref={ref as unknown as React.Ref<HTMLDivElement>}\n        className={cn(announcementBadgeVariants({ variant, size }), className)}\n        {...(divProps as React.HTMLAttributes<HTMLDivElement>)}\n      >\n        {content}\n      </div>\n    )\n  }\n)\nAnnouncementBadge.displayName = \"AnnouncementBadge\"\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}
