@next-bricks/diagram 0.5.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/bricks.json +1 -1
  2. package/dist/chunks/{7312.3688d673.js → 7312.7dd56138.js} +3 -3
  3. package/dist/chunks/{7312.3688d673.js.map → 7312.7dd56138.js.map} +1 -1
  4. package/dist/chunks/7675.42d21e5c.js +2 -0
  5. package/dist/chunks/7675.42d21e5c.js.map +1 -0
  6. package/dist/chunks/9393.caf561ce.js +2 -0
  7. package/dist/chunks/9393.caf561ce.js.map +1 -0
  8. package/dist/chunks/editable-label.4f364423.js +3 -0
  9. package/dist/chunks/editable-label.4f364423.js.map +1 -0
  10. package/dist/chunks/eo-diagram.6168dc79.js +2 -0
  11. package/dist/chunks/eo-diagram.6168dc79.js.map +1 -0
  12. package/dist/chunks/{main.2d3b0cb6.js → main.b955f2dc.js} +2 -2
  13. package/dist/chunks/{main.2d3b0cb6.js.map → main.b955f2dc.js.map} +1 -1
  14. package/dist/examples.json +1 -1
  15. package/dist/{index.1993f974.js → index.cbfe9bdd.js} +2 -2
  16. package/dist/{index.1993f974.js.map → index.cbfe9bdd.js.map} +1 -1
  17. package/dist/manifest.json +32 -4
  18. package/dist/types.json +179 -6
  19. package/dist-types/diagram/LineComponent.d.ts +5 -2
  20. package/dist-types/diagram/constants.d.ts +2 -0
  21. package/dist-types/diagram/index.d.ts +14 -9
  22. package/dist-types/diagram/interfaces.d.ts +10 -0
  23. package/dist-types/diagram/processors/handleKeyboard.d.ts +8 -4
  24. package/dist-types/diagram/processors/{handleDiagramMouseDown.d.ts → handleNodesMouseDown.d.ts} +3 -3
  25. package/dist-types/diagram/processors/transformToCenter.d.ts +7 -0
  26. package/dist-types/diagram/processors/transformToCenter.spec.d.ts +1 -0
  27. package/docs/eo-diagram.md +70 -13
  28. package/package.json +2 -2
  29. package/dist/chunks/6457.0e22ff80.js +0 -2
  30. package/dist/chunks/6457.0e22ff80.js.map +0 -1
  31. package/dist/chunks/9393.4db156f6.js +0 -2
  32. package/dist/chunks/9393.4db156f6.js.map +0 -1
  33. package/dist/chunks/editable-label.6607b08b.js +0 -3
  34. package/dist/chunks/editable-label.6607b08b.js.map +0 -1
  35. package/dist/chunks/eo-diagram.a0684049.js +0 -2
  36. package/dist/chunks/eo-diagram.a0684049.js.map +0 -1
  37. package/dist-types/diagram/processors/getCenterOffsets.d.ts +0 -2
  38. /package/dist/chunks/{7312.3688d673.js.LICENSE.txt → 7312.7dd56138.js.LICENSE.txt} +0 -0
  39. /package/dist/chunks/{editable-label.6607b08b.js.LICENSE.txt → editable-label.4f364423.js.LICENSE.txt} +0 -0
  40. /package/dist-types/diagram/{processors/getCenterOffsets.spec.d.ts → ConnectLineComponent.spec.d.ts} +0 -0
  41. /package/dist-types/diagram/processors/{handleDiagramMouseDown.spec.d.ts → handleNodesMouseDown.spec.d.ts} +0 -0
package/dist/types.json CHANGED
@@ -138,10 +138,22 @@
138
138
  }
139
139
  },
140
140
  {
141
- "name": "activeNodeId",
141
+ "name": "activeTarget",
142
142
  "annotation": {
143
- "type": "keyword",
144
- "value": "string"
143
+ "type": "union",
144
+ "types": [
145
+ {
146
+ "type": "reference",
147
+ "typeName": {
148
+ "type": "identifier",
149
+ "name": "ActiveTarget"
150
+ }
151
+ },
152
+ {
153
+ "type": "keyword",
154
+ "value": "null"
155
+ }
156
+ ]
145
157
  }
146
158
  },
147
159
  {
@@ -160,11 +172,35 @@
160
172
  "name": "NodesConnectOptions"
161
173
  }
162
174
  }
175
+ },
176
+ {
177
+ "name": "zoomable",
178
+ "annotation": {
179
+ "type": "keyword",
180
+ "value": "boolean"
181
+ }
182
+ },
183
+ {
184
+ "name": "scrollable",
185
+ "annotation": {
186
+ "type": "keyword",
187
+ "value": "boolean"
188
+ }
189
+ },
190
+ {
191
+ "name": "scaleRange",
192
+ "annotation": {
193
+ "type": "reference",
194
+ "typeName": {
195
+ "type": "identifier",
196
+ "name": "RangeTuple"
197
+ }
198
+ }
163
199
  }
164
200
  ],
165
201
  "events": [
166
202
  {
167
- "name": "activeNode.change",
203
+ "name": "activeTarget.change",
168
204
  "detail": {
169
205
  "annotation": {
170
206
  "type": "union",
@@ -173,12 +209,12 @@
173
209
  "type": "reference",
174
210
  "typeName": {
175
211
  "type": "identifier",
176
- "name": "DiagramNode"
212
+ "name": "ActiveTarget"
177
213
  }
178
214
  },
179
215
  {
180
216
  "type": "keyword",
181
- "value": "undefined"
217
+ "value": "null"
182
218
  }
183
219
  ]
184
220
  }
@@ -196,6 +232,30 @@
196
232
  }
