{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "popover",
  "title": "Popover",
  "description": "Interactive content anchored to a trigger, such as a small form.",
  "dependencies": [
    "@base-ui/react@^1.9.0"
  ],
  "registryDependencies": [
    "https://sproutboat.com/ikada/r/theme.json",
    "https://sproutboat.com/ikada/r/cn.json",
    "https://sproutboat.com/ikada/r/instant.json",
    "https://sproutboat.com/ikada/r/portal.json"
  ],
  "files": [
    {
      "path": "registry/ikada/ui/popover.tsx",
      "content": "\"use client\";\n\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport type { ComponentProps } from \"react\";\nimport { usePortalContainer } from \"@/components/ikada/lib/portal\";\nimport { cn, floatingSurface, popupMotion, type WithClass } from \"@/components/ikada/lib/cn\";\nimport { InstantProvider, instantAttr, useInstant, useInstantOpen } from \"@/components/ikada/lib/instant\";\n\n/**\n * Interactive content anchored to a trigger, such as a small form. Arrives on the snappy spring;\n * compose with PopoverTrigger and PopoverContent. Plain text belongs in a Tooltip.\n */\nexport function Popover({ onOpenChange, ...props }: ComponentProps<typeof BasePopover.Root>) {\n  const [instant, handle] = useInstantOpen(onOpenChange);\n  return (\n    <InstantProvider value={instant}>\n      <BasePopover.Root onOpenChange={handle} {...props} />\n    </InstantProvider>\n  );\n}\nexport const PopoverTrigger = BasePopover.Trigger;\nexport const PopoverClose = BasePopover.Close;\n\nexport interface PopoverContentProps extends Omit<ComponentProps<typeof BasePopover.Popup>, \"className\"> {\n  className?: string;\n  side?: ComponentProps<typeof BasePopover.Positioner>[\"side\"];\n  align?: ComponentProps<typeof BasePopover.Positioner>[\"align\"];\n}\n\nexport function PopoverContent({\n  className,\n  side = \"bottom\",\n  align = \"start\",\n  children,\n  ref,\n  ...props\n}: PopoverContentProps) {\n  const instant = useInstant();\n  const container = usePortalContainer();\n  return (\n    <BasePopover.Portal container={container}>\n      <BasePopover.Positioner\n        side={side}\n        align={align}\n        sideOffset={6}\n        collisionPadding={8}\n        className=\"z-(--sb-z-popover)\"\n      >\n        <BasePopover.Popup\n          data-slot=\"popover-content\"\n          ref={ref}\n          className={cn(floatingSurface, popupMotion, \"w-72 max-w-(--available-width) p-4 text-sb-base\", className)}\n          {...instantAttr(instant)}\n          {...props}\n        >\n          {children}\n        </BasePopover.Popup>\n      </BasePopover.Positioner>\n    </BasePopover.Portal>\n  );\n}\n\nexport function PopoverTitle({ className, ...props }: WithClass<ComponentProps<typeof BasePopover.Title>>) {\n  return (\n    <BasePopover.Title data-slot=\"popover-title\" className={cn(\"text-sb-md font-semibold\", className)} {...props} />\n  );\n}\n\nexport function PopoverDescription({ className, ...props }: WithClass<ComponentProps<typeof BasePopover.Description>>) {\n  return (\n    <BasePopover.Description\n      data-slot=\"popover-description\"\n      className={cn(\"mt-1 text-sb-sm text-fg-muted\", className)}\n      {...props}\n    />\n  );\n}\n",
      "type": "registry:ui",
      "target": "@components/ikada/popover.tsx"
    }
  ],
  "categories": [
    "overlays"
  ],
  "type": "registry:ui"
}