Pular para o conteúdo

Navegação e hierarquia

Em um sistema com vários produtos, muitas unidades e dezenas de telas, a pessoa precisa saber três coisas em qualquer momento: onde está, o que pode fazer aqui e como chegar a outro lugar. Navegação boa é a que não exige pensar: o operador em plena doca, com pressa, encontra o que precisa sempre no mesmo lugar. Regra de ouro: cada tipo de navegação tem um lugar e um componente. Não misture (páginas de módulos diferentes no mesmo submenu, ação no lugar de destino, produto dentro do menu do módulo).

O menu lateral e a topbar combinam cinco áreas, cada uma com um papel:

Área Componente Papel O que entra O que não entra
Controle de escopo (topo do menu) mds-menu-business Define os dados, as permissões e os módulos visíveis Unidade de negócio, filial, empresa, workspace Páginas
Navegação global (menu, nível 1) mds-menu + mdsMenuItem md Grandes áreas do sistema Módulos (Planejamento, Tracking…) e visões agregadas (Dashboards) Ações, páginas de módulos diferentes
Navegação local (menu, nível 2) mds-menu-item-group + mdsMenuItem sm Páginas de um módulo Só as páginas do módulo pai Páginas de outro módulo
Utilitária do sistema (base do menu) mdsMenuItem ancorado na base Configuração e bastidores Automação, Preferências, Integrações, Cadastros gerais Fluxo operacional do dia a dia
Utilitária global (topbar) mds-topbar + slots Apoio transversal a qualquer tela Pesquisa global, notificações, ajuda, seletor de produtos, perfil Navegação entre páginas
Dentro da página, quatro componentes organizam o conteúdo:
Componente Papel
— —
Breadcrumb Mostra o caminho e permite subir de nível
PageHeader Identifica a página, destaca a ação principal e reúne os utilitários da tela
Tabs Alterna conteúdos do mesmo nível, sem sair da página
SectionHeader Divide o conteúdo em blocos dentro da página ou do formulário
┌─ Topbar ──────────────────────────────────────────────────────────┐
│ Marca · Produto [Pesquisa global] Ajuda Apps Perfil │
├─ Menu ───┬────────────────────────────────────────────────────────┤
│ Unidade │ Breadcrumb: Início / Cadastros / Veículos │
│ ──────── │ PageHeader: Título [Cadastrar] [↻] [⚙] [⋮] │
│ Módulo 1 │ Tabs: Visão Geral · Ocorrências · Custos │
│ Página │ ┌ SectionHeader: Dados do Veículo ──────────────────┐ │
│ Módulo 2 │ │ conteúdo │ │
│ ──────── │ └───────────────────────────────────────────────────┘ │
│ Config. │ │
└──────────┴────────────────────────────────────────────────────────┘

Da fronteira mais ampla até o detalhe: Produto (AppLauncher) → Contexto (unidade) → Módulo (menu, nível 1) → Página (menu, nível 2) → Aba → Seção

  • Deve limitar o menu a dois níveis (módulo e página). O Dropdown também não passa de dois níveis (menu e submenu).
  • Se você sente falta de um terceiro nível, o problema quase sempre é a estrutura da informação, não o menu. Não aninhe mais. Reagrupe páginas, use Tabs ou separe em outro módulo.
  • Breadcrumb entra em páginas com 3 ou mais níveis de profundidade (Início > Cadastros > Veículos). Em estrutura plana, não use.
