@yamada-ui/utils 0.1.1 → 0.1.2

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.
@@ -6,7 +6,7 @@ declare const isNumeric: (value: any) => boolean;
6
6
  declare const isString: (value: any) => value is string;
7
7
  declare const isUndefined: (value: any) => value is undefined;
8
8
  declare const isNull: (value: any) => value is null;
9
- declare const isObject: <T extends Dict<any>>(value: any) => value is T;
9
+ declare const isObject: <T extends Dict>(value: any) => value is T;
10
10
  declare const isArray: <T extends any[]>(value: any) => value is T;
11
11
  declare const isEmpty: (value: any) => boolean;
12
12
  declare const isFunction: <T extends Function = Function>(value: any) => value is T;
@@ -118,6 +118,48 @@ var useUpdateEffect = (callback, deps) => {
118
118
  };
119
119
  }, []);
120
120
  };
121
+ var useAsync = (func, deps = []) => {
122
+ const [state, callback] = useAsyncFunc(func, deps, { loading: true });
123
+ React.useEffect(() => {
124
+ callback();
125
+ }, [callback]);
126
+ return state;
127
+ };
128
+ var useAsyncFunc = (func, deps = [], initialState = { loading: false }) => {
129
+ const lastCallId = React.useRef(0);
130
+ const isMounted = useIsMounted();
131
+ const [state, setState] = React.useState(initialState);
132
+ const callback = React.useCallback((...args) => {
133
+ const callId = ++lastCallId.current;
134
+ if (!state.loading) {
135
+ setState((prevState) => ({ ...prevState, loading: true }));
136
+ }
137
+ return func(...args).then(
138
+ (value) => {
139
+ if (isMounted.current && callId === lastCallId.current)
140
+ setState({ value, loading: false });
141
+ return value;
142
+ },
143
+ (error) => {
144
+ if (isMounted.current && callId === lastCallId.current)
145
+ setState({ error, loading: false });
146
+ return error;
147
+ }
148
+ );
149
+ }, deps);
150
+ return [state, callback];
151
+ };
152
+ var useAsyncRetry = (func, deps = []) => {
153
+ const [attempt, setAttempt] = React.useState(0);
154
+ const state = useAsync(func, [...deps, attempt]);
155
+ const stateLoading = state.loading;
156
+ const retry = React.useCallback(() => {
157
+ if (stateLoading)
158
+ return;
159
+ setAttempt((currentAttempt) => currentAttempt + 1);
160
+ }, [...deps, stateLoading]);
161
+ return { ...state, retry };
162
+ };
121
163
 
122
164
  // src/color.ts
123
165
  import { toHex, parseToRgba, transparentize, mix, darken, lighten } from "color2k";
@@ -389,6 +431,9 @@ export {
389
431
  useMergeRefs,
390
432
  useCallbackRef,
391
433
  useUpdateEffect,
434
+ useAsync,
435
+ useAsyncFunc,
436
+ useAsyncRetry,
392
437
  getColor,
393
438
  lightenColor,
394
439
  darkenColor,
package/dist/color.mjs CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  tintColor,
11
11
  toneColor,
12
12
  transparentizeColor
13
- } from "./chunk-HUEOJZVC.mjs";
13
+ } from "./chunk-VPOQGCMS.mjs";
14
14
  import "./chunk-SLJ4M7XC.mjs";
15
15
  import "./chunk-VYMGBE25.mjs";
16
16
  import "./chunk-BZAW2D6U.mjs";
package/dist/function.mjs CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  handlerAll,
4
4
  noop,
5
5
  runIfFunc
6
- } from "./chunk-HUEOJZVC.mjs";
6
+ } from "./chunk-VPOQGCMS.mjs";
7
7
  import "./chunk-SLJ4M7XC.mjs";
8
8
  import "./chunk-VYMGBE25.mjs";
9
9
  import "./chunk-BZAW2D6U.mjs";
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { Dict, DynamicRecord, Length, Path, StringLiteral, Union } from './index
2
2
  export { cast, isArray, isEmpty, isFunction, isNotNumber, isNull, isNumber, isNumeric, isObject, isString, isUndefined, isUnit } from './assertion.js';
