@thienvu18/designable-core 2.0.1 → 2.0.2

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 (385) hide show
  1. package/esm/drivers/DragDropDriver.d.ts +12 -12
  2. package/esm/drivers/DragDropDriver.js +127 -105
  3. package/esm/drivers/KeyboardDriver.d.ts +5 -5
  4. package/esm/drivers/KeyboardDriver.js +41 -40
  5. package/esm/drivers/MouseClickDriver.d.ts +6 -6
  6. package/esm/drivers/MouseClickDriver.js +55 -47
  7. package/esm/drivers/MouseMoveDriver.d.ts +6 -6
  8. package/esm/drivers/MouseMoveDriver.js +30 -28
  9. package/esm/drivers/ViewportResizeDriver.d.ts +9 -9
  10. package/esm/drivers/ViewportResizeDriver.js +56 -59
  11. package/esm/drivers/ViewportScrollDriver.d.ts +6 -6
  12. package/esm/drivers/ViewportScrollDriver.js +29 -27
  13. package/esm/drivers/index.d.ts +6 -6
  14. package/esm/drivers/index.js +6 -6
  15. package/esm/effects/index.d.ts +11 -11
  16. package/esm/effects/index.js +11 -11
  17. package/esm/effects/useAutoScrollEffect.d.ts +2 -2
  18. package/esm/effects/useAutoScrollEffect.js +70 -59
  19. package/esm/effects/useContentEditableEffect.d.ts +2 -2
  20. package/esm/effects/useContentEditableEffect.js +174 -150
  21. package/esm/effects/useCursorEffect.d.ts +2 -2
  22. package/esm/effects/useCursorEffect.js +58 -54
  23. package/esm/effects/useDragDropEffect.d.ts +2 -2
  24. package/esm/effects/useDragDropEffect.js +170 -145
  25. package/esm/effects/useFreeSelectionEffect.d.ts +2 -2
  26. package/esm/effects/useFreeSelectionEffect.js +58 -36
  27. package/esm/effects/useKeyboardEffect.d.ts +2 -2
  28. package/esm/effects/useKeyboardEffect.js +16 -16
  29. package/esm/effects/useResizeEffect.d.ts +2 -2
  30. package/esm/effects/useResizeEffect.js +84 -73
  31. package/esm/effects/useSelectionEffect.d.ts +2 -2
  32. package/esm/effects/useSelectionEffect.js +62 -65
  33. package/esm/effects/useTranslateEffect.d.ts +2 -2
  34. package/esm/effects/useTranslateEffect.js +55 -52
  35. package/esm/effects/useViewportEffect.d.ts +2 -2
  36. package/esm/effects/useViewportEffect.js +26 -28
  37. package/esm/effects/useWorkspaceEffect.d.ts +2 -2
  38. package/esm/effects/useWorkspaceEffect.js +30 -27
  39. package/esm/events/cursor/AbstractCursorEvent.d.ts +15 -15
  40. package/esm/events/cursor/AbstractCursorEvent.js +35 -33
  41. package/esm/events/cursor/DragMoveEvent.d.ts +7 -4
  42. package/esm/events/cursor/DragMoveEvent.js +5 -5
  43. package/esm/events/cursor/DragStartEvent.d.ts +7 -4
  44. package/esm/events/cursor/DragStartEvent.js +5 -5
  45. package/esm/events/cursor/DragStopEvent.d.ts +7 -4
  46. package/esm/events/cursor/DragStopEvent.js +5 -5
  47. package/esm/events/cursor/MouseClickEvent.d.ts +12 -6
  48. package/esm/events/cursor/MouseClickEvent.js +9 -9
  49. package/esm/events/cursor/MouseMoveEvent.d.ts +7 -4
  50. package/esm/events/cursor/MouseMoveEvent.js +5 -5
  51. package/esm/events/cursor/index.d.ts +5 -5
  52. package/esm/events/cursor/index.js +5 -5
  53. package/esm/events/history/AbstractHistoryEvent.d.ts +4 -4
  54. package/esm/events/history/AbstractHistoryEvent.js +3 -3
  55. package/esm/events/history/HistoryGotoEvent.d.ts +7 -4
  56. package/esm/events/history/HistoryGotoEvent.js +5 -5
  57. package/esm/events/history/HistoryPushEvent.d.ts +7 -4
  58. package/esm/events/history/HistoryPushEvent.js +5 -5
  59. package/esm/events/history/HistoryRedoEvent.d.ts +7 -4
  60. package/esm/events/history/HistoryRedoEvent.js +5 -5
  61. package/esm/events/history/HistoryUndoEvent.d.ts +7 -4
  62. package/esm/events/history/HistoryUndoEvent.js +5 -5
  63. package/esm/events/history/index.d.ts +4 -4
  64. package/esm/events/history/index.js +4 -4
  65. package/esm/events/index.d.ts +6 -6
  66. package/esm/events/index.js +6 -6
  67. package/esm/events/keyboard/AbstractKeyboardEvent.d.ts +13 -13
  68. package/esm/events/keyboard/AbstractKeyboardEvent.js +34 -36
  69. package/esm/events/keyboard/KeyDownEvent.d.ts +7 -4
  70. package/esm/events/keyboard/KeyDownEvent.js +5 -5
  71. package/esm/events/keyboard/KeyUpEvent.d.ts +7 -4
  72. package/esm/events/keyboard/KeyUpEvent.js +5 -5
  73. package/esm/events/keyboard/index.d.ts +2 -2
  74. package/esm/events/keyboard/index.js +2 -2
  75. package/esm/events/mutation/AbstractMutationNodeEvent.d.ts +9 -9
  76. package/esm/events/mutation/AbstractMutationNodeEvent.js +3 -3
  77. package/esm/events/mutation/AppendNodeEvent.d.ts +7 -4
  78. package/esm/events/mutation/AppendNodeEvent.js +5 -5
  79. package/esm/events/mutation/CloneNodeEvent.d.ts +7 -4
  80. package/esm/events/mutation/CloneNodeEvent.js +5 -5
  81. package/esm/events/mutation/DragNodeEvent.d.ts +7 -4
  82. package/esm/events/mutation/DragNodeEvent.js +5 -5
  83. package/esm/events/mutation/DropNodeEvent.d.ts +7 -4
  84. package/esm/events/mutation/DropNodeEvent.js +5 -5
  85. package/esm/events/mutation/FromNodeEvent.d.ts +9 -9
  86. package/esm/events/mutation/FromNodeEvent.js +4 -4
  87. package/esm/events/mutation/HoverNodeEvent.d.ts +7 -4
  88. package/esm/events/mutation/HoverNodeEvent.js +5 -5
  89. package/esm/events/mutation/InsertAfterEvent.d.ts +7 -4
  90. package/esm/events/mutation/InsertAfterEvent.js +5 -5
  91. package/esm/events/mutation/InsertBeforeEvent.d.ts +7 -4
  92. package/esm/events/mutation/InsertBeforeEvent.js +5 -5
  93. package/esm/events/mutation/InsertChildrenEvent.d.ts +7 -4
  94. package/esm/events/mutation/InsertChildrenEvent.js +5 -5
  95. package/esm/events/mutation/PrependNodeEvent.d.ts +7 -4
  96. package/esm/events/mutation/PrependNodeEvent.js +5 -5
  97. package/esm/events/mutation/RemoveNodeEvent.d.ts +7 -4
  98. package/esm/events/mutation/RemoveNodeEvent.js +5 -5
  99. package/esm/events/mutation/SelectNodeEvent.d.ts +7 -4
  100. package/esm/events/mutation/SelectNodeEvent.js +5 -5
  101. package/esm/events/mutation/UnSelectNodeEvent.d.ts +7 -4
  102. package/esm/events/mutation/UnSelectNodeEvent.js +5 -5
  103. package/esm/events/mutation/UpdateChildrenEvent.d.ts +7 -4
  104. package/esm/events/mutation/UpdateChildrenEvent.js +5 -5
  105. package/esm/events/mutation/UpdateNodePropsEvent.d.ts +7 -4
  106. package/esm/events/mutation/UpdateNodePropsEvent.js +5 -5
  107. package/esm/events/mutation/UserSelectNodeEvent.d.ts +7 -4
  108. package/esm/events/mutation/UserSelectNodeEvent.js +5 -5
  109. package/esm/events/mutation/WrapNodeEvent.d.ts +7 -4
  110. package/esm/events/mutation/WrapNodeEvent.js +5 -5
  111. package/esm/events/mutation/index.d.ts +16 -16
  112. package/esm/events/mutation/index.js +16 -16
  113. package/esm/events/viewport/AbstractViewportEvent.d.ts +12 -12
  114. package/esm/events/viewport/AbstractViewportEvent.js +12 -12
  115. package/esm/events/viewport/ViewportResizeEvent.d.ts +7 -4
  116. package/esm/events/viewport/ViewportResizeEvent.js +5 -5
  117. package/esm/events/viewport/ViewportScrollEvent.d.ts +7 -4
  118. package/esm/events/viewport/ViewportScrollEvent.js +5 -5
  119. package/esm/events/viewport/index.d.ts +2 -2
  120. package/esm/events/viewport/index.js +2 -2
  121. package/esm/events/workbench/AbstractWorkspaceEvent.d.ts +5 -5
  122. package/esm/events/workbench/AbstractWorkspaceEvent.js +3 -3
  123. package/esm/events/workbench/AddWorkspaceEvent.d.ts +7 -4
  124. package/esm/events/workbench/AddWorkspaceEvent.js +5 -5
  125. package/esm/events/workbench/RemoveWorkspaceEvent.d.ts +7 -4
  126. package/esm/events/workbench/RemoveWorkspaceEvent.js +5 -5
  127. package/esm/events/workbench/SwitchWorkspaceEvent.d.ts +7 -4
  128. package/esm/events/workbench/SwitchWorkspaceEvent.js +5 -5
  129. package/esm/events/workbench/index.d.ts +3 -3
  130. package/esm/events/workbench/index.js +3 -3
  131. package/esm/exports.d.ts +5 -5
  132. package/esm/exports.js +5 -5
  133. package/esm/externals.d.ts +25 -12
  134. package/esm/externals.js +57 -50
  135. package/esm/index.d.ts +1 -1
  136. package/esm/index.js +11 -12
  137. package/esm/internals.d.ts +3 -3
  138. package/esm/internals.js +34 -30
  139. package/esm/models/Cursor.d.ts +48 -48
  140. package/esm/models/Cursor.js +129 -125
  141. package/esm/models/Engine.d.ts +24 -24
  142. package/esm/models/Engine.js +73 -73
  143. package/esm/models/History.d.ts +26 -26
  144. package/esm/models/History.js +86 -87
  145. package/esm/models/Hover.d.ts +10 -10
  146. package/esm/models/Hover.js +33 -32
  147. package/esm/models/Keyboard.d.ts +25 -25
  148. package/esm/models/Keyboard.js +95 -94
  149. package/esm/models/MoveHelper.d.ts +57 -54
  150. package/esm/models/MoveHelper.js +304 -290
  151. package/esm/models/Operation.d.ts +25 -25
  152. package/esm/models/Operation.js +59 -60
  153. package/esm/models/Screen.d.ts +25 -25
  154. package/esm/models/Screen.js +67 -67
  155. package/esm/models/Selection.d.ts +25 -25
  156. package/esm/models/Selection.js +143 -149
  157. package/esm/models/Shortcut.d.ts +16 -16
  158. package/esm/models/Shortcut.js +56 -57
  159. package/esm/models/SnapLine.d.ts +24 -24
  160. package/esm/models/SnapLine.js +96 -105
  161. package/esm/models/SpaceBlock.d.ts +41 -36
  162. package/esm/models/SpaceBlock.js +154 -115
  163. package/esm/models/TransformHelper.d.ts +88 -74
  164. package/esm/models/TransformHelper.js +546 -450
  165. package/esm/models/TreeNode.d.ts +117 -109
  166. package/esm/models/TreeNode.js +743 -732
  167. package/esm/models/Viewport.d.ts +83 -81
  168. package/esm/models/Viewport.js +406 -384
  169. package/esm/models/Workbench.d.ts +21 -21
  170. package/esm/models/Workbench.js +90 -88
  171. package/esm/models/Workspace.d.ts +33 -33
  172. package/esm/models/Workspace.js +87 -83
  173. package/esm/models/index.d.ts +13 -13
  174. package/esm/models/index.js +13 -13
  175. package/esm/presets.d.ts +20 -4
  176. package/esm/presets.js +67 -35
  177. package/esm/registry.d.ts +21 -15
  178. package/esm/registry.js +106 -108
  179. package/esm/shortcuts/CursorSwitch.d.ts +2 -2
  180. package/esm/shortcuts/CursorSwitch.js +9 -9
  181. package/esm/shortcuts/MultiSelection.d.ts +5 -5
  182. package/esm/shortcuts/MultiSelection.js +23 -23
  183. package/esm/shortcuts/NodeMutation.d.ts +4 -4
  184. package/esm/shortcuts/NodeMutation.js +33 -33
  185. package/esm/shortcuts/QuickSelection.d.ts +3 -3
  186. package/esm/shortcuts/QuickSelection.js +71 -78
  187. package/esm/shortcuts/UndoRedo.d.ts +3 -3
  188. package/esm/shortcuts/UndoRedo.js +25 -25
  189. package/esm/shortcuts/index.d.ts +5 -5
  190. package/esm/shortcuts/index.js +5 -5
  191. package/esm/types.d.ts +138 -105
  192. package/esm/types.js +1 -1
  193. package/lib/drivers/DragDropDriver.d.ts +12 -12
  194. package/lib/drivers/DragDropDriver.js +131 -109
  195. package/lib/drivers/KeyboardDriver.d.ts +5 -5
  196. package/lib/drivers/KeyboardDriver.js +45 -44
  197. package/lib/drivers/MouseClickDriver.d.ts +6 -6
  198. package/lib/drivers/MouseClickDriver.js +59 -51
  199. package/lib/drivers/MouseMoveDriver.d.ts +6 -6
  200. package/lib/drivers/MouseMoveDriver.js +34 -32
  201. package/lib/drivers/ViewportResizeDriver.d.ts +9 -9
  202. package/lib/drivers/ViewportResizeDriver.js +69 -63
  203. package/lib/drivers/ViewportScrollDriver.d.ts +6 -6
  204. package/lib/drivers/ViewportScrollDriver.js +34 -31
  205. package/lib/drivers/index.d.ts +6 -6
  206. package/lib/drivers/index.js +38 -22
  207. package/lib/effects/index.d.ts +11 -11
  208. package/lib/effects/index.js +43 -27
  209. package/lib/effects/useAutoScrollEffect.d.ts +2 -2
  210. package/lib/effects/useAutoScrollEffect.js +81 -63
  211. package/lib/effects/useContentEditableEffect.d.ts +2 -2
  212. package/lib/effects/useContentEditableEffect.js +178 -154
  213. package/lib/effects/useCursorEffect.d.ts +2 -2
  214. package/lib/effects/useCursorEffect.js +57 -58
  215. package/lib/effects/useDragDropEffect.d.ts +2 -2
  216. package/lib/effects/useDragDropEffect.js +175 -149
  217. package/lib/effects/useFreeSelectionEffect.d.ts +2 -2
  218. package/lib/effects/useFreeSelectionEffect.js +60 -40
  219. package/lib/effects/useKeyboardEffect.d.ts +2 -2
  220. package/lib/effects/useKeyboardEffect.js +20 -20
  221. package/lib/effects/useResizeEffect.d.ts +2 -2
  222. package/lib/effects/useResizeEffect.js +88 -77
  223. package/lib/effects/useSelectionEffect.d.ts +2 -2
  224. package/lib/effects/useSelectionEffect.js +69 -69
  225. package/lib/effects/useTranslateEffect.d.ts +2 -2
  226. package/lib/effects/useTranslateEffect.js +59 -56
  227. package/lib/effects/useViewportEffect.d.ts +2 -2
  228. package/lib/effects/useViewportEffect.js +30 -32
  229. package/lib/effects/useWorkspaceEffect.d.ts +2 -2
  230. package/lib/effects/useWorkspaceEffect.js +34 -31
  231. package/lib/events/cursor/AbstractCursorEvent.d.ts +15 -15
  232. package/lib/events/cursor/AbstractCursorEvent.js +42 -37
  233. package/lib/events/cursor/DragMoveEvent.d.ts +7 -4
  234. package/lib/events/cursor/DragMoveEvent.js +9 -9
  235. package/lib/events/cursor/DragStartEvent.d.ts +7 -4
  236. package/lib/events/cursor/DragStartEvent.js +9 -9
  237. package/lib/events/cursor/DragStopEvent.d.ts +7 -4
  238. package/lib/events/cursor/DragStopEvent.js +9 -9
  239. package/lib/events/cursor/MouseClickEvent.d.ts +12 -6
  240. package/lib/events/cursor/MouseClickEvent.js +14 -14
  241. package/lib/events/cursor/MouseMoveEvent.d.ts +7 -4
  242. package/lib/events/cursor/MouseMoveEvent.js +9 -9
  243. package/lib/events/cursor/index.d.ts +5 -5
  244. package/lib/events/cursor/index.js +37 -21
  245. package/lib/events/history/AbstractHistoryEvent.d.ts +4 -4
  246. package/lib/events/history/AbstractHistoryEvent.js +7 -7
  247. package/lib/events/history/HistoryGotoEvent.d.ts +7 -4
  248. package/lib/events/history/HistoryGotoEvent.js +9 -9
  249. package/lib/events/history/HistoryPushEvent.d.ts +7 -4
  250. package/lib/events/history/HistoryPushEvent.js +9 -9
  251. package/lib/events/history/HistoryRedoEvent.d.ts +7 -4
  252. package/lib/events/history/HistoryRedoEvent.js +9 -9
  253. package/lib/events/history/HistoryUndoEvent.d.ts +7 -4
  254. package/lib/events/history/HistoryUndoEvent.js +9 -9
  255. package/lib/events/history/index.d.ts +4 -4
  256. package/lib/events/history/index.js +36 -20
  257. package/lib/events/index.d.ts +6 -6
  258. package/lib/events/index.js +38 -22
  259. package/lib/events/keyboard/AbstractKeyboardEvent.d.ts +13 -13
  260. package/lib/events/keyboard/AbstractKeyboardEvent.js +38 -40
  261. package/lib/events/keyboard/KeyDownEvent.d.ts +7 -4
  262. package/lib/events/keyboard/KeyDownEvent.js +9 -9
  263. package/lib/events/keyboard/KeyUpEvent.d.ts +7 -4
  264. package/lib/events/keyboard/KeyUpEvent.js +9 -9
  265. package/lib/events/keyboard/index.d.ts +2 -2
  266. package/lib/events/keyboard/index.js +34 -18
  267. package/lib/events/mutation/AbstractMutationNodeEvent.d.ts +9 -9
  268. package/lib/events/mutation/AbstractMutationNodeEvent.js +7 -7
  269. package/lib/events/mutation/AppendNodeEvent.d.ts +7 -4
  270. package/lib/events/mutation/AppendNodeEvent.js +9 -9
  271. package/lib/events/mutation/CloneNodeEvent.d.ts +7 -4
  272. package/lib/events/mutation/CloneNodeEvent.js +9 -9
  273. package/lib/events/mutation/DragNodeEvent.d.ts +7 -4
  274. package/lib/events/mutation/DragNodeEvent.js +9 -9
  275. package/lib/events/mutation/DropNodeEvent.d.ts +7 -4
  276. package/lib/events/mutation/DropNodeEvent.js +9 -9
  277. package/lib/events/mutation/FromNodeEvent.d.ts +9 -9
  278. package/lib/events/mutation/FromNodeEvent.js +8 -8
  279. package/lib/events/mutation/HoverNodeEvent.d.ts +7 -4
  280. package/lib/events/mutation/HoverNodeEvent.js +9 -9
  281. package/lib/events/mutation/InsertAfterEvent.d.ts +7 -4
  282. package/lib/events/mutation/InsertAfterEvent.js +9 -9
  283. package/lib/events/mutation/InsertBeforeEvent.d.ts +7 -4
  284. package/lib/events/mutation/InsertBeforeEvent.js +9 -9
  285. package/lib/events/mutation/InsertChildrenEvent.d.ts +7 -4
  286. package/lib/events/mutation/InsertChildrenEvent.js +9 -9
  287. package/lib/events/mutation/PrependNodeEvent.d.ts +7 -4
  288. package/lib/events/mutation/PrependNodeEvent.js +9 -9
  289. package/lib/events/mutation/RemoveNodeEvent.d.ts +7 -4
  290. package/lib/events/mutation/RemoveNodeEvent.js +9 -9
  291. package/lib/events/mutation/SelectNodeEvent.d.ts +7 -4
  292. package/lib/events/mutation/SelectNodeEvent.js +9 -9
  293. package/lib/events/mutation/UnSelectNodeEvent.d.ts +7 -4
  294. package/lib/events/mutation/UnSelectNodeEvent.js +9 -9
  295. package/lib/events/mutation/UpdateChildrenEvent.d.ts +7 -4
  296. package/lib/events/mutation/UpdateChildrenEvent.js +9 -9
  297. package/lib/events/mutation/UpdateNodePropsEvent.d.ts +7 -4
  298. package/lib/events/mutation/UpdateNodePropsEvent.js +9 -9
  299. package/lib/events/mutation/UserSelectNodeEvent.d.ts +7 -4
  300. package/lib/events/mutation/UserSelectNodeEvent.js +9 -9
  301. package/lib/events/mutation/WrapNodeEvent.d.ts +7 -4
  302. package/lib/events/mutation/WrapNodeEvent.js +9 -9
  303. package/lib/events/mutation/index.d.ts +16 -16
  304. package/lib/events/mutation/index.js +48 -32
  305. package/lib/events/viewport/AbstractViewportEvent.d.ts +12 -12
  306. package/lib/events/viewport/AbstractViewportEvent.js +16 -16
  307. package/lib/events/viewport/ViewportResizeEvent.d.ts +7 -4
  308. package/lib/events/viewport/ViewportResizeEvent.js +9 -9
  309. package/lib/events/viewport/ViewportScrollEvent.d.ts +7 -4
  310. package/lib/events/viewport/ViewportScrollEvent.js +9 -9
  311. package/lib/events/viewport/index.d.ts +2 -2
  312. package/lib/events/viewport/index.js +34 -18
  313. package/lib/events/workbench/AbstractWorkspaceEvent.d.ts +5 -5
  314. package/lib/events/workbench/AbstractWorkspaceEvent.js +7 -7
  315. package/lib/events/workbench/AddWorkspaceEvent.d.ts +7 -4
  316. package/lib/events/workbench/AddWorkspaceEvent.js +9 -9
  317. package/lib/events/workbench/RemoveWorkspaceEvent.d.ts +7 -4
  318. package/lib/events/workbench/RemoveWorkspaceEvent.js +9 -9
  319. package/lib/events/workbench/SwitchWorkspaceEvent.d.ts +7 -4
  320. package/lib/events/workbench/SwitchWorkspaceEvent.js +9 -9
  321. package/lib/events/workbench/index.d.ts +3 -3
  322. package/lib/events/workbench/index.js +35 -19
  323. package/lib/exports.d.ts +5 -5
  324. package/lib/exports.js +37 -21
  325. package/lib/externals.d.ts +25 -12
  326. package/lib/externals.js +81 -63
  327. package/lib/index.d.ts +1 -1
  328. package/lib/index.js +65 -40
  329. package/lib/internals.d.ts +3 -3
  330. package/lib/internals.js +43 -36
  331. package/lib/models/Cursor.d.ts +48 -48
  332. package/lib/models/Cursor.js +140 -129
  333. package/lib/models/Engine.d.ts +24 -24
  334. package/lib/models/Engine.js +77 -77
  335. package/lib/models/History.d.ts +26 -26
  336. package/lib/models/History.js +90 -91
  337. package/lib/models/Hover.d.ts +10 -10
  338. package/lib/models/Hover.js +37 -36
  339. package/lib/models/Keyboard.d.ts +25 -25
  340. package/lib/models/Keyboard.js +103 -98
  341. package/lib/models/MoveHelper.d.ts +57 -54
  342. package/lib/models/MoveHelper.js +316 -294
  343. package/lib/models/Operation.d.ts +25 -25
  344. package/lib/models/Operation.js +63 -64
  345. package/lib/models/Screen.d.ts +25 -25
  346. package/lib/models/Screen.js +71 -71
  347. package/lib/models/Selection.d.ts +25 -25
  348. package/lib/models/Selection.js +151 -153
  349. package/lib/models/Shortcut.d.ts +16 -16
  350. package/lib/models/Shortcut.js +65 -61
  351. package/lib/models/SnapLine.d.ts +24 -24
  352. package/lib/models/SnapLine.js +99 -109
  353. package/lib/models/SpaceBlock.d.ts +41 -36
  354. package/lib/models/SpaceBlock.js +156 -119
  355. package/lib/models/TransformHelper.d.ts +88 -74
  356. package/lib/models/TransformHelper.js +561 -454
  357. package/lib/models/TreeNode.d.ts +117 -109
  358. package/lib/models/TreeNode.js +739 -736
  359. package/lib/models/Viewport.d.ts +83 -81
  360. package/lib/models/Viewport.js +411 -388
  361. package/lib/models/Workbench.d.ts +21 -21
  362. package/lib/models/Workbench.js +92 -92
  363. package/lib/models/Workspace.d.ts +33 -33
  364. package/lib/models/Workspace.js +86 -87
  365. package/lib/models/index.d.ts +13 -13
  366. package/lib/models/index.js +45 -29
  367. package/lib/presets.d.ts +20 -4
  368. package/lib/presets.js +41 -38
  369. package/lib/registry.d.ts +21 -15
  370. package/lib/registry.js +112 -111
  371. package/lib/shortcuts/CursorSwitch.d.ts +2 -2
  372. package/lib/shortcuts/CursorSwitch.js +12 -12
  373. package/lib/shortcuts/MultiSelection.d.ts +5 -5
  374. package/lib/shortcuts/MultiSelection.js +30 -26
  375. package/lib/shortcuts/NodeMutation.d.ts +4 -4
  376. package/lib/shortcuts/NodeMutation.js +36 -36
  377. package/lib/shortcuts/QuickSelection.d.ts +3 -3
  378. package/lib/shortcuts/QuickSelection.js +74 -81
  379. package/lib/shortcuts/UndoRedo.d.ts +3 -3
  380. package/lib/shortcuts/UndoRedo.js +28 -28
  381. package/lib/shortcuts/index.d.ts +5 -5
  382. package/lib/shortcuts/index.js +37 -21
  383. package/lib/types.d.ts +138 -105
  384. package/lib/types.js +2 -2
  385. package/package.json +2 -2
