Soporte multilenguaje del CONTENIDO a la field-langs, todo detras de la prop
`languages` (retrocompatible: sin ella, `value` sigue siendo PalabrasDocument).
Contrato:
- value: PalabrasDocument | Record<LangCode, PalabrasDocument>
- languages: LangSpec[] (presencia = modo multi; 1o = activo por defecto)
- requiredLangs: LangCode[] (validez; renombrado por colision con `required`)
- activeLang bindable + onLangChange; onValueChange sobre la union.
Provider:
- historia POR IDIOMA (langHistories): cambiar de idioma nunca cruza pilas de
undo; el activo es this.history, los inactivos en el mapa; seed en construccion
desde un snapshot del value map.
- writeExternalValue escribe el mapa ENTERO (raw) en multi; proxy-safe.
- syncExternalState resuelve el doc activo del value (doc|map).
- api: multilingual, languages, activeLang, setActiveLang, missingRequiredLangs,
langFilled; requiredLangs alimenta isInvalid.
Tests: 5 nuevos (modo+default · switch+writeback · historia por idioma ·
requiredLangs→validez · mono retrocompatible). 58/58 provider. check 0 en palabras.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>