import { Component } from 'vue'; export interface ITreeNode { id: string; name: string; icon?: string; children: ITreeNode[]; } export interface IBlockData { id: string; name: string; data: T; } export type OnUpdateSelfCb = (updated: Partial) => void; export type OnUpdateBlockCb = (updated: IBlockData) => void; export type OnPrependBlockCb = (block: IBlockData) => void; export type OnAppendBlockCb = (block: IBlockData) => void; export type OnRemoveSelfCb = () => void; export type OnActivatePreviousCb = () => void; export type OnActivateNextCb = () => void; export interface IBlockProps { blockId?: string; data?: T, onUpdate?: OnUpdateSelfCb; onPrependBlock?: OnPrependBlockCb; onAppendBlock?: OnAppendBlockCb; onRemoveSelf?: OnRemoveSelfCb; onActivateNext?: OnActivateNextCb; onActivatePrevious?: OnActivatePreviousCb; } export interface IBlockDefinition { name: string; icon?: string; getDefaultData: T; edit: Component>; display: Component>; } export interface IBlockLibrary { [name: string]: IBlockDefinition; }