@zerodep-dev/vue-tsx-pro-ui 0.0.0-stage → 0.2.0

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 (1129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -2
  3. package/dist/base/Badge.d.ts +28 -0
  4. package/dist/base/Badge.js +72 -0
  5. package/dist/base/Badge.js.map +1 -0
  6. package/dist/base/Blockquote.d.ts +13 -0
  7. package/dist/base/Blockquote.js +26 -0
  8. package/dist/base/Blockquote.js.map +1 -0
  9. package/dist/base/Button.d.ts +18 -0
  10. package/dist/base/Button.js +86 -0
  11. package/dist/base/Button.js.map +1 -0
  12. package/dist/base/ButtonBase.d.ts +21 -0
  13. package/dist/base/ButtonBase.js +51 -0
  14. package/dist/base/ButtonBase.js.map +1 -0
  15. package/dist/base/ButtonGroup.d.ts +24 -0
  16. package/dist/base/ButtonGroup.js +52 -0
  17. package/dist/base/ButtonGroup.js.map +1 -0
  18. package/dist/base/CloseButton.d.ts +15 -0
  19. package/dist/base/CloseButton.js +38 -0
  20. package/dist/base/CloseButton.js.map +1 -0
  21. package/dist/base/Code.d.ts +13 -0
  22. package/dist/base/Code.js +27 -0
  23. package/dist/base/Code.js.map +1 -0
  24. package/dist/base/CodeBlock.d.ts +89 -0
  25. package/dist/base/CodeBlock.js +265 -0
  26. package/dist/base/CodeBlock.js.map +1 -0
  27. package/dist/base/CopyButton.d.ts +40 -0
  28. package/dist/base/CopyButton.js +113 -0
  29. package/dist/base/CopyButton.js.map +1 -0
  30. package/dist/base/Heading.d.ts +49 -0
  31. package/dist/base/Heading.js +122 -0
  32. package/dist/base/Heading.js.map +1 -0
  33. package/dist/base/Icon.d.ts +48 -0
  34. package/dist/base/Icon.js +110 -0
  35. package/dist/base/Icon.js.map +1 -0
  36. package/dist/base/IconButton.d.ts +34 -0
  37. package/dist/base/IconButton.js +81 -0
  38. package/dist/base/IconButton.js.map +1 -0
  39. package/dist/base/IconLinkButton.d.ts +34 -0
  40. package/dist/base/IconLinkButton.js +81 -0
  41. package/dist/base/IconLinkButton.js.map +1 -0
  42. package/dist/base/Indicator.d.ts +126 -0
  43. package/dist/base/Indicator.js +158 -0
  44. package/dist/base/Indicator.js.map +1 -0
  45. package/dist/base/Kbd.d.ts +13 -0
  46. package/dist/base/Kbd.js +34 -0
  47. package/dist/base/Kbd.js.map +1 -0
  48. package/dist/base/Link.d.ts +61 -0
  49. package/dist/base/Link.js +114 -0
  50. package/dist/base/Link.js.map +1 -0
  51. package/dist/base/LinkButton.d.ts +18 -0
  52. package/dist/base/LinkButton.js +109 -0
  53. package/dist/base/LinkButton.js.map +1 -0
  54. package/dist/base/List.d.ts +61 -0
  55. package/dist/base/List.js +116 -0
  56. package/dist/base/List.js.map +1 -0
  57. package/dist/base/Mark.d.ts +13 -0
  58. package/dist/base/Mark.js +23 -0
  59. package/dist/base/Mark.js.map +1 -0
  60. package/dist/base/Spinner.d.ts +20 -0
  61. package/dist/base/Spinner.js +59 -0
  62. package/dist/base/Spinner.js.map +1 -0
  63. package/dist/base/StatusDot.d.ts +48 -0
  64. package/dist/base/StatusDot.js +62 -0
  65. package/dist/base/StatusDot.js.map +1 -0
  66. package/dist/base/Tag.d.ts +29 -0
  67. package/dist/base/Tag.js +92 -0
  68. package/dist/base/Tag.js.map +1 -0
  69. package/dist/base/Text.d.ts +57 -0
  70. package/dist/base/Text.js +74 -0
  71. package/dist/base/Text.js.map +1 -0
  72. package/dist/base/VisuallyHidden.d.ts +13 -0
  73. package/dist/base/VisuallyHidden.js +28 -0
  74. package/dist/base/VisuallyHidden.js.map +1 -0
  75. package/dist/base/badge-styles.d.ts +57 -0
  76. package/dist/base/badge-styles.js +329 -0
  77. package/dist/base/badge-styles.js.map +1 -0
  78. package/dist/base/button-core.d.ts +191 -0
  79. package/dist/base/button-core.js +660 -0
  80. package/dist/base/button-core.js.map +1 -0
  81. package/dist/charts/AreaChart.d.ts +18 -0
  82. package/dist/charts/AreaChart.js +90 -0
  83. package/dist/charts/AreaChart.js.map +1 -0
  84. package/dist/charts/BarChart.d.ts +19 -0
  85. package/dist/charts/BarChart.js +88 -0
  86. package/dist/charts/BarChart.js.map +1 -0
  87. package/dist/charts/ChordChart.d.ts +48 -0
  88. package/dist/charts/ChordChart.js +149 -0
  89. package/dist/charts/ChordChart.js.map +1 -0
  90. package/dist/charts/ComboChart.d.ts +30 -0
  91. package/dist/charts/ComboChart.js +157 -0
  92. package/dist/charts/ComboChart.js.map +1 -0
  93. package/dist/charts/DonutChart.d.ts +65 -0
  94. package/dist/charts/DonutChart.js +162 -0
  95. package/dist/charts/DonutChart.js.map +1 -0
  96. package/dist/charts/FunnelChart.d.ts +69 -0
  97. package/dist/charts/FunnelChart.js +181 -0
  98. package/dist/charts/FunnelChart.js.map +1 -0
  99. package/dist/charts/GraphChart.d.ts +135 -0
  100. package/dist/charts/GraphChart.js +274 -0
  101. package/dist/charts/GraphChart.js.map +1 -0
  102. package/dist/charts/LineChart.d.ts +50 -0
  103. package/dist/charts/LineChart.js +94 -0
  104. package/dist/charts/LineChart.js.map +1 -0
  105. package/dist/charts/MapChart.d.ts +167 -0
  106. package/dist/charts/MapChart.js +627 -0
  107. package/dist/charts/MapChart.js.map +1 -0
  108. package/dist/charts/RadarChart.d.ts +60 -0
  109. package/dist/charts/RadarChart.js +224 -0
  110. package/dist/charts/RadarChart.js.map +1 -0
  111. package/dist/charts/SankeyChart.d.ts +57 -0
  112. package/dist/charts/SankeyChart.js +150 -0
  113. package/dist/charts/SankeyChart.js.map +1 -0
  114. package/dist/charts/ScatterChart.d.ts +18 -0
  115. package/dist/charts/ScatterChart.js +82 -0
  116. package/dist/charts/ScatterChart.js.map +1 -0
  117. package/dist/charts/TimelineChart.d.ts +71 -0
  118. package/dist/charts/TimelineChart.js +267 -0
  119. package/dist/charts/TimelineChart.js.map +1 -0
  120. package/dist/charts/TreemapChart.d.ts +40 -0
  121. package/dist/charts/TreemapChart.js +155 -0
  122. package/dist/charts/TreemapChart.js.map +1 -0
  123. package/dist/charts/WaterfallChart.d.ts +61 -0
  124. package/dist/charts/WaterfallChart.js +167 -0
  125. package/dist/charts/WaterfallChart.js.map +1 -0
  126. package/dist/charts/XYChart.d.ts +206 -0
  127. package/dist/charts/XYChart.js +520 -0
  128. package/dist/charts/XYChart.js.map +1 -0
  129. package/dist/charts/axis-ticks.d.ts +23 -0
  130. package/dist/charts/axis-ticks.js +59 -0
  131. package/dist/charts/axis-ticks.js.map +1 -0
  132. package/dist/charts/export.d.ts +17 -0
  133. package/dist/charts/export.js +65 -0
  134. package/dist/charts/export.js.map +1 -0
  135. package/dist/charts/flow.d.ts +53 -0
  136. package/dist/charts/flow.js +29 -0
  137. package/dist/charts/flow.js.map +1 -0
  138. package/dist/charts/frame.d.ts +147 -0
  139. package/dist/charts/frame.js +358 -0
  140. package/dist/charts/frame.js.map +1 -0
  141. package/dist/charts/index.d.ts +30 -0
  142. package/dist/charts/index.js +24 -0
  143. package/dist/charts/label-layout.d.ts +59 -0
  144. package/dist/charts/label-layout.js +64 -0
  145. package/dist/charts/label-layout.js.map +1 -0
  146. package/dist/charts/series.d.ts +36 -0
  147. package/dist/charts/series.js +60 -0
  148. package/dist/charts/series.js.map +1 -0
  149. package/dist/charts/single.d.ts +41 -0
  150. package/dist/charts/single.js +65 -0
  151. package/dist/charts/single.js.map +1 -0
  152. package/dist/code-editor/CodeEditor.d.ts +18 -0
  153. package/dist/code-editor/CodeEditor.js +57 -0
  154. package/dist/code-editor/CodeEditor.js.map +1 -0
  155. package/dist/code-editor/editor.d.ts +52 -0
  156. package/dist/code-editor/editor.js +225 -0
  157. package/dist/code-editor/editor.js.map +1 -0
  158. package/dist/code-editor/index.d.ts +9 -0
  159. package/dist/code-editor/index.js +3 -0
  160. package/dist/config/Provider.d.ts +52 -0
  161. package/dist/config/Provider.js +111 -0
  162. package/dist/config/Provider.js.map +1 -0
  163. package/dist/config/context.d.ts +90 -0
  164. package/dist/config/context.js +58 -0
  165. package/dist/config/context.js.map +1 -0
  166. package/dist/config/createUi.d.ts +52 -0
  167. package/dist/config/createUi.js +96 -0
  168. package/dist/config/createUi.js.map +1 -0
  169. package/dist/config/defaults.d.ts +71 -0
  170. package/dist/config/defaults.js +45 -0
  171. package/dist/config/defaults.js.map +1 -0
  172. package/dist/config/lang/en-US.d.ts +3 -0
  173. package/dist/config/lang/en-US.js +404 -0
  174. package/dist/config/lang/en-US.js.map +1 -0
  175. package/dist/config/lang/format.d.ts +51 -0
  176. package/dist/config/lang/format.js +120 -0
  177. package/dist/config/lang/format.js.map +1 -0
  178. package/dist/config/lang/lang.d.ts +666 -0
  179. package/dist/config/lang/lang.js +31 -0
  180. package/dist/config/lang/lang.js.map +1 -0
  181. package/dist/config/lang/messages.d.ts +12 -0
  182. package/dist/config/lang/messages.js +36 -0
  183. package/dist/config/lang/messages.js.map +1 -0
  184. package/dist/config/lang/zh-CN.d.ts +3 -0
  185. package/dist/config/lang/zh-CN.js +404 -0
  186. package/dist/config/lang/zh-CN.js.map +1 -0
  187. package/dist/config/pinyin.d.ts +3 -0
  188. package/dist/config/pinyin.js +26 -0
  189. package/dist/config/pinyin.js.map +1 -0
  190. package/dist/config/query-state.d.ts +61 -0
  191. package/dist/config/query-state.js +113 -0
  192. package/dist/config/query-state.js.map +1 -0
  193. package/dist/config/shiki.d.ts +13 -0
  194. package/dist/config/shiki.js +97 -0
  195. package/dist/config/shiki.js.map +1 -0
  196. package/dist/config/styles.d.ts +108 -0
  197. package/dist/config/styles.js +59 -0
  198. package/dist/config/styles.js.map +1 -0
  199. package/dist/config/theme/boot.d.ts +97 -0
  200. package/dist/config/theme/boot.js +90 -0
  201. package/dist/config/theme/boot.js.map +1 -0
  202. package/dist/config/theme/builtin.d.ts +21 -0
  203. package/dist/config/theme/builtin.js +58 -0
  204. package/dist/config/theme/builtin.js.map +1 -0
  205. package/dist/config/theme/coffee.d.ts +84 -0
  206. package/dist/config/theme/coffee.js +102 -0
  207. package/dist/config/theme/coffee.js.map +1 -0
  208. package/dist/config/theme/cyberpunk.d.ts +110 -0
  209. package/dist/config/theme/cyberpunk.js +125 -0
  210. package/dist/config/theme/cyberpunk.js.map +1 -0
  211. package/dist/config/theme/dark.d.ts +90 -0
  212. package/dist/config/theme/dark.js +106 -0
  213. package/dist/config/theme/dark.js.map +1 -0
  214. package/dist/config/theme/festive.d.ts +93 -0
  215. package/dist/config/theme/festive.js +110 -0
  216. package/dist/config/theme/festive.js.map +1 -0
  217. package/dist/config/theme/forest.d.ts +93 -0
  218. package/dist/config/theme/forest.js +109 -0
  219. package/dist/config/theme/forest.js.map +1 -0
  220. package/dist/config/theme/high-contrast.d.ts +103 -0
  221. package/dist/config/theme/high-contrast.js +119 -0
  222. package/dist/config/theme/high-contrast.js.map +1 -0
  223. package/dist/config/theme/lemon.d.ts +103 -0
  224. package/dist/config/theme/lemon.js +119 -0
  225. package/dist/config/theme/lemon.js.map +1 -0
  226. package/dist/config/theme/light.d.ts +107 -0
  227. package/dist/config/theme/light.js +122 -0
  228. package/dist/config/theme/light.js.map +1 -0
  229. package/dist/config/theme/midnight.d.ts +86 -0
  230. package/dist/config/theme/midnight.js +103 -0
  231. package/dist/config/theme/midnight.js.map +1 -0
  232. package/dist/config/theme/ocean.d.ts +103 -0
  233. package/dist/config/theme/ocean.js +119 -0
  234. package/dist/config/theme/ocean.js.map +1 -0
  235. package/dist/config/theme/paper.d.ts +101 -0
  236. package/dist/config/theme/paper.js +117 -0
  237. package/dist/config/theme/paper.js.map +1 -0
  238. package/dist/config/theme/preference.d.ts +34 -0
  239. package/dist/config/theme/preference.js +67 -0
  240. package/dist/config/theme/preference.js.map +1 -0
  241. package/dist/config/theme/sakura.d.ts +103 -0
  242. package/dist/config/theme/sakura.js +119 -0
  243. package/dist/config/theme/sakura.js.map +1 -0
  244. package/dist/config/theme/theme.d.ts +59 -0
  245. package/dist/config/theme/theme.js +68 -0
  246. package/dist/config/theme/theme.js.map +1 -0
  247. package/dist/config/theme/token-names.d.ts +1897 -0
  248. package/dist/config/theme/tokens.d.ts +833 -0
  249. package/dist/config/theme/tokens.js +480 -0
  250. package/dist/config/theme/tokens.js.map +1 -0
  251. package/dist/config/vue-router.d.ts +67 -0
  252. package/dist/config/vue-router.js +143 -0
  253. package/dist/config/vue-router.js.map +1 -0
  254. package/dist/date/Calendar.d.ts +36 -0
  255. package/dist/date/Calendar.js +83 -0
  256. package/dist/date/Calendar.js.map +1 -0
  257. package/dist/date/CalendarBoard.d.ts +79 -0
  258. package/dist/date/CalendarBoard.js +403 -0
  259. package/dist/date/CalendarBoard.js.map +1 -0
  260. package/dist/date/CalendarView.d.ts +86 -0
  261. package/dist/date/CalendarView.js +427 -0
  262. package/dist/date/CalendarView.js.map +1 -0
  263. package/dist/date/Countdown.d.ts +45 -0
  264. package/dist/date/Countdown.js +75 -0
  265. package/dist/date/Countdown.js.map +1 -0
  266. package/dist/date/DateField.d.ts +34 -0
  267. package/dist/date/DateField.js +124 -0
  268. package/dist/date/DateField.js.map +1 -0
  269. package/dist/date/DatePicker.d.ts +41 -0
  270. package/dist/date/DatePicker.js +272 -0
  271. package/dist/date/DatePicker.js.map +1 -0
  272. package/dist/date/DateRangePicker.d.ts +71 -0
  273. package/dist/date/DateRangePicker.js +411 -0
  274. package/dist/date/DateRangePicker.js.map +1 -0
  275. package/dist/date/DateSegmentGroup.d.ts +38 -0
  276. package/dist/date/DateSegmentGroup.js +176 -0
  277. package/dist/date/DateSegmentGroup.js.map +1 -0
  278. package/dist/date/DateTime.d.ts +21 -0
  279. package/dist/date/DateTime.js +39 -0
  280. package/dist/date/DateTime.js.map +1 -0
  281. package/dist/date/QuarterCalendar.d.ts +22 -0
  282. package/dist/date/QuarterCalendar.js +231 -0
  283. package/dist/date/QuarterCalendar.js.map +1 -0
  284. package/dist/date/RangeCalendar.d.ts +24 -0
  285. package/dist/date/RangeCalendar.js +89 -0
  286. package/dist/date/RangeCalendar.js.map +1 -0
  287. package/dist/date/RelativeTime.d.ts +16 -0
  288. package/dist/date/RelativeTime.js +61 -0
  289. package/dist/date/RelativeTime.js.map +1 -0
  290. package/dist/date/SegmentedField.d.ts +60 -0
  291. package/dist/date/SegmentedField.js +175 -0
  292. package/dist/date/SegmentedField.js.map +1 -0
  293. package/dist/date/TimeField.d.ts +36 -0
  294. package/dist/date/TimeField.js +56 -0
  295. package/dist/date/TimeField.js.map +1 -0
  296. package/dist/date/TimePicker.d.ts +25 -0
  297. package/dist/date/TimePicker.js +206 -0
  298. package/dist/date/TimePicker.js.map +1 -0
  299. package/dist/date/calendar-state.d.ts +119 -0
  300. package/dist/date/calendar-state.js +267 -0
  301. package/dist/date/calendar-state.js.map +1 -0
  302. package/dist/date/clock.d.ts +11 -0
  303. package/dist/date/clock.js +37 -0
  304. package/dist/date/clock.js.map +1 -0
  305. package/dist/date/date-locale.d.ts +67 -0
  306. package/dist/date/date-locale.js +89 -0
  307. package/dist/date/date-locale.js.map +1 -0
  308. package/dist/date/date-segments.d.ts +132 -0
  309. package/dist/date/date-segments.js +410 -0
  310. package/dist/date/date-segments.js.map +1 -0
  311. package/dist/date/picker-popover.d.ts +88 -0
  312. package/dist/date/picker-popover.js +126 -0
  313. package/dist/date/picker-popover.js.map +1 -0
  314. package/dist/diagram/Diagram.d.ts +223 -0
  315. package/dist/diagram/Diagram.js +1121 -0
  316. package/dist/diagram/Diagram.js.map +1 -0
  317. package/dist/diagram/DiagramControls.d.ts +35 -0
  318. package/dist/diagram/DiagramControls.js +114 -0
  319. package/dist/diagram/DiagramControls.js.map +1 -0
  320. package/dist/diagram/DiagramLanes.d.ts +49 -0
  321. package/dist/diagram/DiagramLanes.js +92 -0
  322. package/dist/diagram/DiagramLanes.js.map +1 -0
  323. package/dist/diagram/DiagramMinimap.d.ts +39 -0
  324. package/dist/diagram/DiagramMinimap.js +133 -0
  325. package/dist/diagram/DiagramMinimap.js.map +1 -0
  326. package/dist/diagram/DiagramNode.d.ts +65 -0
  327. package/dist/diagram/DiagramNode.js +142 -0
  328. package/dist/diagram/DiagramNode.js.map +1 -0
  329. package/dist/diagram/controller.d.ts +68 -0
  330. package/dist/diagram/controller.js +117 -0
  331. package/dist/diagram/controller.js.map +1 -0
  332. package/dist/diagram/export.d.ts +14 -0
  333. package/dist/diagram/export.js +115 -0
  334. package/dist/diagram/export.js.map +1 -0
  335. package/dist/diagram/geometry.d.ts +65 -0
  336. package/dist/diagram/geometry.js +219 -0
  337. package/dist/diagram/geometry.js.map +1 -0
  338. package/dist/diagram/index.d.ts +20 -0
  339. package/dist/diagram/index.js +12 -0
  340. package/dist/diagram/layout.d.ts +57 -0
  341. package/dist/diagram/layout.js +50 -0
  342. package/dist/diagram/layout.js.map +1 -0
  343. package/dist/diagram/messages.d.ts +28 -0
  344. package/dist/diagram/messages.js +30 -0
  345. package/dist/diagram/messages.js.map +1 -0
  346. package/dist/diagram/route.d.ts +81 -0
  347. package/dist/diagram/route.js +327 -0
  348. package/dist/diagram/route.js.map +1 -0
  349. package/dist/display/Accordion.d.ts +71 -0
  350. package/dist/display/Accordion.js +219 -0
  351. package/dist/display/Accordion.js.map +1 -0
  352. package/dist/display/AnimatedNumber.d.ts +44 -0
  353. package/dist/display/AnimatedNumber.js +97 -0
  354. package/dist/display/AnimatedNumber.js.map +1 -0
  355. package/dist/display/Avatar.d.ts +74 -0
  356. package/dist/display/Avatar.js +158 -0
  357. package/dist/display/Avatar.js.map +1 -0
  358. package/dist/display/AvatarGroup.d.ts +29 -0
  359. package/dist/display/AvatarGroup.js +67 -0
  360. package/dist/display/AvatarGroup.js.map +1 -0
  361. package/dist/display/Card.d.ts +219 -0
  362. package/dist/display/Card.js +319 -0
  363. package/dist/display/Card.js.map +1 -0
  364. package/dist/display/Checklist.d.ts +93 -0
  365. package/dist/display/Checklist.js +260 -0
  366. package/dist/display/Checklist.js.map +1 -0
  367. package/dist/display/Collapse.d.ts +24 -0
  368. package/dist/display/Collapse.js +65 -0
  369. package/dist/display/Collapse.js.map +1 -0
  370. package/dist/display/Collapsible.d.ts +12 -0
  371. package/dist/display/Collapsible.js +41 -0
  372. package/dist/display/Collapsible.js.map +1 -0
  373. package/dist/display/Descriptions.d.ts +88 -0
  374. package/dist/display/Descriptions.js +185 -0
  375. package/dist/display/Descriptions.js.map +1 -0
  376. package/dist/display/Ellipsis.d.ts +29 -0
  377. package/dist/display/Ellipsis.js +111 -0
  378. package/dist/display/Ellipsis.js.map +1 -0
  379. package/dist/display/FieldCompare.d.ts +58 -0
  380. package/dist/display/FieldCompare.js +205 -0
  381. package/dist/display/FieldCompare.js.map +1 -0
  382. package/dist/display/Gauge.d.ts +60 -0
  383. package/dist/display/Gauge.js +215 -0
  384. package/dist/display/Gauge.js.map +1 -0
  385. package/dist/display/Image.d.ts +87 -0
  386. package/dist/display/Image.js +212 -0
  387. package/dist/display/Image.js.map +1 -0
  388. package/dist/display/ItemList.d.ts +69 -0
  389. package/dist/display/ItemList.js +147 -0
  390. package/dist/display/ItemList.js.map +1 -0
  391. package/dist/display/Marquee.d.ts +59 -0
  392. package/dist/display/Marquee.js +155 -0
  393. package/dist/display/Marquee.js.map +1 -0
  394. package/dist/display/ProportionBar.d.ts +55 -0
  395. package/dist/display/ProportionBar.js +99 -0
  396. package/dist/display/ProportionBar.js.map +1 -0
  397. package/dist/display/Sortable.d.ts +43 -0
  398. package/dist/display/Sortable.js +163 -0
  399. package/dist/display/Sortable.js.map +1 -0
  400. package/dist/display/Sparkline.d.ts +48 -0
  401. package/dist/display/Sparkline.js +130 -0
  402. package/dist/display/Sparkline.js.map +1 -0
  403. package/dist/display/Stat.d.ts +105 -0
  404. package/dist/display/Stat.js +268 -0
  405. package/dist/display/Stat.js.map +1 -0
  406. package/dist/display/Timeline.d.ts +106 -0
  407. package/dist/display/Timeline.js +257 -0
  408. package/dist/display/Timeline.js.map +1 -0
  409. package/dist/display/Tree.d.ts +132 -0
  410. package/dist/display/Tree.js +645 -0
  411. package/dist/display/Tree.js.map +1 -0
  412. package/dist/display/VirtualList.d.ts +80 -0
  413. package/dist/display/VirtualList.js +166 -0
  414. package/dist/display/VirtualList.js.map +1 -0
  415. package/dist/display/Watermark.d.ts +39 -0
  416. package/dist/display/Watermark.js +130 -0
  417. package/dist/display/Watermark.js.map +1 -0
  418. package/dist/docs-kit/CodeGroup.d.ts +29 -0
  419. package/dist/docs-kit/CodeGroup.js +81 -0
  420. package/dist/docs-kit/CodeGroup.js.map +1 -0
  421. package/dist/docs-kit/CodePreview.d.ts +60 -0
  422. package/dist/docs-kit/CodePreview.js +183 -0
  423. package/dist/docs-kit/CodePreview.js.map +1 -0
  424. package/dist/docs-kit/ColorSwatch.d.ts +28 -0
  425. package/dist/docs-kit/ColorSwatch.js +85 -0
  426. package/dist/docs-kit/ColorSwatch.js.map +1 -0
  427. package/dist/docs-kit/PropsTable.d.ts +73 -0
  428. package/dist/docs-kit/PropsTable.js +122 -0
  429. package/dist/docs-kit/PropsTable.js.map +1 -0
  430. package/dist/docs-kit/index.d.ts +13 -0
  431. package/dist/docs-kit/index.js +6 -0
  432. package/dist/docs-kit/messages.d.ts +25 -0
  433. package/dist/docs-kit/messages.js +30 -0
  434. package/dist/docs-kit/messages.js.map +1 -0
  435. package/dist/feedback/Alert.d.ts +83 -0
  436. package/dist/feedback/Alert.js +179 -0
  437. package/dist/feedback/Alert.js.map +1 -0
  438. package/dist/feedback/Banner.d.ts +60 -0
  439. package/dist/feedback/Banner.js +122 -0
  440. package/dist/feedback/Banner.js.map +1 -0
  441. package/dist/feedback/Empty.d.ts +38 -0
  442. package/dist/feedback/Empty.js +114 -0
  443. package/dist/feedback/Empty.js.map +1 -0
  444. package/dist/feedback/LoadingBar.d.ts +45 -0
  445. package/dist/feedback/LoadingBar.js +124 -0
  446. package/dist/feedback/LoadingBar.js.map +1 -0
  447. package/dist/feedback/LoadingOverlay.d.ts +29 -0
  448. package/dist/feedback/LoadingOverlay.js +70 -0
  449. package/dist/feedback/LoadingOverlay.js.map +1 -0
  450. package/dist/feedback/Progress.d.ts +215 -0
  451. package/dist/feedback/Progress.js +437 -0
  452. package/dist/feedback/Progress.js.map +1 -0
  453. package/dist/feedback/Result.d.ts +69 -0
  454. package/dist/feedback/Result.js +165 -0
  455. package/dist/feedback/Result.js.map +1 -0
  456. package/dist/feedback/Skeleton.d.ts +50 -0
  457. package/dist/feedback/Skeleton.js +100 -0
  458. package/dist/feedback/Skeleton.js.map +1 -0
  459. package/dist/feedback/SkeletonText.d.ts +25 -0
  460. package/dist/feedback/SkeletonText.js +40 -0
  461. package/dist/feedback/SkeletonText.js.map +1 -0
  462. package/dist/feedback/Toast.d.ts +204 -0
  463. package/dist/feedback/Toast.js +572 -0
  464. package/dist/feedback/Toast.js.map +1 -0
  465. package/dist/form/Field.d.ts +165 -0
  466. package/dist/form/Field.js +338 -0
  467. package/dist/form/Field.js.map +1 -0
  468. package/dist/form/Form.d.ts +14 -0
  469. package/dist/form/Form.js +66 -0
  470. package/dist/form/Form.js.map +1 -0
  471. package/dist/form/FormErrorSummary.d.ts +23 -0
  472. package/dist/form/FormErrorSummary.js +102 -0
  473. package/dist/form/FormErrorSummary.js.map +1 -0
  474. package/dist/form/FormSection.d.ts +66 -0
  475. package/dist/form/FormSection.js +227 -0
  476. package/dist/form/FormSection.js.map +1 -0
  477. package/dist/form/FormValue.d.ts +17 -0
  478. package/dist/form/FormValue.js +40 -0
  479. package/dist/form/FormValue.js.map +1 -0
  480. package/dist/form/field-layout.d.ts +34 -0
  481. package/dist/form/field-layout.js +39 -0
  482. package/dist/form/field-layout.js.map +1 -0
  483. package/dist/form/form-constraints.d.ts +38 -0
  484. package/dist/form/form-constraints.js +131 -0
  485. package/dist/form/form-constraints.js.map +1 -0
  486. package/dist/form/leave-confirmation.d.ts +9 -0
  487. package/dist/form/leave-confirmation.js +31 -0
  488. package/dist/form/leave-confirmation.js.map +1 -0
  489. package/dist/form/schemas.d.ts +52 -0
  490. package/dist/form/schemas.js +97 -0
  491. package/dist/form/schemas.js.map +1 -0
  492. package/dist/form/useForm.d.ts +195 -0
  493. package/dist/form/useForm.js +416 -0
  494. package/dist/form/useForm.js.map +1 -0
  495. package/dist/index.d.ts +285 -0
  496. package/dist/index.js +285 -0
  497. package/dist/input/Autocomplete.d.ts +14 -0
  498. package/dist/input/Autocomplete.js +35 -0
  499. package/dist/input/Autocomplete.js.map +1 -0
  500. package/dist/input/Cascader.d.ts +86 -0
  501. package/dist/input/Cascader.js +593 -0
  502. package/dist/input/Cascader.js.map +1 -0
  503. package/dist/input/CharacterCount.d.ts +21 -0
  504. package/dist/input/CharacterCount.js +47 -0
  505. package/dist/input/CharacterCount.js.map +1 -0
  506. package/dist/input/Checkbox.d.ts +93 -0
  507. package/dist/input/Checkbox.js +250 -0
  508. package/dist/input/Checkbox.js.map +1 -0
  509. package/dist/input/ColorField.d.ts +37 -0
  510. package/dist/input/ColorField.js +143 -0
  511. package/dist/input/ColorField.js.map +1 -0
  512. package/dist/input/Combobox.d.ts +75 -0
  513. package/dist/input/Combobox.js +321 -0
  514. package/dist/input/Combobox.js.map +1 -0
  515. package/dist/input/ConditionBuilder.d.ts +55 -0
  516. package/dist/input/ConditionBuilder.js +471 -0
  517. package/dist/input/ConditionBuilder.js.map +1 -0
  518. package/dist/input/ControlGroup.d.ts +26 -0
  519. package/dist/input/ControlGroup.js +50 -0
  520. package/dist/input/ControlGroup.js.map +1 -0
  521. package/dist/input/FileDrop.d.ts +49 -0
  522. package/dist/input/FileDrop.js +201 -0
  523. package/dist/input/FileDrop.js.map +1 -0
  524. package/dist/input/ListPopover.d.ts +39 -0
  525. package/dist/input/ListPopover.js +81 -0
  526. package/dist/input/ListPopover.js.map +1 -0
  527. package/dist/input/Listbox.d.ts +91 -0
  528. package/dist/input/Listbox.js +408 -0
  529. package/dist/input/Listbox.js.map +1 -0
  530. package/dist/input/Mentions.d.ts +74 -0
  531. package/dist/input/Mentions.js +287 -0
  532. package/dist/input/Mentions.js.map +1 -0
  533. package/dist/input/NumberField.d.ts +64 -0
  534. package/dist/input/NumberField.js +288 -0
  535. package/dist/input/NumberField.js.map +1 -0
  536. package/dist/input/NumberRangeField.d.ts +58 -0
  537. package/dist/input/NumberRangeField.js +157 -0
  538. package/dist/input/NumberRangeField.js.map +1 -0
  539. package/dist/input/OtpField.d.ts +58 -0
  540. package/dist/input/OtpField.js +200 -0
  541. package/dist/input/OtpField.js.map +1 -0
  542. package/dist/input/PeoplePicker.d.ts +42 -0
  543. package/dist/input/PeoplePicker.js +185 -0
  544. package/dist/input/PeoplePicker.js.map +1 -0
  545. package/dist/input/PeoplePickerPanel.d.ts +42 -0
  546. package/dist/input/PeoplePickerPanel.js +357 -0
  547. package/dist/input/PeoplePickerPanel.js.map +1 -0
  548. package/dist/input/Radio.d.ts +90 -0
  549. package/dist/input/Radio.js +211 -0
  550. package/dist/input/Radio.js.map +1 -0
  551. package/dist/input/Rating.d.ts +62 -0
  552. package/dist/input/Rating.js +225 -0
  553. package/dist/input/Rating.js.map +1 -0
  554. package/dist/input/Select.d.ts +97 -0
  555. package/dist/input/Select.js +455 -0
  556. package/dist/input/Select.js.map +1 -0
  557. package/dist/input/SelectedTags.d.ts +28 -0
  558. package/dist/input/SelectedTags.js +81 -0
  559. package/dist/input/SelectedTags.js.map +1 -0
  560. package/dist/input/Slider.d.ts +99 -0
  561. package/dist/input/Slider.js +343 -0
  562. package/dist/input/Slider.js.map +1 -0
  563. package/dist/input/Switch.d.ts +63 -0
  564. package/dist/input/Switch.js +198 -0
  565. package/dist/input/Switch.js.map +1 -0
  566. package/dist/input/TagsInput.d.ts +70 -0
  567. package/dist/input/TagsInput.js +314 -0
  568. package/dist/input/TagsInput.js.map +1 -0
  569. package/dist/input/TextField.d.ts +51 -0
  570. package/dist/input/TextField.js +185 -0
  571. package/dist/input/TextField.js.map +1 -0
  572. package/dist/input/Textarea.d.ts +50 -0
  573. package/dist/input/Textarea.js +146 -0
  574. package/dist/input/Textarea.js.map +1 -0
  575. package/dist/input/ToggleGroup.d.ts +82 -0
  576. package/dist/input/ToggleGroup.js +211 -0
  577. package/dist/input/ToggleGroup.js.map +1 -0
  578. package/dist/input/Transfer.d.ts +67 -0
  579. package/dist/input/Transfer.js +407 -0
  580. package/dist/input/Transfer.js.map +1 -0
  581. package/dist/input/TreeSelect.d.ts +94 -0
  582. package/dist/input/TreeSelect.js +412 -0
  583. package/dist/input/TreeSelect.js.map +1 -0
  584. package/dist/input/Upload.d.ts +143 -0
  585. package/dist/input/Upload.js +598 -0
  586. package/dist/input/Upload.js.map +1 -0
  587. package/dist/input/choice-styles.d.ts +117 -0
  588. package/dist/input/choice-styles.js +176 -0
  589. package/dist/input/choice-styles.js.map +1 -0
  590. package/dist/input/condition.d.ts +153 -0
  591. package/dist/input/condition.js +187 -0
  592. package/dist/input/condition.js.map +1 -0
  593. package/dist/input/control.d.ts +160 -0
  594. package/dist/input/control.js +236 -0
  595. package/dist/input/control.js.map +1 -0
  596. package/dist/input/list-state.d.ts +118 -0
  597. package/dist/input/list-state.js +186 -0
  598. package/dist/input/list-state.js.map +1 -0
  599. package/dist/input/people.d.ts +66 -0
  600. package/dist/input/people.js +47 -0
  601. package/dist/input/people.js.map +1 -0
  602. package/dist/input/remote-items.d.ts +22 -0
  603. package/dist/input/remote-items.js +41 -0
  604. package/dist/input/remote-items.js.map +1 -0
  605. package/dist/input/text-format.d.ts +46 -0
  606. package/dist/input/text-format.js +64 -0
  607. package/dist/input/text-format.js.map +1 -0
  608. package/dist/layout/Affix.d.ts +32 -0
  609. package/dist/layout/Affix.js +81 -0
  610. package/dist/layout/Affix.js.map +1 -0
  611. package/dist/layout/AsideLayout.d.ts +45 -0
  612. package/dist/layout/AsideLayout.js +69 -0
  613. package/dist/layout/AsideLayout.js.map +1 -0
  614. package/dist/layout/BackTop.d.ts +16 -0
  615. package/dist/layout/BackTop.js +83 -0
  616. package/dist/layout/BackTop.js.map +1 -0
  617. package/dist/layout/Container.d.ts +60 -0
  618. package/dist/layout/Container.js +62 -0
  619. package/dist/layout/Container.js.map +1 -0
  620. package/dist/layout/Flex.d.ts +116 -0
  621. package/dist/layout/Flex.js +109 -0
  622. package/dist/layout/Flex.js.map +1 -0
  623. package/dist/layout/Grid.d.ts +139 -0
  624. package/dist/layout/Grid.js +168 -0
  625. package/dist/layout/Grid.js.map +1 -0
  626. package/dist/layout/PageScrollbar.d.ts +20 -0
  627. package/dist/layout/PageScrollbar.js +49 -0
  628. package/dist/layout/PageScrollbar.js.map +1 -0
  629. package/dist/layout/Prose.d.ts +19 -0
  630. package/dist/layout/Prose.js +37 -0
  631. package/dist/layout/Prose.js.map +1 -0
  632. package/dist/layout/ResizeHandle.d.ts +28 -0
  633. package/dist/layout/ResizeHandle.js +94 -0
  634. package/dist/layout/ResizeHandle.js.map +1 -0
  635. package/dist/layout/ScrollArea.d.ts +99 -0
  636. package/dist/layout/ScrollArea.js +344 -0
  637. package/dist/layout/ScrollArea.js.map +1 -0
  638. package/dist/layout/Separator.d.ts +47 -0
  639. package/dist/layout/Separator.js +96 -0
  640. package/dist/layout/Separator.js.map +1 -0
  641. package/dist/layout/Splitter.d.ts +75 -0
  642. package/dist/layout/Splitter.js +236 -0
  643. package/dist/layout/Splitter.js.map +1 -0
  644. package/dist/layout/ViewportFill.d.ts +26 -0
  645. package/dist/layout/ViewportFill.js +59 -0
  646. package/dist/layout/ViewportFill.js.map +1 -0
  647. package/dist/navigation/Breadcrumbs.d.ts +59 -0
  648. package/dist/navigation/Breadcrumbs.js +150 -0
  649. package/dist/navigation/Breadcrumbs.js.map +1 -0
  650. package/dist/navigation/NavBar.d.ts +35 -0
  651. package/dist/navigation/NavBar.js +182 -0
  652. package/dist/navigation/NavBar.js.map +1 -0
  653. package/dist/navigation/NavList.d.ts +112 -0
  654. package/dist/navigation/NavList.js +375 -0
  655. package/dist/navigation/NavList.js.map +1 -0
  656. package/dist/navigation/PageJump.d.ts +27 -0
  657. package/dist/navigation/PageJump.js +77 -0
  658. package/dist/navigation/PageJump.js.map +1 -0
  659. package/dist/navigation/PageSizeSelect.d.ts +19 -0
  660. package/dist/navigation/PageSizeSelect.js +65 -0
  661. package/dist/navigation/PageSizeSelect.js.map +1 -0
  662. package/dist/navigation/Pager.d.ts +30 -0
  663. package/dist/navigation/Pager.js +111 -0
  664. package/dist/navigation/Pager.js.map +1 -0
  665. package/dist/navigation/Pagination.d.ts +51 -0
  666. package/dist/navigation/Pagination.js +157 -0
  667. package/dist/navigation/Pagination.js.map +1 -0
  668. package/dist/navigation/PaginationBar.d.ts +54 -0
  669. package/dist/navigation/PaginationBar.js +125 -0
  670. package/dist/navigation/PaginationBar.js.map +1 -0
  671. package/dist/navigation/SkipLink.d.ts +16 -0
  672. package/dist/navigation/SkipLink.js +58 -0
  673. package/dist/navigation/SkipLink.js.map +1 -0
  674. package/dist/navigation/Steps.d.ts +93 -0
  675. package/dist/navigation/Steps.js +198 -0
  676. package/dist/navigation/Steps.js.map +1 -0
  677. package/dist/navigation/TableOfContents.d.ts +32 -0
  678. package/dist/navigation/TableOfContents.js +119 -0
  679. package/dist/navigation/TableOfContents.js.map +1 -0
  680. package/dist/navigation/Tabs.d.ts +208 -0
  681. package/dist/navigation/Tabs.js +626 -0
  682. package/dist/navigation/Tabs.js.map +1 -0
  683. package/dist/navigation/Toolbar.d.ts +39 -0
  684. package/dist/navigation/Toolbar.js +67 -0
  685. package/dist/navigation/Toolbar.js.map +1 -0
  686. package/dist/overlay/AlertDialog.d.ts +43 -0
  687. package/dist/overlay/AlertDialog.js +106 -0
  688. package/dist/overlay/AlertDialog.js.map +1 -0
  689. package/dist/overlay/CommandPalette.d.ts +64 -0
  690. package/dist/overlay/CommandPalette.js +250 -0
  691. package/dist/overlay/CommandPalette.js.map +1 -0
  692. package/dist/overlay/ContextMenu.d.ts +21 -0
  693. package/dist/overlay/ContextMenu.js +76 -0
  694. package/dist/overlay/ContextMenu.js.map +1 -0
  695. package/dist/overlay/Dialog.d.ts +70 -0
  696. package/dist/overlay/Dialog.js +91 -0
  697. package/dist/overlay/Dialog.js.map +1 -0
  698. package/dist/overlay/Drawer.d.ts +186 -0
  699. package/dist/overlay/Drawer.js +214 -0
  700. package/dist/overlay/Drawer.js.map +1 -0
  701. package/dist/overlay/HoverCard.d.ts +48 -0
  702. package/dist/overlay/HoverCard.js +86 -0
  703. package/dist/overlay/HoverCard.js.map +1 -0
  704. package/dist/overlay/Lightbox.d.ts +57 -0
  705. package/dist/overlay/Lightbox.js +374 -0
  706. package/dist/overlay/Lightbox.js.map +1 -0
  707. package/dist/overlay/Menu.d.ts +218 -0
  708. package/dist/overlay/Menu.js +816 -0
  709. package/dist/overlay/Menu.js.map +1 -0
  710. package/dist/overlay/ModalCore.d.ts +132 -0
  711. package/dist/overlay/ModalCore.js +274 -0
  712. package/dist/overlay/ModalCore.js.map +1 -0
  713. package/dist/overlay/Popconfirm.d.ts +49 -0
  714. package/dist/overlay/Popconfirm.js +167 -0
  715. package/dist/overlay/Popconfirm.js.map +1 -0
  716. package/dist/overlay/Popover.d.ts +40 -0
  717. package/dist/overlay/Popover.js +96 -0
  718. package/dist/overlay/Popover.js.map +1 -0
  719. package/dist/overlay/Tooltip.d.ts +47 -0
  720. package/dist/overlay/Tooltip.js +86 -0
  721. package/dist/overlay/Tooltip.js.map +1 -0
  722. package/dist/overlay/Tour.d.ts +74 -0
  723. package/dist/overlay/Tour.js +309 -0
  724. package/dist/overlay/Tour.js.map +1 -0
  725. package/dist/overlay/detached.d.ts +40 -0
  726. package/dist/overlay/detached.js +109 -0
  727. package/dist/overlay/detached.js.map +1 -0
  728. package/dist/patterns/ActionBar.d.ts +29 -0
  729. package/dist/patterns/ActionBar.js +75 -0
  730. package/dist/patterns/ActionBar.js.map +1 -0
  731. package/dist/patterns/AppShell.d.ts +168 -0
  732. package/dist/patterns/AppShell.js +620 -0
  733. package/dist/patterns/AppShell.js.map +1 -0
  734. package/dist/patterns/CommentThread.d.ts +128 -0
  735. package/dist/patterns/CommentThread.js +386 -0
  736. package/dist/patterns/CommentThread.js.map +1 -0
  737. package/dist/patterns/DataImport.d.ts +72 -0
  738. package/dist/patterns/DataImport.js +486 -0
  739. package/dist/patterns/DataImport.js.map +1 -0
  740. package/dist/patterns/DeadlineBadge.d.ts +21 -0
  741. package/dist/patterns/DeadlineBadge.js +76 -0
  742. package/dist/patterns/DeadlineBadge.js.map +1 -0
  743. package/dist/patterns/FilterBar.d.ts +66 -0
  744. package/dist/patterns/FilterBar.js +254 -0
  745. package/dist/patterns/FilterBar.js.map +1 -0
  746. package/dist/patterns/KanbanBoard.d.ts +79 -0
  747. package/dist/patterns/KanbanBoard.js +294 -0
  748. package/dist/patterns/KanbanBoard.js.map +1 -0
  749. package/dist/patterns/NotificationCenter.d.ts +110 -0
  750. package/dist/patterns/NotificationCenter.js +342 -0
  751. package/dist/patterns/NotificationCenter.js.map +1 -0
  752. package/dist/patterns/PageTabs.d.ts +30 -0
  753. package/dist/patterns/PageTabs.js +97 -0
  754. package/dist/patterns/PageTabs.js.map +1 -0
  755. package/dist/patterns/QueryTable.d.ts +67 -0
  756. package/dist/patterns/QueryTable.js +301 -0
  757. package/dist/patterns/QueryTable.js.map +1 -0
  758. package/dist/patterns/StepsForm.d.ts +49 -0
  759. package/dist/patterns/StepsForm.js +130 -0
  760. package/dist/patterns/StepsForm.js.map +1 -0
  761. package/dist/patterns/ThemeSwitcher.d.ts +20 -0
  762. package/dist/patterns/ThemeSwitcher.js +102 -0
  763. package/dist/patterns/ThemeSwitcher.js.map +1 -0
  764. package/dist/patterns/form-dialog.d.ts +62 -0
  765. package/dist/patterns/form-dialog.js +143 -0
  766. package/dist/patterns/form-dialog.js.map +1 -0
  767. package/dist/patterns/index.d.ts +24 -0
  768. package/dist/patterns/index.js +15 -0
  769. package/dist/patterns/messages.d.ts +174 -0
  770. package/dist/patterns/messages.js +186 -0
  771. package/dist/patterns/messages.js.map +1 -0
  772. package/dist/table/ColumnHeaderActions.d.ts +71 -0
  773. package/dist/table/ColumnHeaderActions.js +247 -0
  774. package/dist/table/ColumnHeaderActions.js.map +1 -0
  775. package/dist/table/ColumnResizer.d.ts +12 -0
  776. package/dist/table/ColumnResizer.js +32 -0
  777. package/dist/table/ColumnResizer.js.map +1 -0
  778. package/dist/table/ColumnSettings.d.ts +34 -0
  779. package/dist/table/ColumnSettings.js +136 -0
  780. package/dist/table/ColumnSettings.js.map +1 -0
  781. package/dist/table/ColumnTable.d.ts +51 -0
  782. package/dist/table/ColumnTable.js +140 -0
  783. package/dist/table/ColumnTable.js.map +1 -0
  784. package/dist/table/DataTable.d.ts +44 -0
  785. package/dist/table/DataTable.js +453 -0
  786. package/dist/table/DataTable.js.map +1 -0
  787. package/dist/table/DataTableView.d.ts +328 -0
  788. package/dist/table/DataTableView.js +963 -0
  789. package/dist/table/DataTableView.js.map +1 -0
  790. package/dist/table/PivotTable.d.ts +66 -0
  791. package/dist/table/PivotTable.js +122 -0
  792. package/dist/table/PivotTable.js.map +1 -0
  793. package/dist/table/SelectionBar.d.ts +29 -0
  794. package/dist/table/SelectionBar.js +86 -0
  795. package/dist/table/SelectionBar.js.map +1 -0
  796. package/dist/table/Table.d.ts +169 -0
  797. package/dist/table/Table.js +304 -0
  798. package/dist/table/Table.js.map +1 -0
  799. package/dist/table/TreeDataTable.d.ts +36 -0
  800. package/dist/table/TreeDataTable.js +168 -0
  801. package/dist/table/TreeDataTable.js.map +1 -0
  802. package/dist/table/column-display.d.ts +20 -0
  803. package/dist/table/column-display.js +43 -0
  804. package/dist/table/column-display.js.map +1 -0
  805. package/dist/table/columns.d.ts +244 -0
  806. package/dist/table/columns.js +271 -0
  807. package/dist/table/columns.js.map +1 -0
  808. package/dist/table/csv.d.ts +24 -0
  809. package/dist/table/csv.js +35 -0
  810. package/dist/table/csv.js.map +1 -0
  811. package/dist/table/pivot.d.ts +66 -0
  812. package/dist/table/pivot.js +85 -0
  813. package/dist/table/pivot.js.map +1 -0
  814. package/dist/table/sheet.d.ts +44 -0
  815. package/dist/table/sheet.js +78 -0
  816. package/dist/table/sheet.js.map +1 -0
  817. package/dist/table/table-styles.d.ts +136 -0
  818. package/dist/table/table-styles.js +403 -0
  819. package/dist/table/table-styles.js.map +1 -0
  820. package/dist/table/use-table-query.d.ts +89 -0
  821. package/dist/table/use-table-query.js +194 -0
  822. package/dist/table/use-table-query.js.map +1 -0
  823. package/dist/theme-customize/ThemeCustomizer.d.ts +63 -0
  824. package/dist/theme-customize/ThemeCustomizer.js +361 -0
  825. package/dist/theme-customize/ThemeCustomizer.js.map +1 -0
  826. package/dist/theme-customize/ThemeThumbnail.d.ts +20 -0
  827. package/dist/theme-customize/ThemeThumbnail.js +82 -0
  828. package/dist/theme-customize/ThemeThumbnail.js.map +1 -0
  829. package/dist/theme-customize/contrast.d.ts +27 -0
  830. package/dist/theme-customize/contrast.js +251 -0
  831. package/dist/theme-customize/contrast.js.map +1 -0
  832. package/dist/theme-customize/customize.d.ts +65 -0
  833. package/dist/theme-customize/customize.js +105 -0
  834. package/dist/theme-customize/customize.js.map +1 -0
  835. package/dist/theme-customize/design-tokens.d.ts +31 -0
  836. package/dist/theme-customize/design-tokens.js +183 -0
  837. package/dist/theme-customize/design-tokens.js.map +1 -0
  838. package/dist/theme-customize/index.d.ts +20 -0
  839. package/dist/theme-customize/index.js +9 -0
  840. package/dist/theme-customize/messages.d.ts +74 -0
  841. package/dist/theme-customize/messages.js +142 -0
  842. package/dist/theme-customize/messages.js.map +1 -0
  843. package/dist/theme-customize/palette.d.ts +898 -0
  844. package/dist/theme-customize/palette.js +111 -0
  845. package/dist/theme-customize/palette.js.map +1 -0
  846. package/dist/theme-customize/token-catalog.d.ts +20 -0
  847. package/dist/theme-customize/token-catalog.js +836 -0
  848. package/dist/theme-customize/token-catalog.js.map +1 -0
  849. package/dist/three/background/AuroraBackground.d.ts +30 -0
  850. package/dist/three/background/AuroraBackground.js +80 -0
  851. package/dist/three/background/AuroraBackground.js.map +1 -0
  852. package/dist/three/background/MeshGradient.d.ts +28 -0
  853. package/dist/three/background/MeshGradient.js +76 -0
  854. package/dist/three/background/MeshGradient.js.map +1 -0
  855. package/dist/three/background/ShaderBackground.d.ts +25 -0
  856. package/dist/three/background/ShaderBackground.js +107 -0
  857. package/dist/three/background/ShaderBackground.js.map +1 -0
  858. package/dist/three/core/EffectSurface.d.ts +41 -0
  859. package/dist/three/core/EffectSurface.js +62 -0
  860. package/dist/three/core/EffectSurface.js.map +1 -0
  861. package/dist/three/core/ThreeCanvas.d.ts +39 -0
  862. package/dist/three/core/ThreeCanvas.js +77 -0
  863. package/dist/three/core/ThreeCanvas.js.map +1 -0
  864. package/dist/three/core/dispose.d.ts +9 -0
  865. package/dist/three/core/dispose.js +26 -0
  866. package/dist/three/core/dispose.js.map +1 -0
  867. package/dist/three/core/orbit.d.ts +31 -0
  868. package/dist/three/core/orbit.js +83 -0
  869. package/dist/three/core/orbit.js.map +1 -0
  870. package/dist/three/core/quality.d.ts +59 -0
  871. package/dist/three/core/quality.js +80 -0
  872. package/dist/three/core/quality.js.map +1 -0
  873. package/dist/three/core/renderer.d.ts +110 -0
  874. package/dist/three/core/renderer.js +303 -0
  875. package/dist/three/core/renderer.js.map +1 -0
  876. package/dist/three/core/shaders.d.ts +19 -0
  877. package/dist/three/core/shaders.js +100 -0
  878. package/dist/three/core/shaders.js.map +1 -0
  879. package/dist/three/core/theme-colors.d.ts +30 -0
  880. package/dist/three/core/theme-colors.js +113 -0
  881. package/dist/three/core/theme-colors.js.map +1 -0
  882. package/dist/three/effects/Confetti.d.ts +62 -0
  883. package/dist/three/effects/Confetti.js +242 -0
  884. package/dist/three/effects/Confetti.js.map +1 -0
  885. package/dist/three/effects/ParticleField.d.ts +39 -0
  886. package/dist/three/effects/ParticleField.js +266 -0
  887. package/dist/three/effects/ParticleField.js.map +1 -0
  888. package/dist/three/effects/WaveGrid.d.ts +37 -0
  889. package/dist/three/effects/WaveGrid.js +130 -0
  890. package/dist/three/effects/WaveGrid.js.map +1 -0
  891. package/dist/three/globe/Globe.d.ts +70 -0
  892. package/dist/three/globe/Globe.js +337 -0
  893. package/dist/three/globe/Globe.js.map +1 -0
  894. package/dist/three/globe/land.d.ts +9 -0
  895. package/dist/three/globe/land.js +14 -0
  896. package/dist/three/globe/land.js.map +1 -0
  897. package/dist/three/index.d.ts +24 -0
  898. package/dist/three/index.js +18 -0
  899. package/dist/three/model/ModelViewer.d.ts +63 -0
  900. package/dist/three/model/ModelViewer.js +193 -0
  901. package/dist/three/model/ModelViewer.js.map +1 -0
  902. package/dist/utils/data/clone.d.ts +8 -0
  903. package/dist/utils/data/clone.js +21 -0
  904. package/dist/utils/data/clone.js.map +1 -0
  905. package/dist/utils/data/collation.d.ts +36 -0
  906. package/dist/utils/data/collation.js +69 -0
  907. package/dist/utils/data/collation.js.map +1 -0
  908. package/dist/utils/data/color.d.ts +32 -0
  909. package/dist/utils/data/color.js +90 -0
  910. package/dist/utils/data/color.js.map +1 -0
  911. package/dist/utils/data/date.d.ts +196 -0
  912. package/dist/utils/data/date.js +421 -0
  913. package/dist/utils/data/date.js.map +1 -0
  914. package/dist/utils/data/diff.d.ts +21 -0
  915. package/dist/utils/data/diff.js +43 -0
  916. package/dist/utils/data/diff.js.map +1 -0
  917. package/dist/utils/data/equality.d.ts +5 -0
  918. package/dist/utils/data/equality.js +24 -0
  919. package/dist/utils/data/equality.js.map +1 -0
  920. package/dist/utils/data/history.d.ts +59 -0
  921. package/dist/utils/data/history.js +132 -0
  922. package/dist/utils/data/history.js.map +1 -0
  923. package/dist/utils/data/intl-cache.d.ts +8 -0
  924. package/dist/utils/data/intl-cache.js +19 -0
  925. package/dist/utils/data/intl-cache.js.map +1 -0
  926. package/dist/utils/data/number-parse.d.ts +7 -0
  927. package/dist/utils/data/number-parse.js +45 -0
  928. package/dist/utils/data/number-parse.js.map +1 -0
  929. package/dist/utils/data/number.d.ts +10 -0
  930. package/dist/utils/data/number.js +28 -0
  931. package/dist/utils/data/number.js.map +1 -0
  932. package/dist/utils/data/numeric.d.ts +62 -0
  933. package/dist/utils/data/numeric.js +178 -0
  934. package/dist/utils/data/numeric.js.map +1 -0
  935. package/dist/utils/data/pagination.d.ts +21 -0
  936. package/dist/utils/data/pagination.js +22 -0
  937. package/dist/utils/data/pagination.js.map +1 -0
  938. package/dist/utils/data/selection.d.ts +41 -0
  939. package/dist/utils/data/selection.js +21 -0
  940. package/dist/utils/data/selection.js.map +1 -0
  941. package/dist/utils/data/status.d.ts +43 -0
  942. package/dist/utils/data/status.js +27 -0
  943. package/dist/utils/data/status.js.map +1 -0
  944. package/dist/utils/data/text.d.ts +12 -0
  945. package/dist/utils/data/text.js +30 -0
  946. package/dist/utils/data/text.js.map +1 -0
  947. package/dist/utils/data/tree.d.ts +140 -0
  948. package/dist/utils/data/tree.js +273 -0
  949. package/dist/utils/data/tree.js.map +1 -0
  950. package/dist/utils/data/workdays.d.ts +67 -0
  951. package/dist/utils/data/workdays.js +67 -0
  952. package/dist/utils/data/workdays.js.map +1 -0
  953. package/dist/utils/dom/announcer.d.ts +11 -0
  954. package/dist/utils/dom/announcer.js +53 -0
  955. package/dist/utils/dom/announcer.js.map +1 -0
  956. package/dist/utils/dom/caret.d.ts +14 -0
  957. package/dist/utils/dom/caret.js +72 -0
  958. package/dist/utils/dom/caret.js.map +1 -0
  959. package/dist/utils/dom/clipboard.d.ts +16 -0
  960. package/dist/utils/dom/clipboard.js +66 -0
  961. package/dist/utils/dom/clipboard.js.map +1 -0
  962. package/dist/utils/dom/direction.d.ts +12 -0
  963. package/dist/utils/dom/direction.js +20 -0
  964. package/dist/utils/dom/direction.js.map +1 -0
  965. package/dist/utils/dom/download.d.ts +14 -0
  966. package/dist/utils/dom/download.js +36 -0
  967. package/dist/utils/dom/download.js.map +1 -0
  968. package/dist/utils/dom/element.d.ts +3 -0
  969. package/dist/utils/dom/element.js +12 -0
  970. package/dist/utils/dom/element.js.map +1 -0
  971. package/dist/utils/dom/event-listener.d.ts +8 -0
  972. package/dist/utils/dom/event-listener.js +35 -0
  973. package/dist/utils/dom/event-listener.js.map +1 -0
  974. package/dist/utils/dom/floating.d.ts +149 -0
  975. package/dist/utils/dom/floating.js +262 -0
  976. package/dist/utils/dom/floating.js.map +1 -0
  977. package/dist/utils/dom/focus.d.ts +28 -0
  978. package/dist/utils/dom/focus.js +105 -0
  979. package/dist/utils/dom/focus.js.map +1 -0
  980. package/dist/utils/dom/fullscreen.d.ts +11 -0
  981. package/dist/utils/dom/fullscreen.js +43 -0
  982. package/dist/utils/dom/fullscreen.js.map +1 -0
  983. package/dist/utils/dom/hotkeys.d.ts +43 -0
  984. package/dist/utils/dom/hotkeys.js +174 -0
  985. package/dist/utils/dom/hotkeys.js.map +1 -0
  986. package/dist/utils/dom/hover-intent.d.ts +47 -0
  987. package/dist/utils/dom/hover-intent.js +72 -0
  988. package/dist/utils/dom/hover-intent.js.map +1 -0
  989. package/dist/utils/dom/hover-layer.d.ts +36 -0
  990. package/dist/utils/dom/hover-layer.js +74 -0
  991. package/dist/utils/dom/hover-layer.js.map +1 -0
  992. package/dist/utils/dom/intersection.d.ts +13 -0
  993. package/dist/utils/dom/intersection.js +36 -0
  994. package/dist/utils/dom/intersection.js.map +1 -0
  995. package/dist/utils/dom/layout-batch.d.ts +14 -0
  996. package/dist/utils/dom/layout-batch.js +26 -0
  997. package/dist/utils/dom/layout-batch.js.map +1 -0
  998. package/dist/utils/dom/link.d.ts +18 -0
  999. package/dist/utils/dom/link.js +44 -0
  1000. package/dist/utils/dom/link.js.map +1 -0
  1001. package/dist/utils/dom/media-query.d.ts +18 -0
  1002. package/dist/utils/dom/media-query.js +36 -0
  1003. package/dist/utils/dom/media-query.js.map +1 -0
  1004. package/dist/utils/dom/move.d.ts +47 -0
  1005. package/dist/utils/dom/move.js +69 -0
  1006. package/dist/utils/dom/move.js.map +1 -0
  1007. package/dist/utils/dom/open-change.d.ts +51 -0
  1008. package/dist/utils/dom/open-change.js +21 -0
  1009. package/dist/utils/dom/open-change.js.map +1 -0
  1010. package/dist/utils/dom/overflow.d.ts +29 -0
  1011. package/dist/utils/dom/overflow.js +108 -0
  1012. package/dist/utils/dom/overflow.js.map +1 -0
  1013. package/dist/utils/dom/overlay.d.ts +35 -0
  1014. package/dist/utils/dom/overlay.js +104 -0
  1015. package/dist/utils/dom/overlay.js.map +1 -0
  1016. package/dist/utils/dom/page-visibility.d.ts +10 -0
  1017. package/dist/utils/dom/page-visibility.js +22 -0
  1018. package/dist/utils/dom/page-visibility.js.map +1 -0
  1019. package/dist/utils/dom/pan-zoom.d.ts +109 -0
  1020. package/dist/utils/dom/pan-zoom.js +257 -0
  1021. package/dist/utils/dom/pan-zoom.js.map +1 -0
  1022. package/dist/utils/dom/rasterize.d.ts +18 -0
  1023. package/dist/utils/dom/rasterize.js +41 -0
  1024. package/dist/utils/dom/rasterize.js.map +1 -0
  1025. package/dist/utils/dom/resize.d.ts +4 -0
  1026. package/dist/utils/dom/resize.js +65 -0
  1027. package/dist/utils/dom/resize.js.map +1 -0
  1028. package/dist/utils/dom/ripple.d.ts +40 -0
  1029. package/dist/utils/dom/ripple.js +96 -0
  1030. package/dist/utils/dom/ripple.js.map +1 -0
  1031. package/dist/utils/dom/roving-focus.d.ts +44 -0
  1032. package/dist/utils/dom/roving-focus.js +184 -0
  1033. package/dist/utils/dom/roving-focus.js.map +1 -0
  1034. package/dist/utils/dom/scroll-spy.d.ts +30 -0
  1035. package/dist/utils/dom/scroll-spy.js +55 -0
  1036. package/dist/utils/dom/scroll-spy.js.map +1 -0
  1037. package/dist/utils/dom/sortable.d.ts +82 -0
  1038. package/dist/utils/dom/sortable.js +437 -0
  1039. package/dist/utils/dom/sortable.js.map +1 -0
  1040. package/dist/utils/dom/storage.d.ts +21 -0
  1041. package/dist/utils/dom/storage.js +66 -0
  1042. package/dist/utils/dom/storage.js.map +1 -0
  1043. package/dist/utils/dom/typeahead.d.ts +15 -0
  1044. package/dist/utils/dom/typeahead.js +26 -0
  1045. package/dist/utils/dom/typeahead.js.map +1 -0
  1046. package/dist/utils/motion/active-indicator.d.ts +24 -0
  1047. package/dist/utils/motion/active-indicator.js +58 -0
  1048. package/dist/utils/motion/active-indicator.js.map +1 -0
  1049. package/dist/utils/motion/animation.d.ts +58 -0
  1050. package/dist/utils/motion/animation.js +83 -0
  1051. package/dist/utils/motion/animation.js.map +1 -0
  1052. package/dist/utils/motion/delayed-loading.d.ts +18 -0
  1053. package/dist/utils/motion/delayed-loading.js +38 -0
  1054. package/dist/utils/motion/delayed-loading.js.map +1 -0
  1055. package/dist/utils/motion/layout.d.ts +17 -0
  1056. package/dist/utils/motion/layout.js +43 -0
  1057. package/dist/utils/motion/layout.js.map +1 -0
  1058. package/dist/utils/motion/pointer.d.ts +14 -0
  1059. package/dist/utils/motion/pointer.js +72 -0
  1060. package/dist/utils/motion/pointer.js.map +1 -0
  1061. package/dist/utils/motion/presence.d.ts +57 -0
  1062. package/dist/utils/motion/presence.js +100 -0
  1063. package/dist/utils/motion/presence.js.map +1 -0
  1064. package/dist/utils/motion/reveal.d.ts +9 -0
  1065. package/dist/utils/motion/reveal.js +68 -0
  1066. package/dist/utils/motion/reveal.js.map +1 -0
  1067. package/dist/utils/motion/tween.d.ts +34 -0
  1068. package/dist/utils/motion/tween.js +50 -0
  1069. package/dist/utils/motion/tween.js.map +1 -0
  1070. package/dist/utils/props.d.ts +84 -0
  1071. package/dist/utils/props.js +189 -0
  1072. package/dist/utils/props.js.map +1 -0
  1073. package/dist/utils/request/error-message.d.ts +17 -0
  1074. package/dist/utils/request/error-message.js +50 -0
  1075. package/dist/utils/request/error-message.js.map +1 -0
  1076. package/dist/utils/request/http.d.ts +165 -0
  1077. package/dist/utils/request/http.js +247 -0
  1078. package/dist/utils/request/http.js.map +1 -0
  1079. package/dist/utils/request/use-autosave.d.ts +35 -0
  1080. package/dist/utils/request/use-autosave.js +69 -0
  1081. package/dist/utils/request/use-autosave.js.map +1 -0
  1082. package/dist/utils/request/use-request.d.ts +37 -0
  1083. package/dist/utils/request/use-request.js +90 -0
  1084. package/dist/utils/request/use-request.js.map +1 -0
  1085. package/dist/utils/request/wire.d.ts +48 -0
  1086. package/dist/utils/request/wire.js +208 -0
  1087. package/dist/utils/request/wire.js.map +1 -0
  1088. package/dist/utils/style/attached.d.ts +25 -0
  1089. package/dist/utils/style/attached.js +82 -0
  1090. package/dist/utils/style/attached.js.map +1 -0
  1091. package/dist/utils/style/item-styles.d.ts +18 -0
  1092. package/dist/utils/style/item-styles.js +79 -0
  1093. package/dist/utils/style/item-styles.js.map +1 -0
  1094. package/dist/utils/style/markers.d.ts +6 -0
  1095. package/dist/utils/style/markers.js +11 -0
  1096. package/dist/utils/style/markers.js.map +1 -0
  1097. package/dist/utils/style/shimmer.d.ts +20 -0
  1098. package/dist/utils/style/shimmer.js +58 -0
  1099. package/dist/utils/style/shimmer.js.map +1 -0
  1100. package/dist/utils/style/styles.d.ts +118 -0
  1101. package/dist/utils/style/styles.js +114 -0
  1102. package/dist/utils/style/styles.js.map +1 -0
  1103. package/dist/utils/style/swatch-styles.d.ts +10 -0
  1104. package/dist/utils/style/swatch-styles.js +19 -0
  1105. package/dist/utils/style/swatch-styles.js.map +1 -0
  1106. package/dist/utils/style/tone-styles.d.ts +58 -0
  1107. package/dist/utils/style/tone-styles.js +180 -0
  1108. package/dist/utils/style/tone-styles.js.map +1 -0
  1109. package/dist/utils/style/transitions.d.ts +43 -0
  1110. package/dist/utils/style/transitions.js +118 -0
  1111. package/dist/utils/style/transitions.js.map +1 -0
  1112. package/dist/utils/style/typography.d.ts +155 -0
  1113. package/dist/utils/style/typography.js +80 -0
  1114. package/dist/utils/style/typography.js.map +1 -0
  1115. package/dist/utils/style/vars.d.ts +18 -0
  1116. package/dist/utils/style/vars.js +21 -0
  1117. package/dist/utils/style/vars.js.map +1 -0
  1118. package/dist/utils/virtual/use-virtualizer.d.ts +43 -0
  1119. package/dist/utils/virtual/use-virtualizer.js +94 -0
  1120. package/dist/utils/virtual/use-virtualizer.js.map +1 -0
  1121. package/dist/utils/virtual/virtualizer.d.ts +145 -0
  1122. package/dist/utils/virtual/virtualizer.js +316 -0
  1123. package/dist/utils/virtual/virtualizer.js.map +1 -0
  1124. package/dist/xlsx/index.d.ts +7 -0
  1125. package/dist/xlsx/index.js +1 -0
  1126. package/dist/xlsx/workbook.d.ts +33 -0
  1127. package/dist/xlsx/workbook.js +195 -0
  1128. package/dist/xlsx/workbook.js.map +1 -0
  1129. package/package.json +258 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapChart.js","names":["_vtp_readonlyProp","_vtp_restProps","_vue_computed","_vue_shallowRef","_createVNode","_mergeProps","_createTextVNode","_vue_ref"],"sources":["../../src/charts/MapChart.tsx"],"sourcesContent":["/**\n * 地图:按区域着色(分省的销售额、各国的采购额),标出地点(工厂、供应商)与它们之间的流向。\n * 地理数据是 TopoJSON:Unovis 自带中国省份、世界、美国等(`@unovis/ts/maps`),也可以用自己的。\n *\n * import { ChinaTopoJSON } from '@unovis/ts/maps';\n * <MapChart\n * aria-label=\"各省销售额\"\n * topology={ChinaTopoJSON}\n * feature=\"provinces\"\n * areas={[{ id: 'CN-JS', label: '江苏', value: 623 }, …]} // id 是地图要素的 id\n * points={[{ id: 'sh', label: '上海组装', longitude: 121.47, latitude: 31.23, value: 860 }]}\n * links={[{ from: 'xa', to: 'sh', value: 120 }]}\n * bins={5}\n * areaLabels\n * />\n *\n * 投影:默认按地理数据的范围选——一个国家、一个地区用以它为中心的等积圆锥投影(中国地图常用的 Albers,正着、不歪),\n * 跨了大半个地球时用 Natural Earth;也可以指定 mercator、equalEarth、orthographic(地球仪)或自己的 d3 投影。\n *\n * 着色:sequential(默认)按数值深浅;diverging 以 midpoint 为界两头两种颜色(同比的涨跌);\n * bins 分成几档(分级着色,图例是几个色块),不写时连续着色(图例是色带);区域写了 color 时按它(分类着色)。\n * 没有数据的区域是底色。地点:value 决定大小(面积按比例),color、shape 决定颜色与形状;名字自动避让\n * (换方位、挤时往外退并画引线,数值大的先放,放不下的悬停看;压住名字、地点的区域名藏起来);\n * links 是地点之间的流向,粗细按 value,flow 时有流动的粒子。\n * zoomable 时可以拖动、按住 Ctrl 滚轮缩放,右上角有放大、缩小、复位的按钮。悬停看名称与数值;读屏的数据表列出各区域、地点与流向。\n */\nimport {\n MapProjection,\n TopoJSONMap,\n type MapGraphData,\n type TopoJSONMapConfigInterface,\n} from '@unovis/ts';\nimport { Maximize, Minus, Plus } from '@lucide/icons';\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport { presimplify, simplify } from 'topojson-simplify';\nimport type { VNodeChild } from 'vue';\nimport { IconButton } from '../base/IconButton';\nimport { useLang } from '../config/context';\nimport { useFormat, type NumericFormat } from '../config/lang/format';\nimport { colors } from '../config/theme/tokens';\nimport { Skeleton } from '../feedback/Skeleton';\nimport { toNumber, type NumericValue } from '../utils/data/numeric';\nimport { useEventListener } from '../utils/dom/event-listener';\nimport type { PartProps } from '../utils/props';\nimport { chartTooltip, ChartFrame, type ChartFrameParts } from './frame';\nimport { placeLabels, rectsOverlap, type LabelRect } from './label-layout';\nimport { resolveColor, type ChartColor } from './series';\nimport { useSingleChart, type SingleChart } from './single';\n\n/** 一个区域的数据 */\nexport interface MapArea {\n /** 地图要素的 id(Unovis 的中国省份是 'CN-JS' 这样的写法) */\n id: string;\n /** 显示的名称:提示框、区域名、数据表 */\n label: string;\n /** 数值:决定颜色 */\n value?: NumericValue;\n /** 指定颜色:不按数值着色(分类着色,如所属大区) */\n color?: ChartColor;\n}\n\n/** 一个地点 */\nexport interface MapPoint {\n /** 标识:流向的 from、to 指向它 */\n id: string;\n /** 名称:写在点下方 */\n label: string;\n /** 经度 */\n longitude: number;\n /** 纬度 */\n latitude: number;\n /** 数值:决定点的大小(面积按比例),也显示在提示框 */\n value?: NumericValue;\n /** 颜色,默认 danger */\n color?: ChartColor;\n /** 形状,默认 circle */\n shape?: 'circle' | 'square' | 'triangle';\n}\n\n/** 两个地点之间的流向 */\nexport interface MapLink {\n /** 起点(地点的 id) */\n from: string;\n /** 终点(地点的 id) */\n to: string;\n /** 数值:决定线的粗细,也显示在数据表 */\n value?: NumericValue;\n /** 颜色,默认次要色 */\n color?: ChartColor;\n}\n\n/** 投影的预设 */\nexport interface MapProjections {\n /** 等积圆锥(Albers):以数据为中心,一个国家、一个地区用它(中国地图常用),正着、面积不失真 */\n conic: unknown;\n /** 墨卡托:网页地图常见,高纬度会放大 */\n mercator: unknown;\n /** Natural Earth:世界地图,形状与面积都比较自然 */\n naturalEarth: unknown;\n /** Equal Earth:世界地图,面积准确 */\n equalEarth: unknown;\n /** 正射(地球仪):以数据为中心看半个地球 */\n orthographic: unknown;\n}\n\n/** d3 的投影(TopoJSONMap 的 projection) */\nexport type MapGeoProjection = NonNullable<TopoJSONMapConfigInterface<MapArea>['projection']>;\n\n/** 未声明的属性落到外层 div(role=\"figure\")上;aria-label 是图表的名称 */\nexport interface MapChartProps extends PartProps<'div', 'role' | 'aria-busy'>, ChartFrameParts {\n /** 地理数据(TopoJSON),如 `@unovis/ts/maps` 的 ChinaTopoJSON、WorldMapTopoJSON */\n topology: NonNullable<TopoJSONMapConfigInterface<MapArea>['topojson']>;\n /** 画哪一组要素(TopoJSON 的 objects 里的名字),如中国省份是 'provinces'、世界是 'countries' */\n feature: string;\n /** 投影:预设的名字,或 d3 的投影;不写时按数据的范围选 conic 或 naturalEarth */\n projection?: keyof MapProjections | MapGeoProjection;\n /** 投影的中心 [经度, 纬度]:中央经线(世界地图写 [150, 0] 以太平洋为中心),orthographic 还用纬度;不写时取地理数据范围的中心 */\n center?: readonly [number, number];\n /** 各区域的数值 */\n areas?: readonly MapArea[];\n /** 地点 */\n points?: readonly MapPoint[];\n /** 地点之间的流向 */\n links?: readonly MapLink[];\n /** 着色方式:sequential 按数值深浅(默认),diverging 以 midpoint 为界两头两种颜色 */\n scheme?: 'sequential' | 'diverging';\n /** sequential 的基色,默认 accent */\n color?: ChartColor;\n /** diverging 的两头 [低, 高],默认 ['danger', 'success'] */\n divergingColors?: readonly [ChartColor, ChartColor];\n /** diverging 的分界,默认 0 */\n midpoint?: number;\n /** 分成几档(分级着色);不写时连续着色 */\n bins?: number;\n /** 在区域上写名字(区域够大时) */\n areaLabels?: boolean;\n /** 流向上有流动的粒子 */\n flow?: boolean;\n /** 数值的格式 */\n valueFormat?: NumericFormat;\n /** 单位:显示在左上方,提示框与数据表的数值后面带上 */\n unit?: string;\n /**\n * 绘图区的高度;数字按 px\n * @default 400\n */\n height?: number | string;\n /** 可以拖动、滚轮缩放,右上角有放大、缩小、复位的按钮;默认关(不抢页面的滚动) */\n zoomable?: boolean;\n /** 加载中:绘图区显示骨架 */\n loading?: boolean;\n /** 没有数据时显示的内容 */\n empty?: VNodeChild;\n /** 悬停时的提示框,默认 true */\n tooltip?: boolean;\n /** 点了一个有数据的区域 */\n onAreaClick?: (area: MapArea) => void;\n /** 点了一个地点 */\n onPointClick?: (point: MapPoint) => void;\n}\n\n/** MapChart 的样式 */\nexport const mapChartStyles = css.create({\n // 地图跟随主题:底色、边界是表面色,文字是正文色\n root: {\n '--vis-map-feature-color': colors.fill,\n '--vis-map-boundary-color': colors.surface,\n '--vis-map-point-label-text-color-dark': colors.text,\n '--vis-map-point-label-text-color-light': colors.text,\n '--vis-map-area-label-text-color': colors.text,\n '--vis-map-area-label-font-size': '10px',\n '--vis-map-area-label-font-weight': '400',\n '--vis-map-point-default-stroke-color': colors.surface,\n '--vis-map-point-default-stroke-width': '1.5px',\n },\n skeleton: { display: 'block', width: '100%', height: '100%' },\n // 地点的标签:描一圈表面色的边,压在区域、连线上也看得清;字号、描边宽度随缩放在行内设置\n pointLabels: {\n fontWeight: 600,\n fill: colors.text,\n stroke: colors.surface,\n paintOrder: 'stroke',\n strokeLinejoin: 'round',\n pointerEvents: 'none',\n },\n leader: { stroke: colors.textMuted },\n // 缩放按钮:在标题行的结束边(导出菜单前面)\n zoom: { display: 'inline-flex', alignItems: 'center', gap: '2px', marginInlineStart: 'auto' },\n wheelHint: { marginInlineEnd: '_sm', color: '_textMuted', fontSize: '_xs' },\n // 图例:连续是色带,分档是一排色块\n legend: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n columnGap: '_md',\n rowGap: '_xs',\n fontSize: '_xs',\n color: '_textMuted',\n paddingInline: '_sm',\n },\n ramp: { flexGrow: 1, maxWidth: '16rem', height: '0.5rem', borderRadius: '_full' },\n rampColors: (gradient: string) => ({ backgroundImage: gradient }),\n bin: { display: 'inline-flex', alignItems: 'center', gap: '0.375em', whiteSpace: 'nowrap' },\n swatch: { width: '0.875rem', height: '0.625rem', borderRadius: '2px' },\n swatchColor: (color: string) => ({ backgroundColor: color }),\n});\n\n/** 地点的标签四周留的空(屏幕像素) */\nconst labelPadding = 3;\n\n/** 新建一个 SVG 元素 */\nconst svgElement = <K extends keyof SVGElementTagNameMap>(name: K) =>\n document.createElementNS('http://www.w3.org/2000/svg', name);\n\n/** 混色:基色占 percent,其余透明(落在底色上) */\nconst tint = (color: string, percent: number) =>\n `color-mix(in srgb, ${color} ${Math.round(percent)}%, transparent)`;\n\ntype MapTopology = MapChartProps['topology'];\n\n/** 算好了各点权重的地理数据:同一份 TopoJSON 只算一次 */\nconst presimplified = new WeakMap<MapTopology, MapTopology>();\n/**\n * 简化过的地理数据放进这个类的实例:Unovis 的 setConfig 深拷贝配置,但跳过类的实例,\n * 每次更新就不必把整份 TopoJSON 再拷一遍\n */\nclass SharedTopology {}\n\n/** 简化过的地理数据:TopoJSON → 档位 → 结果 */\nconst simplified = new WeakMap<MapTopology, Map<number, MapTopology>>();\n\n/**\n * 简化地理数据:去掉与前后两点围成的三角形面积不到 minArea(坐标单位的平方,经纬度是平方度)的点\n * (Visvalingam,topojson-simplify)。相邻区域共用的边界一起简化,不会出现缝隙;各段弧的两端总保留。\n * minArea 按 2 的整数次幂分档缓存:绘图区大小变一点不重算。\n */\nexport function simplifyTopology(topology: MapTopology, minArea: number): MapTopology {\n if (!(minArea > 0) || !Number.isFinite(minArea)) return topology;\n const level = 2 ** Math.floor(Math.log2(minArea));\n let byLevel = simplified.get(topology);\n if (!byLevel) simplified.set(topology, (byLevel = new Map()));\n let result = byLevel.get(level);\n if (!result) {\n // topojson-simplify 的类型里要素属性不能是 null(GeoJSON 允许):边界上转一下\n type Input = Parameters<typeof presimplify>[0];\n let weighted = presimplified.get(topology);\n if (!weighted)\n presimplified.set(topology, (weighted = presimplify(topology as Input) as MapTopology));\n result = Object.assign(new SharedTopology(), simplify(weighted as Input, level)) as MapTopology;\n byLevel.set(level, result);\n }\n return result;\n}\n\n/** TopoJSON 的经纬度范围 [西, 南, 东, 北]:有 bbox 用它,否则解出各段弧的坐标(量化的弧是逐点的差值) */\nexport function topologyBounds(\n topology: MapChartProps['topology'],\n): [number, number, number, number] {\n if (topology.bbox) {\n const [west, south, east, north] = topology.bbox;\n return [west, south, east, north];\n }\n const quantized = topology.transform;\n const [scaleX, scaleY] = quantized?.scale ?? [1, 1];\n const [translateX, translateY] = quantized?.translate ?? [0, 0];\n let [west, south, east, north] = [Infinity, Infinity, -Infinity, -Infinity];\n for (const arc of topology.arcs) {\n let x = 0;\n let y = 0;\n for (const position of arc) {\n x = quantized ? x + position[0]! : position[0]!;\n y = quantized ? y + position[1]! : position[1]!;\n const longitude = x * scaleX + translateX;\n const latitude = y * scaleY + translateY;\n west = Math.min(west, longitude);\n east = Math.max(east, longitude);\n south = Math.min(south, latitude);\n north = Math.max(north, latitude);\n }\n }\n return [west, south, east, north];\n}\n\n/** 地图 */\nexport const MapChart = _component(\n ({\n topology,\n feature,\n projection,\n center,\n areas = [],\n points = [],\n links = [],\n scheme = 'sequential',\n color = 'accent',\n divergingColors = ['danger', 'success'],\n midpoint = 0,\n bins,\n areaLabels = false,\n flow = false,\n valueFormat,\n unit,\n height = 400,\n zoomable = false,\n loading = false,\n empty,\n tooltip = true,\n onAreaClick,\n onPointClick,\n sx,\n ...rest\n }: MapChartProps) => {\n const lang = useLang();\n const format = useFormat();\n const bounds = _derived(topologyBounds(topology));\n const numbers = _derived(\n areas.flatMap((area) => (area.value === undefined ? [] : [toNumber(area.value)])),\n );\n const extent = _derived<[number, number] | null>(\n numbers.length ? [Math.min(...numbers), Math.max(...numbers)] : null,\n );\n const largest = (values: readonly { value?: NumericValue }[]) =>\n Math.max(0, ...values.map((item) => (item.value === undefined ? 0 : toNumber(item.value))));\n const valueText = (value: NumericValue | undefined) =>\n value === undefined\n ? lang.emptyValue\n : format.number(value, unit ? { ...valueFormat, suffix: unit } : valueFormat);\n const numberText = (value: number) => format.number(value, valueFormat);\n\n /** 数值 → 颜色:sequential 从 12% 到 100%;diverging 两头各自从分界往外加深;bins 时按档取 */\n function colorOf(value: number): string {\n const [low, high] = extent ?? [0, 0];\n if (scheme === 'diverging') {\n const [lowColor, highColor] = divergingColors.map((item) => resolveColor(item, 0));\n const reach = Math.max(midpoint - low, high - midpoint) || 1;\n let ratio = Math.min(Math.abs(value - midpoint) / reach, 1);\n if (bins) ratio = Math.max(Math.ceil(ratio * bins), 1) / bins;\n return tint(value < midpoint ? lowColor! : highColor!, 12 + ratio * 88);\n }\n let ratio = high === low ? 1 : (value - low) / (high - low);\n if (bins) ratio = Math.min(Math.floor(ratio * bins), bins - 1) / Math.max(bins - 1, 1);\n return tint(resolveColor(color, 0), 12 + ratio * 88);\n }\n const areaColor = (area: MapArea) =>\n area.color\n ? resolveColor(area.color, 0)\n : area.value === undefined\n ? undefined\n : colorOf(toNumber(area.value));\n\n /** 投影:预设按中心旋转;不写时按范围选 */\n function createProjection(): MapGeoProjection {\n if (projection && typeof projection !== 'string') return projection;\n const [west, south, east, north] = bounds;\n const [longitude, latitude] = center ?? [(west + east) / 2, (south + north) / 2];\n const kind = projection ?? (east - west > 180 ? 'naturalEarth' : 'conic');\n if (kind === 'conic')\n // 标准纬线取范围的 1/6 与 5/6 处(中国约是 25°、47°),中央经线是中心\n return MapProjection.ConicEqualArea()\n .rotate([-longitude, 0])\n .parallels([south + (north - south) / 6, north - (north - south) / 6]);\n if (kind === 'orthographic')\n return MapProjection.Orthographic().rotate([-longitude, -latitude]);\n const create =\n kind === 'mercator'\n ? MapProjection.Mercator\n : kind === 'equalEarth'\n ? MapProjection.EqualEarth\n : MapProjection.NaturalEarth1;\n return create().rotate([-longitude, 0]);\n }\n\n // Unovis 只在第一次画时按绘图区适配投影(之后变了大小也会),换上的新投影只沿用旧的比例与平移,地图会画歪、画小;\n // 所以投影的输入(预设、中心、范围、自己的投影)变了就换一个新的 TopoJSONMap,第一次画时由它自己适配\n let mapKey: unknown[] = [];\n let generation = 0;\n let mapProjection: MapGeoProjection | undefined;\n function updateProjection() {\n const key = [projection, center?.[0], center?.[1], ...bounds];\n if (key.some((item, index) => item !== mapKey[index])) {\n if (mapKey.length) {\n map?.destroy();\n generation += 1;\n }\n mapKey = key;\n mapProjection = createProjection();\n }\n }\n\n // Unovis 每次绘制都把整份 TopoJSON 投影成路径:自带的中国省份有 3.5 万个点,画在几百像素里大多看不出来。\n // 按绘图区里一像素对应的经纬度简化(三角形不到一平方像素的点去掉),绘制快一个数量级;\n // 能缩放时留到放大一倍也看不出折角\n function drawnTopology(): MapTopology {\n const width = plot?.clientWidth ?? 0;\n const height = plot?.clientHeight ?? 0;\n if (!width || !height) return topology;\n const [west, south, east, north] = bounds;\n const degreesPerPixel =\n Math.max((east - west) / width, (north - south) / height) / (zoomable ? 2 : 1);\n return simplifyTopology(topology, degreesPerPixel ** 2);\n }\n\n const pointOf = (id: string) => points.find((point) => point.id === id);\n /** Unovis 画连线时给的是 { source, target }(克隆过的地点),不是原来的流向:按两端的 id 找回 */\n const linkOf = (drawn: MapLink) => {\n const { source, target } = drawn as unknown as { source: MapPoint; target: MapPoint };\n return links.find((link) => link.from === source.id && link.to === target.id);\n };\n let map: TopoJSONMap<MapArea, MapPoint, MapLink> | undefined;\n let plot = _state.raw<HTMLElement | null>(null);\n\n const pointMax = _derived(largest(points));\n // 面积按数值比例:半径 3–8 px\n const radiusOf = (point: MapPoint) =>\n point.value === undefined || pointMax === 0\n ? 4\n : 3 + Math.sqrt(toNumber(point.value) / pointMax) * 5;\n\n let labelFrame = 0;\n /** 画完、缩放之后,下一帧重排地点的标签 */\n function scheduleLabels() {\n cancelAnimationFrame(labelFrame);\n labelFrame = requestAnimationFrame(layoutLabels);\n }\n _effect(() => () => cancelAnimationFrame(labelFrame));\n\n /**\n * 地点的标签:Unovis 的标签相撞时只会藏起来,这里用 placeLabels 挪到放得下的方位(挤时画引线),\n * 画在地点那一组里(跟着缩放、拖动);压在标签、地点上的区域名藏起来。\n * 按屏幕像素算:地点那一组的坐标乘缩放级别\n */\n function layoutLabels() {\n const root = map?.g.node();\n const group = root?.querySelector<SVGGElement>(`.${TopoJSONMap.selectors.points}`);\n const svg = group?.ownerSVGElement;\n if (!root || !group || !svg || !mapProjection) return;\n const projectionAt = mapProjection;\n const zoom = Number(svg.style.getPropertyValue('--vis-map-current-zoom-level')) || 1;\n const layer =\n group.querySelector<SVGGElement>(':scope > [data-point-labels]') ?? svgElement('g');\n layer.setAttribute('data-point-labels', '');\n layer.setAttribute('class', css.attrs(mapChartStyles.pointLabels).class ?? '');\n layer.style.fontSize = `${11 / zoom}px`;\n layer.style.strokeWidth = `${3 / zoom}px`;\n // 放在最后:之后加入的地点不会盖住标签\n group.append(layer);\n\n const items = points.flatMap((point) => {\n const position = projectionAt([point.longitude, point.latitude]);\n if (!position || !point.label) return [];\n const text = svgElement('text');\n text.textContent = point.label;\n text.setAttribute('text-anchor', 'middle');\n return [{ point, text, x: position[0] * zoom, y: position[1] * zoom }];\n });\n layer.replaceChildren(...items.map((item) => item.text));\n // 在原点量字形的框:中文字体的行高、基线的位置各浏览器不同,摆放时按量到的上沿对齐\n const glyphs = items.map((item) => item.text.getBBox());\n const anchors = items.map((item, index) => {\n const box = glyphs[index]!;\n return {\n x: item.x,\n y: item.y,\n radius: radiusOf(item.point),\n // 四周留出描边(1.5 px)与一点空隙;Firefox 量到的框比字形的墨迹窄一点\n width: box.width * zoom + labelPadding * 2,\n height: box.height * zoom + labelPadding * 2,\n priority: item.point.value === undefined ? 0 : toNumber(item.point.value),\n };\n });\n\n const areaTexts = [\n ...root.querySelectorAll<SVGTextElement>(`text.${TopoJSONMap.selectors.areaLabel}`),\n ].filter((text) => text.getAttribute('visibility') !== 'hidden');\n const areaBoxes = areaTexts.map((text): LabelRect => {\n text.style.display = '';\n const { e, f } = text.transform.baseVal.consolidate()?.matrix ?? { e: 0, f: 0 };\n const box = text.getBBox();\n return {\n x: (e + box.x) * zoom,\n y: (f + box.y) * zoom,\n width: box.width * zoom,\n height: box.height * zoom,\n };\n });\n // 没放大时整张图在绘图区里:标签也不出界;放大后本来就只看得到一部分\n const bounds =\n zoom === 1 ? { x: 0, y: 0, width: svg.clientWidth, height: svg.clientHeight } : undefined;\n const placements = placeLabels(anchors, { bounds, soft: areaBoxes });\n\n const taken: LabelRect[] = anchors.map((anchor) => ({\n x: anchor.x - anchor.radius,\n y: anchor.y - anchor.radius,\n width: anchor.radius * 2,\n height: anchor.radius * 2,\n }));\n placements.forEach((placement, index) => {\n const { text } = items[index]!;\n if (!placement) {\n text.remove();\n return;\n }\n const { box, leader } = placement;\n taken.push(box);\n text.setAttribute('x', String((box.x + box.width / 2) / zoom));\n text.setAttribute('y', String((box.y + labelPadding) / zoom - glyphs[index]!.y));\n if (leader) layer.insertBefore(leaderLine(anchors[index]!, box, zoom), text);\n });\n areaTexts.forEach((text, index) => {\n if (taken.some((rect) => rectsOverlap(rect, areaBoxes[index]!)))\n text.style.display = 'none';\n });\n }\n\n /** 引线:从标记的边到标签矩形上离标记最近的点 */\n function leaderLine(\n anchor: { x: number; y: number; radius: number },\n box: LabelRect,\n zoom: number,\n ) {\n const toX = Math.min(Math.max(anchor.x, box.x), box.x + box.width);\n const toY = Math.min(Math.max(anchor.y, box.y), box.y + box.height);\n const length = Math.hypot(toX - anchor.x, toY - anchor.y) || 1;\n const line = svgElement('line');\n line.setAttribute('class', css.attrs(mapChartStyles.leader).class ?? '');\n line.setAttribute(\n 'x1',\n String((anchor.x + ((toX - anchor.x) / length) * anchor.radius) / zoom),\n );\n line.setAttribute(\n 'y1',\n String((anchor.y + ((toY - anchor.y) / length) * anchor.radius) / zoom),\n );\n line.setAttribute('x2', String(toX / zoom));\n line.setAttribute('y2', String(toY / zoom));\n line.style.strokeWidth = `${1 / zoom}px`;\n return line;\n }\n const chart: SingleChart = useSingleChart<MapGraphData<MapArea, MapPoint, MapLink>>(() => ({\n element: plot,\n ready: !loading,\n tooltip,\n build: (instance) => {\n const linkMax = largest(links);\n updateProjection();\n map = instance(`map-${generation}`, () => {\n const created = new TopoJSONMap<MapArea, MapPoint, MapLink>();\n // 热力模式的滤镜是写死的 id=\"heatmapFilter\",一页多张地图时 id 重复;不用热力模式,去掉\n created.g.select('filter#heatmapFilter').remove();\n // 缩放时 Unovis 把缩放级别写到 svg 的 style 上:跟着重排标签(拖动只是平移,标签随地点那一组走)\n const observer = new MutationObserver(scheduleLabels);\n queueMicrotask(() => {\n const svg = created.g.node()?.parentElement;\n if (svg) observer.observe(svg, { attributes: true, attributeFilter: ['style'] });\n });\n const destroy = created.destroy.bind(created);\n created.destroy = () => {\n observer.disconnect();\n destroy();\n };\n return created;\n });\n map.setConfig({\n topojson: drawnTopology(),\n mapFeatureName: feature,\n projection: mapProjection,\n disableZoom: !zoomable,\n areaId: (area) => area.id,\n areaColor,\n areaLabel: areaLabels ? (area) => area.label : undefined,\n areaCursor: onAreaClick ? () => 'pointer' : undefined,\n pointId: (point) => point.id,\n longitude: (point) => point.longitude,\n latitude: (point) => point.latitude,\n pointColor: (point) => resolveColor(point.color ?? 'danger', 0),\n pointRadius: radiusOf,\n pointShape: (point) => point.shape ?? 'circle',\n pointCursor: onPointClick ? () => 'pointer' : undefined,\n // 名字由 layoutLabels 自己画(pointLabel 写在点里面,pointBottomLabel 相撞时只会藏起来)\n pointLabel: () => '',\n pointBottomLabel: () => '',\n // 两端给 id:Unovis 克隆了地点,按对象找不到\n linkSource: (link) => link.from,\n linkTarget: (link) => link.to,\n linkColor: (drawn) => resolveColor(linkOf(drawn)?.color ?? 'neutral', 0),\n linkWidth: (drawn) => {\n const value = linkOf(drawn)?.value;\n return value === undefined || linkMax === 0 ? 1.5 : 1 + (toNumber(value) / linkMax) * 4;\n },\n enableFlowAnimation: flow,\n // 流动的粒子按原来的流向画,两端的经纬度直接给;起点已经有地点的标记,不再加一个\n sourceLongitude: (link) => pointOf(link.from)?.longitude,\n sourceLatitude: (link) => pointOf(link.from)?.latitude,\n targetLongitude: (link) => pointOf(link.to)?.longitude,\n targetLatitude: (link) => pointOf(link.to)?.latitude,\n sourcePointRadius: 0,\n flowParticleColor: (link) => resolveColor(link.color ?? 'accent', 0),\n flowParticleRadius: 2,\n // 每经度 0.15 个粒子:默认的 0.6 太密,连成一条线盖住了连线\n flowParticleDensity: 0.15,\n events: {\n [TopoJSONMap.selectors.feature]: {\n click: (shape: { data?: MapArea }) => {\n if (shape.data) onAreaClick?.(shape.data);\n },\n },\n [TopoJSONMap.selectors.point]: {\n click: (point: MapPoint) => onPointClick?.(point),\n },\n },\n });\n return {\n component: map,\n onRender: scheduleLabels,\n data: {\n areas: [...areas],\n points: [...points],\n links: links.filter((link) => pointOf(link.from) && pointOf(link.to)),\n },\n triggers: {\n [TopoJSONMap.selectors.feature]: (shape: { data?: MapArea }) =>\n shape.data\n ? chart.tooltip(\n chartTooltip(shape.data.label, [\n {\n label: lang.chartValue,\n color: areaColor(shape.data) ?? 'transparent',\n value: valueText(shape.data.value),\n },\n ]),\n )\n : undefined,\n [TopoJSONMap.selectors.point]: (point: MapPoint) =>\n chart.tooltip(\n chartTooltip(point.label, [\n {\n label: lang.chartValue,\n color: resolveColor(point.color ?? 'danger', 0),\n value: valueText(point.value),\n },\n ]),\n ),\n },\n };\n },\n }));\n\n /** 图例:分档时每档一个色块与范围,连续时一条色带两端写最小最大 */\n function legend() {\n if (!extent || areas.every((area) => area.color)) return null;\n const [low, high] = extent;\n if (bins) {\n const step = (high - low) / bins;\n return (\n <div {...css.attrs(mapChartStyles.legend)} aria-hidden=\"true\">\n {Array.from({ length: bins }, (_, index) => {\n const from = low + step * index;\n const to = index === bins - 1 ? high : from + step;\n return (\n <span key={index} {...css.attrs(mapChartStyles.bin)}>\n <span\n {...css.attrs(\n mapChartStyles.swatch,\n mapChartStyles.swatchColor(colorOf((from + to) / 2)),\n )}\n />\n {numberText(from)} – {numberText(to)}\n </span>\n );\n })}\n </div>\n );\n }\n const stops =\n scheme === 'diverging'\n ? [colorOf(low), colors.fill, colorOf(high)]\n : [colorOf(low), colorOf(high)];\n return (\n <div {...css.attrs(mapChartStyles.legend)} aria-hidden=\"true\">\n <span>{numberText(low)}</span>\n <span\n {...css.attrs(\n mapChartStyles.ramp,\n mapChartStyles.rampColors(`linear-gradient(to right, ${stops.join(', ')})`),\n )}\n />\n <span>{numberText(high)}</span>\n </div>\n );\n }\n\n // 滚轮默认滚动页面,按住 Ctrl(或 ⌘、触控板捏合)才缩放地图(同 Google 地图的 cooperative 手势):\n // 否则滚动页面经过地图时会把地图缩小。拦下的滚轮在顶栏提示一下\n let wheelHint = _state(false);\n let hintTimer: ReturnType<typeof setTimeout> | undefined;\n useEventListener(\n () => (zoomable ? plot : null),\n 'wheel',\n (event) => {\n if (event.ctrlKey || event.metaKey) return;\n event.stopPropagation();\n wheelHint = true;\n clearTimeout(hintTimer);\n hintTimer = setTimeout(() => (wheelHint = false), 1500);\n },\n { capture: true },\n );\n _effect(() => () => clearTimeout(hintTimer));\n\n /** 缩放按钮:放大、缩小、复位;前面是滚轮的提示 */\n const zoomButtons = () => (\n <span {...css.attrs(mapChartStyles.zoom)}>\n {wheelHint && (\n <span {...css.attrs(mapChartStyles.wheelHint)} role=\"status\">\n {lang.chartZoomWheelHint}\n </span>\n )}\n {(\n [\n [Plus, lang.chartZoomIn, () => map?.zoomIn()],\n [Minus, lang.chartZoomOut, () => map?.zoomOut()],\n [Maximize, lang.chartZoomFit, () => map?.fitView()],\n ] as const\n ).map(([icon, label, action]) => (\n <IconButton\n key={label}\n icon={icon}\n size=\"sm\"\n variant=\"ghost\"\n tone=\"neutral\"\n aria-label={label}\n onClick={action}\n />\n ))}\n </span>\n );\n\n return () => (\n <ChartFrame\n {...rest}\n sx={[mapChartStyles.root, sx]}\n unit={unit}\n height={height}\n legend={[]}\n hiddenKeys={[]}\n onLegendToggle={() => {}}\n loading={loading}\n skeleton={<Skeleton sx={mapChartStyles.skeleton} />}\n isEmpty={false}\n empty={empty}\n actions={zoomable ? zoomButtons() : undefined}\n footer={legend()}\n table={{\n columns: [lang.chartCategory, unit ? `${lang.chartValue}(${unit})` : lang.chartValue],\n rows: [\n ...areas.map((area) => ({ header: area.label, value: area.value })),\n ...points.map((point) => ({ header: point.label, value: point.value })),\n ...links.map((link) => ({\n header: lang.chartFlowLabel(\n pointOf(link.from)?.label ?? link.from,\n pointOf(link.to)?.label ?? link.to,\n ),\n value: link.value,\n })),\n ].map((row) => ({\n header: row.header,\n cells: [\n row.value === undefined ? lang.emptyValue : format.number(row.value, valueFormat),\n ],\n })),\n }}\n plotRef={(element) => (plot = element)}\n />\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
+ import type { VNodeChild } from 'vue';
3
+ import { type NumericFormat } from '../config/lang/format';
4
+ import type { PartProps } from '../utils/props';
5
+ import { type ChartFrameParts } from './frame';
6
+ import { type ChartSeries } from './series';
7
+ /** 未声明的属性落到外层 div(role="figure")上;aria-label 是图表的名称 */
8
+ export interface RadarChartProps<T extends object> extends PartProps<'div', 'role' | 'aria-busy'>, ChartFrameParts {
9
+ /** 数据:每一行是一个维度(质量、交期…) */
10
+ data: readonly T[];
11
+ /** 维度名的字段 */
12
+ index: keyof T & string;
13
+ /** 系列:每个系列连成一个多边形 */
14
+ series: readonly ChartSeries<T>[];
15
+ /** 轴的最大值;不写时按数据取一个整齐的值 */
16
+ max?: number;
17
+ /**
18
+ * 网格的圈数
19
+ * @default 4
20
+ */
21
+ levels?: number;
22
+ /** 网格画成多边形(默认)或圆 */
23
+ grid?: 'polygon' | 'circle';
24
+ /** 数值的格式:刻度、顶点旁的数值、数据表共用 */
25
+ valueFormat?: NumericFormat;
26
+ /** 单位:显示在左上方 */
27
+ unit?: string;
28
+ /**
29
+ * 绘图区的高度;数字按 px
30
+ * @default 300
31
+ */
32
+ height?: number | string;
33
+ /** 图例:默认多于一个系列时显示 */
34
+ legend?: boolean;
35
+ /** 隐藏的系列:点图例时写回,父级可以写 _hiddenSeries={keys} */
36
+ _hiddenSeries?: string[];
37
+ /** 加载中:绘图区显示骨架 */
38
+ loading?: boolean;
39
+ /** 没有数据时显示的内容 */
40
+ empty?: VNodeChild;
41
+ }
42
+ /** RadarChart 的样式 */
43
+ export declare const radarChartStyles: Readonly<{
44
+ readonly svg: css.CompiledStyles;
45
+ readonly grid: css.CompiledStyles;
46
+ readonly spoke: css.CompiledStyles;
47
+ readonly spokeActive: css.CompiledStyles;
48
+ readonly tick: css.CompiledStyles;
49
+ readonly label: css.CompiledStyles;
50
+ readonly labelActive: css.CompiledStyles;
51
+ readonly area: css.CompiledStyles;
52
+ readonly vertex: css.CompiledStyles;
53
+ readonly value: css.CompiledStyles;
54
+ readonly sector: css.CompiledStyles;
55
+ readonly skeleton: css.CompiledStyles;
56
+ readonly stroke: (color: string) => Readonly<[css.CompiledStyles, css.InlineStyles]>;
57
+ readonly surfaceStroke: css.CompiledStyles;
58
+ }>;
59
+ /** 雷达图 */
60
+ export declare const RadarChart: <T extends object>(props: RadarChartProps<T>) => import("@zerodep-dev/vue-tsx-pro-tsx").TsxNode;
@@ -0,0 +1,224 @@
1
+ import { useLang } from "../config/context.js";
2
+ import { useFormat } from "../config/lang/format.js";
3
+ import { Skeleton } from "../feedback/Skeleton.js";
4
+ import { niceStep } from "./axis-ticks.js";
5
+ import { ChartFrame } from "./frame.js";
6
+ import { resolveSeries, seriesNumber, seriesValue } from "./series.js";
7
+ import { computed, createVNode, mergeProps, ref } from "vue";
8
+ import { _component, bindable, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
9
+ import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
10
+ //#region src/charts/RadarChart.tsx
11
+ /** 未声明的属性落到外层 div(role="figure")上;aria-label 是图表的名称 */
12
+ /** RadarChart 的样式 */
13
+ var radarChartStyles = css.create({
14
+ svg: {
15
+ display: "block",
16
+ width: "100%",
17
+ height: "100%",
18
+ overflow: "visible"
19
+ },
20
+ grid: {
21
+ fill: "none",
22
+ stroke: "_borderMuted",
23
+ strokeWidth: 1
24
+ },
25
+ spoke: {
26
+ stroke: "_borderMuted",
27
+ strokeWidth: 1
28
+ },
29
+ spokeActive: {
30
+ stroke: "_textMuted",
31
+ strokeWidth: 1.5
32
+ },
33
+ tick: {
34
+ fill: "_textMuted",
35
+ fontSize: "9px"
36
+ },
37
+ label: {
38
+ fill: "_text",
39
+ fontSize: "11px"
40
+ },
41
+ labelActive: { fontWeight: "_semibold" },
42
+ area: {
43
+ fillOpacity: .08,
44
+ strokeWidth: 2,
45
+ strokeLinejoin: "round"
46
+ },
47
+ vertex: { strokeWidth: 0 },
48
+ value: {
49
+ fontSize: "10px",
50
+ fontWeight: "_semibold",
51
+ paintOrder: "stroke",
52
+ strokeWidth: 3
53
+ },
54
+ sector: { fill: "transparent" },
55
+ skeleton: {
56
+ display: "block",
57
+ height: "100%",
58
+ aspectRatio: "1",
59
+ marginInline: "auto",
60
+ borderRadius: "50%"
61
+ },
62
+ stroke: (color) => ({
63
+ stroke: color,
64
+ fill: color
65
+ }),
66
+ surfaceStroke: { stroke: "_surface" }
67
+ });
68
+ var WIDTH = 360;
69
+ var HEIGHT = 300;
70
+ var CX = WIDTH / 2;
71
+ var CY = HEIGHT / 2;
72
+ var RADIUS = 108;
73
+ var LABEL_RADIUS = 124;
74
+ /** 第 index 个维度(共 count 个)、比例 ratio 处的点:第一个维度在正上方,顺时针 */
75
+ function polar(index, count, ratio) {
76
+ const angle = Math.PI * 2 * index / count - Math.PI / 2;
77
+ return {
78
+ x: CX + Math.cos(angle) * RADIUS * ratio,
79
+ y: CY + Math.sin(angle) * RADIUS * ratio,
80
+ angle
81
+ };
82
+ }
83
+ /** 雷达图 */
84
+ var RadarChart = /*#__PURE__*/ _component((_props, _ctx) => {
85
+ const _cache = [];
86
+ const data = readonlyProp(_props, "data");
87
+ const index = readonlyProp(_props, "index");
88
+ const series = readonlyProp(_props, "series");
89
+ const max = readonlyProp(_props, "max");
90
+ const levels = readonlyProp(_props, "levels", 4);
91
+ const grid = readonlyProp(_props, "grid", "polygon");
92
+ const valueFormat = readonlyProp(_props, "valueFormat");
93
+ const unit = readonlyProp(_props, "unit");
94
+ const height = readonlyProp(_props, "height", 300);
95
+ const legend = readonlyProp(_props, "legend");
96
+ const hiddenSeries = bindable(_props, "_hiddenSeries", () => [], _ctx.emit);
97
+ const loading = readonlyProp(_props, "loading", false);
98
+ const empty = readonlyProp(_props, "empty");
99
+ const rest = restProps(_props, _ctx, true);
100
+ const lang = useLang();
101
+ const format = useFormat();
102
+ const resolved = computed(() => resolveSeries(series.value));
103
+ const visible = computed(() => resolved.value.filter((item) => !hiddenSeries.value.includes(item.key)));
104
+ let active = ref(null);
105
+ function toggle(key) {
106
+ hiddenSeries.value = hiddenSeries.value.includes(key) ? hiddenSeries.value.filter((item) => item !== key) : [...hiddenSeries.value, key];
107
+ }
108
+ return () => {
109
+ const count = data.value.length;
110
+ const values = data.value.flatMap((row) => visible.value.map((item) => seriesNumber(row, item.key) ?? 0));
111
+ const top = max.value ?? niceStep(Math.max(...values, 1) / levels.value) * levels.value;
112
+ const ratioOf = (value) => Math.max(0, Math.min(value / top, 1));
113
+ const ring = (ratio) => grid.value === "circle" ? null : data.value.map((_row, position) => polar(position, count, ratio)).map((p) => `${p.x},${p.y}`).join(" ");
114
+ const plot = count < 3 ? null : createVNode("svg", mergeProps(css.attrs(radarChartStyles.svg), {
115
+ "viewBox": `0 0 ${WIDTH} ${HEIGHT}`,
116
+ "aria-hidden": "true",
117
+ "onPointerleave": _cache[0] || (_cache[0] = () => active.value = null)
118
+ }), [
119
+ Array.from({ length: levels.value }, (_, level) => {
120
+ const ratio = (level + 1) / levels.value;
121
+ return grid.value === "circle" ? createVNode("circle", mergeProps({
122
+ "key": level,
123
+ "cx": CX,
124
+ "cy": CY,
125
+ "r": RADIUS * ratio
126
+ }, css.attrs(radarChartStyles.grid)), null) : createVNode("polygon", mergeProps({
127
+ "key": level,
128
+ "points": ring(ratio)
129
+ }, css.attrs(radarChartStyles.grid)), null);
130
+ }),
131
+ data.value.map((row, position) => {
132
+ const end = polar(position, count, 1);
133
+ const label = polar(position, count, LABEL_RADIUS / RADIUS);
134
+ const cos = Math.cos(label.angle);
135
+ return createVNode("g", { "key": position }, [createVNode("line", mergeProps({
136
+ "x1": CX,
137
+ "y1": CY,
138
+ "x2": end.x,
139
+ "y2": end.y
140
+ }, css.attrs(radarChartStyles.spoke, active.value === position && radarChartStyles.spokeActive)), null), createVNode("text", mergeProps({
141
+ "x": label.x,
142
+ "y": label.y,
143
+ "text-anchor": Math.abs(cos) < .2 ? "middle" : cos > 0 ? "start" : "end",
144
+ "dominant-baseline": "middle"
145
+ }, css.attrs(radarChartStyles.label, active.value === position && radarChartStyles.labelActive)), [String(row[index.value] ?? "")])]);
146
+ }),
147
+ Array.from({ length: levels.value }, (_, level) => createVNode("text", mergeProps({
148
+ "key": `tick-${level}`,
149
+ "x": 183,
150
+ "y": CY - RADIUS * (level + 1) / levels.value,
151
+ "dominant-baseline": "middle"
152
+ }, css.attrs(radarChartStyles.tick)), [format.number(top * (level + 1) / levels.value, valueFormat.value)])),
153
+ visible.value.map((item) => {
154
+ const points = data.value.map((row, position) => polar(position, count, ratioOf(seriesNumber(row, item.key) ?? 0)));
155
+ return createVNode("g", { "key": item.key }, [
156
+ createVNode("polygon", mergeProps({ "points": points.map((p) => `${p.x},${p.y}`).join(" ") }, css.attrs(radarChartStyles.area, css.bind(radarChartStyles.stroke, () => [item.color]))), null),
157
+ points.map((p, position) => createVNode("circle", mergeProps({
158
+ "key": position,
159
+ "cx": p.x,
160
+ "cy": p.y,
161
+ "r": active.value === position ? 4 : 2.5
162
+ }, css.attrs(radarChartStyles.vertex, css.bind(radarChartStyles.stroke, () => [item.color]))), null)),
163
+ active.value !== null && createVNode("text", mergeProps({
164
+ "x": points[active.value].x,
165
+ "y": points[active.value].y - 8,
166
+ "text-anchor": "middle"
167
+ }, css.attrs(radarChartStyles.value, css.bind(radarChartStyles.stroke, () => [item.color]), radarChartStyles.surfaceStroke)), [format.number(seriesValue(data.value[active.value], item.key) ?? 0, valueFormat.value)])
168
+ ]);
169
+ }),
170
+ data.value.map((_row, position) => {
171
+ const a = polar(position - .5, count, 1.2);
172
+ const b = polar(position + .5, count, 1.2);
173
+ return createVNode("path", mergeProps({
174
+ "key": `sector-${position}`,
175
+ "d": `M${CX} ${CY} L${a.x} ${a.y} L${b.x} ${b.y} Z`
176
+ }, css.attrs(radarChartStyles.sector), { "onPointerenter": () => active.value = position }), null);
177
+ })
178
+ ]);
179
+ return createVNode(ChartFrame, mergeProps(rest, {
180
+ "unit": unit.value,
181
+ "height": height.value,
182
+ "legend": legend.value ?? resolved.value.length > 1 ? resolved.value : [],
183
+ "hiddenKeys": hiddenSeries.value,
184
+ "onLegendToggle": toggle,
185
+ "loading": loading.value,
186
+ "skeleton": createVNode(Skeleton, { "sx": radarChartStyles.skeleton }, null),
187
+ "isEmpty": data.value.length === 0,
188
+ "empty": empty.value,
189
+ "table": {
190
+ columns: [lang.chartCategory, ...resolved.value.map((item) => unit.value ? `${item.label}(${unit.value})` : item.label)],
191
+ rows: data.value.map((row) => ({
192
+ header: String(row[index.value] ?? ""),
193
+ cells: resolved.value.map((item) => {
194
+ const value = seriesValue(row, item.key);
195
+ return value === void 0 ? lang.emptyValue : format.number(value, valueFormat.value);
196
+ })
197
+ }))
198
+ },
199
+ "plot": plot
200
+ }), null);
201
+ };
202
+ }, {
203
+ name: "RadarChart",
204
+ props: [
205
+ "data",
206
+ "index",
207
+ "series",
208
+ "max",
209
+ "levels",
210
+ "grid",
211
+ "valueFormat",
212
+ "unit",
213
+ "height",
214
+ "legend",
215
+ "_hiddenSeries",
216
+ "onUpdate:_hiddenSeries",
217
+ "loading",
218
+ "empty"
219
+ ]
220
+ });
221
+ //#endregion
222
+ export { RadarChart, radarChartStyles };
223
+
224
+ //# sourceMappingURL=RadarChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadarChart.js","names":["_vtp_readonlyProp","_vtp_bindable","_vtp_restProps","_vue_computed","_vue_ref","_createVNode","_mergeProps"],"sources":["../../src/charts/RadarChart.tsx"],"sourcesContent":["/**\n * 雷达图:几个维度上同时比较几个对象(供应商的质量、交期、价格、服务评分,方案的各项指标)。\n * 每个维度一根轴,从中心往外是 0 到 max;每个系列连成一个多边形,填一层浅色。\n *\n * <RadarChart\n * aria-label=\"供应商评分\"\n * data={[{ dimension: '质量', huachen: 86, hengyuan: 78 }, …]}\n * index=\"dimension\"\n * series={[{ key: 'huachen', label: '华辰精密' }, { key: 'hengyuan', label: '恒远五金' }]}\n * max={100}\n * />\n *\n * Unovis 没有雷达图:这里用 SVG 直接画,外层结构(图例、单位、加载与空状态、给读屏的数据表)同其他图表。\n * 悬停一个维度时那根轴加粗,各系列在这一维的数值标在顶点旁边;点图例隐藏系列。\n */\nimport { _component } from '@zerodep-dev/vue-tsx-pro-tsx';\nimport * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';\nimport type { VNodeChild } from 'vue';\nimport { useLang } from '../config/context';\nimport { useFormat, type NumericFormat } from '../config/lang/format';\nimport { Skeleton } from '../feedback/Skeleton';\nimport type { PartProps } from '../utils/props';\nimport { niceStep } from './axis-ticks';\nimport { ChartFrame, type ChartFrameParts } from './frame';\nimport { resolveSeries, seriesNumber, seriesValue, type ChartSeries } from './series';\n\n/** 未声明的属性落到外层 div(role=\"figure\")上;aria-label 是图表的名称 */\nexport interface RadarChartProps<T extends object>\n extends PartProps<'div', 'role' | 'aria-busy'>, ChartFrameParts {\n /** 数据:每一行是一个维度(质量、交期…) */\n data: readonly T[];\n /** 维度名的字段 */\n index: keyof T & string;\n /** 系列:每个系列连成一个多边形 */\n series: readonly ChartSeries<T>[];\n /** 轴的最大值;不写时按数据取一个整齐的值 */\n max?: number;\n /**\n * 网格的圈数\n * @default 4\n */\n levels?: number;\n /** 网格画成多边形(默认)或圆 */\n grid?: 'polygon' | 'circle';\n /** 数值的格式:刻度、顶点旁的数值、数据表共用 */\n valueFormat?: NumericFormat;\n /** 单位:显示在左上方 */\n unit?: string;\n /**\n * 绘图区的高度;数字按 px\n * @default 300\n */\n height?: number | string;\n /** 图例:默认多于一个系列时显示 */\n legend?: boolean;\n /** 隐藏的系列:点图例时写回,父级可以写 _hiddenSeries={keys} */\n _hiddenSeries?: string[];\n /** 加载中:绘图区显示骨架 */\n loading?: boolean;\n /** 没有数据时显示的内容 */\n empty?: VNodeChild;\n}\n\n/** RadarChart 的样式 */\nexport const radarChartStyles = css.create({\n svg: { display: 'block', width: '100%', height: '100%', overflow: 'visible' },\n grid: { fill: 'none', stroke: '_borderMuted', strokeWidth: 1 },\n spoke: { stroke: '_borderMuted', strokeWidth: 1 },\n spokeActive: { stroke: '_textMuted', strokeWidth: 1.5 },\n tick: { fill: '_textMuted', fontSize: '9px' },\n label: { fill: '_text', fontSize: '11px' },\n labelActive: { fontWeight: '_semibold' },\n // 几个系列叠在一起:填充很浅,混在一起也不发灰\n area: { fillOpacity: 0.08, strokeWidth: 2, strokeLinejoin: 'round' },\n vertex: { strokeWidth: 0 },\n value: { fontSize: '10px', fontWeight: '_semibold', paintOrder: 'stroke', strokeWidth: 3 },\n // 悬停用的扇区:透明,只接指针\n sector: { fill: 'transparent' },\n skeleton: {\n display: 'block',\n height: '100%',\n aspectRatio: '1',\n marginInline: 'auto',\n borderRadius: '50%',\n },\n stroke: (color: string) => ({ stroke: color, fill: color }),\n surfaceStroke: { stroke: '_surface' },\n});\n\n// 画布:360 × 300,中心 (180, 150),半径 108;文字在半径 124 的圈上\nconst WIDTH = 360;\nconst HEIGHT = 300;\nconst CX = WIDTH / 2;\nconst CY = HEIGHT / 2;\nconst RADIUS = 108;\nconst LABEL_RADIUS = 124;\n\n/** 第 index 个维度(共 count 个)、比例 ratio 处的点:第一个维度在正上方,顺时针 */\nfunction polar(index: number, count: number, ratio: number) {\n const angle = (Math.PI * 2 * index) / count - Math.PI / 2;\n return {\n x: CX + Math.cos(angle) * RADIUS * ratio,\n y: CY + Math.sin(angle) * RADIUS * ratio,\n angle,\n };\n}\n\n/** 雷达图 */\nexport const RadarChart = _component(\n <T extends object>({\n data,\n index,\n series,\n max,\n levels = 4,\n grid = 'polygon',\n valueFormat,\n unit,\n height = 300,\n legend,\n _hiddenSeries: hiddenSeries = _bindable<string[]>([]),\n loading = false,\n empty,\n ...rest\n }: RadarChartProps<T>) => {\n const lang = useLang();\n const format = useFormat();\n const resolved = _derived(resolveSeries(series));\n const visible = _derived(resolved.filter((item) => !hiddenSeries.includes(item.key)));\n // 悬停的维度\n let active = _state<number | null>(null);\n\n function toggle(key: string) {\n hiddenSeries = hiddenSeries.includes(key)\n ? hiddenSeries.filter((item) => item !== key)\n : [...hiddenSeries, key];\n }\n\n return () => {\n const count = data.length;\n const values = data.flatMap((row) => visible.map((item) => seriesNumber(row, item.key) ?? 0));\n // 轴的最大值:给了用它,否则取 levels 格整齐步长的整数倍\n const top = max ?? niceStep(Math.max(...values, 1) / levels) * levels;\n const ratioOf = (value: number) => Math.max(0, Math.min(value / top, 1));\n const ring = (ratio: number) =>\n grid === 'circle'\n ? null\n : data\n .map((_row, position) => polar(position, count, ratio))\n .map((p) => `${p.x},${p.y}`)\n .join(' ');\n\n const plot =\n count < 3 ? null : (\n <svg\n {...css.attrs(radarChartStyles.svg)}\n viewBox={`0 0 ${WIDTH} ${HEIGHT}`}\n aria-hidden=\"true\"\n onPointerleave={() => (active = null)}\n >\n {Array.from({ length: levels }, (_, level) => {\n const ratio = (level + 1) / levels;\n return grid === 'circle' ? (\n <circle\n key={level}\n cx={CX}\n cy={CY}\n r={RADIUS * ratio}\n {...css.attrs(radarChartStyles.grid)}\n />\n ) : (\n <polygon key={level} points={ring(ratio)!} {...css.attrs(radarChartStyles.grid)} />\n );\n })}\n {data.map((row, position) => {\n const end = polar(position, count, 1);\n const label = polar(position, count, LABEL_RADIUS / RADIUS);\n const cos = Math.cos(label.angle);\n return (\n <g key={position}>\n <line\n x1={CX}\n y1={CY}\n x2={end.x}\n y2={end.y}\n {...css.attrs(\n radarChartStyles.spoke,\n active === position && radarChartStyles.spokeActive,\n )}\n />\n <text\n x={label.x}\n y={label.y}\n text-anchor={Math.abs(cos) < 0.2 ? 'middle' : cos > 0 ? 'start' : 'end'}\n dominant-baseline=\"middle\"\n {...css.attrs(\n radarChartStyles.label,\n active === position && radarChartStyles.labelActive,\n )}\n >\n {String(row[index] ?? '')}\n </text>\n </g>\n );\n })}\n {Array.from({ length: levels }, (_, level) => (\n <text\n key={`tick-${level}`}\n x={CX + 3}\n y={CY - (RADIUS * (level + 1)) / levels}\n dominant-baseline=\"middle\"\n {...css.attrs(radarChartStyles.tick)}\n >\n {format.number((top * (level + 1)) / levels, valueFormat)}\n </text>\n ))}\n {visible.map((item) => {\n const points = data.map((row, position) =>\n polar(position, count, ratioOf(seriesNumber(row, item.key) ?? 0)),\n );\n return (\n <g key={item.key}>\n <polygon\n points={points.map((p) => `${p.x},${p.y}`).join(' ')}\n {...css.attrs(radarChartStyles.area, radarChartStyles.stroke(item.color))}\n />\n {points.map((p, position) => (\n <circle\n key={position}\n cx={p.x}\n cy={p.y}\n r={active === position ? 4 : 2.5}\n {...css.attrs(radarChartStyles.vertex, radarChartStyles.stroke(item.color))}\n />\n ))}\n {active !== null && (\n <text\n x={points[active]!.x}\n y={points[active]!.y - 8}\n text-anchor=\"middle\"\n {...css.attrs(\n radarChartStyles.value,\n radarChartStyles.stroke(item.color),\n radarChartStyles.surfaceStroke,\n )}\n >\n {format.number(seriesValue(data[active]!, item.key) ?? 0, valueFormat)}\n </text>\n )}\n </g>\n );\n })}\n {/* 悬停:每个维度一块扇区 */}\n {data.map((_row, position) => {\n const a = polar(position - 0.5, count, 1.2);\n const b = polar(position + 0.5, count, 1.2);\n return (\n <path\n key={`sector-${position}`}\n d={`M${CX} ${CY} L${a.x} ${a.y} L${b.x} ${b.y} Z`}\n {...css.attrs(radarChartStyles.sector)}\n onPointerenter={() => (active = position)}\n />\n );\n })}\n </svg>\n );\n\n return (\n <ChartFrame\n {...rest}\n unit={unit}\n height={height}\n legend={(legend ?? resolved.length > 1) ? resolved : []}\n hiddenKeys={hiddenSeries}\n onLegendToggle={toggle}\n loading={loading}\n skeleton={<Skeleton sx={radarChartStyles.skeleton} />}\n isEmpty={data.length === 0}\n empty={empty}\n table={{\n columns: [\n lang.chartCategory,\n ...resolved.map((item) => (unit ? `${item.label}(${unit})` : item.label)),\n ],\n rows: data.map((row) => ({\n header: String(row[index] ?? ''),\n cells: resolved.map((item) => {\n const value = seriesValue(row, item.key);\n return value === undefined ? lang.emptyValue : format.number(value, valueFormat);\n }),\n })),\n }}\n plot={plot}\n />\n );\n };\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import * as css from '@zerodep-dev/vue-tsx-pro-tsx/styles';
2
+ import type { VNodeChild } from 'vue';
3
+ import { type NumericFormat } from '../config/lang/format';
4
+ import type { PartProps } from '../utils/props';
5
+ import { type FlowLink, type FlowNode } from './flow';
6
+ import { type ChartFrameParts } from './frame';
7
+ /** 节点怎样排:justify 两端对齐(默认),left、right 靠向一侧,center 居中 */
8
+ export interface SankeyAligns {
9
+ /** 两端对齐(默认):按离起点的远近分列,没有流出的节点都排到最右一列 */
10
+ justify: unknown;
11
+ /** 靠左:每个节点排在离起点最近的一列 */
12
+ left: unknown;
13
+ /** 靠右:每个节点排在离终点最近的一列 */
14
+ right: unknown;
15
+ /** 居中:同靠左,但没有流入的节点往右挪,贴着它流向的节点 */
16
+ center: unknown;
17
+ }
18
+ /** 未声明的属性落到外层 div(role="figure")上,aria-label 是图表的名称 */
19
+ export interface SankeyChartProps extends PartProps<'div', 'role' | 'aria-busy'>, ChartFrameParts {
20
+ /** 节点 */
21
+ nodes: readonly FlowNode[];
22
+ /** 流向 */
23
+ links: readonly FlowLink[];
24
+ /** 数值的格式(可缩放,如以万元为单位):节点旁的总量、提示框、数据表共用 */
25
+ valueFormat?: NumericFormat;
26
+ /** 单位:显示在左上方,数值后面带上 */
27
+ unit?: string;
28
+ /**
29
+ * 绘图区的高度;数字按 px
30
+ * @default 320
31
+ */
32
+ height?: number | string;
33
+ /**
34
+ * 节点的排法
35
+ * @default 'justify'
36
+ */
37
+ align?: keyof SankeyAligns;
38
+ /**
39
+ * 悬停时的提示框
40
+ * @default true
41
+ */
42
+ tooltip?: boolean;
43
+ /**
44
+ * 加载中:绘图区显示骨架,带 aria-busy
45
+ * @default false
46
+ */
47
+ loading?: boolean;
48
+ /** 没有数据时显示的内容,默认是“暂无数据” */
49
+ empty?: VNodeChild;
50
+ }
51
+ /** SankeyChart 的样式:root(--vis-sankey-* 主题变量)、skeleton */
52
+ export declare const sankeyChartStyles: Readonly<{
53
+ root: css.CompiledStyles;
54
+ skeleton: css.CompiledStyles;
55
+ }>;
56
+ /** 桑基图 */
57
+ export declare const SankeyChart: import("@zerodep-dev/vue-tsx-pro-tsx").TsxComponent<SankeyChartProps>;
@@ -0,0 +1,150 @@
1
+ import { colors, fontSizes } from "../config/theme/tokens.js";
2
+ import { useLang } from "../config/context.js";
3
+ import { useFormat } from "../config/lang/format.js";
4
+ import { Skeleton } from "../feedback/Skeleton.js";
5
+ import { ChartFrame, chartTooltip, useChartValueText } from "./frame.js";
6
+ import { flowData, resolveFlowNodes } from "./flow.js";
7
+ import { useSingleChart } from "./single.js";
8
+ import { computed, createVNode, mergeProps, shallowRef } from "vue";
9
+ import { _component, readonlyProp, restProps } from "@zerodep-dev/vue-tsx-pro-tsx";
10
+ import * as css from "@zerodep-dev/vue-tsx-pro-tsx/styles";
11
+ import { FitMode, Sankey, SankeyNodeAlign } from "@unovis/ts";
12
+ //#region src/charts/SankeyChart.tsx
13
+ /**
14
+ * 桑基图:节点之间的流量画成粗细不同的带子,看量从哪来、到哪去、在哪流失(转化漏斗、预算分配、能源流向)。
15
+ *
16
+ * <SankeyChart aria-label="注册转化" nodes={steps} links={flows} unit="人" />
17
+ *
18
+ * 节点是 { id, label?, color? },流向是 { source, target, value }(value 可以是 Decimal、bigint,要大于 0;不能成环)。
19
+ * 带子取起点节点的颜色;悬停带子出“起点 → 终点”的流量,悬停节点出它的总量。节点旁写名字与总量。
20
+ * 单位、加载与空状态、给读屏的数据表(每条流向一行)同其他图表(见 ChartFrame)。
21
+ */
22
+ /** 节点怎样排:justify 两端对齐(默认),left、right 靠向一侧,center 居中 */
23
+ /** 未声明的属性落到外层 div(role="figure")上,aria-label 是图表的名称 */
24
+ /** SankeyChart 的样式:root(--vis-sankey-* 主题变量)、skeleton */
25
+ var sankeyChartStyles = css.create({
26
+ root: {
27
+ "--vis-sankey-node-label-color": colors.text,
28
+ "--vis-sankey-node-label-font-size": fontSizes.xs,
29
+ "--vis-sankey-node-label-font-weight": "500",
30
+ "--vis-sankey-node-label-background-fill-color": colors.surface,
31
+ "--vis-sankey-node-label-background-stroke-color": colors.borderMuted,
32
+ "--vis-sankey-node-sublabel-font-size": fontSizes.xs,
33
+ "--vis-sankey-link-opacity": "0.35",
34
+ "--vis-sankey-link-hover-opacity": "0.6"
35
+ },
36
+ skeleton: {
37
+ display: "block",
38
+ width: "100%",
39
+ height: "100%"
40
+ }
41
+ });
42
+ var ALIGNS = {
43
+ justify: SankeyNodeAlign.Justify,
44
+ left: SankeyNodeAlign.Left,
45
+ right: SankeyNodeAlign.Right,
46
+ center: SankeyNodeAlign.Center
47
+ };
48
+ /** 交给 Unovis 的节点、流向 */
49
+ /** Unovis 布局后:流向的起点、终点换成了节点对象,节点带上了总量 value */
50
+ /** 桑基图 */
51
+ var SankeyChart = /*#__PURE__*/ _component((_props, _ctx) => {
52
+ const _cache = [];
53
+ const nodes = readonlyProp(_props, "nodes");
54
+ const links = readonlyProp(_props, "links");
55
+ const valueFormat = readonlyProp(_props, "valueFormat");
56
+ const unit = readonlyProp(_props, "unit");
57
+ const height = readonlyProp(_props, "height", 320);
58
+ const align = readonlyProp(_props, "align", "justify");
59
+ const tooltip = readonlyProp(_props, "tooltip", true);
60
+ const loading = readonlyProp(_props, "loading", false);
61
+ const empty = readonlyProp(_props, "empty");
62
+ const sx = readonlyProp(_props, "sx");
63
+ const rest = restProps(_props, _ctx, true);
64
+ const lang = useLang();
65
+ const format = useFormat();
66
+ const resolved = computed(() => resolveFlowNodes(nodes.value));
67
+ const valueText = useChartValueText(() => ({
68
+ valueFormat: valueFormat.value,
69
+ unit: unit.value
70
+ }));
71
+ const labelOf = (id) => resolved.value.get(id)?.label ?? id;
72
+ let plot = shallowRef(null);
73
+ const chart = useSingleChart(() => ({
74
+ element: plot.value,
75
+ ready: !loading.value && nodes.value.length > 0,
76
+ tooltip: tooltip.value,
77
+ build: (instance) => {
78
+ const sankey = instance("sankey", () => new Sankey({ linkValue: (link) => link.amount }));
79
+ sankey.setConfig({
80
+ linkValue: (link) => link.amount,
81
+ nodeColor: (node) => node.color,
82
+ linkColor: (link) => link.source.color,
83
+ nodeAlign: ALIGNS[align.value],
84
+ label: (node) => node.label,
85
+ subLabel: (node) => node.value === void 0 ? "" : valueText(node.value),
86
+ nodePadding: 16,
87
+ nodeWidth: 12,
88
+ labelMaxWidth: 120,
89
+ labelMaxWidthTakeAvailableSpace: true,
90
+ labelFit: FitMode.Wrap,
91
+ labelBackground: true,
92
+ enableZoom: false
93
+ });
94
+ return {
95
+ component: sankey,
96
+ data: flowData(resolved.value, links.value),
97
+ triggers: {
98
+ [Sankey.selectors.link]: (link) => chart.tooltip(chartTooltip(lang.chartFlowLabel(link.source.label, link.target.label), [{
99
+ label: lang.chartValue,
100
+ color: link.source.color,
101
+ value: valueText(link.value)
102
+ }])),
103
+ [Sankey.selectors.node]: (node) => chart.tooltip(chartTooltip(node.label, [{
104
+ label: lang.chartTotal,
105
+ color: node.color,
106
+ value: valueText(node.value)
107
+ }]))
108
+ }
109
+ };
110
+ }
111
+ }));
112
+ return () => createVNode(ChartFrame, mergeProps(rest, {
113
+ "sx": [sankeyChartStyles.root, sx.value],
114
+ "unit": unit.value,
115
+ "height": height.value,
116
+ "legend": _cache[0] || (_cache[0] = []),
117
+ "hiddenKeys": _cache[1] || (_cache[1] = []),
118
+ "onLegendToggle": _cache[2] || (_cache[2] = () => {}),
119
+ "loading": loading.value,
120
+ "skeleton": createVNode(Skeleton, { "sx": sankeyChartStyles.skeleton }, null),
121
+ "isEmpty": nodes.value.length === 0,
122
+ "empty": empty.value,
123
+ "table": {
124
+ columns: [lang.chartFlow, unit.value ? `${lang.chartValue}(${unit.value})` : lang.chartValue],
125
+ rows: links.value.map((link) => ({
126
+ header: lang.chartFlowLabel(labelOf(link.source), labelOf(link.target)),
127
+ cells: [format.number(link.value, valueFormat.value)]
128
+ }))
129
+ },
130
+ "plotRef": _cache[3] || (_cache[3] = (element) => plot.value = element)
131
+ }), null);
132
+ }, {
133
+ name: "SankeyChart",
134
+ props: [
135
+ "nodes",
136
+ "links",
137
+ "valueFormat",
138
+ "unit",
139
+ "height",
140
+ "align",
141
+ "tooltip",
142
+ "loading",
143
+ "empty",
144
+ "sx"
145
+ ]
146
+ });
147
+ //#endregion
148
+ export { SankeyChart, sankeyChartStyles };
149
+
150
+ //# sourceMappingURL=SankeyChart.js.map