Sistema de componentes web · Novo recurso

Sistema de design Web Awesome.

Analise os tokens semânticos reais de Web Awesome em elementos personalizados nativos, incluindo alterações localizadas de raio e espaçamento, estilo do shadow DOM, comportamento de seleção e validação de entrada.

Guia OpenDesign9 capítulos37 entradas de referênciaGuia de aplicação original
01

Web Awesome Prévia da interface do sistema de design

Altere as escalas de raio e espaçamento, troque a aparência da demonstração, selecione uma região e valide o nome de um espaço de trabalho local.

Bancada de tokens com escopo definidoAbrir exemplo completo
Elementos personalizados nativos de Web Awesome 3.14.0 e tema padrão, incluídos localmente. · Referência de implementação
02

Web Awesome Referência de design do sistema de design

Tema padrão CSS de Web Awesome 3.14.0, inspecionado no pacote instalado. As entradas de cor abaixo são aliases semânticos; suas referências de paleta são mantidas, em vez de substituídas por equivalentes hexadecimais presumidos. Os exemplos de pixels derivados da escala pressupõem uma raiz de 16px e scale=1.

Papéis semânticos de superfície e texto

Fonte
Nome / RegraValor / ConfiguraçãoUso
--wa-color-surface-defaultwhiteSuperfície principal da demonstração.
--wa-color-surface-raisedwhiteCamada elevada.
--wa-color-surface-loweredvar(--wa-color-neutral-95)Superfície de leitura de código.
--wa-color-surface-bordervar(--wa-color-neutral-90)Limite do contêiner.
--wa-color-text-normalvar(--wa-color-neutral-10)Texto normal.
--wa-color-text-quietvar(--wa-color-neutral-40)Texto secundário.
--wa-color-text-linkvar(--wa-color-brand-40)Papel de link.
--wa-color-brand-fill-loudvar(--wa-color-brand-50)Preenchimento forte da marca.
--wa-color-brand-on-loudwhiteTexto sobre preenchimento forte da marca.
--wa-color-brand-fill-quietvar(--wa-color-brand-95)Preenchimento discreto do selo.
--wa-color-brand-on-quietvar(--wa-color-brand-40)Texto sobre preenchimento discreto da marca.

Espaçamento e formas

Fonte
Nome / RegraValor / ConfiguraçãoUso
--wa-space-scale1Multiplicador usado pelos tokens de espaçamento.
--wa-space-xscalc(var(--wa-space-scale) * 0.5rem)8px na escala padrão.
--wa-space-scalc(var(--wa-space-scale) * 0.75rem)12px na escala padrão.
--wa-space-mcalc(var(--wa-space-scale) * 1rem)16px na escala padrão.
--wa-space-lcalc(var(--wa-space-scale) * 1.5rem)24px na escala padrão.
--wa-space-xlcalc(var(--wa-space-scale) * 2rem)32px na escala padrão.
--wa-space-2xlcalc(var(--wa-space-scale) * 2.5rem)40px na escala padrão.
--wa-border-radius-scale1Multiplicador usado pelos raios escaláveis.
--wa-border-radius-scalc(var(--wa-border-radius-scale) * 0.1875rem)3px na escala padrão.
--wa-border-radius-mcalc(var(--wa-border-radius-scale) * 0.375rem)6px na escala padrão.
--wa-border-radius-lcalc(var(--wa-border-radius-scale) * 0.75rem)12px na escala padrão.

Tipografia

Fonte
Nome / RegraValor / ConfiguraçãoUso
--wa-font-family-bodyui-sans-serif, system-ui, sans-serifSans-serif de sistema para o corpo do texto.
--wa-font-family-headingvar(--wa-font-family-body)Alias de família tipográfica para títulos.
--wa-font-family-codeui-monospace, monospaceLeitura de código monoespaçada.
--wa-font-size-scale1Multiplicador da escala tipográfica.
--wa-font-size-mcalc(1rem * var(--wa-font-size-scale))16px com raiz e escala padrão.
--wa-font-size-lround(calc(var(--wa-font-size-m) * 1.125 * 1.125), 1px)20px com raiz e escala padrão.
--wa-font-size-xlround(calc(var(--wa-font-size-l) * 1.125 * 1.125), 1px)25px com raiz e escala padrão.
--wa-font-size-2xlround(calc(var(--wa-font-size-xl) * 1.125 * 1.125), 1px)32px com raiz e escala padrão.
--wa-line-height-condensed1.2Títulos/rótulos condensados.
--wa-line-height-normal1.6Altura de linha normal para leitura.

