import type { Resolver } from "./event.js";
import { Event } from "./event.js";
export type HandlerFunc<T extends Resolver> = (event: T) => unknown;
type LowercaseHandler<T extends Resolver> = {
    func: HandlerFunc<T>;
    id?: string;
    priority?: number;
    Func?: HandlerFunc<T>;
    Id?: string;
    Priority?: number;
};
type UppercaseHandler<T extends Resolver> = {
    Func: HandlerFunc<T>;
    Id?: string;
    Priority?: number;
    func?: HandlerFunc<T>;
    id?: string;
    priority?: number;
};
export type Handler<T extends Resolver> = LowercaseHandler<T> | UppercaseHandler<T>;
export type BoundHandler<T extends Resolver> = {
    Func: HandlerFunc<T>;
    Id?: string;
    Priority?: number;
};
type InternalHandler<T extends Resolver> = BoundHandler<T> & {
    __pbTagSet?: Set<string> | null;
};
export declare function normalizeHandler<T extends Resolver>(handler: Handler<T> & {
    __pbTagSet?: Set<string> | null;
}): InternalHandler<T>;
export declare class Hook<T extends Resolver> {
    #private;
    Bind(handler: Handler<T>): string;
    BindFunc(fn: HandlerFunc<T>): string;
    Unbind(...idsToRemove: string[]): void;
    UnbindAll(): void;
    Length(): number;
    HasOnlyHandlerId(id: string): boolean;
    CanTriggerOn(tagsToCheck: string[]): boolean;
    Trigger(event: T, ...oneOffHandlerFuncs: HandlerFunc<T>[]): unknown;
    bind(handler: Handler<T>): string;
    bindFunc(fn: HandlerFunc<T>): string;
    unbind(...idsToRemove: string[]): void;
    unbindAll(): void;
    length(): number;
    hasOnlyHandlerId(id: string): boolean;
    canTriggerOn(tagsToCheck: string[]): boolean;
    trigger(event: T, ...oneOffHandlerFuncs: HandlerFunc<T>[]): unknown;
}
export { Event };
