@thienvu18/designable-core 2.0.1 → 2.0.2

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