x-next 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/AI_USAGE.md +182 -4
  2. package/CHANGELOG.md +74 -0
  3. package/dist/_hooks/use-chart-size.d.ts +25 -0
  4. package/dist/_utils/chart/index.d.ts +6 -0
  5. package/dist/_utils/chart/padding.d.ts +15 -0
  6. package/dist/_utils/chart/path.d.ts +34 -0
  7. package/dist/_utils/chart/scale.d.ts +55 -0
  8. package/dist/components/_components/chart/ChartAxis.d.ts +85 -0
  9. package/dist/components/_components/chart/ChartLegend.d.ts +26 -0
  10. package/dist/components/_components/chart/ChartTooltip.d.ts +76 -0
  11. package/dist/components/_components/chart/colors.d.ts +10 -0
  12. package/dist/components/_components/chart/interface.d.ts +38 -0
  13. package/dist/components/bar-chart/BarChart.d.ts +278 -0
  14. package/dist/components/bar-chart/helpers/layout.d.ts +55 -0
  15. package/dist/components/bar-chart/index.d.ts +600 -0
  16. package/dist/components/bar-chart/interface.d.ts +74 -0
  17. package/dist/components/bar-chart/props.d.ts +145 -0
  18. package/dist/components/date-picker/DatePicker.vue.d.ts +3 -3
  19. package/dist/components/date-picker/index.d.ts +6 -6
  20. package/dist/components/draggable/Draggable.d.ts +1 -1
  21. package/dist/components/draggable/index.d.ts +2 -2
  22. package/dist/components/drawer/index.d.ts +6 -6
  23. package/dist/components/drawer/src/Drawer.vue.d.ts +3 -3
  24. package/dist/components/dropdown/Dropdown.vue.d.ts +4 -4
  25. package/dist/components/dropdown/DropdownButton.vue.d.ts +5 -5
  26. package/dist/components/dropdown/DropdownSubmenu.vue.d.ts +4 -4
  27. package/dist/components/dropdown/index.d.ts +29 -29
  28. package/dist/components/form/FormItem.vue.d.ts +12 -12
  29. package/dist/components/form/form-item-label.vue.d.ts +3 -3
  30. package/dist/components/form/index.d.ts +24 -24
  31. package/dist/components/form-select/Select.d.ts +3 -3
  32. package/dist/components/form-select/index.d.ts +6 -6
  33. package/dist/components/form-slider/Slider.vue.d.ts +3 -3
  34. package/dist/components/form-slider/index.d.ts +6 -6
  35. package/dist/components/form-slider/slider-button.vue.d.ts +3 -3
  36. package/dist/components/grid/Row.vue.d.ts +3 -3
  37. package/dist/components/grid/index.d.ts +9 -9
  38. package/dist/components/heatmap/Heatmap.d.ts +10 -0
  39. package/dist/components/heatmap/index.d.ts +30 -0
  40. package/dist/components/image/Image.vue.d.ts +125 -17
  41. package/dist/components/image/ImagePreview.vue.d.ts +97 -7
  42. package/dist/components/image/ImagePreviewAction.d.ts +3 -3
  43. package/dist/components/image/ImagePreviewGroup.vue.d.ts +100 -7
  44. package/dist/components/image/hooks/use-image-drag.d.ts +2 -2
  45. package/dist/components/image/index.d.ts +712 -124
  46. package/dist/components/image/interface.d.ts +9 -1
  47. package/dist/components/image/preview-toolbar.vue.d.ts +3 -3
  48. package/dist/components/index.d.ts +4 -0
  49. package/dist/components/line-chart/LineChart.d.ts +295 -0
  50. package/dist/components/line-chart/helpers/layout.d.ts +74 -0
  51. package/dist/components/line-chart/index.d.ts +614 -0
  52. package/dist/components/line-chart/interface.d.ts +76 -0
  53. package/dist/components/line-chart/props.d.ts +173 -0
  54. package/dist/components/menu/sub-menu-pop.vue.d.ts +3 -3
  55. package/dist/components/pagination/page-options.vue.d.ts +6 -6
  56. package/dist/components/pie-chart/PieChart.d.ts +219 -0
  57. package/dist/components/pie-chart/index.d.ts +470 -0
  58. package/dist/components/pie-chart/interface.d.ts +58 -0
  59. package/dist/components/pie-chart/props.d.ts +107 -0
  60. package/dist/components/popconfirm/src/popup.vue.d.ts +3 -3
  61. package/dist/components/popover/Popover.d.ts +1 -1
  62. package/dist/components/popover/index.d.ts +3 -3
  63. package/dist/components/popup/Popup.d.ts +1 -1
  64. package/dist/components/popup/index.d.ts +3 -3
  65. package/dist/components/space/Space.d.ts +1 -1
  66. package/dist/components/space/index.d.ts +3 -3
  67. package/dist/components/tabs/Tabs.d.ts +1 -1
  68. package/dist/components/tabs/index.d.ts +3 -3
  69. package/dist/components/time-picker/TimePicker.vue.d.ts +3 -3
  70. package/dist/components/time-picker/index.d.ts +6 -6
  71. package/dist/components/tooltip/Tooltip.vue.d.ts +1 -1
  72. package/dist/components/tooltip/index.d.ts +3 -3
  73. package/dist/components/trend-chart/components/TrendChart.d.ts +19 -96
  74. package/dist/components/trend-chart/index.d.ts +33 -187
  75. package/dist/components/trend-chart/props.d.ts +9 -78
  76. package/dist/components/trend-chart/themes.d.ts +0 -1
  77. package/dist/components/trigger/Trigger.d.ts +1 -1
  78. package/dist/components/trigger/index.d.ts +3 -3
  79. package/dist/components/upload/Upload.d.ts +372 -0
  80. package/dist/components/upload/context.d.ts +28 -0
  81. package/dist/components/upload/index.d.ts +656 -0
  82. package/dist/components/upload/interface.d.ts +110 -0
  83. package/dist/components/upload/props.d.ts +321 -0
  84. package/dist/components/upload/upload-list-item.d.ts +15 -0
  85. package/dist/components/upload/upload-list.d.ts +11 -0
  86. package/dist/components/upload/upload-picture-item.d.ts +20 -0
  87. package/dist/components/upload/upload-trigger.d.ts +8 -0
  88. package/dist/components/upload/utils.d.ts +48 -0
  89. package/dist/es/_hooks/use-chart-size.js +25 -0
  90. package/dist/es/_styles/palette-aliases.js +7 -4
  91. package/dist/es/_utils/chart/padding.js +22 -0
  92. package/dist/es/_utils/chart/path.js +69 -0
  93. package/dist/es/_utils/chart/scale.js +77 -0
  94. package/dist/es/components/_components/chart/ChartAxis.js +79 -0
  95. package/dist/es/components/_components/chart/ChartLegend.js +53 -0
  96. package/dist/es/components/_components/chart/ChartTooltip.js +64 -0
  97. package/dist/es/components/_components/chart/colors.js +12 -0
  98. package/dist/es/components/bar-chart/BarChart.js +470 -0
  99. package/dist/es/components/bar-chart/helpers/layout.js +53 -0
  100. package/dist/es/components/bar-chart/index.js +8 -0
  101. package/dist/es/components/bar-chart/props.js +148 -0
  102. package/dist/es/components/heatmap/Heatmap.js +244 -169
  103. package/dist/es/components/image/Image.vue.js +55 -45
  104. package/dist/es/components/image/Image.vue2.js +113 -92
  105. package/dist/es/components/image/ImagePreview.vue.js +66 -53
  106. package/dist/es/components/image/ImagePreview.vue2.js +219 -171
  107. package/dist/es/components/image/ImagePreviewAction.js +12 -15
  108. package/dist/es/components/image/ImagePreviewGroup.vue.js +21 -20
  109. package/dist/es/components/image/ImagePreviewGroup.vue2.js +45 -39
  110. package/dist/es/components/image/hooks/use-image-drag.js +16 -14
  111. package/dist/es/components/index.js +136 -128
  112. package/dist/es/components/line-chart/LineChart.js +532 -0
  113. package/dist/es/components/line-chart/helpers/layout.js +80 -0
  114. package/dist/es/components/line-chart/index.js +8 -0
  115. package/dist/es/components/line-chart/props.js +178 -0
  116. package/dist/es/components/pie-chart/PieChart.js +397 -0
  117. package/dist/es/components/pie-chart/index.js +8 -0
  118. package/dist/es/components/pie-chart/props.js +104 -0
  119. package/dist/es/components/trend-chart/components/TrendChart.js +143 -183
  120. package/dist/es/components/trend-chart/components/trend-chart-curve.js +85 -81
  121. package/dist/es/components/trend-chart/props.js +28 -74
  122. package/dist/es/components/trend-chart/themes.js +30 -31
  123. package/dist/es/components/upload/Upload.js +420 -0
  124. package/dist/es/components/upload/context.js +4 -0
  125. package/dist/es/components/upload/index.js +8 -0
  126. package/dist/es/components/upload/props.js +321 -0
  127. package/dist/es/components/upload/upload-list-item.js +138 -0
  128. package/dist/es/components/upload/upload-list.js +48 -0
  129. package/dist/es/components/upload/upload-picture-item.js +109 -0
  130. package/dist/es/components/upload/upload-trigger.js +89 -0
  131. package/dist/es/components/upload/utils.js +195 -0
  132. package/dist/es/icons/_self/upload-icons.js +103 -0
  133. package/dist/es/index.js +197 -189
  134. package/dist/es/locale/en-US.js +30 -1
  135. package/dist/es/locale/zh-CN.js +30 -1
  136. package/dist/es/style.css +1 -1
  137. package/dist/icons/_self/upload-icons.d.ts +523 -0
  138. package/dist/index.cjs +4 -4
  139. package/dist/index.umd.js +4 -4
  140. package/dist/locale/interface.d.ts +45 -0
  141. package/dist/style/bar-chart.css +1 -0
  142. package/dist/style/bar-chart.js +2 -0
  143. package/dist/style/base.css +1 -1
  144. package/dist/style/heatmap.css +1 -1
  145. package/dist/style/image.css +1 -1
  146. package/dist/style/line-chart.css +1 -0
  147. package/dist/style/line-chart.js +2 -0
  148. package/dist/style/pie-chart.css +1 -0
  149. package/dist/style/pie-chart.js +2 -0
  150. package/dist/style/upload.css +1 -0
  151. package/dist/style/upload.js +2 -0
  152. package/dist/style.css +1 -1
  153. package/dist/types.d.ts +4 -0
  154. package/package.json +1 -1
  155. package/volar.d.ts +4 -0
  156. package/dist/components/trend-chart/components/trend-chart-grid.d.ts +0 -55
  157. package/dist/components/trend-chart/components/trend-chart-labels.d.ts +0 -26
  158. package/dist/components/trend-chart/helpers/genPath.d.ts +0 -8
  159. package/dist/components/trend-chart/helpers/getPadding.d.ts +0 -8
  160. package/dist/components/trend-chart/helpers/validatePadding.d.ts +0 -2
  161. package/dist/es/_hooks/use-popup-overflow-hidden.js +0 -29
  162. package/dist/es/components/trend-chart/components/trend-chart-grid.js +0 -62
  163. package/dist/es/components/trend-chart/components/trend-chart-labels.js +0 -75
  164. package/dist/es/components/trend-chart/helpers/genPath.js +0 -22
  165. package/dist/es/components/trend-chart/helpers/getPadding.js +0 -21
  166. package/dist/es/components/trend-chart/helpers/validatePadding.js +0 -7
