@sulesky/next-core 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (488) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +1 -0
  3. package/dist/designable.core.umd.production.js +1 -0
  4. package/dist/designable.core.umd.production.min.js +7994 -0
  5. package/esm/drivers/DragDropDriver.d.ts +14 -0
  6. package/esm/drivers/DragDropDriver.js +157 -0
  7. package/esm/drivers/KeyboardDriver.d.ts +7 -0
  8. package/esm/drivers/KeyboardDriver.js +90 -0
  9. package/esm/drivers/MouseClickDriver.d.ts +8 -0
  10. package/esm/drivers/MouseClickDriver.js +95 -0
  11. package/esm/drivers/MouseMoveDriver.d.ts +8 -0
  12. package/esm/drivers/MouseMoveDriver.js +75 -0
  13. package/esm/drivers/ViewportResizeDriver.d.ts +10 -0
  14. package/esm/drivers/ViewportResizeDriver.js +94 -0
  15. package/esm/drivers/ViewportScrollDriver.d.ts +8 -0
  16. package/esm/drivers/ViewportScrollDriver.js +74 -0
  17. package/esm/drivers/index.d.ts +6 -0
  18. package/esm/drivers/index.js +6 -0
  19. package/esm/effects/index.d.ts +11 -0
  20. package/esm/effects/index.js +11 -0
  21. package/esm/effects/useAutoScrollEffect.d.ts +2 -0
  22. package/esm/effects/useAutoScrollEffect.js +65 -0
  23. package/esm/effects/useContentEditableEffect.d.ts +2 -0
  24. package/esm/effects/useContentEditableEffect.js +167 -0
  25. package/esm/effects/useCursorEffect.d.ts +2 -0
  26. package/esm/effects/useCursorEffect.js +55 -0
  27. package/esm/effects/useDragDropEffect.d.ts +2 -0
  28. package/esm/effects/useDragDropEffect.js +168 -0
  29. package/esm/effects/useFreeSelectionEffect.d.ts +2 -0
  30. package/esm/effects/useFreeSelectionEffect.js +59 -0
  31. package/esm/effects/useKeyboardEffect.d.ts +2 -0
  32. package/esm/effects/useKeyboardEffect.js +17 -0
  33. package/esm/effects/useResizeEffect.d.ts +2 -0
  34. package/esm/effects/useResizeEffect.js +80 -0
  35. package/esm/effects/useSelectionEffect.d.ts +2 -0
  36. package/esm/effects/useSelectionEffect.js +68 -0
  37. package/esm/effects/useTranslateEffect.d.ts +2 -0
  38. package/esm/effects/useTranslateEffect.js +58 -0
  39. package/esm/effects/useViewportEffect.d.ts +2 -0
  40. package/esm/effects/useViewportEffect.js +31 -0
  41. package/esm/effects/useWorkspaceEffect.d.ts +2 -0
  42. package/esm/effects/useWorkspaceEffect.js +29 -0
  43. package/esm/events/cursor/AbstractCursorEvent.d.ts +21 -0
  44. package/esm/events/cursor/AbstractCursorEvent.js +40 -0
  45. package/esm/events/cursor/DragMoveEvent.d.ts +5 -0
  46. package/esm/events/cursor/DragMoveEvent.js +51 -0
  47. package/esm/events/cursor/DragStartEvent.d.ts +5 -0
  48. package/esm/events/cursor/DragStartEvent.js +51 -0
  49. package/esm/events/cursor/DragStopEvent.d.ts +5 -0
  50. package/esm/events/cursor/DragStopEvent.js +51 -0
  51. package/esm/events/cursor/MouseClickEvent.d.ts +8 -0
  52. package/esm/events/cursor/MouseClickEvent.js +61 -0
  53. package/esm/events/cursor/MouseMoveEvent.d.ts +5 -0
  54. package/esm/events/cursor/MouseMoveEvent.js +51 -0
  55. package/esm/events/cursor/index.d.ts +5 -0
  56. package/esm/events/cursor/index.js +5 -0
  57. package/esm/events/history/AbstractHistoryEvent.d.ts +6 -0
  58. package/esm/events/history/AbstractHistoryEvent.js +7 -0
  59. package/esm/events/history/HistoryGotoEvent.d.ts +5 -0
  60. package/esm/events/history/HistoryGotoEvent.js +51 -0
  61. package/esm/events/history/HistoryPushEvent.d.ts +5 -0
  62. package/esm/events/history/HistoryPushEvent.js +51 -0
  63. package/esm/events/history/HistoryRedoEvent.d.ts +5 -0
  64. package/esm/events/history/HistoryRedoEvent.js +51 -0
  65. package/esm/events/history/HistoryUndoEvent.d.ts +5 -0
  66. package/esm/events/history/HistoryUndoEvent.js +51 -0
  67. package/esm/events/history/index.d.ts +4 -0
  68. package/esm/events/history/index.js +4 -0
  69. package/esm/events/index.d.ts +6 -0
  70. package/esm/events/index.js +6 -0
  71. package/esm/events/keyboard/AbstractKeyboardEvent.d.ts +15 -0
  72. package/esm/events/keyboard/AbstractKeyboardEvent.js +61 -0
  73. package/esm/events/keyboard/KeyDownEvent.d.ts +5 -0
  74. package/esm/events/keyboard/KeyDownEvent.js +51 -0
  75. package/esm/events/keyboard/KeyUpEvent.d.ts +5 -0
  76. package/esm/events/keyboard/KeyUpEvent.js +51 -0
  77. package/esm/events/keyboard/index.d.ts +2 -0
  78. package/esm/events/keyboard/index.js +2 -0
  79. package/esm/events/mutation/AbstractMutationNodeEvent.d.ts +13 -0
  80. package/esm/events/mutation/AbstractMutationNodeEvent.js +7 -0
  81. package/esm/events/mutation/AppendNodeEvent.d.ts +5 -0
  82. package/esm/events/mutation/AppendNodeEvent.js +51 -0
  83. package/esm/events/mutation/CloneNodeEvent.d.ts +5 -0
  84. package/esm/events/mutation/CloneNodeEvent.js +51 -0
  85. package/esm/events/mutation/DragNodeEvent.d.ts +5 -0
  86. package/esm/events/mutation/DragNodeEvent.js +51 -0
  87. package/esm/events/mutation/DropNodeEvent.d.ts +5 -0
  88. package/esm/events/mutation/DropNodeEvent.js +51 -0
  89. package/esm/events/mutation/FromNodeEvent.d.ts +13 -0
  90. package/esm/events/mutation/FromNodeEvent.js +8 -0
  91. package/esm/events/mutation/HoverNodeEvent.d.ts +5 -0
  92. package/esm/events/mutation/HoverNodeEvent.js +51 -0
  93. package/esm/events/mutation/InsertAfterEvent.d.ts +5 -0
  94. package/esm/events/mutation/InsertAfterEvent.js +51 -0
  95. package/esm/events/mutation/InsertBeforeEvent.d.ts +5 -0
  96. package/esm/events/mutation/InsertBeforeEvent.js +51 -0
  97. package/esm/events/mutation/InsertChildrenEvent.d.ts +5 -0
  98. package/esm/events/mutation/InsertChildrenEvent.js +51 -0
  99. package/esm/events/mutation/PrependNodeEvent.d.ts +5 -0
  100. package/esm/events/mutation/PrependNodeEvent.js +51 -0
  101. package/esm/events/mutation/RemoveNodeEvent.d.ts +5 -0
  102. package/esm/events/mutation/RemoveNodeEvent.js +51 -0
  103. package/esm/events/mutation/SelectNodeEvent.d.ts +5 -0
  104. package/esm/events/mutation/SelectNodeEvent.js +51 -0
  105. package/esm/events/mutation/UnSelectNodeEvent.d.ts +5 -0
  106. package/esm/events/mutation/UnSelectNodeEvent.js +51 -0
  107. package/esm/events/mutation/UpdateChildrenEvent.d.ts +5 -0
  108. package/esm/events/mutation/UpdateChildrenEvent.js +51 -0
  109. package/esm/events/mutation/UpdateNodePropsEvent.d.ts +5 -0
  110. package/esm/events/mutation/UpdateNodePropsEvent.js +51 -0
  111. package/esm/events/mutation/UserSelectNodeEvent.d.ts +5 -0
  112. package/esm/events/mutation/UserSelectNodeEvent.js +51 -0
  113. package/esm/events/mutation/WrapNodeEvent.d.ts +5 -0
  114. package/esm/events/mutation/WrapNodeEvent.js +51 -0
  115. package/esm/events/mutation/index.d.ts +16 -0
  116. package/esm/events/mutation/index.js +16 -0
  117. package/esm/events/viewport/AbstractViewportEvent.d.ts +16 -0
  118. package/esm/events/viewport/AbstractViewportEvent.js +17 -0
  119. package/esm/events/viewport/ViewportResizeEvent.d.ts +5 -0
  120. package/esm/events/viewport/ViewportResizeEvent.js +51 -0
  121. package/esm/events/viewport/ViewportScrollEvent.d.ts +5 -0
  122. package/esm/events/viewport/ViewportScrollEvent.js +51 -0
  123. package/esm/events/viewport/index.d.ts +2 -0
  124. package/esm/events/viewport/index.js +2 -0
  125. package/esm/events/workbench/AbstractWorkspaceEvent.d.ts +7 -0
  126. package/esm/events/workbench/AbstractWorkspaceEvent.js +7 -0
  127. package/esm/events/workbench/AddWorkspaceEvent.d.ts +5 -0
  128. package/esm/events/workbench/AddWorkspaceEvent.js +51 -0
  129. package/esm/events/workbench/RemoveWorkspaceEvent.d.ts +5 -0
  130. package/esm/events/workbench/RemoveWorkspaceEvent.js +51 -0
  131. package/esm/events/workbench/SwitchWorkspaceEvent.d.ts +5 -0
  132. package/esm/events/workbench/SwitchWorkspaceEvent.js +51 -0
  133. package/esm/events/workbench/index.d.ts +3 -0
  134. package/esm/events/workbench/index.js +3 -0
  135. package/esm/exports.d.ts +5 -0
  136. package/esm/exports.js +5 -0
  137. package/esm/externals.d.ts +12 -0
  138. package/esm/externals.js +113 -0
  139. package/esm/index.d.ts +1 -0
  140. package/esm/index.js +24 -0
  141. package/esm/internals.d.ts +3 -0
  142. package/esm/internals.js +34 -0
  143. package/esm/models/Cursor.d.ts +60 -0
  144. package/esm/models/Cursor.js +151 -0
  145. package/esm/models/Engine.d.ts +29 -0
  146. package/esm/models/Engine.js +112 -0
  147. package/esm/models/History.d.ts +34 -0
  148. package/esm/models/History.js +110 -0
  149. package/esm/models/Hover.d.ts +14 -0
  150. package/esm/models/Hover.js +38 -0
  151. package/esm/models/Keyboard.d.ts +29 -0
  152. package/esm/models/Keyboard.js +126 -0
  153. package/esm/models/MoveHelper.d.ts +66 -0
  154. package/esm/models/MoveHelper.js +363 -0
  155. package/esm/models/Operation.d.ts +29 -0
  156. package/esm/models/Operation.js +75 -0
  157. package/esm/models/Screen.d.ts +31 -0
  158. package/esm/models/Screen.js +73 -0
  159. package/esm/models/Selection.d.ts +29 -0
  160. package/esm/models/Selection.js +192 -0
  161. package/esm/models/Shortcut.d.ts +20 -0
  162. package/esm/models/Shortcut.js +69 -0
  163. package/esm/models/SnapLine.d.ts +27 -0
  164. package/esm/models/SnapLine.js +141 -0
  165. package/esm/models/SpaceBlock.d.ts +40 -0
  166. package/esm/models/SpaceBlock.js +171 -0
  167. package/esm/models/TransformHelper.d.ts +80 -0
  168. package/esm/models/TransformHelper.js +601 -0
  169. package/esm/models/TreeNode.d.ts +115 -0
  170. package/esm/models/TreeNode.js +933 -0
  171. package/esm/models/Viewport.d.ts +90 -0
  172. package/esm/models/Viewport.js +474 -0
  173. package/esm/models/Workbench.d.ts +23 -0
  174. package/esm/models/Workbench.js +98 -0
  175. package/esm/models/Workspace.d.ts +41 -0
  176. package/esm/models/Workspace.js +95 -0
  177. package/esm/models/index.d.ts +13 -0
  178. package/esm/models/index.js +13 -0
  179. package/esm/presets.d.ts +4 -0
  180. package/esm/presets.js +38 -0
  181. package/esm/registry.d.ts +16 -0
  182. package/esm/registry.js +123 -0
  183. package/esm/shortcuts/CursorSwitch.d.ts +2 -0
  184. package/esm/shortcuts/CursorSwitch.js +10 -0
  185. package/esm/shortcuts/MultiSelection.d.ts +5 -0
  186. package/esm/shortcuts/MultiSelection.js +27 -0
  187. package/esm/shortcuts/NodeMutation.d.ts +7 -0
  188. package/esm/shortcuts/NodeMutation.js +40 -0
  189. package/esm/shortcuts/QuickSelection.d.ts +3 -0
  190. package/esm/shortcuts/QuickSelection.js +85 -0
  191. package/esm/shortcuts/UndoRedo.d.ts +3 -0
  192. package/esm/shortcuts/UndoRedo.js +27 -0
  193. package/esm/shortcuts/index.d.ts +5 -0
  194. package/esm/shortcuts/index.js +5 -0
  195. package/esm/types.d.ts +131 -0
  196. package/esm/types.js +1 -0
  197. package/lib/drivers/DragDropDriver.d.ts +14 -0
  198. package/lib/drivers/DragDropDriver.js +160 -0
  199. package/lib/drivers/KeyboardDriver.d.ts +7 -0
  200. package/lib/drivers/KeyboardDriver.js +93 -0
  201. package/lib/drivers/MouseClickDriver.d.ts +8 -0
  202. package/lib/drivers/MouseClickDriver.js +98 -0
  203. package/lib/drivers/MouseMoveDriver.d.ts +8 -0
  204. package/lib/drivers/MouseMoveDriver.js +78 -0
  205. package/lib/drivers/ViewportResizeDriver.d.ts +10 -0
  206. package/lib/drivers/ViewportResizeDriver.js +97 -0
  207. package/lib/drivers/ViewportScrollDriver.d.ts +8 -0
  208. package/lib/drivers/ViewportScrollDriver.js +77 -0
  209. package/lib/drivers/index.d.ts +6 -0
  210. package/lib/drivers/index.js +22 -0
  211. package/lib/effects/index.d.ts +11 -0
  212. package/lib/effects/index.js +27 -0
  213. package/lib/effects/useAutoScrollEffect.d.ts +2 -0
  214. package/lib/effects/useAutoScrollEffect.js +69 -0
  215. package/lib/effects/useContentEditableEffect.d.ts +2 -0
  216. package/lib/effects/useContentEditableEffect.js +171 -0
  217. package/lib/effects/useCursorEffect.d.ts +2 -0
  218. package/lib/effects/useCursorEffect.js +59 -0
  219. package/lib/effects/useDragDropEffect.d.ts +2 -0
  220. package/lib/effects/useDragDropEffect.js +172 -0
  221. package/lib/effects/useFreeSelectionEffect.d.ts +2 -0
  222. package/lib/effects/useFreeSelectionEffect.js +63 -0
  223. package/lib/effects/useKeyboardEffect.d.ts +2 -0
  224. package/lib/effects/useKeyboardEffect.js +21 -0
  225. package/lib/effects/useResizeEffect.d.ts +2 -0
  226. package/lib/effects/useResizeEffect.js +84 -0
  227. package/lib/effects/useSelectionEffect.d.ts +2 -0
  228. package/lib/effects/useSelectionEffect.js +72 -0
  229. package/lib/effects/useTranslateEffect.d.ts +2 -0
  230. package/lib/effects/useTranslateEffect.js +62 -0
  231. package/lib/effects/useViewportEffect.d.ts +2 -0
  232. package/lib/effects/useViewportEffect.js +35 -0
  233. package/lib/effects/useWorkspaceEffect.d.ts +2 -0
  234. package/lib/effects/useWorkspaceEffect.js +33 -0
  235. package/lib/events/cursor/AbstractCursorEvent.d.ts +21 -0
  236. package/lib/events/cursor/AbstractCursorEvent.js +43 -0
  237. package/lib/events/cursor/DragMoveEvent.d.ts +5 -0
  238. package/lib/events/cursor/DragMoveEvent.js +54 -0
  239. package/lib/events/cursor/DragStartEvent.d.ts +5 -0
  240. package/lib/events/cursor/DragStartEvent.js +54 -0
  241. package/lib/events/cursor/DragStopEvent.d.ts +5 -0
  242. package/lib/events/cursor/DragStopEvent.js +54 -0
  243. package/lib/events/cursor/MouseClickEvent.d.ts +8 -0
  244. package/lib/events/cursor/MouseClickEvent.js +64 -0
  245. package/lib/events/cursor/MouseMoveEvent.d.ts +5 -0
  246. package/lib/events/cursor/MouseMoveEvent.js +54 -0
  247. package/lib/events/cursor/index.d.ts +5 -0
  248. package/lib/events/cursor/index.js +21 -0
  249. package/lib/events/history/AbstractHistoryEvent.d.ts +6 -0
  250. package/lib/events/history/AbstractHistoryEvent.js +10 -0
  251. package/lib/events/history/HistoryGotoEvent.d.ts +5 -0
  252. package/lib/events/history/HistoryGotoEvent.js +54 -0
  253. package/lib/events/history/HistoryPushEvent.d.ts +5 -0
  254. package/lib/events/history/HistoryPushEvent.js +54 -0
  255. package/lib/events/history/HistoryRedoEvent.d.ts +5 -0
  256. package/lib/events/history/HistoryRedoEvent.js +54 -0
  257. package/lib/events/history/HistoryUndoEvent.d.ts +5 -0
  258. package/lib/events/history/HistoryUndoEvent.js +54 -0
  259. package/lib/events/history/index.d.ts +4 -0
  260. package/lib/events/history/index.js +20 -0
  261. package/lib/events/index.d.ts +6 -0
  262. package/lib/events/index.js +22 -0
  263. package/lib/events/keyboard/AbstractKeyboardEvent.d.ts +15 -0
  264. package/lib/events/keyboard/AbstractKeyboardEvent.js +64 -0
  265. package/lib/events/keyboard/KeyDownEvent.d.ts +5 -0
  266. package/lib/events/keyboard/KeyDownEvent.js +54 -0
  267. package/lib/events/keyboard/KeyUpEvent.d.ts +5 -0
  268. package/lib/events/keyboard/KeyUpEvent.js +54 -0
  269. package/lib/events/keyboard/index.d.ts +2 -0
  270. package/lib/events/keyboard/index.js +18 -0
  271. package/lib/events/mutation/AbstractMutationNodeEvent.d.ts +13 -0
  272. package/lib/events/mutation/AbstractMutationNodeEvent.js +10 -0
  273. package/lib/events/mutation/AppendNodeEvent.d.ts +5 -0
  274. package/lib/events/mutation/AppendNodeEvent.js +54 -0
  275. package/lib/events/mutation/CloneNodeEvent.d.ts +5 -0
  276. package/lib/events/mutation/CloneNodeEvent.js +54 -0
  277. package/lib/events/mutation/DragNodeEvent.d.ts +5 -0
  278. package/lib/events/mutation/DragNodeEvent.js +54 -0
  279. package/lib/events/mutation/DropNodeEvent.d.ts +5 -0
  280. package/lib/events/mutation/DropNodeEvent.js +54 -0
  281. package/lib/events/mutation/FromNodeEvent.d.ts +13 -0
  282. package/lib/events/mutation/FromNodeEvent.js +11 -0
  283. package/lib/events/mutation/HoverNodeEvent.d.ts +5 -0
  284. package/lib/events/mutation/HoverNodeEvent.js +54 -0
  285. package/lib/events/mutation/InsertAfterEvent.d.ts +5 -0
  286. package/lib/events/mutation/InsertAfterEvent.js +54 -0
  287. package/lib/events/mutation/InsertBeforeEvent.d.ts +5 -0
  288. package/lib/events/mutation/InsertBeforeEvent.js +54 -0
  289. package/lib/events/mutation/InsertChildrenEvent.d.ts +5 -0
  290. package/lib/events/mutation/InsertChildrenEvent.js +54 -0
  291. package/lib/events/mutation/PrependNodeEvent.d.ts +5 -0
  292. package/lib/events/mutation/PrependNodeEvent.js +54 -0
  293. package/lib/events/mutation/RemoveNodeEvent.d.ts +5 -0
  294. package/lib/events/mutation/RemoveNodeEvent.js +54 -0
  295. package/lib/events/mutation/SelectNodeEvent.d.ts +5 -0
  296. package/lib/events/mutation/SelectNodeEvent.js +54 -0
  297. package/lib/events/mutation/UnSelectNodeEvent.d.ts +5 -0
  298. package/lib/events/mutation/UnSelectNodeEvent.js +54 -0
  299. package/lib/events/mutation/UpdateChildrenEvent.d.ts +5 -0
  300. package/lib/events/mutation/UpdateChildrenEvent.js +54 -0
  301. package/lib/events/mutation/UpdateNodePropsEvent.d.ts +5 -0
  302. package/lib/events/mutation/UpdateNodePropsEvent.js +54 -0
  303. package/lib/events/mutation/UserSelectNodeEvent.d.ts +5 -0
  304. package/lib/events/mutation/UserSelectNodeEvent.js +54 -0
  305. package/lib/events/mutation/WrapNodeEvent.d.ts +5 -0
  306. package/lib/events/mutation/WrapNodeEvent.js +54 -0
  307. package/lib/events/mutation/index.d.ts +16 -0
  308. package/lib/events/mutation/index.js +32 -0
  309. package/lib/events/viewport/AbstractViewportEvent.d.ts +16 -0
  310. package/lib/events/viewport/AbstractViewportEvent.js +20 -0
  311. package/lib/events/viewport/ViewportResizeEvent.d.ts +5 -0
  312. package/lib/events/viewport/ViewportResizeEvent.js +54 -0
  313. package/lib/events/viewport/ViewportScrollEvent.d.ts +5 -0
  314. package/lib/events/viewport/ViewportScrollEvent.js +54 -0
  315. package/lib/events/viewport/index.d.ts +2 -0
  316. package/lib/events/viewport/index.js +18 -0
  317. package/lib/events/workbench/AbstractWorkspaceEvent.d.ts +7 -0
  318. package/lib/events/workbench/AbstractWorkspaceEvent.js +10 -0
  319. package/lib/events/workbench/AddWorkspaceEvent.d.ts +5 -0
  320. package/lib/events/workbench/AddWorkspaceEvent.js +54 -0
  321. package/lib/events/workbench/RemoveWorkspaceEvent.d.ts +5 -0
  322. package/lib/events/workbench/RemoveWorkspaceEvent.js +54 -0
  323. package/lib/events/workbench/SwitchWorkspaceEvent.d.ts +5 -0
  324. package/lib/events/workbench/SwitchWorkspaceEvent.js +54 -0
  325. package/lib/events/workbench/index.d.ts +3 -0
  326. package/lib/events/workbench/index.js +19 -0
  327. package/lib/exports.d.ts +5 -0
  328. package/lib/exports.js +21 -0
  329. package/lib/externals.d.ts +12 -0
  330. package/lib/externals.js +126 -0
  331. package/lib/index.d.ts +1 -0
  332. package/lib/index.js +62 -0
  333. package/lib/internals.d.ts +3 -0
  334. package/lib/internals.js +40 -0
  335. package/lib/models/Cursor.d.ts +60 -0
  336. package/lib/models/Cursor.js +154 -0
  337. package/lib/models/Engine.d.ts +29 -0
  338. package/lib/models/Engine.js +115 -0
  339. package/lib/models/History.d.ts +34 -0
  340. package/lib/models/History.js +113 -0
  341. package/lib/models/Hover.d.ts +14 -0
  342. package/lib/models/Hover.js +41 -0
  343. package/lib/models/Keyboard.d.ts +29 -0
  344. package/lib/models/Keyboard.js +129 -0
  345. package/lib/models/MoveHelper.d.ts +66 -0
  346. package/lib/models/MoveHelper.js +366 -0
  347. package/lib/models/Operation.d.ts +29 -0
  348. package/lib/models/Operation.js +78 -0
  349. package/lib/models/Screen.d.ts +31 -0
  350. package/lib/models/Screen.js +76 -0
  351. package/lib/models/Selection.d.ts +29 -0
  352. package/lib/models/Selection.js +195 -0
  353. package/lib/models/Shortcut.d.ts +20 -0
  354. package/lib/models/Shortcut.js +72 -0
  355. package/lib/models/SnapLine.d.ts +27 -0
  356. package/lib/models/SnapLine.js +144 -0
  357. package/lib/models/SpaceBlock.d.ts +40 -0
  358. package/lib/models/SpaceBlock.js +174 -0
  359. package/lib/models/TransformHelper.d.ts +80 -0
  360. package/lib/models/TransformHelper.js +604 -0
  361. package/lib/models/TreeNode.d.ts +115 -0
  362. package/lib/models/TreeNode.js +936 -0
  363. package/lib/models/Viewport.d.ts +90 -0
  364. package/lib/models/Viewport.js +477 -0
  365. package/lib/models/Workbench.d.ts +23 -0
  366. package/lib/models/Workbench.js +101 -0
  367. package/lib/models/Workspace.d.ts +41 -0
  368. package/lib/models/Workspace.js +98 -0
  369. package/lib/models/index.d.ts +13 -0
  370. package/lib/models/index.js +29 -0
  371. package/lib/presets.d.ts +4 -0
  372. package/lib/presets.js +41 -0
  373. package/lib/registry.d.ts +16 -0
  374. package/lib/registry.js +126 -0
  375. package/lib/shortcuts/CursorSwitch.d.ts +2 -0
  376. package/lib/shortcuts/CursorSwitch.js +13 -0
  377. package/lib/shortcuts/MultiSelection.d.ts +5 -0
  378. package/lib/shortcuts/MultiSelection.js +30 -0
  379. package/lib/shortcuts/NodeMutation.d.ts +7 -0
  380. package/lib/shortcuts/NodeMutation.js +43 -0
  381. package/lib/shortcuts/QuickSelection.d.ts +3 -0
  382. package/lib/shortcuts/QuickSelection.js +88 -0
  383. package/lib/shortcuts/UndoRedo.d.ts +3 -0
  384. package/lib/shortcuts/UndoRedo.js +30 -0
  385. package/lib/shortcuts/index.d.ts +5 -0
  386. package/lib/shortcuts/index.js +21 -0
  387. package/lib/types.d.ts +131 -0
  388. package/lib/types.js +2 -0
  389. package/package.json +43 -0
  390. package/rollup.config.mjs +3 -0
  391. package/src/drivers/DragDropDriver.ts +143 -0
  392. package/src/drivers/KeyboardDriver.ts +49 -0
  393. package/src/drivers/MouseClickDriver.ts +61 -0
  394. package/src/drivers/MouseMoveDriver.ts +34 -0
  395. package/src/drivers/ViewportResizeDriver.ts +52 -0
  396. package/src/drivers/ViewportScrollDriver.ts +34 -0
  397. package/src/drivers/index.ts +6 -0
  398. package/src/effects/index.ts +11 -0
  399. package/src/effects/useAutoScrollEffect.ts +82 -0
  400. package/src/effects/useContentEditableEffect.ts +207 -0
  401. package/src/effects/useCursorEffect.ts +62 -0
  402. package/src/effects/useDragDropEffect.ts +185 -0
  403. package/src/effects/useFreeSelectionEffect.ts +66 -0
  404. package/src/effects/useKeyboardEffect.ts +20 -0
  405. package/src/effects/useResizeEffect.ts +92 -0
  406. package/src/effects/useSelectionEffect.ts +68 -0
  407. package/src/effects/useTranslateEffect.ts +59 -0
  408. package/src/effects/useViewportEffect.ts +29 -0
  409. package/src/effects/useWorkspaceEffect.ts +35 -0
  410. package/src/events/cursor/AbstractCursorEvent.ts +62 -0
  411. package/src/events/cursor/DragMoveEvent.ts +6 -0
  412. package/src/events/cursor/DragStartEvent.ts +9 -0
  413. package/src/events/cursor/DragStopEvent.ts +6 -0
  414. package/src/events/cursor/MouseClickEvent.ts +16 -0
  415. package/src/events/cursor/MouseMoveEvent.ts +9 -0
  416. package/src/events/cursor/index.ts +5 -0
  417. package/src/events/history/AbstractHistoryEvent.ts +9 -0
  418. package/src/events/history/HistoryGotoEvent.ts +9 -0
  419. package/src/events/history/HistoryPushEvent.ts +9 -0
  420. package/src/events/history/HistoryRedoEvent.ts +9 -0
  421. package/src/events/history/HistoryUndoEvent.ts +9 -0
  422. package/src/events/history/index.ts +4 -0
  423. package/src/events/index.ts +6 -0
  424. package/src/events/keyboard/AbstractKeyboardEvent.ts +48 -0
  425. package/src/events/keyboard/KeyDownEvent.ts +9 -0
  426. package/src/events/keyboard/KeyUpEvent.ts +6 -0
  427. package/src/events/keyboard/index.ts +2 -0
  428. package/src/events/mutation/AbstractMutationNodeEvent.ts +21 -0
  429. package/src/events/mutation/AppendNodeEvent.ts +9 -0
  430. package/src/events/mutation/CloneNodeEvent.ts +9 -0
  431. package/src/events/mutation/DragNodeEvent.ts +9 -0
  432. package/src/events/mutation/DropNodeEvent.ts +9 -0
  433. package/src/events/mutation/FromNodeEvent.ts +19 -0
  434. package/src/events/mutation/HoverNodeEvent.ts +9 -0
  435. package/src/events/mutation/InsertAfterEvent.ts +9 -0
  436. package/src/events/mutation/InsertBeforeEvent.ts +9 -0
  437. package/src/events/mutation/InsertChildrenEvent.ts +9 -0
  438. package/src/events/mutation/PrependNodeEvent.ts +9 -0
  439. package/src/events/mutation/RemoveNodeEvent.ts +9 -0
  440. package/src/events/mutation/SelectNodeEvent.ts +9 -0
  441. package/src/events/mutation/UnSelectNodeEvent.ts +9 -0
  442. package/src/events/mutation/UpdateChildrenEvent.ts +9 -0
  443. package/src/events/mutation/UpdateNodePropsEvent.ts +9 -0
  444. package/src/events/mutation/UserSelectNodeEvent.ts +9 -0
  445. package/src/events/mutation/WrapNodeEvent.ts +9 -0
  446. package/src/events/mutation/index.ts +16 -0
  447. package/src/events/viewport/AbstractViewportEvent.ts +30 -0
  448. package/src/events/viewport/ViewportResizeEvent.ts +9 -0
  449. package/src/events/viewport/ViewportScrollEvent.ts +9 -0
  450. package/src/events/viewport/index.ts +2 -0
  451. package/src/events/workbench/AbstractWorkspaceEvent.ts +10 -0
  452. package/src/events/workbench/AddWorkspaceEvent.ts +8 -0
  453. package/src/events/workbench/RemoveWorkspaceEvent.ts +9 -0
  454. package/src/events/workbench/SwitchWorkspaceEvent.ts +9 -0
  455. package/src/events/workbench/index.ts +3 -0
  456. package/src/exports.ts +5 -0
  457. package/src/externals.ts +87 -0
  458. package/src/index.ts +15 -0
  459. package/src/internals.ts +37 -0
  460. package/src/models/Cursor.ts +198 -0
  461. package/src/models/Engine.ts +108 -0
  462. package/src/models/History.ts +125 -0
  463. package/src/models/Hover.ts +49 -0
  464. package/src/models/Keyboard.ts +126 -0
  465. package/src/models/MoveHelper.ts +383 -0
  466. package/src/models/Operation.ts +91 -0
  467. package/src/models/Screen.ts +83 -0
  468. package/src/models/Selection.ts +177 -0
  469. package/src/models/Shortcut.ts +81 -0
  470. package/src/models/SnapLine.ts +129 -0
  471. package/src/models/SpaceBlock.ts +199 -0
  472. package/src/models/TransformHelper.ts +648 -0
  473. package/src/models/TreeNode.ts +894 -0
  474. package/src/models/Viewport.ts +516 -0
  475. package/src/models/Workbench.ts +120 -0
  476. package/src/models/Workspace.ts +142 -0
  477. package/src/models/index.ts +13 -0
  478. package/src/presets.ts +73 -0
  479. package/src/registry.ts +147 -0
  480. package/src/shortcuts/CursorSwitch.ts +11 -0
  481. package/src/shortcuts/MultiSelection.ts +31 -0
  482. package/src/shortcuts/NodeMutation.ts +49 -0
  483. package/src/shortcuts/QuickSelection.ts +81 -0
  484. package/src/shortcuts/UndoRedo.ts +29 -0
  485. package/src/shortcuts/index.ts +5 -0
  486. package/src/types.ts +185 -0
  487. package/tsconfig.build.json +10 -0
  488. package/tsconfig.json +5 -0
