@mrchar/cumquat 0.0.0-stage → 0.1.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.
- package/LICENSE +21 -0
- package/README.md +90 -2
- package/dist/components/index.d.ts +4372 -0
- package/dist/components/index.js +10364 -0
- package/dist/composables/index.d.ts +1962 -0
- package/dist/composables/index.js +4135 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/package.json +62 -4
- package/style.css +2 -0
- package/themes/basic.css +2777 -0
- package/themes/dark.css +41 -0
- package/themes/glass.css +265 -0
- package/themes/high-contrast.css +45 -0
- package/themes/light.css +11 -0
|
@@ -0,0 +1,1962 @@
|
|
|
1
|
+
import { CSSProperties, ComputedRef, MaybeRefOrGetter, Ref, WritableComputedRef, computed, ref } from "vue";
|
|
2
|
+
//#region src/types.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* 公共类型契约:所有组合函数与组件之间共享的最小类型集合。
|
|
5
|
+
*/
|
|
6
|
+
/** 异步数据状态:数据型组件/组合函数唯一依赖的数据契约 */
|
|
7
|
+
interface AsyncStateLike<T> {
|
|
8
|
+
status: 'pending' | 'success' | 'error';
|
|
9
|
+
data: T;
|
|
10
|
+
error?: unknown;
|
|
11
|
+
isStale?: boolean;
|
|
12
|
+
retry?: () => void;
|
|
13
|
+
}
|
|
14
|
+
/** 动作结果:action 返回值可导出状态与错误,组件据此控制状态与错误提示 */
|
|
15
|
+
interface ActionResult {
|
|
16
|
+
/** 动作结果状态,缺省视为 success */
|
|
17
|
+
status?: 'success' | 'error';
|
|
18
|
+
/** 失败信息;status 为 error 或携带 error 时组件进入失败分支 */
|
|
19
|
+
error?: unknown;
|
|
20
|
+
/** 提示文案,覆盖组件默认错误文案 */
|
|
21
|
+
message?: string;
|
|
22
|
+
}
|
|
23
|
+
/** 动作:交互组件传入的异步操作,执行期间自动派生 loading/disabled */
|
|
24
|
+
type ActionLike = (...args: any[]) => Promise<ActionResult | void> | ActionResult | void;
|
|
25
|
+
/** 订阅结果:subscribe 处理方法返回值,导出状态、数据与错误 */
|
|
26
|
+
interface SubscribeResult<T> {
|
|
27
|
+
/** 订阅状态,缺省视为 success */
|
|
28
|
+
status?: 'loading' | 'success' | 'error';
|
|
29
|
+
/** 订阅到的数据;status 为 success 时由组件渲染 */
|
|
30
|
+
data?: T;
|
|
31
|
+
/** 失败信息;status 为 error 或携带 error 时组件进入失败分支 */
|
|
32
|
+
error?: unknown;
|
|
33
|
+
/** 提示文案,覆盖组件默认错误文案 */
|
|
34
|
+
message?: string;
|
|
35
|
+
}
|
|
36
|
+
/** 订阅处理:数据展示组件传入的订阅函数,挂载时调用,resolve 后渲染数据 */
|
|
37
|
+
type SubscribeHandler<T> = () => Promise<SubscribeResult<T>> | SubscribeResult<T>;
|
|
38
|
+
/** 受控值的标准入参形态 */
|
|
39
|
+
interface ControlledProps<T> {
|
|
40
|
+
modelValue?: T;
|
|
41
|
+
defaultValue?: T;
|
|
42
|
+
'onUpdate:modelValue'?: (value: T) => void;
|
|
43
|
+
}
|
|
44
|
+
/** 异步请求函数:返回 Promise,可携带任意参数 */
|
|
45
|
+
type AsyncFn<T, A extends unknown[]> = (...args: A) => Promise<T>;
|
|
46
|
+
/** 浮层方位(含主方位与对齐方式) */
|
|
47
|
+
type Placement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
|
|
48
|
+
/** 浮层策略:fixed 相对视口,absolute 相对最近定位祖先 */
|
|
49
|
+
type Strategy = 'fixed' | 'absolute';
|
|
50
|
+
//#endregion
|
|
51
|
+
//#region src/core/useId.d.ts
|
|
52
|
+
/**
|
|
53
|
+
* SSR 安全的组件内唯一标识,用于 label/aria 关联。
|
|
54
|
+
*
|
|
55
|
+
* @param prefix 标识前缀,默认 `cq`
|
|
56
|
+
* @returns 形如 `cq-input-0` 的只读字符串引用
|
|
57
|
+
* @internal 消费组件:FormItem、Tooltip 及全部需要 aria 关联的控件
|
|
58
|
+
*/
|
|
59
|
+
export declare function useId(prefix?: string): import("vue").ComputedRef<string>;
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/core/useControllableModel.d.ts
|
|
62
|
+
interface ControllableModelOptions<T> {
|
|
63
|
+
/** 受控值(可直接传值、ref 或 getter;SFC 中传 `() => props.modelValue` 保持响应式) */
|
|
64
|
+
modelValue?: MaybeRefOrGetter<T>;
|
|
65
|
+
/** 非受控初始值 */
|
|
66
|
+
defaultValue?: T;
|
|
67
|
+
/** 受控回调(通常直接传 props['onUpdate:modelValue']) */
|
|
68
|
+
onChange?: (value: T) => void;
|
|
69
|
+
/** 无任何值时使用的兜底初始值 */
|
|
70
|
+
fallback?: T;
|
|
71
|
+
/** 值比较器,默认 Object.is */
|
|
72
|
+
equals?: (a: T, b: T) => boolean;
|
|
73
|
+
}
|
|
74
|
+
interface ControllableModelReturn<T> {
|
|
75
|
+
/** 统一读写入口:受控时读 props,非受控时读内部状态 */
|
|
76
|
+
value: WritableComputedRef<T>;
|
|
77
|
+
/** 主动写入(等价于 value.value = next) */
|
|
78
|
+
setValue: (next: T) => void;
|
|
79
|
+
/** 是否处于受控模式 */
|
|
80
|
+
isControlled: Ref<boolean>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 受控 / 非受控统一封装。
|
|
84
|
+
*
|
|
85
|
+
* - 传入 `modelValue` 时为受控:读外部值,写入时通过 onChange 回发事件;
|
|
86
|
+
* - 仅传入 `defaultValue` 时为非受控:内部自持状态,写入同样回发事件以便宿主监听。
|
|
87
|
+
*
|
|
88
|
+
* `v-model` 永远是纯同步的,本函数不做任何异步编排。
|
|
89
|
+
*/
|
|
90
|
+
export declare function useControllableModel<T>(options?: ControllableModelOptions<T>): ControllableModelReturn<T>;
|
|
91
|
+
/** 从标准 props 形态构造受控模型的便捷方法 */
|
|
92
|
+
export declare function createControllableModel<T>(props: ControlledProps<T>, fallback?: T): ControllableModelReturn<T>;
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/core/useToggle.d.ts
|
|
95
|
+
interface ToggleReturn {
|
|
96
|
+
value: Ref<boolean>;
|
|
97
|
+
toggle: (next?: boolean) => void;
|
|
98
|
+
setTrue: () => void;
|
|
99
|
+
setFalse: () => void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 布尔状态及取反操作。
|
|
103
|
+
*
|
|
104
|
+
* @param initial 初始值,默认 false
|
|
105
|
+
* @internal 消费组件:Switch、Layout、FloatButton
|
|
106
|
+
*/
|
|
107
|
+
export declare function useToggle(initial?: boolean): ToggleReturn;
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/core/useEventListener.d.ts
|
|
110
|
+
type EventMap = WindowEventMap & DocumentEventMap & HTMLElementEventMap & Record<string, Event>;
|
|
111
|
+
/**
|
|
112
|
+
* 绑定 DOM 事件并在作用域销毁时自动卸载;目标支持响应式引用,
|
|
113
|
+
* 目标变化(如 Teleport 后重挂载)时自动重新绑定。
|
|
114
|
+
*
|
|
115
|
+
* @param target 事件目标(元素 / window / document,可为 ref 或 getter)
|
|
116
|
+
* @param event 事件名
|
|
117
|
+
* @param listener 处理函数
|
|
118
|
+
* @param options addEventListener 选项
|
|
119
|
+
* @returns 手动解绑函数
|
|
120
|
+
*/
|
|
121
|
+
export declare function useEventListener<K extends keyof EventMap>(target: MaybeRefOrGetter<EventTarget | null | undefined>, event: K, listener: (ev: EventMap[K]) => void, options?: AddEventListenerOptions | boolean): () => void;
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region src/internal/dom.d.ts
|
|
124
|
+
/** 可注入到 DOM 类组合函数的目标类型:元素、元素引用或 getter */
|
|
125
|
+
type MaybeElement<T extends Element = Element> = MaybeRefOrGetter<T | null | undefined>;
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/core/useResizeObserver.d.ts
|
|
128
|
+
interface ElementSize {
|
|
129
|
+
width: number;
|
|
130
|
+
height: number;
|
|
131
|
+
}
|
|
132
|
+
interface UseResizeObserverReturn {
|
|
133
|
+
width: Ref<number>;
|
|
134
|
+
height: Ref<number>;
|
|
135
|
+
stop: () => void;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 监听元素内容盒尺寸变化。SSR 环境下尺寸恒为 0 且不报错。
|
|
139
|
+
*
|
|
140
|
+
* @internal 消费方:useFloating;Watermark / Typography / VirtualList 组件内联复用
|
|
141
|
+
*/
|
|
142
|
+
export declare function useResizeObserver(target: MaybeElement<HTMLElement>): UseResizeObserverReturn;
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/core/useIntersectionObserver.d.ts
|
|
145
|
+
interface UseIntersectionObserverOptions {
|
|
146
|
+
root?: MaybeElement<HTMLElement>;
|
|
147
|
+
rootMargin?: string;
|
|
148
|
+
threshold?: number | number[];
|
|
149
|
+
/** 首次进入视口后即停止监听(懒加载场景),默认 false */
|
|
150
|
+
once?: boolean;
|
|
151
|
+
}
|
|
152
|
+
interface UseIntersectionObserverReturn {
|
|
153
|
+
isIntersecting: Ref<boolean>;
|
|
154
|
+
ratio: Ref<number>;
|
|
155
|
+
stop: () => void;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* 监听元素进出视口状态。SSR 安全,不支持 IntersectionObserver 时按可见处理。
|
|
159
|
+
*
|
|
160
|
+
* @internal 消费方:useImageState 懒加载;宿主可独立使用
|
|
161
|
+
*/
|
|
162
|
+
export declare function useIntersectionObserver(target: MaybeElement<HTMLElement>, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region src/core/useTimeoutFn.d.ts
|
|
165
|
+
interface UseTimeoutFnReturn {
|
|
166
|
+
isPending: Ref<boolean>;
|
|
167
|
+
/** 重新启动计时(可覆盖延迟毫秒数) */
|
|
168
|
+
start: (ms?: number) => void;
|
|
169
|
+
stop: () => void;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 可随时停止 / 重启的一次性定时器,作用域销毁时自动清理。
|
|
173
|
+
*
|
|
174
|
+
* @param cb 到时回调
|
|
175
|
+
* @param ms 延迟毫秒;构造时传 null/undefined 表示不自动启动,需手动 start
|
|
176
|
+
* @internal 消费方:useOpen 延迟开合、useHoverIntent、useToastQueue、useTypeahead
|
|
177
|
+
*/
|
|
178
|
+
export declare function useTimeoutFn(cb: () => void, ms?: number): UseTimeoutFnReturn;
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region src/core/useIntervalFn.d.ts
|
|
181
|
+
interface UseIntervalFnOptions {
|
|
182
|
+
/** 是否立即启动,默认 true */
|
|
183
|
+
immediate?: boolean;
|
|
184
|
+
/** 立即执行一次回调后再开始计时,默认 false */
|
|
185
|
+
immediateCallback?: boolean;
|
|
186
|
+
}
|
|
187
|
+
interface UseIntervalFnReturn {
|
|
188
|
+
isActive: Ref<boolean>;
|
|
189
|
+
pause: () => void;
|
|
190
|
+
resume: () => void;
|
|
191
|
+
/** 暂停后立即执行一次回调并恢复计时 */
|
|
192
|
+
restart: () => void;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* 可暂停 / 恢复的周期定时器,作用域销毁时自动清理。
|
|
196
|
+
*
|
|
197
|
+
* @param cb 周期回调
|
|
198
|
+
* @param interval 间隔毫秒,可随 resume 动态变更
|
|
199
|
+
* @internal 消费方:Carousel 自动播放;宿主可独立使用
|
|
200
|
+
*/
|
|
201
|
+
export declare function useIntervalFn(cb: () => void, interval?: number, options?: UseIntervalFnOptions): UseIntervalFnReturn;
|
|
202
|
+
//#endregion
|
|
203
|
+
//#region src/core/useMediaQuery.d.ts
|
|
204
|
+
/**
|
|
205
|
+
* 订阅 CSS 媒体查询结果。SSR 环境下恒为 false。
|
|
206
|
+
* 查询串支持响应式引用,变化时自动重新订阅。
|
|
207
|
+
*
|
|
208
|
+
* @internal 消费组件:Layout、Grid;断点语义由宿主基于本函数自行封装
|
|
209
|
+
*/
|
|
210
|
+
export declare function useMediaQuery(query: MaybeRefOrGetter<string>): Ref<boolean>;
|
|
211
|
+
//#endregion
|
|
212
|
+
//#region src/core/useScroll.d.ts
|
|
213
|
+
type ScrollDirection = 'up' | 'down' | 'left' | 'right' | 'none';
|
|
214
|
+
interface UseScrollOptions {
|
|
215
|
+
/** 滚动监听是否使用捕获阶段(读取内部元素滚动时常用),默认 true */
|
|
216
|
+
capture?: boolean;
|
|
217
|
+
/** 是否启用方向记录,默认 true */
|
|
218
|
+
direction?: boolean;
|
|
219
|
+
/** 节流:同一帧内只处理一次,默认 true */
|
|
220
|
+
throttle?: boolean;
|
|
221
|
+
}
|
|
222
|
+
interface ScrollPosition {
|
|
223
|
+
x: Ref<number>;
|
|
224
|
+
y: Ref<number>;
|
|
225
|
+
directionX: Ref<ScrollDirection>;
|
|
226
|
+
directionY: Ref<ScrollDirection>;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* 监听目标元素或窗口的滚动位置与方向,SSR 安全。
|
|
230
|
+
*
|
|
231
|
+
* @param target 滚动容器(window / document / 元素),可为响应式
|
|
232
|
+
* @internal 消费组件:Affix、Anchor、BackTop 内联复用;宿主可独立使用
|
|
233
|
+
*/
|
|
234
|
+
export declare function useScroll(target?: MaybeRefOrGetter<EventTarget | null | undefined>, options?: UseScrollOptions): ScrollPosition;
|
|
235
|
+
//#endregion
|
|
236
|
+
//#region src/core/useScrollLock.d.ts
|
|
237
|
+
interface ScrollLockReturn {
|
|
238
|
+
isLocked: Ref<boolean>;
|
|
239
|
+
lock: () => void;
|
|
240
|
+
unlock: () => void;
|
|
241
|
+
/** 切换锁定状态 */
|
|
242
|
+
toggle: (next?: boolean) => void;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* 打开浮层时锁定背景滚动。采用引用计数,支持多浮层叠加;
|
|
246
|
+
* 作用域销毁时自动释放一次锁定,SSR 安全。
|
|
247
|
+
*
|
|
248
|
+
* @param initial 初始是否锁定,默认 false
|
|
249
|
+
* @internal 消费方:useModal 及下拉浮层
|
|
250
|
+
*/
|
|
251
|
+
export declare function useScrollLock(initial?: boolean): ScrollLockReturn;
|
|
252
|
+
//#endregion
|
|
253
|
+
//#region src/core/useScrollIntoView.d.ts
|
|
254
|
+
interface ScrollIntoViewOptions {
|
|
255
|
+
behavior?: ScrollBehavior;
|
|
256
|
+
block?: ScrollLogicalPosition;
|
|
257
|
+
inline?: ScrollLogicalPosition;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* 将目标元素平滑滚动至可视区。返回命令式方法,供 Tour/Anchor/Tabs 复用。
|
|
261
|
+
*
|
|
262
|
+
* @param defaultTarget 默认滚动目标(调用时可覆盖)
|
|
263
|
+
*/
|
|
264
|
+
export declare function useScrollIntoView(defaultTarget?: MaybeElement<HTMLElement>): (target?: MaybeElement<HTMLElement>, options?: ScrollIntoViewOptions) => void;
|
|
265
|
+
//#endregion
|
|
266
|
+
//#region src/core/useClickOutside.d.ts
|
|
267
|
+
interface UseClickOutsideOptions {
|
|
268
|
+
/** 额外视为"内部"的容器(如浮层本体与触发器同时参与判定) */
|
|
269
|
+
ignore?: MaybeRefOrGetter<Array<MaybeElement<Element>>>;
|
|
270
|
+
/** 是否启用监听,默认 true;关闭浮层时可通过它停用 */
|
|
271
|
+
enabled?: MaybeRefOrGetter<boolean>;
|
|
272
|
+
/** 监听事件,pointerdown 早于 click,默认 pointerdown */
|
|
273
|
+
event?: 'pointerdown' | 'click' | 'mousedown';
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* 点击目标元素外部时触发回调。SSR 安全,作用域销毁自动解绑。
|
|
277
|
+
*
|
|
278
|
+
* @internal 消费方:useDismiss 及各选择器组件
|
|
279
|
+
*/
|
|
280
|
+
export declare function useClickOutside(target: MaybeElement<HTMLElement>, handler: (event: PointerEvent | MouseEvent) => void, options?: UseClickOutsideOptions): void;
|
|
281
|
+
//#endregion
|
|
282
|
+
//#region src/core/useFocusTrap.d.ts
|
|
283
|
+
interface UseFocusTrapOptions {
|
|
284
|
+
/** 初始焦点元素选择器;不传则聚焦容器内第一个可聚焦元素 */
|
|
285
|
+
initialFocus?: string;
|
|
286
|
+
/** 是否在激活时立即聚焦,默认 true */
|
|
287
|
+
immediate?: boolean;
|
|
288
|
+
}
|
|
289
|
+
interface UseFocusTrapReturn {
|
|
290
|
+
isActive: Ref<boolean>;
|
|
291
|
+
trap: () => void;
|
|
292
|
+
release: () => void;
|
|
293
|
+
/** 焦点移动到容器内第一个 / 最后一个可聚焦元素 */
|
|
294
|
+
focusFirst: () => void;
|
|
295
|
+
focusLast: () => void;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* 焦点陷阱:激活期间 Tab 在容器内循环,Esc 不做处理(由 useDismiss 编排)。
|
|
299
|
+
*
|
|
300
|
+
* @param container 陷阱容器,可为响应式引用
|
|
301
|
+
* @internal 消费方:useModal
|
|
302
|
+
*/
|
|
303
|
+
export declare function useFocusTrap(container: MaybeElement<HTMLElement>, options?: UseFocusTrapOptions): UseFocusTrapReturn;
|
|
304
|
+
//#endregion
|
|
305
|
+
//#region src/core/useFocusReturn.d.ts
|
|
306
|
+
interface FocusReturnOptions {
|
|
307
|
+
/** 作用域销毁时是否自动归还,默认 true */
|
|
308
|
+
autoRestore?: boolean;
|
|
309
|
+
}
|
|
310
|
+
interface FocusReturnReturn {
|
|
311
|
+
/** 记录当前焦点元素(通常在浮层打开时调用) */
|
|
312
|
+
record: () => void;
|
|
313
|
+
/** 主动归还焦点 */
|
|
314
|
+
restore: () => void;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* 浮层关闭后将焦点归还至打开前的元素。
|
|
318
|
+
*
|
|
319
|
+
* @internal 消费方:useModal、usePopoverModel
|
|
320
|
+
*/
|
|
321
|
+
export declare function useFocusReturn(options?: FocusReturnOptions): FocusReturnReturn;
|
|
322
|
+
//#endregion
|
|
323
|
+
//#region src/core/useRovingFocus.d.ts
|
|
324
|
+
interface RovingFocusOptions {
|
|
325
|
+
/** 选项数量或选项元素数组的来源(响应式) */
|
|
326
|
+
count: MaybeRefOrGetter<number>;
|
|
327
|
+
/** 判定索引对应项是否禁用(禁用项在键盘移动时跳过) */
|
|
328
|
+
isItemDisabled?: (index: number) => boolean;
|
|
329
|
+
/** 导航方向,默认 vertical */
|
|
330
|
+
orientation?: 'horizontal' | 'vertical' | 'both';
|
|
331
|
+
/** 到达边界后循环,默认 true */
|
|
332
|
+
loop?: boolean;
|
|
333
|
+
/** 初始激活索引,默认 0 */
|
|
334
|
+
initialIndex?: number;
|
|
335
|
+
/** 移动时是否自动聚焦 DOM,默认 true(传 false 时仅维护 tabindex) */
|
|
336
|
+
autofocus?: boolean;
|
|
337
|
+
/** 容器,配合 autofocus 定位选项;选项通过 [data-roving-index] 标记 */
|
|
338
|
+
container?: MaybeElement<HTMLElement>;
|
|
339
|
+
}
|
|
340
|
+
interface RovingFocusReturn {
|
|
341
|
+
activeIndex: Ref<number>;
|
|
342
|
+
setActiveIndex: (index: number) => void;
|
|
343
|
+
/** 绑定到选项容器的键盘处理器 */
|
|
344
|
+
onKeydown: (event: KeyboardEvent) => void;
|
|
345
|
+
/** 返回某项的 tabindex:激活项为 0,其余为 -1 */
|
|
346
|
+
getTabIndex: (index: number) => 0 | -1;
|
|
347
|
+
/** 绑定到单个选项上,获得焦点时同步激活索引 */
|
|
348
|
+
onItemFocus: (index: number) => () => void;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* 列表内 roving-tabindex 焦点管理:方向键 / Home / End 移动激活项,
|
|
352
|
+
* 自动跳过禁用项,可选循环。Tab 只落到当前激活项。
|
|
353
|
+
*
|
|
354
|
+
* @internal 消费组件:Select、Menu、Tabs、Segmented、Tree
|
|
355
|
+
*/
|
|
356
|
+
export declare function useRovingFocus(options: RovingFocusOptions): RovingFocusReturn;
|
|
357
|
+
//#endregion
|
|
358
|
+
//#region src/core/useTypeahead.d.ts
|
|
359
|
+
interface TypeaheadOptions {
|
|
360
|
+
/** 获取当前可匹配的选项标签列表 */
|
|
361
|
+
getLabels: () => string[];
|
|
362
|
+
/** 命中选项时的回调(参数为索引) */
|
|
363
|
+
onMatch?: (index: number) => void;
|
|
364
|
+
/** 起始搜索索引(通常为当前激活项) */
|
|
365
|
+
startIndex?: () => number;
|
|
366
|
+
/** 输入重置间隔,默认 500ms */
|
|
367
|
+
resetDelay?: number;
|
|
368
|
+
/** 是否循环匹配,默认 true */
|
|
369
|
+
loop?: boolean;
|
|
370
|
+
}
|
|
371
|
+
interface TypeaheadReturn {
|
|
372
|
+
/** 当前累计的搜索串 */
|
|
373
|
+
query: Ref<string>;
|
|
374
|
+
/** 绑定到列表容器的键盘处理器(字符键触发匹配) */
|
|
375
|
+
onKeydown: (event: KeyboardEvent) => void;
|
|
376
|
+
reset: () => void;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* 键盘输入匹配选项:在重置间隔内连续输入字符组成搜索串,
|
|
380
|
+
* 按前缀匹配选项标签并跳转,单字符重复按时序循环匹配。
|
|
381
|
+
*
|
|
382
|
+
* @internal 消费组件:Select、Menu、Tree
|
|
383
|
+
*/
|
|
384
|
+
export declare function useTypeahead(options: TypeaheadOptions): TypeaheadReturn;
|
|
385
|
+
//#endregion
|
|
386
|
+
//#region src/core/useDraggable.d.ts
|
|
387
|
+
interface DraggablePosition {
|
|
388
|
+
/** 相对元素盒左上角的像素偏移 */
|
|
389
|
+
x: number;
|
|
390
|
+
y: number;
|
|
391
|
+
/** 0~1 之间的归一化位置(已钳制在元素盒内) */
|
|
392
|
+
ratioX: number;
|
|
393
|
+
ratioY: number;
|
|
394
|
+
}
|
|
395
|
+
interface UseDraggableOptions {
|
|
396
|
+
/** 拖拽手柄,默认为目标元素自身 */
|
|
397
|
+
handle?: MaybeElement<HTMLElement>;
|
|
398
|
+
/** 限制拖拽轴,默认 both */
|
|
399
|
+
axis?: 'x' | 'y' | 'both';
|
|
400
|
+
/** 拖拽边界元素,默认为目标元素自身 */
|
|
401
|
+
bounds?: MaybeElement<HTMLElement>;
|
|
402
|
+
/** 初始归一化位置 */
|
|
403
|
+
initialRatio?: {
|
|
404
|
+
x: number;
|
|
405
|
+
y: number;
|
|
406
|
+
};
|
|
407
|
+
/** 是否禁用 */
|
|
408
|
+
disabled?: MaybeRefOrGetter<boolean>;
|
|
409
|
+
onStart?: (position: DraggablePosition, event: PointerEvent) => void;
|
|
410
|
+
onMove?: (position: DraggablePosition, event: PointerEvent) => void;
|
|
411
|
+
onEnd?: (position: DraggablePosition, event: PointerEvent) => void;
|
|
412
|
+
}
|
|
413
|
+
interface UseDraggableReturn {
|
|
414
|
+
x: Ref<number>;
|
|
415
|
+
y: Ref<number>;
|
|
416
|
+
ratioX: Ref<number>;
|
|
417
|
+
ratioY: Ref<number>;
|
|
418
|
+
dragging: Ref<boolean>;
|
|
419
|
+
/** 命令式按归一化比例写入位置(轨道点击定位时使用) */
|
|
420
|
+
moveToRatio: (ratioX: number, ratioY: number) => void;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* 基于 Pointer Events 的拖拽原语:在目标元素盒内测量归一化位置,
|
|
424
|
+
* 自动处理边界钳制、指针捕获与清理。Slider / ColorPicker 共用同一份几何计算。
|
|
425
|
+
*/
|
|
426
|
+
export declare function useDraggable(target: MaybeElement<HTMLElement>, options?: UseDraggableOptions): UseDraggableReturn;
|
|
427
|
+
//#endregion
|
|
428
|
+
//#region src/core/useClipboard.d.ts
|
|
429
|
+
interface UseClipboardOptions {
|
|
430
|
+
/** 复制成功后 copied 状态保持时长,默认 1500ms */
|
|
431
|
+
copiedDuration?: number;
|
|
432
|
+
/** 是否在非安全上下文降级使用 execCommand,默认 true */
|
|
433
|
+
legacy?: boolean;
|
|
434
|
+
}
|
|
435
|
+
interface UseClipboardReturn {
|
|
436
|
+
copied: Ref<boolean>;
|
|
437
|
+
error: Ref<unknown>;
|
|
438
|
+
copy: (text: string) => Promise<boolean>;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* 复制文本到剪贴板,自动派生短暂的成功反馈;
|
|
442
|
+
* 不支持 Clipboard API 时降级为隐藏 textarea + execCommand。
|
|
443
|
+
*
|
|
444
|
+
* @internal 消费组件:Typography;宿主可独立使用
|
|
445
|
+
*/
|
|
446
|
+
export declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
|
|
447
|
+
//#endregion
|
|
448
|
+
//#region src/core/useTransitionVisible.d.ts
|
|
449
|
+
interface TransitionVisibleReturn {
|
|
450
|
+
/** 是否应将浮层挂载到 DOM(离场动画结束后才卸载) */
|
|
451
|
+
rendered: Ref<boolean>;
|
|
452
|
+
/** 是否处于可见态(驱动进出场 class) */
|
|
453
|
+
visible: Ref<boolean>;
|
|
454
|
+
/** 绑定到 <Transition> 的 after-leave 事件 */
|
|
455
|
+
onAfterLeave: () => void;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* 进出场过渡的挂载状态机:
|
|
459
|
+
* - 打开时先 rendered=true(挂载),下一帧 visible=true(触发进入过渡);
|
|
460
|
+
* - 关闭时 visible=false(触发离开过渡),after-leave 后 rendered=false(卸载)。
|
|
461
|
+
*
|
|
462
|
+
* 组件模板用法:
|
|
463
|
+
* `<Transition @after-leave="onAfterLeave"><div v-if="rendered" v-show="visible" />`
|
|
464
|
+
*
|
|
465
|
+
* @param isOpen 开合来源(ref / getter)
|
|
466
|
+
*/
|
|
467
|
+
export declare function useTransitionVisible(isOpen: MaybeRefOrGetter<boolean>): TransitionVisibleReturn;
|
|
468
|
+
//#endregion
|
|
469
|
+
//#region src/core/useZIndex.d.ts
|
|
470
|
+
interface ZIndexReturn {
|
|
471
|
+
/** 当前分配到的层级 */
|
|
472
|
+
currentZIndex: Ref<number>;
|
|
473
|
+
/** 取下一个层级(浮层每次打开时调用) */
|
|
474
|
+
nextZIndex: () => number;
|
|
475
|
+
/** 当前全局最大值(供初始化样式参考) */
|
|
476
|
+
getGlobalZIndex: () => number;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* 全局浮层层级递增管理。Dialog/Drawer/Popover/Message/Notification
|
|
480
|
+
* 共用同一序列,组件卸载无需回收(仅单调递增)。
|
|
481
|
+
*/
|
|
482
|
+
export declare function useZIndex(initial?: number): ZIndexReturn;
|
|
483
|
+
/** 重置全局层级(仅供测试使用) */
|
|
484
|
+
export declare function resetGlobalZIndex(value?: number): void;
|
|
485
|
+
//#endregion
|
|
486
|
+
//#region src/behavior/useOpen.d.ts
|
|
487
|
+
interface UseOpenOptions extends ControlledProps<boolean> {
|
|
488
|
+
/** 打开延迟(毫秒),默认 0 */
|
|
489
|
+
openDelay?: number;
|
|
490
|
+
/** 关闭延迟(毫秒),默认 0(悬停浮层常用) */
|
|
491
|
+
closeDelay?: number;
|
|
492
|
+
/** 开合状态变化回调 */
|
|
493
|
+
onChange?: (open: boolean) => void;
|
|
494
|
+
}
|
|
495
|
+
interface UseOpenReturn {
|
|
496
|
+
isOpen: Ref<boolean>;
|
|
497
|
+
open: () => void;
|
|
498
|
+
close: () => void;
|
|
499
|
+
toggle: (next?: boolean) => void;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* 开合状态机:支持受控(modelValue + update:modelValue)与非受控,
|
|
503
|
+
* 可选的打开 / 关闭延迟(由 useHoverIntent 之类场景复用)。
|
|
504
|
+
*
|
|
505
|
+
* @internal 消费组件:Dialog/Drawer(经 useModal)、Popover、Dropdown、Select、Tooltip
|
|
506
|
+
*/
|
|
507
|
+
export declare function useOpen(options?: UseOpenOptions): UseOpenReturn;
|
|
508
|
+
//#endregion
|
|
509
|
+
//#region src/behavior/useDismiss.d.ts
|
|
510
|
+
type DismissReason = 'escape-key' | 'outside-press' | 'scroll';
|
|
511
|
+
interface UseDismissOptions {
|
|
512
|
+
/** 是否处于打开态(仅打开时响应关闭策略) */
|
|
513
|
+
isOpen: MaybeRefOrGetter<boolean>;
|
|
514
|
+
/** 触发元素:点击它不判定为外部点击 */
|
|
515
|
+
reference?: MaybeElement<HTMLElement>;
|
|
516
|
+
/** 浮层本体 */
|
|
517
|
+
floating?: MaybeElement<HTMLElement>;
|
|
518
|
+
/** 触发关闭回调 */
|
|
519
|
+
onDismiss: (reason: DismissReason) => void;
|
|
520
|
+
/** ESC 关闭,默认 true */
|
|
521
|
+
escapeKey?: boolean;
|
|
522
|
+
/** 外部点击关闭,默认 true */
|
|
523
|
+
outsidePress?: boolean;
|
|
524
|
+
/** 外部点击是否使用鼠标按下(pointerdown),默认 true */
|
|
525
|
+
outsidePressEvent?: 'pointerdown' | 'click' | 'mousedown';
|
|
526
|
+
/** 滚动关闭,默认 false(下拉选择类浮层可开启) */
|
|
527
|
+
scroll?: boolean;
|
|
528
|
+
/** 是否启用,默认 true */
|
|
529
|
+
enabled?: MaybeRefOrGetter<boolean>;
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* ESC、外部点击、滚动失焦的统一关闭编排。仅在浮层打开时生效,
|
|
533
|
+
* 监听器随作用域自动清理。
|
|
534
|
+
*
|
|
535
|
+
* @internal 消费组件:全部浮层(经 useModal / usePopoverModel 或直接使用)
|
|
536
|
+
*/
|
|
537
|
+
export declare function useDismiss(options: UseDismissOptions): void;
|
|
538
|
+
//#endregion
|
|
539
|
+
//#region src/behavior/useFloating.d.ts
|
|
540
|
+
interface UseFloatingOptions {
|
|
541
|
+
placement?: MaybeRefOrGetter<Placement>;
|
|
542
|
+
strategy?: Strategy;
|
|
543
|
+
/** 浮层与锚点的主间距,默认 4 */
|
|
544
|
+
gap?: number;
|
|
545
|
+
/** 距视口边缘的最小留白(移位与箭头钳制共用),默认 4 */
|
|
546
|
+
shiftPadding?: number;
|
|
547
|
+
/** 空间不足时自动翻转,默认 true */
|
|
548
|
+
flip?: boolean;
|
|
549
|
+
/** 超出视口时平移回可见区,默认 true */
|
|
550
|
+
shift?: boolean;
|
|
551
|
+
/** 箭头元素尺寸(不传则从箭头元素测量) */
|
|
552
|
+
arrowSize?: number;
|
|
553
|
+
/** 打开状态来源;变为 true 后立即重新定位 */
|
|
554
|
+
open?: MaybeRefOrGetter<boolean>;
|
|
555
|
+
/** 定位完成回调(可读取最终方位) */
|
|
556
|
+
onPositioned?: (data: {
|
|
557
|
+
placement: Placement;
|
|
558
|
+
x: number;
|
|
559
|
+
y: number;
|
|
560
|
+
}) => void;
|
|
561
|
+
}
|
|
562
|
+
interface UseFloatingReturn {
|
|
563
|
+
/** 绑定到锚点元素:ref="referenceRef" */
|
|
564
|
+
referenceRef: Ref<HTMLElement | null>;
|
|
565
|
+
/** 绑定到浮层元素 */
|
|
566
|
+
floatingRef: Ref<HTMLElement | null>;
|
|
567
|
+
/** 绑定到箭头元素 */
|
|
568
|
+
arrowRef: Ref<HTMLElement | null>;
|
|
569
|
+
/** 翻转后的实际方位 */
|
|
570
|
+
placement: Ref<Placement>;
|
|
571
|
+
x: Ref<number>;
|
|
572
|
+
y: Ref<number>;
|
|
573
|
+
arrowX: Ref<number | undefined>;
|
|
574
|
+
arrowY: Ref<number | undefined>;
|
|
575
|
+
/** 直接绑定到浮层的 style */
|
|
576
|
+
floatingStyles: Ref<CSSProperties>;
|
|
577
|
+
/** 手动重新计算定位 */
|
|
578
|
+
update: () => void;
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* 锚点浮层定位引擎:方位、自动翻转、视口移位、间距、箭头坐标;
|
|
582
|
+
* 滚动、窗口尺寸、锚点与浮层尺寸变化时自动更新。零第三方依赖。
|
|
583
|
+
*
|
|
584
|
+
* @internal 消费组件:Tooltip/Popover/Dropdown/Select/Cascader/DatePicker/
|
|
585
|
+
* TimePicker/ColorPicker/TreeSelect/AutoComplete/Mention/Popconfirm
|
|
586
|
+
*/
|
|
587
|
+
export declare function useFloating(options?: UseFloatingOptions): UseFloatingReturn;
|
|
588
|
+
//#endregion
|
|
589
|
+
//#region src/behavior/useHoverIntent.d.ts
|
|
590
|
+
interface HoverIntentOptions {
|
|
591
|
+
/** 打开延迟,默认 100ms(防止快速划过敏触发) */
|
|
592
|
+
showDelay?: number;
|
|
593
|
+
/** 关闭延迟,默认 100ms(鼠标在触发器与浮层间移动时不闪烁) */
|
|
594
|
+
hideDelay?: number;
|
|
595
|
+
/** 是否禁用(触屏设备可关闭) */
|
|
596
|
+
disabled?: boolean;
|
|
597
|
+
}
|
|
598
|
+
interface HoverIntentReturn {
|
|
599
|
+
isHovered: Ref<boolean>;
|
|
600
|
+
onMouseEnter: () => void;
|
|
601
|
+
onMouseLeave: () => void;
|
|
602
|
+
/** 立即开合,跳过延迟 */
|
|
603
|
+
setOpen: (open: boolean) => void;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* 悬停触发的开合延迟控制,防止抖动与误触。
|
|
607
|
+
* 触发器与浮层应同时绑定返回的 enter/leave 处理器。
|
|
608
|
+
*
|
|
609
|
+
* @internal 消费组件:Tooltip、Dropdown(hover)、Menu
|
|
610
|
+
*/
|
|
611
|
+
export declare function useHoverIntent(options?: HoverIntentOptions): HoverIntentReturn;
|
|
612
|
+
//#endregion
|
|
613
|
+
//#region src/behavior/useListboxNavigation.d.ts
|
|
614
|
+
interface ListboxNavigationOptions {
|
|
615
|
+
/** 选项总数(响应式) */
|
|
616
|
+
count: MaybeRefOrGetter<number>;
|
|
617
|
+
/** 禁用项判定 */
|
|
618
|
+
isItemDisabled?: (index: number) => boolean;
|
|
619
|
+
/** 导航方向,默认 vertical */
|
|
620
|
+
orientation?: 'horizontal' | 'vertical' | 'both';
|
|
621
|
+
/** 边界循环,默认 true */
|
|
622
|
+
loop?: boolean;
|
|
623
|
+
/** 初始激活索引,默认 -1(尚未激活,首次按键落到首项) */
|
|
624
|
+
initialIndex?: number;
|
|
625
|
+
/** 回车 / 空格选中时回调 */
|
|
626
|
+
onSelect?: (index: number) => void;
|
|
627
|
+
/** 激活项变化回调(用于滚动到可视区) */
|
|
628
|
+
onActiveChange?: (index: number) => void;
|
|
629
|
+
}
|
|
630
|
+
interface ListboxNavigationReturn {
|
|
631
|
+
activeIndex: Ref<number>;
|
|
632
|
+
setActiveIndex: (index: number) => void;
|
|
633
|
+
moveNext: () => void;
|
|
634
|
+
movePrev: () => void;
|
|
635
|
+
moveFirst: () => void;
|
|
636
|
+
moveLast: () => void;
|
|
637
|
+
/** 绑定到列表容器:方向键移动、回车/空格选中 */
|
|
638
|
+
onKeydown: (event: KeyboardEvent) => void;
|
|
639
|
+
reset: () => void;
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* 选项列表键盘导航:上下移动、Home/End、回车选中、禁用项跳过、边界循环。
|
|
643
|
+
* 与焦点管理解耦——本函数只维护逻辑激活索引。
|
|
644
|
+
*
|
|
645
|
+
* @internal 消费组件:Select、Dropdown、Menu、Cascader、AutoComplete、
|
|
646
|
+
* Mention、Segmented、TreeSelect、TimePicker
|
|
647
|
+
*/
|
|
648
|
+
export declare function useListboxNavigation(options: ListboxNavigationOptions): ListboxNavigationReturn;
|
|
649
|
+
//#endregion
|
|
650
|
+
//#region src/behavior/useAsyncState.d.ts
|
|
651
|
+
interface UseAsyncStateOptions<T, A extends unknown[]> {
|
|
652
|
+
/** 初始 data,默认 undefined */
|
|
653
|
+
initialData?: T;
|
|
654
|
+
/** 是否立即以初始参数执行一次,默认 true */
|
|
655
|
+
immediate?: boolean;
|
|
656
|
+
/** 立即执行时的参数 */
|
|
657
|
+
immediateArgs?: A;
|
|
658
|
+
/** 重新拉取时保留旧数据并标记 isStale,默认 true */
|
|
659
|
+
preserveDataOnRefresh?: boolean;
|
|
660
|
+
/** 成功回调 */
|
|
661
|
+
onSuccess?: (data: T, ...args: A) => void;
|
|
662
|
+
/** 失败回调 */
|
|
663
|
+
onError?: (error: unknown, ...args: A) => void;
|
|
664
|
+
}
|
|
665
|
+
interface UseAsyncStateReturn<T, A extends unknown[]> {
|
|
666
|
+
state: Ref<AsyncStateLike<T>>;
|
|
667
|
+
/** 手动执行请求;再次执行时已有成功数据会标记 isStale */
|
|
668
|
+
run: (...args: A) => Promise<T | undefined>;
|
|
669
|
+
/** 以最近一次参数重试 */
|
|
670
|
+
retry: () => Promise<T | undefined>;
|
|
671
|
+
loading: Ref<boolean>;
|
|
672
|
+
error: Ref<unknown>;
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* 将外部异步函数包装为标准 AsyncStateLike:
|
|
676
|
+
* 管理 pending/success/error 三态、重试与 stale 标记。
|
|
677
|
+
* 函数自身不发起任何业务请求——请求函数由宿主提供。
|
|
678
|
+
*
|
|
679
|
+
* @param fetcher 返回 Promise 的数据获取函数
|
|
680
|
+
* @internal 消费方:远程 Select/AutoComplete/Mention;Table 内联编排;宿主可独立使用
|
|
681
|
+
*/
|
|
682
|
+
export declare function useAsyncState<T, A extends unknown[] = []>(fetcher: (...args: A) => Promise<T>, options?: UseAsyncStateOptions<T, A>): UseAsyncStateReturn<T, A>;
|
|
683
|
+
//#endregion
|
|
684
|
+
//#region src/behavior/useActionState.d.ts
|
|
685
|
+
/** 归一 action 返回值:resolve 值导出错误(status 为 error 或携带 error)时返回失败信息,否则 null */
|
|
686
|
+
export declare function extractActionFailure(result: unknown): {
|
|
687
|
+
error: unknown;
|
|
688
|
+
} | null;
|
|
689
|
+
/** 把动作错误归一为可展示文案:优先 message,其次 error 字符串 / Error.message,最后回退文案 */
|
|
690
|
+
export declare function actionErrorText(error: unknown, fallback?: string): string;
|
|
691
|
+
interface UseActionStateOptions {
|
|
692
|
+
/** 执行期间是否派生 disabled,默认 true */
|
|
693
|
+
disableOnPending?: boolean;
|
|
694
|
+
/** 外部附加禁用条件(响应式值通过 getter 传入) */
|
|
695
|
+
disabled?: () => boolean;
|
|
696
|
+
/** 成功回调 */
|
|
697
|
+
onSuccess?: (result: unknown) => void;
|
|
698
|
+
/** 失败回调(不抛出,错误归一存放在 error) */
|
|
699
|
+
onError?: (error: unknown) => void;
|
|
700
|
+
/** 无论成功失败的收尾回调 */
|
|
701
|
+
onFinally?: () => void;
|
|
702
|
+
}
|
|
703
|
+
interface UseActionStateReturn {
|
|
704
|
+
pending: Ref<boolean>;
|
|
705
|
+
disabled: Ref<boolean>;
|
|
706
|
+
error: Ref<unknown>;
|
|
707
|
+
/** 执行动作;同一时刻重复调用会被忽略 */
|
|
708
|
+
run: (...args: unknown[]) => Promise<unknown>;
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* 消费 ActionLike:执行期间自动派生 pending / disabled,错误归一存储。
|
|
712
|
+
*
|
|
713
|
+
* @internal 消费组件:Button、Switch、Popconfirm、Upload、Form 提交
|
|
714
|
+
*/
|
|
715
|
+
export declare function useActionState(action?: ActionLike, options?: UseActionStateOptions): UseActionStateReturn;
|
|
716
|
+
//#endregion
|
|
717
|
+
//#region src/behavior/useActionValue.d.ts
|
|
718
|
+
interface UseActionValueReturn {
|
|
719
|
+
/** 动作执行中,期间组件应禁用新的交互 */
|
|
720
|
+
pending: Ref<boolean>;
|
|
721
|
+
/** 最近一次失败的错误信息 */
|
|
722
|
+
error: Ref<unknown>;
|
|
723
|
+
/**
|
|
724
|
+
* 乐观提交:组件先应用新值,再调用 commit 执行动作。
|
|
725
|
+
* 失败(reject 或返回值导出错误)时记录 error、执行 revert 回退并返回 false;
|
|
726
|
+
* 无 execute 时视为无动作,直接成功。同一时刻重复调用会被忽略。
|
|
727
|
+
*/
|
|
728
|
+
commit: (options: {
|
|
729
|
+
execute?: () => unknown;
|
|
730
|
+
revert?: () => void;
|
|
731
|
+
}) => Promise<boolean>;
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* 切换型组件的 action 消费:值变更先乐观应用,动作失败自动回退并记录错误。
|
|
735
|
+
*
|
|
736
|
+
* @internal 消费组件:Select、DatePicker、ColorPicker、Transfer、Rate、Segmented、Tabs 等即时变更组件
|
|
737
|
+
*/
|
|
738
|
+
export declare function useActionValue(): UseActionValueReturn;
|
|
739
|
+
//#endregion
|
|
740
|
+
//#region src/behavior/useToastQueue.d.ts
|
|
741
|
+
type ToastType = 'info' | 'success' | 'warning' | 'error' | 'loading';
|
|
742
|
+
interface ToastItem<T = unknown> {
|
|
743
|
+
id: number;
|
|
744
|
+
type: ToastType;
|
|
745
|
+
content: string;
|
|
746
|
+
title?: string;
|
|
747
|
+
duration: number;
|
|
748
|
+
/** 自定义载荷(动作文案、图标等渲染所需数据) */
|
|
749
|
+
meta?: T;
|
|
750
|
+
/** 悬停暂停期间剩余时长,关闭后为 0 */
|
|
751
|
+
remaining: number;
|
|
752
|
+
/** 是否常驻(duration <= 0),需手动关闭 */
|
|
753
|
+
closable: boolean;
|
|
754
|
+
}
|
|
755
|
+
interface UseToastQueueOptions {
|
|
756
|
+
/** 默认自动关闭时长,默认 3000ms;<=0 表示常驻 */
|
|
757
|
+
duration?: number;
|
|
758
|
+
/** 同时存在的最大条数,超出挤出最早项,默认 5 */
|
|
759
|
+
max?: number;
|
|
760
|
+
/** 去重:相同 type+content 时不重复入队,默认 true */
|
|
761
|
+
dedupe?: boolean;
|
|
762
|
+
}
|
|
763
|
+
interface PushToastOptions<T = unknown> {
|
|
764
|
+
duration?: number;
|
|
765
|
+
title?: string;
|
|
766
|
+
meta?: T;
|
|
767
|
+
closable?: boolean;
|
|
768
|
+
}
|
|
769
|
+
interface UseToastQueueReturn<T = unknown> {
|
|
770
|
+
items: Ref<Array<ToastItem<T>>>;
|
|
771
|
+
count: Ref<number>;
|
|
772
|
+
push: (type: ToastType, content: string, options?: PushToastOptions<T>) => ToastItem<T>;
|
|
773
|
+
remove: (id: number) => void;
|
|
774
|
+
clear: () => void;
|
|
775
|
+
/** 悬停暂停计时(不清零剩余时长) */
|
|
776
|
+
pause: (id: number) => void;
|
|
777
|
+
/** 恢复计时 */
|
|
778
|
+
resume: (id: number) => void;
|
|
779
|
+
}
|
|
780
|
+
/**
|
|
781
|
+
* 命令式浮层队列:堆叠管理、去重、自动关闭、悬停暂停、手动销毁。
|
|
782
|
+
* 只管理数据与计时,不渲染任何 DOM——渲染由 Message/Notification 组件承担。
|
|
783
|
+
*
|
|
784
|
+
* @internal 消费方:createMessage、createNotification
|
|
785
|
+
*/
|
|
786
|
+
export declare function useToastQueue<T = unknown>(options?: UseToastQueueOptions): UseToastQueueReturn<T>;
|
|
787
|
+
//#endregion
|
|
788
|
+
//#region src/behavior/useOverlayContainer.d.ts
|
|
789
|
+
interface OverlayContainerOptions {
|
|
790
|
+
/**
|
|
791
|
+
* Teleport 目标:
|
|
792
|
+
* - 选择器字符串('#app' / '.xxx')
|
|
793
|
+
* - 元素引用
|
|
794
|
+
* - 不传时使用 document.body
|
|
795
|
+
*/
|
|
796
|
+
to?: string | HTMLElement;
|
|
797
|
+
/** 选择器 / 元素不存在时是否回退到 body,默认 true */
|
|
798
|
+
fallbackToBody?: boolean;
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* Teleport 目标容器的 SSR 安全解析。挂载后才访问 document,
|
|
802
|
+
* 选择器不存在时按策略回退到 body。
|
|
803
|
+
*
|
|
804
|
+
* @internal 消费组件:全部 Teleport 浮层
|
|
805
|
+
*/
|
|
806
|
+
export declare function useOverlayContainer(options?: OverlayContainerOptions): {
|
|
807
|
+
container: Ref<HTMLElement | null>;
|
|
808
|
+
};
|
|
809
|
+
//#endregion
|
|
810
|
+
//#region src/behavior/useFormContext.d.ts
|
|
811
|
+
/**
|
|
812
|
+
* 表单上下文:useForm 提供整表模型,useFormField 注入后完成
|
|
813
|
+
* 字段注册、规则继承与提交/重置联动;FormItem 再向具体控件注入字段上下文。
|
|
814
|
+
*/
|
|
815
|
+
interface FormFieldContext {
|
|
816
|
+
/** 字段名 */
|
|
817
|
+
name: string | number;
|
|
818
|
+
/** 当前校验错误信息(无错误为 undefined) */
|
|
819
|
+
error?: string;
|
|
820
|
+
/** 是否被触碰过(blur 后置 true) */
|
|
821
|
+
touched: boolean;
|
|
822
|
+
/** 控件 id(label/aria 关联) */
|
|
823
|
+
fieldId: string;
|
|
824
|
+
/** 校验状态变化时由控件调用 */
|
|
825
|
+
setError?: (error: string | undefined) => void;
|
|
826
|
+
}
|
|
827
|
+
/** 字段注册到表单时提供的控制器 */
|
|
828
|
+
interface FormFieldController {
|
|
829
|
+
validate: () => Promise<string | true> | string | true;
|
|
830
|
+
reset: () => void;
|
|
831
|
+
clearValidate: () => void;
|
|
832
|
+
getValue?: () => unknown;
|
|
833
|
+
setValue?: (value: unknown) => void;
|
|
834
|
+
}
|
|
835
|
+
interface FormContext {
|
|
836
|
+
/** 整表值的只读快照(响应式对象) */
|
|
837
|
+
values: Record<string, unknown>;
|
|
838
|
+
/** 整表校验错误映射 */
|
|
839
|
+
errors: Record<string, string | undefined>;
|
|
840
|
+
/** 注册字段,返回注销函数 */
|
|
841
|
+
registerField: (name: string | number, controller: FormFieldController) => () => void;
|
|
842
|
+
/** 读取字段在表单规则中的校验器 */
|
|
843
|
+
getFieldRules?: (name: string | number) => unknown;
|
|
844
|
+
/** 提交表单(经 useForm 编排,触发校验与 submit 事件) */
|
|
845
|
+
submit: () => Promise<void>;
|
|
846
|
+
/** 重置整表 */
|
|
847
|
+
reset: () => void;
|
|
848
|
+
/** 字段值变化时回写整表聚合值 */
|
|
849
|
+
setFieldValue?: (name: string | number, value: unknown) => void;
|
|
850
|
+
/** 是否禁用整表 */
|
|
851
|
+
disabled?: boolean;
|
|
852
|
+
/** label 位置等布局信息(仅传递,不参与逻辑) */
|
|
853
|
+
labelPosition?: 'left' | 'right' | 'top';
|
|
854
|
+
}
|
|
855
|
+
/** useForm 注册整表上下文 */
|
|
856
|
+
export declare function provideForm(context: FormContext): void;
|
|
857
|
+
/** 表单控件 / FormItem 注入整表上下文,未处于表单中时返回 undefined */
|
|
858
|
+
export declare function injectForm(): FormContext | undefined;
|
|
859
|
+
/** FormItem 注册字段上下文(向内部控件传递错误、id 等) */
|
|
860
|
+
export declare function provideFormField(context: FormFieldContext): void;
|
|
861
|
+
/** 具体表单控件注入所属字段上下文 */
|
|
862
|
+
export declare function injectFormField(): FormFieldContext | undefined;
|
|
863
|
+
//#endregion
|
|
864
|
+
//#region src/form/form-types.d.ts
|
|
865
|
+
/**
|
|
866
|
+
* 表单领域共享类型。
|
|
867
|
+
*/
|
|
868
|
+
/** 校验规则:返回 true 通过,返回字符串作为错误信息;支持异步 */
|
|
869
|
+
type FormRule<T = unknown> = (value: T, values: Record<string, unknown>) => string | true | Promise<string | true>;
|
|
870
|
+
/** 必填规则的简写配置(由组件内构造为 FormRule) */
|
|
871
|
+
interface FieldRuleConfig<T = unknown> {
|
|
872
|
+
required?: boolean;
|
|
873
|
+
message?: string;
|
|
874
|
+
validator?: FormRule<T>;
|
|
875
|
+
trigger?: 'change' | 'blur' | 'submit';
|
|
876
|
+
}
|
|
877
|
+
type FormRules<T extends Record<string, unknown>> = Partial<Record<keyof T, Array<FormRule> | FormRule>>;
|
|
878
|
+
//#endregion
|
|
879
|
+
//#region src/form/useForm.d.ts
|
|
880
|
+
interface UseFormOptions<T extends Record<string, unknown>> {
|
|
881
|
+
/** 受控整表值 */
|
|
882
|
+
modelValue?: MaybeRefOrGetter<T>;
|
|
883
|
+
/** 非受控初始值 */
|
|
884
|
+
defaultValue?: T;
|
|
885
|
+
/** 字段规则(也可由各 useFormField 传入,按字段名合并) */
|
|
886
|
+
rules?: MaybeRefOrGetter<FormRules<T>>;
|
|
887
|
+
disabled?: boolean;
|
|
888
|
+
labelPosition?: 'left' | 'right' | 'top';
|
|
889
|
+
/** 值变化回调(受控时即 update:modelValue) */
|
|
890
|
+
onChange?: (values: T) => void;
|
|
891
|
+
/** 校验通过后的提交回调 */
|
|
892
|
+
onSubmit?: (values: T) => void | Promise<void>;
|
|
893
|
+
/** 校验失败回调 */
|
|
894
|
+
onInvalid?: (errors: Record<string, string | undefined>) => void;
|
|
895
|
+
}
|
|
896
|
+
interface UseFormReturn<T extends Record<string, unknown>> {
|
|
897
|
+
values: T;
|
|
898
|
+
errors: Record<string, string | undefined>;
|
|
899
|
+
touched: Record<string, boolean>;
|
|
900
|
+
valid: ReturnType<typeof computed<boolean>>;
|
|
901
|
+
dirty: ReturnType<typeof computed<boolean>>;
|
|
902
|
+
registerField: (name: string | number, controller: FormFieldController) => () => void;
|
|
903
|
+
validateField: (name: string | number) => Promise<string | true>;
|
|
904
|
+
validate: () => Promise<boolean>;
|
|
905
|
+
clearValidate: (name?: string | number) => void;
|
|
906
|
+
setFieldValue: (name: string | number, value: unknown) => void;
|
|
907
|
+
resetField: (name: string | number) => void;
|
|
908
|
+
reset: () => void;
|
|
909
|
+
submit: () => Promise<void>;
|
|
910
|
+
context: FormContext;
|
|
911
|
+
}
|
|
912
|
+
/**
|
|
913
|
+
* 无头表单模型:字段注册/注销、整表聚合值、同步/异步规则校验、
|
|
914
|
+
* 提交、重置与脏检查。组件只负责布局与错误提示渲染。
|
|
915
|
+
*/
|
|
916
|
+
export declare function useForm<T extends Record<string, unknown>>(options?: UseFormOptions<T>): UseFormReturn<T>;
|
|
917
|
+
//#endregion
|
|
918
|
+
//#region src/form/useFormField.d.ts
|
|
919
|
+
interface UseFormFieldOptions<T> {
|
|
920
|
+
/** 字段名;处于表单上下文中时用于注册与聚合 */
|
|
921
|
+
name?: string | number;
|
|
922
|
+
modelValue?: MaybeRefOrGetter<T>;
|
|
923
|
+
defaultValue?: T;
|
|
924
|
+
onChange?: (value: T) => void;
|
|
925
|
+
/** 字段级规则(会与表单同名规则合并执行) */
|
|
926
|
+
rules?: Array<FormRule> | FormRule;
|
|
927
|
+
/** blur 时触发校验,默认 true */
|
|
928
|
+
validateOnBlur?: boolean;
|
|
929
|
+
/** change 时触发校验(仅在校验过一次或触碰后生效),默认 true */
|
|
930
|
+
validateOnChange?: boolean;
|
|
931
|
+
/** 外部禁用条件 */
|
|
932
|
+
disabled?: MaybeRefOrGetter<boolean>;
|
|
933
|
+
/** id 前缀 */
|
|
934
|
+
idPrefix?: string;
|
|
935
|
+
}
|
|
936
|
+
interface UseFormFieldReturn<T> {
|
|
937
|
+
value: WritableComputedRef<T>;
|
|
938
|
+
error: ReturnType<typeof ref<string | undefined>>;
|
|
939
|
+
touched: ReturnType<typeof ref<boolean>>;
|
|
940
|
+
valid: ReturnType<typeof computed<boolean>>;
|
|
941
|
+
disabled: ReturnType<typeof computed<boolean>>;
|
|
942
|
+
fieldId: ReturnType<typeof useId>;
|
|
943
|
+
errorId: ReturnType<typeof useId>;
|
|
944
|
+
/** 绑定到控件的 aria 属性集合 */
|
|
945
|
+
aria: ReturnType<typeof computed<Record<string, unknown>>>;
|
|
946
|
+
/** 值变化统一入口(同步 v-model + 按策略校验) */
|
|
947
|
+
handleChange: (next: T) => void;
|
|
948
|
+
/** blur 统一入口 */
|
|
949
|
+
handleBlur: () => void;
|
|
950
|
+
validate: () => Promise<string | true>;
|
|
951
|
+
reset: () => void;
|
|
952
|
+
clearValidate: () => void;
|
|
953
|
+
}
|
|
954
|
+
/**
|
|
955
|
+
* 单字段模型:值的受控/非受控统一、校验信息、touched 状态、
|
|
956
|
+
* aria 注入与表单上下文联动。所有表单控件共用。
|
|
957
|
+
*/
|
|
958
|
+
export declare function useFormField<T>(options?: UseFormFieldOptions<T>): UseFormFieldReturn<T>;
|
|
959
|
+
//#endregion
|
|
960
|
+
//#region src/form/useCheckableGroup.d.ts
|
|
961
|
+
interface CheckableGroupOptions<V> {
|
|
962
|
+
/** true 为多选(值数组),false 为单选互斥,默认 true */
|
|
963
|
+
multiple?: boolean;
|
|
964
|
+
modelValue?: V[] | V | null;
|
|
965
|
+
defaultValue?: V[] | V | null;
|
|
966
|
+
onChange?: (value: V[] | V | null) => void;
|
|
967
|
+
/** 多选时可选值全集(用于全选/半选推导与数量约束) */
|
|
968
|
+
options?: () => V[];
|
|
969
|
+
/** 多选时最少选中数 */
|
|
970
|
+
min?: number;
|
|
971
|
+
/** 多选时最多选中数 */
|
|
972
|
+
max?: number;
|
|
973
|
+
/** 禁用项判定 */
|
|
974
|
+
isOptionDisabled?: (value: V) => boolean;
|
|
975
|
+
}
|
|
976
|
+
interface CheckableGroupReturn<V> {
|
|
977
|
+
/** 单选当前值 / 多选当前值数组 */
|
|
978
|
+
model: ReturnType<typeof useControllableModel<V[] | V | null>>['value'];
|
|
979
|
+
/** 某选项是否选中 */
|
|
980
|
+
isChecked: (value: V) => boolean;
|
|
981
|
+
/** 勾选 / 取消勾选(单选时直接替换) */
|
|
982
|
+
select: (value: V, checked?: boolean) => void;
|
|
983
|
+
/** 多选切换某项 */
|
|
984
|
+
toggle: (value: V) => void;
|
|
985
|
+
/** 多选:是否全选 */
|
|
986
|
+
allChecked: ReturnType<typeof computed<boolean>>;
|
|
987
|
+
/** 多选:是否半选(选了一部分) */
|
|
988
|
+
indeterminate: ReturnType<typeof computed<boolean>>;
|
|
989
|
+
/** 多选:全选 / 取消全选 */
|
|
990
|
+
toggleAll: (checked?: boolean) => void;
|
|
991
|
+
/** 多选:当前选中数量 */
|
|
992
|
+
checkedCount: ReturnType<typeof computed<number>>;
|
|
993
|
+
}
|
|
994
|
+
/**
|
|
995
|
+
* 成组勾选值管理:多选数组(增删、全选、半选、数量约束)与单选互斥。
|
|
996
|
+
*
|
|
997
|
+
* @internal 消费组件:CheckboxGroup、RadioGroup
|
|
998
|
+
*/
|
|
999
|
+
export declare function useCheckableGroup<V>(options?: CheckableGroupOptions<V>): CheckableGroupReturn<V>;
|
|
1000
|
+
//#endregion
|
|
1001
|
+
//#region src/form/useSelectModel.d.ts
|
|
1002
|
+
interface SelectOption<V = string | number, L = string> {
|
|
1003
|
+
value: V;
|
|
1004
|
+
label: L;
|
|
1005
|
+
disabled?: boolean;
|
|
1006
|
+
/** 选项分组标题(扁平数据中用于分组组织) */
|
|
1007
|
+
group?: string;
|
|
1008
|
+
}
|
|
1009
|
+
interface UseSelectModelOptions<V, L> {
|
|
1010
|
+
/** 全部选项(响应式) */
|
|
1011
|
+
options: MaybeRefOrGetter<Array<SelectOption<V, L>>>;
|
|
1012
|
+
/** 单选当前值 / 多选值数组 */
|
|
1013
|
+
modelValue?: MaybeRefOrGetter<V | V[] | null>;
|
|
1014
|
+
defaultValue?: V | V[] | null;
|
|
1015
|
+
onChange?: (value: V | V[] | null) => void;
|
|
1016
|
+
multiple?: boolean;
|
|
1017
|
+
/** 是否可搜索(启用 keyword 与本地过滤) */
|
|
1018
|
+
filterable?: boolean;
|
|
1019
|
+
/** 自定义过滤谓词,默认按 label 包含匹配 */
|
|
1020
|
+
filterMethod?: (option: SelectOption<V, L>, keyword: string) => boolean;
|
|
1021
|
+
/** 值比较器,默认 Object.is */
|
|
1022
|
+
equals?: (a: V, b: V) => boolean;
|
|
1023
|
+
}
|
|
1024
|
+
interface UseSelectModelReturn<V, L> {
|
|
1025
|
+
/** 当前值(单选 V / 多选 V[]) */
|
|
1026
|
+
model: Ref<V | V[] | null>;
|
|
1027
|
+
/** 已选中的完整选项对象(用于标签回显) */
|
|
1028
|
+
selectedOptions: Ref<Array<SelectOption<V, L>>>;
|
|
1029
|
+
/** 单选已选标签(无选中为 undefined) */
|
|
1030
|
+
selectedLabel: Ref<L | undefined>;
|
|
1031
|
+
keyword: Ref<string>;
|
|
1032
|
+
/** 按搜索词过滤后的选项 */
|
|
1033
|
+
filteredOptions: Ref<Array<SelectOption<V, L>>>;
|
|
1034
|
+
isSelected: (option: SelectOption<V, L>) => boolean;
|
|
1035
|
+
/** 选中 / 取消选中;返回是否发生了变化 */
|
|
1036
|
+
selectOption: (option: SelectOption<V, L>, checked?: boolean) => boolean;
|
|
1037
|
+
/** 多选移除某个已选标签 */
|
|
1038
|
+
removeValue: (value: V) => void;
|
|
1039
|
+
clear: () => void;
|
|
1040
|
+
setKeyword: (keyword: string) => void;
|
|
1041
|
+
}
|
|
1042
|
+
/**
|
|
1043
|
+
* 选择器值模型:单选/多选值、选项标签回显、本地过滤、清除。
|
|
1044
|
+
* 不发请求、不管浮层开合(分别由 useAsyncState / useOpen 承担)。
|
|
1045
|
+
*
|
|
1046
|
+
* @internal 消费组件:Select、TreeSelect
|
|
1047
|
+
*/
|
|
1048
|
+
export declare function useSelectModel<V = string | number, L = string>(options: UseSelectModelOptions<V, L>): UseSelectModelReturn<V, L>;
|
|
1049
|
+
//#endregion
|
|
1050
|
+
//#region src/form/useTreeModel.d.ts
|
|
1051
|
+
interface TreeFieldNames {
|
|
1052
|
+
value: string;
|
|
1053
|
+
label: string;
|
|
1054
|
+
children: string;
|
|
1055
|
+
disabled: string;
|
|
1056
|
+
/** 叶子标记字段;显式 false 表示“尚未加载子级”的父节点(远程懒加载) */
|
|
1057
|
+
isLeaf: string;
|
|
1058
|
+
}
|
|
1059
|
+
interface TreeFlatNode<V = string | number> {
|
|
1060
|
+
key: V;
|
|
1061
|
+
label: string;
|
|
1062
|
+
depth: number;
|
|
1063
|
+
disabled: boolean;
|
|
1064
|
+
isLeaf: boolean;
|
|
1065
|
+
parentKey: V | null;
|
|
1066
|
+
childKeys: V[];
|
|
1067
|
+
/** 全部后代叶子的 key(含自身为叶子的情况) */
|
|
1068
|
+
leafKeys: V[];
|
|
1069
|
+
/** 原始数据节点 */
|
|
1070
|
+
raw: Record<string, unknown>;
|
|
1071
|
+
}
|
|
1072
|
+
interface UseTreeModelOptions<V = string | number> {
|
|
1073
|
+
data: MaybeRefOrGetter<Array<Record<string, unknown>>>;
|
|
1074
|
+
fieldNames?: Partial<TreeFieldNames>;
|
|
1075
|
+
/** 勾选值(受控) */
|
|
1076
|
+
modelValue?: V[];
|
|
1077
|
+
defaultValue?: V[];
|
|
1078
|
+
onChange?: (keys: V[]) => void;
|
|
1079
|
+
/** 展开值(受控) */
|
|
1080
|
+
expandedKeys?: V[];
|
|
1081
|
+
defaultExpandedKeys?: V[];
|
|
1082
|
+
onExpandedChange?: (keys: V[]) => void;
|
|
1083
|
+
/** 父子是否联动勾选,默认 true;false 时只切换节点自身 */
|
|
1084
|
+
cascade?: boolean;
|
|
1085
|
+
}
|
|
1086
|
+
interface UseTreeModelReturn<V = string | number> {
|
|
1087
|
+
/** 扁平化的全部节点 */
|
|
1088
|
+
flatNodes: ComputedRef<Array<TreeFlatNode<V>>>;
|
|
1089
|
+
/** 当前可见节点(受展开集合过滤),按深度优先顺序 */
|
|
1090
|
+
visibleNodes: ComputedRef<Array<TreeFlatNode<V>>>;
|
|
1091
|
+
checkedKeys: Ref<V[]>;
|
|
1092
|
+
expandedKeys: Ref<V[]>;
|
|
1093
|
+
getNode: (key: V) => TreeFlatNode<V> | undefined;
|
|
1094
|
+
isExpanded: (key: V) => boolean;
|
|
1095
|
+
setExpanded: (key: V, expanded: boolean) => void;
|
|
1096
|
+
toggleExpand: (key: V) => void;
|
|
1097
|
+
expandAll: () => void;
|
|
1098
|
+
collapseAll: () => void;
|
|
1099
|
+
isChecked: (key: V) => boolean;
|
|
1100
|
+
isIndeterminate: (key: V) => boolean;
|
|
1101
|
+
halfCheckedKeys: ComputedRef<V[]>;
|
|
1102
|
+
check: (key: V, checked?: boolean) => void;
|
|
1103
|
+
setCheckedKeys: (keys: V[]) => void;
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* 树形数据模型:展开集合、勾选集合(级联传播与半选推导)、
|
|
1107
|
+
* 可见节点扁平化。不渲染任何缩进 / 连接线(由组件内联)。
|
|
1108
|
+
*
|
|
1109
|
+
* @internal 消费组件:Tree、TreeSelect
|
|
1110
|
+
*/
|
|
1111
|
+
export declare function useTreeModel<V extends string | number = string | number>(options: UseTreeModelOptions<V>): UseTreeModelReturn<V>;
|
|
1112
|
+
//#endregion
|
|
1113
|
+
//#region src/form/useAsyncSuggest.d.ts
|
|
1114
|
+
type SuggestStatus = 'idle' | 'pending' | 'success' | 'error';
|
|
1115
|
+
interface UseAsyncSuggestOptions<S> {
|
|
1116
|
+
/** 异步建议源:输入关键词返回候选列表 */
|
|
1117
|
+
fetch: (keyword: string) => Promise<S[]>;
|
|
1118
|
+
/** 防抖时长,默认 300ms */
|
|
1119
|
+
debounce?: number;
|
|
1120
|
+
/** 挂载后是否立即以空关键词请求一次,默认 false */
|
|
1121
|
+
immediate?: boolean;
|
|
1122
|
+
/** 触发请求的最小关键词长度,默认 0 */
|
|
1123
|
+
minKeywordLength?: number;
|
|
1124
|
+
onSuccess?: (suggestions: S[], keyword: string) => void;
|
|
1125
|
+
onError?: (error: unknown) => void;
|
|
1126
|
+
}
|
|
1127
|
+
interface UseAsyncSuggestReturn<S> {
|
|
1128
|
+
suggestions: Ref<S[]>;
|
|
1129
|
+
status: Ref<SuggestStatus>;
|
|
1130
|
+
loading: Ref<boolean>;
|
|
1131
|
+
error: Ref<unknown>;
|
|
1132
|
+
keyword: Ref<string>;
|
|
1133
|
+
/** 更新关键词并按防抖触发请求(过短则清空建议) */
|
|
1134
|
+
setKeyword: (keyword: string) => void;
|
|
1135
|
+
/** 立即以指定关键词(默认当前关键词)请求 */
|
|
1136
|
+
run: (keyword?: string) => Promise<void>;
|
|
1137
|
+
clear: () => void;
|
|
1138
|
+
}
|
|
1139
|
+
/**
|
|
1140
|
+
* 输入防抖 → 调用异步建议源 → loading/空态管理。
|
|
1141
|
+
* 竞态请求以最后一次为准,旧响应被丢弃。
|
|
1142
|
+
*
|
|
1143
|
+
* @internal 消费组件:AutoComplete、Mention
|
|
1144
|
+
*/
|
|
1145
|
+
export declare function useAsyncSuggest<S>(options: UseAsyncSuggestOptions<S>): UseAsyncSuggestReturn<S>;
|
|
1146
|
+
//#endregion
|
|
1147
|
+
//#region src/form/useDateGrid.d.ts
|
|
1148
|
+
type DatePanelType = 'date' | 'month' | 'year';
|
|
1149
|
+
interface DateCell {
|
|
1150
|
+
date: Date;
|
|
1151
|
+
/** 是否属于当前面板月份(外部填充格为 false) */
|
|
1152
|
+
inMonth: boolean;
|
|
1153
|
+
isToday: boolean;
|
|
1154
|
+
disabled: boolean;
|
|
1155
|
+
isWeekend: boolean;
|
|
1156
|
+
}
|
|
1157
|
+
interface LabeledCell {
|
|
1158
|
+
/** 该格代表的日期锚点(月格为该月 1 号,年格为该年 1 月 1 号) */
|
|
1159
|
+
date: Date;
|
|
1160
|
+
label: string;
|
|
1161
|
+
disabled: boolean;
|
|
1162
|
+
/** 年面板下该十年段的实际范围 */
|
|
1163
|
+
inPanel: boolean;
|
|
1164
|
+
}
|
|
1165
|
+
interface UseDateGridOptions {
|
|
1166
|
+
/** 面板视角日期(内部默认今天,多面板时可外部注入) */
|
|
1167
|
+
viewDate?: Ref<Date>;
|
|
1168
|
+
type?: DatePanelType;
|
|
1169
|
+
/** 每周第一天:0=周日,1=周一,默认 1 */
|
|
1170
|
+
firstDayOfWeek?: 0 | 1;
|
|
1171
|
+
disabledDate?: (date: Date) => boolean;
|
|
1172
|
+
/** 选中态标记(单选) */
|
|
1173
|
+
isSelected?: (date: Date) => boolean;
|
|
1174
|
+
/** 范围区间内标记(含悬停预览) */
|
|
1175
|
+
isInRange?: (date: Date) => boolean;
|
|
1176
|
+
isRangeStart?: (date: Date) => boolean;
|
|
1177
|
+
isRangeEnd?: (date: Date) => boolean;
|
|
1178
|
+
}
|
|
1179
|
+
interface MarkedDateCell extends DateCell {
|
|
1180
|
+
selected: boolean;
|
|
1181
|
+
inRange: boolean;
|
|
1182
|
+
rangeStart: boolean;
|
|
1183
|
+
rangeEnd: boolean;
|
|
1184
|
+
}
|
|
1185
|
+
interface UseDateGridReturn {
|
|
1186
|
+
viewDate: Ref<Date>;
|
|
1187
|
+
panelType: Ref<DatePanelType>;
|
|
1188
|
+
setPanelType: (type: DatePanelType) => void;
|
|
1189
|
+
/** 星期表头索引序列(0~6,按 firstDayOfWeek 轮转) */
|
|
1190
|
+
weekdayOrder: ComputedRef<number[]>;
|
|
1191
|
+
/** 日期面板:6 行 × 7 列 */
|
|
1192
|
+
weeks: ComputedRef<MarkedDateCell[][]>;
|
|
1193
|
+
/** 月份面板:12 个月 */
|
|
1194
|
+
months: ComputedRef<LabeledCell[]>;
|
|
1195
|
+
/** 年份面板:10 年段(12 格,含上/下一年段填充) */
|
|
1196
|
+
years: ComputedRef<LabeledCell[]>;
|
|
1197
|
+
panelLabel: ComputedRef<string>;
|
|
1198
|
+
prevView: () => void;
|
|
1199
|
+
nextView: () => void;
|
|
1200
|
+
goToDate: (date: Date) => void;
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* 日历网格纯计算:月首偏移、当月天数、外部填充、周末/禁用/选中/范围标记。
|
|
1204
|
+
* 同一模型驱动 DatePicker 与 Calendar;多面板由组件内创建多个实例实现。
|
|
1205
|
+
*/
|
|
1206
|
+
export declare function useDateGrid(options?: UseDateGridOptions): UseDateGridReturn;
|
|
1207
|
+
//#endregion
|
|
1208
|
+
//#region src/form/useDateModel.d.ts
|
|
1209
|
+
type DateGranularity = 'day' | 'month' | 'year';
|
|
1210
|
+
interface DateShortcut {
|
|
1211
|
+
label: string;
|
|
1212
|
+
value: Date | [Date, Date];
|
|
1213
|
+
}
|
|
1214
|
+
interface UseDateModelOptions {
|
|
1215
|
+
/** 单选值(字符串 / Date),与 range 二选一 */
|
|
1216
|
+
modelValue?: string | Date | null;
|
|
1217
|
+
defaultValue?: string | Date | null;
|
|
1218
|
+
/** 范围值:[起, 止],字符串可为 null 占位 */
|
|
1219
|
+
rangeModelValue?: [string | Date | null, string | Date | null] | null;
|
|
1220
|
+
defaultRangeValue?: [string | Date | null, string | Date | null] | null;
|
|
1221
|
+
onChange?: (value: string | Date | null | [string | null, string | null] | null) => void;
|
|
1222
|
+
range?: boolean;
|
|
1223
|
+
/** 选择粒度:day=完整日期,month=年月,year=年 */
|
|
1224
|
+
granularity?: DateGranularity;
|
|
1225
|
+
format?: string;
|
|
1226
|
+
minDate?: string | Date;
|
|
1227
|
+
maxDate?: string | Date;
|
|
1228
|
+
disabledDate?: (date: Date) => boolean;
|
|
1229
|
+
shortcuts?: DateShortcut[];
|
|
1230
|
+
}
|
|
1231
|
+
interface UseDateModelReturn {
|
|
1232
|
+
/** 单选模型(字符串) */
|
|
1233
|
+
model: Ref<string | Date | null>;
|
|
1234
|
+
/** 范围模型(字符串对) */
|
|
1235
|
+
rangeModel: Ref<[string | null, string | null] | null>;
|
|
1236
|
+
selectedDate: ComputedRef<Date | null>;
|
|
1237
|
+
rangeDates: ComputedRef<[Date | null, Date | null]>;
|
|
1238
|
+
viewDate: Ref<Date>;
|
|
1239
|
+
/** 范围选择中已选起点、等待终点时的悬停日期 */
|
|
1240
|
+
hoverDate: Ref<Date | null>;
|
|
1241
|
+
/** 输入框回显文本(范围为 '起 ~ 止') */
|
|
1242
|
+
displayText: ComputedRef<string>;
|
|
1243
|
+
isSelected: (date: Date) => boolean;
|
|
1244
|
+
isDisabled: (date: Date) => boolean;
|
|
1245
|
+
isInRange: (date: Date) => boolean;
|
|
1246
|
+
isRangeStart: (date: Date) => boolean;
|
|
1247
|
+
isRangeEnd: (date: Date) => boolean;
|
|
1248
|
+
/** 选择日期:范围模式内部处理起止两段式提交 */
|
|
1249
|
+
selectDate: (date: Date) => void;
|
|
1250
|
+
setHoverDate: (date: Date | null) => void;
|
|
1251
|
+
selectShortcut: (shortcut: DateShortcut) => void;
|
|
1252
|
+
clear: () => void;
|
|
1253
|
+
prevMonth: () => void;
|
|
1254
|
+
nextMonth: () => void;
|
|
1255
|
+
goToDate: (date: Date) => void;
|
|
1256
|
+
format: (date: Date | null) => string;
|
|
1257
|
+
}
|
|
1258
|
+
/**
|
|
1259
|
+
* 日期值模型:解析/格式化、粒度(日/月/年)、范围两段式选择、
|
|
1260
|
+
* 最小/最大与禁用限制、快捷选项。不负责网格计算(见 useDateGrid)。
|
|
1261
|
+
*
|
|
1262
|
+
* @internal 消费组件:DatePicker、Calendar
|
|
1263
|
+
*/
|
|
1264
|
+
export declare function useDateModel(options?: UseDateModelOptions): UseDateModelReturn;
|
|
1265
|
+
//#endregion
|
|
1266
|
+
//#region src/form/useTimeModel.d.ts
|
|
1267
|
+
interface TimeColumnItem {
|
|
1268
|
+
value: number;
|
|
1269
|
+
label: string;
|
|
1270
|
+
disabled: boolean;
|
|
1271
|
+
}
|
|
1272
|
+
interface UseTimeModelOptions {
|
|
1273
|
+
/** 'HH:mm:ss' 或 'HH:mm',默认 'HH:mm:ss' */
|
|
1274
|
+
modelValue?: string | null;
|
|
1275
|
+
defaultValue?: string | null;
|
|
1276
|
+
onChange?: (value: string | null) => void;
|
|
1277
|
+
hourStep?: number;
|
|
1278
|
+
minuteStep?: number;
|
|
1279
|
+
secondStep?: number;
|
|
1280
|
+
/** 是否使用秒列,默认 true */
|
|
1281
|
+
useSeconds?: boolean;
|
|
1282
|
+
/** 最早可选时间 'HH:mm[:ss]' */
|
|
1283
|
+
minTime?: string;
|
|
1284
|
+
/** 最晚可选时间 'HH:mm[:ss]' */
|
|
1285
|
+
maxTime?: string;
|
|
1286
|
+
}
|
|
1287
|
+
interface UseTimeModelReturn {
|
|
1288
|
+
model: Ref<string | null>;
|
|
1289
|
+
hour: Ref<number | null>;
|
|
1290
|
+
minute: Ref<number | null>;
|
|
1291
|
+
second: Ref<number | null>;
|
|
1292
|
+
hourColumn: ComputedRef<TimeColumnItem[]>;
|
|
1293
|
+
minuteColumn: ComputedRef<TimeColumnItem[]>;
|
|
1294
|
+
secondColumn: ComputedRef<TimeColumnItem[]>;
|
|
1295
|
+
displayText: ComputedRef<string>;
|
|
1296
|
+
setHour: (value: number) => void;
|
|
1297
|
+
setMinute: (value: number) => void;
|
|
1298
|
+
setSecond: (value: number) => void;
|
|
1299
|
+
setUnit: (unit: 'hour' | 'minute' | 'second', value: number) => void;
|
|
1300
|
+
now: () => void;
|
|
1301
|
+
clear: () => void;
|
|
1302
|
+
confirm: () => string | null;
|
|
1303
|
+
}
|
|
1304
|
+
/**
|
|
1305
|
+
* 时间选择模型:时/分/秒三列数据与步进、范围限制、回写与回显。
|
|
1306
|
+
* 滚动列渲染与确认按钮编排由 TimePicker 组件承担。
|
|
1307
|
+
*
|
|
1308
|
+
* @internal 消费组件:TimePicker、DatePicker(日期时间模式)
|
|
1309
|
+
*/
|
|
1310
|
+
export declare function useTimeModel(options?: UseTimeModelOptions): UseTimeModelReturn;
|
|
1311
|
+
//#endregion
|
|
1312
|
+
//#region src/overlay/useModal.d.ts
|
|
1313
|
+
interface UseModalOptions extends ControlledProps<boolean> {
|
|
1314
|
+
/** 点击遮罩是否关闭,默认 true */
|
|
1315
|
+
maskClosable?: boolean;
|
|
1316
|
+
/** ESC 是否关闭,默认 true */
|
|
1317
|
+
escClosable?: boolean;
|
|
1318
|
+
/** 打开时是否锁定背景滚动,默认 true */
|
|
1319
|
+
lockScroll?: boolean;
|
|
1320
|
+
onOpen?: () => void;
|
|
1321
|
+
onClose?: () => void;
|
|
1322
|
+
}
|
|
1323
|
+
interface UseModalReturn {
|
|
1324
|
+
isOpen: Ref<boolean>;
|
|
1325
|
+
open: () => void;
|
|
1326
|
+
close: () => void;
|
|
1327
|
+
toggle: (next?: boolean) => void;
|
|
1328
|
+
/** 绑定到模态内容容器(焦点陷阱需要) */
|
|
1329
|
+
contentRef: Ref<HTMLElement | null>;
|
|
1330
|
+
/** 进出场过渡挂载状态 */
|
|
1331
|
+
rendered: Ref<boolean>;
|
|
1332
|
+
visible: Ref<boolean>;
|
|
1333
|
+
onAfterLeave: () => void;
|
|
1334
|
+
/** 当前层级(每次打开重新分配) */
|
|
1335
|
+
zIndex: Ref<number>;
|
|
1336
|
+
/** 遮罩点击:按 maskClosable 决定是否关闭 */
|
|
1337
|
+
onMaskClick: () => void;
|
|
1338
|
+
}
|
|
1339
|
+
/**
|
|
1340
|
+
* 模态开合编排:useOpen + 滚动锁定 + 焦点陷阱/归还 + ESC + 层级 +
|
|
1341
|
+
* 进出场过渡。Dialog/Drawer 共用,差异仅在方向与尺寸(组件内联)。
|
|
1342
|
+
*/
|
|
1343
|
+
export declare function useModal(options?: UseModalOptions): UseModalReturn;
|
|
1344
|
+
//#endregion
|
|
1345
|
+
//#region src/overlay/usePopoverModel.d.ts
|
|
1346
|
+
type PopoverTrigger = 'click' | 'hover' | 'focus' | 'manual';
|
|
1347
|
+
interface UsePopoverModelOptions extends ControlledProps<boolean> {
|
|
1348
|
+
trigger?: PopoverTrigger;
|
|
1349
|
+
openDelay?: number;
|
|
1350
|
+
closeDelay?: number;
|
|
1351
|
+
}
|
|
1352
|
+
interface PopoverTriggerProps {
|
|
1353
|
+
onClick?: () => void;
|
|
1354
|
+
onMouseenter?: () => void;
|
|
1355
|
+
onMouseleave?: () => void;
|
|
1356
|
+
onFocus?: () => void;
|
|
1357
|
+
onBlur?: () => void;
|
|
1358
|
+
}
|
|
1359
|
+
interface UsePopoverModelReturn {
|
|
1360
|
+
isOpen: Ref<boolean>;
|
|
1361
|
+
open: () => void;
|
|
1362
|
+
close: () => void;
|
|
1363
|
+
toggle: (next?: boolean) => void;
|
|
1364
|
+
rendered: Ref<boolean>;
|
|
1365
|
+
visible: Ref<boolean>;
|
|
1366
|
+
onAfterLeave: () => void;
|
|
1367
|
+
/** 直接绑定到触发元素的事件集合 */
|
|
1368
|
+
triggerProps: Ref<PopoverTriggerProps>;
|
|
1369
|
+
/** hover 模式下需同时绑定到浮层本体,防止触发器与浮层间移动时关闭 */
|
|
1370
|
+
floatingHoverProps: Ref<PopoverTriggerProps>;
|
|
1371
|
+
}
|
|
1372
|
+
/**
|
|
1373
|
+
* 浮层触发模型:click / hover / focus / manual 四种触发方式与
|
|
1374
|
+
* 延迟开合、进出场过渡的组合编排。定位由 useFloating 独立承担。
|
|
1375
|
+
*
|
|
1376
|
+
* @internal 消费组件:Popover、Dropdown、Tooltip
|
|
1377
|
+
*/
|
|
1378
|
+
export declare function usePopoverModel(options?: UsePopoverModelOptions): UsePopoverModelReturn;
|
|
1379
|
+
//#endregion
|
|
1380
|
+
//#region src/overlay/createMessage.d.ts
|
|
1381
|
+
interface MessageOptions<T = unknown> extends PushToastOptions<T> {
|
|
1382
|
+
type?: ToastType;
|
|
1383
|
+
}
|
|
1384
|
+
interface MessageApi {
|
|
1385
|
+
/** 当前消息列表(渲染组件直接消费) */
|
|
1386
|
+
items: Ref<Array<ToastItem>>;
|
|
1387
|
+
/** 入队并返回消息 id */
|
|
1388
|
+
push: (content: string, options?: MessageOptions) => number;
|
|
1389
|
+
success: (content: string, duration?: number) => number;
|
|
1390
|
+
warning: (content: string, duration?: number) => number;
|
|
1391
|
+
info: (content: string, duration?: number) => number;
|
|
1392
|
+
error: (content: string, duration?: number) => number;
|
|
1393
|
+
loading: (content: string, duration?: number) => number;
|
|
1394
|
+
remove: (id: number) => void;
|
|
1395
|
+
clear: () => void;
|
|
1396
|
+
pause: (id: number) => void;
|
|
1397
|
+
resume: (id: number) => void;
|
|
1398
|
+
}
|
|
1399
|
+
/**
|
|
1400
|
+
* 创建一套命令式消息服务。底层为共享响应式 toast 队列,
|
|
1401
|
+
* 渲染由 Message 组件承担;宿主也可在不引入组件的情况下调用。
|
|
1402
|
+
*/
|
|
1403
|
+
export declare function createMessage(options?: {
|
|
1404
|
+
duration?: number;
|
|
1405
|
+
max?: number;
|
|
1406
|
+
}): MessageApi;
|
|
1407
|
+
/** 全局默认单例:所有 Message 组件与宿主共享同一队列 */
|
|
1408
|
+
export declare const message: MessageApi;
|
|
1409
|
+
//#endregion
|
|
1410
|
+
//#region src/overlay/createNotification.d.ts
|
|
1411
|
+
interface NotificationMeta {
|
|
1412
|
+
title: string;
|
|
1413
|
+
description?: string;
|
|
1414
|
+
/** 动作文案等渲染数据 */
|
|
1415
|
+
action?: unknown;
|
|
1416
|
+
placement?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
|
|
1417
|
+
}
|
|
1418
|
+
interface NotificationEntry {
|
|
1419
|
+
id: number;
|
|
1420
|
+
type: ToastType;
|
|
1421
|
+
title: string;
|
|
1422
|
+
description?: string;
|
|
1423
|
+
duration: number;
|
|
1424
|
+
meta?: NotificationMeta;
|
|
1425
|
+
}
|
|
1426
|
+
interface NotificationApi {
|
|
1427
|
+
items: Ref<Array<NotificationEntry>>;
|
|
1428
|
+
open: (type: ToastType, title: string, description?: string, duration?: number) => number;
|
|
1429
|
+
success: (title: string, description?: string) => number;
|
|
1430
|
+
warning: (title: string, description?: string) => number;
|
|
1431
|
+
info: (title: string, description?: string) => number;
|
|
1432
|
+
error: (title: string, description?: string) => number;
|
|
1433
|
+
remove: (id: number) => void;
|
|
1434
|
+
clear: () => void;
|
|
1435
|
+
}
|
|
1436
|
+
/**
|
|
1437
|
+
* 创建命令式通知服务。消息体携带标题 / 描述 / 动作数据,
|
|
1438
|
+
* 角落堆叠方向由渲染组件按 placement 分组。
|
|
1439
|
+
*/
|
|
1440
|
+
export declare function createNotification(options?: {
|
|
1441
|
+
duration?: number;
|
|
1442
|
+
max?: number;
|
|
1443
|
+
}): NotificationApi;
|
|
1444
|
+
/** 全局默认单例 */
|
|
1445
|
+
export declare const notification: NotificationApi;
|
|
1446
|
+
//#endregion
|
|
1447
|
+
//#region src/overlay/useLoadingService.d.ts
|
|
1448
|
+
interface LoadingService {
|
|
1449
|
+
/** 计数大于 0 即视为加载中(多请求自动合并) */
|
|
1450
|
+
loading: Ref<boolean>;
|
|
1451
|
+
count: Ref<number>;
|
|
1452
|
+
/** 开始一次加载,返回结束函数 */
|
|
1453
|
+
start: () => () => void;
|
|
1454
|
+
/** 结束一次加载 */
|
|
1455
|
+
finish: () => void;
|
|
1456
|
+
/** 包裹异步任务:开始 → 任务结束(成功或失败)自动结束 */
|
|
1457
|
+
wrap: <T>(task: Promise<T>) => Promise<T>;
|
|
1458
|
+
clear: () => void;
|
|
1459
|
+
}
|
|
1460
|
+
/** 创建一套隔离的计数式加载服务 */
|
|
1461
|
+
export declare function createLoadingService(): LoadingService;
|
|
1462
|
+
/**
|
|
1463
|
+
* 局部 / 全屏加载的计数式服务(多请求合并显示一个加载态)。
|
|
1464
|
+
* 需要隔离实例时使用 createLoadingService。
|
|
1465
|
+
*
|
|
1466
|
+
* @internal 消费组件:Loading
|
|
1467
|
+
*/
|
|
1468
|
+
export declare function useLoadingService(): LoadingService;
|
|
1469
|
+
//#endregion
|
|
1470
|
+
//#region src/data/usePagination.d.ts
|
|
1471
|
+
type PaginationPageItem = number | 'start-ellipsis' | 'end-ellipsis';
|
|
1472
|
+
interface UsePaginationOptions {
|
|
1473
|
+
/** 当前页(受控;传 getter 保持外部变化的响应性) */
|
|
1474
|
+
currentPage?: MaybeRefOrGetter<number>;
|
|
1475
|
+
defaultCurrentPage?: number;
|
|
1476
|
+
onPageChange?: (page: number) => void;
|
|
1477
|
+
/** 页大小(受控;传 getter 保持外部变化的响应性) */
|
|
1478
|
+
pageSize?: MaybeRefOrGetter<number>;
|
|
1479
|
+
defaultPageSize?: number;
|
|
1480
|
+
onPageSizeChange?: (size: number) => void;
|
|
1481
|
+
/** 总条数,默认 0 */
|
|
1482
|
+
total?: number;
|
|
1483
|
+
/** 每页条数候选 */
|
|
1484
|
+
pageSizes?: number[];
|
|
1485
|
+
/** 当前页两侧始终展示的兄弟页数,默认 1 */
|
|
1486
|
+
siblingCount?: number;
|
|
1487
|
+
/** 首尾始终展示的页数,默认 1 */
|
|
1488
|
+
boundaryCount?: number;
|
|
1489
|
+
/** 页码或页大小变化统一回调(组件据此组装 change 事件参数) */
|
|
1490
|
+
onChange?: (payload: {
|
|
1491
|
+
currentPage: number;
|
|
1492
|
+
pageSize: number;
|
|
1493
|
+
}) => void;
|
|
1494
|
+
}
|
|
1495
|
+
interface UsePaginationReturn {
|
|
1496
|
+
currentPage: Ref<number>;
|
|
1497
|
+
pageSize: Ref<number>;
|
|
1498
|
+
total: Ref<number>;
|
|
1499
|
+
totalPages: Ref<number>;
|
|
1500
|
+
pageSizes: number[];
|
|
1501
|
+
/** 含省略号占位的页码序列 */
|
|
1502
|
+
pages: Ref<PaginationPageItem[]>;
|
|
1503
|
+
isFirst: Ref<boolean>;
|
|
1504
|
+
isLast: Ref<boolean>;
|
|
1505
|
+
canPrev: Ref<boolean>;
|
|
1506
|
+
canNext: Ref<boolean>;
|
|
1507
|
+
/** 起始条目序号(用于"第 x-y 条"展示) */
|
|
1508
|
+
rangeStart: Ref<number>;
|
|
1509
|
+
rangeEnd: Ref<number>;
|
|
1510
|
+
go: (page: number) => void;
|
|
1511
|
+
prev: () => void;
|
|
1512
|
+
next: () => void;
|
|
1513
|
+
setPageSize: (size: number) => void;
|
|
1514
|
+
}
|
|
1515
|
+
/**
|
|
1516
|
+
* 分页模型:当前页 / 页大小、总页数、含省略号的页码序列、跳页与边界约束。
|
|
1517
|
+
* 组件自身不发请求,go/setPageSize 只负责状态与 onChange 通知。
|
|
1518
|
+
*
|
|
1519
|
+
* @internal 消费组件:Pagination;Table 内联复用;宿主列表可独立使用
|
|
1520
|
+
*/
|
|
1521
|
+
export declare function usePagination(options?: UsePaginationOptions): UsePaginationReturn;
|
|
1522
|
+
//#endregion
|
|
1523
|
+
//#region src/data/fetch.d.ts
|
|
1524
|
+
/** 组件自动注入的分页参数,页码从 1 开始 */
|
|
1525
|
+
interface FetchPagination {
|
|
1526
|
+
currentPage: number;
|
|
1527
|
+
pageSize: number;
|
|
1528
|
+
}
|
|
1529
|
+
/** 排序状态 */
|
|
1530
|
+
interface FetchSorter {
|
|
1531
|
+
key: string;
|
|
1532
|
+
order: 'asc' | 'desc' | null;
|
|
1533
|
+
}
|
|
1534
|
+
/**
|
|
1535
|
+
* 统一查询参数:组件按自身交互产生其中片段,字段全部可选。
|
|
1536
|
+
* 宿主 fetch 方法按需消费,不使用的片段忽略即可。
|
|
1537
|
+
*/
|
|
1538
|
+
interface FetchQuery<TFilters = Record<string, unknown>> {
|
|
1539
|
+
/** 分页(表格、虚拟列表等) */
|
|
1540
|
+
pagination?: FetchPagination;
|
|
1541
|
+
/** 关键词(远程搜索、输入建议) */
|
|
1542
|
+
keyword?: string;
|
|
1543
|
+
/** 排序 */
|
|
1544
|
+
sorter?: FetchSorter;
|
|
1545
|
+
/** 业务筛选:列筛选、父节点 key、日期范围等,形状由宿主与组件约定 */
|
|
1546
|
+
filters?: TFilters;
|
|
1547
|
+
/** 取消信号:新请求发起时上一次请求会被 abort */
|
|
1548
|
+
signal?: AbortSignal;
|
|
1549
|
+
}
|
|
1550
|
+
/** 分页结果:fetch 方法返回此形态时,组件自动启用分页并回填总数 */
|
|
1551
|
+
interface PagedResult<T> {
|
|
1552
|
+
list: T[];
|
|
1553
|
+
total: number;
|
|
1554
|
+
}
|
|
1555
|
+
/** fetch 方法的原始返回:数组为列表,{ list, total } 为分页,其余视为单值 */
|
|
1556
|
+
type FetchResult<T> = T[] | PagedResult<T> | T;
|
|
1557
|
+
/**
|
|
1558
|
+
* 所有组件 fetch 属性的统一方法类型。
|
|
1559
|
+
* 列表组件返回 `T[]` 或 `PagedResult<T>`,单值组件返回 `T`。
|
|
1560
|
+
*/
|
|
1561
|
+
type Fetch<T, TFilters = Record<string, unknown>> = (query: FetchQuery<TFilters>) => Promise<FetchResult<T>>;
|
|
1562
|
+
/** 归一化后的结果 */
|
|
1563
|
+
interface NormalizedFetch<T> {
|
|
1564
|
+
data: T[] | T;
|
|
1565
|
+
total?: number;
|
|
1566
|
+
raw: FetchResult<T>;
|
|
1567
|
+
}
|
|
1568
|
+
/** 判断是否为分页结果形态 */
|
|
1569
|
+
export declare function isPagedResult<T>(value: unknown): value is PagedResult<T>;
|
|
1570
|
+
/** 归一化:数组 → 列表;{ list, total } → 分页;其他 → 单值 */
|
|
1571
|
+
export declare function normalizeFetchResult<T>(raw: FetchResult<T>): NormalizedFetch<T>;
|
|
1572
|
+
interface FetchController<T = unknown> {
|
|
1573
|
+
run: (query: FetchQuery) => Promise<NormalizedFetch<T> | undefined>;
|
|
1574
|
+
/** 以最近一次查询重新请求 */
|
|
1575
|
+
refresh: () => Promise<NormalizedFetch<T> | undefined>;
|
|
1576
|
+
abort: () => void;
|
|
1577
|
+
state: Ref<AsyncStateLike<NormalizedFetch<T> | undefined>>;
|
|
1578
|
+
loading: Ref<boolean>;
|
|
1579
|
+
error: Ref<unknown>;
|
|
1580
|
+
}
|
|
1581
|
+
/**
|
|
1582
|
+
* 创建资源请求控制器。纯工厂、无生命周期副作用,可在组件、组合函数或测试中使用。
|
|
1583
|
+
* 不主动发起请求,首次调用由消费方(组件资源钩子或宿主)触发。
|
|
1584
|
+
*/
|
|
1585
|
+
export declare function createFetchController<T>(fetcher: Fetch<T>): FetchController<T>;
|
|
1586
|
+
/** useFetch 返回对象的品牌标记(内部识别用) */
|
|
1587
|
+
export declare const FETCH_RESOURCE: unique symbol;
|
|
1588
|
+
interface UseFetchReturn<T> {
|
|
1589
|
+
/** 绑定给组件 fetch 属性的方法;也可独立调用 */
|
|
1590
|
+
fetch: (query?: FetchQuery) => Promise<FetchResult<T> | undefined>;
|
|
1591
|
+
/** 异步状态投影(AsyncStateLike 同形),初始为 pending */
|
|
1592
|
+
state: ComputedRef<AsyncStateLike<T[] | T | undefined>>;
|
|
1593
|
+
status: ComputedRef<'pending' | 'success' | 'error'>;
|
|
1594
|
+
/** 最近一次成功的数据(列表或单值) */
|
|
1595
|
+
data: ComputedRef<T[] | T | undefined>;
|
|
1596
|
+
error: Ref<unknown>;
|
|
1597
|
+
loading: ComputedRef<boolean>;
|
|
1598
|
+
isStale: ComputedRef<boolean>;
|
|
1599
|
+
/** 分页总数;非分页结果为数据条数;单值结果为 undefined */
|
|
1600
|
+
total: Ref<number | undefined>;
|
|
1601
|
+
/** 手动刷新(可携带查询片段) */
|
|
1602
|
+
refresh: (query?: FetchQuery) => Promise<FetchResult<T> | undefined>;
|
|
1603
|
+
/** 内部控制器(组件资源钩子识别复用,宿主无需关心) */
|
|
1604
|
+
[FETCH_RESOURCE]: FetchController<T>;
|
|
1605
|
+
}
|
|
1606
|
+
/**
|
|
1607
|
+
* 宿主侧资源封装:把一个 Fetch 方法升级为带响应式状态的对象。
|
|
1608
|
+
* 不绑定组件时不会自动请求;组件接收其 `fetch` 后由组件机制驱动,
|
|
1609
|
+
* 状态在组件内外共享同一份。
|
|
1610
|
+
*/
|
|
1611
|
+
export declare function useFetch<T>(fetcher: Fetch<T>): UseFetchReturn<T>;
|
|
1612
|
+
/** 组件 fetch 属性可接收的形态:裸 Fetch 方法或 useFetch 返回对象 */
|
|
1613
|
+
type FetchLike<T, TFilters = Record<string, unknown>> = Fetch<T, TFilters> | UseFetchReturn<T>;
|
|
1614
|
+
/** 判断是否为 useFetch 返回对象 */
|
|
1615
|
+
export declare function isUseFetchReturn<T>(value: FetchLike<T> | undefined): value is UseFetchReturn<T>;
|
|
1616
|
+
interface UseFetchResourceOptions<D> {
|
|
1617
|
+
/** 响应式查询来源:deep 监听,变化即按防抖策略重新请求 */
|
|
1618
|
+
getQuery: () => FetchQuery;
|
|
1619
|
+
/** 占位数据(首次 pending 时渲染) */
|
|
1620
|
+
initialData: D;
|
|
1621
|
+
/** 从归一化结果映射为组件消费数据;默认直接取 data(数组或单值) */
|
|
1622
|
+
mapData?: (normalized: NormalizedFetch<unknown>) => D;
|
|
1623
|
+
/** 关键词防抖毫秒,默认 0 */
|
|
1624
|
+
debounce?: number;
|
|
1625
|
+
/**
|
|
1626
|
+
* 结果合并。
|
|
1627
|
+
* - 累积模式(虚拟列表触底加载):与上一页数据拼接;
|
|
1628
|
+
* - 懒加载模式(树/级联):依据 query.filters.parentKey 将子级挂到已有树。
|
|
1629
|
+
*
|
|
1630
|
+
* 第三个参数为本次实际查询。分页查询回到第 1 页(筛选/搜索变化)时
|
|
1631
|
+
* 钩子会先把数据重置为 initialData;无分页的懒加载查询不重置。
|
|
1632
|
+
*/
|
|
1633
|
+
merge?: (previous: D, next: D, query: FetchQuery) => D;
|
|
1634
|
+
}
|
|
1635
|
+
interface FetchResource<D> {
|
|
1636
|
+
/** 是否存在可用的 fetch 源(决定远程/本地分支) */
|
|
1637
|
+
enabled: Ref<boolean>;
|
|
1638
|
+
/** 异步状态;无 fetch 源时为 undefined,组件回退本地数据 */
|
|
1639
|
+
state: ComputedRef<AsyncStateLike<D> | undefined>;
|
|
1640
|
+
loading: ComputedRef<boolean>;
|
|
1641
|
+
error: ComputedRef<unknown>;
|
|
1642
|
+
/** 分页总数(非分页为数据条数,无 fetch 源时为 0) */
|
|
1643
|
+
total: Ref<number>;
|
|
1644
|
+
/** 手动重取;override 与当前查询浅合并,用于懒加载等命令式场景 */
|
|
1645
|
+
refresh: (override?: Partial<FetchQuery>) => Promise<void>;
|
|
1646
|
+
}
|
|
1647
|
+
/**
|
|
1648
|
+
* 组件内部统一资源机制:
|
|
1649
|
+
* 挂载即请求;getQuery 的 deep 变化自动重取;防抖、竞态后到为准、stale 保留旧数据。
|
|
1650
|
+
* 所有 fetch 型组件共用此钩子,开发者只绑定 fetch 方法即可。
|
|
1651
|
+
*/
|
|
1652
|
+
export declare function useFetchResource<D>(source: MaybeRefOrGetter<FetchLike<unknown> | undefined>, options: UseFetchResourceOptions<D>): FetchResource<D>;
|
|
1653
|
+
//#endregion
|
|
1654
|
+
//#region src/data/useSubscribe.d.ts
|
|
1655
|
+
/** 归一 subscribe 返回值:导出错误(status 为 error 或携带 error)时返回失败信息,否则 null */
|
|
1656
|
+
export declare function extractSubscribeFailure<T>(result: SubscribeResult<T> | undefined): {
|
|
1657
|
+
error: unknown;
|
|
1658
|
+
} | null;
|
|
1659
|
+
interface UseSubscribeReturn<T> {
|
|
1660
|
+
state: Ref<AsyncStateLike<T | undefined>>;
|
|
1661
|
+
data: Ref<T | undefined>;
|
|
1662
|
+
loading: Ref<boolean>;
|
|
1663
|
+
error: Ref<unknown>;
|
|
1664
|
+
isStale: Ref<boolean>;
|
|
1665
|
+
/** 重新执行订阅处理方法 */
|
|
1666
|
+
refresh: () => Promise<void>;
|
|
1667
|
+
}
|
|
1668
|
+
/**
|
|
1669
|
+
* 订阅型数据消费:挂载时调用处理方法,resolve 出数据后渲染,
|
|
1670
|
+
* 失败时记录错误并保留旧数据(与 fetch 失败策略一致),支持 refresh 重试。
|
|
1671
|
+
*
|
|
1672
|
+
* @internal 消费组件:Table、Statistic、Tabs、Progress、Image 等所有数据展示类组件
|
|
1673
|
+
*/
|
|
1674
|
+
export declare function useSubscribe<T>(handler?: SubscribeHandler<T>): UseSubscribeReturn<T>;
|
|
1675
|
+
//#endregion
|
|
1676
|
+
//#region src/data/useChat.d.ts
|
|
1677
|
+
/**
|
|
1678
|
+
* 聊天消息:id 是唯一锚点——历史与推送按 id 去重,
|
|
1679
|
+
* 本地乐观消息以 __local_ 前缀临时占位,被服务端回显替换。
|
|
1680
|
+
*/
|
|
1681
|
+
interface ChatMessage {
|
|
1682
|
+
/** 消息唯一标识 */
|
|
1683
|
+
id: string | number;
|
|
1684
|
+
/** 发送者展示名 */
|
|
1685
|
+
sender?: string;
|
|
1686
|
+
/** 消息内容 */
|
|
1687
|
+
content: string;
|
|
1688
|
+
/** 发送时间戳(毫秒) */
|
|
1689
|
+
time?: number;
|
|
1690
|
+
/** 是否自己发送:决定气泡方向 */
|
|
1691
|
+
self?: boolean;
|
|
1692
|
+
/** 发送状态:本地消息的中间态,服务端消息可缺省 */
|
|
1693
|
+
status?: 'sending' | 'sent' | 'failed';
|
|
1694
|
+
}
|
|
1695
|
+
interface UseChatOptions {
|
|
1696
|
+
/** 历史消息加载:注入分页查询,currentPage 递增表示更早一页;返回数组或 { list, total } */
|
|
1697
|
+
fetch?: Fetch<ChatMessage[]>;
|
|
1698
|
+
/** 新消息订阅:推送单条或数组;返回响应式数据时持续更新(经 useSubscribe 消费) */
|
|
1699
|
+
subscribe?: SubscribeHandler<ChatMessage[] | ChatMessage>;
|
|
1700
|
+
/** 发送动作:入参为消息内容,抛错或返回 error 结果即发送失败 */
|
|
1701
|
+
send?: (content: string) => Promise<ActionResult | void>;
|
|
1702
|
+
/** 历史分页每页条数,默认 20 */
|
|
1703
|
+
pageSize?: number;
|
|
1704
|
+
}
|
|
1705
|
+
interface UseChatReturn {
|
|
1706
|
+
/** 展示消息列表(含本地乐观消息),新消息追加在末尾 */
|
|
1707
|
+
messages: Ref<ChatMessage[]>;
|
|
1708
|
+
/** 发送中 */
|
|
1709
|
+
sending: Ref<boolean>;
|
|
1710
|
+
/** 加载更早历史中 */
|
|
1711
|
+
loadingOlder: Ref<boolean>;
|
|
1712
|
+
/** 是否还有更早的历史 */
|
|
1713
|
+
hasMore: Ref<boolean>;
|
|
1714
|
+
/** 最近一次发送失败文案 */
|
|
1715
|
+
sendError: Ref<string | undefined>;
|
|
1716
|
+
/** 历史加载失败文案 */
|
|
1717
|
+
historyError: Ref<string | undefined>;
|
|
1718
|
+
/** 发送消息:乐观上屏,成功返回落位消息,失败返回 undefined(消息保留为 failed 可重试) */
|
|
1719
|
+
send: (content: string) => Promise<ChatMessage | undefined>;
|
|
1720
|
+
/** 重试失败消息:移除原消息并按原内容重新发送 */
|
|
1721
|
+
retry: (message: ChatMessage) => Promise<ChatMessage | undefined>;
|
|
1722
|
+
/** 加载更早一页历史:结果前插去重 */
|
|
1723
|
+
loadOlder: () => Promise<void>;
|
|
1724
|
+
}
|
|
1725
|
+
/**
|
|
1726
|
+
* 聊天消息模型:fetch 管历史(向上翻页前插)、subscribe 管新消息(追加去重)、
|
|
1727
|
+
* send 管发送(乐观上屏 + 失败保留重试)。
|
|
1728
|
+
*
|
|
1729
|
+
* @internal 消费组件:Chat
|
|
1730
|
+
*/
|
|
1731
|
+
export declare function useChat(options: UseChatOptions): UseChatReturn;
|
|
1732
|
+
//#endregion
|
|
1733
|
+
//#region src/resources/types.d.ts
|
|
1734
|
+
/**
|
|
1735
|
+
* 资源池契约:解析器与池之间的唯一边界。
|
|
1736
|
+
* 自定义解析器只负责把协议与约定翻译成 ResourceSchema,
|
|
1737
|
+
* URL 拼装、路径参数替换、查询片段注入、请求体序列化等运行时行为全部由池完成。
|
|
1738
|
+
*/
|
|
1739
|
+
/** 资源操作支持的 HTTP 方法 */
|
|
1740
|
+
type ResourceMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
1741
|
+
/** 资源操作:方法 + 路径模板 */
|
|
1742
|
+
interface ResourceOperation {
|
|
1743
|
+
method: ResourceMethod;
|
|
1744
|
+
/** 路径模板:{id} 占位在运行时以方法参数替换 */
|
|
1745
|
+
path: string;
|
|
1746
|
+
}
|
|
1747
|
+
/** 统一查询片段 → 请求参数名的映射,未声明的字段回落默认名 */
|
|
1748
|
+
interface QueryNames {
|
|
1749
|
+
/** 关键词参数名,默认 keyword */
|
|
1750
|
+
keyword?: string;
|
|
1751
|
+
/** 页码参数名(页码从 1 起),默认 page */
|
|
1752
|
+
currentPage?: string;
|
|
1753
|
+
/** 每页大小参数名,默认 pageSize */
|
|
1754
|
+
pageSize?: string;
|
|
1755
|
+
/** 排序参数名:值序列化为 key,order,无排序时不注入,默认 sorter */
|
|
1756
|
+
sorter?: string;
|
|
1757
|
+
/** 筛选参数名:设置时将 filters 对象整体 JSON 序列化为该参数;未设置时逐键展开为独立参数,数组值以逗号连接 */
|
|
1758
|
+
filters?: string;
|
|
1759
|
+
}
|
|
1760
|
+
/** 列表响应形状:数组与总数在响应体中的点分路径;缺省时响应体即数组 */
|
|
1761
|
+
interface ListResponseMapping {
|
|
1762
|
+
/** 列表数组在响应体中的路径,如 'records' 或 'data.list';缺省为响应体本身 */
|
|
1763
|
+
list?: string;
|
|
1764
|
+
/** 总数在响应体中的路径,如 'total' 或 'meta.total';缺省则不启用分页 */
|
|
1765
|
+
total?: string;
|
|
1766
|
+
}
|
|
1767
|
+
/** 字段值类型:决定筛选与表单的控件选择 */
|
|
1768
|
+
type ResourceFieldType = 'string' | 'number' | 'boolean' | 'date' | 'datetime' | 'enum';
|
|
1769
|
+
/** 枚举选项 */
|
|
1770
|
+
interface ResourceFieldOption {
|
|
1771
|
+
label: string;
|
|
1772
|
+
value: string | number;
|
|
1773
|
+
}
|
|
1774
|
+
/** 字段元数据:视图中性的字段描述,columns / filters / properties 均按 scope 投影 */
|
|
1775
|
+
interface ResourceField {
|
|
1776
|
+
/** 字段名:数据对象键 */
|
|
1777
|
+
name: string;
|
|
1778
|
+
/** 展示名,解析自文档描述,缺失回落字段名 */
|
|
1779
|
+
label: string;
|
|
1780
|
+
type: ResourceFieldType;
|
|
1781
|
+
/** 内容格式:原样透传文档声明的 format(如 email / uri / int64),与 type 的保存格式互补 */
|
|
1782
|
+
format?: string;
|
|
1783
|
+
/** 枚举选项:type 为 enum 时提供,可直接喂给选项组件 */
|
|
1784
|
+
options?: ResourceFieldOption[];
|
|
1785
|
+
/** 表单场景是否必填 */
|
|
1786
|
+
required?: boolean;
|
|
1787
|
+
/** 出现场景标记:未标记的字段不进入任何投影 */
|
|
1788
|
+
scope?: {
|
|
1789
|
+
/** 出现在列表列 */
|
|
1790
|
+
list?: boolean;
|
|
1791
|
+
/** 作为筛选项 */
|
|
1792
|
+
filter?: boolean;
|
|
1793
|
+
/** 出现在创建表单 */
|
|
1794
|
+
create?: boolean;
|
|
1795
|
+
/** 出现在编辑表单 */
|
|
1796
|
+
update?: boolean;
|
|
1797
|
+
};
|
|
1798
|
+
}
|
|
1799
|
+
/** 列表列投影:与 Table 的 columns 属性形状对齐 */
|
|
1800
|
+
interface ResourceColumn {
|
|
1801
|
+
key: string;
|
|
1802
|
+
title: string;
|
|
1803
|
+
/** 保存格式提示:字段 type 原样投影,供 Table 单元格竞选消费 */
|
|
1804
|
+
type?: ResourceFieldType;
|
|
1805
|
+
/** 内容格式提示:字段 format 原样透传(如 email / uri / int64) */
|
|
1806
|
+
format?: string;
|
|
1807
|
+
sortable?: boolean;
|
|
1808
|
+
/** 枚举字段的筛选项(表头勾选面板) */
|
|
1809
|
+
filters?: ResourceFieldOption[];
|
|
1810
|
+
}
|
|
1811
|
+
/** 单个资源的操作集合与元数据:未声明的操作不可用(只读资源仅声明 list / detail 即可) */
|
|
1812
|
+
interface ResourceDefinition {
|
|
1813
|
+
list?: ResourceOperation;
|
|
1814
|
+
detail?: ResourceOperation;
|
|
1815
|
+
create?: ResourceOperation;
|
|
1816
|
+
update?: ResourceOperation;
|
|
1817
|
+
remove?: ResourceOperation;
|
|
1818
|
+
queryNames?: QueryNames;
|
|
1819
|
+
/** 列表响应形状,由解析器从文档响应结构中识别 */
|
|
1820
|
+
response?: ListResponseMapping;
|
|
1821
|
+
/** 字段元数据:columns / filters / properties 的唯一来源,文档缺失时为空数组 */
|
|
1822
|
+
fields?: ResourceField[];
|
|
1823
|
+
}
|
|
1824
|
+
/** 资源表:元数据解析的唯一产物,也是池运行的唯一依据 */
|
|
1825
|
+
interface ResourceSchema {
|
|
1826
|
+
resources: Record<string, ResourceDefinition>;
|
|
1827
|
+
}
|
|
1828
|
+
/** 元数据解析器:输入任意协议文档,输出资源表 */
|
|
1829
|
+
type MetadataParser = (doc: unknown, context: {
|
|
1830
|
+
server: string;
|
|
1831
|
+
}) => ResourceSchema | Promise<ResourceSchema>;
|
|
1832
|
+
/** 请求描述:池生成、适配器消费 */
|
|
1833
|
+
interface ResourceRequest {
|
|
1834
|
+
method: ResourceMethod;
|
|
1835
|
+
url: string;
|
|
1836
|
+
query?: Record<string, string | number | boolean | undefined>;
|
|
1837
|
+
body?: unknown;
|
|
1838
|
+
headers?: Record<string, string>;
|
|
1839
|
+
/** 竞态取消:由消费侧的 FetchQuery 透传 */
|
|
1840
|
+
signal?: AbortSignal;
|
|
1841
|
+
}
|
|
1842
|
+
/** 传输适配器:发起请求并 resolve 响应体(未提供时使用内置 fetch 实现) */
|
|
1843
|
+
type RequestAdapter = (request: ResourceRequest) => Promise<unknown>;
|
|
1844
|
+
/** useResources 选项 */
|
|
1845
|
+
interface UseResourcesOptions {
|
|
1846
|
+
/** 服务器根地址:请求 URL = server + 操作路径 */
|
|
1847
|
+
server: string;
|
|
1848
|
+
/** 元数据文档地址:相对 server 或绝对 URL */
|
|
1849
|
+
doc?: string;
|
|
1850
|
+
/** 元数据解析器,默认 OpenAPI(Swagger)解析 */
|
|
1851
|
+
parse?: MetadataParser;
|
|
1852
|
+
/** 直接提供资源表:跳过文档加载与解析,协议完全自定义时的出口 */
|
|
1853
|
+
schema?: ResourceSchema | (() => ResourceSchema | Promise<ResourceSchema>);
|
|
1854
|
+
/** 传输适配器,默认基于 fetch */
|
|
1855
|
+
request?: RequestAdapter;
|
|
1856
|
+
/** 附加请求头:鉴权 token 等随每次请求注入 */
|
|
1857
|
+
headers?: Record<string, string> | (() => Record<string, string>);
|
|
1858
|
+
/** 解析后的微调:改名、合并资源、调整参数映射与字段标记 */
|
|
1859
|
+
refine?: (schema: ResourceSchema) => ResourceSchema | Promise<ResourceSchema>;
|
|
1860
|
+
}
|
|
1861
|
+
/** 资源客户端:请求方法与组件协议同形,字段元数据按组件属性形状投影 */
|
|
1862
|
+
interface ResourceClient<D = unknown> {
|
|
1863
|
+
readonly name: string;
|
|
1864
|
+
/** 列表:Fetch 形态,直接绑定 Table / Select / VirtualList 的 :fetch */
|
|
1865
|
+
list(query?: FetchQuery): Promise<FetchResult<D>>;
|
|
1866
|
+
/** 详情:Fetch 单值形态 */
|
|
1867
|
+
detail(id: string | number): Promise<D>;
|
|
1868
|
+
/** 创建:ActionLike 形态,直接绑定 Form 的 :action */
|
|
1869
|
+
create(payload: unknown): Promise<ActionResult | void>;
|
|
1870
|
+
/** 更新:ActionLike 形态 */
|
|
1871
|
+
update(id: string | number, payload: unknown): Promise<ActionResult | void>;
|
|
1872
|
+
/** 删除:ActionLike 形态,直接绑定 Popconfirm / Button 的 :action */
|
|
1873
|
+
remove(id: string | number): Promise<ActionResult | void>;
|
|
1874
|
+
/** 完整字段元数据原始列表 */
|
|
1875
|
+
readonly fields: ResourceField[];
|
|
1876
|
+
/** 列表列投影(scope.list),直接绑定 Table 的 :columns */
|
|
1877
|
+
readonly columns: ResourceColumn[];
|
|
1878
|
+
/** 筛选字段投影(scope.filter) */
|
|
1879
|
+
readonly filters: ResourceField[];
|
|
1880
|
+
/** 表单字段投影(scope.create / scope.update,保留场景标记) */
|
|
1881
|
+
readonly properties: ResourceField[];
|
|
1882
|
+
}
|
|
1883
|
+
/** 资源池:按名称取客户端,元数据加载状态可直接交给状态视图渲染 */
|
|
1884
|
+
interface ResourcePool {
|
|
1885
|
+
/** 元数据加载状态:pending / success / error(带 retry) */
|
|
1886
|
+
readonly state: AsyncStateLike<ResourceSchema>;
|
|
1887
|
+
/** 取资源客户端;资源不存在时抛出错误,让拼写问题在开发期即暴露 */
|
|
1888
|
+
client<D = unknown>(name: string): ResourceClient<D>;
|
|
1889
|
+
/** 资源是否存在(池就绪前恒为 false) */
|
|
1890
|
+
has(name: string): boolean;
|
|
1891
|
+
/** 全部资源名(池就绪前为空数组) */
|
|
1892
|
+
readonly names: string[];
|
|
1893
|
+
}
|
|
1894
|
+
//#endregion
|
|
1895
|
+
//#region src/resources/use-resources.d.ts
|
|
1896
|
+
/**
|
|
1897
|
+
* 元数据驱动的资源池:声明一次「服务器地址 + 元数据解析方式」,
|
|
1898
|
+
* 按资源名取客户端,请求方法与 fetch / action 协议同形,
|
|
1899
|
+
* 字段元数据(columns / filters / properties)按组件属性形状导出。
|
|
1900
|
+
*
|
|
1901
|
+
* 池初始化时开始加载元数据;client() 无需等待就绪,方法调用时内部自动等待。
|
|
1902
|
+
*/
|
|
1903
|
+
export declare function useResources(options: UseResourcesOptions): ResourcePool;
|
|
1904
|
+
//#endregion
|
|
1905
|
+
//#region src/resources/parse-open-api.d.ts
|
|
1906
|
+
/**
|
|
1907
|
+
* OpenAPI(Swagger)解析器。
|
|
1908
|
+
* 支持路径级 + 操作级参数合并(Swagger 2.0 常见)、$ref 引用、
|
|
1909
|
+
* 信封响应(数组属性 + 总数属性)与裸数组响应。
|
|
1910
|
+
*/
|
|
1911
|
+
export declare const parseOpenApi: MetadataParser;
|
|
1912
|
+
//#endregion
|
|
1913
|
+
//#region src/resources/create-fetch-adapter.d.ts
|
|
1914
|
+
/** 内置适配器的 HTTP 错误:携带状态码与解析后的响应体 */
|
|
1915
|
+
export declare class ResourceHttpError extends Error {
|
|
1916
|
+
readonly status: number;
|
|
1917
|
+
readonly body: unknown;
|
|
1918
|
+
constructor(method: string, url: string, status: number, body: unknown);
|
|
1919
|
+
}
|
|
1920
|
+
/**
|
|
1921
|
+
* 基于 fetch 的内置传输适配器。
|
|
1922
|
+
* GET 以 query 拼装 URL,写操作以 JSON 提交 body;非 2xx 状态拒绝为
|
|
1923
|
+
* ResourceHttpError(携带状态码与响应体);响应体自动 JSON 解析,空体为 undefined。
|
|
1924
|
+
*/
|
|
1925
|
+
export declare function createFetchAdapter(): RequestAdapter;
|
|
1926
|
+
//#endregion
|
|
1927
|
+
//#region src/media/useImageState.d.ts
|
|
1928
|
+
type ImageLoadStatus = 'idle' | 'loading' | 'loaded' | 'error';
|
|
1929
|
+
interface UseImageStateOptions {
|
|
1930
|
+
/** 是否懒加载(元素进入视口才发起加载),默认 false */
|
|
1931
|
+
lazy?: boolean;
|
|
1932
|
+
/** 懒加载时被观测的图片元素(组件绑定 img 外层引用) */
|
|
1933
|
+
target?: MaybeElement<HTMLElement>;
|
|
1934
|
+
/** IntersectionObserver 的根元素,默认视口 */
|
|
1935
|
+
root?: MaybeElement<HTMLElement>;
|
|
1936
|
+
rootMargin?: string;
|
|
1937
|
+
onLoad?: (event: Event) => void;
|
|
1938
|
+
onError?: (event: Event) => void;
|
|
1939
|
+
}
|
|
1940
|
+
interface UseImageStateReturn {
|
|
1941
|
+
status: Ref<ImageLoadStatus>;
|
|
1942
|
+
isLoading: Ref<boolean>;
|
|
1943
|
+
isLoaded: Ref<boolean>;
|
|
1944
|
+
isError: Ref<boolean>;
|
|
1945
|
+
/** 绑定到 <img> 的 load 事件 */
|
|
1946
|
+
onLoad: (event: Event) => void;
|
|
1947
|
+
/** 绑定到 <img> 的 error 事件 */
|
|
1948
|
+
onError: (event: Event) => void;
|
|
1949
|
+
/** 手动重新加载(重置后需由 img 重新触发 src 设置) */
|
|
1950
|
+
reload: () => void;
|
|
1951
|
+
/** 是否应当渲染真实 img(懒加载未触发前为 false) */
|
|
1952
|
+
shouldLoad: Ref<boolean>;
|
|
1953
|
+
}
|
|
1954
|
+
/**
|
|
1955
|
+
* 图片加载状态机:loading / loaded / error,可选视口感知懒加载。
|
|
1956
|
+
* 不创建 DOM,组件把返回的事件绑定到 <img> 即可。
|
|
1957
|
+
*
|
|
1958
|
+
* @internal 消费组件:Image、Avatar
|
|
1959
|
+
*/
|
|
1960
|
+
export declare function useImageState(src: MaybeRefOrGetter<string | undefined>, options?: UseImageStateOptions): UseImageStateReturn;
|
|
1961
|
+
//#endregion
|
|
1962
|
+
export { type ActionLike, type ActionResult, type AsyncFn, type AsyncStateLike, type ChatMessage, type CheckableGroupOptions, type CheckableGroupReturn, type ControllableModelOptions, type ControllableModelReturn, type ControlledProps, type DateCell, type DateGranularity, type DatePanelType, type DateShortcut, type DismissReason, type DraggablePosition, type ElementSize, type Fetch, type FetchController, type FetchLike, type FetchPagination, type FetchQuery, type FetchResource, type FetchResult, type FetchSorter, type FieldRuleConfig, type FocusReturnOptions, type FocusReturnReturn, type FormContext, type FormFieldContext, type FormFieldController, type FormRule, type FormRules, type HoverIntentOptions, type HoverIntentReturn, type ImageLoadStatus, type LabeledCell, type ListResponseMapping, type ListboxNavigationOptions, type ListboxNavigationReturn, type LoadingService, type MarkedDateCell, type MessageApi, type MessageOptions, type MetadataParser, type NormalizedFetch, type NotificationApi, type NotificationEntry, type NotificationMeta, type OverlayContainerOptions, type PagedResult, type PaginationPageItem, type Placement, type PopoverTrigger, type PopoverTriggerProps, type PushToastOptions, type QueryNames, type RequestAdapter, type ResourceClient, type ResourceColumn, type ResourceDefinition, type ResourceField, type ResourceFieldOption, type ResourceFieldType, type ResourceMethod, type ResourceOperation, type ResourcePool, type ResourceRequest, type ResourceSchema, type RovingFocusOptions, type RovingFocusReturn, type ScrollDirection, type ScrollIntoViewOptions, type ScrollLockReturn, type ScrollPosition, type SelectOption, type Strategy, type SubscribeHandler, type SubscribeResult, type SuggestStatus, type TimeColumnItem, type ToastItem, type ToastType, type ToggleReturn, type TransitionVisibleReturn, type TreeFieldNames, type TreeFlatNode, type TypeaheadOptions, type TypeaheadReturn, type UseActionStateOptions, type UseActionStateReturn, type UseActionValueReturn, type UseAsyncStateOptions, type UseAsyncStateReturn, type UseAsyncSuggestOptions, type UseAsyncSuggestReturn, type UseChatOptions, type UseChatReturn, type UseClickOutsideOptions, type UseClipboardOptions, type UseClipboardReturn, type UseDateGridOptions, type UseDateGridReturn, type UseDateModelOptions, type UseDateModelReturn, type UseDismissOptions, type UseDraggableOptions, type UseDraggableReturn, type UseFetchResourceOptions, type UseFetchReturn, type UseFloatingOptions, type UseFloatingReturn, type UseFocusTrapOptions, type UseFocusTrapReturn, type UseFormFieldOptions, type UseFormFieldReturn, type UseFormOptions, type UseFormReturn, type UseImageStateOptions, type UseImageStateReturn, type UseIntersectionObserverOptions, type UseIntersectionObserverReturn, type UseIntervalFnOptions, type UseIntervalFnReturn, type UseModalOptions, type UseModalReturn, type UseOpenOptions, type UseOpenReturn, type UsePaginationOptions, type UsePaginationReturn, type UsePopoverModelOptions, type UsePopoverModelReturn, type UseResizeObserverReturn, type UseResourcesOptions, type UseScrollOptions, type UseSelectModelOptions, type UseSelectModelReturn, type UseSubscribeReturn, type UseTimeModelOptions, type UseTimeModelReturn, type UseTimeoutFnReturn, type UseToastQueueOptions, type UseToastQueueReturn, type UseTreeModelOptions, type UseTreeModelReturn, type ZIndexReturn, actionErrorText as subscribeErrorText };
|