Redesenho do Composer atrás de enable_new_composer_actions
Isso introduz uma experiência de composer redesenhada e a libera atrás de uma nova mudança futura alfa. Com a flag desligada (padrão), nada muda visivelmente. Os administradores podem optar por participar através da página de administração de mudanças futuras.
O que muda quando a flag está ligada
-
Menu suspenso de ações unificado. O menu suspenso
composer-actionsdo SelectKit legado é substituído por um novo componente Glimmer/DMenu (composer-actions-new.gjs). Ele ainda exibe todas as mesmas linhas de troca de modo (responder ao tópico, responder como novo tópico, criar MP, etc.) com rótulos e ícones mais claros. -
Alternâncias ao vivo com as ações. Sussurro / sem bump / não listado agora são renderizados como itens
<DToggleSwitch>na parte inferior desse mesmo menu suspenso — sem um menu de botão combinado separado. O estado da alternância sobrevive às trocas de modo (ex.: ativar sussurro → trocar de responder ao tópico para responder ao post → ainda sussurrando).
-
Pílula indicadora de sussurro. Um pequeno botão à direita do gatilho do menu suspenso mostra o estado atual do sussurro em duas variantes visuais:
--public(cor terciária, ícone de olho, „A resposta será visível“) e--whispering(fundo primário-médio / primário-muito-baixo, ícone de olho-riscado, „Sussurrando“). Clicar nele alterna o sussurro — mesmo caminho de código que a alternância dentro do menu suspenso, para que os dois permaneçam sincronizados. O próprio ícone do gatilho também troca parafar-eye-slashquando sussurrando. -
UX de edição. Ao editar um post, o menu suspenso colapsa para um rótulo estático, sem caret (ícone de lápis + „Editar post“). O botão „Adicionar motivo de edição“ que antes vivia em outro lugar na interface do composer é incorporado a esse gatilho estático como um botão clicável „Descreva sua edição“; clicar nele troca o rótulo por uma entrada de texto vinculada a
composer.editReasone foca nela. -
Interface do Composer. O texto/span
.action-titleé removido — o próprio gatilho do menu suspenso mostra o modo atual. -
Links de Post/Tópico agora aparecerão apenas quando necessário. Um link de tópico será renderizado ao navegar para fora do tópico, e o link do post será renderizado ao rolar para longe do post / navegar para fora.
Notas para autores de plugins
O novo componente não é uma subclasse do SelectKit, então as antigas APIs de extensão não o alcançam. Para suportar ambos os estados da flag nesta fase alfa, os plugins devem registrar ambas as APIs:
| API Antiga (funciona apenas no componente antigo) | API Nova (funciona apenas no novo componente) |
|---|---|
api.modifySelectKit("composer-actions").appendContent(...) |
api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; }) |
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) |
api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); }) |
A forma da linha ({ name, description, icon, id }) é idêntica em ambos. O transformador de comportamento recebe { actionId, options, model } em seu contexto.
Plugins que registram apenas os antigos hooks desaparecerão silenciosamente do composer no momento em que um administrador habilitar a flag. Plugins que registram apenas os novos transformadores serão invisíveis enquanto a flag estiver desligada (o padrão para todos na mesclagem).
Referências:
-
discourse-post-voting/extend-composer-actions.js — exemplo de trabalho de registro duplo (no núcleo)
-
discourse-staff-alias — PR separado adiciona registro duplo lá
-
transformers.js — os dois novos nomes de transformadores
Notas de lançamento
-
O status da flag é alfa — opt-in para testes internos.
-
Plugins que integram com ações do composer devem adicionar registro duplo antes que isso seja promovido para
beta/estável. -
Os testes cobrem ambos os estados: as especificações de aceitação/sistema existentes cobrem flag-desligada; arquivos irmãos
*-new-test.jscobrem flag-ligada (mais os seletores DOM do novo componente para o menu suspenso unificado, itens de alternância, indicador de sussurro e spans de rótulo dividido).



