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; 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; /** * 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, 'size' | 'onChange' | 'value' | 'defaultValue' | 'list'> { field?: Partial; tooltip?: Partial; slots?: Partial; items?: Partial; values?: Partial; menuSearch?: Partial; multi?: Partial; popover?: Partial; checkbox?: Partial; list?: Partial; events?: Partial; status?: Partial; /** @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 * * ``` */ 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