import { Ref } from 'vue'; export type FormFieldType = 'text' | 'textarea' | 'richtext' | 'markdown' | 'number' | 'date' | 'email' | 'phone' | 'url' | 'select' | 'radio' | 'checkbox' | 'toggle' | 'file' | 'signature' | 'range' | 'color' | 'json' | 'heading' | 'divider'; export interface SelectOption { label: string; value: string; } export interface FormFieldValidation { minLength?: number; maxLength?: number; min?: number; max?: number; step?: number; pattern?: string; options?: SelectOption[]; } export interface FormField { id: string; key: string; type: FormFieldType; label: string; placeholder?: string; description?: string; required?: boolean; colSpan?: number; colStart?: number; rowSpan?: number; rowStart?: number; mColSpan?: number; mColStart?: number; mRowSpan?: number; mRowStart?: number; hideLabel?: boolean; richTextVariant?: 'full' | 'basic' | 'simple'; markdownShowFormatting?: boolean; textareaRows?: number; textareaAutoHeight?: boolean; numberLayout?: 'default' | 'vertical' | 'horizontal'; numberSpinner?: boolean; phoneOnlyCountries?: string; selectMultiselect?: boolean; fileMultiple?: boolean; fileHeight?: number; fileAccept?: string; fileTheme?: 'dropzone' | 'basic'; fileShowIcon?: boolean; fileIcon?: string; dateEnableTime?: boolean; dateMin?: string; dateMax?: string; rangeMulti?: boolean; radioThin?: boolean; radioHideRadio?: boolean; radioAlign?: 'start' | 'center' | 'end'; textIcon?: string; textIconStart?: string; validation?: FormFieldValidation; defaultValue?: any; content?: string; } export interface JSONSchemaProperty { type?: string; title?: string; description?: string; format?: string; enum?: any[]; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; multipleOf?: number; default?: any; 'x-col-span'?: number; 'x-col-start'?: number; 'x-row-span'?: number; 'x-row-start'?: number; 'x-m-col-span'?: number; 'x-m-col-start'?: number; 'x-m-row-span'?: number; 'x-m-row-start'?: number; 'x-field-type'?: FormFieldType; 'x-placeholder'?: string; 'x-options'?: SelectOption[]; 'x-rich-text-variant'?: 'full' | 'basic' | 'simple'; 'x-textarea-rows'?: number; 'x-textarea-autoheight'?: boolean; 'x-number-layout'?: 'default' | 'vertical' | 'horizontal'; 'x-number-spinner'?: boolean; 'x-phone-only-countries'?: string; 'x-select-multiselect'?: boolean; 'x-file-multiple'?: boolean; 'x-file-height'?: number; 'x-file-accept'?: string; 'x-file-theme'?: 'dropzone' | 'basic'; 'x-file-show-icon'?: boolean; 'x-file-icon'?: string; 'x-date-enable-time'?: boolean; 'x-date-min'?: string; 'x-date-max'?: string; 'x-range-multi'?: boolean; 'x-radio-thin'?: boolean; 'x-radio-hide-radio'?: boolean; 'x-radio-align'?: 'start' | 'center' | 'end'; 'x-text-icon'?: string; 'x-text-icon-start'?: string; 'x-hide-label'?: boolean; 'x-markdown-show-formatting'?: boolean; } export interface JSONSchemaObject { $schema?: string; type: 'object'; properties?: Record; required?: string[]; 'x-dynamic-height'?: boolean; } export declare function defaultRowSpan(type: FormFieldType): number; export declare function inferFieldType(prop: JSONSchemaProperty): FormFieldType; export declare function schemaToFields(schema: JSONSchemaObject | undefined): FormField[]; export declare function fieldsToSchema(fields: FormField[], options?: { dynamicHeight?: boolean; }): JSONSchemaObject; export declare function initFormData(fields: FormField[], existing?: Record): Record; export declare function validateFormData(fields: FormField[], data: Record): Record; export declare function useSchemaToFields(schema: Ref): { fields: import('vue').ComputedRef; }; //# sourceMappingURL=schema-fields.d.ts.map