import * as vue from 'vue';
import { PropType, VNodeProps } from 'vue';

interface GlobalEventsProps {
    target?: Extract<keyof Window, string>;
    filter?: EventFilter;
}
interface EventFilter<E extends Event = Event> {
    (event: E, listener: EventListener, name: string): unknown;
}
declare const GlobalEventsImpl: vue.DefineComponent<{
    target: {
        type: StringConstructor;
        default: string;
    };
    filter: {
        type: PropType<EventFilter<Event> | EventFilter<Event>[]>;
        default: () => () => true;
    };
    stop: BooleanConstructor;
    prevent: BooleanConstructor;
}, () => null, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly<vue.ExtractPropTypes<{
    target: {
        type: StringConstructor;
        default: string;
    };
    filter: {
        type: PropType<EventFilter<Event> | EventFilter<Event>[]>;
        default: () => () => true;
    };
    stop: BooleanConstructor;
    prevent: BooleanConstructor;
}>>, {
    stop: boolean;
    filter: EventFilter<Event> | EventFilter<Event>[];
    target: string;
    prevent: boolean;
}, {}>;
/**
 * Component of vue-lib.
 */
declare const GlobalEvents: new () => {
    $props: VNodeProps & GlobalEventsProps;
};

/**
 * Creates a filter than can be passed to `<GlobalEvents />` to exclude events from elements with the given tag names.
 *
 * @param tagNames - array of tag names to exclude
 */
declare function excludeElements(tagNames: Array<Uppercase<_HTMLElementNames>>): (event: Event) => boolean;
/**
 * Creates a filter than can be passed to `<GlobalEvents />` to include events from elements with the given tag names.
 *
 * @see excludeElements
 *
 * @param tagNames - array of tag names to include
 */
declare function includeElements(tagNames: Array<Uppercase<_HTMLElementNames>>): (event: Event) => boolean;
type _HTMLElementNames = keyof HTMLElementTagNameMap;

export { EventFilter, GlobalEvents, GlobalEventsImpl, GlobalEventsProps, _HTMLElementNames, excludeElements, includeElements };