package/AI_USAGE.md CHANGED
@@ -1,11 +1,11 @@
1
1
  <!-- Generated by pnpm generate:ai-usage. Edit src/docs/guide/ai-usage-recipes.md and script/ai-usage/manifest.js. -->
2
2
  # x-next AI 使用手册
3
3
 
4
- 适用版本:**x-next@1.6.0**。Vue:`^3.5.0`;Node:`>=20.19.0`。
4
+ 适用版本:**x-next@1.8.0**。Vue:`^3.5.0`;Node:`>=20.19.0`。
5
5
 
6
- 来源指纹(精选示例、映射、版本与公开类型声明):`8b4e92e3477781a27ff136cbc59a1f8508ba69d45a4f5539daeee1de7a5d9570`。
6
+ 来源指纹(精选示例、映射、版本与公开类型声明):`3e81e69933489d5ab6307ac5eaa38e89cb26004916f02f2556f74d18b1ed1766`。
7
7
 
8
- 先按业务需要选择组件,不要求全部迁移。本手册限定在用户确认的 22 个组件及必要的同族子组件,未覆盖的导出不表示已完成业务验收。
8
+ 先按业务需要选择组件,不要求全部迁移。本手册限定在用户确认的 26 个组件及必要的同族子组件,未覆盖的导出不表示已完成业务验收。
9
9
 
10
10
  读取入口:`node_modules/x-next/AI_USAGE.md`;可用 `require.resolve('x-next/AI_USAGE.md')` 定位。这个文件名不会自动让所有 AI 工具加载,消费项目应在自己的指令中明确引用。
11
11
 
