@cyclone-ui/state 0.0.12 → 0.0.14

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 (167) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +1 -1
  3. package/dist/base/atoms/atom-with-broadcast.cjs +45 -1
  4. package/dist/base/atoms/atom-with-broadcast.mjs +45 -1
  5. package/dist/base/atoms/atom-with-broadcast.mjs.map +1 -1
  6. package/dist/base/atoms/atom-with-compare.cjs +12 -1
  7. package/dist/base/atoms/atom-with-compare.mjs +12 -1
  8. package/dist/base/atoms/atom-with-compare.mjs.map +1 -1
  9. package/dist/base/atoms/atom-with-debounce.cjs +52 -1
  10. package/dist/base/atoms/atom-with-debounce.mjs +52 -1
  11. package/dist/base/atoms/atom-with-debounce.mjs.map +1 -1
  12. package/dist/base/atoms/atom-with-effect.cjs +123 -1
  13. package/dist/base/atoms/atom-with-effect.mjs +120 -1
  14. package/dist/base/atoms/atom-with-effect.mjs.map +1 -1
  15. package/dist/base/atoms/atom-with-listeners.cjs +36 -1
  16. package/dist/base/atoms/atom-with-listeners.mjs +36 -1
  17. package/dist/base/atoms/atom-with-listeners.mjs.map +1 -1
  18. package/dist/base/atoms/atom-with-pending.cjs +14 -1
  19. package/dist/base/atoms/atom-with-pending.mjs +14 -1
  20. package/dist/base/atoms/atom-with-pending.mjs.map +1 -1
  21. package/dist/base/atoms/atom-with-refresh-and-default.cjs +19 -1
  22. package/dist/base/atoms/atom-with-refresh-and-default.mjs +19 -1
  23. package/dist/base/atoms/atom-with-refresh-and-default.mjs.map +1 -1
  24. package/dist/base/atoms/atom-with-refresh.cjs +13 -1
  25. package/dist/base/atoms/atom-with-refresh.mjs +13 -1
  26. package/dist/base/atoms/atom-with-refresh.mjs.map +1 -1
  27. package/dist/base/atoms/atom-with-toggle.cjs +13 -1
  28. package/dist/base/atoms/atom-with-toggle.mjs +13 -1
  29. package/dist/base/atoms/atom-with-toggle.mjs.map +1 -1
  30. package/dist/base/atoms/atom-with-web-storage.cjs +48 -1
  31. package/dist/base/atoms/atom-with-web-storage.mjs +47 -1
  32. package/dist/base/atoms/atom-with-web-storage.mjs.map +1 -1
  33. package/dist/base/atoms/atom-with-wrapper.cjs +25 -1
  34. package/dist/base/atoms/atom-with-wrapper.mjs +25 -1
  35. package/dist/base/atoms/atom-with-wrapper.mjs.map +1 -1
  36. package/dist/base/atoms/base-atom.cjs +25 -1
  37. package/dist/base/atoms/base-atom.mjs +25 -1
  38. package/dist/base/atoms/base-atom.mjs.map +1 -1
  39. package/dist/base/atoms/index.cjs +24 -1
  40. package/dist/base/atoms/index.mjs +13 -1
  41. package/dist/base/hooks/index.cjs +9 -1
  42. package/dist/base/hooks/index.mjs +6 -1
  43. package/dist/base/hooks/use-atom-effect.cjs +17 -1
  44. package/dist/base/hooks/use-atom-effect.mjs +17 -1
  45. package/dist/base/hooks/use-atom-effect.mjs.map +1 -1
  46. package/dist/base/hooks/use-hydrate-molecule.cjs +17 -1
  47. package/dist/base/hooks/use-hydrate-molecule.mjs +17 -1
  48. package/dist/base/hooks/use-hydrate-molecule.mjs.map +1 -1
  49. package/dist/base/hooks/use-prepare-atoms.cjs +20 -1
  50. package/dist/base/hooks/use-prepare-atoms.mjs +20 -1
  51. package/dist/base/hooks/use-prepare-atoms.mjs.map +1 -1
  52. package/dist/base/hooks/use-sync-molecule.cjs +37 -1
  53. package/dist/base/hooks/use-sync-molecule.mjs +37 -1
  54. package/dist/base/hooks/use-sync-molecule.mjs.map +1 -1
  55. package/dist/base/index.cjs +47 -1
  56. package/dist/base/index.mjs +24 -1
  57. package/dist/base/utilities/create-molecule.cjs +105 -4
  58. package/dist/base/utilities/create-molecule.d.cts.map +1 -1
  59. package/dist/base/utilities/create-molecule.mjs +102 -4
  60. package/dist/base/utilities/create-molecule.mjs.map +1 -1
  61. package/dist/base/utilities/create-web-storage.cjs +55 -1
  62. package/dist/base/utilities/create-web-storage.mjs +55 -1
  63. package/dist/base/utilities/create-web-storage.mjs.map +1 -1
  64. package/dist/base/utilities/debounce.cjs +52 -1
  65. package/dist/base/utilities/debounce.mjs +52 -1
  66. package/dist/base/utilities/debounce.mjs.map +1 -1
  67. package/dist/base/utilities/index.cjs +13 -1
  68. package/dist/base/utilities/index.mjs +6 -1
  69. package/dist/base/utilities/is-atom.cjs +48 -1
  70. package/dist/base/utilities/is-atom.mjs +46 -1
  71. package/dist/base/utilities/is-atom.mjs.map +1 -1
  72. package/dist/base/utilities/set-atom-debug.cjs +24 -1
  73. package/dist/base/utilities/set-atom-debug.mjs +23 -1
  74. package/dist/base/utilities/set-atom-debug.mjs.map +1 -1
  75. package/dist/client/index.cjs +16 -1
  76. package/dist/client/index.mjs +8 -1
  77. package/dist/form/atoms/atom-with-field.cjs +23 -1
  78. package/dist/form/atoms/atom-with-field.mjs +23 -1
  79. package/dist/form/atoms/atom-with-field.mjs.map +1 -1
  80. package/dist/form/atoms/atom-with-messages.cjs +85 -1
  81. package/dist/form/atoms/atom-with-messages.mjs +78 -1
  82. package/dist/form/atoms/atom-with-messages.mjs.map +1 -1
  83. package/dist/form/hooks/index.cjs +7 -1
  84. package/dist/form/hooks/index.mjs +5 -1
  85. package/dist/form/hooks/use-field-actions.cjs +92 -1
  86. package/dist/form/hooks/use-field-actions.mjs +92 -1
  87. package/dist/form/hooks/use-field-actions.mjs.map +1 -1
  88. package/dist/form/hooks/use-field-ref.cjs +16 -1
  89. package/dist/form/hooks/use-field-ref.mjs +16 -1
  90. package/dist/form/hooks/use-field-ref.mjs.map +1 -1
  91. package/dist/form/hooks/use-form-actions.cjs +69 -1
  92. package/dist/form/hooks/use-form-actions.mjs +69 -1
  93. package/dist/form/hooks/use-form-actions.mjs.map +1 -1
  94. package/dist/form/index.cjs +30 -1
  95. package/dist/form/index.mjs +17 -1
  96. package/dist/form/molecules/field-molecule.cjs +154 -1
  97. package/dist/form/molecules/field-molecule.mjs +153 -1
  98. package/dist/form/molecules/field-molecule.mjs.map +1 -1
  99. package/dist/form/molecules/form-molecule.cjs +180 -1
  100. package/dist/form/molecules/form-molecule.mjs +179 -1
  101. package/dist/form/molecules/form-molecule.mjs.map +1 -1
  102. package/dist/form/molecules/index.cjs +7 -1
  103. package/dist/form/molecules/index.mjs +4 -1
  104. package/dist/form/providers/FieldProvider.cjs +103 -4
  105. package/dist/form/providers/FieldProvider.mjs +103 -4
  106. package/dist/form/providers/FieldProvider.mjs.map +1 -1
  107. package/dist/form/providers/FormProvider.cjs +66 -4
  108. package/dist/form/providers/FormProvider.d.cts.map +1 -1
  109. package/dist/form/providers/FormProvider.mjs +66 -4
  110. package/dist/form/providers/FormProvider.mjs.map +1 -1
  111. package/dist/form/providers/index.cjs +5 -1
  112. package/dist/form/providers/index.mjs +4 -1
  113. package/dist/form/types.cjs +13 -1
  114. package/dist/form/types.mjs +13 -1
  115. package/dist/form/types.mjs.map +1 -1
  116. package/dist/form/utilities/abort-error.cjs +15 -1
  117. package/dist/form/utilities/abort-error.mjs +15 -1
  118. package/dist/form/utilities/abort-error.mjs.map +1 -1
  119. package/dist/form/utilities/index.cjs +7 -1
  120. package/dist/form/utilities/index.mjs +5 -1
  121. package/dist/form/utilities/is-validation-results.cjs +9 -1
  122. package/dist/form/utilities/is-validation-results.mjs +9 -1
  123. package/dist/form/utilities/is-validation-results.mjs.map +1 -1
  124. package/dist/form/utilities/validators.cjs +8 -1
  125. package/dist/form/utilities/validators.mjs +8 -1
  126. package/dist/form/utilities/validators.mjs.map +1 -1
  127. package/dist/index.cjs +71 -1
  128. package/dist/index.mjs +34 -1
  129. package/dist/message/components/MessageViewport.cjs +21 -6
  130. package/dist/message/components/MessageViewport.mjs +21 -6
  131. package/dist/message/components/MessageViewport.mjs.map +1 -1
  132. package/dist/message/components/index.cjs +3 -1
  133. package/dist/message/components/index.mjs +3 -1
  134. package/dist/message/hooks/index.cjs +3 -1
  135. package/dist/message/hooks/index.mjs +3 -1
  136. package/dist/message/hooks/use-message-actions.cjs +63 -1
  137. package/dist/message/hooks/use-message-actions.mjs +63 -1
  138. package/dist/message/hooks/use-message-actions.mjs.map +1 -1
  139. package/dist/message/index.cjs +23 -1
  140. package/dist/message/index.mjs +8 -1
  141. package/dist/message/providers/MessageProvider.cjs +16 -1
  142. package/dist/message/providers/MessageProvider.mjs +16 -1
  143. package/dist/message/providers/MessageProvider.mjs.map +1 -1
  144. package/dist/theme/hooks/index.cjs +7 -1
  145. package/dist/theme/hooks/index.mjs +4 -1
  146. package/dist/theme/hooks/use-theme-actions.cjs +21 -1
  147. package/dist/theme/hooks/use-theme-actions.mjs +21 -1
  148. package/dist/theme/hooks/use-theme-actions.mjs.map +1 -1
  149. package/dist/theme/hooks/use-theme-store.cjs +61 -1
  150. package/dist/theme/hooks/use-theme-store.d.cts +2 -2
  151. package/dist/theme/hooks/use-theme-store.d.mts +2 -2
  152. package/dist/theme/hooks/use-theme-store.mjs +59 -1
  153. package/dist/theme/hooks/use-theme-store.mjs.map +1 -1
  154. package/dist/theme/index.cjs +17 -1
  155. package/dist/theme/index.mjs +9 -1
  156. package/dist/theme/molecules/index.cjs +3 -1
  157. package/dist/theme/molecules/index.mjs +3 -1
  158. package/dist/theme/molecules/theme-molecule.cjs +14 -1
  159. package/dist/theme/molecules/theme-molecule.mjs +14 -1
  160. package/dist/theme/molecules/theme-molecule.mjs.map +1 -1
  161. package/dist/theme/providers/ThemeProvider.cjs +30 -5
  162. package/dist/theme/providers/ThemeProvider.mjs +30 -5
  163. package/dist/theme/providers/ThemeProvider.mjs.map +1 -1
  164. package/dist/theme/utilities/theme-helpers.cjs +71 -1
  165. package/dist/theme/utilities/theme-helpers.mjs +70 -1
  166. package/dist/theme/utilities/theme-helpers.mjs.map +1 -1
  167. package/package.json +6 -6
