molstar
Version:
A comprehensive macromolecular library.
151 lines (150 loc) • 6.16 kB
TypeScript
/**
* Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { PluginStateObject } from '../../mol-plugin-state/objects';
import { StateTransformer, StateTransform } from '../../mol-state';
import { PluginContext } from '../../mol-plugin/context';
import { PluginCommand } from '../command';
import { Observable } from 'rxjs';
import { ParamDefinition } from '../../mol-util/param-definition';
export { PluginBehavior };
interface PluginBehavior<P = unknown> {
register(ref: StateTransform.Ref): void;
unregister(): void;
/** Update params in place. Optionally return a promise if it depends on an async action. */
update?(params: P): boolean | Promise<boolean>;
}
declare namespace PluginBehavior {
const Root_base: {
new (data: {}, props?: {
label: string;
description?: string | undefined;
} | undefined): {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: {};
};
type: PluginStateObject.TypeInfo;
is(obj?: import("../../mol-state/object").StateObject<any, import("../../mol-state/object").StateObject.Type<any>> | undefined): obj is {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: {};
};
};
export class Root extends Root_base {
}
const Category_base: {
new (data: {}, props?: {
label: string;
description?: string | undefined;
} | undefined): {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: {};
};
type: PluginStateObject.TypeInfo;
is(obj?: import("../../mol-state/object").StateObject<any, import("../../mol-state/object").StateObject.Type<any>> | undefined): obj is {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: {};
};
};
export class Category extends Category_base {
}
const Behavior_base: {
new (data: PluginBehavior<unknown>, props?: {
label: string;
description?: string | undefined;
} | undefined): {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: PluginBehavior<unknown>;
};
type: PluginStateObject.TypeInfo;
is(obj?: import("../../mol-state/object").StateObject<any, import("../../mol-state/object").StateObject.Type<any>> | undefined): obj is {
id: import("../../mol-util/uuid").UUID;
type: PluginStateObject.TypeInfo;
label: string;
description?: string | undefined;
data: PluginBehavior<unknown>;
};
};
export class Behavior extends Behavior_base {
}
export interface Ctor<P = undefined> {
new (ctx: PluginContext, params: P): PluginBehavior<P>;
}
export const Categories: {
common: string;
representation: string;
interaction: string;
'custom-props': string;
misc: string;
};
export interface CreateParams<P> {
name: string;
category: keyof typeof Categories;
ctor: Ctor<P>;
canAutoUpdate?: StateTransformer.Definition<Root, Behavior, P>['canAutoUpdate'];
label?: (params: P) => {
label: string;
description?: string;
};
display: {
name: string;
description?: string;
};
params?(a: Root, globalCtx: PluginContext): {
[K in keyof P]: ParamDefinition.Any;
};
}
export type CreateCategory = typeof CreateCategory;
export const CreateCategory: StateTransformer<Root, Category, ParamDefinition.Normalize<{
label: string;
}>>;
export function getCategoryId(t: StateTransformer): "representation" | "custom-props" | "common" | "interaction" | "misc";
export function create<P>(params: CreateParams<P>): StateTransformer<Category, Behavior, P>;
export function simpleCommandHandler<T>(cmd: PluginCommand<T>, action: (data: T, ctx: PluginContext) => void | Promise<void>): {
new (ctx: PluginContext): {
/** private */ sub: PluginCommand.Subscription | undefined;
register(): void;
unregister(): void;
ctx: PluginContext;
};
};
export abstract class Handler<P = {}> implements PluginBehavior<P> {
protected ctx: PluginContext;
protected params: P;
private subs;
protected subscribeCommand<T>(cmd: PluginCommand<T>, action: PluginCommand.Action<T>): void;
protected subscribeObservable<T>(o: Observable<T>, action: (v: T) => void): void;
protected track<T>(sub: PluginCommand.Subscription): void;
abstract register(): void;
unregister(): void;
update(params: P): boolean | Promise<boolean>;
constructor(ctx: PluginContext, params: P);
}
export abstract class WithSubscribers<P = {}> implements PluginBehavior<P> {
protected plugin: PluginContext;
protected params: P;
abstract register(ref: string): void;
private subs;
protected subscribeCommand<T>(cmd: PluginCommand<T>, action: PluginCommand.Action<T>): void;
protected subscribeObservable<T>(o: Observable<T>, action: (v: T) => void): void;
unregister(): void;
constructor(plugin: PluginContext, params: P);
}
export {};
}