import { AnimationEvent } from '@angular/animations';
/**
 * Represents the type of overlay mode, which can be 'modal', 'overlay', or undefined.
 * @group Types
 */
export type OverlayModeType = 'modal' | 'overlay' | undefined;
/**
 * Represents the type of direction for a responsive overlay, which can be one of the specified values or undefined.
 * @group Types
 */
export type ResponsiveOverlayDirectionType = 'center' | 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end' | undefined;
/**
 * Represents the options for an overlay listener.
 * @group Interface
 */
export interface OverlayListenerOptions {
    /**
     * The type of listener, which can be 'scroll', 'outside', 'resize', or undefined.
     */
    type?: 'scroll' | 'outside' | 'resize' | undefined;
    /**
     * The mode of the overlay listener.
     */
    mode?: OverlayModeType;
    /**
     * Indicates whether the overlay listener is valid.
     */
    valid?: boolean;
}
/**
 * Represents the options for a responsive overlay.
 * @group Events
 */
export interface ResponsiveOverlayOptions {
    /**
     * The inline style for the responsive overlay.
     */
    style?: any;
    /**
     * The CSS class for the responsive overlay.
     */
    styleClass?: string;
    /**
     * The inline style for the content of the responsive overlay.
     */
    contentStyle?: any;
    /**
     * The CSS class for the content of the responsive overlay.
     */
    contentStyleClass?: string;
    /**
     * The breakpoint for the responsive overlay.
     */
    breakpoint?: string;
    /**
     * The media query for the responsive overlay.
     */
    media?: string;
    /**
     * The direction for the responsive overlay.
     */
    direction?: ResponsiveOverlayDirectionType;
}
/**
 * Represents an event that occurs when an overlay is shown.
 * @group Events
 */
export interface OverlayOnShowEvent {
    /**
     * The overlay element.
     */
    overlay?: HTMLElement | undefined;
    /**
     * The target element.
     */
    target?: HTMLElement | undefined;
    /**
     * The mode of the overlay.
     */
    mode?: OverlayModeType;
}
/**
 * Represents an event that occurs before an overlay is shown.
 * @extends {OverlayOnShowEvent}
 * @group Events
 */
export interface OverlayOnBeforeShowEvent extends OverlayOnShowEvent {
}
/**
 * Represents an event that occurs before an overlay is hidden.
 * @extends {OverlayOnBeforeShowEvent}
 * @group Events
 */
export interface OverlayOnBeforeHideEvent extends OverlayOnBeforeShowEvent {
}
/**
 * Represents an event that occurs when an overlay is hidden.
 * @extends {OverlayOnShowEvent}
 * @group Events
 */
export interface OverlayOnHideEvent extends OverlayOnShowEvent {
}
/**
 * Represents the options for an overlay.
 * @group Interface
 */
export interface OverlayOptions {
    /**
     * The mode of the overlay.
     */
    mode?: OverlayModeType;
    /**
     * The inline style for the overlay.
     */
    style?: any;
    /**
     * The CSS class for the overlay.
     */
    styleClass?: string;
    /**
     * The inline style for the content of the overlay.
     */
    contentStyle?: any;
    /**
     * The CSS class for the content of the overlay.
     */
    contentStyleClass?: string;
    /**
     * The target element.
     */
    target?: any;
    /**
     * The element or location where the overlay should be appended.
     */
    appendTo?: 'body' | HTMLElement | undefined;
    /**
     * Indicates whether the overlay should have an auto-generated z-index.
     */
    autoZIndex?: boolean;
    /**
     * The base z-index value for the overlay.
     */
    baseZIndex?: number;
    /**
     * The transition options for showing the overlay.
     */
    showTransitionOptions?: string;
    /**
     * The transition options for hiding the overlay.
     */
    hideTransitionOptions?: string;
    /**
     * Indicates whether the overlay should be hidden when the escape key is pressed.
     */
    hideOnEscape?: boolean;
    /**
     * A listener function for handling events related to the overlay.
     */
    listener?: (event: Event, options?: OverlayListenerOptions) => boolean | void;
    /**
     * The options for a responsive overlay.
     */
    responsive?: ResponsiveOverlayOptions | undefined;
    /**
     * A callback function that is invoked before the overlay is shown.
     */
    onBeforeShow?: (event?: OverlayOnBeforeShowEvent) => void;
    /**
     * A callback function that is invoked when the overlay is shown.
     */
    onShow?: (event?: OverlayOnShowEvent) => void;
    /**
     * A callback function that is invoked before the overlay is hidden.
     */
    onBeforeHide?: (event?: OverlayOnBeforeHideEvent) => void;
    /**
     * A callback function that is invoked when the overlay is hidden.
     */
    onHide?: (event?: OverlayOnHideEvent) => void;
    /**
     * A callback function that is invoked when the overlay's animation starts.
     */
    onAnimationStart?: (event?: AnimationEvent) => void;
    /**
     * A callback function that is invoked when the overlay's animation is done.
     */
    onAnimationDone?: (event?: AnimationEvent) => void;
}