@@ -1,2 +1,15 @@
1
- import{baseAtom as e}from"./base-atom.mjs";import{noop as t}from"@stryke/helpers/noop";const n=new Promise(t),r=()=>e(n);export{r as atomWithPending};
1
+ import { baseAtom } from "./base-atom.mjs";
2
+ import { noop } from "@stryke/helpers/noop";
3
+
4
+ //#region src/base/atoms/atom-with-pending.ts
5
+ const pendingPromise = new Promise(noop);
6
+ /**
7
+ * Creates an atom that always returns a pending promise.
8
+ *
9
+ * @returns An atom that always returns a pending promise.
10
+ */
11
+ const atomWithPending = () => baseAtom(pendingPromise);
12
+
13
+ //#endregion
14
+ export { atomWithPending };
2
15
  //# sourceMappingURL=atom-with-pending.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-pending.mjs","names":["pendingPromise","noop","atomWithPending","baseAtom"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-pending.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,19 @@
1
- const e=require("./base-atom.cjs"),t=(t,n)=>{let r=e.baseAtom(null);return e.baseAtom(e=>{let i=e(r);return i&&i.refresh===e(t)?i.value:n(e)},(e,n,i)=>{n(r,{refresh:e(t),value:i})})};exports.atomWithRefreshAndDefault=t;
1
+ const require_base_atom = require("./base-atom.cjs");
2
+
3
+ //#region src/base/atoms/atom-with-refresh-and-default.ts
4
+ const atomWithRefreshAndDefault = (refreshAtom, getDefault) => {
5
+ const overwrittenAtom = require_base_atom.baseAtom(null);
6
+ return require_base_atom.baseAtom((get) => {
7
+ const lastState = get(overwrittenAtom);
8
+ if (lastState && lastState.refresh === get(refreshAtom)) return lastState.value;
9
+ return getDefault(get);
10
+ }, (get, set, update) => {
11
+ set(overwrittenAtom, {
12
+ refresh: get(refreshAtom),
13
+ value: update
14
+ });
15
+ });
16
+ };
17
+
18
+ //#endregion
19
+ exports.atomWithRefreshAndDefault = atomWithRefreshAndDefault;
@@ -1,2 +1,20 @@
1
- import{baseAtom as e}from"./base-atom.mjs";const t=(t,n)=>{let r=e(null);return e(e=>{let i=e(r);return i&&i.refresh===e(t)?i.value:n(e)},(e,n,i)=>{n(r,{refresh:e(t),value:i})})};export{t as atomWithRefreshAndDefault};
1
+ import { baseAtom } from "./base-atom.mjs";
2
+
3
+ //#region src/base/atoms/atom-with-refresh-and-default.ts
4
+ const atomWithRefreshAndDefault = (refreshAtom, getDefault) => {
5
+ const overwrittenAtom = baseAtom(null);
6
+ return baseAtom((get) => {
7
+ const lastState = get(overwrittenAtom);
8
+ if (lastState && lastState.refresh === get(refreshAtom)) return lastState.value;
9
+ return getDefault(get);
10
+ }, (get, set, update) => {
11
+ set(overwrittenAtom, {
12
+ refresh: get(refreshAtom),
13
+ value: update
14
+ });
15
+ });
16
+ };
17
+
18
+ //#endregion
19
+ export { atomWithRefreshAndDefault };
2
20
  //# sourceMappingURL=atom-with-refresh-and-default.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-refresh-and-default.mjs","names":["atomWithRefreshAndDefault","overwrittenAtom","baseAtom","lastState","get","refreshAtom","getDefault","set","update"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-refresh-and-default.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,13 @@
