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; /** @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[]; order: number; /** Initial value injected by consumers when rendering a configured form. */ value?: string; } 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;