import type { Viewport } from '../Viewport.js'; import { type Props as ViewProps, View } from '../View.js'; import { Container } from '../Container.js'; import { Size } from '../geometry.js'; import { type MouseEvent } from '../events/index.js'; import { System } from '../System.js'; type Choices = [string, T][]; interface SharedProps extends ViewProps { choices: Choices; title?: string; } type SelectMultipleFn = (value: T[]) => void; type SelectOneFn = (value: T) => void; interface SelectMultiple { selected: readonly T[]; onSelect?: SelectMultipleFn; } interface SelectOne { selected?: T; onSelect?: SelectOneFn; } type Props = SharedProps & (M extends true ? SelectMultiple : SelectOne); type ConstructorProps = Props & { multiple?: M; }; export declare class Dropdown extends View { #private; dropdownSelector: DropdownSelector; constructor({ multiple, ...props }: ConstructorProps); update(props: Props): void; get choices(): Choices; set choices(choices: Choices); dismissModal(): void; get selected(): M extends true ? () => T[] : T | undefined; set selected(selected: M extends true ? T[] : T | undefined); naturalSize(_available: Size): Size; receiveMouse(event: MouseEvent, system: System): void; render(viewport: Viewport): void; } interface SelectorProps extends SharedProps { onSelect(): void; selected: number[]; multiple: boolean; } declare class DropdownSelector extends Container { #private; constructor({ choices, selected, multiple, onSelect, ...viewProps }: SelectorProps); get selectedRows(): number[]; set selectedRows(rows: number[]); get selectedText(): string[] | undefined; get selectedValue(): T | undefined; get selectedValues(): T[]; get choices(): [string, T][]; /** * Sets new choices, preserving the previously selected items. */ set choices(choices: SharedProps['choices']); renderItem(choice: T, row: number): View; render(viewport: Viewport): void; } export {};