@sulesky/next-core 1.0.3

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