@thienvu18/designable-core 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +1 -0
  3. package/esm/drivers/DragDropDriver.d.ts +14 -0
  4. package/esm/drivers/DragDropDriver.js +111 -0
  5. package/esm/drivers/KeyboardDriver.d.ts +7 -0
  6. package/esm/drivers/KeyboardDriver.js +46 -0
  7. package/esm/drivers/MouseClickDriver.d.ts +8 -0
  8. package/esm/drivers/MouseClickDriver.js +51 -0
  9. package/esm/drivers/MouseMoveDriver.d.ts +8 -0
  10. package/esm/drivers/MouseMoveDriver.js +31 -0
  11. package/esm/drivers/ViewportResizeDriver.d.ts +11 -0
  12. package/esm/drivers/ViewportResizeDriver.js +64 -0
  13. package/esm/drivers/ViewportScrollDriver.d.ts +8 -0
  14. package/esm/drivers/ViewportScrollDriver.js +30 -0
  15. package/esm/drivers/index.d.ts +6 -0
  16. package/esm/drivers/index.js +6 -0
  17. package/esm/effects/index.d.ts +11 -0
  18. package/esm/effects/index.js +11 -0
  19. package/esm/effects/useAutoScrollEffect.d.ts +2 -0
  20. package/esm/effects/useAutoScrollEffect.js +65 -0
  21. package/esm/effects/useContentEditableEffect.d.ts +2 -0
  22. package/esm/effects/useContentEditableEffect.js +163 -0
  23. package/esm/effects/useCursorEffect.d.ts +2 -0
  24. package/esm/effects/useCursorEffect.js +57 -0
  25. package/esm/effects/useDragDropEffect.d.ts +2 -0
  26. package/esm/effects/useDragDropEffect.js +155 -0
  27. package/esm/effects/useFreeSelectionEffect.d.ts +2 -0
  28. package/esm/effects/useFreeSelectionEffect.js +39 -0
  29. package/esm/effects/useKeyboardEffect.d.ts +2 -0
  30. package/esm/effects/useKeyboardEffect.js +17 -0
  31. package/esm/effects/useResizeEffect.d.ts +2 -0
  32. package/esm/effects/useResizeEffect.js +77 -0
  33. package/esm/effects/useSelectionEffect.d.ts +2 -0
  34. package/esm/effects/useSelectionEffect.js +70 -0
  35. package/esm/effects/useTranslateEffect.d.ts +2 -0
  36. package/esm/effects/useTranslateEffect.js +55 -0
  37. package/esm/effects/useViewportEffect.d.ts +2 -0
  38. package/esm/effects/useViewportEffect.js +29 -0
  39. package/esm/effects/useWorkspaceEffect.d.ts +2 -0
  40. package/esm/effects/useWorkspaceEffect.js +28 -0
  41. package/esm/events/cursor/AbstractCursorEvent.d.ts +21 -0
  42. package/esm/events/cursor/AbstractCursorEvent.js +37 -0
  43. package/esm/events/cursor/DragMoveEvent.d.ts +5 -0
  44. package/esm/events/cursor/DragMoveEvent.js +7 -0
  45. package/esm/events/cursor/DragStartEvent.d.ts +5 -0
  46. package/esm/events/cursor/DragStartEvent.js +7 -0
  47. package/esm/events/cursor/DragStopEvent.d.ts +5 -0
  48. package/esm/events/cursor/DragStopEvent.js +7 -0
  49. package/esm/events/cursor/MouseClickEvent.d.ts +8 -0
  50. package/esm/events/cursor/MouseClickEvent.js +13 -0
  51. package/esm/events/cursor/MouseMoveEvent.d.ts +5 -0
  52. package/esm/events/cursor/MouseMoveEvent.js +7 -0
  53. package/esm/events/cursor/index.d.ts +5 -0
  54. package/esm/events/cursor/index.js +5 -0
  55. package/esm/events/history/AbstractHistoryEvent.d.ts +6 -0
  56. package/esm/events/history/AbstractHistoryEvent.js +5 -0
  57. package/esm/events/history/HistoryGotoEvent.d.ts +5 -0
  58. package/esm/events/history/HistoryGotoEvent.js +7 -0
  59. package/esm/events/history/HistoryPushEvent.d.ts +5 -0
  60. package/esm/events/history/HistoryPushEvent.js +7 -0
  61. package/esm/events/history/HistoryRedoEvent.d.ts +5 -0
  62. package/esm/events/history/HistoryRedoEvent.js +7 -0
  63. package/esm/events/history/HistoryUndoEvent.d.ts +5 -0
  64. package/esm/events/history/HistoryUndoEvent.js +7 -0
  65. package/esm/events/history/index.d.ts +4 -0
  66. package/esm/events/history/index.js +4 -0
  67. package/esm/events/index.d.ts +6 -0
  68. package/esm/events/index.js +6 -0
  69. package/esm/events/keyboard/AbstractKeyboardEvent.d.ts +15 -0
  70. package/esm/events/keyboard/AbstractKeyboardEvent.js +38 -0
  71. package/esm/events/keyboard/KeyDownEvent.d.ts +5 -0
  72. package/esm/events/keyboard/KeyDownEvent.js +7 -0
  73. package/esm/events/keyboard/KeyUpEvent.d.ts +5 -0
  74. package/esm/events/keyboard/KeyUpEvent.js +7 -0
  75. package/esm/events/keyboard/index.d.ts +2 -0
  76. package/esm/events/keyboard/index.js +2 -0
  77. package/esm/events/mutation/AbstractMutationNodeEvent.d.ts +13 -0
  78. package/esm/events/mutation/AbstractMutationNodeEvent.js +5 -0
  79. package/esm/events/mutation/AppendNodeEvent.d.ts +5 -0
  80. package/esm/events/mutation/AppendNodeEvent.js +7 -0
  81. package/esm/events/mutation/CloneNodeEvent.d.ts +5 -0
  82. package/esm/events/mutation/CloneNodeEvent.js +7 -0
  83. package/esm/events/mutation/DragNodeEvent.d.ts +5 -0
  84. package/esm/events/mutation/DragNodeEvent.js +7 -0
  85. package/esm/events/mutation/DropNodeEvent.d.ts +5 -0
  86. package/esm/events/mutation/DropNodeEvent.js +7 -0
  87. package/esm/events/mutation/FromNodeEvent.d.ts +13 -0
  88. package/esm/events/mutation/FromNodeEvent.js +6 -0
  89. package/esm/events/mutation/HoverNodeEvent.d.ts +5 -0
  90. package/esm/events/mutation/HoverNodeEvent.js +7 -0
  91. package/esm/events/mutation/InsertAfterEvent.d.ts +5 -0
  92. package/esm/events/mutation/InsertAfterEvent.js +7 -0
  93. package/esm/events/mutation/InsertBeforeEvent.d.ts +5 -0
  94. package/esm/events/mutation/InsertBeforeEvent.js +7 -0
  95. package/esm/events/mutation/InsertChildrenEvent.d.ts +5 -0
  96. package/esm/events/mutation/InsertChildrenEvent.js +7 -0
  97. package/esm/events/mutation/PrependNodeEvent.d.ts +5 -0
  98. package/esm/events/mutation/PrependNodeEvent.js +7 -0
  99. package/esm/events/mutation/RemoveNodeEvent.d.ts +5 -0
  100. package/esm/events/mutation/RemoveNodeEvent.js +7 -0
  101. package/esm/events/mutation/SelectNodeEvent.d.ts +5 -0
  102. package/esm/events/mutation/SelectNodeEvent.js +7 -0
  103. package/esm/events/mutation/UnSelectNodeEvent.d.ts +5 -0
  104. package/esm/events/mutation/UnSelectNodeEvent.js +7 -0
  105. package/esm/events/mutation/UpdateChildrenEvent.d.ts +5 -0
  106. package/esm/events/mutation/UpdateChildrenEvent.js +7 -0
  107. package/esm/events/mutation/UpdateNodePropsEvent.d.ts +5 -0
  108. package/esm/events/mutation/UpdateNodePropsEvent.js +7 -0
  109. package/esm/events/mutation/UserSelectNodeEvent.d.ts +5 -0
  110. package/esm/events/mutation/UserSelectNodeEvent.js +7 -0
  111. package/esm/events/mutation/WrapNodeEvent.d.ts +5 -0
  112. package/esm/events/mutation/WrapNodeEvent.js +7 -0
  113. package/esm/events/mutation/index.d.ts +16 -0
  114. package/esm/events/mutation/index.js +16 -0
  115. package/esm/events/viewport/AbstractViewportEvent.d.ts +16 -0
  116. package/esm/events/viewport/AbstractViewportEvent.js +15 -0
  117. package/esm/events/viewport/ViewportResizeEvent.d.ts +5 -0
  118. package/esm/events/viewport/ViewportResizeEvent.js +7 -0
  119. package/esm/events/viewport/ViewportScrollEvent.d.ts +5 -0
  120. package/esm/events/viewport/ViewportScrollEvent.js +7 -0
  121. package/esm/events/viewport/index.d.ts +2 -0
  122. package/esm/events/viewport/index.js +2 -0
  123. package/esm/events/workbench/AbstractWorkspaceEvent.d.ts +7 -0
  124. package/esm/events/workbench/AbstractWorkspaceEvent.js +5 -0
  125. package/esm/events/workbench/AddWorkspaceEvent.d.ts +5 -0
  126. package/esm/events/workbench/AddWorkspaceEvent.js +7 -0
  127. package/esm/events/workbench/RemoveWorkspaceEvent.d.ts +5 -0
  128. package/esm/events/workbench/RemoveWorkspaceEvent.js +7 -0
  129. package/esm/events/workbench/SwitchWorkspaceEvent.d.ts +5 -0
  130. package/esm/events/workbench/SwitchWorkspaceEvent.js +7 -0
  131. package/esm/events/workbench/index.d.ts +3 -0
  132. package/esm/events/workbench/index.js +3 -0
  133. package/esm/exports.d.ts +5 -0
  134. package/esm/exports.js +5 -0
  135. package/esm/externals.d.ts +12 -0
  136. package/esm/externals.js +58 -0
  137. package/esm/index.d.ts +1 -0
  138. package/esm/index.js +15 -0
  139. package/esm/internals.d.ts +3 -0
  140. package/esm/internals.js +33 -0
  141. package/esm/models/Cursor.d.ts +60 -0
  142. package/esm/models/Cursor.js +133 -0
  143. package/esm/models/Engine.d.ts +29 -0
  144. package/esm/models/Engine.js +83 -0
  145. package/esm/models/History.d.ts +34 -0
  146. package/esm/models/History.js +96 -0
  147. package/esm/models/Hover.d.ts +14 -0
  148. package/esm/models/Hover.js +36 -0
  149. package/esm/models/Keyboard.d.ts +29 -0
  150. package/esm/models/Keyboard.js +102 -0
  151. package/esm/models/MoveHelper.d.ts +66 -0
  152. package/esm/models/MoveHelper.js +313 -0
  153. package/esm/models/Operation.d.ts +29 -0
  154. package/esm/models/Operation.js +66 -0
  155. package/esm/models/Screen.d.ts +31 -0
  156. package/esm/models/Screen.js +71 -0
  157. package/esm/models/Selection.d.ts +29 -0
  158. package/esm/models/Selection.js +155 -0
  159. package/esm/models/Shortcut.d.ts +20 -0
  160. package/esm/models/Shortcut.js +64 -0
  161. package/esm/models/SnapLine.d.ts +27 -0
  162. package/esm/models/SnapLine.js +110 -0
  163. package/esm/models/SpaceBlock.d.ts +40 -0
  164. package/esm/models/SpaceBlock.js +126 -0
  165. package/esm/models/TransformHelper.d.ts +80 -0
  166. package/esm/models/TransformHelper.js +455 -0
  167. package/esm/models/TreeNode.d.ts +115 -0
  168. package/esm/models/TreeNode.js +747 -0
  169. package/esm/models/Viewport.d.ts +90 -0
  170. package/esm/models/Viewport.js +393 -0
  171. package/esm/models/Workbench.d.ts +23 -0
  172. package/esm/models/Workbench.js +95 -0
  173. package/esm/models/Workspace.d.ts +41 -0
  174. package/esm/models/Workspace.js +92 -0
  175. package/esm/models/index.d.ts +13 -0
  176. package/esm/models/index.js +13 -0
  177. package/esm/presets.d.ts +4 -0
  178. package/esm/presets.js +38 -0
  179. package/esm/registry.d.ts +16 -0
  180. package/esm/registry.js +113 -0
  181. package/esm/shortcuts/CursorSwitch.d.ts +2 -0
  182. package/esm/shortcuts/CursorSwitch.js +10 -0
  183. package/esm/shortcuts/MultiSelection.d.ts +5 -0
  184. package/esm/shortcuts/MultiSelection.js +27 -0
  185. package/esm/shortcuts/NodeMutation.d.ts +7 -0
  186. package/esm/shortcuts/NodeMutation.js +40 -0
  187. package/esm/shortcuts/QuickSelection.d.ts +3 -0
  188. package/esm/shortcuts/QuickSelection.js +84 -0
  189. package/esm/shortcuts/UndoRedo.d.ts +3 -0
  190. package/esm/shortcuts/UndoRedo.js +27 -0
  191. package/esm/shortcuts/index.d.ts +5 -0
  192. package/esm/shortcuts/index.js +5 -0
  193. package/esm/types.d.ts +131 -0
  194. package/esm/types.js +1 -0
  195. package/lib/drivers/DragDropDriver.d.ts +14 -0
  196. package/lib/drivers/DragDropDriver.js +115 -0
  197. package/lib/drivers/KeyboardDriver.d.ts +7 -0
  198. package/lib/drivers/KeyboardDriver.js +50 -0
  199. package/lib/drivers/MouseClickDriver.d.ts +8 -0
  200. package/lib/drivers/MouseClickDriver.js +55 -0
  201. package/lib/drivers/MouseMoveDriver.d.ts +8 -0
  202. package/lib/drivers/MouseMoveDriver.js +35 -0
  203. package/lib/drivers/ViewportResizeDriver.d.ts +11 -0
  204. package/lib/drivers/ViewportResizeDriver.js +68 -0
  205. package/lib/drivers/ViewportScrollDriver.d.ts +8 -0
  206. package/lib/drivers/ViewportScrollDriver.js +34 -0
  207. package/lib/drivers/index.d.ts +6 -0
  208. package/lib/drivers/index.js +22 -0
  209. package/lib/effects/index.d.ts +11 -0
  210. package/lib/effects/index.js +27 -0
  211. package/lib/effects/useAutoScrollEffect.d.ts +2 -0
  212. package/lib/effects/useAutoScrollEffect.js +69 -0
  213. package/lib/effects/useContentEditableEffect.d.ts +2 -0
  214. package/lib/effects/useContentEditableEffect.js +167 -0
  215. package/lib/effects/useCursorEffect.d.ts +2 -0
  216. package/lib/effects/useCursorEffect.js +61 -0
  217. package/lib/effects/useDragDropEffect.d.ts +2 -0
  218. package/lib/effects/useDragDropEffect.js +159 -0
  219. package/lib/effects/useFreeSelectionEffect.d.ts +2 -0
  220. package/lib/effects/useFreeSelectionEffect.js +43 -0
  221. package/lib/effects/useKeyboardEffect.d.ts +2 -0
  222. package/lib/effects/useKeyboardEffect.js +21 -0
  223. package/lib/effects/useResizeEffect.d.ts +2 -0
  224. package/lib/effects/useResizeEffect.js +81 -0
  225. package/lib/effects/useSelectionEffect.d.ts +2 -0
  226. package/lib/effects/useSelectionEffect.js +74 -0
  227. package/lib/effects/useTranslateEffect.d.ts +2 -0
  228. package/lib/effects/useTranslateEffect.js +59 -0
  229. package/lib/effects/useViewportEffect.d.ts +2 -0
  230. package/lib/effects/useViewportEffect.js +33 -0
  231. package/lib/effects/useWorkspaceEffect.d.ts +2 -0
  232. package/lib/effects/useWorkspaceEffect.js +32 -0
  233. package/lib/events/cursor/AbstractCursorEvent.d.ts +21 -0
  234. package/lib/events/cursor/AbstractCursorEvent.js +41 -0
  235. package/lib/events/cursor/DragMoveEvent.d.ts +5 -0
  236. package/lib/events/cursor/DragMoveEvent.js +11 -0
  237. package/lib/events/cursor/DragStartEvent.d.ts +5 -0
  238. package/lib/events/cursor/DragStartEvent.js +11 -0
  239. package/lib/events/cursor/DragStopEvent.d.ts +5 -0
  240. package/lib/events/cursor/DragStopEvent.js +11 -0
  241. package/lib/events/cursor/MouseClickEvent.d.ts +8 -0
  242. package/lib/events/cursor/MouseClickEvent.js +18 -0
  243. package/lib/events/cursor/MouseMoveEvent.d.ts +5 -0
  244. package/lib/events/cursor/MouseMoveEvent.js +11 -0
  245. package/lib/events/cursor/index.d.ts +5 -0
  246. package/lib/events/cursor/index.js +21 -0
  247. package/lib/events/history/AbstractHistoryEvent.d.ts +6 -0
  248. package/lib/events/history/AbstractHistoryEvent.js +9 -0
  249. package/lib/events/history/HistoryGotoEvent.d.ts +5 -0
  250. package/lib/events/history/HistoryGotoEvent.js +11 -0
  251. package/lib/events/history/HistoryPushEvent.d.ts +5 -0
  252. package/lib/events/history/HistoryPushEvent.js +11 -0
  253. package/lib/events/history/HistoryRedoEvent.d.ts +5 -0
  254. package/lib/events/history/HistoryRedoEvent.js +11 -0
  255. package/lib/events/history/HistoryUndoEvent.d.ts +5 -0
  256. package/lib/events/history/HistoryUndoEvent.js +11 -0
  257. package/lib/events/history/index.d.ts +4 -0
  258. package/lib/events/history/index.js +20 -0
  259. package/lib/events/index.d.ts +6 -0
  260. package/lib/events/index.js +22 -0
  261. package/lib/events/keyboard/AbstractKeyboardEvent.d.ts +15 -0
  262. package/lib/events/keyboard/AbstractKeyboardEvent.js +42 -0
  263. package/lib/events/keyboard/KeyDownEvent.d.ts +5 -0
  264. package/lib/events/keyboard/KeyDownEvent.js +11 -0
  265. package/lib/events/keyboard/KeyUpEvent.d.ts +5 -0
  266. package/lib/events/keyboard/KeyUpEvent.js +11 -0
  267. package/lib/events/keyboard/index.d.ts +2 -0
  268. package/lib/events/keyboard/index.js +18 -0
  269. package/lib/events/mutation/AbstractMutationNodeEvent.d.ts +13 -0
  270. package/lib/events/mutation/AbstractMutationNodeEvent.js +9 -0
  271. package/lib/events/mutation/AppendNodeEvent.d.ts +5 -0
  272. package/lib/events/mutation/AppendNodeEvent.js +11 -0
  273. package/lib/events/mutation/CloneNodeEvent.d.ts +5 -0
  274. package/lib/events/mutation/CloneNodeEvent.js +11 -0
  275. package/lib/events/mutation/DragNodeEvent.d.ts +5 -0
  276. package/lib/events/mutation/DragNodeEvent.js +11 -0
  277. package/lib/events/mutation/DropNodeEvent.d.ts +5 -0
  278. package/lib/events/mutation/DropNodeEvent.js +11 -0
  279. package/lib/events/mutation/FromNodeEvent.d.ts +13 -0
  280. package/lib/events/mutation/FromNodeEvent.js +10 -0
  281. package/lib/events/mutation/HoverNodeEvent.d.ts +5 -0
  282. package/lib/events/mutation/HoverNodeEvent.js +11 -0
  283. package/lib/events/mutation/InsertAfterEvent.d.ts +5 -0
  284. package/lib/events/mutation/InsertAfterEvent.js +11 -0
  285. package/lib/events/mutation/InsertBeforeEvent.d.ts +5 -0
  286. package/lib/events/mutation/InsertBeforeEvent.js +11 -0
  287. package/lib/events/mutation/InsertChildrenEvent.d.ts +5 -0
  288. package/lib/events/mutation/InsertChildrenEvent.js +11 -0
  289. package/lib/events/mutation/PrependNodeEvent.d.ts +5 -0
  290. package/lib/events/mutation/PrependNodeEvent.js +11 -0
  291. package/lib/events/mutation/RemoveNodeEvent.d.ts +5 -0
  292. package/lib/events/mutation/RemoveNodeEvent.js +11 -0
  293. package/lib/events/mutation/SelectNodeEvent.d.ts +5 -0
  294. package/lib/events/mutation/SelectNodeEvent.js +11 -0
  295. package/lib/events/mutation/UnSelectNodeEvent.d.ts +5 -0
  296. package/lib/events/mutation/UnSelectNodeEvent.js +11 -0
  297. package/lib/events/mutation/UpdateChildrenEvent.d.ts +5 -0
  298. package/lib/events/mutation/UpdateChildrenEvent.js +11 -0
  299. package/lib/events/mutation/UpdateNodePropsEvent.d.ts +5 -0
  300. package/lib/events/mutation/UpdateNodePropsEvent.js +11 -0
  301. package/lib/events/mutation/UserSelectNodeEvent.d.ts +5 -0
  302. package/lib/events/mutation/UserSelectNodeEvent.js +11 -0
  303. package/lib/events/mutation/WrapNodeEvent.d.ts +5 -0
  304. package/lib/events/mutation/WrapNodeEvent.js +11 -0
  305. package/lib/events/mutation/index.d.ts +16 -0
  306. package/lib/events/mutation/index.js +32 -0
  307. package/lib/events/viewport/AbstractViewportEvent.d.ts +16 -0
  308. package/lib/events/viewport/AbstractViewportEvent.js +19 -0
  309. package/lib/events/viewport/ViewportResizeEvent.d.ts +5 -0
  310. package/lib/events/viewport/ViewportResizeEvent.js +11 -0
  311. package/lib/events/viewport/ViewportScrollEvent.d.ts +5 -0
  312. package/lib/events/viewport/ViewportScrollEvent.js +11 -0
  313. package/lib/events/viewport/index.d.ts +2 -0
  314. package/lib/events/viewport/index.js +18 -0
  315. package/lib/events/workbench/AbstractWorkspaceEvent.d.ts +7 -0
  316. package/lib/events/workbench/AbstractWorkspaceEvent.js +9 -0
  317. package/lib/events/workbench/AddWorkspaceEvent.d.ts +5 -0
  318. package/lib/events/workbench/AddWorkspaceEvent.js +11 -0
  319. package/lib/events/workbench/RemoveWorkspaceEvent.d.ts +5 -0
  320. package/lib/events/workbench/RemoveWorkspaceEvent.js +11 -0
  321. package/lib/events/workbench/SwitchWorkspaceEvent.d.ts +5 -0
  322. package/lib/events/workbench/SwitchWorkspaceEvent.js +11 -0
  323. package/lib/events/workbench/index.d.ts +3 -0
  324. package/lib/events/workbench/index.js +19 -0
  325. package/lib/exports.d.ts +5 -0
  326. package/lib/exports.js +21 -0
  327. package/lib/externals.d.ts +12 -0
  328. package/lib/externals.js +71 -0
  329. package/lib/index.d.ts +1 -0
  330. package/lib/index.js +43 -0
  331. package/lib/internals.d.ts +3 -0
  332. package/lib/internals.js +39 -0
  333. package/lib/models/Cursor.d.ts +60 -0
  334. package/lib/models/Cursor.js +137 -0
  335. package/lib/models/Engine.d.ts +29 -0
  336. package/lib/models/Engine.js +87 -0
  337. package/lib/models/History.d.ts +34 -0
  338. package/lib/models/History.js +100 -0
  339. package/lib/models/Hover.d.ts +14 -0
  340. package/lib/models/Hover.js +40 -0
  341. package/lib/models/Keyboard.d.ts +29 -0
  342. package/lib/models/Keyboard.js +106 -0
  343. package/lib/models/MoveHelper.d.ts +66 -0
  344. package/lib/models/MoveHelper.js +317 -0
  345. package/lib/models/Operation.d.ts +29 -0
  346. package/lib/models/Operation.js +70 -0
  347. package/lib/models/Screen.d.ts +31 -0
  348. package/lib/models/Screen.js +75 -0
  349. package/lib/models/Selection.d.ts +29 -0
  350. package/lib/models/Selection.js +159 -0
  351. package/lib/models/Shortcut.d.ts +20 -0
  352. package/lib/models/Shortcut.js +68 -0
  353. package/lib/models/SnapLine.d.ts +27 -0
  354. package/lib/models/SnapLine.js +114 -0
  355. package/lib/models/SpaceBlock.d.ts +40 -0
  356. package/lib/models/SpaceBlock.js +130 -0
  357. package/lib/models/TransformHelper.d.ts +80 -0
  358. package/lib/models/TransformHelper.js +459 -0
  359. package/lib/models/TreeNode.d.ts +115 -0
  360. package/lib/models/TreeNode.js +751 -0
  361. package/lib/models/Viewport.d.ts +90 -0
  362. package/lib/models/Viewport.js +397 -0
  363. package/lib/models/Workbench.d.ts +23 -0
  364. package/lib/models/Workbench.js +99 -0
  365. package/lib/models/Workspace.d.ts +41 -0
  366. package/lib/models/Workspace.js +96 -0
  367. package/lib/models/index.d.ts +13 -0
  368. package/lib/models/index.js +29 -0
  369. package/lib/presets.d.ts +4 -0
  370. package/lib/presets.js +41 -0
  371. package/lib/registry.d.ts +16 -0
  372. package/lib/registry.js +116 -0
  373. package/lib/shortcuts/CursorSwitch.d.ts +2 -0
  374. package/lib/shortcuts/CursorSwitch.js +13 -0
  375. package/lib/shortcuts/MultiSelection.d.ts +5 -0
  376. package/lib/shortcuts/MultiSelection.js +30 -0
  377. package/lib/shortcuts/NodeMutation.d.ts +7 -0
  378. package/lib/shortcuts/NodeMutation.js +43 -0
  379. package/lib/shortcuts/QuickSelection.d.ts +3 -0
  380. package/lib/shortcuts/QuickSelection.js +87 -0
  381. package/lib/shortcuts/UndoRedo.d.ts +3 -0
  382. package/lib/shortcuts/UndoRedo.js +30 -0
  383. package/lib/shortcuts/index.d.ts +5 -0
  384. package/lib/shortcuts/index.js +21 -0
  385. package/lib/types.d.ts +131 -0
  386. package/lib/types.js +2 -0
  387. package/package.json +48 -0
