import type { MagixEventListenerOptions as WhiteMagixListenerOptions, Event as WhiteEvent, EventPhase as WhiteEventPhase, Scope as WhiteScope, } from "white-web-sdk"; export interface MagixEventListenerOptions extends WhiteMagixListenerOptions { /** * Rapid emitted callbacks will be slowed down to this interval (in ms). */ fireInterval?: number; /** * If `true`, sent events will reach self-listeners after committed to server. * Otherwise the events will reach self-listeners immediately. */ fireSelfEventAfterCommit?: boolean; } export interface MagixEventMessage< TPayloads = any, TEvent extends MagixEventTypes = MagixEventTypes > extends Omit { /** Event name */ event: TEvent; /** Event Payload */ payload: TPayloads[TEvent]; /** Whiteboard ID of the client who dispatched the event. It will be AdminObserverId for system events. */ authorId: number; scope: `${WhiteScope}`; phase: `${WhiteEventPhase}`; } export type MagixEventTypes = Extract; export type MagixEventPayload< TPayloads = any, TEvent extends MagixEventTypes = MagixEventTypes > = TPayloads[TEvent]; export type MagixEventDispatcher = < TEvent extends MagixEventTypes = MagixEventTypes >( event: TEvent, payload: TPayloads[TEvent] ) => void; export type MagixEventHandler< TPayloads = any, TEvent extends MagixEventTypes = MagixEventTypes > = (message: MagixEventMessage) => void; export type MagixEventListenerDisposer = () => void; export type MagixEventAddListener = < TEvent extends MagixEventTypes = MagixEventTypes >( event: TEvent, handler: MagixEventHandler, options?: MagixEventListenerOptions | undefined ) => MagixEventListenerDisposer; export type MagixEventRemoveListener = < TEvent extends MagixEventTypes = MagixEventTypes >( event: TEvent, handler?: MagixEventHandler ) => void;