Aliases de controles de formulário

Fonte
Nome / RegraValor / ConfiguraçãoUso
--wa-form-control-background-colorvar(--wa-color-surface-default)Alias da superfície de entrada.
--wa-form-control-border-colorvar(--wa-color-neutral-border-loud)Função do limite do campo.
--wa-form-control-border-radiusvar(--wa-border-radius-m)Alias do raio do campo.
--wa-form-control-label-colorvar(--wa-color-text-normal)Cor acessível do rótulo.
--wa-form-control-hint-colorvar(--wa-color-text-quiet)Alias da cor da dica.
03

Web Awesome Guia completo do sistema de design

Um guia prático para escolher, aplicar e avaliar este sistema em uma interface real.

DESIGN-web-awesome.md

Orientações completas, um ponto de partida para a implementação e links para o código-fonte.

Baixar o guia

Web Awesome Elementos personalizados do sistema de design com seu próprio limite de componente

Elementos personalizados com seu próprio limite de componente

Web Awesome oferece elementos personalizados HTML registrados, sem exigir um aplicativo React. Depois de importar wa-input ou wa-select, o elemento pode ser usado em HTML comum e controlado por meio das propriedades e dos eventos documentados. Esta bancada inclui a versão 3.14.0 e usa apenas componentes disponíveis no pacote público.

Com base neste guia de OpenDesign

Os controles visíveis são os elementos personalizados reais, incluindo sua implementação com shadow root. O cabeçalho, as seções e a área de leitura ao redor são criações originais de HTML. Isso torna a demonstração útil para observar quais decisões de estilo atravessam o limite do componente por meio de propriedades personalizadas herdadas e quais pertencem à composição da página.

Consulte a especificação de apoio

Web Awesome Preserve os aliases semânticos de cores do sistema de design

Preserve os aliases semânticos de cores

O tema padrão diferencia superfícies elevadas, padrão e rebaixadas; texto normal e discreto; e vários pares de preenchimento da marca e cor do texto sobre esse preenchimento. A área de leitura de tokens usa a superfície rebaixada, a demonstração principal usa a superfície padrão e o pequeno selo combina brand-fill-quiet com brand-on-quiet. Essas funções continuam fazendo sentido quando a aparência muda.

A referência mantém aliases como var(--wa-color-neutral-10), em vez de converter cada função em um valor hexadecimal presumido. A paleta pode mudar enquanto a atribuição semântica continua válida. Ao personalizar uma ação com a cor forte da marca, considere tanto o preenchimento quanto a cor do texto sobre ele. Alterar um sem o outro pode dificultar a leitura do texto do botão.

Consulte a especificação de apoio

Web Awesome Altere a escala sem reescrever cada componente do sistema de design

Altere a escala sem reescrever cada componente

O seletor de raio altera --wa-border-radius-scale apenas na demonstração. Na escala um, os raios pequeno, médio e grande padrão correspondem a três, seis e doze pixels com uma raiz de dezesseis pixels. Definir a escala como zero deixa quadrados esses cantos escaláveis; a escala dois os duplica. Os tokens de formato de pílula e círculo são conceitos distintos e não devem ser considerados dependentes desse multiplicador.

O seletor de espaçamento altera --wa-space-scale. O preenchimento, os intervalos e o espaçamento da área de leitura da demonstração usam os tokens oficiais de espaço, então suas proporções mudam em conjunto. Isso não significa que todas as dimensões de todos os componentes sejam escaladas: as dimensões dos controles têm relações de tokens próprias. O painel de edição fica fora do escopo para manter estável a comparação enquanto a demonstração muda.

  1. Escolha Quadrado e examine os cantos do campo, do contêiner e da área de leitura.
  2. Escolha Espaçamento confortável e compare os intervalos da demonstração com o painel de edição, que permanece inalterado.
  3. Restaure os padrões para redefinir os dois multiplicadores e a aparência ao mesmo tempo.

