@a-type/ui 3.0.16 → 3.0.17
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/dist/cjs/hooks/index.d.ts +1 -0
- package/dist/cjs/hooks/index.js +1 -0
- package/dist/cjs/hooks/index.js.map +1 -1
- package/dist/cjs/hooks/useStorage.js +20 -12
- package/dist/cjs/hooks/useStorage.js.map +1 -1
- package/dist/esm/hooks/index.d.ts +1 -0
- package/dist/esm/hooks/index.js +1 -0
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/hooks/useStorage.js +20 -12
- package/dist/esm/hooks/useStorage.js.map +1 -1
- package/package.json +2 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useStorage.ts +18 -11
|
@@ -6,6 +6,7 @@ export * from './useOverrideTheme.js';
|
|
|
6
6
|
export * from './useSize.js';
|
|
7
7
|
export * from './useStableCallback.js';
|
|
8
8
|
export * from './useStayScrolledToBottom.js';
|
|
9
|
+
export * from './useStorage.js';
|
|
9
10
|
export * from './useTitleBarColor.js';
|
|
10
11
|
export * from './useToggle.js';
|
|
11
12
|
export * from './useVisualViewportOffset.js';
|
package/dist/cjs/hooks/index.js
CHANGED
|
@@ -23,6 +23,7 @@ __exportStar(require("./useOverrideTheme.js"), exports);
|
|
|
23
23
|
__exportStar(require("./useSize.js"), exports);
|
|
24
24
|
__exportStar(require("./useStableCallback.js"), exports);
|
|
25
25
|
__exportStar(require("./useStayScrolledToBottom.js"), exports);
|
|
26
|
+
__exportStar(require("./useStorage.js"), exports);
|
|
26
27
|
__exportStar(require("./useTitleBarColor.js"), exports);
|
|
27
28
|
__exportStar(require("./useToggle.js"), exports);
|
|
28
29
|
__exportStar(require("./useVisualViewportOffset.js"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,+CAA6B;AAC7B,yDAAuC;AACvC,+DAA6C;AAC7C,wDAAsC;AACtC,iDAA+B;AAC/B,+DAA6C;AAC7C,qDAAmC;AACnC,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,+CAA6B;AAC7B,yDAAuC;AACvC,+DAA6C;AAC7C,kDAAgC;AAChC,wDAAsC;AACtC,iDAA+B;AAC/B,+DAA6C;AAC7C,qDAAmC;AACnC,iDAA+B"}
|
|
@@ -6,32 +6,40 @@ const react_1 = require("react");
|
|
|
6
6
|
const valtio_1 = require("valtio");
|
|
7
7
|
function makeUseStorage(storage, cache, name = storage.constructor.name) {
|
|
8
8
|
return function useStorage(key, initialValue, writeInitialValue = false) {
|
|
9
|
-
var _a;
|
|
9
|
+
var _a, _b;
|
|
10
10
|
// using useMemo to execute synchronous code in render just once.
|
|
11
11
|
// this hook comes before useLocalStorageCache because we want to load
|
|
12
12
|
// values into the cache before accessing them.
|
|
13
|
-
(0, react_1.useMemo)(() => {
|
|
13
|
+
const stored = (0, react_1.useMemo)(() => {
|
|
14
14
|
if (typeof window === 'undefined')
|
|
15
15
|
return;
|
|
16
16
|
try {
|
|
17
17
|
const stored = storage.getItem(key);
|
|
18
|
-
if (stored)
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
if (stored === '"undefined"')
|
|
19
|
+
return undefined;
|
|
20
|
+
if (stored === null)
|
|
21
|
+
return undefined;
|
|
22
|
+
return JSON.parse(stored);
|
|
21
23
|
}
|
|
22
24
|
catch (err) {
|
|
23
|
-
console.error(`Error
|
|
25
|
+
console.error(`Error parsing use-${name} value for ${key}: ${err}`);
|
|
24
26
|
storage.removeItem(key);
|
|
25
27
|
}
|
|
26
28
|
}, [key]);
|
|
29
|
+
(0, react_1.useEffect)(() => {
|
|
30
|
+
if (stored !== undefined) {
|
|
31
|
+
cache[key] = stored;
|
|
32
|
+
}
|
|
33
|
+
}, [stored, key]);
|
|
27
34
|
const snapshot = (0, valtio_1.useSnapshot)(cache);
|
|
28
|
-
const storedValue = ((_a = snapshot[key]) !== null && _a !== void 0 ? _a : initialValue);
|
|
29
|
-
const hasValue = snapshot[key] !== undefined;
|
|
35
|
+
const storedValue = ((_b = (_a = snapshot[key]) !== null && _a !== void 0 ? _a : stored) !== null && _b !== void 0 ? _b : initialValue);
|
|
30
36
|
(0, react_1.useEffect)(() => {
|
|
31
|
-
if (
|
|
37
|
+
if (typeof window === 'undefined')
|
|
38
|
+
return;
|
|
39
|
+
if (snapshot[key] === undefined && writeInitialValue) {
|
|
32
40
|
storage.setItem(key, JSON.stringify(initialValue));
|
|
33
41
|
}
|
|
34
|
-
}, [
|
|
42
|
+
}, [!!snapshot[key], initialValue, writeInitialValue, key]);
|
|
35
43
|
// Return a wrapped version of useState's setter function that
|
|
36
44
|
// persists the new value to localStorage. It's throttled to prevent
|
|
37
45
|
// frequent writes to localStorage, which can be costly.
|
|
@@ -66,8 +74,8 @@ const mockStorage = {
|
|
|
66
74
|
return null;
|
|
67
75
|
},
|
|
68
76
|
};
|
|
69
|
-
exports.useLocalStorage = makeUseStorage(typeof
|
|
70
|
-
exports.useSessionStorage = makeUseStorage(typeof
|
|
77
|
+
exports.useLocalStorage = makeUseStorage(typeof window === 'undefined' ? mockStorage : localStorage, (0, valtio_1.proxy)({}), 'LocalStorage');
|
|
78
|
+
exports.useSessionStorage = makeUseStorage(typeof window === 'undefined' ? mockStorage : sessionStorage, (0, valtio_1.proxy)({}), 'SessionStorage');
|
|
71
79
|
function throttle(func, wait, options) {
|
|
72
80
|
let previous = 0;
|
|
73
81
|
return function (...args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorage.js","sourceRoot":"","sources":["../../../src/hooks/useStorage.ts"],"names":[],"mappings":";;;AAAA,iCAA2C;AAC3C,mCAA4C;AAE5C,SAAS,cAAc,CACtB,OAAgB,EAChB,KAA0B,EAC1B,OAAe,OAAO,CAAC,WAAW,CAAC,IAAI;IAEvC,OAAO,SAAS,UAAU,CACzB,GAAW,EACX,YAAe,EACf,iBAAiB,GAAG,KAAK;;QAEzB,iEAAiE;QACjE,sEAAsE;QACtE,+CAA+C;QAC/C,IAAA,eAAO,EAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"useStorage.js","sourceRoot":"","sources":["../../../src/hooks/useStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export * from './useOverrideTheme.js';
|
|
|
6
6
|
export * from './useSize.js';
|
|
7
7
|
export * from './useStableCallback.js';
|
|
8
8
|
export * from './useStayScrolledToBottom.js';
|
|
9
|
+
export * from './useStorage.js';
|
|
9
10
|
export * from './useTitleBarColor.js';
|
|
10
11
|
export * from './useToggle.js';
|
|
11
12
|
export * from './useVisualViewportOffset.js';
|
package/dist/esm/hooks/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export * from './useOverrideTheme.js';
|
|
|
7
7
|
export * from './useSize.js';
|
|
8
8
|
export * from './useStableCallback.js';
|
|
9
9
|
export * from './useStayScrolledToBottom.js';
|
|
10
|
+
export * from './useStorage.js';
|
|
10
11
|
export * from './useTitleBarColor.js';
|
|
11
12
|
export * from './useToggle.js';
|
|
12
13
|
export * from './useVisualViewportOffset.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
|
@@ -3,32 +3,40 @@ import { useEffect, useMemo } from 'react';
|
|
|
3
3
|
import { proxy, useSnapshot } from 'valtio';
|
|
4
4
|
function makeUseStorage(storage, cache, name = storage.constructor.name) {
|
|
5
5
|
return function useStorage(key, initialValue, writeInitialValue = false) {
|
|
6
|
-
var _a;
|
|
6
|
+
var _a, _b;
|
|
7
7
|
// using useMemo to execute synchronous code in render just once.
|
|
8
8
|
// this hook comes before useLocalStorageCache because we want to load
|
|
9
9
|
// values into the cache before accessing them.
|
|
10
|
-
useMemo(() => {
|
|
10
|
+
const stored = useMemo(() => {
|
|
11
11
|
if (typeof window === 'undefined')
|
|
12
12
|
return;
|
|
13
13
|
try {
|
|
14
14
|
const stored = storage.getItem(key);
|
|
15
|
-
if (stored)
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if (stored === '"undefined"')
|
|
16
|
+
return undefined;
|
|
17
|
+
if (stored === null)
|
|
18
|
+
return undefined;
|
|
19
|
+
return JSON.parse(stored);
|
|
18
20
|
}
|
|
19
21
|
catch (err) {
|
|
20
|
-
console.error(`Error
|
|
22
|
+
console.error(`Error parsing use-${name} value for ${key}: ${err}`);
|
|
21
23
|
storage.removeItem(key);
|
|
22
24
|
}
|
|
23
25
|
}, [key]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (stored !== undefined) {
|
|
28
|
+
cache[key] = stored;
|
|
29
|
+
}
|
|
30
|
+
}, [stored, key]);
|
|
24
31
|
const snapshot = useSnapshot(cache);
|
|
25
|
-
const storedValue = ((_a = snapshot[key]) !== null && _a !== void 0 ? _a : initialValue);
|
|
26
|
-
const hasValue = snapshot[key] !== undefined;
|
|
32
|
+
const storedValue = ((_b = (_a = snapshot[key]) !== null && _a !== void 0 ? _a : stored) !== null && _b !== void 0 ? _b : initialValue);
|
|
27
33
|
useEffect(() => {
|
|
28
|
-
if (
|
|
34
|
+
if (typeof window === 'undefined')
|
|
35
|
+
return;
|
|
36
|
+
if (snapshot[key] === undefined && writeInitialValue) {
|
|
29
37
|
storage.setItem(key, JSON.stringify(initialValue));
|
|
30
38
|
}
|
|
31
|
-
}, [
|
|
39
|
+
}, [!!snapshot[key], initialValue, writeInitialValue, key]);
|
|
32
40
|
// Return a wrapped version of useState's setter function that
|
|
33
41
|
// persists the new value to localStorage. It's throttled to prevent
|
|
34
42
|
// frequent writes to localStorage, which can be costly.
|
|
@@ -63,8 +71,8 @@ const mockStorage = {
|
|
|
63
71
|
return null;
|
|
64
72
|
},
|
|
65
73
|
};
|
|
66
|
-
export const useLocalStorage = makeUseStorage(typeof
|
|
67
|
-
export const useSessionStorage = makeUseStorage(typeof
|
|
74
|
+
export const useLocalStorage = makeUseStorage(typeof window === 'undefined' ? mockStorage : localStorage, proxy({}), 'LocalStorage');
|
|
75
|
+
export const useSessionStorage = makeUseStorage(typeof window === 'undefined' ? mockStorage : sessionStorage, proxy({}), 'SessionStorage');
|
|
68
76
|
function throttle(func, wait, options) {
|
|
69
77
|
let previous = 0;
|
|
70
78
|
return function (...args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorage.js","sourceRoot":"","sources":["../../../src/hooks/useStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE5C,SAAS,cAAc,CACtB,OAAgB,EAChB,KAA0B,EAC1B,OAAe,OAAO,CAAC,WAAW,CAAC,IAAI;IAEvC,OAAO,SAAS,UAAU,CACzB,GAAW,EACX,YAAe,EACf,iBAAiB,GAAG,KAAK;;QAEzB,iEAAiE;QACjE,sEAAsE;QACtE,+CAA+C;QAC/C,OAAO,CAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"useStorage.js","sourceRoot":"","sources":["../../../src/hooks/useStorage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a-type/ui",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/a-type/ui"
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"storybook": "storybook dev -p 6006",
|
|
123
123
|
"build-storybook": "storybook build",
|
|
124
124
|
"up-radix": "pnpm update \"@radix-ui/*\" --latest",
|
|
125
|
-
"bump": "
|
|
125
|
+
"bump": "bumpp",
|
|
126
126
|
"test": "vitest",
|
|
127
127
|
"test:browser": "vitest --config=vitest.browser.config.ts"
|
|
128
128
|
}
|
package/src/hooks/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './useOverrideTheme.js';
|
|
|
6
6
|
export * from './useSize.js';
|
|
7
7
|
export * from './useStableCallback.js';
|
|
8
8
|
export * from './useStayScrolledToBottom.js';
|
|
9
|
+
export * from './useStorage.js';
|
|
9
10
|
export * from './useTitleBarColor.js';
|
|
10
11
|
export * from './useToggle.js';
|
|
11
12
|
export * from './useVisualViewportOffset.js';
|
package/src/hooks/useStorage.ts
CHANGED
|
@@ -14,28 +14,35 @@ function makeUseStorage(
|
|
|
14
14
|
// using useMemo to execute synchronous code in render just once.
|
|
15
15
|
// this hook comes before useLocalStorageCache because we want to load
|
|
16
16
|
// values into the cache before accessing them.
|
|
17
|
-
useMemo(() => {
|
|
17
|
+
const stored = useMemo(() => {
|
|
18
18
|
if (typeof window === 'undefined') return;
|
|
19
19
|
|
|
20
20
|
try {
|
|
21
21
|
const stored = storage.getItem(key);
|
|
22
|
-
if (stored)
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
if (stored === '"undefined"') return undefined;
|
|
23
|
+
if (stored === null) return undefined;
|
|
24
|
+
return JSON.parse(stored);
|
|
25
25
|
} catch (err) {
|
|
26
|
-
console.error(`Error
|
|
26
|
+
console.error(`Error parsing use-${name} value for ${key}: ${err}`);
|
|
27
27
|
storage.removeItem(key);
|
|
28
28
|
}
|
|
29
29
|
}, [key]);
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (stored !== undefined) {
|
|
33
|
+
cache[key] = stored;
|
|
34
|
+
}
|
|
35
|
+
}, [stored, key]);
|
|
36
|
+
|
|
30
37
|
const snapshot = useSnapshot(cache);
|
|
31
|
-
const storedValue = (snapshot[key] ?? initialValue) as T;
|
|
38
|
+
const storedValue = (snapshot[key] ?? stored ?? initialValue) as T;
|
|
32
39
|
|
|
33
|
-
const hasValue = snapshot[key] !== undefined;
|
|
34
40
|
useEffect(() => {
|
|
35
|
-
if (
|
|
41
|
+
if (typeof window === 'undefined') return;
|
|
42
|
+
if (snapshot[key] === undefined && writeInitialValue) {
|
|
36
43
|
storage.setItem(key, JSON.stringify(initialValue));
|
|
37
44
|
}
|
|
38
|
-
}, [
|
|
45
|
+
}, [!!snapshot[key], initialValue, writeInitialValue, key]);
|
|
39
46
|
|
|
40
47
|
// Return a wrapped version of useState's setter function that
|
|
41
48
|
// persists the new value to localStorage. It's throttled to prevent
|
|
@@ -85,12 +92,12 @@ const mockStorage: Storage = {
|
|
|
85
92
|
};
|
|
86
93
|
|
|
87
94
|
export const useLocalStorage = makeUseStorage(
|
|
88
|
-
typeof
|
|
95
|
+
typeof window === 'undefined' ? mockStorage : localStorage,
|
|
89
96
|
proxy({}),
|
|
90
97
|
'LocalStorage',
|
|
91
98
|
);
|
|
92
99
|
export const useSessionStorage = makeUseStorage(
|
|
93
|
-
typeof
|
|
100
|
+
typeof window === 'undefined' ? mockStorage : sessionStorage,
|
|
94
101
|
proxy({}),
|
|
95
102
|
'SessionStorage',
|
|
96
103
|
);
|