import type HeliosNetwork from 'helios-network'; export type SerializablePrimitive = string | number | boolean | null; export type SerializableValue = | SerializablePrimitive | SerializableValue[] | { [key: string]: SerializableValue }; export type HeliosMode = '2d' | '3d'; export type DensityInteractionFilter = 'auto' | 'off' | 'selected' | 'highlighted' | 'selected-or-highlighted'; export type DockSide = 'left' | 'right'; export type InterfaceMode = 'desktop' | 'compact' | 'fullscreen'; export type PersistenceKind = 'preferences' | 'visualization' | 'session'; export type PortableNetworkFormat = 'bxnet' | 'zxnet' | 'xnet' | 'gml' | string; export type ExportedStateFormat = 'object' | 'string' | 'blob'; export type PortableNetworkOutputFormat = 'uint8array' | 'arraybuffer' | 'base64' | 'blob'; export interface PersistenceEnvelope = Record> { schema: string; version: number; kind: PersistenceKind; metadata: TMetadata; payload: TPayload; id?: string; } export interface ResponsivePreferencesState { compactDockSide: DockSide | null; preferredMode: InterfaceMode | null; lastViewportClass: InterfaceMode | null; } export interface HeliosPreferencesState { theme: string | null; autosave: boolean; responsive: ResponsivePreferencesState; } export interface HeliosUIState { theme: string | null; panels: Record; dockOrder: Record; interface: Record; } export type HeliosUIPanelName = | 'camera' | 'demo' | 'scene' | 'data' | 'layout' | 'legends' | 'mappers' | 'selection' | 'metrics'; export interface HeliosUIAutoOptions extends Record { panels?: boolean | 'default' | 'all' | HeliosUIPanelName | HeliosUIPanelName[]; panelOptions?: Record>; } export interface HeliosQuickControlsOptions extends Record { enabled?: boolean; autoFit?: boolean; fit?: boolean; layout?: boolean; zoom?: boolean; reserveLegendSpace?: boolean; theme?: string; buttonSize?: number; gap?: number; margin?: number; zoomFactor?: number; } export interface HeliosNetworkSource { name: string | null; baseName: string | null; format: string | null; nodeCount: number | null; edgeCount: number | null; portableVisualizationAttached: boolean; loadedAt: number | null; } export interface CameraPose { mode?: HeliosMode; projection?: 'orthographic' | 'perspective' | string; target?: [number, number, number] | number[]; position?: [number, number, number] | number[]; rotation?: [number, number, number, number] | number[]; zoom?: number; distance?: number; near?: number; far?: number; } export interface CameraPoseOptions { source?: 'ui' | 'interaction' | string; manual?: boolean; requestRender?: boolean; update?: boolean; } export interface CameraTransitionOptions extends CameraPoseOptions { fromPose?: Partial; durationMs?: number; } export interface CameraControlsOptions { autoFit?: boolean; animation?: boolean; animationDurationMs?: number; orbit?: boolean; orbitAxis?: [number, number, number] | number[]; orbitAngle?: number; targetNodeIndices?: ArrayLike | Iterable | null; followTarget?: boolean; followUpdateIntervalMs?: number; autoFitIntervalMs?: number; autoFitMaxSamples?: number; } export interface CameraControlsSnapshot extends CameraControlsOptions { activeTargetNodeIndices: number[] | null; effectiveAutoFitIntervalMs: number | null; } export interface FrameNetworkOptions { animate?: boolean; durationMs?: number; resetOrientation?: boolean; zoomScale?: number; maxFocusZoom?: number; minFocusDistance?: number; focusZoomTolerance?: number; } export interface CameraTargetNodeOptions extends FrameNetworkOptions { follow?: boolean; followTarget?: boolean; followUpdateIntervalMs?: number; zoomFactor?: number; } export interface ExportVisualizationStateOptions { preferences?: HeliosPreferencesState | null; format?: ExportedStateFormat; pretty?: boolean; } export interface AttachedVisualizationStateOptions { network?: HeliosNetwork | null; attributeName?: string; pretty?: boolean; } export interface SavePortableNetworkOptions extends AttachedVisualizationStateOptions { includeVisualization?: boolean; output?: PortableNetworkOutputFormat; saveOptions?: Record; visualizationState?: PersistenceEnvelope | string | null; } export interface HeliosVisualizationStatePayload { preferences: HeliosPreferencesState; responsivePreferences: ResponsivePreferencesState | null; uiState: HeliosUIState; behaviorState: HeliosBehaviorSnapshot; cameraState: CameraPose | null; networkSource: HeliosNetworkSource; storageState?: Record | null; } export interface HeliosSessionRecord { id: string | null; createdAt: number | null; updatedAt: number | null; workspaceId?: string | null; nickname?: string | null; unfinished: boolean; status: string; bytes?: number; } export interface HeliosSessionSummary { id: string | null; workspaceId: string | null; nickname: string | null; label: string; createdAt: number | null; updatedAt: number | null; unfinished: boolean; status: string; bytes: number; current: boolean; networkSource: HeliosNetworkSource | null; thumbnail?: HeliosSessionThumbnail | null; } export interface HeliosSessionThumbnail { type: string; encoding: 'data-url' | string; width: number; height: number; byteLength: number; dataUrl: string; capturedAt?: number; } export interface HeliosSessionPayload { session: HeliosSessionRecord; preferences: HeliosPreferencesState; responsivePreferences: ResponsivePreferencesState | null; uiState: HeliosUIState; behaviorState: HeliosBehaviorSnapshot; networkSource: HeliosNetworkSource; networkData: { format: string; data: unknown; }; thumbnail?: HeliosSessionThumbnail | null; visualizationState: PersistenceEnvelope; } export interface HeliosStorageSaveSessionOptions { id?: string; nickname?: string; createdAt?: number; updatedAt?: number; networkFormat?: PortableNetworkFormat; networkData?: unknown; visualizationState?: PersistenceEnvelope | string; preferences?: HeliosPreferencesState; responsivePreferences?: ResponsivePreferencesState | null; uiState?: HeliosUIState; behaviorState?: HeliosBehaviorSnapshot; networkSource?: HeliosNetworkSource; thumbnail?: HeliosSessionThumbnail | null | Record; captureThumbnail?: boolean; unfinished?: boolean; status?: string; } export interface HeliosStartNewSessionOptions { id?: string; nickname?: string; name?: string; label?: string; flushPrevious?: boolean; includePreviousNetwork?: boolean; snapshotPreviousLayoutRuntime?: boolean; replaceUrlSession?: boolean; } export interface HeliosStorageListSessionsOptions { includeFinished?: boolean; limit?: number; excludeCurrent?: boolean; currentSessionId?: string; } export interface HeliosStorageRestoreSessionOptions { disposeOld?: boolean; recreateRenderer?: boolean; markFinished?: boolean; } export interface HeliosFileDropOptions { enabled?: boolean; target?: string | HTMLElement; supportedFormats?: PortableNetworkFormat[]; replaceOptions?: Record; overlayTitle?: string; overlaySubtitle?: string; } export interface HeliosInterfaceResumePrompt { visible: boolean; sessionId: string; status: string; updatedAt: number | null; networkSource: HeliosNetworkSource | null; sessions?: HeliosSessionSummary[]; } export interface HeliosInterfaceState { dockSide: DockSide; viewportWidth: number | null; mode: InterfaceMode; controlsOpen: boolean; activePanelId: string | null; focused: boolean; interfaceVisible: boolean; resumePrompt: HeliosInterfaceResumePrompt | null; } export interface HeliosBehaviorChangeEvent extends Event { detail?: { reason?: string; state?: TState; [key: string]: unknown; }; } export interface BehaviorListenerOptions extends AddEventListenerOptions {} export class Behavior = Record, TState = unknown> extends EventTarget { static id: string | null; id: string | null; options: TOptions; context: unknown; state?: TState; constructor(options?: TOptions); attach(context?: unknown): this; detach(): this; update(options?: Partial): this; serialize(): Record; restore(snapshot?: Record): this; addCleanup(cleanup: (() => void) | null | undefined): (() => void) | null | undefined; removeCleanup(cleanup: (() => void) | null | undefined): this; emit(type: string, detail?: unknown): this; on(type: string, handler: (event: HeliosBehaviorChangeEvent) => void, options?: BehaviorListenerOptions): () => void; } export class BehaviorRegistry { register(id: string, behavior: new (options?: any) => T): this; has(id: string): boolean; get(id: string): (new (options?: any) => T) | null; create(id: string, options?: Record): T; } export class BehaviorManager { helios: Helios | null; registry: BehaviorRegistry; ui: HeliosUI | null; constructor(helios?: Helios | null, registry?: BehaviorRegistry); setUI(ui?: HeliosUI | null): this; has(id: string): boolean; get(id: string): T | null; entries(): Array<[string, Behavior]>; values(): Behavior[]; use(id: string, options?: Record): T; use(behavior: T, options?: Record): T; detach(id: string): boolean; detachAll(): this; destroy(): void; serialize(): HeliosBehaviorSnapshot; restore(snapshot?: HeliosBehaviorSnapshot): this; } export interface SelectionStyle { color?: string | null; fill?: string | null; opacity?: number | null; width?: number | null; scale?: number | null; } export interface SelectionTone { mode?: string; amount?: number; } export interface SelectionBehaviorOptions { enableNodeSelection?: boolean; nodeClick?: boolean; enableEdgeSelection?: boolean; edgeClick?: boolean; selectedConnectedEdges?: boolean; enableSelectionLabels?: boolean; otherSelectedNodeStyle?: SelectionStyle; otherSelectedEdgeStyle?: SelectionStyle; otherSelectedNodeTone?: SelectionTone; otherSelectedEdgeTone?: SelectionTone; } export interface SelectionBehaviorState extends SelectionBehaviorOptions { nodeClick: boolean; edgeClick: boolean; selectedConnectedEdges: boolean; selectedNodes: Set; selectedEdges: Set; savedSelectionAttribute: string; lastNamedSelectionAttribute: string; otherSelectedNodeStyle: SelectionStyle; otherSelectedEdgeStyle: SelectionStyle; otherSelectedNodeTone: SelectionTone; otherSelectedEdgeTone: SelectionTone; } export class SelectionBehavior extends Behavior { static id: 'selection'; state: SelectionBehaviorState; clearSelection(options?: { preserveBinding?: boolean; preserveCameraFollow?: boolean; silent?: boolean }): void; selectNodes(indices: Iterable | ArrayLike, options?: { mode?: 'replace' | 'add' | 'remove'; silent?: boolean }): this; selectEdges(indices: Iterable | ArrayLike, options?: { mode?: 'replace' | 'add' | 'remove'; silent?: boolean }): this; expandSelectionToNeighbors(): this; saveSelectionToAttribute(attributeName?: string): this; } export interface HoverBehaviorOptions { hoverLabel?: boolean; nodeHover?: boolean; edgeHover?: boolean; hoverConnectedEdges?: boolean; highlightConnectedEdges?: boolean; hoverAffectsOtherElements?: boolean; hoverStyleFromHighlight?: boolean; [key: string]: unknown; } export interface HoverBehaviorState extends HoverBehaviorOptions { hoverLabel: boolean; hoveredNode: number; hoveredEdge: number; } export class HoverBehavior extends Behavior { static id: 'hover'; state: HoverBehaviorState; getPublicState(): HoverBehaviorState; } export interface LabelsBehaviorOptions { enabled?: boolean; source?: string | ((...args: any[]) => unknown) | null; selectionMode?: 'auto' | 'selected-only' | 'ranked'; pinnedNodes?: Iterable; selectedOnlySpaceAware?: boolean; fallbackSources?: string[]; maxVisible?: number; minScreenRadiusPx?: number; fontSizeScale?: number; outlineWidth?: number; offsetRadiusFactor?: number; offsetPx?: number; maxChars?: number; maxRows?: number; maxUpdateFps?: number; keepBoost?: number; selectedBoost?: number; hoveredBoost?: number; delegateSnapshotMaxFps?: number; collisionPaddingPx?: number; collisionCellPx?: number; fill?: string | null; outlineColor?: string | null; fontFamily?: string | null; illustratorCompatible?: boolean; } export interface LabelsBehaviorState extends LabelsBehaviorOptions { enabled: boolean; hoveredNodeEnabled?: boolean; hoveredNodeSource?: string | null; } export class LabelsBehavior extends Behavior { static id: 'labels'; state: LabelsBehaviorState; labels(options?: LabelsBehaviorOptions | null): this | LabelsBehaviorState; enabled(value?: boolean): boolean | this; mode(value?: 'off' | 'auto' | 'selected-only'): 'off' | 'auto' | 'selected-only' | this; maxVisible(value?: number): number | this; } export interface LegendPlacement { x?: number; y?: number; } export interface LegendsBehaviorOptions { enabled?: boolean; respectDockInsets?: boolean; illustratorCompatible?: boolean; zoomAwareSizeIn2D?: boolean; showPanel?: boolean; textOutline?: boolean; showNodeColor?: boolean; showDensity?: boolean; showEdgeColor?: boolean; showNodeSize?: boolean; showEdgeWidth?: boolean; scalePreviewLegends?: boolean; interactiveCategorical?: boolean; legendHoverHighlight?: boolean; legendClickSelect?: boolean; legendClickAction?: 'highlight' | 'select'; margin?: number; gap?: number; maxChars?: number; maxRows?: number; fontSize?: number; scale?: number; continuousHeight?: number; panelOpacity?: number; textOutlineWidth?: number; maxScale?: number; fontFamily?: string | null; titles?: Partial>; placements?: Partial>; } export interface NodeHoverStyle { sizeMul?: number; opacityMul?: number; outlineMul?: number; discard?: boolean; colorMul?: number[]; colorAdd?: number[]; forceMaxAlpha?: boolean; } export interface EdgeHoverStyle { widthMul?: number; opacityMul?: number; discard?: boolean; colorMul?: number[]; colorAdd?: number[]; forceMaxAlpha?: boolean; } export interface LegendsBehaviorState extends LegendsBehaviorOptions { enabled: boolean; titles: NonNullable; placements: NonNullable; } export class LegendsBehavior extends Behavior { static id: 'legends'; state: LegendsBehaviorState; legends(options?: LegendsBehaviorOptions | false | null): this | LegendsBehaviorState; enabled(value?: boolean): boolean | this; } export interface LayoutBehaviorOptions { positionAttribute?: string; layoutType?: 'worker:force3d' | 'gpu-force' | 'd3force3d' | 'worker:jitter' | 'static' | string; parameters?: Record; running?: boolean; preserveRunState?: boolean; } export interface LayoutBehaviorState { positionAttribute: string; } export class LayoutBehavior extends Behavior { static id: 'layout'; state: LayoutBehaviorState; type(value?: LayoutBehaviorOptions['layoutType'], options?: { preserveRunState?: boolean; emitChange?: boolean }): string | this; positionAttribute(value?: string): string | this; parameters(values?: Record, options?: { silent?: boolean }): Record | this; start(reason?: string): this; stop(reason?: string): this; reheat(reason?: string): this; reset(options?: { reason?: string }): this; runState(): string; isDynamic(): boolean; } export interface AppearanceBehaviorOptions { background?: string | number[] | ArrayBufferView | null; clearColor?: string | number[] | ArrayBufferView | null; edgeTransparencyMode?: string; nodeSizeScale?: number; nodeOpacityScale?: number; nodeOutlineWidthScale?: number; edgeWidthScale?: number; edgeOpacityScale?: number; nodeBlendWithEdges?: boolean; edgeWidthClampToNodeDiameter?: boolean; edgeFastRendering?: boolean; edgeAdaptiveQuality?: Record | null; shadedEnabled?: boolean; shadedNodes?: boolean; shadedEdges?: boolean; shadedLightDirection?: number[] | null; shadedLightColor?: string | number[] | null; shadedAmbientTopColor?: string | number[] | null; shadedAmbientBottomColor?: string | number[] | null; shadedDiffuseStrength?: number; shadedAmbientStrength?: number; shadedSpecularColor?: string | number[] | null; shadedSpecularStrength?: number; shadedShininess?: number; ambientOcclusionEnabled?: boolean; ambientOcclusionNodes?: boolean; ambientOcclusionEdges?: boolean; ambientOcclusionStrength?: number; ambientOcclusionRadius?: number; ambientOcclusionBias?: number; ambientOcclusionMode?: string; ambientOcclusionIntensityScale?: number; ambientOcclusionIntensityShift?: number; ambientOcclusionQuality?: string; nodeStyle?: { sizeScale?: number; opacityScale?: number; outlineWidthScale?: number; blendWithEdges?: boolean; }; edgeStyle?: { widthScale?: number; opacityScale?: number; fastRendering?: boolean; clampToNodeDiameter?: boolean; adaptiveQuality?: Record | null; }; shaded?: { enabled?: boolean; nodes?: boolean; edges?: boolean; lightDirection?: number[] | null; lightColor?: string | number[] | null; ambientTopColor?: string | number[] | null; ambientBottomColor?: string | number[] | null; diffuseStrength?: number; ambientStrength?: number; specularColor?: string | number[] | null; specularStrength?: number; shininess?: number; }; ambientOcclusion?: { enabled?: boolean; nodes?: boolean; edges?: boolean; strength?: number; radius?: number; bias?: number; mode?: string; intensityScale?: number; intensityShift?: number; quality?: string; }; } export interface AppearanceBehaviorState { background: number[] | null; edgeTransparencyMode: string; nodeStyle: { sizeScale: number; opacityScale: number; outlineWidthScale: number; blendWithEdges: boolean; }; edgeStyle: { widthScale: number; opacityScale: number; clampToNodeDiameter: boolean; fastRendering: boolean; adaptiveQuality: Record | null; }; shaded: { enabled: boolean; nodes: boolean; edges: boolean; lightDirection: number[] | null; lightColor: number[] | null; ambientTopColor: number[] | null; ambientBottomColor: number[] | null; diffuseStrength: number | null; ambientStrength: number | null; specularColor: number[] | null; specularStrength: number | null; shininess: number | null; }; ambientOcclusion: { supported: boolean; enabled: boolean; nodes: boolean; edges: boolean; strength: number | null; radius: number | null; bias: number | null; mode: string | null; intensityScale: number | null; intensityShift: number | null; quality: string | null; }; } export class AppearanceBehavior extends Behavior { static id: 'appearance'; state: AppearanceBehaviorState; appearance(options?: AppearanceBehaviorOptions): this | AppearanceBehaviorState; background(value?: AppearanceBehaviorOptions['background']): number[] | null | this; shadedEnabled(value?: boolean): boolean | this; supportsAmbientOcclusion(): boolean; } export interface MapperChannelConfig { type?: string; serializable?: boolean; unsupported?: boolean; attributes?: string | string[] | null; from?: string | string[] | null; transformType?: string; transformPower?: number; colormap?: string; alpha?: number; clamp?: boolean | { min?: boolean; max?: boolean }; divergent?: boolean; endpoints?: string; nodeAttribute?: string; domain?: number[]; range?: unknown[]; value?: unknown; defaultValue?: unknown; rules?: MapperChannelConfig[]; __ui?: Record | null; meta?: Record | null; [key: string]: unknown; } export interface MapperModeConfig { channels?: Record; } export interface MappersBehaviorOptions { node?: MapperModeConfig; edge?: MapperModeConfig; nodeChannels?: Record; edgeChannels?: Record; } export interface MappersBehaviorState { node: { mode: string | null; defaultId: string | null; mappers: Record }>; }; edge: { mode: string | null; defaultId: string | null; mappers: Record }>; }; } export class MappersBehavior extends Behavior { static id: 'mappers'; state: MappersBehaviorState; mappers(options?: MappersBehaviorOptions): this | MappersBehaviorState; getSerializedChannelConfig(mode: 'node' | 'edge', channel: string): MapperChannelConfig; setChannelConfig(mode: 'node' | 'edge', channel: string, config: MapperChannelConfig): this; } export interface FilterRule { id?: string; scope?: 'node' | 'edge' | string; type?: string; attribute?: string; min?: number; max?: number; values?: string[]; value?: unknown; operator?: string; [key: string]: unknown; } export interface FilterBehaviorOptions { id?: string; name?: string; scope?: 'render' | 'render+layout' | string; rules?: FilterRule[]; nodeRules?: FilterRule[]; edgeRules?: FilterRule[]; } export interface FilterBehaviorState { enabled: boolean; scope: string; options: Record | null; nodeCount?: number; edgeCount?: number; baseNodeCount?: number; baseEdgeCount?: number; error?: unknown; } export class FilterBehavior extends Behavior { static id: 'filters'; state: FilterBehaviorState; filters(options?: FilterBehaviorOptions): this | FilterBehaviorState; replaceRules(options: FilterBehaviorOptions): this; clear(): this; } export interface ExporterBehaviorOptions { baseName?: string; name?: string; filename?: string; format?: 'png' | 'jpeg' | 'webp' | 'svg' | string; preset?: string | null; width?: number | null; height?: number | null; customSize?: { width?: number | null; height?: number | null }; supersampling?: number | boolean | 'auto'; includeLabels?: boolean; includeLegends?: boolean; includeInterface?: boolean; legendScale?: number; transparentBackground?: boolean; alphaMode?: 'straight' | 'premultiplied' | string; showFrame?: boolean; } export interface ExporterBehaviorState extends ExporterBehaviorOptions { baseName: string; format: string; preset: string | null; width: number | null; height: number | null; supersampling: number; includeLabels: boolean; includeLegends: boolean; includeInterface: boolean; legendScale: number; transparentBackground: boolean; alphaMode: string; } export class ExporterBehavior extends Behavior { static id: 'exporter'; state: ExporterBehaviorState; exporter(options?: ExporterBehaviorOptions): this | ExporterBehaviorState; baseName(value?: string): string | this; format(value?: string): string | this; includeInterface(value?: boolean): boolean | this; legendScale(value?: number): number | this; } export interface InterfaceBehaviorOptions { compactBreakpoint?: number; fullscreenBreakpoint?: number; preferredDockSide?: DockSide; restorePrompt?: boolean; } export class InterfaceBehavior extends Behavior { static id: 'interface'; state: HeliosInterfaceState; compactBreakpoint(value?: number): number | this; fullscreenBreakpoint(value?: number): number | this; dockSide(value?: DockSide): DockSide | this; toggleDockSide(): this; mode(): InterfaceMode; isCompact(): boolean; isFullscreen(): boolean; viewportWidth(): number | null; setViewportWidth(width: number | null, options?: { silent?: boolean }): this; controlsOpen(value?: boolean): boolean | this; openControlsSurface(): this; closeControlsSurface(): this; activateControl(panelId: string): this; clearActiveControl(): this; resumePrompt(): HeliosInterfaceResumePrompt | null; ensurePersistenceReady(): Promise; restoreInterfaceState(snapshot?: Partial, options?: Record): this; resumeSession(options?: HeliosStorageRestoreSessionOptions & { markFinished?: boolean }): Promise | null>; startFresh(options?: { markFinished?: boolean; deletePendingSession?: boolean; delete?: boolean }): Promise; } export interface HeliosBuiltInBehaviorMap { appearance: AppearanceBehavior; exporter: ExporterBehavior; mappers: MappersBehavior; filters: FilterBehavior; interface: InterfaceBehavior; layout: LayoutBehavior; legends: LegendsBehavior; labels: LabelsBehavior; hover: HoverBehavior; selection: SelectionBehavior; } export interface HeliosBuiltInBehaviorOptionsMap { appearance: AppearanceBehaviorOptions; exporter: ExporterBehaviorOptions; mappers: MappersBehaviorOptions; filters: FilterBehaviorOptions; interface: InterfaceBehaviorOptions; layout: LayoutBehaviorOptions; legends: LegendsBehaviorOptions; labels: LabelsBehaviorOptions; hover: HoverBehaviorOptions; selection: SelectionBehaviorOptions; } export type HeliosBehaviorSnapshot = Partial>>; export interface BehaviorConfigObject extends Partial<{ [K in keyof HeliosBuiltInBehaviorOptionsMap]: | boolean | HeliosBuiltInBehaviorOptionsMap[K] | HeliosBuiltInBehaviorMap[K]; }> { use?: string | Behavior | Array; options?: Partial; } export interface HeliosBehaviorNamespace { (name: keyof HeliosBuiltInBehaviorMap): HeliosBuiltInBehaviorMap[keyof HeliosBuiltInBehaviorMap] | null; (name: string): Behavior | null; appearance: AppearanceBehavior; exporter: ExporterBehavior; mappers: MappersBehavior; filters: FilterBehavior; interface: InterfaceBehavior; layout: LayoutBehavior; legends: LegendsBehavior; labels: LabelsBehavior; hover: HoverBehavior; selection: SelectionBehavior; manager: BehaviorManager | null; registry: BehaviorRegistry | null; } export class Helios extends EventTarget { static STATES: Readonly<{ FILTERED: number; SELECTED: number; HIGHLIGHTED: number; }>; static STATE_BITS: typeof Helios.STATES; static UI_BINDINGS: Readonly>; behavior: HeliosBehaviorNamespace; behaviors: BehaviorManager; storage: HeliosStorageManager; network: HeliosNetwork | null; ui: HeliosUI | null; ready: Promise; constructor(network?: HeliosNetwork | null, options?: HeliosOptions); hasBehavior(name: string): boolean; getBehavior(name: K): HeliosBuiltInBehaviorMap[K] | null; getBehavior(name: string): Behavior | null; registerBehavior(name: string, behaviorCtor: new (options?: any) => T): this; useBehavior(name: K, behaviorOrOptions?: HeliosBuiltInBehaviorOptionsMap[K] | true): HeliosBuiltInBehaviorMap[K]; useBehavior(name: string, behaviorOrOptions: T): T; serializeBehaviorState(): HeliosBehaviorSnapshot; restoreBehaviorState(snapshot?: HeliosBehaviorSnapshot): this; serializeVisualizationState(options?: ExportVisualizationStateOptions): PersistenceEnvelope; exportVisualizationState(options?: ExportVisualizationStateOptions): PersistenceEnvelope | string | Blob; importVisualizationState(source: PersistenceEnvelope | string, options?: Record): Promise>; restoreVisualizationState(source: PersistenceEnvelope | string, options?: Record): Promise>; getAttachedVisualizationState(network?: HeliosNetwork | null, options?: AttachedVisualizationStateOptions): PersistenceEnvelope | null; attachVisualizationStateToNetwork(snapshot?: PersistenceEnvelope | null, options?: AttachedVisualizationStateOptions): this; clearAttachedVisualizationState(options?: AttachedVisualizationStateOptions): this; saveNetwork(format?: PortableNetworkFormat, options?: { output?: PortableNetworkOutputFormat; saveOptions?: Record }): Promise; savePortableNetwork(format?: PortableNetworkFormat, options?: SavePortableNetworkOptions): Promise; cameraPose(): CameraPose; cameraControls(): CameraControlsSnapshot; cameraControls(options: CameraControlsOptions): this; cameraTargetNodes(nodeIndices: ArrayLike | Iterable, options?: CameraTargetNodeOptions): this; cameraTargetNodes(): number[]; cameraFollowNodes(nodeIndices: ArrayLike | Iterable, options?: CameraTargetNodeOptions): this; cameraFollowNodes(): number[]; setCameraPose(pose: Partial, options?: CameraPoseOptions): this; transitionCamera(pose: Partial, options?: CameraTransitionOptions): Promise; stopCameraTransition(): this; frameNetwork(options?: FrameNetworkOptions): this; nodeHoverStyle(): NodeHoverStyle | null; nodeHoverStyle(style: NodeHoverStyle): this; edgeHoverStyle(): EdgeHoverStyle | null; edgeHoverStyle(style: EdgeHoverStyle): this; hoverStyleFromHighlight(): boolean; hoverStyleFromHighlight(value: boolean): this; highlightConnectedEdges(): boolean; highlightConnectedEdges(value: boolean): this; interactionRenderOrder(): boolean; interactionRenderOrder(value: boolean): this; setNodeHoverStyle(style: NodeHoverStyle): this; setEdgeHoverStyle(style: EdgeHoverStyle): this; setHoverStyleFromHighlight(value: boolean): this; setHighlightConnectedEdges(value: boolean): this; mode(): HeliosMode; setMode(mode: HeliosMode, options?: Record): Promise; loadNetwork(source: Blob | File | ArrayBuffer | Uint8Array | string, options?: Record): Promise; } export interface HeliosOptions extends Record { container?: string | HTMLElement | null; canvas?: HTMLCanvasElement | null; renderer?: 'auto' | 'webgpu' | 'webgl'; antialias?: boolean | number; supersampling?: number | boolean | 'auto'; powerPreference?: 'high-performance' | 'low-power'; webglContextAttributes?: WebGLContextAttributes; webgpuAdapterOptions?: GPURequestAdapterOptions; webgpuDeviceDescriptor?: GPUDeviceDescriptor; webgpuCanvasConfiguration?: Partial; hoverStyleFromHighlight?: boolean; highlightConnectedEdges?: boolean; hoverAffectsOtherElements?: boolean; interactionRenderOrder?: boolean; renderOrderInteractions?: boolean; interactionRenderOrderHoverConnectedEdges?: boolean; interactionRenderOrderSelectedConnectedEdges?: boolean; interactionRenderOrderHighlightedConnectedEdges?: boolean; mode?: HeliosMode; networkName?: string | null; networkSource?: Partial | null; autoCleanup?: boolean; disposeNetworkOnDestroy?: boolean; legends?: LegendsBehaviorOptions; labels?: LabelsBehaviorOptions; densityInteractionFilter?: DensityInteractionFilter; quickControls?: boolean | HeliosQuickControlsOptions; ui?: boolean | HeliosUIAutoOptions; /** * Built-in behaviors attach by default. Pass an object to tune individual * behaviors, custom behavior instances to attach extra behavior, or `false` * to opt out of default behavior attachment. */ behaviors?: false | string | Behavior | Array | BehaviorConfigObject; storage?: false | true | HeliosStorageConfig | HeliosStorageManager; session?: false | true | Record; workspaceId?: string; networkPersistence?: Record; positionPersistence?: Record; sessionThumbnail?: boolean | Record; autosyncInteractionIdleMs?: number | false; interactionIdleMs?: number | false; fileDrop?: boolean | HeliosFileDropOptions; networkFileDrop?: boolean | HeliosFileDropOptions; dragAndDropNetwork?: boolean | HeliosFileDropOptions; } export const EVENTS: Readonly<{ LAYOUT_START: 'layout:start'; LAYOUT_STOP: 'layout:stop'; LAYOUT_CHANGED: 'layout:changed'; MODE_CHANGED: 'mode:changed'; NODE_HOVER: 'node:hover'; EDGE_HOVER: 'edge:hover'; GRAPH_CLICK: 'graph:click'; GRAPH_DBLCLICK: 'graph:dblclick'; NODE_CLICK: 'node:click'; EDGE_CLICK: 'edge:click'; NODE_DBLCLICK: 'node:dblclick'; EDGE_DBLCLICK: 'edge:dblclick'; BEFORE_RENDER: 'render:before'; AFTER_RENDER: 'render:after'; RESIZE: 'resize'; CAMERA_MOVE: 'camera:move'; CAMERA_CONTROL_CHANGE: 'camera:control-change'; NETWORK_REPLACED: 'network:replaced'; MAPPERS_CHANGED: 'mappers:changed'; GRAPH_FILTER_CHANGED: 'graph:filter-changed'; }>; export class HeliosFilter { constructor(options?: Record); addRule(rule: FilterRule): this; clearRules(): this; toGraphFilterOptions(): Record; } export class Layout { constructor(...args: any[]); } export class StaticLayout extends Layout {} export class WorkerLayout extends Layout {} export class D3Force3DLayout extends Layout {} export class GpuForceLayout extends Layout {} export interface LayoutTuningFeatures { nodeCount: number; edgeCount: number; avgDegree: number; density: number; degreeVariance: number; isolateFraction: number; componentProxy: number; communityCount: number; vector: number[]; } export interface LayoutTuningParameter { coefficients: number[]; clamp: [number, number]; } export interface LayoutTuningModel { version: number; featureNames: string[]; parameters: Record; } export const DEFAULT_LAYOUT_TUNING_MODEL: LayoutTuningModel; export function extractLayoutTuningFeatures(network: HeliosNetwork | null, hints?: Record): LayoutTuningFeatures; export function predictLayoutTuningOptions( network: HeliosNetwork | null, options?: { model?: LayoutTuningModel | false | ((features: LayoutTuningFeatures, baseOptions: Record) => Record); baseOptions?: Record; hints?: Record; }, ): Record; export class PositionDelegate { constructor(...args: any[]); } export class GpuForcePositionDelegate extends PositionDelegate {} export class Mapper { constructor(...args: any[]); } export class MapperCollection { constructor(mode?: 'node' | 'edge', network?: HeliosNetwork | null, onChange?: (() => void) | null, debug?: unknown); createMapper(id: string): Mapper; channel(name: string): Mapper; } export function createDefaultMappers(...args: any[]): unknown; export const VISUAL_ATTRIBUTES: Readonly>; export class VisualAttributes { constructor(...args: any[]); } export const colormaps: Record; export const DEFAULT_NODE_COLORMAP: string; export function createCategoricalColormap(...args: any[]): unknown; export function createColormapScale(...args: any[]): unknown; export function colormapToScheme(...args: any[]): unknown; export function colormapToInterpolator(...args: any[]): unknown; export function decodeColormapData(...args: any[]): unknown; export function base64ToUint8Array(value: string): Uint8Array; export const FIGURE_EXPORT_PRESETS: readonly unknown[]; export function buildFigureExportPresetList(...args: any[]): unknown[]; export function getFigureExportCapability(...args: any[]): Record; export function resolveFigureExportOptions(...args: any[]): Record; export function captureCameraPose(camera: unknown): CameraPose; export function applyCameraPose(camera: unknown, pose: Partial, options?: { update?: boolean }): void; export function mergeCameraPose(basePose: Partial, patch?: Partial): CameraPose; export function createYawPitchQuaternion(yawRadians?: number, pitchRadians?: number): [number, number, number, number]; export class CameraTransitionController { constructor(options?: { requestRender?: (() => void) | null }); stop(): this; transition(camera: unknown, options?: { fromPose?: Partial; toPose?: Partial; durationMs?: number }): Promise; } export const BEHAVIOR_IDS: readonly [ 'appearance', 'exporter', 'mappers', 'filters', 'interface', 'layout', 'legends', 'labels', 'hover', 'selection', ]; export function createDefaultBehaviorRegistry(): BehaviorRegistry; export const PERSISTENCE_SCHEMA_VERSION: number; export const PERSISTENCE_KINDS: Readonly<{ preferences: 'preferences'; visualization: 'visualization'; session: 'session'; }>; export function createDefaultPreferencesState(value?: Partial): HeliosPreferencesState; export function createDefaultUIState(value?: Partial): HeliosUIState; export function createDefaultNetworkSource(value?: Partial): HeliosNetworkSource; export function createPersistenceEnvelope(kind: 'preferences', payload: Partial, metadata?: Record): PersistenceEnvelope; export function createPersistenceEnvelope(kind: 'visualization', payload: Partial, metadata?: Record): PersistenceEnvelope; export function createPersistenceEnvelope(kind: 'session', payload: Partial, metadata?: Record): PersistenceEnvelope; export function migratePersistenceEnvelope(source: unknown, expectedKind?: 'preferences'): PersistenceEnvelope; export function migratePersistenceEnvelope(source: unknown, expectedKind: 'visualization'): PersistenceEnvelope; export function migratePersistenceEnvelope(source: unknown, expectedKind: 'session'): PersistenceEnvelope; export function parsePersistenceEnvelope(source: unknown, expectedKind?: 'preferences'): PersistenceEnvelope; export function parsePersistenceEnvelope(source: unknown, expectedKind: 'visualization'): PersistenceEnvelope; export function parsePersistenceEnvelope(source: unknown, expectedKind: 'session'): PersistenceEnvelope; export function serializePersistenceEnvelope(envelope: PersistenceEnvelope, pretty?: boolean): string; export class LocalStoragePreferenceStore { constructor(options?: { storage?: Storage | null; key?: string; unfinishedSessionKey?: string }); read(): Promise; write(value: unknown): Promise; clear(): Promise; unfinishedSessionKeyFor(workspaceId?: string | null): string; getUnfinishedSessionId(workspaceId?: string | null): Promise; setUnfinishedSessionId(id: string | null, workspaceId?: string | null): Promise; } export class IndexedDBSessionStore { constructor(options?: { indexedDB?: IDBFactory | null; dbName?: string; storeName?: string; version?: number }); put(record: PersistenceEnvelope): Promise>; get(id: string): Promise | null>; getAll(): Promise>>; delete(id: string): Promise; } export function createMemoryStorage(): Storage; export function createMemoryIndexedDBFactory(): IDBFactory; export type StorageStateScope = 'user' | 'workspace' | 'network' | 'session'; export interface StateEntryUI { label?: string; controller?: string; min?: number; max?: number; step?: number; domain?: unknown; options?: unknown; debounceMs?: number; throttleMs?: number; transform?: unknown; } export interface StateEntryDescriptor { description?: string; default?: T; defaultValue?: T; type?: 'number' | 'boolean' | 'string' | 'enum' | 'object' | 'array'; scope?: StorageStateScope; persist?: boolean; aliases?: string[]; ui?: StateEntryUI; getter?: () => T; get?: () => T; setter?: (value: T, options?: Record) => void; set?: (value: T, options?: Record) => void; subscribe?: (callback: (value: T, detail?: Record) => void) => (() => void) | void; binder?: (context: Record) => (() => void) | void; serialize?: (value: T, options?: Record) => unknown; deserialize?: (value: unknown, options?: Record) => T; equals?: (a: T, b: T) => boolean; } export interface StorageManagerCapabilities { persistent: boolean; sessions: boolean; network: boolean; remote: boolean; } export interface HeliosStorageConfig extends Record { type?: 'dummy' | 'memory' | 'browser' | 'remote' | string; kind?: string; sessionId?: string; id?: string; workspaceId?: string; persistNetwork?: boolean; client?: Record; } export class StateRegistry extends EventTarget { constructor(options?: Record); register(owner: unknown, prefix: string, entries: Record): () => void; register(prefix: string, entries: Record): () => void; entry(key: string): StateEntryDescriptor | null; get(key: string, fallback?: unknown): unknown; set(key: string, value: unknown, options?: Record): Record | null; reset(keyOrPrefix: string, options?: Record): { reset: boolean; entries: Array> }; status(keyOrPrefix: string, options?: Record): Record; subscribe(keyOrPrefix: string, callback: (value: unknown, detail?: Record) => void, options?: Record): () => void; restore(overrides?: Record, options?: Record): string[]; serialize(): Record; getOverrides(options?: Record): Record; overrideKeys(): string[]; preferredKey(key: string): string; } export class BindingController { constructor(manager: HeliosStorageManager); bind(key: string, entry: StateEntryDescriptor): () => void; unbind(key: string): boolean; destroy(): void; } export class SessionStore { constructor(options?: Record); put(record: Record): Promise>; get(id: string): Promise | null>; getAll(): Promise>>; delete(id: string): Promise; } export class HeliosStorageManager extends EventTarget { capabilities: StorageManagerCapabilities; type: string; sessionId: string | null; ready: Promise; constructor(options?: Record); register(owner: unknown, prefix: string, entries: Record): () => void; register(prefix: string, entries: Record): () => void; entry(key: string): StateEntryDescriptor | null; get(key: string, fallback?: unknown): unknown; set(key: string, value: unknown, options?: Record): Record | null; reset(keyOrPrefix: string, options?: Record): { reset: boolean; entries: Array> }; setOverrideTrackingReady(ready?: boolean): boolean; status(keyOrPrefix: string, options?: Record): Record; keyStatus(keyOrPrefix: string, options?: Record): Record; persistenceStatus(): Record; getDirtyState(): Record; configure(options?: Record): Record; getPreferences(): HeliosPreferencesState; loadPreferences(): Promise; updatePreferences(patch?: Partial): Promise; markNetworkDirty(reason?: string): Record; markPositionsDirty(reason?: string): Record; setSessionNickname(nickname?: string | null, id?: string | null): Promise; subscribe(keyOrPrefix: string, callback: (value: unknown, detail?: Record) => void, options?: Record): () => void; serializeSnapshot(options?: Record): Record; restoreSnapshot(snapshot?: Record, options?: Record): string[]; serializeSessionSnapshot(options?: Record): Promise>; deserializeSessionSnapshot(snapshot?: Record): Record; captureSessionThumbnail(options?: Record): Promise; saveSessionSnapshot(options?: Record): Promise; restoreSessionSnapshot(snapshot?: Record, options?: Record): Promise; getOverrides(options?: Record): Record; overrideKeys(): string[]; preferredKey(key: string): string; loadSession(sessionId?: string | null): Promise; configureSession(options?: Record): unknown; restoreActiveSession(options?: Record): Promise; saveSession(options?: Record): Promise; getSession(id: string): Promise; listSessions(options?: Record): Promise>; listSessionSummaries(options?: Record): Promise>>; getResumeSessions(options?: Record): Promise>>; getResumePrompt(options?: Record): Promise | null>; startNewSession(options?: Record): Promise | null>; resumeSession(sessionId?: string | null, options?: Record): Promise; restoreSession(sessionIdOrRecord?: string | Record | null, options?: Record): Promise; deleteSession(id: string): Promise; markSessionFinished(id?: string | null): Promise; restorePortableStateFromNetwork(options?: Record): Promise; flush(options?: Record): Promise; flushAutosync(options?: Record): Promise; sync(options?: Record): Promise; destroy(): void; } export class DummyStorageManager extends HeliosStorageManager {} export class BrowserStorageManager extends HeliosStorageManager {} export class RemoteStorageManager extends HeliosStorageManager {} export function createHeliosStorageManager(config?: false | true | HeliosStorageConfig | HeliosStorageManager, context?: Record): HeliosStorageManager; export const SCENE_PANEL_SCHEMA: Record; export const LABELS_PANEL_SCHEMA: Record; export const LEGENDS_PANEL_SCHEMA: Record; export const MAPPERS_PANEL_SCHEMA: Record; export const FILTERS_PANEL_SCHEMA: Record; export const LAYOUT_PANEL_SCHEMA: Record; export const SELECTION_PANEL_SCHEMA: Record; export function createPanelSchemaIndicator(options?: Record): HTMLElement; export function humanizeControlLabel(value?: unknown): string; export function normalizePanelSchema(schema?: Record): Record; export function panelSchemaKeys(schema?: Record): string[]; export function panelSchemaSectionKeys(schema?: Record, sectionId?: string): string[]; export function panelSchemaSectionStatus(schema?: Record, sectionId?: string, storage?: HeliosStorageManager | null): string; export function panelSchemaStatus(schema?: Record, storage?: HeliosStorageManager | null): Record; export function resolvePanelItemLabel(item?: unknown, storage?: HeliosStorageManager | null): string; export class HeliosUI { helios: Helios | null; constructor(options?: Record); serializeState(): HeliosUIState; restoreState(state?: Partial, options?: Record): this; } export class UIAttribute { constructor(options: Record); static number(options: Record): UIAttribute; static string(options: Record): UIAttribute; static boolean(options: Record): UIAttribute; } export class TabbedPanel { constructor(options?: Record); } export class PanelStack { constructor(options?: Record); } export function defineHeliosWebComponents(docOrWin?: Document | Window): void; export function ensureDefaultStyles(doc?: Document): HTMLStyleElement | null; export default Helios;