export interface FieldOption { id: string; name: string; order: number; } export interface FieldSchemaDef { /** InputType enum name as string: 'TEXT', 'TEXTAREA', 'SELECT', etc. */ type: string; name: string; /** * Texto de PRODUCTO: clave i18n que la app traduce. Es el camino correcto * para los formularios que define el equipo. */ labelKey?: string; /** * Texto del CLIENTE: lo escribió una organización y se muestra tal cual, sin * traducir. Regla #4 de CLAUDE.md. */ label?: string; /** @deprecated Solo para leer esquemas guardados antes de unificar. Nunca escribir. */ labelEs?: string; /** @deprecated Idem `labelEs`. */ labelEn?: string; placeholder?: string; placeholderText?: string; /** @deprecated Solo lectura de esquemas viejos. */ placeholderEs?: string; /** @deprecated Solo lectura de esquemas viejos. */ placeholderEn?: string; hint?: string; hintText?: string; noteText?: string; /** @deprecated Solo lectura de esquemas viejos. */ hintEs?: string; /** @deprecated Solo lectura de esquemas viejos. */ hintEn?: string; required: boolean; /** e.g. 'required', 'email', 'maxLength:500', 'minLength:3' */ validators?: string[]; options?: FieldOption[]; /** Id estable de la sección/paso al que pertenece el campo. Opcional. */ sectionId?: string; /** Nombre visible de la sección/paso. Lo escribe la organización, no se traduce. */ sectionLabel?: string; /** Bajada visible de la sección/paso. La escribe la organización, no se traduce. */ sectionSubtitle?: string; /** Orden de la sección/paso. */ sectionOrder?: number; /** Incremento para campos NUMBER_PICKER. */ step?: number; /** Unidad visible para campos NUMBER_PICKER. */ unitLabel?: string; /** Variante visual para campos NUMBER_PICKER. */ numberPickerVariant?: 'wheel' | 'field-stepper' | 'compact-stepper'; /** Permite escribir manualmente en NUMBER_PICKER. */ numberPickerEditable?: boolean; /** Modo de teclado para NUMBER_PICKER. */ numberPickerInputMode?: 'numeric' | 'decimal'; /** Decimales para NUMBER_PICKER. */ precision?: number; order: number; /** Initial value injected by consumers when rendering a configured form. */ value?: any; } export interface FormSchemaConfig { schemaId: string; schemaVersion?: string; /** Título del formulario, escrito por la organización: no se traduce. */ label?: string; /** @deprecated Solo para leer configuraciones previas a la unificación. */ labelEs?: string; /** @deprecated Idem `labelEs`. */ labelEn?: string; canonicalMap?: Record; fieldSchema: FieldSchemaDef[]; } export interface CanonicalFieldAliases { [canonicalName: string]: string[]; } export declare const DEFAULT_CANONICAL_FIELD_ALIASES: CanonicalFieldAliases;