/** * Popover โ€” headless primitive wrapping Radix Popover. * * Radix's Popover owns focus management, collision detection, portal, * ESC-to-close, and click-outside behavior (ARCHITECTURE ยง6). We wrap * thinly: * - Permission gating on (denied โ†’ null + permission:denied * audit; any mode collapses to null for a popover that has no useful * visible-but-inert state) * - Audit events on open / close * - `data-oshon-primitive="popover-*"` styling hooks * * "use client" mandatory โ€” Radix uses hooks + DOM APIs internally. */ import * as RadixPopover from '@radix-ui/react-popover'; import type { ComponentPropsWithoutRef, ReactNode } from 'react'; import { type PermissionContext } from '../context.js'; export interface PopoverRootProps extends Omit { /** * Fires whenever the popover's open state changes. The primitive fires * `popover:open` / `popover:close` audit events automatically before * this callback runs. */ onOpenChange?: (open: boolean) => void; /** * Per-instance permission override. Merges over the ambient * `PermissionContext`. Denied + any mode returns `null` (popovers, like * dialogs, have no useful visible-but-inert state) and emits a * `permission:denied` audit. */ permissions?: Partial; /** * Resource name for `permissions.can('view', resource, attrs)`. * Default `'popover'`. Override for specific semantics, e.g. * `resource="record:quick-actions"`. */ resource?: string; /** Attribute bag for attribute-based access control. */ permissionAttrs?: Record; children: ReactNode; } /** * Popover root. Controls open state, gates on permissions, fires audit * events. Must wrap every other `Popover.*` sub-component. */ declare function Root({ children, open, defaultOpen, onOpenChange, permissions, resource, permissionAttrs, modal, }: PopoverRootProps): import("react/jsx-runtime").JSX.Element | null; declare namespace Root { var displayName: string; } export type PopoverTriggerProps = ComponentPropsWithoutRef; export type PopoverAnchorProps = ComponentPropsWithoutRef; export type PopoverPortalProps = RadixPopover.PopoverPortalProps; declare function Portal(props: PopoverPortalProps): import("react/jsx-runtime").JSX.Element; declare namespace Portal { var displayName: string; } export type PopoverContentProps = ComponentPropsWithoutRef; export type PopoverCloseProps = ComponentPropsWithoutRef; export type PopoverArrowProps = ComponentPropsWithoutRef; /** * Compound Popover primitive. Use as: * * * Open * * *

Popover content

* Close *
*
*
*/ export declare const Popover: { Root: typeof Root; Trigger: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>; Anchor: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>; Portal: typeof Portal; Content: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>; Close: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>; Arrow: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>; }; export type PopoverProps = PopoverRootProps; export {}; //# sourceMappingURL=popover.d.cts.map