Componentes
Janela de compromisso
A linha que acende
- 1Caixa do íconesize-7 · rounded-md
- 2Íconesize-4 · Lucide stroke 2
- 3Vão até o campogap-3
- 4Recuo de texto soltoRECUO_DA_LINHA = pl-10 (28 + 12)
Armadilha já paga`aceso` tem três valores, não dois
undefined é o estado NEUTRO e existe pra linha que não é campo (o telefone no cartão de detalhe): pintá-la de verde diria que alguém cumpriu uma etapa que nunca existiu.NotaA caixinha desliga o termômetro no Provider
FamiliaDaJanelaProvider termometro={false} pinta todo ícone que tem estado em text-fg-subtle, sem caixa acesa nem tracejada. É a etiqueta da linha, não enfeite: por isso fg-subtle, que passa dos 3:1, e não o ink-400 do neutro. Na janela pequena a cor do tipo mora no cabeçalho e na aba. O leitor de tela segue ouvindo o estado ("Serviço: falta preencher"): só a pintura saiu. A folha aberta pelo "Mais opções" tem o próprio Provider, que liga o termômetro de volta.NotaO horário da caixinha tem duas linhas
Linha topo põe o ícone na altura da primeira linha, como no Google; corrigindo as horas, os campos são uma linha só e o ícone volta pro meio.Armadilha já pagaQuem nomeia a linha é a caixa do ícone
role="img" com aria-label="Serviço: preenchido". O sr-only solto sai — todo controle das linhas já tem aria-label próprio, e os dois juntos faziam o leitor anunciar a linha duas vezes.<Linha icone={Stethoscope} rotulo="Serviço" aceso={escolhido !== undefined}>
{/* Só serviço cadastrado: digita pra buscar, a lista flutua por cima. */}
<CaixaDeLista rotulo="Serviço" placeholder="Escolher o serviço" className={cn(FANTASMA, "min-w-0 flex-1 text-sm")} … />
</Linha>Família de cor por tipo
| Família | Tipo | Cabeçalho | Verbo | Aceso (bolha, ícone e aba) |
|---|---|---|---|---|
| brand | Agendamento | Novo agendamento | Agendar | bg-brand-muted text-brand-strong |
| warning | Encaixe | Novo encaixe | Encaixar | bg-warning-soft text-warning-strong |
| ink | Bloqueio | Novo bloqueio | Bloquear | bg-secondary text-secondary-foreground |
NotaÍcone, título e verbo têm um dono
TIPO_NA_JANELA, em janela-linha.tsx: a caixinha e a folha por cima são a mesma criação, e o botão de uma não pode dizer Agendar enquanto o da outra diz Encaixar.NotaUm par aceso só, e ele é exportado
ACESO_DA_FAMILIA. Duas definições da mesma família (uma pro ícone, outra pra aba) divergiram no primeiro dia, e uma janela com duas leituras da mesma cor lê como tela remendada.NuncaA escala ink no lugar do token de papel
secondary, e a aba neutra sobe pro bg-ink-200 porque seleção não pode ser igual ao hover das outras. ink-400 fica de fora de qualquer coisa que diga o tipo ou o estado: é dot decorativo e não chega nos 3:1. Por isso o ícone sem termômetro é text-fg-subtle, não ink-400.Sim
O CTA fica no Button do canon, nos três tipos.
A identidade do tipo mora no cabeçalho, na aba e na palavra do botão. Isso basta: a janela inteira já mudou quando a aba mudou.
Não
bg-warning-strong text-warning-fg · bg-fg text-surface
Tinta de TEXTO virando preenchimento, e um par que é preto no claro e branco puro nos escuros. Cor nova entra por globals.css, nos cinco temas, e aparece na página de Cor.
Painel de aviso âmbar
Pedro Lima já está das 15:15 às 16:00 nesta coluna. Dá pra marcar assim mesmo: os dois ficam lado a lado.
NotaÂmbar sempre diz o que continua valendo
Armadilha já pagaA região viva nasce antes do texto
p role="status" em sr-only com a frase. Inserir o nó e o texto no mesmo quadro é o caso que várias duplas navegador/leitor perdem, e live region com botão dentro faz o leitor reanunciar a ação a cada mudança.O selo neutro do convidado avulso
NotaA receita tem UM dono, e não é esta página
A palavra é paciente
| Superfície | Diga | Não diga |
|---|---|---|
| Placeholder do campo grande da caixinha | Adicionar paciente | Adicionar contato |
| Placeholder do campo da folha grande | Buscar ou digitar um nome | Buscar contato |
| Última linha da lista que se digita | Ver todos os cadastros | Ver todos os contatos |
| Botão que abre a lista | Escolher dos cadastros | Lista de contatos |
| Título do modal | Escolher o paciente | Escolher o contato |
| Rótulo da listbox | Pacientes encontrados | Contatos encontrados |