Dock
StableUma barra de ícones que crescem quando o ponteiro se aproxima, no estilo do dock do macOS. O Dock só mede e amplia: o que se opera é o controle dentro de cada DockIcon — um link quando leva a algum lugar, um botão quando faz algo —, com nome acessível próprio. O foco por teclado amplia como o ponteiro; toque e movimento reduzido mantêm os ícones no tamanho de repouso.
Instalação
npx up-web-ds add dockPreview
Basic
With Separator
With Actions
Without Magnification
Direction Bottom
Direction Top
Custom Sizes
All states
Basic
With Separator
With Actions
Without Magnification
Direction Bottom
Direction Top
Custom Sizes
Usage
Props
Dock
Estende Omit< React.ComponentProps<'div'>, 'children' | 'onAnimationStart' | 'onDrag' | 'onDragEnd' | 'onDragStart' > & VariantProps<typeof dockVariants>. Aceita também os atributos padrão de um elemento React (275 não listados).
DockIcon
Estende DockIconProps. Aceita também os atributos padrão de um elemento React (335 não listados).
prop obrigatória.
Composition
Todo DockIcon dentro de um Dock recebe dele o tamanho, a ampliação e o ponteiro, e os valores do Dock prevalecem sobre os do ícone; outro filho, como um Separator, é mantido como está.
Metadata
Notas de acessibilidade
Verificado em tests/e2e/dock.spec.ts no Chromium desktop e mobile, em light e dark, com Axe sem violações WCAG 2.2 AA. Teclado: o Dock e o DockIcon não são paradas de tabulação — são o recipiente e o círculo que cresce —, e Tab percorre os controles dentro deles, na ordem visual, com anel de foco visível; o foco visível amplia o ícone como o ponteiro faria, então o anel nunca é a menor coisa da fileira. Isso muda o upstream, onde o DockIcon era um div com cursor-pointer e nenhum papel: o cursor prometia um clique que o padding não entregava, e a mudança está registrada no ingestion record. Leitor de tela verificado por teste e pela árvore de acessibilidade: cada controle tem nome próprio (aria-label, com Tooltip como rótulo visível), o Dock não inventa papel — um dock de links vai dentro de um nav nomeado, um dock de ações recebe role="group" e aria-label —, e o Separator entre grupos é anunciado. Touch verificado em viewport de 375px com emulação de toque: cada controle mede pelo menos 24x24 em repouso, a barra não provoca rolagem horizontal, e um toque não amplia nem deixa um ícone ampliado preso (o upstream reagia ao mousemove sintético do toque e nunca recebia o mouseleave). Reduced motion verificado em navegador com prefers-reduced-motion: reduce e por teste: a ampliação é uma mola em JavaScript, que motion-reduce: não alcança, então a política é useReducedMotion() — os ícones ficam no tamanho de repouso, como com disableMagnification, e a superfície de hover é a resposta.
Classificação
- Layer
- Primitive
- Domínio
- Domain-free (compartilhado)
- Categoria
- navigation
- Status
- Stable
Origem e distribuição
- Fonte
- magic registry / dock
- Licença
- MIT
- Distribuição
- Interna
Acessibilidade
- Teclado: revisado
- Leitor de tela: revisado
- Touch: revisado
- Reduced motion: revisado
Dependências
- Pacotes
- class-variance-authority, motion
- Ícones
- Nenhum
- Construído sobre
- Nenhum
- Usado por
- Nenhum ainda