import { type EventEmitter } from '../../stencil-public-runtime';
import type { DropdownArrowPosition, DropdownOpenChangeDetail, DropdownPlacement } from './dropdown.types';
/**
* O `br-dropdown` abre um painel flutuante a partir de um botão, com ações ou conteúdo complementar, como um menu "Mais opções".
*
* Coloque o botão no slot `trigger` e o conteúdo no slot `target`:
*
* ```html
*
* Mais opções
*
* Exportar
* Imprimir
*
*
* ```
*
* O painel fecha com Escape ou com um clique fora dele (desative com `prevent-auto-dismiss`). A posição é definida por `placement`, por exemplo `bottom-start` ou `top-end`. Para acompanhar a abertura e o fechamento, ouça `brDropdownOpenChange`.
*
* ### Quando usar
*
* - Várias ações secundárias quando há pouco espaço na tela.
*
* ### Quando evitar
*
* - Escolher um valor de formulário: use `br-select`.
* - Navegação principal do site: use `br-menu`.
* - Avisos: use `br-message` ou `br-notification`.
*
* Consulte as [diretrizes de design do GovBR](https://www.gov.br/ds/components/dropdown?tab=designer).
*
* @category Ações, Sobreposições
* @status stable
* @slot trigger - Slot para o elemento que aciona a abertura do dropdown.
* @slot target - Slot para o conteúdo exibido pelo dropdown.
*
* @part trigger - Área do acionador do dropdown.
* @part target - Área de conteúdo exibida pelo dropdown.
* @part trigger-arrow - Indicador visual opcional do acionador do dropdown.
*/
export declare class Dropdown {
/**
* Referência ao elemento host do componente.
* Utilize esta propriedade para acessar e manipular o elemento do DOM associado ao componente.
*/
el: HTMLBrDropdownElement;
/**
* Identificador único do componente.
* Quando omitido, um valor é gerado automaticamente.
*
* > **Padrão:** valor único gerado por generateUniqueId().
*
* > **Uso compartilhado:** mantenha esta descrição idêntica em todos os componentes que usam `customId`.
*/
customId: string;
/**
* Indica se o dropdown está aberto ou fechado.
* Esta propriedade é refletida no DOM e pode ser alterada externamente.
* O valor padrão é falso (fechado).
*/
isOpen: boolean;
/**
* Define o posicionamento do target (alvo) em relação ao trigger (acionador).
*/
placement: DropdownPlacement;
/**
* Exibe uma seta ao lado do elemento acionador.
* O valor padrão é falso para preservar a apresentação dos triggers existentes.
*/
showArrow: boolean;
/**
* Define o posicionamento da seta ('left' ou 'right') em relação ao elemento acionador.
* O valor padrão é 'right'.
*/
arrowPosition: DropdownArrowPosition;
/**
* Define se o dropdown deve permanecer aberto quando outro dropdown é aberto.
* Quando definido como false (padrão), o dropdown será fechado automaticamente quando outro dropdown for aberto.
* Quando definido como true, o dropdown permanecerá aberto mesmo quando outro dropdown for aberto.
*/
preventAutoDismiss: boolean;
/**
* Faz o painel acompanhar a largura do acionador enquanto estiver aberto.
* O valor padrão `false` preserva a largura determinada pelo conteúdo.
*/
matchTriggerWidth: boolean;
/**
* Define o z-index do elemento target (alvo) do dropdown.
* Permite customizar a ordem de sobreposição do painel dropdown em relação aos demais elementos da página.
* O valor padrão utiliza a variável CSS do design system: var(--z-index-layer-1).
*/
targetZIndex: string;
/**
* Desabilita a interação com o componente.
*
* > **Uso compartilhado:** mantenha esta descrição idêntica em todos os componentes que usam `disabled`.
*/
disabled: boolean;
/**
* Define o rótulo acessível usado por tecnologias assistivas.
*
* > **Uso compartilhado:** mantenha esta descrição idêntica em todos os componentes que usam `ariaLabel`.
*/
ariaLabel: string;
private get effectivePlacement();
private get effectiveArrowPosition();
/**
* Método chamado sempre que a propriedade `isOpen` muda.
* Emite um evento com o novo estado do dropdown.
*/
private pendingOpenInit;
private clickListenerAttached;
isOpenChanged(newValue: boolean): void;
/**
* Aplica o novo valor de z-index ao elemento target.
*/
targetZIndexChanged(): void;
/**
* Evento emitido quando o dropdown é aberto.
* Este evento é usado para implementar o auto-dismiss de outros dropdowns.
*
* @internal
*/
placementChanged(): void;
/** Recalcula a superfície aberta quando a política de largura muda. */
matchTriggerWidthChanged(): void;
/**
* Fecha o dropdown se for desabilitado enquanto estiver aberto.
*/
disabledChanged(newValue: boolean): void;
/**
* Emitido quando o dropdown abre.
*/
brDidOpen: EventEmitter<{
id: string;
}>;
/**
* Emitido quando o dropdown fecha.
*/
brDidClose: EventEmitter<{
id: string;
}>;
/** @deprecated Use `brDropdownOpenChange`. */
brDropdownChange: EventEmitter<{
isOpen: boolean;
}>;
/** Evento emitido quando o estado aberto muda. */
brDropdownOpenChange: EventEmitter;
connectedCallback(): void;
disconnectedCallback(): void;
componentDidLoad(): void;
private attachClickListener;
private detachClickListener;
private attachOpenListeners;
private detachOpenListeners;
componentDidRender(): void;
/**
* Esconde o dropdown.
* Define a propriedade `isOpen` como falsa e retorna o novo estado.
* Este método pode ser chamado externamente.
* @deprecated Use `close`.
*/
hide(): Promise<{
isOpen: boolean;
}>;
/** Fecha o dropdown e mantém o formato de retorno legado. */
close(): Promise<{
isOpen: boolean;
}>;
/**
* Abre o dropdown.
* Define a propriedade `isOpen` como verdadeira e retorna o novo estado.
* Este método pode ser chamado externamente.
*/
open(): Promise<{
isOpen: boolean;
}>;
/**
* Define o foco no elemento interno do componente.
* Este método pode ser chamado externamente para garantir que o foco seja aplicado ao elemento correto.
*/
setFocus(): Promise;
private triggerElement;
private semanticTriggerElement;
private targetElement;
private dropdownItems;
private dropdownLinks;
private focusableElement;
private floatingManager;
private cleanupBlockingSurfaceDismissal?;
private clickHandler;
private triggerKeydownHandler;
private handleTriggerSlotChange;
private targetKeydownHandler;
private dropdownOpenHandler;
/**
* Alterna o estado do dropdown entre aberto e fechado.
*/
private readonly toggle;
/**
* Limpa o posicionamento do Floating UI
*/
private cleanupPositioning;
private hideTargetUntilPositioned;
private revealTargetAfterPositioning;
private clearDropdownItemListeners;
/**
* Foca em um elemento específico com suporte a componentes personalizados
* @param targetElement Elemento a receber o foco
*/
/**
* Links e demais itens focáveis do target na ordem do documento. O Tab percorre
* esta sequência única para que listas mistas (links e botões) sejam alcançáveis.
*/
private getTabCycle;
/** Move o foco para o próximo (ou anterior, com Shift) elemento do ciclo de Tab. */
private cycleTabFocus;
private focusOnElement;
/**
* Foca no elemento interativo dentro do slot trigger
* Esta função procura pelo elemento dentro do slot trigger e aplica o foco nele
*/
private focusOnTriggerElement;
/**
* Auxiliar para focar no elemento trigger
*/
private focusTrigger;
private syncTriggerAccessibility;
private syncTriggerAccessibilityAfterHydration;
private getCssClassMap;
/**
* Handler para eventos de keydown nos itens não-link.
* Setas, Home e End navegam entre estes itens; Tab percorre o ciclo único
* (links e itens na ordem do documento).
*/
private handleItemKeydown;
/**
* Handler específico para links. Tab percorre o ciclo único (links e itens).
*/
private handleLinkKeydown;
/**
* Lida com o comportamento no trigger
*/
private handleTriggerBehavior;
/**
* Inicializa os itens do dropdown com comportamentos de navegação com teclado,
* separando links e demais itens (setas navegam entre itens; Tab percorre ambos na ordem do documento)
*/
private initializeDropdownItems;
/**
* Método que lida com cliques fora do dropdown.
*
* @param {MouseEvent} event - O evento de clique que ocorreu.
*/
private onClickOutside;
/**
* Método que lida com o evento brDidOpen de outros dropdowns
* Fecha este dropdown se não for o emissor do evento e preventAutoDismiss=false
*/
private onDropdownDidOpen;
/**
* Posiciona o dropdown usando Floating UI
*/
private positionDropdown;
/**
* Configura os comportamentos de interação do dropdown
*/
private setBehavior;
/**
* Atualiza o z-index do target conforme a propriedade targetZIndex
*/
private updateTargetZIndex;
render(): any;
}