VadavoElement con participación en un formulario. La extiende todo componente que lleva un valor.
Es formAssociated y adjunta sus ElementInternals en el constructor, así que el navegador lo trata como un control más del formulario que lo contiene.
La propiedad value guarda el valor, lo publica al formulario con setFormValue y lo baja al control interno a través de syncControlValue, que cada componente implementa.
El atributo value se observa además de los reflejados: cuando cambia se asigna a la propiedad, y la comparación pasa por el descriptor, de forma que sigue leyendo el valor real en un componente que lo guarde en otro sitio.
notifyInput() y notifyChange() emiten input y change compuestos, para que crucen el límite del shadow root y lleguen a quien escucha el formulario.