import { type ComponentPropsWithoutRef, type ReactNode } from "react";
export interface CommandPaletteItem {
    /** Stable identifier for the command (returned to onSelect). */
    id: string;
    /** Display label. */
    label: ReactNode;
    /** Optional leading icon. */
    icon?: ReactNode;
    /** Additional search terms — concatenated to label for matching. */
    keywords?: string[];
    /** Optional shortcut chip (rendered right-aligned, e.g. "G P"). */
    shortcut?: string;
    /** Optional secondary text under the label (path, ID, hint). */
    description?: ReactNode;
    /** Mark as destructive — applies red tint on hover. */
    danger?: boolean;
    /** Disable this command. */
    disabled?: boolean;
    /** Action to run when the user activates the command. */
    onSelect?: () => void;
}
export interface CommandPaletteGroup {
    /** Group heading (rendered as a sticky section label). */
    heading: ReactNode;
    /** Commands in this group. */
    items: CommandPaletteItem[];
}
export interface CommandPaletteProps extends Omit<ComponentPropsWithoutRef<"div">, "onSelect" | "children" | "onDrag" | "onDragStart" | "onDragEnd" | "onAnimationStart"> {
    /** Whether the palette is open. Required (always controlled). */
    open: boolean;
    /** Fires when the user dismisses (Esc, click outside, item activation). */
    onClose: () => void;
    /** Command groups. */
    groups: CommandPaletteGroup[];
    /** Input placeholder. Default `"Search for actions, pages, datasets…"`. */
    placeholder?: string;
    /** Fires once per selection — useful for analytics or modal-managed flows. */
    onSelect?: (item: CommandPaletteItem) => void;
    /** Rendered when search returns no results. */
    emptyState?: ReactNode;
    /** Footer slot (hint, status, link). */
    footer?: ReactNode;
    /**
     * Custom filter function. Defaults to case-insensitive substring
     * match across `label` (when a string) + `keywords` + the group
     * heading (when a string).
     */
    filter?: (item: CommandPaletteItem, query: string, groupHeading: ReactNode) => boolean;
    /**
     * DOM node to render the portal into. Defaults to `document.body`.
     * Pass a different container when the app embeds the palette in a
     * specific Shadow DOM / scoped tree.
     */
    container?: Element | null;
    /** Disable the open animation (for testing / SSR snapshots). */
    disableAnimation?: boolean;
}
export declare const CommandPalette: import("react").ForwardRefExoticComponent<CommandPaletteProps & import("react").RefAttributes<HTMLDivElement>>;
export declare function useCommandPaletteShortcut(toggle: () => void, options?: {
    /** Disable when input fields are focused. Default true — prevents
     * Cmd+K hijacking native browser behaviors. */
    skipInputs?: boolean;
}): void;
//# sourceMappingURL=CommandPalette.d.ts.map