aldehyde 0.2.480 → 0.2.481

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 (582) 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.less +9 -9
  18. package/lib/controls/html-editor/index.less +67 -67
  19. package/lib/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  20. package/lib/controls/password-setter/index.css +2 -2
  21. package/lib/controls/password-setter/index.d.ts.map +1 -1
  22. package/lib/controls/qr-code/index.less +28 -28
  23. package/lib/controls/relation-existion/index.css +3 -3
  24. package/lib/controls/relation-existion/index.d.ts.map +1 -1
  25. package/lib/controls/rfield/index.css +4 -4
  26. package/lib/controls/rfield/index.d.ts.map +1 -1
  27. package/lib/controls/select/index.d.ts.map +1 -1
  28. package/lib/controls/signature/index.d.ts.map +1 -1
  29. package/lib/controls/text/ellipsis-text.d.ts.map +1 -1
  30. package/lib/controls/text/index.less +7 -7
  31. package/lib/controls/upload/index.d.ts.map +1 -1
  32. package/lib/controls/upload/mult-file-upload.d.ts.map +1 -1
  33. package/lib/custom-page/dtmpl-custom-edit-modal-page.d.ts.map +1 -1
  34. package/lib/detail/button/bottom-submit-button-bar.d.ts.map +1 -1
  35. package/lib/detail/button/cquery-button-bar.d.ts.map +1 -1
  36. package/lib/detail/button/fix-right-submit-button-bar.d.ts.map +1 -1
  37. package/lib/detail/button/index.css +42 -42
  38. package/lib/detail/dtmpl.css +67 -67
  39. package/lib/detail/edit/fields-edit-card.d.ts.map +1 -1
  40. package/lib/detail/edit/modal-row-edit.d.ts.map +1 -1
  41. package/lib/detail/edit/popover-edit-card.d.ts.map +1 -1
  42. package/lib/detail/rightbar/index.css +34 -34
  43. package/lib/detail/rightbar/index.d.ts.map +1 -1
  44. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  45. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  46. package/lib/detail/view/modal-dtmpl-view.d.ts.map +1 -1
  47. package/lib/detail/view/snapshot-timeline.d.ts.map +1 -1
  48. package/lib/detail/view/tab-act-dtmpl-view.d.ts.map +1 -1
  49. package/lib/draw-canvas-edit/components/render/components/index.d.ts +3 -0
  50. package/lib/draw-canvas-edit/components/render/components/index.d.ts.map +1 -0
  51. package/lib/draw-canvas-edit/components/render/components/index.js +3 -0
  52. package/lib/draw-canvas-edit/components/render/components/index.js.map +1 -0
  53. package/lib/draw-canvas-edit/components/render/components/workstation-component.d.ts +31 -0
  54. package/lib/draw-canvas-edit/components/render/components/workstation-component.d.ts.map +1 -0
  55. package/lib/draw-canvas-edit/components/render/components/workstation-component.js +105 -0
  56. package/lib/draw-canvas-edit/components/render/components/workstation-component.js.map +1 -0
  57. package/lib/draw-canvas-edit/components/render/tools/component-factory.d.ts +2 -0
  58. package/lib/draw-canvas-edit/components/render/tools/component-factory.d.ts.map +1 -1
  59. package/lib/draw-canvas-edit/components/render/tools/component-factory.js +10 -42
  60. package/lib/draw-canvas-edit/components/render/tools/component-factory.js.map +1 -1
  61. package/lib/draw-canvas-edit/components/render/types.d.ts +3 -0
  62. package/lib/draw-canvas-edit/components/render/types.d.ts.map +1 -1
  63. package/lib/draw-canvas-edit/components/render/types.js.map +1 -1
  64. package/lib/draw-canvas-edit/index.less +48 -48
  65. package/lib/draw-canvas-view/index.less +59 -59
  66. package/lib/draw-canvas-view/view.d.ts.map +1 -1
  67. package/lib/draw-canvas-view/view.js +19 -6
  68. package/lib/draw-canvas-view/view.js.map +1 -1
  69. package/lib/export/export-frame.css +2 -2
  70. package/lib/export/export-frame.d.ts.map +1 -1
  71. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  72. package/lib/form/dtmpl-form.css +3 -3
  73. package/lib/form/dtmpl-form.d.ts.map +1 -1
  74. package/lib/form/dtmpl-form.js +1 -1
  75. package/lib/form/dtmpl-form.js.map +1 -1
  76. package/lib/form/field-group-form.d.ts.map +1 -1
  77. package/lib/form/form-Item-group.d.ts.map +1 -1
  78. package/lib/form/index.css +12 -12
  79. package/lib/import/excel-import.d.ts.map +1 -1
  80. package/lib/import/index.css +53 -53
  81. package/lib/import/template.css +50 -50
  82. package/lib/layout/common.css +64 -64
  83. package/lib/layout/coverstyle.css +51 -51
  84. package/lib/layout/footer/index.css +5 -5
  85. package/lib/layout/header/index.css +122 -122
  86. package/lib/layout/menu/block.css +7 -7
  87. package/lib/layout/menu/block.d.ts.map +1 -1
  88. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  89. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  90. package/lib/layout/menu/message-bar.less +73 -73
  91. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  92. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  93. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  94. package/lib/layout/sidebar/index.css +57 -57
  95. package/lib/layout2/css/header.css +41 -41
  96. package/lib/layout2/css/sider.less +17 -17
  97. package/lib/layout2/css/tabs-layout.less +18 -18
  98. package/lib/layout3/css/header.less +195 -195
  99. package/lib/layout3/css/main.less +161 -161
  100. package/lib/layout3/css/sider.less +32 -32
  101. package/lib/layout3/css/tabs-layout.less +38 -38
  102. package/lib/layout4/css/header.less +196 -196
  103. package/lib/layout4/css/main.less +154 -154
  104. package/lib/layout4/css/sider.less +37 -37
  105. package/lib/layout4/css/tabs-layout.less +42 -42
  106. package/lib/layout5/css/header.less +35 -35
  107. package/lib/layout5/css/sider.less +18 -18
  108. package/lib/list/calendar/index.less +20 -20
  109. package/lib/list/card-list/index.less +154 -154
  110. package/lib/list/gantt/index.less +8 -8
  111. package/lib/list/vertical-list/index.less +208 -208
  112. package/lib/login/index.css +19 -19
  113. package/lib/login/login.d.ts.map +1 -1
  114. package/lib/login/vertify/index.css +143 -143
  115. package/lib/login3/index.less +136 -136
  116. package/lib/lowcode-components/act-table/index.less +26 -26
  117. package/lib/lowcode-components/base-button/index.less +7 -7
  118. package/lib/lowcode-components/base-map/index.js +6 -6
  119. package/lib/lowcode-components/base-radio/index.less +23 -23
  120. package/lib/lowcode-components/base-tabs/index.less +14 -14
  121. package/lib/lowcode-components/border/border10/index.less +26 -26
  122. package/lib/lowcode-components/border/border11/index.js +46 -46
  123. package/lib/lowcode-components/border/border11/index.less +17 -17
  124. package/lib/lowcode-components/border/border12/index.js +13 -13
  125. package/lib/lowcode-components/border/border12/index.less +13 -13
  126. package/lib/lowcode-components/border/border13/index.js +5 -5
  127. package/lib/lowcode-components/border/border13/index.less +13 -13
  128. package/lib/lowcode-components/border/border2/index.less +17 -17
  129. package/lib/lowcode-components/border/border3/index.less +25 -25
  130. package/lib/lowcode-components/border/border4/index.js +2 -2
  131. package/lib/lowcode-components/border/border4/index.less +72 -72
  132. package/lib/lowcode-components/border/border5/index.js +2 -2
  133. package/lib/lowcode-components/border/border5/index.less +35 -35
  134. package/lib/lowcode-components/border/border6/index.less +17 -17
  135. package/lib/lowcode-components/border/border7/index.less +26 -26
  136. package/lib/lowcode-components/border/border8/index.less +13 -13
  137. package/lib/lowcode-components/border/border9/index.js +14 -14
  138. package/lib/lowcode-components/border/border9/index.less +13 -13
  139. package/lib/lowcode-components/decoration/decoration1/index.less +7 -7
  140. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  141. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  142. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  143. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  144. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  145. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  146. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  147. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  148. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  149. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  150. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  151. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  152. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  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/module/dtmpl-edit-card.d.ts.map +1 -1
  156. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  157. package/lib/module/index.less +4 -4
  158. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  159. package/lib/module/ltmpl-table.d.ts.map +1 -1
  160. package/lib/routable/index.less +25 -25
  161. package/lib/table/act-table.d.ts.map +1 -1
  162. package/lib/table/column/index.less +63 -63
  163. package/lib/table/index.css +211 -211
  164. package/lib/table/modal-select-table.d.ts.map +1 -1
  165. package/lib/table/pagination.css +14 -14
  166. package/lib/table/pagination.d.ts.map +1 -1
  167. package/lib/table/relation-table.d.ts.map +1 -1
  168. package/lib/table/select-table.d.ts.map +1 -1
  169. package/lib/table/select-table.js +14 -2
  170. package/lib/table/select-table.js.map +1 -1
  171. package/lib/table/selected-rows-card.d.ts.map +1 -1
  172. package/lib/table/stat/restat.d.ts.map +1 -1
  173. package/lib/tree/act-tree.d.ts.map +1 -1
  174. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  175. package/lib/tree/index.css +22 -22
  176. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  177. package/lib/welcome/components/menu-card.less +96 -96
  178. package/lib/welcome/components/page-card.less +49 -49
  179. package/lib/welcome/components/quick-entrance.less +120 -120
  180. package/lib/welcome/components/user-menus.less +192 -192
  181. package/lib/welcome/components/workbench.less +118 -118
  182. package/lib/welcome/index.css +13 -13
  183. package/package.json +223 -223
  184. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  185. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  186. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  187. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  188. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  189. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  190. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  191. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  192. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  193. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  194. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  195. package/src/aldehyde/controls/action/index.css +8 -8
  196. package/src/aldehyde/controls/action/index.tsx +406 -406
  197. package/src/aldehyde/controls/action/utils.tsx +306 -306
  198. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  199. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  200. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  201. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  202. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  203. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  204. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  205. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  206. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  207. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  208. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  209. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  210. package/src/aldehyde/controls/direct-file-view/index.tsx +145 -145
  211. package/src/aldehyde/controls/direct-upload/index.tsx +139 -139
  212. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  213. package/src/aldehyde/controls/entity-select/index.css +7 -7
  214. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  215. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  216. package/src/aldehyde/controls/entry-control.tsx +418 -418
  217. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  218. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  219. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  220. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  221. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  222. package/src/aldehyde/controls/file-view/index.less +9 -9
  223. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  224. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  225. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  226. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  227. package/src/aldehyde/controls/html-editor/index.less +67 -67
  228. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  229. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  230. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  231. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  232. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  233. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  234. package/src/aldehyde/controls/password-setter/index.css +2 -2
  235. package/src/aldehyde/controls/password-setter/index.js +88 -88
  236. package/src/aldehyde/controls/progress/index.tsx +74 -74
  237. package/src/aldehyde/controls/qr-code/index.less +28 -28
  238. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  239. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  240. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  241. package/src/aldehyde/controls/rfield/index.css +4 -4
  242. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  243. package/src/aldehyde/controls/select/index.tsx +216 -216
  244. package/src/aldehyde/controls/signature/index.tsx +226 -226
  245. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  246. package/src/aldehyde/controls/steps/index.tsx +59 -59
  247. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  248. package/src/aldehyde/controls/text/index.less +7 -7
  249. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  250. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  251. package/src/aldehyde/controls/upload/index.tsx +128 -128
  252. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  253. package/src/aldehyde/controls/view-control.tsx +289 -289
  254. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  255. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  256. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  257. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +88 -88
  258. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  259. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  260. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  261. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  262. package/src/aldehyde/detail/button/index.css +42 -42
  263. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  264. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  265. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  266. package/src/aldehyde/detail/dtmpl.css +67 -67
  267. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  268. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  269. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  270. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  271. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  272. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  273. package/src/aldehyde/detail/rightbar/index.css +34 -34
  274. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  275. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  276. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  277. package/src/aldehyde/detail/view/dtmpl-view.tsx +314 -314
  278. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  279. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  280. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  281. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  282. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  283. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -0
  284. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +104 -0
  285. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +176 -176
  286. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +329 -329
  287. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  288. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +72 -72
  289. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +396 -396
  290. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +808 -808
  291. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  292. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +270 -302
  293. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  294. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +576 -576
  295. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  296. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  297. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  298. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +294 -291
  299. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +291 -291
  300. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  301. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  302. package/src/aldehyde/draw-canvas-edit/index.tsx +201 -201
  303. package/src/aldehyde/draw-canvas-view/index.less +59 -59
  304. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  305. package/src/aldehyde/draw-canvas-view/view.tsx +17 -5
  306. package/src/aldehyde/export/export-frame.css +2 -2
  307. package/src/aldehyde/export/export-frame.tsx +301 -301
  308. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  309. package/src/aldehyde/form/criteria-form.tsx +604 -604
  310. package/src/aldehyde/form/dtmpl-form.css +3 -3
  311. package/src/aldehyde/form/dtmpl-form.tsx +552 -552
  312. package/src/aldehyde/form/field-group-form.tsx +102 -102
  313. package/src/aldehyde/form/fields-form.tsx +45 -45
  314. package/src/aldehyde/form/form-Item-group.tsx +245 -245
  315. package/src/aldehyde/form/index.css +12 -12
  316. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  317. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  318. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  319. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  320. package/src/aldehyde/icon/index.tsx +28 -28
  321. package/src/aldehyde/import/excel-import.tsx +450 -450
  322. package/src/aldehyde/import/index.css +53 -53
  323. package/src/aldehyde/import/template.css +50 -50
  324. package/src/aldehyde/index.tsx +220 -220
  325. package/src/aldehyde/layout/MainPage.tsx +334 -334
  326. package/src/aldehyde/layout/common.css +64 -64
  327. package/src/aldehyde/layout/coverstyle.css +51 -51
  328. package/src/aldehyde/layout/footer/index.css +5 -5
  329. package/src/aldehyde/layout/footer/index.js +17 -17
  330. package/src/aldehyde/layout/header/index.css +122 -122
  331. package/src/aldehyde/layout/header/index.tsx +152 -152
  332. package/src/aldehyde/layout/menu/block.css +7 -7
  333. package/src/aldehyde/layout/menu/block.tsx +174 -174
  334. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  335. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  336. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  337. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  338. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  339. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  340. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  341. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  342. package/src/aldehyde/layout/sidebar/index.css +57 -57
  343. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  344. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  345. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  346. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  347. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  348. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  349. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  350. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  351. package/src/aldehyde/layout2/css/header.css +41 -41
  352. package/src/aldehyde/layout2/css/sider.less +17 -17
  353. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  354. package/src/aldehyde/layout2/header.tsx +278 -278
  355. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  356. package/src/aldehyde/layout2/main.tsx +30 -30
  357. package/src/aldehyde/layout2/page.tsx +315 -315
  358. package/src/aldehyde/layout2/sider.tsx +230 -230
  359. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  360. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  361. package/src/aldehyde/layout2/type/layout-type.ts +15 -15
  362. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  363. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  364. package/src/aldehyde/layout3/components/time.tsx +25 -25
  365. package/src/aldehyde/layout3/css/header.less +195 -195
  366. package/src/aldehyde/layout3/css/main.less +161 -161
  367. package/src/aldehyde/layout3/css/sider.less +32 -32
  368. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  369. package/src/aldehyde/layout3/header.tsx +187 -187
  370. package/src/aldehyde/layout3/main.tsx +29 -29
  371. package/src/aldehyde/layout3/page.tsx +110 -110
  372. package/src/aldehyde/layout3/sider.tsx +198 -198
  373. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  374. package/src/aldehyde/layout4/css/header.less +196 -196
  375. package/src/aldehyde/layout4/css/main.less +154 -154
  376. package/src/aldehyde/layout4/css/sider.less +37 -37
  377. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  378. package/src/aldehyde/layout4/header.tsx +190 -190
  379. package/src/aldehyde/layout4/main.tsx +29 -29
  380. package/src/aldehyde/layout4/page.tsx +125 -125
  381. package/src/aldehyde/layout4/sider.tsx +201 -201
  382. package/src/aldehyde/layout5/css/header.less +35 -35
  383. package/src/aldehyde/layout5/css/sider.less +18 -18
  384. package/src/aldehyde/layout5/header.tsx +204 -204
  385. package/src/aldehyde/layout5/page.tsx +107 -107
  386. package/src/aldehyde/layout5/sider.tsx +235 -235
  387. package/src/aldehyde/list/calendar/index.less +20 -20
  388. package/src/aldehyde/list/calendar/index.tsx +157 -157
  389. package/src/aldehyde/list/card-list/card-list-item.tsx +111 -111
  390. package/src/aldehyde/list/card-list/index.less +154 -154
  391. package/src/aldehyde/list/card-list/index.tsx +83 -83
  392. package/src/aldehyde/list/gantt/index.less +8 -8
  393. package/src/aldehyde/list/gantt/index.tsx +508 -508
  394. package/src/aldehyde/list/vertical-list/index.less +208 -208
  395. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  396. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  397. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  398. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  399. package/src/aldehyde/locale/langMp.ts +45 -45
  400. package/src/aldehyde/locale/translate.ts +80 -80
  401. package/src/aldehyde/locale/useLocale.ts +72 -72
  402. package/src/aldehyde/login/context-setter.tsx +130 -130
  403. package/src/aldehyde/login/index.css +19 -19
  404. package/src/aldehyde/login/login.tsx +255 -255
  405. package/src/aldehyde/login/router-login.tsx +107 -107
  406. package/src/aldehyde/login/vertify/index.css +143 -143
  407. package/src/aldehyde/login/vertify/index.tsx +360 -360
  408. package/src/aldehyde/login/vertify/tool.ts +13 -13
  409. package/src/aldehyde/login2/login-page.tsx +92 -92
  410. package/src/aldehyde/login2/login.tsx +226 -226
  411. package/src/aldehyde/login3/index.less +136 -136
  412. package/src/aldehyde/login3/login-page.tsx +71 -71
  413. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  414. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  415. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  416. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +268 -268
  417. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  418. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  419. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  420. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  421. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  422. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  423. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  424. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  425. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  426. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  427. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  428. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  429. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  430. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  431. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  432. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  433. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  434. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  435. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  436. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  437. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  438. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  439. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  440. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  441. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  442. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  443. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  444. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  445. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  446. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  447. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  448. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  449. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  450. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  451. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  452. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  453. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  454. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  455. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +438 -438
  456. package/src/aldehyde/lowcode-components/column-chart/index.tsx +293 -293
  457. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  458. package/src/aldehyde/lowcode-components/data.d.ts +18 -18
  459. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  460. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  461. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  462. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  463. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  464. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  465. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  466. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  467. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  468. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  469. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  470. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  471. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  472. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  473. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  474. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  475. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  476. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  477. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  478. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  479. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  480. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  481. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  482. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  483. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  484. package/src/aldehyde/lowcode-components/index.ts +130 -130
  485. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +300 -300
  486. package/src/aldehyde/lowcode-components/line-chart/index.tsx +290 -290
  487. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  488. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  489. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  490. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  491. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  492. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  493. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  494. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +277 -277
  495. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  496. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +349 -349
  497. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  498. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  499. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  500. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  501. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  502. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  503. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  504. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  505. package/src/aldehyde/module/dtmpl-edit-card.tsx +437 -437
  506. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +23 -23
  507. package/src/aldehyde/module/dtmpl-edit-modal.tsx +25 -25
  508. package/src/aldehyde/module/dtmpl-edit-page.tsx +558 -558
  509. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  510. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  511. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  512. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  513. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  514. package/src/aldehyde/module/index.less +4 -4
  515. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  516. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  517. package/src/aldehyde/module/ltmpl-table.tsx +378 -378
  518. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  519. package/src/aldehyde/routable/dtmpl-route.tsx +173 -173
  520. package/src/aldehyde/routable/import-route.tsx +35 -35
  521. package/src/aldehyde/routable/index.less +25 -25
  522. package/src/aldehyde/routable/ltmpl-route.tsx +539 -539
  523. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +377 -377
  524. package/src/aldehyde/routable/ttmpl-route.tsx +93 -93
  525. package/src/aldehyde/routable/withroute.tsx +36 -36
  526. package/src/aldehyde/sso-Login/index.tsx +73 -73
  527. package/src/aldehyde/sso-Login/service/index.js +16 -16
  528. package/src/aldehyde/sso-Login/service/login.js +75 -75
  529. package/src/aldehyde/table/act-table.tsx +1831 -1831
  530. package/src/aldehyde/table/column/column-builder.tsx +864 -864
  531. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  532. package/src/aldehyde/table/column/index.less +63 -63
  533. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  534. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  535. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  536. package/src/aldehyde/table/index.css +211 -211
  537. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  538. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  539. package/src/aldehyde/table/page-config-button.tsx +203 -203
  540. package/src/aldehyde/table/pagination.css +14 -14
  541. package/src/aldehyde/table/pagination.tsx +81 -81
  542. package/src/aldehyde/table/query-table.tsx +658 -658
  543. package/src/aldehyde/table/relation-table.tsx +1093 -1093
  544. package/src/aldehyde/table/report-table.tsx +125 -125
  545. package/src/aldehyde/table/resizable-table.tsx +97 -97
  546. package/src/aldehyde/table/select-table.tsx +559 -548
  547. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  548. package/src/aldehyde/table/stat/restat.tsx +122 -122
  549. package/src/aldehyde/table/table-util.tsx +25 -25
  550. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  551. package/src/aldehyde/tmpl/hc-data-source.tsx +566 -566
  552. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  553. package/src/aldehyde/tmpl/interface.tsx +919 -919
  554. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  555. package/src/aldehyde/tmpl/superagent.js +146 -146
  556. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  557. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  558. package/src/aldehyde/tree/act-tree.tsx +217 -217
  559. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  560. package/src/aldehyde/tree/index.css +22 -22
  561. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  562. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  563. package/src/aldehyde/tree/tree-node.tsx +73 -73
  564. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  565. package/src/aldehyde/units/EncryptUtils.js +37 -37
  566. package/src/aldehyde/units/image.d.ts +7 -7
  567. package/src/aldehyde/units/index.tsx +1367 -1367
  568. package/src/aldehyde/units/storage.js +2 -2
  569. package/src/aldehyde/utils/dsu.ts +27 -27
  570. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  571. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  572. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  573. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  574. package/src/aldehyde/welcome/components/page-card.less +49 -49
  575. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  576. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  577. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  578. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  579. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  580. package/src/aldehyde/welcome/components/workbench.less +118 -118
  581. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  582. package/src/aldehyde/welcome/index.css +13 -13