3
3
  export { assignAfter, filterObject, filterUndefined, flattenObject, getMemoizedObject, getObject, keysFormObject, memoizeObject, merge, objectFromEntries, omitObject, pickObject, replaceObject, splitObject } from './object.js';
4
4
  export { funcAll, handlerAll, noop, runIfFunc } from './function.js';
5
- export { DOMAttributes, MaybeRenderProp, PropGetter, RequiredPropGetter, assignRef, createContext, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect } from './react.js';
5
+ export { AsyncFnReturn, AsyncState, AsyncStateRetry, DOMAttributes, FunctionReturningPromise, MaybeRenderProp, PromiseType, PropGetter, RequiredPropGetter, assignRef, createContext, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useAsync, useAsyncFunc, useAsyncRetry, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect } from './react.js';
6
6
  export { FocusableElement, ariaAttr, createdDom, dataAttr, getActiveElement, getAllFocusable, getEventRelatedTarget, getOwnerDocument, getOwnerWindow, getPlatform, hasNegativeTabIndex, hasTabIndex, isActiveElement, isApple, isContains, isContentEditable, isDisabled, isElement, isFocusable, isHTMLElement, isHidden, isMac, isSafari, isTabbable, platform, vendor } from './dom.js';
7
7
  export { escape } from './string.js';
8
8
  export { Operand, calc } from './calc.js';
package/dist/index.js CHANGED
@@ -123,6 +123,9 @@ __export(src_exports, {
123
123
  toPrecision: () => toPrecision,
124
124
  toneColor: () => toneColor,
125
125
  transparentizeColor: () => transparentizeColor,
126
+ useAsync: () => useAsync,
127
+ useAsyncFunc: () => useAsyncFunc,
128
+ useAsyncRetry: () => useAsyncRetry,
126
129
  useCallbackRef: () => useCallbackRef,
127
130
  useIsMounted: () => useIsMounted,
128
131
  useMergeRefs: () => useMergeRefs,
@@ -392,6 +395,48 @@ var useUpdateEffect = (callback, deps) => {
392
395
  };
393
396
  }, []);
394
397
  };
398
+ var useAsync = (func, deps = []) => {
399
+ const [state, callback] = useAsyncFunc(func, deps, { loading: true });
400
+ React.useEffect(() => {
401
+ callback();
402
+ }, [callback]);
403
+ return state;
404
+ };
405
+ var useAsyncFunc = (func, deps = [], initialState = { loading: false }) => {
406
+ const lastCallId = React.useRef(0);
407
+ const isMounted = useIsMounted();
408
+ const [state, setState] = React.useState(initialState);
409
+ const callback = React.useCallback((...args) => {
410
+ const callId = ++lastCallId.current;
411
+ if (!state.loading) {
412
+ setState((prevState) => ({ ...prevState, loading: true }));
413
+ }
414
+ return func(...args).then(
415
+ (value) => {
416
+ if (isMounted.current && callId === lastCallId.current)
417
+ setState({ value, loading: false });
418
+ return value;
419
+ },
420
+ (error) => {
421
+ if (isMounted.current && callId === lastCallId.current)
422
+ setState({ error, loading: false });
423
+ return error;
424
+ }
425
+ );
426
+ }, deps);
427
+ return [state, callback];
428
+ };
429
+ var useAsyncRetry = (func, deps = []) => {
430
+ const [attempt, setAttempt] = React.useState(0);
431
+ const state = useAsync(func, [...deps, attempt]);
432
+ const stateLoading = state.loading;
433
+ const retry = React.useCallback(() => {
434
+ if (stateLoading)
435
+ return;
436
+ setAttempt((currentAttempt) => currentAttempt + 1);
437
+ }, [...deps, stateLoading]);
438
+ return { ...state, retry };
439
+ };
395
440
 
396
441
  // src/dom.ts
397
442
  var createdDom = () => !!(typeof window !== "undefined" && window.document && window.document.createElement);
