import { FC } from 'react'; import { LucideIcon } from 'lucide-react'; import { AssistantModeConfig } from '../../conversation'; import { AssistantMode, BuiltInAssistantMode } from '../../types'; interface Props { mode: AssistantMode; /** Role-filtered list of modes the user may pick (admin-gated modes removed). */ availableModes: AssistantModeConfig[]; onModeChange: (mode: AssistantMode) => void; disabled?: boolean; } /** * Per-mode presentation metadata: the icon, and the shared English name used * when a product's `label` is empty ('Ask' / 'Take action'), while the mode ID * stays the transport-level value ('general' / 'api-calls' / 'vibe-plugins'). * * ★ `i18nKey` is NOT the key the pill requests — that is `mode.`, below. * Nothing passes `i18nKey` to a translator; it is kept only because this table * is published. Seed from `i18nManifest.ts`, never from this field. */ export declare const ASSISTANT_MODE_META: Record; /** * The icon and empty-label fallback for ANY offered mode. * * ★ A product-declared mode has no row in `ASSISTANT_MODE_META` — shared code * names no product's modes — so indexing the table with its id yields undefined * and `meta.icon` would throw inside render. It is presented by what it does * instead: a mode that produces artifacts looks like Build, anything else like * Ask. */ export declare function assistantModeMeta(modeConfig: { id: AssistantMode; producesArtifacts?: boolean; }): { fallback: string; icon: LucideIcon; }; /** * Where an arrow/Home/End keypress should move within a roving group. * * Extracted and exported so the wrap-around arithmetic — including the * `currentIndex === -1` case, which means "focus is not on any pill yet" — is * unit-testable in a repo whose test environment has no DOM. Returns null when * the key is not one this group handles. */ export declare function nextModeIndex(key: string, currentIndex: number, lastIndex: number): number | null; /** * Segmented "pill" mode selector shown BELOW the composer input (per the v2 * mockups): the active mode is a filled forest-green pill, the others are * ghosted outlines. Replaces the old dropdown trigger. HB semantic tokens only. * * Exposed as a **radiogroup**, not a tablist: these pills pick one option, they * do not reveal panels, and a `role="tab"` with no `tabpanel` misdescribes the * control to a screen reader. Focus roves — one Tab stop for the group, arrow * keys to move between pills — which is what the radio pattern requires and * what a keyboard user expects from a segmented control. */ export declare const AssistantModeSelector: FC; export {}; //# sourceMappingURL=AssistantModeSelector.d.ts.map