/** * Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal */ import { UUID } from '../mol-util/index.js'; import { StateTransform } from './transform.js'; import { ParamDefinition } from '../mol-util/param-definition.js'; import { State } from './state.js'; import { StateSelection, StateTransformer } from '../mol-state/index.js'; import { StateBuilder } from './state/builder.js'; export { StateObject, StateObjectCell }; interface StateObject> { readonly id: UUID; readonly type: T; readonly data: D; readonly label: string; readonly description?: string; readonly tags?: string[]; } declare namespace StateObject { function factory(): (type: T) => { new (data: D, props?: { label: string; description?: string; } | undefined): { id: UUID; type: T; label: string; description?: string; data: D; }; type: T; is(obj?: StateObject): obj is StateObject; }; type Type = { name: string; typeClass: Cls; }; type Ctor = { new (...args: any[]): T; is(obj?: StateObject): boolean; type: any; }; type From = C extends Ctor ? T : never; function create(type: T): { new (data: Data, props?: { label: string; description?: string; }): { id: UUID; type: T; label: string; description?: string; data: Data; }; type: T; is(obj?: StateObject): obj is StateObject; }; function hasTag(o: StateObject, t: string): boolean; /** A special object indicating a transformer result has no value. */ const Null: StateObject; } interface StateObjectCell { parent?: State; transform: F; sourceRef: StateTransform.Ref | undefined; status: StateObjectCell.Status; state: StateTransform.State; params: { definition: ParamDefinition.Params; values: any; } | undefined; dependencies: { dependentBy: StateObjectCell[]; dependsOn: StateObjectCell[]; }; errorText?: string; obj?: T; cache: unknown | undefined; } declare namespace StateObjectCell { type Status = 'ok' | 'error' | 'pending' | 'processing'; type Obj = C extends StateObjectCell ? T : never; type Transform = C extends StateObjectCell ? T : never; type Transformer = C extends StateObjectCell> ? T : never; function is(o: any): o is StateObjectCell; type Ref = StateTransform.Ref | StateObjectCell | StateObjectSelector; function resolve(state: State, refOrCellOrSelector: StateTransform.Ref | StateObjectCell | StateObjectSelector): StateObjectCell>, StateTransform>, StateObject>, any>>> | undefined; } export declare class StateObjectTracker { private state; private query; private version; cell: StateObjectCell | undefined; data: T['data'] | undefined; setQuery(sel: StateSelection.Selector): void; update(): boolean; constructor(state: State); } export declare class StateObjectSelector { ref: StateTransform.Ref; state?: State | undefined; get cell(): StateObjectCell> | undefined; get obj(): S | undefined; get data(): S['data'] | undefined; /** Create a new build and apply update or use the provided one. */ update(params: StateTransformer.Params, builder?: StateBuilder.Root | StateBuilder.To): StateBuilder; update(params: (old: StateTransformer.Params) => StateTransformer.Params | void, builder?: StateBuilder.Root | StateBuilder.To): StateBuilder; /** Checks if the object exists. If not throw an error. */ checkValid(): boolean; get isOk(): boolean | undefined; constructor(ref: StateTransform.Ref, state?: State | undefined); } export declare namespace StateObjectSelector { type Obj = S extends StateObjectSelector ? A : never; type Transformer = S extends StateObjectSelector ? T : never; } export type StateObjectRef = StateObjectSelector | StateObjectCell | StateTransform.Ref; export declare namespace StateObjectRef { function resolveRef(ref?: StateObjectRef): StateTransform.Ref | undefined; function resolve(state: State, ref?: StateObjectRef): StateObjectCell | undefined; function resolveAndCheck(state: State, ref?: StateObjectRef): StateObjectCell | undefined; }