import React from "react"; /** * Represents a selectable user item with optional role information. */ export interface SelectableUser { uid: string; displayName?: string | null; email?: string | null; photoURL?: string | null; roles?: string[]; } export interface UserSelectPopoverProps { /** * The currently selected user, or `null` for "self"/default. */ selectedUser: SelectableUser | null; /** * Called when the user selection changes. * `null` means "reset to self/default". */ onUserSelected: (user: SelectableUser | null) => void; /** * Full list of users to display. * The component handles client-side search/filter internally. */ users: SelectableUser[]; /** * Whether users are currently loading. */ loading?: boolean; /** * The current user (displayed as the "self" option at the top). */ currentUser?: SelectableUser | null; /** * Label to display when no user is selected. * @default "Current user" */ defaultLabel?: string; /** * Maximum number of users to render at a time (for performance). * Users can still be found via search. * @default 100 */ renderLimit?: number; /** * Additional class name for the trigger button. */ className?: string; /** * Size variant. * @default "small" */ size?: "small" | "medium"; } /** * A reusable user picker popover with search support. * Designed to handle very large user lists (100k+) by filtering * client-side and limiting the rendered set. * * @group Components */ export declare function UserSelectPopover({ selectedUser, onUserSelected, users, loading, currentUser, defaultLabel, renderLimit, className, size }: UserSelectPopoverProps): React.JSX.Element;