aldehyde 0.2.494 → 0.2.496

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 (686) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +2 -2
  3. package/lib/controls/2dEditor/2dEditor/index.less +5 -5
  4. package/lib/controls/2dEditor/2dView/index.less +8 -8
  5. package/lib/controls/2dEditor/components/component.less +83 -83
  6. package/lib/controls/action/index.css +8 -8
  7. package/lib/controls/action/index.d.ts.map +1 -1
  8. package/lib/controls/chemstruc/graph.d.ts.map +1 -1
  9. package/lib/controls/chemstruc/index.css +28 -28
  10. package/lib/controls/collapse-card/index.css +8 -8
  11. package/lib/controls/collapse-card/index.d.ts.map +1 -1
  12. package/lib/controls/cquery/cquick-button.d.ts.map +1 -1
  13. package/lib/controls/entity-select/entity-select.d.ts.map +1 -1
  14. package/lib/controls/entity-select/index.css +7 -7
  15. package/lib/controls/entity-select/lab-tree-select.d.ts.map +1 -1
  16. package/lib/controls/entity-select/popover-entity-select.d.ts.map +1 -1
  17. package/lib/controls/file-view/index.js +1 -1
  18. package/lib/controls/file-view/index.js.map +1 -1
  19. package/lib/controls/file-view/index.less +9 -9
  20. package/lib/controls/html-editor/index.less +67 -67
  21. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  22. package/lib/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +63 -63
  23. package/lib/controls/password-setter/index.css +2 -2
  24. package/lib/controls/password-setter/index.d.ts.map +1 -1
  25. package/lib/controls/qr-code/index.less +28 -28
  26. package/lib/controls/relation-existion/index.css +3 -3
  27. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  28. package/lib/controls/rfield/index.css +4 -4
  29. package/lib/controls/rfield/index.d.ts.map +1 -1
  30. package/lib/controls/select/index.d.ts.map +1 -1
  31. package/lib/controls/signature/index.d.ts.map +1 -1
  32. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  33. package/lib/controls/text/index.less +7 -7
  34. package/lib/controls/upload/index.d.ts.map +1 -1
  35. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  36. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  37. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  38. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  39. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  40. package/lib/detail/button/index.css +42 -42
  41. package/lib/detail/dtmpl.css +72 -72
  42. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  43. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  44. package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
  45. package/lib/detail/rightbar/index.css +34 -34
  46. package/lib/detail/rightbar/index.d.ts.map +1 -1
  47. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  48. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  49. package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
  50. package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
  51. package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
  52. package/lib/draw-canvas-edit/components/asset-bar/index.less +35 -35
  53. package/lib/draw-canvas-edit/components/main-header/index.less +23 -23
  54. package/lib/draw-canvas-edit/components/render/components/index.less +60 -60
  55. package/lib/draw-canvas-edit/components/render/components/workstation-component.js +6 -6
  56. package/lib/draw-canvas-edit/index.less +48 -48
  57. package/lib/draw-canvas-view/index.less +66 -66
  58. package/lib/export/export-frame.css +2 -2
  59. package/lib/export/export-frame.d.ts.map +1 -1
  60. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  61. package/lib/form/dtmpl-form.css +3 -3
  62. package/lib/form/dtmpl-form.d.ts.map +1 -1
  63. package/lib/form/field-group-form.d.ts.map +1 -1
  64. package/lib/form/form-Item-group.d.ts.map +1 -1
  65. package/lib/form/index.css +12 -12
  66. package/lib/import/excel-import.d.ts.map +1 -1
  67. package/lib/import/index.css +53 -53
  68. package/lib/import/template.css +50 -50
  69. package/lib/layout/common.css +64 -64
  70. package/lib/layout/coverstyle.css +51 -51
  71. package/lib/layout/footer/index.css +5 -5
  72. package/lib/layout/header/index.css +122 -122
  73. package/lib/layout/menu/block.css +7 -7
  74. package/lib/layout/menu/block.d.ts.map +1 -1
  75. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  76. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  77. package/lib/layout/menu/message-bar.less +73 -73
  78. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  79. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  80. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  81. package/lib/layout/sidebar/index.css +57 -57
  82. package/lib/layout2/css/header.css +41 -41
  83. package/lib/layout2/css/sider.less +17 -17
  84. package/lib/layout2/css/tabs-layout.less +18 -18
  85. package/lib/layout2/page.d.ts +2 -1
  86. package/lib/layout2/page.d.ts.map +1 -1
  87. package/lib/layout2/page.js +19 -8
  88. package/lib/layout2/page.js.map +1 -1
  89. package/lib/layout2/type/layout-type.d.ts +1 -0
  90. package/lib/layout2/type/layout-type.d.ts.map +1 -1
  91. package/lib/layout3/css/header.less +195 -195
  92. package/lib/layout3/css/main.less +161 -161
  93. package/lib/layout3/css/sider.less +32 -32
  94. package/lib/layout3/css/tabs-layout.less +38 -38
  95. package/lib/layout4/css/header.less +196 -196
  96. package/lib/layout4/css/main.less +154 -154
  97. package/lib/layout4/css/sider.less +37 -37
  98. package/lib/layout4/css/tabs-layout.less +42 -42
  99. package/lib/layout5/css/header.less +35 -35
  100. package/lib/layout5/css/sider.less +18 -18
  101. package/lib/list/calendar/index.less +20 -20
  102. package/lib/list/card-list/index.less +154 -154
  103. package/lib/list/gantt/index.less +8 -8
  104. package/lib/list/vertical-list/index.less +208 -208
  105. package/lib/login/index.css +19 -19
  106. package/lib/login/login.d.ts.map +1 -1
  107. package/lib/login/vertify/index.css +143 -143
  108. package/lib/login3/index.less +136 -136
  109. package/lib/lowcode-components/act-table/index.less +26 -26
  110. package/lib/lowcode-components/base-button/index.less +7 -7
  111. package/lib/lowcode-components/base-map/index.js +6 -6
  112. package/lib/lowcode-components/base-radio/index.less +23 -23
  113. package/lib/lowcode-components/base-table/index.less +61 -61
  114. package/lib/lowcode-components/base-tabs/index.less +14 -14
  115. package/lib/lowcode-components/base-text/index.less +19 -19
  116. package/lib/lowcode-components/border/border10/index.less +26 -26
  117. package/lib/lowcode-components/border/border11/index.js +46 -46
  118. package/lib/lowcode-components/border/border11/index.less +17 -17
  119. package/lib/lowcode-components/border/border12/index.js +13 -13
  120. package/lib/lowcode-components/border/border12/index.less +13 -13
  121. package/lib/lowcode-components/border/border13/index.js +5 -5
  122. package/lib/lowcode-components/border/border13/index.less +13 -13
  123. package/lib/lowcode-components/border/border2/index.less +17 -17
  124. package/lib/lowcode-components/border/border3/index.less +25 -25
  125. package/lib/lowcode-components/border/border4/index.js +2 -2
  126. package/lib/lowcode-components/border/border4/index.less +72 -72
  127. package/lib/lowcode-components/border/border5/index.js +2 -2
  128. package/lib/lowcode-components/border/border5/index.less +35 -35
  129. package/lib/lowcode-components/border/border6/index.less +17 -17
  130. package/lib/lowcode-components/border/border7/index.less +26 -26
  131. package/lib/lowcode-components/border/border8/index.less +13 -13
  132. package/lib/lowcode-components/border/border9/index.js +14 -14
  133. package/lib/lowcode-components/border/border9/index.less +13 -13
  134. package/lib/lowcode-components/data-number/index.less +10 -10
  135. package/lib/lowcode-components/date-time/index.less +4 -4
  136. package/lib/lowcode-components/decoration/decoration1/index.less +7 -7
  137. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  138. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  139. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  140. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  141. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  142. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  143. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  144. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  145. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  146. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  147. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  148. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  149. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  150. package/lib/lowcode-components/four-angle-glow-border/index.less +49 -49
  151. package/lib/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  152. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  153. package/lib/lowcode-components/lowcode-view/index.less +19 -19
  154. package/lib/lowcode-components/search-form/index.less +25 -25
  155. package/lib/lowcode-components/text-scroller/index.less +28 -28
  156. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  157. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  158. package/lib/module/index.less +4 -4
  159. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  160. package/lib/module/ltmpl-table.d.ts +7 -0
  161. package/lib/module/ltmpl-table.d.ts.map +1 -1
  162. package/lib/module/ltmpl-table.js +12 -16
  163. package/lib/module/ltmpl-table.js.map +1 -1
  164. package/lib/routable/dtmpl-route.d.ts.map +1 -1
  165. package/lib/routable/dtmpl-route.js +8 -2
  166. package/lib/routable/dtmpl-route.js.map +1 -1
  167. package/lib/routable/import-route.d.ts.map +1 -1
  168. package/lib/routable/import-route.js +9 -1
  169. package/lib/routable/import-route.js.map +1 -1
  170. package/lib/routable/index.less +25 -25
  171. package/lib/routable/ltmpl-route.d.ts.map +1 -1
  172. package/lib/routable/ltmpl-route.js +13 -6
  173. package/lib/routable/ltmpl-route.js.map +1 -1
  174. package/lib/routable/splitview-ltmpl-route.d.ts.map +1 -1
  175. package/lib/routable/splitview-ltmpl-route.js +11 -10
  176. package/lib/routable/splitview-ltmpl-route.js.map +1 -1
  177. package/lib/routable/ttmpl-route.d.ts.map +1 -1
  178. package/lib/routable/ttmpl-route.js +9 -2
  179. package/lib/routable/ttmpl-route.js.map +1 -1
  180. package/lib/table/act-table.d.ts +1 -0
  181. package/lib/table/act-table.d.ts.map +1 -1
  182. package/lib/table/act-table.js +31 -9
  183. package/lib/table/act-table.js.map +1 -1
  184. package/lib/table/column/index.less +85 -85
  185. package/lib/table/index.css +211 -211
  186. package/lib/table/modal-select-table.d.ts.map +1 -1
  187. package/lib/table/page-chart.js +1 -1
  188. package/lib/table/page-chart.js.map +1 -1
  189. package/lib/table/page-chart.less +9 -9
  190. package/lib/table/pagination.css +14 -14
  191. package/lib/table/pagination.d.ts.map +1 -1
  192. package/lib/table/relation-table.d.ts.map +1 -1
  193. package/lib/table/row-table.d.ts +6 -0
  194. package/lib/table/row-table.d.ts.map +1 -1
  195. package/lib/table/row-table.js +21 -6
  196. package/lib/table/row-table.js.map +1 -1
  197. package/lib/table/selected-rows-card.d.ts.map +1 -1
  198. package/lib/table/stat/restat.d.ts.map +1 -1
  199. package/lib/tmpl/hcservice-v3.d.ts +1 -1
  200. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  201. package/lib/tmpl/hcservice-v3.js +3 -3
  202. package/lib/tmpl/hcservice-v3.js.map +1 -1
  203. package/lib/tmpl/interface.d.ts +1 -0
  204. package/lib/tmpl/interface.d.ts.map +1 -1
  205. package/lib/tree/act-tree.d.ts +1 -0
  206. package/lib/tree/act-tree.d.ts.map +1 -1
  207. package/lib/tree/act-tree.js +6 -7
  208. package/lib/tree/act-tree.js.map +1 -1
  209. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  210. package/lib/tree/index.css +22 -22
  211. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  212. package/lib/tree/tree-utils.d.ts +1 -1
  213. package/lib/tree/tree-utils.d.ts.map +1 -1
  214. package/lib/tree/tree-utils.js +4 -4
  215. package/lib/tree/tree-utils.js.map +1 -1
  216. package/lib/units/index.d.ts +4 -0
  217. package/lib/units/index.d.ts.map +1 -1
  218. package/lib/units/index.js +10 -3
  219. package/lib/units/index.js.map +1 -1
  220. package/lib/welcome/components/menu-card.less +96 -96
  221. package/lib/welcome/components/page-card.less +49 -49
  222. package/lib/welcome/components/quick-entrance.less +120 -120
  223. package/lib/welcome/components/user-menus.less +192 -192
  224. package/lib/welcome/components/workbench.less +118 -118
  225. package/lib/welcome/index.css +13 -13
  226. package/package.json +224 -224
  227. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  228. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  229. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  230. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  231. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  232. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  233. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  234. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  235. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  236. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  237. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  238. package/src/aldehyde/controls/action/index.css +8 -8
  239. package/src/aldehyde/controls/action/index.tsx +406 -406
  240. package/src/aldehyde/controls/action/utils.tsx +306 -306
  241. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  242. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  243. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  244. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  245. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  246. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  247. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  248. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  249. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  250. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  251. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  252. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  253. package/src/aldehyde/controls/direct-file-view/index.tsx +147 -147
  254. package/src/aldehyde/controls/direct-upload/index.tsx +140 -140
  255. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  256. package/src/aldehyde/controls/entity-select/index.css +7 -7
  257. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  258. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  259. package/src/aldehyde/controls/entry-control.tsx +431 -431
  260. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  261. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  262. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  263. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  264. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  265. package/src/aldehyde/controls/file-view/index.less +9 -9
  266. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  267. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  268. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  269. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  270. package/src/aldehyde/controls/html-editor/index.less +67 -67
  271. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  272. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  273. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  274. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +63 -63
  275. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.json +93 -93
  276. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  277. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  278. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  279. package/src/aldehyde/controls/password-setter/index.css +2 -2
  280. package/src/aldehyde/controls/password-setter/index.js +88 -88
  281. package/src/aldehyde/controls/progress/index.tsx +74 -74
  282. package/src/aldehyde/controls/qr-code/index.less +28 -28
  283. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  284. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  285. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  286. package/src/aldehyde/controls/rfield/index.css +4 -4
  287. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  288. package/src/aldehyde/controls/select/index.tsx +226 -226
  289. package/src/aldehyde/controls/signature/index.tsx +226 -226
  290. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  291. package/src/aldehyde/controls/steps/index.tsx +59 -59
  292. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  293. package/src/aldehyde/controls/text/index.less +7 -7
  294. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  295. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  296. package/src/aldehyde/controls/upload/index.tsx +128 -128
  297. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  298. package/src/aldehyde/controls/upload-read-excel/index.tsx +43 -43
  299. package/src/aldehyde/controls/view-control.tsx +289 -289
  300. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  301. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  302. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  303. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +91 -91
  304. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  305. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  306. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  307. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  308. package/src/aldehyde/detail/button/index.css +42 -42
  309. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  310. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  311. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  312. package/src/aldehyde/detail/dtmpl.css +72 -72
  313. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  314. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  315. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  316. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  317. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  318. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  319. package/src/aldehyde/detail/rightbar/index.css +34 -34
  320. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  321. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  322. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  323. package/src/aldehyde/detail/view/dtmpl-view.tsx +334 -334
  324. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  325. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  326. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  327. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  328. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  329. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.less +35 -35
  330. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +110 -110
  331. package/src/aldehyde/draw-canvas-edit/components/main-header/index.less +23 -23
  332. package/src/aldehyde/draw-canvas-edit/components/main-header/index.tsx +263 -263
  333. package/src/aldehyde/draw-canvas-edit/components/render/components/index.less +60 -60
  334. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -3
  335. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +220 -220
  336. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +177 -177
  337. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +330 -330
  338. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  339. package/src/aldehyde/draw-canvas-edit/components/render/draws/index.ts +7 -7
  340. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1415
  341. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -274
  342. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -71
  343. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -166
  344. package/src/aldehyde/draw-canvas-edit/components/render/graphs/base-graph.ts +241 -241
  345. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  346. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +699 -699
  347. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +500 -500
  348. package/src/aldehyde/draw-canvas-edit/components/render/graphs/index.ts +5 -5
  349. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +493 -493
  350. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +680 -680
  351. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-handlers.ts +68 -68
  352. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +77 -77
  353. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +113 -113
  354. package/src/aldehyde/draw-canvas-edit/components/render/handlers/index.ts +9 -9
  355. package/src/aldehyde/draw-canvas-edit/components/render/handlers/key-move-handlers.ts +49 -49
  356. package/src/aldehyde/draw-canvas-edit/components/render/handlers/link-handlers.ts +45 -45
  357. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +410 -410
  358. package/src/aldehyde/draw-canvas-edit/components/render/handlers/shutcut-handlers.ts +45 -45
  359. package/src/aldehyde/draw-canvas-edit/components/render/handlers/text-handlers.ts +81 -81
  360. package/src/aldehyde/draw-canvas-edit/components/render/handlers/zoom-handlers.ts +59 -59
  361. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +817 -817
  362. package/src/aldehyde/draw-canvas-edit/components/render/tools/align-tool.ts +89 -89
  363. package/src/aldehyde/draw-canvas-edit/components/render/tools/asset-tool.ts +154 -154
  364. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  365. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +269 -269
  366. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  367. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +588 -588
  368. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  369. package/src/aldehyde/draw-canvas-edit/components/render/tools/link-tool.ts +222 -222
  370. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  371. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  372. package/src/aldehyde/draw-canvas-edit/components/render/tools/z-index-tool.ts +224 -224
  373. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +298 -298
  374. package/src/aldehyde/draw-canvas-edit/components/render/utils/a-star.ts +116 -116
  375. package/src/aldehyde/draw-canvas-edit/components/render/utils/bezier-scene-func.ts +72 -72
  376. package/src/aldehyde/draw-canvas-edit/components/setting-form/imag-upload.tsx +119 -119
  377. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +305 -305
  378. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  379. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  380. package/src/aldehyde/draw-canvas-edit/index.tsx +213 -213
  381. package/src/aldehyde/draw-canvas-view/index.less +66 -66
  382. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  383. package/src/aldehyde/draw-canvas-view/view.tsx +237 -237
  384. package/src/aldehyde/export/export-frame.css +2 -2
  385. package/src/aldehyde/export/export-frame.tsx +301 -301
  386. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  387. package/src/aldehyde/form/criteria-form.tsx +604 -604
  388. package/src/aldehyde/form/dtmpl-form.css +3 -3
  389. package/src/aldehyde/form/dtmpl-form.tsx +571 -571
  390. package/src/aldehyde/form/field-group-form.tsx +103 -103
  391. package/src/aldehyde/form/fields-form.tsx +45 -45
  392. package/src/aldehyde/form/form-Item-group.tsx +246 -246
  393. package/src/aldehyde/form/index.css +12 -12
  394. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  395. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  396. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  397. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  398. package/src/aldehyde/icon/index.tsx +28 -28
  399. package/src/aldehyde/import/excel-import.tsx +450 -450
  400. package/src/aldehyde/import/index.css +53 -53
  401. package/src/aldehyde/import/template.css +50 -50
  402. package/src/aldehyde/index.tsx +220 -220
  403. package/src/aldehyde/layout/MainPage.tsx +334 -334
  404. package/src/aldehyde/layout/common.css +64 -64
  405. package/src/aldehyde/layout/coverstyle.css +51 -51
  406. package/src/aldehyde/layout/footer/index.css +5 -5
  407. package/src/aldehyde/layout/footer/index.js +17 -17
  408. package/src/aldehyde/layout/header/index.css +122 -122
  409. package/src/aldehyde/layout/header/index.tsx +152 -152
  410. package/src/aldehyde/layout/menu/block.css +7 -7
  411. package/src/aldehyde/layout/menu/block.tsx +174 -174
  412. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  413. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  414. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  415. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  416. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  417. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  418. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  419. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  420. package/src/aldehyde/layout/sidebar/index.css +57 -57
  421. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  422. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  423. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  424. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  425. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  426. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  427. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  428. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  429. package/src/aldehyde/layout2/css/header.css +41 -41
  430. package/src/aldehyde/layout2/css/sider.less +17 -17
  431. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  432. package/src/aldehyde/layout2/header.tsx +278 -278
  433. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  434. package/src/aldehyde/layout2/main.tsx +30 -30
  435. package/src/aldehyde/layout2/page.tsx +323 -315
  436. package/src/aldehyde/layout2/sider.tsx +230 -230
  437. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  438. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  439. package/src/aldehyde/layout2/type/layout-type.ts +16 -15
  440. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  441. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  442. package/src/aldehyde/layout3/components/time.tsx +25 -25
  443. package/src/aldehyde/layout3/css/header.less +195 -195
  444. package/src/aldehyde/layout3/css/main.less +161 -161
  445. package/src/aldehyde/layout3/css/sider.less +32 -32
  446. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  447. package/src/aldehyde/layout3/header.tsx +187 -187
  448. package/src/aldehyde/layout3/main.tsx +29 -29
  449. package/src/aldehyde/layout3/page.tsx +110 -110
  450. package/src/aldehyde/layout3/sider.tsx +198 -198
  451. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  452. package/src/aldehyde/layout4/css/header.less +196 -196
  453. package/src/aldehyde/layout4/css/main.less +154 -154
  454. package/src/aldehyde/layout4/css/sider.less +37 -37
  455. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  456. package/src/aldehyde/layout4/header.tsx +190 -190
  457. package/src/aldehyde/layout4/imgs/user.svg +26 -26
  458. package/src/aldehyde/layout4/main.tsx +29 -29
  459. package/src/aldehyde/layout4/page.tsx +125 -125
  460. package/src/aldehyde/layout4/sider.tsx +201 -201
  461. package/src/aldehyde/layout5/css/header.less +35 -35
  462. package/src/aldehyde/layout5/css/sider.less +18 -18
  463. package/src/aldehyde/layout5/header.tsx +204 -204
  464. package/src/aldehyde/layout5/page.tsx +107 -107
  465. package/src/aldehyde/layout5/sider.tsx +235 -235
  466. package/src/aldehyde/list/calendar/index.less +20 -20
  467. package/src/aldehyde/list/calendar/index.tsx +157 -157
  468. package/src/aldehyde/list/card-list/card-list-item.tsx +112 -112
  469. package/src/aldehyde/list/card-list/index.less +154 -154
  470. package/src/aldehyde/list/card-list/index.tsx +83 -83
  471. package/src/aldehyde/list/gantt/index.less +8 -8
  472. package/src/aldehyde/list/gantt/index.tsx +508 -508
  473. package/src/aldehyde/list/vertical-list/index.less +208 -208
  474. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  475. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  476. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  477. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  478. package/src/aldehyde/locale/langMp.ts +45 -45
  479. package/src/aldehyde/locale/translate.ts +80 -80
  480. package/src/aldehyde/locale/useLocale.ts +72 -72
  481. package/src/aldehyde/login/context-setter.tsx +130 -130
  482. package/src/aldehyde/login/index.css +19 -19
  483. package/src/aldehyde/login/login.tsx +255 -255
  484. package/src/aldehyde/login/router-login.tsx +107 -107
  485. package/src/aldehyde/login/vertify/index.css +143 -143
  486. package/src/aldehyde/login/vertify/index.tsx +360 -360
  487. package/src/aldehyde/login/vertify/tool.ts +13 -13
  488. package/src/aldehyde/login2/login-page.tsx +92 -92
  489. package/src/aldehyde/login2/login.tsx +227 -227
  490. package/src/aldehyde/login3/index.less +136 -136
  491. package/src/aldehyde/login3/login-page.tsx +71 -71
  492. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  493. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  494. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  495. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +272 -272
  496. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  497. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  498. package/src/aldehyde/lowcode-components/base-color-block/index.tsx +31 -31
  499. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  500. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  501. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  502. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  503. package/src/aldehyde/lowcode-components/base-table/index.less +61 -61
  504. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  505. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  506. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  507. package/src/aldehyde/lowcode-components/base-text/index.less +19 -19
  508. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  509. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  510. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  511. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  512. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  513. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  514. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  515. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  516. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  517. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  518. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  519. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  520. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  521. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  522. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  523. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  524. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  525. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  526. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  527. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  528. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  529. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  530. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  531. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  532. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  533. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  534. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  535. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  536. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  537. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +442 -442
  538. package/src/aldehyde/lowcode-components/column-chart/index.tsx +352 -352
  539. package/src/aldehyde/lowcode-components/data-number/index.less +10 -10
  540. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  541. package/src/aldehyde/lowcode-components/data.d.ts +19 -19
  542. package/src/aldehyde/lowcode-components/date-time/index.less +4 -4
  543. package/src/aldehyde/lowcode-components/date-time/index.tsx +64 -64
  544. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  545. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  546. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  547. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  548. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  549. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  550. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  551. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  552. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  553. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  554. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  555. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  556. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  557. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  558. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  559. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  560. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  561. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  562. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  563. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  564. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  565. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  566. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  567. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  568. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.less +49 -49
  569. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.tsx +53 -53
  570. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  571. package/src/aldehyde/lowcode-components/index.ts +130 -130
  572. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +362 -362
  573. package/src/aldehyde/lowcode-components/line-chart/index.tsx +352 -352
  574. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  575. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-controller.ts +64 -64
  576. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-definition.ts +77 -77
  577. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-designer-loader.ts +36 -36
  578. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  579. package/src/aldehyde/lowcode-components/lowcode-view/component/component-container.tsx +91 -91
  580. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  581. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  582. package/src/aldehyde/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  583. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/controller.ts +36 -36
  584. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/definition.ts +53 -53
  585. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/index.tsx +15 -15
  586. package/src/aldehyde/lowcode-components/lowcode-view/component/layer-builder.tsx +98 -98
  587. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  588. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  589. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +121 -121
  590. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  591. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  592. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +279 -279
  593. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  594. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +353 -353
  595. package/src/aldehyde/lowcode-components/placeholder-component/index.tsx +81 -81
  596. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  597. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  598. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  599. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  600. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  601. package/src/aldehyde/lowcode-components/text-scroller/index.less +28 -28
  602. package/src/aldehyde/lowcode-components/text-scroller/index.tsx +173 -173
  603. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  604. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  605. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  606. package/src/aldehyde/module/dtmpl-edit-card.tsx +479 -479
  607. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +24 -24
  608. package/src/aldehyde/module/dtmpl-edit-modal.tsx +26 -26
  609. package/src/aldehyde/module/dtmpl-edit-page.tsx +600 -600
  610. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  611. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  612. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  613. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  614. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  615. package/src/aldehyde/module/index.less +4 -4
  616. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  617. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  618. package/src/aldehyde/module/ltmpl-table.tsx +387 -388
  619. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  620. package/src/aldehyde/routable/dtmpl-route.tsx +179 -173
  621. package/src/aldehyde/routable/import-route.tsx +42 -35
  622. package/src/aldehyde/routable/index.less +25 -25
  623. package/src/aldehyde/routable/ltmpl-route.tsx +549 -544
  624. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +385 -382
  625. package/src/aldehyde/routable/ttmpl-route.tsx +98 -93
  626. package/src/aldehyde/routable/withroute.tsx +36 -36
  627. package/src/aldehyde/sso-Login/index.tsx +73 -73
  628. package/src/aldehyde/sso-Login/service/index.js +16 -16
  629. package/src/aldehyde/sso-Login/service/login.js +75 -75
  630. package/src/aldehyde/table/act-table.tsx +1865 -1846
  631. package/src/aldehyde/table/column/column-builder.tsx +882 -882
  632. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  633. package/src/aldehyde/table/column/index.less +85 -85
  634. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  635. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  636. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  637. package/src/aldehyde/table/index.css +211 -211
  638. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  639. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  640. package/src/aldehyde/table/page-chart.less +9 -9
  641. package/src/aldehyde/table/page-chart.tsx +196 -196
  642. package/src/aldehyde/table/page-config-button.tsx +203 -203
  643. package/src/aldehyde/table/pagination.css +14 -14
  644. package/src/aldehyde/table/pagination.tsx +81 -81
  645. package/src/aldehyde/table/query-table.tsx +668 -668
  646. package/src/aldehyde/table/relation-table.tsx +1078 -1078
  647. package/src/aldehyde/table/report-table.tsx +125 -125
  648. package/src/aldehyde/table/resizable-table.tsx +97 -97
  649. package/src/aldehyde/table/row-table.tsx +45 -22
  650. package/src/aldehyde/table/select-table.tsx +559 -559
  651. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  652. package/src/aldehyde/table/stat/restat.tsx +122 -122
  653. package/src/aldehyde/table/table-util.tsx +25 -25
  654. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  655. package/src/aldehyde/tmpl/hc-data-source.tsx +574 -574
  656. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  657. package/src/aldehyde/tmpl/interface.tsx +940 -939
  658. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  659. package/src/aldehyde/tmpl/superagent.js +146 -146
  660. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  661. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  662. package/src/aldehyde/tree/act-tree.tsx +219 -217
  663. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  664. package/src/aldehyde/tree/index.css +22 -22
  665. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  666. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  667. package/src/aldehyde/tree/tree-node.tsx +73 -73
  668. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  669. package/src/aldehyde/units/EncryptUtils.js +37 -37
  670. package/src/aldehyde/units/image.d.ts +7 -7
  671. package/src/aldehyde/units/index.tsx +1375 -1367
  672. package/src/aldehyde/units/storage.js +2 -2
  673. package/src/aldehyde/utils/dsu.ts +27 -27
  674. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  675. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  676. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  677. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  678. package/src/aldehyde/welcome/components/page-card.less +49 -49
  679. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  680. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  681. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  682. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  683. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  684. package/src/aldehyde/welcome/components/workbench.less +118 -118
  685. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  686. package/src/aldehyde/welcome/index.css +13 -13
