@logicflow/core 2.2.0-alpha.7 → 2.2.1

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 (137) hide show
  1. package/package.json +6 -1
  2. package/.turbo/turbo-build$colon$dev.log +0 -10
  3. package/.turbo/turbo-build.log +0 -33
  4. package/CHANGELOG.md +0 -1901
  5. package/__tests__/algorithm/egde.test.ts +0 -131
  6. package/__tests__/algorithm/index.test.ts +0 -74
  7. package/__tests__/algorithm/outline.test.ts +0 -43
  8. package/__tests__/bugs/1545-spec.test.ts +0 -42
  9. package/__tests__/event/event.test.ts +0 -22
  10. package/__tests__/history/history.test.ts +0 -28
  11. package/__tests__/logicflow.test.ts +0 -575
  12. package/__tests__/model/graphmodel.test.ts +0 -87
  13. package/__tests__/util/compatible.test.ts +0 -48
  14. package/__tests__/util/edge.test.ts +0 -224
  15. package/__tests__/util/geometry.test.ts +0 -14
  16. package/__tests__/util/graph.test.ts +0 -16
  17. package/__tests__/util/matrix.test.ts +0 -41
  18. package/__tests__/util/node.test.ts +0 -68
  19. package/__tests__/util/sampling.test.ts +0 -12
  20. package/__tests__/util/vector.test.ts +0 -50
  21. package/__tests__/util/zIndex.test.ts +0 -10
  22. package/src/LogicFlow.tsx +0 -2017
  23. package/src/algorithm/edge.ts +0 -67
  24. package/src/algorithm/index.ts +0 -70
  25. package/src/algorithm/outline.ts +0 -77
  26. package/src/algorithm/rotate.ts +0 -55
  27. package/src/common/drag.ts +0 -219
  28. package/src/common/history.ts +0 -108
  29. package/src/common/index.ts +0 -6
  30. package/src/common/keyboard.ts +0 -108
  31. package/src/common/matrix.ts +0 -122
  32. package/src/common/vector.ts +0 -93
  33. package/src/constant/index.ts +0 -179
  34. package/src/constant/theme.ts +0 -708
  35. package/src/event/event.md +0 -66
  36. package/src/event/eventArgs.ts +0 -643
  37. package/src/event/eventEmitter.ts +0 -156
  38. package/src/history/index.ts +0 -119
  39. package/src/index.less +0 -1
  40. package/src/index.ts +0 -26
  41. package/src/keyboard/index.ts +0 -112
  42. package/src/keyboard/shortcut.ts +0 -200
  43. package/src/model/BaseModel.ts +0 -250
  44. package/src/model/EditConfigModel.ts +0 -334
  45. package/src/model/GraphModel.ts +0 -1824
  46. package/src/model/NestedTransformModel.ts +0 -121
  47. package/src/model/SnaplineModel.ts +0 -256
  48. package/src/model/TransformModel.ts +0 -258
  49. package/src/model/edge/BaseEdgeModel.ts +0 -785
  50. package/src/model/edge/BezierEdgeModel.ts +0 -197
  51. package/src/model/edge/LineEdgeModel.ts +0 -36
  52. package/src/model/edge/PolylineEdgeModel.ts +0 -817
  53. package/src/model/edge/index.ts +0 -4
  54. package/src/model/index.ts +0 -9
  55. package/src/model/node/BaseNodeModel.ts +0 -959
  56. package/src/model/node/CircleNodeModel.ts +0 -91
  57. package/src/model/node/DiamondNodeModel.ts +0 -132
  58. package/src/model/node/EllipseNodeModel.ts +0 -98
  59. package/src/model/node/HtmlNodeModel.ts +0 -64
  60. package/src/model/node/PolygonNodeModel.ts +0 -152
  61. package/src/model/node/RectNodeModel.ts +0 -69
  62. package/src/model/node/TextNodeModel.ts +0 -54
  63. package/src/model/node/index.ts +0 -8
  64. package/src/options.ts +0 -150
  65. package/src/style/index.less +0 -262
  66. package/src/style/raw.ts +0 -221
  67. package/src/tool/MultipleSelectTool.tsx +0 -140
  68. package/src/tool/TextEditTool.tsx +0 -193
  69. package/src/tool/index.ts +0 -101
  70. package/src/typings.d.ts +0 -5
  71. package/src/util/animation.ts +0 -29
  72. package/src/util/browser.ts +0 -4
  73. package/src/util/compatible.ts +0 -15
  74. package/src/util/drag.ts +0 -219
  75. package/src/util/edge.ts +0 -1094
  76. package/src/util/geometry.ts +0 -154
  77. package/src/util/graph.ts +0 -46
  78. package/src/util/index.ts +0 -17
  79. package/src/util/matrix.ts +0 -129
  80. package/src/util/mobx.ts +0 -23
  81. package/src/util/node.ts +0 -543
  82. package/src/util/raf.ts +0 -28
  83. package/src/util/resize.ts +0 -606
  84. package/src/util/sampling.ts +0 -85
  85. package/src/util/theme.ts +0 -84
  86. package/src/util/uuid.ts +0 -26
  87. package/src/util/vector.ts +0 -93
  88. package/src/util/zIndex.ts +0 -6
  89. package/src/view/Anchor.tsx +0 -462
  90. package/src/view/Control.tsx +0 -510
  91. package/src/view/Graph.tsx +0 -141
  92. package/src/view/Rotate.tsx +0 -113
  93. package/src/view/behavior/dnd.ts +0 -162
  94. package/src/view/behavior/index.ts +0 -2
  95. package/src/view/behavior/snapline.ts +0 -16
  96. package/src/view/edge/AdjustPoint.tsx +0 -425
  97. package/src/view/edge/Arrow.tsx +0 -54
  98. package/src/view/edge/BaseEdge.tsx +0 -660
  99. package/src/view/edge/BezierEdge.tsx +0 -101
  100. package/src/view/edge/LineEdge.tsx +0 -81
  101. package/src/view/edge/PolylineEdge.tsx +0 -311
  102. package/src/view/edge/index.ts +0 -6
  103. package/src/view/index.ts +0 -8
  104. package/src/view/node/BaseNode.tsx +0 -585
  105. package/src/view/node/CircleNode.tsx +0 -21
  106. package/src/view/node/DiamondNode.tsx +0 -24
  107. package/src/view/node/EllipseNode.tsx +0 -22
  108. package/src/view/node/HtmlNode.tsx +0 -112
  109. package/src/view/node/PolygonNode.tsx +0 -28
  110. package/src/view/node/RectNode.tsx +0 -30
  111. package/src/view/node/TextNode.tsx +0 -39
  112. package/src/view/node/index.ts +0 -8
  113. package/src/view/overlay/BackgroundOverlay.tsx +0 -34
  114. package/src/view/overlay/BezierAdjustOverlay.tsx +0 -150
  115. package/src/view/overlay/CanvasOverlay.tsx +0 -290
  116. package/src/view/overlay/Grid.tsx +0 -319
  117. package/src/view/overlay/ModificationOverlay.tsx +0 -31
  118. package/src/view/overlay/OutlineOverlay.tsx +0 -158
  119. package/src/view/overlay/SnaplineOverlay.tsx +0 -44
  120. package/src/view/overlay/ToolOverlay.tsx +0 -65
  121. package/src/view/overlay/getTransformHoc.tsx +0 -50
  122. package/src/view/overlay/gridConfig.ts +0 -103
  123. package/src/view/overlay/index.ts +0 -8
  124. package/src/view/shape/Circle.tsx +0 -41
  125. package/src/view/shape/Ellipse.tsx +0 -42
  126. package/src/view/shape/Line.tsx +0 -39
  127. package/src/view/shape/Path.tsx +0 -22
  128. package/src/view/shape/Polygon.tsx +0 -54
  129. package/src/view/shape/Polyline.tsx +0 -31
  130. package/src/view/shape/Rect.tsx +0 -44
  131. package/src/view/shape/Text.tsx +0 -168
  132. package/src/view/shape/index.ts +0 -8
  133. package/src/view/text/BaseText.tsx +0 -134
  134. package/src/view/text/LineText.tsx +0 -168
  135. package/src/view/text/index.ts +0 -2
  136. package/stats.html +0 -4842
  137. package/tsconfig.json +0 -18