1
- const e=require("./base-atom.cjs");function t(t){let n=e.baseAtom(0);return e.baseAtom(e=>(e(n),t(e)),(e,t)=>t(n,e=>e+1))}exports.atomWithRefresh=t;
1
+ const require_base_atom = require("./base-atom.cjs");
2
+
3
+ //#region src/base/atoms/atom-with-refresh.ts
4
+ function atomWithRefresh(fn) {
5
+ const refreshCounter = require_base_atom.baseAtom(0);
6
+ return require_base_atom.baseAtom((get) => {
7
+ get(refreshCounter);
8
+ return fn(get);
9
+ }, (_, set) => set(refreshCounter, (i) => i + 1));
10
+ }
11
+
12
+ //#endregion
13
+ exports.atomWithRefresh = atomWithRefresh;
@@ -1,2 +1,14 @@
1
- import{baseAtom as e}from"./base-atom.mjs";function t(t){let n=e(0);return e(e=>(e(n),t(e)),(e,t)=>t(n,e=>e+1))}export{t as atomWithRefresh};
1
+ import { baseAtom } from "./base-atom.mjs";
2
+
3
+ //#region src/base/atoms/atom-with-refresh.ts
4
+ function atomWithRefresh(fn) {
5
+ const refreshCounter = baseAtom(0);
6
+ return baseAtom((get) => {
7
+ get(refreshCounter);
8
+ return fn(get);
9
+ }, (_, set) => set(refreshCounter, (i) => i + 1));
10
+ }
11
+
12
+ //#endregion
13
+ export { atomWithRefresh };
2
14
  //# sourceMappingURL=atom-with-refresh.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-refresh.mjs","names":["atomWithRefresh","refreshCounter","baseAtom","get","fn","set","i"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-refresh.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,13 @@
1
- const e=require("./base-atom.cjs");function t(t){let n=e.baseAtom(t,(e,t,r)=>{let i=r??!e(n);t(n,i)});return n}exports.atomWithToggle=t;
1
+ const require_base_atom = require("./base-atom.cjs");
2
+
3
+ //#region src/base/atoms/atom-with-toggle.ts
4
+ function atomWithToggle(initialValue) {
5
+ const anAtom = require_base_atom.baseAtom(initialValue, (get, set, nextValue) => {
6
+ const update = nextValue ?? !get(anAtom);
7
+ set(anAtom, update);
8
+ });
9
+ return anAtom;
10
+ }
11
+
12
+ //#endregion
13
+ exports.atomWithToggle = atomWithToggle;
@@ -1,2 +1,14 @@
1
- import{baseAtom as e}from"./base-atom.mjs";function t(t){let n=e(t,(e,t,r)=>{let i=r??!e(n);t(n,i)});return n}export{t as atomWithToggle};
1
+ import { baseAtom } from "./base-atom.mjs";
2
+
3
+ //#region src/base/atoms/atom-with-toggle.ts
4
+ function atomWithToggle(initialValue) {
5
+ const anAtom = baseAtom(initialValue, (get, set, nextValue) => {
6
+ const update = nextValue ?? !get(anAtom);
7
+ set(anAtom, update);
8
+ });
9
+ return anAtom;
10
+ }
11
+
12
+ //#endregion
13
+ export { atomWithToggle };
2
14
  //# sourceMappingURL=atom-with-toggle.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-toggle.mjs","names":["atomWithToggle","anAtom","baseAtom","initialValue","update","nextValue","get","set"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-toggle.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,48 @@
