import { Box, Cable, Database, Sparkles } from 'lucide-react' import { cn, RadioGroupStacked, RadioGroupStackedItem, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Switch, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { MultiSelector, MultiSelectorContent, MultiSelectorItem, MultiSelectorList, MultiSelectorTrigger, } from 'ui-patterns/multi-select' import type { ConnectMode, FieldOption, ResolvedField } from './Connect.types' import { ConnectionIcon } from './ConnectionIcon' const MODE_ICONS: Record = { framework: , direct: , orm: , mcp: , } interface ConnectConfigSectionProps { activeFields: ResolvedField[] state: Record onFieldChange: (fieldId: string, value: string | boolean | string[]) => void getFieldOptions: (fieldId: string) => FieldOption[] } export function ConnectConfigSection({ activeFields, state, onFieldChange, getFieldOptions, }: ConnectConfigSectionProps) { if (activeFields.length === 0) return null return (
{activeFields.map((field) => { const options = getFieldOptions(field.id) const value = state[field.id] // Skip fields with no options (or single option that's auto-selected) // Exception: switch and multi-select fields don't require options if (field.type !== 'switch' && field.type !== 'multi-select') { if (options.length === 0) return null if (options.length === 1) return null } switch (field.type) { case 'radio-grid': return ( onFieldChange(field.id, v)} className="flex-row gap-3 space-y-0" > {options.map((option) => (
{option.icon && } {option.label}
))}
) case 'radio-list': return ( onFieldChange(field.id, v)} > {options.map((option) => (
{option.icon && } {option.label}
{option.description && ( {option.description} )}
))}
) case 'select': return ( ) case 'switch': return ( onFieldChange(field.id, v)} /> ) case 'multi-select': return ( onFieldChange(field.id, v)} > {options.map((option) => (
{option.label} {option.description && ( {option.description} )}
))}
) default: return null } })}
) } interface ModeSelectorProps { modes: Array<{ id: ConnectMode; label: string; description: string }> selected: ConnectMode onChange: (mode: ConnectMode) => void } export function ModeSelector({ modes, selected, onChange }: ModeSelectorProps) { return (
{modes.map((mode) => ( ))}
) }