{"version":3,"sources":["../src/popover/popover.tsx"],"names":["Root","usePermissions","resolvePermissions","useAudit","evaluatePermission","CANONICAL_ACTIONS","jsx","RadixPopover","Trigger","forwardRef","Anchor","Portal","Content","Close","Arrow"],"mappings":"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","file":"popover.cjs","sourcesContent":["/**\n * Popover — headless primitive wrapping Radix Popover.\n *\n * Radix's Popover owns focus management, collision detection, portal,\n * ESC-to-close, and click-outside behavior (ARCHITECTURE §6). We wrap\n * thinly:\n *   - Permission gating on <Root> (denied → null + permission:denied\n *     audit; any mode collapses to null for a popover that has no useful\n *     visible-but-inert state)\n *   - Audit events on open / close\n *   - `data-oshon-primitive=\"popover-*\"` styling hooks\n *\n * \"use client\" mandatory — Radix uses hooks + DOM APIs internally.\n */\n\n'use client';\n\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { forwardRef } from 'react';\nimport type {\n  ComponentPropsWithoutRef,\n  ElementRef,\n  ReactNode,\n} from 'react';\nimport {\n  evaluatePermission,\n  resolvePermissions,\n  usePermissions,\n  useAudit,\n  type PermissionContext,\n} from '../context.js';\nimport { CANONICAL_ACTIONS } from '../actions.js';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Root\n\nexport interface PopoverRootProps\n  extends Omit<RadixPopover.PopoverProps, 'onOpenChange'> {\n  /**\n   * Fires whenever the popover's open state changes. The primitive fires\n   * `popover:open` / `popover:close` audit events automatically before\n   * this callback runs.\n   */\n  onOpenChange?: (open: boolean) => void;\n  /**\n   * Per-instance permission override. Merges over the ambient\n   * `PermissionContext`. Denied + any mode returns `null` (popovers, like\n   * dialogs, have no useful visible-but-inert state) and emits a\n   * `permission:denied` audit.\n   */\n  permissions?: Partial<PermissionContext>;\n  /**\n   * Resource name for `permissions.can('view', resource, attrs)`.\n   * Default `'popover'`. Override for specific semantics, e.g.\n   * `resource=\"record:quick-actions\"`.\n   */\n  resource?: string;\n  /** Attribute bag for attribute-based access control. */\n  permissionAttrs?: Record<string, unknown>;\n  children: ReactNode;\n}\n\n/**\n * Popover root. Controls open state, gates on permissions, fires audit\n * events. Must wrap every other `Popover.*` sub-component.\n */\nfunction Root({\n  children,\n  open,\n  defaultOpen,\n  onOpenChange,\n  permissions,\n  resource = 'popover',\n  permissionAttrs,\n  modal,\n}: PopoverRootProps) {\n  const context = usePermissions();\n  const effective = resolvePermissions(permissions, context);\n  const emit = useAudit();\n\n  const { granted, denyReason } = evaluatePermission(\n    effective,\n    'view',\n    resource,\n    permissionAttrs,\n  );\n\n  if (!granted) {\n    emit({\n      component: 'popover',\n      action: CANONICAL_ACTIONS.PERMISSION_DENIED,\n      permissionResult: 'denied',\n      ...(denyReason ? { denyReason } : {}),\n      details: { attemptedAction: 'view', resource },\n    });\n    return null;\n  }\n\n  const handleOpenChange = (next: boolean) => {\n    emit({\n      component: 'popover',\n      action: next\n        ? CANONICAL_ACTIONS.POPOVER_OPEN\n        : CANONICAL_ACTIONS.POPOVER_CLOSE,\n      permissionResult: 'granted',\n    });\n    onOpenChange?.(next);\n  };\n\n  return (\n    <RadixPopover.Root\n      open={open}\n      defaultOpen={defaultOpen}\n      onOpenChange={handleOpenChange}\n      modal={modal}\n    >\n      {children}\n    </RadixPopover.Root>\n  );\n}\nRoot.displayName = 'Popover.Root';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Trigger\n\nexport type PopoverTriggerProps = ComponentPropsWithoutRef<typeof RadixPopover.Trigger>;\n\nconst Trigger = forwardRef<\n  ElementRef<typeof RadixPopover.Trigger>,\n  PopoverTriggerProps\n>(function PopoverTrigger(props, ref) {\n  return (\n    <RadixPopover.Trigger\n      ref={ref}\n      data-oshon-primitive=\"popover-trigger\"\n      {...props}\n    />\n  );\n});\n\n// ────────────────────────────────────────────────────────────────────────────\n// Anchor\n\nexport type PopoverAnchorProps = ComponentPropsWithoutRef<typeof RadixPopover.Anchor>;\n\n/**\n * Anchor. Optional — when present, positions the popover relative to an\n * element separate from the trigger. Useful for context menus anchored\n * to a cursor position or cell.\n */\nconst Anchor = forwardRef<\n  ElementRef<typeof RadixPopover.Anchor>,\n  PopoverAnchorProps\n>(function PopoverAnchor(props, ref) {\n  return (\n    <RadixPopover.Anchor\n      ref={ref}\n      data-oshon-primitive=\"popover-anchor\"\n      {...props}\n    />\n  );\n});\n\n// ────────────────────────────────────────────────────────────────────────────\n// Portal\n\nexport type PopoverPortalProps = RadixPopover.PopoverPortalProps;\n\nfunction Portal(props: PopoverPortalProps) {\n  return <RadixPopover.Portal {...props} />;\n}\nPortal.displayName = 'Popover.Portal';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Content\n\nexport type PopoverContentProps = ComponentPropsWithoutRef<typeof RadixPopover.Content>;\n\n/**\n * Content. Radix handles positioning, collision, focus return, ESC-to-close,\n * click-outside, and `role=\"dialog\"` for non-modal popovers. We add only\n * the styling hook.\n */\nconst Content = forwardRef<\n  ElementRef<typeof RadixPopover.Content>,\n  PopoverContentProps\n>(function PopoverContent(props, ref) {\n  return (\n    <RadixPopover.Content\n      ref={ref}\n      data-oshon-primitive=\"popover-content\"\n      {...props}\n    />\n  );\n});\n\n// ────────────────────────────────────────────────────────────────────────────\n// Close\n\nexport type PopoverCloseProps = ComponentPropsWithoutRef<typeof RadixPopover.Close>;\n\nconst Close = forwardRef<\n  ElementRef<typeof RadixPopover.Close>,\n  PopoverCloseProps\n>(function PopoverClose(props, ref) {\n  return (\n    <RadixPopover.Close\n      ref={ref}\n      data-oshon-primitive=\"popover-close\"\n      {...props}\n    />\n  );\n});\n\n// ────────────────────────────────────────────────────────────────────────────\n// Arrow\n\nexport type PopoverArrowProps = ComponentPropsWithoutRef<typeof RadixPopover.Arrow>;\n\nconst Arrow = forwardRef<\n  ElementRef<typeof RadixPopover.Arrow>,\n  PopoverArrowProps\n>(function PopoverArrow(props, ref) {\n  return (\n    <RadixPopover.Arrow\n      ref={ref}\n      data-oshon-primitive=\"popover-arrow\"\n      {...props}\n    />\n  );\n});\n\n// ────────────────────────────────────────────────────────────────────────────\n// Compound export\n\n/**\n * Compound Popover primitive. Use as:\n *\n *   <Popover.Root>\n *     <Popover.Trigger>Open</Popover.Trigger>\n *     <Popover.Portal>\n *       <Popover.Content>\n *         <p>Popover content</p>\n *         <Popover.Close>Close</Popover.Close>\n *       </Popover.Content>\n *     </Popover.Portal>\n *   </Popover.Root>\n */\nexport const Popover = {\n  Root,\n  Trigger,\n  Anchor,\n  Portal,\n  Content,\n  Close,\n  Arrow,\n};\n\nexport type PopoverProps = PopoverRootProps;\n"]}