197
233
  }
198
234
  },
235
+ {
236
+ "name": "edge.delete",
237
+ "detail": {
238
+ "annotation": {
239
+ "type": "reference",
240
+ "typeName": {
241
+ "type": "identifier",
242
+ "name": "DiagramEdge"
243
+ }
244
+ }
245
+ }
246
+ },
247
+ {
248
+ "name": "line.click",
249
+ "detail": {
250
+ "annotation": {
251
+ "type": "reference",
252
+ "typeName": {
253
+ "type": "identifier",
254
+ "name": "LineTarget"
255
+ }
256
+ }
257
+ }
258
+ },
199
259
  {
200
260
  "name": "line.dblclick",
201
261
  "detail": {
@@ -989,6 +1049,92 @@
989
1049
  ]
990
1050
  }
991
1051
  },
1052
+ {
1053
+ "type": "typeAlias",
1054
+ "name": "ActiveTarget",
1055
+ "annotation": {
1056
+ "type": "union",
1057
+ "types": [
1058
+ {
1059
+ "type": "reference",
1060
+ "typeName": {
1061
+ "type": "identifier",
1062
+ "name": "ActiveTargetOfNode"
1063
+ }
1064
+ },
1065
+ {
1066
+ "type": "reference",
1067
+ "typeName": {
1068
+ "type": "identifier",
1069
+ "name": "ActiveTargetOfEdge"
1070
+ }
1071
+ }
1072
+ ]
1073
+ }
1074
+ },
1075
+ {
1076
+ "type": "interface",
1077
+ "name": "ActiveTargetOfNode",
1078
+ "body": [
1079
+ {
1080
+ "type": "propertySignature",
1081
+ "key": {
1082
+ "type": "identifier",
1083
+ "name": "type"
1084
+ },
1085
+ "annotation": {
1086
+ "type": "jsLiteral",
1087
+ "value": "node"
1088
+ },
1089
+ "computed": false
1090
+ },
1091
+ {
1092
+ "type": "propertySignature",
1093
+ "key": {
1094
+ "type": "identifier",
1095
+ "name": "nodeId"
1096
+ },
1097
+ "annotation": {
1098
+ "type": "keyword",
1099
+ "value": "string"
1100
+ },
1101
+ "computed": false
1102
+ }
1103
+ ]
1104
+ },
1105
+ {
1106
+ "type": "interface",
1107
+ "name": "ActiveTargetOfEdge",
1108
+ "body": [
1109
+ {
1110
+ "type": "propertySignature",
1111
+ "key": {
1112
+ "type": "identifier",
1113
+ "name": "type"
1114
+ },
1115
+ "annotation": {
1116
+ "type": "jsLiteral",
1117
+ "value": "edge"
1118
+ },
1119
+ "computed": false
1120
+ },
1121
+ {
1122
+ "type": "propertySignature",
1123
+ "key": {
1124
+ "type": "identifier",
1125
+ "name": "edge"
1126
+ },
1127
+ "annotation": {
1128
+ "type": "reference",
1129
+ "typeName": {
1130
+ "type": "identifier",
1131
+ "name": "DiagramEdge"
1132
+ }
1133
+ },
1134
+ "computed": false
1135
+ }
1136
+ ]
1137
+ },
992
1138
  {
993
1139
  "type": "interface",
994
1140
  "name": "NodesConnectOptions",
@@ -1085,6 +1231,33 @@
1085
1231
  }
1086
1232
  ]
1087
1233
  },