@@ -0,0 +1,80 @@
1
+ import { Point, IPoint, ISize, IRect, Rect } from '@thienvu18/designable-shared';
2
+ import { SpaceBlock, AroundSpaceBlock } from './SpaceBlock';
3
+ import { Operation } from './Operation';
4
+ import { TreeNode } from './TreeNode';
5
+ import { SnapLine, ISnapLine } from './SnapLine';
6
+ export interface ITransformHelperProps {
7
+ operation: Operation;
8
+ }
9
+ export type TransformHelperType = 'translate' | 'resize' | 'rotate' | 'scale' | 'round';
10
+ export type ResizeDirection = 'left-top' | 'left-center' | 'left-bottom' | 'center-top' | 'center-bottom' | 'right-top' | 'right-bottom' | 'right-center' | (string & {});
11
+ export interface ITransformHelperDragStartProps {
12
+ type: TransformHelperType;
13
+ direction?: ResizeDirection;
14
+ dragNodes: TreeNode[];
15
+ }
16
+ export declare class TransformHelper {
17
+ operation: Operation;
18
+ type: TransformHelperType;
19
+ direction: ResizeDirection;
20
+ dragNodes: TreeNode[];
21
+ rulerSnapLines: SnapLine[];
22
+ aroundSnapLines: SnapLine[];
23
+ aroundSpaceBlocks: AroundSpaceBlock;
24
+ viewportRectsStore: Record<string, Rect>;
25
+ dragStartTranslateStore: Record<string, IPoint>;
26
+ dragStartSizeStore: Record<string, ISize>;
27
+ draggingNodesRect: Rect;
28
+ cacheDragNodesReact: Rect;
29
+ dragStartNodesRect: IRect;
30
+ snapping: boolean;
31
+ dragging: boolean;
32
+ snapped: boolean;
33
+ constructor(props: ITransformHelperProps);
34
+ get tree(): TreeNode;
35
+ get cursor(): import("./Cursor").Cursor;
36
+ get viewport(): import("./Viewport").Viewport;
37
+ get deltaX(): number;
38
+ get deltaY(): number;
39
+ get cursorPosition(): {
40
+ x: number;
41
+ y: number;
42
+ };
43
+ get cursorDragNodesRect(): Rect;
44
+ get cursorDragNodesEdgeLines(): import("@thienvu18/designable-shared").IRectEdgeLines;
45
+ get dragNodesRect(): Rect;
46
+ get dragNodesEdgeLines(): import("@thienvu18/designable-shared").IRectEdgeLines;
47
+ get cursorOffset(): Point;
48
+ get dragStartCursor(): {
49
+ x: number;
50
+ y: number;
51
+ };
52
+ get dragStartCursorOffset(): Point;
53
+ get closestSnapLines(): SnapLine[];
54
+ get closestSpaceBlocks(): SpaceBlock[];
55
+ get thresholdSnapLines(): SnapLine[];
56
+ get thresholdSpaceBlocks(): SpaceBlock[];
57
+ get measurerSpaceBlocks(): SpaceBlock[];
58
+ calcBaseTranslate(node: TreeNode): {
59
+ x: number;
60
+ y: number;
61
+ };
62
+ calcBaseResize(node: TreeNode): Rect;
63
+ calcDragStartStore(nodes?: TreeNode[]): void;
64
+ calcRulerSnapLines(dragNodesRect: IRect): SnapLine[];
65
+ calcAroundSnapLines(dragNodesRect: Rect): SnapLine[];
66
+ calcAroundSpaceBlocks(dragNodesRect: IRect): AroundSpaceBlock;
67
+ calcViewportNodes(): void;
68
+ getNodeRect(node: TreeNode): Rect;
69
+ eachViewportNodes(visitor: (node: TreeNode, rect: Rect) => void): void;
70
+ translate(node: TreeNode, handler: (translate: IPoint) => void): void;
71
+ resize(node: TreeNode, handler: (resize: IRect) => void): void;
72
+ findRulerSnapLine(id: string): SnapLine;
73
+ addRulerSnapLine(line: ISnapLine): void;
74
+ removeRulerSnapLine(id: string): void;
75
+ dragStart(props: ITransformHelperDragStartProps): void;
76
+ dragMove(): void;
77
+ dragEnd(): void;
78
+ makeObservable(): void;
79
+ static threshold: number;
80
+ }
@@ -0,0 +1,459 @@
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
+ 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);
48
+ }
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
+ }
71
+ }
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
+ }
160
+ }
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
+ }
457
+ }
458
+ exports.TransformHelper = TransformHelper;
459
+ TransformHelper.threshold = 6;
@@ -0,0 +1,115 @@
1
+ import { Operation } from './Operation';
2
+ import { IDesignerProps, IDesignerLocales } from '../types';
3
+ export interface ITreeNode {
4
+ componentName?: string;
5
+ sourceName?: string;
6
+ operation?: Operation;
7
+ hidden?: boolean;
8
+ isSourceNode?: boolean;
9
+ id?: string;
10
+ props?: Record<string | number | symbol, any>;
11
+ children?: ITreeNode[];
12
+ }
13
+ export interface INodeFinder {
14
+ (node: TreeNode): boolean;
15
+ }
16
+ export declare class TreeNode {
17
+ parent: TreeNode;
18
+ root: TreeNode;
19
+ rootOperation: Operation;
20
+ id: string;
21
+ depth: number;
22
+ hidden: boolean;
23
+ componentName: string;
24
+ sourceName: string;
25
+ props: ITreeNode['props'];
26
+ children: TreeNode[];
27
+ isSelfSourceNode: boolean;
28
+ constructor(node?: ITreeNode, parent?: TreeNode);
29
+ makeObservable(): void;
30
+ get designerProps(): IDesignerProps;
31
+ get designerLocales(): IDesignerLocales;
32
+ get previous(): TreeNode;
33
+ get next(): TreeNode;
34
+ get siblings(): TreeNode[];
35
+ get index(): number;
36
+ get descendants(): TreeNode[];
37
+ get isRoot(): boolean;
38
+ get isInOperation(): boolean;
39
+ get lastChild(): TreeNode;
40
+ get firstChild(): TreeNode;
41
+ get isSourceNode(): boolean;
42
+ get operation(): Operation;
43
+ get viewport(): import("./Viewport").Viewport;
44
+ get outline(): import("./Viewport").Viewport;
45
+ get moveLayout(): "vertical" | "horizontal";
46
+ getElement(area?: 'viewport' | 'outline'): HTMLElement;
47
+ getValidElement(area?: 'viewport' | 'outline'): Element;
48
+ getElementRect(area?: 'viewport' | 'outline'): import("@thienvu18/designable-shared").Rect;
49
+ getValidElementRect(area?: 'viewport' | 'outline'): import("@thienvu18/designable-shared").Rect;
50
+ getElementOffsetRect(area?: 'viewport' | 'outline'): import("@thienvu18/designable-shared").Rect;
51
+ getValidElementOffsetRect(area?: 'viewport' | 'outline'): import("@thienvu18/designable-shared").Rect;
52
+ getPrevious(step?: number): TreeNode;
53
+ getAfter(step?: number): TreeNode;
54
+ getSibling(index?: number): TreeNode;
55
+ getParents(node?: TreeNode): TreeNode[];
56
+ getParentByDepth(depth?: number): any;
57
+ getMessage(token: string): any;
58
+ isMyAncestor(node: TreeNode): boolean;
59
+ isMyParent(node: TreeNode): boolean;
60
+ isMyParents(node: TreeNode): boolean;
61
+ isMyChild(node: TreeNode): boolean;
62
+ isMyChildren(node: TreeNode): boolean;
63
+ takeSnapshot(type?: string): void;
64
+ triggerMutation<T>(event: any, callback?: () => T, defaults?: T): T;
65
+ find(finder: INodeFinder): TreeNode;
66
+ findAll(finder: INodeFinder): TreeNode[];
67
+ distanceTo(node: TreeNode): number;
68
+ crossSiblings(node: TreeNode): TreeNode[];
69
+ allowSibling(nodes: TreeNode[]): boolean;
70
+ allowDrop(parent: TreeNode): boolean;
71
+ allowAppend(nodes: TreeNode[]): boolean;
72
+ allowClone(): boolean;
73
+ allowDrag(): boolean;
74
+ allowResize(): false | Array<'x' | 'y'>;
75
+ allowRotate(): void;
76
+ allowRound(): void;
77
+ allowScale(): void;
78
+ allowTranslate(): boolean;
79
+ allowDelete(): boolean;
80
+ findById(id: string): TreeNode;
81
+ contains(...nodes: TreeNode[]): boolean;
82
+ eachTree(callback?: (node: TreeNode) => void | boolean): void;
83
+ eachChildren(callback?: (node: TreeNode) => void | boolean): void;
84
+ resetNodesParent(nodes: TreeNode[], parent: TreeNode): TreeNode[];
85
+ setProps(props?: any): void;
86
+ setComponentName(componentName: string): void;
87
+ prepend(...nodes: TreeNode[]): TreeNode[];
88
+ append(...nodes: TreeNode[]): TreeNode[];
89
+ wrap(wrapper: TreeNode): TreeNode;
90
+ insertAfter(...nodes: TreeNode[]): TreeNode[];
91
+ insertBefore(...nodes: TreeNode[]): TreeNode[];
92
+ insertChildren(start: number, ...nodes: TreeNode[]): TreeNode[];
93
+ setChildren(...nodes: TreeNode[]): TreeNode[];
94
+ /**
95
+ * @deprecated
96
+ * please use `setChildren`
97
+ */
98
+ setNodeChildren(...nodes: TreeNode[]): TreeNode[];
99
+ remove(): void;
100
+ clone(parent?: TreeNode): TreeNode;
101
+ from(node?: ITreeNode): void;
102
+ serialize(): ITreeNode;
103
+ static create(node: ITreeNode, parent?: TreeNode): TreeNode;
104
+ static findById(id: string): TreeNode;
105
+ static remove(nodes?: TreeNode[]): void;
106
+ static sort(nodes?: TreeNode[]): TreeNode[];
107
+ static clone(nodes?: TreeNode[]): void;
108
+ static filterResizable(nodes?: TreeNode[]): TreeNode[];
109
+ static filterRotatable(nodes?: TreeNode[]): TreeNode[];
110
+ static filterScalable(nodes?: TreeNode[]): TreeNode[];
111
+ static filterRoundable(nodes?: TreeNode[]): TreeNode[];
112
+ static filterTranslatable(nodes?: TreeNode[]): TreeNode[];
113
+ static filterDraggable(nodes?: TreeNode[]): any[];
114
+ static filterDroppable(nodes: TreeNode[], parent: TreeNode): any[];
115
+ }