@@ -1,397 +1,397 @@
1
- import Konva from 'konva';
2
- import { Render } from '../index';
3
- import { Handler, LinkDrawPoint, LinkDrawPair, ManualPointsMap, MouseButton, ManualPoint } from '../types';
4
- import { GraphDraw, LinkDraw, PreviewDraw, RulerDraw } from '../draws';
5
-
6
- export class SelectionHandlers implements Handler {
7
- private render: Render;
8
- constructor(render: Render) {
9
- this.render = render;
10
- }
11
- // selectRect 拉动的开始和结束坐标
12
- selectRectStartX = 0;
13
- selectRectStartY = 0;
14
- selectRectEndX = 0;
15
- selectRectEndY = 0;
16
- selecting = false; // 是否正在使用 selectRect
17
- transformerMousedownPos: Konva.Vector2d = { x: 0, y: 0 }; // 拖动前的位置
18
- alignLines: Konva.Line[] = []; // 对齐线
19
- alignLinesClear() { // 对齐线清除
20
- for (const line of this.alignLines) {
21
- line.destroy();
22
- }
23
- this.alignLines = [];
24
- }
25
- // 通过偏移量移动【目标节点】
26
- selectingNodesPositionByOffset(offset: Konva.Vector2d) {
27
- for (const node of this.render.selectionTool.selectingNodes) {
28
- if (node.attrs.nodeMousedownPos) {
29
- const x = node.attrs.nodeMousedownPos.x + offset.x;
30
- const y = node.attrs.nodeMousedownPos.y + offset.y;
31
- node.x(x);
32
- node.y(y);
33
- }
34
- }
35
- }
36
- // 重置【目标节点】的 nodeMousedownPos
37
- selectingNodesPositionReset() {
38
- for (const node of this.render.selectionTool.selectingNodes) {
39
- if (node.attrs.nodeMousedownPos) {
40
- node.attrs.nodeMousedownPos.x = node.x();
41
- node.attrs.nodeMousedownPos.y = node.y();
42
- }
43
- }
44
- }
45
- // 重置 transformer 状态
46
- transformerStateReset() {
47
- // 记录 transformer pos
48
- const rect = this.render.transformer.findOne('.back')!.getClientRect();
49
- this.transformerMousedownPos = { x: rect.x, y: rect.y };
50
- const groups = this.render.transformer.nodes(); // 记录 拐点 移动之前的 坐标
51
- const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
52
- const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
53
- for (const pair of pairs) {
54
- const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
55
- const toGroup = groups.find((o) => o.id() === pair.to.groupId);
56
- if (fromGroup && toGroup) { // 必须成对移动才记录
57
- // 移动之前的 坐标
58
- fromGroup.setAttr('manualPointsMapBefore', fromGroup.getAttr('manualPointsMap') ?? ({} as ManualPointsMap));
59
- }
60
- }
61
- }
62
-
63
- reset() { // 重置
64
- this.render.attractTool.alignLinesClear(); // 对齐线清除
65
- this.transformerStateReset();
66
- this.selectingNodesPositionReset();
67
- }
68
-
69
- /**
70
- * 矩阵变换:坐标系中的一个点,围绕着另外一个点进行旋转
71
- * - - - - - - - -
72
- * |x`| |cos -sin| |x-a| |a|
73
- * | | = | | | | +
74
- * |y`| |sin cos| |y-b| |b|
75
- * - - - - - - - -
76
- * @param x 目标节点坐标 x
77
- * @param y 目标节点坐标 y
78
- * @param centerX 围绕的点坐标 x
79
- * @param centerY 围绕的点坐标 y
80
- * @param angle 旋转角度
81
- * @returns
82
- */
83
-
84
- // 拖动时更新位置
85
- private updateManualPointsByDrag(rect: { x: number; y: number }, transformerPos?: Konva.Vector2d, isAttract = false) {
86
- const groups = this.render.transformer.nodes();
87
- const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
88
- const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
89
- for (const pair of pairs) {
90
- const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
91
- const toGroup = groups.find((o) => o.id() === pair.to.groupId);
92
- if (fromGroup && toGroup) {
93
- if (fromGroup.attrs.manualPointsMap && fromGroup.attrs.manualPointsMapBefore) {
94
- let manualPoints = fromGroup.attrs.manualPointsMap[pair.id];
95
- const manualPointsBefore = fromGroup.attrs.manualPointsMapBefore[pair.id];
96
- if (Array.isArray(manualPoints) && Array.isArray(manualPointsBefore)) {
97
- const offsetX = this.render.toStageValue((isAttract ? transformerPos.x : rect.x) - this.transformerMousedownPos.x);
98
- const offsetY = this.render.toStageValue((isAttract ? transformerPos.y : rect.y) - this.transformerMousedownPos.y);
99
- manualPoints = manualPointsBefore.map((o: ManualPoint) => ({ x: o.x + offsetX, y: o.y + offsetY }));
100
- fromGroup.setAttr('manualPointsMap', { ...fromGroup.attrs.manualPointsMap, [pair.id]: manualPoints });
101
- }
102
- }
103
- }
104
- }
105
- }
106
-
107
- rotatePoint(x: number, y: number, centerX: number, centerY: number, angle: number) {
108
- const radians = (angle * Math.PI) / 180; // 将角度转换为弧度
109
- // 计算旋转后的坐标
110
- const newX = Math.cos(radians) * (x - centerX) - Math.sin(radians) * (y - centerY) + centerX;
111
- const newY = Math.sin(radians) * (x - centerX) + Math.cos(radians) * (y - centerY) + centerY;
112
- return { x: newX, y: newY };
113
- }
114
-
115
- lastRotation = 0;
116
-
117
- handlers = { // 选择相关
118
- stage: {
119
- mousedown: (e: Konva.KonvaEventObject<GlobalEventHandlersEventMap['mousedown']>) => {
120
- if (!this.render.graphType) { // 并非在新建并拖动图形
121
- const parent = e.target.getParent();
122
- if (e.target === this.render.stage) {
123
- // 点击空白处 清除选择
124
- this.render.selectionTool.selectingClear();
125
- this.render.linkTool.selectingClear();
126
- // 选择框(判断 ctrlKey 为了排查 mac 拖动快捷键)
127
- if (e.evt.button === MouseButton["左键"] && !e.evt.ctrlKey) {
128
- const pos = this.render.stage.getPointerPosition();
129
- if (pos) { // 初始化状态值
130
- this.selectRectStartX = pos.x;
131
- this.selectRectStartY = pos.y;
132
- this.selectRectEndX = pos.x;
133
- this.selectRectEndY = pos.y;
134
- }
135
- // 初始化大小
136
- this.render.selectRect.width(0);
137
- this.render.selectRect.height(0);
138
- this.selecting = true; // 开始选择
139
- }
140
- this.render.linkTool.pointsVisible(false); // 隐藏连接点
141
- } else if (parent instanceof Konva.Transformer) {
142
- // transformer 点击事件交给 transformer 自己的 handler
143
- } else if (parent instanceof Konva.Group) {
144
- // (判断 ctrlKey 为了排查 mac 拖动快捷键)
145
- if (e.evt.button === MouseButton["左键"] && !e.evt.ctrlKey) {
146
- if (!this.render.ignore(parent) && !this.render.ignoreDraw(e.target)) {
147
- // 锁定节点:在 select 之前先禁用 Konva 内置拖拽,防止 race condition
148
- if (parent.attrs.locked) {
149
- parent.draggable(false);
150
- }
151
- if (e.evt.ctrlKey || e.evt.metaKey) { // 新增多选
152
- this.render.selectionTool.select([...this.render.selectionTool.selectingNodes, parent]);
153
- } else { // 单选
154
- this.render.selectionTool.select([parent]);
155
- // 单选时无法通过 transformer 获取拖动初始位置 transformerMousedownPos
156
- // 此时直接取目标的 getClientRect 位置
157
- const rect = parent.getClientRect();
158
- this.transformerMousedownPos = { x: rect.x, y: rect.y };
159
- }
160
- }
161
- } else {
162
- this.render.selectionTool.selectingClear();
163
- }
164
- }
165
- }
166
- },
167
- mousemove: () => {
168
- const stageState = this.render.getStageState();
169
- if (this.selecting) { // 选择框
170
- // 选择区域中
171
- const pos = this.render.stage.getPointerPosition();
172
- if (pos) { // 选择移动后的坐标
173
- this.selectRectEndX = pos.x;
174
- this.selectRectEndY = pos.y;
175
- }
176
- // 调整【选择框】的位置和大小
177
- this.render.selectRect.setAttrs({
178
- visible: true,
179
- x: this.render.toStageValue(Math.min(this.selectRectStartX, this.selectRectEndX) - stageState.x),
180
- y: this.render.toStageValue(Math.min(this.selectRectStartY, this.selectRectEndY) - stageState.y),
181
- width: this.render.toStageValue(Math.abs(this.selectRectEndX - this.selectRectStartX)),
182
- height: this.render.toStageValue(Math.abs(this.selectRectEndY - this.selectRectStartY))
183
- });
184
- }
185
- },
186
- mouseup: () => { // 选择框 重叠计算
187
- const box = this.render.selectRect.getClientRect();
188
- if (box.width > 0 && box.height > 0) {
189
- // 区域有面积 获取所有图形
190
- const shapes = this.render.layer.getChildren((node) => !this.render.ignore(node));
191
- // 提取重叠部分
192
- const selected = shapes.filter((shape) => Konva.Util.haveIntersection(box, shape.getClientRect()));
193
- this.render.selectionTool.select(selected); // 多选
194
- }
195
- // 重置
196
- this.render.selectRect.setAttrs({ visible: false, x: 0, y: 0, width: 0, height: 0 });
197
- this.selecting = false; // 选择区域结束
198
- }
199
- },
200
- transformer: { // 记录初始状态
201
- mousedown: (e: Konva.KonvaEventObject<GlobalEventHandlersEventMap['mousedown']>) => {
202
- const anchor = this.render.transformer.getActiveAnchor();
203
- if (!anchor) { // 非变换
204
- if (e.evt.ctrlKey || e.evt.metaKey) { // 选择
205
- if (this.render.selectionTool.selectingNodes.length > 0) {
206
- const pos = this.render.stage.getPointerPosition();
207
- if (pos) {
208
- const keeps: Konva.Node[] = [];
209
- const removes: Konva.Node[] = [];
210
- // 从高到低,逐个判断 已选节点 和 鼠标点击位置 是否重叠
211
- let finded = false;
212
- for (const node of this.render.selectionTool.selectingNodes.sort((a, b) => b.zIndex() - a.zIndex())) {
213
- if (!finded && Konva.Util.haveIntersection(node.getClientRect(), { ...pos, width: 1, height: 1 })) {
214
- // 记录需要移除选择的节点
215
- removes.unshift(node);
216
- finded = true;
217
- } else {
218
- keeps.unshift(node);
219
- }
220
- }
221
- if (removes.length > 0) { // 取消选择
222
- this.render.selectionTool.select(keeps);
223
- } else {
224
- // 从高到低,逐个判断 未选节点 和 鼠标点击位置 是否重叠
225
- let finded = false;
226
- const adds: Konva.Node[] = [];
227
- for (const node of this.render.layer.getChildren().filter((node) => !this.render.ignore(node)).sort((a, b) => b.zIndex() - a.zIndex())) {
228
- if (!finded && Konva.Util.haveIntersection(node.getClientRect(), { ...pos, width: 1, height: 1 })) {
229
- // 记录需要增加选择的节点
230
- adds.unshift(node);
231
- finded = true;
232
- }
233
- }
234
- if (adds.length > 0) { // 新增选择
235
- this.render.selectionTool.select([...this.render.selectionTool.selectingNodes, ...adds]);
236
- }
237
- }
238
- }
239
- }
240
- } else {
241
- if (this.render.selectionTool.selectingNodes.length > 0) {
242
- // 拖动前 重置状态
243
- this.reset();
244
- }
245
- }
246
- } else {
247
- // 变换前 重置状态
248
- this.reset();
249
- }
250
- },
251
- transformstart: () => {
252
- const back = this.render.transformer.findOne('.back');
253
- if (back) {
254
- this.lastRotation = back.getAbsoluteRotation();
255
- }
256
- },
257
- transform: () => { // 旋转时,拐点也要跟着动
258
- const back = this.render.transformer.findOne('.back');
259
- if (back) {
260
- const stageState = this.render.getStageState();
261
- const { x, y, width, height } = back.getClientRect();
262
- const rotation = back.getAbsoluteRotation() - this.lastRotation;
263
- const centerX = x + width / 2;
264
- const centerY = y + height / 2;
265
- const groups = this.render.transformer.nodes();
266
- const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
267
- const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
268
- for (const pair of pairs) {
269
- const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
270
- const toGroup = groups.find((o) => o.id() === pair.to.groupId);
271
- if (fromGroup && toGroup) { // 必须成对移动才记录
272
- if (fromGroup.attrs.manualPointsMap && fromGroup.attrs.manualPointsMapBefore) {
273
- let manualPoints = fromGroup.attrs.manualPointsMap[pair.id];
274
- const manualPointsBefore = fromGroup.attrs.manualPointsMapBefore[pair.id];
275
- if (Array.isArray(manualPoints) && Array.isArray(manualPointsBefore)) {
276
- manualPoints = manualPointsBefore.map((o: ManualPoint) => {
277
- const { x, y } = this.rotatePoint(this.render.toBoardValue(o.x) + stageState.x, this.render.toBoardValue(o.y) + stageState.y, centerX, centerY, rotation);
278
- return { x: this.render.toStageValue(x - stageState.x), y: this.render.toStageValue(y - stageState.y) };
279
- });
280
- fromGroup.setAttr('manualPointsMap', { ...fromGroup.attrs.manualPointsMap, [pair.id]: manualPoints });
281
- }
282
- }
283
- }
284
- }
285
- // 更新坐标记录(仅记录属性,不干预Konva位置,避免toFixed截断与Konva精确值冲突累积)
286
- for (const group of groups as Konva.Group[]) {
287
- group.setAttr('assetSettings', this.render.getAssetSettings(group));
288
- // 存在tooltip,则tooltip始终箭头朝下,不受group旋转影响
289
- group.findOne('.tooltip')?.rotation(-group.rotation());
290
- }
291
- this.render.emit('asset-position-change', groups);
292
- this.render.emit('asset-rotation-change', groups);
293
- }
294
- this.render.redraw([GraphDraw.name, LinkDraw.name, PreviewDraw.name]);
295
- },
296
- transformend: () => {
297
- this.reset(); // 变换结束 重置状态
298
- this.render.updateHistory(); // 更新历史
299
- this.render.redraw([GraphDraw.name, LinkDraw.name, PreviewDraw.name]);
300
- },
301
- dragstart: () => {
302
- },
303
- dragmove: () => { // 拖动
304
- const rect = this.render.transformer.findOne('.back')!.getClientRect();
305
- // 磁吸控制:关闭时跳过磁吸逻辑,让 transformer 自由拖动
306
- if (this.render.showAttract) {
307
- const { pos: transformerPos, isAttract } = this.render.attractTool.attractTransformer(rect);
308
- if (isAttract) { // 磁吸偏移
309
- this.selectingNodesPositionByOffset({
310
- x: this.render.toStageValue(transformerPos.x - this.transformerMousedownPos.x),
311
- y: this.render.toStageValue(transformerPos.y - this.transformerMousedownPos.y)
312
- });
313
- }
314
- // 拐点磁吸偏移
315
- this.updateManualPointsByDrag(rect, transformerPos, isAttract);
316
- } else {
317
- // 拐点跟随拖动偏移
318
- this.updateManualPointsByDrag(rect, undefined, false);
319
- }
320
- const groups = this.render.transformer.nodes();
321
- for (const group of groups) { // 更新坐标记录(仅记录属性,不干预Konva位置)
322
- group.setAttr('assetSettings', this.render.getAssetSettings(group));
323
- }
324
- this.render.emit('asset-position-change', groups);
325
- this.render.redraw([GraphDraw.name, LinkDraw.name, RulerDraw.name, PreviewDraw.name]);
326
- },
327
- dragend: () => {
328
- this.reset(); // 拖动结束 重置状态
329
- this.render.updateHistory();
330
- this.render.redraw([GraphDraw.name, LinkDraw.name, RulerDraw.name, PreviewDraw.name]);
331
- },
332
- mousemove: () => { // 子节点 hover
333
- const pos = this.render.stage.getPointerPosition();
334
- if (pos) {
335
- // 获取所有图形
336
- const shapes = this.render.transformer.nodes();
337
- // 隐藏 hover 框
338
- for (const shape of shapes) {
339
- if (shape instanceof Konva.Group) {
340
- shape.findOne('#hoverRect')?.visible(false);
341
- }
342
- }
343
- if (shapes.length > 1) { // 多选
344
- // zIndex 倒序(大的优先)
345
- shapes.sort((a, b) => b.zIndex() - a.zIndex());
346
- // 提取重叠目标
347
- const selected = shapes.find((shape) => Konva.Util.haveIntersection({ ...pos, width: 1, height: 1 }, shape.getClientRect()));
348
- if (selected) { // 显示 hover 框
349
- if (selected instanceof Konva.Group) {
350
- selected.findOne('#hoverRect')?.visible(true);
351
- }
352
- }
353
- }
354
- }
355
- },
356
- mouseleave: () => { // 隐藏 hover 框
357
- for (const shape of this.render.transformer.nodes()) {
358
- if (shape instanceof Konva.Group) {
359
- shape.findOne('#hoverRect')?.visible(false);
360
- }
361
- }
362
- }
363
- }
364
- };
365
-
366
- transformerConfig = { // transformer config
367
- // 变换中
368
- anchorDragBoundFunc: (oldPos: Konva.Vector2d, newPos: Konva.Vector2d) => {
369
- // 磁贴逻辑
370
- if (!this.render.config.readonly && this.render.config.attractResize) {
371
- // transformer 锚点按钮
372
- const anchor = this.render.transformer.getActiveAnchor();
373
- // 非旋转(就是放大缩小时)
374
- if (anchor && anchor !== 'rotater') {
375
- const stageState = this.render.getStageState();
376
- const logicX = this.render.toStageValue(newPos.x - stageState.x); // x坐标
377
- const logicNumX = Math.round(logicX / this.render.bgSize); // x单元格个数
378
- const logicClosestX = logicNumX * this.render.bgSize; // x磁贴目标坐标
379
- const logicDiffX = Math.abs(logicX - logicClosestX); // x磁贴偏移量
380
- const snappedX = logicDiffX < 5; // x磁贴阈值
381
- const logicY = this.render.toStageValue(newPos.y - stageState.y); // y坐标
382
- const logicNumY = Math.round(logicY / this.render.bgSize); // y单元格个数
383
- const logicClosestY = logicNumY * this.render.bgSize; // y磁贴目标坐标
384
- const logicDiffY = Math.abs(logicY - logicClosestY); // y磁贴偏移量
385
- const snappedY = logicDiffY < 5; // y磁贴阈值
386
- if (snappedX || snappedY) { // xy磁贴
387
- return {
388
- x: snappedX ? this.render.toBoardValue(logicClosestX) + stageState.x : newPos.x,
389
- y: snappedY ? this.render.toBoardValue(logicClosestY) + stageState.y : newPos.y
390
- };
391
- }
392
- }
393
- }
394
- return newPos; // 不磁贴
395
- }
396
- };
1
+ import Konva from 'konva';
2
+ import { Render } from '../index';
3
+ import { Handler, LinkDrawPoint, LinkDrawPair, ManualPointsMap, MouseButton, ManualPoint } from '../types';
4
+ import { GraphDraw, LinkDraw, PreviewDraw, RulerDraw } from '../draws';
5
+
6
+ export class SelectionHandlers implements Handler {
7
+ private render: Render;
8
+ constructor(render: Render) {
9
+ this.render = render;
10
+ }
11
+ // selectRect 拉动的开始和结束坐标
12
+ selectRectStartX = 0;
13
+ selectRectStartY = 0;
14
+ selectRectEndX = 0;
15
+ selectRectEndY = 0;
16
+ selecting = false; // 是否正在使用 selectRect
17
+ transformerMousedownPos: Konva.Vector2d = { x: 0, y: 0 }; // 拖动前的位置
18
+ alignLines: Konva.Line[] = []; // 对齐线
19
+ alignLinesClear() { // 对齐线清除
20
+ for (const line of this.alignLines) {
21
+ line.destroy();
22
+ }
23
+ this.alignLines = [];
24
+ }
25
+ // 通过偏移量移动【目标节点】
26
+ selectingNodesPositionByOffset(offset: Konva.Vector2d) {
27
+ for (const node of this.render.selectionTool.selectingNodes) {
28
+ if (node.attrs.nodeMousedownPos) {
29
+ const x = node.attrs.nodeMousedownPos.x + offset.x;
30
+ const y = node.attrs.nodeMousedownPos.y + offset.y;
31
+ node.x(x);
32
+ node.y(y);
33
+ }
34
+ }
35
+ }
36
+ // 重置【目标节点】的 nodeMousedownPos
37
+ selectingNodesPositionReset() {
38
+ for (const node of this.render.selectionTool.selectingNodes) {
39
+ if (node.attrs.nodeMousedownPos) {
40
+ node.attrs.nodeMousedownPos.x = node.x();
41
+ node.attrs.nodeMousedownPos.y = node.y();
42
+ }
43
+ }
44
+ }
45
+ // 重置 transformer 状态
46
+ transformerStateReset() {
47
+ // 记录 transformer pos
48
+ const rect = this.render.transformer.findOne('.back')!.getClientRect();
49
+ this.transformerMousedownPos = { x: rect.x, y: rect.y };
50
+ const groups = this.render.transformer.nodes(); // 记录 拐点 移动之前的 坐标
51
+ const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
52
+ const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
53
+ for (const pair of pairs) {
54
+ const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
55
+ const toGroup = groups.find((o) => o.id() === pair.to.groupId);
56
+ if (fromGroup && toGroup) { // 必须成对移动才记录
57
+ // 移动之前的 坐标
58
+ fromGroup.setAttr('manualPointsMapBefore', fromGroup.getAttr('manualPointsMap') ?? ({} as ManualPointsMap));
59
+ }
60
+ }
61
+ }
62
+
63
+ reset() { // 重置
64
+ this.render.attractTool.alignLinesClear(); // 对齐线清除
65
+ this.transformerStateReset();
66
+ this.selectingNodesPositionReset();
67
+ }
68
+
69
+ /**
70
+ * 矩阵变换:坐标系中的一个点,围绕着另外一个点进行旋转
71
+ * - - - - - - - -
72
+ * |x`| |cos -sin| |x-a| |a|
73
+ * | | = | | | | +
74
+ * |y`| |sin cos| |y-b| |b|
75
+ * - - - - - - - -
76
+ * @param x 目标节点坐标 x
77
+ * @param y 目标节点坐标 y
78
+ * @param centerX 围绕的点坐标 x
79
+ * @param centerY 围绕的点坐标 y
80
+ * @param angle 旋转角度
81
+ * @returns
82
+ */
83
+
84
+ // 拖动时更新位置
85
+ private updateManualPointsByDrag(rect: { x: number; y: number }, transformerPos?: Konva.Vector2d, isAttract = false) {
86
+ const groups = this.render.transformer.nodes();
87
+ const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
88
+ const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
89
+ for (const pair of pairs) {
90
+ const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
91
+ const toGroup = groups.find((o) => o.id() === pair.to.groupId);
92
+ if (fromGroup && toGroup) {
93
+ if (fromGroup.attrs.manualPointsMap && fromGroup.attrs.manualPointsMapBefore) {
94
+ let manualPoints = fromGroup.attrs.manualPointsMap[pair.id];
95
+ const manualPointsBefore = fromGroup.attrs.manualPointsMapBefore[pair.id];
96
+ if (Array.isArray(manualPoints) && Array.isArray(manualPointsBefore)) {
97
+ const offsetX = this.render.toStageValue((isAttract ? transformerPos.x : rect.x) - this.transformerMousedownPos.x);
98
+ const offsetY = this.render.toStageValue((isAttract ? transformerPos.y : rect.y) - this.transformerMousedownPos.y);
99
+ manualPoints = manualPointsBefore.map((o: ManualPoint) => ({ x: o.x + offsetX, y: o.y + offsetY }));
100
+ fromGroup.setAttr('manualPointsMap', { ...fromGroup.attrs.manualPointsMap, [pair.id]: manualPoints });
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ rotatePoint(x: number, y: number, centerX: number, centerY: number, angle: number) {
108
+ const radians = (angle * Math.PI) / 180; // 将角度转换为弧度
109
+ // 计算旋转后的坐标
110
+ const newX = Math.cos(radians) * (x - centerX) - Math.sin(radians) * (y - centerY) + centerX;
111
+ const newY = Math.sin(radians) * (x - centerX) + Math.cos(radians) * (y - centerY) + centerY;
112
+ return { x: newX, y: newY };
113
+ }
114
+
115
+ lastRotation = 0;
116
+
117
+ handlers = { // 选择相关
118
+ stage: {
119
+ mousedown: (e: Konva.KonvaEventObject<GlobalEventHandlersEventMap['mousedown']>) => {
120
+ if (!this.render.graphType) { // 并非在新建并拖动图形
121
+ const parent = e.target.getParent();
122
+ if (e.target === this.render.stage) {
123
+ // 点击空白处 清除选择
124
+ this.render.selectionTool.selectingClear();
125
+ this.render.linkTool.selectingClear();
126
+ // 选择框(判断 ctrlKey 为了排查 mac 拖动快捷键)
127
+ if (e.evt.button === MouseButton["左键"] && !e.evt.ctrlKey) {
128
+ const pos = this.render.stage.getPointerPosition();
129
+ if (pos) { // 初始化状态值
130
+ this.selectRectStartX = pos.x;
131
+ this.selectRectStartY = pos.y;
132
+ this.selectRectEndX = pos.x;
133
+ this.selectRectEndY = pos.y;
134
+ }
135
+ // 初始化大小
136
+ this.render.selectRect.width(0);
137
+ this.render.selectRect.height(0);
138
+ this.selecting = true; // 开始选择
139
+ }
140
+ this.render.linkTool.pointsVisible(false); // 隐藏连接点
141
+ } else if (parent instanceof Konva.Transformer) {
142
+ // transformer 点击事件交给 transformer 自己的 handler
143
+ } else if (parent instanceof Konva.Group) {
144
+ // (判断 ctrlKey 为了排查 mac 拖动快捷键)
145
+ if (e.evt.button === MouseButton["左键"] && !e.evt.ctrlKey) {
146
+ if (!this.render.ignore(parent) && !this.render.ignoreDraw(e.target)) {
147
+ // 锁定节点:在 select 之前先禁用 Konva 内置拖拽,防止 race condition
148
+ if (parent.attrs.locked) {
149
+ parent.draggable(false);
150
+ }
151
+ if (e.evt.ctrlKey || e.evt.metaKey) { // 新增多选
152
+ this.render.selectionTool.select([...this.render.selectionTool.selectingNodes, parent]);
153
+ } else { // 单选
154
+ this.render.selectionTool.select([parent]);
155
+ // 单选时无法通过 transformer 获取拖动初始位置 transformerMousedownPos
156
+ // 此时直接取目标的 getClientRect 位置
157
+ const rect = parent.getClientRect();
158
+ this.transformerMousedownPos = { x: rect.x, y: rect.y };
159
+ }
160
+ }
161
+ } else {
162
+ this.render.selectionTool.selectingClear();
163
+ }
164
+ }
165
+ }
166
+ },
167
+ mousemove: () => {
168
+ const stageState = this.render.getStageState();
169
+ if (this.selecting) { // 选择框
170
+ // 选择区域中
171
+ const pos = this.render.stage.getPointerPosition();
172
+ if (pos) { // 选择移动后的坐标
173
+ this.selectRectEndX = pos.x;
174
+ this.selectRectEndY = pos.y;
175
+ }
176
+ // 调整【选择框】的位置和大小
177
+ this.render.selectRect.setAttrs({
178
+ visible: true,
179
+ x: this.render.toStageValue(Math.min(this.selectRectStartX, this.selectRectEndX) - stageState.x),
180
+ y: this.render.toStageValue(Math.min(this.selectRectStartY, this.selectRectEndY) - stageState.y),
181
+ width: this.render.toStageValue(Math.abs(this.selectRectEndX - this.selectRectStartX)),
182
+ height: this.render.toStageValue(Math.abs(this.selectRectEndY - this.selectRectStartY))
183
+ });
184
+ }
185
+ },
186
+ mouseup: () => { // 选择框 重叠计算
187
+ const box = this.render.selectRect.getClientRect();
188
+ if (box.width > 0 && box.height > 0) {
189
+ // 区域有面积 获取所有图形
190
+ const shapes = this.render.layer.getChildren((node) => !this.render.ignore(node));
191
+ // 提取重叠部分
192
+ const selected = shapes.filter((shape) => Konva.Util.haveIntersection(box, shape.getClientRect()));
193
+ this.render.selectionTool.select(selected); // 多选
194
+ }
195
+ // 重置
196
+ this.render.selectRect.setAttrs({ visible: false, x: 0, y: 0, width: 0, height: 0 });
197
+ this.selecting = false; // 选择区域结束
198
+ }
199
+ },
200
+ transformer: { // 记录初始状态
201
+ mousedown: (e: Konva.KonvaEventObject<GlobalEventHandlersEventMap['mousedown']>) => {
202
+ const anchor = this.render.transformer.getActiveAnchor();
203
+ if (!anchor) { // 非变换
204
+ if (e.evt.ctrlKey || e.evt.metaKey) { // 选择
205
+ if (this.render.selectionTool.selectingNodes.length > 0) {
206
+ const pos = this.render.stage.getPointerPosition();
207
+ if (pos) {
208
+ const keeps: Konva.Node[] = [];
209
+ const removes: Konva.Node[] = [];
210
+ // 从高到低,逐个判断 已选节点 和 鼠标点击位置 是否重叠
211
+ let finded = false;
212
+ for (const node of this.render.selectionTool.selectingNodes.sort((a, b) => b.zIndex() - a.zIndex())) {
213
+ if (!finded && Konva.Util.haveIntersection(node.getClientRect(), { ...pos, width: 1, height: 1 })) {
214
+ // 记录需要移除选择的节点
215
+ removes.unshift(node);
216
+ finded = true;
217
+ } else {
218
+ keeps.unshift(node);
219
+ }
220
+ }
221
+ if (removes.length > 0) { // 取消选择
222
+ this.render.selectionTool.select(keeps);
223
+ } else {
224
+ // 从高到低,逐个判断 未选节点 和 鼠标点击位置 是否重叠
225
+ let finded = false;
226
+ const adds: Konva.Node[] = [];
227
+ for (const node of this.render.layer.getChildren().filter((node) => !this.render.ignore(node)).sort((a, b) => b.zIndex() - a.zIndex())) {
228
+ if (!finded && Konva.Util.haveIntersection(node.getClientRect(), { ...pos, width: 1, height: 1 })) {
229
+ // 记录需要增加选择的节点
230
+ adds.unshift(node);
231
+ finded = true;
232
+ }
233
+ }
234
+ if (adds.length > 0) { // 新增选择
235
+ this.render.selectionTool.select([...this.render.selectionTool.selectingNodes, ...adds]);
236
+ }
237
+ }
238
+ }
239
+ }
240
+ } else {
241
+ if (this.render.selectionTool.selectingNodes.length > 0) {
242
+ // 拖动前 重置状态
243
+ this.reset();
244
+ }
245
+ }
246
+ } else {
247
+ // 变换前 重置状态
248
+ this.reset();
249
+ }
250
+ },
251
+ transformstart: () => {
252
+ const back = this.render.transformer.findOne('.back');
253
+ if (back) {
254
+ this.lastRotation = back.getAbsoluteRotation();
255
+ }
256
+ },
257
+ transform: () => { // 旋转时,拐点也要跟着动
258
+ const back = this.render.transformer.findOne('.back');
259
+ if (back) {
260
+ const stageState = this.render.getStageState();
261
+ const { x, y, width, height } = back.getClientRect();
262
+ const rotation = back.getAbsoluteRotation() - this.lastRotation;
263
+ const centerX = x + width / 2;
264
+ const centerY = y + height / 2;
265
+ const groups = this.render.transformer.nodes();
266
+ const points = groups.reduce((ps, group) => ps.concat(Array.isArray(group.getAttr('points')) ? group.getAttr('points') : []), [] as LinkDrawPoint[]);
267
+ const pairs = points.reduce((ps, point) => ps.concat(point.pairs ? point.pairs.filter((o) => !o.disabled) : []), [] as LinkDrawPair[]);
268
+ for (const pair of pairs) {
269
+ const fromGroup = groups.find((o) => o.id() === pair.from.groupId);
270
+ const toGroup = groups.find((o) => o.id() === pair.to.groupId);
271
+ if (fromGroup && toGroup) { // 必须成对移动才记录
272
+ if (fromGroup.attrs.manualPointsMap && fromGroup.attrs.manualPointsMapBefore) {
273
+ let manualPoints = fromGroup.attrs.manualPointsMap[pair.id];
274
+ const manualPointsBefore = fromGroup.attrs.manualPointsMapBefore[pair.id];
275
+ if (Array.isArray(manualPoints) && Array.isArray(manualPointsBefore)) {
276
+ manualPoints = manualPointsBefore.map((o: ManualPoint) => {
277
+ const { x, y } = this.rotatePoint(this.render.toBoardValue(o.x) + stageState.x, this.render.toBoardValue(o.y) + stageState.y, centerX, centerY, rotation);
278
+ return { x: this.render.toStageValue(x - stageState.x), y: this.render.toStageValue(y - stageState.y) };
279
+ });
280
+ fromGroup.setAttr('manualPointsMap', { ...fromGroup.attrs.manualPointsMap, [pair.id]: manualPoints });
281
+ }
282
+ }
283
+ }
284
+ }
285
+ // 更新坐标记录(仅记录属性,不干预Konva位置,避免toFixed截断与Konva精确值冲突累积)
286
+ for (const group of groups as Konva.Group[]) {
287
+ group.setAttr('assetSettings', this.render.getAssetSettings(group));
288
+ // 存在tooltip,则tooltip始终箭头朝下,不受group旋转影响
289
+ group.findOne('.tooltip')?.rotation(-group.rotation());
290
+ }
291
+ this.render.emit('asset-position-change', groups);
292
+ this.render.emit('asset-rotation-change', groups);
293
+ }
294
+ this.render.redraw([GraphDraw.name, LinkDraw.name, PreviewDraw.name]);
295
+ },
296
+ transformend: () => {
297
+ this.reset(); // 变换结束 重置状态
298
+ this.render.updateHistory(); // 更新历史
299
+ this.render.redraw([GraphDraw.name, LinkDraw.name, PreviewDraw.name]);
300
+ },
301
+ dragstart: () => {
302
+ },
303
+ dragmove: () => { // 拖动
304
+ const rect = this.render.transformer.findOne('.back')!.getClientRect();
305
+ // 磁吸控制:关闭时跳过磁吸逻辑,让 transformer 自由拖动
306
+ if (this.render.showAttract) {
307
+ const { pos: transformerPos, isAttract } = this.render.attractTool.attractTransformer(rect);
308
+ if (isAttract) { // 磁吸偏移
309
+ this.selectingNodesPositionByOffset({
310
+ x: this.render.toStageValue(transformerPos.x - this.transformerMousedownPos.x),
311
+ y: this.render.toStageValue(transformerPos.y - this.transformerMousedownPos.y)
312
+ });
313
+ }
314
+ // 拐点磁吸偏移
315
+ this.updateManualPointsByDrag(rect, transformerPos, isAttract);
316
+ } else {
317
+ // 拐点跟随拖动偏移
318
+ this.updateManualPointsByDrag(rect, undefined, false);
319
+ }
320
+ const groups = this.render.transformer.nodes();
321
+ for (const group of groups) { // 更新坐标记录(仅记录属性,不干预Konva位置)
322
+ group.setAttr('assetSettings', this.render.getAssetSettings(group));
323
+ }
324
+ this.render.emit('asset-position-change', groups);
325
+ this.render.redraw([GraphDraw.name, LinkDraw.name, RulerDraw.name, PreviewDraw.name]);
326
+ },
327
+ dragend: () => {
328
+ this.reset(); // 拖动结束 重置状态
329
+ this.render.updateHistory();
330
+ this.render.redraw([GraphDraw.name, LinkDraw.name, RulerDraw.name, PreviewDraw.name]);
331
+ },
332
+ mousemove: () => { // 子节点 hover
333
+ const pos = this.render.stage.getPointerPosition();
334
+ if (pos) {
335
+ // 获取所有图形
336
+ const shapes = this.render.transformer.nodes();
337
+ // 隐藏 hover 框
338
+ for (const shape of shapes) {
339
+ if (shape instanceof Konva.Group) {
340
+ shape.findOne('#hoverRect')?.visible(false);
341
+ }
342
+ }
343
+ if (shapes.length > 1) { // 多选
344
+ // zIndex 倒序(大的优先)
345
+ shapes.sort((a, b) => b.zIndex() - a.zIndex());
346
+ // 提取重叠目标
347
+ const selected = shapes.find((shape) => Konva.Util.haveIntersection({ ...pos, width: 1, height: 1 }, shape.getClientRect()));
348
+ if (selected) { // 显示 hover 框
349
+ if (selected instanceof Konva.Group) {
350
+ selected.findOne('#hoverRect')?.visible(true);
351
+ }
352
+ }
353
+ }
354
+ }
355
+ },
356
+ mouseleave: () => { // 隐藏 hover 框
357
+ for (const shape of this.render.transformer.nodes()) {
358
+ if (shape instanceof Konva.Group) {
359
+ shape.findOne('#hoverRect')?.visible(false);
360
+ }
361
+ }
362
+ }
363
+ }
364
+ };
365
+
366
+ transformerConfig = { // transformer config
367
+ // 变换中
368
+ anchorDragBoundFunc: (oldPos: Konva.Vector2d, newPos: Konva.Vector2d) => {
369
+ // 磁贴逻辑
370
+ if (!this.render.config.readonly && this.render.config.attractResize) {
371
+ // transformer 锚点按钮
372
+ const anchor = this.render.transformer.getActiveAnchor();
373
+ // 非旋转(就是放大缩小时)
374
+ if (anchor && anchor !== 'rotater') {
375
+ const stageState = this.render.getStageState();
376
+ const logicX = this.render.toStageValue(newPos.x - stageState.x); // x坐标
377
+ const logicNumX = Math.round(logicX / this.render.bgSize); // x单元格个数
378
+ const logicClosestX = logicNumX * this.render.bgSize; // x磁贴目标坐标
379
+ const logicDiffX = Math.abs(logicX - logicClosestX); // x磁贴偏移量
380
+ const snappedX = logicDiffX < 5; // x磁贴阈值
381
+ const logicY = this.render.toStageValue(newPos.y - stageState.y); // y坐标
382
+ const logicNumY = Math.round(logicY / this.render.bgSize); // y单元格个数
383
+ const logicClosestY = logicNumY * this.render.bgSize; // y磁贴目标坐标
384
+ const logicDiffY = Math.abs(logicY - logicClosestY); // y磁贴偏移量
385
+ const snappedY = logicDiffY < 5; // y磁贴阈值
386
+ if (snappedX || snappedY) { // xy磁贴
387
+ return {
388
+ x: snappedX ? this.render.toBoardValue(logicClosestX) + stageState.x : newPos.x,
389
+ y: snappedY ? this.render.toBoardValue(logicClosestY) + stageState.y : newPos.y
390
+ };
391
+ }
392
+ }
393
+ }
394
+ return newPos; // 不磁贴
395
+ }
396
+ };
397
397
  }