{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "popover",
  "title": "Popover",
  "description": "A floating popover built on Base UI.",
  "dependencies": [
    "@base-ui/react@^1.4.1"
  ],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/new-york-v4/ui/popover.tsx",
      "content": "\"use client\"\n\nimport type React from \"react\"\nimport { isValidElement } from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport const PopoverCreateHandle: typeof PopoverPrimitive.createHandle =\n  PopoverPrimitive.createHandle\n\nexport const Popover: typeof PopoverPrimitive.Root = PopoverPrimitive.Root\n\nexport function PopoverAnchor(\n  props: React.ComponentProps<\"span\">\n): React.ReactElement {\n  return <span data-slot=\"popover-anchor\" {...props} />\n}\n\nexport function PopoverTrigger({\n  className,\n  children,\n  asChild,\n  render,\n  ...props\n}: PopoverPrimitive.Trigger.Props & {\n  asChild?: boolean\n}): React.ReactElement {\n  return (\n    <PopoverPrimitive.Trigger\n      className={className}\n      data-slot=\"popover-trigger\"\n      render={\n        render ??\n        (asChild && isValidElement(children)\n          ? (children as React.ReactElement<Record<string, unknown>>)\n          : undefined)\n      }\n      {...props}\n    >\n      {asChild && isValidElement(children) ? undefined : children}\n    </PopoverPrimitive.Trigger>\n  )\n}\n\nexport function PopoverPopup({\n  children,\n  className,\n  side = \"bottom\",\n  align = \"center\",\n  sideOffset = 4,\n  alignOffset = 0,\n  tooltipStyle = false,\n  anchor,\n  portalProps,\n  ...props\n}: PopoverPrimitive.Popup.Props & {\n  portalProps?: PopoverPrimitive.Portal.Props\n  side?: PopoverPrimitive.Positioner.Props[\"side\"]\n  align?: PopoverPrimitive.Positioner.Props[\"align\"]\n  sideOffset?: PopoverPrimitive.Positioner.Props[\"sideOffset\"]\n  alignOffset?: PopoverPrimitive.Positioner.Props[\"alignOffset\"]\n  tooltipStyle?: boolean\n  anchor?: PopoverPrimitive.Positioner.Props[\"anchor\"]\n}): React.ReactElement {\n  return (\n    <PopoverPrimitive.Portal {...portalProps}>\n      <PopoverPrimitive.Positioner\n        align={align}\n        alignOffset={alignOffset}\n        anchor={anchor}\n        className=\"z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom,transform] data-instant:transition-none\"\n        data-slot=\"popover-positioner\"\n        side={side}\n        sideOffset={sideOffset}\n      >\n        <PopoverPrimitive.Popup\n          className={cn(\n            \"relative flex h-(--popup-height,auto) w-(--popup-width,auto) origin-(--transform-origin) rounded-lg border bg-popover text-popover-foreground shadow-lg/5 transition-[width,height,scale,opacity] outline-none not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] has-data-[slot=calendar]:rounded-xl has-data-[slot=calendar]:before:rounded-[calc(var(--radius-xl)-1px)] data-starting-style:scale-98 data-starting-style:opacity-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n            tooltipStyle &&\n              \"w-fit rounded-md text-xs text-balance shadow-md/5 before:rounded-[calc(var(--radius-md)-1px)]\",\n            className\n          )}\n          data-slot=\"popover-popup\"\n          {...props}\n        >\n          <PopoverPrimitive.Viewport\n            className={cn(\n              \"relative size-full max-h-(--available-height) overflow-clip px-(--viewport-inline-padding) py-4 [--viewport-inline-padding:--spacing(4)] has-data-[slot=calendar]:p-2 **:data-current:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-current:opacity-100 **:data-current:transition-opacity **:data-current:data-ending-style:opacity-0 data-instant:transition-none **:data-previous:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:opacity-100 **:data-previous:transition-opacity **:data-previous:data-ending-style:opacity-0 **:data-current:data-starting-style:opacity-0 **:data-previous:data-starting-style:opacity-0\",\n              tooltipStyle\n                ? \"py-1 [--viewport-inline-padding:--spacing(2)]\"\n                : \"not-data-transitioning:overflow-y-auto\"\n            )}\n            data-slot=\"popover-viewport\"\n          >\n            {children}\n          </PopoverPrimitive.Viewport>\n        </PopoverPrimitive.Popup>\n      </PopoverPrimitive.Positioner>\n    </PopoverPrimitive.Portal>\n  )\n}\n\nexport function PopoverClose({\n  ...props\n}: PopoverPrimitive.Close.Props): React.ReactElement {\n  return <PopoverPrimitive.Close data-slot=\"popover-close\" {...props} />\n}\n\nexport function PopoverTitle({\n  className,\n  ...props\n}: PopoverPrimitive.Title.Props): React.ReactElement {\n  return (\n    <PopoverPrimitive.Title\n      className={cn(\"text-lg leading-none font-semibold\", className)}\n      data-slot=\"popover-title\"\n      {...props}\n    />\n  )\n}\n\nexport function PopoverDescription({\n  className,\n  ...props\n}: PopoverPrimitive.Description.Props): React.ReactElement {\n  return (\n    <PopoverPrimitive.Description\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      data-slot=\"popover-description\"\n      {...props}\n    />\n  )\n}\n\nexport { PopoverPrimitive, PopoverPopup as PopoverContent }\n",
      "type": "registry:ui",
      "target": "@ui/popover.tsx"
    }
  ],
  "type": "registry:ui"
}