/**
 * @public
 */
export type EventTargetType = 'self' | 'window' | 'document';
/**
 * @public
 */
export interface SelfQueryTarget {
    /**
     * The target selector for the event listener.
     */
    target: string;
    /**
     * Where to query the target element.
     * Can be `false` (default) to use light DOM, `true` to use shadow DOM.
     */
    shadow?: boolean;
}
/**
 * @public
 */
export interface IListenOptions extends AddEventListenerOptions {
    /**
     * If true, the default action of the event will be prevented.
     * Defaults to false.
     */
    preventDefault?: boolean;
    /**
     * If true, the event will not bubble up to parent elements.
     * Defaults to false.
     */
    stopPropagation?: boolean;
}
/**
 * A method decorator that listens to a specific event on a target element.
 *
 * @param eventName - The name of the event to listen for.
 * @param target - The target element to listen on. Can be `self`, `window`, `document`, or an object with a `target` property for querying.
 *                 If no target is specified, it **defaults** to `self`.
 * @param options - Optional options for the event listener, such as `preventDefault` and `stopPropagation`.
 * @public
 * @example
 * ```typescript
 * class MyElement extends HTMLElement {
 *    @Listen('click', 'self', { preventDefault: true })
 *    handleClick(event: MouseEvent) {
 *        console.log('Element clicked!', event);
 *   }
 *
 *   // or
 *
 *   @Listen('click', { target: '.my-button', shadow: true })
 *   handleClick(event: MouseEvent) {
 *       console.log('Button clicked!', event);
 *   }
 * ```
 *
 *
 */
export declare const Listen: (eventName: string, target?: EventTargetType | SelfQueryTarget, options?: IListenOptions) => MethodDecorator;
//# sourceMappingURL=ListenDecorator.d.ts.map