@qxs-bns/components 0.0.91 → 0.0.93

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 (415) hide show
  1. package/es/base/define.mjs +1 -1
  2. package/es/base/define.mjs.map +1 -1
  3. package/es/base/uid.mjs +1 -1
  4. package/es/base/uid.mjs.map +1 -1
  5. package/es/data-chart.mjs +15 -14
  6. package/es/data-chart.mjs.map +1 -1
  7. package/es/editor/blocksuite-editor.mjs +62 -51
  8. package/es/editor/blocksuite-editor.mjs.map +1 -1
  9. package/es/editor/content-format.mjs +8 -1
  10. package/es/editor/content-format.mjs.map +1 -1
  11. package/es/editor/index.mjs +1 -1
  12. package/es/editor/index.mjs.map +1 -1
  13. package/es/editor/toolbar.mjs +1 -1
  14. package/es/editor/toolbar.mjs.map +1 -1
  15. package/es/entry-data-chart.mjs +1 -1
  16. package/es/entry-editor.mjs +1 -1
  17. package/es/entry-file-upload.mjs +1 -1
  18. package/es/entry-fixed-action-bar.mjs +1 -1
  19. package/es/entry-icon.mjs +1 -1
  20. package/es/entry-image-upload.mjs +1 -1
  21. package/es/entry-photo-crop-tool.mjs +1 -1
  22. package/es/entry-subject.mjs +1 -1
  23. package/es/file-upload.mjs +25 -18
  24. package/es/file-upload.mjs.map +1 -1
  25. package/es/fixed-action-bar.mjs +5 -5
  26. package/es/fixed-action-bar.mjs.map +1 -1
  27. package/es/icon.mjs +7 -7
  28. package/es/icon.mjs.map +1 -1
  29. package/es/image-upload.mjs +26 -26
  30. package/es/image-upload.mjs.map +1 -1
  31. package/es/index.mjs +1 -1
  32. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs +59 -1
  33. package/es/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.mjs.map +1 -1
  34. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs +16 -1
  35. package/es/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.mjs.map +1 -1
  36. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs +62 -0
  37. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.mjs.map +1 -0
  38. package/es/photo-crop-tool.mjs +12 -12
  39. package/es/photo-crop-tool.mjs.map +1 -1
  40. package/es/subject/action.mjs +58 -58
  41. package/es/subject/action.mjs.map +1 -1
  42. package/es/subject/blank-fill.mjs +80 -80
  43. package/es/subject/blank-fill.mjs.map +1 -1
  44. package/es/subject/draft.mjs +1 -1
  45. package/es/subject/draft.mjs.map +1 -1
  46. package/es/subject/layout.mjs +4 -4
  47. package/es/subject/layout.mjs.map +1 -1
  48. package/es/subject/page-end.mjs +5 -5
  49. package/es/subject/page-end.mjs.map +1 -1
  50. package/es/subject/pagination.mjs +1 -1
  51. package/es/subject/pagination.mjs.map +1 -1
  52. package/es/subject/runtime.mjs +1 -1
  53. package/es/subject/runtime.mjs.map +1 -1
  54. package/es/subject/scale.mjs +53 -50
  55. package/es/subject/scale.mjs.map +1 -1
  56. package/es/subject/shared-methods.mjs +1 -1
  57. package/es/subject/shared-methods.mjs.map +1 -1
  58. package/es/subject/shared-styles.mjs +53 -15
  59. package/es/subject/shared-styles.mjs.map +1 -1
  60. package/es/subject/single-interactions.mjs +2 -0
  61. package/es/subject/single-interactions.mjs.map +1 -0
  62. package/es/subject/single-model.mjs +2 -0
  63. package/es/subject/single-model.mjs.map +1 -0
  64. package/es/subject/single-state.mjs +2 -0
  65. package/es/subject/single-state.mjs.map +1 -0
  66. package/es/subject/single.mjs +177 -177
  67. package/es/subject/single.mjs.map +1 -1
  68. package/es/subject/sort-controller.mjs +1 -1
  69. package/es/subject/sort-controller.mjs.map +1 -1
  70. package/es/subject/sortable.mjs +13 -13
  71. package/es/subject/sortable.mjs.map +1 -1
  72. package/es/subject/sorting-card.mjs +12 -12
  73. package/es/subject/sorting-card.mjs.map +1 -1
  74. package/es/subject/subject-shared.mjs +2 -0
  75. package/es/subject/subject-shared.mjs.map +1 -0
  76. package/es/subject/text-fill.mjs +73 -73
  77. package/es/subject/text-fill.mjs.map +1 -1
  78. package/es/subject/title-prefix.mjs +1 -1
  79. package/es/subject/title-prefix.mjs.map +1 -1
  80. package/es/subject/types.mjs +1 -1
  81. package/es/subject/types.mjs.map +1 -1
  82. package/lib/base/define.cjs +1 -1
  83. package/lib/base/define.cjs.map +1 -1
  84. package/lib/base/uid.cjs +1 -1
  85. package/lib/base/uid.cjs.map +1 -1
  86. package/lib/data-chart.cjs +16 -15
  87. package/lib/data-chart.cjs.map +1 -1
  88. package/lib/editor/blocksuite-editor.cjs +62 -51
  89. package/lib/editor/blocksuite-editor.cjs.map +1 -1
  90. package/lib/editor/content-format.cjs +8 -1
  91. package/lib/editor/content-format.cjs.map +1 -1
  92. package/lib/editor/index.cjs +1 -1
  93. package/lib/editor/index.cjs.map +1 -1
  94. package/lib/editor/toolbar.cjs +1 -1
  95. package/lib/editor/toolbar.cjs.map +1 -1
  96. package/lib/entry-data-chart.cjs +1 -1
  97. package/lib/entry-editor.cjs +1 -1
  98. package/lib/entry-file-upload.cjs +1 -1
  99. package/lib/entry-fixed-action-bar.cjs +1 -1
  100. package/lib/entry-icon.cjs +1 -1
  101. package/lib/entry-image-upload.cjs +1 -1
  102. package/lib/entry-photo-crop-tool.cjs +1 -1
  103. package/lib/entry-subject.cjs +1 -1
  104. package/lib/file-upload.cjs +24 -17
  105. package/lib/file-upload.cjs.map +1 -1
  106. package/lib/fixed-action-bar.cjs +6 -6
  107. package/lib/fixed-action-bar.cjs.map +1 -1
  108. package/lib/icon.cjs +9 -9
  109. package/lib/icon.cjs.map +1 -1
  110. package/lib/image-upload.cjs +26 -26
  111. package/lib/image-upload.cjs.map +1 -1
  112. package/lib/index.cjs +1 -1
  113. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs +59 -1
  114. package/lib/node_modules/.pnpm/marked@17.0.6/node_modules/marked/lib/marked.esm.cjs.map +1 -1
  115. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs +16 -1
  116. package/lib/node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm/lib/turndown-plugin-gfm.es.cjs.map +1 -1
  117. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs +62 -0
  118. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.cjs.map +1 -0
  119. package/lib/photo-crop-tool.cjs +11 -11
  120. package/lib/photo-crop-tool.cjs.map +1 -1
  121. package/lib/subject/action.cjs +42 -42
  122. package/lib/subject/action.cjs.map +1 -1
  123. package/lib/subject/blank-fill.cjs +80 -80
  124. package/lib/subject/blank-fill.cjs.map +1 -1
  125. package/lib/subject/draft.cjs +1 -1
  126. package/lib/subject/draft.cjs.map +1 -1
  127. package/lib/subject/layout.cjs +4 -4
  128. package/lib/subject/layout.cjs.map +1 -1
  129. package/lib/subject/page-end.cjs +4 -4
  130. package/lib/subject/page-end.cjs.map +1 -1
  131. package/lib/subject/pagination.cjs +1 -1
  132. package/lib/subject/pagination.cjs.map +1 -1
  133. package/lib/subject/runtime.cjs +1 -1
  134. package/lib/subject/runtime.cjs.map +1 -1
  135. package/lib/subject/scale.cjs +53 -50
  136. package/lib/subject/scale.cjs.map +1 -1
  137. package/lib/subject/shared-methods.cjs +1 -1
  138. package/lib/subject/shared-methods.cjs.map +1 -1
  139. package/lib/subject/shared-styles.cjs +54 -16
  140. package/lib/subject/shared-styles.cjs.map +1 -1
  141. package/lib/subject/single-interactions.cjs +2 -0
  142. package/lib/subject/single-interactions.cjs.map +1 -0
  143. package/lib/subject/single-model.cjs +2 -0
  144. package/lib/subject/single-model.cjs.map +1 -0
  145. package/lib/subject/single-state.cjs +2 -0
  146. package/lib/subject/single-state.cjs.map +1 -0
  147. package/lib/subject/single.cjs +177 -177
  148. package/lib/subject/single.cjs.map +1 -1
  149. package/lib/subject/sort-controller.cjs +1 -1
  150. package/lib/subject/sort-controller.cjs.map +1 -1
  151. package/lib/subject/sortable.cjs +15 -15
  152. package/lib/subject/sortable.cjs.map +1 -1
  153. package/lib/subject/sorting-card.cjs +12 -12
  154. package/lib/subject/sorting-card.cjs.map +1 -1
  155. package/lib/subject/subject-shared.cjs +2 -0
  156. package/lib/subject/subject-shared.cjs.map +1 -0
  157. package/lib/subject/text-fill.cjs +81 -81
  158. package/lib/subject/text-fill.cjs.map +1 -1
  159. package/lib/subject/title-prefix.cjs +1 -1
  160. package/lib/subject/title-prefix.cjs.map +1 -1
  161. package/lib/subject/types.cjs +1 -1
  162. package/lib/subject/types.cjs.map +1 -1
  163. package/package.json +5 -5
  164. package/types/editor/blocksuite-editor.d.ts +2 -0
  165. package/types/editor/toolbar.d.ts +1 -1
  166. package/types/file-upload.d.ts +2 -0
  167. package/types/subject/blank-fill.d.ts +1 -1
  168. package/types/subject/runtime.d.ts +1 -1
  169. package/types/subject/scale.d.ts +1 -1
  170. package/types/subject/single-interactions.d.ts +46 -0
  171. package/types/subject/single-model.d.ts +88 -0
  172. package/types/subject/single-state.d.ts +42 -0
  173. package/types/subject/single.d.ts +7 -85
  174. package/types/subject/sortable.d.ts +1 -1
  175. package/types/subject/subject-shared.d.ts +43 -0
  176. package/types/subject/text-fill.d.ts +1 -1
  177. package/README.md +0 -562
  178. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs +0 -2
  179. package/es/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.mjs.map +0 -1
  180. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs +0 -2
  181. package/es/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.mjs.map +0 -1
  182. package/es/package.json.mjs +0 -2
  183. package/es/package.json.mjs.map +0 -1
  184. package/es/src/alert/index.mjs +0 -2
  185. package/es/src/alert/index.mjs.map +0 -1
  186. package/es/src/alert/src/alert.mjs +0 -2
  187. package/es/src/alert/src/alert.mjs.map +0 -1
  188. package/es/src/components.mjs +0 -2
  189. package/es/src/components.mjs.map +0 -1
  190. package/es/src/data-chart/index.mjs +0 -2
  191. package/es/src/data-chart/index.mjs.map +0 -1
  192. package/es/src/defaults.mjs +0 -2
  193. package/es/src/defaults.mjs.map +0 -1
  194. package/es/src/dialog/src/dialog.mjs +0 -2
  195. package/es/src/dialog/src/dialog.mjs.map +0 -1
  196. package/es/src/feedback-plugin/index.mjs +0 -2
  197. package/es/src/feedback-plugin/index.mjs.map +0 -1
  198. package/es/src/file-upload/index.mjs +0 -2
  199. package/es/src/file-upload/index.mjs.map +0 -1
  200. package/es/src/icon/index.mjs +0 -2
  201. package/es/src/icon/index.mjs.map +0 -1
  202. package/es/src/icon/src/icon.mjs +0 -2
  203. package/es/src/icon/src/icon.mjs.map +0 -1
  204. package/es/src/image-upload/index.mjs +0 -2
  205. package/es/src/image-upload/index.mjs.map +0 -1
  206. package/es/src/make-installer.mjs +0 -2
  207. package/es/src/make-installer.mjs.map +0 -1
  208. package/es/src/message/src/message.mjs +0 -2
  209. package/es/src/message/src/message.mjs.map +0 -1
  210. package/es/src/photo-crop-tool/index.mjs +0 -2
  211. package/es/src/photo-crop-tool/index.mjs.map +0 -1
  212. package/es/src/tiny-mce-editor/index.mjs +0 -2
  213. package/es/src/tiny-mce-editor/index.mjs.map +0 -1
  214. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs +0 -2
  215. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue.mjs.map +0 -1
  216. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs +0 -2
  217. package/es/src/tiny-mce-editor/src/tiny-mce-editor.vue2.mjs.map +0 -1
  218. package/es/src/ui/button/index.mjs +0 -2
  219. package/es/src/ui/button/index.mjs.map +0 -1
  220. package/es/src/ui/checkbox/index.mjs +0 -2
  221. package/es/src/ui/checkbox/index.mjs.map +0 -1
  222. package/es/src/ui/dialog/index.mjs +0 -2
  223. package/es/src/ui/dialog/index.mjs.map +0 -1
  224. package/es/src/ui/input/index.mjs +0 -2
  225. package/es/src/ui/input/index.mjs.map +0 -1
  226. package/es/src/ui/input-number/index.mjs +0 -2
  227. package/es/src/ui/input-number/index.mjs.map +0 -1
  228. package/es/src/ui/layout/index.mjs +0 -2
  229. package/es/src/ui/layout/index.mjs.map +0 -1
  230. package/es/src/ui/link/index.mjs +0 -2
  231. package/es/src/ui/link/index.mjs.map +0 -1
  232. package/es/src/ui/popover/index.mjs +0 -2
  233. package/es/src/ui/popover/index.mjs.map +0 -1
  234. package/es/src/ui/radio/index.mjs +0 -2
  235. package/es/src/ui/radio/index.mjs.map +0 -1
  236. package/es/src/ui/scrollbar/index.mjs +0 -2
  237. package/es/src/ui/scrollbar/index.mjs.map +0 -1
  238. package/es/src/ui/select/index.mjs +0 -2
  239. package/es/src/ui/select/index.mjs.map +0 -1
  240. package/es/src/ui/table/index.mjs +0 -2
  241. package/es/src/ui/table/index.mjs.map +0 -1
  242. package/es/src/ui/tag/index.mjs +0 -2
  243. package/es/src/ui/tag/index.mjs.map +0 -1
  244. package/es/src/wc-bridge.mjs +0 -2
  245. package/es/src/wc-bridge.mjs.map +0 -1
  246. package/es/src/withInstall.mjs +0 -2
  247. package/es/src/withInstall.mjs.map +0 -1
  248. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs +0 -2
  249. package/lib/node_modules/.pnpm/@iconify_vue@5.0.0_vue@3.5.18_typescript@5.9.2_/node_modules/@iconify/vue/dist/iconify.cjs.map +0 -1
  250. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs +0 -2
  251. package/lib/node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.es.cjs.map +0 -1
  252. package/lib/package.json.cjs +0 -2
  253. package/lib/package.json.cjs.map +0 -1
  254. package/lib/src/alert/index.cjs +0 -2
  255. package/lib/src/alert/index.cjs.map +0 -1
  256. package/lib/src/alert/src/alert.cjs +0 -2
  257. package/lib/src/alert/src/alert.cjs.map +0 -1
  258. package/lib/src/components.cjs +0 -2
  259. package/lib/src/components.cjs.map +0 -1
  260. package/lib/src/data-chart/index.cjs +0 -2
  261. package/lib/src/data-chart/index.cjs.map +0 -1
  262. package/lib/src/defaults.cjs +0 -2
  263. package/lib/src/defaults.cjs.map +0 -1
  264. package/lib/src/dialog/src/dialog.cjs +0 -2
  265. package/lib/src/dialog/src/dialog.cjs.map +0 -1
  266. package/lib/src/feedback-plugin/index.cjs +0 -2
  267. package/lib/src/feedback-plugin/index.cjs.map +0 -1
  268. package/lib/src/file-upload/index.cjs +0 -2
  269. package/lib/src/file-upload/index.cjs.map +0 -1
  270. package/lib/src/icon/index.cjs +0 -2
  271. package/lib/src/icon/index.cjs.map +0 -1
  272. package/lib/src/icon/src/icon.cjs +0 -2
  273. package/lib/src/icon/src/icon.cjs.map +0 -1
  274. package/lib/src/image-upload/index.cjs +0 -2
  275. package/lib/src/image-upload/index.cjs.map +0 -1
  276. package/lib/src/make-installer.cjs +0 -2
  277. package/lib/src/make-installer.cjs.map +0 -1
  278. package/lib/src/message/src/message.cjs +0 -2
  279. package/lib/src/message/src/message.cjs.map +0 -1
  280. package/lib/src/photo-crop-tool/index.cjs +0 -2
  281. package/lib/src/photo-crop-tool/index.cjs.map +0 -1
  282. package/lib/src/tiny-mce-editor/index.cjs +0 -2
  283. package/lib/src/tiny-mce-editor/index.cjs.map +0 -1
  284. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs +0 -2
  285. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue.cjs.map +0 -1
  286. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs +0 -2
  287. package/lib/src/tiny-mce-editor/src/tiny-mce-editor.vue2.cjs.map +0 -1
  288. package/lib/src/ui/button/index.cjs +0 -2
  289. package/lib/src/ui/button/index.cjs.map +0 -1
  290. package/lib/src/ui/checkbox/index.cjs +0 -2
  291. package/lib/src/ui/checkbox/index.cjs.map +0 -1
  292. package/lib/src/ui/dialog/index.cjs +0 -2
  293. package/lib/src/ui/dialog/index.cjs.map +0 -1
  294. package/lib/src/ui/input/index.cjs +0 -2
  295. package/lib/src/ui/input/index.cjs.map +0 -1
  296. package/lib/src/ui/input-number/index.cjs +0 -2
  297. package/lib/src/ui/input-number/index.cjs.map +0 -1
  298. package/lib/src/ui/layout/index.cjs +0 -2
  299. package/lib/src/ui/layout/index.cjs.map +0 -1
  300. package/lib/src/ui/link/index.cjs +0 -2
  301. package/lib/src/ui/link/index.cjs.map +0 -1
  302. package/lib/src/ui/popover/index.cjs +0 -2
  303. package/lib/src/ui/popover/index.cjs.map +0 -1
  304. package/lib/src/ui/radio/index.cjs +0 -2
  305. package/lib/src/ui/radio/index.cjs.map +0 -1
  306. package/lib/src/ui/scrollbar/index.cjs +0 -2
  307. package/lib/src/ui/scrollbar/index.cjs.map +0 -1
  308. package/lib/src/ui/select/index.cjs +0 -2
  309. package/lib/src/ui/select/index.cjs.map +0 -1
  310. package/lib/src/ui/table/index.cjs +0 -2
  311. package/lib/src/ui/table/index.cjs.map +0 -1
  312. package/lib/src/ui/tag/index.cjs +0 -2
  313. package/lib/src/ui/tag/index.cjs.map +0 -1
  314. package/lib/src/wc-bridge.cjs +0 -2
  315. package/lib/src/wc-bridge.cjs.map +0 -1
  316. package/lib/src/withInstall.cjs +0 -2
  317. package/lib/src/withInstall.cjs.map +0 -1
  318. package/types/index.d.ts.map +0 -1
  319. package/types/src/alert/index.d.ts +0 -66
  320. package/types/src/alert/index.d.ts.map +0 -1
  321. package/types/src/alert/src/alert.d.ts +0 -73
  322. package/types/src/alert/src/alert.d.ts.map +0 -1
  323. package/types/src/components.d.ts +0 -10
  324. package/types/src/components.d.ts.map +0 -1
  325. package/types/src/data-chart/index.d.ts +0 -13
  326. package/types/src/data-chart/index.d.ts.map +0 -1
  327. package/types/src/defaults.d.ts +0 -6
  328. package/types/src/defaults.d.ts.map +0 -1
  329. package/types/src/dialog/index.d.ts +0 -3
  330. package/types/src/dialog/index.d.ts.map +0 -1
  331. package/types/src/dialog/src/dialog.d.ts +0 -25
  332. package/types/src/dialog/src/dialog.d.ts.map +0 -1
  333. package/types/src/feedback-plugin/index.d.ts +0 -9
  334. package/types/src/feedback-plugin/index.d.ts.map +0 -1
  335. package/types/src/file-upload/index.d.ts +0 -12
  336. package/types/src/file-upload/index.d.ts.map +0 -1
  337. package/types/src/icon/index.d.ts +0 -56
  338. package/types/src/icon/index.d.ts.map +0 -1
  339. package/types/src/icon/src/icon.d.ts +0 -62
  340. package/types/src/icon/src/icon.d.ts.map +0 -1
  341. package/types/src/image-upload/index.d.ts +0 -12
  342. package/types/src/image-upload/index.d.ts.map +0 -1
  343. package/types/src/make-installer.d.ts +0 -6
  344. package/types/src/make-installer.d.ts.map +0 -1
  345. package/types/src/message/index.d.ts +0 -3
  346. package/types/src/message/index.d.ts.map +0 -1
  347. package/types/src/message/src/message.d.ts +0 -21
  348. package/types/src/message/src/message.d.ts.map +0 -1
  349. package/types/src/message/src/toaster.vue.d.ts +0 -3
  350. package/types/src/message/src/toaster.vue.d.ts.map +0 -1
  351. package/types/src/photo-crop-tool/index.d.ts +0 -12
  352. package/types/src/photo-crop-tool/index.d.ts.map +0 -1
  353. package/types/src/subject-action/index.d.ts +0 -93
  354. package/types/src/subject-action/index.d.ts.map +0 -1
  355. package/types/src/subject-action/src/subject-action.vue.d.ts +0 -92
  356. package/types/src/subject-action/src/subject-action.vue.d.ts.map +0 -1
  357. package/types/src/subject-layout/index.d.ts +0 -30
  358. package/types/src/subject-layout/index.d.ts.map +0 -1
  359. package/types/src/subject-layout/src/subject-layout.vue.d.ts +0 -20
  360. package/types/src/subject-layout/src/subject-layout.vue.d.ts.map +0 -1
  361. package/types/src/subject-list/index.d.ts +0 -20
  362. package/types/src/subject-list/index.d.ts.map +0 -1
  363. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts +0 -24
  364. package/types/src/subject-list/src/components/SubjectPageEnd.vue.d.ts.map +0 -1
  365. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts +0 -32
  366. package/types/src/subject-list/src/components/subject-blank-fill.vue.d.ts.map +0 -1
  367. package/types/src/subject-list/src/components/subject-scale.vue.d.ts +0 -29
  368. package/types/src/subject-list/src/components/subject-scale.vue.d.ts.map +0 -1
  369. package/types/src/subject-list/src/components/subject-single.vue.d.ts +0 -37
  370. package/types/src/subject-list/src/components/subject-single.vue.d.ts.map +0 -1
  371. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts +0 -34
  372. package/types/src/subject-list/src/components/subject-text-fill.vue.d.ts.map +0 -1
  373. package/types/src/subject-list/src/subject-list.vue.d.ts +0 -21
  374. package/types/src/subject-list/src/subject-list.vue.d.ts.map +0 -1
  375. package/types/src/subject-type/index.d.ts +0 -8
  376. package/types/src/subject-type/index.d.ts.map +0 -1
  377. package/types/src/subject-type/src/subject-type.vue.d.ts +0 -7
  378. package/types/src/subject-type/src/subject-type.vue.d.ts.map +0 -1
  379. package/types/src/tiny-mce-editor/index.d.ts +0 -20
  380. package/types/src/tiny-mce-editor/index.d.ts.map +0 -1
  381. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts +0 -32
  382. package/types/src/tiny-mce-editor/src/tiny-mce-editor.vue.d.ts.map +0 -1
  383. package/types/src/ui/button/index.d.ts +0 -96
  384. package/types/src/ui/button/index.d.ts.map +0 -1
  385. package/types/src/ui/checkbox/index.d.ts +0 -111
  386. package/types/src/ui/checkbox/index.d.ts.map +0 -1
  387. package/types/src/ui/dialog/index.d.ts +0 -134
  388. package/types/src/ui/dialog/index.d.ts.map +0 -1
  389. package/types/src/ui/index.d.ts +0 -16
  390. package/types/src/ui/index.d.ts.map +0 -1
  391. package/types/src/ui/input/index.d.ts +0 -132
  392. package/types/src/ui/input/index.d.ts.map +0 -1
  393. package/types/src/ui/input-number/index.d.ts +0 -106
  394. package/types/src/ui/input-number/index.d.ts.map +0 -1
  395. package/types/src/ui/layout/index.d.ts +0 -373
  396. package/types/src/ui/layout/index.d.ts.map +0 -1
  397. package/types/src/ui/link/index.d.ts +0 -57
  398. package/types/src/ui/link/index.d.ts.map +0 -1
  399. package/types/src/ui/popover/index.d.ts +0 -89
  400. package/types/src/ui/popover/index.d.ts.map +0 -1
  401. package/types/src/ui/radio/index.d.ts +0 -84
  402. package/types/src/ui/radio/index.d.ts.map +0 -1
  403. package/types/src/ui/scrollbar/index.d.ts +0 -35
  404. package/types/src/ui/scrollbar/index.d.ts.map +0 -1
  405. package/types/src/ui/select/index.d.ts +0 -113
  406. package/types/src/ui/select/index.d.ts.map +0 -1
  407. package/types/src/ui/table/index.d.ts +0 -152
  408. package/types/src/ui/table/index.d.ts.map +0 -1
  409. package/types/src/ui/tag/index.d.ts +0 -69
  410. package/types/src/ui/tag/index.d.ts.map +0 -1
  411. package/types/src/wc-bridge.d.ts +0 -23
  412. package/types/src/wc-bridge.d.ts.map +0 -1
  413. package/types/src/withInstall.d.ts +0 -4
  414. package/types/src/withInstall.d.ts.map +0 -1
  415. package/types/tsconfig.tsbuildinfo +0 -1
