{
  "name": "tooltip",
  "type": "registry:ui",
  "title": "Tooltip",
  "description": "Short, non-essential hints shown from hover or focus without replacing the trigger's accessible name.",
  "registryDependencies": [
    "@siteplane/base"
  ],
  "dependencies": [
    "@base-ui/react@1.5.0"
  ],
  "files": [
    {
      "path": "src/components/ui/tooltip.tsx",
      "type": "registry:ui",
      "content": "\"use client\";\n\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\";\nimport type React from \"react\";\nimport { SiteplaneUIPortalScope } from \"@/components/ui/siteplane-provider\";\nimport { cn } from \"@/lib/utils\";\n\nexport const TooltipCreateHandle: typeof TooltipPrimitive.createHandle =\n  TooltipPrimitive.createHandle;\n\nexport const TooltipProvider: typeof TooltipPrimitive.Provider =\n  TooltipPrimitive.Provider;\n\nexport const Tooltip: typeof TooltipPrimitive.Root = TooltipPrimitive.Root;\n\nexport function TooltipTrigger(\n  props: TooltipPrimitive.Trigger.Props,\n): React.ReactElement {\n  return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nexport function TooltipPopup({\n  className,\n  align = \"center\",\n  sideOffset = 4,\n  side = \"top\",\n  anchor,\n  children,\n  portalProps,\n  ...props\n}: TooltipPrimitive.Popup.Props & {\n  align?: TooltipPrimitive.Positioner.Props[\"align\"];\n  side?: TooltipPrimitive.Positioner.Props[\"side\"];\n  sideOffset?: TooltipPrimitive.Positioner.Props[\"sideOffset\"];\n  anchor?: TooltipPrimitive.Positioner.Props[\"anchor\"];\n  portalProps?: TooltipPrimitive.Portal.Props;\n}): React.ReactElement {\n  return (\n    <TooltipPrimitive.Portal {...portalProps}>\n      <SiteplaneUIPortalScope>\n        <TooltipPrimitive.Positioner\n          align={align}\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=\"tooltip-positioner\"\n          side={side}\n          sideOffset={sideOffset}\n        >\n          <TooltipPrimitive.Popup\n            className={cn(\n              \"siteplane-floating-panel relative flex h-(--popup-height,auto) w-(--popup-width,auto) origin-(--transform-origin) text-balance rounded-md bg-popover text-popover-foreground text-xs shadow-md/5 before:pointer-events-none before:absolute before:inset-0 before:rounded-[inherit] before:shadow-[0_1px_--theme(--color-black/4%)] data-instant:duration-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]\",\n              className,\n            )}\n            data-slot=\"tooltip-popup\"\n            {...props}\n          >\n            <TooltipPrimitive.Arrow\n              className=\"z-50 data-[side=bottom]:top-[-8px] data-[side=left]:right-[-13px] data-[side=left]:rotate-90 data-[side=right]:left-[-13px] data-[side=right]:-rotate-90 data-[side=top]:bottom-[-8px] data-[side=top]:rotate-180\"\n              data-slot=\"tooltip-arrow\"\n            >\n              <svg aria-hidden=\"true\" fill=\"none\" height=\"10\" viewBox=\"0 0 20 10\" width=\"20\">\n                {/* Schmale, mittige Pfeilspitze: Basis (x7-13) bleibt innerhalb der\n                    geraden Popup-Kante, damit am abgerundeten Eck kein weisses\n                    Rechteck heraussteht. Box/Offsets bleiben unveraendert. */}\n                <path\n                  className=\"fill-popover\"\n                  d=\"M8.9 2.9C9.4 2.3 10.6 2.3 11.1 2.9L13 8V10H7V8L8.9 2.9Z\"\n                />\n              </svg>\n            </TooltipPrimitive.Arrow>\n            <TooltipPrimitive.Viewport\n              className=\"relative size-full overflow-clip px-(--viewport-inline-padding) py-1 [--viewport-inline-padding:--spacing(2)] data-instant:transition-none **:data-current:data-ending-style:opacity-0 **:data-current:data-starting-style:opacity-0 **:data-previous:data-ending-style:opacity-0 **:data-previous:data-starting-style:opacity-0 **:data-current:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:w-[calc(var(--popup-width)-2*var(--viewport-inline-padding)-2px)] **:data-previous:truncate **:data-current:opacity-100 **:data-previous:opacity-100 **:data-current:transition-opacity **:data-previous:transition-opacity\"\n              data-slot=\"tooltip-viewport\"\n            >\n              {children}\n            </TooltipPrimitive.Viewport>\n          </TooltipPrimitive.Popup>\n        </TooltipPrimitive.Positioner>\n      </SiteplaneUIPortalScope>\n    </TooltipPrimitive.Portal>\n  );\n}\n\nexport { TooltipPrimitive, TooltipPopup as TooltipContent };\n"
    }
  ],
  "categories": [
    "overlays"
  ],
  "docs": "# Tooltip\n\n> Siteplane UI release `0.1.1`.\n\n## Public Purpose\n\nUse Tooltip for a short, non-essential hint that appears from hover or keyboard focus. It never replaces the trigger's own label or critical visible information.\n\n## Import\n\n`import { Tooltip } from \"@/components/ui/tooltip\";`\n\n`import { TooltipCreateHandle, TooltipPopup, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";`\n\n`import { TooltipContent } from \"@/components/ui/tooltip\";`\n\n## Public API\n\n- Mount `TooltipProvider` around a dense tooltip group, then compose `Tooltip`, `TooltipTrigger` and `TooltipPopup`.\n- `TooltipPopup` accepts `side`, `align=\"start\" | \"center\" | \"end\"`, `sideOffset`, `alignOffset`, `anchor` and popup props.\n- `anchor` can position the popup from another element or virtual position instead of the normal trigger.\n- `TooltipCreateHandle` supports detached trigger relationships; `TooltipContent` remains a compatibility alias for `TooltipPopup`.\n\n## Public Motion\n\n- Tooltip uses the shared floating-panel fade, scale and directional offset tokens.\n- Grouped tooltips can skip the repeated opening delay after the first tooltip; reduced motion remains global.\n\n## Public Accessibility\n\n- The trigger needs its own visible name or `aria-label`; Tooltip content is supporting description only.\n- Do not place interactive controls inside `TooltipPopup`.\n- Use visible helper text, Alert or Toast for critical and screen-reader-relevant messages.\n\n## Public Agent Guidance\n\n- Use `TooltipProvider` for dense groups such as toolbars, not as a replacement for visible labels.\n- Prefer the normal trigger relationship and use `anchor` or `TooltipCreateHandle` only for a genuine detached case.\n- Keep portal, positioning and motion internals inside the primitive.\n\n## Public Links\n\n- [Documentation and preview](https://ui.siteplane.io/docs/components/overlays/tooltip)\n\n- [Registry source](https://ui.siteplane.io/r/tooltip.json)\n",
  "meta": {
    "siteplane:agentContractVersion": 1,
    "siteplane:docs": "https://ui.siteplane.io/docs/components/overlays/tooltip",
    "siteplane:releaseVersion": "0.1.1",
    "siteplane:sourceOwned": true
  },
  "devDependencies": []
}