1234
+ {
1235
+ "type": "typeAlias",
1236
+ "name": "RangeTuple",
1237
+ "annotation": {
1238
+ "type": "tuple",
1239
+ "elementTypes": [
1240
+ {
1241
+ "type": "namedTupleMember",
1242
+ "label": "min",
1243
+ "optional": false,
1244
+ "elementType": {
1245
+ "type": "keyword",
1246
+ "value": "number"
1247
+ }
1248
+ },
1249
+ {
1250
+ "type": "namedTupleMember",
1251
+ "label": "max",
1252
+ "optional": false,
1253
+ "elementType": {
1254
+ "type": "keyword",
1255
+ "value": "number"
1256
+ }
1257
+ }
1258
+ ]
1259
+ }
1260
+ },
1088
1261
  {
1089
1262
  "type": "interface",
1090
1263
  "name": "LineTarget",
@@ -1,11 +1,14 @@
1
1
  /// <reference types="react" />
2
- import type { LineTarget, LineTextClipPath, RenderedLine } from "./interfaces";
2
+ import type { DiagramEdge, LineTarget, LineTextClipPath, RenderedLine } from "./interfaces";
3
3
  export interface LineComponentProps {
4
4
  line: RenderedLine;
5
5
  linePaths: Map<string, SVGPathElement | null>;
6
6
  clipPathList: LineTextClipPath[];
7
7
  markerPrefix: string;
8
8
  clipPathPrefix: string;
9
+ activeLineMarkerPrefix: string;
10
+ activeEdge: DiagramEdge | null;
11
+ onLineClick?(line: LineTarget): void;
9
12
  onLineDoubleClick?(line: LineTarget): void;
10
13
  }
11
- export declare function LineComponent({ line: { line, d, markerIndex, edge }, linePaths, clipPathList, markerPrefix, clipPathPrefix, onLineDoubleClick, }: LineComponentProps): JSX.Element;
14
+ export declare function LineComponent({ line: { line, d, markerIndex, edge }, linePaths, clipPathList, markerPrefix, clipPathPrefix, activeLineMarkerPrefix, activeEdge, onLineClick, onLineDoubleClick, }: LineComponentProps): JSX.Element;
@@ -2,3 +2,5 @@ export declare const DEFAULT_LINE_STROKE_COLOR = "var(--palette-gray-5)";
2
2
  export declare const DEFAULT_LINE_STROKE_WIDTH = 1;
3
3
  export declare const DEFAULT_LINE_CURVE_TYPE = "curveBasis";
4
4
  export declare const DEFAULT_LINE_INTERACT_STROKE_WIDTH = 20;
5
+ export declare const DEFAULT_SCALE_RANGE_MIN = 0.5;
6
+ export declare const DEFAULT_SCALE_RANGE_MAX = 2;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { ReactNextElement } from "@next-core/react-element";
3
3
  import "@next-core/theme";
4
- import type { DiagramEdge, DiagramNode, LayoutOptionsDagre, LineConf, NodeBrickConf, LineTarget, ConnectLineDetail, NodesConnectOptions } from "./interfaces";
4
+ import type { DiagramEdge, DiagramNode, LayoutOptionsDagre, LineConf, NodeBrickConf, LineTarget, ConnectLineDetail, NodesConnectOptions, ActiveTarget, RangeTuple } from "./interfaces";
5
5
  export interface EoDiagramProps {
6
6
  layout?: "dagre";
7
7
  nodes?: DiagramNode[];
@@ -10,15 +10,15 @@ export interface EoDiagramProps {
10
10
  lines?: LineConf[];
11
11
  layoutOptions?: LayoutOptionsDagre;
12
12
  nodesConnect?: NodesConnectOptions;
13
- activeNodeId?: string;
13
+ activeTarget?: ActiveTarget | null;
14
14
  disableKeyboardAction?: boolean;
15
+ zoomable?: boolean;
16
+ scrollable?: boolean;
17
+ scaleRange?: RangeTuple;
15
18
  }
16
19
  export interface DiagramRef {
17
20
  callOnLineLabel(id: string, method: string, ...args: unknown[]): void;
18
21
  }
19
- export interface DiagramHandler {
20
- moveIntoView(id: string): void;
21
- }
22
22
  export declare const EoDiagramComponent: React.ForwardRefExoticComponent<EoDiagramComponentProps & React.RefAttributes<DiagramRef>>;
23
23
  /**
24
24
  * 构件 `eo-diagram`
@@ -34,17 +34,22 @@ export declare class EoDiagram extends ReactNextElement implements EoDiagramProp
34
34
  accessor nodeBricks: NodeBrickConf[] | undefined;
35
35
  accessor lines: LineConf[] | undefined;
36
36
  accessor layoutOptions: LayoutOptionsDagre | undefined;
37
- accessor activeNodeId: string | undefined;
37
+ accessor activeTarget: ActiveTarget | null | undefined;
38
38
  accessor disableKeyboardAction: boolean | undefined;
39
39
  accessor nodesConnect: NodesConnectOptions | undefined;
40
+ accessor zoomable: boolean | undefined;
41
+ accessor scrollable: boolean | undefined;
42
+ accessor scaleRange: RangeTuple | undefined;
40
43
  callOnLineLabel(id: string, method: string, ...args: unknown[]): void;
41
44
  render(): React.JSX.Element;
42
45
  }
43
46
  export interface EoDiagramComponentProps extends EoDiagramProps {
44
- onActiveNodeChange?(node: DiagramNode | undefined): void;
45
- onSwitchActiveNode?(id: string | undefined): void;
47
+ onActiveTargetChange?(target: ActiveTarget | null): void;
48
+ onSwitchActiveTarget?(target: ActiveTarget | null): void;
46
49
  onNodeDelete?(node: DiagramNode): void;
50
+ onEdgeDelete?(edge: DiagramEdge): void;
51
+ onLineClick?(line: LineTarget): void;
47
52
  onLineDoubleClick?(line: LineTarget): void;
48
53
  onNodesConnect?(detail: ConnectLineDetail): void;
49
54
  }
50
- export declare function LegacyEoDiagramComponent({ layout, nodes, edges, nodeBricks, lines, layoutOptions, nodesConnect, activeNodeId, disableKeyboardAction, onActiveNodeChange, onSwitchActiveNode, onNodeDelete, onLineDoubleClick, onNodesConnect, }: EoDiagramComponentProps, ref: React.Ref<DiagramRef>): React.JSX.Element;
55
+ export declare function LegacyEoDiagramComponent({ layout, nodes, edges, nodeBricks, lines, layoutOptions, nodesConnect, activeTarget, disableKeyboardAction, zoomable, scrollable, scaleRange: _scaleRange, onActiveTargetChange, onSwitchActiveTarget, onNodeDelete, onEdgeDelete, onLineClick, onLineDoubleClick, onNodesConnect, }: EoDiagramComponentProps, ref: React.Ref<DiagramRef>): React.JSX.Element;
@@ -54,6 +54,7 @@ export interface RenderedLineLabel {
54
54
  id: string;
55
55
  }
56
56
  export type PositionTuple = [x: number, y: number];
57
+ export type RangeTuple = [min: number, max: number];
57
58
  export interface LineMarker {
58
59
  strokeColor: string;
59
60
  }
@@ -140,3 +141,12 @@ export interface ConnectLineState {
140
141
  from: PositionTuple;
141
142
  options: NodesConnectOptions;
142
143
  }
144
+ export type ActiveTarget = ActiveTargetOfNode | ActiveTargetOfEdge;
145
+ export interface ActiveTargetOfNode {
146
+ type: "node";
147
+ nodeId: string;
148
+ }
149
+ export interface ActiveTargetOfEdge {
150
+ type: "edge";
151
+ edge: DiagramEdge;
152
+ }
@@ -1,5 +1,5 @@
1
- import type { DiagramNode, RenderedEdge, RenderedNode } from "../interfaces";
2
- export type KeyboardAction = KeyboardActionSwitchActiveNode | KeyboardActionDeleteNode;
1
+ import type { ActiveTarget, DiagramEdge, DiagramNode, RenderedEdge, RenderedNode } from "../interfaces";
2
+ export type KeyboardAction = KeyboardActionSwitchActiveNode | KeyboardActionDeleteNode | KeyboardActionDeleteEdge;
3
3
  export interface KeyboardActionSwitchActiveNode {
4
4
  action: "switch-active-node";
5
5
  node?: DiagramNode;
@@ -8,8 +8,12 @@ export interface KeyboardActionDeleteNode {
8
8
  action: "delete-node";
9
9
  node: DiagramNode;
10
10
  }
11
- export declare function handleKeyboard(event: KeyboardEvent, { renderedNodes, renderedEdges, activeNodeId, }: {
11
+ export interface KeyboardActionDeleteEdge {
12
+ action: "delete-edge";
13
+ edge: DiagramEdge;
14
+ }
15
+ export declare function handleKeyboard(event: KeyboardEvent, { renderedNodes, renderedEdges, activeTarget, }: {
12
16
  renderedNodes: RenderedNode[];
13
17
  renderedEdges: RenderedEdge[];
14
- activeNodeId: string | undefined;
18
+ activeTarget: ActiveTarget | null | undefined;
15
19
  }): KeyboardAction | undefined;
@@ -1,11 +1,11 @@
1
1
  import type React from "react";
2
- import type { ConnectLineState, DiagramNode, ConnectLineDetail, NodesConnectOptions, PositionTuple, RefRepository } from "../interfaces";
3
- export declare function handleDiagramMouseDown(event: React.MouseEvent, { nodes, nodesRefRepository, nodesConnect, setConnectLineState, setConnectLineTo, onSwitchActiveNode, onNodesConnect, }: {
2
+ import type { ConnectLineState, DiagramNode, ConnectLineDetail, NodesConnectOptions, PositionTuple, RefRepository, ActiveTarget } from "../interfaces";
3
+ export declare function handleNodesMouseDown(event: MouseEvent, { nodes, nodesRefRepository, nodesConnect, setConnectLineState, setConnectLineTo, onSwitchActiveTarget, onNodesConnect, }: {
4
4
  nodes: DiagramNode[] | undefined;
5
5
  nodesConnect: NodesConnectOptions | undefined;
6
6
  nodesRefRepository: RefRepository | null;
7
7
  setConnectLineState: (value: React.SetStateAction<ConnectLineState | null>) => void;
8
8
  setConnectLineTo: (value: React.SetStateAction<PositionTuple>) => void;
9
- onSwitchActiveNode?(id: string | undefined): void;
9
+ onSwitchActiveTarget?(target: ActiveTarget | null): void;
10
10
  onNodesConnect?(detail: ConnectLineDetail): void;
11
11
  }): void;
@@ -0,0 +1,7 @@
1
+ import type { RenderedNode, TransformLiteral } from "../interfaces";
2
+ export interface TransformToCenterOptions {
3
+ canvasWidth: number;
4
+ canvasHeight: number;
5
+ scaleRange?: [min: number, max: number];
6
+ }
7
+ export declare function transformToCenter(renderedNodes: RenderedNode[], { canvasWidth, canvasHeight, scaleRange }: TransformToCenterOptions): TransformLiteral;
@@ -151,11 +151,14 @@ properties:
151
151
  top: 0px
152
152
  left: 0px
153
153
  context:
154
- - name: activeNodeId
154
+ - name: activeTarget
155
+ value: null
155
156
  - name: tempNodeId
156
157
  - name: targetNode
157
158
  - name: editingLabelNodes
158
159
  value: []
160
+ - name: editingLabelEdges
161
+ value: []
159
162
  - name: nodes
160
163
  value:
161
164
  - type: board
@@ -266,13 +269,35 @@ children:
266
269
  : edge
267
270
  )
268
271
  %>
272
+ label.editing.change:
273
+ action: context.replace
274
+ args:
275
+ - editingLabelEdges
276
+ - |-
277
+ <%
278
+ EVENT.detail
279
+ ? CTX.editingLabelEdges.concat(
280
+ `${DATA.edge.source}-:-${DATA.edge.target}`
281
+ )
282
+ : CTX.editingLabelEdges.filter(
283
+ (id) =>
284
+ id !== `${DATA.edge.source}-:-${DATA.edge.target}`
285
+ )
286
+ %>
287
+ click:
288
+ action: context.replace
289
+ args:
290
+ - activeTarget
291
+ - type: edge
292
+ edge: <% DATA.edge %>
269
293
  - edgeType: menu
270
294
  strokeColor: var(--palette-gray-5)
271
295
  arrow: true
296
+ interactable: true
272
297
  layoutOptions:
273
- nodePadding: 10
274
- activeNodeId: <%= CTX.activeNodeId %>
275
- disableKeyboardAction: <%= CTX.editingLabelNodes.length > 0 %>
298
+ nodePadding: [4, 10, 10]
299
+ activeTarget: <%= CTX.activeTarget %>
300
+ disableKeyboardAction: <%= CTX.editingLabelNodes.length > 0 || CTX.editingLabelEdges.length > 0 %>
276
301
  nodesConnect:
277
302
  arrow: true
278
303
  strokeColor: |-
@@ -289,13 +314,14 @@ children:
289
314
  type: <% DATA.node.type %>
290
315
  autoFocusOnce: |
291
316
  <% DATA.node.$temp ? DATA.node.id : undefined %>
292
- active: <%= CTX.activeNodeId === DATA.node.id %>
317
+ active: <%= CTX.activeTarget?.type === "node" && CTX.activeTarget.nodeId === DATA.node.id %>
293
318
  events:
294
319
  click:
295
320
  action: context.replace
296
321
  args:
297
- - activeNodeId
298
- - <% DATA.node.id %>
322
+ - activeTarget
323
+ - type: node
324
+ nodeId: <% DATA.node.id %>
299
325
  label.editing.change:
300
326
  action: context.replace
301
327
  args:
@@ -352,17 +378,30 @@ children:
352
378
  <% CTX.edges.concat({ source: DATA.node.id, target: CTX.tempNodeId, name: "未命名", type: "link", $temp: true }) %>
353
379
  - action: context.replace
354
380
  args:
355
- - activeNodeId
356
- - <% CTX.tempNodeId %>
381
+ - activeTarget
382
+ - type: node
383
+ nodeId: <% CTX.tempNodeId %>
357
384
  events:
358
- activeNode.change:
385
+ activeTarget.change:
359
386
  - action: context.replace
360
387
  # Take reaction only if the active node has been changed
361
388
  # Otherwise it may cause infinite loop
362
- if: <% CTX.activeNodeId !== EVENT.detail?.id %>
389
+ if: |
390
+ <%
391
+ ((newTarget, previousTarget) =>
392
+ (newTarget
393
+ ? !previousTarget ||
394
+ newTarget.type !== previousTarget.type ||
395
+ (newTarget.type === "node"
396
+ ? newTarget.nodeId !== previousTarget.nodeId
397
+ : newTarget.edge.source !== previousTarget.edge.source ||
398
+ newTarget.edge.target !== previousTarget.edge.target)
399
+ : !!previousTarget)
400
+ )(EVENT.detail, CTX.activeTarget)
401
+ %>
363
402
  args:
364
- - activeNodeId
365
- - <% EVENT.detail?.id %>
403
+ - activeTarget
404
+ - <% EVENT.detail %>
366
405
  node.delete:
367
406
  - action: context.replace
368
407
  args:
@@ -396,6 +435,24 @@ children:
396
435
  target !== CTX.targetNode.id
397
436
  )
398
437
  %>
438
+ edge.delete:
439
+ action: context.replace
440
+ args:
441
+ - edges
442
+ - |-
443
+ <%
444
+ CTX.edges.filter(
445
+ ({ source, target }) =>
446
+ source !== EVENT.detail.source ||
447
+ target !== EVENT.detail.target
448
+ )
449
+ %>
450
+ line.click:
451
+ action: context.replace
452
+ args:
453
+ - activeTarget
454
+ - type: edge
455
+ edge: <% EVENT.detail.edge %>
399
456
  line.dblclick:
400
457
  target: _self
401
458
  method: callOnLineLabel
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-bricks/diagram",
3
- "version": "0.5.2",
3
+ "version": "0.7.0",
4
4
  "homepage": "https://github.com/easyops-cn/next-bricks/tree/master/bricks/diagram",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,5 +40,5 @@
40
40
  "peerDependencies": {
41
41
  "@next-bricks/icons": "*"
42
42
  },
43
- "gitHead": "84f6f3e270489b955eeeecf7100b2655ce33d94c"
43
+ "gitHead": "67c0b7aa44a1c6e314d8f0e200fde7d87ddda9c2"
44
44
  }
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_next_bricks_diagram=self.webpackChunk_next_bricks_diagram||[]).push([[6457],{2260:(e,t,n)=>{n.d(t,{K:()=>a});var r=n(8657),o=n.n(r);function a(e){var{clipPath:t,clipPathPrefix:n,renderedLineLabels:r}=e,{x0:a,y0:i,w:l,h:c,id:d}=t,s=r.find((e=>e.id===d));if(!s)return null;var{left:u,top:f,right:v,bottom:h}=s.lineRect;return o().createElement("clipPath",{key:d,id:"".concat(n).concat(d)},o().createElement("polygon",{points:["".concat(a,",").concat(i+c),"".concat(a+l,",").concat(i+c),"".concat(a+l,",").concat(i),"".concat(a,",").concat(i),"".concat(a,",").concat(f),"".concat(v,",").concat(f),"".concat(v,",").concat(h),"".concat(u,",").concat(h),"".concat(u,",").concat(f),"".concat(a,",").concat(f)].join(" ")}))}},7587:(e,t,n)=>{n.d(t,{f:()=>c});var r=n(8657),o=n.n(r),a=n(2779),i=n.n(a),l=n(9575);function c(e){var{connectLineState:t,connectLineTo:n,markerPrefix:r}=e;return o().createElement("svg",{width:"100%",height:"100%",className:i()("connect-line",{connecting:!!t})},o().createElement("defs",null,o().createElement(l.C,{id:"".concat(r,"connect-line"),strokeColor:null==t?void 0:t.options.strokeColor})),o().createElement("path",{d:t?"M".concat(t.from.join(" "),"L").concat(n.join(" ")):"",fill:"none",stroke:null==t?void 0:t.options.strokeColor,strokeWidth:null==t?void 0:t.options.strokeWidth,markerEnd:null!=t&&t.options.arrow?"url(#".concat(r,"connect-line)"):void 0}))}},6462:(e,t,n)=>{n.d(t,{y:()=>l});var r=n(8657),o=n.n(r),a=n(2779),i=n.n(a);function l(e){var{line:{line:t,d:n,markerIndex:r,edge:a},linePaths:l,clipPathList:c,markerPrefix:d,clipPathPrefix:s,onLineDoubleClick:u}=e;return o().createElement("g",{className:i()("line",{interactable:t.interactable}),onDoubleClick:t.interactable?e=>(e.preventDefault(),e.stopPropagation(),null==u?void 0:u({id:t.$id,edge:a})):void 0,style:{cursor:t.cursor}},o().createElement("path",{ref:e=>l.set(t.$id,e),stroke:t.strokeColor,strokeWidth:t.strokeWidth,d:n,fill:"none",markerEnd:void 0===r?void 0:"url(#".concat(d).concat(r,")"),clipPath:c.some((e=>e.id===t.$id))?"url(#".concat(s).concat(t.$id,")"):void 0}),t.interactable&&o().createElement("path",{d:n,fill:"none",stroke:"transparent",strokeWidth:t.interactStrokeWidth}))}},7853:(e,t,n)=>{n.d(t,{L8:()=>c});var r=n(3028),o=n(8657),a=n.n(o),i=n(9494),l=n(9464);function c(e){var{labels:t,onRendered:n}=e,[r,i]=(0,o.useState)(!1),[l,c]=(0,o.useState)([]),u=(0,o.useMemo)((()=>new Map),[]),f=(0,o.useCallback)(((e,t)=>{t&&u.set(e,t),c((t=>t.includes(e)?t:t.concat(e)))}),[u]),v=(0,o.useCallback)((e=>{c((t=>{var n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,o.useEffect)((()=>{i(!(null!=t&&t.some((e=>!l.includes(e.id)))))}),[t,l]),(0,o.useEffect)((()=>{null==n||n(r?u:null)}),[u,r]),a().createElement(a().Fragment,null,null==t?void 0:t.map((e=>{var{text:t,label:n,position:r,id:o,edge:i}=e;return n?a().createElement("div",{key:o,className:"line-label",style:{left:r[0],top:r[1]}},a().createElement(s,{id:o,edge:i,label:n,onRendered:f,onUnmount:v})):a().createElement(d,{key:o,id:o,text:t,position:r,onRendered:f})})))}function d(e){var{id:t,text:n,position:i,onRendered:l}=e,c=(0,o.useCallback)((e=>{null==l||l(t,e)}),[t,l]);return a().createElement("div",{className:"line-label",ref:c,style:(0,r.Z)({left:i[0],top:i[1]},n.style)},n.content)}function s(e){var{id:t,edge:n,label:r,onRendered:c,onUnmount:d}=e,s=(0,o.useMemo)((()=>(0,l.checkIfByTransform)(r,{edge:n})?r.useBrick:null),[n,r]),u=(0,o.useMemo)((()=>({edge:n})),[n]);(0,o.useEffect)((()=>{s||setTimeout((()=>{null==c||c(t,null)}))}),[t,c,s]),(0,o.useEffect)((()=>()=>{null==d||d(t)}),[]);var f=(0,o.useCallback)((e=>{e&&setTimeout((()=>{null==c||c(t,e.parentElement)}))}),[t,c]),v=(0,o.useCallback)((()=>{setTimeout((()=>{null==c||c(t,null)}))}),[t,c]);return s?a().createElement(i.ReactUseBrick,{refCallback:f,ignoredCallback:v,useBrick:s,data:u}):null}},9575:(e,t,n)=>{n.d(t,{C:()=>a});var r=n(8657),o=n.n(r);function a(e){var{id:t,strokeColor:n}=e;return o().createElement("marker",{id:t,viewBox:"0 0 6 6",refX:3,refY:3,markerWidth:6,markerHeight:6,orient:"auto"},o().createElement("path",{d:"M 0.5 0.5 L 5.5 3 L 0.5 5.5 z",stroke:n,strokeWidth:1,fill:n}))}},2370:(e,t,n)=>{n.d(t,{n:()=>l});var r=n(8657),o=n.n(r),a=n(9494),i=n(9464);function l(e){var{nodes:t,nodeBricks:n,onRendered:a}=e,[i,l]=(0,r.useState)(!1),[d,s]=(0,r.useState)([]),u=(0,r.useMemo)((()=>new Map),[]),f=(0,r.useCallback)(((e,t)=>{t&&u.set(e,t),s((t=>t.includes(e)?t:t.concat(e)))}),[u]),v=(0,r.useCallback)((e=>{s((t=>{var n=t.indexOf(e);return-1===n?t:t.slice(0,n).concat(t.slice(n+1))})),u.delete(e)}),[u]);return(0,r.useEffect)((()=>{l(!(null!=t&&t.some((e=>!d.includes(e.id)))))}),[t,d]),(0,r.useEffect)((()=>{null==a||a(i?u:null)}),[u,i]),o().createElement(o().Fragment,null,null==t?void 0:t.map((e=>o().createElement("div",{key:e.id,className:"node"},o().createElement(c,{nodeBricks:n,node:e,onRendered:f,onUnmount:v})))))}function c(e){var{node:t,nodeBricks:n,onRendered:l,onUnmount:c}=e,d=(0,r.useMemo)((()=>{var e;return null===(e=function(e,t){return null==t?void 0:t.find((t=>t.nodeType?[].concat(t.nodeType).includes(e.type):(0,i.checkIfByTransform)(t,{node:e})))}(t,n))||void 0===e?void 0:e.useBrick}),[t,n]),s=(0,r.useMemo)((()=>({node:t})),[t]);(0,r.useEffect)((()=>{d||setTimeout((()=>{null==l||l(t.id,null)}))}),[t.id,l,d]),(0,r.useEffect)((()=>()=>{null==c||c(t.id)}),[]);var u=(0,r.useCallback)((e=>{e&&setTimeout((()=>{null==l||l(t.id,e)}))}),[t.id,l]),f=(0,r.useCallback)((()=>{setTimeout((()=>{null==l||l(t.id,null)}))}),[t.id,l]);return d?o().createElement(a.ReactUseBrick,{refCallback:u,ignoredCallback:f,useBrick:d,data:s}):null}},5318:(e,t,n)=>{n.d(t,{IC:()=>r,_w:()=>o,no:()=>a,wl:()=>i});var r="var(--palette-gray-5)",o=1,a="curveBasis",i=20},6365:(e,t,n)=>{function r(e,t){var[n,r]=t,o=1/0,a=1/0,i=-1/0,l=-1/0;for(var c of e){var d=c.width/2,s=c.height/2,u=c.x-d,f=c.x+d,v=c.y-s,h=c.y+s;u<o&&(o=u),f>i&&(i=f),v<a&&(a=v),h>l&&(l=h)}return[(n-(i-o))/2-a,(r-(l-a))/2-o]}n.d(t,{i:()=>r})},1251:(e,t,n)=>{function r(e,t){return e.map((e=>{var{id:n}=e,r=null==t?void 0:t.get(n);if(r){var{offsetWidth:o,offsetHeight:a}=r;if(0!==o&&0!==a)return{x0:r.offsetLeft-o/2-3,y0:r.offsetTop-a/2-3,w:o+6,h:a+6,id:n}}})).filter(Boolean)}n.d(t,{i:()=>r})},5173:(e,t,n)=>{n.d(t,{T:()=>a});var r=n(908),o=n.n(r);function a(e,t,n,r){var a=new(o().graphlib.Graph);for(var i of(a.setGraph(r),a.setDefaultEdgeLabel((function(){return{}})),null!=t?t:[])){var l=null==e?void 0:e.node(i.id);a.setNode(i.id,(null==l?void 0:l.data)===i?l:{id:i.id,data:i})}for(var c of null!=n?n:[])a.setEdge(c.source,c.target,{data:c});return a}},7201:(e,t,n)=>{n.d(t,{E:()=>a});var r=n(908),o=n.n(r);function a(e){var{graph:t,nodesRefRepository:n,nodePadding:r}=e;if(!t||!n||0===t.nodeCount())return null;var a=function(e){if(Array.isArray(e)){var t=e[0],n=e.length>1?e[1]:t;return[t,n,e.length>2?e[2]:t,e.length>3?e[3]:n]}return new Array(4).fill(e)}(r);for(var i of t.nodes()){var l,c,d=t.node(i);if(d){var s=n.get(i);d.width=(null!==(l=null==s?void 0:s.offsetWidth)&&void 0!==l?l:10)+a[1]+a[3],d.height=(null!==(c=null==s?void 0:s.offsetHeight)&&void 0!==c?c:10)+a[0]+a[2]}else console.error("Diagram node not found: %s",i)}o().layout(t);var u=[];for(var f of t.nodes()){var v,h=t.node(f);if(h){u.push(h);var m=h.x-h.width/2+a[3],p=h.y-h.height/2+a[0],g=null===(v=n.get(f))||void 0===v?void 0:v.parentElement;g&&(g.style.left="".concat(m,"px"),g.style.top="".concat(p,"px"),g.style.visibility="visible")}}return{nodes:u,edges:t.edges().map((e=>t.edge(e)))}}},4126:(e,t,n)=>{function r(e,t,n){return 0===e.length&&0===t.length?e:t.map((e=>{var{line:{text:t,label:r,$id:o},edge:a}=e,i=n.get(o);if((t||r)&&i&&i.getAttribute("d")){var{x:l,y:c,width:d,height:s}=i.getBBox(),u=1e3,f=l-u,v=c-u,h=l+d+u,m=c+s+u,p=i.getPointAtLength(i.getTotalLength()/2);return{text:t,label:r,edge:a,position:[p.x,p.y],lineRect:{left:f,top:v,right:h,bottom:m},id:o}}})).filter(Boolean)}n.d(t,{K:()=>r})},5731:(e,t,n)=>{n.d(t,{b:()=>p});var r=n(3028),o=n(2159),a=n(1211),i=n(9464),l=n(5318),c=n(3698),d=n(1479),s=n(6481),u=n(9389),f=n(8282),v=n(5004);function h(e,t,n){if(!Array.isArray(e))return"";var r;switch(n){case"curveBasis":r=c.ZP;break;case"curveBumpX":r=d.sj;break;case"curveBumpY":r=d.BW;break;case"curveMonotoneX":r=s.Z;break;case"curveMonotoneY":r=s.s;break;case"curveNatural":r=u.Z;break;default:r=f.Z}var o=0,a=0;if(t){var{x:i,y:l}=e[e.length-2],{x:h,y:m}=e[e.length-1],p=t/Math.sqrt(Math.pow(h-i,2)+Math.pow(m-l,2));o=(i-h)*p,a=(l-m)*p}var g=e;return(0,v.Z)().x(((t,n)=>t.x-(n===e.length-1?o:0))).y(((t,n)=>t.y-(n===e.length-1?a:0))).curve(r)(g)}var m=["label"];function p(e,t){var n=[],c=[],d=function(e){var d,s=null!==(d=null==t?void 0:t.find((t=>{return n=e,!!(r=t)&&(r.edgeType?[].concat(r.edgeType).includes(n.type):(0,i.checkIfByTransform)(r,{edge:n}));var n,r})))&&void 0!==d?d:{},{label:f}=s,v=(0,o.Z)(s,m),p=i.__secret_internals.legacyDoTransform({edge:e},v);if(!1===(null==p?void 0:p.draw))return 1;var g,k=(0,r.Z)((0,r.Z)({strokeColor:l.IC,strokeWidth:l._w,curveType:l.no,interactStrokeWidth:l.wl},p),{},{label:f,$id:(0,a.uniqueId)("line-")});if(k.arrow){var b={strokeColor:k.strokeColor};-1===(g=(0,a.findIndex)(c,b))&&(g=c.push(b)-1)}var y=h(u,k.arrow?-5:0,k.curveType);n.push({line:k,d:y,markerIndex:g,edge:e})};for(var{data:s,points:u}of e)d(s);return{renderedLines:n,markers:c}}},4510:(e,t,n)=>{n.d(t,{k:()=>i});var r=n(3028),o=n(9464),a=n(5318);function i(e,t){var{nodes:n,nodesRefRepository:i,nodesConnect:l,setConnectLineState:c,setConnectLineTo:d,onSwitchActiveNode:s,onNodesConnect:u}=t;function f(e){if(i){var t,r=function(t){if(e(a))return{v:null==n?void 0:n.find((e=>e.id===t))}};for(var[o,a]of i)if(t=r(o))return t.v}}if(l){var v=f((t=>t.contains(e.target)));if(v){if(l.sourceType){if(![].concat(l.sourceType).includes(v.type))return}else if(!(0,o.checkIfByTransform)(l,{source:v}))return;c({from:[e.clientX,e.clientY],options:(0,r.Z)({strokeColor:a.IC,strokeWidth:a._w},o.__secret_internals.legacyDoTransform({source:v},l))}),d([e.clientX,e.clientY]),null==s||s(v.id);var h=e=>{d([e.clientX,e.clientY])},m=e=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",m),c(null);var t=e.composedPath(),n=f((e=>t.includes(e)));n&&v!==n&&(null==u||u({source:v,target:n}))};document.addEventListener("mousemove",h),document.addEventListener("mouseup",m)}}}},5702:(e,t,n)=>{n.d(t,{p:()=>o});var r=n(1211);function o(e,t){var{renderedNodes:n,renderedEdges:r,activeNodeId:o}=t,l=o?n.find((e=>e.id===o)):void 0;if(l){var c,d,s;switch(e.key||e.keyCode||e.which){case"ArrowLeft":case 37:d=a(n,l,-1),c="switch-active-node";break;case"ArrowUp":case 38:d=i(n,r,l,-1),c="switch-active-node";break;case"ArrowRight":case 39:d=a(n,l,1),c="switch-active-node";break;case"ArrowDown":case 40:d=i(n,r,l,1),c="switch-active-node";break;case"Backspace":case 8:case"Delete":case 46:c="delete-node",d=l}if(c)return e.preventDefault(),e.stopPropagation(),{action:c,node:null===(s=d)||void 0===s?void 0:s.data}}}function a(e,t,n){var o,a=e.filter((e=>e!==t&&(o=(e.x-t.x)*n)>0&&o>Math.abs(t.y-e.y)));return(0,r.minBy)(a,(e=>(t.y-e.y)**2+(t.x-e.x)**2))}function i(e,t,n,o){var a=1===o?"source":"target",i=1===o?"target":"source",l=t.filter((e=>{var{data:t}=e;return t[a]===n.id&&t[i]!==n.id})).map((t=>{var{data:n}=t;return e.find((e=>e.id===n[i]))})).filter((e=>e&&(e.y-n.y)*o>0));return(0,r.minBy)(l,(e=>(n.y-e.y)**2+(n.x-e.x)**2))}},6436:(e,t,n)=>{n.d(t,{Z:()=>l});var r=n(9601),o=n.n(r),a=n(2609),i=n.n(a)()(o());i.push([e.id,":host{display:block;width:100%;height:100%;overflow:hidden}:host([hidden]){display:none}*{box-sizing:border-box}.diagram{width:100%;height:100%;position:relative;opacity:0}.diagram:focus{outline:none}.ready{opacity:1}.dragger,\n.lines,\n.line-labels,\n.nodes{position:absolute;top:0;left:0}.node{position:absolute;visibility:hidden}.dragger{width:100%;height:100%;cursor:-webkit-grab;cursor:grab}.grabbing{cursor:-webkit-grabbing;cursor:grabbing}.line-label{position:absolute;transform:translate(-50%,-50%);white-space:pre-line;width:-webkit-max-content;width:-moz-max-content;width:max-content;text-align:center}.lines{pointer-events:none}.line.interactable{pointer-events:auto}.connect-line{position:fixed;top:0;left:0;right:0;bottom:0;pointer-events:none}.connect-line:not(.connecting){display:none}",""]);const l=i.toString()}}]);
2
- //# sourceMappingURL=6457.0e22ff80.js.map