{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "popover",
  "title": "TIS Popover",
  "author": "TIS Experience Engineering",
  "description": "Popover React com composição shadcn e comportamento Base UI, preservando a anatomia e os tokens públicos do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "lucide-react@1.28.0",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/popover.tsx",
      "content": "import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"@base-ui/react/popover\"\nimport { XIcon } from \"lucide-react\"\n\nimport { cn } from \"./tis-utils\"\n\nfunction Popover(props: PopoverPrimitive.Root.Props) {\n  return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger(props: PopoverPrimitive.Trigger.Props) {\n  return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverPortal(props: PopoverPrimitive.Portal.Props) {\n  return <PopoverPrimitive.Portal data-slot=\"popover-portal\" {...props} />\n}\n\nfunction PopoverContent({\n  align = \"center\",\n  alignOffset = 0,\n  children,\n  className,\n  showArrow = true,\n  side = \"bottom\",\n  sideOffset = 8,\n  ...props\n}: PopoverPrimitive.Popup.Props &\n  Pick<PopoverPrimitive.Positioner.Props, \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"> & {\n    showArrow?: boolean\n  }) {\n  return (\n    <PopoverPortal>\n      <PopoverPrimitive.Positioner\n        align={align}\n        alignOffset={alignOffset}\n        className=\"ds-tis-popover__positioner\"\n        data-slot=\"popover-positioner\"\n        side={side}\n        sideOffset={sideOffset}\n      >\n        <PopoverPrimitive.Popup\n          className={cn(\"ds-popover__panel ds-tis-popover__popup\", className)}\n          data-slot=\"popover-content\"\n          {...props}\n        >\n          {showArrow ? (\n            <PopoverPrimitive.Arrow\n              className=\"ds-tis-popover__arrow\"\n              data-slot=\"popover-arrow\"\n            />\n          ) : null}\n          {children}\n        </PopoverPrimitive.Popup>\n      </PopoverPrimitive.Positioner>\n    </PopoverPortal>\n  )\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n  return (\n    <header\n      className={cn(\"ds-popover__header\", className)}\n      data-slot=\"popover-header\"\n      {...props}\n    />\n  )\n}\n\nfunction PopoverTitle({ className, ...props }: PopoverPrimitive.Title.Props) {\n  return (\n    <PopoverPrimitive.Title\n      className={cn(\"ds-popover__title\", className)}\n      data-slot=\"popover-title\"\n      {...props}\n    />\n  )\n}\n\nfunction PopoverDescription({ className, ...props }: PopoverPrimitive.Description.Props) {\n  return (\n    <PopoverPrimitive.Description\n      className={cn(\"ds-popover__body\", className)}\n      data-slot=\"popover-description\"\n      {...props}\n    />\n  )\n}\n\nfunction PopoverBody({ className, ...props }: React.ComponentProps<\"div\">) {\n  return <div className={cn(\"ds-popover__body\", className)} data-slot=\"popover-body\" {...props} />\n}\n\nfunction PopoverActions({ className, ...props }: React.ComponentProps<\"footer\">) {\n  return <footer className={cn(\"ds-popover__actions\", className)} data-slot=\"popover-actions\" {...props} />\n}\n\nfunction PopoverClose({\n  children,\n  className,\n  label,\n  ...props\n}: PopoverPrimitive.Close.Props & { label?: string }) {\n  const iconOnly = children == null\n  const accessibleLabel = label ?? (iconOnly ? \"Fechar popover\" : undefined)\n\n  return (\n    <PopoverPrimitive.Close\n      aria-label={accessibleLabel}\n      className={cn(iconOnly && \"ds-popover__close\", className)}\n      data-slot=\"popover-close\"\n      {...props}\n    >\n      {children ?? <XIcon aria-hidden=\"true\" className=\"ds-icon\" />}\n    </PopoverPrimitive.Close>\n  )\n}\n\nexport {\n  Popover,\n  PopoverActions,\n  PopoverBody,\n  PopoverClose,\n  PopoverContent,\n  PopoverDescription,\n  PopoverHeader,\n  PopoverPortal,\n  PopoverTitle,\n  PopoverTrigger,\n}\n",
      "type": "registry:ui",
      "target": "@ui/popover.tsx"
    },
    {
      "path": "registry/tis/tis-utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n",
      "type": "registry:lib",
      "target": "@ui/tis-utils.ts"
    }
  ],
  "css": {
    "@import \"ds-tis/css\"": {},
    ".ds-tis-popover__positioner": {
      "z-index": "var(--ds-z-tooltip)",
      "max-inline-size": "var(--available-width)"
    },
    ".ds-popover__panel.ds-tis-popover__popup": {
      "position": "relative"
    },
    ".ds-tis-popover__arrow": {
      "inline-size": "var(--ds-space-none)",
      "block-size": "var(--ds-space-none)",
      "visibility": "hidden"
    },
    ".ds-tis-popover__positioner::before, .ds-tis-popover__positioner::after": {
      "position": "absolute",
      "box-sizing": "border-box",
      "z-index": "calc(var(--ds-z-tooltip) + 1)",
      "content": "none",
      "pointer-events": "none"
    },
    ".ds-tis-popover__positioner:has(> .ds-tis-popover__popup > .ds-tis-popover__arrow)::before, .ds-tis-popover__positioner:has(> .ds-tis-popover__popup > .ds-tis-popover__arrow)::after": {
      "content": "\"\""
    },
    ".ds-tis-popover__positioner::before": {
      "background": "var(--ds-popover-panel-border-color-default)",
      "background-color": "color-mix(in srgb, var(--ds-popover-panel-border-color-default), var(--ds-popover-body-color-default) 25%)"
    },
    ".ds-tis-popover__positioner::after": {
      "background": "var(--ds-popover-arrow-fill-default)"
    },
    ".ds-tis-popover__positioner[data-side=\"bottom\"]::before, .ds-tis-popover__positioner[data-side=\"bottom\"]::after": {
      "inset-block-end": "calc(100% - var(--ds-popover-panel-border-width-default))",
      "inset-inline-start": "50%",
      "clip-path": "polygon(0 100%, 50% 0, 100% 100%)",
      "transform": "translateX(-50%)"
    },
    ".ds-tis-popover__positioner[data-side=\"bottom\"]::before, .ds-tis-popover__positioner[data-side=\"top\"]::before": {
      "inline-size": "var(--ds-popover-arrow-base-default)",
      "block-size": "calc((var(--ds-popover-arrow-base-default) / 2) + var(--ds-popover-panel-border-width-default))"
    },
    ".ds-tis-popover__positioner[data-side=\"bottom\"]::after, .ds-tis-popover__positioner[data-side=\"top\"]::after": {
      "inline-size": "calc(var(--ds-popover-arrow-base-default) - (var(--ds-popover-panel-border-width-default) * 2))",
      "block-size": "calc(var(--ds-popover-arrow-base-default) / 2)"
    },
    ".ds-tis-popover__positioner[data-side=\"top\"]::before, .ds-tis-popover__positioner[data-side=\"top\"]::after": {
      "inset-block-start": "calc(100% - var(--ds-popover-panel-border-width-default))",
      "inset-inline-start": "50%",
      "clip-path": "polygon(0 0, 100% 0, 50% 100%)",
      "transform": "translateX(-50%)"
    },
    ".ds-tis-popover__positioner[data-side=\"left\"]::before, .ds-tis-popover__positioner[data-side=\"left\"]::after": {
      "inset-block-start": "50%",
      "inset-inline-start": "calc(100% - var(--ds-popover-panel-border-width-default))",
      "clip-path": "polygon(0 0, 100% 50%, 0 100%)",
      "transform": "translateY(-50%)"
    },
    ".ds-tis-popover__positioner[data-side=\"left\"]::before, .ds-tis-popover__positioner[data-side=\"right\"]::before": {
      "inline-size": "calc((var(--ds-popover-arrow-base-default) / 2) + var(--ds-popover-panel-border-width-default))",
      "block-size": "var(--ds-popover-arrow-base-default)"
    },
    ".ds-tis-popover__positioner[data-side=\"left\"]::after, .ds-tis-popover__positioner[data-side=\"right\"]::after": {
      "inline-size": "calc(var(--ds-popover-arrow-base-default) / 2)",
      "block-size": "calc(var(--ds-popover-arrow-base-default) - (var(--ds-popover-panel-border-width-default) * 2))"
    },
    ".ds-tis-popover__positioner[data-side=\"right\"]::before, .ds-tis-popover__positioner[data-side=\"right\"]::after": {
      "inset-block-start": "50%",
      "inset-inline-end": "calc(100% - var(--ds-popover-panel-border-width-default))",
      "clip-path": "polygon(100% 0, 0 50%, 100% 100%)",
      "transform": "translateY(-50%)"
    }
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta",
    "wave": "overlay"
  },
  "docs": "Mantenha @import \"ds-tis/css\" como o primeiro import global. Use PopoverTitle e PopoverDescription para nome e descrição acessíveis.",
  "type": "registry:ui"
}