@@ -787,6 +832,9 @@ var addPointerEvent = (target, type, cb, options) => addDomEvent(target, type, w
787
832
  toPrecision,
788
833
  toneColor,
789
834
  transparentizeColor,
835
+ useAsync,
836
+ useAsyncFunc,
837
+ useAsyncRetry,
790
838
  useCallbackRef,
791
839
  useIsMounted,
792
840
  useMergeRefs,
package/dist/index.mjs CHANGED
@@ -39,13 +39,16 @@ import {
39
39
  tintColor,
40
40
  toneColor,
41
41
  transparentizeColor,
42
+ useAsync,
43
+ useAsyncFunc,
44
+ useAsyncRetry,
42
45
  useCallbackRef,
43
46
  useIsMounted,
44
47
  useMergeRefs,
45
48
  useSafeLayoutEffect,
46
49
  useUnmountEffect,
47
50
  useUpdateEffect
48
- } from "./chunk-HUEOJZVC.mjs";
51
+ } from "./chunk-VPOQGCMS.mjs";
49
52
  import "./chunk-SLJ4M7XC.mjs";
50
53
  import {
51
54
  clampNumber,
@@ -210,6 +213,9 @@ export {
210
213
  toPrecision,
211
214
  toneColor,
212
215
  transparentizeColor,
216
+ useAsync,
217
+ useAsyncFunc,
218
+ useAsyncRetry,
213
219
  useCallbackRef,
214
220
  useIsMounted,
215
221
  useMergeRefs,
package/dist/object.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { Dict } from './index.types.js';
2
2
 
3
- declare const omitObject: <T extends Dict<any>, K extends keyof T>(obj: T, keys: K[]) => Omit<T, K>;
4
- declare const pickObject: <T extends Dict<any>, K extends keyof T>(obj: T, keys: K[]) => { [P in K]: T[P]; };
5
- declare const splitObject: <T extends Dict<any>, K extends keyof T>(obj: T, keys: K[]) => [{ [P in K]: T[P]; }, Omit<T, K>];
6
- declare const filterObject: <T extends Dict<any>, K extends Dict<any>>(obj: T, func: (key: keyof T, value: T[keyof T], obj: T) => boolean) => K;
7
- declare const filterUndefined: <T extends Dict<any>>(obj: T) => T;
8
- declare const merge: <T extends Dict<any>>(target: any, source: any, overrideArray?: boolean) => T;
9
- declare const flattenObject: <T extends Dict<any>>(obj: any, maxDepth?: number) => T;
10
- declare const objectFromEntries: <T extends Dict<any>>(entries: any[][]) => T;
11
- declare const keysFormObject: <T extends Dict<any>>(obj: T) => (keyof T)[];
3
+ declare const omitObject: <T extends Dict, K extends keyof T>(obj: T, keys: K[]) => Omit<T, K>;
4
+ declare const pickObject: <T extends Dict, K extends keyof T>(obj: T, keys: K[]) => { [P in K]: T[P]; };
5
+ declare const splitObject: <T extends Dict, K extends keyof T>(obj: T, keys: K[]) => [{ [P in K]: T[P]; }, Omit<T, K>];
6
+ declare const filterObject: <T extends Dict, K extends Dict>(obj: T, func: (key: keyof T, value: T[keyof T], obj: T) => boolean) => K;
7
+ declare const filterUndefined: <T extends Dict>(obj: T) => T;
8
+ declare const merge: <T extends Dict>(target: any, source: any, overrideArray?: boolean) => T;
9
+ declare const flattenObject: <T extends Dict>(obj: any, maxDepth?: number) => T;
10
+ declare const objectFromEntries: <T extends Dict>(entries: any[][]) => T;
11
+ declare const keysFormObject: <T extends Dict>(obj: T) => (keyof T)[];
12
12
  declare const replaceObject: <T extends unknown>(objOrArray: T, callBack: (value: any) => any) => T;
13
13
  declare const getObject: (obj: Dict, path: string | number, fallback?: any, i?: number) => any;
14
14
  declare const memoizeObject: (func: typeof getObject) => (obj: Dict, path: string | number, fallback?: any, i?: number) => any;
package/dist/object.mjs CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  pickObject,
14
14
  replaceObject,
15
15
  splitObject
16
- } from "./chunk-HUEOJZVC.mjs";
16
+ } from "./chunk-VPOQGCMS.mjs";
17
17
  import "./chunk-SLJ4M7XC.mjs";
