flow.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { FlowNodeEntity } from '../entities';
  6. import { type FlowNodeMeta } from './flow-node-register';
  7. export type FlowNodeType = string | number;
  8. /**
  9. * Flow node json data
  10. */
  11. export interface FlowNodeJSON {
  12. id: string;
  13. type?: FlowNodeBaseType | FlowNodeSplitType | FlowNodeType; // 如果缺省 则 为 block
  14. data?: Record<string, any>; // 节点额外扩展的内容
  15. meta?: FlowNodeMeta;
  16. blocks?: FlowNodeJSON[]; // 子节点
  17. }
  18. export type FlowDocumentJSON = {
  19. nodes: FlowNodeJSON[];
  20. };
  21. export enum FlowNodeBaseType {
  22. START = 'start', // 开始节点
  23. DEFAULT = 'default', // 默认节点类型
  24. ROOT = 'root', // 根节点
  25. EMPTY = 'empty', // 空节点,宽和高为 0
  26. INLINE_BLOCKS = 'inlineBlocks', // 所有块合并为 InlineBlocks
  27. BLOCK_ICON = 'blockIcon', // 图标节点,如条件分支的头部的 菱形图标
  28. BLOCK = 'block', // 块节点
  29. BLOCK_ORDER_ICON = 'blockOrderIcon', // 带顺序的图标节点,一般为 block 第一个分支节点
  30. GROUP = 'group', // 分组节点
  31. END = 'end', // 结束节点
  32. BREAK = 'break', // 分支结束
  33. CONDITION = 'condition', // 可以连接多条线的条件判断节点,目前只支持横向布局
  34. SUB_CANVAS = 'subCanvas', // 自由布局子画布
  35. MULTI_INPUTS = 'multiInputs', // 多输入
  36. MULTI_OUTPUTS = 'multiOutputs', // 多输出
  37. INPUT = 'input', // 输入节点
  38. OUTPUT = 'output', // 输出节点
  39. SLOT = 'slot', // 插槽节点
  40. SLOT_BLOCK = 'slotBlock', // 插槽子节点
  41. }
  42. export enum FlowNodeSplitType {
  43. SIMPLE_SPLIT = 'simpleSplit', // 无 BlockOrderIcon
  44. DYNAMIC_SPLIT = 'dynamicSplit', // 动态分支
  45. STATIC_SPLIT = 'staticSplit', // 静态分支
  46. }
  47. export enum FlowDocumentConfigEnum {
  48. // 结束节点拖拽分支逻辑
  49. END_NODES_REFINE_BRANCH = 'END_NODES_REFINE_BRANCH',
  50. }
  51. export const FLOW_DEFAULT_HIDDEN_TYPES: FlowNodeType[] = [
  52. FlowNodeBaseType.ROOT,
  53. FlowNodeBaseType.INLINE_BLOCKS,
  54. FlowNodeBaseType.BLOCK,
  55. ];
  56. export type AddNodeData = FlowNodeJSON & {
  57. originParent?: FlowNodeEntity;
  58. parent?: FlowNodeEntity;
  59. hidden?: boolean;
  60. index?: number;
  61. };