@@ -1,2 +1,2 @@
1
- function e(e){return function(t){return"undefined"==typeof customElements||customElements.get(e)||customElements.define(e,t),t}}export{e as safeCustomElement};
1
+ function t(n){return function(e){return typeof customElements>"u"||customElements.get(n)||customElements.define(n,e),e}}export{t as safeCustomElement};
2
2
  //# sourceMappingURL=define.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"define.mjs","sources":["../../../../packages/components/src/base/define.ts"],"sourcesContent":["export function safeCustomElement(tagName: string) {\n return function (target: any) {\n if (typeof customElements === 'undefined') {\n return target\n }\n\n if (!customElements.get(tagName)) {\n customElements.define(tagName, target)\n }\n return target\n }\n}\n"],"names":["safeCustomElement","tagName","target","customElements","get","define"],"mappings":"AAAO,SAASA,EAAkBC,GAChC,OAAO,SAAUC,GACf,MAA8B,oBAAnBC,gBAINA,eAAeC,IAAIH,IACtBE,eAAeE,OAAOJ,EAASC,GAJxBA,CAOX,CACF"}
1
+ {"version":3,"file":"define.mjs","sources":["../../../../packages/components/src/base/define.ts"],"sourcesContent":["export function safeCustomElement(tagName: string) {\n return function (target: any) {\n if (typeof customElements === 'undefined') {\n return target\n }\n\n if (!customElements.get(tagName)) {\n customElements.define(tagName, target)\n }\n return target\n }\n}\n"],"names":["safeCustomElement","tagName","target"],"mappings":"AAAO,SAASA,EAAkBC,EAAiB,CACjD,OAAO,SAAUC,EAAa,CAC5B,OAAI,OAAO,eAAmB,KAIzB,eAAe,IAAID,CAAO,GAC7B,eAAe,OAAOA,EAASC,CAAM,EAEhCA,CACT,CACF"}
package/es/base/uid.mjs CHANGED
@@ -1,2 +1,2 @@
1
- let t=0,n=0;function o(){const o=Date.now();return o<=n?t++:(t=0,n=o),`qxs-${o.toString(36)}-${t.toString(36)}-${Math.random().toString(36).slice(2,6)}`}export{o as uid};
1
+ let n=0,e=0;function o(){const t=Date.now();return t<=e?n++:(n=0,e=t),`qxs-${t.toString(36)}-${n.toString(36)}-${Math.random().toString(36).slice(2,6)}`}export{o as uid};
2
2
  //# sourceMappingURL=uid.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"uid.mjs","sources":["../../../../packages/components/src/base/uid.ts"],"sourcesContent":["let counter = 0\nlet lastTimestamp = 0\n\nexport function uid(): string {\n const now = Date.now()\n if (now <= lastTimestamp) {\n counter++\n }\n else {\n counter = 0\n lastTimestamp = now\n }\n return `qxs-${now.toString(36)}-${counter.toString(36)}-${Math.random().toString(36).slice(2, 6)}`\n}\n"],"names":["counter","lastTimestamp","uid","now","Date","toString","Math","random","slice"],"mappings":"AAAA,IAAIA,EAAU,EACVC,EAAgB,EAEb,SAASC,IACd,MAAMC,EAAMC,KAAKD,MAQjB,OAPIA,GAAOF,EACTD,KAGAA,EAAU,EACVC,EAAgBE,GAEX,OAAOA,EAAIE,SAAS,OAAOL,EAAQK,SAAS,OAAOC,KAAKC,SAASF,SAAS,IAAIG,MAAM,EAAG,IAChG"}