1
- const e=require("../utilities/is-atom.cjs"),t=require("./base-atom.cjs"),n=require("./atom-with-broadcast.cjs"),r=require("./atom-with-debounce.cjs"),i=require("./atom-with-effect.cjs"),a=require("../utilities/create-web-storage.cjs");let o=require("@stryke/type-checks/is-function"),s=require("jotai/utils");const c=()=>a.createWebStorage(()=>localStorage);function l(a,l,u=c(),d){let f=d?.debounceMs??500,p=d?.getOnInit??!0,m=e.isAtom(l)?l:t.baseAtom(l),h=r.atomWithDebounce((0,s.atomWithStorage)(a,e.isAtom(l)?void 0:l,u,{getOnInit:p}),f),g=r.atomWithDebounce(n.atomWithBroadcast(a,e.isAtom(l)?void 0:l),f),_=t.baseAtom(e=>e(m),(e,t,n)=>{let r=(0,o.isFunction)(n)?n(e(m)):n;t(m,r),t(h.debouncedValueAtom,r),t(g.debouncedValueAtom,r)}),v=i.atomWithEffect((e,t)=>{let n=e(g.debouncedValueAtom);n!==e(_)&&t(_,n)});return t.baseAtom(e=>(e(v),e(_)),(e,t,n)=>{t(_,n)})}exports.atomWithWebStorage=l,exports.getWebStorage=c;
1
+ const require_is_atom = require("../utilities/is-atom.cjs");
2
+ const require_base_atom = require("./base-atom.cjs");
3
+ const require_atom_with_broadcast = require("./atom-with-broadcast.cjs");
4
+ const require_atom_with_debounce = require("./atom-with-debounce.cjs");
5
+ const require_atom_with_effect = require("./atom-with-effect.cjs");
6
+ const require_create_web_storage = require("../utilities/create-web-storage.cjs");
7
+ let _stryke_type_checks_is_function = require("@stryke/type-checks/is-function");
8
+ let jotai_utils = require("jotai/utils");
9
+
10
+ //#region src/base/atoms/atom-with-web-storage.ts
11
+ const getWebStorage = () => require_create_web_storage.createWebStorage(() => localStorage);
12
+ /**
13
+ * Creates an atom that persists its state in external storage and sends a broadcast message to other tabs/windows when the state changes.
14
+ *
15
+ * @param key - The key to use for the storage
16
+ * @param initialValue - The initial value of the atom
17
+ * @param webStorage - The storage to use
18
+ * @returns An atom that persists its state in external storage and sends a broadcast message to other tabs/windows when the state changes.
19
+ */
20
+ function atomWithWebStorage(key, initialValueOrAtom, webStorage = getWebStorage(), options) {
21
+ const debounceMs = options?.debounceMs ?? 500;
22
+ const getOnInit = options?.getOnInit ?? true;
23
+ const valueAtom = require_is_atom.isAtom(initialValueOrAtom) ? initialValueOrAtom : require_base_atom.baseAtom(initialValueOrAtom);
24
+ const debouncedStorageAtom = require_atom_with_debounce.atomWithDebounce((0, jotai_utils.atomWithStorage)(key, require_is_atom.isAtom(initialValueOrAtom) ? void 0 : initialValueOrAtom, webStorage, { getOnInit }), debounceMs);
25
+ const debouncedBroadcastAtom = require_atom_with_debounce.atomWithDebounce(require_atom_with_broadcast.atomWithBroadcast(key, require_is_atom.isAtom(initialValueOrAtom) ? void 0 : initialValueOrAtom), debounceMs);
26
+ const wrapperAtom = require_base_atom.baseAtom((get) => {
27
+ return get(valueAtom);
28
+ }, (get, set, update) => {
29
+ const nextValue = (0, _stryke_type_checks_is_function.isFunction)(update) ? update(get(valueAtom)) : update;
30
+ set(valueAtom, nextValue);
31
+ set(debouncedStorageAtom.debouncedValueAtom, nextValue);
32
+ set(debouncedBroadcastAtom.debouncedValueAtom, nextValue);
33
+ });
34
+ const effectAtom = require_atom_with_effect.atomWithEffect((get, set) => {
35
+ const next = get(debouncedBroadcastAtom.debouncedValueAtom);
36
+ if (next !== get(wrapperAtom)) set(wrapperAtom, next);
37
+ });
38
+ return require_base_atom.baseAtom((get) => {
39
+ get(effectAtom);
40
+ return get(wrapperAtom);
41
+ }, (get, set, update) => {
42
+ set(wrapperAtom, update);
43
+ });
44
+ }
45
+
46
+ //#endregion
47
+ exports.atomWithWebStorage = atomWithWebStorage;
48
+ exports.getWebStorage = getWebStorage;
@@ -1,2 +1,48 @@
1
- import{isAtom as e}from"../utilities/is-atom.mjs";import{baseAtom as t}from"./base-atom.mjs";import{atomWithBroadcast as n}from"./atom-with-broadcast.mjs";import{atomWithDebounce as r}from"./atom-with-debounce.mjs";import{atomWithEffect as i}from"./atom-with-effect.mjs";import{createWebStorage as a}from"../utilities/create-web-storage.mjs";import{isFunction as o}from"@stryke/type-checks/is-function";import{atomWithStorage as s}from"jotai/utils";const c=()=>a(()=>localStorage);function l(a,l,u=c(),d){let f=d?.debounceMs??500,p=d?.getOnInit??!0,m=e(l)?l:t(l),h=r(s(a,e(l)?void 0:l,u,{getOnInit:p}),f),g=r(n(a,e(l)?void 0:l),f),_=t(e=>e(m),(e,t,n)=>{let r=o(n)?n(e(m)):n;t(m,r),t(h.debouncedValueAtom,r),t(g.debouncedValueAtom,r)}),v=i((e,t)=>{let n=e(g.debouncedValueAtom);n!==e(_)&&t(_,n)});return t(e=>(e(v),e(_)),(e,t,n)=>{t(_,n)})}export{l as atomWithWebStorage,c as getWebStorage};
1
+ import { isAtom } from "../utilities/is-atom.mjs";
2
+ import { baseAtom } from "./base-atom.mjs";
3
+ import { atomWithBroadcast } from "./atom-with-broadcast.mjs";
4
+ import { atomWithDebounce } from "./atom-with-debounce.mjs";
5
+ import { atomWithEffect } from "./atom-with-effect.mjs";
6
+ import { createWebStorage } from "../utilities/create-web-storage.mjs";
7
+ import { isFunction } from "@stryke/type-checks/is-function";
8
+ import { atomWithStorage } from "jotai/utils";
9
+
10
+ //#region src/base/atoms/atom-with-web-storage.ts
11
+ const getWebStorage = () => createWebStorage(() => localStorage);
12
+ /**
13
+ * Creates an atom that persists its state in external storage and sends a broadcast message to other tabs/windows when the state changes.
14
+ *
15
+ * @param key - The key to use for the storage
16
+ * @param initialValue - The initial value of the atom
17
+ * @param webStorage - The storage to use
18
+ * @returns An atom that persists its state in external storage and sends a broadcast message to other tabs/windows when the state changes.
19
+ */
20
+ function atomWithWebStorage(key, initialValueOrAtom, webStorage = getWebStorage(), options) {
21
+ const debounceMs = options?.debounceMs ?? 500;
22
+ const getOnInit = options?.getOnInit ?? true;
23
+ const valueAtom = isAtom(initialValueOrAtom) ? initialValueOrAtom : baseAtom(initialValueOrAtom);
24
+ const debouncedStorageAtom = atomWithDebounce(atomWithStorage(key, isAtom(initialValueOrAtom) ? void 0 : initialValueOrAtom, webStorage, { getOnInit }), debounceMs);
25
+ const debouncedBroadcastAtom = atomWithDebounce(atomWithBroadcast(key, isAtom(initialValueOrAtom) ? void 0 : initialValueOrAtom), debounceMs);
26
+ const wrapperAtom = baseAtom((get) => {
27
+ return get(valueAtom);
28
+ }, (get, set, update) => {
29
+ const nextValue = isFunction(update) ? update(get(valueAtom)) : update;
30
+ set(valueAtom, nextValue);
31
+ set(debouncedStorageAtom.debouncedValueAtom, nextValue);
32
+ set(debouncedBroadcastAtom.debouncedValueAtom, nextValue);
33
+ });
34
+ const effectAtom = atomWithEffect((get, set) => {
35
+ const next = get(debouncedBroadcastAtom.debouncedValueAtom);
36
+ if (next !== get(wrapperAtom)) set(wrapperAtom, next);
37
+ });
38
+ return baseAtom((get) => {
39
+ get(effectAtom);
40
+ return get(wrapperAtom);
41
+ }, (get, set, update) => {
42
+ set(wrapperAtom, update);
43
+ });
44
+ }
45
+
46
+ //#endregion
47
+ export { atomWithWebStorage, getWebStorage };
2
48
  //# sourceMappingURL=atom-with-web-storage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-web-storage.mjs","names":["getWebStorage","createWebStorage","atomWithWebStorage","debounceMs","options","getOnInit","valueAtom","isAtom","initialValueOrAtom","baseAtom","debouncedStorageAtom","atomWithDebounce","atomWithStorage","key","webStorage","debouncedBroadcastAtom","atomWithBroadcast","wrapperAtom","get","nextValue","isFunction","update","set","effectAtom","atomWithEffect","next"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-web-storage.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,25 @@
