aldehyde 0.2.488 → 0.2.489

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 (576) 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 +72 -72
  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.less +60 -60
  50. package/lib/draw-canvas-edit/components/render/components/workstation-component.js +6 -6
  51. package/lib/draw-canvas-edit/index.less +48 -48
  52. package/lib/draw-canvas-view/index.less +66 -66
  53. package/lib/export/export-frame.css +2 -2
  54. package/lib/export/export-frame.d.ts.map +1 -1
  55. package/lib/export/select-code-export-frame.d.ts.map +1 -1
  56. package/lib/form/dtmpl-form.css +3 -3
  57. package/lib/form/dtmpl-form.d.ts.map +1 -1
  58. package/lib/form/field-group-form.d.ts.map +1 -1
  59. package/lib/form/form-Item-group.d.ts.map +1 -1
  60. package/lib/form/index.css +12 -12
  61. package/lib/import/excel-import.d.ts.map +1 -1
  62. package/lib/import/index.css +53 -53
  63. package/lib/import/template.css +50 -50
  64. package/lib/layout/common.css +64 -64
  65. package/lib/layout/coverstyle.css +51 -51
  66. package/lib/layout/footer/index.css +5 -5
  67. package/lib/layout/header/index.css +122 -122
  68. package/lib/layout/menu/block.css +7 -7
  69. package/lib/layout/menu/block.d.ts.map +1 -1
  70. package/lib/layout/menu/l2menu-quick-bar.d.ts.map +1 -1
  71. package/lib/layout/menu/menu-2layers.d.ts.map +1 -1
  72. package/lib/layout/menu/message-bar.less +73 -73
  73. package/lib/layout/menu/reset-password.d.ts.map +1 -1
  74. package/lib/layout/menu/user-bar.d.ts.map +1 -1
  75. package/lib/layout/menu/userinfo-bar.d.ts.map +1 -1
  76. package/lib/layout/sidebar/index.css +57 -57
  77. package/lib/layout2/css/header.css +41 -41
  78. package/lib/layout2/css/sider.less +17 -17
  79. package/lib/layout2/css/tabs-layout.less +18 -18
  80. package/lib/layout3/css/header.less +195 -195
  81. package/lib/layout3/css/main.less +161 -161
  82. package/lib/layout3/css/sider.less +32 -32
  83. package/lib/layout3/css/tabs-layout.less +38 -38
  84. package/lib/layout4/css/header.less +196 -196
  85. package/lib/layout4/css/main.less +154 -154
  86. package/lib/layout4/css/sider.less +37 -37
  87. package/lib/layout4/css/tabs-layout.less +42 -42
  88. package/lib/layout5/css/header.less +35 -35
  89. package/lib/layout5/css/sider.less +18 -18
  90. package/lib/list/calendar/index.less +20 -20
  91. package/lib/list/card-list/index.less +154 -154
  92. package/lib/list/gantt/index.less +8 -8
  93. package/lib/list/vertical-list/index.less +208 -208
  94. package/lib/login/index.css +19 -19
  95. package/lib/login/login.d.ts.map +1 -1
  96. package/lib/login/vertify/index.css +143 -143
  97. package/lib/login3/index.less +136 -136
  98. package/lib/lowcode-components/act-table/index.less +26 -26
  99. package/lib/lowcode-components/base-button/index.less +7 -7
  100. package/lib/lowcode-components/base-map/index.js +6 -6
  101. package/lib/lowcode-components/base-radio/index.less +23 -23
  102. package/lib/lowcode-components/base-tabs/index.less +14 -14
  103. package/lib/lowcode-components/border/border10/index.less +26 -26
  104. package/lib/lowcode-components/border/border11/index.js +46 -46
  105. package/lib/lowcode-components/border/border11/index.less +17 -17
  106. package/lib/lowcode-components/border/border12/index.js +13 -13
  107. package/lib/lowcode-components/border/border12/index.less +13 -13
  108. package/lib/lowcode-components/border/border13/index.js +5 -5
  109. package/lib/lowcode-components/border/border13/index.less +13 -13
  110. package/lib/lowcode-components/border/border2/index.less +17 -17
  111. package/lib/lowcode-components/border/border3/index.less +25 -25
  112. package/lib/lowcode-components/border/border4/index.js +2 -2
  113. package/lib/lowcode-components/border/border4/index.less +72 -72
  114. package/lib/lowcode-components/border/border5/index.js +2 -2
  115. package/lib/lowcode-components/border/border5/index.less +35 -35
  116. package/lib/lowcode-components/border/border6/index.less +17 -17
  117. package/lib/lowcode-components/border/border7/index.less +26 -26
  118. package/lib/lowcode-components/border/border8/index.less +13 -13
  119. package/lib/lowcode-components/border/border9/index.js +14 -14
  120. package/lib/lowcode-components/border/border9/index.less +13 -13
  121. package/lib/lowcode-components/decoration/decoration1/index.less +7 -7
  122. package/lib/lowcode-components/decoration/decoration10/index.js +3 -3
  123. package/lib/lowcode-components/decoration/decoration10/index.less +5 -5
  124. package/lib/lowcode-components/decoration/decoration11/index.less +5 -5
  125. package/lib/lowcode-components/decoration/decoration2/index.less +6 -6
  126. package/lib/lowcode-components/decoration/decoration3/index.less +7 -7
  127. package/lib/lowcode-components/decoration/decoration4/index.less +29 -29
  128. package/lib/lowcode-components/decoration/decoration5/index.less +3 -3
  129. package/lib/lowcode-components/decoration/decoration6/index.less +7 -7
  130. package/lib/lowcode-components/decoration/decoration7/index.less +4 -4
  131. package/lib/lowcode-components/decoration/decoration8/index.less +14 -14
  132. package/lib/lowcode-components/decoration/decoration9/index.less +4 -4
  133. package/lib/lowcode-components/effectScatter-map/index.js +6 -6
  134. package/lib/lowcode-components/effectScatter-map-3d/index.js +6 -6
  135. package/lib/lowcode-components/lowcode-view/index.less +19 -19
  136. package/lib/lowcode-components/search-form/index.less +25 -25
  137. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  138. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  139. package/lib/module/index.less +4 -4
  140. package/lib/module/ltmpl-modal.d.ts.map +1 -1
  141. package/lib/module/ltmpl-table.d.ts.map +1 -1
  142. package/lib/routable/index.less +25 -25
  143. package/lib/table/act-table.d.ts.map +1 -1
  144. package/lib/table/column/index.less +85 -85
  145. package/lib/table/index.css +211 -211
  146. package/lib/table/modal-select-table.d.ts.map +1 -1
  147. package/lib/table/page-chart.d.ts +1 -1
  148. package/lib/table/page-chart.d.ts.map +1 -1
  149. package/lib/table/page-chart.js +3 -0
  150. package/lib/table/page-chart.js.map +1 -1
  151. package/lib/table/page-chart.less +9 -9
  152. package/lib/table/pagination.css +14 -14
  153. package/lib/table/pagination.d.ts.map +1 -1
  154. package/lib/table/relation-table.d.ts.map +1 -1
  155. package/lib/table/selected-rows-card.d.ts.map +1 -1
  156. package/lib/table/stat/restat.d.ts.map +1 -1
  157. package/lib/tree/act-tree.d.ts.map +1 -1
  158. package/lib/tree/block-menu-auth-tree.d.ts.map +1 -1
  159. package/lib/tree/index.css +22 -22
  160. package/lib/tree/tmpl-tree.d.ts.map +1 -1
  161. package/lib/welcome/components/menu-card.less +96 -96
  162. package/lib/welcome/components/page-card.less +49 -49
  163. package/lib/welcome/components/quick-entrance.less +120 -120
  164. package/lib/welcome/components/user-menus.less +192 -192
  165. package/lib/welcome/components/workbench.less +118 -118
  166. package/lib/welcome/index.css +13 -13
  167. package/package.json +224 -224
  168. package/src/aldehyde/controls/2dEditor/2dEditor/index.less +5 -5
  169. package/src/aldehyde/controls/2dEditor/2dEditor/index.tsx +270 -270
  170. package/src/aldehyde/controls/2dEditor/2dView/index.less +8 -8
  171. package/src/aldehyde/controls/2dEditor/2dView/index.tsx +110 -110
  172. package/src/aldehyde/controls/2dEditor/components/card.tsx +256 -256
  173. package/src/aldehyde/controls/2dEditor/components/component.less +83 -83
  174. package/src/aldehyde/controls/2dEditor/components/data.d.ts +32 -32
  175. package/src/aldehyde/controls/2dEditor/components/hotspot.tsx +80 -80
  176. package/src/aldehyde/controls/2dEditor/components/html-box.tsx +101 -101
  177. package/src/aldehyde/controls/2dEditor/components/image.tsx +99 -99
  178. package/src/aldehyde/controls/2dEditor/components/line.tsx +73 -73
  179. package/src/aldehyde/controls/action/index.css +8 -8
  180. package/src/aldehyde/controls/action/index.tsx +406 -406
  181. package/src/aldehyde/controls/action/utils.tsx +306 -306
  182. package/src/aldehyde/controls/auto-complete/index.tsx +82 -82
  183. package/src/aldehyde/controls/cascader/index.tsx +112 -112
  184. package/src/aldehyde/controls/chemstruc/graph.tsx +185 -185
  185. package/src/aldehyde/controls/chemstruc/index.css +28 -28
  186. package/src/aldehyde/controls/code-editor/sql-code-editor.tsx +73 -73
  187. package/src/aldehyde/controls/collapse-card/index.css +8 -8
  188. package/src/aldehyde/controls/collapse-card/index.tsx +109 -109
  189. package/src/aldehyde/controls/color-picker/index.tsx +21 -21
  190. package/src/aldehyde/controls/counting-tag/index.tsx +53 -53
  191. package/src/aldehyde/controls/cquery/cquick-button.tsx +145 -145
  192. package/src/aldehyde/controls/date-picker/index.tsx +199 -199
  193. package/src/aldehyde/controls/direct-file-view/drawer-file-view.tsx +54 -54
  194. package/src/aldehyde/controls/direct-file-view/index.tsx +147 -147
  195. package/src/aldehyde/controls/direct-upload/index.tsx +140 -140
  196. package/src/aldehyde/controls/entity-select/entity-select.tsx +791 -791
  197. package/src/aldehyde/controls/entity-select/index.css +7 -7
  198. package/src/aldehyde/controls/entity-select/lab-tree-select.tsx +154 -154
  199. package/src/aldehyde/controls/entity-select/popover-entity-select.tsx +205 -205
  200. package/src/aldehyde/controls/entry-control.tsx +431 -431
  201. package/src/aldehyde/controls/enum-badge/index.tsx +42 -42
  202. package/src/aldehyde/controls/enum-tag/index.tsx +45 -45
  203. package/src/aldehyde/controls/field-history/index.tsx +81 -81
  204. package/src/aldehyde/controls/file-export/select-code-export.tsx +40 -40
  205. package/src/aldehyde/controls/file-view/drawer-file-view.tsx +117 -117
  206. package/src/aldehyde/controls/file-view/index.less +9 -9
  207. package/src/aldehyde/controls/file-view/index.tsx +148 -148
  208. package/src/aldehyde/controls/file-view/multi-file-view.tsx +39 -39
  209. package/src/aldehyde/controls/file-view/newin-file-view.tsx +40 -40
  210. package/src/aldehyde/controls/html-editor/draft.tsx +136 -136
  211. package/src/aldehyde/controls/html-editor/index.less +67 -67
  212. package/src/aldehyde/controls/icon-selector/app-icon-selector.tsx +68 -68
  213. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.css +147 -147
  214. package/src/aldehyde/controls/icon-selector/icon/aldehyde-menu-icon/iconfont.json +240 -240
  215. package/src/aldehyde/controls/icon-selector/pc-icon-selector.tsx +68 -68
  216. package/src/aldehyde/controls/input-number/index.tsx +148 -148
  217. package/src/aldehyde/controls/input-range/index.tsx +59 -59
  218. package/src/aldehyde/controls/password-setter/index.css +2 -2
  219. package/src/aldehyde/controls/password-setter/index.js +88 -88
  220. package/src/aldehyde/controls/progress/index.tsx +74 -74
  221. package/src/aldehyde/controls/qr-code/index.less +28 -28
  222. package/src/aldehyde/controls/qr-code/index.tsx +40 -40
  223. package/src/aldehyde/controls/relation-existion/index.css +3 -3
  224. package/src/aldehyde/controls/relation-existion/index.tsx +144 -144
  225. package/src/aldehyde/controls/rfield/index.css +4 -4
  226. package/src/aldehyde/controls/rfield/index.tsx +225 -225
  227. package/src/aldehyde/controls/select/index.tsx +226 -226
  228. package/src/aldehyde/controls/signature/index.tsx +226 -226
  229. package/src/aldehyde/controls/single-checkbox/index.tsx +18 -18
  230. package/src/aldehyde/controls/steps/index.tsx +59 -59
  231. package/src/aldehyde/controls/text/ellipsis-text.tsx +98 -98
  232. package/src/aldehyde/controls/text/index.less +7 -7
  233. package/src/aldehyde/controls/tree-select/navigation-tree.tsx +122 -122
  234. package/src/aldehyde/controls/tree-select/tree-entity-select.tsx +121 -121
  235. package/src/aldehyde/controls/upload/index.tsx +128 -128
  236. package/src/aldehyde/controls/upload/mult-file-upload.tsx +240 -240
  237. package/src/aldehyde/controls/upload-read-excel/index.tsx +43 -43
  238. package/src/aldehyde/controls/view-control.tsx +289 -289
  239. package/src/aldehyde/custom-page/custom-detail-modal-page.tsx +69 -69
  240. package/src/aldehyde/custom-page/custom-page-router.tsx +64 -64
  241. package/src/aldehyde/custom-page/def-custom-page.tsx +17 -17
  242. package/src/aldehyde/custom-page/dtmpl-custom-edit-modal-page.tsx +88 -88
  243. package/src/aldehyde/detail/button/bottom-submit-button-bar.tsx +91 -91
  244. package/src/aldehyde/detail/button/cquery-button-bar.tsx +144 -144
  245. package/src/aldehyde/detail/button/edit-button.tsx +61 -61
  246. package/src/aldehyde/detail/button/fix-right-submit-button-bar.tsx +186 -186
  247. package/src/aldehyde/detail/button/index.css +42 -42
  248. package/src/aldehyde/detail/button/inline-edit-button.tsx +40 -40
  249. package/src/aldehyde/detail/button/submit-button-bar.tsx +57 -57
  250. package/src/aldehyde/detail/button/view-button.tsx +64 -64
  251. package/src/aldehyde/detail/dtmpl.css +72 -72
  252. package/src/aldehyde/detail/edit/dtmpl-edit.tsx +279 -279
  253. package/src/aldehyde/detail/edit/fields-edit-card.tsx +145 -145
  254. package/src/aldehyde/detail/edit/modal-row-edit.tsx +95 -95
  255. package/src/aldehyde/detail/edit/popover-edit-card.tsx +167 -167
  256. package/src/aldehyde/detail/edit/popover-editor.tsx +70 -70
  257. package/src/aldehyde/detail/edit/post-result/index.tsx +86 -86
  258. package/src/aldehyde/detail/rightbar/index.css +34 -34
  259. package/src/aldehyde/detail/rightbar/index.tsx +92 -92
  260. package/src/aldehyde/detail/tooltipbar/index.tsx +32 -32
  261. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +288 -288
  262. package/src/aldehyde/detail/view/dtmpl-view.tsx +334 -334
  263. package/src/aldehyde/detail/view/field-view-group.tsx +88 -88
  264. package/src/aldehyde/detail/view/modal-dtmpl-view.tsx +73 -73
  265. package/src/aldehyde/detail/view/snapshot-timeline.tsx +231 -231
  266. package/src/aldehyde/detail/view/tab-act-dtmpl-view.tsx +304 -304
  267. package/src/aldehyde/detail/view/view-compare-panel.tsx +57 -57
  268. package/src/aldehyde/draw-canvas-edit/components/render/components/index.less +60 -60
  269. package/src/aldehyde/draw-canvas-edit/components/render/components/index.ts +3 -3
  270. package/src/aldehyde/draw-canvas-edit/components/render/components/workstation-component.tsx +220 -220
  271. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +177 -177
  272. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +330 -330
  273. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  274. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1415
  275. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -274
  276. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -71
  277. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -166
  278. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +542 -542
  279. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +77 -77
  280. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +410 -410
  281. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +817 -817
  282. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +457 -457
  283. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +269 -269
  284. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +244 -244
  285. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +588 -588
  286. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +10 -10
  287. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +191 -191
  288. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +140 -140
  289. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +298 -298
  290. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +305 -305
  291. package/src/aldehyde/draw-canvas-edit/constant.ts +5 -5
  292. package/src/aldehyde/draw-canvas-edit/index.less +48 -48
  293. package/src/aldehyde/draw-canvas-edit/index.tsx +213 -213
  294. package/src/aldehyde/draw-canvas-view/index.less +66 -66
  295. package/src/aldehyde/draw-canvas-view/index.tsx +49 -49
  296. package/src/aldehyde/draw-canvas-view/view.tsx +237 -237
  297. package/src/aldehyde/export/export-frame.css +2 -2
  298. package/src/aldehyde/export/export-frame.tsx +301 -301
  299. package/src/aldehyde/export/select-code-export-frame.tsx +212 -212
  300. package/src/aldehyde/form/criteria-form.tsx +604 -604
  301. package/src/aldehyde/form/dtmpl-form.css +3 -3
  302. package/src/aldehyde/form/dtmpl-form.tsx +571 -571
  303. package/src/aldehyde/form/field-group-form.tsx +103 -103
  304. package/src/aldehyde/form/fields-form.tsx +45 -45
  305. package/src/aldehyde/form/form-Item-group.tsx +246 -246
  306. package/src/aldehyde/form/index.css +12 -12
  307. package/src/aldehyde/hooks/use-match-route/index.tsx +62 -62
  308. package/src/aldehyde/hooks/use-tabs/index.tsx +139 -139
  309. package/src/aldehyde/hooks/useVarCssColor.ts +6 -6
  310. package/src/aldehyde/icon/aliIcon.tsx +9 -9
  311. package/src/aldehyde/icon/index.tsx +28 -28
  312. package/src/aldehyde/import/excel-import.tsx +450 -450
  313. package/src/aldehyde/import/index.css +53 -53
  314. package/src/aldehyde/import/template.css +50 -50
  315. package/src/aldehyde/index.tsx +220 -220
  316. package/src/aldehyde/layout/MainPage.tsx +334 -334
  317. package/src/aldehyde/layout/common.css +64 -64
  318. package/src/aldehyde/layout/coverstyle.css +51 -51
  319. package/src/aldehyde/layout/footer/index.css +5 -5
  320. package/src/aldehyde/layout/footer/index.js +17 -17
  321. package/src/aldehyde/layout/header/index.css +122 -122
  322. package/src/aldehyde/layout/header/index.tsx +152 -152
  323. package/src/aldehyde/layout/menu/block.css +7 -7
  324. package/src/aldehyde/layout/menu/block.tsx +174 -174
  325. package/src/aldehyde/layout/menu/l2menu-message-bar.tsx +160 -160
  326. package/src/aldehyde/layout/menu/l2menu-quick-bar.tsx +175 -175
  327. package/src/aldehyde/layout/menu/menu-2layers.tsx +117 -117
  328. package/src/aldehyde/layout/menu/menu-render.tsx +168 -168
  329. package/src/aldehyde/layout/menu/message-bar.less +73 -73
  330. package/src/aldehyde/layout/menu/reset-password.tsx +255 -255
  331. package/src/aldehyde/layout/menu/user-bar.tsx +259 -259
  332. package/src/aldehyde/layout/menu/userinfo-bar.tsx +69 -69
  333. package/src/aldehyde/layout/sidebar/index.css +57 -57
  334. package/src/aldehyde/layout/sidebar/index.tsx +84 -84
  335. package/src/aldehyde/layout2/components/icon-font.tsx +7 -7
  336. package/src/aldehyde/layout2/components/screenfull-button.tsx +21 -21
  337. package/src/aldehyde/layout2/components/search-menu.tsx +85 -85
  338. package/src/aldehyde/layout2/components/system-messages.tsx +75 -75
  339. package/src/aldehyde/layout2/components/theme-button.tsx +65 -65
  340. package/src/aldehyde/layout2/components/user-button.tsx +258 -258
  341. package/src/aldehyde/layout2/components/user-notification.tsx +74 -74
  342. package/src/aldehyde/layout2/css/header.css +41 -41
  343. package/src/aldehyde/layout2/css/sider.less +17 -17
  344. package/src/aldehyde/layout2/css/tabs-layout.less +18 -18
  345. package/src/aldehyde/layout2/header.tsx +278 -278
  346. package/src/aldehyde/layout2/layout-context.tsx +95 -95
  347. package/src/aldehyde/layout2/main.tsx +30 -30
  348. package/src/aldehyde/layout2/page.tsx +315 -315
  349. package/src/aldehyde/layout2/sider.tsx +230 -230
  350. package/src/aldehyde/layout2/tabs/tabs-context.tsx +37 -37
  351. package/src/aldehyde/layout2/tabs/tabs-layout.tsx +146 -146
  352. package/src/aldehyde/layout2/type/layout-type.ts +15 -15
  353. package/src/aldehyde/layout2/util/menu-util.tsx +125 -125
  354. package/src/aldehyde/layout3/components/tabs-layout.tsx +110 -110
  355. package/src/aldehyde/layout3/components/time.tsx +25 -25
  356. package/src/aldehyde/layout3/css/header.less +195 -195
  357. package/src/aldehyde/layout3/css/main.less +161 -161
  358. package/src/aldehyde/layout3/css/sider.less +32 -32
  359. package/src/aldehyde/layout3/css/tabs-layout.less +38 -38
  360. package/src/aldehyde/layout3/header.tsx +187 -187
  361. package/src/aldehyde/layout3/main.tsx +29 -29
  362. package/src/aldehyde/layout3/page.tsx +110 -110
  363. package/src/aldehyde/layout3/sider.tsx +198 -198
  364. package/src/aldehyde/layout4/components/tabs-layout.tsx +110 -110
  365. package/src/aldehyde/layout4/css/header.less +196 -196
  366. package/src/aldehyde/layout4/css/main.less +154 -154
  367. package/src/aldehyde/layout4/css/sider.less +37 -37
  368. package/src/aldehyde/layout4/css/tabs-layout.less +42 -42
  369. package/src/aldehyde/layout4/header.tsx +190 -190
  370. package/src/aldehyde/layout4/main.tsx +29 -29
  371. package/src/aldehyde/layout4/page.tsx +125 -125
  372. package/src/aldehyde/layout4/sider.tsx +201 -201
  373. package/src/aldehyde/layout5/css/header.less +35 -35
  374. package/src/aldehyde/layout5/css/sider.less +18 -18
  375. package/src/aldehyde/layout5/header.tsx +204 -204
  376. package/src/aldehyde/layout5/page.tsx +107 -107
  377. package/src/aldehyde/layout5/sider.tsx +235 -235
  378. package/src/aldehyde/list/calendar/index.less +20 -20
  379. package/src/aldehyde/list/calendar/index.tsx +157 -157
  380. package/src/aldehyde/list/card-list/card-list-item.tsx +112 -112
  381. package/src/aldehyde/list/card-list/index.less +154 -154
  382. package/src/aldehyde/list/card-list/index.tsx +83 -83
  383. package/src/aldehyde/list/gantt/index.less +8 -8
  384. package/src/aldehyde/list/gantt/index.tsx +508 -508
  385. package/src/aldehyde/list/vertical-list/index.less +208 -208
  386. package/src/aldehyde/list/vertical-list/index.tsx +55 -55
  387. package/src/aldehyde/list/vertical-list/item.tsx +136 -136
  388. package/src/aldehyde/locale/LocaleButton.tsx +48 -48
  389. package/src/aldehyde/locale/LocaleProvider.tsx +265 -265
  390. package/src/aldehyde/locale/langMp.ts +45 -45
  391. package/src/aldehyde/locale/translate.ts +80 -80
  392. package/src/aldehyde/locale/useLocale.ts +72 -72
  393. package/src/aldehyde/login/context-setter.tsx +130 -130
  394. package/src/aldehyde/login/index.css +19 -19
  395. package/src/aldehyde/login/login.tsx +255 -255
  396. package/src/aldehyde/login/router-login.tsx +107 -107
  397. package/src/aldehyde/login/vertify/index.css +143 -143
  398. package/src/aldehyde/login/vertify/index.tsx +360 -360
  399. package/src/aldehyde/login/vertify/tool.ts +13 -13
  400. package/src/aldehyde/login2/login-page.tsx +92 -92
  401. package/src/aldehyde/login2/login.tsx +227 -227
  402. package/src/aldehyde/login3/index.less +136 -136
  403. package/src/aldehyde/login3/login-page.tsx +71 -71
  404. package/src/aldehyde/lowcode-components/act-table/index.less +26 -26
  405. package/src/aldehyde/lowcode-components/act-table/index.tsx +139 -139
  406. package/src/aldehyde/lowcode-components/assets/lowcode-constant.tsx +12 -12
  407. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +272 -272
  408. package/src/aldehyde/lowcode-components/base-button/index.less +7 -7
  409. package/src/aldehyde/lowcode-components/base-button/index.tsx +197 -197
  410. package/src/aldehyde/lowcode-components/base-image/index.tsx +220 -220
  411. package/src/aldehyde/lowcode-components/base-map/index.tsx +292 -292
  412. package/src/aldehyde/lowcode-components/base-radio/index.less +23 -23
  413. package/src/aldehyde/lowcode-components/base-radio/index.tsx +157 -157
  414. package/src/aldehyde/lowcode-components/base-table/index.tsx +268 -268
  415. package/src/aldehyde/lowcode-components/base-tabs/index.less +14 -14
  416. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +183 -183
  417. package/src/aldehyde/lowcode-components/base-text/index.tsx +58 -58
  418. package/src/aldehyde/lowcode-components/border/border1/index.tsx +70 -70
  419. package/src/aldehyde/lowcode-components/border/border10/index.less +26 -26
  420. package/src/aldehyde/lowcode-components/border/border10/index.tsx +45 -45
  421. package/src/aldehyde/lowcode-components/border/border11/index.less +17 -17
  422. package/src/aldehyde/lowcode-components/border/border11/index.tsx +232 -232
  423. package/src/aldehyde/lowcode-components/border/border12/index.less +13 -13
  424. package/src/aldehyde/lowcode-components/border/border12/index.tsx +115 -115
  425. package/src/aldehyde/lowcode-components/border/border13/index.less +13 -13
  426. package/src/aldehyde/lowcode-components/border/border13/index.tsx +69 -69
  427. package/src/aldehyde/lowcode-components/border/border2/index.less +17 -17
  428. package/src/aldehyde/lowcode-components/border/border2/index.tsx +51 -51
  429. package/src/aldehyde/lowcode-components/border/border3/index.less +25 -25
  430. package/src/aldehyde/lowcode-components/border/border3/index.tsx +61 -61
  431. package/src/aldehyde/lowcode-components/border/border4/index.less +72 -72
  432. package/src/aldehyde/lowcode-components/border/border4/index.tsx +79 -79
  433. package/src/aldehyde/lowcode-components/border/border5/index.less +35 -35
  434. package/src/aldehyde/lowcode-components/border/border5/index.tsx +75 -75
  435. package/src/aldehyde/lowcode-components/border/border6/index.less +17 -17
  436. package/src/aldehyde/lowcode-components/border/border6/index.tsx +60 -60
  437. package/src/aldehyde/lowcode-components/border/border7/index.less +26 -26
  438. package/src/aldehyde/lowcode-components/border/border7/index.tsx +75 -75
  439. package/src/aldehyde/lowcode-components/border/border8/index.less +13 -13
  440. package/src/aldehyde/lowcode-components/border/border8/index.tsx +84 -84
  441. package/src/aldehyde/lowcode-components/border/border9/index.less +13 -13
  442. package/src/aldehyde/lowcode-components/border/border9/index.tsx +154 -154
  443. package/src/aldehyde/lowcode-components/capsule-bar-chart/index.tsx +290 -290
  444. package/src/aldehyde/lowcode-components/carousel/index.tsx +218 -218
  445. package/src/aldehyde/lowcode-components/circular-progress-chart/index.tsx +263 -263
  446. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +442 -442
  447. package/src/aldehyde/lowcode-components/column-chart/index.tsx +297 -297
  448. package/src/aldehyde/lowcode-components/data-number/index.tsx +219 -219
  449. package/src/aldehyde/lowcode-components/data.d.ts +19 -19
  450. package/src/aldehyde/lowcode-components/decoration/decoration1/index.less +7 -7
  451. package/src/aldehyde/lowcode-components/decoration/decoration1/index.tsx +153 -153
  452. package/src/aldehyde/lowcode-components/decoration/decoration10/index.less +5 -5
  453. package/src/aldehyde/lowcode-components/decoration/decoration10/index.tsx +89 -89
  454. package/src/aldehyde/lowcode-components/decoration/decoration11/index.less +5 -5
  455. package/src/aldehyde/lowcode-components/decoration/decoration11/index.tsx +133 -133
  456. package/src/aldehyde/lowcode-components/decoration/decoration2/index.less +6 -6
  457. package/src/aldehyde/lowcode-components/decoration/decoration2/index.tsx +61 -61
  458. package/src/aldehyde/lowcode-components/decoration/decoration3/index.less +7 -7
  459. package/src/aldehyde/lowcode-components/decoration/decoration3/index.tsx +87 -87
  460. package/src/aldehyde/lowcode-components/decoration/decoration4/index.less +29 -29
  461. package/src/aldehyde/lowcode-components/decoration/decoration4/index.tsx +53 -53
  462. package/src/aldehyde/lowcode-components/decoration/decoration5/index.less +3 -3
  463. package/src/aldehyde/lowcode-components/decoration/decoration5/index.tsx +116 -116
  464. package/src/aldehyde/lowcode-components/decoration/decoration6/index.less +7 -7
  465. package/src/aldehyde/lowcode-components/decoration/decoration6/index.tsx +121 -121
  466. package/src/aldehyde/lowcode-components/decoration/decoration7/index.less +4 -4
  467. package/src/aldehyde/lowcode-components/decoration/decoration7/index.tsx +70 -70
  468. package/src/aldehyde/lowcode-components/decoration/decoration8/index.less +14 -14
  469. package/src/aldehyde/lowcode-components/decoration/decoration8/index.tsx +122 -122
  470. package/src/aldehyde/lowcode-components/decoration/decoration9/index.less +4 -4
  471. package/src/aldehyde/lowcode-components/decoration/decoration9/index.tsx +196 -196
  472. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +315 -315
  473. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +419 -419
  474. package/src/aldehyde/lowcode-components/gauge-chart/index.tsx +254 -254
  475. package/src/aldehyde/lowcode-components/index.ts +130 -130
  476. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +304 -304
  477. package/src/aldehyde/lowcode-components/line-chart/index.tsx +294 -294
  478. package/src/aldehyde/lowcode-components/liquid-chart/index.tsx +250 -250
  479. package/src/aldehyde/lowcode-components/lowcode-view/component/assets.ts +478 -478
  480. package/src/aldehyde/lowcode-components/lowcode-view/component/component-controller.ts +153 -153
  481. package/src/aldehyde/lowcode-components/lowcode-view/component/component-definition.ts +23 -23
  482. package/src/aldehyde/lowcode-components/lowcode-view/component/loading.tsx +20 -20
  483. package/src/aldehyde/lowcode-components/lowcode-view/component/util.ts +27 -27
  484. package/src/aldehyde/lowcode-components/lowcode-view/index.less +19 -19
  485. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +277 -277
  486. package/src/aldehyde/lowcode-components/lowcode-view/interface.ts +189 -189
  487. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +353 -353
  488. package/src/aldehyde/lowcode-components/progress-chart/index.tsx +295 -295
  489. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +322 -322
  490. package/src/aldehyde/lowcode-components/search-form/index.less +25 -25
  491. package/src/aldehyde/lowcode-components/search-form/index.tsx +121 -121
  492. package/src/aldehyde/lowcode-components/stroke-animation/index.tsx +219 -219
  493. package/src/aldehyde/module/block-menu-tree-drawer.tsx +118 -118
  494. package/src/aldehyde/module/criteria-page.tsx1 +175 -175
  495. package/src/aldehyde/module/draggable-modal.tsx +66 -66
  496. package/src/aldehyde/module/dtmpl-edit-card.tsx +477 -477
  497. package/src/aldehyde/module/dtmpl-edit-drawer.tsx +23 -23
  498. package/src/aldehyde/module/dtmpl-edit-modal.tsx +25 -25
  499. package/src/aldehyde/module/dtmpl-edit-page.tsx +597 -597
  500. package/src/aldehyde/module/dtmpl-editor.tsx +165 -165
  501. package/src/aldehyde/module/dtmpl-view-card.tsx +64 -64
  502. package/src/aldehyde/module/dtmpl-view-drawer.tsx +71 -71
  503. package/src/aldehyde/module/dtmpl-view-modal.tsx +56 -56
  504. package/src/aldehyde/module/embed-dtmpl-edit-page.tsx +137 -137
  505. package/src/aldehyde/module/index.less +4 -4
  506. package/src/aldehyde/module/ltmpl-drawer.tsx +60 -60
  507. package/src/aldehyde/module/ltmpl-modal.tsx +63 -63
  508. package/src/aldehyde/module/ltmpl-table.tsx +379 -379
  509. package/src/aldehyde/module/ttmpl-tree.tsx +47 -47
  510. package/src/aldehyde/routable/dtmpl-route.tsx +173 -173
  511. package/src/aldehyde/routable/import-route.tsx +35 -35
  512. package/src/aldehyde/routable/index.less +25 -25
  513. package/src/aldehyde/routable/ltmpl-route.tsx +539 -539
  514. package/src/aldehyde/routable/splitview-ltmpl-route.tsx +377 -377
  515. package/src/aldehyde/routable/ttmpl-route.tsx +93 -93
  516. package/src/aldehyde/routable/withroute.tsx +36 -36
  517. package/src/aldehyde/sso-Login/index.tsx +73 -73
  518. package/src/aldehyde/sso-Login/service/index.js +16 -16
  519. package/src/aldehyde/sso-Login/service/login.js +75 -75
  520. package/src/aldehyde/table/act-table.tsx +1844 -1844
  521. package/src/aldehyde/table/column/column-builder.tsx +876 -876
  522. package/src/aldehyde/table/column/column-selector.tsx +130 -130
  523. package/src/aldehyde/table/column/index.less +85 -85
  524. package/src/aldehyde/table/column/summary-builder.tsx +712 -712
  525. package/src/aldehyde/table/column/theme-color-getter.tsx +25 -25
  526. package/src/aldehyde/table/control-table-x-axis-wrapper.tsx +80 -80
  527. package/src/aldehyde/table/index.css +211 -211
  528. package/src/aldehyde/table/l2-act-table.tsx +91 -91
  529. package/src/aldehyde/table/modal-select-table.tsx +308 -308
  530. package/src/aldehyde/table/page-chart.less +9 -9
  531. package/src/aldehyde/table/page-chart.tsx +196 -192
  532. package/src/aldehyde/table/page-config-button.tsx +203 -203
  533. package/src/aldehyde/table/pagination.css +14 -14
  534. package/src/aldehyde/table/pagination.tsx +81 -81
  535. package/src/aldehyde/table/query-table.tsx +668 -668
  536. package/src/aldehyde/table/relation-table.tsx +1078 -1078
  537. package/src/aldehyde/table/report-table.tsx +125 -125
  538. package/src/aldehyde/table/resizable-table.tsx +97 -97
  539. package/src/aldehyde/table/row-table.tsx +22 -22
  540. package/src/aldehyde/table/select-table.tsx +559 -559
  541. package/src/aldehyde/table/selected-rows-card.tsx +78 -78
  542. package/src/aldehyde/table/stat/restat.tsx +122 -122
  543. package/src/aldehyde/table/table-util.tsx +25 -25
  544. package/src/aldehyde/tmpl/control-type-supportor.tsx +154 -154
  545. package/src/aldehyde/tmpl/hc-data-source.tsx +574 -574
  546. package/src/aldehyde/tmpl/hcservice-v3.tsx +1590 -1590
  547. package/src/aldehyde/tmpl/interface.tsx +936 -936
  548. package/src/aldehyde/tmpl/model-struc-v3.tsx +111 -111
  549. package/src/aldehyde/tmpl/superagent.js +146 -146
  550. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +585 -585
  551. package/src/aldehyde/tmpl/web-socket.ts +366 -366
  552. package/src/aldehyde/tree/act-tree.tsx +217 -217
  553. package/src/aldehyde/tree/block-menu-auth-tree.tsx +189 -189
  554. package/src/aldehyde/tree/index.css +22 -22
  555. package/src/aldehyde/tree/navigation-tree.tsx +39 -39
  556. package/src/aldehyde/tree/tmpl-tree.tsx +751 -751
  557. package/src/aldehyde/tree/tree-node.tsx +73 -73
  558. package/src/aldehyde/tree/tree-utils.tsx +317 -317
  559. package/src/aldehyde/units/EncryptUtils.js +37 -37
  560. package/src/aldehyde/units/image.d.ts +7 -7
  561. package/src/aldehyde/units/index.tsx +1367 -1367
  562. package/src/aldehyde/units/storage.js +2 -2
  563. package/src/aldehyde/utils/dsu.ts +27 -27
  564. package/src/aldehyde/welcome/HCWelcome.js +404 -404
  565. package/src/aldehyde/welcome/HCWelcome1.js +259 -259
  566. package/src/aldehyde/welcome/components/menu-card.less +96 -96
  567. package/src/aldehyde/welcome/components/menu-card.tsx +70 -70
  568. package/src/aldehyde/welcome/components/page-card.less +49 -49
  569. package/src/aldehyde/welcome/components/page-card.tsx +97 -97
  570. package/src/aldehyde/welcome/components/quick-entrance.less +120 -120
  571. package/src/aldehyde/welcome/components/quick-entrance.tsx +80 -80
  572. package/src/aldehyde/welcome/components/user-menus.less +192 -192
  573. package/src/aldehyde/welcome/components/user-menus.tsx +279 -279
  574. package/src/aldehyde/welcome/components/workbench.less +118 -118
  575. package/src/aldehyde/welcome/components/workbench.tsx +146 -146
  576. 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
  }