{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "popover",
  "title": "Popover",
  "description": "Anchored popover surface for progressive disclosure.",
  "dependencies": [
    "@base-ui/react",
    "motion"
  ],
  "registryDependencies": [
    "@atroui/utils",
    "@atroui/motion"
  ],
  "files": [
    {
      "path": "registry/default/ui/popover.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\"\n\nimport { popupMotion } from \"@/lib/motion\"\nimport { cn } from \"@/lib/utils\"\n\n/** Layered pop elevation — ring-as-border + cast stack + top light. */\nconst overlayElevation = \"ds-elev-pop\"\n\ntype PopoverOpenContextValue = {\n  open: boolean\n}\n\nconst PopoverOpenContext = React.createContext<PopoverOpenContextValue | null>(\n  null\n)\n\nfunction usePopoverOpen() {\n  const ctx = React.useContext(PopoverOpenContext)\n  if (!ctx) {\n    throw new Error(\"Popover parts must be used within <Popover>\")\n  }\n  return ctx.open\n}\n\nfunction Popover({\n  open: openProp,\n  defaultOpen = false,\n  onOpenChange,\n  ...props\n}: PopoverPrimitive.Root.Props) {\n  const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n  const isControlled = openProp !== undefined\n  const open = isControlled ? openProp : uncontrolledOpen\n\n  const handleOpenChange = React.useCallback<\n    NonNullable<PopoverPrimitive.Root.Props[\"onOpenChange\"]>\n  >(\n    (next, eventDetails) => {\n      if (!isControlled) setUncontrolledOpen(next)\n      onOpenChange?.(next, eventDetails)\n    },\n    [isControlled, onOpenChange]\n  )\n\n  return (\n    <PopoverOpenContext.Provider value={{ open }}>\n      <PopoverPrimitive.Root\n        data-slot=\"popover\"\n        open={open}\n        onOpenChange={handleOpenChange}\n        {...props}\n      />\n    </PopoverOpenContext.Provider>\n  )\n}\n\nfunction PopoverTrigger({ ...props }: PopoverPrimitive.Trigger.Props) {\n  return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n  className,\n  align = \"center\",\n  alignOffset = 0,\n  side = \"bottom\",\n  sideOffset = 6,\n  render,\n  ...props\n}: PopoverPrimitive.Popup.Props &\n  Pick<\n    PopoverPrimitive.Positioner.Props,\n    \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n  >) {\n  const open = usePopoverOpen()\n  const reduce = useReducedMotion()\n\n  return (\n    <AnimatePresence>\n      {open ? (\n        <PopoverPrimitive.Portal keepMounted key=\"popover-portal\">\n          <PopoverPrimitive.Positioner\n            align={align}\n            alignOffset={alignOffset}\n            side={side}\n            sideOffset={sideOffset}\n            className=\"isolate z-50\"\n          >\n            <PopoverPrimitive.Popup\n              data-slot=\"popover-content\"\n              className={cn(\n                \"z-50 w-72 origin-(--transform-origin) rounded-[var(--radius)] bg-popover p-3.5 text-sm text-popover-foreground outline-none\",\n                overlayElevation,\n                className\n              )}\n              render={render ?? <motion.div {...popupMotion(reduce)} />}\n              {...props}\n            />\n          </PopoverPrimitive.Positioner>\n        </PopoverPrimitive.Portal>\n      ) : null}\n    </AnimatePresence>\n  )\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"popover-header\"\n      className={cn(\"flex flex-col gap-1.5\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n  return (\n    <PopoverPrimitive.Title\n      data-slot=\"popover-title\"\n      className={cn(\n        \"text-[0.8125rem] font-medium leading-snug tracking-tight\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nfunction PopoverDescription({\n  className,\n  ...props\n}: PopoverPrimitive.Description.Props) {\n  return (\n    <PopoverPrimitive.Description\n      data-slot=\"popover-description\"\n      className={cn(\"text-sm leading-relaxed text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction PopoverClose({ ...props }: PopoverPrimitive.Close.Props) {\n  return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />\n}\n\nexport {\n  Popover,\n  PopoverClose,\n  PopoverContent,\n  PopoverDescription,\n  PopoverHeader,\n  PopoverTitle,\n  PopoverTrigger,\n}\n",
      "type": "registry:ui",
      "target": "components/ui/popover.tsx"
    }
  ],
  "type": "registry:ui"
}