{
  "$schema": "https://blode.co/ui/schema/registry-item.json",
  "name": "hover-card",
  "title": "Hover Card",
  "author": "Matthew Blode",
  "description": "A popup card that appears when hovering over a trigger element.",
  "dependencies": ["@base-ui/react"],
  "files": [
    {
      "path": "ui/hover-card.tsx",
      "content": "\"use client\";\n\nimport { PreviewCard as HoverCardPrimitive } from \"@base-ui/react/preview-card\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst HoverCard = ({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>) => (\n  <HoverCardPrimitive.Root data-slot=\"hover-card\" {...props} />\n);\n\nconst HoverCardTrigger = ({\n  asChild = false,\n  children,\n  ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Trigger> & {\n  asChild?: boolean;\n}) => {\n  const render =\n    asChild && React.isValidElement(children) ? (children as React.ReactElement) : undefined;\n\n  return (\n    <HoverCardPrimitive.Trigger data-slot=\"hover-card-trigger\" render={render} {...props}>\n      {asChild ? null : children}\n    </HoverCardPrimitive.Trigger>\n  );\n};\n\nconst HoverCardContent = ({\n  asChild = false,\n  children,\n  className,\n  align = \"center\",\n  alignOffset = 0,\n  side = \"bottom\",\n  sideOffset = 4,\n  ...props\n}: React.ComponentProps<typeof HoverCardPrimitive.Popup> &\n  Pick<\n    React.ComponentProps<typeof HoverCardPrimitive.Positioner>,\n    \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n  > & {\n    asChild?: boolean;\n  }) => {\n  const render =\n    asChild && React.isValidElement(children) ? (children as React.ReactElement) : undefined;\n\n  return (\n    <HoverCardPrimitive.Portal data-slot=\"hover-card-portal\">\n      <HoverCardPrimitive.Positioner\n        align={align}\n        alignOffset={alignOffset}\n        className=\"isolate z-50\"\n        side={side}\n        sideOffset={sideOffset}\n      >\n        <HoverCardPrimitive.Popup\n          className={cn(\n            \"data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-soft outline-hidden data-closed:animate-out data-open:animate-in\",\n            className,\n          )}\n          data-slot=\"hover-card-content\"\n          render={render}\n          {...props}\n        >\n          {asChild ? null : children}\n        </HoverCardPrimitive.Popup>\n      </HoverCardPrimitive.Positioner>\n    </HoverCardPrimitive.Portal>\n  );\n};\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n",
      "type": "registry:ui",
      "target": ""
    }
  ],
  "type": "registry:ui"
}
