@antv/infographic 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/README.md +26 -2
  2. package/README.zh-CN.md +26 -3
  3. package/dist/infographic.min.js +484 -79
  4. package/dist/infographic.min.js.map +1 -1
  5. package/esm/constants/components.d.ts +1 -0
  6. package/esm/constants/components.js +1 -0
  7. package/esm/constants/element.d.ts +17 -6
  8. package/esm/constants/index.d.ts +2 -0
  9. package/esm/constants/index.js +2 -0
  10. package/esm/constants/shape.d.ts +16 -0
  11. package/esm/designs/components/Btn.js +2 -2
  12. package/esm/designs/components/BtnsGroup.js +1 -1
  13. package/esm/designs/components/Illus.js +2 -2
  14. package/esm/designs/components/ItemDesc.js +1 -2
  15. package/esm/designs/components/ItemIcon.js +1 -1
  16. package/esm/designs/components/ItemLabel.js +1 -2
  17. package/esm/designs/components/ItemValue.js +1 -2
  18. package/esm/designs/components/ItemsGroup.js +1 -1
  19. package/esm/designs/components/Title.js +2 -5
  20. package/esm/designs/items/CandyCardLite.js +1 -1
  21. package/esm/designs/items/CircularProgress.js +2 -1
  22. package/esm/designs/items/HorizontalIconArrow.js +1 -2
  23. package/esm/designs/items/HorizontalIconLine.js +1 -1
  24. package/esm/designs/items/IconBadge.js +1 -1
  25. package/esm/designs/items/LinedText.d.ts +12 -0
  26. package/esm/designs/items/LinedText.js +57 -0
  27. package/esm/designs/items/PlainText.d.ts +1 -0
  28. package/esm/designs/items/PlainText.js +16 -3
  29. package/esm/designs/items/QuarterCircular.js +1 -31
  30. package/esm/designs/items/index.d.ts +1 -0
  31. package/esm/designs/items/index.js +1 -0
  32. package/esm/designs/layouts/Align.js +31 -45
  33. package/esm/designs/layouts/Flex.js +33 -29
  34. package/esm/designs/structures/chart-bar.d.ts +15 -0
  35. package/esm/designs/structures/chart-bar.js +99 -0
  36. package/esm/designs/structures/chart-line.d.ts +12 -0
  37. package/esm/designs/structures/chart-line.js +164 -0
  38. package/esm/designs/structures/chart-pie.d.ts +9 -0
  39. package/esm/designs/structures/chart-pie.js +127 -0
  40. package/esm/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.js +1 -1
  41. package/esm/designs/structures/hierarchy-mindmap.d.ts +24 -0
  42. package/esm/designs/structures/hierarchy-mindmap.js +199 -0
  43. package/esm/designs/structures/index.d.ts +4 -0
  44. package/esm/designs/structures/index.js +4 -0
  45. package/esm/designs/structures/list-sector.js +1 -1
  46. package/esm/designs/structures/sequence-circular.js +1 -1
  47. package/esm/designs/structures/sequence-cylinders-3d.js +4 -4
  48. package/esm/designs/structures/sequence-roadmap-vertical.js +1 -1
  49. package/esm/designs/structures/sequence-zigzag-pucks-3d.js +5 -5
  50. package/esm/editor/commands/Batch.d.ts +11 -0
  51. package/esm/editor/commands/Batch.js +21 -0
  52. package/esm/editor/commands/UpdateElement.d.ts +16 -0
  53. package/esm/editor/commands/UpdateElement.js +83 -0
  54. package/esm/editor/commands/UpdateOptions.d.ts +14 -0
  55. package/esm/editor/commands/UpdateOptions.js +25 -0
  56. package/esm/editor/commands/UpdateText.d.ts +16 -0
  57. package/esm/editor/commands/UpdateText.js +40 -0
  58. package/esm/editor/commands/index.d.ts +4 -0
  59. package/esm/editor/commands/index.js +4 -0
  60. package/esm/editor/editor.d.ts +16 -0
  61. package/esm/editor/editor.js +50 -0
  62. package/esm/editor/index.d.ts +4 -0
  63. package/esm/editor/index.js +3 -0
  64. package/esm/editor/interactions/base.d.ts +12 -0
  65. package/esm/editor/interactions/base.js +5 -0
  66. package/esm/editor/interactions/brush-select.d.ts +23 -0
  67. package/esm/editor/interactions/brush-select.js +167 -0
  68. package/esm/editor/interactions/click-select.d.ts +12 -0
  69. package/esm/editor/interactions/click-select.js +67 -0
  70. package/esm/editor/interactions/dblclick-edit-text.d.ts +10 -0
  71. package/esm/editor/interactions/dblclick-edit-text.js +204 -0
  72. package/esm/editor/interactions/drag-element.d.ts +41 -0
  73. package/esm/editor/interactions/drag-element.js +391 -0
  74. package/esm/editor/interactions/hotkey-history.d.ts +10 -0
  75. package/esm/editor/interactions/hotkey-history.js +27 -0
  76. package/esm/editor/interactions/index.d.ts +8 -0
  77. package/esm/editor/interactions/index.js +8 -0
  78. package/esm/editor/interactions/select-highlight.d.ts +16 -0
  79. package/esm/editor/interactions/select-highlight.js +99 -0
  80. package/esm/editor/interactions/zoom-wheel.d.ts +8 -0
  81. package/esm/editor/interactions/zoom-wheel.js +46 -0
  82. package/esm/editor/managers/command.d.ts +19 -0
  83. package/esm/editor/managers/command.js +63 -0
  84. package/esm/editor/managers/index.d.ts +4 -0
  85. package/esm/editor/managers/index.js +4 -0
  86. package/esm/editor/managers/interaction.d.ts +33 -0
  87. package/esm/editor/managers/interaction.js +196 -0
  88. package/esm/editor/managers/plugin.d.ts +14 -0
  89. package/esm/editor/managers/plugin.js +45 -0
  90. package/esm/editor/managers/state.d.ts +22 -0
  91. package/esm/editor/managers/state.js +141 -0
  92. package/esm/editor/plugins/base.d.ts +12 -0
  93. package/esm/editor/plugins/base.js +5 -0
  94. package/esm/editor/plugins/edit-bar/components/button.d.ts +12 -0
  95. package/esm/editor/plugins/edit-bar/components/button.js +53 -0
  96. package/esm/editor/plugins/edit-bar/components/color-picker.d.ts +10 -0
  97. package/esm/editor/plugins/edit-bar/components/color-picker.js +351 -0
  98. package/esm/editor/plugins/edit-bar/components/icons.d.ts +26 -0
  99. package/esm/editor/plugins/edit-bar/components/icons.js +30 -0
  100. package/esm/editor/plugins/edit-bar/components/index.d.ts +5 -0
  101. package/esm/editor/plugins/edit-bar/components/index.js +5 -0
  102. package/esm/editor/plugins/edit-bar/components/popover.d.ts +23 -0
  103. package/esm/editor/plugins/edit-bar/components/popover.js +378 -0
  104. package/esm/editor/plugins/edit-bar/components/select.d.ts +22 -0
  105. package/esm/editor/plugins/edit-bar/components/select.js +201 -0
  106. package/esm/editor/plugins/edit-bar/edit-bar.d.ts +32 -0
  107. package/esm/editor/plugins/edit-bar/edit-bar.js +211 -0
  108. package/esm/editor/plugins/edit-bar/edit-items/align-elements.d.ts +2 -0
  109. package/esm/editor/plugins/edit-bar/edit-items/align-elements.js +312 -0
  110. package/esm/editor/plugins/edit-bar/edit-items/font-align.d.ts +3 -0
  111. package/esm/editor/plugins/edit-bar/edit-items/font-align.js +81 -0
  112. package/esm/editor/plugins/edit-bar/edit-items/font-color.d.ts +3 -0
  113. package/esm/editor/plugins/edit-bar/edit-items/font-color.js +77 -0
  114. package/esm/editor/plugins/edit-bar/edit-items/font-family.d.ts +3 -0
  115. package/esm/editor/plugins/edit-bar/edit-items/font-family.js +115 -0
  116. package/esm/editor/plugins/edit-bar/edit-items/font-size.d.ts +3 -0
  117. package/esm/editor/plugins/edit-bar/edit-items/font-size.js +88 -0
  118. package/esm/editor/plugins/edit-bar/edit-items/icon-color.d.ts +3 -0
  119. package/esm/editor/plugins/edit-bar/edit-items/icon-color.js +77 -0
  120. package/esm/editor/plugins/edit-bar/edit-items/index.d.ts +7 -0
  121. package/esm/editor/plugins/edit-bar/edit-items/index.js +6 -0
  122. package/esm/editor/plugins/edit-bar/edit-items/types.d.ts +3 -0
  123. package/esm/editor/plugins/edit-bar/edit-items/types.js +1 -0
  124. package/esm/editor/plugins/edit-bar/index.d.ts +4 -0
  125. package/esm/editor/plugins/edit-bar/index.js +2 -0
  126. package/esm/editor/plugins/edit-bar/utils.d.ts +4 -0
  127. package/esm/editor/plugins/edit-bar/utils.js +14 -0
  128. package/esm/editor/plugins/index.d.ts +3 -0
  129. package/esm/editor/plugins/index.js +3 -0
  130. package/esm/editor/plugins/resize-element.d.ts +45 -0
  131. package/esm/editor/plugins/resize-element.js +393 -0
  132. package/esm/editor/types/command.d.ts +28 -0
  133. package/esm/editor/types/command.js +1 -0
  134. package/esm/editor/types/editor.d.ts +4 -0
  135. package/esm/editor/types/editor.js +1 -0
  136. package/esm/editor/types/index.d.ts +7 -0
  137. package/esm/editor/types/index.js +1 -0
  138. package/esm/editor/types/interaction.d.ts +44 -0
  139. package/esm/editor/types/interaction.js +1 -0
  140. package/esm/editor/types/plugin.d.ts +30 -0
  141. package/esm/editor/types/plugin.js +1 -0
  142. package/esm/editor/types/selection.d.ts +2 -0
  143. package/esm/editor/types/selection.js +1 -0
  144. package/esm/editor/types/shape.d.ts +16 -0
  145. package/esm/editor/types/shape.js +1 -0
  146. package/esm/editor/types/state.d.ts +57 -0
  147. package/esm/editor/types/state.js +1 -0
  148. package/esm/editor/utils/click-handler.d.ts +28 -0
  149. package/esm/editor/utils/click-handler.js +97 -0
  150. package/esm/editor/utils/coordinate.d.ts +6 -0
  151. package/esm/editor/utils/coordinate.js +31 -0
  152. package/esm/editor/utils/data.d.ts +10 -0
  153. package/esm/editor/utils/data.js +18 -0
  154. package/esm/editor/utils/element.d.ts +2 -0
  155. package/esm/editor/utils/element.js +9 -0
  156. package/esm/editor/utils/event.d.ts +3 -0
  157. package/esm/editor/utils/event.js +63 -0
  158. package/esm/editor/utils/extension.d.ts +13 -0
  159. package/esm/editor/utils/extension.js +39 -0
  160. package/esm/editor/utils/hotkey.d.ts +20 -0
  161. package/esm/editor/utils/hotkey.js +109 -0
  162. package/esm/editor/utils/index.d.ts +7 -0
  163. package/esm/editor/utils/index.js +7 -0
  164. package/esm/exporter/svg.js +7 -5
  165. package/esm/index.d.ts +5 -2
  166. package/esm/index.js +2 -0
  167. package/esm/jsx/components/Polygon.js +2 -1
  168. package/esm/jsx/components/Text.js +66 -68
  169. package/esm/options/types.d.ts +15 -2
  170. package/esm/renderer/composites/background.js +2 -2
  171. package/esm/renderer/composites/button.js +4 -3
  172. package/esm/renderer/composites/icon.d.ts +1 -1
  173. package/esm/renderer/composites/icon.js +2 -0
  174. package/esm/renderer/composites/text.js +2 -1
  175. package/esm/renderer/renderer.js +3 -2
  176. package/esm/renderer/stylize/rough.js +3 -7
  177. package/esm/renderer/types/index.d.ts +0 -1
  178. package/esm/resource/utils/index.d.ts +0 -1
  179. package/esm/resource/utils/index.js +0 -1
  180. package/esm/resource/utils/ref.js +1 -1
  181. package/esm/runtime/Infographic.d.ts +8 -2
  182. package/esm/runtime/Infographic.js +31 -2
  183. package/esm/runtime/options.d.ts +2 -0
  184. package/esm/runtime/options.js +24 -0
  185. package/esm/runtime/utils.d.ts +2 -0
  186. package/esm/runtime/utils.js +18 -0
  187. package/esm/templates/built-in.js +112 -1
  188. package/esm/templates/hierarchy-mindmap.d.ts +2 -0
  189. package/esm/templates/hierarchy-mindmap.js +61 -0
  190. package/esm/types/attrs.d.ts +15 -13
  191. package/esm/types/data.d.ts +2 -0
  192. package/esm/types/element.d.ts +1 -1
  193. package/esm/types/event.d.ts +6 -0
  194. package/esm/types/event.js +1 -0
  195. package/esm/types/index.d.ts +2 -0
  196. package/esm/{renderer/types → types}/text.d.ts +0 -1
  197. package/esm/types/text.js +1 -0
  198. package/esm/utils/attrs.d.ts +1 -0
  199. package/esm/utils/attrs.js +9 -0
  200. package/esm/utils/element.d.ts +4 -0
  201. package/esm/utils/element.js +13 -0
  202. package/esm/utils/icon.d.ts +5 -3
  203. package/esm/utils/icon.js +38 -19
  204. package/esm/utils/index.d.ts +5 -0
  205. package/esm/utils/index.js +5 -0
  206. package/esm/utils/measure-text.d.ts +5 -0
  207. package/esm/utils/measure-text.js +22 -0
  208. package/esm/utils/recognizer.d.ts +15 -0
  209. package/esm/utils/recognizer.js +61 -1
  210. package/esm/utils/style.d.ts +1 -0
  211. package/esm/utils/style.js +8 -0
  212. package/esm/utils/text.d.ts +7 -0
  213. package/esm/utils/text.js +110 -35
  214. package/lib/constants/components.d.ts +1 -0
  215. package/lib/constants/components.js +4 -0
  216. package/lib/constants/element.d.ts +17 -6
  217. package/lib/constants/index.d.ts +2 -0
  218. package/lib/constants/index.js +2 -0
  219. package/lib/constants/shape.d.ts +16 -0
  220. package/lib/designs/components/Btn.js +2 -2
  221. package/lib/designs/components/BtnsGroup.js +1 -1
  222. package/lib/designs/components/Illus.js +2 -2
  223. package/lib/designs/components/ItemDesc.js +1 -2
  224. package/lib/designs/components/ItemIcon.js +1 -1
  225. package/lib/designs/components/ItemLabel.js +1 -2
  226. package/lib/designs/components/ItemValue.js +1 -2
  227. package/lib/designs/components/ItemsGroup.js +1 -1
  228. package/lib/designs/components/Title.js +2 -5
  229. package/lib/designs/items/CandyCardLite.js +1 -1
  230. package/lib/designs/items/CircularProgress.js +2 -1
  231. package/lib/designs/items/HorizontalIconArrow.js +1 -2
  232. package/lib/designs/items/HorizontalIconLine.js +1 -1
  233. package/lib/designs/items/IconBadge.js +1 -1
  234. package/lib/designs/items/LinedText.d.ts +12 -0
  235. package/lib/designs/items/LinedText.js +61 -0
  236. package/lib/designs/items/PlainText.d.ts +1 -0
  237. package/lib/designs/items/PlainText.js +16 -3
  238. package/lib/designs/items/QuarterCircular.js +1 -31
  239. package/lib/designs/items/index.d.ts +1 -0
  240. package/lib/designs/items/index.js +1 -0
  241. package/lib/designs/layouts/Align.js +31 -45
  242. package/lib/designs/layouts/Flex.js +33 -29
  243. package/lib/designs/structures/chart-bar.d.ts +15 -0
  244. package/lib/designs/structures/chart-bar.js +103 -0
  245. package/lib/designs/structures/chart-line.d.ts +12 -0
  246. package/lib/designs/structures/chart-line.js +168 -0
  247. package/lib/designs/structures/chart-pie.d.ts +9 -0
  248. package/lib/designs/structures/chart-pie.js +131 -0
  249. package/lib/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.js +1 -1
  250. package/lib/designs/structures/hierarchy-mindmap.d.ts +24 -0
  251. package/lib/designs/structures/hierarchy-mindmap.js +203 -0
  252. package/lib/designs/structures/index.d.ts +4 -0
  253. package/lib/designs/structures/index.js +4 -0
  254. package/lib/designs/structures/list-sector.js +1 -1
  255. package/lib/designs/structures/sequence-circular.js +1 -1
  256. package/lib/designs/structures/sequence-cylinders-3d.js +4 -4
  257. package/lib/designs/structures/sequence-roadmap-vertical.js +1 -1
  258. package/lib/designs/structures/sequence-zigzag-pucks-3d.js +5 -5
  259. package/lib/editor/commands/Batch.d.ts +11 -0
  260. package/lib/editor/commands/Batch.js +25 -0
  261. package/lib/editor/commands/UpdateElement.d.ts +16 -0
  262. package/lib/editor/commands/UpdateElement.js +87 -0
  263. package/lib/editor/commands/UpdateOptions.d.ts +14 -0
  264. package/lib/editor/commands/UpdateOptions.js +29 -0
  265. package/lib/editor/commands/UpdateText.d.ts +16 -0
  266. package/lib/editor/commands/UpdateText.js +44 -0
  267. package/lib/editor/commands/index.d.ts +4 -0
  268. package/lib/editor/commands/index.js +20 -0
  269. package/lib/editor/editor.d.ts +16 -0
  270. package/lib/editor/editor.js +54 -0
  271. package/lib/editor/index.d.ts +4 -0
  272. package/lib/editor/index.js +21 -0
  273. package/lib/editor/interactions/base.d.ts +12 -0
  274. package/lib/editor/interactions/base.js +9 -0
  275. package/lib/editor/interactions/brush-select.d.ts +23 -0
  276. package/lib/editor/interactions/brush-select.js +171 -0
  277. package/lib/editor/interactions/click-select.d.ts +12 -0
  278. package/lib/editor/interactions/click-select.js +71 -0
  279. package/lib/editor/interactions/dblclick-edit-text.d.ts +10 -0
  280. package/lib/editor/interactions/dblclick-edit-text.js +208 -0
  281. package/lib/editor/interactions/drag-element.d.ts +41 -0
  282. package/lib/editor/interactions/drag-element.js +395 -0
  283. package/lib/editor/interactions/hotkey-history.d.ts +10 -0
  284. package/lib/editor/interactions/hotkey-history.js +31 -0
  285. package/lib/editor/interactions/index.d.ts +8 -0
  286. package/lib/editor/interactions/index.js +19 -0
  287. package/lib/editor/interactions/select-highlight.d.ts +16 -0
  288. package/lib/editor/interactions/select-highlight.js +103 -0
  289. package/lib/editor/interactions/zoom-wheel.d.ts +8 -0
  290. package/lib/editor/interactions/zoom-wheel.js +50 -0
  291. package/lib/editor/managers/command.d.ts +19 -0
  292. package/lib/editor/managers/command.js +67 -0
  293. package/lib/editor/managers/index.d.ts +4 -0
  294. package/lib/editor/managers/index.js +20 -0
  295. package/lib/editor/managers/interaction.d.ts +33 -0
  296. package/lib/editor/managers/interaction.js +200 -0
  297. package/lib/editor/managers/plugin.d.ts +14 -0
  298. package/lib/editor/managers/plugin.js +49 -0
  299. package/lib/editor/managers/state.d.ts +22 -0
  300. package/lib/editor/managers/state.js +145 -0
  301. package/lib/editor/plugins/base.d.ts +12 -0
  302. package/lib/editor/plugins/base.js +9 -0
  303. package/lib/editor/plugins/edit-bar/components/button.d.ts +12 -0
  304. package/lib/editor/plugins/edit-bar/components/button.js +57 -0
  305. package/lib/editor/plugins/edit-bar/components/color-picker.d.ts +10 -0
  306. package/lib/editor/plugins/edit-bar/components/color-picker.js +354 -0
  307. package/lib/editor/plugins/edit-bar/components/icons.d.ts +26 -0
  308. package/lib/editor/plugins/edit-bar/components/icons.js +33 -0
  309. package/lib/editor/plugins/edit-bar/components/index.d.ts +5 -0
  310. package/lib/editor/plugins/edit-bar/components/index.js +21 -0
  311. package/lib/editor/plugins/edit-bar/components/popover.d.ts +23 -0
  312. package/lib/editor/plugins/edit-bar/components/popover.js +381 -0
  313. package/lib/editor/plugins/edit-bar/components/select.d.ts +22 -0
  314. package/lib/editor/plugins/edit-bar/components/select.js +204 -0
  315. package/lib/editor/plugins/edit-bar/edit-bar.d.ts +32 -0
  316. package/lib/editor/plugins/edit-bar/edit-bar.js +215 -0
  317. package/lib/editor/plugins/edit-bar/edit-items/align-elements.d.ts +2 -0
  318. package/lib/editor/plugins/edit-bar/edit-items/align-elements.js +316 -0
  319. package/lib/editor/plugins/edit-bar/edit-items/font-align.d.ts +3 -0
  320. package/lib/editor/plugins/edit-bar/edit-items/font-align.js +85 -0
  321. package/lib/editor/plugins/edit-bar/edit-items/font-color.d.ts +3 -0
  322. package/lib/editor/plugins/edit-bar/edit-items/font-color.js +81 -0
  323. package/lib/editor/plugins/edit-bar/edit-items/font-family.d.ts +3 -0
  324. package/lib/editor/plugins/edit-bar/edit-items/font-family.js +119 -0
  325. package/lib/editor/plugins/edit-bar/edit-items/font-size.d.ts +3 -0
  326. package/lib/editor/plugins/edit-bar/edit-items/font-size.js +92 -0
  327. package/lib/editor/plugins/edit-bar/edit-items/icon-color.d.ts +3 -0
  328. package/lib/editor/plugins/edit-bar/edit-items/icon-color.js +81 -0
  329. package/lib/editor/plugins/edit-bar/edit-items/index.d.ts +7 -0
  330. package/lib/editor/plugins/edit-bar/edit-items/index.js +22 -0
  331. package/lib/editor/plugins/edit-bar/edit-items/types.d.ts +3 -0
  332. package/lib/editor/plugins/edit-bar/edit-items/types.js +2 -0
  333. package/lib/editor/plugins/edit-bar/index.d.ts +4 -0
  334. package/lib/editor/plugins/edit-bar/index.js +9 -0
  335. package/lib/editor/plugins/edit-bar/utils.d.ts +4 -0
  336. package/lib/editor/plugins/edit-bar/utils.js +17 -0
  337. package/lib/editor/plugins/index.d.ts +3 -0
  338. package/lib/editor/plugins/index.js +22 -0
  339. package/lib/editor/plugins/resize-element.d.ts +45 -0
  340. package/lib/editor/plugins/resize-element.js +397 -0
  341. package/lib/editor/types/command.d.ts +28 -0
  342. package/lib/editor/types/command.js +2 -0
  343. package/lib/editor/types/editor.d.ts +4 -0
  344. package/lib/editor/types/editor.js +2 -0
  345. package/lib/editor/types/index.d.ts +7 -0
  346. package/lib/editor/types/index.js +2 -0
  347. package/lib/editor/types/interaction.d.ts +44 -0
  348. package/lib/editor/types/interaction.js +2 -0
  349. package/lib/editor/types/plugin.d.ts +30 -0
  350. package/lib/editor/types/plugin.js +2 -0
  351. package/lib/editor/types/selection.d.ts +2 -0
  352. package/lib/editor/types/selection.js +2 -0
  353. package/lib/editor/types/shape.d.ts +16 -0
  354. package/lib/editor/types/shape.js +2 -0
  355. package/lib/editor/types/state.d.ts +57 -0
  356. package/lib/editor/types/state.js +2 -0
  357. package/lib/editor/utils/click-handler.d.ts +28 -0
  358. package/lib/editor/utils/click-handler.js +101 -0
  359. package/lib/editor/utils/coordinate.d.ts +6 -0
  360. package/lib/editor/utils/coordinate.js +38 -0
  361. package/lib/editor/utils/data.d.ts +10 -0
  362. package/lib/editor/utils/data.js +22 -0
  363. package/lib/editor/utils/element.d.ts +2 -0
  364. package/lib/editor/utils/element.js +12 -0
  365. package/lib/editor/utils/event.d.ts +3 -0
  366. package/lib/editor/utils/event.js +67 -0
  367. package/lib/editor/utils/extension.d.ts +13 -0
  368. package/lib/editor/utils/extension.js +43 -0
  369. package/lib/editor/utils/hotkey.d.ts +20 -0
  370. package/lib/editor/utils/hotkey.js +113 -0
  371. package/lib/editor/utils/index.d.ts +7 -0
  372. package/lib/editor/utils/index.js +23 -0
  373. package/lib/exporter/svg.js +6 -4
  374. package/lib/index.d.ts +5 -2
  375. package/lib/index.js +14 -1
  376. package/lib/jsx/components/Polygon.js +2 -1
  377. package/lib/jsx/components/Text.js +66 -68
  378. package/lib/options/types.d.ts +15 -2
  379. package/lib/renderer/composites/background.js +1 -1
  380. package/lib/renderer/composites/button.js +3 -2
  381. package/lib/renderer/composites/icon.d.ts +1 -1
  382. package/lib/renderer/composites/icon.js +2 -0
  383. package/lib/renderer/composites/text.js +2 -1
  384. package/lib/renderer/renderer.js +2 -1
  385. package/lib/renderer/stylize/rough.js +3 -7
  386. package/lib/renderer/types/index.d.ts +0 -1
  387. package/lib/resource/utils/index.d.ts +0 -1
  388. package/lib/resource/utils/index.js +0 -1
  389. package/lib/resource/utils/ref.js +2 -2
  390. package/lib/runtime/Infographic.d.ts +8 -2
  391. package/lib/runtime/Infographic.js +34 -2
  392. package/lib/runtime/options.d.ts +2 -0
  393. package/lib/runtime/options.js +27 -0
  394. package/lib/runtime/utils.d.ts +2 -0
  395. package/lib/runtime/utils.js +21 -0
  396. package/lib/templates/built-in.js +112 -1
  397. package/lib/templates/hierarchy-mindmap.d.ts +2 -0
  398. package/lib/templates/hierarchy-mindmap.js +64 -0
  399. package/lib/types/attrs.d.ts +15 -13
  400. package/lib/types/data.d.ts +2 -0
  401. package/lib/types/element.d.ts +1 -1
  402. package/lib/types/event.d.ts +6 -0
  403. package/lib/types/event.js +2 -0
  404. package/lib/types/index.d.ts +2 -0
  405. package/lib/{renderer/types → types}/text.d.ts +0 -1
  406. package/lib/types/text.js +2 -0
  407. package/lib/utils/attrs.d.ts +1 -0
  408. package/lib/utils/attrs.js +12 -0
  409. package/lib/utils/element.d.ts +4 -0
  410. package/lib/utils/element.js +18 -0
  411. package/lib/utils/icon.d.ts +5 -3
  412. package/lib/utils/icon.js +42 -21
  413. package/lib/utils/index.d.ts +5 -0
  414. package/lib/utils/index.js +5 -0
  415. package/lib/utils/measure-text.d.ts +5 -0
  416. package/lib/utils/measure-text.js +28 -0
  417. package/lib/utils/recognizer.d.ts +15 -0
  418. package/lib/utils/recognizer.js +72 -2
  419. package/lib/utils/style.d.ts +1 -0
  420. package/lib/utils/style.js +11 -0
  421. package/lib/utils/text.d.ts +7 -0
  422. package/lib/utils/text.js +113 -32
  423. package/package.json +7 -3
  424. package/src/constants/components.ts +1 -0
  425. package/src/constants/element.ts +17 -5
  426. package/src/constants/index.ts +2 -0
  427. package/src/constants/shape.ts +16 -0
  428. package/src/designs/components/Btn.tsx +3 -2
  429. package/src/designs/components/BtnsGroup.tsx +2 -1
  430. package/src/designs/components/Illus.tsx +3 -2
  431. package/src/designs/components/ItemDesc.tsx +2 -2
  432. package/src/designs/components/ItemIcon.tsx +3 -2
  433. package/src/designs/components/ItemLabel.tsx +2 -2
  434. package/src/designs/components/ItemValue.tsx +2 -2
  435. package/src/designs/components/ItemsGroup.tsx +2 -1
  436. package/src/designs/components/Title.tsx +8 -5
  437. package/src/designs/items/CandyCardLite.tsx +3 -3
  438. package/src/designs/items/CircularProgress.tsx +19 -8
  439. package/src/designs/items/HorizontalIconArrow.tsx +4 -5
  440. package/src/designs/items/HorizontalIconLine.tsx +7 -10
  441. package/src/designs/items/IconBadge.tsx +3 -3
  442. package/src/designs/items/LinedText.tsx +131 -0
  443. package/src/designs/items/PlainText.tsx +25 -3
  444. package/src/designs/items/QuarterCircular.tsx +2 -31
  445. package/src/designs/items/index.ts +1 -0
  446. package/src/designs/layouts/Align.tsx +31 -48
  447. package/src/designs/layouts/Flex.tsx +33 -31
  448. package/src/designs/structures/chart-bar.tsx +289 -0
  449. package/src/designs/structures/chart-line.tsx +415 -0
  450. package/src/designs/structures/chart-pie.tsx +298 -0
  451. package/src/designs/structures/compare-binary-horizontal/dividers/pros-cons-arrow.tsx +2 -2
  452. package/src/designs/structures/hierarchy-mindmap.tsx +394 -0
  453. package/src/designs/structures/index.ts +4 -0
  454. package/src/designs/structures/list-sector.tsx +2 -1
  455. package/src/designs/structures/sequence-ascending-steps.tsx +0 -1
  456. package/src/designs/structures/sequence-circular.tsx +1 -1
  457. package/src/designs/structures/sequence-cylinders-3d.tsx +5 -5
  458. package/src/designs/structures/sequence-roadmap-vertical.tsx +2 -1
  459. package/src/designs/structures/sequence-zigzag-pucks-3d.tsx +18 -25
  460. package/src/editor/commands/Batch.ts +24 -0
  461. package/src/editor/commands/UpdateElement.ts +115 -0
  462. package/src/editor/commands/UpdateOptions.ts +31 -0
  463. package/src/editor/commands/UpdateText.ts +54 -0
  464. package/src/editor/commands/index.ts +4 -0
  465. package/src/editor/editor.ts +78 -0
  466. package/src/editor/index.ts +4 -0
  467. package/src/editor/interactions/base.ts +25 -0
  468. package/src/editor/interactions/brush-select.ts +204 -0
  469. package/src/editor/interactions/click-select.ts +72 -0
  470. package/src/editor/interactions/dblclick-edit-text.ts +260 -0
  471. package/src/editor/interactions/drag-element.ts +516 -0
  472. package/src/editor/interactions/hotkey-history.ts +34 -0
  473. package/src/editor/interactions/index.ts +8 -0
  474. package/src/editor/interactions/select-highlight.ts +140 -0
  475. package/src/editor/interactions/zoom-wheel.ts +52 -0
  476. package/src/editor/managers/command.ts +83 -0
  477. package/src/editor/managers/index.ts +4 -0
  478. package/src/editor/managers/interaction.ts +244 -0
  479. package/src/editor/managers/plugin.ts +66 -0
  480. package/src/editor/managers/state.ts +186 -0
  481. package/src/editor/plugins/base.ts +25 -0
  482. package/src/editor/plugins/edit-bar/components/button.ts +77 -0
  483. package/src/editor/plugins/edit-bar/components/color-picker.ts +397 -0
  484. package/src/editor/plugins/edit-bar/components/icons.ts +86 -0
  485. package/src/editor/plugins/edit-bar/components/index.ts +5 -0
  486. package/src/editor/plugins/edit-bar/components/popover.ts +446 -0
  487. package/src/editor/plugins/edit-bar/components/select.ts +247 -0
  488. package/src/editor/plugins/edit-bar/edit-bar.ts +292 -0
  489. package/src/editor/plugins/edit-bar/edit-items/align-elements.ts +447 -0
  490. package/src/editor/plugins/edit-bar/edit-items/font-align.ts +129 -0
  491. package/src/editor/plugins/edit-bar/edit-items/font-color.ts +101 -0
  492. package/src/editor/plugins/edit-bar/edit-items/font-family.ts +147 -0
  493. package/src/editor/plugins/edit-bar/edit-items/font-size.ts +116 -0
  494. package/src/editor/plugins/edit-bar/edit-items/icon-color.ts +101 -0
  495. package/src/editor/plugins/edit-bar/edit-items/index.ts +7 -0
  496. package/src/editor/plugins/edit-bar/edit-items/types.ts +9 -0
  497. package/src/editor/plugins/edit-bar/index.ts +18 -0
  498. package/src/editor/plugins/edit-bar/utils.ts +16 -0
  499. package/src/editor/plugins/index.ts +3 -0
  500. package/src/editor/plugins/resize-element.ts +518 -0
  501. package/src/editor/types/command.ts +32 -0
  502. package/src/editor/types/editor.ts +4 -0
  503. package/src/editor/types/index.ts +7 -0
  504. package/src/editor/types/interaction.ts +56 -0
  505. package/src/editor/types/plugin.ts +34 -0
  506. package/src/editor/types/selection.ts +3 -0
  507. package/src/editor/types/shape.ts +28 -0
  508. package/src/editor/types/state.ts +51 -0
  509. package/src/editor/utils/click-handler.ts +114 -0
  510. package/src/editor/utils/coordinate.ts +54 -0
  511. package/src/editor/utils/data.ts +30 -0
  512. package/src/editor/utils/element.ts +13 -0
  513. package/src/editor/utils/event.ts +92 -0
  514. package/src/editor/utils/extension.ts +45 -0
  515. package/src/editor/utils/hotkey.ts +139 -0
  516. package/src/editor/utils/index.ts +7 -0
  517. package/src/exporter/svg.ts +15 -5
  518. package/src/index.ts +14 -3
  519. package/src/jsx/components/Polygon.ts +2 -1
  520. package/src/jsx/components/Text.ts +70 -71
  521. package/src/options/types.ts +17 -2
  522. package/src/renderer/composites/background.ts +2 -2
  523. package/src/renderer/composites/button.ts +4 -3
  524. package/src/renderer/composites/icon.ts +2 -0
  525. package/src/renderer/composites/text.ts +2 -1
  526. package/src/renderer/renderer.ts +4 -2
  527. package/src/renderer/stylize/rough.ts +3 -7
  528. package/src/renderer/types/index.ts +0 -1
  529. package/src/resource/utils/index.ts +0 -1
  530. package/src/resource/utils/ref.ts +1 -1
  531. package/src/runtime/Infographic.tsx +45 -4
  532. package/src/runtime/options.ts +37 -0
  533. package/src/runtime/utils.ts +23 -0
  534. package/src/templates/built-in.ts +112 -1
  535. package/src/templates/hierarchy-mindmap.ts +129 -0
  536. package/src/types/attrs.ts +17 -13
  537. package/src/types/data.ts +2 -0
  538. package/src/types/element.ts +1 -1
  539. package/src/types/event.ts +6 -0
  540. package/src/types/index.ts +2 -0
  541. package/src/{renderer/types → types}/text.ts +0 -1
  542. package/src/utils/attrs.ts +9 -0
  543. package/src/utils/element.ts +26 -0
  544. package/src/utils/icon.ts +45 -25
  545. package/src/utils/index.ts +5 -0
  546. package/src/utils/measure-text.ts +38 -0
  547. package/src/utils/recognizer.ts +75 -1
  548. package/src/utils/style.ts +8 -0
  549. package/src/utils/text.ts +135 -40
  550. /package/esm/{renderer/types/text.js → constants/shape.js} +0 -0
  551. /package/esm/{resource/utils → utils}/hash.d.ts +0 -0
  552. /package/esm/{resource/utils → utils}/hash.js +0 -0
  553. /package/lib/{renderer/types/text.js → constants/shape.js} +0 -0
  554. /package/lib/{resource/utils → utils}/hash.d.ts +0 -0
  555. /package/lib/{resource/utils → utils}/hash.js +0 -0
  556. /package/src/{resource/utils → utils}/hash.ts +0 -0
