x-next 1.12.0 → 1.14.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 (226) hide show
  1. package/AI_CODING.md +6 -5
  2. package/AI_USAGE/catalog.md +106 -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 +227 -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 +279 -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 +386 -5
  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 +1414 -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/trend-chart-api.md +119 -0
  113. package/AI_USAGE/components/trend-chart.md +335 -0
  114. package/AI_USAGE/components/trigger-api.md +124 -0
  115. package/AI_USAGE/components/trigger.md +185 -0
  116. package/AI_USAGE/components/upload-api.md +200 -0
  117. package/AI_USAGE/components/upload.md +711 -3
  118. package/AI_USAGE/components/watermark-api.md +87 -0
  119. package/AI_USAGE/components/watermark.md +200 -0
  120. package/AI_USAGE/core.md +1 -1
  121. package/AI_USAGE/index.md +35 -7
  122. package/AI_USAGE/recipes/form-on-demand.md +1 -1
  123. package/AI_USAGE.md +33657 -7
  124. package/CHANGELOG.md +40 -0
  125. package/dist/_utils/inherit-component-type.d.ts +11 -0
  126. package/dist/components/date-picker/index.d.ts +420 -5
  127. package/dist/components/form-input/index.d.ts +617 -2
  128. package/dist/components/layout/index.d.ts +689 -1
  129. package/dist/components/menu/index.d.ts +786 -1
  130. package/dist/components/network/Network.vue.d.ts +7 -3
  131. package/dist/components/network/index.d.ts +10 -2
  132. package/dist/components/network/props.d.ts +5 -0
  133. package/dist/components/network/utils.d.ts +3 -3
  134. package/dist/components/pagination/page-item-ellipsis.vue.d.ts +4 -1
  135. package/dist/components/pagination/page-item-step.vue.d.ts +101 -130
  136. package/dist/components/pagination/page-item.vue.d.ts +1 -0
  137. package/dist/components/pagination/page-jumper.vue.d.ts +1 -1
  138. package/dist/components/pagination/page-options.vue.d.ts +6 -4
  139. package/dist/components/pagination/utils.d.ts +3 -0
  140. package/dist/components/time-range-selector/index.d.ts +6 -6
  141. package/dist/es/_container/resize-observer-v2.js +1 -1
  142. package/dist/es/_container/resize-observer.js +1 -1
  143. package/dist/es/_hooks/use-resize-observer.js +1 -1
  144. package/dist/es/_styles/palette-aliases.js +4 -4
  145. package/dist/es/_utils/inherit-component-type.js +6 -0
  146. package/dist/es/_virtual/advancedFormat.js +1 -1
  147. package/dist/es/_virtual/customParseFormat.js +1 -1
  148. package/dist/es/_virtual/dayjs.min.js +1 -1
  149. package/dist/es/_virtual/isBetween.js +1 -1
  150. package/dist/es/_virtual/quarterOfYear.js +1 -1
  151. package/dist/es/_virtual/weekOfYear.js +1 -1
  152. package/dist/es/_virtual/weekYear.js +1 -1
  153. package/dist/es/_virtual/zh-cn.js +1 -1
  154. package/dist/es/components/button/Button.js +53 -42
  155. package/dist/es/components/date-picker/index.js +18 -17
  156. package/dist/es/components/draggable/useDraggable.js +1 -1
  157. package/dist/es/components/form/Form.vue2.js +1 -1
  158. package/dist/es/components/form/FormItem.vue2.js +1 -1
  159. package/dist/es/components/form-input/index.js +12 -11
  160. package/dist/es/components/form-input-number/InputNumber.js +1 -1
  161. package/dist/es/components/form-slider/Slider.vue2.js +1 -1
  162. package/dist/es/components/form-slider/slider-ticks.vue2.js +1 -1
  163. package/dist/es/components/form-slider/utils.js +1 -1
  164. package/dist/es/components/layout/index.js +10 -9
  165. package/dist/es/components/menu/MenuItem.js +1 -1
  166. package/dist/es/components/menu/hooks/use-level.js +5 -5
  167. package/dist/es/components/menu/index.js +13 -10
  168. package/dist/es/components/menu/overflow-wrap.js +1 -1
  169. package/dist/es/components/network/Network.vue.js +17 -12
  170. package/dist/es/components/network/Network.vue2.js +78 -70
  171. package/dist/es/components/network/utils.js +112 -71
  172. package/dist/es/components/pagination/Pagination.js +132 -123
  173. package/dist/es/components/pagination/page-item-ellipsis.vue.js +10 -10
  174. package/dist/es/components/pagination/page-item-ellipsis.vue2.js +24 -19
  175. package/dist/es/components/pagination/page-item-step.vue.js +14 -11
  176. package/dist/es/components/pagination/page-item-step.vue2.js +20 -22
  177. package/dist/es/components/pagination/page-item.vue.js +10 -9
  178. package/dist/es/components/pagination/page-item.vue2.js +24 -19
  179. package/dist/es/components/pagination/page-jumper.vue2.js +23 -23
  180. package/dist/es/components/pagination/page-options.vue.js +15 -10
  181. package/dist/es/components/pagination/page-options.vue2.js +21 -17
  182. package/dist/es/components/pagination/utils.js +4 -2
  183. package/dist/es/components/progress/circle.vue2.js +1 -1
  184. package/dist/es/components/progress/line.vue2.js +1 -1
  185. package/dist/es/components/progress/steps.vue2.js +1 -1
  186. package/dist/es/components/rate/Rate.js +1 -1
  187. package/dist/es/components/virtual-list-v2/virtual-list-item.js +1 -1
  188. package/dist/es/locale/en-US.js +2 -0
  189. package/dist/es/locale/zh-CN.js +2 -0
  190. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/dayjs.min.js +1 -1
  191. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/locale/zh-cn.js +1 -1
  192. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/advancedFormat.js +1 -1
  193. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/customParseFormat.js +1 -1
  194. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/isBetween.js +1 -1
  195. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/quarterOfYear.js +1 -1
  196. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/weekOfYear.js +1 -1
  197. package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/weekYear.js +1 -1
  198. package/dist/es/style.css +1 -1
  199. package/dist/index.cjs +3 -3
  200. package/dist/index.umd.js +3 -3
  201. package/dist/locale/interface.d.ts +3 -0
  202. package/dist/style/base.css +1 -1
  203. package/dist/style/button.css +1 -1
  204. package/dist/style/form-select.css +1 -1
  205. package/dist/style/network.css +1 -1
  206. package/dist/style/pagination.css +1 -1
  207. package/dist/style/table.css +1 -1
  208. package/dist/style.css +1 -1
  209. package/package.json +10 -5
  210. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/index.js +0 -0
  211. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/is.js +0 -0
  212. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/locale/en-US.js +0 -0
  213. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/array.js +0 -0
  214. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/base.js +0 -0
  215. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/boolean.js +0 -0
  216. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/custom.js +0 -0
  217. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/number.js +0 -0
  218. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/object.js +0 -0
  219. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/string.js +0 -0
  220. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/rules/type.js +0 -0
  221. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/b-validate@1.5.3/node_modules/b-validate/es/util.js +0 -0
  222. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/compute-scroll-into-view@3.1.1/node_modules/compute-scroll-into-view/dist/index.js +0 -0
  223. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/number-precision@1.6.0/node_modules/number-precision/build/index.es.js +0 -0
  224. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/resize-observer-polyfill@1.5.1/node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js +0 -0
  225. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/scroll-into-view-if-needed@3.1.0/node_modules/scroll-into-view-if-needed/dist/index.js +0 -0
  226. /package/dist/es/{Users/xuyu/Code/x-next/node_modules → node_modules}/.pnpm/sortablejs@1.15.7/node_modules/sortablejs/modular/sortable.esm.js +0 -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
  # Dialog AI 使用
