Popover
Um painel flutuante ancorado a um gatilho que se redimensiona suavemente com o conteúdo e segue a direção do gatilho.
pnpm dlx shadcn@latest add https://hextaui.com/r/popover.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react cnCopie e cole o código a seguir no seu projeto.
components/ui/popover.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Conteúdo que muda de tamanho
Quando o conteúdo cresce ou encolhe, o popup anima a altura em vez de saltar. Mudanças contínuas, como digitar, seguem o conteúdo diretamente para nada ficar atrasado.
Controlado
Passe open e onOpenChange para controlá-lo com seu próprio estado. O segundo argumento diz por que mudou, como trigger-press, outside-press ou escape-key.
Posicionamento
side e align definem a posição preferida. Quando não há espaço, o popup inverte para o outro lado e se desloca para continuar na tela, mantendo 8px das bordas.
Abrir ao passar o mouse
Defina openOnHover no gatilho para cards de pré-visualização. delay e closeDelay evitam que ele pisque quando o ponteiro passa por cima.
Gatilhos desanexados
Crie um handle com createPopoverHandle para compartilhar um único popover entre vários gatilhos em qualquer lugar da árvore. Cada gatilho passa um payload, e o popup o renderiza por meio de um filho em função.
Com um calendário
Use className="w-auto p-0" para ajustar conteúdo que traz seu próprio padding. O popup acompanha o calendário quando ele muda de mês.
Aninhado
Um popover dentro de outro popover ou de um sheet fica em camada acima do pai. Cliques dentro do filho mantêm o pai aberto, e Escape fecha apenas a camada mais alta.
Conteúdo longo
Texto sem quebras é quebrado dentro do popup. Quando o conteúdo é mais alto que o espaço disponível, o popup rola por dentro em vez de sair da tela.
Modal
Com modal, a rolagem da página é travada e cliques externos apenas dispensam o popover. Renderize um <PopoverClose /> dentro para que o foco possa ser preso e leitores de tela em dispositivos touch tenham uma saída.
Desabilitado
Um gatilho disabled nunca abre seu popover.
Da direita para a esquerda
O popup assume a direção do gatilho que o abriu, mesmo renderizando em um portal. Lados lógicos como inline-end se invertem com ela.
| Tecla | Ação |
|---|---|
| EnterSpace | No gatilho, abre ou fecha o popover. O foco vai para dentro do popup. |
| Tab | Percorre o conteúdo do popup. Sair com Tab de um popover não modal o fecha. |
| Esc | Fecha o popover e devolve o foco ao gatilho. |
<PopoverTitle />e<PopoverDescription />rotulam e descrevem o popup para leitores de tela. Inclua um título sempre que o popup tiver mais que uma frase.- O foco vai para o primeiro elemento focável quando abre e volta ao gatilho quando fecha. Mude isso com
initialFocusefinalFocus. - Com movimento reduzido ativado, o popup faz fade sem escala.
Construído sobre o popover do Base UI. Cada parte aceita as props da primitiva que envolve.
| Prop | Tipo | Padrão |
|---|---|---|
defaultOpen | boolean | false |
open | boolean | – |
onOpenChangedetails.reason informa o que causou a mudança. | (open: boolean, details) => void | – |
onOpenChangeCompleteChamado após o fim da animação de abertura ou fechamento. | (open: boolean) => void | – |
modaltrue trava a rolagem da página e a interação externa. trap-focus apenas prende o foco. | boolean | "trap-focus" | false |
handleConecta gatilhos desanexados. | PopoverHandle<Payload> | – |
children | ReactNode | ({ payload }) => ReactNode | – |
| Prop | Tipo | Padrão |
|---|---|---|
openOnHover | boolean | false |
delayMilissegundos antes de abrir no hover. | number | 300 |
closeDelayMilissegundos antes de fechar depois que o hover termina. | number | 0 |
handle | PopoverHandle<Payload> | – |
payloadRepassado ao popup quando este gatilho o abre. | Payload | – |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-slot="popover-trigger" | Selecione o gatilho no CSS. |
data-popup-open | Presente enquanto seu popover está aberto. |
data-pressed | Presente enquanto o gatilho está pressionado. |
data-disabled | Presente quando o gatilho está desativado. |
Renderiza o portal, o positioner e o popup em uma só parte.
| Prop | Tipo | Padrão |
|---|---|---|
side | "top" | "right" | "bottom" | "left" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "center" |
sideOffsetEspaço entre o gatilho e o popup. | number | (data) => number | 6 |
alignOffset | number | (data) => number | 0 |
collisionPaddingEspaço mantido das bordas da viewport. | number | Rect | 8 |
collisionAvoidanceSe deve inverter, deslocar ou nenhum dos dois quando o espaço acaba. | CollisionAvoidance | – |
collisionBoundary | Boundary | – |
anchorPosiciona em relação a algo diferente do gatilho. | Element | RefObject | VirtualElement | () => Element | – |
sticky | boolean | false |
positionMethod | "absolute" | "fixed" | "absolute" |
initialFocusPara onde o foco vai quando o popover abre. | boolean | RefObject | (type) => HTMLElement | boolean | – |
finalFocusPara onde o foco vai quando o popover fecha. | boolean | RefObject | (type) => HTMLElement | boolean | – |
portalPropsProps do portal, como container. | PortalProps | – |
classNameO popup é w-72 por padrão. | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="popover-content" | O popup. |
data-slot="popover-positioner" | O elemento que posiciona o popup. |
data-open | Presente enquanto o popover está aberto. |
data-starting-style | Presente enquanto o popup anima a entrada. |
data-ending-style | Presente enquanto o popup anima a saída. |
data-side | O lado em que o popup terminou. |
data-align | O alinhamento com que o popup terminou. |
data-instant | Presente quando a mudança não deve animar. |
--transform-origin | O ponto a partir do qual o popup escala, no gatilho. |
--available-width | Espaço entre o gatilho e a borda da viewport. |
--available-height | Espaço entre o gatilho e a borda da viewport. A altura máxima do popup. |
--anchor-width | A largura do gatilho. |
--anchor-height | A altura do gatilho. |
Um <div> simples que empilha o título e a descrição.
| Atributo | Descrição |
|---|---|
data-slot="popover-header" | Selecione o cabeçalho no CSS. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <h2> |
| Atributo | Descrição |
|---|---|
data-slot="popover-title" | Rotula o popup. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <p> |
| Atributo | Descrição |
|---|---|
data-slot="popover-description" | Descreve o popup. |
| Prop | Tipo | Padrão |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-slot="popover-close" | Fecha o popover quando pressionado. |
createPopoverHandle<Payload>() retorna um handle que conecta um <Popover /> a gatilhos renderizados em outro lugar. Crie-o uma vez, fora do seu componente.
- Alert dialogUm diálogo de confirmação para ações destrutivas ou importantes que aguarda trabalho assíncrono e vira um bottom sheet no celular.
- CommandUma lista pesquisável de ações, inline ou como paleta ⌘K, com páginas, atalhos e correspondências destacadas.
- Context menuUm menu de ações ao clicar com o botão direito ou pressionar e segurar, com submenus, itens de checkbox e de rádio e feedback de pressão no toque.
- DialogUma janela sobre a página para formulários e tarefas focadas, com cabeçalho e rodapé fixos, aninhamento e um bottom sheet com deslize no celular.
- DrawerUm painel que desliza a partir de qualquer borda e acompanha o seu dedo, com pontos de ancoragem, uma alça funcional e drawers aninhados que se empilham.
- Dropdown menuUm menu de ações e opções atrás de um botão, com grupos, submenus, itens de checkbox e de rádio e atalhos.
Usado em blocos
Blocos que se baseiam em Popover.
- Prompt InputUm campo de conversa que começa como uma linha discreta, cresce até virar um card conforme você escreve e desce quando a conversa começa. Enter envia, de forma segura com entrada em japonês e chinês. Cole, solte ou escolha arquivos com prévias, progresso e nova tentativa. @ adiciona arquivos e / executa comandos a partir de um menu no cursor. Um seletor de modelo com teclas numéricas, um slider de esforço que ganha vida no Max, um anel de contexto, ditado com forma de onda ao vivo, chips de ferramentas, uma fila para mensagens digitadas enquanto uma resposta é transmitida e rascunhos que sobrevivem a um recarregamento.
- Agent TodosMostre o plano de um agente enquanto ele trabalha. Cada etapa passa de backlog para a fazer, em andamento e concluída, com tempos ao vivo, falhas e as chamadas de ferramenta por trás dela. Uma pílula de status para acima do composer, mudanças no plano que você consegue ver e uma etapa de revisão para editar o plano antes de executá-lo.
- Diff ReviewRevise as edições de um agente em vários arquivos antes que sejam aplicadas. Uma árvore de arquivos com contagens, aceite ou rejeite cada mudança, cada arquivo ou tudo de uma vez, comentários em qualquer linha ou intervalo que voltam para o agente, visões unificada e dividida, destaques por palavra, desfazer, edições em streaming e um resumo "4 arquivos editados" para o chat.
- Voice ModeConverse com o seu assistente. Oito estilos reativos ao áudio, de um céu nublado e uma bolha de ferrofluido a pixels com dithering, ASCII, um planeta CRT, pontos de meio-tom, um único anel e uma aura suave, além de quatro pontos reativos. Uma sessão em tela cheia com silenciar, interromper e legendas, uma pílula de voz no chat, um seletor de voz e um motor de navegador que escuta, espera você terminar e responde.