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