Preciso… Use Observação
Trocar de produto (TMS, Roteirizador, Torre de Controle) AppLauncher (topbar) Produtos não licenciados ficam separados (groupLicensed)
Trocar de unidade ou empresa Alternador de contexto (mds-menu-business) Muda dados, permissões e módulos
Ir a outro módulo Menu, nível 1
Ir a outra página do módulo Menu, nível 2
Ver outro conteúdo da mesma página Tabs Aba controlada por rota quando é uma subpágina
Alternar entre 2 ou 3 visões exclusivas simples mds-control-group Sem rota, sem estado profundo
Voltar a um nível acima Breadcrumb
Executar algo Botão ou Dropdown Ação não é destino
Dividir a página em blocos SectionHeader
Escolher um período DateNavigator (disponibilidade) ou DatePicker (dado)
  • Fica no topo do menu, mostrando o nome da unidade ativa. Rótulo: Unidade de Negócio.
  • Um único lugar para trocar. O perfil na topbar pode mostrar a unidade (Unidade: Matriz), mas não trocá-la. Dois seletores para a mesma coisa confundem.
  • Trocar o contexto recarrega dados, permissões e módulos. Avise que a tela vai atualizar quando houver dado não salvo.
  • Nível 1 = módulo, com ícone e maior peso visual. Nível 2 = páginas, menores e recuados. Rótulos em caixa de título, curtos: Dashboard, não “Ver o Dashboard de indicadores”.
  • Nunca misture páginas de módulos diferentes sob o mesmo pai.
  • Item ativo sempre destacado (fundo claro na cor primária). Um módulo com página ativa abre sozinho.
  • Módulo com filhos mostra o indicador de expandir. Sem filhos, é um item direto.
  • Navegação utilitária (Automação, Preferências, Integrações, Cadastros gerais) fica ancorada na base, separada dos módulos operacionais.
  • Notificação em item: o mdsMenuItem tem um marcador (notify). [Proposta] Use só o marcador no menu; o detalhe fica na página.
  • Três modos: | Modo | Quando | Regra | | — | — | — | | Estático expandido (256 px) | Telas grandes | Ícone e rótulo | | Estático compacto (64 px) | Ganhar área de trabalho | Só ícones, com Tooltip em cada um | | Flutuante | Mobile e telas reduzidas | Sobrepõe o conteúdo, com logo e botão de fechar |
  • Esquerda: marca e nome do produto ativo (Torre de Controle), em caixa de título.
  • Pesquisa global por cargas, veículos e motoristas, em todo o sistema.
  • Utilitários: notificações, ajuda, seletor de produtos e perfil. [Proposta] Fixar a ordem (do mais frequente ao menos frequente) para que fiquem sempre no mesmo lugar em todos os produtos.
  • Deve ficar fixa e visível em todas as telas. Botão só de ícone sempre com Tooltip (Notificações).
  • O controle do menu (expandir e compactar) mora aqui.
  • O último item é a página atual: sem link, em negrito ou cor diferente. Todos os anteriores são links.
  • Nomes curtos: Inventário, não “Gerenciamento de Inventário de Produtos Perecíveis”.
  • Trilha longa: colapsa os níveis do meio em … (por padrão, a partir de 4 itens), mantendo o primeiro e o último.
  • [Proposta] O nome no breadcrumb é o mesmo do item de menu e do título da página, ou a versão abreviada dele.
  • Um título por página, em caixa de título, com o mesmo nome do item de menu: Gestão de Fretes.
  • Ação principal (CTA) logo ao lado do título, com o estilo primary e o verbo da tarefa: Cadastrar, Nova Viagem. Um único botão de destaque por tela.
  • Utilitários à direita: atualizar (↻), filtros e configurações, e Mais opções (⋮) para o que é menos frequente. Todos só ícone e com Tooltip.
  • Busca rápida da página abaixo ou ao lado, com placeholder curto: Pesquisar por código (veja a nota sobre “Buscar” mais abaixo).
  • Só conteúdos do mesmo nível. Não use abas para trocar de módulo ou de produto.
  • Rótulos substantivos, em caixa de título, sem ponto final: Visão Geral, Ocorrências, Custos.
  • A mais importante à esquerda. Exatamente uma ativa.
  • Ícone em todas ou em nenhuma. Nunca misture.
  • Modo compacto: só o ícone, com Tooltip obrigatório.
  • Aba que é uma subpágina tem rota própria, assim o link e o botão “voltar” do navegador funcionam.
  • Título em caixa de título (Dados do Proprietário), descrição opcional em caixa de sentença (Insira as informações conforme consta no CRLV.).
  • O tamanho reflete a profundidade: seção mestra maior, subseção menor.
  • Consistência: se uma seção da página tem descrição, todas as outras têm.
  • Item pai curto e categórico (Filtros Avançados, Relatórios de Frota), seta à direita para submenu, sem reticências em item que só abre submenu.
  • Ações frequentes no topo. Destrutivas no fim, separadas por um divisor, em cor de perigo. Veja Ações destrutivas e confirmação.
  • Até dois níveis.
  • Item que abre confirmação ou janela leva reticências: Imprimir Comprovante…, Excluir Registro…
  • Nome do produto em caixa de título (TMS), descrição em caixa de sentença (Gestão de transporte), ícone distintivo e seta indicando que leva a outro contexto.
  • [Proposta] Produto não contratado aparece separado e explica como obter, em vez de simplesmente sumir ou parecer quebrado.
  • Filtro de contexto por período (semana ou mês) que atualiza a página. Dias com vaga em azul, sem vaga em cinza. Tooltip: Sem disponibilidade.
  • Exceção ao Estilo de escrita: no cabeçalho e nos dias da semana, o componente usa abreviações em caixa alta e mês abreviado (08/AGO – 14/AGO, DOM, SEG, TER) por falta de espaço. É a única exceção prevista à regra de não digitar em maiúsculas e ao formato dd/mm/aaaa.
  • Uma ação principal por tela. Ela é o único botão de destaque e vem junto ao título. As demais são secundárias ou ficam em Mais opções.
  • A ordem de leitura segue a importância: o que é mais crítico vem primeiro, à esquerda e no topo (a aba mais importante à esquerda; as ações frequentes no topo do menu de ações).
  • Um título, muitos subtítulos. A página tem um título (PageHeader); as seções têm SectionHeader em tamanhos que refletem a profundidade. Não pule níveis.
  • Peso visual proporcional à importância: módulo (nível 1) maior que página (nível 2); seção mestra maior que subseção.
  • Ícones ajudam, mas não substituem texto em navegação principal. Ícone sozinho só em modo compacto, sempre com Tooltip.
  • Onde estou? O item de menu ativo, a aba ativa e o último item do breadcrumb dizem a mesma coisa. Os três devem concordar.
  • URL é o estado: módulo, página e aba refletem na URL, para poder compartilhar o link e voltar com o botão do navegador [Proposta].
  • Item sem permissão: módulos e páginas que a pessoa não pode acessar não aparecem no menu [Proposta]. Só aparece desabilitado, com o motivo, quando a pessoa precisa saber que o recurso existe.
  • Carregando a próxima página: mantenha o menu e o cabeçalho no lugar; o que carrega é a área de conteúdo (veja Estados da interface).
