import type { ReactNode } from "react"; /** * Base option type used by select fields */ export interface SelectOption { value: string; label: string; } /** * Back button configuration used by step components */ export interface BackButtonConfig { text: string; onClick: () => void; } export interface SingleSelectFieldProps { /** Array of options to display */ options: SelectOption[]; /** Currently selected value */ value: string; /** Called when selection changes */ onChange: (value: string) => void; /** Accessible label for the radio group */ ariaLabel?: string; /** Whether the field is disabled */ disabled?: boolean; } export interface IconOption { /** Unique identifier */ id: string; /** Display name */ name: string; /** Icon or logo - can be a ReactNode */ icon?: ReactNode; /** Optional description text */ description?: string; } export interface IconSelectFieldProps { /** Array of options to display */ options: IconOption[]; /** Currently selected option IDs */ selectedIds: string[]; /** Called when selection changes */ onChange: (selectedIds: string[]) => void; /** Selection mode: single or multiple */ selectionMode?: "single" | "multiple"; /** * How to display the icon/image/logo: * - 'boxed': White background with border (default, good for icons) * - 'plain': No container, renders directly (good for logos/images) */ iconStyle?: "boxed" | "plain"; /** Size of the icon container (default: 'md') */ iconSize?: "sm" | "md" | "lg"; /** Accessible label */ ariaLabel?: string; /** Whether the field is disabled */ disabled?: boolean; } export interface ProductCategory { id: string; title: string; subcategories: string[]; } export interface ProductSelectFieldProps { /** Array of product categories to display */ categories: ProductCategory[]; /** Currently selected category IDs */ selectedIds: string[]; /** Called when selection changes */ onChange: (selectedIds: string[]) => void; /** Accessible label */ ariaLabel?: string; /** Whether the field is disabled */ disabled?: boolean; } export interface TextInputFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the input */ label: string; /** Placeholder text */ placeholder?: string; /** Optional description/helper text */ description?: string; /** Field type: 'text' for input, 'select' for dropdown */ fieldType?: "text" | "select"; /** Input type (text, email, url, etc.) */ type?: "text" | "email" | "url" | "tel"; /** Options for select fields */ options?: SelectOption[]; /** Whether the field is required */ required?: boolean; /** Current value */ value: string; /** Called when value changes */ onChange: (value: string) => void; /** Called on blur */ onBlur?: () => void; /** Error message to display */ error?: string; /** Whether the field has been touched */ touched?: boolean; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface TextareaFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the textarea */ label: string; /** Placeholder text */ placeholder?: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Current value */ value: string; /** Called when value changes */ onChange: (value: string) => void; /** Called on blur */ onBlur?: () => void; /** Error message to display */ error?: string; /** Whether the field has been touched */ touched?: boolean; /** Number of visible rows */ rows?: number; /** Maximum character length */ maxLength?: number; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface ScaleInputFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the input */ label: string; /** Optional description text */ description?: string; /** Minimum value */ min: number; /** Maximum value */ max: number; /** Step increment */ step?: number; /** Current value */ value: number; /** Called when value changes */ onChange: (value: number) => void; /** Unit label (e.g., "requests/mo", "GB") */ unit?: string; /** Custom value formatter */ formatValue?: (value: number) => string; /** Whether to show a slider */ showSlider?: boolean; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface CardOption { /** Unique identifier */ id: string; /** Display name */ name: string; /** Icon or logo - can be a ReactNode */ icon?: ReactNode; /** Optional description text */ description?: string; /** Optional badge text (e.g., "Popular", "New") */ badge?: string; /** Optional dropdown options for this card */ dropdown?: { label: string; placeholder?: string; options: { value: string; label: string; }[]; defaultValue?: string; }; } export interface CardGridConfig { selectedId: string; dropdownValues: Record; } export interface CardGridFieldProps { /** Array of card options to display */ options: CardOption[]; /** Currently selected option id */ selectedId: string; /** Current dropdown values */ dropdownValues: Record; /** Called when selection or dropdown changes */ onChange: (config: CardGridConfig) => void; /** Number of columns in the grid */ columns?: 1 | 2 | 3 | 4; /** Card layout orientation */ layout?: "vertical" | "horizontal"; /** Accessible label */ ariaLabel?: string; /** Whether the field is disabled */ disabled?: boolean; } export interface MultiSelectOption { value: string; label: string; disabled?: boolean; } export interface MultiSelectFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the multi-select */ label: string; /** Placeholder text when no values selected */ placeholder?: string; /** Search input placeholder */ searchPlaceholder?: string; /** Message shown when no options match search */ emptyMessage?: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Available options */ options: MultiSelectOption[]; /** Currently selected values */ value: string[]; /** Called when selection changes */ onChange: (value: string[]) => void; /** Minimum number of selections required */ minSelections?: number; /** Maximum number of selections allowed */ maxSelections?: number; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; /** Error message to display */ error?: string; /** Whether the field has been touched */ touched?: boolean; } export interface DropdownOption { value: string; label: string; disabled?: boolean; } export interface DropdownOptionGroup { label: string; options: DropdownOption[]; } export interface DropdownFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the dropdown */ label: string; /** Placeholder text when no value selected */ placeholder?: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Options (flat array or grouped) */ options: DropdownOption[] | DropdownOptionGroup[]; /** Current value */ value: string; /** Called when value changes */ onChange: (value: string) => void; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface BooleanFieldProps { /** Unique identifier for the field */ id: string; /** Label/question text */ label: string; /** Optional description/helper text */ description?: string; /** * Display mode: * - 'toggle': Checkbox in a card (for enabling/disabling features) * - 'yesno': Styled card buttons (for prominent yes/no choices) * - 'radio': Simple radio buttons (for compact yes/no questions) */ mode?: "toggle" | "yesno" | "radio"; /** Current value */ value: boolean; /** Called when value changes */ onChange: (value: boolean) => void; /** Whether this field is required to be true */ requiredTrue?: boolean; /** Custom yes label */ yesLabel?: string; /** Custom no label */ noLabel?: string; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface UploadedFile { id: string; file: File; preview?: string; progress: number; status: "uploading" | "success" | "error"; error?: string; } export interface FileUploadFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the upload area */ label: string; /** Optional description/helper text */ description?: string; /** Accepted file types */ accept?: string; /** Maximum file size in bytes */ maxSize?: number; /** Maximum number of files allowed */ maxFiles?: number; /** Whether at least one file is required */ required?: boolean; /** Custom drop zone title text */ dropZoneTitle?: string; /** Custom drop zone subtitle text */ dropZoneSubtitle?: string; /** Current uploaded files */ files: UploadedFile[]; /** Called when files are added */ onChange: (files: FileList) => void; /** Called when a file is removed */ onRemove: (fileId: string) => void; /** Whether to show file size */ showFileSize?: boolean; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; /** Error message */ error?: string; } export interface TeamRole { value: string; label: string; description?: string; } export interface TeamMember { email: string; role: string; } export interface TeamInviteFieldProps { /** Current team members */ members: TeamMember[]; /** Available roles */ roles: TeamRole[]; /** Errors by index */ errors?: Record; /** Called when members change */ onChange: (members: TeamMember[]) => void; /** Called when add button is clicked */ onAdd: () => void; /** Called when remove button is clicked */ onRemove: (index: number) => void; /** Maximum number of invites allowed */ maxInvites?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface DatePickerFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the date picker */ label: string; /** Placeholder text when no date selected */ placeholder?: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Current value */ value: Date | undefined; /** Called when value changes */ onChange: (value: Date | undefined) => void; /** Minimum selectable date */ minDate?: Date; /** Maximum selectable date */ maxDate?: Date; /** Array of specific dates to disable */ disabledDates?: Date[]; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; /** Error message */ error?: string; /** Whether the field has been touched */ touched?: boolean; } export type { DateRange } from "react-day-picker"; export interface DateRangeFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the date range picker */ label: string; /** Placeholder text when no dates selected */ placeholder?: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Current value (from react-day-picker DateRange type) */ value: { from: Date | undefined; to?: Date | undefined; } | undefined; /** Called when value changes */ onChange: (value: { from: Date | undefined; to?: Date | undefined; } | undefined) => void; /** Minimum selectable date */ minDate?: Date; /** Maximum selectable date */ maxDate?: Date; /** Array of specific dates to disable */ disabledDates?: Date[]; /** Number of months to display (default: 2) */ numberOfMonths?: number; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; /** Error message */ error?: string; /** Whether the field has been touched */ touched?: boolean; } export interface SummaryItem { /** Label for the item */ label: string; /** Value to display */ value: string | string[] | ReactNode; /** Optional icon */ icon?: ReactNode; } export interface SummarySection { /** Section title */ title: string; /** Icon for the section */ icon?: ReactNode; /** Items in this section */ items: SummaryItem[]; /** Optional edit action */ onEdit?: () => void; } export interface SummaryDisplayProps { /** Sections to display */ sections: SummarySection[]; } export interface NextStep { /** Title of the next step */ title: string; /** Description of what this step involves */ description?: string; /** Icon to display (ReactNode) */ icon?: ReactNode; /** Action button text */ actionText?: string; /** Action to perform when clicked */ onAction?: () => void; /** Whether this step is optional */ optional?: boolean; } export interface SuccessDisplayProps { /** Title displayed at the top */ title?: string; /** Main success message */ message?: string; /** Optional icon to display */ icon?: ReactNode; /** Array of next steps to display */ nextSteps?: NextStep[]; } export interface Region { value: string; label: string; multiplier: number; } export interface CloudProvider { id: string; name: string; icon?: ReactNode; regions: Region[]; basePrice: number; } export interface InfrastructureConfig { cloudProvider: string; region: string; storageVolume: number; compression: boolean; activeHours: number; } export interface InfrastructureFieldProps { /** Array of cloud providers to choose from */ cloudProviders: CloudProvider[]; /** Current configuration */ config: InfrastructureConfig; /** Called when configuration changes */ onChange: (config: InfrastructureConfig) => void; /** Storage volume limits */ storageMin?: number; storageMax?: number; storageStep?: number; /** Active hours limits */ hoursMin?: number; hoursMax?: number; hoursStep?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface VaultIntegration { /** Integration name */ name: string; /** URL to the integration logo */ logoUrl?: string; } export interface VaultFieldConfig { /** Unique key for the field */ key: string; /** Label displayed above the input */ label: string; /** Placeholder text */ placeholder?: string; /** Whether the field is required */ required?: boolean; /** Input type - defaults to 'password' for security */ type?: "text" | "password"; } export interface VaultFieldProps { /** Integration info (name and optional logo) */ integration?: VaultIntegration; /** Title override when no integration provided */ title?: string; /** Array of field configurations (1-6 fields) */ fields: VaultFieldConfig[]; /** Current field values */ values: Record; /** Called when any field value changes */ onChange: (values: Record) => void; /** Called when save button is clicked */ onSave: () => void | Promise; /** Called when cancel button is clicked */ onCancel: () => void; /** Whether save is in progress */ loading?: boolean; /** Whether the field is disabled */ disabled?: boolean; /** Index for stagger animation */ animationIndex?: number; } export interface CodeSnippetFieldProps { /** Optional title displayed above the code block */ title?: string; /** Optional description/helper text */ description?: string; /** The code to display */ code: string; /** Programming language for syntax highlighting */ language?: string; /** Whether to show line numbers */ showLineNumbers?: boolean; /** Whether to show the copy button */ showCopyButton?: boolean; /** Custom copy button text */ copyButtonText?: string; /** Custom copied confirmation text */ copiedText?: string; /** Index for stagger animation */ animationIndex?: number; } export interface RadioGroupOption { /** Unique value for the option */ value: string; /** Display label */ label: string; /** Optional description below the label */ description?: string; /** Whether this option is disabled */ disabled?: boolean; } export interface RadioGroupFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the radio group */ label: string; /** Optional description/helper text */ description?: string; /** Whether the field is required */ required?: boolean; /** Available options */ options: RadioGroupOption[]; /** Currently selected value */ value: string; /** Called when selection changes */ onChange: (value: string) => void; /** Orientation of the radio items */ orientation?: "vertical" | "horizontal"; /** Error message to display */ error?: string; /** Whether the field has been touched */ touched?: boolean; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } export interface RangeSliderFieldProps { /** Unique identifier for the field */ id: string; /** Label displayed above the slider */ label: string; /** Optional description/helper text */ description?: string; /** Minimum allowed value */ min: number; /** Maximum allowed value */ max: number; /** Step increment */ step?: number; /** Current value [min, max] */ value: [number, number]; /** Called when value changes */ onChange: (value: [number, number]) => void; /** Unit label (e.g., "$", "GB", "users") */ unit?: string; /** Position of unit: 'prefix' ($100) or 'suffix' (100 GB) */ unitPosition?: "prefix" | "suffix"; /** Custom value formatter */ formatValue?: (value: number) => string; /** Whether to show min/max labels on the track */ showMinMax?: boolean; /** Index for stagger animation */ animationIndex?: number; /** Whether the field is disabled */ disabled?: boolean; } //# sourceMappingURL=fields.d.ts.map