Autoria de Tema

A facade escreve um tema PrimeVue. Os módulos consomem esse tema; eles não criam mini design systems paralelos.

O Wippy atualmente executa o PrimeVue com theme: 'none'. A aparência dos componentes é fornecida pelo CSS PrimeVue do Wippy escrito em Tailwind, por variáveis públicas de runtime e pela customização da facade.

Onde a estilização pertence

Questão de estilização Responsável
Aparência de componentes PrimeVue compartilhada por todo o produto Tema PrimeVue da facade em custom_css e variáveis públicas de tema
Apenas o chrome do shell do host CSS da facade com escopo em .wippy-host-app
Uma regra .p-* compartilhada destinada às raízes do host e do filho custom_css global da facade; nenhum escopo de host necessário
Sobrescrita de tema apenas para uma página Configuração da página usando o casing de frontend suportado
Layout de domínio ou estrutura inédita CSS ou Tailwind do módulo
Uma parte customizada não-PrimeVue necessária CSS do módulo, reutilizando tokens públicos e utilitários invariantes documentados
A mesma parte não-PrimeVue necessária em vários módulos seus Um pacote compartilhado — veja A Camada de Design
Uma classe arbitrária esperada de uma facade Não portável; proibido pela FE-STYLE-001

Uma regra global .p-drawer-content é uma implementação de tema válida quando se destina a todo Drawer nas raízes do host e do filho. .wippy-host-app .p-drawer-content é apropriado apenas quando a regra é específica do host.

Mover CSS duplicado de módulo para o CSS da facade não elimina a dependência. Se o seletor não faz parte do vocabulário compartilhado do tema PrimeVue, ele cria um contrato privado com a facade. O lugar para vocabulário compartilhado entre seus próprios módulos, mas ausente do tema, é um pacote publicado: veja A Camada de Design.

Equivalência semântica

Controles semanticamente equivalentes devem parecer equivalentes. Prefira usar componentes PrimeVue diretamente. Quando um controle genuinamente customizado for necessário, identifique seu irmão visual no PrimeVue e use as mesmas propriedades públicas de runtime para cor, borda, foco, estado e qualquer geometria classificada como theme-variable.

A parte customizada pode ser dona apenas da estrutura inédita que o irmão não fornece. Reutilize os contratos documentados de padding, dimensões, tipografia, raio, sombra, foco e movimento do tema onde existirem. Não copie um literal atual do CSS gerado de componentes e chame isso de herança.

Propriedades de runtime versus invariantes

Cada propriedade de aparência compartilhada tem uma política:

  • theme-variable: deve resolver através de uma variável pública de runtime documentada.
  • platform-invariant: o valor Tailwind compilado compartilhado é deliberadamente estável em todo tema conforme.

Não adicione tokens de runtime por flexibilidade teórica. Adicione ou adote um token apenas depois que o registro de contrato efetivo comprovar uma lacuna real de runtime, um caminho suportado exato, um consumidor real e evidência de mutação.

Transporte de CSS não é permissão

Páginas recebem estilos em um iframe. Web components podem receber estilos dentro de um shadow root. Isso explica onde o CSS pode ter efeito; não autoriza um módulo a depender de seletores arbitrários da facade.

Troca de modo em runtime

O contrato público de modo de tema é o AppConfig mais @wippy-fe/proxy:

import { host, on } from '@wippy-fe/proxy'

async function setThemeMode(mode: 'auto' | 'light' | 'dark') {
  await new Promise<void>((resolve, reject) => {
    const stop = on('@theme', (appliedMode) => {
      if (appliedMode !== mode) return
      stop()
      const currentMode = host.getThemeMode()
      if (currentMode !== mode) {
        reject(new Error(`Theme propagation mismatch: ${currentMode}`))
        return
      }
      resolve()
    })
    host.setThemeMode(mode)
  })
}

await setThemeMode('dark')

Use apenas auto, light ou dark. O host é dono da aplicação e da propagação recursiva aos filhos; a facade/embedder é dona da persistência. Editar diretamente w-theme-dark / w-theme-light, chamar helpers internos de tema, escrever globais de AppConfig ou postar mensagens para o host contorna esse contrato e é não conforme. A evidência visual só é válida depois que a API pública reporta o modo propagado.

Veja Contrato Tailwind, Catálogo de Tokens e Contrato de UI Portável.