@@ -7,9 +7,10 @@ export const FlexLayout = createLayout((children, { flexDirection = 'row', justi
7
7
  const isRow = flexDirection === 'row' || flexDirection === 'row-reverse';
8
8
  const isReverse = flexDirection === 'row-reverse' || flexDirection === 'column-reverse';
9
9
  const childBounds = children.map((child) => getElementBounds(child));
10
+ const childrenBounds = getElementsBounds(children);
11
+ const containerWidth = props.width ?? childrenBounds.width;
12
+ const containerHeight = props.height ?? childrenBounds.height;
10
13
  const hasContainerSize = props.width !== undefined && props.height !== undefined;
11
- const containerWidth = props.width || 0;
12
- const containerHeight = props.height || 0;
13
14
  const lines = [];
14
15
  if (flexWrap === 'wrap' && hasContainerSize) {
15
16
  let currentLine = [];
@@ -171,33 +172,36 @@ export const FlexLayout = createLayout((children, { flexDirection = 'row', justi
171
172
  }
172
173
  }
173
174
  if (!hasContainerSize) {
174
- if (alignItems === 'center' && !isRow) {
175
- // For column layout, center items horizontally
176
- const maxWidth = Math.max(...childBounds.map((bounds) => bounds.width));
177
- layoutChildren.forEach((child, index) => {
178
- const bounds = childBounds[index];
179
- const centerOffset = (maxWidth - bounds.width) / 2;
180
- const newProps = { ...child.props };
181
- newProps.x = (newProps.x || 0) + centerOffset;
182
- layoutChildren[index] = cloneElement(child, newProps);
183
- });
184
- }
185
- else if (alignItems === 'center' && isRow) {
186
- // For row layout, center items vertically
187
- const maxHeight = Math.max(...childBounds.map((bounds) => bounds.height));
188
- layoutChildren.forEach((child, index) => {
189
- const bounds = childBounds[index];
190
- const centerOffset = (maxHeight - bounds.height) / 2;
191
- const newProps = { ...child.props };
192
- newProps.y = (newProps.y || 0) + centerOffset;
193
- layoutChildren[index] = cloneElement(child, newProps);
194
- });
175
+ if (alignItems === 'center') {
176
+ if (isRow) {
177
+ const maxHeight = Math.max(...childBounds.map((b) => b.height));
178
+ layoutChildren.forEach((child, index) => {
179
+ const bounds = childBounds[index];
180
+ const centerOffset = (maxHeight - bounds.height) / 2;
181
+ const newProps = { ...child.props };
182
+ newProps.y = (newProps.y || 0) + centerOffset;
183
+ layoutChildren[index] = cloneElement(child, newProps);
184
+ });
185
+ }
186
+ else {
187
+ const maxWidth = Math.max(...childBounds.map((b) => b.width));
188
+ layoutChildren.forEach((child, index) => {
189
+ const bounds = childBounds[index];
190
+ const centerOffset = (maxWidth - bounds.width) / 2;
191
+ const newProps = { ...child.props };
192
+ newProps.x = (newProps.x || 0) + centerOffset;
193
+ layoutChildren[index] = cloneElement(child, newProps);
194
+ });
195
+ }
195
196
  }
196
- const finalBounds = getElementsBounds(layoutChildren);
197
- // props.x ??= finalBounds.x;
198
- // props.y ??= finalBounds.y;
199
- props.width ?? (props.width = finalBounds.width);
200
- props.height ?? (props.height = finalBounds.height);
201
197
  }
202
- return _jsx(Group, { ...props, children: layoutChildren });
198
+ const finalBounds = getElementsBounds(layoutChildren);
199
+ const containerProps = {
200
+ ...props,
201
+ x: props.x ?? childrenBounds.x,
202
+ y: props.y ?? childrenBounds.y,
203
+ width: props.width ?? finalBounds.width,
204
+ height: props.height ?? finalBounds.height,
205
+ };
206
+ return _jsx(Group, { ...containerProps, children: layoutChildren });
203
207
  });
@@ -0,0 +1,15 @@
1
+ import type { ComponentType } from '../../jsx';
2
+ import { ItemDatum, Padding } from '../../types';
3
+ import type { BaseStructureProps } from './types';
4
+ export interface ChartBarProps extends BaseStructureProps {
5
+ width?: number;
6
+ gap?: number;
7
+ barGap?: number;
8
+ barHeight?: number;
9
+ barAreaWidth?: number;
10
+ labelGap?: number;
11
+ padding?: Padding;
12
+ showValue?: boolean;
13
+ valueFormatter?: (value: number, datum: ItemDatum) => string;
14
+ }
15
+ export declare const ChartBar: ComponentType<ChartBarProps>;
@@ -0,0 +1,99 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@antv/infographic/jsx-runtime";
2
+ import { scaleLinear } from 'd3';
3
+ import { getElementBounds, Group, Path, Rect, Text } from '../../jsx';
4
+ import { parsePadding } from '../../utils';
5
+ import { ItemsGroup } from '../components';
6
+ import { FlexLayout } from '../layouts';
7
+ import { getColorPrimary, getPaletteColor, getThemeColors } from '../utils';
8
+ import { registerStructure } from './registry';
9
+ export const ChartBar = (props) => {
10
+ const { Title, Item, data, width, gap, barGap, barHeight = 28, barAreaWidth, labelGap = 16, padding = 24, showValue = true, options, valueFormatter = (value) => value.toString(), } = props;
11
+ const resolvedBarAreaWidth = barAreaWidth ?? width ?? 480;
12
+ const { title, desc, items = [], xTitle, yTitle } = data;
13
+ const titleContent = Title ? _jsx(Title, { title: title, desc: desc }) : null;
14
+ if (items.length === 0) {
15
+ return (_jsx(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: titleContent }));
16
+ }
17
+ const [paddingTop, paddingRight, paddingBottom, paddingLeft] = parsePadding(padding);
18
+ const sampleDatum = items[0] ?? { label: '', value: 0 };
19
+ const itemBounds = getElementBounds(_jsx(Item, { indexes: [0], datum: sampleDatum, data: data }));
20
+ const labelWidth = itemBounds.width || 140;
21
+ const labelHeight = itemBounds.height || barHeight;
22
+ const rowHeight = Math.max(barHeight, labelHeight);
23
+ const gapByHeight = Math.max(12, rowHeight * 0.35);
24
+ const resolvedGap = barGap ?? gap ?? gapByHeight;
25
+ const values = items.map((item) => item.value ?? 0);
26
+ const maxValue = Math.max(...values, 0);
27
+ const minValue = Math.min(...values, 0);
28
+ const domainMin = minValue < 0 ? minValue * 1.1 : 0;
29
+ let domainMax = maxValue > 0 ? maxValue * 1.1 : 0;
30
+ if (domainMax === domainMin) {
31
+ domainMax = domainMin + 1;
32
+ }
33
+ const scale = scaleLinear()
34
+ .domain([domainMin, domainMax])
35
+ .range([0, resolvedBarAreaWidth]);
36
+ const zeroX = Math.min(Math.max(scale(0), 0), resolvedBarAreaWidth);
37
+ const minBarWidth = Math.max(2, resolvedBarAreaWidth * 0.02);
38
+ const chartHeight = items.length * (rowHeight + resolvedGap) - resolvedGap;
39
+ const yTitleSpace = yTitle ? 24 : 0;
40
+ const xTickSpace = 20;
41
+ const xTitleSpace = xTitle ? 24 : 0;
42
+ const yStart = paddingTop + yTitleSpace;
43
+ const barStartX = paddingLeft + labelWidth + labelGap;
44
+ const valueSpace = showValue ? 80 : 0;
45
+ const axisGap = Math.max(8, rowHeight * 0.2);
46
+ const totalWidth = barStartX + resolvedBarAreaWidth + valueSpace + paddingRight;
47
+ const totalHeight = yStart + chartHeight + axisGap + xTickSpace + xTitleSpace + paddingBottom;
48
+ const themeColors = getThemeColors(options.themeConfig);
49
+ const axisColor = themeColors.colorText || '#666';
50
+ const colorPrimary = getColorPrimary(options);
51
+ const barElements = [];
52
+ const valueElements = [];
53
+ const itemElements = [];
54
+ const axisElements = [];
55
+ const tickElements = [];
56
+ const gridElements = [];
57
+ const titleElements = [];
58
+ const axisY = yStart + chartHeight + axisGap;
59
+ const formatTick = (value) => Number.isInteger(value) ? value.toString() : value.toFixed(1);
60
+ items.forEach((item, index) => {
61
+ const indexes = [index];
62
+ const value = item.value ?? 0;
63
+ const rowY = yStart + index * (rowHeight + resolvedGap);
64
+ const barY = rowY + (rowHeight - barHeight) / 2;
65
+ const barX = value >= 0 ? barStartX + zeroX : barStartX + scale(value);
66
+ const barWidthRaw = value >= 0 ? scale(value) - zeroX : zeroX - scale(value);
67
+ const barWidth = barWidthRaw === 0 ? minBarWidth : barWidthRaw;
68
+ const barColor = getPaletteColor(options, [index]) || themeColors.colorPrimary;
69
+ barElements.push(_jsx(Rect, { x: barX, y: barY, width: barWidth, height: barHeight, fill: barColor, rx: 6, ry: 6, "data-element-type": "shape" }));
70
+ if (showValue) {
71
+ const valueX = value >= 0 ? barX + barWidth + 8 : barX - 8;
72
+ valueElements.push(_jsx(Text, { x: valueX, y: barY + barHeight / 2, alignHorizontal: value >= 0 ? 'left' : 'right', alignVertical: "middle", fontSize: 14, fontWeight: "bold", fill: barColor, children: valueFormatter(value, item) }));
73
+ }
74
+ itemElements.push(_jsx(Item, { indexes: indexes, datum: item, data: data, x: paddingLeft, y: rowY + (rowHeight - labelHeight) / 2, width: labelWidth, height: labelHeight, positionV: "middle" }));
75
+ });
76
+ const tickCount = Math.max(3, Math.min(7, Math.floor(resolvedBarAreaWidth / 80)));
77
+ const ticks = scale.ticks(tickCount);
78
+ ticks.forEach((tick) => {
79
+ const tickX = barStartX + scale(tick);
80
+ gridElements.push(_jsx(Path, { d: `M${tickX} ${yStart} L${tickX} ${yStart + chartHeight}`, stroke: axisColor, strokeOpacity: 0.08, "data-element-type": "shape" }));
81
+ tickElements.push(_jsx(Path, { d: `M${tickX - 0.5} ${axisY} L${tickX - 0.5} ${axisY + 6}`, stroke: axisColor, "data-element-type": "shape" }));
82
+ tickElements.push(_jsx(Text, { x: tickX, y: axisY + 14, alignHorizontal: "center", alignVertical: "middle", fontSize: 12, fill: axisColor, children: formatTick(tick) }));
83
+ });
84
+ axisElements.push(_jsx(Path, { d: `M${barStartX} ${axisY} L${barStartX + resolvedBarAreaWidth} ${axisY}`, stroke: axisColor, "data-element-type": "shape" }));
85
+ if (domainMin < 0) {
86
+ axisElements.push(_jsx(Rect, { x: barStartX + zeroX - 0.5, y: yStart, width: 1, height: chartHeight, fill: colorPrimary, "data-element-type": "shape" }));
87
+ }
88
+ if (yTitle) {
89
+ titleElements.push(_jsx(Text, { x: paddingLeft + labelWidth / 2, y: paddingTop + yTitleSpace / 2, alignHorizontal: "center", alignVertical: "middle", fontSize: 14, fontWeight: "bold", fill: axisColor, children: yTitle }));
90
+ }
91
+ if (xTitle) {
92
+ titleElements.push(_jsx(Text, { x: barStartX + resolvedBarAreaWidth / 2, y: axisY + xTickSpace + xTitleSpace / 2, alignHorizontal: "center", alignVertical: "middle", fontSize: 14, fontWeight: "bold", fill: axisColor, children: xTitle }));
93
+ }
94
+ return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: [titleContent, _jsxs(Group, { width: totalWidth, height: totalHeight, children: [_jsx(Group, { children: gridElements }), _jsx(Group, { children: barElements }), _jsx(Group, { children: valueElements }), _jsx(Group, { children: titleElements }), _jsx(Group, { children: [...axisElements, ...tickElements] }), _jsx(ItemsGroup, { children: itemElements })] })] }));
95
+ };
96
+ registerStructure('chart-bar', {
97
+ component: ChartBar,
98
+ composites: ['title', 'item', 'xTitle', 'yTitle'],
99
+ });
@@ -0,0 +1,12 @@
1
+ import type { ComponentType } from '../../jsx';
2
+ import { ItemDatum, Padding } from '../../types';
3
+ import type { BaseStructureProps } from './types';
4
+ export interface ChartLineProps extends BaseStructureProps {
5
+ width?: number;
6
+ height?: number;
7
+ gap?: number;
8
+ padding?: Padding;
9
+ showValue?: boolean;
10
+ valueFormatter?: (value: number, datum: ItemDatum) => string;
11
+ }
12
+ export declare const ChartLine: ComponentType<ChartLineProps>;
@@ -0,0 +1,164 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@antv/infographic/jsx-runtime";
2
+ import { scaleLinear } from 'd3';
3
+ import { Defs, Ellipse, getElementBounds, Group, Path, Text } from '../../jsx';
4
+ import { getSimpleHash, parsePadding } from '../../utils';
5
+ import { ItemsGroup } from '../components';
6
+ import { FlexLayout } from '../layouts';
7
+ import { getColorPrimary, getPaletteColor, getThemeColors } from '../utils';
8
+ import { registerStructure } from './registry';
9
+ export const ChartLine = (props) => {
10
+ const { Title, Item, data, width, height = 260, gap = 10, padding = 24, showValue = true, options, valueFormatter = (value) => value.toString(), } = props;
11
+ const { title, desc, items = [], xTitle, yTitle } = data;
12
+ const titleContent = Title ? _jsx(Title, { title: title, desc: desc }) : null;
13
+ if (items.length === 0) {
14
+ return (_jsx(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: titleContent }));
15
+ }
16
+ const [paddingTop, paddingRight, paddingBottom, paddingLeft] = parsePadding(padding);
17
+ const itemProps = {
18
+ indexes: [0],
19
+ datum: items[0],
20
+ data,
21
+ positionH: 'center',
22
+ positionV: 'normal',
23
+ };
24
+ const sampleBounds = getElementBounds(_jsx(Item, { ...itemProps }));
25
+ const labelWidth = sampleBounds.width;
26
+ const labelHeight = sampleBounds.height;
27
+ const xTickSpace = Math.max(28, labelHeight + 14);
28
+ const yTickSpace = 44;
29
+ const yTitleSpace = yTitle ? 26 : 0;
30
+ const xTitleSpace = xTitle ? 22 : 0;
31
+ const baseSpacing = labelWidth + gap;
32
+ const naturalChartWidth = items.length > 0 ? (items.length - 1) * baseSpacing + labelWidth : 0;
33
+ const targetChartWidth = width !== undefined ? width : Math.max(200, naturalChartWidth || 320);
34
+ const spacing = items.length > 1
35
+ ? Math.max(baseSpacing, (targetChartWidth - labelWidth) / (items.length - 1))
36
+ : 0;
37
+ const derivedChartWidth = items.length > 0
38
+ ? Math.max(labelWidth, (items.length - 1) * spacing + labelWidth)
39
+ : 0;
40
+ const chartOriginX = paddingLeft + yTickSpace + yTitleSpace;
41
+ const chartOriginY = paddingTop + yTitleSpace;
42
+ const totalWidth = chartOriginX + derivedChartWidth + paddingRight;
43
+ const totalHeight = chartOriginY + height + xTickSpace + xTitleSpace + paddingBottom;
44
+ const values = items.map((item) => item.value ?? 0);
45
+ const maxValue = Math.max(...values, 0);
46
+ const minValue = Math.min(...values, 0);
47
+ const domainPadding = Math.max(Math.abs(maxValue), Math.abs(minValue)) * 0.1;
48
+ const domainMin = minValue < 0 ? minValue - domainPadding : 0;
49
+ let domainMax = maxValue > 0 ? maxValue + domainPadding : 1;
50
+ if (domainMax === domainMin) {
51
+ domainMax = domainMin + 1;
52
+ }
53
+ const scaleY = scaleLinear()
54
+ .domain([domainMin, domainMax])
55
+ .nice()
56
+ .range([height, 0]);
57
+ const zeroY = Math.max(0, Math.min(height, scaleY(0)));
58
+ const axisBaseY = domainMax <= 0 ? 0 : domainMin >= 0 ? height : zeroY;
59
+ const colorPrimary = getColorPrimary(options);
60
+ const themeColors = getThemeColors(options.themeConfig);
61
+ const axisColor = themeColors.colorText || '#666';
62
+ const gridElements = [];
63
+ const axisElements = [];
64
+ const lineElements = [];
65
+ const pointElements = [];
66
+ const valueElements = [];
67
+ const titleElements = [];
68
+ const tickElements = [];
69
+ const ticksY = scaleY.ticks(6);
70
+ ticksY.forEach((tick) => {
71
+ const yPos = chartOriginY + scaleY(tick);
72
+ gridElements.push(_jsx(Path, { d: `M ${chartOriginX} ${yPos} L ${chartOriginX + derivedChartWidth} ${yPos}`, width: derivedChartWidth, height: 1, stroke: axisColor, strokeWidth: 1, "data-element-type": "shape", opacity: 0.08 }));
73
+ tickElements.push(_jsx(Text, { x: chartOriginX - 8, y: yPos, alignHorizontal: "right", alignVertical: "middle", fontSize: 12, fill: axisColor, children: Number.isInteger(tick) ? tick.toString() : tick.toFixed(1) }));
74
+ });
75
+ const xLabels = [];
76
+ const pointPositions = [];
77
+ const colorStopsData = [];
78
+ const createSmoothPath = (points) => {
79
+ if (points.length === 0)
80
+ return '';
81
+ if (points.length === 1) {
82
+ const p = points[0];
83
+ return `M ${p.x} ${p.y}`;
84
+ }
85
+ const segments = [];
86
+ segments.push(`M ${points[0].x} ${points[0].y}`);
87
+ for (let i = 0; i < points.length - 1; i++) {
88
+ const p0 = points[i - 1] || points[i];
89
+ const p1 = points[i];
90
+ const p2 = points[i + 1];
91
+ const p3 = points[i + 2] || p2;
92
+ const cp1x = p1.x + (p2.x - p0.x) / 6;
93
+ const cp1y = p1.y + (p2.y - p0.y) / 6;
94
+ const cp2x = p2.x - (p3.x - p1.x) / 6;
95
+ const cp2y = p2.y - (p3.y - p1.y) / 6;
96
+ segments.push(`C ${cp1x} ${cp1y} ${cp2x} ${cp2y} ${p2.x} ${p2.y}`);
97
+ }
98
+ return segments.join(' ');
99
+ };
100
+ items.forEach((item, index) => {
101
+ const x = chartOriginX + index * spacing + labelWidth / 2;
102
+ const y = chartOriginY + scaleY(item.value ?? 0);
103
+ pointPositions.push({ x, y, datum: item });
104
+ xLabels.push(_jsx(Item, { ...itemProps, indexes: [index], datum: item, x: x - labelWidth / 2, y: chartOriginY + height + 4 }));
105
+ const stopColor = getPaletteColor(options, [index]) || themeColors.colorPrimary;
106
+ colorStopsData.push({ x, color: stopColor });
107
+ });
108
+ const minStopX = colorStopsData.length > 0
109
+ ? Math.min(...colorStopsData.map((s) => s.x))
110
+ : chartOriginX;
111
+ const maxStopX = colorStopsData.length > 0
112
+ ? Math.max(...colorStopsData.map((s) => s.x))
113
+ : chartOriginX + derivedChartWidth;
114
+ const stopSpan = Math.max(1, maxStopX - minStopX);
115
+ const gradientStops = colorStopsData.map((s) => (_jsx("stop", { offset: `${((s.x - minStopX) / stopSpan) * 100}%`, stopColor: s.color })));
116
+ const areaStops = colorStopsData.map((s) => (_jsx("stop", { offset: `${((s.x - minStopX) / stopSpan) * 100}%`, stopColor: s.color, stopOpacity: "0.18" })));
117
+ if (colorStopsData.length > 0) {
118
+ const lastColor = colorStopsData[colorStopsData.length - 1].color;
119
+ gradientStops.push(_jsx("stop", { offset: "100%", stopColor: lastColor }));
120
+ areaStops.push(_jsx("stop", { offset: "100%", stopColor: lastColor, stopOpacity: "0.04" }));
121
+ }
122
+ const gradientIdBase = `chart-line-${getSimpleHash([
123
+ derivedChartWidth,
124
+ height,
125
+ axisColor,
126
+ colorPrimary,
127
+ colorStopsData.map((s) => `${s.x.toFixed(2)}-${s.color}`).join(),
128
+ ].join(':'))}`;
129
+ const gradientStrokeId = `${gradientIdBase}-stroke`;
130
+ const gradientAreaId = `${gradientIdBase}-area`;
131
+ const smoothLinePath = createSmoothPath(pointPositions);
132
+ lineElements.push(_jsx(Path, { d: smoothLinePath, width: derivedChartWidth, height: height, stroke: `url(#${gradientStrokeId})`, strokeWidth: 3, fill: "none", "data-element-type": "shape" }));
133
+ const areaCurveTail = smoothLinePath.includes('C')
134
+ ? smoothLinePath.slice(smoothLinePath.indexOf('C'))
135
+ : '';
136
+ const areaPath = [
137
+ `M ${pointPositions[0].x} ${chartOriginY + axisBaseY}`,
138
+ `L ${pointPositions[0].x} ${pointPositions[0].y}`,
139
+ areaCurveTail,
140
+ `L ${pointPositions[pointPositions.length - 1].x} ${chartOriginY + axisBaseY}`,
141
+ 'Z',
142
+ ].join(' ');
143
+ lineElements.push(_jsx(Path, { d: areaPath, width: derivedChartWidth, height: height, fill: `url(#${gradientAreaId})`, stroke: "none", "data-element-type": "shape" }));
144
+ pointPositions.forEach((pos, index) => {
145
+ const paletteColor = getPaletteColor(options, [index]) || themeColors.colorPrimary;
146
+ pointElements.push(_jsx(Ellipse, { x: pos.x - 6, y: pos.y - 6, width: 12, height: 12, fill: paletteColor, "data-element-type": "shape" }));
147
+ if (showValue) {
148
+ valueElements.push(_jsx(Text, { x: pos.x, y: pos.y - 12, alignHorizontal: "center", alignVertical: "bottom", fontSize: 12, fontWeight: "bold", fill: paletteColor, children: valueFormatter(pos.datum.value ?? 0, pos.datum) }));
149
+ }
150
+ });
151
+ axisElements.push(_jsx(Path, { d: `M ${chartOriginX} ${chartOriginY + axisBaseY} L ${chartOriginX + derivedChartWidth} ${chartOriginY + axisBaseY}`, width: derivedChartWidth, height: 1, stroke: axisColor, strokeWidth: 1, "data-element-type": "shape" }));
152
+ axisElements.push(_jsx(Path, { d: `M ${chartOriginX} ${chartOriginY} L ${chartOriginX} ${chartOriginY + height}`, width: 1, height: height, stroke: axisColor, strokeWidth: 1, "data-element-type": "shape" }));
153
+ if (xTitle) {
154
+ titleElements.push(_jsx(Text, { x: chartOriginX + derivedChartWidth / 2, y: chartOriginY + height + xTickSpace + xTitleSpace / 2, alignHorizontal: "center", alignVertical: "middle", fontSize: 14, fontWeight: "bold", fill: axisColor, children: xTitle }));
155
+ }
156
+ if (yTitle) {
157
+ titleElements.push(_jsx(Text, { x: paddingLeft + yTitleSpace / 2, y: chartOriginY + height / 2, alignHorizontal: "center", alignVertical: "middle", fontSize: 14, fontWeight: "bold", fill: axisColor, children: yTitle }));
158
+ }
159
+ return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: [titleContent, _jsxs(Group, { width: totalWidth, height: totalHeight, children: [_jsxs(Defs, { children: [_jsx("linearGradient", { id: gradientStrokeId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: gradientStops }), _jsxs("linearGradient", { id: gradientAreaId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [areaStops, _jsx("stop", { offset: "100%", stopColor: colorPrimary, stopOpacity: "0.04" })] })] }), _jsx(Group, { children: gridElements }), _jsx(Group, { children: [...axisElements, ...tickElements] }), _jsx(Group, { children: lineElements }), _jsx(Group, { children: pointElements }), _jsx(Group, { children: valueElements }), _jsx(Group, { children: titleElements }), _jsx(ItemsGroup, { children: xLabels })] })] }));
160
+ };
161
+ registerStructure('chart-line', {
162
+ component: ChartLine,
163
+ composites: ['title', 'item', 'xTitle', 'yTitle'],
164
+ });
@@ -0,0 +1,9 @@
1
+ import type { ComponentType } from '../../jsx';
2
+ import type { BaseStructureProps } from './types';
3
+ export interface ChartPieProps extends BaseStructureProps {
4
+ radius?: number;
5
+ innerRadius?: number;
6
+ padding?: number;
7
+ showPercentage?: boolean;
8
+ }
9
+ export declare const ChartPie: ComponentType<ChartPieProps>;
@@ -0,0 +1,127 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@antv/infographic/jsx-runtime";
2
+ import { arc, pie } from 'd3';
3
+ import { getElementBounds, Group, Path, Text } from '../../jsx';
4
+ import { BtnAdd, BtnRemove, BtnsGroup, ItemsGroup } from '../components';
5
+ import { FlexLayout } from '../layouts';
6
+ import { getColorPrimary, getPaletteColor, getThemeColors } from '../utils';
7
+ import { registerStructure } from './registry';
8
+ export const ChartPie = (props) => {
9
+ const { Title, Item, data, radius = 140, innerRadius = 0, padding = 30, showPercentage = true, options, } = props;
10
+ const { title, desc, items = [] } = data;
11
+ const titleContent = Title ? _jsx(Title, { title: title, desc: desc }) : null;
12
+ const btnBounds = getElementBounds(_jsx(BtnAdd, { indexes: [0] }));
13
+ // 获取 Item 的预估尺寸
14
+ const sampleDatum = items[0] ?? { label: '', value: 0 };
15
+ const itemBounds = getElementBounds(_jsx(Item, { indexes: [0], datum: sampleDatum, data: data, positionH: "center", positionV: "middle" }));
16
+ const labelWidth = itemBounds.width || 140;
17
+ const labelHeight = itemBounds.height || 32;
18
+ // 基础半径设置
19
+ const outerRadius = Math.max(radius, 60);
20
+ // 连线水平拉伸的系数
21
+ const extensionFactor = 1.35;
22
+ const textGap = 8;
23
+ // 计算画布中心和总尺寸
24
+ // 水平方向:半径 * 系数 + 间距 + 标签宽度 + 边缘padding
25
+ const maxHorizontalDistance = outerRadius * extensionFactor + textGap + labelWidth;
26
+ const maxVerticalDistance = outerRadius;
27
+ const centerX = padding + maxHorizontalDistance;
28
+ const centerY = padding + maxVerticalDistance;
29
+ const totalWidth = centerX * 2;
30
+ const totalHeight = centerY * 2;
31
+ // 空数据处理
32
+ if (items.length === 0) {
33
+ return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", children: [titleContent, _jsx(Group, { width: totalWidth, height: totalHeight, children: _jsx(BtnsGroup, { children: _jsx(BtnAdd, { indexes: [0], x: centerX - btnBounds.width / 2, y: centerY - btnBounds.height / 2 }) }) })] }));
34
+ }
35
+ const totalValue = items.reduce((sum, item) => sum + Math.max(item.value ?? 0, 0), 0);
36
+ const colorPrimary = getColorPrimary(options);
37
+ const themeColors = getThemeColors(options.themeConfig);
38
+ // 1. 饼图生成器
39
+ const pieGenerator = pie()
40
+ .value((item) => Math.max(item.value ?? 0, 0))
41
+ .sort(null)
42
+ .startAngle(0)
43
+ .endAngle(Math.PI * 2);
44
+ const arcData = pieGenerator(items);
45
+ // 2. 弧形生成器
46
+ const arcGenerator = arc()
47
+ .innerRadius(innerRadius)
48
+ .outerRadius(outerRadius)
49
+ .cornerRadius(2);
50
+ // 连线起点
51
+ const innerArc = arc()
52
+ .innerRadius(outerRadius)
53
+ .outerRadius(outerRadius);
54
+ // 连线拐点
55
+ const outerArc = arc()
56
+ .innerRadius(outerRadius * 1.15)
57
+ .outerRadius(outerRadius * 1.15);
58
+ const percentTextRadius = innerRadius + (outerRadius - innerRadius) * 0.5;
59
+ const percentageArc = arc()
60
+ .innerRadius(percentTextRadius)
61
+ .outerRadius(percentTextRadius);
62
+ // 删除按钮位置
63
+ const deleteButtonArc = arc()
64
+ .innerRadius(outerRadius * 0.85)
65
+ .outerRadius(outerRadius * 0.85);
66
+ const sliceElements = [];
67
+ const percentElements = [];
68
+ const connectorElements = [];
69
+ const itemElements = [];
70
+ const btnElements = [];
71
+ // 3. 遍历生成图形
72
+ arcData.forEach((arcDatum) => {
73
+ const currentItem = arcDatum.data;
74
+ const originalIndex = arcDatum.index;
75
+ const color = getPaletteColor(options, [originalIndex]) ||
76
+ themeColors.colorPrimary ||
77
+ colorPrimary;
78
+ // --- 绘制扇形 ---
79
+ const pathD = arcGenerator(arcDatum) || '';
80
+ sliceElements.push(_jsx(Path, { d: pathD, fill: color, stroke: themeColors.colorBg, strokeWidth: 1, "data-element-type": "shape", width: outerRadius * 2, height: outerRadius * 2 }));
81
+ // --- 计算关键点 ---
82
+ const midAngle = arcDatum.startAngle + (arcDatum.endAngle - arcDatum.startAngle) / 2;
83
+ const isRight = midAngle < Math.PI;
84
+ // 1. 起点
85
+ const p0 = innerArc.centroid(arcDatum);
86
+ // 2. 拐点
87
+ const p1 = outerArc.centroid(arcDatum);
88
+ // 3. 终点 (水平拉伸)
89
+ const labelXOffset = outerRadius * extensionFactor * (isRight ? 1 : -1);
90
+ const p2 = [labelXOffset, p1[1]];
91
+ // --- 绘制连线 ---
92
+ connectorElements.push(_jsx(Path, { d: `M${centerX + p0[0]} ${centerY + p0[1]} L${centerX + p1[0]} ${centerY + p1[1]} L${centerX + p2[0]} ${centerY + p2[1]}`, stroke: colorPrimary, strokeOpacity: 0.45, strokeWidth: 2, fill: "none", "data-element-type": "shape" }));
93
+ // --- 绘制 Item ---
94
+ const itemX = centerX + p2[0] + (isRight ? textGap : -textGap - labelWidth);
95
+ const itemY = centerY + p2[1] - labelHeight / 2;
96
+ itemElements.push(_jsx(Item, { indexes: [originalIndex], datum: currentItem, data: data, x: itemX, y: itemY, width: labelWidth, height: labelHeight, positionH: isRight ? 'normal' : 'flipped', positionV: "middle", themeColors: getThemeColors({ colorPrimary: color }, options) }));
97
+ // --- 绘制百分比 ---
98
+ if (showPercentage && totalValue > 0) {
99
+ const percentPos = percentageArc.centroid(arcDatum);
100
+ const value = Math.max(arcDatum.value, 0);
101
+ const percentText = ((value * 100) / totalValue).toFixed(1);
102
+ // 定义文本框尺寸
103
+ const textWidth = 50;
104
+ const textHeight = 20;
105
+ percentElements.push(_jsx(Text, { x: centerX + percentPos[0] - textWidth / 2, y: centerY + percentPos[1] - textHeight / 2, width: textWidth, height: textHeight, alignHorizontal: "center", alignVertical: "middle", fontSize: 12, fontWeight: "bold", fill: "#ffffff", "data-value": value, "data-indexes": [originalIndex], "data-element-type": "item-value" /* ElementTypeEnum.ItemValue */, children: `${percentText}%` }));
106
+ }
107
+ // --- 绘制删除按钮 ---
108
+ const deletePos = deleteButtonArc.centroid(arcDatum);
109
+ btnElements.push(_jsx(BtnRemove, { indexes: [originalIndex], x: centerX + deletePos[0] - btnBounds.width / 2, y: centerY + deletePos[1] - btnBounds.height / 2 }));
110
+ });
111
+ // --- 绘制添加按钮 ---
112
+ arcData.forEach((arcDatum, index) => {
113
+ const nextIndex = (index + 1) % arcData.length;
114
+ const currentEnd = arcDatum.endAngle;
115
+ const nextStart = arcData[nextIndex].startAngle + (nextIndex === 0 ? Math.PI * 2 : 0);
116
+ const midAngle = (currentEnd + nextStart) / 2;
117
+ const btnR = outerRadius * 1.0;
118
+ const btnX = Math.sin(midAngle) * btnR;
119
+ const btnY = -Math.cos(midAngle) * btnR;
120
+ btnElements.push(_jsx(BtnAdd, { indexes: [index + 1], x: centerX + btnX - btnBounds.width / 2, y: centerY + btnY - btnBounds.height / 2 }));
121
+ });
122
+ return (_jsxs(FlexLayout, { id: "infographic-container", flexDirection: "column", justifyContent: "center", alignItems: "center", gap: 30, children: [titleContent, _jsxs(Group, { width: totalWidth, height: totalHeight, children: [_jsx(Group, { x: centerX, y: centerY, children: sliceElements }), _jsx(Group, { children: connectorElements }), _jsx(Group, { children: percentElements }), _jsx(ItemsGroup, { children: itemElements }), _jsx(BtnsGroup, { children: btnElements })] })] }));
123
+ };
124
+ registerStructure('chart-pie', {
125
+ component: ChartPie,
126
+ composites: ['title', 'item'],
127
+ });
@@ -15,6 +15,6 @@ export const ProsConsArrow = (props) => {
15
15
  fontWeight: 'bold',
16
16
  fill: colorBg,
17
17
  };