@@ -1,458 +1,458 @@
1
- import Konva from 'konva';
2
- import { Render } from '../index';
3
- import { SortItem } from '../types';
4
-
5
- interface AlignRect {
6
- x: number;
7
- y: number;
8
- width: number;
9
- height: number;
10
- }
11
-
12
- type SortItemPair = [SortItem, SortItem];
13
-
14
- export class AttractTool {
15
-
16
- private render: Render;
17
- constructor(render: Render) {
18
- this.render = render;
19
- }
20
- // 对齐线
21
- alignLines: Konva.Line[] = [];
22
-
23
- // 对齐线清除
24
- alignLinesClear() {
25
- for (const line of this.alignLines) {
26
- line.destroy();
27
- }
28
- this.alignLines = [];
29
- }
30
-
31
- // 从选中节点 getClientRect 计算真实边界框,绕过 back rect 的 padding
32
- private getSelectingNodesRect(nodes: Konva.Node[]): AlignRect | null {
33
- if (nodes.length === 0) return null;
34
- let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
35
- for (const node of nodes) {
36
- const r = node.getClientRect();
37
- if (r.x < minX) minX = r.x;
38
- if (r.y < minY) minY = r.y;
39
- if (r.x + r.width > maxX) maxX = r.x + r.width;
40
- if (r.y + r.height > maxY) maxY = r.y + r.height;
41
- }
42
- return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
43
- }
44
-
45
- getSortItems(rect: AlignRect, targetPadding?: number) {
46
- const stageState = this.render.getStageState();
47
- const padding = targetPadding ?? this.render.transformer.padding();
48
- // 横向所有需要判断对齐的 x 坐标
49
- const sortX: Array<SortItem> = [];
50
- // 纵向向所有需要判断对齐的 y 坐标
51
- const sortY: Array<SortItem> = [];
52
- // 选择目标所有的对齐 x(使用实际节点边缘而非 back rect,补偿 padding)
53
- sortX.push(
54
- { value: this.render.toStageValue(rect.x - stageState.x + padding) },
55
- { value: this.render.toStageValue(rect.x - stageState.x + rect.width / 2) },
56
- { value: this.render.toStageValue(rect.x - stageState.x + rect.width - padding) }
57
- );
58
- // 选择目标所有的对齐 y(使用实际节点边缘而非 back rect,补偿 padding)
59
- sortY.push(
60
- { value: this.render.toStageValue(rect.y - stageState.y + padding) },
61
- { value: this.render.toStageValue(rect.y - stageState.y + rect.height / 2) },
62
- { value: this.render.toStageValue(rect.y - stageState.y + rect.height - padding) }
63
- );
64
- // 拖动目标
65
- const targetIds = this.render.selectionTool.selectingNodes.map((o) => o._id);
66
- // 除拖动目标的其他
67
- const otherNodes = this.render.layer.find('.asset').filter((node) => !targetIds.includes(node._id));
68
- // 其他节点所有的 x / y 坐标
69
- for (const node of otherNodes) {
70
- const nodeRect = node.getClientRect();
71
- sortX.push(
72
- { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x) },
73
- { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x + nodeRect.width / 2) },
74
- { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x + nodeRect.width) }
75
- );
76
- sortY.push(
77
- { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y) },
78
- { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y + nodeRect.height / 2) },
79
- { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y + nodeRect.height) }
80
- );
81
- }
82
- sortX.sort((a, b) => a.value - b.value);
83
- sortY.sort((a, b) => a.value - b.value);
84
- return { sortX, sortY };
85
- }
86
-
87
- attractPoint = (pos: Konva.Vector2d) => {
88
- this.alignLinesClear(); // 对齐线清除
89
- const stageState = this.render.getStageState();
90
- const showGrid = this.render.showGrid; // 是否显示网格,不显示网格则不网格吸附
91
- let newPosX = pos.x;
92
- let newPosY = pos.y;
93
- let isAttract = false;
94
- let pairX: SortItemPair | null = null;
95
- let pairY: SortItemPair | null = null;
96
- // 对齐线 磁吸逻辑
97
- if (!this.render.config.readonly && this.render.config.attractNode) {
98
- const sortX = [{ value: this.render.toStageValue(newPosX - stageState.x) }] as SortItem[],
99
- sortY = [{ value: this.render.toStageValue(newPosY - stageState.y) }] as SortItem[];
100
- // x 最短距离
101
- let XMin = Infinity;
102
- // x 最短距离的【对】(多个)
103
- let pairXMin: Array<SortItemPair> = [];
104
- // y 最短距离
105
- let YMin = Infinity;
106
- // y 最短距离的【对】(多个)
107
- let pairYMin: Array<SortItemPair> = [];
108
- // 一对对比较距离,记录最短距离的【对】
109
- // 必须是 选择目标 与 其他节点 成【对】
110
- // 可能有多个这样的【对】
111
- for (let i = 0; i < sortX.length - 1; i++) {
112
- // 相邻两个点,必须为 目标节点 + 非目标节点
113
- if ((sortX[i].id === void 0 && sortX[i + 1].id !== void 0) || (sortX[i].id !== void 0 && sortX[i + 1].id === void 0)) {
114
- // 相邻两个点的 x 距离
115
- const offset = Math.abs(sortX[i].value - sortX[i + 1].value);
116
- if (offset < XMin) {
117
- // 更新 x 最短距离 记录
118
- XMin = offset;
119
- // 更新 x 最短距离的【对】 记录
120
- pairXMin = [[sortX[i], sortX[i + 1]]];
121
- } else if (offset === XMin) {
122
- // 存在多个 x 最短距离
123
- pairXMin.push([sortX[i], sortX[i + 1]]);
124
- }
125
- }
126
- }
127
- for (let i = 0; i < sortY.length - 1; i++) {
128
- // 相邻两个点,必须为 目标节点 + 非目标节点
129
- if ((sortY[i].id === void 0 && sortY[i + 1].id !== void 0) || (sortY[i].id !== void 0 && sortY[i + 1].id === void 0)) {
130
- // 相邻两个点的 y 距离
131
- const offset = Math.abs(sortY[i].value - sortY[i + 1].value);
132
- if (offset < YMin) {
133
- // 更新 y 最短距离 记录
134
- YMin = offset;
135
- // 更新 y 最短距离的【对】 记录
136
- pairYMin = [[sortY[i], sortY[i + 1]]];
137
- } else if (offset === YMin) {
138
- // 存在多个 y 最短距离
139
- pairYMin.push([sortY[i], sortY[i + 1]]);
140
- }
141
- }
142
- }
143
- // 取第一【对】,用于判断距离是否在阈值内
144
- if (pairXMin[0]) {
145
- if (Math.abs(pairXMin[0][0].value - pairXMin[0][1].value) < this.render.bgSize / 2) {
146
- pairX = pairXMin[0];
147
- }
148
- }
149
- if (pairYMin[0]) {
150
- if (Math.abs(pairYMin[0][0].value - pairYMin[0][1].value) < this.render.bgSize / 2) {
151
- pairY = pairYMin[0];
152
- }
153
- }
154
- // 优先对齐节点
155
- // 存在 1或多个 x 最短距离 满足阈值
156
- if (pairX?.length === 2) {
157
- for (const pair of pairXMin) {
158
- // 【对】里的那个非目标节点
159
- const other = pair.find((o) => o.id !== void 0);
160
- if (other) { // x 对齐线
161
- const line = new Konva.Line({
162
- points: [[other.value, this.render.toStageValue(-stageState.y)], [other.value, this.render.toStageValue(this.render.stage.height() - stageState.y)]].flat(),
163
- stroke: 'blue',
164
- strokeWidth: this.render.toStageValue(1),
165
- dash: [4, 4],
166
- listening: false
167
- });
168
- this.alignLines.push(line);
169
- this.render.layerCover.add(line);
170
- }
171
- }
172
- // 磁贴第一个【对】
173
- const target = pairX.find((o) => o.id === void 0);
174
- const other = pairX.find((o) => o.id !== void 0);
175
- if (target && other) {
176
- // 磁铁坐标值
177
- newPosX = newPosX - this.render.toBoardValue(target.value - other.value);
178
- isAttract = true;
179
- }
180
- }
181
- // 存在 1或多个 y 最短距离 满足阈值
182
- if (pairY?.length === 2) {
183
- for (const pair of pairYMin) {
184
- // 【对】里的那个非目标节点
185
- const other = pair.find((o) => o.id !== void 0);
186
- if (other) {
187
- // y 对齐线
188
- const line = new Konva.Line({
189
- points: [[this.render.toStageValue(-stageState.x), other.value], [this.render.toStageValue(this.render.stage.width() - stageState.x), other.value]].flat(),
190
- stroke: 'blue',
191
- strokeWidth: this.render.toStageValue(1),
192
- dash: [4, 4],
193
- listening: false
194
- });
195
- this.alignLines.push(line);
196
- this.render.layerCover.add(line);
197
- }
198
- }
199
- // 磁贴第一个【对】
200
- const target = pairY.find((o) => o.id === void 0);
201
- const other = pairY.find((o) => o.id !== void 0);
202
- if (target && other) {
203
- // 磁铁坐标值
204
- newPosY = newPosY - this.render.toBoardValue(target.value - other.value);
205
- isAttract = true;
206
- }
207
- }
208
- }
209
- if (!this.render.config.readonly && this.render.config.attractBg && showGrid) {
210
- // 没有 x 对齐节点
211
- if (pairX === null) {
212
- const logicLeftX = this.render.toStageValue(newPosX - stageState.x); // x坐标
213
- const logicNumLeftX = Math.round(logicLeftX / this.render.bgSize); // x单元格个数
214
- const logicClosestLeftX = logicNumLeftX * this.render.bgSize; // x磁贴目标坐标
215
- const logicDiffLeftX = Math.abs(logicLeftX - logicClosestLeftX); // x磁贴偏移量
216
- const logicRightX = this.render.toStageValue(newPosX - stageState.x); // x坐标
217
- const logicNumRightX = Math.round(logicRightX / this.render.bgSize); // x单元格个数
218
- const logicClosestRightX = logicNumRightX * this.render.bgSize; // x磁贴目标坐标
219
- const logicDiffRightX = Math.abs(logicRightX - logicClosestRightX); // x磁贴偏移量
220
- // stage 逻辑边界磁贴
221
- const logicStageRightX = stageState.width;
222
- const logicDiffStageRightX = Math.abs(logicRightX - logicStageRightX);
223
- // 距离近优先
224
- for (const diff of [{ type: 'leftX', value: logicDiffLeftX }, { type: 'rightX', value: logicDiffRightX }, { type: 'stageRightX', value: logicDiffStageRightX }].sort((a, b) => a.value - b.value)) {
225
- if (diff.value < 5) {
226
- if (diff.type === 'stageRightX') {
227
- newPosX = this.render.toBoardValue(logicStageRightX) + stageState.x;
228
- } else if (diff.type === 'leftX') {
229
- newPosX = this.render.toBoardValue(logicClosestLeftX) + stageState.x;
230
- } else if (diff.type === 'rightX') {
231
- newPosX = this.render.toBoardValue(logicClosestRightX) + stageState.x;
232
- }
233
- isAttract = true;
234
- break;
235
- }
236
- }
237
- }
238
- // 没有 y 对齐节点
239
- if (pairY === null) {
240
- const logicTopY = this.render.toStageValue(newPosY - stageState.y); // y坐标
241
- const logicNumTopY = Math.round(logicTopY / this.render.bgSize); // y单元格个数
242
- const logicClosestTopY = logicNumTopY * this.render.bgSize; // y磁贴目标坐标
243
- const logicDiffTopY = Math.abs(logicTopY - logicClosestTopY); // y磁贴偏移量
244
- const logicBottomY = this.render.toStageValue(newPosY - stageState.y); // y坐标
245
- const logicNumBottomY = Math.round(logicBottomY / this.render.bgSize); // y单元格个数
246
- const logicClosestBottomY = logicNumBottomY * this.render.bgSize; // y磁贴目标坐标
247
- const logicDiffBottomY = Math.abs(logicBottomY - logicClosestBottomY); // y磁贴偏移量
248
- // stage 逻辑边界磁贴
249
- const logicStageBottomY = stageState.height;
250
- const logicDiffStageBottomY = Math.abs(logicBottomY - logicStageBottomY);
251
- // 距离近优先
252
- for (const diff of [{ type: 'topY', value: logicDiffTopY }, { type: 'bottomY', value: logicDiffBottomY }, { type: 'stageBottomY', value: logicDiffStageBottomY }].sort((a, b) => a.value - b.value)) {
253
- if (diff.value < 5) {
254
- if (diff.type === 'stageBottomY') {
255
- newPosY = this.render.toBoardValue(logicStageBottomY) + stageState.y;
256
- } else if (diff.type === 'topY') {
257
- newPosY = this.render.toBoardValue(logicClosestTopY) + stageState.y;
258
- } else if (diff.type === 'bottomY') {
259
- newPosY = this.render.toBoardValue(logicClosestBottomY) + stageState.y;
260
- }
261
- isAttract = true;
262
- break;
263
- }
264
- }
265
- }
266
- }
267
- return { pos: { x: newPosX, y: newPosY }, isAttract };
268
- }
269
- // 磁吸逻辑
270
- attractTransformer = (rect: AlignRect) => {
271
- // 对齐线清除
272
- this.alignLinesClear();
273
- const stageState = this.render.getStageState();
274
- const width = this.render.transformer.width();
275
- const height = this.render.transformer.height();
276
- const showGrid = this.render.showGrid; // 是否显示网格,不显示网格则不网格吸附
277
- let newPosX = rect.x;
278
- let newPosY = rect.y;
279
- let isAttract = false;
280
- let pairX: SortItemPair | null = null;
281
- let pairY: SortItemPair | null = null;
282
- // 对齐线 磁吸逻辑
283
- if (!this.render.config.readonly && this.render.config.attractNode) {
284
- // 从选中节点的真实 getClientRect 计算边界框,避免 back rect 的 padding 补偿引入亚像素偏差
285
- const selectingNodes = this.render.selectionTool.selectingNodes;
286
- const nodeRect = this.getSelectingNodesRect(selectingNodes) ?? rect;
287
- const { sortX, sortY } = this.getSortItems(nodeRect, 0);
288
- // x 最短距离
289
- let XMin = Infinity;
290
- // x 最短距离的【对】(多个)
291
- let pairXMin: Array<SortItemPair> = [];
292
- // y 最短距离
293
- let YMin = Infinity;
294
- // y 最短距离的【对】(多个)
295
- let pairYMin: Array<SortItemPair> = [];
296
- // 一对对比较距离,记录最短距离的【对】
297
- // 必须是 选择目标 与 其他节点 成【对】
298
- // 可能有多个这样的【对】
299
- for (let i = 0; i < sortX.length - 1; i++) {
300
- // 相邻两个点,必须为 目标节点 + 非目标节点
301
- if ((sortX[i].id === void 0 && sortX[i + 1].id !== void 0) || (sortX[i].id !== void 0 && sortX[i + 1].id === void 0)) {
302
- // 相邻两个点的 x 距离
303
- const offset = Math.abs(sortX[i].value - sortX[i + 1].value)
304
- if (offset < XMin) {
305
- // 更新 x 最短距离 记录
306
- XMin = offset;
307
- // 更新 x 最短距离的【对】 记录
308
- pairXMin = [[sortX[i], sortX[i + 1]]];
309
- } else if (offset === XMin) {
310
- // 存在多个 x 最短距离
311
- pairXMin.push([sortX[i], sortX[i + 1]]);
312
- }
313
- }
314
- }
315
- for (let i = 0; i < sortY.length - 1; i++) {
316
- // 相邻两个点,必须为 目标节点 + 非目标节点
317
- if ((sortY[i].id === void 0 && sortY[i + 1].id !== void 0) || (sortY[i].id !== void 0 && sortY[i + 1].id === void 0)) {
318
- // 相邻两个点的 y 距离
319
- const offset = Math.abs(sortY[i].value - sortY[i + 1].value);
320
- if (offset < YMin) {
321
- // 更新 y 最短距离 记录
322
- YMin = offset;
323
- // 更新 y 最短距离的【对】 记录
324
- pairYMin = [[sortY[i], sortY[i + 1]]];
325
- } else if (offset === YMin) {
326
- // 存在多个 y 最短距离
327
- pairYMin.push([sortY[i], sortY[i + 1]]);
328
- }
329
- }
330
- }
331
- // 取第一【对】,用于判断距离是否在阈值内
332
- if (pairXMin[0]) {
333
- if (Math.abs(pairXMin[0][0].value - pairXMin[0][1].value) < this.render.bgSize / 2) {
334
- pairX = pairXMin[0];
335
- }
336
- }
337
- if (pairYMin[0]) {
338
- if (Math.abs(pairYMin[0][0].value - pairYMin[0][1].value) < this.render.bgSize / 2) {
339
- pairY = pairYMin[0];
340
- }
341
- }
342
- // 优先对齐节点
343
- // 存在 1或多个 x 最短距离 满足阈值
344
- if (pairX?.length === 2) {
345
- for (const pair of pairXMin) {
346
- // 【对】里的那个非目标节点
347
- const other = pair.find((o) => o.id !== void 0);
348
- if (other) {
349
- // x 对齐线
350
- const line = new Konva.Line({
351
- points: [[other.value, this.render.toStageValue(-stageState.y)], [other.value, this.render.toStageValue(this.render.stage.height() - stageState.y)]].flat(),
352
- stroke: 'blue',
353
- strokeWidth: this.render.toStageValue(1),
354
- dash: [4, 4],
355
- listening: false
356
- });
357
- this.alignLines.push(line);
358
- this.render.layerCover.add(line);
359
- }
360
- }
361
- // 磁贴第一个【对】
362
- const target = pairX.find((o) => o.id === void 0);
363
- const other = pairX.find((o) => o.id !== void 0);
364
- if (target && other) {
365
- // 磁贴坐标值
366
- newPosX = newPosX - this.render.toBoardValue(target.value - other.value);
367
- isAttract = true;
368
- }
369
- }
370
- // 存在 1或多个 y 最短距离 满足阈值
371
- if (pairY?.length === 2) {
372
- for (const pair of pairYMin) {
373
- // 【对】里的那个非目标节点
374
- const other = pair.find((o) => o.id !== void 0);
375
- if (other) {
376
- // y 对齐线
377
- const line = new Konva.Line({
378
- points: [[this.render.toStageValue(-stageState.x), other.value], [this.render.toStageValue(this.render.stage.width() - stageState.x), other.value]].flat(),
379
- stroke: 'blue',
380
- strokeWidth: this.render.toStageValue(1),
381
- dash: [4, 4],
382
- listening: false
383
- });
384
- this.alignLines.push(line);
385
- this.render.layerCover.add(line);
386
- }
387
- }
388
- // 磁贴第一个【对】
389
- const target = pairY.find((o) => o.id === void 0);
390
- const other = pairY.find((o) => o.id !== void 0);
391
- if (target && other) {
392
- // 磁贴坐标值
393
- newPosY = newPosY - this.render.toBoardValue(target.value - other.value);
394
- isAttract = true;
395
- }
396
- }
397
- }
398
- if (!this.render.config.readonly && this.render.config.attractBg && showGrid) { // 显示网格则执行网格磁吸
399
- // 没有 x 对齐节点
400
- if (pairX === null) {
401
- const logicLeftX = this.render.toStageValue(newPosX - stageState.x); // x坐标
402
- const logicNumLeftX = Math.round(logicLeftX / this.render.bgSize); // x单元格个数
403
- const logicClosestLeftX = logicNumLeftX * this.render.bgSize; // x磁贴目标坐标
404
- const logicDiffLeftX = Math.abs(logicLeftX - logicClosestLeftX); // x磁贴偏移量
405
- const logicRightX = this.render.toStageValue(newPosX + width - stageState.x); // x坐标
406
- const logicNumRightX = Math.round(logicRightX / this.render.bgSize); // x单元格个数
407
- const logicClosestRightX = logicNumRightX * this.render.bgSize; // x磁贴目标坐标
408
- const logicDiffRightX = Math.abs(logicRightX - logicClosestRightX); // x磁贴偏移量
409
- // stage 逻辑边界磁贴
410
- const logicStageRightX = stageState.width;
411
- const logicDiffStageRightX = Math.abs(logicRightX - logicStageRightX);
412
- // 距离近优先
413
- for (const diff of [{ type: 'leftX', value: logicDiffLeftX }, { type: 'rightX', value: logicDiffRightX }, { type: 'stageRightX', value: logicDiffStageRightX }].sort((a, b) => a.value - b.value)) {
414
- if (diff.value < 5) {
415
- if (diff.type === 'stageRightX') {
416
- newPosX = this.render.toBoardValue(logicStageRightX) + stageState.x - width;
417
- } else if (diff.type === 'leftX') {
418
- newPosX = this.render.toBoardValue(logicClosestLeftX) + stageState.x;
419
- } else if (diff.type === 'rightX') {
420
- newPosX = this.render.toBoardValue(logicClosestRightX) + stageState.x - width;
421
- }
422
- isAttract = true;
423
- break;
424
- }
425
- }
426
- }
427
- // 没有 y 对齐节点
428
- if (pairY === null) {
429
- const logicTopY = this.render.toStageValue(newPosY - stageState.y); // y坐标
430
- const logicNumTopY = Math.round(logicTopY / this.render.bgSize); // y单元格个数
431
- const logicClosestTopY = logicNumTopY * this.render.bgSize; // y磁贴目标坐标
432
- const logicDiffTopY = Math.abs(logicTopY - logicClosestTopY); // y磁贴偏移量
433
- const logicBottomY = this.render.toStageValue(newPosY + height - stageState.y); // y坐标
434
- const logicNumBottomY = Math.round(logicBottomY / this.render.bgSize); // y单元格个数
435
- const logicClosestBottomY = logicNumBottomY * this.render.bgSize; // y磁贴目标坐标
436
- const logicDiffBottomY = Math.abs(logicBottomY - logicClosestBottomY); // y磁贴偏移量
437
- // stage 逻辑边界磁贴
438
- const logicStageBottomY = stageState.height;
439
- const logicDiffStageBottomY = Math.abs(logicBottomY - logicStageBottomY);
440
- // 距离近优先
441
- for (const diff of [{ type: 'topY', value: logicDiffTopY }, { type: 'bottomY', value: logicDiffBottomY }, { type: 'stageBottomY', value: logicDiffStageBottomY }].sort((a, b) => a.value - b.value)) {
442
- if (diff.value < 5) {
443
- if (diff.type === 'stageBottomY') {
444
- newPosY = this.render.toBoardValue(logicStageBottomY) + stageState.y - height;
445
- } else if (diff.type === 'topY') {
446
- newPosY = this.render.toBoardValue(logicClosestTopY) + stageState.y;
447
- } else if (diff.type === 'bottomY') {
448
- newPosY = this.render.toBoardValue(logicClosestBottomY) + stageState.y - height;
449
- }
450
- isAttract = true;
451
- break;
452
- }
453
- }
454
- }
455
- }
456
- return { pos: { x: newPosX, y: newPosY }, isAttract };
457
- }
1
+ import Konva from 'konva';
2
+ import { Render } from '../index';
3
+ import { SortItem } from '../types';
4
+
5
+ interface AlignRect {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ }
11
+
12
+ type SortItemPair = [SortItem, SortItem];
13
+
14
+ export class AttractTool {
15
+
16
+ private render: Render;
17
+ constructor(render: Render) {
18
+ this.render = render;
19
+ }
20
+ // 对齐线
21
+ alignLines: Konva.Line[] = [];
22
+
23
+ // 对齐线清除
24
+ alignLinesClear() {
25
+ for (const line of this.alignLines) {
26
+ line.destroy();
27
+ }
28
+ this.alignLines = [];
29
+ }
30
+
31
+ // 从选中节点 getClientRect 计算真实边界框,绕过 back rect 的 padding
32
+ private getSelectingNodesRect(nodes: Konva.Node[]): AlignRect | null {
33
+ if (nodes.length === 0) return null;
34
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
35
+ for (const node of nodes) {
36
+ const r = node.getClientRect();
37
+ if (r.x < minX) minX = r.x;
38
+ if (r.y < minY) minY = r.y;
39
+ if (r.x + r.width > maxX) maxX = r.x + r.width;
40
+ if (r.y + r.height > maxY) maxY = r.y + r.height;
41
+ }
42
+ return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
43
+ }
44
+
45
+ getSortItems(rect: AlignRect, targetPadding?: number) {
46
+ const stageState = this.render.getStageState();
47
+ const padding = targetPadding ?? this.render.transformer.padding();
48
+ // 横向所有需要判断对齐的 x 坐标
49
+ const sortX: Array<SortItem> = [];
50
+ // 纵向向所有需要判断对齐的 y 坐标
51
+ const sortY: Array<SortItem> = [];
52
+ // 选择目标所有的对齐 x(使用实际节点边缘而非 back rect,补偿 padding)
53
+ sortX.push(
54
+ { value: this.render.toStageValue(rect.x - stageState.x + padding) },
55
+ { value: this.render.toStageValue(rect.x - stageState.x + rect.width / 2) },
56
+ { value: this.render.toStageValue(rect.x - stageState.x + rect.width - padding) }
57
+ );
58
+ // 选择目标所有的对齐 y(使用实际节点边缘而非 back rect,补偿 padding)
59
+ sortY.push(
60
+ { value: this.render.toStageValue(rect.y - stageState.y + padding) },
61
+ { value: this.render.toStageValue(rect.y - stageState.y + rect.height / 2) },
62
+ { value: this.render.toStageValue(rect.y - stageState.y + rect.height - padding) }
63
+ );
64
+ // 拖动目标
65
+ const targetIds = this.render.selectionTool.selectingNodes.map((o) => o._id);
66
+ // 除拖动目标的其他
67
+ const otherNodes = this.render.layer.find('.asset').filter((node) => !targetIds.includes(node._id));
68
+ // 其他节点所有的 x / y 坐标
69
+ for (const node of otherNodes) {
70
+ const nodeRect = node.getClientRect();
71
+ sortX.push(
72
+ { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x) },
73
+ { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x + nodeRect.width / 2) },
74
+ { id: node._id, value: this.render.toStageValue(nodeRect.x - stageState.x + nodeRect.width) }
75
+ );
76
+ sortY.push(
77
+ { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y) },
78
+ { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y + nodeRect.height / 2) },
79
+ { id: node._id, value: this.render.toStageValue(nodeRect.y - stageState.y + nodeRect.height) }
80
+ );
81
+ }
82
+ sortX.sort((a, b) => a.value - b.value);
83
+ sortY.sort((a, b) => a.value - b.value);
84
+ return { sortX, sortY };
85
+ }
86
+
87
+ attractPoint = (pos: Konva.Vector2d) => {
88
+ this.alignLinesClear(); // 对齐线清除
89
+ const stageState = this.render.getStageState();
90
+ const showGrid = this.render.showGrid; // 是否显示网格,不显示网格则不网格吸附
91
+ let newPosX = pos.x;
92
+ let newPosY = pos.y;
93
+ let isAttract = false;
94
+ let pairX: SortItemPair | null = null;
95
+ let pairY: SortItemPair | null = null;
96
+ // 对齐线 磁吸逻辑
97
+ if (!this.render.config.readonly && this.render.config.attractNode) {
98
+ const sortX = [{ value: this.render.toStageValue(newPosX - stageState.x) }] as SortItem[],
99
+ sortY = [{ value: this.render.toStageValue(newPosY - stageState.y) }] as SortItem[];
100
+ // x 最短距离
101
+ let XMin = Infinity;
102
+ // x 最短距离的【对】(多个)
103
+ let pairXMin: Array<SortItemPair> = [];
104
+ // y 最短距离
105
+ let YMin = Infinity;
106
+ // y 最短距离的【对】(多个)
107
+ let pairYMin: Array<SortItemPair> = [];
108
+ // 一对对比较距离,记录最短距离的【对】
109
+ // 必须是 选择目标 与 其他节点 成【对】
110
+ // 可能有多个这样的【对】
111
+ for (let i = 0; i < sortX.length - 1; i++) {
112
+ // 相邻两个点,必须为 目标节点 + 非目标节点
113
+ if ((sortX[i].id === void 0 && sortX[i + 1].id !== void 0) || (sortX[i].id !== void 0 && sortX[i + 1].id === void 0)) {
114
+ // 相邻两个点的 x 距离
115
+ const offset = Math.abs(sortX[i].value - sortX[i + 1].value);
116
+ if (offset < XMin) {
117
+ // 更新 x 最短距离 记录
118
+ XMin = offset;
119
+ // 更新 x 最短距离的【对】 记录
120
+ pairXMin = [[sortX[i], sortX[i + 1]]];
121
+ } else if (offset === XMin) {
122
+ // 存在多个 x 最短距离
123
+ pairXMin.push([sortX[i], sortX[i + 1]]);
124
+ }
125
+ }
126
+ }
127
+ for (let i = 0; i < sortY.length - 1; i++) {
128
+ // 相邻两个点,必须为 目标节点 + 非目标节点
129
+ if ((sortY[i].id === void 0 && sortY[i + 1].id !== void 0) || (sortY[i].id !== void 0 && sortY[i + 1].id === void 0)) {
130
+ // 相邻两个点的 y 距离
131
+ const offset = Math.abs(sortY[i].value - sortY[i + 1].value);
132
+ if (offset < YMin) {
133
+ // 更新 y 最短距离 记录
134
+ YMin = offset;
135
+ // 更新 y 最短距离的【对】 记录
136
+ pairYMin = [[sortY[i], sortY[i + 1]]];
137
+ } else if (offset === YMin) {
138
+ // 存在多个 y 最短距离
139
+ pairYMin.push([sortY[i], sortY[i + 1]]);
140
+ }
141
+ }
142
+ }
143
+ // 取第一【对】,用于判断距离是否在阈值内
144
+ if (pairXMin[0]) {
145
+ if (Math.abs(pairXMin[0][0].value - pairXMin[0][1].value) < this.render.bgSize / 2) {
146
+ pairX = pairXMin[0];
147
+ }
148
+ }
149
+ if (pairYMin[0]) {
150
+ if (Math.abs(pairYMin[0][0].value - pairYMin[0][1].value) < this.render.bgSize / 2) {
151
+ pairY = pairYMin[0];
152
+ }
153
+ }
154
+ // 优先对齐节点
155
+ // 存在 1或多个 x 最短距离 满足阈值
156
+ if (pairX?.length === 2) {
157
+ for (const pair of pairXMin) {
158
+ // 【对】里的那个非目标节点
159
+ const other = pair.find((o) => o.id !== void 0);
160
+ if (other) { // x 对齐线
161
+ const line = new Konva.Line({
162
+ points: [[other.value, this.render.toStageValue(-stageState.y)], [other.value, this.render.toStageValue(this.render.stage.height() - stageState.y)]].flat(),
163
+ stroke: 'blue',
164
+ strokeWidth: this.render.toStageValue(1),
165
+ dash: [4, 4],
166
+ listening: false
167
+ });
168
+ this.alignLines.push(line);
169
+ this.render.layerCover.add(line);
170
+ }
171
+ }
172
+ // 磁贴第一个【对】
173
+ const target = pairX.find((o) => o.id === void 0);
174
+ const other = pairX.find((o) => o.id !== void 0);
175
+ if (target && other) {
176
+ // 磁铁坐标值
177
+ newPosX = newPosX - this.render.toBoardValue(target.value - other.value);
178
+ isAttract = true;
179
+ }
180
+ }
181
+ // 存在 1或多个 y 最短距离 满足阈值
182
+ if (pairY?.length === 2) {
183
+ for (const pair of pairYMin) {
184
+ // 【对】里的那个非目标节点
185
+ const other = pair.find((o) => o.id !== void 0);
186
+ if (other) {
187
+ // y 对齐线
188
+ const line = new Konva.Line({
189
+ points: [[this.render.toStageValue(-stageState.x), other.value], [this.render.toStageValue(this.render.stage.width() - stageState.x), other.value]].flat(),
190
+ stroke: 'blue',
191
+ strokeWidth: this.render.toStageValue(1),
192
+ dash: [4, 4],
193
+ listening: false
194
+ });
195
+ this.alignLines.push(line);
196
+ this.render.layerCover.add(line);
197
+ }
198
+ }
199
+ // 磁贴第一个【对】
200
+ const target = pairY.find((o) => o.id === void 0);
201
+ const other = pairY.find((o) => o.id !== void 0);
202
+ if (target && other) {
203
+ // 磁铁坐标值
204
+ newPosY = newPosY - this.render.toBoardValue(target.value - other.value);
205
+ isAttract = true;
206
+ }
207
+ }
208
+ }
209
+ if (!this.render.config.readonly && this.render.config.attractBg && showGrid) {
210
+ // 没有 x 对齐节点
211
+ if (pairX === null) {
212
+ const logicLeftX = this.render.toStageValue(newPosX - stageState.x); // x坐标
213
+ const logicNumLeftX = Math.round(logicLeftX / this.render.bgSize); // x单元格个数
214
+ const logicClosestLeftX = logicNumLeftX * this.render.bgSize; // x磁贴目标坐标
215
+ const logicDiffLeftX = Math.abs(logicLeftX - logicClosestLeftX); // x磁贴偏移量
216
+ const logicRightX = this.render.toStageValue(newPosX - stageState.x); // x坐标
217
+ const logicNumRightX = Math.round(logicRightX / this.render.bgSize); // x单元格个数
218
+ const logicClosestRightX = logicNumRightX * this.render.bgSize; // x磁贴目标坐标
219
+ const logicDiffRightX = Math.abs(logicRightX - logicClosestRightX); // x磁贴偏移量
220
+ // stage 逻辑边界磁贴
221
+ const logicStageRightX = stageState.width;
222
+ const logicDiffStageRightX = Math.abs(logicRightX - logicStageRightX);
223
+ // 距离近优先
224
+ for (const diff of [{ type: 'leftX', value: logicDiffLeftX }, { type: 'rightX', value: logicDiffRightX }, { type: 'stageRightX', value: logicDiffStageRightX }].sort((a, b) => a.value - b.value)) {
225
+ if (diff.value < 5) {
226
+ if (diff.type === 'stageRightX') {
227
+ newPosX = this.render.toBoardValue(logicStageRightX) + stageState.x;
228
+ } else if (diff.type === 'leftX') {
229
+ newPosX = this.render.toBoardValue(logicClosestLeftX) + stageState.x;
230
+ } else if (diff.type === 'rightX') {
231
+ newPosX = this.render.toBoardValue(logicClosestRightX) + stageState.x;
232
+ }
233
+ isAttract = true;
234
+ break;
235
+ }
236
+ }
237
+ }
238
+ // 没有 y 对齐节点
239
+ if (pairY === null) {
240
+ const logicTopY = this.render.toStageValue(newPosY - stageState.y); // y坐标
241
+ const logicNumTopY = Math.round(logicTopY / this.render.bgSize); // y单元格个数
242
+ const logicClosestTopY = logicNumTopY * this.render.bgSize; // y磁贴目标坐标
243
+ const logicDiffTopY = Math.abs(logicTopY - logicClosestTopY); // y磁贴偏移量
244
+ const logicBottomY = this.render.toStageValue(newPosY - stageState.y); // y坐标
245
+ const logicNumBottomY = Math.round(logicBottomY / this.render.bgSize); // y单元格个数
246
+ const logicClosestBottomY = logicNumBottomY * this.render.bgSize; // y磁贴目标坐标
247
+ const logicDiffBottomY = Math.abs(logicBottomY - logicClosestBottomY); // y磁贴偏移量
248
+ // stage 逻辑边界磁贴
249
+ const logicStageBottomY = stageState.height;
250
+ const logicDiffStageBottomY = Math.abs(logicBottomY - logicStageBottomY);
251
+ // 距离近优先
252
+ for (const diff of [{ type: 'topY', value: logicDiffTopY }, { type: 'bottomY', value: logicDiffBottomY }, { type: 'stageBottomY', value: logicDiffStageBottomY }].sort((a, b) => a.value - b.value)) {
253
+ if (diff.value < 5) {
254
+ if (diff.type === 'stageBottomY') {
255
+ newPosY = this.render.toBoardValue(logicStageBottomY) + stageState.y;
256
+ } else if (diff.type === 'topY') {
257
+ newPosY = this.render.toBoardValue(logicClosestTopY) + stageState.y;
258
+ } else if (diff.type === 'bottomY') {
259
+ newPosY = this.render.toBoardValue(logicClosestBottomY) + stageState.y;
260
+ }
261
+ isAttract = true;
262
+ break;
263
+ }
264
+ }
265
+ }
266
+ }
267
+ return { pos: { x: newPosX, y: newPosY }, isAttract };
268
+ }
269
+ // 磁吸逻辑
270
+ attractTransformer = (rect: AlignRect) => {
271
+ // 对齐线清除
272
+ this.alignLinesClear();
273
+ const stageState = this.render.getStageState();
274
+ const width = this.render.transformer.width();
275
+ const height = this.render.transformer.height();
276
+ const showGrid = this.render.showGrid; // 是否显示网格,不显示网格则不网格吸附
277
+ let newPosX = rect.x;
278
+ let newPosY = rect.y;
279
+ let isAttract = false;
280
+ let pairX: SortItemPair | null = null;
281
+ let pairY: SortItemPair | null = null;
282
+ // 对齐线 磁吸逻辑
283
+ if (!this.render.config.readonly && this.render.config.attractNode) {
284
+ // 从选中节点的真实 getClientRect 计算边界框,避免 back rect 的 padding 补偿引入亚像素偏差
285
+ const selectingNodes = this.render.selectionTool.selectingNodes;
286
+ const nodeRect = this.getSelectingNodesRect(selectingNodes) ?? rect;
287
+ const { sortX, sortY } = this.getSortItems(nodeRect, 0);
288
+ // x 最短距离
289
+ let XMin = Infinity;
290
+ // x 最短距离的【对】(多个)
291
+ let pairXMin: Array<SortItemPair> = [];
292
+ // y 最短距离
293
+ let YMin = Infinity;
294
+ // y 最短距离的【对】(多个)
295
+ let pairYMin: Array<SortItemPair> = [];
296
+ // 一对对比较距离,记录最短距离的【对】
297
+ // 必须是 选择目标 与 其他节点 成【对】
298
+ // 可能有多个这样的【对】
299
+ for (let i = 0; i < sortX.length - 1; i++) {
300
+ // 相邻两个点,必须为 目标节点 + 非目标节点
301
+ if ((sortX[i].id === void 0 && sortX[i + 1].id !== void 0) || (sortX[i].id !== void 0 && sortX[i + 1].id === void 0)) {
302
+ // 相邻两个点的 x 距离
303
+ const offset = Math.abs(sortX[i].value - sortX[i + 1].value)
304
+ if (offset < XMin) {
305
+ // 更新 x 最短距离 记录
306
+ XMin = offset;
307
+ // 更新 x 最短距离的【对】 记录
308
+ pairXMin = [[sortX[i], sortX[i + 1]]];
309
+ } else if (offset === XMin) {
310
+ // 存在多个 x 最短距离
311
+ pairXMin.push([sortX[i], sortX[i + 1]]);
312
+ }
313
+ }
314
+ }
315
+ for (let i = 0; i < sortY.length - 1; i++) {
316
+ // 相邻两个点,必须为 目标节点 + 非目标节点
317
+ if ((sortY[i].id === void 0 && sortY[i + 1].id !== void 0) || (sortY[i].id !== void 0 && sortY[i + 1].id === void 0)) {
318
+ // 相邻两个点的 y 距离
319
+ const offset = Math.abs(sortY[i].value - sortY[i + 1].value);
320
+ if (offset < YMin) {
321
+ // 更新 y 最短距离 记录
322
+ YMin = offset;
323
+ // 更新 y 最短距离的【对】 记录
324
+ pairYMin = [[sortY[i], sortY[i + 1]]];
325
+ } else if (offset === YMin) {
326
+ // 存在多个 y 最短距离
327
+ pairYMin.push([sortY[i], sortY[i + 1]]);
328
+ }
329
+ }
330
+ }
331
+ // 取第一【对】,用于判断距离是否在阈值内
332
+ if (pairXMin[0]) {
333
+ if (Math.abs(pairXMin[0][0].value - pairXMin[0][1].value) < this.render.bgSize / 2) {
334
+ pairX = pairXMin[0];
335
+ }
336
+ }
337
+ if (pairYMin[0]) {
338
+ if (Math.abs(pairYMin[0][0].value - pairYMin[0][1].value) < this.render.bgSize / 2) {
339
+ pairY = pairYMin[0];
340
+ }
341
+ }
342
+ // 优先对齐节点
343
+ // 存在 1或多个 x 最短距离 满足阈值
344
+ if (pairX?.length === 2) {
345
+ for (const pair of pairXMin) {
346
+ // 【对】里的那个非目标节点
347
+ const other = pair.find((o) => o.id !== void 0);
348
+ if (other) {
349
+ // x 对齐线
350
+ const line = new Konva.Line({
351
+ points: [[other.value, this.render.toStageValue(-stageState.y)], [other.value, this.render.toStageValue(this.render.stage.height() - stageState.y)]].flat(),
352
+ stroke: 'blue',
353
+ strokeWidth: this.render.toStageValue(1),
354
+ dash: [4, 4],
355
+ listening: false
356
+ });
357
+ this.alignLines.push(line);
358
+ this.render.layerCover.add(line);
359
+ }
360
+ }
361
+ // 磁贴第一个【对】
362
+ const target = pairX.find((o) => o.id === void 0);
363
+ const other = pairX.find((o) => o.id !== void 0);
364
+ if (target && other) {
365
+ // 磁贴坐标值
366
+ newPosX = newPosX - this.render.toBoardValue(target.value - other.value);
367
+ isAttract = true;
368
+ }
369
+ }
370
+ // 存在 1或多个 y 最短距离 满足阈值
371
+ if (pairY?.length === 2) {
372
+ for (const pair of pairYMin) {
373
+ // 【对】里的那个非目标节点
374
+ const other = pair.find((o) => o.id !== void 0);
375
+ if (other) {
376
+ // y 对齐线
377
+ const line = new Konva.Line({
378
+ points: [[this.render.toStageValue(-stageState.x), other.value], [this.render.toStageValue(this.render.stage.width() - stageState.x), other.value]].flat(),
379
+ stroke: 'blue',
380
+ strokeWidth: this.render.toStageValue(1),
381
+ dash: [4, 4],
382
+ listening: false
383
+ });
384
+ this.alignLines.push(line);
385
+ this.render.layerCover.add(line);
386
+ }
387
+ }
388
+ // 磁贴第一个【对】
389
+ const target = pairY.find((o) => o.id === void 0);
390
+ const other = pairY.find((o) => o.id !== void 0);
391
+ if (target && other) {
392
+ // 磁贴坐标值
393
+ newPosY = newPosY - this.render.toBoardValue(target.value - other.value);
394
+ isAttract = true;
395
+ }
396
+ }
397
+ }
398
+ if (!this.render.config.readonly && this.render.config.attractBg && showGrid) { // 显示网格则执行网格磁吸
399
+ // 没有 x 对齐节点
400
+ if (pairX === null) {
401
+ const logicLeftX = this.render.toStageValue(newPosX - stageState.x); // x坐标
402
+ const logicNumLeftX = Math.round(logicLeftX / this.render.bgSize); // x单元格个数
403
+ const logicClosestLeftX = logicNumLeftX * this.render.bgSize; // x磁贴目标坐标
404
+ const logicDiffLeftX = Math.abs(logicLeftX - logicClosestLeftX); // x磁贴偏移量
405
+ const logicRightX = this.render.toStageValue(newPosX + width - stageState.x); // x坐标
406
+ const logicNumRightX = Math.round(logicRightX / this.render.bgSize); // x单元格个数
407
+ const logicClosestRightX = logicNumRightX * this.render.bgSize; // x磁贴目标坐标
408
+ const logicDiffRightX = Math.abs(logicRightX - logicClosestRightX); // x磁贴偏移量
409
+ // stage 逻辑边界磁贴
410
+ const logicStageRightX = stageState.width;
411
+ const logicDiffStageRightX = Math.abs(logicRightX - logicStageRightX);
412
+ // 距离近优先
413
+ for (const diff of [{ type: 'leftX', value: logicDiffLeftX }, { type: 'rightX', value: logicDiffRightX }, { type: 'stageRightX', value: logicDiffStageRightX }].sort((a, b) => a.value - b.value)) {
414
+ if (diff.value < 5) {
415
+ if (diff.type === 'stageRightX') {
416
+ newPosX = this.render.toBoardValue(logicStageRightX) + stageState.x - width;
417
+ } else if (diff.type === 'leftX') {
418
+ newPosX = this.render.toBoardValue(logicClosestLeftX) + stageState.x;
419
+ } else if (diff.type === 'rightX') {
420
+ newPosX = this.render.toBoardValue(logicClosestRightX) + stageState.x - width;
421
+ }
422
+ isAttract = true;
423
+ break;
424
+ }
425
+ }
426
+ }
427
+ // 没有 y 对齐节点
428
+ if (pairY === null) {
429
+ const logicTopY = this.render.toStageValue(newPosY - stageState.y); // y坐标
430
+ const logicNumTopY = Math.round(logicTopY / this.render.bgSize); // y单元格个数
431
+ const logicClosestTopY = logicNumTopY * this.render.bgSize; // y磁贴目标坐标
432
+ const logicDiffTopY = Math.abs(logicTopY - logicClosestTopY); // y磁贴偏移量
433
+ const logicBottomY = this.render.toStageValue(newPosY + height - stageState.y); // y坐标
434
+ const logicNumBottomY = Math.round(logicBottomY / this.render.bgSize); // y单元格个数
435
+ const logicClosestBottomY = logicNumBottomY * this.render.bgSize; // y磁贴目标坐标
436
+ const logicDiffBottomY = Math.abs(logicBottomY - logicClosestBottomY); // y磁贴偏移量
437
+ // stage 逻辑边界磁贴
438
+ const logicStageBottomY = stageState.height;
439
+ const logicDiffStageBottomY = Math.abs(logicBottomY - logicStageBottomY);
440
+ // 距离近优先
441
+ for (const diff of [{ type: 'topY', value: logicDiffTopY }, { type: 'bottomY', value: logicDiffBottomY }, { type: 'stageBottomY', value: logicDiffStageBottomY }].sort((a, b) => a.value - b.value)) {
442
+ if (diff.value < 5) {
443
+ if (diff.type === 'stageBottomY') {
444
+ newPosY = this.render.toBoardValue(logicStageBottomY) + stageState.y - height;
445
+ } else if (diff.type === 'topY') {
446
+ newPosY = this.render.toBoardValue(logicClosestTopY) + stageState.y;
447
+ } else if (diff.type === 'bottomY') {
448
+ newPosY = this.render.toBoardValue(logicClosestBottomY) + stageState.y - height;
449
+ }
450
+ isAttract = true;
451
+ break;
452
+ }
453
+ }
454
+ }
455
+ }
456
+ return { pos: { x: newPosX, y: newPosY }, isAttract };
457
+ }
458
458
  }