import type React from 'react'; /** Minimal bot shape shared by the group picker (`GroupBot`) and the * create-session picker (`PickerBot`): both carry `larkAppId` + a display name. */ export interface BotMultiSelectOption { larkAppId: string; botName?: string; } /** * Searchable, scrollable multi-select for bots. Fully controlled: the caller * owns the `selected` Set and toggles via `onToggle`, and MUST read the final * selection from that Set — never from the DOM. * * Why the caller state is the only source of truth: the list renders only the * rows matching the current search query; rows filtered out are unmounted, so * their checkboxes leave the DOM entirely. A caller that harvested the checked * ids via `FormData.getAll(...)` at submit time would silently drop any bot * that was selected earlier but is not matching the search box at that moment. * `selected` survives filtering; the DOM does not. * * The list area has a fixed max-height and scrolls internally, so a long roster * (dozens of bots) never grows the surrounding dialog past the viewport — the * dialog's own action buttons stay reachable. */ export declare function BotMultiSelect(props: { bots: BotMultiSelectOption[]; selected: Set; onToggle(larkAppId: string, checked: boolean): void; searchPlaceholder: string; noMatchLabel: string; emptyLabel: string; selectedCountLabel(n: number): string; }): React.JSX.Element; //# sourceMappingURL=bot-multi-select.d.ts.map