Gutenberg 23.7: Galeria dinâmica, estilos globais e correções no editor
O Gutenberg 23.7 já está disponível e concentra-se sobretudo em corrigir fricções no editor de blocos, sem deixar de acrescentar opções úteis para quem desenvolve temas, blocos e interfaces. A versão está a refinar o modo dinâmico da Galeria, os estilos globais, a edição responsiva e vários componentes reutilizáveis.
Podes experimentar a versão no WordPress Playground ou descarregar o plugin Gutenberg.
Ajustes visuais no editor de blocos
Grande parte do ciclo 23.7 esteve a corrigir detalhes de disposição e interação que se tornam evidentes durante a edição. Os blocos flutuantes deixam de se sobrepor a blocos sticky, e o adicionador de bloco vazio passa a aparecer na posição certa dentro de blocos que capturam a própria barra de ferramentas.
O bloco Citação destacada respeita agora a altura de linha personalizada no editor, ficando a pré-visualização alinhada com o front end. As pré-visualizações de dispositivo para telemóvel e tablet voltam também a usar alturas fixas.

Modo dinâmico da Galeria passa a usar «Separar»
O modo dinâmico do bloco Galeria, introduzido no Gutenberg 23.6, tinha um botão de barra de ferramentas chamado «Converter em imagens», cuja consequência não era suficientemente clara. Esse comando chama-se agora «Separar» e abre uma janela modal que explica o que acontece às imagens antes de confirmares a ação.
A conversão do modo dinâmico para imagens passa ainda a ocupar apenas um nível do histórico de desfazer. Esta alteração está a tornar a reversão da operação mais previsível.


