import Joi from 'joi'; import { BaseField } from './base-field'; import { StringOrTranslations } from '../string-or-translations'; declare const schema: (apiVersion: number) => Joi.AlternativesSchema; interface ValueOption { text: StringOrTranslations; value: T; } interface SharedBaseFieldConfiguration { /** * key used to store the field value * @pattern ^[a-z][a-zA-Z\d]*$ */ key: string; /** * name of the field to be shown in UI */ name: StringOrTranslations; /** * show this field in UI only if value of an earlier form field, identified by provided `key`, is * equal to provided `value` */ showIf?: { key: string; value: string | boolean | number; }; hint?: StringOrTranslations; } interface SharedBaseFieldConfigurationWithPrefix extends SharedBaseFieldConfiguration { prefix?: StringOrTranslations; suffix?: StringOrTranslations; } interface FieldConfigurationStringText extends SharedBaseFieldConfigurationWithPrefix { inputType: 'text' | 'textarea'; type: 'string'; defaultValue?: string; regex?: string; } interface FieldConfigurationStringSelect extends SharedBaseFieldConfigurationWithPrefix { inputType: 'select'; type: 'string'; defaultValue?: string; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationStringRadio extends SharedBaseFieldConfiguration { inputType: 'radio'; type: 'string'; initialValue?: string; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationNumberText extends SharedBaseFieldConfigurationWithPrefix { inputType: 'text'; type: 'number' | 'integer'; defaultValue?: number; lowerbound?: number; upperbound?: number; } interface FieldConfigurationNumberSelect extends SharedBaseFieldConfigurationWithPrefix { inputType: 'select'; type: 'number' | 'integer'; defaultValue?: number; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationNumberRadio extends SharedBaseFieldConfiguration { inputType: 'radio'; type: 'number' | 'integer'; initialValue?: number; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationBooleanSwitch extends SharedBaseFieldConfiguration { inputType: 'switch'; type: 'boolean'; initialValue?: boolean; } interface FieldConfigurationBooleanCheckbox extends SharedBaseFieldConfiguration { inputType: 'checkbox'; type: 'boolean'; initialValue?: boolean; } interface FieldConfigurationBooleanSelect extends SharedBaseFieldConfigurationWithPrefix { inputType: 'select'; type: 'boolean'; defaultValue?: boolean; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationBooleanRadio extends SharedBaseFieldConfiguration { inputType: 'radio'; type: 'boolean'; initialValue?: boolean; /** * @minItems 1 */ valueOptions: ValueOption[]; } interface FieldConfigurationFile extends SharedBaseFieldConfiguration { inputType: 'file'; } interface FieldConfigurationFiles extends SharedBaseFieldConfiguration { inputType: 'files'; } interface FieldConfigurationHashIdSelect extends SharedBaseFieldConfiguration { inputType: 'pinGroupHashId' | 'pinHashId'; type: 'hashId'; } type BaseFieldConfiguration = FieldConfigurationStringText | FieldConfigurationStringSelect | FieldConfigurationStringRadio | FieldConfigurationNumberText | FieldConfigurationNumberSelect | FieldConfigurationNumberRadio | FieldConfigurationBooleanSwitch | FieldConfigurationBooleanCheckbox | FieldConfigurationBooleanSelect | FieldConfigurationBooleanRadio | FieldConfigurationFile | FieldConfigurationFiles | FieldConfigurationHashIdSelect; type BaseFieldConfigurations = BaseFieldConfiguration[]; export { schema, BaseFieldConfiguration, BaseFieldConfigurations, ValueOption, };