@@ -0,0 +1,9 @@
1
+ import { ICustomEvent } from '@sulesky/next-shared'
2
+ import { AbstractViewportEvent } from './AbstractViewportEvent'
3
+
4
+ export class ViewportScrollEvent
5
+ extends AbstractViewportEvent
6
+ implements ICustomEvent
7
+ {
8
+ type = 'viewport:scroll'
9
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ViewportResizeEvent'
2
+ export * from './ViewportScrollEvent'
@@ -0,0 +1,10 @@
1
+ import { Workspace } from '../../models'
2
+ import { IEngineContext } from '../../types'
3
+
4
+ export class AbstractWorkspaceEvent {
5
+ data: Workspace
6
+ context: IEngineContext
7
+ constructor(data: Workspace) {
8
+ this.data = data
9
+ }
10
+ }
@@ -0,0 +1,8 @@
1
+ import { ICustomEvent } from '@sulesky/next-shared'
2
+ import { AbstractWorkspaceEvent } from './AbstractWorkspaceEvent'
3
+ export class AddWorkspaceEvent
4
+ extends AbstractWorkspaceEvent
5
+ implements ICustomEvent
6
+ {
7
+ type = 'add:workspace'
8
+ }
@@ -0,0 +1,9 @@
1
+ import { ICustomEvent } from '@sulesky/next-shared'
2
+ import { AbstractWorkspaceEvent } from './AbstractWorkspaceEvent'
3
+
4
+ export class RemoveWorkspaceEvent
5
+ extends AbstractWorkspaceEvent
6
+ implements ICustomEvent
7
+ {
8
+ type = 'remove:workspace'
9
+ }
@@ -0,0 +1,9 @@
1
+ import { ICustomEvent } from '@sulesky/next-shared'
2
+ import { AbstractWorkspaceEvent } from './AbstractWorkspaceEvent'
3
+
4
+ export class SwitchWorkspaceEvent
5
+ extends AbstractWorkspaceEvent
6
+ implements ICustomEvent
7
+ {
8
+ type = 'switch:workspace'
9
+ }
@@ -0,0 +1,3 @@
1
+ export * from './AddWorkspaceEvent'
2
+ export * from './RemoveWorkspaceEvent'
3
+ export * from './SwitchWorkspaceEvent'
package/src/exports.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './externals'
2
+ export * from './registry'
3
+ export * from './models'
4
+ export * from './events'
5
+ export * from './types'
@@ -0,0 +1,87 @@
1
+ import { isArr } from '@sulesky/next-shared'
2
+ import { untracked } from '@formily/reactive'
3
+ import { DEFAULT_DRIVERS, DEFAULT_EFFECTS, DEFAULT_SHORTCUTS } from './presets'
4
+ import { Engine, TreeNode } from './models'
5
+ import {
6
+ IEngineProps,
7
+ IResourceCreator,
8
+ IBehaviorCreator,
9
+ IDesignerLocales,
10
+ IResource,
11
+ IBehavior,
12
+ IBehaviorHost,
13
+ IResourceHost,
14
+ } from './types'
15
+ import { mergeLocales } from './internals'
16
+
17
+ export const isBehaviorHost = (val: any): val is IBehaviorHost =>
18
+ val?.Behavior && isBehaviorList(val.Behavior)
19
+
20
+ export const isBehaviorList = (val: any): val is IBehavior[] =>
21
+ Array.isArray(val) && val.every(isBehavior)
22
+
23
+ export const isBehavior = (val: any): val is IBehavior =>
24
+ val?.name ||
25
+ val?.selector ||
26
+ val?.extends ||
27
+ val?.designerProps ||
28
+ val?.designerLocales
29
+
30
+ export const isResourceHost = (val: any): val is IResourceHost =>
31
+ val?.Resource && isResourceList(val.Resource)
32
+
33
+ export const isResourceList = (val: any): val is IResource[] =>
34
+ Array.isArray(val) && val.every(isResource)
35
+
36
+ export const isResource = (val: any): val is IResource =>
37
+ val?.node && !!val.node.isSourceNode && val.node instanceof TreeNode
38
+
39
+ export const createLocales = (...packages: IDesignerLocales[]) => {
40
+ const results = {}
41
+ packages.forEach((locales) => {
42
+ mergeLocales(results, locales)
43
+ })
44
+ return results
45
+ }
46
+
47
+ export const createBehavior = (
48
+ ...behaviors: Array<IBehaviorCreator | IBehaviorCreator[]>
49
+ ): IBehavior[] => {
50
+ return behaviors.reduce((buf: any[], behavior) => {
51
+ if (isArr(behavior)) return buf.concat(createBehavior(...behavior))
52
+ const { selector } = behavior || {}
53
+ if (!selector) return buf
54
+ if (typeof selector === 'string') {
55
+ behavior.selector = (node) => node.componentName === selector
56
+ }
57
+ return buf.concat(behavior)
58
+ }, [])
59
+ }
60
+
61
+ export const createResource = (...sources: IResourceCreator[]): IResource[] => {
62
+ return sources.reduce((buf, source) => {
63
+ return buf.concat({
64
+ ...source,
65
+ node: new TreeNode({
66
+ componentName: '$$ResourceNode$$',
67
+ isSourceNode: true,
68
+ children: source.elements || [],
69
+ }),
70
+ })
71
+ }, [])
72
+ }
73
+
74
+ export const createDesigner = (props: IEngineProps<Engine> = {}) => {
75
+ const drivers = props.drivers || []
76
+ const effects = props.effects || []
77
+ const shortcuts = props.shortcuts || []
78
+ return untracked(
79
+ () =>
80
+ new Engine({
81
+ ...props,
82
+ effects: [...effects, ...DEFAULT_EFFECTS],
83
+ drivers: [...drivers, ...DEFAULT_DRIVERS],
84
+ shortcuts: [...shortcuts, ...DEFAULT_SHORTCUTS],
85
+ })
86
+ )
87
+ }
package/src/index.ts ADDED
@@ -0,0 +1,15 @@
1
+ import * as Core from './exports'
2
+ export * from './exports'
3
+ import { globalThisPolyfill } from '@sulesky/next-shared'
4
+
5
+ if (globalThisPolyfill?.['Designable']?.['Core']) {
6
+ if (module.exports) {
7
+ module.exports = {
8
+ __esModule: true,
9
+ ...globalThisPolyfill['Designable']['Core'],
10
+ }
11
+ }
12
+ } else {
13
+ globalThisPolyfill['Designable'] = globalThisPolyfill['Designable'] || {}
14
+ globalThisPolyfill['Designable'].Core = Core
15
+ }
@@ -0,0 +1,37 @@
1
+ import { each, isPlainObj } from '@sulesky/next-shared'
2
+ import { globalThisPolyfill } from '@sulesky/next-shared'
3
+
4
+ export const lowerSnake = (str: string) => {
5
+ return String(str).replace(/\s+/g, '_').toLocaleLowerCase()
6
+ }
7
+
8
+ export const mergeLocales = (target: any, source: any) => {
9
+ if (isPlainObj(target) && isPlainObj(source)) {
10
+ each(source, function (value, key) {
11
+ const token = lowerSnake(key)
12
+ const messages = mergeLocales(target[key] || target[token], value)
13
+ target[token] = messages
14
+ })
15
+ return target
16
+ } else if (isPlainObj(source)) {
17
+ const result = Array.isArray(source) ? [] : {}
18
+ each(source, function (value, key) {
19
+ const messages = mergeLocales(undefined, value)
20
+ result[lowerSnake(key)] = messages
21
+ })
22
+ return result
23
+ }
24
+ return source
25
+ }
26
+
27
+ export const getBrowserLanguage = () => {
28
+ /* istanbul ignore next */
29
+ if (!globalThisPolyfill.navigator) {
30
+ return 'en'
31
+ }
32
+ return (
33
+ globalThisPolyfill.navigator['browserlanguage'] ||
34
+ globalThisPolyfill.navigator?.language ||
35
+ 'en'
36
+ )
37
+ }
@@ -0,0 +1,198 @@
1
+ import { Engine } from './Engine'
2
+ import { action, define, observable } from '@formily/reactive'
3
+ import { globalThisPolyfill, isValidNumber } from '@sulesky/next-shared'
4
+
5
+ export enum CursorStatus {
6
+ Normal = 'NORMAL',
7
+ DragStart = 'DRAG_START',
8
+ Dragging = 'DRAGGING',
9
+ DragStop = 'DRAG_STOP',
10
+ }
11
+
12
+ export enum CursorDragType {
13
+ Move = 'MOVE',
14
+ Resize = 'RESIZE',
15
+ Rotate = 'ROTATE',
16
+ Scale = 'SCALE',
17
+ Translate = 'TRANSLATE',
18
+ Round = 'ROUND',
19
+ }
20
+
21
+ export enum CursorType {
22
+ Normal = 'NORMAL',
23
+ Selection = 'SELECTION',
24
+ Sketch = 'SKETCH',
25
+ }
26
+
27
+ export interface ICursorPosition {
28
+ pageX?: number
29
+
30
+ pageY?: number
31
+
32
+ clientX?: number
33
+
34
+ clientY?: number
35
+
36
+ topPageX?: number
37
+
38
+ topPageY?: number
39
+
40
+ topClientX?: number
41
+
42
+ topClientY?: number
43
+ }
44
+
45
+ export interface ICursor {
46
+ status?: CursorStatus
47
+
48
+ position?: ICursorPosition
49
+
50
+ dragStartPosition?: ICursorPosition
51
+
52
+ dragEndPosition?: ICursorPosition
53
+
54
+ view?: Window
55
+ }
56
+
57
+ const DEFAULT_POSITION = {
58
+ pageX: 0,
59
+ pageY: 0,
60
+ clientX: 0,
61
+ clientY: 0,
62
+ topPageX: 0,
63
+ topPageY: 0,
64
+ topClientX: 0,
65
+ topClientY: 0,
66
+ }
67
+
68
+ const setCursorStyle = (contentWindow: Window, style: string) => {
69
+ const currentRoot = document?.getElementsByTagName?.('html')?.[0]
70
+ const root = contentWindow?.document?.getElementsByTagName('html')?.[0]
71
+ if (root && root.style.cursor !== style) {
72
+ root.style.cursor = style
73
+ }
74
+ if (currentRoot && currentRoot.style.cursor !== style) {
75
+ currentRoot.style.cursor = style
76
+ }
77
+ }
78
+
79
+ const calcPositionDelta = (
80
+ end: ICursorPosition,
81
+ start: ICursorPosition
82
+ ): ICursorPosition => {
83
+ return Object.keys(end || {}).reduce((buf, key) => {
84
+ if (isValidNumber(end?.[key]) && isValidNumber(start?.[key])) {
85
+ buf[key] = end[key] - start[key]
86
+ } else {
87
+ buf[key] = end[key]
88
+ }
89
+ return buf
90
+ }, {})
91
+ }
92
+
93
+ export class Cursor {
94
+ engine: Engine
95
+
96
+ type: CursorType | string = CursorType.Normal
97
+
98
+ dragType: CursorDragType | string = CursorDragType.Move
99
+
100
+ status: CursorStatus = CursorStatus.Normal
101
+
102
+ position: ICursorPosition = DEFAULT_POSITION
103
+
104
+ dragStartPosition: ICursorPosition
105
+
106
+ dragEndPosition: ICursorPosition
107
+
108
+ dragAtomDelta: ICursorPosition = DEFAULT_POSITION
109
+
110
+ dragStartToCurrentDelta: ICursorPosition = DEFAULT_POSITION
111
+
112
+ dragStartToEndDelta: ICursorPosition = DEFAULT_POSITION
113
+
114
+ view: Window = globalThisPolyfill
115
+
116
+ constructor(engine: Engine) {
117
+ this.engine = engine
118
+ this.makeObservable()
119
+ }
120
+
121
+ makeObservable() {
122
+ define(this, {
123
+ type: observable.ref,
124
+ dragType: observable.ref,
125
+ status: observable.ref,
126
+ position: observable.ref,
127
+ dragStartPosition: observable.ref,
128
+ dragEndPosition: observable.ref,
129
+ dragAtomDelta: observable.ref,
130
+ dragStartToCurrentDelta: observable.ref,
131
+ dragStartToEndDelta: observable.ref,
132
+ view: observable.ref,
133
+ setStyle: action,
134
+ setPosition: action,
135
+ setStatus: action,
136
+ setType: action,
137
+ })
138
+ }
139
+
140
+ get speed() {
141
+ return Math.sqrt(
142
+ Math.pow(this.dragAtomDelta.clientX, 2) +
143
+ Math.pow(this.dragAtomDelta.clientY, 2)
144
+ )
145
+ }
146
+
147
+ setStatus(status: CursorStatus) {
148
+ this.status = status
149
+ }
150
+
151
+ setType(type: CursorType | string) {
152
+ this.type = type
153
+ }
154
+
155
+ setDragType(type: CursorDragType | string) {
156
+ this.dragType = type
157
+ }
158
+
159
+ setStyle(style: string) {
160
+ this.engine.workbench.eachWorkspace((workspace) => {
161
+ setCursorStyle(workspace.viewport.contentWindow, style)
162
+ })
163
+ }
164
+
165
+ setPosition(position?: ICursorPosition) {
166
+ this.dragAtomDelta = calcPositionDelta(this.position, position)
167
+ this.position = { ...position }
168
+ if (this.status === CursorStatus.Dragging) {
169
+ this.dragStartToCurrentDelta = calcPositionDelta(
170
+ this.position,
171
+ this.dragStartPosition
172
+ )
173
+ }
174
+ }
175
+
176
+ setDragStartPosition(position?: ICursorPosition) {
177
+ if (position) {
178
+ this.dragStartPosition = { ...position }
179
+ } else {
180
+ this.dragStartPosition = null
181
+ this.dragStartToCurrentDelta = DEFAULT_POSITION
182
+ }
183
+ }
184
+
185
+ setDragEndPosition(position?: ICursorPosition) {
186
+ if (!this.dragStartPosition) return
187
+ if (position) {
188
+ this.dragEndPosition = { ...position }
189
+ this.dragStartToEndDelta = calcPositionDelta(
190
+ this.dragStartPosition,
191
+ this.dragEndPosition
192
+ )
193
+ } else {
194
+ this.dragEndPosition = null
195
+ this.dragStartToEndDelta = DEFAULT_POSITION
196
+ }
197
+ }
198
+ }
@@ -0,0 +1,108 @@
1
+ import { IEngineProps } from '../types'
2
+ import { ITreeNode, TreeNode } from './TreeNode'
3
+ import { Workbench } from './Workbench'
4
+ import { Cursor } from './Cursor'
5
+ import { Keyboard } from './Keyboard'
6
+ import { Screen, ScreenType } from './Screen'
7
+ import { Event, uid, globalThisPolyfill } from '@sulesky/next-shared'
8
+
9
+ /**
10
+ * 设计器引擎
11
+ */
12
+
13
+ export class Engine extends Event {
14
+ id: string
15
+
16
+ props: IEngineProps<Engine>
17
+
18
+ cursor: Cursor
19
+
20
+ workbench: Workbench
21
+
22
+ keyboard: Keyboard
23
+
24
+ screen: Screen
25
+
26
+ constructor(props: IEngineProps<Engine>) {
27
+ super(props)
28
+ this.props = {
29
+ ...Engine.defaultProps,
30
+ ...props,
31
+ }
32
+ this.init()
33
+ this.id = uid()
34
+ }
35
+
36
+ init() {
37
+ this.workbench = new Workbench(this)
38
+ this.screen = new Screen(this)
39
+ this.cursor = new Cursor(this)
40
+ this.keyboard = new Keyboard(this)
41
+ }
42
+
43
+ setCurrentTree(tree?: ITreeNode) {
44
+ if (this.workbench.currentWorkspace) {
45
+ this.workbench.currentWorkspace.operation.tree.from(tree)
46
+ }
47
+ }
48
+
49
+ getCurrentTree() {
50
+ return this.workbench?.currentWorkspace?.operation?.tree
51
+ }
52
+
53
+ getAllSelectedNodes() {
54
+ let results: TreeNode[] = []
55
+ for (let i = 0; i < this.workbench.workspaces.length; i++) {
56
+ const workspace = this.workbench.workspaces[i]
57
+ results = results.concat(workspace.operation.selection.selectedNodes)
58
+ }
59
+ return results
60
+ }
61
+
62
+ findNodeById(id: string) {
63
+ return TreeNode.findById(id)
64
+ }
65
+
66
+ findMovingNodes(): TreeNode[] {
67
+ const results = []
68
+ this.workbench.eachWorkspace((workspace) => {
69
+ workspace.operation.moveHelper.dragNodes?.forEach((node) => {
70
+ if (!results.includes(node)) {
71
+ results.push(node)
72
+ }
73
+ })
74
+ })
75
+ return results
76
+ }
77
+
78
+ createNode(node: ITreeNode, parent?: TreeNode) {
79
+ return new TreeNode(node, parent)
80
+ }
81
+
82
+ mount() {
83
+ this.attachEvents(globalThisPolyfill)
84
+ }
85
+
86
+ unmount() {
87
+ this.detachEvents()
88
+ }
89
+
90
+ static defaultProps: IEngineProps<Engine> = {
91
+ shortcuts: [],
92
+ effects: [],
93
+ drivers: [],
94
+ rootComponentName: 'Root',
95
+ sourceIdAttrName: 'data-designer-source-id',
96
+ nodeIdAttrName: 'data-designer-node-id',
97
+ contentEditableAttrName: 'data-content-editable',
98
+ contentEditableNodeIdAttrName: 'data-content-editable-node-id',
99
+ clickStopPropagationAttrName: 'data-click-stop-propagation',
100
+ nodeSelectionIdAttrName: 'data-designer-node-helpers-id',
101
+ nodeDragHandlerAttrName: 'data-designer-node-drag-handler',
102
+ screenResizeHandlerAttrName: 'data-designer-screen-resize-handler',
103
+ nodeResizeHandlerAttrName: 'data-designer-node-resize-handler',
104
+ outlineNodeIdAttrName: 'data-designer-outline-node-id',
105
+ nodeTranslateAttrName: 'data-designer-node-translate-handler',
106
+ defaultScreenType: ScreenType.PC,
107
+ }
108
+ }
@@ -0,0 +1,125 @@
1
+ import { define, observable, action } from '@formily/reactive'
2
+
3
+ export interface IHistoryProps<T> {
4
+ onPush?: (item: T) => void
5
+ onRedo?: (item: T) => void
6
+ onUndo?: (item: T) => void
7
+ onGoto?: (item: T) => void
8
+ }
9
+
10
+ export interface HistoryItem<T> {
11
+ data: T
12
+ type?: string
13
+ timestamp: number
14
+ }
15
+
16
+ export interface ISerializable {
17
+ from(json: any): void //导入数据
18
+ serialize(): any //序列化模型,用于历史记录保存
19
+ }
20
+
21
+ export class History<T extends ISerializable = any> {
22
+ context: ISerializable
23
+ props: IHistoryProps<HistoryItem<T>>
24
+ current = 0
25
+ history: HistoryItem<T>[] = []
26
+ updateTimer = null
27
+ maxSize = 100
28
+ locking = false
29
+ constructor(context: T, props?: IHistoryProps<HistoryItem<T>>) {
30
+ this.context = context
31
+ this.props = props
32
+ this.push()
33
+ this.makeObservable()
34
+ }
35
+
36
+ makeObservable() {
37
+ define(this, {
38
+ current: observable.ref,
39
+ history: observable.shallow,
40
+ push: action,
41
+ undo: action,
42
+ redo: action,
43
+ goTo: action,
44
+ clear: action,
45
+ })
46
+ }
47
+
48
+ list() {
49
+ return this.history
50
+ }
51
+
52
+ push(type?: string) {
53
+ if (this.locking) return
54
+ if (this.current < this.history.length - 1) {
55
+ this.history = this.history.slice(0, this.current + 1)
56
+ }
57
+ const item = {
58
+ data: this.context.serialize(),
59
+ timestamp: Date.now(),
60
+ type,
61
+ }
62
+ this.current = this.history.length
63
+ this.history.push(item)
64
+ const overSizeCount = this.history.length - this.maxSize
65
+ if (overSizeCount > 0) {
66
+ this.history.splice(0, overSizeCount)
67
+ this.current = this.history.length - 1
68
+ }
69
+ if (this.props?.onPush) {
70
+ this.props.onPush(item)
71
+ }
72
+ }
73
+
74
+ get allowUndo() {
75
+ return this.history.length > 0 && this.current - 1 >= 0
76
+ }
77
+
78
+ get allowRedo() {
79
+ return this.history.length > this.current + 1
80
+ }
81
+
82
+ redo() {
83
+ if (this.allowRedo) {
84
+ const item = this.history[this.current + 1]
85
+ this.locking = true
86
+ this.context.from(item.data)
87
+ this.locking = false
88
+ this.current++
89
+ if (this.props?.onRedo) {
90
+ this.props.onRedo(item)
91
+ }
92
+ }
93
+ }
94
+
95
+ undo() {
96
+ if (this.allowUndo) {
97
+ const item = this.history[this.current - 1]
98
+ this.locking = true
99
+ this.context.from(item.data)
100
+ this.locking = false
101
+ this.current--
102
+ if (this.props?.onUndo) {
103
+ this.props.onUndo(item)
104
+ }
105
+ }
106
+ }
107
+
108
+ goTo(index: number) {
109
+ const item = this.history[index]
110
+ if (item) {
111
+ this.locking = true
112
+ this.context.from(item.data)
113
+ this.locking = false
114
+ this.current = index
115
+ if (this.props?.onGoto) {
116
+ this.props.onGoto(item)
117
+ }
118
+ }
119
+ }
120
+
121
+ clear() {
122
+ this.history = []
123
+ this.current = 0
124
+ }
125
+ }
@@ -0,0 +1,49 @@
1
+ import { observable, define, action } from '@formily/reactive'
2
+ import { Operation } from './Operation'
3
+ import { TreeNode } from './TreeNode'
4
+ import { HoverNodeEvent } from '../events'
5
+
6
+ export interface IHoverProps {
7
+ operation: Operation
8
+ }
9
+
10
+ export class Hover {
11
+ node: TreeNode = null
12
+ operation: Operation
13
+ constructor(props?: IHoverProps) {
14
+ this.operation = props?.operation
15
+ this.makeObservable()
16
+ }
17
+
18
+ setHover(node?: TreeNode) {
19
+ if (node) {
20
+ this.node = node
21
+ } else {
22
+ this.node = null
23
+ }
24
+ this.trigger()
25
+ }
26
+
27
+ clear() {
28
+ this.node = null
29
+ }
30
+
31
+ trigger() {
32
+ if (this.operation) {
33
+ return this.operation.dispatch(
34
+ new HoverNodeEvent({
35
+ target: this.operation.tree,
36
+ source: this.node,
37
+ })
38
+ )
39
+ }
40
+ }
41
+
42
+ makeObservable() {
43
+ define(this, {
44
+ node: observable.ref,
45
+ setHover: action,
46
+ clear: action,
47
+ })
48
+ }
49
+ }