export type FieldType = | 'text' | 'email' | 'select' | 'checkbox' | 'wysiwyg' | 'date' | 'tel' | 'textarea' | 'submit'; interface BaseField { fieldKey?: string; type: FieldType; fieldName: string; label: string; required: boolean; removable: boolean; defaultValue?: string | boolean | string[] | number; } export interface TextField extends BaseField { type: 'text' | 'email' | 'tel' | 'date' | 'textarea'; placeholder: string; } export type OptionItem = string; export interface SelectField extends BaseField { type: 'select'; options: OptionItem[] | []; } export interface CheckboxField extends BaseField { type: 'checkbox'; } export interface WysiwygField extends BaseField { type: 'wysiwyg'; value: string; } export interface SubmitField extends BaseField { type: 'submit'; } export type BuilderField = | TextField | SelectField | CheckboxField | WysiwygField | SubmitField; export type FieldKey = | 'fname' | 'lname' | 'email' | 'date_of_birth' | 'submit' | 'phone' | 'country' | 'street_address' | 'city' | 'postal_code' | 'accept_tos' | 'legal' | 'comments' | 'name' | 'consent' | 'submitted_at'; export type BuilderFieldMap = Record; export interface FormBuilderContextValue { formBuilderFields: BuilderFieldMap; updateFormBuilderFields: (key: string, value: BuilderField) => void; builderEditScreen: string; setBuilderEditScreen: React.Dispatch>; removeFormBuilderField: (key: string) => void; addFormBuilderField: (id: string, field: BuilderField) => void; fieldOrder: string[]; setFieldOrder: React.Dispatch>; } export interface FormBuilderContextProviderProps { children: React.ReactNode; } export type FieldOrderItems = string[];