@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.
@@ -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';
@@ -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
- cache[key] = JSON.parse(stored);
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 loading use-${name} value for ${key}: ${err}`);
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 (!hasValue && writeInitialValue) {
37
+ if (typeof window === 'undefined')
38
+ return;
39
+ if (snapshot[key] === undefined && writeInitialValue) {
32
40
  storage.setItem(key, JSON.stringify(initialValue));
33
41
  }
34
- }, [hasValue, initialValue, writeInitialValue, key]);
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 localStorage === 'undefined' ? mockStorage : localStorage, (0, valtio_1.proxy)({}), 'LocalStorage');
70
- exports.useSessionStorage = makeUseStorage(typeof sessionStorage === 'undefined' ? mockStorage : sessionStorage, (0, valtio_1.proxy)({}), 'SessionStorage');
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":"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"}
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';
@@ -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
- cache[key] = JSON.parse(stored);
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 loading use-${name} value for ${key}: ${err}`);
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 (!hasValue && writeInitialValue) {
34
+ if (typeof window === 'undefined')
35
+ return;
36
+ if (snapshot[key] === undefined && writeInitialValue) {
29
37
  storage.setItem(key, JSON.stringify(initialValue));
30
38
  }
31
- }, [hasValue, initialValue, writeInitialValue, key]);
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 localStorage === 'undefined' ? mockStorage : localStorage, proxy({}), 'LocalStorage');
67
- export const useSessionStorage = makeUseStorage(typeof sessionStorage === 'undefined' ? mockStorage : sessionStorage, proxy({}), 'SessionStorage');
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;YACZ,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,EAAE,CAAC;oBACZ,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,cAAc,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;gBACpE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACF,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACV,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,CAAC,MAAA,QAAQ,CAAC,GAAG,CAAC,mCAAI,YAAY,CAAM,CAAC;QAEzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;QAC7C,SAAS,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,QAAQ,IAAI,iBAAiB,EAAE,CAAC;gBACpC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,CAAC;QACF,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;QAErD,8DAA8D;QAC9D,oEAAoE;QACpE,wDAAwD;QACxD,MAAM,QAAQ,GAAG,OAAO,CACvB,GAAG,EAAE,CACJ,QAAQ,CACP,CAAC,KAA8B,EAAE,EAAE;YAClC,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAE1C,IAAI,CAAC;gBACJ,+DAA+D;gBAC/D,MAAM,YAAY,GACjB,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACxD,wBAAwB;gBACxB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;gBACnD,8DAA8D;gBAC9D,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CACZ,qBAAqB,IAAI,cAAc,GAAG,KAAK,KAAK,KAAK,KAAK,EAAE,CAChE,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACxC,CAAC;QACF,CAAC,EACD,GAAG,EACH,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CACjC,EACF,CAAC,GAAG,EAAE,WAAW,CAAC,CAC0B,CAAC;QAE9C,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAU,CAAC;IACzC,CAAC,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAY;IAC5B,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,GAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,GAAW,EAAE,EAAE,GAAE,CAAC;IAC/B,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;CACD,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAC5C,OAAO,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAChE,KAAK,CAAC,EAAE,CAAC,EACT,cAAc,CACd,CAAC;AACF,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAC9C,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EACpE,KAAK,CAAC,EAAE,CAAC,EACT,gBAAgB,CAChB,CAAC;AAEF,SAAS,QAAQ,CAChB,IAA6B,EAC7B,IAAY,EACZ,OAAmD;IAEnD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,UAAqB,GAAG,IAAW;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,KAAK;YAAE,QAAQ,GAAG,GAAG,CAAC;QAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC;QAC1C,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACpB,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,MAAK,KAAK;gBAAE,QAAQ,GAAG,GAAG,CAAC;YAChD,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,MAAK,KAAK,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,UAAU,CAAC,GAAG,EAAE;YACtB,QAAQ,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,MAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,SAAS,CAAC,CAAC;IACf,CAAC,CAAC;AACH,CAAC"}
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.16",
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": "pnpx bumpp",
125
+ "bump": "bumpp",
126
126
  "test": "vitest",
127
127
  "test:browser": "vitest --config=vitest.browser.config.ts"
128
128
  }
@@ -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';
@@ -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
- cache[key] = JSON.parse(stored);
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 loading use-${name} value for ${key}: ${err}`);
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 (!hasValue && writeInitialValue) {
41
+ if (typeof window === 'undefined') return;
42
+ if (snapshot[key] === undefined && writeInitialValue) {
36
43
  storage.setItem(key, JSON.stringify(initialValue));
37
44
  }
38
- }, [hasValue, initialValue, writeInitialValue, key]);
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 localStorage === 'undefined' ? mockStorage : localStorage,
95
+ typeof window === 'undefined' ? mockStorage : localStorage,
89
96
  proxy({}),
90
97
  'LocalStorage',
91
98
  );
92
99
  export const useSessionStorage = makeUseStorage(
93
- typeof sessionStorage === 'undefined' ? mockStorage : sessionStorage,
100
+ typeof window === 'undefined' ? mockStorage : sessionStorage,
94
101
  proxy({}),
95
102
  'SessionStorage',
96
103
  );