import { Colors, IconFontColor, InputSize, PillSize, VisualSlotType } from './types';
import { ButtonTooltipConfig } from './buttonConfig';
import { ListItemCheckboxSelectionTone } from './list';
/** Cómo se resume la selección en el trigger cuando `multiple`: chips, contador o texto (un solo modo; sin fila extra de tags). */
export type DropdownSelectionSummary = 'tags' | 'count' | 'text';
/** Cómo se muestran las tags en el campo cuando `selectionSummary="tags"` (wrap vs una línea + chip +n). */
export type DropdownTagsOverflow = 'wrap' | 'single-line';
/** Variantes de lista que el dropdown puede renderizar */
export type DropdownListVariant = 'default' | 'list-default' | 'radio' | 'toggle' | 'user' | 'checkbox-item' | 'filters'
/** Lista tipo OBP/Figma: `ListBase` variante `search-multi-checkbox` (búsqueda, cabecera tri‑estado, checks). */
 | 'search-multi-checkbox';
export interface DropdownOption {
    label: string;
    value?: string | number;
    disabled?: boolean;
    icon?: VisualSlotType;
    iconColor?: IconFontColor;
    checked?: boolean;
    /** Descripción secundaria (usado en variantes 'toggle', 'checkbox-item') */
    description?: string;
    /** Subtítulo (usado en variante 'user') */
    subtitle?: string;
    /** Avatar (usado en variante 'user') — puede ser un ReactNode o string de iniciales */
    avatar?: React.ReactNode | string;
    /** Badge text (usado en variante 'user') */
    badge?: string;
    /** Badge variant (usado en variante 'user') */
    badgeVariant?: 'success' | 'warning' | 'error' | 'info';
    /** Contenido a la derecha (usado en variante 'radio') */
    rightContent?: React.ReactNode;
    /** Color del item (usado en variante 'list-default') */
    color?: 'blue' | 'red';
    /** URL de avatar circular (útil con `withCheckbox` y filas tipo lista de usuarios). */
    avatarUrl?: string;
    /**
     * Solo con `listVariant: 'user'`. Si es `true`, no se pinta la columna de imagen en esta fila
     * (nombre + subtítulo a ancho completo).
     */
    hideAvatar?: boolean;
    /**
     * Solo con `listVariant: 'user'` y `list.userHideAvatars: true`. Fuerza mostrar imagen en esta
     * fila (p. ej. un usuario destacado en una lista “solo texto”).
     */
    showAvatar?: boolean;
    [key: string]: unknown;
}
/**
 * Buscador del panel cuando `listVariant="search-multi-checkbox"` (dentro de {@link DropdownSearchMultiCheckboxConfig}).
 */
export interface DropdownSearchMultiCheckboxSearchProps {
    /**
     * Muestra el buscador dentro de la lista.
     * @default true
     */
    show?: boolean;
    /**
     * Placeholder del campo en la lista; si no se define, se usa `menuSearch.searchPlaceholder` o la raíz.
     */
    placeholder?: string;
}
/** Texto e id de la fila de cabecera «seleccionar todo» del panel (estado tri‑estado lo calcula el Dropdown). */
export interface DropdownSearchMultiCheckboxHeaderProps {
    id: string;
    label: string;
}
/**
 * Configuración del panel cuando `listVariant="search-multi-checkbox"` y `multiple`
 * (buscador en lista, cabecera «seleccionar todo», botón «Limpiar selección»).
 * Narrativa: `packages/ui/DEVELOPMENT_GUIDE.md` — *ListBase y Dropdown*.
 */