1
- const e=require("./base-atom.cjs");let t=require("@stryke/type-checks/is-function");const n=e=>(0,t.isFunction)(e)?{__fn:e}:e,r=e=>e&&typeof e==`object`&&`__fn`in e?e.__fn:e,i=t=>{let i=e.baseAtom(n(t));return e.baseAtom(e=>r(e(i)),(e,t,r)=>t(i,n(r)))};exports.atomWithWrapper=i;
1
+ const require_base_atom = require("./base-atom.cjs");
2
+ let _stryke_type_checks_is_function = require("@stryke/type-checks/is-function");
3
+
4
+ //#region src/base/atoms/atom-with-wrapper.ts
5
+ const wrapFn = (fnOrValue) => (0, _stryke_type_checks_is_function.isFunction)(fnOrValue) ? { __fn: fnOrValue } : fnOrValue;
6
+ const unwrapFn = (wrappedFnOrValue) => wrappedFnOrValue && typeof wrappedFnOrValue === "object" && "__fn" in wrappedFnOrValue ? wrappedFnOrValue.__fn : wrappedFnOrValue;
7
+ /**
8
+ * Create an atom with a wrapper that allows functions as values.
9
+ *
10
+ * @remarks
11
+ * Jotai atoms don't allow functions as values by default. This function is a
12
+ * drop-in replacement for `atom` that wraps functions in an object while
13
+ * leaving non-functions unchanged. The wrapper object should be completely
14
+ * invisible to consumers of the atom.
15
+ *
16
+ * @param initialValue - The initial value of the atom
17
+ * @returns An atom with a wrapper that allows functions as values.
18
+ */
19
+ const atomWithWrapper = (initialValue) => {
20
+ const rootAtom = require_base_atom.baseAtom(wrapFn(initialValue));
21
+ return require_base_atom.baseAtom((get) => unwrapFn(get(rootAtom)), (_get, set, value) => set(rootAtom, wrapFn(value)));
22
+ };
23
+
24
+ //#endregion
25
+ exports.atomWithWrapper = atomWithWrapper;
@@ -1,2 +1,26 @@
1
- import{baseAtom as e}from"./base-atom.mjs";import{isFunction as t}from"@stryke/type-checks/is-function";const n=e=>t(e)?{__fn:e}:e,r=e=>e&&typeof e==`object`&&`__fn`in e?e.__fn:e,i=t=>{let i=e(n(t));return e(e=>r(e(i)),(e,t,r)=>t(i,n(r)))};export{i as atomWithWrapper};
1
+ import { baseAtom } from "./base-atom.mjs";
2
+ import { isFunction } from "@stryke/type-checks/is-function";
3
+
4
+ //#region src/base/atoms/atom-with-wrapper.ts
5
+ const wrapFn = (fnOrValue) => isFunction(fnOrValue) ? { __fn: fnOrValue } : fnOrValue;
6
+ const unwrapFn = (wrappedFnOrValue) => wrappedFnOrValue && typeof wrappedFnOrValue === "object" && "__fn" in wrappedFnOrValue ? wrappedFnOrValue.__fn : wrappedFnOrValue;
7
+ /**
8
+ * Create an atom with a wrapper that allows functions as values.
9
+ *
10
+ * @remarks
11
+ * Jotai atoms don't allow functions as values by default. This function is a
12
+ * drop-in replacement for `atom` that wraps functions in an object while
13
+ * leaving non-functions unchanged. The wrapper object should be completely
14
+ * invisible to consumers of the atom.
15
+ *
16
+ * @param initialValue - The initial value of the atom
17
+ * @returns An atom with a wrapper that allows functions as values.
18
+ */
19
+ const atomWithWrapper = (initialValue) => {
20
+ const rootAtom = baseAtom(wrapFn(initialValue));
21
+ return baseAtom((get) => unwrapFn(get(rootAtom)), (_get, set, value) => set(rootAtom, wrapFn(value)));
22
+ };
23
+
24
+ //#endregion
25
+ export { atomWithWrapper };
2
26
  //# sourceMappingURL=atom-with-wrapper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom-with-wrapper.mjs","names":["wrapFn","isFunction","fnOrValue","unwrapFn","wrappedFnOrValue","atomWithWrapper","rootAtom","baseAtom","initialValue","get","set","value"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"atom-with-wrapper.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,25 @@
