ElementInternals
A API que permite a um elemento customizado se comportar como um elemento nativo de verdade, e não como uma div disfarçada.
Três coisas se tornam possíveis. Associação a formulários: setFormValue() faz o valor do componente ser enviado com o formulário, e setValidity() o conecta à validação de restrições comum, de modo que :invalid e as mensagens de erro funcionam — antes isso exigia um elemento input escondido por trás. Acessibilidade: papel e propriedades ARIA são definidos no objeto internals, e não como atributos, o que os torna padrões que o autor da página pode sobrescrever, em vez de atributos brigando com o autor. E estados customizados via internals.states, expostos ao CSS como :state(loading). Amplamente suportada desde 2023.