x-next 1.13.0 → 1.15.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 (187) hide show
  1. package/AI_CODING.md +6 -5
  2. package/AI_USAGE/catalog.md +108 -105
  3. package/AI_USAGE/components/alert-api.md +48 -0
  4. package/AI_USAGE/components/alert.md +222 -3
  5. package/AI_USAGE/components/bar-chart-api.md +177 -0
  6. package/AI_USAGE/components/bar-chart.md +297 -3
  7. package/AI_USAGE/components/boxicons.md +147 -0
  8. package/AI_USAGE/components/button-api.md +144 -0
  9. package/AI_USAGE/components/button.md +447 -3
  10. package/AI_USAGE/components/charts.md +81 -0
  11. package/AI_USAGE/components/checkbox-api.md +145 -0
  12. package/AI_USAGE/components/checkbox.md +365 -3
  13. package/AI_USAGE/components/color-picker-api.md +52 -0
  14. package/AI_USAGE/components/color-picker.md +211 -3
  15. package/AI_USAGE/components/config-provider-api.md +38 -0
  16. package/AI_USAGE/components/config-provider.md +250 -3
  17. package/AI_USAGE/components/date-picker-api.md +1114 -0
  18. package/AI_USAGE/components/date-picker.md +378 -3
  19. package/AI_USAGE/components/dialog-api.md +142 -0
  20. package/AI_USAGE/components/dialog.md +284 -3
  21. package/AI_USAGE/components/draggable-api.md +146 -0
  22. package/AI_USAGE/components/draggable.md +259 -0
  23. package/AI_USAGE/components/drawer-api.md +78 -0
  24. package/AI_USAGE/components/drawer.md +256 -0
  25. package/AI_USAGE/components/dropdown-api.md +529 -0
  26. package/AI_USAGE/components/dropdown.md +392 -3
  27. package/AI_USAGE/components/empty-api.md +36 -0
  28. package/AI_USAGE/components/empty.md +227 -3
  29. package/AI_USAGE/components/finicon.md +88 -0
  30. package/AI_USAGE/components/form-api.md +524 -0
  31. package/AI_USAGE/components/form.md +454 -0
  32. package/AI_USAGE/components/grid-api.md +527 -0
  33. package/AI_USAGE/components/grid.md +224 -0
  34. package/AI_USAGE/components/heatmap-api.md +122 -0
  35. package/AI_USAGE/components/heatmap.md +220 -0
  36. package/AI_USAGE/components/icon-api.md +4707 -0
  37. package/AI_USAGE/components/icon.md +257 -0
  38. package/AI_USAGE/components/image-api.md +440 -0
  39. package/AI_USAGE/components/image.md +465 -0
  40. package/AI_USAGE/components/input-api.md +184 -0
  41. package/AI_USAGE/components/input-number-api.md +66 -0
  42. package/AI_USAGE/components/input-number.md +294 -0
  43. package/AI_USAGE/components/input-tag-api.md +114 -0
  44. package/AI_USAGE/components/input-tag.md +482 -0
  45. package/AI_USAGE/components/input.md +293 -3
  46. package/AI_USAGE/components/layout-api.md +147 -0
  47. package/AI_USAGE/components/layout.md +230 -0
  48. package/AI_USAGE/components/line-chart-api.md +197 -0
  49. package/AI_USAGE/components/line-chart.md +306 -3
  50. package/AI_USAGE/components/link-api.md +42 -0
  51. package/AI_USAGE/components/link.md +197 -0
  52. package/AI_USAGE/components/menu-api.md +516 -0
  53. package/AI_USAGE/components/menu.md +268 -0
  54. package/AI_USAGE/components/message-api.md +215 -0
  55. package/AI_USAGE/components/message-box-api.md +108 -0
  56. package/AI_USAGE/components/message-box.md +268 -3
  57. package/AI_USAGE/components/message.md +231 -3
  58. package/AI_USAGE/components/network-api.md +91 -0
  59. package/AI_USAGE/components/network.md +378 -0
  60. package/AI_USAGE/components/notification-api.md +236 -0
  61. package/AI_USAGE/components/notification.md +275 -3
  62. package/AI_USAGE/components/pagination-api.md +62 -0
  63. package/AI_USAGE/components/pagination.md +380 -3
  64. package/AI_USAGE/components/pie-chart-api.md +109 -0
  65. package/AI_USAGE/components/pie-chart.md +245 -3
  66. package/AI_USAGE/components/popconfirm-api.md +75 -0
  67. package/AI_USAGE/components/popconfirm.md +231 -3
  68. package/AI_USAGE/components/popover-api.md +75 -0
  69. package/AI_USAGE/components/popover.md +208 -3
  70. package/AI_USAGE/components/popup-api.md +75 -0
  71. package/AI_USAGE/components/popup.md +52 -0
  72. package/AI_USAGE/components/progress-api.md +44 -0
  73. package/AI_USAGE/components/progress.md +248 -3
  74. package/AI_USAGE/components/radio-api.md +165 -0
  75. package/AI_USAGE/components/radio.md +259 -3
  76. package/AI_USAGE/components/rate-api.md +54 -0
  77. package/AI_USAGE/components/rate.md +233 -3
  78. package/AI_USAGE/components/resize-box-api.md +56 -0
  79. package/AI_USAGE/components/resize-box.md +231 -0
  80. package/AI_USAGE/components/scrollbar-api.md +77 -0
  81. package/AI_USAGE/components/scrollbar.md +218 -0
  82. package/AI_USAGE/components/select-api.md +758 -0
  83. package/AI_USAGE/components/select.md +640 -3
  84. package/AI_USAGE/components/skeleton-api.md +85 -0
  85. package/AI_USAGE/components/skeleton.md +150 -0
  86. package/AI_USAGE/components/slider-api.md +51 -0
  87. package/AI_USAGE/components/slider.md +233 -3
  88. package/AI_USAGE/components/space-api.md +38 -0
  89. package/AI_USAGE/components/space.md +145 -0
  90. package/AI_USAGE/components/spin-api.md +43 -0
  91. package/AI_USAGE/components/spin.md +205 -0
  92. package/AI_USAGE/components/steps-api.md +111 -0
  93. package/AI_USAGE/components/steps.md +201 -3
  94. package/AI_USAGE/components/switch-api.md +58 -0
  95. package/AI_USAGE/components/switch.md +290 -3
  96. package/AI_USAGE/components/table-api.md +2919 -0
  97. package/AI_USAGE/components/table.md +1457 -0
  98. package/AI_USAGE/components/tabs-api.md +135 -0
  99. package/AI_USAGE/components/tabs.md +308 -3
  100. package/AI_USAGE/components/tag-api.md +124 -0
  101. package/AI_USAGE/components/tag.md +292 -0
  102. package/AI_USAGE/components/textarea-api.md +55 -0
  103. package/AI_USAGE/components/textarea.md +326 -3
  104. package/AI_USAGE/components/time-picker-api.md +137 -0
  105. package/AI_USAGE/components/time-picker.md +271 -3
  106. package/AI_USAGE/components/time-range-selector-api.md +44 -0
  107. package/AI_USAGE/components/time-range-selector.md +355 -0
  108. package/AI_USAGE/components/timeline-api.md +93 -0
  109. package/AI_USAGE/components/timeline.md +312 -0
  110. package/AI_USAGE/components/tooltip-api.md +77 -0
  111. package/AI_USAGE/components/tooltip.md +182 -0
  112. package/AI_USAGE/components/tree-select-api.md +498 -0
  113. package/AI_USAGE/components/tree-select.md +744 -0
  114. package/AI_USAGE/components/trend-chart-api.md +119 -0
  115. package/AI_USAGE/components/trend-chart.md +335 -0
  116. package/AI_USAGE/components/trigger-api.md +124 -0
  117. package/AI_USAGE/components/trigger.md +185 -0
  118. package/AI_USAGE/components/upload-api.md +200 -0
  119. package/AI_USAGE/components/upload.md +711 -3
  120. package/AI_USAGE/components/watermark-api.md +87 -0
  121. package/AI_USAGE/components/watermark.md +200 -0
  122. package/AI_USAGE/core.md +1 -1
  123. package/AI_USAGE/index.md +36 -7
  124. package/AI_USAGE/recipes/form-on-demand.md +1 -1
  125. package/AI_USAGE.md +34972 -5
  126. package/CHANGELOG.md +39 -0
  127. package/dist/_props/css.d.ts +2 -1
  128. package/dist/_utils/inherit-component-type.d.ts +11 -0
  129. package/dist/components/bar-chart/BarChart.d.ts +1 -1
  130. package/dist/components/bar-chart/index.d.ts +3 -3
  131. package/dist/components/date-picker/index.d.ts +420 -5
  132. package/dist/components/form-input/index.d.ts +617 -2
  133. package/dist/components/index.d.ts +1 -0
  134. package/dist/components/layout/index.d.ts +689 -1
  135. package/dist/components/line-chart/LineChart.d.ts +1 -1
  136. package/dist/components/line-chart/index.d.ts +3 -3
  137. package/dist/components/line-chart/interface.d.ts +2 -2
  138. package/dist/components/menu/index.d.ts +786 -1
  139. package/dist/components/tree-select/TreeNode.vue.d.ts +478 -0
  140. package/dist/components/tree-select/TreeSelect.d.ts +1549 -0
  141. package/dist/components/tree-select/TreeSelectDropdown.vue.d.ts +569 -0
  142. package/dist/components/tree-select/hooks/use-tree-select.d.ts +92 -0
  143. package/dist/components/tree-select/index.d.ts +3321 -0
  144. package/dist/components/tree-select/interface.d.ts +203 -0
  145. package/dist/components/tree-select/utils.d.ts +64 -0
  146. package/dist/es/_styles/palette-aliases.js +3 -0
  147. package/dist/es/_utils/inherit-component-type.js +6 -0
  148. package/dist/es/components/_components/feedback-icon/index.vue2.js +10 -10
  149. package/dist/es/components/button/Button.js +9 -9
  150. package/dist/es/components/date-picker/index.js +18 -17
  151. package/dist/es/components/drawer/src/Drawer.vue.js +6 -6
  152. package/dist/es/components/form-input/index.js +12 -11
  153. package/dist/es/components/form-switch/Switch.vue2.js +18 -18
  154. package/dist/es/components/image/Image.vue2.js +13 -13
  155. package/dist/es/components/image/ImagePreview.vue2.js +33 -33
  156. package/dist/es/components/index.js +55 -52
  157. package/dist/es/components/layout/index.js +10 -9
  158. package/dist/es/components/link/Link.vue2.js +12 -12
  159. package/dist/es/components/menu/hooks/use-level.js +5 -5
  160. package/dist/es/components/menu/index.js +13 -10
  161. package/dist/es/components/message/message.vue2.js +13 -13
  162. package/dist/es/components/spin/Spin.js +28 -28
  163. package/dist/es/components/tag/Tag.vue2.js +22 -22
  164. package/dist/es/components/timeline/src/Timeline.js +7 -7
  165. package/dist/es/components/tree-select/TreeNode.vue.js +91 -0
  166. package/dist/es/components/tree-select/TreeNode.vue2.js +162 -0
  167. package/dist/es/components/tree-select/TreeSelect.js +865 -0
  168. package/dist/es/components/tree-select/TreeSelectDropdown.vue.js +57 -0
  169. package/dist/es/components/tree-select/TreeSelectDropdown.vue2.js +79 -0
  170. package/dist/es/components/tree-select/hooks/use-tree-select.js +376 -0
  171. package/dist/es/components/tree-select/index.js +13 -0
  172. package/dist/es/components/tree-select/utils.js +181 -0
  173. package/dist/es/icons/animation/animation-loading.js +2 -2
  174. package/dist/es/index.js +71 -68
  175. package/dist/es/style.css +1 -1
  176. package/dist/index.cjs +3 -3
  177. package/dist/index.umd.js +3 -3
  178. package/dist/style/base.css +1 -1
  179. package/dist/style/dependencies.json +10 -0
  180. package/dist/style/drawer.css +1 -1
  181. package/dist/style/table.css +1 -1
  182. package/dist/style/tree-select.css +1 -0
  183. package/dist/style/tree-select.js +8 -0
  184. package/dist/style.css +1 -1
  185. package/dist/types.d.ts +2 -0
  186. package/package.json +11 -5
  187. package/volar.d.ts +2 -0