Consulte a especificação de apoio

Web Awesome Tokens de tipografia e escolhas originais de títulos do sistema de design

Tokens de tipografia e escolhas originais de títulos

A família padrão para o corpo do texto é ui-sans-serif, system-ui, sans-serif. A família dos títulos usa um alias da família do corpo, enquanto o código usa ui-monospace. O token de altura de linha normal é 1.6; o condensado é 1.2. O token tipográfico médio corresponde a um rem multiplicado por font-size-scale, e os tamanhos maiores usam cálculos arredondados. A tabela mostra essas expressões, sem ocultar suas dependências.

A própria bancada escolhe um título de 34px e um título de seção de 23px, reduzindo o título da página em um breakpoint local de 700px. Essas são regras originais explícitas da página. Os campos nativos mantêm os estilos de rótulo e dica da biblioteca, permitindo comparar uma hierarquia de página personalizada com a tipografia padrão dos componentes.

Consulte a especificação de apoio

Web Awesome Valores iniciais, propriedades e eventos de alteração do sistema de design

Valores iniciais, propriedades e eventos de alteração

Cada seletor contém elementos wa-option com valores estáveis. As opções padrão usam selected, de acordo com as orientações atuais do componente para a seleção inicial. As alterações em tempo de execução leem a propriedade value do seletor. Os controles do tema escutam eventos change e atualizam as propriedades personalizadas de CSS; eles não extraem texto dos rótulos das opções renderizadas.

O seletor de região é um campo de demonstração comum e não controla um serviço externo de armazenamento. O valor selecionado é informado na mensagem de ação local. A interface não dá a entender que escolher Europa aloca armazenamento. Essa distinção é importante quando uma demonstração de componente com aparência realista usa termos de produto.

Consulte a especificação de apoio

Web Awesome Estilize com tokens e partes documentadas do sistema de design

Estilize com tokens e partes documentadas

Seletores comuns de descendentes não podem acessar livremente o shadow tree de um componente. Este exemplo usa variáveis de tema herdadas para manter coordenados o fundo, o texto e o raio do campo com o restante de HTML. Trata-se de uma forma de estilização compatível, não de uma tentativa de selecionar marcação interna gerada.

Para alterações específicas de um componente, consulte as propriedades personalizadas CSS e as partes CSS documentadas para esse componente. Um seletor global de input não necessariamente altera o input interno de wa-input. Por outro lado, aplicar uma classe de tema ou variável a um ancestral comum pode afetar intencionalmente muitos elementos personalizados descendentes; portanto, escolha o escopo com cuidado.

Consulte a especificação de apoio

Atualização, validação e resultados locais do sistema de design Web Awesome

Atualização, validação e resultados locais

Do ponto de vista da página, o registro dos componentes é assíncrono. O exemplo aguarda customElements.whenDefined para as APIs que usa e, em seguida, aguarda as atualizações do select antes de ler os valores iniciais. Isso evita aplicar valores padrão a um elemento que ainda não foi atualizado de uma tag HTML desconhecida para sua classe de componente.

A ação do espaço de trabalho usa setCustomValidity e reportValidity em wa-input. Um nome sem espaços nas extremidades com menos de dois caracteres é rejeitado; um evento input limpa o erro personalizado para que seja possível tentar novamente após a correção. O estado desativado do botão Invite later é nativo do componente. O texto de status informa apenas que um nome foi aplicado localmente, e o código completo não faz nenhuma solicitação de criação ou alocação de espaço de trabalho.

  • Os rótulos acessíveis são fornecidos por meio de atributos label.
  • As dicas explicam a restrição do nome antes que ocorra um erro.
  • A ação desativada continua sem interação, mas ainda indica sua finalidade.

Consulte a especificação de apoio

Importe o tema e os componentes usados no sistema de design Web Awesome

Importe o tema e os componentes que você usa

Instale @awesome.me/[email protected] em um aplicativo Vite vanilla e use o main.js fornecido como ponto de entrada. A folha de estilos do tema padrão é obrigatória; o exemplo deliberadamente não carrega o pacote mais amplo de reset nativo ou utilitários, pois o layout da página está definido explicitamente CSS. As importações registram os cinco tipos de componentes usados na marcação.

