UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

1,296 lines (1,092 loc) 37 kB
/** * React 工具库。基于 {@link https://github.com/streamich/react-use#readme | react-use}。 * * @packageDocumentation */ import { DependencyList } from 'react'; import { Dispatch } from 'react'; import { MutableRefObject } from 'react'; import { default as React_2 } from 'react'; import { SetStateAction } from 'react'; import { useAsync } from 'react-use'; import { useAsyncFn } from 'react-use'; import { useAsyncRetry } from 'react-use'; import { useAudio } from 'react-use'; import { useBattery } from 'react-use'; import { useBeforeUnload } from 'react-use'; import { useBoolean } from 'react-use'; import { useClickAway } from 'react-use'; import { useCookie } from 'react-use'; import { useCopyToClipboard } from 'react-use'; import { useCounter } from 'react-use'; import { useCss } from 'react-use'; import { useCustomCompareEffect } from 'react-use'; import { useDebounce } from 'react-use'; import { useDeepCompareEffect } from 'react-use'; import { useDefault } from 'react-use'; import { useDrop } from 'react-use'; import { useDropArea } from 'react-use'; import { useEffectOnce } from 'react-use'; import { useEnsuredForwardedRef } from 'react-use'; import { useError } from 'react-use'; import { useEvent } from 'react-use'; import { useFavicon } from 'react-use'; import { useFirstMountState } from 'react-use'; import { useFullscreen } from 'react-use'; import { useGeolocation } from 'react-use'; import { useGetSet } from 'react-use'; import { useGetSetState } from 'react-use'; import { useHarmonicIntervalFn } from 'react-use'; import { useHash } from 'react-use'; import { useHoverDirty } from 'react-use'; import { useIdle } from 'react-use'; import { useIntersection } from 'react-use'; import { useIsomorphicLayoutEffect } from 'react-use'; import { useKey } from 'react-use'; import { useKeyPress } from 'react-use'; import { useKeyPressEvent } from 'react-use'; import { useLatest } from 'react-use'; import { useLifecycles } from 'react-use'; import { useList } from 'react-use'; import { useLocation } from 'react-use'; import { useLockBodyScroll } from 'react-use'; import { useLogger } from 'react-use'; import { useLongPress } from 'react-use'; import { useMap } from 'react-use'; import { useMeasure } from 'react-use'; import { useMedia } from 'react-use'; import { useMediaDevices } from 'react-use'; import { useMediatedState } from 'react-use'; import { useMethods } from 'react-use'; import { useMotion } from 'react-use'; import { useMount } from 'react-use'; import { useMountedState } from 'react-use'; import { useMouse } from 'react-use'; import { useMouseHovered } from 'react-use'; import { useMouseWheel } from 'react-use'; import { useMultiStateValidator } from 'react-use'; import { useNetworkState } from 'react-use'; import { useNumber } from 'react-use'; import { useObservable } from 'react-use'; import { useOrientation } from 'react-use'; import { usePageLeave } from 'react-use'; import { usePermission } from 'react-use'; import { usePrevious } from 'react-use'; import { usePreviousDistinct } from 'react-use'; import { usePromise } from 'react-use'; import { useQueue } from 'react-use'; import { useRaf } from 'react-use'; import { useRafLoop } from 'react-use'; import { useRafState } from 'react-use'; import { useRendersCount } from 'react-use'; import { useScratch } from 'react-use'; import { useScroll } from 'react-use'; import { useScrollbarWidth } from 'react-use'; import { useScrolling } from 'react-use'; import { useSearchParam } from 'react-use'; import { useSessionStorage } from 'react-use'; import { useSet } from 'react-use'; import { useSetState } from 'react-use'; import { useShallowCompareEffect } from 'react-use'; import { useSize } from 'react-use'; import { useSlider } from 'react-use'; import { useSpeech } from 'react-use'; import { useStartTyping } from 'react-use'; import { useStateList } from 'react-use'; import { useStateValidator } from 'react-use'; import { useStateWithHistory } from 'react-use'; import { useThrottle } from 'react-use'; import { useThrottleFn } from 'react-use'; import { useTimeout } from 'react-use'; import { useTimeoutFn } from 'react-use'; import { useTitle } from 'react-use'; import { useTween } from 'react-use'; import { useUnmount } from 'react-use'; import { useUnmountPromise } from 'react-use'; import { useUpdate } from 'react-use'; import { useUpdateEffect } from 'react-use'; import { useUpsert } from 'react-use'; import { useVibrate } from 'react-use'; import { useVideo } from 'react-use'; import { useWindowScroll } from 'react-use'; import { useWindowSize } from 'react-use'; declare function addMethod<TSchemaType extends typeof mixed | typeof string | typeof number | typeof boolean | typeof date | typeof array | typeof object, TSchema extends TSchemaType extends typeof mixed ? MixedSchema : TSchemaType extends typeof string ? StringSchema : TSchemaType extends typeof number ? NumberSchema : TSchemaType extends typeof boolean ? BooleanSchema : TSchemaType extends typeof date ? DateSchema : TSchemaType extends typeof array ? ArraySchema : TSchemaType extends typeof object ? ObjectSchema : MixedSchema>(schemaType: TSchemaType, name: string, fn: (this: TSchema, ...args: any[]) => TSchema): void; /** * 任意对象。 * * @public */ declare type AnyObject_2 = Record<any, any>; declare function array<T extends any = any>(type?: GetSchema<T> | ((schema: ArraySchema<T>) => ArraySchema<T>)): ArraySchema<T>; declare interface ArrayLocale { min: LocaleValue<{ min: number; }>; max: LocaleValue<{ max: number; }>; } declare interface ArraySchema<T extends any = any> extends MixedSchema<T[]> { of(type: GetSchema<T>): this; required(message?: MixedLocale['required']): this; min(limit: Refable<number>, message?: ArrayLocale['min']): this; max(limit: Refable<number>, message?: ArrayLocale['max']): this; ensure(): this; compact(rejector: (value: T) => boolean): this; } declare function boolean<T extends boolean = boolean>(payload?: (schema: BooleanSchema<T>) => BooleanSchema<T>): BooleanSchema<T>; declare interface BooleanLocale { } declare interface BooleanSchema<T extends boolean = boolean> extends MixedSchema<T> { } declare type Builtin = Primitive | Function | Date | Error | RegExp; /** * 常用的组件属性。 */ export declare interface CommonComponentProps<TRef = never> { key?: React_2.Key; ref?: React_2.Ref<TRef>; className?: string; style?: React_2.CSSProperties; } export declare function createGlobalState<S extends CreateGlobalStateState, R = never>(initialState: S): CreateGlobalStateResult<S, R>; export declare function createGlobalState<S extends CreateGlobalStateState, R = never>(customResult?: CreateGlobalStateCustomResult<S, R>): CreateGlobalStateResult<S | undefined, R>; export declare function createGlobalState<S extends CreateGlobalStateState, R = never>(initialState: S, customResult?: CreateGlobalStateCustomResult<S, R>): CreateGlobalStateResult<S, R>; export declare type CreateGlobalStateCustomResult<S extends CreateGlobalStateState | undefined, R = never> = (payload: { state: CreateGlobalStateResultResult<S, never>[0]; setState: CreateGlobalStateResultResult<S, never>[1]; }) => R; export declare interface CreateGlobalStateResult<S extends CreateGlobalStateState | undefined, R = never> { (): CreateGlobalStateResultResult<S, R>; getState(): S; setState(nextState: SetStateAction<S>): void; setStatePartial(nextState: Partial<S> | ((prevState: S) => Partial<S>)): void; watchState(callback: (nextState: S, prevState: S) => any): () => void; watchStateImmediate(callback: (nextState: S, prevState: S) => any): () => void; } export declare type CreateGlobalStateResultResult<S extends CreateGlobalStateState | undefined, R = never> = [R] extends [never] ? readonly [S, Dispatch<SetStateAction<S>>] : R; export declare type CreateGlobalStateState = any; declare function date<T extends Date = Date>(payload?: (schema: DateSchema<T>) => DateSchema<T>): DateSchema<T>; declare interface DateLocale { min: LocaleValue<{ min: Date | string; }>; max: LocaleValue<{ max: Date | string; }>; } declare interface DateSchema<T extends Date = Date> extends MixedSchema<T> { min(limit: Refable<Date>, message?: DateLocale['min']): this; max(limit: Refable<Date>, message?: DateLocale['max']): this; } /** Like Partial but recursive */ declare type DeepPartial<T> = T extends Builtin ? T : T extends Map<infer K, infer V> ? Map<DeepPartial<K>, DeepPartial<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepPartial<K>, DeepPartial<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<DeepPartial<K>, DeepPartial<V>> : T extends Set<infer U> ? Set<DeepPartial<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepPartial<U>> : T extends WeakSet<infer U> ? WeakSet<DeepPartial<U>> : T extends Array<infer U> ? T extends IsTuple<T> ? { [K in keyof T]?: DeepPartial<T[K]>; } : Array<DeepPartial<U>> : T extends Promise<infer U> ? Promise<DeepPartial<U>> : T extends {} ? { [K in keyof T]?: DeepPartial<T[K]>; } : Partial<T>; /** * 定义组件。 * * @param options 选项 */ export declare function defineComponent<TProps extends Record<string, any>, TRef extends any = any>(options: DefineComponentOptions<TProps, true, TRef>): React_2.ForwardRefExoticComponent<TProps & { ref?: React_2.Ref<TRef>; }>; /** * 定义组件。 * * @param options 选项 */ export declare function defineComponent<TProps extends Record<string, any>, TRef extends any = any>(options: DefineComponentOptions<TProps, false>): React_2.FC<TProps>; /** * 定义组件的选项。 */ export declare type DefineComponentOptions< /** * 组件属性。 */ TProps extends Record<string, any>, /** * 是否转发 ref。 */ TForwardRef extends boolean, /** * 要转发的 ref。 */ TRef extends any = never> = { /** * 可选属性的默认值。 */ defaultProps?: { [K in OptionalKeys<TProps>]?: TProps[K]; }; /** * 组件展示名称。 */ displayName?: string; /** * 组件。 */ component: TForwardRef extends true ? React_2.ForwardRefRenderFunction<TRef, Omit<TProps, 'key' | 'ref'>> : React_2.FC<Omit<TProps, 'key' | 'ref'>>; } & (TForwardRef extends true ? { /** * 是否转发 ref。 */ forwardRef?: true; } : { /** * 是否转发 ref。 */ forwardRef: false; }); /** * 去除类型 T 中的 undefined。 * * @public * @example * ```typescript * type X = string | undefined * type Y = Defined<X> // => string * ``` */ declare type Defined<T> = Exclude<T, undefined>; /** * 派生新的组件属性。 * * @template TComponent 原组件 * @template TExclude 需去除的属性 * @template TRef 新的 ref * @template TOverride 覆盖属性 */ export declare type DeriveComponentProps<TComponent extends React_2.ComponentType | keyof JSX.IntrinsicElements | React_2.JSXElementConstructor<any>, TExclude extends keyof React_2.ComponentProps<TComponent>, TRef extends any = never, TOverride extends Partial<Record<keyof React_2.ComponentProps<TComponent>, any>> = never> = Merge<Merge<Omit<React_2.ComponentProps<TComponent>, TExclude>, [ TOverride ] extends [never] ? {} : TOverride>, { ref?: React_2.Ref<TRef>; }>; declare interface GetEnvironmentResult { /** 浏览器 */ readonly browser: boolean; /** 微信 WebView */ readonly wechatWebView: boolean; /** 小程序 */ readonly miniProgram: boolean; /** 微信小程序 */ readonly wechatMiniProgram: boolean; /** iOS */ readonly ios: boolean; /** 安卓 */ readonly android: boolean; /** Node.js */ readonly nodejs: boolean; /** Deno */ readonly deno: boolean; /** Taro 3 */ readonly taro: boolean; } declare function getLocale(): Locale; declare type GetObjectSchema<T extends {}> = { [K in keyof T]: GetSchema<T[K]>; }; declare type GetSchema<T> = ([ T ] extends [string] ? StringSchema<T> : [T] extends [number] ? NumberSchema<T> : [T] extends [boolean] ? BooleanSchema<T> : [T] extends [Date] ? DateSchema<T> : T extends Array<infer X> ? ArraySchema<X> : T extends {} ? ObjectSchema<T> : MixedSchema<T>) | MixedSchema<T>; declare type IsTuple<T> = T extends [infer A] ? T : T extends [infer A, infer B] ? T : T extends [infer A, infer B, infer C] ? T : T extends [infer A, infer B, infer C, infer D] ? T : T extends [infer A, infer B, infer C, infer D, infer E] ? T : never; /** * 是否是渲染后可见的值。 * 渲染后不可见的值包括:`undefined`、`null`、`true`、`false`、空字符串。 * * @param value 值 * @returns 返回结果 * ```typescript * isVisibleValue(null) // => false * isVisibleValue(0) // => true * ``` */ export declare function isVisibleValue(value: any): boolean; declare interface Lazy extends MixedSchema { } declare function lazy<X extends MixedSchema>(fn: (value: any) => X): Lazy; declare interface Locale { mixed: MixedLocale; string: StringLocale; number: NumberLocale; date: DateLocale; boolean: BooleanLocale; object: ObjectLocale; array: ArrayLocale; } declare type LocaleValue<TExtra extends {} = {}> = string | LocaleValueFn<TExtra>; declare type LocaleValueFn<TExtra extends {} = {}> = (params: LocaleValueFnParams<TExtra>) => string; declare type LocaleValueFnParams<TExtra extends {} = {}> = { path: string; type: string; label?: string; value: any; originalValue: any; } & TExtra; /** Merge 2 types, properties types from the latter override the ones defined on the former type */ declare type Merge<M, N> = Omit<M, keyof N> & N; declare function mixed<T = any>(payload?: (schema: MixedSchema<T>) => MixedSchema<T>): MixedSchema<T>; declare interface MixedLocale { default: LocaleValue; required: LocaleValue; oneOf: LocaleValue<{ values: string; }>; notOneOf: LocaleValue<{ values: string; }>; notType: LocaleValue; defined: LocaleValue; } declare interface MixedSchema<T = any> { __isYupSchema__: true; type: 'mixed' | 'string' | 'number' | 'boolean' | 'object' | 'date' | 'array'; clone(): this; label(label: string): this; meta(meta: {}): this; describe(): SchemaDescription; /** @类型不友好 */ concat(schema: MixedSchema<any>): this; validate(value: T, options?: SchemaValidateOptions): Promise<T>; validateSync(value: T, options?: SchemaValidateOptions): T; /** * 验证增强,包括:对象顺序验证、返回结果包含错误信息。 */ validatePlus(value: T, options?: SchemaValidateOptions): Promise<{ error?: ValidationError; data: T; }>; /** * 验证增强,包括:对象顺序验证、返回结果包含错误信息。 */ validatePlusSync(value: T, options?: SchemaValidateOptions): { error?: ValidationError; data: T; }; /** @类型不友好 */ validateAt(path: string, value: any, options?: SchemaValidateOptions): Promise<any>; /** @类型不友好 */ validateSyncAt(path: string, value: any, options?: SchemaValidateOptions): any; isValid(value: T, options?: SchemaValidateOptions): Promise<boolean>; isValidSync(value: T, options?: SchemaValidateOptions): boolean; cast(value: T, options?: SchemaValidateOptions): any; isType(value: T): boolean; strict(isStrict?: boolean): this; strip(stripField?: boolean): this; withMutation<X>(fn: (schema: this) => X): X; default(value: T | (() => T)): this; default(): T | undefined; nullable(isNullable?: boolean): this; allowEmptyString(): this; required(message?: MixedLocale['required']): this; notRequired(): this; defined(): this; typeError(message: LocaleValue): this; oneOf(arrayOfValues: Record<any, T> | Refable<T>[], message?: MixedLocale['oneOf']): this; /** oneOf 的别名 */ enum(arrayOfValues: Record<any, T> | Refable<T>[], message?: MixedLocale['oneOf']): this; /** oneOf 的别名 */ equals(arrayOfValues: Record<any, T> | Refable<T>[], message?: MixedLocale['oneOf']): this; notOneOf(arrayOfValues: Refable<T>[], message?: MixedLocale['notOneOf']): this; when(builder: (value: T, schema: this) => this): this; when<V>(key: string, builder: { is: boolean | ((value: V) => boolean); then: GetSchema<T>; otherwise: GetSchema<T>; }): this; when<V>(key: string, builder: (value: V, schema: this) => this): this; test(test: SchemaTestOptions<this, T>['test'] | RegExp, message?: SchemaTestOptions<this, T>['message']): this; test<TParams extends {} = {}>(options: SchemaTestOptions<this, T, TParams>): this; transform(transformer: (this: this, currentValue: T, originalValue: T) => T): this; } declare function number<T extends number = number>(payload?: (schema: NumberSchema<T>) => NumberSchema<T>): NumberSchema<T>; declare interface NumberLocale { min: LocaleValue<{ min: number; }>; max: LocaleValue<{ max: number; }>; lessThan: LocaleValue<{ less: number; }>; moreThan: LocaleValue<{ more: number; }>; positive: LocaleValue<{ more: number; }>; negative: LocaleValue<{ less: number; }>; integer: LocaleValue; id: LocaleValue; positiveInteger: LocaleValue; negativeInteger: LocaleValue; nonPositive: LocaleValue; nonNegative: LocaleValue; nonPositiveInteger: LocaleValue; nonNegativeInteger: LocaleValue; } declare interface NumberSchema<T extends number = number> extends MixedSchema<T> { /** 最小值 */ min(limit: Refable<number>, message?: NumberLocale['min']): this; /** 最大值 */ max(limit: Refable<number>, message?: NumberLocale['max']): this; /** 应小于 */ lessThan(max: Refable<number>, message?: NumberLocale['lessThan']): this; /** 应大于 */ moreThan(min: Refable<number>, message?: NumberLocale['moreThan']): this; /** 正数 */ positive(message?: NumberLocale['positive']): this; /** 负数 */ negative(message?: NumberLocale['negative']): this; /** 整数 */ integer(message?: NumberLocale['integer']): this; /** ID (positiveInteger 的别名) */ id(message?: NumberLocale['id']): this; /** 正整数 */ positiveInteger(message?: NumberLocale['positiveInteger']): this; /** 负整数 */ negativeInteger(message?: NumberLocale['negativeInteger']): this; /** 非正数 */ nonPositive(message?: NumberLocale['nonPositive']): this; /** 非负数 */ nonNegative(message?: NumberLocale['nonNegative']): this; /** 非正整数 */ nonPositiveInteger(message?: NumberLocale['nonPositiveInteger']): this; /** 非负整数 */ nonNegativeInteger(message?: NumberLocale['nonNegativeInteger']): this; truncate(): this; round(type?: 'floor' | 'ceil' | 'trunc' | 'round'): this; } declare function object<T extends {} = {}>(fields?: GetObjectSchema<T> | ((schema: ObjectSchema<T>) => ObjectSchema<T>)): ObjectSchema<T>; declare interface ObjectLocale { noUnknown: LocaleValue<{ unknown: string; }>; } declare interface ObjectSchema<T extends {} = {}> extends MixedSchema<T> { shape(fields: GetObjectSchema<T>, noSortEdges?: Array<[string, string]>): this; from(fromKey: keyof T, toKey: string, alias?: boolean): this; noUnknown(onlyKnownKeys?: boolean, message?: ObjectLocale['noUnknown']): this; camelCase(): this; constantCase(): this; validateInOrder(value: T, options?: SchemaValidateOptions): Promise<T>; validateInOrderSync(value: T, options?: SchemaValidateOptions): T; } /** Gets keys of an object which are optional */ declare type OptionalKeys<T> = { [K in keyof T]-?: undefined extends { [K2 in keyof T]: K2; }[K] ? K : never; }[keyof T]; /** Pick all properties of given type in object type */ declare type PickProperties<T, P> = Pick< T, { [K in keyof T]: T[K] extends P ? K : never; }[keyof T] >; /** Essentials */ declare type Primitive = string | number | boolean | bigint | symbol | undefined | null; declare function printValue(value: string, quoteStrings: boolean): string; declare function reach<T extends {}>(schema: ObjectSchema<T>, path: string, value?: T, context?: {}): MixedSchema; declare interface Ref<T> { } declare function ref<X, T extends X>(path: string, options?: RefOptions<T>): Ref<X>; declare function ref<X, T extends X>(path: string, map?: NonNullable<RefOptions<T>['map']>): Ref<X>; declare type Refable<T> = T | Ref<T>; declare interface RefOptions<T> { map?: (value: any) => T; } /** * 独立渲染一个组件在 document.body 下,常应用于弹窗类组件。 * * @param Component 要渲染的组件 * @param initialProps 初始属性 * @param injectCallbacks 回调函数注入 */ export declare function renderComponent<TComponent extends React_2.ComponentType<any>>(Component: TComponent, initialProps: React_2.ComponentProps<TComponent>, injectCallbacks?: PickProperties<React_2.ComponentProps<TComponent>, Function | undefined>): RenderComponentResult<TComponent>; export declare function RenderComponentContainer(): React_2.FunctionComponentElement<{ children: any[]; }>; export declare interface RenderComponentResult<TComponent extends React_2.ComponentType<any>> { /** * 增量重渲染,新属性将与增量属性合并并成为新的增量属性。 * * @param props 新属性 */ incrementalRerender(props: Partial<React_2.ComponentProps<TComponent>>): void; /** * 部分重渲染,新属性将与初始属性合并。 * * @param props 新属性 */ partialRerender(props: Partial<React_2.ComponentProps<TComponent>>): void; /** * 完全重渲染,新属性将直接作为全部属性传给组件。 * * @param props 新属性 */ fullRerender(props: React_2.ComponentProps<TComponent>): void; /** * 销毁组件并移除 DOM 节点。 */ destroy(): void; } declare interface SchemaDescription { type: string; label: string; meta: {}; tests: Array<{ name: string; params: {}; }>; } declare interface SchemaTestOptions<TSchema, TValue, TParams extends {} = {}> { name: string; message: LocaleValue<TParams>; test: (this: { path: string; schema: TSchema; options: SchemaValidateOptions; parent: any; createError: (options: { path: string; message: LocaleValue; params?: TParams; }) => ValidationError; }, value: TValue) => boolean | Promise<boolean>; params?: TParams; exclusive?: boolean; } declare interface SchemaValidateOptions { strict?: boolean; abortEarly?: boolean; stripUnknown?: boolean; recursive?: boolean; context?: {}; } declare function setLocale(locale: DeepPartial<Locale>): void; declare function string<T extends string = string>(payload?: (schema: StringSchema<T>) => StringSchema<T>): StringSchema<T>; declare interface StringLocale { length: LocaleValue<{ length: number; }>; min: LocaleValue<{ min: number; }>; max: LocaleValue<{ max: number; }>; matches: LocaleValue<{ regex: RegExp; }>; email: LocaleValue<{ regex: RegExp; }>; url: LocaleValue<{ regex: RegExp; }>; trim: LocaleValue; lowercase: LocaleValue; uppercase: LocaleValue; chineseMobilePhoneNumber: LocaleValue; chineseIDCardNumber: LocaleValue; } declare interface StringSchema<T extends string = string> extends MixedSchema<T> { required(message?: MixedLocale['required']): this; length(limit: Refable<number>, message?: StringLocale['length']): this; min(limit: Refable<number>, message?: StringLocale['min']): this; max(limit: Refable<number>, message?: StringLocale['max']): this; matches(regex: RegExp, message?: StringLocale['matches']): this; matches(regex: RegExp, options?: { excludeEmptyString?: boolean; message?: StringLocale['matches']; }): this; email(message?: StringLocale['email']): this; url(message?: StringLocale['url']): this; ensure(): this; trim(message?: StringLocale['trim']): this; lowercase(message?: StringLocale['lowercase']): this; uppercase(message?: StringLocale['uppercase']): this; chineseMobilePhoneNumber(message?: StringLocale['chineseMobilePhoneNumber']): this; chineseIDCardNumber(message?: StringLocale['chineseIDCardNumber']): this; } export { useAsync } export { useAsyncFn } export { useAsyncRetry } export { useAudio } export { useBattery } export { useBeforeUnload } export { useBoolean } /** * 获取类名字符串。 * * @public * @param getClassValues 获取类名列表函数 * @param deps 当依赖变更时重新获取 * @returns 返回类名字符串 * @example * ```typescript * const [mini, setMini] = useState(true) * const buttonClassName = useClassName(() => [ * 'ui-btn', * mini && 'ui-btn_mini', * ], [mini]) * console.log(buttonClassName) // => 'ui-btn ui-btn_mini' * setMini(false) * console.log(buttonClassName) // => 'ui-btn' * ``` */ export declare function useClassName(getClassValues: () => any[] | undefined, deps: DependencyList): string | undefined; export { useClickAway } /** * 受控值。 * * @param props 组件的属性 * @param options 选项 */ export declare function useControllableValue<TProps extends {}, TDefaultValuePropName extends keyof TProps, TValuePropName extends keyof TProps, TCallbackPropName extends keyof TProps, TDefaultValue extends TProps[TValuePropName]>(props: TProps, options: UseControllableValueOptions<TProps, TDefaultValuePropName, TValuePropName, TCallbackPropName, TDefaultValue>): UseControllableValueResult<TProps, TValuePropName, TCallbackPropName, TDefaultValue>; export declare type UseControllableValueOptions<TProps, TDefaultValuePropName extends keyof TProps, TValuePropName extends keyof TProps, TCallbackPropName extends keyof TProps, TDefaultValue extends TProps[TValuePropName]> = { /** * 默认值的属性名。 */ defaultValuePropName: TDefaultValuePropName; /** * 值的属性名。 */ valuePropName: TValuePropName; /** * 值改变时的回调函数的属性名。 */ callbackPropName: TCallbackPropName; /** * 默认值。 */ defaultValue?: TDefaultValue; /** * 是否总是更新值。 */ alwaysUpdateValue?: boolean; }; export declare type UseControllableValueResult<TProps, TValuePropName extends keyof TProps, TCallbackPropName extends keyof TProps, TDefaultValue extends TProps[TValuePropName]> = [ TDefaultValue extends undefined ? TProps[TValuePropName] : Defined<TProps[TValuePropName]>, Defined<TProps[TCallbackPropName]>, () => void ]; export { useCookie } export { useCopyToClipboard } export { useCounter } export { useCss } export { useCustomCompareEffect } export { useDebounce } export { useDeepCompareEffect } export { useDefault } export { useDrop } export { useDropArea } export { useEffectOnce } export { useEnsuredForwardedRef } /** * 获取运行环境信息。 * * @returns 返回运行环境信息 */ export declare function useEnvironment(): GetEnvironmentResult; export { useError } export { useEvent } export { useFavicon } export { useFirstMountState } export { useFullscreen } export { useGeolocation } export { useGetSet } export { useGetSetState } export { useHarmonicIntervalFn } export { useHash } export declare function useHover(options?: UseHoverOptions): UseHoverResult; export { useHoverDirty } export declare interface UseHoverOptions { /** * 悬停开始后多久开启悬停态,单位为毫秒。 * * @default 50 */ hoverStartDelay?: number; /** * 悬停结束后多久关闭悬停态,单位为毫秒。 * * @default 400 */ hoverEndDelay?: number; } export declare interface UseHoverResult { /** * 当前的悬停态。 */ hovering: boolean; /** * 开始悬停。 */ startHover: () => any; /** * 结束悬停。 */ endHover: () => any; } export { useIdle } export { useIntersection } /** * 以一定的间隔时间重复调用某函数,并返回调用结果。 * * @param callback 回调函数 * @param delay 间隔时间(毫秒),非数字时将不调用或停止调用函数 * @param duration 持续时间(毫秒) * @returns 返回调用结果 */ export declare function useInterval<TResult>(callback: () => TResult, delay: any, duration?: number): UseIntervalResult<TResult>; export declare type UseIntervalResult<TResult> = [ TResult | undefined, { start: (delay?: number, duration?: number) => void; stop: () => void; } ]; export { useIsomorphicLayoutEffect } export { useKey } export { useKeyPress } export { useKeyPressEvent } export { useLatest } export { useLifecycles } export { useList } /** * 数据加载。 * * @public * @param service 数据加载服务 * @param deps 依赖若发生变化则从首页重新加载数据 * @returns 返回结果 */ export declare function useLoadMore<TItem>(service: UseLoadMoreService<TItem>, deps: DependencyList): UseLoadMoreResult<TItem>; /** * 加载更多结果。 * * @public */ export declare interface UseLoadMoreResult<TItem> { /** 当前页码 */ pageNumber: number; /** 已加载的数据 */ data?: TItem[]; /** 总数据量 */ total: number; /** 是否正在加载数据 */ loading: boolean; /** 是否正在加载初始数据 */ initialLoading: boolean; /** 是否正在加载更多数据 */ incrementalLoading: boolean; /** 数据是否已加载完 */ noMore: boolean; /** 加载更多数据 */ loadMore: () => Promise<void>; /** 从首页重新加载数据 */ reload: () => Promise<void>; /** 设置数据 */ setData: Dispatch<SetStateAction<TItem[]>>; } /** * 加载服务。 * * @public */ export declare interface UseLoadMoreService<TItem> { (payload: UseLoadMoreServicePayload): Promise<UseLoadMoreServiceResult<TItem>>; } /** * 加载服务载荷。 * * @public */ export declare interface UseLoadMoreServicePayload { /** 已加载的数据量 */ offset: number; /** 当前页码 */ pageNumber: number; } /** * 加载服务结果。 * * @public */ export declare type UseLoadMoreServiceResult<TItem> = TItem[] | { /** 总数据量 */ total: number; /** 当前页数据 */ data: TItem[]; } | { /** 总数据量 */ total: number; /** 当前页数据 */ list: TItem[]; }; /** * 已兼容小程序。 */ export declare function useLocalStorage<S>(key: string): UseLocalStorageResult<S | undefined>; /** * 已兼容小程序。 */ export declare function useLocalStorage<S>(key: string, initialState: S): UseLocalStorageResult<S>; export declare type UseLocalStorageResult<S> = readonly [ S, Dispatch<SetStateAction<S>>, () => void ]; export { useLocation } export { useLockBodyScroll } export { useLogger } export { useLongPress } export { useMap } export { useMeasure } export { useMedia } export { useMediaDevices } export { useMediatedState } export { useMethods } export { useMotion } export { useMount } export { useMountedState } export { useMouse } export { useMouseHovered } export { useMouseWheel } export { useMultiStateValidator } export { useNetworkState } export { useNumber } export { useObservable } export { useOrientation } export { usePageLeave } export { usePermission } export { usePrevious } export { usePreviousDistinct } export { usePromise } export { useQueue } export { useRaf } export { useRafLoop } export { useRafState } /** * 立即触发一次回调,并且每当到达页面底部时触发回调。 * * @public * @param callback 回调 * @param offset 触底偏移量 * @returns 返回 */ export declare function useReachBottom<T extends HTMLElement>(callback: () => any, offset?: number): MutableRefObject<T>; export { useRendersCount } export { useScratch } export { useScroll } export { useScrollbarWidth } export { useScrolling } /** * 滚动数据加载。 * * @public * @param service 数据加载服务 * @param deps 依赖,依赖若发生变化则从首页重新加载数据 * @param options 滚动选项 * @returns 返回结果 */ export declare function useScrollLoadMore<TItem>(service: UseLoadMoreService<TItem>, deps: DependencyList, options?: UseScrollLoadMoreOptions): UseLoadMoreResult<TItem>; /** * @public */ export declare interface UseScrollLoadMoreOptions { /** * 距离底部偏移量(单位:像素),小于该值时触发加载。 * * @default 0 */ offset?: number; /** * 滚动容器,默认以窗口作为滚动容器。 * * @default window */ containerRef?: ReturnType<typeof useReachBottom>; } export { useSearchParam } export { useSessionStorage } export { useSet } export { useSetState } export { useShallowCompareEffect } export { useSize } export { useSlider } export { useSpeech } /** * 暂存状态。 */ export declare function useStaged<T>(value: T, setValue: (value: T) => void): [ T, { set: (value: T) => void; commit: () => void; reset: () => void; } ]; export { useStartTyping } export { useStateList } export { useStateValidator } /** * 给 useState 插上依赖的翅膀。依赖变化时会更新状态。 * * @param state 状态 * @param deps 依赖 * @returns 返回结果同 useState */ export declare function useStateWithDeps<S>(state: S | (() => S), deps: React_2.DependencyList): [S, React_2.Dispatch<React_2.SetStateAction<S>>]; export { useStateWithHistory } export { useThrottle } export { useThrottleFn } export { useTimeout } export { useTimeoutFn } export { useTitle } /** * 布尔值切换器。 * * @public * @param initialValue 初始值 * @returns 返回结果和操作 * @example * ```typescript * const [value, toggle] = useToggle(false) // value: false * toggle() // value: true * toggle.set(false) // value: false * toggle.true() // => value: true * toggle.false() // => value: false * ``` */ export declare function useToggle(initialValue: boolean): UseToggleResult; /** * @public */ export declare type UseToggleResult = [ boolean, { (): void; set(value: boolean): void; true(): void; false(): void; } ]; export { useTween } export { useUnmount } export { useUnmountPromise } export { useUpdate } export { useUpdateEffect } export { useUpsert } export declare function useValidator<T>(data: T, dataDeps: DependencyList, schema: UseValidatorSchema<T>, schemaDeps?: DependencyList): UseValidatorResult<T>; export declare function useValidator<T>(data: T, schema: UseValidatorSchema<T>, schemaDeps?: DependencyList): UseValidatorResult<T>; export declare interface UseValidatorResult<T> { data: T; valid: boolean; error?: yup.ValidationError | undefined; } export declare type UseValidatorSchema<T> = (yup: typeof yup) => T extends string ? yup.StringSchema<T> : T extends number ? yup.NumberSchema<T> : T extends boolean ? yup.BooleanSchema<T> : T extends Array<infer X> ? yup.ArraySchema<X> : T extends AnyObject_2 ? yup.ObjectSchema<T> | yup.GetObjectSchema<T> : yup.MixedSchema<T>; export { useVibrate } export { useVideo } export { useWindowScroll } export { useWindowSize } declare class ValidationError { value: any; path: string; type: string; errors: string[]; inner: any[]; message: string; stack?: any; static isError<T>(err: T): boolean; static formatError(message: LocaleValue, params: LocaleValueFnParams): string; } declare namespace yup { export { addMethod, array, ArraySchema, boolean, BooleanSchema, date, DateSchema, getLocale, lazy, Lazy, LocaleValueFnParams, LocaleValueFn, LocaleValue, MixedLocale, StringLocale, NumberLocale, DateLocale, BooleanLocale, ObjectLocale, ArrayLocale, Locale, mixed, SchemaDescription, SchemaValidateOptions, SchemaTestOptions, MixedSchema, GetSchema, GetObjectSchema, number, NumberSchema, object, ObjectSchema, printValue, reach, ref, Ref, Refable, RefOptions, setLocale, string, StringSchema, ValidationError } } export { }