import { Result } from '@ephox/katamari';
import { EventArgs, SugarElement } from '@ephox/sugar';
import { AlloyComponent } from '../component/ComponentApi';
export interface GuiSystem {
    readonly root: AlloyComponent;
    readonly element: SugarElement<HTMLElement>;
    readonly destroy: () => void;
    readonly add: (component: AlloyComponent) => void;
    readonly remove: (component: AlloyComponent) => void;
    readonly getByUid: (uid: string) => Result<AlloyComponent, Error>;
    readonly getByDom: (element: SugarElement<Node>) => Result<AlloyComponent, Error>;
    readonly addToWorld: (comp: AlloyComponent) => void;
    readonly removeFromWorld: (comp: AlloyComponent) => void;
    readonly broadcast: <T>(message: T) => void;
    readonly broadcastOn: <T>(channels: string[], message: T) => void;
    readonly broadcastEvent: (eventName: string, event: EventArgs) => void;
}
export declare type message = Record<string, any>;
declare const create: () => GuiSystem;
declare const takeover: (root: AlloyComponent) => GuiSystem;
export { create, takeover };
//# sourceMappingURL=Gui.d.ts.map