@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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.cjs +585 -0
  3. package/dist/index.d.cts +259 -0
  4. package/dist/index.d.mts +259 -0
  5. package/dist/index.d.ts +259 -0
  6. package/dist/index.mjs +542 -0
  7. package/dist/use-cache/index.cjs +21 -0
  8. package/dist/use-cache/index.d.ts +10 -0
  9. package/dist/use-cache/index.mjs +15 -0
  10. package/dist/use-click-outside/index.cjs +20 -0
  11. package/dist/use-click-outside/index.d.ts +2 -0
  12. package/dist/use-click-outside/index.mjs +14 -0
  13. package/dist/use-config/index.cjs +30 -0
  14. package/dist/use-config/index.d.ts +22 -0
  15. package/dist/use-config/index.mjs +25 -0
  16. package/dist/use-event-listener/index.cjs +40 -0
  17. package/dist/use-event-listener/index.d.ts +2 -0
  18. package/dist/use-event-listener/index.mjs +34 -0
  19. package/dist/use-form-item/index.cjs +27 -0
  20. package/dist/use-form-item/index.d.ts +43 -0
  21. package/dist/use-form-item/index.mjs +20 -0
  22. package/dist/use-id/index.cjs +29 -0
  23. package/dist/use-id/index.d.ts +21 -0
  24. package/dist/use-id/index.mjs +21 -0
  25. package/dist/use-locale/dayjs-locale.cjs +129 -0
  26. package/dist/use-locale/dayjs-locale.d.ts +37 -0
  27. package/dist/use-locale/dayjs-locale.mjs +131 -0
  28. package/dist/use-locale/index.cjs +88 -0
  29. package/dist/use-locale/index.d.ts +16 -0
  30. package/dist/use-locale/index.mjs +63 -0
  31. package/dist/use-namespace/index.cjs +76 -0
  32. package/dist/use-namespace/index.d.ts +34 -0
  33. package/dist/use-namespace/index.mjs +68 -0
  34. package/dist/use-scroll-lock/index.cjs +73 -0
  35. package/dist/use-scroll-lock/index.d.ts +8 -0
  36. package/dist/use-scroll-lock/index.mjs +60 -0
  37. package/dist/use-virtual-scroll/index.cjs +64 -0
  38. package/dist/use-virtual-scroll/index.d.ts +35 -0
  39. package/dist/use-virtual-scroll/index.mjs +53 -0
  40. package/dist/use-z-index/index.cjs +57 -0
  41. package/dist/use-z-index/index.d.ts +30 -0
  42. package/dist/use-z-index/index.mjs +45 -0
  43. package/package.json +56 -0
@@ -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 };