x-next 1.13.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 (138) 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 +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 +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 +33651 -5
  124. package/CHANGELOG.md +18 -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/es/_utils/inherit-component-type.js +6 -0
  131. package/dist/es/components/date-picker/index.js +18 -17
  132. package/dist/es/components/form-input/index.js +12 -11
  133. package/dist/es/components/layout/index.js +10 -9
  134. package/dist/es/components/menu/hooks/use-level.js +5 -5
  135. package/dist/es/components/menu/index.js +13 -10
  136. package/dist/index.cjs +3 -3
  137. package/dist/index.umd.js +3 -3
  138. package/package.json +10 -5
@@ -0,0 +1,137 @@
1
+ <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
+ # TimePicker 完整公开 API
3
+
4
+ 适用版本:x-next@1.14.0;来源指纹:`014984639d816a2c7e25eb22690c586b0b2e8efba6846bec8a4e424db41a09e9`。
5
+
6
+ 从同版本构建的公开声明、运行时 props/emits 和显式 expose 生成。运行时导入始终使用 `x-next`,声明路径仅作定位。插槽类型未细化时,具体槽名与作用域见本地用法示例。
7
+
8
+ ## TimePicker API
9
+
10
+ 公开声明:`dist/components/time-picker/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
11
+
12
+ ### Props
13
+
14
+ | 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
15
+ | --- | --- | --- | --- | --- |
16
+ | type | 选择器类型 | undefined &#124; "time" &#124; "time-range" | 否 | "time" |
17
+ | modelValue | 绑定值 | undefined &#124; string &#124; number &#124; Date &#124; TimePickerValue[] | 否 | 未声明 |
18
+ | defaultValue | 默认值 | undefined &#124; string &#124; number &#124; Date &#124; TimePickerValue[] | 否 | 未声明 |
19
+ | placeholder | 占位文案 | undefined &#124; string &#124; string[] | 否 | 未声明 |
20
+ | disabled | 是否禁用 | undefined &#124; false &#124; true | 否 | false |
21
+ | readonly | 是否只读 | undefined &#124; false &#124; true | 否 | false |
22
+ | error | 是否错误态 | undefined &#124; false &#124; true | 否 | false |
23
+ | allowClear | 是否允许清除 | undefined &#124; false &#124; true | 否 | true |
24
+ | format | 展示和解析格式 | undefined &#124; string | 否 | 未声明 |
25
+ | size | 输入框尺寸 | undefined &#124; "mini" &#124; "small" &#124; "medium" &#124; "large" | 否 | 未声明 |
26
+ | popupVisible | 控制弹层显示 | undefined &#124; false &#124; true | 否 | undefined |
27
+ | defaultPopupVisible | 默认弹层显示 | undefined &#124; false &#124; true | 否 | false |
28
+ | position | 弹出位置 | undefined &#124; "top" &#124; "bottom" &#124; "tl" &#124; "tr" &#124; "bl" &#124; "br" | 否 | "bl" |
29
+ | popupContainer | 弹层挂载容器 | undefined &#124; string &#124; HTMLElement | 否 | 未声明 |
30
+ | triggerProps | 透传 Trigger 配置 | undefined &#124; { [x: string]: any; } | 否 | 未声明 |
31
+ | unmountOnClose | 关闭后销毁面板 | undefined &#124; false &#124; true | 否 | false |
32
+ | step | 时 / 分 / 秒步长 | undefined &#124; TimePickerStep | 否 | 未声明 |
33
+ | disabledHours | 禁用小时 | undefined &#124; () => number[] | 否 | 未声明 |
34
+ | disabledMinutes | 禁用分钟 | undefined &#124; (selectedHour?: number) => number[] | 否 | 未声明 |
35
+ | disabledSeconds | 禁用秒 | undefined &#124; (selectedHour?: number, selectedMinute?: number) => number[] | 否 | 未声明 |
36
+ | hideDisabledOptions | 隐藏禁用项 | undefined &#124; false &#124; true | 否 | false |
37
+ | disableConfirm | 点击时间后立即提交 | undefined &#124; false &#124; true | 否 | false |
38
+ | use12Hours | 12 小时制 | undefined &#124; false &#124; true | 否 | false |
39
+
40
+ ### Events
41
+
42
+ | 事件 | 用途 | 监听器签名(即事件参数) |
43
+ | --- | --- | --- |
44
+ | update:modelValue | 值更新 | undefined &#124; (_value: TimePickerModelValue) => any |
45
+ | update:popupVisible | 受控弹层更新 | undefined &#124; (_visible: boolean) => any |
46
+ | change | 确认值变化 | undefined &#124; (_timeString: string &#124; (string &#124; undefined)[] &#124; undefined, _time: unknown) => any |
47
+ | select | 面板选择但未必提交 | undefined &#124; (_timeString: string &#124; (string &#124; undefined)[], _time: unknown) => any |
48
+ | clear | 点击清除 | undefined &#124; (_ev: MouseEvent) => any |
49
+ | popup-visible-change | 见场景用法与类型 | undefined &#124; (_visible: boolean) => any |
50
+ | focus | 输入框聚焦 | undefined &#124; (_ev: FocusEvent) => any |
51
+ | blur | 输入框失焦 | undefined &#124; (_ev: FocusEvent) => any |
52
+
53
+ ### Slots
54
+
55
+ | 名称 | 用途 | 公开类型 |
56
+ | --- | --- | --- |
57
+ | prefix | 输入框前缀 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
58
+ | suffix-icon | 输入框后缀图标 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
59
+ | extra | 面板页脚额外内容 | 文档列出的实际插槽;公开类型未细化,作用域见场景用法 |
60
+
61
+ ### 实例方法
62
+
63
+ 没有检索到显式 expose 或 Options API methods 的公开方法;不把 setup 内部函数当成稳定实例 API。
64
+
65
+ ### 关联类型定义
66
+
67
+ 以下摘自本组件族声明,供查阅嵌套配置;运行时和值类型均以根入口可导出项为准。
68
+
69
+ ```typescript-reference
70
+ type TimePickerType = 'time' | 'time-range';
71
+
72
+ type TimePickerValue = string | number | Date;
73
+
74
+ type TimePickerRangeValue = [TimePickerValue | undefined, TimePickerValue | undefined];
75
+
76
+ type TimePickerModelValue = TimePickerValue | TimePickerValue[] | undefined;
77
+
78
+ type TimePickerPosition = 'top' | 'tl' | 'tr' | 'bottom' | 'bl' | 'br';
79
+
80
+ type TimePickerSize = 'mini' | 'small' | 'medium' | 'large';
81
+
82
+ type TimePickerColumnType = 'hour' | 'minute' | 'second' | 'meridiem';
83
+
84
+ type TimePickerMeridiem = 'AM' | 'PM';
85
+
86
+ interface TimePickerStep {
87
+ hour?: number;
88
+ minute?: number;
89
+ second?: number;
90
+ }
91
+
92
+ interface TimePickerColumnItem {
93
+ value: number | TimePickerMeridiem;
94
+ label: string;
95
+ disabled?: boolean;
96
+ selected?: boolean;
97
+ }
98
+
99
+ type TimePickerDisabledHours = () => number[];
100
+
101
+ type TimePickerDisabledMinutes = (selectedHour?: number) => number[];
102
+
103
+ type TimePickerDisabledSeconds = (selectedHour?: number, selectedMinute?: number) => number[];
104
+
105
+ interface TimePickerProps {
106
+ type?: TimePickerType;
107
+ modelValue?: TimePickerModelValue;
108
+ defaultValue?: TimePickerModelValue;
109
+ placeholder?: string | string[];
110
+ disabled?: boolean;
111
+ readonly?: boolean;
112
+ error?: boolean;
113
+ allowClear?: boolean;
114
+ format?: string;
115
+ size?: TimePickerSize;
116
+ popupVisible?: boolean;
117
+ defaultPopupVisible?: boolean;
118
+ position?: TimePickerPosition;
119
+ popupContainer?: string | HTMLElement;
120
+ triggerProps?: Partial<TriggerProps>;
121
+ unmountOnClose?: boolean;
122
+ step?: TimePickerStep;
123
+ disabledHours?: TimePickerDisabledHours;
124
+ disabledMinutes?: TimePickerDisabledMinutes;
125
+ disabledSeconds?: TimePickerDisabledSeconds;
126
+ hideDisabledOptions?: boolean;
127
+ disableConfirm?: boolean;
128
+ use12Hours?: boolean;
129
+ }
130
+
131
+ type TimePickerPanelValue = Date | undefined;
132
+
133
+ type TimePickerRangePanelValue = [Date | undefined, Date | undefined];
134
+ ```
135
+
136
+
137
+ 返回 [TimePicker 用法](./time-picker.md)。
@@ -1,12 +1,14 @@
1
1
  <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
2
  # TimePicker AI 使用
3
3
 
4
- 适用版本:x-next@1.13.0;来源指纹:`18e9b8eefa53b4bd91134fb4486778509ccf3a8d614a1bd387a6d469b623ddcf`。
4
+ 适用版本:x-next@1.14.0;来源指纹:`014984639d816a2c7e25eb22690c586b0b2e8efba6846bec8a4e424db41a09e9`。
5
5
 
6
- 先读 [通用接入](../core.md)。公开导出:`TimePicker`;模型:v-model、v-model:popup-visible;已核对事件:change。
6
+ 先读 [通用接入](../core.md)。公开导出:`TimePicker`;主要模型:v-model、v-model:popup-visible。完整 Props、Events、Slots、实例方法与服务签名见 [本地 API](./time-picker-api.md),包含本组件族全部子组件和别名。
7
7
 
8
8
  按需样式:`x-next/style/time-picker`(包含 base.css、button.css、scrollbar-v2.css、time-picker.css、trigger.css)。代码块未单独引样式时在应用入口加载全量样式,或按实际所有组件加载 JS 入口;不要仅因复制一个组件页就漏掉其中的 Button 等组合依赖。
9
9
 
10
+ ## 已核验行为与示例
11
+
10
12
  [组件文档与 live demo](https://x-next.yjmf.com/components/time-picker)。默认 `type='time'`、`allowClear=true`、`disableConfirm=false`,默认格式为 `'HH:mm:ss'`。`format` 同时决定显示与输出;`step` 用 `{ hour, minute, second }`,各步长默认 `1`。
11
13
 
12
14
  `change(timeString, time)` 是确认值变化,`select` 是面板选择;字符串载荷为 `string | (string | undefined)[] | undefined`,第二参数为 `unknown`。清空发出 `update:modelValue(undefined)` 和 `change(undefined, undefined)`;本例的业务 `update()` 才归一化为 `''` 保持单值字符串受控。支持 `prefix` / `suffix-icon` / `extra` 插槽及 `disabledHours` 等限制。
@@ -31,4 +33,270 @@ function changed(value: string | (string | undefined)[] | undefined, _time: unkn
31
33
  </template>
32
34
  ```