export interface DropdownSearchMultiCheckboxConfig {
    search?: Partial<DropdownSearchMultiCheckboxSearchProps>;
    header?: DropdownSearchMultiCheckboxHeaderProps;
    /**
     * Muestra el botón «Limpiar selección» bajo la lista.
     * @default true
     */
    showClearSelection?: boolean;
}
/** Etiqueta, validación, tamaño, placeholder y caret del control. */
export interface DropdownFieldProps {
    label?: string;
    error?: string;
    helperText?: string;
    placeholder?: string;
    disabled?: boolean;
    size?: InputSize;
    color?: Colors;
    caret?: boolean;
}
/** Tooltip informativo del campo y envoltorio `Tooltip` opcional. */
export interface DropdownHintProps {
    infoTooltip?: string;
    tooltipProps?: ButtonTooltipConfig;
}
/** Iconos laterales y variante pill del input. */
export interface DropdownSlotsProps {
    leftSlot?: VisualSlotType;
    rightSlot?: VisualSlotType;
    pill?: PillSize;
}
/** Opciones del menú y mapeo de claves; opción placeholder inicial. */
export interface DropdownItemsProps {
    options?: DropdownOption[];
    valueName?: string;
    idName?: string;
    defaultOptionSelected?: boolean;
}
/** Valor controlado / por defecto y bandera de “hay actual”. */
export interface DropdownValuesProps {
    value?: string | number | (string | number)[];
    defaultValue?: string | number | (string | number)[];
    hasCurrent?: boolean;
}
/** Búsqueda y textos vacíos en el menú desplegable (no el buscador del panel `search-multi-checkbox`). */
export interface DropdownMenuSearchProps {
    searchable?: boolean;
    searchPlaceholder?: string;
    noResultsText?: string;
    noResultsDescription?: string;
}
/** Multiselección, resumen en el trigger, límites y botón limpiar del trigger. */
export interface DropdownMultiProps {
    multiple?: boolean;
    maxSelectedItems?: number;
    /** Cómo se muestra la selección múltiple en el campo (`tags` = chips en el trigger; `count` / `text` = solo resumen en el input). */
    selectionSummary?: DropdownSelectionSummary;
    /** @deprecated Usar `selectionSummary`. */
    selectedItemsDisplay?: DropdownSelectionSummary;
    tagsOverflow?: DropdownTagsOverflow;
    tagsOverflowPopoverPlacement?: 'top' | 'bottom';
    tagsOverflowPopoverZIndex?: number;
    tagsOverflowPopoverTitle?: string;
    preventDeselectFromOptionsList?: boolean;
    showTriggerClearButton?: boolean;
}
/**
 * Portal, dimensiones, id y pie del panel.
 *
 * **Ancho del menú de lista:** en todas las variantes, el panel usa por defecto el ancho del
 * campo (trigger) como ancho y tope (`width` + `maxWidth` en px desde el layout). Así el listado
 * queda siempre acotado al máximo ancho del control salvo overrides futuros del DS.
 */
export interface DropdownPopoverProps {
    maxHeight?: string;
    closeOnClickOutside?: boolean;
    dropdownId?: string;
    /**
     * Ancho del **campo** respecto al contenedor: `true` (por defecto) = `ui-w-full` en el trigger;
     * `false` = ancho según contenido (`ui-w-fit` en el `Input`), útil en layouts en línea.
     * El panel de la lista sigue midiéndose sobre el trigger y no lo supera en ancho.
     */
    fullWidth?: boolean;
    auto?: boolean;
    absolute?: boolean;
    popoverZIndex?: number;
    footer?: boolean;
}
/** Modo checklist en filas del menú. */
export interface DropdownCheckboxProps {
    withCheckbox?: boolean;
    checkboxSelectionTone?: ListItemCheckboxSelectionTone;
    checkboxPosition?: 'start' | 'end';
    checkboxListDensity?: 'default' | 'compact';
}
/** Variante de lista, título de filtros y panel plazas (`searchMultiCheckbox`). */
export interface DropdownListBlockProps {
    listVariant?: DropdownListVariant;
    filtersTitle?: string;
    searchMultiCheckbox?: DropdownSearchMultiCheckboxConfig;
    /**
     * En el panel del menú, muestra primero la fila (o filas) seleccionada(s). No reordena listas
     * que incluyen filas `isGroupTitle`. Variantes `toggle` / `checkbox-item` ordenan por `checked`.
     *
     * @default true
     */
    pinSelectedFirst?: boolean;
    /**
     * Solo con `listVariant: 'user'`. Si es `true`, ninguna fila muestra columna de imagen por
     * defecto; usa `options[].showAvatar` para excepciones. Alternativa por fila: `options[].hideAvatar`.
     */
    userHideAvatars?: boolean;
}
/** Callbacks de valor, opción, check, toggle y aceptar. */
export interface DropdownEventsProps {
    onValueChange?: (value: string | number | (string | number)[]) => void;
    onOptionSelect?: (option: DropdownOption) => void;
    onCheckboxChange?: (option: DropdownOption, checked: boolean) => void;
    onToggleChange?: (option: DropdownOption, checked: boolean) => void;
    onHandleAccept?: (selectedOptions: DropdownOption[]) => void;
}
/** Estado de UI no ligado al valor (p. ej. carga en el panel). */
export interface DropdownStatusProps {
    loading?: boolean;
}
/**
 * Props del `Dropdown`. **Preferir bloques:** `field`, `tooltip`, `slots`, `items`, `values`, `menuSearch`,
 * `multi` (`selectionSummary`, `tagsOverflow`…), `popover`, `checkbox`, `list`, `events`, `status`; la raíz sigue admitida (compatibilidad).
 */
