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