18
18
  import "./chunk-VYMGBE25.mjs";
19
19
  import "./chunk-BZAW2D6U.mjs";
package/dist/react.d.ts CHANGED
@@ -40,5 +40,55 @@ declare const mergeRefs: <T extends unknown = any>(...refs: (ReactRef<T> | undef
40
40
  declare const useMergeRefs: <T extends unknown = any>(...refs: (ReactRef<T> | undefined)[]) => (node: T | null) => void;
41
41
  declare const useCallbackRef: <T extends (...args: any[]) => any>(callback: T | undefined, deps?: React.DependencyList) => T;
42
42
  declare const useUpdateEffect: (callback: React.EffectCallback, deps: React.DependencyList) => void;
43
+ type FunctionReturningPromise = (...args: any[]) => Promise<any>;
44
+ declare const useAsync: <T extends FunctionReturningPromise>(func: T, deps?: React.DependencyList) => StateFromFunctionReturningPromise<T>;
45
+ type AsyncState<T> = {
46
+ loading: boolean;
47
+ error?: undefined;
48
+ value?: undefined;
49
+ } | {
50
+ loading: true;
51
+ error?: Error | undefined;
52
+ value?: T;
53
+ } | {
54
+ loading: false;
55
+ error: Error;
56
+ value?: undefined;
57
+ } | {
58
+ loading: false;
59
+ error?: undefined;
60
+ value: T;
61
+ };
62
+ type PromiseType<P extends Promise<any>> = P extends Promise<infer T> ? T : never;
63
+ type StateFromFunctionReturningPromise<T extends FunctionReturningPromise> = AsyncState<PromiseType<ReturnType<T>>>;
64
+ type AsyncFnReturn<T extends FunctionReturningPromise = FunctionReturningPromise> = [
65
+ StateFromFunctionReturningPromise<T>,
66
+ T
67
+ ];
68
+ declare const useAsyncFunc: <T extends FunctionReturningPromise>(func: T, deps?: React.DependencyList, initialState?: StateFromFunctionReturningPromise<T>) => AsyncFnReturn<T>;
69
+ type AsyncStateRetry<T> = AsyncState<T> & {
70
+ retry(): void;
71
+ };
72
+ declare const useAsyncRetry: <T>(func: () => Promise<T>, deps?: React.DependencyList) => {
73
+ retry: () => void;
74
+ loading: boolean;
75
+ error?: undefined;
76
+ value?: undefined;
77
+ } | {
78
+ retry: () => void;
79
+ loading: false;
80
+ error: Error;
81
+ value?: undefined;
82
+ } | {
83
+ retry: () => void;
84
+ loading: true;
85
+ error?: Error | undefined;
86
+ value?: T | undefined;
87
+ } | {
88
+ retry: () => void;
89
+ loading: false;
90
+ error?: undefined;
91
+ value: T;
92
+ };
43
93
 
44
- export { DOMAttributes, MaybeRenderProp, PropGetter, RequiredPropGetter, assignRef, createContext, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect };
94
+ export { AsyncFnReturn, AsyncState, AsyncStateRetry, DOMAttributes, FunctionReturningPromise, MaybeRenderProp, PromiseType, PropGetter, RequiredPropGetter, assignRef, createContext, cx, findChildren, getValidChildren, includesChildren, isRefObject, isValidElement, mergeRefs, omitChildren, pickChildren, useAsync, useAsyncFunc, useAsyncRetry, useCallbackRef, useIsMounted, useMergeRefs, useSafeLayoutEffect, useUnmountEffect, useUpdateEffect };
package/dist/react.js CHANGED
@@ -41,6 +41,9 @@ __export(react_exports, {
41
41
  mergeRefs: () => mergeRefs,
42
42
  omitChildren: () => omitChildren,
43
43
  pickChildren: () => pickChildren,
44
+ useAsync: () => useAsync,
45
+ useAsyncFunc: () => useAsyncFunc,
46
+ useAsyncRetry: () => useAsyncRetry,
44
47
  useCallbackRef: () => useCallbackRef,
45
48
  useIsMounted: () => useIsMounted,
46
49
  useMergeRefs: () => useMergeRefs,
@@ -154,6 +157,48 @@ var useUpdateEffect = (callback, deps) => {
154
157
  };
155
158
  }, []);
156
159
  };
160
+ var useAsync = (func, deps = []) => {
161
+ const [state, callback] = useAsyncFunc(func, deps, { loading: true });
162
+ React.useEffect(() => {
163
+ callback();
164
+ }, [callback]);
165
+ return state;
166
+ };
167
+ var useAsyncFunc = (func, deps = [], initialState = { loading: false }) => {
168
+ const lastCallId = React.useRef(0);
169
+ const isMounted = useIsMounted();
170
+ const [state, setState] = React.useState(initialState);
171
+ const callback = React.useCallback((...args) => {
172
+ const callId = ++lastCallId.current;
173
+ if (!state.loading) {
174
+ setState((prevState) => ({ ...prevState, loading: true }));
175
+ }
176
+ return func(...args).then(
177
+ (value) => {
178
+ if (isMounted.current && callId === lastCallId.current)
179
+ setState({ value, loading: false });
180
+ return value;
181
+ },
182
+ (error) => {
183
+ if (isMounted.current && callId === lastCallId.current)
184
+ setState({ error, loading: false });
185
+ return error;
186
+ }
187
+ );
188
+ }, deps);
189
+ return [state, callback];
190
+ };
191
+ var useAsyncRetry = (func, deps = []) => {
192
+ const [attempt, setAttempt] = React.useState(0);
193
+ const state = useAsync(func, [...deps, attempt]);
194
+ const stateLoading = state.loading;
195
+ const retry = React.useCallback(() => {
196
+ if (stateLoading)
197
+ return;
198
+ setAttempt((currentAttempt) => currentAttempt + 1);
199
+ }, [...deps, stateLoading]);
200
+ return { ...state, retry };
201
+ };
157
202
  // Annotate the CommonJS export names for ESM import in node:
158
203
  0 && (module.exports = {
159
204
  assignRef,
@@ -167,6 +212,9 @@ var useUpdateEffect = (callback, deps) => {
167
212
  mergeRefs,
168
213
  omitChildren,
169
214
  pickChildren,
215
+ useAsync,
216
+ useAsyncFunc,
217
+ useAsyncRetry,
170
218
  useCallbackRef,
171
219
  useIsMounted,
172
220
  useMergeRefs,
package/dist/react.mjs CHANGED
@@ -10,13 +10,16 @@ import {
10
10
  mergeRefs,
11
11
  omitChildren,
12
12
  pickChildren,
13
+ useAsync,
14
+ useAsyncFunc,
15
+ useAsyncRetry,
13
16
  useCallbackRef,
14
17
  useIsMounted,
15
18
  useMergeRefs,
16
19
  useSafeLayoutEffect,
17
20
  useUnmountEffect,
18
21
  useUpdateEffect
19
- } from "./chunk-HUEOJZVC.mjs";
22
+ } from "./chunk-VPOQGCMS.mjs";
20
23
  import "./chunk-SLJ4M7XC.mjs";
21
24
  import "./chunk-VYMGBE25.mjs";
22
25
  import "./chunk-BZAW2D6U.mjs";
@@ -37,6 +40,9 @@ export {
37
40
  mergeRefs,
38
41
  omitChildren,
39
42
  pickChildren,
43
+ useAsync,
44
+ useAsyncFunc,
45
+ useAsyncRetry,
40
46
  useCallbackRef,
41
47
  useIsMounted,
42
48
  useMergeRefs,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yamada-ui/utils",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Yamada UI utils",
5
5
  "keywords": [
6
6
  "utils",