export interface DropdownProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange' | 'value' | 'defaultValue' | 'list'> {
    field?: Partial<DropdownFieldProps>;
    tooltip?: Partial<DropdownHintProps>;
    slots?: Partial<DropdownSlotsProps>;
    items?: Partial<DropdownItemsProps>;
    values?: Partial<DropdownValuesProps>;
    menuSearch?: Partial<DropdownMenuSearchProps>;
    multi?: Partial<DropdownMultiProps>;
    popover?: Partial<DropdownPopoverProps>;
    checkbox?: Partial<DropdownCheckboxProps>;
    list?: Partial<DropdownListBlockProps>;
    events?: Partial<DropdownEventsProps>;
    status?: Partial<DropdownStatusProps>;
    /** @deprecated Usar `field.label`. */
    label?: string;
    /** @deprecated Usar `field.error`. */
    error?: string;
    /** @deprecated Usar `field.helperText`. */
    helperText?: string;
    /** @deprecated Usar `tooltip.infoTooltip`. */
    infoTooltip?: string;
    /** @deprecated Usar `field.size`. */
    size?: InputSize;
    /** @deprecated Usar `field.color`. */
    color?: Colors;
    /** @deprecated Usar `slots.leftSlot`. */
    leftSlot?: VisualSlotType;
    /** @deprecated Usar `slots.rightSlot`. */
    rightSlot?: VisualSlotType;
    /** @deprecated Usar `menuSearch.searchPlaceholder`. */
    searchPlaceholder?: string;
    /** @deprecated Usar `menuSearch.noResultsText`. */
    noResultsText?: string;
    /** @deprecated Usar `menuSearch.noResultsDescription`. */
    noResultsDescription?: string;
    /** @deprecated Usar `field.caret`. */
    caret?: boolean;
    disabled?: boolean;
    /** @deprecated Usar `values.defaultValue`. */
    defaultValue?: string | number | (string | number)[];
    /** @deprecated Usar `field.placeholder`. */
    placeholder?: string;
    /** @deprecated Usar `items.options`. */
    options?: DropdownOption[];
    /** @deprecated Usar `values.value`. */
    value?: string | number | (string | number)[];
    /** @deprecated Usar `items.valueName`. */
    valueName?: string;
    /** @deprecated Usar `items.idName`. */
    idName?: string;
    /** @deprecated Usar `events.onValueChange`. */
    onValueChange?: (value: string | number | (string | number)[]) => void;
    /** @deprecated Usar `events.onOptionSelect`. */
    onOptionSelect?: (option: DropdownOption) => void;
    /** @deprecated Usar `events.onCheckboxChange`. */
    onCheckboxChange?: (option: DropdownOption, checked: boolean) => void;
    /** @deprecated Usar `menuSearch.searchable`. */
    searchable?: boolean;
    /** @deprecated Usar `popover.maxHeight`. */
    maxHeight?: string;
    /** @deprecated Usar `popover.closeOnClickOutside`. */
    closeOnClickOutside?: boolean;
    /** @deprecated Usar `popover.dropdownId`. */
    dropdownId?: string;
    /** @deprecated Usar `popover.fullWidth`. */
    fullWidth?: boolean;
    /** @deprecated Usar `popover.auto`. */
    auto?: boolean;
    /** @deprecated Usar `multi.multiple`. */
    multiple?: boolean;
    /** @deprecated Usar `multi.maxSelectedItems`. */
    maxSelectedItems?: number;
    /** @deprecated Usar `multi.selectionSummary`. */
    selectionSummary?: DropdownSelectionSummary;
    /** @deprecated Usar `multi.selectionSummary`. */
    selectedItemsDisplay?: DropdownSelectionSummary;
    /** @deprecated Usar `multi.tagsOverflow`. */
    tagsOverflow?: DropdownTagsOverflow;
    /** @deprecated Usar `multi.tagsOverflowPopoverPlacement`. */
    tagsOverflowPopoverPlacement?: 'top' | 'bottom';
    /** @deprecated Usar `multi.tagsOverflowPopoverZIndex`. */
    tagsOverflowPopoverZIndex?: number;
    /** @deprecated Usar `multi.tagsOverflowPopoverTitle`. */
    tagsOverflowPopoverTitle?: string;
    /** @deprecated Usar `multi.preventDeselectFromOptionsList`. */
    preventDeselectFromOptionsList?: boolean;
    /** @deprecated Usar `multi.showTriggerClearButton`. */
    showTriggerClearButton?: boolean;
    /** @deprecated Usar `popover.absolute`. */
    absolute?: boolean;
    /** @deprecated Usar `popover.popoverZIndex`. */
    popoverZIndex?: number;
    /** @deprecated Usar `popover.footer`. */
    footer?: boolean;
    /** @deprecated Usar `items.defaultOptionSelected`. */
    defaultOptionSelected?: boolean;
    /** @deprecated Usar `checkbox.withCheckbox`. */
    withCheckbox?: boolean;
    /** @deprecated Usar `checkbox.checkboxSelectionTone`. */
    checkboxSelectionTone?: ListItemCheckboxSelectionTone;
    /** @deprecated Usar `checkbox.checkboxPosition`. */
    checkboxPosition?: 'start' | 'end';
    /** @deprecated Usar `checkbox.checkboxListDensity`. */
    checkboxListDensity?: 'default' | 'compact';
    /** @deprecated Usar `values.hasCurrent`. */
    hasCurrent?: boolean;
    /** @deprecated Usar `events.onHandleAccept`. */
    onHandleAccept?: (selectedOptions: DropdownOption[]) => void;
    /** @deprecated Usar `slots.pill`. */
    pill?: PillSize;
    /** @deprecated Usar `list.listVariant`. */
    listVariant?: DropdownListVariant;
    /**
     * @deprecated Usar `list.searchMultiCheckbox`.
     * @example
     * ```tsx
     * <Dropdown
     *   list={{
     *     listVariant: 'search-multi-checkbox',
     *     searchMultiCheckbox: {
     *       search: { placeholder: 'Buscar plaza…' },
     *       header: { id: 'all-plazas', label: 'Todas las plazas' },
     *       showClearSelection: true,
     *     },
     *   }}
     *   multi={{ multiple: true }}
     *   items={{ options }}
     *   menuSearch={{ searchable: false }}
     * />
     * ```
     */
    searchMultiCheckbox?: DropdownSearchMultiCheckboxConfig;
    /** @deprecated Panel: usar `list.searchMultiCheckbox` o props planas internas vía fusión. */
    searchMultiCheckboxHeader?: {
        id: string;
        label: string;
    };
    /** @deprecated */
    searchMultiCheckboxShowSearch?: boolean;
    /** @deprecated */
    searchMultiCheckboxShowClearSelection?: boolean;
    /** @deprecated Usar `events.onToggleChange`. */
    onToggleChange?: (option: DropdownOption, checked: boolean) => void;
    /** @deprecated Usar `list.filtersTitle`. */
    filtersTitle?: string;
    /** @deprecated Usar `tooltip.tooltipProps`. */
    tooltipProps?: ButtonTooltipConfig;
    /** @deprecated Usar `status.loading`. */
    loading?: boolean;
}
export interface DropdownRef {
    getValue: () => string | number | (string | number)[];
    setValue: (value: string | number | (string | number)[]) => void;
    focus: () => void;
    blur: () => void;
    clear: () => void;
    open: () => void;
    close: () => void;
}
//# sourceMappingURL=dropdown.d.ts.map