3
3
 
4
- 适用版本:x-next@1.12.0;来源指纹:`9f9adf42b42dc1e551f500aabdcb7fb07b69a93ea44ff3dc1d16dab1a4c85843`。
4
+ 适用版本:x-next@1.14.0;来源指纹:`014984639d816a2c7e25eb22690c586b0b2e8efba6846bec8a4e424db41a09e9`。
5
5
 
6
- 先读 [通用接入](../core.md)。公开导出:`DialogComponent, Dialog`;模型:v-model;已核对事件:close、closed。
6
+ 先读 [通用接入](../core.md)。公开导出:`Dialog, DialogComponent`;主要模型:v-model。完整 Props、Events、Slots、实例方法与服务签名见 [本地 API](./dialog-api.md),包含本组件族全部子组件和别名。
7
7
 
8
8
  按需样式:`x-next/style/dialog`(包含 base.css、button.css、dialog.css、space.css)。代码块未单独引样式时在应用入口加载全量样式,或按实际所有组件加载 JS 入口;不要仅因复制一个组件页就漏掉其中的 Button 等组合依赖。
9
9
 
10
+ ## 已核验行为与示例
11
+
10
12
  [组件文档与 live demo](https://x-next.yjmf.com/components/dialog)。从根入口导入 `DialogComponent as XDialog`,普通 `v-model` 为布尔值且默认 `false`。`renderTo='body'`、`mask=true`、`maskToClose=true`、`escToClose=true`、`destroyOnClosed=true`;`width` 支持数字或 CSS 长度。
11
13
 
12
14
  `title`、默认正文、`footer` 是公开插槽,默认不生成业务按钮。`close(action, event?)` 的 action 为 `'cancel' | 'ok'`,`closed` 表示关闭动画结束;直接改模型不会调用业务取消逻辑。根入口服务 `Dialog(options)` 返回 `close()` / `update(options)` 句柄。
@@ -34,4 +36,283 @@ function cancel() { feedback.value = '已取消'; visible.value = false; }
34
36
  </template>
35
37
  ```
36
38
 
37
- 返回 [AI 索引](../index.md)。精选示例不是完整 API 表,新能力先查同版本公开类型与组件文档。
39
+ ## 场景用法
40
+
41
+ 以下示例从本地 `src/docs/components/dialog.md` 显式导入到独立 AI 源,补齐局部注册、状态和样式后进行严格模板检查。上方已核验行为优先;原始 prop 默认值、包装透传和示例业务适配分别查 [完整 API](./dialog-api.md) 与场景说明。类型通过不代表所有散文和交互已验证。
42
+
43
+ ### 用途与选型
44
+
45
+ 用于承载需要用户聚焦处理的确认、编辑或详情内容。
46
+
47
+
48
+ ### 基础用法
49
+
50
+ ```vue
51
+ <script setup lang="ts">
52
+ import 'x-next/style.css';
53
+ import { Button, DialogComponent, Space } from 'x-next';
54
+ import { ref } from 'vue';
55
+
56
+ const visible = ref(false);
57
+ </script>
58
+ <template>
59
+ <Button type="primary" @click="visible = true">打开对话框</Button>
60
+ <DialogComponent v-model="visible" title="标题" width="520px">
61
+ 内容
62
+ <template #footer="{ cancel, ok, loadingObj }">
63
+ <Space>
64
+ <Button :loading="loadingObj.cancel" @click="cancel">取消</Button>
65
+ <Button type="primary" :loading="loadingObj.ok" @click="ok">确认</Button>
66
+ </Space>
67
+ </template>
68
+ </DialogComponent>
69
+ </template>
70
+ ```
71
+
72
+ ### 异步关闭
73
+
74
+ 一次异步关闭等待期间,确认、取消、关闭图标、遮罩和 Escape 共用防重保护。回调返回 false、抛错或拒绝时保持打开;外部关闭后重新打开,会使上一轮等待结果失效。
75
+
76
+ ```vue
77
+ <script setup lang="ts">
78
+ import 'x-next/style.css';
79
+ import { Button, DialogComponent, Space } from 'x-next';
80
+ import { ref } from 'vue';
81
+
82
+ const visible = ref(false);
83
+
84
+ const beforeClose = async (action: 'cancel' | 'ok') => {
85
+ if (action === 'cancel') return false;
86
+ await new Promise((resolve) => window.setTimeout(resolve, 1200));
87
+ return true;
88
+ };
89
+ </script>
90
+ <template>
91
+ <Button type="primary" @click="visible = true">异步确认</Button>
92
+ <DialogComponent v-model="visible" title="提交确认" :on-before-cancel="beforeClose">
93
+ 确认按钮会等待异步任务完成;取消按钮会被拦截并保持打开。
94
+ <template #footer="{ cancel, ok, loadingObj }">
95
+ <Space>
96
+ <Button :loading="loadingObj.cancel" @click="cancel">取消</Button>
97
+ <Button type="primary" :loading="loadingObj.ok" @click="ok">提交</Button>
98
+ </Space>
99
+ </template>
100
+ </DialogComponent>
101
+ </template>
102
+ ```
103
+
104
+ ### 显示方式
105
+
106
+ ```vue
107
+ <script setup lang="ts">
108
+ import 'x-next/style.css';
109
+ import { Button, DialogComponent } from 'x-next';
110
+ import { ref } from 'vue';
111
+
112
+ const centerVisible = ref(false);
113
+ const topVisible = ref(false);
114
+ const fullscreenVisible = ref(false);
115
+ </script>
116
+ <template>
117
+ <div class="demo-inline-group">
118
+ <Button @click="centerVisible = true">居中</Button>
119
+ <Button @click="topVisible = true">顶部距离</Button>
120
+ <Button @click="fullscreenVisible = true">全屏</Button>
121
+ </div>
122
+ <DialogComponent v-model="centerVisible" center title="居中对话框" />
123
+ <DialogComponent v-model="topVisible" title="自定义顶部距离" top="80px" />
124
+ <DialogComponent v-model="fullscreenVisible" title="全屏对话框" fullscreen />
125
+ </template>
126
+ ```
127
+
128
+ ### 保留内容状态
129
+
130
+ ```vue
131
+ <script setup lang="ts">
132
+ import 'x-next/style.css';
133
+ import { Button, DialogComponent, Input } from 'x-next';
134
+ import { ref } from 'vue';
135
+
136
+ const visible = ref(false);
137
+ const text = ref('');
138
+ </script>
139
+ <template>
140
+ <Button @click="visible = true">打开并保留内容</Button>
141
+ <DialogComponent v-model="visible" title="关闭后保留内容" :destroy-on-closed="false">
142
+ <Input v-model="text" placeholder="关闭后再次打开,内容仍会保留" />
143
+ </DialogComponent>
144
+ </template>
145
+ ```
146
+
147
+ ### 命令式调用
148
+
149
+ ```vue
150
+ <script setup lang="ts">
151
+ import 'x-next/style.css';
152
+ import { Button } from 'x-next';
153
+ import { Dialog } from 'x-next';
154
+
155
+ const openCommandDialog = () => {
156
+ Dialog({
157
+ title: '提交确认',
158
+ content: '确认提交当前表单吗?',
159
+ onOk: () => console.log('ok'),
160
+ });
161
+ };
162
+
163
+ const openNoFooterDialog = () => {
164
+ Dialog({
165
+ title: '说明',
166
+ content: () => 'footer=false 时不会显示底部按钮',
167
+ footer: false,
168
+ });
169
+ };
170
+
171
+ const openManualDialog = () => {
172
+ const instance = Dialog({
173
+ title: '处理中',
174
+ content: '3 秒后关闭',
175
+ });
176
+ window.setTimeout(() => instance.update({ content: '即将关闭' }), 1500);
177
+ window.setTimeout(() => instance.close(), 3000);
178
+ };
179
+ </script>
180
+ <template>
181
+ <div class="demo-inline-group">
182
+ <Button type="primary" @click="openCommandDialog">命令式打开</Button>
183
+ <Button @click="openNoFooterDialog">无底部按钮</Button>
184
+ <Button @click="openManualDialog">手动更新关闭</Button>
185
+ <Button @click="Dialog.destroyAll()">关闭全部</Button>
186
+ </div>
187
+ </template>
188
+ ```
189
+
190
+ ### 局部容器
191
+
192
+ `renderTo` 接受选择器或 `HTMLElement`。宿主应在打开前已经挂载,找不到目标时会回退到 `body`;为局部弹层提供明确的宽高。局部宿主使用定位上下文,静态定位的宿主会在打开期间临时设置为 `position: relative`,弹层根使用绝对定位。关闭动画结束或组件卸载后恢复原始内联样式;同一宿主上的多个 Dialog 会保持锁定,直到最后一个关闭。
193
+
194
+ 局部遮罩只覆盖宿主区域,`overflow: hidden` 会裁剪超出区域的弹层内容。全屏及页面级模态交互建议使用默认 `body` 宿主;局部容器的尺寸、祖先裁剪和层叠上下文仍由业务布局控制。`disabled` 仅关闭 Teleport,适合内联渲染,不代表禁用 Dialog 交互,也不取消 `renderTo` 对应的滚动锁。
195
+
196
+ ### 切换宿主与嵌套对话框
197
+
198
+ 打开后可修改 `renderTo`,滚动锁会从旧宿主转移到新宿主。下面的两个 Dialog 使用同一个目标,关闭其中一层仍保留另一层的锁;关闭后可滚动宿主查看恢复效果。
199
+
200
+ ```vue
201
+ <script setup lang="ts">
202
+ import 'x-next/style.css';
203
+ import { Button } from 'x-next';
204
+ import { Dialog } from 'x-next';
205
+
206
+ const openLocalDialog = () => {
207
+ Dialog({
208
+ title: '局部容器',
209
+ content: 'renderTo 找不到目标时会回退到 body',
210
+ renderTo: '#dialog-local-container',
211
+ });
212
+ };
213
+ </script>
214
+ <template>
215
+ <Button @click="openLocalDialog">挂载到局部容器</Button>
216
+ <div id="dialog-local-container" class="dialog-local-container"></div>
217
+ </template>
218
+ ```
219
+
220
+ ```vue
221
+ <script setup lang="ts">
222
+ import 'x-next/style.css';
223
+ import { ref } from 'vue';
224
+ import { DialogComponent } from 'x-next';
225
+ import 'x-next/style/base.css';
226
+ import 'x-next/style/dialog.css';
227
+
228
+ const visible = ref(false);
229
+ const nestedVisible = ref(false);
230
+ const target = ref('#dialog-host-a');
231
+ </script>
232
+ <template>
233
+ <button @click="visible = true">打开局部对话框</button>
234
+ <div class="dialog-host-row">
235
+ <div id="dialog-host-a" class="dialog-host"><div class="host-content">宿主 A</div></div>
236
+ <div id="dialog-host-b" class="dialog-host"><div class="host-content">宿主 B</div></div>
237
+ </div>
238
+ <DialogComponent v-model="visible" :render-to="target" title="局部编辑" width="280px" top="24px" :mask-to-close="false">
239
+ <p>当前宿主:{{ target === '#dialog-host-a' ? 'A' : 'B' }}</p>
240
+ <button @click="target = target === '#dialog-host-a' ? '#dialog-host-b' : '#dialog-host-a'">切换宿主</button>
241
+ <button @click="nestedVisible = true">打开第二层</button>
242
+ </DialogComponent>
243
+ <DialogComponent v-model="nestedVisible" :render-to="target" title="第二层" width="260px" top="48px">
244
+ 关闭这一层后,下层对话框仍保持宿主滚动锁。
245
+ </DialogComponent>
246
+ </template>
247
+ <style scoped>
248
+ .dialog-host-row { display: flex; flex-wrap: wrap; gap: 12px; width: 100%; }
249
+ .dialog-host { position: relative; flex: 1 1 300px; height: 320px; overflow: auto; }
250
+ .host-content { min-height: 640px; }
251
+ </style>
252
+ ```
253
+
254
+ ### Dialog Options
255
+
256
+ | 参数 | 说明 | 类型 | 默认值 |
257
+ | --- | --- | --- | --- |
258
+ | `title` | 标题 | `DialogContent` | `-` |
259
+ | `content` | 正文内容 | `DialogContent` | `-` |
260
+ | `footer` | 自定义底部;`false` 时隐藏底部 | `boolean \| VNode \| (scoped) => DialogRenderResult` | 默认按钮 |
261
+ | `okText` | 确认按钮文案 | `string` | `'确认'` |
262
+ | `cancelText` | 取消按钮文案 | `string` | `'取消'` |
263
+ | `mask` | 是否显示遮罩 | `boolean` | `true` |
264
+ | `maskToClose` | 点击遮罩是否关闭 | `boolean` | `true` |
265
+ | `beforeOnOk` | 确认前拦截 | `() => boolean \| Promise<boolean>` | `-` |
266
+ | `beforeOnCancel` | 取消前拦截 | `() => boolean \| Promise<boolean>` | `-` |
267
+ | `onOk` | 点击确认回调 | `(event: Event) => void` | `-` |
268
+ | `onCancel` | 点击取消回调 | `(event: Event) => void` | `-` |
269
+ | `width` | 宽度 | `string \| number` | `368` |
270
+ | `height` | 高度 | `string \| number` | `'auto'` |
271
+ | `top` | 距离顶部位置 | `string \| number` | `0` |
272
+ | `center` | 是否居中 | `boolean` | `true` |
273
+ | `renderTo` | 挂载容器,找不到时回退到 body | `string \| HTMLElement` | `'body'` |
274
+ | `hideCancel` | 是否隐藏取消按钮 | `boolean` | `false` |
275
+ | `hideOk` | 是否隐藏确认按钮 | `boolean` | `false` |
276
+ | `popupClass` | 弹层自定义类名 | `string` | `-` |
277
+
278
+
279
+ ### 返回值
280
+
281
+ | 方法 | 说明 | 参数 |
282
+ | --- | --- | --- |
283
+ | `close()` | 关闭当前对话框 | `-` |
284
+ | `update(options)` | 更新当前对话框配置 | `Partial<DialogOptions>` |
285
+
286
+
287
+ ### 无障碍说明
288
+
289
+ Dialog 打开后会聚焦到首个可通过 Tab 到达的元素,有遮罩时 Tab / Shift+Tab 在对话框内部循环,无遮罩时不限制 Tab;`tabindex` 为负数的元素仍可通过业务代码聚焦,但不会作为顺序循环的边界。隐藏、inert 和禁用控件会被跳过,透明或零宽的输入仍可接受键盘焦点。没有可用的顺序焦点时聚焦对话框容器。
290
+
291
+ 正 `tabindex` 按数值排序,同值保持 DOM 顺序,再进入默认顺序;模态内部出现正值时,会按内部列表处理每次 Tab,避免进入页面外部的默认顺序。建议业务布局使用默认顺序。具名原生 radio 按选中项进入,未选时首焦点取首项,Tab 不重复遍历同组。下面用键盘打开后,焦点进入已选中的 B,Shift+Tab 到关闭按钮,再 Tab 返回 B。
292
+
293
+ 关闭或条件卸载会把焦点恢复到打开前仍在文档中的元素;若焦点已移到其他交互区域或后来打开的 Dialog,则保留当前焦点。对话框容器带有 `role="dialog"` 和标题关联,右上角关闭控件是可聚焦按钮。无标题时使用 `aria-label` 或 `aria-labelledby` 提供名称,可通过 `aria-describedby` 关联说明。
294
+
295
+ ```vue
296
+ <script setup lang="ts">
297
+ import 'x-next/style.css';
298
+ import { Button, DialogComponent, Input } from 'x-next';
299
+ import { ref } from 'vue';
300
+ const visible = ref(false);
301
+ const choice = ref('b');
302
+ import type { InputHTMLAttributes } from 'vue';
303
+ const nativeAttrs1 = { "aria-label": "单选组后的输入框" } satisfies InputHTMLAttributes;
304
+ </script>
305
+ <template>
306
+ <Button @click="visible = true">键盘与原生单选组</Button>
307
+ <DialogComponent v-model="visible" title="单选组焦点">
308
+ <label><input type="radio" name="choice" value="a"
309
+ :checked="choice === 'a'" @change="choice = 'a'" /> A</label>
310
+ <label><input type="radio" name="choice" value="b"
311
+ :checked="choice === 'b'" @change="choice = 'b'" /> B</label>
312
+ <Input :input-attrs="nativeAttrs1" placeholder="Tab 继续进入这里" />
313
+ </DialogComponent>
314
+ </template>
315
+ ```
316
+
317
+
318
+ 返回 [AI 索引](../index.md)。先查本页与 [本地 API](./dialog-api.md);需要更深类型时查 [公开组件导航](../catalog.md),不默认上网查找本包用法。
@@ -0,0 +1,146 @@
1
+ <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
+ # Draggable 完整公开 API
3
+
4
+ 适用版本:x-next@1.14.0;来源指纹:`014984639d816a2c7e25eb22690c586b0b2e8efba6846bec8a4e424db41a09e9`。
5
+
6
+ 从同版本构建的公开声明、运行时 props/emits 和显式 expose 生成。运行时导入始终使用 `x-next`,声明路径仅作定位。插槽类型未细化时,具体槽名与作用域见本地用法示例。
7
+
8
+ ## Draggable API
9
+
10
+ 公开声明:`dist/components/draggable/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
11
+
12
+ ### Props
13
+
14
+ | 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
15
+ | --- | --- | --- | --- | --- |
16
+ | clone | clone 模式下复制数据的方法 | undefined &#124; (element: any) => any | 否 | 未声明 |
17
+ | animation | 拖拽动画时长 | undefined &#124; number | 否 | 未声明 |
18
+ | ghostClass | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
19
+ | group | Sortable 分组配置 | undefined &#124; string &#124; GroupOptions | 否 | 未声明 |
20
+ | sort | 是否允许当前列表内部排序 | undefined &#124; false &#124; true | 否 | 未声明 |
21
+ | disabled | 是否禁用拖拽 | undefined &#124; false &#124; true | 否 | 未声明 |
22
+ | store | 见场景用法与类型 | undefined &#124; { get: (sortable: import("sortablejs")) => string[]; set: (sortable: import("sortablejs")) => void; } | 否 | 未声明 |
23
+ | handle | 拖拽手柄选择器 | undefined &#124; string | 否 | 未声明 |
24
+ | draggable | 可拖拽元素选择器 | undefined &#124; string | 否 | 未声明 |
25
+ | swapThreshold | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
26
+ | invertSwap | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
27
+ | invertedSwapThreshold | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
28
+ | removeCloneOnHide | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
29
+ | direction | 见场景用法与类型 | undefined &#124; "horizontal" &#124; "vertical" &#124; (evt: SortableEvent, target: HTMLElement, dragEl: HTMLElement) => Direction | 否 | 未声明 |
30
+ | chosenClass | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
31
+ | dragClass | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
32
+ | ignore | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
33
+ | filter | 见场景用法与类型 | undefined &#124; string &#124; (this: import("sortablejs"), event: Event &#124; TouchEvent, target: HTMLElement, sortable: import("sortablejs")) => boolean | 否 | 未声明 |
34
+ | preventOnFilter | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
35
+ | easing | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
36
+ | setData | 见场景用法与类型 | undefined &#124; (dataTransfer: DataTransfer, draggedElement: HTMLElement) => void | 否 | 未声明 |
37
+ | dropBubble | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
38
+ | dragoverBubble | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
39
+ | dataIdAttr | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
40
+ | delay | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
41
+ | delayOnTouchOnly | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
42
+ | touchStartThreshold | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
43
+ | forceFallback | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
44
+ | fallbackClass | 见场景用法与类型 | undefined &#124; string | 否 | 未声明 |
45
+ | fallbackOnBody | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
46
+ | fallbackTolerance | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
47
+ | fallbackOffset | 见场景用法与类型 | undefined &#124; { x: number; y: number; } | 否 | 未声明 |
48
+ | supportPointer | 见场景用法与类型 | 未在公开类型中细化 | 否 | 未声明 |
49
+ | emptyInsertThreshold | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
50
+ | scroll | 见场景用法与类型 | undefined &#124; false &#124; true &#124; HTMLElement | 否 | 未声明 |
51
+ | forceAutoScrollFallback | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
52
+ | scrollSensitivity | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
53
+ | scrollSpeed | 见场景用法与类型 | undefined &#124; number | 否 | 未声明 |
54
+ | bubbleScroll | 见场景用法与类型 | undefined &#124; false &#124; true | 否 | 未声明 |
55
+ | modelValue | 拖拽列表数据 | any[] | 否 | 未声明 |
56
+ | tag | 外层渲染标签 | undefined &#124; string | 否 | 未声明 |
57
+ | target | 指定拖拽目标元素选择器或元素 | undefined &#124; string | 否 | 未声明 |
58
+ | customUpdate | 自定义同列表排序后的数据更新逻辑 | undefined &#124; (event: DraggableEvent) => void | 否 | 未声明 |
59
+ | allowMove | 移动控制回调,返回 false 可阻止移动 | undefined &#124; (event: DraggableEvent, originalEvent: Event) => boolean &#124; void | 否 | 未声明 |
60
+ | moveValidator | allowMove 的别名,适合表达校验语义 | undefined &#124; (event: DraggableEvent, originalEvent: Event) => boolean &#124; void | 否 | 未声明 |
61
+ | onUpdate | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
62
+ | onStart | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
63
+ | onAdd | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
64
+ | onRemove | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
65
+ | onChoose | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
66
+ | onUnchoose | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
67
+ | onEnd | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
68
+ | onSort | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
69
+ | onFilter | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
70
+ | onClone | 见场景用法与类型 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
71
+ | onChange | 见场景用法与类型 | undefined &#124; ((evt: SortableEvent) => void) & ((...args: any[]) => any) | 否 | 未声明 |
72
+
73
+ ### Events
74
+
75
+ | 事件 | 用途 | 监听器签名(即事件参数) |
76
+ | --- | --- | --- |
77
+ | update:modelValue | 列表顺序变化时触发 | undefined &#124; (...args: any[]) => any |
78
+ | update | 同列表排序完成 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
79
+ | start | 拖拽开始 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
80
+ | add | 元素被添加到当前列表 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
81
+ | remove | 元素从当前列表移出 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
82
+ | choose | 选中拖拽元素 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
83
+ | unchoose | 取消选中拖拽元素 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
84
+ | end | 拖拽结束 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
85
+ | sort | 排序发生变化 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
86
+ | filter | 命中过滤元素 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
87
+ | clone | 创建 DOM 克隆 | undefined &#124; ((event: SortableEvent) => void) & ((...args: any[]) => any) |
88
+ | move | 移动过程监听事件;需要阻止移动时使用 allowMove / moveValidator | undefined &#124; ((evt: MoveEvent, originalEvent: Event) => boolean &#124; -1 &#124; 1 &#124; void) & ((...args: any[]) => any) |
89
+ | change | Sortable change 事件 | undefined &#124; ((evt: SortableEvent) => void) & ((...args: any[]) => any) |
90
+
91
+ ### Slots
92
+
93
+ | 名称 | 用途 | 公开类型 |
94
+ | --- | --- | --- |
95
+ | default | 拖拽内容 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
96
+
97
+ ### 实例方法 / 暴露值
98
+
99
+ | 名称 | 公开类型 |
100
+ | --- | --- |
101
+ | start | (target?: HTMLElement) => void |
102
+ | pause | () => void |
103
+ | resume | () => void |
104
+ | destroy | () => void |
105
+ | save | () => void |
106
+ | closest | (element: HTMLElement, selector?: string) => HTMLElement &#124; null |
107
+ | toArray | () => string[] |
108
+ | option | { <K extends keyof Options>(name: K, value: Options[K]): void; <K extends keyof Options>(name: K): Options[K]; } |
109
+
110
+ ### 关联类型定义
111
+
112
+ 以下摘自本组件族声明,供查阅嵌套配置;运行时和值类型均以根入口可导出项为准。
113
+
114
+ ```typescript-reference
115
+ declare const CLONE_ELEMENT_KEY: unique symbol;
116
+
117
+ interface DraggableEvent<T = any> extends SortableEvent {
118
+ item: HTMLElement & {
119
+ [CLONE_ELEMENT_KEY]: any;
120
+ };
121
+ data: T;
122
+ clonedData: T;
123
+ }
124
+
125
+ type SortableMethod = 'closest' | 'save' | 'toArray' | 'destroy' | 'option';
126
+
127
+ interface UseDraggableReturn extends Pick<Sortable, SortableMethod> {
128
+ /**
129
+ * Start the sortable.
130
+ * @param {HTMLElement} target - The target element to be sorted.
131
+ * @default By default the root element of the VueDraggablePlus instance is used
132
+ */
133
+ start: (target?: HTMLElement) => void;
134
+ pause: () => void;
135
+ resume: () => void;
136
+ }
137
+
138
+ interface UseDraggableOptions<T> extends Options {
139
+ clone?: (element: T) => T;
140
+ immediate?: boolean;
141
+ customUpdate?: (event: DraggableEvent<T>) => void;
142
+ }
143
+ ```
144
+
145
+
146
+ 返回 [Draggable 用法](./draggable.md)。