Estilos globais, LaTeX e controlos de formulário
A interface de herança de Estilos globais é agora experimental e exige ativação explícita na página de Experiências do Gutenberg. Quando está ativa, os valores de estilos globais herdados passam a refletir-se nos controlos do inspetor de blocos; os estilos de elementos de ligação também são resolvidos nesse inspetor para blocos que são ligações.
No bloco Matemática, a introdução de LaTeX usa ValidatedTextareaControl. Os erros de análise deixam de interromper a escrita a cada tecla: o feedback só surge quando o campo perde o foco pela primeira vez, e deixa de haver um anúncio ao leitor de ecrã por cada carácter introduzido.
Os componentes Combobox, Select e SelectControl recebem os subcomponentes Group e GroupLabel, permitindo compor opções agrupadas de forma consistente nas famílias de controlos com lista emergente. A biblioteca de componentes acrescenta ainda o primitivo Autocomplete.Row; SearchControl só apresenta o sufixo quando este existe; e os campos numéricos escondem os controlos nativos de incremento e decremento.
Melhorias e alterações de API
A versão permite substituir a cor do anel de foco em outset-ring__focus. O painel de widgets mede o encaixe do cabeçalho e documenta o chrome, enquanto os Widget Primitives passam a ser distribuídos como módulo de script.
No DataViews e na Biblioteca de tipos de letra, os campos de pesquisa passam a ter largura fixa para evitar alterações de disposição. O DataViewsPicker permite selecionar intervalos com Shift+clique nas disposições tabela, grelha e atividade, e o componente sandbox aceita a propriedade sandbox.
O bloco Índice recebe cobertura end-to-end do fluxo de utilizador. O editor acrescenta a definição responsiveEditingEnabled, que permite esconder a opção de estilos responsivos; a Biblioteca de tipos de letra alinha o tamanho de letra do seletor de páginas com o DataViews; e a gestão partilhada de predefinições é extraída das sombras e dos tamanhos de letra.
Na colaboração em tempo real (RTC), a Edição rápida fica desativada enquanto uma publicação está a ser editada. A configuração de vistas atualiza o respetivo versionamento de API e passa a rejeitar merges com formas incompatíveis, a definir a semântica de arrays vazios e a remover valores null dos membros acrescentados. A função createInterpolateElement passa a lidar corretamente com etiquetas de fecho sem correspondência.
Correções no bloco de biblioteca
O renderizador render_block_core_video() passa a considerar etiquetas VIDEO que não estejam em minúsculas. Nos blocos Cobertura e Acordeão, a tecla Enter permite sair; no bloco Lista, a indentação preserva o tipo de lista ordenada; e o bloco Ligações sociais corrige uma etiqueta de fecho excedentária no ícone Tumblr.
O editor multimédia mostra um estado de carregamento enquanto o ficheiro recortado está a carregar. A conversão de GIF animados longos deixa de poder bloquear o upload: para gerar saídas estáticas, descodifica-se apenas o primeiro fotograma. A flag redundante __heicUploadSupport é eliminada e os modelos multimédia deixam de forçar crossorigin nas etiquetas IMG.
No bloco Navegação, a interface de ligações volta a mostrar «Adicionar bloco» dentro de partes de modelo; no bloco Playlist, o rótulo do botão da barra de ferramentas fica mais curto; e o rótulo de «Desvio» no bloco Ciclo de consulta recebe contexto de tradução. O bloco Matemática, a Galeria dinâmica e a Citação destacada beneficiam das correções já descritas.
Edição, seleção e colaboração
O editor corrige a posição do cursor ao eliminar para a frente blocos vazios. A seleção de blocos pode estender-se com Shift+setas quando não existe seleção nativa; Shift+clique passa a ser identificado como gesto de multisseleção; e mover o cursor dentro de blocos mais altos do que a janela deixa de fazer a página deslocar-se.
O texto rico deixa de aplicar transformações de entrada sem onReplace e corrige um crash no manipulador de colagem ao colar ficheiros. A remoção de tabIndex dos elementos editáveis volta a permitir selecionar intervalos com Shift+clique, e a leitura do atributo contentEditable em ownsSelection evita um cálculo forçado de disposição. A versão também tenta corrigir uma regressão de desempenho ao escrever.
No RTC, a sincronização de blocos controlados deixa de intercetar a ação de desfazer, a serialização é compactada e as alterações não guardadas de colaboradores são preservadas quando outro utilizador guarda. O código de colaboração em tempo real passa para lib/experimental/collaboration.
O editor deixa o desfazer a cargo do navegador nos campos que já gerem o próprio histórico. Nas notas, o bloco de destino é capturado antes de guardar uma nota de bloco, o formato de nota em linha é registado na importação, o sucesso de gravação é reportado de forma consistente, a seleção da barra lateral sincroniza-se com o marcador sob o cursor e o destaque por passagem do rato é cancelado quando o foco abandona uma conversa.
A janela de bloqueio de publicação deixa de mudar indevidamente para «Outra pessoa assumiu o controlo» para quem não pode editar. As meta boxes alinham os estilos dos títulos com os painéis do Gutenberg, os avisos usam ThemeProvider com raio de canto zero e, em iOS, é removido o hack de saltos e acrescentado o comportamento typewriter.
Estilos, acessibilidade e desempenho
Os painéis de Estilos globais corrigem a predefinição gravada e mostrada quando duas predefinições de cor partilham o mesmo hexadecimal. O GradientPicker passa a selecionar pelo slug, preservando a identidade de duas predefinições com o mesmo gradiente, e o controlo de imagem de fundo deixa de mostrar um anel de foco duplicado.
No theme.json, a especificidade das classes de predefinições ao nível do bloco é nivelada com :where(). As utilidades de duotone são deduplicadas no motor de estilos globais, as implementações duplicadas de utilitários de predefinições são reduzidas e os testes de importação round-trip são corrigidos após a consolidação desses utilitários.
A acessibilidade melhora o tratamento das propriedades dos vários controlos de alinhamento. No bloco Navegação, aria-expanded atualiza-se ao passar o rato sobre um submenu dentro de uma sobreposição; Autocomplete referencia a lista de sugestões com aria-controls e aria-haspopup; e ExternalLink passa a usar o mixin partilhado do anel de foco.
O DataForm deixa de fazer a validação de cartões e detalhes roubar o foco. O seletor plano de termos evita novos pedidos desnecessários, e EntitiesSavedState sai do editor para a camada Core Data, após rebase de uma alteração do core.
Multimédia, REST API e experiências do painel
A REST API de multimédia recebe de volta a verificação do tamanho de upload ao importar um ficheiro a partir de um caminho URL. O processo de build wp-build sincroniza a lista de campos de pré-carregamento do modelo de página com core-data.
Nas experiências do painel, os widgets reforçam a sanitização de href em ações e em ligações de ajuda. Estas alterações estão a reduzir o risco de URLs indevidos nessas interfaces experimentais.
Documentação, qualidade de código e ferramentas
A documentação acrescenta instruções nvm use a AGENTS.md, um padrão de descoberta progressiva para instruções e competências de agentes, documentação global em falta em table-of-contents/index.php, docblocks em falta em WP_Icon_Collections_Registry e orientações mais claras para a descoberta de agentes, getBlock com controladores de blocos internos e backports para o core.
Também são documentados os requisitos para callbacks de filtros de configuração de vistas devolverem o contentor, a orientação de iframe para o Gutenberg 23.6, exemplos de esquema de cores administrativo no Storybook, a escolha entre diálogo e gaveta, filtros de configuração de vistas no servidor e o uso de ligações para URLs na documentação em linha.
Na qualidade de código, o ESLint adiciona componentes em falta à denylist, webpack-dev-server atualiza para ^5.2.1, e os workflows do GitHub corrigem as verificações de changelog em pull requests de forks. A Interactivity API refatora diretivas para módulos que se registam a si próprios; o RTC usa array_any() na verificação de compactação mais recente e str_contains() em WP_Sync_Config; e as ferramentas resolvem dependências independentemente da disposição de node_modules.
Os componentes migram Disabled, FormTokenField e SearchControl para módulos SCSS, e useSelectionProps passa a ser independente da disposição. Os pacotes atualizam date-fns para 4.4.0, memize para 2.1.1, Color.js para 0.7.1 e colorjs.io, removendo a solução temporária associada a um bug; o pacote de tema deixa ainda de publicar src.
Na biblioteca de blocos, a versão protege-se contra valores de atributos que lançam erros, torna editableRoot uma definição privada de bloco, ajusta integrações do WordPress-Develop 7.0, usa coalescência nula em parentPageID no bloco Lista de páginas e remove a pragma @jest-environment jsdom redundante, passando a assinalá-la no lint. Remove ainda propriedades __next40pxDefaultSize desnecessárias, usa str_contains() no Índice e deixa de inserir um parágrafo predefinido no modelo do painel de separador.
URLInput é refatorado para componente de função, os ícones validam a presença de viewBox, os ficheiros de testes unitários dos Estilos globais são renomeados sem o sufixo .spec.js e o Editor do site substitui o uso de Theme por CSS no carregador do canvas. A Base Styles remove o parâmetro de cor de destaque de input-control, e o componente privado Theme é eliminado.
As ferramentas de lançamento atualizam a captura de ecrã do formulário para a nova interface de rótulos do GitHub Releases e passam a exigir uma CLI do GitHub funcional para cherry-pick. No build, é acrescentado um pacote vendor independente para React 18, são suportados caminhos de projeto com espaços, as tipagens de propriedades polimórficas são ignoradas em interseções e os estilos extraídos entram no hash de versão dos assets.
A infraestrutura de build acrescenta um teste end-to-end de compatibilidade do atributo booleano inert no React 19, resolve Prettier explicitamente em disposições isoladas, remove Emotion como origem de importação JSX no Storybook, evita um ciclo infinito de build de workers e melhora as verificações prévias de acesso ao npm. O Storybook corrige também jsxImportSource do Emotion e constrói o especificador de resolução como string no formato URL.
Nos testes, o Jest corrige o padrão de exclusão para ficheiros de declarações TypeScript e atualiza para a versão 30, uma alteração incompatível. Flakiness.io fica limitado ao repositório canónico do Gutenberg, a métrica de seleção de blocos deixa de reportar incorretamente 0 ms, o teste de utilizador eliminado no RTC é corrigido em multissite e o Editor do site ganha cobertura end-to-end para extensibilidade da configuração de vistas.
O que verificar ao atualizar
Se estás a desenvolver blocos ou temas, confirma o comportamento de estilos globais herdados apenas depois de ativares a experiência correspondente. Testa também interfaces que usem Combobox, Select ou SelectControl com grupos de opções, integrações que dependam da configuração de vistas e fluxos de edição com galerias dinâmicas, seleção múltipla, notas ou colaboração em tempo real.
Nos projetos com toolchains do Gutenberg, revê a compatibilidade com Jest 30, as alterações de dependências e os scripts de desenvolvimento em caminhos com espaços. Se estiveres a usar o editor diariamente, atualiza o plugin e valida os fluxos de multimédia, pré-visualização responsiva e escrita em blocos longos.
Referências / Fontes
João Santos
Desenvolvedor de APIs e especialista em integração. REST, GraphQL e webhooks são o meu dia a dia. Adoro conectar sistemas.
Todos os posts