@@ -1,455 +1,551 @@
1
- import { Point, calcEdgeLinesOfRect, calcBoundingRect, calcSpaceBlockOfRect, calcElementTranslate, calcDistanceOfSnapLineToEdges, Rect, isEqualRect, isLineSegment, calcClosestEdges, calcCombineSnapLineSegment, } from '@thienvu18/designable-shared';
2
- import { observable, define, action } from '@formily/reactive';
3
- import { SpaceBlock } from './SpaceBlock';
4
- import { TreeNode } from './TreeNode';
5
- import { SnapLine } from './SnapLine';
6
- import { CursorDragType } from './Cursor';
1
+ import { action, define, observable } from '@formily/reactive'
2
+ import {
3
+ Point,
4
+ Rect,
5
+ calcBoundingRect,
6
+ calcClosestEdges,
7
+ calcCombineSnapLineSegment,
8
+ calcDistanceOfSnapLineToEdges,
9
+ calcEdgeLinesOfRect,
10
+ calcElementTranslate,
11
+ calcSpaceBlockOfRect,
12
+ isEqualRect,
13
+ isLineSegment,
14
+ } from '@thienvu18/designable-shared'
15
+ import { CursorDragType } from './Cursor'
16
+ import { SnapLine } from './SnapLine'
17
+ import { SpaceBlock } from './SpaceBlock'
18
+ import { TreeNode } from './TreeNode'
7
19
  export class TransformHelper {
8
- constructor(props) {
9
- this.dragNodes = [];
10
- this.rulerSnapLines = [];
11
- this.aroundSnapLines = [];
12
- this.aroundSpaceBlocks = null;
13
- this.viewportRectsStore = {};
14
- this.dragStartTranslateStore = {};
15
- this.dragStartSizeStore = {};
16
- this.dragStartNodesRect = null;
17
- this.snapping = false;
18
- this.dragging = false;
19
- this.snapped = false;
20
- this.operation = props.operation;
21
- this.makeObservable();
22
- }
23
- get tree() {
24
- return this.operation.tree;
25
- }
26
- get cursor() {
27
- return this.operation.engine.cursor;
28
- }
29
- get viewport() {
30
- return this.operation.workspace.viewport;
31
- }
32
- get deltaX() {
33
- return this.cursor.dragStartToCurrentDelta.clientX;
34
- }
35
- get deltaY() {
36
- return this.cursor.dragStartToCurrentDelta.clientY;
37
- }
38
- get cursorPosition() {
39
- const position = this.cursor.position;
40
- return this.operation.workspace.viewport.getOffsetPoint(new Point(position.clientX, position.clientY));
41
- }
42
- get cursorDragNodesRect() {
43
- if (this.type === 'translate') {
44
- return new Rect(this.cursorPosition.x - this.dragStartCursorOffset.x, this.cursorPosition.y - this.dragStartCursorOffset.y, this.dragNodesRect.width, this.dragNodesRect.height);
20
+ constructor(props) {
21
+ this.dragNodes = []
22
+ this.rulerSnapLines = []
23
+ this.aroundSnapLines = []
24
+ this.aroundSpaceBlocks = null
25
+ this.viewportRectsStore = {}
26
+ this.dragStartTranslateStore = {}
27
+ this.dragStartSizeStore = {}
28
+ this.dragStartNodesRect = null
29
+ this.snapping = false
30
+ this.dragging = false
31
+ this.snapped = false
32
+ this.operation = props.operation
33
+ this.makeObservable()
34
+ }
35
+ get tree() {
36
+ return this.operation.tree
37
+ }
38
+ get cursor() {
39
+ return this.operation.engine.cursor
40
+ }
41
+ get viewport() {
42
+ return this.operation.workspace.viewport
43
+ }
44
+ get deltaX() {
45
+ return this.cursor.dragStartToCurrentDelta.clientX
46
+ }
47
+ get deltaY() {
48
+ return this.cursor.dragStartToCurrentDelta.clientY
49
+ }
50
+ get cursorPosition() {
51
+ const position = this.cursor.position
52
+ return this.operation.workspace.viewport.getOffsetPoint(
53
+ new Point(position.clientX, position.clientY)
54
+ )
55
+ }
56
+ get cursorDragNodesRect() {
57
+ if (this.type === 'translate') {
58
+ return new Rect(
59
+ this.cursorPosition.x - this.dragStartCursorOffset.x,
60
+ this.cursorPosition.y - this.dragStartCursorOffset.y,
61
+ this.dragNodesRect.width,
62
+ this.dragNodesRect.height
63
+ )
64
+ } else if (this.type === 'resize') {
65
+ const dragNodesRect = this.dragStartNodesRect
66
+ const deltaX = this.cursor.dragStartToCurrentDelta.clientX
67
+ const deltaY = this.cursor.dragStartToCurrentDelta.clientY
68
+ switch (this.direction) {
69
+ case 'left-top':
70
+ return new Rect(
71
+ this.cursorPosition.x - this.dragStartCursorOffset.x,
72
+ this.cursorPosition.y - this.dragStartCursorOffset.y,
73
+ dragNodesRect.width - deltaX,
74
+ dragNodesRect.height - deltaY
75
+ )
76
+ case 'left-center':
77
+ return new Rect(
78
+ this.cursorPosition.x - this.dragStartCursorOffset.x,
79
+ dragNodesRect.y,
80
+ dragNodesRect.width - deltaX,
81
+ dragNodesRect.height
82
+ )
83
+ case 'left-bottom':
84
+ return new Rect(
85
+ this.cursorPosition.x - this.dragStartCursorOffset.x,
86
+ dragNodesRect.y,
87
+ dragNodesRect.width - deltaX,
88
+ dragNodesRect.height - deltaY
89
+ )
90
+ case 'center-top':
91
+ return new Rect(
92
+ dragNodesRect.x,
93
+ this.cursorPosition.y - this.dragStartCursorOffset.y,
94
+ dragNodesRect.width,
95
+ dragNodesRect.height - deltaY
96
+ )
97
+ case 'center-bottom':
98
+ return new Rect(
99
+ dragNodesRect.x,
100
+ dragNodesRect.y,
101
+ dragNodesRect.width,
102
+ dragNodesRect.height + deltaY
103
+ )
104
+ case 'right-top':
105
+ return new Rect(
106
+ dragNodesRect.x,
107
+ this.cursorPosition.y - this.dragStartCursorOffset.y,
108
+ dragNodesRect.width + deltaX,
109
+ dragNodesRect.height - deltaY
110
+ )
111
+ case 'right-center':
112
+ return new Rect(
113
+ dragNodesRect.x,
114
+ dragNodesRect.y,
115
+ dragNodesRect.width + deltaX,
116
+ dragNodesRect.height
117
+ )
118
+ case 'right-bottom':
119
+ return new Rect(
120
+ dragNodesRect.x,
121
+ dragNodesRect.y,
122
+ dragNodesRect.width + deltaX,
123
+ dragNodesRect.height - deltaY
124
+ )
125
+ }
126
+ }
127
+ }
128
+ get cursorDragNodesEdgeLines() {
129
+ return calcEdgeLinesOfRect(this.cursorDragNodesRect)
130
+ }
131
+ get dragNodesRect() {
132
+ if (this.draggingNodesRect) return this.draggingNodesRect
133
+ return calcBoundingRect(
134
+ this.dragNodes.map((node) => node.getValidElementOffsetRect())
135
+ )
136
+ }
137
+ get dragNodesEdgeLines() {
138
+ return calcEdgeLinesOfRect(this.dragNodesRect)
139
+ }
140
+ get cursorOffset() {
141
+ return new Point(
142
+ this.cursorPosition.x - this.dragNodesRect.x,
143
+ this.cursorPosition.y - this.dragNodesRect.y
144
+ )
145
+ }
146
+ get dragStartCursor() {
147
+ const position = this.operation.engine.cursor.dragStartPosition
148
+ return this.operation.workspace.viewport.getOffsetPoint(
149
+ new Point(position.clientX, position.clientY)
150
+ )
151
+ }
152
+ get dragStartCursorOffset() {
153
+ return new Point(
154
+ this.dragStartCursor.x - this.dragStartNodesRect.x,
155
+ this.dragStartCursor.y - this.dragStartNodesRect.y
156
+ )
157
+ }
158
+ get closestSnapLines() {
159
+ if (!this.dragging) return []
160
+ const results = []
161
+ const cursorDragNodesEdgeLines = this.cursorDragNodesEdgeLines
162
+ this.thresholdSnapLines.forEach((line) => {
163
+ const distance = calcDistanceOfSnapLineToEdges(
164
+ line,
165
+ cursorDragNodesEdgeLines
166
+ )
167
+ if (distance < TransformHelper.threshold) {
168
+ const existed = results.findIndex(
169
+ (l) =>
170
+ l.distance > distance &&
171
+ l.distance > 0 &&
172
+ l.direction === line.direction
173
+ )
174
+ if (existed > -1) {
175
+ results.splice(existed, 1)
45
176
  }
46
- else if (this.type === 'resize') {
47
- const dragNodesRect = this.dragStartNodesRect;
48
- const deltaX = this.cursor.dragStartToCurrentDelta.clientX;
49
- const deltaY = this.cursor.dragStartToCurrentDelta.clientY;
50
- switch (this.direction) {
51
- case 'left-top':
52
- return new Rect(this.cursorPosition.x - this.dragStartCursorOffset.x, this.cursorPosition.y - this.dragStartCursorOffset.y, dragNodesRect.width - deltaX, dragNodesRect.height - deltaY);
53
- case 'left-center':
54
- return new Rect(this.cursorPosition.x - this.dragStartCursorOffset.x, dragNodesRect.y, dragNodesRect.width - deltaX, dragNodesRect.height);
55
- case 'left-bottom':
56
- return new Rect(this.cursorPosition.x - this.dragStartCursorOffset.x, dragNodesRect.y, dragNodesRect.width - deltaX, dragNodesRect.height - deltaY);
57
- case 'center-top':
58
- return new Rect(dragNodesRect.x, this.cursorPosition.y - this.dragStartCursorOffset.y, dragNodesRect.width, dragNodesRect.height - deltaY);
59
- case 'center-bottom':
60
- return new Rect(dragNodesRect.x, dragNodesRect.y, dragNodesRect.width, dragNodesRect.height + deltaY);
61
- case 'right-top':
62
- return new Rect(dragNodesRect.x, this.cursorPosition.y - this.dragStartCursorOffset.y, dragNodesRect.width + deltaX, dragNodesRect.height - deltaY);
63
- case 'right-center':
64
- return new Rect(dragNodesRect.x, dragNodesRect.y, dragNodesRect.width + deltaX, dragNodesRect.height);
65
- case 'right-bottom':
66
- return new Rect(dragNodesRect.x, dragNodesRect.y, dragNodesRect.width + deltaX, dragNodesRect.height - deltaY);
67
- }
177
+ results.push(line)
178
+ }
179
+ })
180
+ return results
181
+ }
182
+ get closestSpaceBlocks() {
183
+ if (!this.dragging) return []
184
+ const cursorDragNodesEdgeLines = this.cursorDragNodesEdgeLines
185
+ return this.thresholdSpaceBlocks.filter((block) => {
186
+ const line = block.snapLine
187
+ if (!line) return false
188
+ return (
189
+ calcDistanceOfSnapLineToEdges(line, cursorDragNodesEdgeLines) <
190
+ TransformHelper.threshold
191
+ )
192
+ })
193
+ }
194
+ get thresholdSnapLines() {
195
+ if (!this.dragging) return []
196
+ const lines = []
197
+ this.aroundSnapLines.forEach((line) => {
198
+ lines.push(line)
199
+ })
200
+ this.rulerSnapLines.forEach((line) => {
201
+ if (line.closest) {
202
+ lines.push(line)
203
+ }
204
+ })
205
+ for (let type in this.aroundSpaceBlocks) {
206
+ const block = this.aroundSpaceBlocks[type]
207
+ const line = block.snapLine
208
+ if (line) {
209
+ lines.push(line)
210
+ }
211
+ }
212
+ return lines
213
+ }
214
+ get thresholdSpaceBlocks() {
215
+ const results = []
216
+ if (!this.dragging) return []
217
+ for (let type in this.aroundSpaceBlocks) {
218
+ const block = this.aroundSpaceBlocks[type]
219
+ if (!block.snapLine) return []
220
+ if (block.snapLine.distance !== 0) return []
221
+ if (block.isometrics.length) {
222
+ results.push(block)
223
+ results.push(...block.isometrics)
224
+ }
225
+ }
226
+ return results
227
+ }
228
+ get measurerSpaceBlocks() {
229
+ const results = []
230
+ if (!this.dragging || !this.snapped) return []
231
+ for (let type in this.aroundSpaceBlocks) {
232
+ if (this.aroundSpaceBlocks[type])
233
+ results.push(this.aroundSpaceBlocks[type])
234
+ }
235
+ return results
236
+ }
237
+ calcBaseTranslate(node) {
238
+ const dragStartTranslate = this.dragStartTranslateStore[node.id] ?? {
239
+ x: 0,
240
+ y: 0,
241
+ }
242
+ const x = dragStartTranslate.x + this.deltaX,
243
+ y = dragStartTranslate.y + this.deltaY
244
+ return { x, y }
245
+ }
246
+ calcBaseResize(node) {
247
+ const deltaX = this.deltaX
248
+ const deltaY = this.deltaY
249
+ const dragStartTranslate = this.dragStartTranslateStore[node.id] ?? {
250
+ x: 0,
251
+ y: 0,
252
+ }
253
+ const dragStartSize = this.dragStartSizeStore[node.id] ?? {
254
+ width: 0,
255
+ height: 0,
256
+ }
257
+ switch (this.direction) {
258
+ case 'left-top':
259
+ return new Rect(
260
+ dragStartTranslate.x + deltaX,
261
+ dragStartTranslate.y + deltaY,
262
+ dragStartSize.width - deltaX,
263
+ dragStartSize.height - deltaY
264
+ )
265
+ case 'left-center':
266
+ return new Rect(
267
+ dragStartTranslate.x + deltaX,
268
+ dragStartTranslate.y,
269
+ dragStartSize.width - deltaX,
270
+ dragStartSize.height
271
+ )
272
+ case 'left-bottom':
273
+ return new Rect(
274
+ dragStartTranslate.x + deltaX,
275
+ dragStartTranslate.y,
276
+ dragStartSize.width - deltaX,
277
+ dragStartSize.height + deltaY
278
+ )
279
+ case 'center-bottom':
280
+ return new Rect(
281
+ dragStartTranslate.x,
282
+ dragStartTranslate.y,
283
+ dragStartSize.width,
284
+ dragStartSize.height + deltaY
285
+ )
286
+ case 'center-top':
287
+ return new Rect(
288
+ dragStartTranslate.x,
289
+ dragStartTranslate.y + deltaY,
290
+ dragStartSize.width,
291
+ dragStartSize.height - deltaY
292
+ )
293
+ case 'right-top':
294
+ return new Rect(
295
+ dragStartTranslate.x,
296
+ dragStartTranslate.y + deltaY,
297
+ dragStartSize.width + deltaX,
298
+ dragStartSize.height - deltaY
299
+ )
300
+ case 'right-bottom':
301
+ return new Rect(
302
+ dragStartTranslate.x,
303
+ dragStartTranslate.y,
304
+ dragStartSize.width + deltaX,
305
+ dragStartSize.height + deltaY
306
+ )
307
+ case 'right-center':
308
+ return new Rect(
309
+ dragStartTranslate.x,
310
+ dragStartTranslate.y,
311
+ dragStartSize.width + deltaX,
312
+ dragStartSize.height
313
+ )
314
+ }
315
+ }
316
+ calcDragStartStore(nodes = []) {
317
+ this.dragStartNodesRect = this.dragNodesRect
318
+ nodes.forEach((node) => {
319
+ const element = node.getElement()
320
+ const rect = node.getElementOffsetRect()
321
+ this.dragStartTranslateStore[node.id] = calcElementTranslate(element)
322
+ this.dragStartSizeStore[node.id] = {
323
+ width: rect.width,
324
+ height: rect.height,
325
+ }
326
+ })
327
+ }
328
+ calcRulerSnapLines(dragNodesRect) {
329
+ const edgeLines = calcEdgeLinesOfRect(dragNodesRect)
330
+ return this.rulerSnapLines.map((line) => {
331
+ line.distance = calcDistanceOfSnapLineToEdges(line, edgeLines)
332
+ return line
333
+ })
334
+ }
335
+ calcAroundSnapLines(dragNodesRect) {
336
+ const results = []
337
+ const edgeLines = calcEdgeLinesOfRect(dragNodesRect)
338
+ this.eachViewportNodes((refer, referRect) => {
339
+ if (this.dragNodes.includes(refer)) return
340
+ const referLines = calcEdgeLinesOfRect(referRect)
341
+ const add = (line) => {
342
+ const [distance, edge] = calcClosestEdges(line, edgeLines)
343
+ const combined = calcCombineSnapLineSegment(line, edge)
344
+ if (distance < TransformHelper.threshold) {
345
+ if (this.snapping && distance !== 0) return
346
+ const snapLine = new SnapLine(this, {
347
+ ...combined,
348
+ distance,
349
+ })
350
+ const edge = snapLine.snapEdge(dragNodesRect)
351
+ if (this.type === 'translate') {
352
+ results.push(snapLine)
353
+ } else if (edge !== 'hc' && edge !== 'vc') {
354
+ results.push(snapLine)
355
+ }
68
356
  }
69
- }
70
- get cursorDragNodesEdgeLines() {
71
- return calcEdgeLinesOfRect(this.cursorDragNodesRect);
72
- }
73
- get dragNodesRect() {
74
- if (this.draggingNodesRect)
75
- return this.draggingNodesRect;
76
- return calcBoundingRect(this.dragNodes.map((node) => node.getValidElementOffsetRect()));
77
- }
78
- get dragNodesEdgeLines() {
79
- return calcEdgeLinesOfRect(this.dragNodesRect);
80
- }
81
- get cursorOffset() {
82
- return new Point(this.cursorPosition.x - this.dragNodesRect.x, this.cursorPosition.y - this.dragNodesRect.y);
83
- }
84
- get dragStartCursor() {
85
- const position = this.operation.engine.cursor.dragStartPosition;
86
- return this.operation.workspace.viewport.getOffsetPoint(new Point(position.clientX, position.clientY));
87
- }
88
- get dragStartCursorOffset() {
89
- return new Point(this.dragStartCursor.x - this.dragStartNodesRect.x, this.dragStartCursor.y - this.dragStartNodesRect.y);
90
- }
91
- get closestSnapLines() {
92
- if (!this.dragging)
93
- return [];
94
- const results = [];
95
- const cursorDragNodesEdgeLines = this.cursorDragNodesEdgeLines;
96
- this.thresholdSnapLines.forEach((line) => {
97
- const distance = calcDistanceOfSnapLineToEdges(line, cursorDragNodesEdgeLines);
98
- if (distance < TransformHelper.threshold) {
99
- const existed = results.findIndex((l) => l.distance > distance &&
100
- l.distance > 0 &&
101
- l.direction === line.direction);
102
- if (existed > -1) {
103
- results.splice(existed, 1);
104
- }
105
- results.push(line);
106
- }
107
- });
108
- return results;
109
- }
110
- get closestSpaceBlocks() {
111
- if (!this.dragging)
112
- return [];
113
- const cursorDragNodesEdgeLines = this.cursorDragNodesEdgeLines;
114
- return this.thresholdSpaceBlocks.filter((block) => {
115
- const line = block.snapLine;
116
- if (!line)
117
- return false;
118
- return (calcDistanceOfSnapLineToEdges(line, cursorDragNodesEdgeLines) <
119
- TransformHelper.threshold);
120
- });
121
- }
122
- get thresholdSnapLines() {
123
- if (!this.dragging)
124
- return [];
125
- const lines = [];
126
- this.aroundSnapLines.forEach((line) => {
127
- lines.push(line);
128
- });
129
- this.rulerSnapLines.forEach((line) => {
130
- if (line.closest) {
131
- lines.push(line);
132
- }
133
- });
134
- for (let type in this.aroundSpaceBlocks) {
135
- const block = this.aroundSpaceBlocks[type];
136
- const line = block.snapLine;
137
- if (line) {
138
- lines.push(line);
139
- }
140
- }
141
- return lines;
142
- }
143
- get thresholdSpaceBlocks() {
144
- const results = [];
145
- if (!this.dragging)
146
- return [];
147
- for (let type in this.aroundSpaceBlocks) {
148
- const block = this.aroundSpaceBlocks[type];
149
- if (!block.snapLine)
150
- return [];
151
- if (block.snapLine.distance !== 0)
152
- return [];
153
- if (block.isometrics.length) {
154
- results.push(block);
155
- results.push(...block.isometrics);
156
- }
357
+ }
358
+ referLines.h.forEach(add)
359
+ referLines.v.forEach(add)
360
+ })
361
+ return results
362
+ }
363
+ calcAroundSpaceBlocks(dragNodesRect) {
364
+ const closestSpaces = {}
365
+ this.eachViewportNodes((refer, referRect) => {
366
+ if (isEqualRect(dragNodesRect, referRect)) return
367
+ const origin = calcSpaceBlockOfRect(dragNodesRect, referRect)
368
+ if (origin) {
369
+ const spaceBlock = new SpaceBlock(this, {
370
+ refer,
371
+ ...origin,
372
+ })
373
+ if (!closestSpaces[origin.type]) {
374
+ closestSpaces[origin.type] = spaceBlock
375
+ } else if (spaceBlock.distance < closestSpaces[origin.type].distance) {
376
+ closestSpaces[origin.type] = spaceBlock
157
377
  }
158
- return results;
159
- }
160
- get measurerSpaceBlocks() {
161
- const results = [];
162
- if (!this.dragging || !this.snapped)
163
- return [];
164
- for (let type in this.aroundSpaceBlocks) {
165
- if (this.aroundSpaceBlocks[type])
166
- results.push(this.aroundSpaceBlocks[type]);
167
- }
168
- return results;
169
- }
170
- calcBaseTranslate(node) {
171
- const dragStartTranslate = this.dragStartTranslateStore[node.id] ?? {
172
- x: 0,
173
- y: 0,
174
- };
175
- const x = dragStartTranslate.x + this.deltaX, y = dragStartTranslate.y + this.deltaY;
176
- return { x, y };
177
- }
178
- calcBaseResize(node) {
179
- const deltaX = this.deltaX;
180
- const deltaY = this.deltaY;
181
- const dragStartTranslate = this.dragStartTranslateStore[node.id] ?? {
182
- x: 0,
183
- y: 0,
184
- };
185
- const dragStartSize = this.dragStartSizeStore[node.id] ?? {
186
- width: 0,
187
- height: 0,
188
- };
189
- switch (this.direction) {
190
- case 'left-top':
191
- return new Rect(dragStartTranslate.x + deltaX, dragStartTranslate.y + deltaY, dragStartSize.width - deltaX, dragStartSize.height - deltaY);
192
- case 'left-center':
193
- return new Rect(dragStartTranslate.x + deltaX, dragStartTranslate.y, dragStartSize.width - deltaX, dragStartSize.height);
194
- case 'left-bottom':
195
- return new Rect(dragStartTranslate.x + deltaX, dragStartTranslate.y, dragStartSize.width - deltaX, dragStartSize.height + deltaY);
196
- case 'center-bottom':
197
- return new Rect(dragStartTranslate.x, dragStartTranslate.y, dragStartSize.width, dragStartSize.height + deltaY);
198
- case 'center-top':
199
- return new Rect(dragStartTranslate.x, dragStartTranslate.y + deltaY, dragStartSize.width, dragStartSize.height - deltaY);
200
- case 'right-top':
201
- return new Rect(dragStartTranslate.x, dragStartTranslate.y + deltaY, dragStartSize.width + deltaX, dragStartSize.height - deltaY);
202
- case 'right-bottom':
203
- return new Rect(dragStartTranslate.x, dragStartTranslate.y, dragStartSize.width + deltaX, dragStartSize.height + deltaY);
204
- case 'right-center':
205
- return new Rect(dragStartTranslate.x, dragStartTranslate.y, dragStartSize.width + deltaX, dragStartSize.height);
206
- }
207
- }
208
- calcDragStartStore(nodes = []) {
209
- this.dragStartNodesRect = this.dragNodesRect;
210
- nodes.forEach((node) => {
211
- const element = node.getElement();
212
- const rect = node.getElementOffsetRect();
213
- this.dragStartTranslateStore[node.id] = calcElementTranslate(element);
214
- this.dragStartSizeStore[node.id] = {
215
- width: rect.width,
216
- height: rect.height,
217
- };
218
- });
219
- }
220
- calcRulerSnapLines(dragNodesRect) {
221
- const edgeLines = calcEdgeLinesOfRect(dragNodesRect);
222
- return this.rulerSnapLines.map((line) => {
223
- line.distance = calcDistanceOfSnapLineToEdges(line, edgeLines);
224
- return line;
225
- });
226
- }
227
- calcAroundSnapLines(dragNodesRect) {
228
- const results = [];
229
- const edgeLines = calcEdgeLinesOfRect(dragNodesRect);
230
- this.eachViewportNodes((refer, referRect) => {
231
- if (this.dragNodes.includes(refer))
232
- return;
233
- const referLines = calcEdgeLinesOfRect(referRect);
234
- const add = (line) => {
235
- const [distance, edge] = calcClosestEdges(line, edgeLines);
236
- const combined = calcCombineSnapLineSegment(line, edge);
237
- if (distance < TransformHelper.threshold) {
238
- if (this.snapping && distance !== 0)
239
- return;
240
- const snapLine = new SnapLine(this, {
241
- ...combined,
242
- distance,
243
- });
244
- const edge = snapLine.snapEdge(dragNodesRect);
245
- if (this.type === 'translate') {
246
- results.push(snapLine);
247
- }
248
- else if (edge !== 'hc' && edge !== 'vc') {
249
- results.push(snapLine);
250
- }
251
- }
252
- };
253
- referLines.h.forEach(add);
254
- referLines.v.forEach(add);
255
- });
256
- return results;
257
- }
258
- calcAroundSpaceBlocks(dragNodesRect) {
259
- const closestSpaces = {};
260
- this.eachViewportNodes((refer, referRect) => {
261
- if (isEqualRect(dragNodesRect, referRect))
262
- return;
263
- const origin = calcSpaceBlockOfRect(dragNodesRect, referRect);
264
- if (origin) {
265
- const spaceBlock = new SpaceBlock(this, {
266
- refer,
267
- ...origin,
268
- });
269
- if (!closestSpaces[origin.type]) {
270
- closestSpaces[origin.type] = spaceBlock;
271
- }
272
- else if (spaceBlock.distance < closestSpaces[origin.type].distance) {
273
- closestSpaces[origin.type] = spaceBlock;
274
- }
275
- }
276
- });
277
- return closestSpaces;
278
- }
279
- calcViewportNodes() {
280
- this.tree.eachTree((node) => {
281
- const topRect = node.getValidElementRect();
282
- const offsetRect = node.getValidElementOffsetRect();
283
- if (this.dragNodes.includes(node))
284
- return;
285
- if (this.viewport.isRectInViewport(topRect)) {
286
- this.viewportRectsStore[node.id] = offsetRect;
287
- }
288
- });
289
- }
290
- getNodeRect(node) {
291
- return this.viewportRectsStore[node.id];
292
- }
293
- eachViewportNodes(visitor) {
294
- for (let id in this.viewportRectsStore) {
295
- visitor(this.tree.findById(id), this.viewportRectsStore[id]);
296
- }
297
- }
298
- translate(node, handler) {
299
- if (!this.dragging)
300
- return;
301
- const translate = this.calcBaseTranslate(node);
302
- this.snapped = false;
303
- this.snapping = false;
304
- for (let line of this.closestSnapLines) {
305
- line.translate(node, translate);
306
- this.snapping = true;
307
- this.snapped = true;
308
- }
309
- handler(translate);
310
- if (this.snapping) {
311
- this.dragMove();
312
- this.snapping = false;
313
- }
314
- }
315
- resize(node, handler) {
316
- if (!this.dragging)
317
- return;
318
- const rect = this.calcBaseResize(node);
319
- this.snapping = false;
320
- this.snapping = false;
321
- for (let line of this.closestSnapLines) {
322
- line.resize(node, rect);
323
- this.snapping = true;
324
- this.snapped = true;
325
- }
326
- handler(rect);
327
- if (this.snapping) {
328
- this.dragMove();
329
- this.snapping = false;
330
- }
331
- }
332
- // rotate(node: TreeNode, handler: (rotate: number) => void) {}
333
- // scale(node: TreeNode, handler: (scale: number) => void) {}
334
- // round(node: TreeNode, handler: (round: number) => void) {}
335
- findRulerSnapLine(id) {
336
- return this.rulerSnapLines.find((item) => item.id === id);
337
- }
338
- addRulerSnapLine(line) {
339
- if (!isLineSegment(line))
340
- return;
341
- if (!this.findRulerSnapLine(line.id)) {
342
- this.rulerSnapLines.push(new SnapLine(this, { ...line, type: 'ruler' }));
343
- }
344
- }
345
- removeRulerSnapLine(id) {
346
- const matchedLineIndex = this.rulerSnapLines.findIndex((item) => item.id === id);
347
- if (matchedLineIndex > -1) {
348
- this.rulerSnapLines.splice(matchedLineIndex, 1);
349
- }
350
- }
351
- dragStart(props) {
352
- const dragNodes = props?.dragNodes;
353
- const type = props?.type;
354
- const direction = props?.direction;
355
- if (type === 'resize') {
356
- const nodes = TreeNode.filterResizable(dragNodes);
357
- if (nodes.length) {
358
- this.dragging = true;
359
- this.type = type;
360
- this.direction = direction;
361
- this.dragNodes = nodes;
362
- this.calcDragStartStore(nodes);
363
- this.cursor.setDragType(CursorDragType.Resize);
364
- }
365
- }
366
- else if (type === 'translate') {
367
- const nodes = TreeNode.filterTranslatable(dragNodes);
368
- if (nodes.length) {
369
- this.dragging = true;
370
- this.type = type;
371
- this.direction = direction;
372
- this.dragNodes = nodes;
373
- this.calcDragStartStore(nodes);
374
- this.cursor.setDragType(CursorDragType.Translate);
375
- }
376
- }
377
- else if (type === 'rotate') {
378
- const nodes = TreeNode.filterRotatable(dragNodes);
379
- if (nodes.length) {
380
- this.dragging = true;
381
- this.type = type;
382
- this.dragNodes = nodes;
383
- this.calcDragStartStore(nodes);
384
- this.cursor.setDragType(CursorDragType.Rotate);
385
- }
386
- }
387
- else if (type === 'scale') {
388
- const nodes = TreeNode.filterScalable(dragNodes);
389
- if (nodes.length) {
390
- this.dragging = true;
391
- this.type = type;
392
- this.dragNodes = nodes;
393
- this.calcDragStartStore(nodes);
394
- this.cursor.setDragType(CursorDragType.Scale);
395
- }
396
- }
397
- else if (type === 'round') {
398
- const nodes = TreeNode.filterRoundable(dragNodes);
399
- if (nodes.length) {
400
- this.dragging = true;
401
- this.type = type;
402
- this.dragNodes = nodes;
403
- this.calcDragStartStore(nodes);
404
- this.cursor.setDragType(CursorDragType.Round);
405
- }
406
- }
407
- if (this.dragging) {
408
- this.calcViewportNodes();
409
- }
410
- }
411
- dragMove() {
412
- if (!this.dragging)
413
- return;
414
- this.draggingNodesRect = null;
415
- this.draggingNodesRect = this.dragNodesRect;
416
- this.rulerSnapLines = this.calcRulerSnapLines(this.dragNodesRect);
417
- this.aroundSnapLines = this.calcAroundSnapLines(this.dragNodesRect);
418
- this.aroundSpaceBlocks = this.calcAroundSpaceBlocks(this.dragNodesRect);
419
- }
420
- dragEnd() {
421
- this.dragging = false;
422
- this.viewportRectsStore = {};
423
- this.dragStartTranslateStore = {};
424
- this.aroundSnapLines = [];
425
- this.draggingNodesRect = null;
426
- this.aroundSpaceBlocks = null;
427
- this.dragStartNodesRect = null;
428
- this.dragNodes = [];
429
- this.cursor.setDragType(CursorDragType.Move);
430
- }
431
- makeObservable() {
432
- define(this, {
433
- snapped: observable.ref,
434
- dragging: observable.ref,
435
- snapping: observable.ref,
436
- dragNodes: observable.ref,
437
- aroundSnapLines: observable.ref,
438
- aroundSpaceBlocks: observable.ref,
439
- rulerSnapLines: observable.shallow,
440
- closestSnapLines: observable.computed,
441
- thresholdSnapLines: observable.computed,
442
- thresholdSpaceBlocks: observable.computed,
443
- measurerSpaceBlocks: observable.computed,
444
- cursor: observable.computed,
445
- cursorPosition: observable.computed,
446
- cursorOffset: observable.computed,
447
- dragStartCursor: observable.computed,
448
- translate: action,
449
- dragStart: action,
450
- dragMove: action,
451
- dragEnd: action,
452
- });
453
- }
378
+ }
379
+ })
380
+ return closestSpaces
381
+ }
382
+ calcViewportNodes() {
383
+ this.tree.eachTree((node) => {
384
+ const topRect = node.getValidElementRect()
385
+ const offsetRect = node.getValidElementOffsetRect()
386
+ if (this.dragNodes.includes(node)) return
387
+ if (this.viewport.isRectInViewport(topRect)) {
388
+ this.viewportRectsStore[node.id] = offsetRect
389
+ }
390
+ })
391
+ }
392
+ getNodeRect(node) {
393
+ return this.viewportRectsStore[node.id]
394
+ }
395
+ eachViewportNodes(visitor) {
396
+ for (let id in this.viewportRectsStore) {
397
+ visitor(this.tree.findById(id), this.viewportRectsStore[id])
398
+ }
399
+ }
400
+ translate(node, handler) {
401
+ if (!this.dragging) return
402
+ const translate = this.calcBaseTranslate(node)
403
+ this.snapped = false
404
+ this.snapping = false
405
+ for (let line of this.closestSnapLines) {
406
+ line.translate(node, translate)
407
+ this.snapping = true
408
+ this.snapped = true
409
+ }
410
+ handler(translate)
411
+ if (this.snapping) {
412
+ this.dragMove()
413
+ this.snapping = false
414
+ }
415
+ }
416
+ resize(node, handler) {
417
+ if (!this.dragging) return
418
+ const rect = this.calcBaseResize(node)
419
+ this.snapping = false
420
+ this.snapping = false
421
+ for (let line of this.closestSnapLines) {
422
+ line.resize(node, rect)
423
+ this.snapping = true
424
+ this.snapped = true
425
+ }
426
+ handler(rect)
427
+ if (this.snapping) {
428
+ this.dragMove()
429
+ this.snapping = false
430
+ }
431
+ }
432
+ // rotate(node: TreeNode, handler: (rotate: number) => void) {}
433
+ // scale(node: TreeNode, handler: (scale: number) => void) {}
434
+ // round(node: TreeNode, handler: (round: number) => void) {}
435
+ findRulerSnapLine(id) {
436
+ return this.rulerSnapLines.find((item) => item.id === id)
437
+ }
438
+ addRulerSnapLine(line) {
439
+ if (!isLineSegment(line)) return
440
+ if (!this.findRulerSnapLine(line.id)) {
441
+ this.rulerSnapLines.push(new SnapLine(this, { ...line, type: 'ruler' }))
442
+ }
443
+ }
444
+ removeRulerSnapLine(id) {
445
+ const matchedLineIndex = this.rulerSnapLines.findIndex(
446
+ (item) => item.id === id
447
+ )
448
+ if (matchedLineIndex > -1) {
449
+ this.rulerSnapLines.splice(matchedLineIndex, 1)
450
+ }
451
+ }
452
+ dragStart(props) {
453
+ const dragNodes = props?.dragNodes
454
+ const type = props?.type
455
+ const direction = props?.direction
456
+ if (type === 'resize') {
457
+ const nodes = TreeNode.filterResizable(dragNodes)
458
+ if (nodes.length) {
459
+ this.dragging = true
460
+ this.type = type
461
+ this.direction = direction
462
+ this.dragNodes = nodes
463
+ this.calcDragStartStore(nodes)
464
+ this.cursor.setDragType(CursorDragType.Resize)
465
+ }
466
+ } else if (type === 'translate') {
467
+ const nodes = TreeNode.filterTranslatable(dragNodes)
468
+ if (nodes.length) {
469
+ this.dragging = true
470
+ this.type = type
471
+ this.direction = direction
472
+ this.dragNodes = nodes
473
+ this.calcDragStartStore(nodes)
474
+ this.cursor.setDragType(CursorDragType.Translate)
475
+ }
476
+ } else if (type === 'rotate') {
477
+ const nodes = TreeNode.filterRotatable(dragNodes)
478
+ if (nodes.length) {
479
+ this.dragging = true
480
+ this.type = type
481
+ this.dragNodes = nodes
482
+ this.calcDragStartStore(nodes)
483
+ this.cursor.setDragType(CursorDragType.Rotate)
484
+ }
485
+ } else if (type === 'scale') {
486
+ const nodes = TreeNode.filterScalable(dragNodes)
487
+ if (nodes.length) {
488
+ this.dragging = true
489
+ this.type = type
490
+ this.dragNodes = nodes
491
+ this.calcDragStartStore(nodes)
492
+ this.cursor.setDragType(CursorDragType.Scale)
493
+ }
494
+ } else if (type === 'round') {
495
+ const nodes = TreeNode.filterRoundable(dragNodes)
496
+ if (nodes.length) {
497
+ this.dragging = true
498
+ this.type = type
499
+ this.dragNodes = nodes
500
+ this.calcDragStartStore(nodes)
501
+ this.cursor.setDragType(CursorDragType.Round)
502
+ }
503
+ }
504
+ if (this.dragging) {
505
+ this.calcViewportNodes()
506
+ }
507
+ }
508
+ dragMove() {
509
+ if (!this.dragging) return
510
+ this.draggingNodesRect = null
511
+ this.draggingNodesRect = this.dragNodesRect
512
+ this.rulerSnapLines = this.calcRulerSnapLines(this.dragNodesRect)
513
+ this.aroundSnapLines = this.calcAroundSnapLines(this.dragNodesRect)
514
+ this.aroundSpaceBlocks = this.calcAroundSpaceBlocks(this.dragNodesRect)
515
+ }
516
+ dragEnd() {
517
+ this.dragging = false
518
+ this.viewportRectsStore = {}
519
+ this.dragStartTranslateStore = {}
520
+ this.aroundSnapLines = []
521
+ this.draggingNodesRect = null
522
+ this.aroundSpaceBlocks = null
523
+ this.dragStartNodesRect = null
524
+ this.dragNodes = []
525
+ this.cursor.setDragType(CursorDragType.Move)
526
+ }
527
+ makeObservable() {
528
+ define(this, {
529
+ snapped: observable.ref,
530
+ dragging: observable.ref,
531
+ snapping: observable.ref,
532
+ dragNodes: observable.ref,
533
+ aroundSnapLines: observable.ref,
534
+ aroundSpaceBlocks: observable.ref,
535
+ rulerSnapLines: observable.shallow,
536
+ closestSnapLines: observable.computed,
537
+ thresholdSnapLines: observable.computed,
538
+ thresholdSpaceBlocks: observable.computed,
539
+ measurerSpaceBlocks: observable.computed,
540
+ cursor: observable.computed,
541
+ cursorPosition: observable.computed,
542
+ cursorOffset: observable.computed,
543
+ dragStartCursor: observable.computed,
544
+ translate: action,
545
+ dragStart: action,
546
+ dragMove: action,
547
+ dragEnd: action,
548
+ })
549
+ }
454
550
  }
455
- TransformHelper.threshold = 6;
551
+ TransformHelper.threshold = 6