33
35
 
34
- 返回 [AI 索引](../index.md)。精选示例不是完整 API 表,新能力先查同版本公开类型与组件文档。
36
+ ## 场景用法
37
+
38
+ 以下示例从本地 `src/docs/components/time-picker.md` 显式导入到独立 AI 源,补齐局部注册、状态和样式后进行严格模板检查。上方已核验行为优先;原始 prop 默认值、包装透传和示例业务适配分别查 [完整 API](./time-picker-api.md) 与场景说明。类型通过不代表所有散文和交互已验证。
39
+
40
+ ### 用途与选型
41
+
42
+ 用于在表单中输入或选择具体时间点,也可以选择开始和结束时间。需要拖拽配置一天内多个时间段时,请使用 [TimeRangeSelector 时间范围选择](./time-range-selector.md)。
43
+
44
+
45
+ ### 何时使用
46
+
47
+ - 用户需要填写开始时间、截止时间、提醒时间、任务执行时间等具体时间点。
48
+ - 用户需要在筛选表单中选择一个开始和结束时间。
49
+ - 需要固定格式、步长或禁用某些时间项时。
50
+
51
+
52
+ ### 基础用法
53
+
54
+ ```vue
55
+ <script setup lang="ts">
56
+ import 'x-next/style.css';
57
+ import { TimePicker } from 'x-next';
58
+ import { ref } from 'vue';
59
+
60
+ const time = ref('09:30:00');
61
+ </script>
62
+ <template>
63
+ <TimePicker v-model="time" />
64
+ </template>
65
+ ```
66
+
67
+ ### 受控值和事件
68
+
69
+ ```vue
70
+ <script setup lang="ts">
71
+ import 'x-next/style.css';
72
+ import { TimePicker } from 'x-next';
73
+ import { ref } from 'vue';
74
+
75
+ const time = ref('13:45:00');
76
+ const popupVisible = ref(false);
77
+ const handleSelect = (value: string | (string | undefined)[] | undefined) => console.log('select', value);
78
+ const handleChange = (value: string | (string | undefined)[] | undefined) => console.log('change', value);
79
+ const handleClear = () => console.log('clear');
80
+ </script>
81
+ <template>
82
+ <TimePicker
83
+ v-model="time"
84
+ v-model:popup-visible="popupVisible"
85
+ allow-clear
86
+ @select="handleSelect"
87
+ @change="handleChange"
88
+ @clear="handleClear"
89
+ />
90
+ </template>
91
+ ```
92
+
93
+ ### 默认值和范围
94
+
95
+ ```vue
96
+ <script setup lang="ts">
97
+ import 'x-next/style.css';
98
+ import { TimePicker } from 'x-next';
99
+ import { ref } from 'vue';
100
+
101
+ const range = ref(['09:00:00', '18:00:00']);
102
+ </script>
103
+ <template>
104
+ <TimePicker default-value="18:24:23" />
105
+ <TimePicker v-model="range" type="time-range" />
106
+ </template>
107
+ ```
108
+
109
+ ### 尺寸
110
+
111
+ ```vue
112
+ <script setup lang="ts">
113
+ import 'x-next/style.css';
114
+ import { TimePicker } from 'x-next';
115
+ import { ref } from 'vue';
116
+ const time = ref('09:30:00');
117
+ </script>
118
+ <template>
119
+ <TimePicker v-model="time" size="mini" />
120
+ <TimePicker v-model="time" size="small" />
121
+ <TimePicker v-model="time" size="medium" />
122
+ <TimePicker v-model="time" size="large" />
123
+ </template>
124
+ ```
125
+
126
+ ### 状态
127
+
128
+ ```vue
129
+ <script setup lang="ts">
130
+ import 'x-next/style.css';
131
+ import { TimePicker } from 'x-next';
132
+ import { ref } from 'vue';
133
+ const time = ref('09:30:00');
134
+ </script>
135
+ <template>
136
+ <TimePicker v-model="time" allow-clear />
137
+ <TimePicker default-value="09:00:00" readonly />
138
+ <TimePicker default-value="09:00:00" disabled />
139
+ <TimePicker v-model="time" error />
140
+ </template>
141
+ ```
142
+
143
+ ### 格式和步长
144
+
145
+ ```vue
146
+ <script setup lang="ts">
147
+ import 'x-next/style.css';
148
+ import { TimePicker } from 'x-next';
149
+ import { ref } from 'vue';
150
+ const shortTime = ref('09:30');
151
+ const time = ref('09:30:00');
152
+ </script>
153
+ <template>
154
+ <TimePicker v-model="shortTime" format="HH:mm" />
155
+ <TimePicker
156
+ v-model="time"
157
+ :step="{ hour: 2, minute: 15, second: 30 }"
158
+ />
159
+ </template>
160
+ ```
161
+
162
+ ### 禁用时间
163
+
164
+ ```vue
165
+ <script setup lang="ts">
166
+ import 'x-next/style.css';
167
+ import { TimePicker } from 'x-next';
168
+ import { ref } from 'vue';
169
+
170
+ const time = ref('14:00:00');
171
+ const disabledHours = () => [0, 1, 2, 3, 4, 5, 22, 23];
172
+ const disabledMinutes = (hour?: number) => (hour === 12 ? [0, 15, 30, 45] : []);
173
+ const disabledSeconds = () => Array.from({ length: 30 }, (_, index) => index);
174
+ </script>
175
+ <template>
176
+ <TimePicker
177
+ v-model="time"
178
+ :disabled-hours="disabledHours"
179
+ :disabled-minutes="disabledMinutes"
180
+ :disabled-seconds="disabledSeconds"
181
+ hide-disabled-options
182
+ />
183
+ </template>
184
+ ```
185
+
186
+ ### 12 小时制
187
+
188
+ 开启后时间为「时 / 分 / 秒 / 上午下午」四列,面板宽度会随可见列数自适应。
189
+
190
+ ```vue
191
+ <script setup lang="ts">
192
+ import 'x-next/style.css';
193
+ import { TimePicker } from 'x-next';
194
+ import { ref } from 'vue';
195
+
196
+ const time = ref('9:15:00 AM');
197
+ const range = ref(['9:00:00 AM', '6:30:00 PM']);
198
+ </script>
199
+ <template>
200
+ <TimePicker v-model="time" use12-hours />
201
+ <TimePicker v-model="range" type="time-range" use12-hours />
202
+ </template>
203
+ ```
204
+
205
+ ### 自定义内容
206
+
207
+ ```vue
208
+ <script setup lang="ts">
209
+ import 'x-next/style.css';
210
+ import { TimePicker } from 'x-next';
211
+ import { ref } from 'vue';
212
+ const time = ref('09:30:00');
213
+ </script>
214
+ <template>
215
+ <TimePicker v-model="time">
216
+ <template #prefix>班次</template>
217
+ <template #suffix-icon>⌚</template>
218
+ <template #extra>选择值:{{ time || '未选择' }}</template>
219
+ </TimePicker>
220
+ </template>
221
+ ```
222
+
223
+ ### 表单组合
224
+
225
+ ```vue
226
+ <script setup lang="ts">
227
+ import 'x-next/style.css';
228
+ import { Form, FormItem, TimePicker, Space, Button } from 'x-next';
229
+ import { reactive, ref } from 'vue';
230
+ import type { FormInstance, FieldRule } from 'x-next';
231
+ const formRef = ref<FormInstance>();
232
+ const formModel = reactive({ startTime: '', workRange: ['09:00:00', '18:00:00'] });
233
+ const formResult = ref('点击校验查看结果');
234
+ const handleFormValidate = async () => {
235
+ const errors = await formRef.value!.validate();
236
+ formResult.value = errors
237
+ ? `校验失败:${Object.values(errors).map((error) => error.message).join(';')}`
238
+ : '校验通过';
239
+ };
240
+ const handleFormReset = () => {
241
+ formRef.value!.resetFields();
242
+ formResult.value = '已重置';
243
+ };
244
+ </script>
245
+ <template>
246
+ <Form ref="formRef" :model="formModel">
247
+ <FormItem field="startTime" label="开始时间" required feedback>
248
+ <TimePicker v-model="formModel.startTime" allow-clear />
249
+ </FormItem>
250
+ <FormItem field="workRange" label="工作时段">
251
+ <TimePicker v-model="formModel.workRange" type="time-range" />
252
+ </FormItem>
253
+ <FormItem>
254
+ <Space>
255
+ <Button type="primary" @click="handleFormValidate">校验</Button>
256
+ <Button @click="handleFormReset">重置</Button>
257
+ </Space>
258
+ </FormItem>
259
+ </Form>
260
+ <p role="status">{{ formResult }}</p>
261
+ </template>
262
+ ```
263
+
264
+ ### 键盘操作与焦点
265
+
266
+ 每列只保留一个 Tab 停靠点,读屏通过 `aria-activedescendant` 获知当前选项;禁用项不可选择。方向键调整面板草稿,默认需要“确定”提交,Esc 关闭并保留原值。`disableConfirm` 开启后选项变化立即提交。确认或 Esc 后焦点返回输入;范围输入恢复原生 Tab,面板末端 Tab 可正常离开。
267
+
268
+ 原生 `id`、`name`、ARIA 和输入事件透传到真实输入;范围末端 ID 使用 `ID-end`。Form 自动关联标签和错误说明。
269
+
270
+ ```vue
271
+ <script setup lang="ts">
272
+ import 'x-next/style.css';
273
+ import { TimePicker } from 'x-next';
274
+ import { ref } from 'vue';
275
+ const time = ref('10:30:00');
276
+ const range = ref(['09:00:00', '18:00:00']);
277
+ const log = ref('等待确认');
278
+ const disabledHours = () => [0, 1, 2, 3, 4, 5, 22, 23];
279
+ const onChange = (value: string | (string | undefined)[] | undefined) => { log.value = `change: ${value || '空'}`; };
280
+ import type { HTMLAttributes } from 'vue';
281
+ const nativeAttrs1 = { "aria-label": "预约时间" } satisfies HTMLAttributes;
282
+ const nativeAttrs2 = { "aria-label": "预约时间范围" } satisfies HTMLAttributes;
283
+ </script>
284
+ <template>
285
+ <TimePicker v-bind="nativeAttrs1" v-model="time" :disabled-hours="disabledHours" @change="onChange" />
286
+ <TimePicker v-bind="nativeAttrs2" v-model="range" type="time-range" />
287
+ <p>{{ log }}</p>
288
+ </template>
289
+ ```
290
+
291
+ ### 交互说明
292
+
293
+ - `TimePicker` 用于表单字段中的具体时间点或开始 / 结束时间。
294
+ - `TimeRangeSelector` 用于拖拽配置一天内多个时间段,两者不是替代关系。
295
+ - 非法手动输入不会提交新值;按 Enter 或失焦时会尝试按 `format` 解析。
296
+ - `disableConfirm` 开启后,点击面板时间项会立即提交。
297
+ - 范围模式会在同一个面板内并排展示开始时间和结束时间,左侧选择开始时间,右侧选择结束时间。
298
+ - 面板底部的“此刻”会把当前列值设置为系统当前时间,范围模式下作用于最近操作的开始或结束时间。
299
+
300
+
301
+
302
+ 返回 [AI 索引](../index.md)。先查本页与 [本地 API](./time-picker-api.md);需要更深类型时查 [公开组件导航](../catalog.md),不默认上网查找本包用法。
@@ -0,0 +1,44 @@
1
+ <!-- Generated by pnpm generate:ai-usage. Edit script/ai-usage/content.md and script/ai-usage/. -->
2
+ # TimeRangeSelector 完整公开 API
3
+
4
+ 适用版本:x-next@1.14.0;来源指纹:`014984639d816a2c7e25eb22690c586b0b2e8efba6846bec8a4e424db41a09e9`。
5
+
6
+ 从同版本构建的公开声明、运行时 props/emits 和显式 expose 生成。运行时导入始终使用 `x-next`,声明路径仅作定位。插槽类型未细化时,具体槽名与作用域见本地用法示例。
7
+
8
+ ## TimeRangeSelector API
9
+
10
+ 公开声明:`dist/components/time-range-selector/index.d.ts`。 类型中的 undefined 表示可省略;原始 prop 默认值不等于继承配置或服务默认值。
11
+
12
+ ### Props
13
+
14
+ | 名称 | 用途 | 公开类型 | 必填 | 声明默认值 |
15
+ | --- | --- | --- | --- | --- |
16
+ | modelValue | 时间范围数组 | [string, string][] | 否 | 未声明 |
17
+ | color | 组件主色,会写入 --x-time-range-selector-color 并派生轨道、选中段和手柄颜色 | undefined &#124; string | 否 | 未声明 |
18
+ | scene | 场景风格,适配常规筛选、排班预约、监控时段和紧凑筛选 | undefined &#124; "default" &#124; "compact" &#124; "monitor" &#124; "schedule" | 否 | "default" |
19
+ | overlapAllowed | 是否允许时间段重叠 | undefined &#124; false &#124; true | 否 | false |
20
+ | stepMinutes | 时间块步长,单位分钟;非法或不能整除 1440 时降级为 30 | undefined &#124; number | 否 | 30 |
21
+ | disabledRanges | 禁用时间范围 | undefined &#124; [string, string][] | 否 | [] |
22
+ | maxRanges | 最多可创建范围数量 | undefined &#124; number | 否 | Infinity |
23
+ | showCursor | 是否显示下方 0-24 小时游标 | undefined &#124; false &#124; true | 否 | true |
24
+ | disabled | 整体禁用,继承 Form / FormItem 禁用状态 | undefined &#124; false &#124; true | 否 | false |
25
+ | readonly | 只读,允许聚焦但不允许修改 | undefined &#124; false &#124; true | 否 | false |
26
+
27
+ ### Events
28
+
29
+ | 事件 | 用途 | 监听器签名(即事件参数) |
30
+ | --- | --- | --- |
31
+ | update:modelValue | 时间范围提交或约束重新归一化后触发 | undefined &#124; (value: [string, string][]) => any |
32
+ | change | 用户完成修改且值变化时触发,外部同步不触发 | undefined &#124; (value: [string, string][]) => any |
33
+ | remove | 用户删除时间段时触发 | undefined &#124; (value: [string, string]) => any |
34
+
35
+ ### Slots
36
+
37
+ 公开类型未逐项声明插槽;本页场景说明列出实际使用的插槽,不将任意插槽视为已支持。
38
+
39
+ ### 实例方法
40
+
41
+ 没有检索到显式 expose 或 Options API methods 的公开方法;不把 setup 内部函数当成稳定实例 API。
42
+
43
+
44
+ 返回 [TimeRangeSelector 用法](./time-range-selector.md)。