import * as React from "react";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
import { type LucideIcon } from "lucide-react";
import type { AvatarData } from "../../components/Avatar/avatar";
import { type RowSize } from "../../patterns/element-anatomy/item-anatomy";
/**
 * DropdownMenu — Radix DropdownMenu + MenuItem visual layer
 *
 * 架構分工：
 * - Radix primitives：behavior（keyboard nav, focus management, aria roles）
 * - MenuItem：visual（layout, padding, icon alignment, typography）
 *
 * Radix primitive 是外層容器,控制 `data-[highlighted]:bg-neutral-hover`。
 * MenuItem 內層只負責佈局,不加互動樣式。
 *
 * ── Hover / highlight canonical(2026-04-22 修正)──
 * 用 Radix 官方的 `data-[highlighted]` attribute,**不用 `:focus-visible` / `:hover` /
 * `:focus`**:
 *   - Radix 在 **mouse hover、keyboard arrow nav、focus move in** 時自動 set `data-highlighted`
 *   - mouse leave / focus move out / menu close 時自動清掉
 *   - 不會在 click 後留殘影(Radix 內部已處理)
 *   - 跨瀏覽器一致(不依賴 `:focus-visible` 的 heuristic)
 *
 * 曾經用過 `focus-visible:bg-neutral-hover` 的理由:避免 click 後殘影。但實測:mouse hover
 * 觸發 Radix 程式化 `.focus()`,Chromium / Safari / Firefox 對 programmatic focus 是否 fire
 * `:focus-visible` 行為不一致,導致 mouse hover 有時無 bg。改用 `data-[highlighted]:` 後行為
 * 一致 —— 世界級 canonical(shadcn / Radix docs / Ariakit 皆此)。
 */
declare const floatingLayerClass: string;
type SizeKey = RowSize;
declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
declare const DropdownMenuGroup: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
interface DropdownMenuContentProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content> {
    size?: SizeKey;
    /** 最小寬度（px），預設跟隨觸發元件寬度 */
    minWidth?: number;
    /** 最大高度（px），超過時捲動 */
    maxHeight?: number;
}
declare const DropdownMenuContent: React.ForwardRefExoticComponent<DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>>;
declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
interface DropdownMenuItemProps extends Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>, 'children'> {
    children: React.ReactNode;
    /** 左側 icon */
    startIcon?: LucideIcon;
    /** 左側頭像資料（AvatarData），與 startIcon 互斥 */
    avatar?: AvatarData;
    /** 次要說明文字 */
    description?: React.ReactNode;
    /** 後綴 Tag（ReactNode） */
    tag?: React.ReactNode;
    /** 後綴 Badge（ReactNode） */
    badge?: React.ReactNode;
    /** 後綴指示型 icon（LucideIcon），fg-muted */
    endIcon?: LucideIcon;
    /** 鍵盤快捷鍵提示(canonical)——渲染進 MenuItem `endContent` 正規後綴 slot。
     *  替代方案是 `<DropdownMenuShortcut>` child(composition escape-hatch);**同 item 勿混用**。 */
    shortcut?: string;
    /** 單選選中（bg-neutral-selected，持續選中狀態）*/
    selected?: boolean;
}
declare const DropdownMenuItem: React.ForwardRefExoticComponent<DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>>;
interface DropdownMenuSubTriggerProps extends Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger>, 'children'> {
    children: React.ReactNode;
    /** 左側 icon */
    startIcon?: LucideIcon;
    /** 子選單目前狀態值文字（如 "深色"） */
    value?: string;
    /** 子選單狀態 badge */
    badge?: React.ReactNode;
}
declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>>;
interface DropdownMenuCheckboxItemProps extends Omit<React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>, 'children'> {
    children: React.ReactNode;
    /** 左側 icon */
    startIcon?: LucideIcon;
    /** 次要說明文字 */
    description?: React.ReactNode;
}
declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>>;
declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
interface DropdownMenuRadioItemProps extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem> {
    /** Prefix icon(LucideIcon) */
    startIcon?: LucideIcon;
    /** 次要說明文字 */
    description?: React.ReactNode;
}
declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>>;
declare const DropdownMenuShortcut: {
    ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
    displayName: string;
};
export declare const dropdownMenuMeta: {
    readonly component: "DropdownMenu";
    readonly family: null;
    readonly variants: {};
    readonly sizes: {};
    readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
    readonly tokens: {
        readonly bg: readonly ["bg-neutral-hover", "bg-surface-raised", "bg-transparent"];
        readonly fg: readonly ["text-fg-disabled", "text-fg-muted"];
        readonly ring: readonly [];
    };
};
export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuShortcut, floatingLayerClass, };
export type { SizeKey, DropdownMenuItemProps };
//# sourceMappingURL=dropdown-menu.d.ts.map