Acima do limite
O preenchimento é limitado a 100% no parcial.
stat
Um número num painel, com uma etiqueta e quanto mudou.
O número grande
Coloque isto dentro de <div rst-stats>.
<divrst-stat="lead">
<spanrst-stat-label>Receita deste mês</span>
<spanrst-stat-num>€48,210</span>
<spanrst-stat-deltarst-tone="positive">+12%</span>
<spanrst-stat-note>face ao mês passado</span>
</div>
Coloque isto dentro de <div rst-stats>.
{{template"stat"dict"Label""Receita deste mês""Value""€48,210""Delta""+12%""Tone""positive""Note""face ao mês passado""Lead"true}}
Acrescente Lead a um número da linha para o tornar grande. É o mesmo componente, apenas maior.
Um número mais pequeno
Coloque isto dentro de <div rst-stats>.
<divrst-stat>
<spanrst-stat-label>Faturas por pagar</span>
<spanrst-stat-num>24</span>
</div>
Coloque isto dentro de <div rst-stats>.
{{template"stat"dict"Label""Faturas por pagar""Value""24"}}
Só precisa de uma etiqueta e um número. Tudo o resto é opcional.
Quando descer é bom
Coloque isto dentro de <div rst-stats>.
<divrst-stat>
<spanrst-stat-label>Tempo até à primeira resposta</span>
<spanrst-stat-num>1 h 12 min</span>
<spanrst-stat-deltarst-tone="positive">−38%</span>
<spanrst-stat-note>face à semana passada</span>
</div>
Coloque isto dentro de <div rst-stats>.
{{template"stat"dict"Label""Tempo até à primeira resposta""Value""1 h 12 min""Delta""−38%""Tone""positive""Note""face à semana passada"}}
A cor decide-a você, não o componente. Aqui o número desceu e isso é boa notícia, por isso a variação está a verde.
Quando subir é mau
Coloque isto dentro de <div rst-stats>.
<divrst-stat>
<spanrst-stat-label>Pagamentos falhados</span>
<spanrst-stat-num>9</span>
<spanrst-stat-deltarst-tone="negative">+3</span>
<spanrst-stat-note>face à semana passada</span>
</div>
Coloque isto dentro de <div rst-stats>.
{{template"stat"dict"Label""Pagamentos falhados""Value""9""Delta""+3""Tone""negative""Note""face à semana passada"}}
Aqui o número subiu e isso é má notícia, por isso a variação está a vermelho.
Quando não se pode dizer
Coloque isto dentro de <div rst-stats>.
<divrst-stat>
<spanrst-stat-label>Duração média da sessão</span>
<spanrst-stat-num>4 min 12 s</span>
<spanrst-stat-deltarst-tone="neutral">+18 s</span>
<spanrst-stat-note>desde sexta-feira</span>
</div>
Coloque isto dentro de <div rst-stats>.
{{template"stat"dict"Label""Duração média da sessão""Value""4 min 12 s""Delta""+18 s""Note""desde sexta-feira"}}
Deixe a cor de fora e a variação fica cinzenta. Faça isso quando não puder dizer se é boa ou má.
Está a mostrar 4.1k em vez de 4120? Ponha o número completo em Exact. Os leitores de ecrã só leem o que está no ecrã, por isso mantenha no próprio número tudo o que uma pessoa precise.
person
Avatar com iniciais, nome e email. Serve para identificar depressa os registos de pessoas.
<arst-personhref="/people/3">
<spanrst-person-av="empty"aria-hidden="true"></span>
<spanrst-person-meta>
<spanrst-person-name>Convite por aceitar</span>
<spanrst-person-email>invited@example.com</span>
</span>
</a>
{{template"person"dict"Href""/people/3""Name""Convite por aceitar""Email""invited@example.com"}}
actor
Quem fez algo, em palavras: o nome de uma pessoa, ou o agente e a pessoa por quem agiu. Sem distintivo nem ícone.
Um agente a agir por uma pessoa
<spanrst-actor>Claude para Grace Hopper</span>
{{template"actor"dict"Actor".Actor}}
Defina ui.ActorName uma vez no arranque para transformar um sujeito num nome. A própria aplicação, o Actor zero, não renderiza nada.
Uma pessoa
<spanrst-actor>Grace Hopper</span>
{{template"actor"dict"Actor".Actor}}
callout
O único vocabulário de avisos: faixa com cor, ícone de tom, título a negrito opcional e um parágrafo de corpo.
info
<divrst-calloutrst-tone="info">
<spanrst-callout-icaria-hidden="true">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><circlecx="12"cy="12"r="10"/><pathd="M12 16v-4"/><pathd="M12 8h.01"/></svg>
</span>
<divrst-callout-body>
<p>As publicações só são visíveis para membros até o site ser publicado.</p>
</div>
</div>
{{template"callout"dict"Body""As publicações só são visíveis para membros até o site ser publicado.""Tone""info"}}
positive
<divrst-calloutrst-tone="positive">
<spanrst-callout-icaria-hidden="true">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><circlecx="12"cy="12"r="10"/><pathd="m9 12 2 2 4-4"/></svg>
</span>
<divrst-callout-body>
<strong>Os pagamentos estão ligados</strong>
<p>Já pode receber pagamentos pelos bilhetes.</p>
</div>
</div>
{{template"callout"dict"Body""Já pode receber pagamentos pelos bilhetes.""Title""Os pagamentos estão ligados""Tone""positive"}}
warning
<divrst-calloutrst-tone="warning">
<spanrst-callout-icaria-hidden="true">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><pathd="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><pathd="M12 9v4"/><pathd="M12 17h.01"/></svg>
</span>
<divrst-callout-body>
<strong>Ligue os pagamentos para começar a vender</strong>
<p>O seu evento está ativo, mas ainda não pode receber pagamentos.</p>
</div>
</div>
{{template"callout"dict"Body""O seu evento está ativo, mas ainda não pode receber pagamentos.""Title""Ligue os pagamentos para começar a vender""Tone""warning"}}
negative
<divrst-calloutrst-tone="negative">
<spanrst-callout-icaria-hidden="true">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><circlecx="12"cy="12"r="10"/><pathd="m15 9-6 6"/><pathd="m9 9 6 6"/></svg>
</span>
<divrst-callout-body>
<strong>A última importação falhou</strong>
<p>Nada foi alterado. Corrija a linha 91 e tente de novo.</p>
</div>
</div>
{{template"callout"dict"Body""Nada foi alterado. Corrija a linha 91 e tente de novo.""Title""A última importação falhou""Tone""negative"}}
negative, anunciado como alerta
<divrst-calloutrst-tone="negative"role="alert">
<spanrst-callout-icaria-hidden="true">
<svgclass="icon"viewBox="0 0 24 24"fill="none"stroke="currentColor"stroke-width="2"stroke-linecap="round"stroke-linejoin="round"aria-hidden="true"><circlecx="12"cy="12"r="10"/><pathd="m15 9-6 6"/><pathd="m9 9 6 6"/></svg>
</span>
<divrst-callout-body>
<strong>A importação parou</strong>
<p>Nada foi alterado. Corrija a linha 91 e tente de novo.</p>
</div>
</div>
{{template"callout"dict"Body""Nada foi alterado. Corrija a linha 91 e tente de novo.""Title""A importação parou""Tone""negative""Alert"true}}
alert acrescenta role="alert" para mostrar mensagens importantes.
detail-list
Lista de definições sobre um registo num ecrã de detalhe. A marca mono é para valores de aspeto técnico.
Quatro dados, um de aspeto técnico
Coloque isto dentro de <section rst-box>.
<dlrst-detail>
<dt>Público</dt>
<dd>Membros</dd>
<dt>Página principal</dt>
<dd>Não</dd>
<dt>Publicado</dt>
<dd>
<timedatetime="2026-08-02">2 de agosto de 2026</time>
</dd>
<dt>Referência</dt>
<ddclass="rst-mono">post_01H9ZQ</dd>
</dl>
Coloque isto dentro de <section rst-box>.
{{template"detail-list"dict"Items" (list
(dict"Label""Público""Value""Membros")
(dict"Label""Página principal""Value""Não")
(dict"DateTime""2026-08-02""Label""Publicado""Value""2 de agosto de 2026")
(dict"Label""Referência""Mono"true"Value""post_01H9ZQ"))}}
notice
Uma confirmação de uma linha depois de um redirecionamento. Recebe uma cadeia simples, não um dict, e não desenha nada se estiver vazia.
O aviso que cada moldura mantém na página, com o Notice dos dados da página, para que um leitor de ecrã ouça a mensagem e o live.js a possa preencher no lugar.
A linha de resumo de erros de um formulário, role="alert". Recebe uma cadeia simples; não desenha nada quando não há erro.
Um envio recusado
<prst-form-errorrole="alert">Esse título já está a ser usado.</p>
{{template"form-error""Esse título já está a ser usado."}}
job-status
O fragmento consultado de uma tarefa em segundo plano. O atributo data-poll só é emitido enquanto a tarefa corre: omiti-lo é a forma de parar a consulta.
A decorrer
<divrst-jobdata-poll="/jobs/1/fragment"data-poll-every="2">
<spanrst-spinaria-hidden="true"></span> <bdi><strong>Importação</strong></bdi> em curso: <bdi>128 de 400</bdi>…
<progressrst-job-barvalue="32"min="0"max="100"aria-hidden="true"></progress>
</div>
{{template"job-status"dict"Name""Importação""Percent" 32
"PollSeconds" 2
"PollURL""/jobs/1/fragment""Progress""128 de 400""Status""running"}}
Este faz consultas: é a única amostra da página que pede alguma coisa à rede e, num site estático, nunca chega a resolver-se.