1
- const e=require("../utilities/set-atom-debug.cjs");let t=require("jotai/vanilla");function n(n,r){let i=(0,t.atom)(n,r);return i.setDebugLabel=t=>{e.setAtomDebugLabel(i,t)},i}exports.baseAtom=n;
1
+ const require_set_atom_debug = require("../utilities/set-atom-debug.cjs");
2
+ let jotai_vanilla = require("jotai/vanilla");
3
+
4
+ //#region src/base/atoms/base-atom.ts
5
+ /**
6
+ * Create a "base" atom that can be used to create derived atoms.
7
+ * The base atom is a writable atom that can be used to create derived atoms.
8
+ *
9
+ * @remarks
10
+ * This function serves as a wrapper around the `atom` function from the Jotai library that adds debugging helpers.
11
+ *
12
+ * @param readOrInitialValue - The initial value of the atom or a read function
13
+ * @param write - The write function for the atom
14
+ * @returns The base atom
15
+ */
16
+ function baseAtom(readOrInitialValue, write) {
17
+ const result = (0, jotai_vanilla.atom)(readOrInitialValue, write);
18
+ result.setDebugLabel = (label) => {
19
+ require_set_atom_debug.setAtomDebugLabel(result, label);
20
+ };
21
+ return result;
22
+ }
23
+
24
+ //#endregion
25
+ exports.baseAtom = baseAtom;
@@ -1,2 +1,26 @@
1
- import{setAtomDebugLabel as e}from"../utilities/set-atom-debug.mjs";import{atom as t}from"jotai/vanilla";function n(n,r){let i=t(n,r);return i.setDebugLabel=t=>{e(i,t)},i}export{n as baseAtom};
1
+ import { setAtomDebugLabel } from "../utilities/set-atom-debug.mjs";
2
+ import { atom } from "jotai/vanilla";
3
+
4
+ //#region src/base/atoms/base-atom.ts
5
+ /**
6
+ * Create a "base" atom that can be used to create derived atoms.
7
+ * The base atom is a writable atom that can be used to create derived atoms.
8
+ *
9
+ * @remarks
10
+ * This function serves as a wrapper around the `atom` function from the Jotai library that adds debugging helpers.
11
+ *
12
+ * @param readOrInitialValue - The initial value of the atom or a read function
13
+ * @param write - The write function for the atom
14
+ * @returns The base atom
15
+ */
16
+ function baseAtom(readOrInitialValue, write) {
17
+ const result = atom(readOrInitialValue, write);
18
+ result.setDebugLabel = (label) => {
19
+ setAtomDebugLabel(result, label);
20
+ };
21
+ return result;
22
+ }
23
+
24
+ //#endregion
25
+ export { baseAtom };
2
26
  //# sourceMappingURL=base-atom.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-atom.mjs","names":["jotaiAtom","baseAtom","result","atom","readOrInitialValue","write","setAtomDebugLabel","label"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"base-atom.mjs","names":["jotaiAtom"],"sources":[],"mappings":""}
