@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,747 @@
1
+ import { action, define, observable, toJS } from '@formily/reactive';
2
+ import { uid, isFn, each } from '@thienvu18/designable-shared';
3
+ import { InsertBeforeEvent, InsertAfterEvent, InsertChildrenEvent, PrependNodeEvent, AppendNodeEvent, WrapNodeEvent, UpdateChildrenEvent, RemoveNodeEvent, UpdateNodePropsEvent, CloneNodeEvent, FromNodeEvent, } from '../events';
4
+ import { GlobalRegistry } from '../registry';
5
+ import { mergeLocales } from '../internals';
6
+ const TreeNodes = new Map();
7
+ const CommonDesignerPropsMap = new Map();
8
+ const removeNode = (node) => {
9
+ if (node.parent) {
10
+ node.parent.children = node.parent.children.filter((child) => child !== node);
11
+ }
12
+ };
13
+ const resetNodesParent = (nodes, parent) => {
14
+ const resetDepth = (node) => {
15
+ node.depth = node.parent ? node.parent.depth + 1 : 0;
16
+ node.children.forEach(resetDepth);
17
+ };
18
+ const shallowReset = (node) => {
19
+ node.parent = parent;
20
+ node.root = parent.root;
21
+ resetDepth(node);
22
+ };
23
+ const deepReset = (node) => {
24
+ shallowReset(node);
25
+ resetNodesParent(node.children, node);
26
+ };
27
+ return nodes.map((node) => {
28
+ if (node === parent)
29
+ return node;
30
+ if (!parent.isSourceNode) {
31
+ if (node.isSourceNode) {
32
+ node = node.clone(parent);
33
+ resetDepth(node);
34
+ }
35
+ else if (!node.isRoot && node.isInOperation) {
36
+ node.operation?.selection.remove(node);
37
+ removeNode(node);
38
+ shallowReset(node);
39
+ }
40
+ else {
41
+ deepReset(node);
42
+ }
43
+ }
44
+ else {
45
+ deepReset(node);
46
+ }
47
+ if (!TreeNodes.has(node.id)) {
48
+ TreeNodes.set(node.id, node);
49
+ CommonDesignerPropsMap.set(node.componentName, node.designerProps);
50
+ }
51
+ return node;
52
+ });
53
+ };
54
+ const resetParent = (node, parent) => {
55
+ return resetNodesParent([node], parent)[0];
56
+ };
57
+ const resolveDesignerProps = (node, props) => {
58
+ if (isFn(props))
59
+ return props(node);
60
+ return props;
61
+ };
62
+ export class TreeNode {
63
+ constructor(node, parent) {
64
+ this.depth = 0;
65
+ this.hidden = false;
66
+ this.componentName = 'NO_NAME_COMPONENT';
67
+ this.sourceName = '';
68
+ this.props = {};
69
+ this.children = [];
70
+ if (node instanceof TreeNode) {
71
+ return node;
72
+ }
73
+ this.id = node.id || uid();
74
+ if (parent) {
75
+ this.parent = parent;
76
+ this.depth = parent.depth + 1;
77
+ this.root = parent.root;
78
+ TreeNodes.set(this.id, this);
79
+ }
80
+ else {
81
+ this.root = this;
82
+ this.rootOperation = node.operation;
83
+ this.isSelfSourceNode = node.isSourceNode || false;
84
+ TreeNodes.set(this.id, this);
85
+ }
86
+ if (node) {
87
+ this.from(node);
88
+ }
89
+ this.makeObservable();
90
+ }
91
+ makeObservable() {
92
+ define(this, {
93
+ componentName: observable.ref,
94
+ props: observable,
95
+ hidden: observable.ref,
96
+ children: observable.shallow,
97
+ designerProps: observable.computed,
98
+ designerLocales: observable.computed,
99
+ wrap: action,
100
+ prepend: action,
101
+ append: action,
102
+ insertAfter: action,
103
+ insertBefore: action,
104
+ remove: action,
105
+ setProps: action,
106
+ setChildren: action,
107
+ setComponentName: action,
108
+ });
109
+ }
110
+ get designerProps() {
111
+ const behaviors = GlobalRegistry.getDesignerBehaviors(this);
112
+ const designerProps = behaviors.reduce((buf, pattern) => {
113
+ if (!pattern.designerProps)
114
+ return buf;
115
+ Object.assign(buf, resolveDesignerProps(this, pattern.designerProps));
116
+ return buf;
117
+ }, {});
118
+ return designerProps;
119
+ }
120
+ get designerLocales() {
121
+ const behaviors = GlobalRegistry.getDesignerBehaviors(this);
122
+ const designerLocales = behaviors.reduce((buf, pattern) => {
123
+ if (!pattern.designerLocales)
124
+ return buf;
125
+ mergeLocales(buf, pattern.designerLocales);
126
+ return buf;
127
+ }, {});
128
+ return designerLocales;
129
+ }
130
+ get previous() {
131
+ if (this.parent === this || !this.parent)
132
+ return;
133
+ return this.parent.children[this.index - 1];
134
+ }
135
+ get next() {
136
+ if (this.parent === this || !this.parent)
137
+ return;
138
+ return this.parent.children[this.index + 1];
139
+ }
140
+ get siblings() {
141
+ if (this.parent) {
142
+ return this.parent.children.filter((node) => node !== this);
143
+ }
144
+ return [];
145
+ }
146
+ get index() {
147
+ if (this.parent === this || !this.parent)
148
+ return 0;
149
+ return this.parent.children.indexOf(this);
150
+ }
151
+ get descendants() {
152
+ return this.children.reduce((buf, node) => {
153
+ return buf.concat(node).concat(node.descendants);
154
+ }, []);
155
+ }
156
+ get isRoot() {
157
+ return this === this.root;
158
+ }
159
+ get isInOperation() {
160
+ return !!this.operation;
161
+ }
162
+ get lastChild() {
163
+ return this.children[this.children.length - 1];
164
+ }
165
+ get firstChild() {
166
+ return this.children[0];
167
+ }
168
+ get isSourceNode() {
169
+ return this.root.isSelfSourceNode;
170
+ }
171
+ get operation() {
172
+ return this.root?.rootOperation;
173
+ }
174
+ get viewport() {
175
+ return this.operation?.workspace?.viewport;
176
+ }
177
+ get outline() {
178
+ return this.operation?.workspace?.outline;
179
+ }
180
+ get moveLayout() {
181
+ return this.viewport?.getValidNodeLayout(this);
182
+ }
183
+ getElement(area = 'viewport') {
184
+ return this[area]?.findElementById(this.id);
185
+ }
186
+ getValidElement(area = 'viewport') {
187
+ return this[area]?.getValidNodeElement(this);
188
+ }
189
+ getElementRect(area = 'viewport') {
190
+ return this[area]?.getElementRect(this.getElement(area));
191
+ }
192
+ getValidElementRect(area = 'viewport') {
193
+ return this[area]?.getValidNodeRect(this);
194
+ }
195
+ getElementOffsetRect(area = 'viewport') {
196
+ return this[area]?.getElementOffsetRect(this.getElement(area));
197
+ }
198
+ getValidElementOffsetRect(area = 'viewport') {
199
+ return this[area]?.getValidNodeOffsetRect(this);
200
+ }
201
+ getPrevious(step = 1) {
202
+ return this.parent.children[this.index - step];
203
+ }
204
+ getAfter(step = 1) {
205
+ return this.parent.children[this.index + step];
206
+ }
207
+ getSibling(index = 0) {
208
+ return this.parent.children[index];
209
+ }
210
+ getParents(node) {
211
+ const _node = node || this;
212
+ return _node?.parent
213
+ ? [_node.parent].concat(this.getParents(_node.parent))
214
+ : [];
215
+ }
216
+ getParentByDepth(depth = 0) {
217
+ let parent = this.parent;
218
+ if (parent?.depth === depth) {
219
+ return parent;
220
+ }
221
+ else {
222
+ return parent?.getParentByDepth(depth);
223
+ }
224
+ }
225
+ getMessage(token) {
226
+ return GlobalRegistry.getDesignerMessage(token, this.designerLocales);
227
+ }
228
+ isMyAncestor(node) {
229
+ if (node === this || this.parent === node)
230
+ return false;
231
+ return node.contains(this);
232
+ }
233
+ isMyParent(node) {
234
+ return this.parent === node;
235
+ }
236
+ isMyParents(node) {
237
+ if (node === this)
238
+ return false;
239
+ return this.isMyParent(node) || this.isMyAncestor(node);
240
+ }
241
+ isMyChild(node) {
242
+ return node.isMyParent(this);
243
+ }
244
+ isMyChildren(node) {
245
+ return node.isMyParents(this);
246
+ }
247
+ takeSnapshot(type) {
248
+ this.operation?.snapshot(type);
249
+ }
250
+ triggerMutation(event, callback, defaults) {
251
+ if (this.operation) {
252
+ const result = this.operation.dispatch(event, callback) ?? defaults;
253
+ this.takeSnapshot(event?.type);
254
+ return result;
255
+ }
256
+ else if (isFn(callback)) {
257
+ return callback();
258
+ }
259
+ return defaults;
260
+ }
261
+ find(finder) {
262
+ if (finder(this)) {
263
+ return this;
264
+ }
265
+ else {
266
+ let result = undefined;
267
+ this.eachChildren((node) => {
268
+ if (finder(node)) {
269
+ result = node;
270
+ return false;
271
+ }
272
+ });
273
+ return result;
274
+ }
275
+ }
276
+ findAll(finder) {
277
+ const results = [];
278
+ if (finder(this)) {
279
+ results.push(this);
280
+ }
281
+ this.eachChildren((node) => {
282
+ if (finder(node)) {
283
+ results.push(node);
284
+ }
285
+ });
286
+ return results;
287
+ }
288
+ distanceTo(node) {
289
+ if (this.root !== node.root) {
290
+ return Infinity;
291
+ }
292
+ if (this.parent !== node.parent) {
293
+ return Infinity;
294
+ }
295
+ return Math.abs(this.index - node.index);
296
+ }
297
+ crossSiblings(node) {
298
+ if (this.parent !== node.parent)
299
+ return [];
300
+ const minIndex = Math.min(this.index, node.index);
301
+ const maxIndex = Math.max(this.index, node.index);
302
+ const results = [];
303
+ for (let i = minIndex + 1; i < maxIndex; i++) {
304
+ results.push(this.parent.children[i]);
305
+ }
306
+ return results;
307
+ }
308
+ allowSibling(nodes) {
309
+ if (this.designerProps?.allowSiblings?.(this, nodes) === false)
310
+ return false;
311
+ return this.parent?.allowAppend(nodes);
312
+ }
313
+ allowDrop(parent) {
314
+ if (!isFn(this.designerProps.allowDrop))
315
+ return true;
316
+ return this.designerProps.allowDrop(parent);
317
+ }
318
+ allowAppend(nodes) {
319
+ if (!this.designerProps?.droppable)
320
+ return false;
321
+ if (this.designerProps?.allowAppend?.(this, nodes) === false)
322
+ return false;
323
+ if (nodes.some((node) => !node.allowDrop(this)))
324
+ return false;
325
+ if (this.root === this)
326
+ return true;
327
+ return true;
328
+ }
329
+ allowClone() {
330
+ if (this === this.root)
331
+ return false;
332
+ return this.designerProps.cloneable ?? true;
333
+ }
334
+ allowDrag() {
335
+ if (this === this.root && !this.isSourceNode)
336
+ return false;
337
+ return this.designerProps.draggable ?? true;
338
+ }
339
+ allowResize() {
340
+ if (this === this.root && !this.isSourceNode)
341
+ return false;
342
+ const { resizable } = this.designerProps;
343
+ if (!resizable)
344
+ return false;
345
+ if (resizable.width && resizable.height)
346
+ return ['x', 'y'];
347
+ if (resizable.width)
348
+ return ['x'];
349
+ return ['y'];
350
+ }
351
+ allowRotate() { }
352
+ allowRound() { }
353
+ allowScale() { }
354
+ allowTranslate() {
355
+ if (this === this.root && !this.isSourceNode)
356
+ return false;
357
+ const { translatable } = this.designerProps;
358
+ if (translatable?.x && translatable?.y)
359
+ return true;
360
+ return false;
361
+ }
362
+ allowDelete() {
363
+ if (this === this.root)
364
+ return false;
365
+ return this.designerProps.deletable ?? true;
366
+ }
367
+ findById(id) {
368
+ if (!id)
369
+ return;
370
+ if (this.id === id)
371
+ return this;
372
+ if (this.children?.length > 0) {
373
+ return TreeNodes.get(id);
374
+ }
375
+ }
376
+ contains(...nodes) {
377
+ return nodes.every((node) => {
378
+ if (node === this ||
379
+ node?.parent === this ||
380
+ node?.getParentByDepth(this.depth) === this) {
381
+ return true;
382
+ }
383
+ return false;
384
+ });
385
+ }
386
+ eachTree(callback) {
387
+ if (isFn(callback)) {
388
+ callback(this.root);
389
+ this.root?.eachChildren(callback);
390
+ }
391
+ }
392
+ eachChildren(callback) {
393
+ if (isFn(callback)) {
394
+ for (let i = 0; i < this.children.length; i++) {
395
+ const node = this.children[i];
396
+ if (callback(node) === false)
397
+ return;
398
+ node.eachChildren(callback);
399
+ }
400
+ }
401
+ }
402
+ resetNodesParent(nodes, parent) {
403
+ return resetNodesParent(nodes.filter((node) => node !== this), parent);
404
+ }
405
+ setProps(props) {
406
+ return this.triggerMutation(new UpdateNodePropsEvent({
407
+ target: this,
408
+ source: null,
409
+ }), () => {
410
+ Object.assign(this.props, props);
411
+ });
412
+ }
413
+ setComponentName(componentName) {
414
+ this.componentName = componentName;
415
+ }
416
+ prepend(...nodes) {
417
+ if (nodes.some((node) => node.contains(this)))
418
+ return [];
419
+ const originSourceParents = nodes.map((node) => node.parent);
420
+ const newNodes = this.resetNodesParent(nodes, this);
421
+ if (!newNodes.length)
422
+ return [];
423
+ return this.triggerMutation(new PrependNodeEvent({
424
+ originSourceParents,
425
+ target: this,
426
+ source: newNodes,
427
+ }), () => {
428
+ this.children = newNodes.concat(this.children);
429
+ return newNodes;
430
+ }, []);
431
+ }
432
+ append(...nodes) {
433
+ if (nodes.some((node) => node.contains(this)))
434
+ return [];
435
+ const originSourceParents = nodes.map((node) => node.parent);
436
+ const newNodes = this.resetNodesParent(nodes, this);
437
+ if (!newNodes.length)
438
+ return [];
439
+ return this.triggerMutation(new AppendNodeEvent({
440
+ originSourceParents,
441
+ target: this,
442
+ source: newNodes,
443
+ }), () => {
444
+ this.children = this.children.concat(newNodes);
445
+ return newNodes;
446
+ }, []);
447
+ }
448
+ wrap(wrapper) {
449
+ if (wrapper === this)
450
+ return;
451
+ const parent = this.parent;
452
+ return this.triggerMutation(new WrapNodeEvent({
453
+ target: this,
454
+ source: wrapper,
455
+ }), () => {
456
+ resetParent(this, wrapper);
457
+ resetParent(wrapper, parent);
458
+ return wrapper;
459
+ });
460
+ }
461
+ insertAfter(...nodes) {
462
+ const parent = this.parent;
463
+ if (nodes.some((node) => node.contains(this)))
464
+ return [];
465
+ if (parent?.children?.length) {
466
+ const originSourceParents = nodes.map((node) => node.parent);
467
+ const newNodes = this.resetNodesParent(nodes, parent);
468
+ if (!newNodes.length)
469
+ return [];
470
+ return this.triggerMutation(new InsertAfterEvent({
471
+ originSourceParents,
472
+ target: this,
473
+ source: newNodes,
474
+ }), () => {
475
+ parent.children = parent.children.reduce((buf, node) => {
476
+ if (node === this) {
477
+ return buf.concat([node]).concat(newNodes);
478
+ }
479
+ else {
480
+ return buf.concat([node]);
481
+ }
482
+ }, []);
483
+ return newNodes;
484
+ }, []);
485
+ }
486
+ return [];
487
+ }
488
+ insertBefore(...nodes) {
489
+ const parent = this.parent;
490
+ if (nodes.some((node) => node.contains(this)))
491
+ return [];
492
+ if (parent?.children?.length) {
493
+ const originSourceParents = nodes.map((node) => node.parent);
494
+ const newNodes = this.resetNodesParent(nodes, parent);
495
+ if (!newNodes.length)
496
+ return [];
497
+ return this.triggerMutation(new InsertBeforeEvent({
498
+ originSourceParents,
499
+ target: this,
500
+ source: newNodes,
501
+ }), () => {
502
+ parent.children = parent.children.reduce((buf, node) => {
503
+ if (node === this) {
504
+ return buf.concat(newNodes).concat([node]);
505
+ }
506
+ else {
507
+ return buf.concat([node]);
508
+ }
509
+ }, []);
510
+ return newNodes;
511
+ }, []);
512
+ }
513
+ return [];
514
+ }
515
+ insertChildren(start, ...nodes) {
516
+ if (nodes.some((node) => node.contains(this)))
517
+ return [];
518
+ if (this.children?.length) {
519
+ const originSourceParents = nodes.map((node) => node.parent);
520
+ const newNodes = this.resetNodesParent(nodes, this);
521
+ if (!newNodes.length)
522
+ return [];
523
+ return this.triggerMutation(new InsertChildrenEvent({
524
+ originSourceParents,
525
+ target: this,
526
+ source: newNodes,
527
+ }), () => {
528
+ this.children = this.children.reduce((buf, node, index) => {
529
+ if (index === start) {
530
+ return buf.concat(newNodes).concat([node]);
531
+ }
532
+ return buf.concat([node]);
533
+ }, []);
534
+ return newNodes;
535
+ }, []);
536
+ }
537
+ return [];
538
+ }
539
+ setChildren(...nodes) {
540
+ const originSourceParents = nodes.map((node) => node.parent);
541
+ const newNodes = this.resetNodesParent(nodes, this);
542
+ return this.triggerMutation(new UpdateChildrenEvent({
543
+ originSourceParents,
544
+ target: this,
545
+ source: newNodes,
546
+ }), () => {
547
+ this.children = newNodes;
548
+ return newNodes;
549
+ }, []);
550
+ }
551
+ /**
552
+ * @deprecated
553
+ * please use `setChildren`
554
+ */
555
+ setNodeChildren(...nodes) {
556
+ return this.setChildren(...nodes);
557
+ }
558
+ remove() {
559
+ return this.triggerMutation(new RemoveNodeEvent({
560
+ target: this,
561
+ source: null,
562
+ }), () => {
563
+ removeNode(this);
564
+ TreeNodes.delete(this.id);
565
+ });
566
+ }
567
+ clone(parent) {
568
+ const newNode = new TreeNode({
569
+ id: uid(),
570
+ componentName: this.componentName,
571
+ sourceName: this.sourceName,
572
+ props: toJS(this.props),
573
+ children: [],
574
+ }, parent ? parent : this.parent);
575
+ newNode.children = resetNodesParent(this.children.map((child) => {
576
+ return child.clone(newNode);
577
+ }), newNode);
578
+ return this.triggerMutation(new CloneNodeEvent({
579
+ target: this,
580
+ source: newNode,
581
+ }), () => newNode);
582
+ }
583
+ from(node) {
584
+ if (!node)
585
+ return;
586
+ return this.triggerMutation(new FromNodeEvent({
587
+ target: this,
588
+ source: node,
589
+ }), () => {
590
+ if (node.id && node.id !== this.id) {
591
+ TreeNodes.delete(this.id);
592
+ TreeNodes.set(node.id, this);
593
+ this.id = node.id;
594
+ }
595
+ if (node.componentName) {
596
+ this.componentName = node.componentName;
597
+ }
598
+ this.props = node.props ?? {};
599
+ if (node.hidden) {
600
+ this.hidden = node.hidden;
601
+ }
602
+ if (node.children) {
603
+ this.children =
604
+ node.children?.map?.((node) => {
605
+ return new TreeNode(node, this);
606
+ }) || [];
607
+ }
608
+ });
609
+ }
610
+ serialize() {
611
+ return {
612
+ id: this.id,
613
+ componentName: this.componentName,
614
+ sourceName: this.sourceName,
615
+ props: toJS(this.props),
616
+ hidden: this.hidden,
617
+ children: this.children.map((treeNode) => {
618
+ return treeNode.serialize();
619
+ }),
620
+ };
621
+ }
622
+ static create(node, parent) {
623
+ return new TreeNode(node, parent);
624
+ }
625
+ static findById(id) {
626
+ return TreeNodes.get(id);
627
+ }
628
+ static remove(nodes = []) {
629
+ for (let i = nodes.length - 1; i >= 0; i--) {
630
+ const node = nodes[i];
631
+ if (node.allowDelete()) {
632
+ const previous = node.previous;
633
+ const next = node.next;
634
+ node.remove();
635
+ node.operation?.selection.select(previous ? previous : next ? next : node.parent);
636
+ node.operation?.hover.clear();
637
+ }
638
+ }
639
+ }
640
+ static sort(nodes = []) {
641
+ return nodes.sort((before, after) => {
642
+ if (before.depth !== after.depth)
643
+ return 0;
644
+ return before.index - after.index >= 0 ? 1 : -1;
645
+ });
646
+ }
647
+ static clone(nodes = []) {
648
+ const groups = {};
649
+ const lastGroupNode = {};
650
+ const filterNestedNode = TreeNode.sort(nodes).filter((node) => {
651
+ return !nodes.some((parent) => {
652
+ return node.isMyParents(parent);
653
+ });
654
+ });
655
+ each(filterNestedNode, (node) => {
656
+ if (node === node.root)
657
+ return;
658
+ if (!node.allowClone())
659
+ return;
660
+ if (!node?.operation)
661
+ return;
662
+ groups[node?.parent?.id] = groups[node?.parent?.id] || [];
663
+ groups[node?.parent?.id].push(node);
664
+ if (lastGroupNode[node?.parent?.id]) {
665
+ if (node.index > lastGroupNode[node?.parent?.id].index) {
666
+ lastGroupNode[node?.parent?.id] = node;
667
+ }
668
+ }
669
+ else {
670
+ lastGroupNode[node?.parent?.id] = node;
671
+ }
672
+ });
673
+ const parents = new Map();
674
+ each(groups, (nodes, parentId) => {
675
+ const lastNode = lastGroupNode[parentId];
676
+ let insertPoint = lastNode;
677
+ each(nodes, (node) => {
678
+ const cloned = node.clone();
679
+ if (!cloned)
680
+ return;
681
+ if (node.operation?.selection.has(node) &&
682
+ insertPoint.parent.allowAppend([cloned])) {
683
+ insertPoint.insertAfter(cloned);
684
+ insertPoint = insertPoint.next;
685
+ }
686
+ else if (node.operation.selection.length === 1) {
687
+ const targetNode = node.operation?.tree.findById(node.operation.selection.first);
688
+ let cloneNodes = parents.get(targetNode);
689
+ if (!cloneNodes) {
690
+ cloneNodes = [];
691
+ parents.set(targetNode, cloneNodes);
692
+ }
693
+ if (targetNode && targetNode.allowAppend([cloned])) {
694
+ cloneNodes.push(cloned);
695
+ }
696
+ }
697
+ });
698
+ });
699
+ parents.forEach((nodes, target) => {
700
+ if (!nodes.length)
701
+ return;
702
+ target.append(...nodes);
703
+ });
704
+ }
705
+ static filterResizable(nodes = []) {
706
+ return nodes.filter((node) => node.allowResize());
707
+ }
708
+ static filterRotatable(nodes = []) {
709
+ return nodes.filter((node) => node.allowRotate());
710
+ }
711
+ static filterScalable(nodes = []) {
712
+ return nodes.filter((node) => node.allowScale());
713
+ }
714
+ static filterRoundable(nodes = []) {
715
+ return nodes.filter((node) => node.allowRound());
716
+ }
717
+ static filterTranslatable(nodes = []) {
718
+ return nodes.filter((node) => node.allowTranslate());
719
+ }
720
+ static filterDraggable(nodes = []) {
721
+ return nodes.reduce((buf, node) => {
722
+ if (!node.allowDrag())
723
+ return buf;
724
+ if (isFn(node?.designerProps?.getDragNodes)) {
725
+ const transformed = node.designerProps.getDragNodes(node);
726
+ return transformed ? buf.concat(transformed) : buf;
727
+ }
728
+ if (node.componentName === '$$ResourceNode$$')
729
+ return buf.concat(node.children);
730
+ return buf.concat([node]);
731
+ }, []);
732
+ }
733
+ static filterDroppable(nodes = [], parent) {
734
+ return nodes.reduce((buf, node) => {
735
+ if (!node.allowDrop(parent))
736
+ return buf;
737
+ if (isFn(node.designerProps?.getDropNodes)) {
738
+ const cloned = node.isSourceNode ? node.clone(node.parent) : node;
739
+ const transformed = node.designerProps.getDropNodes(cloned, parent);
740
+ return transformed ? buf.concat(transformed) : buf;
741
+ }
742
+ if (node.componentName === '$$ResourceNode$$')
743
+ return buf.concat(node.children);
744
+ return buf.concat([node]);
745
+ }, []);
746
+ }
747
+ }