import { VegaSlimmer } from '../../../../vega-slimmer/vega-slimmer-core';
import { VegaModal } from '../../vega-modal';
import type { VegaModalOpenStateChangeTrigger } from '../../types';
import { VegaModalOpenState } from '../models/vega-modal-open-state';
import { AriaDialogFocusableTrapSlimmer } from '../../../../helpers/slimmers/aria-dialog-focusable-trap-slimmer';
/**
 * Modal open state controller
 */
export declare class VegaModalOpenStateController extends VegaSlimmer {
  host: VegaModal['host'];
  open: VegaModal['open'];
  openState: VegaModal['openState'];
  backdrop: VegaModal['backdrop'];
  handleClose: VegaModal['handleClose'];
  closeEventEmitter: VegaModal['closeEventEmitter'];
  openEventEmitter: VegaModal['openEventEmitter'];
  backdropController: VegaModal['backdropController'];
  openedModalStackController: VegaModal['openedModalStackController'];
  zIndexController: VegaModal['zIndexController'];
  renderer: VegaModal['renderer'];
  protected readonly ariaDialogFocusableTrapSlimmer: AriaDialogFocusableTrapSlimmer;
  private backdropMouseDownOnHost;
  private backdropMouseUpOnHost;
  /**
   * Component lifecycle - [disconnectedCallback]
   */
  disconnectedCallback(): void;
  /**
   * Component lifecycle - [componentDidLoad]
   */
  componentDidLoad(): void;
  /**
   * Component lifecycle - [componentDidRender]
   */
  componentDidRender(): void;
  /**
   * Toggle modal while openState changed.
   *
   * @param {VegaModalOpenState} newState Specifies the new openState.
   * @param {VegaModalOpenState} oldState Specifies the old openState.
   */
  watchOpenState(newState: VegaModalOpenState, oldState: VegaModalOpenState): void;
  /**
   * Listen the target element clicked has a `data-target='modal'` attribute and open the modal if it does.
   *
   * @param {MouseEvent} e - Open modal event.
   */
  listenDataTarget(e: MouseEvent): void;
  /**
   * Listen the target element clicked has a `data-dismiss='modal'` attribute and closes the modal if it does.
   *
   * @param {MouseEvent} e - Close modal event.
   */
  listenDataDismiss(e: MouseEvent): void;
  /**
   * Listen the target element mousedown event
   *
   * @param {MouseEvent} e - mousedown event.
   */
  listenMouseDown(e: MouseEvent): void;
  /**
   * Listen the target element mousedown event
   *
   * @param {MouseEvent} e - mousedown event.
   */
  listenMouseUp(e: MouseEvent): void;
  /**
   * Handles the public modal API (`show` / `hide`).
   *
   * @param {'show' | 'hide'} option - Determines which state change to perform.
   */
  modal(option: 'show' | 'hide'): void;
  /**
   * Listen modal close event and close modal.
   *
   * @param {MouseEvent} e - Close modal event.
   */
  onModalClose: (e: MouseEvent) => void;
  /**
   * Close the modal via the provided trigger and emit the pending detail.
   *
   * @param {VegaModalOpenStateChangeTrigger} trigger - Indicates what initiated the close.
   */
  close(trigger: VegaModalOpenStateChangeTrigger): void;
  /**
   * Toggles the aria-dialog attribute based on the open state.
   *
   * @param {boolean} isOpen - Indicates whether the modal is open.
   */
  ariaDialogToggle(isOpen: boolean): void;
  /**
   * Updates the internal open state snapshot so watchers can react to the new value.
   *
   * @param {boolean} isOpen - Desired open flag for the modal.
   * @param {VegaModalOpenStateChangeTrigger} triggerBy - Source that initiated the change.
   */
  changeOpenState(isOpen: boolean, triggerBy: VegaModalOpenStateChangeTrigger): void;
  /**
   * Manages the visibility and behavior of a modal by updating various properties
   * and emitting an event.
   */
  private toggle;
  /**
   * Toggles the display property of a modal element between 'flex' and
   * 'none' based on the value of the `open` property.
   */
  private setModalVisibility;
  /**
   * Emits either an open or close event based on the value of the `open` property.
   */
  private emitEvent;
  /**
   * In desktop, we should add 'overflow: hidden' to the body to prevent the body scroll.
   */
  private updateDocumentRootOverflow;
  /**
   * Removes the backdrop element if no modals are currently visible.
   */
  private removeBackdropWhileNoModalShow;
  /**
   * Check if mouse event originates from vega-modal backdrop.
   *
   * @param {MouseEvent} e - The mousedown or mouseup event.
   * @returns { boolean } Return true if is within backdrop otherwise, false
   */
  private isBackdropClickTargeted;
  /**
   * Reset backdrop click flags.
   */
  private resetBackdropClickFlags;
}