@@ -1 +1,24 @@
1
- const e=require("./atom-with-broadcast.cjs"),t=require("./atom-with-compare.cjs"),n=require("./atom-with-wrapper.cjs"),r=require("./atom-with-debounce.cjs"),i=require("./atom-with-effect.cjs"),a=require("./atom-with-listeners.cjs"),o=require("./atom-with-pending.cjs"),s=require("./atom-with-refresh.cjs"),c=require("./atom-with-refresh-and-default.cjs"),l=require("./atom-with-toggle.cjs"),u=require("./atom-with-web-storage.cjs");exports.atomWithBroadcast=e.atomWithBroadcast,exports.atomWithCompare=t.atomWithCompare,exports.atomWithDebounce=r.atomWithDebounce,exports.atomWithEffect=i.atomWithEffect,exports.atomWithListeners=a.atomWithListeners,exports.atomWithPending=o.atomWithPending,exports.atomWithRefresh=s.atomWithRefresh,exports.atomWithRefreshAndDefault=c.atomWithRefreshAndDefault,exports.atomWithToggle=l.atomWithToggle,exports.atomWithWebStorage=u.atomWithWebStorage,exports.atomWithWrapper=n.atomWithWrapper,exports.getWebStorage=u.getWebStorage;
1
+ const require_atom_with_broadcast = require("./atom-with-broadcast.cjs");
2
+ const require_atom_with_compare = require("./atom-with-compare.cjs");
3
+ const require_atom_with_wrapper = require("./atom-with-wrapper.cjs");
4
+ const require_atom_with_debounce = require("./atom-with-debounce.cjs");
5
+ const require_atom_with_effect = require("./atom-with-effect.cjs");
6
+ const require_atom_with_listeners = require("./atom-with-listeners.cjs");
7
+ const require_atom_with_pending = require("./atom-with-pending.cjs");
8
+ const require_atom_with_refresh = require("./atom-with-refresh.cjs");
9
+ const require_atom_with_refresh_and_default = require("./atom-with-refresh-and-default.cjs");
10
+ const require_atom_with_toggle = require("./atom-with-toggle.cjs");
11
+ const require_atom_with_web_storage = require("./atom-with-web-storage.cjs");
12
+
13
+ exports.atomWithBroadcast = require_atom_with_broadcast.atomWithBroadcast;
14
+ exports.atomWithCompare = require_atom_with_compare.atomWithCompare;
15
+ exports.atomWithDebounce = require_atom_with_debounce.atomWithDebounce;
16
+ exports.atomWithEffect = require_atom_with_effect.atomWithEffect;
17
+ exports.atomWithListeners = require_atom_with_listeners.atomWithListeners;
18
+ exports.atomWithPending = require_atom_with_pending.atomWithPending;
19
+ exports.atomWithRefresh = require_atom_with_refresh.atomWithRefresh;
20
+ exports.atomWithRefreshAndDefault = require_atom_with_refresh_and_default.atomWithRefreshAndDefault;
21
+ exports.atomWithToggle = require_atom_with_toggle.atomWithToggle;
22
+ exports.atomWithWebStorage = require_atom_with_web_storage.atomWithWebStorage;
23
+ exports.atomWithWrapper = require_atom_with_wrapper.atomWithWrapper;
24
+ exports.getWebStorage = require_atom_with_web_storage.getWebStorage;
@@ -1 +1,13 @@
1
- import{atomWithBroadcast as e}from"./atom-with-broadcast.mjs";import{atomWithCompare as t}from"./atom-with-compare.mjs";import{atomWithWrapper as n}from"./atom-with-wrapper.mjs";import{atomWithDebounce as r}from"./atom-with-debounce.mjs";import{atomWithEffect as i}from"./atom-with-effect.mjs";import{atomWithListeners as a}from"./atom-with-listeners.mjs";import{atomWithPending as o}from"./atom-with-pending.mjs";import{atomWithRefresh as s}from"./atom-with-refresh.mjs";import{atomWithRefreshAndDefault as c}from"./atom-with-refresh-and-default.mjs";import{atomWithToggle as l}from"./atom-with-toggle.mjs";import{atomWithWebStorage as u,getWebStorage as d}from"./atom-with-web-storage.mjs";export{e as atomWithBroadcast,t as atomWithCompare,r as atomWithDebounce,i as atomWithEffect,a as atomWithListeners,o as atomWithPending,s as atomWithRefresh,c as atomWithRefreshAndDefault,l as atomWithToggle,u as atomWithWebStorage,n as atomWithWrapper,d as getWebStorage};
1
+ import { atomWithBroadcast } from "./atom-with-broadcast.mjs";
2
+ import { atomWithCompare } from "./atom-with-compare.mjs";
3
+ import { atomWithWrapper } from "./atom-with-wrapper.mjs";
4
+ import { atomWithDebounce } from "./atom-with-debounce.mjs";
5
+ import { atomWithEffect } from "./atom-with-effect.mjs";
6
+ import { atomWithListeners } from "./atom-with-listeners.mjs";
7
+ import { atomWithPending } from "./atom-with-pending.mjs";
8
+ import { atomWithRefresh } from "./atom-with-refresh.mjs";
9
+ import { atomWithRefreshAndDefault } from "./atom-with-refresh-and-default.mjs";
10
+ import { atomWithToggle } from "./atom-with-toggle.mjs";
11
+ import { atomWithWebStorage, getWebStorage } from "./atom-with-web-storage.mjs";
12
+
13
+ export { atomWithBroadcast, atomWithCompare, atomWithDebounce, atomWithEffect, atomWithListeners, atomWithPending, atomWithRefresh, atomWithRefreshAndDefault, atomWithToggle, atomWithWebStorage, atomWithWrapper, getWebStorage };
@@ -1 +1,9 @@
1
- const e=require("./use-atom-effect.cjs"),t=require("./use-hydrate-molecule.cjs"),n=require("./use-prepare-atoms.cjs"),r=require("./use-sync-molecule.cjs");exports.useAtomEffect=e.useAtomEffect,exports.useHydrateMolecule=t.useHydrateMolecule,exports.usePrepareAtoms=n.usePrepareAtoms,exports.useSyncMolecule=r.useSyncMolecule;
1
+ const require_use_atom_effect = require("./use-atom-effect.cjs");
2
+ const require_use_hydrate_molecule = require("./use-hydrate-molecule.cjs");
3
+ const require_use_prepare_atoms = require("./use-prepare-atoms.cjs");
4
+ const require_use_sync_molecule = require("./use-sync-molecule.cjs");
5
+
6
+ exports.useAtomEffect = require_use_atom_effect.useAtomEffect;
7
+ exports.useHydrateMolecule = require_use_hydrate_molecule.useHydrateMolecule;
8
+ exports.usePrepareAtoms = require_use_prepare_atoms.usePrepareAtoms;
9
+ exports.useSyncMolecule = require_use_sync_molecule.useSyncMolecule;
@@ -1 +1,6 @@
1
- import{useAtomEffect as e}from"./use-atom-effect.mjs";import{useHydrateMolecule as t}from"./use-hydrate-molecule.mjs";import{usePrepareAtoms as n}from"./use-prepare-atoms.mjs";import{useSyncMolecule as r}from"./use-sync-molecule.mjs";export{e as useAtomEffect,t as useHydrateMolecule,n as usePrepareAtoms,r as useSyncMolecule};
1
+ import { useAtomEffect } from "./use-atom-effect.mjs";
2
+ import { useHydrateMolecule } from "./use-hydrate-molecule.mjs";
3
+ import { usePrepareAtoms } from "./use-prepare-atoms.mjs";
4
+ import { useSyncMolecule } from "./use-sync-molecule.mjs";
5
+
6
+ export { useAtomEffect, useHydrateMolecule, usePrepareAtoms, useSyncMolecule };
@@ -1 +1,17 @@
1
- const e=require("../atoms/atom-with-effect.cjs");let t=require("jotai/utils"),n=require("@stryke/hooks/use-memo-stable"),r=require("jotai/react");function i(i,a=[]){(0,r.useAtomValue)((0,t.loadable)((0,n.useMemoStable)(()=>e.atomWithEffect(i),a)))}exports.useAtomEffect=i;
1
+ const require_atom_with_effect = require("../atoms/atom-with-effect.cjs");
2
+ let jotai_utils = require("jotai/utils");
3
+ let _stryke_hooks_use_memo_stable = require("@stryke/hooks/use-memo-stable");
4
+ let jotai_react = require("jotai/react");
5
+
6
+ //#region src/base/hooks/use-atom-effect.ts
7
+ /**
8
+ * A hook that runs a side effect when the component mounts.
9
+ *
10
+ * @param effectFn - The side effect function.
11
+ */
12
+ function useAtomEffect(effectFn, deps = []) {
13
+ (0, jotai_react.useAtomValue)((0, jotai_utils.loadable)((0, _stryke_hooks_use_memo_stable.useMemoStable)(() => require_atom_with_effect.atomWithEffect(effectFn), deps)));
14
+ }
15
+
16
+ //#endregion
17
+ exports.useAtomEffect = useAtomEffect;
@@ -1,2 +1,18 @@
1
- import{atomWithEffect as e}from"../atoms/atom-with-effect.mjs";import{loadable as t}from"jotai/utils";import{useMemoStable as n}from"@stryke/hooks/use-memo-stable";import{useAtomValue as r}from"jotai/react";function i(i,a=[]){r(t(n(()=>e(i),a)))}export{i as useAtomEffect};
1
+ import { atomWithEffect } from "../atoms/atom-with-effect.mjs";
2
+ import { loadable } from "jotai/utils";
3
+ import { useMemoStable } from "@stryke/hooks/use-memo-stable";
4
+ import { useAtomValue } from "jotai/react";
5
+
6
+ //#region src/base/hooks/use-atom-effect.ts
7
+ /**
8
+ * A hook that runs a side effect when the component mounts.
9
+ *
10
+ * @param effectFn - The side effect function.
11
+ */
12
+ function useAtomEffect(effectFn, deps = []) {
13
+ useAtomValue(loadable(useMemoStable(() => atomWithEffect(effectFn), deps)));
14
+ }
15
+
16
+ //#endregion
17
+ export { useAtomEffect };
2
18
  //# sourceMappingURL=use-atom-effect.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-atom-effect.mjs","names":["useAtomEffect","useAtomValue","loadable","useMemoStable","atomWithEffect","effectFn","deps"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"use-atom-effect.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,17 @@
1
- let e=require("jotai/utils");const t=(t,n,r)=>{let i=[];for(let e of Object.keys(t)){let r=n[e];r!==void 0&&i.push([t[e],r])}(0,e.useHydrateAtoms)(i,{store:r})};exports.useHydrateMolecule=t;
1
+ let jotai_utils = require("jotai/utils");
2
+
3
+ //#region src/base/hooks/use-hydrate-molecule.ts
4
+ /**
5
+ * Hydrate atoms with initial values for SSR.
6
+ */
7
+ const useHydrateMolecule = (atoms, initialValues, store) => {
8
+ const values = [];
9
+ for (const key of Object.keys(atoms)) {
10
+ const initialValue = initialValues[key];
11
+ if (initialValue !== void 0) values.push([atoms[key], initialValue]);
12
+ }
13
+ (0, jotai_utils.useHydrateAtoms)(values, { store });
14
+ };
15
+
16
+ //#endregion
17
+ exports.useHydrateMolecule = useHydrateMolecule;
@@ -1,2 +1,18 @@
1
- import{useHydrateAtoms as e}from"jotai/utils";const t=(t,n,r)=>{let i=[];for(let e of Object.keys(t)){let r=n[e];r!==void 0&&i.push([t[e],r])}e(i,{store:r})};export{t as useHydrateMolecule};
1
+ import { useHydrateAtoms } from "jotai/utils";
2
+
3
+ //#region src/base/hooks/use-hydrate-molecule.ts
4
+ /**
5
+ * Hydrate atoms with initial values for SSR.
6
+ */
7
+ const useHydrateMolecule = (atoms, initialValues, store) => {
8
+ const values = [];
9
+ for (const key of Object.keys(atoms)) {
10
+ const initialValue = initialValues[key];
11
+ if (initialValue !== void 0) values.push([atoms[key], initialValue]);
12
+ }
13
+ useHydrateAtoms(values, { store });
14
+ };
15
+
16
+ //#endregion
17
+ export { useHydrateMolecule };
2
18
  //# sourceMappingURL=use-hydrate-molecule.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-hydrate-molecule.mjs","names":["useHydrateMolecule","values","key","atoms","initialValue","initialValues","useHydrateAtoms"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"use-hydrate-molecule.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,20 @@
