import LogicFlow, { BaseEdgeModel, GraphModel, IRectNodeProperties, RectNodeModel } from '@logicflow/core'; import NodeData = LogicFlow.NodeData; import NodeConfig = LogicFlow.NodeConfig; import EdgeConfig = LogicFlow.EdgeConfig; export type IGroupNodeProperties = { /** * 当前分组中的节点 id */ children?: string[]; /** * 分组节点是否可以折叠 */ collapsible?: boolean; /** * 分组节点折叠状态 */ isCollapsed?: boolean; /** * 子节点是否限制移动范围 * 默认为 false,允许拖拽移除分组 */ isRestrict?: boolean; /** * isRestrict 模式启用时, * 如果同时设置 autoResize 为 true, * 那么子节点在父节点中移动时,父节点会自动调整大小 */ autoResize?: boolean; /** * 分组节点的收起状态宽高 */ collapsedWidth?: number; collapsedHeight?: number; /** * 缩放或旋转容器时,是否缩放或旋转组内节点 */ transformWithContainer?: boolean; /** * 当前分组元素的 zIndex */ zIndex?: number; /** * 分组节点是否自动置顶 */ autoToFront?: boolean; /** * 是否允许手动将边连到/从本分组节点。 * 显式设置时优先于插件选项 disallowEdgeConnectToGroup。 */ allowEdgeConnect?: boolean; isAllowAppendIn?: (_nodeData: any) => boolean; } & IRectNodeProperties; export declare class DynamicGroupNodeModel extends RectNodeModel { readonly isGroup = true; children: Set; isRestrict: boolean; autoResize: boolean; collapsible: boolean; staticTextPosition: boolean; expandWidth: number; expandHeight: number; collapsedWidth: number; collapsedHeight: number; isCollapsed: boolean; groupAddable: boolean; transformWithContainer: boolean; childrenLastCollapseStateDict: Map; constructor(data: NodeConfig, graphModel: GraphModel); initNodeData(data: LogicFlow.NodeConfig): void; setAttributes(): void; getTextStyle(): Record & { [x: string]: unknown; fill?: string | undefined; stroke?: string | undefined; strokeWidth?: number | undefined; radius?: number | undefined; rx?: number | undefined; ry?: number | undefined; width?: number | undefined; height?: number | undefined; path?: string | undefined; overflowMode?: "default" | "autoWrap" | "ellipsis" | undefined; textWidth?: number | undefined; background?: LogicFlow.CommonTheme | undefined; wrapPadding?: string | undefined; color?: string | undefined; fontSize: number; lineHeight?: number | undefined; textAnchor?: "middle" | "start" | "end" | undefined; dominantBaseline?: "middle" | "central" | "auto" | "text-bottom" | "alphabetic" | "ideographic" | "mathematical" | "hanging" | "text-top" | undefined; }; setProperties(properties: Partial): void; getData(): NodeData; /** * 获取分组内的节点 * @param groupModel */ getNodesInGroup(groupModel: DynamicGroupNodeModel): string[]; getMoveDistance(deltaX: number, deltaY: number, isIgnoreRule?: boolean): [number, number]; /** * 重写 getHistoryData 方法 */ getHistoryData(): NodeData; /** * 触发分组节点的「折叠 or 展开」动作 * 1. 折叠分组的宽高 * 2. 处理分组子节点 * 3. 处理连线 * @param collapse {boolean} true -> 折叠;false -> 展开 */ toggleCollapse(collapse?: boolean): void; getTitleHtmlRect(): import("./utils").TitleForeignObjectRect; /** * autoResize 更新分组尺寸后同步展开态快照,避免折叠/展开回退到旧尺寸。 */ updateExpandedSize(width: number, height: number): void; setTextPosition(): void; private collapse; private expand; createVirtualEdge(edgeConfig: EdgeConfig, realEdgeId: string): BaseEdgeModel; /** * 折叠分组的时候,需要处理分组自身的连线和分组内部子节点上的连线 * 边的分类: * - 虚拟边:分组被收起时,标识分组本身与外部节点关系的边 * - 真实边:分组本身或者分组内部节点与外部节点(非收起分组)关系的边 * 如果一个分组,本身与外部节点有 M 条连线,且内部 N 个子节点与外部节点有连线,那么这个分组收起时会生成 M+N 条连线 * 折叠分组时: * - 原有的虚拟边删除 * - 创建一个虚拟边 * - 真实边则隐藏 * 展开分组时: * - 当前的虚拟边删除 * - 如果外部节点是收起的分组,则创建虚拟边 * - 如果外部节点是普通节点,则显示真实边 * * @param collapse * @param edges */ collapseEdge(collapse: boolean, edges: BaseEdgeModel[]): void; /** * 是否允许此节点添加到该分组 * TODO: 如何重写该方法呢? * @param _nodeData */ isAllowAppendIn(_nodeData: NodeData): boolean; /** * 更新分组节点是否允许添加节点的属性 * @param isAllow */ setAllowAppendChild(isAllow: boolean): void; /** * 添加节点至分组中 * @param id */ addChild(id: string): void; /** * 从分组中移除某节点 * @param id */ removeChild(id: string): void; /** * 当 groupA 被添加到 groupB 中时,将 groupB 及 groupB 所属的 group zIndex 减 1 */ toBack(): void; /** * 重写 Group 节点的 Resize Outline */ /** * 展开态手动连线是否允许连到/从分组节点本身。 * 未设置 allowEdgeConnect 时由插件 disallowEdgeConnectToGroup 决定;折叠虚拟边不受影响。 */ isManualEdgeConnectAllowed(): boolean; getConnectedTargetRules(): import("@logicflow/core").Model.ConnectRule[]; getConnectedSourceRules(): import("@logicflow/core").Model.ConnectRule[]; /** * 保留锚点供折叠态虚拟边使用;禁止手动连线时关闭 edgeAddable。 */ getDefaultAnchor(): { x: number; y: number; id: string; }[]; getAnchorStyle(): LogicFlow.AnchorTheme; /** * 设置分组节点 drop 区域的样式 */ getAddableOutlineStyle(): { stroke: string; strokeWidth: number; strokeDasharray: string; fill: string; }; } export declare const DEFAULT_SENSOR_OUTLINE: { stroke: string; strokeWidth: number; }; export default DynamicGroupNodeModel;