18
- return (_jsxs(Group, { x: x, y: y, width: width, height: height, children: [_jsxs(ShapesGroup, { children: [_jsx("path", { d: "M137 54C137 54.2903 137 54.5806 136.706 54.7742L108.614 86.0323H64.7619C64.4071 86.0204 64.0557 86.1043 63.7453 86.2747C63.4349 86.4452 63.1773 86.6959 63 87C63.0037 86.7447 63.1092 86.5012 63.2936 86.3226L91.3862 55.0645H135.238C135.593 55.0763 135.944 54.9925 136.255 54.822C136.565 54.6516 136.823 54.4009 137 54.0968V54Z", fill: "#D9D9D9" }), _jsx("path", { d: "M39.3272 0.484649C39.6146 0.234929 39.9662 0.0736935 40.3407 0.0198929C40.7152 -0.0339076 41.0971 0.0219605 41.4414 0.180925C41.7857 0.33989 42.0783 0.595358 42.2846 0.917314C42.491 1.23927 42.6026 1.61434 42.6063 1.99848V14.8156H136.013C136.54 14.8156 137.045 15.0282 137.418 15.4068C137.791 15.7853 138 16.2987 138 16.834V53.166C138 53.7013 137.791 54.2147 137.418 54.5932C137.045 54.9718 136.54 55.1844 136.013 55.1844H42.6063V68.0015C42.6026 68.3857 42.491 68.7607 42.2846 69.0827C42.0783 69.4046 41.7857 69.6601 41.4414 69.8191C41.0971 69.9781 40.7152 70.0339 40.3407 69.9801C39.9662 69.9263 39.6146 69.7651 39.3272 69.5154L0.672847 36.5138C0.461378 36.3244 0.292014 36.0915 0.176005 35.8305C0.0599968 35.5695 0 35.2864 0 35C0 34.7136 0.0599968 34.4306 0.176005 34.1696C0.292014 33.9085 0.461378 33.6756 0.672847 33.4862L39.4265 0.484649H39.3272Z", fill: colorPositive }), _jsx("path", { d: "M157.394 73.0007C157.397 72.6162 157.509 72.2407 157.715 71.9183C157.922 71.596 158.214 71.3403 158.559 71.1811C158.903 71.022 159.285 70.9661 159.659 71.0199C160.034 71.0738 160.385 71.2352 160.673 71.4852L199.327 104.524C199.539 104.714 199.708 104.947 199.824 105.208C199.94 105.47 200 105.753 200 106.04C200 106.326 199.94 106.61 199.824 106.871C199.708 107.132 199.539 107.366 199.327 107.555L160.573 140.594C160.285 140.815 159.943 140.951 159.584 140.989C159.225 141.027 158.862 140.965 158.535 140.809C158.208 140.653 157.929 140.41 157.728 140.105C157.527 139.8 157.411 139.445 157.394 139.078V126.247H63.9874C63.4603 126.247 62.9548 126.034 62.5821 125.655C62.2094 125.276 62 124.762 62 124.226V87.8531C62 87.3172 62.2094 86.8032 62.5821 86.4242C62.9548 86.0453 63.4603 85.8324 63.9874 85.8324H157.394V73.0007Z", fill: colorNegative })] }), _jsx(Text, { x: 45, y: 15, ...textAttrs, children: "Pros" }), _jsx(Text, { x: 65, y: 86, ...textAttrs, children: "Cons" })] }));
18
+ return (_jsxs(Group, { x: x, y: y, width: width, height: height, children: [_jsxs(ShapesGroup, { children: [_jsx("path", { d: "M137 54C137 54.2903 137 54.5806 136.706 54.7742L108.614 86.0323H64.7619C64.4071 86.0204 64.0557 86.1043 63.7453 86.2747C63.4349 86.4452 63.1773 86.6959 63 87C63.0037 86.7447 63.1092 86.5012 63.2936 86.3226L91.3862 55.0645H135.238C135.593 55.0763 135.944 54.9925 136.255 54.822C136.565 54.6516 136.823 54.4009 137 54.0968V54Z", fill: "#D9D9D9" }), _jsx("path", { d: "M39.3272 0.484649C39.6146 0.234929 39.9662 0.0736935 40.3407 0.0198929C40.7152 -0.0339076 41.0971 0.0219605 41.4414 0.180925C41.7857 0.33989 42.0783 0.595358 42.2846 0.917314C42.491 1.23927 42.6026 1.61434 42.6063 1.99848V14.8156H136.013C136.54 14.8156 137.045 15.0282 137.418 15.4068C137.791 15.7853 138 16.2987 138 16.834V53.166C138 53.7013 137.791 54.2147 137.418 54.5932C137.045 54.9718 136.54 55.1844 136.013 55.1844H42.6063V68.0015C42.6026 68.3857 42.491 68.7607 42.2846 69.0827C42.0783 69.4046 41.7857 69.6601 41.4414 69.8191C41.0971 69.9781 40.7152 70.0339 40.3407 69.9801C39.9662 69.9263 39.6146 69.7651 39.3272 69.5154L0.672847 36.5138C0.461378 36.3244 0.292014 36.0915 0.176005 35.8305C0.0599968 35.5695 0 35.2864 0 35C0 34.7136 0.0599968 34.4306 0.176005 34.1696C0.292014 33.9085 0.461378 33.6756 0.672847 33.4862L39.4265 0.484649H39.3272Z", fill: colorPositive }), _jsx("path", { d: "M157.394 73.0007C157.397 72.6162 157.509 72.2407 157.715 71.9183C157.922 71.596 158.214 71.3403 158.559 71.1811C158.903 71.022 159.285 70.9661 159.659 71.0199C160.034 71.0738 160.385 71.2352 160.673 71.4852L199.327 104.524C199.539 104.714 199.708 104.947 199.824 105.208C199.94 105.47 200 105.753 200 106.04C200 106.326 199.94 106.61 199.824 106.871C199.708 107.132 199.539 107.366 199.327 107.555L160.573 140.594C160.285 140.815 159.943 140.951 159.584 140.989C159.225 141.027 158.862 140.965 158.535 140.809C158.208 140.653 157.929 140.41 157.728 140.105C157.527 139.8 157.411 139.445 157.394 139.078V126.247H63.9874C63.4603 126.247 62.9548 126.034 62.5821 125.655C62.2094 125.276 62 124.762 62 124.226V87.8531C62 87.3172 62.2094 86.8032 62.5821 86.4242C62.9548 86.0453 63.4603 85.8324 63.9874 85.8324H157.394V73.0007Z", fill: colorNegative })] }), _jsx(Text, { x: 40, y: 15, ...textAttrs, children: "Pros" }), _jsx(Text, { x: 70, y: 85, ...textAttrs, children: "Cons" })] }));
19
19
  };
