export interface AttrDef {
    propName: string | symbol;
    observe: boolean;
    reflect: boolean;
    getPropValue: () => unknown;
    setPropValue: (value: unknown) => void;
}
export type ListenerSelector<T> = (el: T) => EventTarget | null;
export interface Listener<T> {
    event: string;
    cb: (e: Event) => void;
    selector: ListenerSelector<T>;
}
export type AttrChangedCallback = (name: string, oldValue: string, newValue: string) => void;
export declare class AttrMetadata extends Map<string, AttrDef> {
}
export declare class AttrChangeMetadata extends Map<string, Set<AttrChangedCallback>> {
}
export declare class ElementMetadata<T> {
    attrs: AttrMetadata;
    attrChanges: AttrChangeMetadata;
    listeners: Listener<T>[];
    onReady: Set<() => void>;
}
export declare class MetadataStore extends WeakMap<object, ElementMetadata<unknown>> {
    read<T>(value: object): ElementMetadata<T>;
}
export declare const metadataStore: MetadataStore;