1
- let e=require("jotai/vanilla"),t=require("react"),n=require("jotai/react");function r(e,n=(e,t)=>e===t){let[r,i]=(0,t.useState)(e),a=e.length!==r.length||e.some((e,t)=>!n(e,r[t]));return a&&i(e),a?e:r}function i(i,a){let o=r(i);(0,n.useAtomValue)((0,t.useMemo)(()=>(0,e.atom)(e=>{o.map(t=>e(t))}),[o]),a)}exports.usePrepareAtoms=i;
1
+ let jotai_vanilla = require("jotai/vanilla");
2
+ let react = require("react");
3
+ let jotai_react = require("jotai/react");
4
+
5
+ //#region src/base/hooks/use-prepare-atoms.ts
6
+ function useMemoList(list, compareFn = (a, b) => a === b) {
7
+ const [state, setState] = (0, react.useState)(list);
8
+ const listChanged = list.length !== state.length || list.some((arg, index) => !compareFn(arg, state[index]));
9
+ if (listChanged) setState(list);
10
+ return listChanged ? list : state;
11
+ }
12
+ function usePrepareAtoms(atoms, options) {
13
+ const stableAtoms = useMemoList(atoms);
14
+ (0, jotai_react.useAtomValue)((0, react.useMemo)(() => (0, jotai_vanilla.atom)((get) => {
15
+ stableAtoms.map((stableAtom) => get(stableAtom));
16
+ }), [stableAtoms]), options);
17
+ }
18
+
19
+ //#endregion
20
+ exports.usePrepareAtoms = usePrepareAtoms;
@@ -1,2 +1,21 @@
1
- import{atom as e}from"jotai/vanilla";import{useMemo as t,useState as n}from"react";import{useAtomValue as r}from"jotai/react";function i(e,t=(e,t)=>e===t){let[r,i]=n(e),a=e.length!==r.length||e.some((e,n)=>!t(e,r[n]));return a&&i(e),a?e:r}function a(n,a){let o=i(n);r(t(()=>e(e=>{o.map(t=>e(t))}),[o]),a)}export{a as usePrepareAtoms};
1
+ import { atom } from "jotai/vanilla";
2
+ import { useMemo, useState } from "react";
3
+ import { useAtomValue } from "jotai/react";
4
+
5
+ //#region src/base/hooks/use-prepare-atoms.ts
6
+ function useMemoList(list, compareFn = (a, b) => a === b) {
7
+ const [state, setState] = useState(list);
8
+ const listChanged = list.length !== state.length || list.some((arg, index) => !compareFn(arg, state[index]));
9
+ if (listChanged) setState(list);
10
+ return listChanged ? list : state;
11
+ }
12
+ function usePrepareAtoms(atoms, options) {
13
+ const stableAtoms = useMemoList(atoms);
14
+ useAtomValue(useMemo(() => atom((get) => {
15
+ stableAtoms.map((stableAtom) => get(stableAtom));
16
+ }), [stableAtoms]), options);
17
+ }
18
+
19
+ //#endregion
20
+ export { usePrepareAtoms };
2
21
  //# sourceMappingURL=use-prepare-atoms.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-prepare-atoms.mjs","names":["useMemoList","a","b","state","setState","useState","list","listChanged","compareFn","arg","index","usePrepareAtoms","stableAtoms","atoms","useAtomValue","useMemo","atom","get","stableAtom","options"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"use-prepare-atoms.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,37 @@
1
- const e=require("../utilities/is-atom.cjs");let t=require("@stryke/helpers/is-equal"),n=require("jotai"),r=require("react");const i=e=>{let n=(0,r.useRef)(e);return(0,t.isEqual)(n.current,e)||(n.current=e),n.current},a=(t,a,o)=>{for(let s of Object.keys(t)){let c=a[s];e.isAtom(c)&&(c=(0,n.useAtomValue)(c)),c=i(c);let l=(0,n.useSetAtom)(t[s],{store:o});(0,r.useEffect)(()=>{c!==void 0&&l(c)},[l,c])}};exports.useSyncMolecule=a;
1
+ const require_is_atom = require("../utilities/is-atom.cjs");
2
+ let _stryke_helpers_is_equal = require("@stryke/helpers/is-equal");
3
+ let jotai = require("jotai");
4
+ let react = require("react");
5
+
6
+ //#region src/base/hooks/use-sync-molecule.ts
7
+ /**
8
+ * Keep the previous reference while `value` is deeply equal to it, so callers
9
+ * passing a fresh object literal each render do not re-trigger effects.
10
+ */
11
+ const useDeepStable = (value) => {
12
+ const ref = (0, react.useRef)(value);
13
+ if (!(0, _stryke_helpers_is_equal.isEqual)(ref.current, value)) ref.current = value;
14
+ return ref.current;
15
+ };
16
+ /**
17
+ * Update atoms with new values on changes.
18
+ *
19
+ * @remarks
20
+ * Values are compared deeply, so a provider that re-renders with equivalent
21
+ * `initialState` does not write to its atoms again. Without this, two
22
+ * providers sharing a molecule scope overwrite each other on every render.
23
+ */
24
+ const useSyncMolecule = (atoms, values, store) => {
25
+ for (const key of Object.keys(atoms)) {
26
+ let value = values[key];
27
+ if (require_is_atom.isAtom(value)) value = (0, jotai.useAtomValue)(value);
28
+ value = useDeepStable(value);
29
+ const setAtom = (0, jotai.useSetAtom)(atoms[key], { store });
30
+ (0, react.useEffect)(() => {
31
+ if (value !== void 0) setAtom(value);
32
+ }, [setAtom, value]);
33
+ }
34
+ };
35
+
36
+ //#endregion
37
+ exports.useSyncMolecule = useSyncMolecule;