/** * Sigma.js Types * =============== * * Various type declarations used throughout the library. * @module */ import { EventEmitter } from "events"; /** * Util type to represent maps of typed elements, but implemented with * JavaScript objects. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export type PlainObject = { [k: string]: T }; /** * Returns a type similar to T, but with the the K set of properties of the type * T *required*, and the rest optional. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export type PartialButFor = Pick & Partial> & { [others: string]: any }; export interface Coordinates { x: number; y: number; } export interface CameraState extends Coordinates { angle: number; ratio: number; } export type MouseInteraction = "click" | "doubleClick" | "rightClick" | "wheel" | "down"; export interface MouseCoords extends Coordinates { sigmaDefaultPrevented: boolean; preventSigmaDefault(): void; original: MouseEvent; } export interface WheelCoords extends MouseCoords { delta: number; // This will store the delta actually used by sigma } export interface TouchCoords { touches: Coordinates[]; original: TouchEvent; } export interface Dimensions { width: number; height: number; } export type Extent = [number, number]; export interface DisplayData { label: string | null; size: number; color: string; hidden: boolean; forceLabel: boolean; zIndex: number; type: string; } export interface NodeDisplayData extends Coordinates, DisplayData { highlighted: boolean; } export interface EdgeDisplayData extends DisplayData {} export type CoordinateConversionOverride = { cameraState?: CameraState; matrix?: Float32Array; viewportDimensions?: Dimensions; graphDimensions?: Dimensions; padding?: number; }; /** * Custom event emitter types. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export type Listener = (...args: any[]) => void; export type EventsMapping = Record; interface ITypedEventEmitter { rawEmitter: EventEmitter; eventNames(): Array; setMaxListeners(n: number): this; getMaxListeners(): number; emit(type: Event, ...args: Parameters): boolean; addListener(type: Event, listener: Events[Event]): this; on(type: Event, listener: Events[Event]): this; once(type: Event, listener: Events[Event]): this; prependListener(type: Event, listener: Events[Event]): this; prependOnceListener(type: Event, listener: Events[Event]): this; removeListener(type: Event, listener: Events[Event]): this; off(type: Event, listener: Events[Event]): this; removeAllListeners(type?: Event): this; listeners(type: Event): Events[Event][]; listenerCount(type: Event): number; rawListeners(type: Event): Events[Event][]; } export class TypedEventEmitter extends (EventEmitter as unknown as { new (): ITypedEventEmitter; }) { constructor() { super(); this.rawEmitter = this as EventEmitter; } }