@@ -1,113 +0,0 @@
1
- import { Component } from 'preact/compat'
2
- import { map, reduce } from 'lodash-es'
3
- import Circle from './shape/Circle'
4
- import LogicFlow from '../LogicFlow'
5
- import { EventType } from '../constant'
6
- import EventEmitter from '../event/eventEmitter'
7
- import { GraphModel, BaseNodeModel } from '../model'
8
- import { StepDrag, TranslateMatrix, Vector } from '../util'
9
-
10
- interface IRotateControlProps {
11
- graphModel: GraphModel
12
- nodeModel: BaseNodeModel
13
- eventCenter: EventEmitter
14
- style: LogicFlow.CommonTheme
15
- }
16
-
17
- class RotateControlPoint extends Component<IRotateControlProps> {
18
- readonly style = {}
19
- private defaultAngle!: number
20
- normal!: Vector
21
- stepperDrag: any
22
-
23
- constructor(props: IRotateControlProps) {
24
- super(props)
25
- this.style = props.style
26
- this.stepperDrag = new StepDrag({
27
- onDragging: this.onDragging,
28
- })
29
- }
30
-
31
- onDragging = ({ event }: any) => {
32
- const { graphModel, nodeModel, eventCenter } = this.props
33
- const { selectNodes } = graphModel
34
- const { x, y } = nodeModel
35
- const { clientX, clientY } = event
36
- const {
37
- canvasOverlayPosition: { x: cx, y: cy },
38
- } = graphModel.getPointByClient({
39
- x: clientX,
40
- y: clientY,
41
- })
42
- const v = new Vector(cx - x, cy - y)
43
- const angle = this.normal?.angle(v) - this.defaultAngle
44
- const matrix = new TranslateMatrix(-x, -y)
45
- .rotate(angle)
46
- .translate(x, y)
47
- .toString()
48
- nodeModel.transform = matrix
49
- nodeModel.rotate = angle
50
-
51
- let nodeIds = map(selectNodes, (node) => node.id)
52
- if (nodeIds.indexOf(nodeModel.id) === -1) {
53
- nodeIds = [nodeModel.id]
54
- }
55
- const nodeIdMap = reduce(
56
- nodeIds,
57
- (acc, nodeId) => {
58
- const node = graphModel.getNodeModelById(nodeId)
59
- acc[nodeId] = node?.getMoveDistance(0, 0, false)
60
- return acc
61
- },
62
- {},
63
- )
64
- nodeIds.forEach((nodeId) => {
65
- const edges = graphModel.getNodeEdges(nodeId)
66
- edges.forEach((edge) => {
67
- if (nodeIdMap[edge.sourceNodeId]) {
68
- const model = graphModel.getNodeModelById(edge.sourceNodeId)
69
- const anchor = model!.anchors.find(
70
- (item) => item.id === edge.sourceAnchorId,
71
- )!
72
- edge.updateStartPoint(anchor)
73
- }
74
- if (nodeIdMap[edge.targetNodeId]) {
75
- const model = graphModel.getNodeModelById(edge.targetNodeId)
76
- const anchor = model!.anchors.find(
77
- (item) => item.id === edge.targetAnchorId,
78
- )!
79
- edge.updateEndPoint(anchor)
80
- }
81
- })
82
- })
83
-
84
- eventCenter.emit(EventType.NODE_ROTATE, {
85
- e: event,
86
- model: nodeModel,
87
- data: nodeModel.getData(),
88
- })
89
- }
90
-
91
- render() {
92
- const { nodeModel } = this.props
93
- const { x, y, width, height } = nodeModel
94
- const cx = x + width / 2 + 20
95
- const cy = y - height / 2 - 20
96
- this.normal = new Vector(1, 0)
97
- this.defaultAngle = this.normal.angle(new Vector(cx - x, cy - y))
98
- nodeModel.defaultAngle = this.defaultAngle
99
- return (
100
- <g className="lf-rotate-control">
101
- <g
102
- onPointerDown={(ev) => {
103
- this.stepperDrag.handleMouseDown(ev)
104
- }}
105
- >
106
- <Circle {...this.style} cx={cx} cy={cy} />
107
- </g>
108
- </g>
109
- )
110
- }
111
- }
112
-
113
- export default RotateControlPoint
@@ -1,162 +0,0 @@
1
- import { get } from 'lodash-es'
2
- import LogicFlow from '../../LogicFlow'
3
- import { BaseNodeModel } from '../../model'
4
- import { snapToGrid } from '../../util'
5
- import { EventType } from '../../constant'
6
-
7
- import Position = LogicFlow.Position
8
- import OnDragNodeConfig = LogicFlow.OnDragNodeConfig
9
-
10
- export class Dnd {
11
- nodeConfig: OnDragNodeConfig | null = null
12
- lf: LogicFlow
13
- fakeNode: BaseNodeModel | null = null
14
- docPointerMove?: (e: PointerEvent) => void
15
- docPointerUp?: (e: PointerEvent) => void
16
-
17
- constructor(params: { lf: LogicFlow }) {
18
- const { lf } = params
19
- this.lf = lf
20
- }
21
-
22
- clientToLocalPoint({ x, y }: Position): Position {
23
- const gridSize = get(this.lf.options, ['grid', 'size'])
24
- // 处理 container 的 offset 等
25
- const position = this.lf.graphModel.getPointByClient({
26
- x,
27
- y,
28
- })
29
- // 处理缩放和偏移
30
- const { x: x1, y: y1 } = position.canvasOverlayPosition
31
- const {
32
- editConfigModel: { snapGrid },
33
- } = this.lf.graphModel
34
- // x, y 对齐到网格的 size
35
- return {
36
- x: snapToGrid(x1, gridSize, snapGrid),
37
- y: snapToGrid(y1, gridSize, snapGrid),
38
- }
39
- }
40
-
41
- isInsideCanvas(e: PointerEvent): boolean {
42
- const overlay = this.lf.graphModel.rootEl.querySelector(
43
- '[name="canvas-overlay"]',
44
- ) as HTMLElement | null
45
- const topEl = window.document.elementFromPoint(
46
- e.clientX,
47
- e.clientY,
48
- ) as HTMLElement | null
49
- return (
50
- topEl === overlay ||
51
- (topEl !== null && !!overlay && overlay.contains(topEl))
52
- )
53
- }
54
- startDrag(nodeConfig: OnDragNodeConfig) {
55
- const { editConfigModel } = this.lf.graphModel
56
- if (editConfigModel?.isSilentMode) return
57
- this.nodeConfig = nodeConfig
58
- // 指针移动:根据命中结果判断是否在画布覆盖层上,驱动假节点创建/移动或清理
59
- this.docPointerMove = (e: PointerEvent) => {
60
- if (!this.nodeConfig) return
61
- // 离开画布:清理吸附线与假节点
62
- if (!this.isInsideCanvas(e)) {
63
- this.onDragLeave()
64
- return
65
- }
66
- // 首次进入画布:创建假节点并初始化位置
67
- if (!this.fakeNode) {
68
- this.dragEnter(e)
69
- return
70
- }
71
- // 在画布内移动:更新假节点位置与吸附线
72
- this.onDragOver(e)
73
- }
74
- // 指针抬起:在画布内落点生成节点,否则清理假节点
75
- this.docPointerUp = (e: PointerEvent) => {
76
- if (!this.nodeConfig) return
77
- if (this.isInsideCanvas(e)) {
78
- this.onDrop(e)
79
- } else {
80
- this.onDragLeave()
81
- }
82
- // 阻止默认行为与冒泡,避免滚动/点击穿透
83
- e.preventDefault()
84
- e.stopPropagation()
85
- // 结束拖拽并移除监听
86
- this.stopDrag()
87
- }
88
- window.document.addEventListener('pointermove', this.docPointerMove)
89
- window.document.addEventListener('pointerup', this.docPointerUp)
90
- }
91
-
92
- stopDrag = () => {
93
- this.nodeConfig = null
94
- if (this.docPointerMove) {
95
- window.document.removeEventListener('pointermove', this.docPointerMove)
96
- }
97
- if (this.docPointerUp) {
98
- window.document.removeEventListener('pointerup', this.docPointerUp)
99
- }
100
- }
101
- dragEnter = (e: PointerEvent) => {
102
- if (!this.nodeConfig || this.fakeNode) return
103
- this.fakeNode = this.lf.createFakeNode({
104
- ...this.nodeConfig,
105
- ...this.clientToLocalPoint({
106
- x: e.clientX,
107
- y: e.clientY,
108
- }),
109
- })
110
- }
111
- onDragOver = (e: MouseEvent) => {
112
- this.lf.graphModel.eventCenter.emit(EventType.BLANK_CANVAS_MOUSEMOVE, {
113
- e,
114
- })
115
- e.preventDefault()
116
- if (this.fakeNode) {
117
- const { x, y } = this.clientToLocalPoint({
118
- x: e.clientX,
119
- y: e.clientY,
120
- })
121
- this.fakeNode.moveTo(x, y)
122
- const nodeData = this.fakeNode.getData()
123
- this.lf.setNodeSnapLine(nodeData)
124
- this.lf.graphModel.eventCenter.emit(EventType.NODE_DND_DRAG, {
125
- data: nodeData,
126
- e,
127
- })
128
- }
129
- return false
130
- }
131
- onDragLeave = () => {
132
- if (this.fakeNode) {
133
- this.lf.removeNodeSnapLine()
134
- this.lf.graphModel.removeFakeNode()
135
- this.fakeNode = null
136
- }
137
- }
138
- onDrop = (e: MouseEvent) => {
139
- if (!this.lf.graphModel || !e || !this.nodeConfig) {
140
- return
141
- }
142
- this.lf.addNode(
143
- {
144
- ...this.nodeConfig,
145
- ...this.clientToLocalPoint({
146
- x: e.clientX,
147
- y: e.clientY,
148
- }),
149
- },
150
- EventType.NODE_DND_ADD,
151
- e,
152
- )
153
- e.preventDefault()
154
- e.stopPropagation()
155
- this.nodeConfig = null
156
- this.lf.removeNodeSnapLine()
157
- this.lf.graphModel.removeFakeNode()
158
- this.fakeNode = null
159
- }
160
- }
161
-
162
- export default Dnd
@@ -1,2 +0,0 @@
1
- export * from './dnd'
2
- export * from './snapline'
@@ -1,16 +0,0 @@
1
- import EventEmitter from '../../event/eventEmitter'
2
- import SnaplineModel from '../../model/SnaplineModel'
3
-
4
- export function snapline(
5
- eventCenter: EventEmitter,
6
- snaplineModel: SnaplineModel,
7
- ): void {
8
- // 节点拖动时启动对齐线计算
9
- eventCenter.on('node:mousemove', ({ data }) => {
10
- snaplineModel.setNodeSnapLine(data)
11
- })
12
- // 节点拖动结束时,对齐线消失
13
- eventCenter.on('node:mouseup', () => {
14
- snaplineModel.clearSnapline()
15
- })
16
- }