20
20
  registerDivider('pros-cons-arrow', ProsConsArrow);
@@ -0,0 +1,24 @@
1
+ import type { ComponentType } from '../../jsx';
2
+ import type { HierarchyColorMode } from '../utils';
3
+ import type { BaseStructureProps } from './types';
4
+ type EdgeAlign = 'top' | 'center' | 'bottom' | number;
5
+ type EdgeType = 'curved' | 'straight';
6
+ type EdgeColorMode = 'solid' | 'gradient';
7
+ export interface HierarchyMindmapProps extends BaseStructureProps {
8
+ /** 水平层级间距 */
9
+ levelGap?: number;
10
+ /** 垂直节点间距 */
11
+ nodeGap?: number;
12
+ /** 连线在节点上的垂直对齐方式;字符串为固定位置,数字为 0-1 比例 */
13
+ edgeAlign?: EdgeAlign;
14
+ /** 节点/连线着色模式 */
15
+ colorMode?: HierarchyColorMode;
16
+ /** 连线颜色模式 */
17
+ edgeColorMode?: EdgeColorMode;
18
+ /** 连线类型:曲线或直线 */
19
+ edgeType?: EdgeType;
20
+ /** 连线宽度 */
21
+ edgeWidth?: number;
22
+ }
23
+ export declare const HierarchyMindmap: ComponentType<HierarchyMindmapProps>;
24
+ export {};