import { RadiantElement } from '@ecopages/radiant'; import type { EventEmitter } from '@ecopages/radiant/tools/event-emitter'; import type { RuiPlacement } from '../shared/placement'; export type RuiPopoverOpenChangeDetail = { open: boolean; }; export type RuiPopoverProps = { /** Whether the popover is open (controlled). */ open?: boolean; /** Placement relative to the anchor. Default: `bottom`. */ placement?: RuiPlacement; /** Teleport the surface to `document.body`. Default: `true`. */ portal?: boolean; /** Match the anchor width (dropdown menus). Default: `false`. */ matchAnchorWidth?: boolean; /** Gap between anchor and surface in px. Default: `8`. */ offset?: number; /** * CSS selector for an external anchor when not using a trigger slot or * `rui-popover-trigger`. */ anchor?: string; /** Surface variant. `listbox` strips padding for embedded listboxes. */ variant?: 'default' | 'listbox'; }; /** * `` — a floating overlay positioned relative to an anchor. * * Pair with `RuiPopoverTrigger`, a `[data-popover-trigger]` element in the * view-owned shell, or pass an `anchor` selector for a custom anchor element. * * @element rui-popover * @fires rui-open-change - Emitted when open state changes; `detail.open`. * @cssclass rui-popover-host - Anchor + surface wrapper. * @cssclass rui-popover - Floating surface (`role="dialog"`); `background` + `rounded-container` + `shadow-overlay`. * @cssclass rui-popover--listbox - Stripped padding for embedded listboxes. */ export declare class RuiPopover extends RadiantElement { open: boolean; placement: RuiPlacement; portal: boolean; matchAnchorWidth: boolean; offset: number; anchor: string; variant: 'default' | 'listbox'; surfaceTarget: HTMLElement; hostTarget: HTMLElement; openChangeEvent: EventEmitter; private readonly surfaceId; private controller; private anchorClickTarget; protected onConnected(): void; disconnectedCallback(): void; private getAnchorElement; private ensureController; syncPopover(): void; setOpen(next: boolean, emit?: boolean): void; onDocumentPointerDown(event: PointerEvent): void; onFocusOut(event: FocusEvent): void; private usesExternalAnchor; private syncExternalAnchorClick; private unbindExternalAnchorClick; private onExternalAnchorClick; onDocumentKeydown(event: KeyboardEvent): void; } export type RuiPopoverTriggerProps = { /** Whether the popover starts open. Default: `false`. */ open?: boolean; }; /** * `` — coordinates open state between a trigger and `rui-popover`. * * @element rui-popover-trigger * @cssclass rui-popover-trigger - Trigger + popover wrapper. */ export declare class RuiPopoverTrigger extends RadiantElement { open: boolean; rootTarget: HTMLElement; private getPopover; protected onConnected(): void; syncToPopover(): void; onHostClick(event: Event): void; onPopoverOpenChange(event: CustomEvent): void; }