@yh-ui/hooks 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/dist/index.cjs +585 -0
- package/dist/index.d.cts +259 -0
- package/dist/index.d.mts +259 -0
- package/dist/index.d.ts +259 -0
- package/dist/index.mjs +542 -0
- package/dist/use-cache/index.cjs +21 -0
- package/dist/use-cache/index.d.ts +10 -0
- package/dist/use-cache/index.mjs +15 -0
- package/dist/use-click-outside/index.cjs +20 -0
- package/dist/use-click-outside/index.d.ts +2 -0
- package/dist/use-click-outside/index.mjs +14 -0
- package/dist/use-config/index.cjs +30 -0
- package/dist/use-config/index.d.ts +22 -0
- package/dist/use-config/index.mjs +25 -0
- package/dist/use-event-listener/index.cjs +40 -0
- package/dist/use-event-listener/index.d.ts +2 -0
- package/dist/use-event-listener/index.mjs +34 -0
- package/dist/use-form-item/index.cjs +27 -0
- package/dist/use-form-item/index.d.ts +43 -0
- package/dist/use-form-item/index.mjs +20 -0
- package/dist/use-id/index.cjs +29 -0
- package/dist/use-id/index.d.ts +21 -0
- package/dist/use-id/index.mjs +21 -0
- package/dist/use-locale/dayjs-locale.cjs +129 -0
- package/dist/use-locale/dayjs-locale.d.ts +37 -0
- package/dist/use-locale/dayjs-locale.mjs +131 -0
- package/dist/use-locale/index.cjs +88 -0
- package/dist/use-locale/index.d.ts +16 -0
- package/dist/use-locale/index.mjs +63 -0
- package/dist/use-namespace/index.cjs +76 -0
- package/dist/use-namespace/index.d.ts +34 -0
- package/dist/use-namespace/index.mjs +68 -0
- package/dist/use-scroll-lock/index.cjs +73 -0
- package/dist/use-scroll-lock/index.d.ts +8 -0
- package/dist/use-scroll-lock/index.mjs +60 -0
- package/dist/use-virtual-scroll/index.cjs +64 -0
- package/dist/use-virtual-scroll/index.d.ts +35 -0
- package/dist/use-virtual-scroll/index.mjs +53 -0
- package/dist/use-z-index/index.cjs +57 -0
- package/dist/use-z-index/index.d.ts +30 -0
- package/dist/use-z-index/index.mjs +45 -0
- package/package.json +56 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import * as vue from 'vue';
|
|
2
|
+
import { Ref, InjectionKey, ComputedRef, ShallowRef, MaybeRef } from 'vue';
|
|
3
|
+
import { Language } from '@yh-ui/locale';
|
|
4
|
+
export { Language } from '@yh-ui/locale';
|
|
5
|
+
|
|
6
|
+
declare const defaultNamespace = "yh";
|
|
7
|
+
declare const namespaceContextKey: InjectionKey<Ref<string>>;
|
|
8
|
+
/**
|
|
9
|
+
* 获取全局命名空间
|
|
10
|
+
*/
|
|
11
|
+
declare const useGlobalNamespace: () => Ref<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* useNamespace - 生成 BEM 类名
|
|
14
|
+
* @param block - 块名称
|
|
15
|
+
* @returns BEM 类名生成器
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const ns = useNamespace('button')
|
|
19
|
+
* ns.b() // 'yh-button'
|
|
20
|
+
* ns.e('icon') // 'yh-button__icon'
|
|
21
|
+
* ns.m('primary') // 'yh-button--primary'
|
|
22
|
+
* ns.is('disabled') // 'is-disabled'
|
|
23
|
+
* ns.bem('box', 'item', 'active') // 'yh-button-box__item--active'
|
|
24
|
+
*/
|
|
25
|
+
declare const useNamespace: (block: string) => {
|
|
26
|
+
namespace: Ref<string, string>;
|
|
27
|
+
b: (blockSuffix?: string) => string;
|
|
28
|
+
e: (element?: string) => string;
|
|
29
|
+
m: (modifier?: string) => string;
|
|
30
|
+
bem: (blockSuffix?: string, element?: string, modifier?: string) => string;
|
|
31
|
+
em: (element?: string, modifier?: string) => string;
|
|
32
|
+
is: (state: string, value?: boolean) => string;
|
|
33
|
+
cssVar: (name: string) => string;
|
|
34
|
+
cssVarObj: (vars: Record<string, string>) => Record<string, string>;
|
|
35
|
+
cssVarBlock: (name: string) => string;
|
|
36
|
+
cssVarBlockObj: (vars: Record<string, string>) => Record<string, string>;
|
|
37
|
+
};
|
|
38
|
+
type UseNamespaceReturn = ReturnType<typeof useNamespace>;
|
|
39
|
+
|
|
40
|
+
declare const zIndexContextKey: InjectionKey<Ref<number | undefined>>;
|
|
41
|
+
declare const zIndexCounterKey: InjectionKey<{
|
|
42
|
+
current: number;
|
|
43
|
+
}>;
|
|
44
|
+
declare const getNextZIndex: () => number;
|
|
45
|
+
/**
|
|
46
|
+
* 重置 z-index 计数器
|
|
47
|
+
*/
|
|
48
|
+
declare const resetZIndex: (value?: number) => void;
|
|
49
|
+
/**
|
|
50
|
+
* 创建 z-index 计数器(用于 provide)
|
|
51
|
+
*/
|
|
52
|
+
declare const createZIndexCounter: (initialValue?: number) => {
|
|
53
|
+
current: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* useZIndex - z-index 管理
|
|
57
|
+
* @param zIndexOverrides - 可选的自定义 z-index
|
|
58
|
+
* @returns z-index 相关方法
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const { currentZIndex, nextZIndex } = useZIndex()
|
|
62
|
+
*/
|
|
63
|
+
declare const useZIndex: (zIndexOverrides?: Ref<number>) => {
|
|
64
|
+
initialZIndex: vue.ComputedRef<number>;
|
|
65
|
+
currentZIndex: vue.ComputedRef<number>;
|
|
66
|
+
nextZIndex: () => number;
|
|
67
|
+
};
|
|
68
|
+
type UseZIndexReturn = ReturnType<typeof useZIndex>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 获取 dayjs locale code
|
|
72
|
+
*/
|
|
73
|
+
declare const getDayjsLocale: (localeCode: string) => string;
|
|
74
|
+
/**
|
|
75
|
+
* 动态加载并设置 dayjs locale
|
|
76
|
+
* 使用动态导入来按需加载,避免打包所有语言
|
|
77
|
+
*/
|
|
78
|
+
declare const setDayjsLocale: (localeCode: string) => Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 同步设置 dayjs locale(不推荐,会阻塞)
|
|
81
|
+
* 用于需要立即同步的场景
|
|
82
|
+
*/
|
|
83
|
+
declare const setDayjsLocaleSync: (localeCode: string) => void;
|
|
84
|
+
/**
|
|
85
|
+
* 使用自定义月份名称更新 dayjs locale
|
|
86
|
+
* 这样可以确保 dayjs 使用我们语言包中定义的月份名称
|
|
87
|
+
*/
|
|
88
|
+
declare const updateDayjsMonths: (localeCode: string, months: {
|
|
89
|
+
jan: string;
|
|
90
|
+
feb: string;
|
|
91
|
+
mar: string;
|
|
92
|
+
apr: string;
|
|
93
|
+
may: string;
|
|
94
|
+
jun: string;
|
|
95
|
+
jul: string;
|
|
96
|
+
aug: string;
|
|
97
|
+
sep: string;
|
|
98
|
+
oct: string;
|
|
99
|
+
nov: string;
|
|
100
|
+
dec: string;
|
|
101
|
+
}) => void;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* useLocale - 国际化
|
|
105
|
+
* @param localeOverrides - 可选的自定义语言包
|
|
106
|
+
* @returns 国际化相关方法
|
|
107
|
+
*/
|
|
108
|
+
declare const useLocale: (localeOverrides?: Ref<Language>) => {
|
|
109
|
+
locale: vue.ComputedRef<Language>;
|
|
110
|
+
lang: vue.ComputedRef<string>;
|
|
111
|
+
t: (path: string, options?: Record<string, string | number>) => string;
|
|
112
|
+
tRaw: <T = unknown>(path: string) => T;
|
|
113
|
+
};
|
|
114
|
+
type UseLocaleReturn = ReturnType<typeof useLocale>;
|
|
115
|
+
|
|
116
|
+
declare const idInjectionKey: InjectionKey<Ref<string | undefined>>;
|
|
117
|
+
/**
|
|
118
|
+
* useId - 生成唯一 ID
|
|
119
|
+
* @param idOverrides - 可选的自定义 ID 前缀
|
|
120
|
+
* @returns 唯一 ID
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* const id = useId() // 'yh-id-1' (or vue native id)
|
|
124
|
+
* const customId = useId(ref('custom')) // 'custom'
|
|
125
|
+
*/
|
|
126
|
+
declare const useId: (idOverrides?: Ref<string | undefined>) => Ref<string>;
|
|
127
|
+
/**
|
|
128
|
+
* useIdInjection - ID 注入工具
|
|
129
|
+
* @description 用于组件内部生成关联 ID
|
|
130
|
+
*/
|
|
131
|
+
declare const useIdInjection: () => {
|
|
132
|
+
prefix: vue.ComputedRef<string>;
|
|
133
|
+
current: number;
|
|
134
|
+
};
|
|
135
|
+
type UseIdReturn = ReturnType<typeof useId>;
|
|
136
|
+
|
|
137
|
+
interface FormContext {
|
|
138
|
+
model: Record<string, unknown>;
|
|
139
|
+
rules?: Record<string, unknown>;
|
|
140
|
+
labelWidth?: string | number;
|
|
141
|
+
labelPosition?: string;
|
|
142
|
+
labelSuffix?: string;
|
|
143
|
+
showMessage?: boolean;
|
|
144
|
+
scrollToError?: boolean;
|
|
145
|
+
scrollIntoViewOptions?: boolean | ScrollIntoViewOptions;
|
|
146
|
+
disabled?: boolean;
|
|
147
|
+
size?: string;
|
|
148
|
+
statusIcon?: boolean;
|
|
149
|
+
layout?: string;
|
|
150
|
+
addField: (field: FormItemContext) => void;
|
|
151
|
+
removeField: (field: FormItemContext) => void;
|
|
152
|
+
themeOverrides?: Record<string, unknown>;
|
|
153
|
+
}
|
|
154
|
+
interface FormItemContext {
|
|
155
|
+
prop: string;
|
|
156
|
+
validate: (trigger: string, callback?: (isValid: boolean) => void) => Promise<boolean | unknown>;
|
|
157
|
+
resetField: () => void;
|
|
158
|
+
clearValidate: () => void;
|
|
159
|
+
validateStatus: string;
|
|
160
|
+
validateMessage: string;
|
|
161
|
+
label: string;
|
|
162
|
+
errorId?: string;
|
|
163
|
+
inputId?: string;
|
|
164
|
+
size?: string;
|
|
165
|
+
disabled?: boolean;
|
|
166
|
+
}
|
|
167
|
+
declare const FormContextKey: InjectionKey<FormContext>;
|
|
168
|
+
declare const FormItemContextKey: InjectionKey<FormItemContext>;
|
|
169
|
+
/**
|
|
170
|
+
* useFormItem - 供组件内部使用的 Hook
|
|
171
|
+
* @description 获取表单项上下文。已优化内部触发校验逻辑,防止 Promise 拒绝导致控制台报错。
|
|
172
|
+
*/
|
|
173
|
+
declare const useFormItem: () => {
|
|
174
|
+
form: FormContext | undefined;
|
|
175
|
+
formItem: FormItemContext | undefined;
|
|
176
|
+
validate: (trigger: string) => Promise<boolean | unknown>;
|
|
177
|
+
};
|
|
178
|
+
type UseFormItemReturn = ReturnType<typeof useFormItem>;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* useVirtualScroll - 虚拟滚动 Hook
|
|
182
|
+
* @description 用于大数据量列表的虚拟滚动渲染
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
interface VirtualScrollOptions<T = unknown> {
|
|
186
|
+
/** 每项高度 */
|
|
187
|
+
itemHeight: number;
|
|
188
|
+
/** 容器高度 */
|
|
189
|
+
containerHeight: number;
|
|
190
|
+
/** 数据列表 */
|
|
191
|
+
items: Ref<T[]> | T[];
|
|
192
|
+
/** 上下额外渲染数量 */
|
|
193
|
+
overscan?: number;
|
|
194
|
+
}
|
|
195
|
+
interface VirtualScrollReturn<T = unknown> {
|
|
196
|
+
/** 可见项列表 */
|
|
197
|
+
visibleItems: ComputedRef<T[]>;
|
|
198
|
+
/** 总高度 */
|
|
199
|
+
totalHeight: ComputedRef<number>;
|
|
200
|
+
/** Y轴偏移量 */
|
|
201
|
+
offsetY: ComputedRef<number>;
|
|
202
|
+
/** 起始索引 */
|
|
203
|
+
startIndex: Ref<number>;
|
|
204
|
+
/** 结束索引 */
|
|
205
|
+
endIndex: Ref<number>;
|
|
206
|
+
/** 滚动事件处理 */
|
|
207
|
+
onScroll: (event: Event) => void;
|
|
208
|
+
/** 滚动到指定索引 */
|
|
209
|
+
scrollToIndex: (index: number) => void;
|
|
210
|
+
/** 容器引用 */
|
|
211
|
+
containerRef: Ref<HTMLElement | null>;
|
|
212
|
+
}
|
|
213
|
+
declare function useVirtualScroll<T = unknown>(options: VirtualScrollOptions<T>): VirtualScrollReturn<T>;
|
|
214
|
+
|
|
215
|
+
interface UseCacheReturn<T> {
|
|
216
|
+
data: ShallowRef<T | null>;
|
|
217
|
+
execute: () => Promise<void>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* 一个简单的 SSR 友好的缓存 Hook
|
|
221
|
+
* 在服务端可以将结果存入缓存,客户端可以从缓存中恢复或重新计算
|
|
222
|
+
*/
|
|
223
|
+
declare function useCache<T>(key: string, fetcher: () => T | Promise<T>): UseCacheReturn<T>;
|
|
224
|
+
|
|
225
|
+
declare function useEventListener(target: MaybeRef<EventTarget | null | undefined> | (() => EventTarget | null | undefined), event: string, handler: (e: Event) => void, options?: boolean | AddEventListenerOptions): void;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* useScrollLock - 极致稳定的滚动锁定管理
|
|
229
|
+
* @description 深度对标 市面组件库 / Naive UI,解决复杂环境(包括 VitePress 等文档站点)下的内容移位问题
|
|
230
|
+
*/
|
|
231
|
+
declare const useScrollLock: (trigger: Ref<boolean>) => {
|
|
232
|
+
isLocked: Ref<boolean, boolean>;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
declare function useClickOutside(target: MaybeRef<HTMLElement | null | undefined>, handler: (evt: MouseEvent | TouchEvent) => void): void;
|
|
236
|
+
|
|
237
|
+
interface ConfigProviderContext {
|
|
238
|
+
size?: 'small' | 'default' | 'large';
|
|
239
|
+
zIndex?: number;
|
|
240
|
+
locale?: Language;
|
|
241
|
+
message?: {
|
|
242
|
+
max?: number;
|
|
243
|
+
duration?: number;
|
|
244
|
+
offset?: number;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
declare const configProviderContextKey: InjectionKey<ComputedRef<ConfigProviderContext>>;
|
|
248
|
+
/**
|
|
249
|
+
* 获取全局配置 Hook
|
|
250
|
+
*/
|
|
251
|
+
declare const useConfig: () => {
|
|
252
|
+
config: ComputedRef<ConfigProviderContext> | null;
|
|
253
|
+
globalSize: ComputedRef<"small" | "default" | "large">;
|
|
254
|
+
globalZIndex: ComputedRef<number>;
|
|
255
|
+
globalLocale: ComputedRef<Language | undefined>;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export { FormContextKey, FormItemContextKey, configProviderContextKey, createZIndexCounter, defaultNamespace, getDayjsLocale, getNextZIndex, idInjectionKey, namespaceContextKey, resetZIndex, setDayjsLocale, setDayjsLocaleSync, updateDayjsMonths, useCache, useClickOutside, useConfig, useEventListener, useFormItem, useGlobalNamespace, useId, useIdInjection, useLocale, useNamespace, useScrollLock, useVirtualScroll, useZIndex, zIndexContextKey, zIndexCounterKey };
|
|
259
|
+
export type { ConfigProviderContext, FormContext, FormItemContext, UseCacheReturn, UseFormItemReturn, UseIdReturn, UseLocaleReturn, UseNamespaceReturn, UseZIndexReturn, VirtualScrollOptions, VirtualScrollReturn };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import * as vue from 'vue';
|
|
2
|
+
import { Ref, InjectionKey, ComputedRef, ShallowRef, MaybeRef } from 'vue';
|
|
3
|
+
import { Language } from '@yh-ui/locale';
|
|
4
|
+
export { Language } from '@yh-ui/locale';
|
|
5
|
+
|
|
6
|
+
declare const defaultNamespace = "yh";
|
|
7
|
+
declare const namespaceContextKey: InjectionKey<Ref<string>>;
|
|
8
|
+
/**
|
|
9
|
+
* 获取全局命名空间
|
|
10
|
+
*/
|
|
11
|
+
declare const useGlobalNamespace: () => Ref<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* useNamespace - 生成 BEM 类名
|
|
14
|
+
* @param block - 块名称
|
|
15
|
+
* @returns BEM 类名生成器
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const ns = useNamespace('button')
|
|
19
|
+
* ns.b() // 'yh-button'
|
|
20
|
+
* ns.e('icon') // 'yh-button__icon'
|
|
21
|
+
* ns.m('primary') // 'yh-button--primary'
|
|
22
|
+
* ns.is('disabled') // 'is-disabled'
|
|
23
|
+
* ns.bem('box', 'item', 'active') // 'yh-button-box__item--active'
|
|
24
|
+
*/
|
|
25
|
+
declare const useNamespace: (block: string) => {
|
|
26
|
+
namespace: Ref<string, string>;
|
|
27
|
+
b: (blockSuffix?: string) => string;
|
|
28
|
+
e: (element?: string) => string;
|
|
29
|
+
m: (modifier?: string) => string;
|
|
30
|
+
bem: (blockSuffix?: string, element?: string, modifier?: string) => string;
|
|
31
|
+
em: (element?: string, modifier?: string) => string;
|
|
32
|
+
is: (state: string, value?: boolean) => string;
|
|
33
|
+
cssVar: (name: string) => string;
|
|
34
|
+
cssVarObj: (vars: Record<string, string>) => Record<string, string>;
|
|
35
|
+
cssVarBlock: (name: string) => string;
|
|
36
|
+
cssVarBlockObj: (vars: Record<string, string>) => Record<string, string>;
|
|
37
|
+
};
|
|
38
|
+
type UseNamespaceReturn = ReturnType<typeof useNamespace>;
|
|
39
|
+
|
|
40
|
+
declare const zIndexContextKey: InjectionKey<Ref<number | undefined>>;
|
|
41
|
+
declare const zIndexCounterKey: InjectionKey<{
|
|
42
|
+
current: number;
|
|
43
|
+
}>;
|
|
44
|
+
declare const getNextZIndex: () => number;
|
|
45
|
+
/**
|
|
46
|
+
* 重置 z-index 计数器
|
|
47
|
+
*/
|
|
48
|
+
declare const resetZIndex: (value?: number) => void;
|
|
49
|
+
/**
|
|
50
|
+
* 创建 z-index 计数器(用于 provide)
|
|
51
|
+
*/
|
|
52
|
+
declare const createZIndexCounter: (initialValue?: number) => {
|
|
53
|
+
current: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* useZIndex - z-index 管理
|
|
57
|
+
* @param zIndexOverrides - 可选的自定义 z-index
|
|
58
|
+
* @returns z-index 相关方法
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const { currentZIndex, nextZIndex } = useZIndex()
|
|
62
|
+
*/
|
|
63
|
+
declare const useZIndex: (zIndexOverrides?: Ref<number>) => {
|
|
64
|
+
initialZIndex: vue.ComputedRef<number>;
|
|
65
|
+
currentZIndex: vue.ComputedRef<number>;
|
|
66
|
+
nextZIndex: () => number;
|
|
67
|
+
};
|
|
68
|
+
type UseZIndexReturn = ReturnType<typeof useZIndex>;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* 获取 dayjs locale code
|
|
72
|
+
*/
|
|
73
|
+
declare const getDayjsLocale: (localeCode: string) => string;
|
|
74
|
+
/**
|
|
75
|
+
* 动态加载并设置 dayjs locale
|
|
76
|
+
* 使用动态导入来按需加载,避免打包所有语言
|
|
77
|
+
*/
|
|
78
|
+
declare const setDayjsLocale: (localeCode: string) => Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* 同步设置 dayjs locale(不推荐,会阻塞)
|
|
81
|
+
* 用于需要立即同步的场景
|
|
82
|
+
*/
|
|
83
|
+
declare const setDayjsLocaleSync: (localeCode: string) => void;
|
|
84
|
+
/**
|
|
85
|
+
* 使用自定义月份名称更新 dayjs locale
|
|
86
|
+
* 这样可以确保 dayjs 使用我们语言包中定义的月份名称
|
|
87
|
+
*/
|
|
88
|
+
declare const updateDayjsMonths: (localeCode: string, months: {
|
|
89
|
+
jan: string;
|
|
90
|
+
feb: string;
|
|
91
|
+
mar: string;
|
|
92
|
+
apr: string;
|
|
93
|
+
may: string;
|
|
94
|
+
jun: string;
|
|
95
|
+
jul: string;
|
|
96
|
+
aug: string;
|
|
97
|
+
sep: string;
|
|
98
|
+
oct: string;
|
|
99
|
+
nov: string;
|
|
100
|
+
dec: string;
|
|
101
|
+
}) => void;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* useLocale - 国际化
|
|
105
|
+
* @param localeOverrides - 可选的自定义语言包
|
|
106
|
+
* @returns 国际化相关方法
|
|
107
|
+
*/
|
|
108
|
+
declare const useLocale: (localeOverrides?: Ref<Language>) => {
|
|
109
|
+
locale: vue.ComputedRef<Language>;
|
|
110
|
+
lang: vue.ComputedRef<string>;
|
|
111
|
+
t: (path: string, options?: Record<string, string | number>) => string;
|
|
112
|
+
tRaw: <T = unknown>(path: string) => T;
|
|
113
|
+
};
|
|
114
|
+
type UseLocaleReturn = ReturnType<typeof useLocale>;
|
|
115
|
+
|
|
116
|
+
declare const idInjectionKey: InjectionKey<Ref<string | undefined>>;
|
|
117
|
+
/**
|
|
118
|
+
* useId - 生成唯一 ID
|
|
119
|
+
* @param idOverrides - 可选的自定义 ID 前缀
|
|
120
|
+
* @returns 唯一 ID
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* const id = useId() // 'yh-id-1' (or vue native id)
|
|
124
|
+
* const customId = useId(ref('custom')) // 'custom'
|
|
125
|
+
*/
|
|
126
|
+
declare const useId: (idOverrides?: Ref<string | undefined>) => Ref<string>;
|
|
127
|
+
/**
|
|
128
|
+
* useIdInjection - ID 注入工具
|
|
129
|
+
* @description 用于组件内部生成关联 ID
|
|
130
|
+
*/
|
|
131
|
+
declare const useIdInjection: () => {
|
|
132
|
+
prefix: vue.ComputedRef<string>;
|
|
133
|
+
current: number;
|
|
134
|
+
};
|
|
135
|
+
type UseIdReturn = ReturnType<typeof useId>;
|
|
136
|
+
|
|
137
|
+
interface FormContext {
|
|
138
|
+
model: Record<string, unknown>;
|
|
139
|
+
rules?: Record<string, unknown>;
|
|
140
|
+
labelWidth?: string | number;
|
|
141
|
+
labelPosition?: string;
|
|
142
|
+
labelSuffix?: string;
|
|
143
|
+
showMessage?: boolean;
|
|
144
|
+
scrollToError?: boolean;
|
|
145
|
+
scrollIntoViewOptions?: boolean | ScrollIntoViewOptions;
|
|
146
|
+
disabled?: boolean;
|
|
147
|
+
size?: string;
|
|
148
|
+
statusIcon?: boolean;
|
|
149
|
+
layout?: string;
|
|
150
|
+
addField: (field: FormItemContext) => void;
|
|
151
|
+
removeField: (field: FormItemContext) => void;
|
|
152
|
+
themeOverrides?: Record<string, unknown>;
|
|
153
|
+
}
|
|
154
|
+
interface FormItemContext {
|
|
155
|
+
prop: string;
|
|
156
|
+
validate: (trigger: string, callback?: (isValid: boolean) => void) => Promise<boolean | unknown>;
|
|
157
|
+
resetField: () => void;
|
|
158
|
+
clearValidate: () => void;
|
|
159
|
+
validateStatus: string;
|
|
160
|
+
validateMessage: string;
|
|
161
|
+
label: string;
|
|
162
|
+
errorId?: string;
|
|
163
|
+
inputId?: string;
|
|
164
|
+
size?: string;
|
|
165
|
+
disabled?: boolean;
|
|
166
|
+
}
|
|
167
|
+
declare const FormContextKey: InjectionKey<FormContext>;
|
|
168
|
+
declare const FormItemContextKey: InjectionKey<FormItemContext>;
|
|
169
|
+
/**
|
|
170
|
+
* useFormItem - 供组件内部使用的 Hook
|
|
171
|
+
* @description 获取表单项上下文。已优化内部触发校验逻辑,防止 Promise 拒绝导致控制台报错。
|
|
172
|
+
*/
|
|
173
|
+
declare const useFormItem: () => {
|
|
174
|
+
form: FormContext | undefined;
|
|
175
|
+
formItem: FormItemContext | undefined;
|
|
176
|
+
validate: (trigger: string) => Promise<boolean | unknown>;
|
|
177
|
+
};
|
|
178
|
+
type UseFormItemReturn = ReturnType<typeof useFormItem>;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* useVirtualScroll - 虚拟滚动 Hook
|
|
182
|
+
* @description 用于大数据量列表的虚拟滚动渲染
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
interface VirtualScrollOptions<T = unknown> {
|
|
186
|
+
/** 每项高度 */
|
|
187
|
+
itemHeight: number;
|
|
188
|
+
/** 容器高度 */
|
|
189
|
+
containerHeight: number;
|
|
190
|
+
/** 数据列表 */
|
|
191
|
+
items: Ref<T[]> | T[];
|
|
192
|
+
/** 上下额外渲染数量 */
|
|
193
|
+
overscan?: number;
|
|
194
|
+
}
|
|
195
|
+
interface VirtualScrollReturn<T = unknown> {
|
|
196
|
+
/** 可见项列表 */
|
|
197
|
+
visibleItems: ComputedRef<T[]>;
|
|
198
|
+
/** 总高度 */
|
|
199
|
+
totalHeight: ComputedRef<number>;
|
|
200
|
+
/** Y轴偏移量 */
|
|
201
|
+
offsetY: ComputedRef<number>;
|
|
202
|
+
/** 起始索引 */
|
|
203
|
+
startIndex: Ref<number>;
|
|
204
|
+
/** 结束索引 */
|
|
205
|
+
endIndex: Ref<number>;
|
|
206
|
+
/** 滚动事件处理 */
|
|
207
|
+
onScroll: (event: Event) => void;
|
|
208
|
+
/** 滚动到指定索引 */
|
|
209
|
+
scrollToIndex: (index: number) => void;
|
|
210
|
+
/** 容器引用 */
|
|
211
|
+
containerRef: Ref<HTMLElement | null>;
|
|
212
|
+
}
|
|
213
|
+
declare function useVirtualScroll<T = unknown>(options: VirtualScrollOptions<T>): VirtualScrollReturn<T>;
|
|
214
|
+
|
|
215
|
+
interface UseCacheReturn<T> {
|
|
216
|
+
data: ShallowRef<T | null>;
|
|
217
|
+
execute: () => Promise<void>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* 一个简单的 SSR 友好的缓存 Hook
|
|
221
|
+
* 在服务端可以将结果存入缓存,客户端可以从缓存中恢复或重新计算
|
|
222
|
+
*/
|
|
223
|
+
declare function useCache<T>(key: string, fetcher: () => T | Promise<T>): UseCacheReturn<T>;
|
|
224
|
+
|
|
225
|
+
declare function useEventListener(target: MaybeRef<EventTarget | null | undefined> | (() => EventTarget | null | undefined), event: string, handler: (e: Event) => void, options?: boolean | AddEventListenerOptions): void;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* useScrollLock - 极致稳定的滚动锁定管理
|
|
229
|
+
* @description 深度对标 市面组件库 / Naive UI,解决复杂环境(包括 VitePress 等文档站点)下的内容移位问题
|
|
230
|
+
*/
|
|
231
|
+
declare const useScrollLock: (trigger: Ref<boolean>) => {
|
|
232
|
+
isLocked: Ref<boolean, boolean>;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
declare function useClickOutside(target: MaybeRef<HTMLElement | null | undefined>, handler: (evt: MouseEvent | TouchEvent) => void): void;
|
|
236
|
+
|
|
237
|
+
interface ConfigProviderContext {
|
|
238
|
+
size?: 'small' | 'default' | 'large';
|
|
239
|
+
zIndex?: number;
|
|
240
|
+
locale?: Language;
|
|
241
|
+
message?: {
|
|
242
|
+
max?: number;
|
|
243
|
+
duration?: number;
|
|
244
|
+
offset?: number;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
declare const configProviderContextKey: InjectionKey<ComputedRef<ConfigProviderContext>>;
|
|
248
|
+
/**
|
|
249
|
+
* 获取全局配置 Hook
|
|
250
|
+
*/
|
|
251
|
+
declare const useConfig: () => {
|
|
252
|
+
config: ComputedRef<ConfigProviderContext> | null;
|
|
253
|
+
globalSize: ComputedRef<"small" | "default" | "large">;
|
|
254
|
+
globalZIndex: ComputedRef<number>;
|
|
255
|
+
globalLocale: ComputedRef<Language | undefined>;
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
export { FormContextKey, FormItemContextKey, configProviderContextKey, createZIndexCounter, defaultNamespace, getDayjsLocale, getNextZIndex, idInjectionKey, namespaceContextKey, resetZIndex, setDayjsLocale, setDayjsLocaleSync, updateDayjsMonths, useCache, useClickOutside, useConfig, useEventListener, useFormItem, useGlobalNamespace, useId, useIdInjection, useLocale, useNamespace, useScrollLock, useVirtualScroll, useZIndex, zIndexContextKey, zIndexCounterKey };
|
|
259
|
+
export type { ConfigProviderContext, FormContext, FormItemContext, UseCacheReturn, UseFormItemReturn, UseIdReturn, UseLocaleReturn, UseNamespaceReturn, UseZIndexReturn, VirtualScrollOptions, VirtualScrollReturn };
|