import { Cell } from '@ephox/katamari';
import { EventArgs, SugarElement } from '@ephox/sugar';
export interface EventFormat {
    readonly target: SugarElement<Node>;
    readonly kill: () => void;
    readonly prevent: () => void;
}
export interface SimulatedEvent<T extends EventFormat> {
    readonly stop: () => void;
    readonly cut: () => void;
    readonly isStopped: () => boolean;
    readonly isCut: () => boolean;
    readonly event: T;
    readonly getSource: () => SugarElement<Node>;
    readonly setSource: (elem: SugarElement<Node>) => void;
}
export type NativeSimulatedEvent<T = Event> = SimulatedEvent<EventArgs<T>>;
export type CustomSimulatedEvent = SimulatedEvent<CustomEvent>;
export interface CustomEvent extends EventFormat {
    readonly [key: string]: any;
}
export interface ReceivingUniversalInternalEvent {
    readonly universal: true;
    readonly data: any;
}
export interface ReceivingChannelsInternalEvent {
    readonly universal: false;
    readonly channels: ReadonlyArray<string>;
    readonly data: any;
}
export type ReceivingInternalEvent = ReceivingUniversalInternalEvent | ReceivingChannelsInternalEvent;
export interface ReceivingEvent extends EventFormat {
    readonly data: any;
}
export interface FocusingEvent extends EventFormat {
    readonly originator: SugarElement<Node>;
}
declare const fromSource: <T extends EventFormat>(event: T, source: Cell<SugarElement<Node>>) => SimulatedEvent<T>;
declare const fromExternal: <T extends EventFormat>(event: T) => SimulatedEvent<T>;
declare const fromTarget: <T extends EventFormat>(event: T, target: SugarElement<Node>) => SimulatedEvent<T>;
export { fromSource, fromExternal, fromTarget };
//# sourceMappingURL=SimulatedEvent.d.ts.map