@@ -1,12 +1,14 @@
1
1
  <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
2
  # Pagination AI 使用
3
3
 
4
- 适用版本:x-next@1.13.0;来源指纹:`18e9b8eefa53b4bd91134fb4486778509ccf3a8d614a1bd387a6d469b623ddcf`。
4
+ 适用版本:x-next@1.15.0;来源指纹:`47ea153587c8d0b3bf318977b10bde9f8dd4acff90c5818541ba6513252ad362`。
5
5
 
6
- 先读 [通用接入](../core.md)。公开导出:`Pagination`;模型:v-model:current、v-model:page-size;已核对事件:change、pageSizeChange。
6
+ 先读 [通用接入](../core.md)。公开导出:`Pagination`;主要模型:v-model:current、v-model:page-size。完整 Props、Events、Slots、实例方法与服务签名见 [本地 API](./pagination-api.md),包含本组件族全部子组件和别名。
7
7
 
8
8
  按需样式:`x-next/style/pagination`(包含 base.css、button.css、empty.css、form-checkbox.css、form-input.css、form-input-number.css、form-select.css、pagination.css、scrollbar-v2.css、spin.css、trigger.css)。代码块未单独引样式时在应用入口加载全量样式,或按实际所有组件加载 JS 入口;不要仅因复制一个组件页就漏掉其中的 Button 等组合依赖。