Os módulos npm dist foram feitos para empacotadores. A distribuição dist-cdn é a alternativa para carregar módulos diretamente no navegador, pois as dependências são empacotadas de outra forma. Não copie uma importação dist para uma tag script simples presumindo que as dependências sem prefixo serão resolvidas. Componentes que precisam de recursos externos exigem a configuração do caminho-base documentada; este exemplo não usa ícones fornecidos pelo usuário e é empacotado para funcionar offline.

Consulte a especificação de apoio

Componentes públicos do sistema de design Web Awesome e limites claros do tema

Componentes públicos e limites honestos do tema

O ambiente de trabalho demonstra o tema padrão e os componentes públicos. Alguns componentes Web Awesome, padrões e recursos de design são ofertas Pro, portanto a página não dá a entender que a instalação do pacote público libera todos os itens do catálogo. Antes de tornar um componente uma dependência obrigatória em um sistema de design compartilhado, verifique se ele está disponível.

Um tema de produto reutilizável deve documentar quais variáveis são alteradas, onde são aplicadas e como os dois modos de aparência são verificados. O ambiente de trabalho interativo é um pequeno exemplo desse processo: é possível inspecionar as variáveis exatas que foram alteradas e comparar os componentes nativos resultantes, em vez de depender de uma imagem de paleta sem conexão com o tema.

Consulte a especificação de apoio

Exemplos de componentes do sistema de design Web Awesome

Marcação do ambiente de trabalho com elementos personalizados

wa-select, wa-option, wa-input, wa-switch e wa-button nativos combinados com marcação semântica comum HTML.

html
<main class="token-workbench"><header><p class="eyebrow">WEB AWESOME / TOKEN WORKBENCH</p><h1>See the theme cross the component boundary.</h1><p>Change a scoped token and inspect native custom elements alongside ordinary HTML.</p></header><div class="workbench-grid"><section class="controls"><h2>Theme controls</h2><wa-select id="radius" label="Corner scale"><wa-option value="0">Square / 0</wa-option><wa-option value="1" selected>Default / 1</wa-option><wa-option value="2">Rounder / 2</wa-option></wa-select><wa-select id="spacing" label="Spacing scale"><wa-option value="0.8">Compact / 0.8</wa-option><wa-option value="1" selected>Default / 1</wa-option><wa-option value="1.25">Relaxed / 1.25</wa-option></wa-select><wa-switch id="dark">Dark appearance</wa-switch><wa-button id="reset" appearance="outlined">Restore defaults</wa-button><p class="hint">These controls change only the specimen. The editing controls keep their original dimensions.</p></section><section id="specimen" class="specimen" aria-label="Theme specimen"><div class="sample-head"><span class="badge">COMPONENT PREVIEW</span><span class="hint">Free components</span></div><h2>Your next workspace</h2><p class="hint">Form labels, field borders and actions inherit semantic tokens through the shadow boundary.</p><wa-input id="workspace" label="Workspace name" hint="Use at least two characters." value="Field notes"></wa-input><wa-select id="region" label="Storage region"><wa-option value="europe" selected>Europe</wa-option><wa-option value="america">North America</wa-option><wa-option value="asia">Asia Pacific</wa-option></wa-select><div class="sample-actions"><wa-button id="create" variant="brand">Apply name locally</wa-button><wa-button disabled>Invite later</wa-button></div><p id="result" role="status">No workspace is created by this specimen.</p><div class="token-readout"><code id="values">--wa-border-radius-scale: 1;<br>--wa-space-scale: 1;</code></div></section></div><footer>Native Web Awesome 3.14.0. The surrounding workbench is original HTML/CSS.</footer></main>

Referência de código

  • As escolhas iniciais usam selected em wa-option.
  • São usados apenas componentes gratuitos.

Importações completas e controles de tokens

Registra componentes, aguarda a atualização, altera propriedades personalizadas com escopo e aplica a validação local.

