import type { LynxCrossThreadEvent, LynxCrossThreadEventTarget, DecoratedHTMLElement, RustMainthreadContextBinding, CloneableObject, MainThreadGlobalThis } from '../../../types/index.js';
import type { MainThreadWasmContext } from '../../wasm.js';
import type { BackgroundThread } from '../Background.js';
import type { ExposureServices } from '../ExposureServices.js';
export type WASMJSBindingInjectedHandler = {
    rootDom: ShadowRoot;
    backgroundThread: BackgroundThread;
    exposureServices: ExposureServices;
    mainThreadGlobalThis: MainThreadGlobalThis;
};
export declare class WASMJSBinding implements RustMainthreadContextBinding {
    #private;
    readonly lynxViewInstance: WASMJSBindingInjectedHandler;
    wasmContext: InstanceType<MainThreadWasmContext> | undefined;
    disposeWasmContext?: () => void;
    toBeEnabledElement: Set<HTMLElement>;
    toBeDisabledElement: Set<HTMLElement>;
    constructor(lynxViewInstance: WASMJSBindingInjectedHandler);
    markExposureRelatedElementByUniqueId(element: HTMLElement, toEnable: boolean): void;
    generateTargetObject(element: DecoratedHTMLElement, dataset: CloneableObject): LynxCrossThreadEventTarget;
    getClassList(elementRef: WeakRef<HTMLElement>): string[];
    getElementByUniqueId(uniqueId: number): HTMLElement | undefined;
    getElementByComponentId(componentId: string): HTMLElement | undefined;
    runWorklet(handler: {
        value: unknown;
    }, eventObject: LynxCrossThreadEvent, targetUniqueId: number, targetDataset: Record<string, string>, currentTargetUniqueId: number, currentTargetDataset: Record<string, string>): void;
    publishEvent(handlerName: string, parentComponentId: string | undefined, eventObject: LynxCrossThreadEvent, targetUniqueId: number, targetDataset: CloneableObject, currentTargetUniqueId: number, currentTargetDataset: CloneableObject): void;
    addEventListener(eventName: string): void;
    dispose(): void;
    postTimingFlags(flags: string[], pipelineId?: string): void;
    updateExposureStatus(enabledExposureElements: HTMLElement[], disabledExposureElements: HTMLElement[]): void;
    enableElementEvent(elementRef: WeakRef<HTMLElement>, eventName: string): void;
    disableElementEvent(elementRef: WeakRef<HTMLElement>, eventName: string): void;
    setAttribute(elementRef: WeakRef<HTMLElement>, name: string, value: string): void;
    removeAttribute(elementRef: WeakRef<HTMLElement>, name: string): void;
}