Elemento Forma Exemplo
Módulo e página no menu Substantivo do destino, caixa de título, curto Dashboard · Agendamentos · Gestão de Pátio
Nome do produto Caixa de título Torre de Controle
Título da página Igual ao item de menu Gestão de Fretes
Aba Substantivo, caixa de título, sem ponto Visão Geral
Breadcrumb Versão curta do nome Inventário
Ação (botão) Verbo + objeto Cadastrar · Nova Viagem
Tooltip de ícone Substantivo ou verbo curto, sentença Notificações · Atualizar
Placeholder da pesquisa Sentença, sem reticências Pesquisa global · Pesquisar por código
Seletor de unidade Rótulo e valor Unidade: Matriz
Nome de destino é substantivo. Nome de ação é verbo. “Agendamentos” leva a uma lista. “Novo Agendamento” faz algo. Não misture no mesmo menu.

O que encontrei ao comparar o Notion, o código e as diretrizes já escritas:

# Ponto Onde Sugestão
1 As páginas PageHeader e SectionHeader estão com o conteúdo trocado no Notion. A página “PageHeader” descreve o SectionHeader e vice-versa. O código e as stories do Angular já tratam disso Notion Trocar o conteúdo entre as páginas e conferir qual frame do Figma pertence a cada uma
2 Menu/Sidebar lista mds-float-panel como componente Angular, mas no código é mds-menu + mdsMenuItem + mds-menu-item-group Notion (Menu Lateral / Sidebar) Corrigir o nome no Notion
3 A unidade ativa aparece em dois lugares (mds-menu-business troca; mds-menu-user mostra empresa/unidade) Menu e topbar Manter a troca em um lugar só e o outro apenas como leitura
4 Nomes de módulo misturam idiomas (Planejamento, Dock Scheduling, Crossdocking, Tracking, Acordos) e o mesmo assunto tem nome diferente dentro do módulo (Agendamentos, Gestão de pátio) Notion (Menu) Decidir no glossário quais são nomes próprios de produto (podem ficar em inglês) e quais são termos do domínio (português)
5 “Buscar” versus “Pesquisar”: o PageHeader usa Buscar por código, enquanto o botão padrão é Pesquisar Notion (PageHeader) Padronizar em Pesquisar por código
6 A tabela “Anatomia e Escrita” do Menu traz nomes de documentação (“Menu Principal”, “Navegação Local”) na coluna “Sugestão UX Writing”, o que dá a entender que são textos de tela Notion (Menu) Renomear a coluna para “Nome na documentação” e deixar claro que não é texto da interface
7 Reticências do Breadcrumb aparecem como três pontos (“…”) Notion (Breadcrumb) Usar o caractere único …
8 O modo compacto das Tabs oculta o rótulo por padrão (hideLabelMobile ligado) Angular (nav[mdsNavTabs]) Confirmar o que acontece com abas sem ícone em telas pequenas: sem ícone e sem rótulo, a aba some. Abas sem ícone precisam de [hideLabelMobile]="false"
9 Dropdown sem link de Figma e sem story no mds-styles Notion Adicionar o link do frame
10 A exceção do DateNavigator (caixa alta e “08/AGO”) contraria as regras gerais Notion (DateNavigator) Documentar como exceção, como feito acima, ou aproximar do formato padrão
Peça Frame no Figma
Menu Lateral / Sidebar Menu
MenuItem MenuItem
Topbar Topbar
AppLauncher AppLauncher
Tabs TabNav / Tabs
Breadcrumb Breadcrumb
PageHeader (conferir, veja o ponto 1) PageHeader
SectionHeader (conferir, veja o ponto 1) SectionHeader
DateNavigator DateNavigator
Dropdown Sem frame no Notion ainda
Ao desenhar uma tela, entregue: menu expandido, compacto e flutuante, o item ativo, o módulo aberto e fechado e a topbar em tela pequena.
Peça mds-styles (HTML/CSS) mds-angular
Menu lateral .mds-menu (--opened, --closed, --floating) <mds-menu [fixed] [forceFloating]>, com data-position="menu-business"
Alternador de contexto .mds-menu-business <mds-menu-business label description>
Item de menu .mds-menu-item (--active, --sm, --lg) <a mdsMenuItem [icon] [size] [active] [notify]>
Módulo com filhos .mds-menu__group <mds-menu-item-group [type]="menuOpened() ? 'collapse' : 'dropdown'">
Topbar .mds-top-bar <mds-topbar [label] [img] [fixed]> + slots mds-topbar-options e mds-topbar-actions
Perfil .mds-menu-user <mds-menu-user [name] [descricao] [responsive]>
Seletor de produtos — <mds-app-launcher [items] [activeItemId] [groupLicensed]>
Tabs .mds-nav-tabs <nav mdsNavTabs> + <li mdsNavTabsItem>
Breadcrumb .mds-breadcrumbs <mds-breadcrumbs [items] [maxItems]>
PageHeader .mds-page-options e .mds-page-title <mds-page-header [label]> com slots after-title e options
SectionHeader — <header mdsSectionHeader label description>
  • Item ativo: use routerLinkActive="mds-menu-item--active" (e exact: true na raiz). O grupo abre sozinho quando um filho está ativo.
  • Toggle do menu: (onToggleMenu) na topbar e [menuCompacted].
  • Alterne o tipo do grupo conforme o menu: collapse expandido, dropdown compacto.
  • Não existe <mds-nav-tabs> nem <mds-section-header>: são atributos em nav, li e header.
  • Cada tipo de navegação está no componente certo (produto, contexto, módulo, página, aba, seção)?
  • O menu tem no máximo dois níveis, e o nível 2 só traz páginas do módulo pai?
  • O item de menu ativo, a aba ativa e o último item do breadcrumb concordam?
  • O título da página é o mesmo nome do item de menu?
  • Há uma única ação principal, junto ao título, e as demais estão em Mais opções?
  • Rótulos de destino são substantivos e os de ação são verbos?
  • Botões só de ícone têm Tooltip?
  • As abas têm ícone em todas ou em nenhuma, e a mais importante à esquerda?
  • Menu compacto e flutuante e topbar em tela pequena estão desenhados?
  • A troca de unidade acontece em um único lugar?