javascript
import '@awesome.me/webawesome/dist/styles/themes/default.css';
import '@awesome.me/webawesome/dist/components/button/button.js';
import '@awesome.me/webawesome/dist/components/input/input.js';
import '@awesome.me/webawesome/dist/components/select/select.js';
import '@awesome.me/webawesome/dist/components/option/option.js';
import '@awesome.me/webawesome/dist/components/switch/switch.js';
import './style.css';
const $=id=>document.getElementById(id);function update(){const s=$('specimen');s.style.setProperty('--wa-border-radius-scale',$('radius').value);s.style.setProperty('--wa-space-scale',$('spacing').value);s.classList.toggle('wa-dark',$('dark').checked);s.classList.toggle('wa-light',!$('dark').checked);$('values').textContent=`--wa-border-radius-scale: ${$('radius').value};\n--wa-space-scale: ${$('spacing').value};`;}
Promise.all(['wa-select','wa-switch','wa-input','wa-button'].map(x=>customElements.whenDefined(x))).then(async()=>{await Promise.all([...document.querySelectorAll('wa-select')].map(e=>e.updateComplete));for(const id of ['radius','spacing','dark'])$(id).addEventListener('change',update);$('reset').addEventListener('click',()=>{$('radius').value='1';$('spacing').value='1';$('dark').checked=false;update()});$('create').addEventListener('click',()=>{const field=$('workspace');field.setCustomValidity(field.value.trim().length<2?'Use at least two non-space characters.':'');if(!field.reportValidity())return;$('result').textContent=`Applied “${field.value.trim()}” in the ${$('region').value} specimen. No workspace or storage allocation was created.`});$('workspace').addEventListener('input',()=>$('workspace').setCustomValidity(''));update()});

Referência de código

  • whenDefined evita ler um elemento personalizado API ainda não atualizado.
  • O código importa apenas os componentes utilizados.

Marcação de demonstração com escopo CSS

A marcação comum HTML usa as mesmas variáveis de tema herdadas pelos elementos personalizados nativos.

