2021-03-08 15:29:35 +00:00
|
|
|
import { Component } from 'vue';
|
|
|
|
|
2022-03-11 16:50:50 +00:00
|
|
|
export interface ITreeNode {
|
2021-03-08 15:29:35 +00:00
|
|
|
id: string;
|
|
|
|
name: string;
|
|
|
|
icon?: string;
|
2022-03-11 16:50:50 +00:00
|
|
|
children: ITreeNode[];
|
2021-03-08 15:29:35 +00:00
|
|
|
}
|
|
|
|
|
2022-03-11 16:50:50 +00:00
|
|
|
export interface IBlockData<T> {
|
2021-03-08 15:29:35 +00:00
|
|
|
id: string;
|
|
|
|
name: string;
|
|
|
|
data: T;
|
|
|
|
}
|
|
|
|
|
2022-03-12 16:16:24 +00:00
|
|
|
export type OnUpdateSelfCb<T> = (updated: Partial<T>) => void;
|
|
|
|
export type OnUpdateBlockCb = (updated: IBlockData<any>) => void;
|
|
|
|
export type OnPrependBlockCb = (block: IBlockData<any>) => void;
|
|
|
|
export type OnAppendBlockCb = (block: IBlockData<any>) => void;
|
|
|
|
export type OnRemoveSelfCb = () => void;
|
|
|
|
export type OnActivatePreviousCb = () => void;
|
|
|
|
export type OnActivateNextCb = () => void;
|
|
|
|
|
2022-03-11 16:50:50 +00:00
|
|
|
export interface IBlockProps<T> {
|
2022-03-12 16:16:24 +00:00
|
|
|
blockId?: string;
|
2021-03-08 15:29:35 +00:00
|
|
|
data?: T,
|
2022-03-12 16:16:24 +00:00
|
|
|
onUpdate?: OnUpdateSelfCb<T>;
|
|
|
|
onPrependBlock?: OnPrependBlockCb;
|
|
|
|
onAppendBlock?: OnAppendBlockCb;
|
|
|
|
onRemoveSelf?: OnRemoveSelfCb;
|
|
|
|
onActivateNext?: OnActivateNextCb;
|
|
|
|
onActivatePrevious?: OnActivatePreviousCb;
|
2021-03-08 15:29:35 +00:00
|
|
|
}
|
|
|
|
|
2022-03-11 16:50:50 +00:00
|
|
|
export interface IBlockDefinition<T> {
|
2021-03-08 15:29:35 +00:00
|
|
|
name: string;
|
|
|
|
icon?: string;
|
|
|
|
getDefaultData: T;
|
2022-03-11 16:50:50 +00:00
|
|
|
edit: Component<IBlockProps<T>>;
|
|
|
|
display: Component<IBlockProps<T>>;
|
2021-03-08 15:29:35 +00:00
|
|
|
}
|
|
|
|
|
2022-03-11 16:50:50 +00:00
|
|
|
export interface IBlockLibrary {
|
|
|
|
[name: string]: IBlockDefinition<any>;
|
2021-03-08 15:29:35 +00:00
|
|
|
}
|