Navegação

Componentes

Screen Skeleton

beta

A casca de toda tela autenticada: navegação, cabeçalho, miolo e seções. A discussão de uso está no padrão Casca de tela.

Ainda não é estável porque Rota não varrida pelo sensor. Ausência de medição não é aprovação. O contrato de maturidade explica o que cada requisito exige.

@voxmente/ui/components/ui/screen-skeleton

Orientação

A casca de toda tela autenticada: navegação, cabeçalho, miolo e seções. O que muda entre as frentes do produto é o que entra nos slots, nunca a casca.

Quando usar

  • Toda tela autenticada, sem exceção — é a peça que impede cada frente de inventar o próprio layout.
  • A tela precisa dos quatro estados (carregando, vazia, sem permissão, erro) na mesma moldura.
  • É preciso garantir que o cabeçalho e a navegação não se desalinhem entre telas diferentes.

Quando não usar

  • Em tela pública ou de autenticação, que não tem navegação lateral nem cabeçalho de página.
  • Para compor um pedaço de tela: a casca é a tela inteira, não um contêiner qualquer.
  • Para contornar uma limitação da própria casca. Se algo não cabe, corrija a casca — remendar na tela espalha o problema.
Playground
Navegação

Bom dia, Renata

Quatro turmas ativas nesta semana.

Turmas

32 alunos na 7º ano B, trilha de leitura inferencial.
<ScreenSkeleton nav={<EscolaNav />}>
  <ScreenHeader title="Bom dia, Renata" description="Quatro turmas ativas nesta semana.">
    <Button>Programar aplicação</Button>
  </ScreenHeader>
  <ScreenContent>
    <ScreenSection title="Turmas">…</ScreenSection>
  </ScreenContent>
</ScreenSkeleton>

Anatomia

As partes deste componente e como se aninham. A árvore vem das demonstrações desta página, então descreve um exemplo que renderiza.
ScreenSkeleton
  └─ ScreenHeader
  └─ ScreenContent
    └─ ScreenSection

Exportadas, mas sem demonstração nesta página: ScreenTopbar.

Uso

A forma de toda tela autenticada: navegação fixa à esquerda, cabeçalho e miolo à direita. O que muda entre Backoffice, Escola, Família e Terapeuta é o conteúdo do slot nav, nunca a casca. Quando e por que usar está no padrão Casca de tela — aqui é só a API.
Navegação

Bom dia, Renata

Quatro turmas ativas nesta semana.

Turmas

32 alunos na 7º ano B, trilha de leitura inferencial.

Sem navegação

O prop nav é opcional. Sem ele, a Sidebar não é montada — não existe uma barra vazia ocupando espaço. Use em telas fora do menu principal, como um passo de configuração inicial.

Configurar escola

Passo 1 de 3.

Nome da escola e rede de ensino.

Faixa de identidade de um registro

ScreenEntityHeader substitui o ScreenHeader quando a tela é o recorte de um registro — um aluno, uma turma, uma lição. name, status e actions ficam visíveis enquanto tabs navega entre Resumo, Perfil, Trilha e as demais abas do registro.
7B

7º ano B

Ativa

32 alunos · trilha de leitura inferencial

Quatro sessões concluídas de seis.

A régua de largura é da área, não da tela

ScreenSkeleton declara largura=contida (o miolo prende em --layout-content-max e se centra) ou largura=cheia (a tela inteira trabalha, que é o caso do Backoffice). Cabeçalho, faixa de entidade e miolo leem a mesma régua: quando só o miolo a respeitava, em 1920px o título ia até a borda direita e a tabela parava 384px antes — em 38 das 89 rotas do produto. fullWidth continua existindo como escape de uma tela dentro de uma área contida, e cobra o preço de desalinhar do próprio cabeçalho.

Correções pendentes

12 realizadas · 3 agendadas

Acessibilidade

O que o componente já garante, e o que continua sendo responsabilidade da tela.
  • A casca é quem define os marcos da página: navegação, cabeçalho e conteúdo principal precisam ser regiões distintas.
  • O salto para o conteúdo principal é responsabilidade da casca, não de cada tela.
  • Em 390 px a navegação some da lateral; verifique que ela continua alcançável antes de considerar a tela responsiva.

Em contexto de produto

Onde isto aparece numa tela real da Vox Mente, e não numa vitrine.

Os quatro estados de tela são demonstrados dentro da mesma casca, lado a lado, porque o erro comum é desenhar só o estado cheio.

Ver os estados de tela

Componentes relacionados

Vizinhos que resolvem o problema parecido. Os links são resolvidos contra o registro.

Referência da API

Extraída do TypeScript de @voxmente/ui a cada build. Se divergir do código, o código mudou.

ScreenContent

PropTipoPadrão
fullWidthbooleanfalse

Também aceita as props de React, incluindo className e os atributos de DOM.

ScreenEntityHeader

PropTipoPadrão
actionsstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
alertsstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
mediastring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
metastring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
namestring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
statusstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
tabsstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null

Também aceita as props de React, incluindo className e os atributos de DOM.

ScreenHeader

PropTipoPadrão
descriptionstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
titlestring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null

Também aceita as props de React, incluindo className e os atributos de DOM.

ScreenSection

PropTipoPadrão
titlestring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null

Também aceita as props de React, incluindo className e os atributos de DOM.

ScreenSkeleton

PropTipoPadrão
largura

Régua de largura da área, declarada uma vez pela casca. `contida` prende o miolo em `--layout-content-max` e o centra; `cheia` deixa a tela inteira trabalhar, que é o que uma área de tabelões como o Backoffice quer. A régua mora aqui, e não em cada tela, porque cabeçalho e miolo precisam da **mesma**: enquanto só o `ScreenContent` a respeitava, em 1920px o título e o botão de ação iam até a borda direita e a tabela parava 384px antes — duas réguas na mesma tela, medido em 38 das 89 rotas do produto.

"contida" | "cheia""contida"
mobileBar

Desliga a barra móvel embutida. Uma tela que monta a própria `ScreenTopbar` (gatilho + separador + breadcrumb, sempre visível) usa `mobileBar={false}` para não acabar com duas barras empilhadas no celular.

booleantrue
navstring | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null
navLabel

Rótulo da barra móvel — some no desktop, onde a barra já está visível.

string | number | bigint | boolean | ReactElement<unknown, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | Promise<...> | null"Navegação"

Também aceita as props de React, incluindo className e os atributos de DOM.

ScreenTopbar não tem props próprias — aceita apenas as props herdadas, incluindo className e os atributos de DOM.

Origem do dado
  • Orientação, acessibilidade e relacionados: documentação
  • Anatomia: exemplo desta página
  • Demonstrações e playground: componente real de @voxmente/ui
  • Referência da API: TypeScript do pacote
  • Cor, espaçamento e raio das demonstrações: tokens de theme.css