Movimento
As curvas de easing, as durações e a verificação de movimento reduzido com que todo componente anima, além de hooks para transformações de tamanho e destaques deslizantes.
pnpm dlx shadcn@latest add https://hextaui.com/r/motion.jsonAdiciona o utilitário e tudo de que ele depende ao seu projeto.
Copie e cole o código a seguir no seu projeto.
lib/motion.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Todo componente do HextaUI se move com as mesmas poucas curvas e durações, então a biblioteca parece uma coisa só.
- Ease out para o que responde a você. Elementos que entram, expandem ou seguem um clique começam rápido e desaceleram, para a interface parecer imediata.
- Curto e interrompível. A maior parte do movimento dura de 150 a 300ms. Tudo que pode ser revertido parte de onde está agora em vez de recomeçar.
- Movimento reduzido é um segundo design, não um botão de desligar. O movimento vira mudanças instantâneas ou fades simples, e o estado continua legível.
O tema define as curvas como utilitários de easing do Tailwind, e lib/motion exporta os mesmos valores para a Web Animations API.
| Classe | Descrição |
|---|---|
ease-out-quint | easeOut em JS. O padrão para movimento: popovers, destaques, mudanças de tamanho. |
ease-out-cubic | Um ease out mais suave para mudanças de cor e sombra em hover e foco. |
ease-in-out-quart | easeInOut em JS. Para movimento entre dois estados de repouso que ninguém disparou diretamente. |
ease-spring | easeSpring em JS. Uma mola com pequeno overshoot, escrita como linear(), para coisas que pousam, como o thumb de um toggle. |
ease-drawer | A curva de sheet do iOS para drawers e sheets que deslizam a partir de uma borda. |
| duration. | Descrição |
|---|---|
press: 100 | Estado pressionado descendo. |
release: 200 | Voltando depois de um pressionamento. |
hover: 150 | Feedback de hover e foco. |
enter: 200 | Elementos aparecendo. |
exit: 150 | Elementos saindo. As saídas são mais rápidas que as entradas, para nunca segurarem nada. |
morph: 300 | Mudanças de tamanho e posição. |
prefersReducedMotion() lê a media query no momento da chamada. Verifique quando a animação começa em vez de uma única vez na montagem, para que a mudança da configuração do sistema valha de imediato. Retorna true no servidor.
- Qualquer mudança no DOM dentro do elemento dispara um morph, seja texto, filhos ou ícones. Mudanças de tamanho vindas de fora, como um resize, não disparam, então o elemento acompanha seu contêiner sem atraso.
- Uma mudança no meio do morph continua a partir do tamanho atual. Enquanto ele roda, o elemento tem
data-morphing, que você pode usar para cortar o overflow ou pausar outras transições. - Mantenha o elemento no tamanho natural: sem largura ou altura fixa no eixo animado. Adicione
overflow-hiddenpara o novo conteúdo não vazar enquanto cresce. - Retorna uma ref de callback. Combine-a com outras refs usando
useMergedRef.
- O destaque recebe tamanho e translação por estilos inline. Dê a ele
absolute top-0e uma transição emtransform,width,heighteopacity. - O hook observa o atributo que você nomeia com um
MutationObserver, então acompanha o estado de qualquer lugar, incluindodata-pressed,data-checkedouaria-currentdo próprio Base UI. data-visibleé definido enquanto algo corresponde.data-instanté definido quando o destaque deve saltar: na primeira aparição, em resize e scroll, e com movimento reduzido. Estilize comodata-instant:transition-opacity.- Ele mede levando em conta a escala da barra, então permanece alinhado dentro de um dialog que ainda está ampliando.
| Prop | Tipo | Padrão |
|---|---|---|
axisQual dimensão animar. | "width" | "height" | – |
enabledSe deve animar. | boolean | true |
durationMilissegundos. | number | 300 |
easingQualquer easing CSS. | string | easeOut |
| Prop | Tipo | Padrão |
|---|---|---|
barRefO contêiner posicionado. | RefObject<HTMLElement | null> | – |
highlightRefO elemento a mover. | RefObject<HTMLElement | null> | – |
selectorCorresponde ao filho a destacar. | string | – |
attributeO atributo cujas mudanças movem o destaque. | string | "data-popup-open" |
| Exportação | Descrição |
|---|---|
easeOut | cubic-bezier(0.23, 1, 0.32, 1) |
easeInOut | cubic-bezier(0.77, 0, 0.175, 1) |
easeSpring | Uma mola linear(). |
duration | press, release, hover, enter, exit e morph. |
prefersReducedMotion() | Se o movimento reduzido está ativado. true no servidor. |
- AlertMensagens inline para status e feedback, com uma superfície neutra, um ícone colorido e um botão de dispensar que recolhe suavemente.
- AttachmentCards de arquivo e imagem para uploads, com progresso, estados, ações, um gatilho no card inteiro e nomes que mantêm a extensão.
- BadgeRótulos de status com pontos coloridos, tags removíveis que deslizam até fechar e contagens que rolam até o novo valor.
- BreadcrumbUma trilha de links até a página atual que quebra linha com segurança, se espelha em layouts da direita para a esquerda e expande os segmentos recolhidos no próprio lugar.
- CalendarUma grade de datas para seleção única, de intervalo e múltipla, com meses deslizantes, prévias de intervalo e dias com tamanho adequado ao toque.
- CommandUma lista pesquisável de ações, inline ou como paleta ⌘K, com páginas, atalhos e correspondências destacadas.