9
9
 
10
+ ## 已核验行为与示例
11
+
10
12
  [组件文档与 live demo](https://x-next.yjmf.com/components/pagination)。`total` 必填且表示记录总数。使用 `v-model:current` 和 `v-model:page-size`;默认非受控值为页码 `1`、每页 `10`,`showTotal` / `showPageSize` / `showJumper` 默认关闭,`autoAdjust=true`。
11
13
 
12
14
  `change(current)` 和 `page-size-change(pageSize)` 各返回一个数字;不会请求数据。页码按总数裁剪并取整,每页条数必须为正安全整数;非法值回退到有效 `defaultPageSize` 或 10。`total=0` 保留第 1 页,开启 `hideOnSinglePage` 可隐藏整个分页。`total` 插槽提供总数,`page-item` 提供页码;改变条数后的业务重新查询需自行实现。
@@ -33,4 +35,379 @@ function resized(size: number) { current.value = 1; feedback.value = `每页 ${s
33
35
  </template>
34
36
  ```
35
37
 
36
- 返回 [AI 索引](../index.md)。精选示例不是完整 API 表,新能力先查同版本公开类型与组件文档。
38
+ ## 场景用法
39
+
40
+ 以下示例从本地 `src/docs/components/pagination.md` 显式导入到独立 AI 源,补齐局部注册、状态和样式后进行严格模板检查。上方已核验行为优先;原始 prop 默认值、包装透传和示例业务适配分别查 [完整 API](./pagination-api.md) 与场景说明。类型通过不代表所有散文和交互已验证。
41
+
42
+ ### 用途与选型
43
+
44
+ 用于长列表和表格的数据分页浏览,可切换页码、调整每页条数或输入页码快速跳转。
45
+
46
+
47
+ ### 何时使用
48
+
49
+ - 数据量较大,需要拆分为多个页面展示。
50
+ - 表格、列表或搜索结果需要保留当前页、每页条数等浏览状态。
51
+ - 需要在完整分页、简单分页和跳转输入之间按场景切换。
52
+
53
+
54
+ ### 基础用法
55
+
56
+ ```vue
57
+ <script setup lang="ts">
58
+ import 'x-next/style.css';
59
+ import { Pagination } from 'x-next';
60
+ import 'x-next/style/pagination';
61
+ import { ref } from 'vue';
62
+
63
+ const current = ref(2);
64
+ </script>
65
+ <template>
66
+ <Pagination v-model:current="current" :total="120" show-total />
67
+ </template>
68
+ ```
69
+
70
+ ### 受控页码和事件
71
+
72
+ ```vue
73
+ <script setup lang="ts">
74
+ import 'x-next/style.css';
75
+ import { Pagination } from 'x-next';
76
+ import 'x-next/style/pagination';
77
+ import { ref } from 'vue';
78
+
79
+ const current = ref(3);
80
+ const pageSize = ref(10);
81
+ const logs = ref<string[]>([]);
82
+
83
+ const handleCurrentChange = (current: number) => {
84
+ logs.value = [`change: 第 ${current} 页`, ...logs.value].slice(0, 5);
85
+ };
86
+
87
+ const handlePageSizeChange = (pageSize: number) => {
88
+ logs.value = [`page-size-change: ${pageSize} 条/页`, ...logs.value].slice(0, 5);
89
+ };
90
+ </script>
91
+ <template>
92
+ <Pagination
93
+ v-model:current="current"
94
+ v-model:page-size="pageSize"
95
+ :total="240"
96
+ show-total
97
+ show-page-size
98
+ :page-size-options="[10, 20, 40]"
99
+ @change="handleCurrentChange"
100
+ @page-size-change="handlePageSizeChange"
101
+ />
102
+ <p>当前:第 {{ current }} 页,{{ pageSize }} 条/页</p>
103
+ <p v-for="(log, index) in logs" :key="index">{{ log }}</p>
104
+ </template>
105
+ ```
106
+
107
+ ### 自动调整与动态总数
108
+
109
+ 默认保留旧页第一条记录所在的数据页。例如每页 10 条的第 20 页首条是第 191 条,改为 50 条后跳到第 4 页,总页数减少时再裁剪到最后一页。每次调整只发一组页码事件。
110
+
111
+ 关闭 `autoAdjust` 后只裁剪显示,不改写业务值;同一批更新中业务主动改了 `current`(例如返回第一页),优先使用业务值。
112
+
113
+ ```vue
114
+ <script setup lang="ts">
115
+ import 'x-next/style.css';
116
+ import { ref } from 'vue';
117
+ import { Button, Pagination } from 'x-next';
118
+ import 'x-next/style/pagination';
119
+ import 'x-next/style/button';
120
+ const current = ref(20);
121
+ const pageSize = ref(10);
122
+ const total = ref(240);
123
+ const autoAdjust = ref(true);
124
+ const changes = ref<number[]>([]);
125
+ const resetKey = ref(0);
126
+ function reset() {
127
+ resetKey.value += 1;
128
+ current.value = 20;
129
+ pageSize.value = 10;
130
+ total.value = 240;
131
+ changes.value = [];
132
+ }
133
+ </script>
134
+ <template>
135
+ <label><input v-model="autoAdjust" type="checkbox" /> 自动调整</label>
136
+ <Button @click="pageSize = 50">每页改为 50</Button>
137
+ <Button @click="total = 100">总数减为 100</Button>
138
+ <Button @click="reset">重置</Button>
139
+ <Pagination :key="resetKey" v-model:current="current" v-model:page-size="pageSize" :total="total"
140
+ :auto-adjust="autoAdjust" show-total show-page-size :page-size-options="[10, 50]"
141
+ @change="(page) => changes.push(page)" />
142
+ <p role="status">业务值:第 {{ current }} 页,{{ pageSize }} 条/页;change:{{ changes.join(' → ') || '无' }}</p>
143
+ </template>
144
+ ```
145
+
146
+ ### 每页条数
147
+
148
+ ```vue
149
+ <script setup lang="ts">
150
+ import 'x-next/style.css';
151
+ import { Pagination } from 'x-next';
152
+ import 'x-next/style/pagination';
153
+ import { ref } from 'vue';
154
+
155
+ const current = ref(5);
156
+ const pageSize = ref(10);
157
+ </script>
158
+ <template>
159
+ <Pagination
160
+ v-model:current="current"
161
+ v-model:page-size="pageSize"
162
+ :total="320"
163
+ show-page-size
164
+ :page-size-options="[10, 20, 50, 100]"
165
+ />
166
+ </template>
167
+ ```
168
+
169
+ ### 条数选择器定制
170
+
171
+ 可透传搜索、加载、弹层和格式化等 Select 能力。当前条数不在选项中时自动并入,非法选项会过滤并去重、排序。分页维护单个数字值,不支持多选、清空和创建条数。
172
+
173
+ ```vue
174
+ <script setup lang="ts">
175
+ import 'x-next/style.css';
176
+ import { ref } from 'vue';
177
+ import { Pagination } from 'x-next';
178
+ import 'x-next/style/pagination';
179
+ const current = ref(4);
180
+ const pageSize = ref(25);
181
+ </script>
182
+ <template>
183
+ <Pagination v-model:current="current" v-model:page-size="pageSize" :total="500"
184
+ show-page-size :page-size-options="[10, 20, 50]"
185
+ :page-size-props="{ allowSearch: true, formatLabel: (option) => `${option.value} 条记录 / 页` }" />
186
+ <p role="status">当前:第 {{ current }} 页,{{ pageSize }} 条/页</p>
187
+ <Pagination :total="100" show-page-size :page-size-props="{ loading: true }" />
188
+ </template>
189
+ ```
190
+
191
+ ### 跳转输入
192
+
193
+ ```vue
194
+ <script setup lang="ts">
195
+ import 'x-next/style.css';
196
+ import { Pagination } from 'x-next';
197
+ import 'x-next/style/pagination';
198
+ import { ref } from 'vue';
199
+
200
+ const current = ref(1);
201
+ </script>
202
+ <template>
203
+ <Pagination v-model:current="current" :total="180" show-jumper>
204
+ <template #jumper-append>页</template>
205
+ </Pagination>
206
+ </template>
207
+ ```
208
+
209
+ ### 简单模式
210
+
211
+ 简单模式输入提交或失焦后显示实际当前页。清空不翻页;受控父级未接受新值时,恢复父级页码。普通跳转输入提交后清空,输入超出范围会裁剪;小数输入按整数部分处理。
212
+
213
+ ```vue
214
+ <script setup lang="ts">
215
+ import 'x-next/style.css';
216
+ import { Pagination } from 'x-next';
217
+ import 'x-next/style/pagination';
218
+ import { ref } from 'vue';
219
+
220
+ const current = ref(4);
221
+ </script>
222
+ <template>
223
+ <Pagination v-model:current="current" :total="120" simple />
224
+ </template>
225
+ ```
226
+
227
+ ### 更多页码和边界
228
+
229
+ ```vue
230
+ <script setup lang="ts">
231
+ import 'x-next/style.css';
232
+ import { Pagination } from 'x-next';
233
+ import 'x-next/style/pagination';
234
+ </script>
235
+ <template>
236
+ <Pagination :total="500" :default-current="18" show-more />
237
+ <Pagination :total="8" hide-on-single-page />
238
+ </template>
239
+ ```
240
+
241
+ ### 空数据和隐藏
242
+
243
+ `total=0` 时保留第 1 页,两侧箭头禁用,简单模式显示 `1 / 1`。开启 `hideOnSinglePage` 会同时隐藏总数、页码、条数选择器和跳转输入。
244
+
245
+ ```vue
246
+ <script setup lang="ts">
247
+ import 'x-next/style.css';
248
+ import { ref } from 'vue';
249
+ import { Button, Pagination } from 'x-next';
250
+ import 'x-next/style/button';
251
+ import 'x-next/style/pagination';
252
+ const total = ref(0);
253
+ </script>
254
+ <template>
255
+ <Button @click="total = total ? 0 : 25">切换空数据 / 25 条</Button>
256
+ <Pagination :total="total" show-total />
257
+ <Pagination :total="total" simple show-total />
258
+ <Pagination :total="total" hide-on-single-page show-total />
259
+ <p role="status">总数 {{ total }};最后一组在单页时隐藏</p>
260
+ </template>
261
+ ```
262
+
263
+ ### 页码密度和按钮样式
264
+
265
+ `baseSize + 2 * bufferSize` 是开始折叠页码的阈值,`bufferSize` 还控制当前页两边的页码数量和省略号步进。`activePageItemStyle` 在共有 `pageItemStyle` 上覆盖,不会丢失共有圆角、宽度等规则。
266
+
267
+ ```vue
268
+ <script setup lang="ts">
269
+ import 'x-next/style.css';
270
+ import { ref } from 'vue';
271
+ import { Pagination } from 'x-next';
272
+ import 'x-next/style/pagination';
273
+ const current = ref(8);
274
+ </script>
275
+ <template>
276
+ <Pagination v-model:current="current" :total="1000" :base-size="4" :buffer-size="1"
277
+ :page-item-style="{ minWidth: '40px', borderRadius: '12px' }"
278
+ :active-page-item-style="{ fontWeight: '700' }" />
279
+ <p role="status">当前第 {{ current }} 页,省略号跨 3 页跳转</p>
280
+ </template>
281
+ ```
282
+
283
+ ### 尺寸和禁用
284
+
285
+ 上一页/下一页使用标准 `chevron-left` / `chevron-right` 图标,四档图标尺寸分别为 16 / 18 / 20 / 22px,描边为 1.5。首末页的对应箭头保持禁用状态。
286
+
287
+ ```vue
288
+ <script setup lang="ts">
289
+ import 'x-next/style.css';
290
+ import { Pagination, Radio, RadioGroup } from 'x-next';
291
+ import 'x-next/style/pagination';
292
+ import 'x-next/style/radio';
293
+ import 'x-next/style/radio-group';
294
+ import { ref } from 'vue';
295
+
296
+ const size = ref<'mini' | 'small' | 'medium' | 'large'>('medium');
297
+ </script>
298
+ <template>
299
+ <RadioGroup v-model="size" type="button">
300
+ <Radio value="mini">Mini</Radio>
301
+ <Radio value="small">Small</Radio>
302
+ <Radio value="medium">Medium</Radio>
303
+ <Radio value="large">Large</Radio>
304
+ </RadioGroup>
305
+ <Pagination :total="120" :size="size" show-total show-page-size show-jumper />
306
+ <Pagination :total="120" :default-current="3" disabled show-total show-page-size />
307
+ </template>
308
+ ```
309
+
310
+ ### 自定义内容
311
+
312
+ ```vue
313
+ <script setup lang="ts">
314
+ import 'x-next/style.css';
315
+ import { Pagination } from 'x-next';
316
+ import 'x-next/style/pagination';
317
+ import { ref } from 'vue';
318
+
319
+ const current = ref(6);
320
+ </script>
321
+ <template>
322
+ <Pagination v-model:current="current" :total="260" show-total show-jumper>
323
+ <template #total="{ total }">共 {{ total }} 条记录</template>
324
+ <template #page-item="{ page }">P{{ page }}</template>
325
+ <template #page-item-step="{ type }">
326
+ {{ type === 'previous' ? '上一页' : '下一页' }}
327
+ </template>
328
+ <template #page-item-ellipsis>...</template>
329
+ <template #jumper-prepend>到第</template>
330
+ <template #jumper-append>页</template>
331
+ </Pagination>
332
+ </template>
333
+ ```
334
+
335
+ ### 列表组合与异步状态
336
+
337
+ 分页组件只发出状态变更。这里由业务按页切片并模拟 400ms 加载;加载期间使用 `disabled` 阻止重复操作。真实接口应由业务处理请求取消、错误和响应顺序。
338
+
339
+ ```vue
340
+ <script setup lang="ts">
341
+ import 'x-next/style.css';
342
+ import { computed, onUnmounted, ref, watch } from 'vue';
343
+ import { Pagination, Table } from 'x-next';
344
+ import 'x-next/style/pagination';
345
+ import 'x-next/style/table';
346
+ const records = Array.from({ length: 65 }, (_, index) => ({
347
+ key: String(index + 1), name: `任务 ${index + 1}`,
348
+ }));
349
+ const current = ref(1);
350
+ const pageSize = ref(10);
351
+ const loading = ref(false);
352
+ const data = computed(() => records.slice((current.value - 1) * pageSize.value, current.value * pageSize.value));
353
+ let timer: ReturnType<typeof setTimeout> | undefined;
354
+ watch([current, pageSize], () => {
355
+ clearTimeout(timer);
356
+ loading.value = true;
357
+ timer = setTimeout(() => { loading.value = false; }, 400);
358
+ });
359
+ onUnmounted(() => clearTimeout(timer));
360
+ </script>
361
+ <template>
362
+ <div :aria-busy="loading">
363
+ <p role="status">{{ loading ? '加载中…' : `已显示第 ${current} 页` }}</p>
364
+ <Table :data="data" :columns="[{ title: '任务', dataIndex: 'name' }]" :pagination="false" :loading="loading" />
365
+ <Pagination v-model:current="current" v-model:page-size="pageSize" :total="records.length"
366
+ :disabled="loading" show-total show-page-size show-jumper :page-size-options="[10, 20]" />
367
+ </div>
368
+ </template>
369
+ ```
370
+
371
+ ### 本地化
372
+
373
+ ```vue
374
+ <script setup lang="ts">
375
+ import 'x-next/style.css';
376
+ import { ConfigProvider, Pagination, enUS } from 'x-next';
377
+ import 'x-next/style/pagination';
378
+ // 原生 aria 属性透传到组件根节点,用于区分多个分页区域。
379
+ const navigationAttrs = { 'aria-label': 'Search results' };
380
+ </script>
381
+ <template>
382
+ <ConfigProvider :locale="enUS">
383
+ <Pagination v-bind="navigationAttrs" :total="120" show-total show-page-size show-jumper />
384
+ </ConfigProvider>
385
+ </template>
386
+ ```
387
+
388
+ ### 使用说明
389
+
390
+ - 页码、总数按整数处理;每页条数必须是正安全整数,非法值回退到有效 `defaultPageSize` 或 10。
391
+ - 页码项、上一页、下一页和省略跳转支持键盘聚焦,可使用 Enter 或 Space 触发。
392
+ - 窄容器下辅助区域换行,页码列表可横向滚动;更紧凑的工具栏可使用 `simple`。组件不会按屏宽自动改变模式。
393
+ - `pageSizeProps` 中 `modelValue`、`options`、`size`、`disabled`、`multiple`、`allowClear`、`allowCreate`、`fieldNames` 由分页维护,其余能力按 Select API 使用。
394
+
395
+
396
+ ### 无障碍
397
+
398
+ - 根节点是 `role="navigation"` 地标,带 `aria-label`(跟随 locale),读屏用户可以按地标快速定位。
399
+ - 当前页用 `aria-current="page"` 标注,页码、上一页/下一页与省略号带本地化 `aria-label`,自定义图标插槽也保留名称。
400
+ - 禁用时所有分页项(包括省略号)都不可聚焦、不响应键盘。
401
+ - 跳转输入框与条数选择器带无障碍名称。键盘快速跳转导致当前节点被移除时,焦点接续到当前页。
402
+ - 可通过根节点 `aria-label` 区分多个分页区域;locale 的 `pageLabel`、`pageSizeLabel` 为可选文案,旧自定义语言包会回退到现有文案。
403
+
404
+
405
+ ### 已知限制
406
+
407
+ - `total` 应为非负整数;非有限或负数按 0 处理,有限超大值限制到 `Number.MAX_SAFE_INTEGER`。未知总数分页由业务层适配。
408
+ - 初始或单独传入越界 `current` 时只裁剪显示,不发事件;`autoAdjust` 处理后续总页数或条数变化。受控父级未接受更新时继续显示其值裁剪后的页码。
409
+ - 不提供记录加载、请求、页面路由或真实页码链接。`page-item` 用于内容定制,避免嵌套可聚焦按钮;需要 SEO 链接导航时由业务实现。
410
+
411
+
412
+
413
+ 返回 [AI 索引](../index.md)。先查本页与 [本地 API](./pagination-api.md);需要更深类型时查 [公开组件导航](../catalog.md),不默认上网查找本包用法。
@@ -0,0 +1,109 @@
1
+ <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
+ # PieChart 完整公开 API
3
+
4
+ 适用版本:x-next@1.15.0;来源指纹:`47ea153587c8d0b3bf318977b10bde9f8dd4acff90c5818541ba6513252ad362`。
5
+
6
+ 从同版本构建的公开声明、运行时 props/emits 和显式 expose 生成。运行时导入始终使用 `x-next`,声明路径仅作定位。插槽类型未细化时,具体槽名与作用域见本地用法示例。
7
+
8
+ ## PieChart API
9
+
10
+ 公开声明:`dist/components/pie-chart/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
11
+
12
+ ### Props
13
+
14
+ | 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
15
+ | --- | --- | --- | --- | --- |
16
+ | data | 分片数据,必填 | undefined &#124; PieChartItem[] | 是 | [] |
17
+ | innerRadius | 内半径:0 为饼图,数字按 px,'62%' 按比例 | undefined &#124; string &#124; number | 否 | 0 |
18
+ | height | 图表高度,数字按 px | undefined &#124; string &#124; number | 否 | 280 |
19
+ | width | 图表宽度,数字按 px | undefined &#124; string &#124; number | 否 | "100%" |
20
+ | labels | 外围标签:false 关闭,对象配置字号与颜色 | undefined &#124; false &#124; true &#124; { fontSize?: number; color?: string; } | 否 | true |
21
+ | center | 环形中心内容:false 关闭 | undefined &#124; false &#124; true &#124; { fontSize?: number; } | 否 | true |
22
+ | tooltip | 悬浮提示 | undefined &#124; false &#124; true | 否 | true |
23
+ | legend | 图例,点击可隐藏/显示分片 | undefined &#124; false &#124; true | 否 | false |
24
+ | valueFormatter | 数值格式化,用于提示、图例与中心内容 | undefined &#124; (value: number) => string | 否 | 工厂函数(每个实例初始化;有效值见行为说明) |
25
+ | loading | 加载中 | undefined &#124; false &#124; true &#124; { [x: string]: unknown; } | 否 | false |
26
+ | ariaLabel | 无障碍名称;设置后画布带 role="img" | undefined &#124; string | 否 | 未声明 |
27
+
28
+ ### Events
29
+
30
+ | 事件 | 用途 | 监听器签名(即事件参数) |
31
+ | --- | --- | --- |
32
+ | item-click | 见场景用法与类型 | undefined &#124; (data: PieChartClickData) => any |
33
+ | legend-change | 见场景用法与类型 | undefined &#124; (visibleIndexes: number[]) => any |
34
+
35
+ ### Slots
36
+
37
+ | 名称 | 用途 | 公开类型 |
38
+ | --- | --- | --- |
39
+ | center | 环形中心内容 | undefined &#124; (props: { total: number; formatValue: (value: number) => string; }) => unknown |
40
+ | tooltip | 自定义悬浮提示内容 | undefined &#124; (props: PieChartActiveData) => unknown |
41
+ | label | 自定义外围标签 | undefined &#124; (props: PieChartActiveData) => unknown |
42
+ | legend | 自定义图例 | undefined &#124; (props: { items: PieChartItem[]; hiddenIndexes: number[]; }) => unknown |
43
+ | empty | 自定义空态内容 | undefined &#124; () => unknown |
44
+
45
+ ### 实例方法
46
+
47
+ 没有检索到显式 expose 或 Options API methods 的公开方法;不把 setup 内部函数当成稳定实例 API。
48
+
49
+ ### 关联类型定义
50
+
51
+ 以下摘自本组件族声明,供查阅嵌套配置;运行时和值类型均以根入口可导出项为准。
52
+
53
+ ```typescript-reference
54
+ interface PieChartItem {
55
+ /** 分片名称,用于标签、提示与图例 */
56
+ name: string;
57
+ /** 分片数值(非负) */
58
+ value: number;
59
+ }
60
+
61
+ interface PieChartTooltipEntry {
62
+ /** 分片下标 */
63
+ index: number;
64
+ name: string;
65
+ /** 原始数值 */
66
+ value: number;
67
+ /** 占比(0 ~ 1) */
68
+ percent: number;
69
+ /** 生效颜色 */
70
+ color: string;
71
+ }
72
+
73
+ interface PieChartActiveData extends PieChartTooltipEntry {
74
+ /** 所有可见分片的合计 */
75
+ total: number;
76
+ /** 已格式化数值的便捷函数,与组件内保持一致 */
77
+ formatValue: (value: number) => string;
78
+ /** 已格式化占比的函数,如 12.3% */
79
+ formatPercent: (percent: number) => string;
80
+ }
81
+
82
+ interface PieChartClickData extends PieChartActiveData {
83
+ }
84
+
85
+ interface PieChartSegment {
86
+ /** 分片下标(对应 data 下标) */
87
+ index: number;
88
+ name: string;
89
+ value: number;
90
+ /** 占比(0 ~ 1,按可见分片总量计算) */
91
+ percent: number;
92
+ /** 生效颜色 */
93
+ color: string;
94
+ /** 扇形 / 环形分段路径 */
95
+ d: string;
96
+ /** 外围标签锚点 */
97
+ labelX: number;
98
+ labelY: number;
99
+ /** 标签对齐方式:右半圆左对齐、左半圆右对齐 */
100
+ labelAnchor: 'start' | 'end';
101
+ /** 占比是否达到可读阈值(未达到则不画外围标签) */
102
+ showLabel: boolean;
103
+ /** 分片中间角(用于提示锚点定位) */
104
+ midAngle: number;
105
+ }
106
+ ```
107
+
108
+
109
+ 返回 [PieChart 用法](./pie-chart.md)。