@@ -35,7 +35,11 @@
35
35
  | Steps | `Steps` | `<x-steps>` | `v-model:current` | [组件文档](https://x-next.ztes.com/components/steps) |
36
36
  | Tabs | `Tabs` | `<x-tabs>` | `v-model:active-key` | [组件文档](https://x-next.ztes.com/components/tabs) |
37
37
  | Empty | `Empty` | `<x-empty>` | 无 | [组件文档](https://x-next.ztes.com/components/empty) |
38
- 这是一份给业务开发者和 AI Coding 使用的中文代码手册。以下 22 个入口是本手册选定的常用组件与服务;公开导出还有其他能力,不能据此推断所有导出都具有相同成熟度,也不要求每个项目全部使用。
38
+ | Upload | `Upload` | `<x-upload>` | `v-model:file-list` | [组件文档](https://x-next.ztes.com/components/upload) |
39
+ | BarChart | `BarChart` | `<x-bar-chart>` | 无 | [组件文档](https://x-next.ztes.com/components/bar-chart) |
40
+ | LineChart | `LineChart` | `<x-line-chart>` | 无 | [组件文档](https://x-next.ztes.com/components/line-chart) |
41
+ | PieChart | `PieChart` | `<x-pie-chart>` | 无 | [组件文档](https://x-next.ztes.com/components/pie-chart) |
42
+ 这是一份给业务开发者和 AI Coding 使用的中文代码手册。以下 26 个入口是本手册选定的常用组件与服务;公开导出还有其他能力,不能据此推断所有导出都具有相同成熟度,也不要求每个项目全部使用。
39
43
 
40
44
  每节提供一个可复制到 `App.vue` 的独立 Vue SFC,显式从 `x-next` 根入口导入,并包含全量 CSS。实际项目可将重复的 CSS 导入统一移到应用入口。本文是代码配方,不新增 live demo;每节链接的既有组件文档提供可交互示例和完整 API。
41
45
 
@@ -645,3 +649,177 @@ function refresh() { refreshed.value = true; }
645
649
  </Empty>
646
650
  </template>
647
651
  ```
652
+
653
+ ## Upload
654
+
655
+ [组件文档与 live demo](https://x-next.ztes.com/components/upload)。`action` 是上传地址,也可用 `customRequest` 接管请求;两者都没提供时组件不会发起上传。`name` 是 FormData 字段名,默认 `'file'`;`method` 默认 `'post'`,`withCredentials` 默认 `false`。
656
+
657
+ **接入已有上传方法的推荐写法**:`customRequest` 返回 Promise 时组件自动接管状态,resolve 即成功(结果写入 `file.response`,可用 `responseUrlKey` 提取 url,字符串支持 `data.url` 嵌套路径)、reject 即失败并出现重试入口,无需手动调用 `onSuccess` / `onError`。axios、flyio、fetch 或任何返回 Promise 的方法都适用。返回值是 fetch `Response` 时组件读取响应体;非 2xx 按失败处理,`error.status` 为状态码。需要进度与取消时,把 option 的 `signal`(取消 / 移除 / 卸载时触发)与 `onProgress`(0 ~ 1)透传给底层请求。返回 `{ abort }` 并手动回调的旧写法仍然支持。
658
+
659
+ 列表默认非受控,用 `defaultFileList` 给初值;需要外部驱动时用 `v-model:file-list`,列表项以 `uid` 为稳定标识。`listType` 取 `'text' | 'picture' | 'picture-card'`。`limit` 为数量上限,超出会触发 `exceed`,超出部分不进入列表;`beforeUpload` 返回 `false` 拦截、返回新 `File` 替换,支持 Promise。
660
+
661
+ `change({ file, fileList })` 覆盖加入、进度、成功、失败和移除;`success` / `error` / `remove` / `progress` 是更细粒度的补充。`autoUpload=false` 时文件先以 `init` 入列,再用组件 `submit()` 上传、`abort()` 取消、`retry()` 重试。图片卡场景可加 `image-preview` 用内置 `ImagePreview` 看图。
662
+
663
+ ```vue
664
+ <script setup lang="ts">
665
+ import { ref } from 'vue';
666
+ import { Upload, type UploadFile } from 'x-next';
667
+ import 'x-next/dist/style.css';
668
+ const fileList = ref<UploadFile[]>([]);
669
+ const status = ref('尚未选择文件');
670
+ // 项目里已封装好的上传方法:返回 Promise 即可,组件自动显示成功与失败
671
+ function uploadAttachment(params: { file: File; orderId: string }) {
672
+ const form = new FormData();
673
+ form.append('file', params.file);
674
+ form.append('orderId', params.orderId);
675
+ return fetch('/api/upload', { method: 'POST', body: form }).then((response) => {
676
+ if (!response.ok) throw new Error(`上传失败:${response.status}`);
677
+ return response.json() as Promise<{ data: { url: string } }>;
678
+ });
679
+ }
680
+ function changed(info: { file: UploadFile; fileList: UploadFile[] }) {
681
+ status.value = `${info.file.name}:${info.file.status ?? 'unknown'}`;
682
+ }
683
+ function beforeUpload(file: File) {
684
+ // 超过 2MB 直接拦截,文件不会进入列表
685
+ return file.size <= 2 * 1024 * 1024;
686
+ }
687
+ </script>
688
+ <template>
689
+ <Upload
690
+ v-model:file-list="fileList"
691
+ :custom-request="({ file }) => uploadAttachment({ file, orderId: 'SO-20261003' })"
692
+ response-url-key="data.url"
693
+ name="file"
694
+ multiple
695
+ list-type="picture"
696
+ accept="image/*"
697
+ :limit="5"
698
+ :before-upload="beforeUpload"
699
+ @change="changed"
700
+ />
701
+ <p role="status">{{ status }}</p>
702
+ </template>
703
+ ```
704
+
705
+ ## BarChart
706
+
707
+ [组件文档与 live demo](https://x-next.ztes.com/components/bar-chart)。按天 / 小时聚合的柱状趋势图:`categories` 是类目轴标签,`series` 是数据系列(`{ name, data, color }`),两者按下标对应。单系列就是普通柱状图;多系列默认并排,加 `stack` 变成堆叠并显示合计。轻量迷你走势用 TrendChart,需要坐标轴与读数用本组件。
708
+
709
+ 数值轴自动取 1/2/5 步长的整洁刻度(所以刻度行数可能少于 `grid.horizontalLinesNumber`);传 `max` 可锁定上界。`loading` 显示加载遮罩;数据全为 0 时显示空态,可用 `empty` 插槽替换。`null` / 负数按 0 处理且不画柱体。
710
+
711
+ `tooltip` 默认开启,`legend` 开启后点击图例可隐藏系列并触发 `legendChange`;点击柱体触发 `barClick`,命中具体柱体时带 `seriesIndex` / `value`,未命中时为 `null`。`valueFormatter` 统一控制提示、图例与数值轴的数字格式。
712
+
713
+ ```vue
714
+ <script setup lang="ts">
715
+ import { ref } from 'vue';
716
+ import { BarChart } from 'x-next';
717
+ import 'x-next/dist/style.css';
718
+ const categories = ref(['09-28', '09-29', '09-30', '10-01', '10-02']);
719
+ const series = ref([
720
+ { name: '浏览量', data: [86, 142, 98, 210, 176] },
721
+ { name: '访客数', data: [52, 88, 61, 120, 96] },
722
+ ]);
723
+ const picked = ref('尚未选择');
724
+ // 原生属性(含 aria-*)用对象 v-bind 传递,组件 props 与事件仍直接绑定
725
+ const chartAttrs = { 'aria-label': '每日浏览量与访客数' };
726
+ function onBarClick(data: { label: string; total: number; value: number | null }) {
727
+ picked.value = `${data.label}:合计 ${data.total}`;
728
+ }
729
+ </script>
730
+ <template>
731
+ <BarChart
732
+ v-bind="chartAttrs"
733
+ :categories="categories"
734
+ :series="series"
735
+ :height="240"
736
+ legend
737
+ @bar-click="onBarClick"
738
+ />
739
+ <p role="status">{{ picked }}</p>
740
+ </template>
741
+ ```
742
+
743
+ ## LineChart
744
+
745
+ [组件文档与 live demo](https://x-next.ztes.com/components/line-chart)。随时间看趋势就用它:`categories` 是时间轴标签,`series` 是数据系列(`{ name, data, color }`),按下标对应。多系列默认叠放,加 `area` 填充、再加 `stack` 变堆叠面积。按类目比大小用 BarChart,看占比用 PieChart,卡片角落的迷你走势用 TrendChart——完整选择指引见[图表总览](https://x-next.ztes.com/components/charts)。
746
+
747
+ **缺测要显式表达**:把没有数据的点写成 `null`,默认会在该处**断开**折线(不会画成跌到 0);确需连线时传 `:connect-nulls="true"`。数值轴对纯正数数据保持 0 基线,出现负值才向下扩展;`min` / `max` 可锁定区间。`smooth` 默认开启,`show-points` 默认 `'auto'`(点数少时常显)。
748
+
749
+ `tooltip` 默认开启,`legend` 开启后点击图例可隐藏系列并触发 `legendChange`(数值轴会按剩余可见系列重算);点击触发 `lineClick`,命中数据点时带 `seriesIndex` / `value`。`valueFormatter` 同时作用于提示与图例,`labels.yFormatter` 只作用于数值轴。
750
+
751
+ ```vue
752
+ <script setup lang="ts">
753
+ import { ref } from 'vue';
754
+ import { LineChart } from 'x-next';
755
+ import 'x-next/dist/style.css';
756
+ const categories = ref(['09-28', '09-29', '09-30', '10-01', '10-02']);
757
+ // 10-01 当天缺测:null 会让折线在该处断开
758
+ const series = ref([
759
+ { name: '请求量', data: [820, 932, null, 934, 1290] },
760
+ { name: '错误数', data: [12, 18, null, 9, 22] },
761
+ ]);
762
+ const picked = ref('尚未选择');
763
+ function onLineClick(data: { label: string; value: number | null }) {
764
+ picked.value = `${data.label}:${data.value ?? '缺测'}`;
765
+ }
766
+ </script>
767
+ <template>
768
+ <LineChart
769
+ :categories="categories"
770
+ :series="series"
771
+ :height="280"
772
+ area
773
+ legend
774
+ @line-click="onLineClick"
775
+ />
776
+ <p role="status">{{ picked }}</p>
777
+ </template>
778
+ ```
779
+
780
+ ## PieChart
781
+
782
+ [组件文档与 live demo](https://x-next.ztes.com/components/pie-chart)。表达占比:`data` 是 `{ name, value }[]`,值按**可见**分片求和换算角度。`innerRadius="62%"` 渲染成环形并在中心显示合计(推荐形态,信息密度更高);数字形式的 `innerRadius` 按 px。负值、0 与非有限数会被跳过,不计入总量。
783
+
784
+ **类别要收敛**:饼图超过 7 个分片就难以阅读,先按值排序、把尾部合并成「其他」再传入(本配方给出写法)。需要精确比较大小改用 BarChart,需要看随时间的变化改用 LineChart。
785
+
786
+ `legend` 开启后图例项展示数值与占比,点击可隐藏分片——剩余分片重新分配角度、中心合计同步更新,并触发 `legendChange`;点击分片触发 `itemClick`。`center` / `tooltip` / `label` / `legend` 插槽可分别自定义。
787
+
788
+ ```vue
789
+ <script setup lang="ts">
790
+ import { computed, ref } from 'vue';
791
+ import { PieChart } from 'x-next';
792
+ import 'x-next/dist/style.css';
793
+ const raw = ref([
794
+ { name: 'search', value: 820 },
795
+ { name: 'read_file', value: 610 },
796
+ { name: 'write_file', value: 430 },
797
+ { name: 'run_shell', value: 320 },
798
+ { name: 'browse', value: 210 },
799
+ { name: 'exec_python', value: 180 },
800
+ { name: 'grep', value: 140 },
801
+ ]);
802
+ const LIMIT = 5;
803
+ // 饼图不宜超过 7 个分片:取前 N 项,尾部合并为「其他」
804
+ const data = computed(() => {
805
+ const sorted = [...raw.value].sort((a, b) => b.value - a.value);
806
+ const top = sorted.slice(0, LIMIT);
807
+ const rest = sorted.slice(LIMIT).reduce((sum, item) => sum + item.value, 0);
808
+ return rest > 0 ? [...top, { name: '其他', value: rest }] : top;
809
+ });
810
+ const picked = ref('尚未选择');
811
+ function onItemClick(item: { name: string; value: number; percent: number; formatPercent: (p: number) => string }) {
812
+ picked.value = `${item.name}:${item.value}(${item.formatPercent(item.percent)})`;
813
+ }
814
+ </script>
815
+ <template>
816
+ <PieChart
817
+ :data="data"
818
+ inner-radius="62%"
819
+ :height="280"
820
+ legend
821
+ @item-click="onItemClick"
822
+ />
823
+ <p role="status">{{ picked }}</p>
824
+ </template>
825
+ ```
package/CHANGELOG.md CHANGED
@@ -2,6 +2,80 @@
2
2
 
3
3
  本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
4
4
 
5
+ ## [1.8.0] - 2026-10-05
6
+
7
+ ### 新增
8
+
9
+ - **图表族:BarChart 柱状趋势图 / LineChart 折线图 / PieChart 饼图**,与既有 TrendChart、Heatmap 组成完整的基础图表集,文档站新增「图表」分类与[图表总览](https://x-next.ztes.com/components/charts)(含「怎么选」指引)。
10
+ - **BarChart**:单系列柱状、多系列并排 / 堆叠;数值轴按 1/2/5 取整洁刻度,`max` 可锁定上界;`legend` 点击隐藏系列并重算轴;`bar` / `tooltip` / `legend` / `empty` 插槽。
11
+ - **LineChart**:多系列、面积、堆叠面积、平滑曲线;`null` 缺测**默认断线**(不画成跌到 0),`connectNulls` 可跨过;纯正数保持 0 基线,出现负值才扩展负向刻度;`min` / `max` 锁域;`point` 插槽自定义数据点。
12
+ - **PieChart**:饼图 / 环形一体(`innerRadius` 支持 px 与百分比);环形中心默认显示合计,`center` 插槽可自定义;`legend` 展示「数值·占比」并可点击隐藏分片,剩余分片重新分配角度;小于 4% 的分片不画外围标签。
13
+ - 三个图表共享一套交互约定:整块画布一个悬浮提示节点、键盘方向键读数(Home / End 跳首尾、Esc 关闭)、`aria-live` 播报、`ariaLabel` 图像名称、容器尺寸自适应。
14
+ - **图表族共享核心**:`_utils/chart`(padding 解析、数值轴刻度与双侧域、折线 / 面积 / 扇形路径、数值与文本估宽)、`_components/chart`(ChartAxis / ChartTooltip / ChartLegend 与 `--x-chart-*` token)、`useChartSize` hook。四个图表共用同一套轴、提示、图例实现与配色。
15
+ - **Heatmap 键盘可达性与实例级 id**:网格可聚焦(`role="grid"` + 方向键按天 / 按周移动 + Home / End + Esc),读数通过 `aria-live` 播报;格子 id 加实例前缀,同页多块热力图不再重复;交互模式下不再用 `role="img"` 遮蔽整个子树。
16
+ - 新增语言包:`chart`(合计 / 系列名 / 图例无障碍名称 / 饼图总计)、`heatmap.gridLabel`。
17
+
18
+ ### 修复
19
+
20
+ - **BEM `is()` mixin 类名错位(影响已发布功能)**:`@include is(state)` 编译出的选择器是 `.-state`,与运行时类名 `x-<block>-is-<state>` 永远不匹配,状态样式自加入起即静默失效。Heatmap 的悬浮提示(1.6.0 已发布)因此完全不可见。修复后 mixin 输出完整类名,并补齐 `bar-chart` / `line-chart` / `pie-chart` / `heatmap` 的激活与隐藏态。
21
+ - **Heatmap 提示浮层定位偏移与溢出**:浮层改为渲染在网格内(网格为定位基准),不再少算左侧星期标签的宽度;气泡横向收敛到网格范围,首列与末列不再溢出网格。
22
+ - **TrendChart 边缘内容被裁**:裁剪路径向外扩一个数据点半径,首点 / 末点 / 极值点不再被切掉一半;提示气泡横向收敛到绘图区,首末点的读数完整可见。
23
+ - **TrendChart 标签补偿压垮绘图区**:`padding` 与自动标签补偿叠加后会把绘图区压到 0(曲线静默退化成直线),现限制补偿上限并在绘图区小于 8×8 时给出开发期提示。
24
+ - **TrendChart 提示气泡宽度低估**:`text.length * 7` 的估算对纯中文文案低估约 40% 导致文字溢出,改用按字形估宽(CJK 1em / 其余 0.6em)。
25
+ - **BarChart 画布测量含图例**:改用画布节点测量尺寸,图例高度不再计入绘图区。
26
+ - **`is()` 相关状态样式**:`x-bar-chart-is-active`、`x-line-chart-is-active`、`x-pie-chart-is-active/dimmed`、`x-heatmap-is-visible/out-of-range` 全部生效。
27
+ - 修复 `labels.yFormatter` / `labels.color`(BarChart)与 `PieSegment` 类型泄漏导致的构建失败。
28
+
29
+ ### 变更
30
+
31
+ - **TrendChart 的 `grid` 与 `labels` 标记废弃**:这两个 prop 在 1.7.0 发布过,但从定位上不属于迷你图——带网格和坐标文字的图是「读数的图」,应该用 LineChart。1.8.0 起**不再渲染任何内容**,props 声明保留并在开发期给出废弃警告,既有代码升级不会编译或运行报错;下个主版本(2.0.0)彻底移除。
32
+ - **TrendChart 视觉减重**:描边 2 → **1.5px**、数据点半径 3 → **2px**、激活竖线 2 → **1px**、默认 `padding` `'5'` → `'3'`(3 是激活点半径可容纳的最小值,曲线峰值距顶由 5px 收到 3px)。
33
+ - BarChart 与 LineChart 的轴 / 提示 / 图例样式移入共享层(`x-chart--*`),组件样式只保留几何部分。
34
+ - `TrendChart` 的曲线平滑与面积路径改用共享实现,与 LineChart 曲率一致。
35
+
36
+ ### 文档与测试
37
+
38
+ - 新增 `charts.md`(图表总览与选择指引)、`line-chart.md`(8 个 live demo)、`pie-chart.md`(7 个 live demo);侧栏与组件总览新增「图表」分类,TrendChart、Heatmap 迁入。
39
+ - `trend-chart.md` 重写尺寸指引(推荐 40~60px)、新增「卡片场景」示例与「什么时候需要标签」判断表;`heatmap.md` 补键盘导航与无障碍结构说明。
40
+ - 新增测试:共享图表 helper 16 项、LineChart 33 项、PieChart 26 项、BarChart 49 项、TrendChart 47 项、Heatmap 48 项;全量 2266 项通过。
41
+ - AI 使用手册扩到 26 个组件(新增 BarChart / LineChart / PieChart 配方);`check:bundle-size` 的 `base.css` 上限由 25,200 调整为 26,200(共享图表层 22 个 token 与公共样式的一次成本,由 4 个图表组件摊薄)。
42
+
43
+ ## [1.7.0] - 2026-10-04
44
+
45
+ ### 新增
46
+
47
+ - **Upload 上传组件**:支持点击选择、拖拽(含文件夹递归读取并保留相对路径)、粘贴上传;文本 / 图片 / 图片卡三种列表形态;`limit` 数量限制与 `exceed`、`beforeUpload` 拦截或替换文件、`beforeRemove` 移除前钩子;`autoUpload=false` 手动上传配合 `submit()` / `abort()` / `retry()`;逐项取消回到待上传态(不同于 Arco 归属 error 的处理);`updateFile(uid, file)` 原地替换文件;`tip` 提示、操作按钮开关、内置 `ImagePreview` 图片预览;`aria-live` 上传状态播报与操作按钮无障碍名称。
48
+ - **接入已有上传方法(`customRequest` 返回 Promise)**:业务只需 `:custom-request="({ file }) => uploadApi({ file, orderId })"`,组件自动接管状态——resolve 即成功、reject 即失败并出现重试入口,结果写入 `file.response`;axios、flyio、fetch 或任何返回 Promise 的方法均可直接接入,无需手动调用 `onSuccess` / `onError`。返回 `{ abort }` 加手动回调的写法继续兼容。
49
+ - **`UploadRequestOption.signal`**:每次尝试独立的 `AbortSignal`,取消上传、移除文件或组件卸载时触发,可直接透传给 fetch / axios 真正中止网络请求。
50
+ - **fetch `Response` 自动归一化**:`customRequest` 直接返回 `fetch(...)` 时,JSON / text 响应体解析后写入 `file.response`,非 2xx 按失败处理并在 `error.status` 提供状态码;axios / flyio 已解析的响应对象原样透传。
51
+ - **`responseUrlKey` 嵌套路径**:字符串支持 `data.url` 形式的路径提取;函数形态增加第二个参数 `response`。
52
+ - 新增 Upload 中英文语言包(`trigger` / `drag` / `fileUploaded` 等 18 项);ImagePreview 语言包补 `openLabel` / `loadError` / `loading`。
53
+ - 新增 `_self/upload-icons` 图标(上传云、文件、图片、刷新、下载、删除)。
54
+
55
+ ### 修复
56
+
57
+ - **Image 加载失败态**:默认错误占位由大红底改为中性色底 + 次级文字,错误占位补齐圆角,不再刺眼。
58
+ - **ImagePreview 工具条**:亮色白底改为深色半透明 + 模糊背景,hover 反馈统一为透明底浅色图标,窄屏工具条可折行不再溢出。
59
+ - **Image 换图与 SSR**:`src` 由 `watchEffect` 直写 DOM 改为声明式绑定带 key 的 `img`,SSR 正确输出地址;源变更重置加载状态,旧图片节点的 load / error 事件不再覆盖新图;`description` 按文档回退给 `alt`。
60
+ - **Image / Preview 键盘可达性**:缩略图可聚焦并用 Enter 打开预览;预览弹层补齐 Tab 圈定与关闭后焦点恢复;快捷键只在顶层预览生效。
61
+ - **ImagePreview 加载失败**:失败时提供可访问的错误占位而非只撤下 spinner;`actionsLayout=[]` 时自定义 actions 独立渲染,不再被一并隐藏。
62
+ - **ImagePreview 动态配置与边界**:`keyboard` / `popupContainer` 动态变更时迁移监听并清理计时器;`defaultScale` / `zoomRate` 非法值与满屏零尺寸兜底,不再产生无效 transform。
63
+ - **ImagePreviewAction**:`attrs` 不再覆盖内部 class、`disabled` 与 aria 属性,自定义样式与禁用语义同时生效。
64
+ - **Image 拖拽 hook**:`use-image-drag` 在节点更换时解绑旧监听,移除 / 换图不再残留移动状态。
65
+ - **ImagePreviewGroup 无障碍**:弹层读屏标签传入真实序号与总数,不再恒为「第 1 张,共 1 张」。
66
+ - **多层预览滚动锁**:预览使用 `useOverflow` 引用计数与容器迁移,关闭上层预览不再提前解锁页面滚动。
67
+ - **Image 外置 footer 高度**:根节点高度由内容撑开,多行说明不再溢出或与下方内容重叠。
68
+ - **ImagePreview SSR**:仅客户端清理 wheel 的 RAF,`docs:build` 不再输出 `cancelAnimationFrame` 报错。
69
+ - **Image 原生事件声明**:`load` / `error` 显式声明并转发,消费者 `strictTemplates` 编译通过。
70
+
71
+ ### 文档与测试
72
+
73
+ - 新增 `upload.md`(15 个 live demo,覆盖接入已有方法、响应提取、进度与取消、多选限制、拖拽、图片卡、手动上传、校验重试、插槽、禁用粘贴、文件夹、替换文件、Form 联动)与 `volar` 注册;组件索引、侧栏同步。
74
+ - `image.md` 重写扩充:12 个场景全部含 live demo 与完整 SFC,补换图、错误恢复、仅自定义工具条、局部容器、键盘组切换等。
75
+ - Upload 单测 81 项(含 Promise resolve / reject、取消后晚到结果不覆盖、signal 中止、fetch Response 归一化、手动回调优先等 13 项新增回归);Image 新增 21 项行为断言;全量测试 2136 项。
76
+ - AI 使用手册新增 Upload(23 个公共组件),`ai-usage-recipes.md` 示例改为「接入已有上传方法」并重新生成 `AI_USAGE.md`。
77
+ - `check:bundle-size` 的 Input 预算由 38,000 调整为 39,500:Input 消费者结构性携带整个共享语言包(zh-CN + en-US 合计 11,635 bytes,约占 30%),按组件拆分的方案继续在 `项目审查/2026-10-03-main-共享语言包与Input体积门禁.md` 跟踪。
78
+
5
79
  ## [1.6.0] - 2026-10-02
6
80
 
7
81
  ### 新增
@@ -0,0 +1,25 @@
1
+ import { Ref } from 'vue';
2
+ export interface ChartCanvasSize {
3
+ width: number;
4
+ height: number;
5
+ }
6
+ /**
7
+ * 图表画布尺寸观测(ResizeObserver + window resize 兜底)。
8
+ *
9
+ * 观测对象必须是**画布**而不是组件根节点:根节点通常还挂着图例等内容,
10
+ * 用根节点高度计算绘图区会把图例高度算进去,底部轴标签会与图例重叠。
11
+ *
12
+ * width / height 传 getter:数字按 px 直接采用,其余取元素实测尺寸,
13
+ * 与组件 props 的 `number | string` 语义一致。
14
+ */
15
+ export declare const useChartSize: ({ elementRef, width, height, }: {
16
+ elementRef: Ref<HTMLElement | null | undefined>;
17
+ width: () => number | string;
18
+ height: () => number | string;
19
+ }) => {
20
+ size: {
21
+ width: number;
22
+ height: number;
23
+ };
24
+ setSize: () => void;
25
+ };
@@ -0,0 +1,6 @@
1
+ export type { ChartPadding } from './padding';
2
+ export { getPadding, validatePadding } from './padding';
3
+ export type { NiceScale, NiceDomain } from './scale';
4
+ export { getNiceScale, getScale, getNiceDomain, getDomain, formatNumber, formatTickValue, defaultValueFormatter, formatPercent, estimateTextWidth, pickLabelIndices, } from './scale';
5
+ export type { ChartPoint, ArcSegmentParams } from './path';
6
+ export { roundedTopRectPath, genLinePath, genAreaPath, polarPoint, describeArcSegment, } from './path';
@@ -0,0 +1,15 @@
1
+ export interface ChartPadding {
2
+ top: number;
3
+ right: number;
4
+ bottom: number;
5
+ left: number;
6
+ }
7
+ /**
8
+ * 解析 CSS 简写风格的 1-4 个非负值(如 '8 12'),语义与 CSS padding 一致。
9
+ *
10
+ * 图表族(BarChart / LineChart / TrendChart)共用这一份实现,
11
+ * 避免每个组件各写一份导致边界行为漂移。
12
+ */
13
+ export declare const getPadding: (padding: string | number) => ChartPadding;
14
+ /** 接受单个非负数字,或 1-4 个以空格分隔的非负数字字符串 */
15
+ export declare const validatePadding: (padding: string | number) => boolean;
@@ -0,0 +1,34 @@
1
+ export interface ChartPoint {
2
+ x: number;
3
+ y: number;
4
+ }
5
+ /** 仅顶部圆角的矩形路径;radius 会被收敛到合法范围 */
6
+ export declare const roundedTopRectPath: (x: number, y: number, width: number, height: number, radius: number) => string;
7
+ /**
8
+ * 折线路径。
9
+ *
10
+ * 平滑模式用「相邻两点水平中点」作为控制点:每个数据点的切线是水平的,
11
+ * 曲线在每个区间内单调、不会过冲(Catmull-Rom 会在尖峰处冲出去),
12
+ * 观感接近 Arco / AntDV 的曲线图。
13
+ */
14
+ export declare const genLinePath: (points: ChartPoint[], smooth?: boolean) => string;
15
+ /** 面积路径:折线两端垂落到基线后闭合 */
16
+ export declare const genAreaPath: (points: ChartPoint[], baseline: number, smooth?: boolean) => string;
17
+ /** 极坐标转直角坐标;SVG 的 y 轴向下,正角度即顺时针 */
18
+ export declare const polarPoint: (cx: number, cy: number, radius: number, angleDeg: number) => ChartPoint;
19
+ export interface ArcSegmentParams {
20
+ cx: number;
21
+ cy: number;
22
+ outerRadius: number;
23
+ /** 0 表示实心扇形,> 0 表示环形分段 */
24
+ innerRadius: number;
25
+ startAngle: number;
26
+ endAngle: number;
27
+ }
28
+ /**
29
+ * 扇形 / 环形分段路径。
30
+ *
31
+ * 全圆(360°)会让起止点重合、SVG 无法画出弧线,这里把扫过角度收敛到
32
+ * 359.99°;内半径夹到外半径以内,避免出现反向路径。
33
+ */
34
+ export declare const describeArcSegment: (params: ArcSegmentParams) => string;
@@ -0,0 +1,55 @@
1
+ export interface NiceScale {
2
+ /** 数据域上界(对齐到「好看」的刻度步长) */
3
+ max: number;
4
+ /** 自 0 起均匀分布的刻度值,长度 = 网格线数量 */
5
+ ticks: number[];
6
+ }
7
+ /** 双侧数值域,折线图出现负值时使用 */
8
+ export interface NiceDomain {
9
+ min: number;
10
+ max: number;
11
+ /** 自 min 起按步长均匀分布的刻度值 */
12
+ ticks: number[];
13
+ }
14
+ /**
15
+ * 计算「好看」的数值轴(0 基线):步长只取 1 / 2 / 5 乘以 10 的幂。
16
+ *
17
+ * 上行数上取整到步长的整数倍,因此实际刻度数量会**小于等于**请求值
18
+ * (例如数据上限 10、请求 4 条时刻度为 0/5/10)。刻度值保持整洁
19
+ * 优先于数量精确,避免出现 3.33 这类刻度和浮点噪声。
20
+ */
21
+ export declare const getNiceScale: (dataMax: number, lineCount?: number) => NiceScale;
22
+ /**
23
+ * 计算数值轴;传入 lockedMax(max prop)时按锁定值为上界,
24
+ * 不再做「好看」对齐,保证业务指定的刻度精确生效。
25
+ */
26
+ export declare const getScale: (dataMax: number, lineCount?: number, lockedMax?: number) => NiceScale;
27
+ /**
28
+ * 计算「好看」的双侧数值域。
29
+ *
30
+ * 单侧数据保持 0 基线(与柱状图一致,避免非零基线夸大波动);
31
+ * 数据出现负值时才把下界扩展到负向刻度,正负对称地覆盖 0 线。
32
+ */
33
+ export declare const getNiceDomain: (dataMin: number, dataMax: number, lineCount?: number) => NiceDomain;
34
+ /**
35
+ * 计算双侧数值域;min / max 传入后按锁定值均分,保证业务指定的刻度精确生效。
36
+ */
37
+ export declare const getDomain: (dataMin: number, dataMax: number, lineCount?: number, lockedMin?: number, lockedMax?: number) => NiceDomain;
38
+ /** 千分位格式化,最多保留指定小数位并去掉末尾 0 */
39
+ export declare const formatNumber: (value: number, maximumFractionDigits?: number) => string;
40
+ /** 刻度文本:先消掉浮点尾差再走千分位格式化 */
41
+ export declare const formatTickValue: (value: number) => string;
42
+ /**
43
+ * 图表默认数值格式化:千分位 + 最多 4 位小数。
44
+ * 覆盖整数计数(13,000,067)与小额金额(¥0.49)两类常见场景。
45
+ */
46
+ export declare const defaultValueFormatter: (value: number) => string;
47
+ /** 百分比文案:`12.3%`;total 为 0 时返回 `0%` 而不是 NaN */
48
+ export declare const formatPercent: (value: number, total: number, digits?: number) => string;
49
+ /** 文本近似渲染宽度:CJK 按 1em,其余按 0.6em */
50
+ export declare const estimateTextWidth: (text: string, fontSize: number) => number;
51
+ /**
52
+ * 类目标签抽稀:按柱间距与标签宽度算出步长,保证相邻标签间留有 gap。
53
+ * 末位标签总是保留(趋势图需要看到最新时间点),与倒数第二个太近时挤掉前一个。
54
+ */
55
+ export declare const pickLabelIndices: (count: number, band: number, maxLabelWidth: number, gap?: number) => number[];
@@ -0,0 +1,85 @@
1
+ import { PropType } from 'vue';
2
+ import { ChartAxisPlot, ChartAxisTick, ChartAxisXLabel } from './interface';
3
+ /**
4
+ * 直角坐标系的网格与轴标签。
5
+ *
6
+ * BarChart 与 LineChart 的轴布局完全一致(横向网格 + 左侧数值标签 +
7
+ * 底部类目标签),抽到这里避免两处各写一份、改一处漏一处。
8
+ * 迷你图 TrendChart 有独立的边界/标签体系,不使用本组件。
9
+ */
10
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
11
+ plot: {
12
+ type: PropType<ChartAxisPlot>;
13
+ required: true;
14
+ };
15
+ ticks: {
16
+ type: PropType<ChartAxisTick[]>;
17
+ default: () => never[];
18
+ };
19
+ xLabels: {
20
+ type: PropType<ChartAxisXLabel[]>;
21
+ default: () => never[];
22
+ };
23
+ fontSize: {
24
+ type: NumberConstructor;
25
+ default: number;
26
+ };
27
+ color: {
28
+ type: StringConstructor;
29
+ default: string;
30
+ };
31
+ showX: {
32
+ type: BooleanConstructor;
33
+ default: boolean;
34
+ };
35
+ showY: {
36
+ type: BooleanConstructor;
37
+ default: boolean;
38
+ };
39
+ showHorizontalLines: {
40
+ type: BooleanConstructor;
41
+ default: boolean;
42
+ };
43
+ }>, () => VNode, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
44
+ plot: {
45
+ type: PropType<ChartAxisPlot>;
46
+ required: true;
47
+ };
48
+ ticks: {
49
+ type: PropType<ChartAxisTick[]>;
50
+ default: () => never[];
51
+ };
52
+ xLabels: {
53
+ type: PropType<ChartAxisXLabel[]>;
54
+ default: () => never[];
55
+ };
56
+ fontSize: {
57
+ type: NumberConstructor;
58
+ default: number;
59
+ };
60
+ color: {
61
+ type: StringConstructor;
62
+ default: string;
63
+ };
64
+ showX: {
65
+ type: BooleanConstructor;
66
+ default: boolean;
67
+ };
68
+ showY: {
69
+ type: BooleanConstructor;
70
+ default: boolean;
71
+ };
72
+ showHorizontalLines: {
73
+ type: BooleanConstructor;
74
+ default: boolean;
75
+ };
76
+ }>> & Readonly<{}>, {
77
+ color: string;
78
+ fontSize: number;
79
+ ticks: ChartAxisTick[];
80
+ xLabels: ChartAxisXLabel[];
81
+ showX: boolean;
82
+ showY: boolean;
83
+ showHorizontalLines: boolean;
84
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
85
+ export default _default;
@@ -0,0 +1,26 @@
1
+ import { PropType } from 'vue';
2
+ import { ChartLegendItem } from './interface';
3
+ /**
4
+ * 图例。
5
+ *
6
+ * 项可点击切换显隐(柱状 / 折线按系列,饼图按分片);
7
+ * `default` 插槽可整体替换渲染,插槽参数为当前图例项。
8
+ */
9
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
10
+ items: {
11
+ type: PropType<ChartLegendItem[]>;
12
+ default: () => never[];
13
+ };
14
+ }>, () => any, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
15
+ toggle: (index: number) => boolean;
16
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
17
+ items: {
18
+ type: PropType<ChartLegendItem[]>;
19
+ default: () => never[];
20
+ };
21
+ }>> & Readonly<{
22
+ onToggle?: ((index: number) => any) | undefined;
23
+ }>, {
24
+ items: ChartLegendItem[];
25
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
26
+ export default _default;
@@ -0,0 +1,76 @@
1
+ import { PropType } from 'vue';
2
+ import { ChartTooltipEntry } from './interface';
3
+ /**
4
+ * 悬浮提示宿主。
5
+ *
6
+ * 三张图表(柱状 / 折线 / 饼图)只共享一个提示节点,位置由各图自行换算;
7
+ * 默认内容为「标题 + 逐行数值 + 合计」,`default` 插槽可整体替换。
8
+ */
9
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
10
+ visible: {
11
+ type: BooleanConstructor;
12
+ default: boolean;
13
+ };
14
+ title: {
15
+ type: StringConstructor;
16
+ };
17
+ entries: {
18
+ type: PropType<ChartTooltipEntry[]>;
19
+ default: () => never[];
20
+ };
21
+ /** 合计行;entries 只有一个时可传 null 隐藏 */
22
+ total: {
23
+ type: PropType<{
24
+ label: string;
25
+ value: string;
26
+ } | null>;
27
+ default: null;
28
+ };
29
+ /** 位置样式,由各图换算(锚点或指针坐标) */
30
+ position: {
31
+ type: PropType<Record<string, string | number>>;
32
+ default: () => {};
33
+ };
34
+ /** 需要测量提示宽度做贴边收敛时,通过该回调取到 DOM 节点 */
35
+ onElement: {
36
+ type: PropType<(el: HTMLDivElement | null) => void>;
37
+ };
38
+ }>, () => any, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
39
+ visible: {
40
+ type: BooleanConstructor;
41
+ default: boolean;
42
+ };
43
+ title: {
44
+ type: StringConstructor;
45
+ };
46
+ entries: {
47
+ type: PropType<ChartTooltipEntry[]>;
48
+ default: () => never[];
49
+ };
50
+ /** 合计行;entries 只有一个时可传 null 隐藏 */
51
+ total: {
52
+ type: PropType<{
53
+ label: string;
54
+ value: string;
55
+ } | null>;
56
+ default: null;
57
+ };
58
+ /** 位置样式,由各图换算(锚点或指针坐标) */
59
+ position: {
60
+ type: PropType<Record<string, string | number>>;
61
+ default: () => {};
62
+ };
63
+ /** 需要测量提示宽度做贴边收敛时,通过该回调取到 DOM 节点 */
64
+ onElement: {
65
+ type: PropType<(el: HTMLDivElement | null) => void>;
66
+ };
67
+ }>> & Readonly<{}>, {
68
+ entries: ChartTooltipEntry[];
69
+ visible: boolean;
70
+ total: {
71
+ label: string;
72
+ value: string;
73
+ } | null;
74
+ position: Record<string, string | number>;
75
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
76
+ export default _default;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 图表族共享的分类色板。
3
+ *
4
+ * 颜色引用 `--x-chart-color-series-N` 语义 token(定义在
5
+ * _components/chart/style/var.scss),亮 / 暗主题与 ConfigProvider 换主色时
6
+ * 自动联动。写全量 token 字符串而不是拼接下标,样式 token 门禁才能静态看到引用,
7
+ * 避免色板被误判为「已定义但未使用」。
8
+ */
9
+ export declare const ChartSeriesColors: string[];
10
+ export declare const getSeriesColor: (index: number) => string;