import type { ReactNode } from 'react'; import type { AriaButtonProps, AriaMenuOptions } from 'react-aria'; import type { MenuTriggerState, MenuTriggerProps, ItemProps } from 'react-stately'; import type { CreateComponent } from '~/utils'; import type { Components } from '~/utils/components-list'; import type { ButtonProps } from '../Button'; import type { MenuItemProps, MenuProps } from '../Menu'; import type { PopoverProps } from '../Popover/Popover'; import type { DropdownMenu } from './DropdownMenu'; import type { DropdownMenuItem } from './DropdownMenuItem'; import type { DropdownTrigger } from './DropdownTrigger'; export type DropdownContext = { triggerRef: React.MutableRefObject; state: MenuTriggerState; menuTriggerProps: AriaButtonProps<'button'>; menuProps: AriaMenuOptions; }; export type DropdownProps = Omit & { popoverProps?: Partial; }; export type DropdownNS = { Trigger: typeof DropdownTrigger; Menu: typeof DropdownMenu; MenuItem: typeof DropdownMenuItem; }; export type DropdownDef = CreateComponent<{ type: 'div'; component: Components.Dropdown; props: DropdownProps; element: HTMLDivElement; namespace: DropdownNS; styles: 'root' | 'trigger' | 'menu' | 'menuItem'; }>; export type DropdownTriggerProps = ButtonProps & { asChild?: boolean; children: ReactNode; }; export type DropdownTriggerNS = { id: string; }; export type DropdownTriggerDef = CreateComponent<{ type: 'button'; component: Components.DropdownTrigger; props: DropdownTriggerProps; element: HTMLButtonElement; namespace: DropdownTriggerNS; }>; export type DropdownMenuProps = MenuProps; export type DropdownMenuNS = { id: string; }; export type DropdownMenuDef = CreateComponent<{ type: 'div'; component: Components.DropdownMenu; props: DropdownMenuProps; element: HTMLDivElement; namespace: DropdownMenuNS; }>; export type DropdownMenuItemProps = ItemProps; export type DropdownMenuItemDef = CreateComponent<{ type: 'div'; component: Components.DropdownMenuItem; props: DropdownMenuItemProps; element: HTMLDivElement; }>;