@realsee/dnalogel
Version:
123 lines (122 loc) • 3.23 kB
TypeScript
import type { Five } from '@realsee/five';
import { Subscribe } from '../shared-utils/Subscribe';
import { WorkUtil } from '../shared-utils/Utils/WorkUtil';
import { FiveUtil } from '../shared-utils/Utils/FiveUtil';
/**
* 基本属性字段
*/
interface State {
/**
* 插件是否启用
*/
enabled: boolean;
/**
* 插件UI是否展示
*/
visible?: boolean;
/**
* 插件的配置项
*/
config?: unknown;
}
interface BaseOptions {
/** 是否是用户行为 */
userAction?: boolean;
[key: string]: unknown;
}
interface Config {
/** 静态资源前缀 */
staticPrefix?: string;
/** 国际化转换函数 */
i18n?: (key: string) => string;
}
/**
* 插件基本事件
*/
type EventMap<PluginState> = {
/**
* 插件被销毁
*/
dispose: () => void;
/**
* 插件状态变化
* @param params.state 最新的State
* @param params.prevState 上一个State
* @param params.userAction 是否是用户触发
*/
stateChange: (params: {
state: PluginState;
prevState?: PluginState;
userAction: boolean;
}) => void;
};
/**
* plugin 的基本控制器
*/
declare abstract class Controller<PluginState extends State = State, PluginEventMap extends EventMap<PluginState> = EventMap<PluginState>> {
/**
* @realsee/dnalogel 版本号
*/
readonly VERSION: string;
NAME?: string;
five: Five;
workUtil: WorkUtil;
fiveUtil: FiveUtil;
set workCode(workCode: string);
get workCode(): string;
/**
* @description: 插件事件钩子
*/
hooks: Subscribe<PluginEventMap>;
readonly staticPrefix: string;
/**
* 当前状态
* @description
* ```text
* 可以通过 plugin.state 和 plugin.setState 来获取和设置。
* 通过 state 设置后,plugin 会通过合适的动画运动来达到设置的效果。
* 来迎合一些通过数据驱动的场景。
* ```
*/
abstract state: PluginState;
constructor(five: Five, config?: Config);
updateFive(five: Five): void;
/**
* 获取当前的插件状态,如果当初插件内存在需要通过动画变更的 state 值,则通过此方法可以得到中间状态
*/
getCurrentState(): PluginState;
/**
* 插件自身DOM添加到父容器
* @param wrapper
*/
appendTo?(wrapper: Element): void;
/**
* 展示UI
*/
show?(options?: BaseOptions): Promise<void> | void;
/**
* 隐藏UI
*/
hide?(options?: BaseOptions): Promise<void> | void;
/**
* 设置state
* @param state 插件的目标状态
* @param options 配置项
*/
setState?(state: Partial<PluginState>, options?: BaseOptions): void;
protected onWorkCodeChange(): void;
/**
* 启用插件,让插件能够响应交互
*/
abstract enable(options?: BaseOptions): void;
/**
* 禁用插件,让插件停止响应交互
*/
abstract disable(options?: BaseOptions): void;
/**
* 插件进行销毁
*/
abstract dispose(): void;
}
export type { State, Config, EventMap, BaseOptions };
export { Controller };