1
+ {"version":3,"file":"uid.mjs","sources":["../../../../packages/components/src/base/uid.ts"],"sourcesContent":["let counter = 0\nlet lastTimestamp = 0\n\nexport function uid(): string {\n const now = Date.now()\n if (now <= lastTimestamp) {\n counter++\n }\n else {\n counter = 0\n lastTimestamp = now\n }\n return `qxs-${now.toString(36)}-${counter.toString(36)}-${Math.random().toString(36).slice(2, 6)}`\n}\n"],"names":["counter","lastTimestamp","uid","now"],"mappings":"AAAA,IAAIA,EAAU,EACVC,EAAgB,EAEb,SAASC,GAAc,CAC5B,MAAMC,EAAM,KAAK,IAAA,EACjB,OAAIA,GAAOF,EACTD,KAGAA,EAAU,EACVC,EAAgBE,GAEX,OAAOA,EAAI,SAAS,EAAE,CAAC,IAAIH,EAAQ,SAAS,EAAE,CAAC,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,EAAG,CAAC,CAAC,EAClG"}
package/es/data-chart.mjs CHANGED
@@ -1,40 +1,41 @@
1
- import*as e from"echarts";import{css as t,LitElement as r,html as s,nothing as a}from"lit";import{property as i,state as o,query as n}from"lit/decorators.js";import{repeat as l}from"lit/directives/repeat.js";import{safeCustomElement as c}from"./base/define.mjs";var h=Object.defineProperty,d=Object.getOwnPropertyDescriptor,p=(e,t,r,s)=>{for(var a,i=s>1?void 0:s?d(t,r):t,o=e.length-1;o>=0;o--)(a=e[o])&&(i=(s?a(t,r,i):a(i))||i);return s&&i&&h(t,r,i),i};function u(e){return"[object Object]"===Object.prototype.toString.call(e)}function m(e,t){if(!u(t)||!u(e))return t??e;const r={...e};return Object.entries(t).forEach(e=>{let[t,s]=e;Array.isArray(s)?r[t]=s.slice():u(s)&&u(r[t])?r[t]=m(r[t],s):r[t]=s}),r}function y(e){return Array.from(new Set(e.filter(e=>null!=e&&""!==e).map(e=>String(e))))}function b(e,t){const r=t?.trim();if(!r)return e;if(!r.startsWith("{"))return e;try{return m(e,JSON.parse(r))}catch(t){return e}}function g(e,t){return e.reduce((e,r)=>e+Number(r[t]??0),0)}let f=class extends r{constructor(){super(...arguments),this.showTypeName="table",this.subShowType="",this.modelName="",this.data={data:[],desc:{colDesc:[],groupByDesc:[],showDesc:{chartOptions:"{}",jsCodeSnippet:"",showType:null}}},this.chartOptions={},this.jsCodeSnippet="",this.lazyLoad=!0,this.geoJsonUrl="/geo-data/china.json",this._renderError="",this._chart=null,this._resizeObserver=null,this._intersectionObserver=null,this._renderToken=0,this._lazyReady=!1}get myChart(){return this._chart}connectedCallback(){super.connectedCallback()}firstUpdated(){"undefined"!=typeof ResizeObserver&&(this._resizeObserver=new ResizeObserver(()=>{this._chart?.resize()}),this._resizeObserver.observe(this)),this._syncLazyObserver()}disconnectedCallback(){super.disconnectedCallback(),this._resizeObserver?.disconnect(),this._intersectionObserver?.disconnect(),this._chart?.dispose(),this._chart=null}updated(e){e.has("lazyLoad")&&this._syncLazyObserver(),(e.has("showTypeName")||e.has("subShowType")||e.has("modelName")||e.has("data")||e.has("chartOptions")||e.has("jsCodeSnippet")||e.has("geoJsonUrl")||e.has("lazyLoad"))&&this._syncVisualization()}_syncLazyObserver(){this._intersectionObserver?.disconnect(),this._intersectionObserver=null,this.lazyLoad&&"undefined"!=typeof IntersectionObserver?(this._lazyReady=!1,this._intersectionObserver=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(this._lazyReady=!0,this._intersectionObserver?.disconnect(),this._intersectionObserver=null,this._syncVisualization())}),this._intersectionObserver.observe(this)):this._lazyReady=!0}exportExal(){const e=this._normalizeData();if(!e.rows.length)return;const t=e.columns,r=[t.join(","),...e.rows.map(e=>t.map(t=>{const r=e[t]??"";return`"${String(r).replaceAll('"','""')}"`}).join(","))],s=new Blob([`\ufeff${r.join("\n")}`],{type:"text/csv;charset=utf-8;"}),a=URL.createObjectURL(s),i=document.createElement("a");i.href=a,i.download=`${this.modelName||"data-chart"}.csv`,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)}getMyChart(){return this._chart}_normalizeData(){const e=Array.isArray(this.data?.data)?this.data.data:[],t=this.data?.desc?.groupByDesc??[],r=t.find(e=>e.xAxis&&e.colDesc)??t.find(e=>e.colDesc)??null,s=e.reduce((e,t)=>(Object.keys(t??{}).forEach(t=>{e.includes(t)||e.push(t)}),e),[]),a=r?.colDesc||s[0]||"",i=(this.data?.desc?.colDesc?.length?this.data.desc.colDesc:s.filter(e=>e!==a)).filter(Boolean),o=y(e.map(e=>e[a])),n=t.find(e=>!e.xAxis&&e.colDesc&&e.colDesc!==a)??null,l=n?.colDesc??null,c=l?y(e.map(e=>e[l])):[];return{rows:e,columns:s,xKey:a,categories:o,measureKeys:i,seriesGroupKey:l,seriesGroupValues:c}}_buildCartesianSeries(e,t){const{rows:r,categories:s,measureKeys:a,seriesGroupKey:i,seriesGroupValues:o,xKey:n}=e;return i&&o.length?o.flatMap(e=>a.map(a=>({name:`${e}-${a}`,type:t,data:s.map(t=>g(r.filter(r=>String(r[n]??"")===t&&String(r[i]??"")===e),a)),..."line"===t&&"area-basic"===this.subShowType?{areaStyle:{}}:{}}))):a.map(e=>{const a=s.map(t=>g(r.filter(e=>String(e[n]??"")===t),e));return{name:e,type:t,data:a,..."line"===t&&"area-basic"===this.subShowType?{areaStyle:{}}:{}}})}_buildChartOptions(e){const{rows:t,categories:r,xKey:s,measureKeys:a}=e,i=a[0];if(!i)return null;switch(this.showTypeName){case"bar":{const t="bar-y-category"===this.subShowType;return{title:{text:this.modelName},tooltip:{trigger:"axis"},legend:{top:8},grid:{left:16,right:16,bottom:16,top:48,containLabel:!0},xAxis:t?{type:"value"}:{type:"category",data:r,name:s},yAxis:t?{type:"category",data:r,name:s}:{type:"value"},series:this._buildCartesianSeries(e,"bar")}}case"line":return{title:{text:this.modelName},tooltip:{trigger:"axis"},legend:{top:8},grid:{left:16,right:16,bottom:16,top:48,containLabel:!0},xAxis:{type:"category",data:r,name:s},yAxis:{type:"value"},series:this._buildCartesianSeries(e,"line")};case"pie":case"funnel":{const e=r.map(e=>({name:e,value:g(t.filter(t=>String(t[s]??"")===e),i)}));return{title:{text:this.modelName},tooltip:{trigger:"item"},legend:{top:8},series:[{name:i,type:this.showTypeName,radius:"pie"===this.showTypeName&&"pie-borderRadius"===this.subShowType?["45%","70%"]:"70%",data:e}]}}case"radar":{const e=r.map(e=>g(t.filter(t=>String(t[s]??"")===e),i)),a=Math.max(...e,0)||100;return{title:{text:this.modelName},tooltip:{},radar:{indicator:r.map(e=>({name:e,max:a}))},series:[{type:"radar",data:[{value:e,name:i}]}]}}case"scatter":case"scatter-simple":{const e=a[0],r=a[1]??a[0];return{title:{text:this.modelName},tooltip:{trigger:"item"},xAxis:{type:"value",name:e},yAxis:{type:"value",name:r},series:[{type:"scatter",data:t.map((t,a)=>[Number(t[e]??a),Number(t[r]??0),t[s]??`${a+1}`])}]}}default:return null}}async _buildAreaOptions(e){const t=e.measureKeys[0];if(!t)return null;const r=this.geoJsonUrl||"/geo-data/china.json",s=await this._ensureGeoJson("china",r);if(!s)return null;const a=e.xKey,i=e.categories.map(r=>({name:r,value:g(e.rows.filter(e=>String(e[a]??"")===r),t)}));return{title:{text:this.modelName},tooltip:{trigger:"item"},visualMap:{min:0,max:Math.max(...i.map(e=>Number(e.value)),0),text:["高","低"],realtime:!1,calculable:!0,inRange:{color:["#E8F4FD","#B8D4F7","#7BA4F0","#4A7BE8","#3562e1"]}},series:[{type:"map",map:s.registrationName,roam:!0,data:i}]}}async _ensureGeoJson(t,r){const s=`${t}::${r}`,a=s;if(e.getMap(a))return{registrationName:a,geoJson:f.geoJsonCache.get(s)??{}};if(f.geoJsonCache.has(s)){const t=f.geoJsonCache.get(s);return e.registerMap(a,t),{registrationName:a,geoJson:t}}if("undefined"==typeof fetch)return this._renderError="当前环境不支持地图数据加载",null;try{const t=await fetch(r);if(!t.ok)throw new Error(`Failed to fetch ${r}`);const i=await t.json();return e.registerMap(a,i),f.geoJsonCache.set(s,i),{registrationName:a,geoJson:i}}catch(e){return this._renderError="地图数据加载失败",null}}async _syncVisualization(){if(this._renderError="",this.lazyLoad&&!this._lazyReady)return;const t=this._normalizeData();if(!t.rows.length)return this._chart?.dispose(),void(this._chart=null);if("table"===this.showTypeName||"card"===this.showTypeName)return this._chart?.dispose(),void(this._chart=null);if(await this.updateComplete,!this._chartHost)return;this._chart||(this._chart=e.init(this._chartHost));const r=++this._renderToken;let s=null;if(s="area"===this.showTypeName?await this._buildAreaOptions(t):this._buildChartOptions(t),r!==this._renderToken||!s||!this._chart)return;const a=b(m(s,this.chartOptions),this.jsCodeSnippet);this._chart.setOption(a,!0),this._chart.resize()}_renderTable(e){return s`
1
+ import*as g from"echarts";import{css as S,LitElement as N,html as d,nothing as w}from"lit";import{property as m,state as z,query as C}from"lit/decorators.js";import{repeat as v}from"lit/directives/repeat.js";import{safeCustomElement as T}from"./base/define.mjs";var D=Object.defineProperty,$=Object.getOwnPropertyDescriptor,u=(e,t,r,s)=>{for(var a=s>1?void 0:s?$(t,r):t,i=e.length-1,o;i>=0;i--)(o=e[i])&&(a=(s?o(t,r,a):o(a))||a);return s&&a&&D(t,r,a),a};function _(e){return Object.prototype.toString.call(e)==="[object Object]"}function x(e,t){if(!_(t)||!_(e))return t??e;const r={...e};return Object.entries(t).forEach(([s,a])=>{if(Array.isArray(a)){r[s]=a.slice();return}if(_(a)&&_(r[s])){r[s]=x(r[s],a);return}r[s]=a}),r}function O(e){return Array.from(new Set(e.filter(t=>t!=null&&t!=="").map(t=>String(t))))}function j(e,t){const r=t?.trim();if(!r||!r.startsWith("{"))return e;try{return x(e,JSON.parse(r))}catch{return e}}function b(e,t){return e.reduce((r,s)=>r+Number(s[t]??0),0)}let l=class extends N{constructor(){super(...arguments),this.showTypeName="table",this.subShowType="",this.modelName="",this.data={data:[],desc:{colDesc:[],groupByDesc:[],showDesc:{chartOptions:"{}",jsCodeSnippet:"",showType:null}}},this.chartOptions={},this.jsCodeSnippet="",this.lazyLoad=!0,this.geoJsonUrl="/geo-data/china.json",this._renderError="",this._chart=null,this._resizeObserver=null,this._intersectionObserver=null,this._renderToken=0,this._lazyReady=!1}get myChart(){return this._chart}connectedCallback(){super.connectedCallback()}firstUpdated(){typeof ResizeObserver<"u"&&(this._resizeObserver=new ResizeObserver(()=>{this._chart?.resize()}),this._resizeObserver.observe(this)),this._syncLazyObserver()}disconnectedCallback(){super.disconnectedCallback(),this._resizeObserver?.disconnect(),this._intersectionObserver?.disconnect(),this._chart?.dispose(),this._chart=null}updated(e){e.has("lazyLoad")&&this._syncLazyObserver(),(e.has("showTypeName")||e.has("subShowType")||e.has("modelName")||e.has("data")||e.has("chartOptions")||e.has("jsCodeSnippet")||e.has("geoJsonUrl")||e.has("lazyLoad"))&&this._syncVisualization()}_syncLazyObserver(){if(this._intersectionObserver?.disconnect(),this._intersectionObserver=null,!this.lazyLoad){this._lazyReady=!0;return}if(typeof IntersectionObserver>"u"){this._lazyReady=!0;return}this._lazyReady=!1,this._intersectionObserver=new IntersectionObserver(e=>{e.some(t=>t.isIntersecting)&&(this._lazyReady=!0,this._intersectionObserver?.disconnect(),this._intersectionObserver=null,this._syncVisualization())}),this._intersectionObserver.observe(this)}exportExal(){const e=this._normalizeData();if(!e.rows.length)return;const t=e.columns,r=[t.join(","),...e.rows.map(o=>t.map(h=>{const c=o[h]??"";return`"${String(c).replaceAll('"','""')}"`}).join(","))],s=new Blob([`\uFEFF${r.join(`
2
+ `)}`],{type:"text/csv;charset=utf-8;"}),a=URL.createObjectURL(s),i=document.createElement("a");i.href=a,i.download=`${this.modelName||"data-chart"}.csv`,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)}getMyChart(){return this._chart}_normalizeData(){const e=Array.isArray(this.data?.data)?this.data.data:[],t=this.data?.desc?.groupByDesc??[],r=t.find(n=>n.xAxis&&n.colDesc)??t.find(n=>n.colDesc)??null,s=e.reduce((n,y)=>(Object.keys(y??{}).forEach(f=>{n.includes(f)||n.push(f)}),n),[]),a=r?.colDesc||s[0]||"",i=(this.data?.desc?.colDesc?.length?this.data.desc.colDesc:s.filter(n=>n!==a)).filter(Boolean),o=O(e.map(n=>n[a])),c=(t.find(n=>!n.xAxis&&n.colDesc&&n.colDesc!==a)??null)?.colDesc??null,p=c?O(e.map(n=>n[c])):[];return{rows:e,columns:s,xKey:a,categories:o,measureKeys:i,seriesGroupKey:c,seriesGroupValues:p}}_buildCartesianSeries(e,t){const{rows:r,categories:s,measureKeys:a,seriesGroupKey:i,seriesGroupValues:o,xKey:h}=e;return!i||!o.length?a.map(c=>{const p=s.map(n=>b(r.filter(y=>String(y[h]??"")===n),c));return{name:c,type:t,data:p,...t==="line"&&this.subShowType==="area-basic"?{areaStyle:{}}:{}}}):o.flatMap(c=>a.map(p=>({name:`${c}-${p}`,type:t,data:s.map(n=>{const y=r.filter(f=>String(f[h]??"")===n&&String(f[i]??"")===c);return b(y,p)}),...t==="line"&&this.subShowType==="area-basic"?{areaStyle:{}}:{}})))}_buildChartOptions(e){const{rows:t,categories:r,xKey:s,measureKeys:a}=e,i=a[0];if(!i)return null;switch(this.showTypeName){case"bar":{const o=this.subShowType==="bar-y-category";return{title:{text:this.modelName},tooltip:{trigger:"axis"},legend:{top:8},grid:{left:16,right:16,bottom:16,top:48,containLabel:!0},xAxis:o?{type:"value"}:{type:"category",data:r,name:s},yAxis:o?{type:"category",data:r,name:s}:{type:"value"},series:this._buildCartesianSeries(e,"bar")}}case"line":return{title:{text:this.modelName},tooltip:{trigger:"axis"},legend:{top:8},grid:{left:16,right:16,bottom:16,top:48,containLabel:!0},xAxis:{type:"category",data:r,name:s},yAxis:{type:"value"},series:this._buildCartesianSeries(e,"line")};case"pie":case"funnel":{const o=r.map(h=>({name:h,value:b(t.filter(c=>String(c[s]??"")===h),i)}));return{title:{text:this.modelName},tooltip:{trigger:"item"},legend:{top:8},series:[{name:i,type:this.showTypeName,radius:this.showTypeName==="pie"&&this.subShowType==="pie-borderRadius"?["45%","70%"]:"70%",data:o}]}}case"radar":{const o=r.map(c=>b(t.filter(p=>String(p[s]??"")===c),i)),h=Math.max(...o,0)||100;return{title:{text:this.modelName},tooltip:{},radar:{indicator:r.map(c=>({name:c,max:h}))},series:[{type:"radar",data:[{value:o,name:i}]}]}}case"scatter":case"scatter-simple":{const o=a[0],h=a[1]??a[0];return{title:{text:this.modelName},tooltip:{trigger:"item"},xAxis:{type:"value",name:o},yAxis:{type:"value",name:h},series:[{type:"scatter",data:t.map((c,p)=>[Number(c[o]??p),Number(c[h]??0),c[s]??`${p+1}`])}]}}default:return null}}async _buildAreaOptions(e){const t=e.measureKeys[0];if(!t)return null;const r=this.geoJsonUrl||"/geo-data/china.json",s=await this._ensureGeoJson("china",r);if(!s)return null;const a=e.xKey,i=e.categories.map(o=>({name:o,value:b(e.rows.filter(h=>String(h[a]??"")===o),t)}));return{title:{text:this.modelName},tooltip:{trigger:"item"},visualMap:{min:0,max:Math.max(...i.map(o=>Number(o.value)),0),text:["高","低"],realtime:!1,calculable:!0,inRange:{color:["#E8F4FD","#B8D4F7","#7BA4F0","#4A7BE8","#3562e1"]}},series:[{type:"map",map:s.registrationName,roam:!0,data:i}]}}async _ensureGeoJson(e,t){const r=`${e}::${t}`,s=r;if(g.getMap(s))return{registrationName:s,geoJson:l.geoJsonCache.get(r)??{}};if(l.geoJsonCache.has(r)){const a=l.geoJsonCache.get(r);return g.registerMap(s,a),{registrationName:s,geoJson:a}}if(typeof fetch>"u")return this._renderError="当前环境不支持地图数据加载",null;try{const a=await fetch(t);if(!a.ok)throw new Error(`Failed to fetch ${t}`);const i=await a.json();return g.registerMap(s,i),l.geoJsonCache.set(r,i),{registrationName:s,geoJson:i}}catch{return this._renderError="地图数据加载失败",null}}async _syncVisualization(){if(this._renderError="",this.lazyLoad&&!this._lazyReady)return;const e=this._normalizeData();if(!e.rows.length){this._chart?.dispose(),this._chart=null;return}if(this.showTypeName==="table"||this.showTypeName==="card"){this._chart?.dispose(),this._chart=null;return}if(await this.updateComplete,!this._chartHost)return;this._chart||(this._chart=g.init(this._chartHost));const t=++this._renderToken;let r=null;if(this.showTypeName==="area"?r=await this._buildAreaOptions(e):r=this._buildChartOptions(e),t!==this._renderToken||!r||!this._chart)return;const s=j(x(r,this.chartOptions),this.jsCodeSnippet);this._chart.setOption(s,!0),this._chart.resize()}_renderTable(e){return d`
2
3
  <div class="table-wrap" part="table">
3
4
  <table>
4
5
  <thead>
5
6
  <tr>
6
- ${e.columns.map(e=>s`<th>${e}</th>`)}
7
+ ${e.columns.map(t=>d`<th>${t}</th>`)}
7
8
  </tr>
8
9
  </thead>
9
10
  <tbody>
10
- ${l(e.rows,(e,t)=>t,t=>s`
11
+ ${v(e.rows,(t,r)=>r,t=>d`
11
12
  <tr>
12
- ${e.columns.map(e=>s`<td>${t[e]??"-"}</td>`)}
13
+ ${e.columns.map(r=>d`<td>${t[r]??"-"}</td>`)}
13
14
  </tr>
14
15
  `)}
15
16
  </tbody>
16
17
  </table>
17
18
  </div>
18
- `}_renderCards(e){return s`
19
+ `}_renderCards(e){return d`
19
20
  <div class="card-wrap" part="card-list">
20
- ${l(e.rows,(e,t)=>t,t=>s`
21
+ ${v(e.rows,(t,r)=>r,t=>d`
21
22
  <article class="card-item" part="card-item">
22
23
  <div class="card-title">${e.xKey?t[e.xKey]??this.modelName:this.modelName}</div>
23
- ${e.measureKeys.map(e=>s`
24
- <div class="card-metric">${e}: <strong>${t[e]??"-"}</strong></div>
24
+ ${e.measureKeys.map(r=>d`
25
+ <div class="card-metric">${r}: <strong>${t[r]??"-"}</strong></div>
25
26
  `)}
26
27
  </article>
27
28
  `)}
28
29
  </div>
29
- `}render(){const e=this._normalizeData();return s`
30
+ `}render(){const e=this._normalizeData();return d`
30
31
  <div class="wrap">
31
- ${this.modelName?s`<div class="title">${this.modelName}</div>`:a}
32
+ ${this.modelName?d`<div class="title">${this.modelName}</div>`:w}
32
33
 
33
- ${e.rows.length?"table"===this.showTypeName?this._renderTable(e):"card"===this.showTypeName?this._renderCards(e):s`<div class="chart-host" part="chart"></div>`:s`<div class="empty">暂无数据</div>`}
34
+ ${e.rows.length?this.showTypeName==="table"?this._renderTable(e):this.showTypeName==="card"?this._renderCards(e):d`<div class="chart-host" part="chart"></div>`:d`<div class="empty">暂无数据</div>`}
34
35
 
35
- ${this._renderError?s`<div class="empty">${this._renderError}</div>`:a}
36
+ ${this._renderError?d`<div class="empty">${this._renderError}</div>`:w}
36
37
  </div>
37
- `}};f.styles=t`
38
+ `}};l.styles=S`
38
39
  :host {
39
40
  display: block;
40
41
  width: 100%;
@@ -138,5 +139,5 @@ import*as e from"echarts";import{css as t,LitElement as r,html as s,nothing as a
138
139
  line-height: 1.6;
139
140
  color: #475569;
140
141
  }
141
- `,f.geoJsonCache=new Map,p([i({type:String,attribute:"show-type-name"})],f.prototype,"showTypeName",2),p([i({type:String,attribute:"sub-show-type"})],f.prototype,"subShowType",2),p([i({type:String,attribute:"model-name"})],f.prototype,"modelName",2),p([i({attribute:!1})],f.prototype,"data",2),p([i({attribute:!1})],f.prototype,"chartOptions",2),p([i({type:String,attribute:"js-code-snippet"})],f.prototype,"jsCodeSnippet",2),p([i({type:Boolean,attribute:"lazy-load"})],f.prototype,"lazyLoad",2),p([i({type:String,attribute:"geo-json-url"})],f.prototype,"geoJsonUrl",2),p([o()],f.prototype,"_renderError",2),p([n(".chart-host")],f.prototype,"_chartHost",2),f=p([c("qxs-data-chart")],f);export{f as QxsDataChart,b as mergeChartOptionsPatch};
142
+ `;l.geoJsonCache=new Map;u([m({type:String,attribute:"show-type-name"})],l.prototype,"showTypeName",2);u([m({type:String,attribute:"sub-show-type"})],l.prototype,"subShowType",2);u([m({type:String,attribute:"model-name"})],l.prototype,"modelName",2);u([m({attribute:!1})],l.prototype,"data",2);u([m({attribute:!1})],l.prototype,"chartOptions",2);u([m({type:String,attribute:"js-code-snippet"})],l.prototype,"jsCodeSnippet",2);u([m({type:Boolean,attribute:"lazy-load"})],l.prototype,"lazyLoad",2);u([m({type:String,attribute:"geo-json-url"})],l.prototype,"geoJsonUrl",2);u([z()],l.prototype,"_renderError",2);u([C(".chart-host")],l.prototype,"_chartHost",2);l=u([T("qxs-data-chart")],l);export{l as QxsDataChart,j as mergeChartOptionsPatch};
142
143
  //# sourceMappingURL=data-chart.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-chart.mjs","sources":["../../../packages/components/src/data-chart.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { safeCustomElement } from './base/define'\n\ntype ShowTypeName =\n | 'bar'\n | 'line'\n | 'pie'\n | 'table'\n | 'area'\n | 'funnel'\n | 'card'\n | 'radar'\n | 'scatter'\n | 'scatter-simple'\n\ntype EChartRow = Record<string, string | number | null | undefined>\n\ntype EChartData = {\n data: EChartRow[]\n desc?: {\n colDesc?: string[]\n groupByDesc?: Array<{\n groupByDesc?: string | null\n groupByValues?: string[] | null\n colDesc: string | null\n xAxis: boolean\n }>\n showDesc?: {\n chartOptions?: string | null\n jsCodeSnippet?: string | null\n showType?: number | null\n }\n }\n}\n\ntype NormalizedData = {\n rows: EChartRow[]\n columns: string[]\n xKey: string\n categories: string[]\n measureKeys: string[]\n seriesGroupKey: string | null\n seriesGroupValues: string[]\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return Object.prototype.toString.call(value) === '[object Object]'\n}\n\nfunction deepMerge<T>(target: T, source: unknown): T {\n if (!isPlainObject(source) || !isPlainObject(target)) {\n return (source as T) ?? target\n }\n\n const output = { ...target } as Record<string, any>\n Object.entries(source).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n output[key] = value.slice()\n return\n }\n\n if (isPlainObject(value) && isPlainObject(output[key])) {\n output[key] = deepMerge(output[key], value)\n return\n }\n\n output[key] = value\n })\n\n return output as T\n}\n\nfunction unique(values: Array<string | number | null | undefined>) {\n return Array.from(new Set(values.filter(value => value !== null && value !== undefined && value !== '').map(value => String(value))))\n}\n\nexport function mergeChartOptionsPatch<T>(baseOptions: T, patchText: string) {\n const normalizedPatchText = patchText?.trim()\n\n if (!normalizedPatchText) {\n return baseOptions\n }\n\n if (!normalizedPatchText.startsWith('{')) {\n console.error(new Error('qxs-data-chart only accepts JSON object patches in jsCodeSnippet'))\n return baseOptions\n }\n\n try {\n return deepMerge(baseOptions, JSON.parse(normalizedPatchText))\n }\n catch (error) {\n console.error(error)\n return baseOptions\n }\n}\n\nfunction sumValues(rows: EChartRow[], key: string) {\n return rows.reduce((sum, row) => sum + Number(row[key] ?? 0), 0)\n}\n\n@safeCustomElement('qxs-data-chart')\nexport class QxsDataChart extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n min-height: 240px;\n box-sizing: border-box;\n color: #0f172a;\n font-size: 14px;\n }\n\n .wrap {\n display: grid;\n gap: 12px;\n width: 100%;\n min-width: 0;\n height: 100%;\n }\n\n .title {\n font-size: 16px;\n font-weight: 700;\n color: #0f172a;\n }\n\n .chart-host,\n .table-wrap,\n .card-wrap,\n .empty {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n min-height: 240px;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #e2e8f0;\n border-radius: 16px;\n }\n\n .chart-host {\n width: 100%;\n height: 320px;\n }\n\n .empty {\n display: grid;\n place-items: center;\n color: #64748b;\n }\n\n .table-wrap {\n overflow-x: auto;\n overflow-y: auto;\n }\n\n table {\n width: 100%;\n min-width: 100%;\n border-collapse: collapse;\n }\n\n th,\n td {\n padding: 10px 12px;\n text-align: left;\n border-bottom: 1px solid #e2e8f0;\n }\n\n th {\n position: sticky;\n top: 0;\n background: #f8fafc;\n color: #334155;\n font-weight: 700;\n }\n\n .card-wrap {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 12px;\n padding: 12px;\n }\n\n .card-item {\n display: grid;\n gap: 8px;\n padding: 14px;\n background: linear-gradient(135deg, #eff6ff, #ffffff);\n border: 1px solid #dbeafe;\n border-radius: 14px;\n }\n\n .card-title {\n font-size: 14px;\n font-weight: 700;\n color: #1d4ed8;\n }\n\n .card-metric {\n font-size: 13px;\n line-height: 1.6;\n color: #475569;\n }\n `\n\n static geoJsonCache = new Map<string, any>()\n\n @property({ type: String, attribute: 'show-type-name' }) showTypeName: ShowTypeName = 'table'\n @property({ type: String, attribute: 'sub-show-type' }) subShowType = ''\n @property({ type: String, attribute: 'model-name' }) modelName = ''\n @property({ attribute: false }) data: EChartData = {\n data: [],\n desc: {\n colDesc: [],\n groupByDesc: [],\n showDesc: {\n chartOptions: '{}',\n jsCodeSnippet: '',\n showType: null,\n },\n },\n }\n @property({ attribute: false }) chartOptions: EChartsOption = {}\n @property({ type: String, attribute: 'js-code-snippet' }) jsCodeSnippet = ''\n @property({ type: Boolean, attribute: 'lazy-load' }) lazyLoad = true\n @property({ type: String, attribute: 'geo-json-url' }) geoJsonUrl = '/geo-data/china.json'\n\n @state() private _renderError = ''\n\n @query('.chart-host') private _chartHost?: HTMLDivElement\n\n private _chart: echarts.ECharts | null = null\n private _resizeObserver: ResizeObserver | null = null\n private _intersectionObserver: IntersectionObserver | null = null\n private _renderToken = 0\n private _lazyReady = false\n\n get myChart() {\n return this._chart\n }\n\n connectedCallback() {\n super.connectedCallback()\n }\n\n firstUpdated() {\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => {\n this._chart?.resize()\n })\n this._resizeObserver.observe(this)\n }\n\n this._syncLazyObserver()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._resizeObserver?.disconnect()\n this._intersectionObserver?.disconnect()\n this._chart?.dispose()\n this._chart = null\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('lazyLoad')) {\n this._syncLazyObserver()\n }\n\n if (\n changed.has('showTypeName')\n || changed.has('subShowType')\n || changed.has('modelName')\n || changed.has('data')\n || changed.has('chartOptions')\n || changed.has('jsCodeSnippet')\n || changed.has('geoJsonUrl')\n || changed.has('lazyLoad')\n ) {\n this._syncVisualization()\n }\n }\n\n private _syncLazyObserver() {\n this._intersectionObserver?.disconnect()\n this._intersectionObserver = null\n\n if (!this.lazyLoad) {\n this._lazyReady = true\n return\n }\n\n if (typeof IntersectionObserver === 'undefined') {\n this._lazyReady = true\n return\n }\n\n this._lazyReady = false\n this._intersectionObserver = new IntersectionObserver((entries) => {\n if (!entries.some(entry => entry.isIntersecting)) {\n return\n }\n this._lazyReady = true\n this._intersectionObserver?.disconnect()\n this._intersectionObserver = null\n this._syncVisualization()\n })\n this._intersectionObserver.observe(this)\n }\n\n exportExal() {\n const normalized = this._normalizeData()\n if (!normalized.rows.length) {\n return\n }\n\n const headers = normalized.columns\n const lines = [\n headers.join(','),\n ...normalized.rows.map(row => headers.map((header) => {\n const value = row[header] ?? ''\n const text = String(value).replaceAll('\"', '\"\"')\n return `\"${text}\"`\n }).join(',')),\n ]\n\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8;' })\n const href = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = href\n anchor.download = `${this.modelName || 'data-chart'}.csv`\n anchor.style.display = 'none'\n document.body.appendChild(anchor)\n anchor.click()\n document.body.removeChild(anchor)\n URL.revokeObjectURL(href)\n }\n\n getMyChart() {\n return this._chart\n }\n\n private _normalizeData(): NormalizedData {\n const rows = Array.isArray(this.data?.data) ? this.data.data : []\n const groupByDesc = this.data?.desc?.groupByDesc ?? []\n const xGroup = groupByDesc.find(item => item.xAxis && item.colDesc) ?? groupByDesc.find(item => item.colDesc) ?? null\n const columns = rows.reduce<string[]>((result, row) => {\n Object.keys(row ?? {}).forEach((key) => {\n if (!result.includes(key)) {\n result.push(key)\n }\n })\n return result\n }, [])\n const xKey = xGroup?.colDesc || columns[0] || ''\n const measureKeys = (this.data?.desc?.colDesc?.length ? this.data.desc.colDesc : columns.filter(key => key !== xKey)).filter(Boolean)\n const categories = unique(rows.map(row => row[xKey]))\n const seriesGroup = groupByDesc.find(item => !item.xAxis && item.colDesc && item.colDesc !== xKey) ?? null\n const seriesGroupKey = seriesGroup?.colDesc ?? null\n const seriesGroupValues = seriesGroupKey ? unique(rows.map(row => row[seriesGroupKey])) : []\n\n return {\n rows,\n columns,\n xKey,\n categories,\n measureKeys,\n seriesGroupKey,\n seriesGroupValues,\n }\n }\n\n private _buildCartesianSeries(normalized: NormalizedData, type: 'bar' | 'line') {\n const { rows, categories, measureKeys, seriesGroupKey, seriesGroupValues, xKey } = normalized\n if (!seriesGroupKey || !seriesGroupValues.length) {\n return measureKeys.map((measure) => {\n const data = categories.map(category => sumValues(rows.filter(row => String(row[xKey] ?? '') === category), measure))\n return {\n name: measure,\n type,\n data,\n ...(type === 'line' && this.subShowType === 'area-basic' ? { areaStyle: {} } : {}),\n }\n })\n }\n\n return seriesGroupValues.flatMap((groupValue) => measureKeys.map((measure) => ({\n name: `${groupValue}-${measure}`,\n type,\n data: categories.map((category) => {\n const scopedRows = rows.filter(row => String(row[xKey] ?? '') === category && String(row[seriesGroupKey] ?? '') === groupValue)\n return sumValues(scopedRows, measure)\n }),\n ...(type === 'line' && this.subShowType === 'area-basic' ? { areaStyle: {} } : {}),\n })))\n }\n\n private _buildChartOptions(normalized: NormalizedData) {\n const { rows, categories, xKey, measureKeys } = normalized\n const firstMeasure = measureKeys[0]\n\n if (!firstMeasure) {\n return null\n }\n\n switch (this.showTypeName) {\n case 'bar': {\n const yCategory = this.subShowType === 'bar-y-category'\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'axis' },\n legend: { top: 8 },\n grid: { left: 16, right: 16, bottom: 16, top: 48, containLabel: true },\n xAxis: yCategory\n ? { type: 'value' }\n : { type: 'category', data: categories, name: xKey },\n yAxis: yCategory\n ? { type: 'category', data: categories, name: xKey }\n : { type: 'value' },\n series: this._buildCartesianSeries(normalized, 'bar'),\n } satisfies EChartsOption\n }\n case 'line': {\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'axis' },\n legend: { top: 8 },\n grid: { left: 16, right: 16, bottom: 16, top: 48, containLabel: true },\n xAxis: { type: 'category', data: categories, name: xKey },\n yAxis: { type: 'value' },\n series: this._buildCartesianSeries(normalized, 'line'),\n } satisfies EChartsOption\n }\n case 'pie':\n case 'funnel': {\n const seriesData = categories.map(category => ({\n name: category,\n value: sumValues(rows.filter(row => String(row[xKey] ?? '') === category), firstMeasure),\n }))\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'item' },\n legend: { top: 8 },\n series: [{\n name: firstMeasure,\n type: this.showTypeName,\n radius: this.showTypeName === 'pie' && this.subShowType === 'pie-borderRadius' ? ['45%', '70%'] : '70%',\n data: seriesData,\n }],\n } satisfies EChartsOption\n }\n case 'radar': {\n const values = categories.map(category => sumValues(rows.filter(row => String(row[xKey] ?? '') === category), firstMeasure))\n const max = Math.max(...values, 0) || 100\n return {\n title: { text: this.modelName },\n tooltip: {},\n radar: {\n indicator: categories.map(category => ({ name: category, max })),\n },\n series: [{\n type: 'radar',\n data: [{ value: values, name: firstMeasure }],\n }],\n } satisfies EChartsOption\n }\n case 'scatter':\n case 'scatter-simple': {\n const xMeasure = measureKeys[0]\n const yMeasure = measureKeys[1] ?? measureKeys[0]\n return {\n title: { text: this.modelName },\n tooltip: {\n trigger: 'item',\n },\n xAxis: { type: 'value', name: xMeasure },\n yAxis: { type: 'value', name: yMeasure },\n series: [{\n type: 'scatter',\n data: rows.map((row, index) => [\n Number(row[xMeasure] ?? index),\n Number(row[yMeasure] ?? 0),\n row[xKey] ?? `${index + 1}`,\n ]),\n }],\n } satisfies EChartsOption\n }\n default:\n return null\n }\n }\n\n private async _buildAreaOptions(normalized: NormalizedData) {\n const firstMeasure = normalized.measureKeys[0]\n if (!firstMeasure) {\n return null\n }\n\n const mapSourceUrl = this.geoJsonUrl || '/geo-data/china.json'\n const geoMeta = await this._ensureGeoJson('china', mapSourceUrl)\n if (!geoMeta) {\n return null\n }\n\n const locationKey = normalized.xKey\n const seriesData = normalized.categories.map(category => ({\n name: category,\n value: sumValues(\n normalized.rows.filter(row => String(row[locationKey] ?? '') === category),\n firstMeasure,\n ),\n }))\n\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'item' },\n visualMap: {\n min: 0,\n max: Math.max(...seriesData.map(item => Number(item.value)), 0),\n text: ['高', '低'],\n realtime: false,\n calculable: true,\n inRange: {\n color: ['#E8F4FD', '#B8D4F7', '#7BA4F0', '#4A7BE8', '#3562e1'],\n },\n },\n series: [{\n type: 'map',\n map: geoMeta.registrationName,\n roam: true,\n data: seriesData,\n }],\n } satisfies EChartsOption\n }\n\n private async _ensureGeoJson(mapName: string, url: string) {\n const cacheKey = `${mapName}::${url}`\n const registrationName = cacheKey\n\n if (echarts.getMap(registrationName)) {\n return {\n registrationName,\n geoJson: QxsDataChart.geoJsonCache.get(cacheKey) ?? {},\n }\n }\n\n if (QxsDataChart.geoJsonCache.has(cacheKey)) {\n const cached = QxsDataChart.geoJsonCache.get(cacheKey)\n echarts.registerMap(registrationName, cached)\n return {\n registrationName,\n geoJson: cached,\n }\n }\n\n if (typeof fetch === 'undefined') {\n this._renderError = '当前环境不支持地图数据加载'\n return null\n }\n\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}`)\n }\n const geoJson = await response.json()\n echarts.registerMap(registrationName, geoJson)\n QxsDataChart.geoJsonCache.set(cacheKey, geoJson)\n return {\n registrationName,\n geoJson,\n }\n }\n catch (error) {\n this._renderError = '地图数据加载失败'\n console.error(error)\n return null\n }\n }\n\n private async _syncVisualization() {\n this._renderError = ''\n if (this.lazyLoad && !this._lazyReady) {\n return\n }\n const normalized = this._normalizeData()\n\n if (!normalized.rows.length) {\n this._chart?.dispose()\n this._chart = null\n return\n }\n\n if (this.showTypeName === 'table' || this.showTypeName === 'card') {\n this._chart?.dispose()\n this._chart = null\n return\n }\n\n await this.updateComplete\n\n if (!this._chartHost) {\n return\n }\n\n if (!this._chart) {\n this._chart = echarts.init(this._chartHost)\n }\n\n const token = ++this._renderToken\n\n let baseOptions: EChartsOption | null = null\n if (this.showTypeName === 'area') {\n baseOptions = await this._buildAreaOptions(normalized)\n }\n else {\n baseOptions = this._buildChartOptions(normalized)\n }\n\n if (token !== this._renderToken || !baseOptions || !this._chart) {\n return\n }\n\n const finalOptions = mergeChartOptionsPatch(deepMerge(baseOptions, this.chartOptions), this.jsCodeSnippet)\n\n this._chart.setOption(finalOptions, true)\n this._chart.resize()\n }\n\n private _renderTable(normalized: NormalizedData) {\n return html`\n <div class=\"table-wrap\" part=\"table\">\n <table>\n <thead>\n <tr>\n ${normalized.columns.map(column => html`<th>${column}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${repeat(normalized.rows, (_, index) => index, (row) => html`\n <tr>\n ${normalized.columns.map(column => html`<td>${row[column] ?? '-'}</td>`)}\n </tr>\n `)}\n </tbody>\n </table>\n </div>\n `\n }\n\n private _renderCards(normalized: NormalizedData) {\n return html`\n <div class=\"card-wrap\" part=\"card-list\">\n ${repeat(normalized.rows, (_, index) => index, (row) => html`\n <article class=\"card-item\" part=\"card-item\">\n <div class=\"card-title\">${normalized.xKey ? row[normalized.xKey] ?? this.modelName : this.modelName}</div>\n ${normalized.measureKeys.map((key) => html`\n <div class=\"card-metric\">${key}: <strong>${row[key] ?? '-'}</strong></div>\n `)}\n </article>\n `)}\n </div>\n `\n }\n\n render() {\n const normalized = this._normalizeData()\n\n return html`\n <div class=\"wrap\">\n ${this.modelName ? html`<div class=\"title\">${this.modelName}</div>` : nothing}\n\n ${!normalized.rows.length\n ? html`<div class=\"empty\">暂无数据</div>`\n : this.showTypeName === 'table'\n ? this._renderTable(normalized)\n : this.showTypeName === 'card'\n ? this._renderCards(normalized)\n : html`<div class=\"chart-host\" part=\"chart\"></div>`}\n\n ${this._renderError ? html`<div class=\"empty\">${this._renderError}</div>` : nothing}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-data-chart': QxsDataChart\n }\n}\n"],"names":["isPlainObject","value","Object","prototype","toString","call","deepMerge","target","source","output","entries","forEach","_ref","key","Array","isArray","slice","unique","values","from","Set","filter","map","String","mergeChartOptionsPatch","baseOptions","patchText","normalizedPatchText","trim","startsWith","JSON","parse","error","sumValues","rows","reduce","sum","row","Number","QxsDataChart","LitElement","constructor","super","arguments","this","showTypeName","subShowType","modelName","data","desc","colDesc","groupByDesc","showDesc","chartOptions","jsCodeSnippet","showType","lazyLoad","geoJsonUrl","_renderError","_chart","_resizeObserver","_intersectionObserver","_renderToken","_lazyReady","myChart","connectedCallback","firstUpdated","ResizeObserver","resize","observe","_syncLazyObserver","disconnectedCallback","disconnect","dispose","updated","changed","has","_syncVisualization","IntersectionObserver","some","entry","isIntersecting","exportExal","normalized","_normalizeData","length","headers","columns","lines","join","header","replaceAll","blob","Blob","type","href","URL","createObjectURL","anchor","document","createElement","download","style","display","body","appendChild","click","removeChild","revokeObjectURL","getMyChart","xGroup","find","item","xAxis","result","keys","includes","push","xKey","measureKeys","Boolean","categories","seriesGroup","seriesGroupKey","seriesGroupValues","_buildCartesianSeries","flatMap","groupValue","measure","name","category","areaStyle","_buildChartOptions","firstMeasure","yCategory","title","text","tooltip","trigger","legend","top","grid","left","right","bottom","containLabel","yAxis","series","seriesData","radius","max","Math","radar","indicator","xMeasure","yMeasure","index","_buildAreaOptions","mapSourceUrl","geoMeta","_ensureGeoJson","locationKey","visualMap","min","realtime","calculable","inRange","color","registrationName","roam","mapName","url","cacheKey","echarts","getMap","geoJson","geoJsonCache","get","cached","registerMap","fetch","response","ok","Error","json","set","updateComplete","_chartHost","init","token","finalOptions","setOption","_renderTable","html","column","repeat","_","_renderCards","render","nothing","styles","css","Map","__decorateClass","property","attribute","state","query","safeCustomElement"],"mappings":"scAiDA,SAASA,EAAcC,GACrB,MAAiD,oBAA1CC,OAAOC,UAAUC,SAASC,KAAKJ,EACxC,CAEA,SAASK,EAAaC,EAAWC,GAC/B,IAAKR,EAAcQ,KAAYR,EAAcO,GAC3C,OAAQC,GAAgBD,EAG1B,MAAME,EAAS,IAAKF,GAepB,OAdAL,OAAOQ,QAAQF,GAAQG,QAAQC,IAAkB,IAAhBC,EAAKZ,GAAKW,EACrCE,MAAMC,QAAQd,GAChBQ,EAAOI,GAAOZ,EAAMe,QAIlBhB,EAAcC,IAAUD,EAAcS,EAAOI,IAC/CJ,EAAOI,GAAOP,EAAUG,EAAOI,GAAMZ,GAIvCQ,EAAOI,GAAOZ,IAGTQ,CACT,CAEA,SAASQ,EAAOC,GACd,OAAOJ,MAAMK,KAAK,IAAIC,IAAIF,EAAOG,OAAOpB,GAASA,SAAmD,KAAVA,GAAcqB,IAAIrB,GAASsB,OAAOtB,KAC9H,CAEO,SAASuB,EAA0BC,EAAgBC,GACxD,MAAMC,EAAsBD,GAAWE,OAEvC,IAAKD,EACH,OAAOF,EAGT,IAAKE,EAAoBE,WAAW,KAElC,OAAOJ,EAGT,IACE,OAAOnB,EAAUmB,EAAaK,KAAKC,MAAMJ,GAC3C,OACOK,GAEL,OAAOP,CACT,CACF,CAEA,SAASQ,EAAUC,EAAmBrB,GACpC,OAAOqB,EAAKC,OAAO,CAACC,EAAKC,IAAQD,EAAME,OAAOD,EAAIxB,IAAQ,GAAI,EAChE,CAGO,IAAM0B,EAAN,cAA2BC,EAA3BC,WAAAA,GAAAC,SAAAC,WA6GoDC,KAAAC,aAA6B,QAC9BD,KAAAE,YAAc,GACjBF,KAAAG,UAAY,GACjCH,KAAAI,KAAmB,CACjDA,KAAM,GACNC,KAAM,CACJC,QAAS,GACTC,YAAa,GACbC,SAAU,CACRC,aAAc,KACdC,cAAe,GACfC,SAAU,QAIgBX,KAAAS,aAA8B,CAAA,EACJT,KAAAU,cAAgB,GACrBV,KAAAY,UAAW,EACTZ,KAAAa,WAAa,uBAE3Db,KAAQc,aAAe,GAIhCd,KAAQe,OAAiC,KACzCf,KAAQgB,gBAAyC,KACjDhB,KAAQiB,sBAAqD,KAC7DjB,KAAQkB,aAAe,EACvBlB,KAAQmB,YAAa,CAAA,CAErB,WAAIC,GACF,OAAOpB,KAAKe,MACd,CAEAM,iBAAAA,GACEvB,MAAMuB,mBACR,CAEAC,YAAAA,GACgC,oBAAnBC,iBACTvB,KAAKgB,gBAAkB,IAAIO,eAAe,KACxCvB,KAAKe,QAAQS,WAEfxB,KAAKgB,gBAAgBS,QAAQzB,OAG/BA,KAAK0B,mBACP,CAEAC,oBAAAA,GACE7B,MAAM6B,uBACN3B,KAAKgB,iBAAiBY,aACtB5B,KAAKiB,uBAAuBW,aAC5B5B,KAAKe,QAAQc,UACb7B,KAAKe,OAAS,IAChB,CAEAe,OAAAA,CAAQC,GACFA,EAAQC,IAAI,aACdhC,KAAK0B,qBAILK,EAAQC,IAAI,iBACTD,EAAQC,IAAI,gBACZD,EAAQC,IAAI,cACZD,EAAQC,IAAI,SACZD,EAAQC,IAAI,iBACZD,EAAQC,IAAI,kBACZD,EAAQC,IAAI,eACZD,EAAQC,IAAI,cAEfhC,KAAKiC,oBAET,CAEQP,iBAAAA,GACN1B,KAAKiB,uBAAuBW,aAC5B5B,KAAKiB,sBAAwB,KAExBjB,KAAKY,UAK0B,oBAAzBsB,sBAKXlC,KAAKmB,YAAa,EAClBnB,KAAKiB,sBAAwB,IAAIiB,qBAAsBpE,IAChDA,EAAQqE,KAAKC,GAASA,EAAMC,kBAGjCrC,KAAKmB,YAAa,EAClBnB,KAAKiB,uBAAuBW,aAC5B5B,KAAKiB,sBAAwB,KAC7BjB,KAAKiC,wBAEPjC,KAAKiB,sBAAsBQ,QAAQzB,OAnBjCA,KAAKmB,YAAa,CAoBtB,CAEAmB,UAAAA,GACE,MAAMC,EAAavC,KAAKwC,iBACxB,IAAKD,EAAWjD,KAAKmD,OACnB,OAGF,MAAMC,EAAUH,EAAWI,QACrBC,EAAQ,CACZF,EAAQG,KAAK,QACVN,EAAWjD,KAAKZ,OAAWgE,EAAQhE,IAAKoE,IACzC,MAAMzF,EAAQoC,EAAIqD,IAAW,GAE7B,MAAO,IADMnE,OAAOtB,GAAO0F,WAAW,IAAK,WAE1CF,KAAK,OAGJG,EAAO,IAAIC,KAAK,CAAC,SAASL,EAAMC,KAAK,SAAU,CAAEK,KAAM,4BACvDC,EAAOC,IAAIC,gBAAgBL,GAC3BM,EAASC,SAASC,cAAc,KACtCF,EAAOH,KAAOA,EACdG,EAAOG,SAAW,GAAGzD,KAAKG,WAAa,mBACvCmD,EAAOI,MAAMC,QAAU,OACvBJ,SAASK,KAAKC,YAAYP,GAC1BA,EAAOQ,QACPP,SAASK,KAAKG,YAAYT,GAC1BF,IAAIY,gBAAgBb,EACtB,CAEAc,UAAAA,GACE,OAAOjE,KAAKe,MACd,CAEQyB,cAAAA,GACN,MAAMlD,EAAOpB,MAAMC,QAAQ6B,KAAKI,MAAMA,MAAQJ,KAAKI,KAAKA,KAAO,GACzDG,EAAcP,KAAKI,MAAMC,MAAME,aAAe,GAC9C2D,EAAS3D,EAAY4D,KAAKC,GAAQA,EAAKC,OAASD,EAAK9D,UAAYC,EAAY4D,KAAKC,GAAQA,EAAK9D,UAAY,KAC3GqC,EAAUrD,EAAKC,OAAiB,CAAC+E,EAAQ7E,KAC7CnC,OAAOiH,KAAK9E,GAAO,CAAA,GAAI1B,QAASE,IACzBqG,EAAOE,SAASvG,IACnBqG,EAAOG,KAAKxG,KAGTqG,GACN,IACGI,EAAOR,GAAQ5D,SAAWqC,EAAQ,IAAM,GACxCgC,GAAe3E,KAAKI,MAAMC,MAAMC,SAASmC,OAASzC,KAAKI,KAAKC,KAAKC,QAAUqC,EAAQlE,OAAOR,GAAOA,IAAQyG,IAAOjG,OAAOmG,SACvHC,EAAaxG,EAAOiB,EAAKZ,OAAWe,EAAIiF,KACxCI,EAAcvE,EAAY4D,KAAKC,IAASA,EAAKC,OAASD,EAAK9D,SAAW8D,EAAK9D,UAAYoE,IAAS,KAChGK,EAAiBD,GAAaxE,SAAW,KACzC0E,EAAoBD,EAAiB1G,EAAOiB,EAAKZ,IAAIe,GAAOA,EAAIsF,KAAoB,GAE1F,MAAO,CACLzF,OACAqD,UACA+B,OACAG,aACAF,cACAI,iBACAC,oBAEJ,CAEQC,qBAAAA,CAAsB1C,EAA4BW,GACxD,MAAM5D,KAAEA,EAAAuF,WAAMA,EAAAF,YAAYA,iBAAaI,EAAAC,kBAAgBA,EAAAN,KAAmBA,GAASnC,EACnF,OAAKwC,GAAmBC,EAAkBvC,OAYnCuC,EAAkBE,QAASC,GAAeR,EAAYjG,IAAK0G,IAAA,CAChEC,KAAM,GAAGF,KAAcC,IACvBlC,OACA9C,KAAMyE,EAAWnG,IAAK4G,GAEbjG,EADYC,EAAKb,OAAOgB,GAAOd,OAAOc,EAAIiF,IAAS,MAAQY,GAAY3G,OAAOc,EAAIsF,IAAmB,MAAQI,GACvFC,OAElB,SAATlC,GAAwC,eAArBlD,KAAKE,YAA+B,CAAEqF,UAAW,CAAA,GAAO,CAAA,MAlBxEZ,EAAYjG,IAAK0G,IACtB,MAAMhF,EAAOyE,EAAWnG,IAAI4G,GAAYjG,EAAUC,EAAKb,OAAOgB,GAAOd,OAAOc,EAAIiF,IAAS,MAAQY,GAAWF,IAC5G,MAAO,CACLC,KAAMD,EACNlC,OACA9C,UACa,SAAT8C,GAAwC,eAArBlD,KAAKE,YAA+B,CAAEqF,UAAW,CAAA,GAAO,CAAA,IAcvF,CAEQC,kBAAAA,CAAmBjD,GACzB,MAAMjD,KAAEA,EAAAuF,WAAMA,EAAAH,KAAYA,EAAAC,YAAMA,GAAgBpC,EAC1CkD,EAAed,EAAY,GAEjC,IAAKc,EACH,OAAO,KAGT,OAAQzF,KAAKC,cACX,IAAK,MAAO,CACV,MAAMyF,EAAiC,mBAArB1F,KAAKE,YACvB,MAAO,CACLyF,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CAAEC,QAAS,QACpBC,OAAQ,CAAEC,IAAK,GACfC,KAAM,CAAEC,KAAM,GAAIC,MAAO,GAAIC,OAAQ,GAAIJ,IAAK,GAAIK,cAAc,GAChEhC,MAAOqB,EACH,CAAExC,KAAM,SACR,CAAEA,KAAM,WAAY9C,KAAMyE,EAAYQ,KAAMX,GAChD4B,MAAOZ,EACH,CAAExC,KAAM,WAAY9C,KAAMyE,EAAYQ,KAAMX,GAC5C,CAAExB,KAAM,SACZqD,OAAQvG,KAAKiF,sBAAsB1C,EAAY,OAEnD,CACA,IAAK,OACH,MAAO,CACLoD,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CAAEC,QAAS,QACpBC,OAAQ,CAAEC,IAAK,GACfC,KAAM,CAAEC,KAAM,GAAIC,MAAO,GAAIC,OAAQ,GAAIJ,IAAK,GAAIK,cAAc,GAChEhC,MAAO,CAAEnB,KAAM,WAAY9C,KAAMyE,EAAYQ,KAAMX,GACnD4B,MAAO,CAAEpD,KAAM,SACfqD,OAAQvG,KAAKiF,sBAAsB1C,EAAY,SAGnD,IAAK,MACL,IAAK,SAAU,CACb,MAAMiE,EAAa3B,EAAWnG,IAAI4G,IAAA,CAChCD,KAAMC,EACNjI,MAAOgC,EAAUC,EAAKb,OAAOgB,GAAOd,OAAOc,EAAIiF,IAAS,MAAQY,GAAWG,MAE7E,MAAO,CACLE,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CAAEC,QAAS,QACpBC,OAAQ,CAAEC,IAAK,GACfO,OAAQ,CAAC,CACPlB,KAAMI,EACNvC,KAAMlD,KAAKC,aACXwG,OAA8B,QAAtBzG,KAAKC,cAA+C,qBAArBD,KAAKE,YAAqC,CAAC,MAAO,OAAS,MAClGE,KAAMoG,IAGZ,CACA,IAAK,QAAS,CACZ,MAAMlI,EAASuG,EAAWnG,IAAI4G,GAAYjG,EAAUC,EAAKb,OAAOgB,GAAOd,OAAOc,EAAIiF,IAAS,MAAQY,GAAWG,IACxGiB,EAAMC,KAAKD,OAAOpI,EAAQ,IAAM,IACtC,MAAO,CACLqH,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CAAA,EACTe,MAAO,CACLC,UAAWhC,EAAWnG,IAAI4G,IAAA,CAAeD,KAAMC,EAAUoB,UAE3DH,OAAQ,CAAC,CACPrD,KAAM,QACN9C,KAAM,CAAC,CAAE/C,MAAOiB,EAAQ+G,KAAMI,MAGpC,CACA,IAAK,UACL,IAAK,iBAAkB,CACrB,MAAMqB,EAAWnC,EAAY,GACvBoC,EAAWpC,EAAY,IAAMA,EAAY,GAC/C,MAAO,CACLgB,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CACPC,QAAS,QAEXzB,MAAO,CAAEnB,KAAM,QAASmC,KAAMyB,GAC9BR,MAAO,CAAEpD,KAAM,QAASmC,KAAM0B,GAC9BR,OAAQ,CAAC,CACPrD,KAAM,UACN9C,KAAMd,EAAKZ,IAAI,CAACe,EAAKuH,IAAU,CAC7BtH,OAAOD,EAAIqH,IAAaE,GACxBtH,OAAOD,EAAIsH,IAAa,GACxBtH,EAAIiF,IAAS,GAAGsC,EAAQ,QAIhC,CACA,QACE,OAAO,KAEb,CAEA,uBAAcC,CAAkB1E,GAC9B,MAAMkD,EAAelD,EAAWoC,YAAY,GAC5C,IAAKc,EACH,OAAO,KAGT,MAAMyB,EAAelH,KAAKa,YAAc,uBAClCsG,QAAgBnH,KAAKoH,eAAe,QAASF,GACnD,IAAKC,EACH,OAAO,KAGT,MAAME,EAAc9E,EAAWmC,KACzB8B,EAAajE,EAAWsC,WAAWnG,IAAI4G,IAAA,CAC3CD,KAAMC,EACNjI,MAAOgC,EACLkD,EAAWjD,KAAKb,OAAOgB,GAAOd,OAAOc,EAAI4H,IAAgB,MAAQ/B,GACjEG,MAIJ,MAAO,CACLE,MAAO,CAAEC,KAAM5F,KAAKG,WACpB0F,QAAS,CAAEC,QAAS,QACpBwB,UAAW,CACTC,IAAK,EACLb,IAAKC,KAAKD,OAAOF,EAAW9H,IAAI0F,GAAQ1E,OAAO0E,EAAK/G,QAAS,GAC7DuI,KAAM,CAAC,IAAK,KACZ4B,UAAU,EACVC,YAAY,EACZC,QAAS,CACPC,MAAO,CAAC,UAAW,UAAW,UAAW,UAAW,aAGxDpB,OAAQ,CAAC,CACPrD,KAAM,MACNxE,IAAKyI,EAAQS,iBACbC,MAAM,EACNzH,KAAMoG,IAGZ,CAEA,oBAAcY,CAAeU,EAAiBC,GAC5C,MAAMC,EAAW,GAAGF,MAAYC,IAC1BH,EAAmBI,EAEzB,GAAIC,EAAQC,OAAON,GACjB,MAAO,CACLA,mBACAO,QAASxI,EAAayI,aAAaC,IAAIL,IAAa,CAAA,GAIxD,GAAIrI,EAAayI,aAAapG,IAAIgG,GAAW,CAC3C,MAAMM,EAAS3I,EAAayI,aAAaC,IAAIL,GAE7C,OADAC,EAAQM,YAAYX,EAAkBU,GAC/B,CACLV,mBACAO,QAASG,EAEb,CAEA,GAAqB,oBAAVE,MAET,OADAxI,KAAKc,aAAe,gBACb,KAGT,IACE,MAAM2H,QAAiBD,MAAMT,GAC7B,IAAKU,EAASC,GACZ,MAAM,IAAIC,MAAM,mBAAmBZ,KAErC,MAAMI,QAAgBM,EAASG,OAG/B,OAFAX,EAAQM,YAAYX,EAAkBO,GACtCxI,EAAayI,aAAaS,IAAIb,EAAUG,GACjC,CACLP,mBACAO,UAEJ,OACO/I,GAGL,OAFAY,KAAKc,aAAe,WAEb,IACT,CACF,CAEA,wBAAcmB,GAEZ,GADAjC,KAAKc,aAAe,GAChBd,KAAKY,WAAaZ,KAAKmB,WACzB,OAEF,MAAMoB,EAAavC,KAAKwC,iBAExB,IAAKD,EAAWjD,KAAKmD,OAGnB,OAFAzC,KAAKe,QAAQc,eACb7B,KAAKe,OAAS,MAIhB,GAA0B,UAAtBf,KAAKC,cAAkD,SAAtBD,KAAKC,aAGxC,OAFAD,KAAKe,QAAQc,eACb7B,KAAKe,OAAS,MAMhB,SAFMf,KAAK8I,gBAEN9I,KAAK+I,WACR,OAGG/I,KAAKe,SACRf,KAAKe,OAASkH,EAAQe,KAAKhJ,KAAK+I,aAGlC,MAAME,IAAUjJ,KAAKkB,aAErB,IAAIrC,EAAoC,KAQxC,GANEA,EADwB,SAAtBmB,KAAKC,mBACaD,KAAKiH,kBAAkB1E,GAG7BvC,KAAKwF,mBAAmBjD,GAGpC0G,IAAUjJ,KAAKkB,eAAiBrC,IAAgBmB,KAAKe,OACvD,OAGF,MAAMmI,EAAetK,EAAuBlB,EAAUmB,EAAamB,KAAKS,cAAeT,KAAKU,eAE5FV,KAAKe,OAAOoI,UAAUD,GAAc,GACpClJ,KAAKe,OAAOS,QACd,CAEQ4H,YAAAA,CAAa7G,GACnB,OAAO8G,CAAA;;;;;gBAKK9G,EAAWI,QAAQjE,OAAc2K,CAAA,OAAWC;;;;cAI9CC,EAAOhH,EAAWjD,KAAM,CAACkK,EAAGxC,IAAUA,EAAQvH,GAAQ4J,CAAA;;kBAElD9G,EAAWI,QAAQjE,IAAI4K,GAAUD,CAAA,OAAW5J,EAAI6J,IAAW;;;;;;KAO3E,CAEQG,YAAAA,CAAalH,GACnB,OAAO8G,CAAA;;UAEDE,EAAOhH,EAAWjD,KAAM,CAACkK,EAAGxC,IAAUA,EAAQvH,GAAQ4J,CAAA;;sCAE1B9G,EAAWmC,KAAOjF,EAAI8C,EAAWmC,OAAS1E,KAAKG,UAAYH,KAAKG;cACxFoC,EAAWoC,YAAYjG,IAAKT,GAAQoL,CAAA;yCACTpL,cAAgBwB,EAAIxB,IAAQ;;;;;KAMnE,CAEAyL,MAAAA,GACE,MAAMnH,EAAavC,KAAKwC,iBAExB,OAAO6G,CAAA;;UAEDrJ,KAAKG,UAAYkJ,CAAA,sBAA0BrJ,KAAKG,kBAAoBwJ;;UAEnEpH,EAAWjD,KAAKmD,OAEO,UAAtBzC,KAAKC,aACHD,KAAKoJ,aAAa7G,GACI,SAAtBvC,KAAKC,aACHD,KAAKyJ,aAAalH,GAClB8G,CAAA,8CALJA,CAAA;;UAOFrJ,KAAKc,aAAeuI,CAAA,sBAA0BrJ,KAAKc,qBAAuB6I;;KAGlF,GAzkBWhK,EACJiK,OAASC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IADLlK,EA2GJyI,iBAAmB0B,IAE+BC,EAAA,CAAxDC,EAAS,CAAE9G,KAAMvE,OAAQsL,UAAW,oBA7G1BtK,EA6G8CpC,UAAA,eAAA,GACDwM,EAAA,CAAvDC,EAAS,CAAE9G,KAAMvE,OAAQsL,UAAW,mBA9G1BtK,EA8G6CpC,UAAA,cAAA,GACHwM,EAAA,CAApDC,EAAS,CAAE9G,KAAMvE,OAAQsL,UAAW,gBA/G1BtK,EA+G0CpC,UAAA,YAAA,GACrBwM,EAAA,CAA/BC,EAAS,CAAEC,WAAW,KAhHZtK,EAgHqBpC,UAAA,OAAA,GAYAwM,EAAA,CAA/BC,EAAS,CAAEC,WAAW,KA5HZtK,EA4HqBpC,UAAA,eAAA,GAC0BwM,EAAA,CAAzDC,EAAS,CAAE9G,KAAMvE,OAAQsL,UAAW,qBA7H1BtK,EA6H+CpC,UAAA,gBAAA,GACLwM,EAAA,CAApDC,EAAS,CAAE9G,KAAM0B,QAASqF,UAAW,eA9H3BtK,EA8H0CpC,UAAA,WAAA,GACEwM,EAAA,CAAtDC,EAAS,CAAE9G,KAAMvE,OAAQsL,UAAW,kBA/H1BtK,EA+H4CpC,UAAA,aAAA,GAEtCwM,EAAA,CAAhBG,KAjIUvK,EAiIMpC,UAAA,eAAA,GAEawM,EAAA,CAA7BI,EAAM,gBAnIIxK,EAmImBpC,UAAA,aAAA,GAnInBoC,EAANoK,EAAA,CADNK,EAAkB,mBACNzK"}
1
+ {"version":3,"file":"data-chart.mjs","sources":["../../../packages/components/src/data-chart.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts'\nimport * as echarts from 'echarts'\nimport { LitElement, css, html, nothing } from 'lit'\nimport { property, query, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { safeCustomElement } from './base/define'\n\ntype ShowTypeName =\n | 'bar'\n | 'line'\n | 'pie'\n | 'table'\n | 'area'\n | 'funnel'\n | 'card'\n | 'radar'\n | 'scatter'\n | 'scatter-simple'\n\ntype EChartRow = Record<string, string | number | null | undefined>\n\ntype EChartData = {\n data: EChartRow[]\n desc?: {\n colDesc?: string[]\n groupByDesc?: Array<{\n groupByDesc?: string | null\n groupByValues?: string[] | null\n colDesc: string | null\n xAxis: boolean\n }>\n showDesc?: {\n chartOptions?: string | null\n jsCodeSnippet?: string | null\n showType?: number | null\n }\n }\n}\n\ntype NormalizedData = {\n rows: EChartRow[]\n columns: string[]\n xKey: string\n categories: string[]\n measureKeys: string[]\n seriesGroupKey: string | null\n seriesGroupValues: string[]\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return Object.prototype.toString.call(value) === '[object Object]'\n}\n\nfunction deepMerge<T>(target: T, source: unknown): T {\n if (!isPlainObject(source) || !isPlainObject(target)) {\n return (source as T) ?? target\n }\n\n const output = { ...target } as Record<string, any>\n Object.entries(source).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n output[key] = value.slice()\n return\n }\n\n if (isPlainObject(value) && isPlainObject(output[key])) {\n output[key] = deepMerge(output[key], value)\n return\n }\n\n output[key] = value\n })\n\n return output as T\n}\n\nfunction unique(values: Array<string | number | null | undefined>) {\n return Array.from(new Set(values.filter(value => value !== null && value !== undefined && value !== '').map(value => String(value))))\n}\n\nexport function mergeChartOptionsPatch<T>(baseOptions: T, patchText: string) {\n const normalizedPatchText = patchText?.trim()\n\n if (!normalizedPatchText) {\n return baseOptions\n }\n\n if (!normalizedPatchText.startsWith('{')) {\n console.error(new Error('qxs-data-chart only accepts JSON object patches in jsCodeSnippet'))\n return baseOptions\n }\n\n try {\n return deepMerge(baseOptions, JSON.parse(normalizedPatchText))\n }\n catch (error) {\n console.error(error)\n return baseOptions\n }\n}\n\nfunction sumValues(rows: EChartRow[], key: string) {\n return rows.reduce((sum, row) => sum + Number(row[key] ?? 0), 0)\n}\n\n@safeCustomElement('qxs-data-chart')\nexport class QxsDataChart extends LitElement {\n static styles = css`\n :host {\n display: block;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n min-height: 240px;\n box-sizing: border-box;\n color: #0f172a;\n font-size: 14px;\n }\n\n .wrap {\n display: grid;\n gap: 12px;\n width: 100%;\n min-width: 0;\n height: 100%;\n }\n\n .title {\n font-size: 16px;\n font-weight: 700;\n color: #0f172a;\n }\n\n .chart-host,\n .table-wrap,\n .card-wrap,\n .empty {\n width: 100%;\n max-width: 100%;\n min-width: 0;\n min-height: 240px;\n box-sizing: border-box;\n background: #fff;\n border: 1px solid #e2e8f0;\n border-radius: 16px;\n }\n\n .chart-host {\n width: 100%;\n height: 320px;\n }\n\n .empty {\n display: grid;\n place-items: center;\n color: #64748b;\n }\n\n .table-wrap {\n overflow-x: auto;\n overflow-y: auto;\n }\n\n table {\n width: 100%;\n min-width: 100%;\n border-collapse: collapse;\n }\n\n th,\n td {\n padding: 10px 12px;\n text-align: left;\n border-bottom: 1px solid #e2e8f0;\n }\n\n th {\n position: sticky;\n top: 0;\n background: #f8fafc;\n color: #334155;\n font-weight: 700;\n }\n\n .card-wrap {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 12px;\n padding: 12px;\n }\n\n .card-item {\n display: grid;\n gap: 8px;\n padding: 14px;\n background: linear-gradient(135deg, #eff6ff, #ffffff);\n border: 1px solid #dbeafe;\n border-radius: 14px;\n }\n\n .card-title {\n font-size: 14px;\n font-weight: 700;\n color: #1d4ed8;\n }\n\n .card-metric {\n font-size: 13px;\n line-height: 1.6;\n color: #475569;\n }\n `\n\n static geoJsonCache = new Map<string, any>()\n\n @property({ type: String, attribute: 'show-type-name' }) showTypeName: ShowTypeName = 'table'\n @property({ type: String, attribute: 'sub-show-type' }) subShowType = ''\n @property({ type: String, attribute: 'model-name' }) modelName = ''\n @property({ attribute: false }) data: EChartData = {\n data: [],\n desc: {\n colDesc: [],\n groupByDesc: [],\n showDesc: {\n chartOptions: '{}',\n jsCodeSnippet: '',\n showType: null,\n },\n },\n }\n @property({ attribute: false }) chartOptions: EChartsOption = {}\n @property({ type: String, attribute: 'js-code-snippet' }) jsCodeSnippet = ''\n @property({ type: Boolean, attribute: 'lazy-load' }) lazyLoad = true\n @property({ type: String, attribute: 'geo-json-url' }) geoJsonUrl = '/geo-data/china.json'\n\n @state() private _renderError = ''\n\n @query('.chart-host') private _chartHost?: HTMLDivElement\n\n private _chart: echarts.ECharts | null = null\n private _resizeObserver: ResizeObserver | null = null\n private _intersectionObserver: IntersectionObserver | null = null\n private _renderToken = 0\n private _lazyReady = false\n\n get myChart() {\n return this._chart\n }\n\n connectedCallback() {\n super.connectedCallback()\n }\n\n firstUpdated() {\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => {\n this._chart?.resize()\n })\n this._resizeObserver.observe(this)\n }\n\n this._syncLazyObserver()\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this._resizeObserver?.disconnect()\n this._intersectionObserver?.disconnect()\n this._chart?.dispose()\n this._chart = null\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('lazyLoad')) {\n this._syncLazyObserver()\n }\n\n if (\n changed.has('showTypeName')\n || changed.has('subShowType')\n || changed.has('modelName')\n || changed.has('data')\n || changed.has('chartOptions')\n || changed.has('jsCodeSnippet')\n || changed.has('geoJsonUrl')\n || changed.has('lazyLoad')\n ) {\n this._syncVisualization()\n }\n }\n\n private _syncLazyObserver() {\n this._intersectionObserver?.disconnect()\n this._intersectionObserver = null\n\n if (!this.lazyLoad) {\n this._lazyReady = true\n return\n }\n\n if (typeof IntersectionObserver === 'undefined') {\n this._lazyReady = true\n return\n }\n\n this._lazyReady = false\n this._intersectionObserver = new IntersectionObserver((entries) => {\n if (!entries.some(entry => entry.isIntersecting)) {\n return\n }\n this._lazyReady = true\n this._intersectionObserver?.disconnect()\n this._intersectionObserver = null\n this._syncVisualization()\n })\n this._intersectionObserver.observe(this)\n }\n\n exportExal() {\n const normalized = this._normalizeData()\n if (!normalized.rows.length) {\n return\n }\n\n const headers = normalized.columns\n const lines = [\n headers.join(','),\n ...normalized.rows.map(row => headers.map((header) => {\n const value = row[header] ?? ''\n const text = String(value).replaceAll('\"', '\"\"')\n return `\"${text}\"`\n }).join(',')),\n ]\n\n const blob = new Blob([`\\uFEFF${lines.join('\\n')}`], { type: 'text/csv;charset=utf-8;' })\n const href = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = href\n anchor.download = `${this.modelName || 'data-chart'}.csv`\n anchor.style.display = 'none'\n document.body.appendChild(anchor)\n anchor.click()\n document.body.removeChild(anchor)\n URL.revokeObjectURL(href)\n }\n\n getMyChart() {\n return this._chart\n }\n\n private _normalizeData(): NormalizedData {\n const rows = Array.isArray(this.data?.data) ? this.data.data : []\n const groupByDesc = this.data?.desc?.groupByDesc ?? []\n const xGroup = groupByDesc.find(item => item.xAxis && item.colDesc) ?? groupByDesc.find(item => item.colDesc) ?? null\n const columns = rows.reduce<string[]>((result, row) => {\n Object.keys(row ?? {}).forEach((key) => {\n if (!result.includes(key)) {\n result.push(key)\n }\n })\n return result\n }, [])\n const xKey = xGroup?.colDesc || columns[0] || ''\n const measureKeys = (this.data?.desc?.colDesc?.length ? this.data.desc.colDesc : columns.filter(key => key !== xKey)).filter(Boolean)\n const categories = unique(rows.map(row => row[xKey]))\n const seriesGroup = groupByDesc.find(item => !item.xAxis && item.colDesc && item.colDesc !== xKey) ?? null\n const seriesGroupKey = seriesGroup?.colDesc ?? null\n const seriesGroupValues = seriesGroupKey ? unique(rows.map(row => row[seriesGroupKey])) : []\n\n return {\n rows,\n columns,\n xKey,\n categories,\n measureKeys,\n seriesGroupKey,\n seriesGroupValues,\n }\n }\n\n private _buildCartesianSeries(normalized: NormalizedData, type: 'bar' | 'line') {\n const { rows, categories, measureKeys, seriesGroupKey, seriesGroupValues, xKey } = normalized\n if (!seriesGroupKey || !seriesGroupValues.length) {\n return measureKeys.map((measure) => {\n const data = categories.map(category => sumValues(rows.filter(row => String(row[xKey] ?? '') === category), measure))\n return {\n name: measure,\n type,\n data,\n ...(type === 'line' && this.subShowType === 'area-basic' ? { areaStyle: {} } : {}),\n }\n })\n }\n\n return seriesGroupValues.flatMap((groupValue) => measureKeys.map((measure) => ({\n name: `${groupValue}-${measure}`,\n type,\n data: categories.map((category) => {\n const scopedRows = rows.filter(row => String(row[xKey] ?? '') === category && String(row[seriesGroupKey] ?? '') === groupValue)\n return sumValues(scopedRows, measure)\n }),\n ...(type === 'line' && this.subShowType === 'area-basic' ? { areaStyle: {} } : {}),\n })))\n }\n\n private _buildChartOptions(normalized: NormalizedData) {\n const { rows, categories, xKey, measureKeys } = normalized\n const firstMeasure = measureKeys[0]\n\n if (!firstMeasure) {\n return null\n }\n\n switch (this.showTypeName) {\n case 'bar': {\n const yCategory = this.subShowType === 'bar-y-category'\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'axis' },\n legend: { top: 8 },\n grid: { left: 16, right: 16, bottom: 16, top: 48, containLabel: true },\n xAxis: yCategory\n ? { type: 'value' }\n : { type: 'category', data: categories, name: xKey },\n yAxis: yCategory\n ? { type: 'category', data: categories, name: xKey }\n : { type: 'value' },\n series: this._buildCartesianSeries(normalized, 'bar'),\n } satisfies EChartsOption\n }\n case 'line': {\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'axis' },\n legend: { top: 8 },\n grid: { left: 16, right: 16, bottom: 16, top: 48, containLabel: true },\n xAxis: { type: 'category', data: categories, name: xKey },\n yAxis: { type: 'value' },\n series: this._buildCartesianSeries(normalized, 'line'),\n } satisfies EChartsOption\n }\n case 'pie':\n case 'funnel': {\n const seriesData = categories.map(category => ({\n name: category,\n value: sumValues(rows.filter(row => String(row[xKey] ?? '') === category), firstMeasure),\n }))\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'item' },\n legend: { top: 8 },\n series: [{\n name: firstMeasure,\n type: this.showTypeName,\n radius: this.showTypeName === 'pie' && this.subShowType === 'pie-borderRadius' ? ['45%', '70%'] : '70%',\n data: seriesData,\n }],\n } satisfies EChartsOption\n }\n case 'radar': {\n const values = categories.map(category => sumValues(rows.filter(row => String(row[xKey] ?? '') === category), firstMeasure))\n const max = Math.max(...values, 0) || 100\n return {\n title: { text: this.modelName },\n tooltip: {},\n radar: {\n indicator: categories.map(category => ({ name: category, max })),\n },\n series: [{\n type: 'radar',\n data: [{ value: values, name: firstMeasure }],\n }],\n } satisfies EChartsOption\n }\n case 'scatter':\n case 'scatter-simple': {\n const xMeasure = measureKeys[0]\n const yMeasure = measureKeys[1] ?? measureKeys[0]\n return {\n title: { text: this.modelName },\n tooltip: {\n trigger: 'item',\n },\n xAxis: { type: 'value', name: xMeasure },\n yAxis: { type: 'value', name: yMeasure },\n series: [{\n type: 'scatter',\n data: rows.map((row, index) => [\n Number(row[xMeasure] ?? index),\n Number(row[yMeasure] ?? 0),\n row[xKey] ?? `${index + 1}`,\n ]),\n }],\n } satisfies EChartsOption\n }\n default:\n return null\n }\n }\n\n private async _buildAreaOptions(normalized: NormalizedData) {\n const firstMeasure = normalized.measureKeys[0]\n if (!firstMeasure) {\n return null\n }\n\n const mapSourceUrl = this.geoJsonUrl || '/geo-data/china.json'\n const geoMeta = await this._ensureGeoJson('china', mapSourceUrl)\n if (!geoMeta) {\n return null\n }\n\n const locationKey = normalized.xKey\n const seriesData = normalized.categories.map(category => ({\n name: category,\n value: sumValues(\n normalized.rows.filter(row => String(row[locationKey] ?? '') === category),\n firstMeasure,\n ),\n }))\n\n return {\n title: { text: this.modelName },\n tooltip: { trigger: 'item' },\n visualMap: {\n min: 0,\n max: Math.max(...seriesData.map(item => Number(item.value)), 0),\n text: ['高', '低'],\n realtime: false,\n calculable: true,\n inRange: {\n color: ['#E8F4FD', '#B8D4F7', '#7BA4F0', '#4A7BE8', '#3562e1'],\n },\n },\n series: [{\n type: 'map',\n map: geoMeta.registrationName,\n roam: true,\n data: seriesData,\n }],\n } satisfies EChartsOption\n }\n\n private async _ensureGeoJson(mapName: string, url: string) {\n const cacheKey = `${mapName}::${url}`\n const registrationName = cacheKey\n\n if (echarts.getMap(registrationName)) {\n return {\n registrationName,\n geoJson: QxsDataChart.geoJsonCache.get(cacheKey) ?? {},\n }\n }\n\n if (QxsDataChart.geoJsonCache.has(cacheKey)) {\n const cached = QxsDataChart.geoJsonCache.get(cacheKey)\n echarts.registerMap(registrationName, cached)\n return {\n registrationName,\n geoJson: cached,\n }\n }\n\n if (typeof fetch === 'undefined') {\n this._renderError = '当前环境不支持地图数据加载'\n return null\n }\n\n try {\n const response = await fetch(url)\n if (!response.ok) {\n throw new Error(`Failed to fetch ${url}`)\n }\n const geoJson = await response.json()\n echarts.registerMap(registrationName, geoJson)\n QxsDataChart.geoJsonCache.set(cacheKey, geoJson)\n return {\n registrationName,\n geoJson,\n }\n }\n catch (error) {\n this._renderError = '地图数据加载失败'\n console.error(error)\n return null\n }\n }\n\n private async _syncVisualization() {\n this._renderError = ''\n if (this.lazyLoad && !this._lazyReady) {\n return\n }\n const normalized = this._normalizeData()\n\n if (!normalized.rows.length) {\n this._chart?.dispose()\n this._chart = null\n return\n }\n\n if (this.showTypeName === 'table' || this.showTypeName === 'card') {\n this._chart?.dispose()\n this._chart = null\n return\n }\n\n await this.updateComplete\n\n if (!this._chartHost) {\n return\n }\n\n if (!this._chart) {\n this._chart = echarts.init(this._chartHost)\n }\n\n const token = ++this._renderToken\n\n let baseOptions: EChartsOption | null = null\n if (this.showTypeName === 'area') {\n baseOptions = await this._buildAreaOptions(normalized)\n }\n else {\n baseOptions = this._buildChartOptions(normalized)\n }\n\n if (token !== this._renderToken || !baseOptions || !this._chart) {\n return\n }\n\n const finalOptions = mergeChartOptionsPatch(deepMerge(baseOptions, this.chartOptions), this.jsCodeSnippet)\n\n this._chart.setOption(finalOptions, true)\n this._chart.resize()\n }\n\n private _renderTable(normalized: NormalizedData) {\n return html`\n <div class=\"table-wrap\" part=\"table\">\n <table>\n <thead>\n <tr>\n ${normalized.columns.map(column => html`<th>${column}</th>`)}\n </tr>\n </thead>\n <tbody>\n ${repeat(normalized.rows, (_, index) => index, (row) => html`\n <tr>\n ${normalized.columns.map(column => html`<td>${row[column] ?? '-'}</td>`)}\n </tr>\n `)}\n </tbody>\n </table>\n </div>\n `\n }\n\n private _renderCards(normalized: NormalizedData) {\n return html`\n <div class=\"card-wrap\" part=\"card-list\">\n ${repeat(normalized.rows, (_, index) => index, (row) => html`\n <article class=\"card-item\" part=\"card-item\">\n <div class=\"card-title\">${normalized.xKey ? row[normalized.xKey] ?? this.modelName : this.modelName}</div>\n ${normalized.measureKeys.map((key) => html`\n <div class=\"card-metric\">${key}: <strong>${row[key] ?? '-'}</strong></div>\n `)}\n </article>\n `)}\n </div>\n `\n }\n\n render() {\n const normalized = this._normalizeData()\n\n return html`\n <div class=\"wrap\">\n ${this.modelName ? html`<div class=\"title\">${this.modelName}</div>` : nothing}\n\n ${!normalized.rows.length\n ? html`<div class=\"empty\">暂无数据</div>`\n : this.showTypeName === 'table'\n ? this._renderTable(normalized)\n : this.showTypeName === 'card'\n ? this._renderCards(normalized)\n : html`<div class=\"chart-host\" part=\"chart\"></div>`}\n\n ${this._renderError ? html`<div class=\"empty\">${this._renderError}</div>` : nothing}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'qxs-data-chart': QxsDataChart\n }\n}\n"],"names":["isPlainObject","value","deepMerge","target","source","output","key","unique","values","mergeChartOptionsPatch","baseOptions","patchText","normalizedPatchText","sumValues","rows","sum","row","QxsDataChart","LitElement","changed","entries","entry","normalized","headers","lines","header","blob","href","anchor","groupByDesc","xGroup","item","columns","result","xKey","measureKeys","categories","seriesGroupKey","seriesGroupValues","type","measure","data","category","groupValue","scopedRows","firstMeasure","yCategory","seriesData","max","xMeasure","yMeasure","index","mapSourceUrl","geoMeta","locationKey","mapName","url","cacheKey","registrationName","echarts","cached","response","geoJson","token","finalOptions","html","column","repeat","_","nothing","css","__decorateClass","property","state","query","safeCustomElement"],"mappings":"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"}