css
*{box-sizing:border-box}body{margin:0;font-family:var(--wa-font-family-body);font-size:16px;line-height:var(--wa-line-height-normal);color:var(--wa-color-text-normal);background:#f5f6f8}.token-workbench{max-width:1100px;margin:auto;padding:32px}header{max-width:740px;margin-bottom:28px}h1{font-size:34px;line-height:1.15;letter-spacing:-.03em}h2{font-size:23px;line-height:1.25}.eyebrow{font-size:11px;letter-spacing:.12em;font-weight:700}.workbench-grid{display:grid;grid-template-columns:300px minmax(0,1fr);gap:24px}.controls{display:flex;flex-direction:column;gap:20px;padding:24px;background:white;border:1px solid #d9dde3;border-radius:12px}.controls h2{margin:0}.hint,footer{color:var(--wa-color-text-quiet);font-size:14px}.specimen{background:var(--wa-color-surface-default);color:var(--wa-color-text-normal);border:1px solid var(--wa-color-surface-border);border-radius:var(--wa-border-radius-l);padding:var(--wa-space-xl);display:flex;flex-direction:column;gap:var(--wa-space-l)}.specimen h2,.specimen p{margin:0}.sample-head,.sample-actions{display:flex;align-items:center;flex-wrap:wrap;gap:var(--wa-space-s)}.sample-head{justify-content:space-between}.badge{font-size:10px;letter-spacing:.09em;font-weight:700;background:var(--wa-color-brand-fill-quiet);color:var(--wa-color-brand-on-quiet);padding:4px 8px;border-radius:var(--wa-border-radius-s)}.token-readout{background:var(--wa-color-surface-lowered);padding:var(--wa-space-m);border-radius:var(--wa-border-radius-m);font:13px/1.7 var(--wa-font-family-code);white-space:pre-wrap;overflow-wrap:anywhere}#result{font-size:13px}footer{margin-top:20px}@media(max-width:700px){.token-workbench{padding:20px 16px}.workbench-grid{grid-template-columns:1fr}.controls{padding:20px}h1{font-size:28px}.specimen{padding:var(--wa-space-l)}}

Referência de código

  • O título do ambiente de trabalho e o ponto de quebra do layout são escolhas originais.

Documento index.html completo

O documento raiz do Vite para o main.js e a folha de estilos fornecidos.

html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Web Awesome token workbench</title></head><body><main class="token-workbench"><header><p class="eyebrow">WEB AWESOME / TOKEN WORKBENCH</p><h1>See the theme cross the component boundary.</h1><p>Change a scoped token and inspect native custom elements alongside ordinary HTML.</p></header><div class="workbench-grid"><section class="controls"><h2>Theme controls</h2><wa-select id="radius" label="Corner scale"><wa-option value="0">Square / 0</wa-option><wa-option value="1" selected>Default / 1</wa-option><wa-option value="2">Rounder / 2</wa-option></wa-select><wa-select id="spacing" label="Spacing scale"><wa-option value="0.8">Compact / 0.8</wa-option><wa-option value="1" selected>Default / 1</wa-option><wa-option value="1.25">Relaxed / 1.25</wa-option></wa-select><wa-switch id="dark">Dark appearance</wa-switch><wa-button id="reset" appearance="outlined">Restore defaults</wa-button><p class="hint">These controls change only the specimen. The editing controls keep their original dimensions.</p></section><section id="specimen" class="specimen" aria-label="Theme specimen"><div class="sample-head"><span class="badge">COMPONENT PREVIEW</span><span class="hint">Free components</span></div><h2>Your next workspace</h2><p class="hint">Form labels, field borders and actions inherit semantic tokens through the shadow boundary.</p><wa-input id="workspace" label="Workspace name" hint="Use at least two characters." value="Field notes"></wa-input><wa-select id="region" label="Storage region"><wa-option value="europe" selected>Europe</wa-option><wa-option value="america">North America</wa-option><wa-option value="asia">Asia Pacific</wa-option></wa-select><div class="sample-actions"><wa-button id="create" variant="brand">Apply name locally</wa-button><wa-button disabled>Invite later</wa-button></div><p id="result" role="status">No workspace is created by this specimen.</p><div class="token-readout"><code id="values">--wa-border-radius-scale: 1;<br>--wa-space-scale: 1;</code></div></section></div><footer>Native Web Awesome 3.14.0. The surrounding workbench is original HTML/CSS.</footer></main>
<script type="module" src="/main.js"></script></body></html>

Referência de código

  • Crie um projeto Vite vanilla e use o main.js completo e o style.css mostrados acima.
04

Configuração de agente do sistema de design Web Awesome

Ponto de partida para implementação

Os exemplos completos de main.js, CSS e body reproduzem o ambiente de trabalho em um empacotador. A demonstração offline é um pacote esbuild com o tema CSS incorporado. Nenhum provedor React é necessário.

javascript
// Create a Vite vanilla project, then install:
// npm install @awesome.me/[email protected]
// index.html: paste the complete workbench markup in body,
// then add <script type="module" src="/main.js"></script>.
// main.js: use the complete imports and token-controls example above.
// style.css: use the complete scoped specimen CSS above.

// Minimum registration pattern used by this example:
import '@awesome.me/webawesome/dist/styles/themes/default.css';
import '@awesome.me/webawesome/dist/components/button/button.js';
import '@awesome.me/webawesome/dist/components/input/input.js';
import '@awesome.me/webawesome/dist/components/select/select.js';
import '@awesome.me/webawesome/dist/components/option/option.js';
import '@awesome.me/webawesome/dist/components/switch/switch.js';
// Do not duplicate these imports if using the complete main.js above.

Um prompt para seu projeto

Prompt para agente de IA
Use o ambiente de trabalho de tokens com escopo Web Awesome 3.14.0 e registre os elementos wa-select, wa-option, wa-input, wa-button e wa-switch fornecidos. Aguarde a definição do componente e updateComplete antes de ler as seleções iniciais. Aplique --wa-border-radius-scale e --wa-space-scale somente à região de demonstração e alterne sua classe wa-light/wa-dark sem alterar o conteúdo não relacionado da página. Mantenha a leitura visível dos tokens sincronizada com os controles nativos e preserve os rótulos. Trate o ambiente de trabalho como uma ferramenta de inspeção, não como uma interface de gerenciamento de dispositivos.
05

Fontes e escopo do sistema de design Web Awesome

Componentes públicos e tema padrão do Web Awesome 3.14.0. As escolhas de layout são originais; a aplicação local do nome não cria espaços de trabalho nem armazenamento.