@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,38 @@
1
- import{isAtom as e}from"../utilities/is-atom.mjs";import{isEqual as t}from"@stryke/helpers/is-equal";import{useAtomValue as n,useSetAtom as r}from"jotai";import{useEffect as i,useRef as a}from"react";const o=e=>{let n=a(e);return t(n.current,e)||(n.current=e),n.current},s=(t,a,s)=>{for(let c of Object.keys(t)){let l=a[c];e(l)&&(l=n(l)),l=o(l);let u=r(t[c],{store:s});i(()=>{l!==void 0&&u(l)},[u,l])}};export{s as useSyncMolecule};
1
+ import { isAtom } from "../utilities/is-atom.mjs";
2
+ import { isEqual } from "@stryke/helpers/is-equal";
3
+ import { useAtomValue, useSetAtom } from "jotai";
4
+ import { useEffect, useRef } from "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 = useRef(value);
13
+ if (!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 (isAtom(value)) value = useAtomValue(value);
28
+ value = useDeepStable(value);
29
+ const setAtom = useSetAtom(atoms[key], { store });
30
+ useEffect(() => {
31
+ if (value !== void 0) setAtom(value);
32
+ }, [setAtom, value]);
33
+ }
34
+ };
35
+
36
+ //#endregion
37
+ export { useSyncMolecule };
2
38
  //# sourceMappingURL=use-sync-molecule.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-sync-molecule.mjs","names":["useDeepStable","ref","useRef","value","isEqual","useSyncMolecule","key","atoms","values","isAtom","useAtomValue","setAtom","useSetAtom","useEffect"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"use-sync-molecule.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,47 @@
1
- const e=require("./utilities/set-atom-debug.cjs"),t=require("./atoms/atom-with-broadcast.cjs"),n=require("./atoms/atom-with-compare.cjs"),r=require("./atoms/atom-with-wrapper.cjs"),i=require("./atoms/atom-with-debounce.cjs"),a=require("./atoms/atom-with-effect.cjs"),o=require("./atoms/atom-with-listeners.cjs"),s=require("./atoms/atom-with-pending.cjs"),c=require("./atoms/atom-with-refresh.cjs"),l=require("./atoms/atom-with-refresh-and-default.cjs"),u=require("./atoms/atom-with-toggle.cjs"),d=require("./utilities/create-web-storage.cjs"),f=require("./atoms/atom-with-web-storage.cjs");require("./atoms/index.cjs");const p=require("./hooks/use-atom-effect.cjs"),m=require("./hooks/use-hydrate-molecule.cjs"),h=require("./hooks/use-prepare-atoms.cjs"),g=require("./hooks/use-sync-molecule.cjs");require("./hooks/index.cjs");const _=require("./utilities/create-molecule.cjs"),v=require("./utilities/debounce.cjs");require("./utilities/index.cjs"),exports.DEFAULT_SCOPE=_.DEFAULT_SCOPE,exports.atomWithBroadcast=t.atomWithBroadcast,exports.atomWithCompare=n.atomWithCompare,exports.atomWithDebounce=i.atomWithDebounce,exports.atomWithEffect=a.atomWithEffect,exports.atomWithListeners=o.atomWithListeners,exports.atomWithPending=s.atomWithPending,exports.atomWithRefresh=c.atomWithRefresh,exports.atomWithRefreshAndDefault=l.atomWithRefreshAndDefault,exports.atomWithToggle=u.atomWithToggle,exports.atomWithWebStorage=f.atomWithWebStorage,exports.atomWithWrapper=r.atomWithWrapper,exports.createMoleculeApi=_.createMoleculeApi,exports.createScope=_.createScope,exports.createWebStorage=d.createWebStorage,exports.debounce=v.debounce,exports.getWebStorage=f.getWebStorage,exports.setAtomDebugLabel=e.setAtomDebugLabel,exports.setAtomDebugPrivate=e.setAtomDebugPrivate,exports.use=_.use,exports.useAtomEffect=p.useAtomEffect,exports.useHydrateMolecule=m.useHydrateMolecule,exports.usePrepareAtoms=h.usePrepareAtoms,exports.useSyncMolecule=g.useSyncMolecule;
1
+ const require_set_atom_debug = require("./utilities/set-atom-debug.cjs");
2
+ const require_atom_with_broadcast = require("./atoms/atom-with-broadcast.cjs");
3
+ const require_atom_with_compare = require("./atoms/atom-with-compare.cjs");
4
+ const require_atom_with_wrapper = require("./atoms/atom-with-wrapper.cjs");
5
+ const require_atom_with_debounce = require("./atoms/atom-with-debounce.cjs");
6
+ const require_atom_with_effect = require("./atoms/atom-with-effect.cjs");
7
+ const require_atom_with_listeners = require("./atoms/atom-with-listeners.cjs");
8
+ const require_atom_with_pending = require("./atoms/atom-with-pending.cjs");
9
+ const require_atom_with_refresh = require("./atoms/atom-with-refresh.cjs");
10
+ const require_atom_with_refresh_and_default = require("./atoms/atom-with-refresh-and-default.cjs");
11
+ const require_atom_with_toggle = require("./atoms/atom-with-toggle.cjs");
12
+ const require_create_web_storage = require("./utilities/create-web-storage.cjs");
13
+ const require_atom_with_web_storage = require("./atoms/atom-with-web-storage.cjs");
14
+ require("./atoms/index.cjs");
15
+ const require_use_atom_effect = require("./hooks/use-atom-effect.cjs");
16
+ const require_use_hydrate_molecule = require("./hooks/use-hydrate-molecule.cjs");
17
+ const require_use_prepare_atoms = require("./hooks/use-prepare-atoms.cjs");
18
+ const require_use_sync_molecule = require("./hooks/use-sync-molecule.cjs");
19
+ require("./hooks/index.cjs");
20
+ const require_create_molecule = require("./utilities/create-molecule.cjs");
21
+ const require_debounce = require("./utilities/debounce.cjs");
22
+ require("./utilities/index.cjs");
23
+
24
+ exports.DEFAULT_SCOPE = require_create_molecule.DEFAULT_SCOPE;
25
+ exports.atomWithBroadcast = require_atom_with_broadcast.atomWithBroadcast;
26
+ exports.atomWithCompare = require_atom_with_compare.atomWithCompare;
27
+ exports.atomWithDebounce = require_atom_with_debounce.atomWithDebounce;
28
+ exports.atomWithEffect = require_atom_with_effect.atomWithEffect;
29
+ exports.atomWithListeners = require_atom_with_listeners.atomWithListeners;
30
+ exports.atomWithPending = require_atom_with_pending.atomWithPending;
31
+ exports.atomWithRefresh = require_atom_with_refresh.atomWithRefresh;
32
+ exports.atomWithRefreshAndDefault = require_atom_with_refresh_and_default.atomWithRefreshAndDefault;
33
+ exports.atomWithToggle = require_atom_with_toggle.atomWithToggle;
34
+ exports.atomWithWebStorage = require_atom_with_web_storage.atomWithWebStorage;
35
+ exports.atomWithWrapper = require_atom_with_wrapper.atomWithWrapper;
36
+ exports.createMoleculeApi = require_create_molecule.createMoleculeApi;
37
+ exports.createScope = require_create_molecule.createScope;
38
+ exports.createWebStorage = require_create_web_storage.createWebStorage;
39
+ exports.debounce = require_debounce.debounce;
40
+ exports.getWebStorage = require_atom_with_web_storage.getWebStorage;
41
+ exports.setAtomDebugLabel = require_set_atom_debug.setAtomDebugLabel;
42
+ exports.setAtomDebugPrivate = require_set_atom_debug.setAtomDebugPrivate;
43
+ exports.use = require_create_molecule.use;
44
+ exports.useAtomEffect = require_use_atom_effect.useAtomEffect;
45
+ exports.useHydrateMolecule = require_use_hydrate_molecule.useHydrateMolecule;
46
+ exports.usePrepareAtoms = require_use_prepare_atoms.usePrepareAtoms;
47
+ exports.useSyncMolecule = require_use_sync_molecule.useSyncMolecule;
@@ -1 +1,24 @@
1
- import{setAtomDebugLabel as e,setAtomDebugPrivate as t}from"./utilities/set-atom-debug.mjs";import{atomWithBroadcast as n}from"./atoms/atom-with-broadcast.mjs";import{atomWithCompare as r}from"./atoms/atom-with-compare.mjs";import{atomWithWrapper as i}from"./atoms/atom-with-wrapper.mjs";import{atomWithDebounce as a}from"./atoms/atom-with-debounce.mjs";import{atomWithEffect as o}from"./atoms/atom-with-effect.mjs";import{atomWithListeners as s}from"./atoms/atom-with-listeners.mjs";import{atomWithPending as c}from"./atoms/atom-with-pending.mjs";import{atomWithRefresh as l}from"./atoms/atom-with-refresh.mjs";import{atomWithRefreshAndDefault as u}from"./atoms/atom-with-refresh-and-default.mjs";import{atomWithToggle as d}from"./atoms/atom-with-toggle.mjs";import{createWebStorage as f}from"./utilities/create-web-storage.mjs";import{atomWithWebStorage as p,getWebStorage as m}from"./atoms/atom-with-web-storage.mjs";import"./atoms/index.mjs";import{useAtomEffect as h}from"./hooks/use-atom-effect.mjs";import{useHydrateMolecule as g}from"./hooks/use-hydrate-molecule.mjs";import{usePrepareAtoms as _}from"./hooks/use-prepare-atoms.mjs";import{useSyncMolecule as v}from"./hooks/use-sync-molecule.mjs";import"./hooks/index.mjs";import{DEFAULT_SCOPE as y,createMoleculeApi as b,createScope as x,use as S}from"./utilities/create-molecule.mjs";import{debounce as C}from"./utilities/debounce.mjs";import"./utilities/index.mjs";export{y as DEFAULT_SCOPE,n as atomWithBroadcast,r as atomWithCompare,a as atomWithDebounce,o as atomWithEffect,s as atomWithListeners,c as atomWithPending,l as atomWithRefresh,u as atomWithRefreshAndDefault,d as atomWithToggle,p as atomWithWebStorage,i as atomWithWrapper,b as createMoleculeApi,x as createScope,f as createWebStorage,C as debounce,m as getWebStorage,e as setAtomDebugLabel,t as setAtomDebugPrivate,S as use,h as useAtomEffect,g as useHydrateMolecule,_ as usePrepareAtoms,v as useSyncMolecule};
1
+ import { setAtomDebugLabel, setAtomDebugPrivate } from "./utilities/set-atom-debug.mjs";
2
+ import { atomWithBroadcast } from "./atoms/atom-with-broadcast.mjs";
3
+ import { atomWithCompare } from "./atoms/atom-with-compare.mjs";
4
+ import { atomWithWrapper } from "./atoms/atom-with-wrapper.mjs";
5
+ import { atomWithDebounce } from "./atoms/atom-with-debounce.mjs";
6
+ import { atomWithEffect } from "./atoms/atom-with-effect.mjs";
7
+ import { atomWithListeners } from "./atoms/atom-with-listeners.mjs";
8
+ import { atomWithPending } from "./atoms/atom-with-pending.mjs";
9
+ import { atomWithRefresh } from "./atoms/atom-with-refresh.mjs";
10
+ import { atomWithRefreshAndDefault } from "./atoms/atom-with-refresh-and-default.mjs";
11
+ import { atomWithToggle } from "./atoms/atom-with-toggle.mjs";
12
+ import { createWebStorage } from "./utilities/create-web-storage.mjs";
13
+ import { atomWithWebStorage, getWebStorage } from "./atoms/atom-with-web-storage.mjs";
14
+ import "./atoms/index.mjs";
15
+ import { useAtomEffect } from "./hooks/use-atom-effect.mjs";
16
+ import { useHydrateMolecule } from "./hooks/use-hydrate-molecule.mjs";
17
+ import { usePrepareAtoms } from "./hooks/use-prepare-atoms.mjs";
18
+ import { useSyncMolecule } from "./hooks/use-sync-molecule.mjs";
19
+ import "./hooks/index.mjs";
20
+ import { DEFAULT_SCOPE, createMoleculeApi, createScope, use } from "./utilities/create-molecule.mjs";
21
+ import { debounce } from "./utilities/debounce.mjs";
22
+ import "./utilities/index.mjs";
23
+
24
+ export { DEFAULT_SCOPE, atomWithBroadcast, atomWithCompare, atomWithDebounce, atomWithEffect, atomWithListeners, atomWithPending, atomWithRefresh, atomWithRefreshAndDefault, atomWithToggle, atomWithWebStorage, atomWithWrapper, createMoleculeApi, createScope, createWebStorage, debounce, getWebStorage, setAtomDebugLabel, setAtomDebugPrivate, use, useAtomEffect, useHydrateMolecule, usePrepareAtoms, useSyncMolecule };
@@ -1,4 +1,105 @@
1
- const e=require("./is-atom.cjs"),t=require("./set-atom-debug.cjs"),n=require("../hooks/use-sync-molecule.cjs");let r=require("@stryke/type-checks/is-function"),i=require("jotai/utils"),a=require("jotai"),o=require("react"),s=require("@stryke/type-checks/is-string"),c=require("bunshi"),l=require("bunshi/react");const u=`__global__`;function d(e=u,t){return(0,c.createScope)(e,t)}function f(e){return(0,c.use)(e)}function p(u,f){let p=!f.scope||(0,s.isString)(f.scope)?d(f.scope??`__global__`):f.scope,m=(0,c.molecule)((n,i)=>{let o=i(p),s=u(o);s.__scope=(0,a.atom)(()=>o),s.__typename=(0,a.atom)(()=>f.type);for(let n of Object.keys(s))e.isAtom(s[n])&&t.setAtomDebugLabel(s[n],`${f.type}/${o}:${String(n)}`);return(0,c.onMount)(()=>{if(f.onMount){let e=f.onMount(s);if((0,r.isFunction)(e))return e}}),(0,c.onUnmount)(()=>{f.onUnmount&&f.onUnmount()}),s}),h=e=>(0,l.useMolecule)(m,e),g=t=>{let n=h(t),r=Object.keys(n);return new Proxy({},{get(t,s){if(r.filter(e=>e!==`__scope`&&e!==`__typename`).includes(s)){let t=s;return{get:()=>(0,a.useAtomValue)(n[t]),set:e.isWritableAtom(n[t])?()=>(0,a.useSetAtom)(n[t]):void 0,reset:e.isResetAtom(n[t])?()=>{let e=(0,a.useSetAtom)(n[t]);return(0,o.useCallback)(()=>{e(i.RESET)},[e])}:void 0}}}})};function _({initialState:e}){let t=h();return n.useSyncMolecule(t,e),null}function v({children:e,scope:t,initialState:n,...r}){return<l.ScopeProvider{...r} scope={p} value={t}>
2
- {n&&<_ initialState={n}/>}
3
- {e}
4
- </l.ScopeProvider>}return{Scope:p,Provider:v,Molecule:m,useMolecule:h,use:g}}exports.DEFAULT_SCOPE=u,exports.createMoleculeApi=p,exports.createScope=d,exports.use=f;
1
+ const require_is_atom = require("./is-atom.cjs");
2
+ const require_set_atom_debug = require("./set-atom-debug.cjs");
3
+ const require_use_hydrate_molecule = require("../hooks/use-hydrate-molecule.cjs");
4
+ const require_use_sync_molecule = require("../hooks/use-sync-molecule.cjs");
5
+ let _stryke_type_checks_is_function = require("@stryke/type-checks/is-function");
6
+ let jotai_utils = require("jotai/utils");
7
+ let jotai = require("jotai");
8
+ let react = require("react");
9
+ let _stryke_type_checks_is_string = require("@stryke/type-checks/is-string");
10
+ let bunshi = require("bunshi");
11
+ let Bunshi_react = require("bunshi/react");
12
+
13
+ //#region src/base/utilities/create-molecule.tsx
14
+ const DEFAULT_SCOPE = "__global__";
15
+ /**
16
+ * Create a new Scope with the given default value.
17
+ *
18
+ * @param defaultValue - The default value for the Scope.
19
+ * @param options - The options for the Scope.
20
+ * @returns The new Scope.
21
+ */
22
+ function createScope(defaultValue = DEFAULT_SCOPE, options) {
23
+ return (0, bunshi.createScope)(defaultValue, options);
24
+ }
25
+ /**
26
+ * Use a Molecule or Scope in a molecule definition.
27
+ *
28
+ * @param dependency - The Molecule or Scope to use.
29
+ * @returns The value of the Molecule or Scope.
30
+ */
31
+ function use(dependency) {
32
+ return (0, bunshi.use)(dependency);
33
+ }
34
+ /**
35
+ * Create a new Molecule with the given constructor function.
36
+ *
37
+ * @param constructFn - The constructor function for the Molecule.
38
+ * @param options - The options for the Molecule.
39
+ * @returns The new Molecule.
40
+ */
41
+ function createMoleculeApi(constructFn, options) {
42
+ const Scope = !options.scope || (0, _stryke_type_checks_is_string.isString)(options.scope) ? createScope(options.scope ?? "__global__") : options.scope;
43
+ const Molecule = (0, bunshi.molecule)((mol, scope) => {
44
+ const currentScope = scope(Scope);
45
+ const result = constructFn(currentScope);
46
+ result.__scope = (0, jotai.atom)(() => currentScope);
47
+ result.__typename = (0, jotai.atom)(() => options.type);
48
+ for (const key of Object.keys(result)) if (require_is_atom.isAtom(result[key])) require_set_atom_debug.setAtomDebugLabel(result[key], `${options.type}/${currentScope}:${String(key)}`);
49
+ (0, bunshi.onMount)(() => {
50
+ if (options.onMount) {
51
+ const unmount = options.onMount(result);
52
+ if ((0, _stryke_type_checks_is_function.isFunction)(unmount)) return unmount;
53
+ }
54
+ });
55
+ (0, bunshi.onUnmount)(() => {
56
+ if (options.onUnmount) options.onUnmount();
57
+ });
58
+ return result;
59
+ });
60
+ const useMolecule = (opts) => (0, Bunshi_react.useMolecule)(Molecule, opts);
61
+ const use = (opts) => {
62
+ const atoms = useMolecule(opts);
63
+ const keys = Object.keys(atoms);
64
+ return new Proxy({}, { get(_, proxyKey) {
65
+ if (keys.filter((k) => k !== "__scope" && k !== "__typename").includes(proxyKey)) {
66
+ const key = proxyKey;
67
+ return {
68
+ get: () => (0, jotai.useAtomValue)(atoms[key]),
69
+ set: require_is_atom.isWritableAtom(atoms[key]) ? () => (0, jotai.useSetAtom)(atoms[key]) : void 0,
70
+ reset: require_is_atom.isResetAtom(atoms[key]) ? () => {
71
+ const setAtom = (0, jotai.useSetAtom)(atoms[key]);
72
+ return (0, react.useCallback)(() => {
73
+ setAtom(jotai_utils.RESET);
74
+ }, [setAtom]);
75
+ } : void 0
76
+ };
77
+ }
78
+ } });
79
+ };
80
+ function MoleculeStateManager({ initialState }) {
81
+ const atoms = useMolecule();
82
+ require_use_hydrate_molecule.useHydrateMolecule(atoms, Object.fromEntries(Object.entries(initialState).filter(([, value]) => !require_is_atom.isAtom(value))));
83
+ require_use_sync_molecule.useSyncMolecule(atoms, initialState);
84
+ return null;
85
+ }
86
+ function Provider({ children, scope, initialState, ...props }) {
87
+ return <Bunshi_react.ScopeProvider {...props} scope={Scope} value={scope}>
88
+ {initialState && <MoleculeStateManager initialState={initialState} />}
89
+ {children}
90
+ </Bunshi_react.ScopeProvider>;
91
+ }
92
+ return {
93
+ Scope,
94
+ Provider,
95
+ Molecule,
96
+ useMolecule,
97
+ use
98
+ };
99
+ }
100
+
101
+ //#endregion
102
+ exports.DEFAULT_SCOPE = DEFAULT_SCOPE;
103
+ exports.createMoleculeApi = createMoleculeApi;
104
+ exports.createScope = createScope;
105
+ exports.use = use;
@@ -1 +1 @@
1
- {"version":3,"file":"create-molecule.d.cts","names":["MoleculeScopeOptions","MoleculeScopeOptionsBase"],"sources":["../../../src/base/utilities/create-molecule.tsx"],"mappings":";;;;;KAoDY,SAAS;EACnB;IACE;KAEQ,oBAAoB;EAC9B;EACA;;KAGU,cACV,eAAe,qBAAqB,UAAU,wBAC5C,oBAAoB;cAEX;;;;;;;;iBASG,YACd,uBACA;EACE;IACD;;;;;;;iBAWa,IAAI,QAClB,YAAY,SAAS,UAAU,cAAc,UAC5C;KAIE,iBACH,eAAe,qBAAqB,UAAU,2BAE7C,cAAc;EACb,KAAK,OAAO,cAAc,WAAW,WAChC,OAAOA,2BAAyB;EAErC,KAAK,OAAO,cAAc,mBAClB,eACA,aACA,YAEH,OAAOA,+BAA6B,MAAM,UAAU;EAEzD,OAAO,YAAY,OAAO,uBACrB,OAAOA;;KAKJA,yBAAuBC;UAElB,YACf,eAAe,qBAAqB,UAAU;EAE9C,UAAU,SAAS,cAAc;EACjC,UAAU,MAAM,GAAG,sBAAsB;EACzC,OAAO;EACP,cAAc,OAAOD,2BAAyB,cAAc;EAC5D,MAAM,OAAOA,2BAAyB,iBAAiB;;KAG7C,iBAAiB,qBAAqB,oBAChD,WAAW;KAED,sBACV,eAAe,qBAAqB,UAAU,wBAC5C,KAAK;EACP;EACA,eAAe,QAAQ,wBAAwB;;KAGrC;KACA,cACV,eAAe,qBAAqB,UAAU,yBAC3C,OAAO,cAAc,YAAY;UAErB,gBACf,eAAe,qBAAqB,UAAU;EAE9C;EACA,QAAQ;EACR,UAAU,cAAc;EACxB,YAAY;;;;;;;;;iBAUE,kBACd,eAAe,qBAAqB,UAAU,sBAE9C,cAAc,kBAAkB,QAChC,SAAS,gBAAgB,UACxB,YAAY"}
1
+ {"version":3,"file":"create-molecule.d.cts","names":["MoleculeScopeOptions","MoleculeScopeOptionsBase"],"sources":["../../../src/base/utilities/create-molecule.tsx"],"mappings":";;;;;KAqDY,SAAS;EACnB;IACE;KAEQ,oBAAoB;EAC9B;EACA;;KAGU,cACV,eAAe,qBAAqB,UAAU,wBAC5C,oBAAoB;cAEX;;;;;;;;iBASG,YACd,uBACA;EACE;IACD;;;;;;;iBAWa,IAAI,QAClB,YAAY,SAAS,UAAU,cAAc,UAC5C;KAIE,iBACH,eAAe,qBAAqB,UAAU,2BAE7C,cAAc;EACb,KAAK,OAAO,cAAc,WAAW,WAChC,OAAOA,2BAAyB;EAErC,KAAK,OAAO,cAAc,mBAClB,eACA,aACA,YAEH,OAAOA,+BAA6B,MAAM,UAAU;EAEzD,OAAO,YAAY,OAAO,uBACrB,OAAOA;;KAKJA,yBAAuBC;UAElB,YACf,eAAe,qBAAqB,UAAU;EAE9C,UAAU,SAAS,cAAc;EACjC,UAAU,MAAM,GAAG,sBAAsB;EACzC,OAAO;EACP,cAAc,OAAOD,2BAAyB,cAAc;EAC5D,MAAM,OAAOA,2BAAyB,iBAAiB;;KAG7C,iBAAiB,qBAAqB,oBAChD,WAAW;KAED,sBACV,eAAe,qBAAqB,UAAU,wBAC5C,KAAK;EACP;EACA,eAAe,QAAQ,wBAAwB;;KAGrC;KACA,cACV,eAAe,qBAAqB,UAAU,yBAC3C,OAAO,cAAc,YAAY;UAErB,gBACf,eAAe,qBAAqB,UAAU;EAE9C;EACA,QAAQ;EACR,UAAU,cAAc;EACxB,YAAY;;;;;;;;;iBAUE,kBACd,eAAe,qBAAqB,UAAU,sBAE9C,cAAc,kBAAkB,QAChC,SAAS,gBAAgB,UACxB,YAAY"}
@@ -1,5 +1,103 @@
1
- import{isAtom as e,isResetAtom as t,isWritableAtom as n}from"./is-atom.mjs";import{setAtomDebugLabel as r}from"./set-atom-debug.mjs";import{useSyncMolecule as i}from"../hooks/use-sync-molecule.mjs";import{isFunction as a}from"@stryke/type-checks/is-function";import{RESET as o}from"jotai/utils";import{atom as s,useAtomValue as c,useSetAtom as l}from"jotai";import{useCallback as u}from"react";import{isString as d}from"@stryke/type-checks/is-string";import{createScope as f,molecule as p,onMount as m,onUnmount as h,use as g}from"bunshi";import{ScopeProvider as _,useMolecule as v}from"bunshi/react";const y=`__global__`;function b(e=y,t){return f(e,t)}function x(e){return g(e)}function S(f,g){let y=!g.scope||d(g.scope)?b(g.scope??`__global__`):g.scope,x=p((t,n)=>{let i=n(y),o=f(i);o.__scope=s(()=>i),o.__typename=s(()=>g.type);for(let t of Object.keys(o))e(o[t])&&r(o[t],`${g.type}/${i}:${String(t)}`);return m(()=>{if(g.onMount){let e=g.onMount(o);if(a(e))return e}}),h(()=>{g.onUnmount&&g.onUnmount()}),o}),S=e=>v(x,e),C=e=>{let r=S(e),i=Object.keys(r);return new Proxy({},{get(e,a){if(i.filter(e=>e!==`__scope`&&e!==`__typename`).includes(a)){let e=a;return{get:()=>c(r[e]),set:n(r[e])?()=>l(r[e]):void 0,reset:t(r[e])?()=>{let t=l(r[e]);return u(()=>{t(o)},[t])}:void 0}}}})};function w({initialState:e}){let t=S();return i(t,e),null}function T({children:e,scope:t,initialState:n,...r}){return<_{...r} scope={y} value={t}>
2
- {n&&<w initialState={n}/>}
3
- {e}
4
- </_>}return{Scope:y,Provider:T,Molecule:x,useMolecule:S,use:C}}export{y as DEFAULT_SCOPE,S as createMoleculeApi,b as createScope,x as use};
1
+ import { isAtom, isResetAtom, isWritableAtom } from "./is-atom.mjs";
2
+ import { setAtomDebugLabel } from "./set-atom-debug.mjs";
3
+ import { useHydrateMolecule } from "../hooks/use-hydrate-molecule.mjs";
4
+ import { useSyncMolecule } from "../hooks/use-sync-molecule.mjs";
5
+ import { isFunction } from "@stryke/type-checks/is-function";
6
+ import { RESET } from "jotai/utils";
7
+ import { atom, useAtomValue, useSetAtom } from "jotai";
8
+ import { useCallback } from "react";
9
+ import { isString } from "@stryke/type-checks/is-string";
10
+ import { createScope, molecule, onMount, onUnmount, use } from "bunshi";
11
+ import { ScopeProvider, useMolecule } from "bunshi/react";
12
+
13
+ //#region src/base/utilities/create-molecule.tsx
14
+ const DEFAULT_SCOPE = "__global__";
15
+ /**
16
+ * Create a new Scope with the given default value.
17
+ *
18
+ * @param defaultValue - The default value for the Scope.
19
+ * @param options - The options for the Scope.
20
+ * @returns The new Scope.
21
+ */
22
+ function createScope$1(defaultValue = DEFAULT_SCOPE, options) {
23
+ return createScope(defaultValue, options);
24
+ }
25
+ /**
26
+ * Use a Molecule or Scope in a molecule definition.
27
+ *
28
+ * @param dependency - The Molecule or Scope to use.
29
+ * @returns The value of the Molecule or Scope.
30
+ */
31
+ function use$1(dependency) {
32
+ return use(dependency);
33
+ }
34
+ /**
35
+ * Create a new Molecule with the given constructor function.
36
+ *
37
+ * @param constructFn - The constructor function for the Molecule.
38
+ * @param options - The options for the Molecule.
39
+ * @returns The new Molecule.
40
+ */
41
+ function createMoleculeApi(constructFn, options) {
42
+ const Scope = !options.scope || isString(options.scope) ? createScope$1(options.scope ?? "__global__") : options.scope;
43
+ const Molecule = molecule((mol, scope) => {
44
+ const currentScope = scope(Scope);
45
+ const result = constructFn(currentScope);
46
+ result.__scope = atom(() => currentScope);
47
+ result.__typename = atom(() => options.type);
48
+ for (const key of Object.keys(result)) if (isAtom(result[key])) setAtomDebugLabel(result[key], `${options.type}/${currentScope}:${String(key)}`);
49
+ onMount(() => {
50
+ if (options.onMount) {
51
+ const unmount = options.onMount(result);
52
+ if (isFunction(unmount)) return unmount;
53
+ }
54
+ });
55
+ onUnmount(() => {
56
+ if (options.onUnmount) options.onUnmount();
57
+ });
58
+ return result;
59
+ });
60
+ const useMolecule$1 = (opts) => useMolecule(Molecule, opts);
61
+ const use = (opts) => {
62
+ const atoms = useMolecule$1(opts);
63
+ const keys = Object.keys(atoms);
64
+ return new Proxy({}, { get(_, proxyKey) {
65
+ if (keys.filter((k) => k !== "__scope" && k !== "__typename").includes(proxyKey)) {
66
+ const key = proxyKey;
67
+ return {
68
+ get: () => useAtomValue(atoms[key]),
69
+ set: isWritableAtom(atoms[key]) ? () => useSetAtom(atoms[key]) : void 0,
70
+ reset: isResetAtom(atoms[key]) ? () => {
71
+ const setAtom = useSetAtom(atoms[key]);
72
+ return useCallback(() => {
73
+ setAtom(RESET);
74
+ }, [setAtom]);
75
+ } : void 0
76
+ };
77
+ }
78
+ } });
79
+ };
80
+ function MoleculeStateManager({ initialState }) {
81
+ const atoms = useMolecule$1();
82
+ useHydrateMolecule(atoms, Object.fromEntries(Object.entries(initialState).filter(([, value]) => !isAtom(value))));
83
+ useSyncMolecule(atoms, initialState);
84
+ return null;
85
+ }
86
+ function Provider({ children, scope, initialState, ...props }) {
87
+ return <ScopeProvider {...props} scope={Scope} value={scope}>
88
+ {initialState && <MoleculeStateManager initialState={initialState} />}
89
+ {children}
90
+ </ScopeProvider>;
91
+ }
92
+ return {
93
+ Scope,
94
+ Provider,
95
+ Molecule,
96
+ useMolecule: useMolecule$1,
97
+ use
98
+ };
99
+ }
100
+
101
+ //#endregion
102
+ export { DEFAULT_SCOPE, createMoleculeApi, createScope$1 as createScope, use$1 as use };
5
103
  //# sourceMappingURL=create-molecule.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-molecule.mjs","names":["createScope","createScopeBase","use","useBase","useMolecule","useMoleculeBase","DEFAULT_SCOPE","createScope$1","createScope","defaultValue","options","use$1","use","dependency","createMoleculeApi","Scope","isString","Molecule","molecule","currentScope","scope","result","constructFn","atom","key","isAtom","setAtomDebugLabel","onMount","unmount","isFunction","onUnmount","useMolecule$1","useMolecule","opts","atoms","keys","k","proxyKey","useAtomValue","isWritableAtom","useSetAtom","isResetAtom","setAtom","useCallback","RESET","MoleculeStateManager","useSyncMolecule","initialState","Provider","props","ScopeProvider","children"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"create-molecule.mjs","names":["createScope","createScopeBase","use","useBase","useMolecule","useMoleculeBase"],"sources":[],"mappings":""}
@@ -1 +1,55 @@
1
- let e=require("@stryke/json/storm-json"),t=require("@stryke/type-checks/is-promise");function n(n){let r,i,a={getItem:(e,a)=>{let o=(e=``)=>{if(r!==e){try{let n=o(e);if((0,t.isPromise)(n))return n.then(e=>(i=e,e));i=n}catch{return a}r=e}return i},s=n()?.getItem(e)??void 0;return s&&(0,t.isPromiseLike)(s)?s.then(e=>o(e)):o(s)},removeItem:e=>n()?.removeItem(e),setItem:(t,r)=>n()?.setItem(t,e.StormJSON.stringify(r))};return typeof window<`u`&&typeof window.addEventListener==`function`&&window.Storage&&(a.subscribe=(e,t,r)=>{if(!(n()instanceof window.Storage))return()=>{};let i=i=>{if(i.storageArea===n()&&i.key===e){let e;try{e=JSON.parse(i.newValue||``)}catch{e=r}t(e)}};return window.addEventListener(`storage`,i),()=>{window.removeEventListener(`storage`,i)}}),a}exports.createWebStorage=n;
1
+ let _stryke_json_storm_json = require("@stryke/json/storm-json");
2
+ let _stryke_type_checks_is_promise = require("@stryke/type-checks/is-promise");
3
+
4
+ //#region src/base/utilities/create-web-storage.ts
5
+ function createWebStorage(getStringStorage) {
6
+ let lastStrValue;
7
+ let lastValue;
8
+ const storage = {
9
+ getItem: (key, initialValue) => {
10
+ const parse = (strValue = "") => {
11
+ if (lastStrValue !== strValue) {
12
+ try {
13
+ const nextValue = parse(strValue);
14
+ if ((0, _stryke_type_checks_is_promise.isPromise)(nextValue)) return nextValue.then((result) => {
15
+ lastValue = result;
16
+ return result;
17
+ });
18
+ lastValue = nextValue;
19
+ } catch {
20
+ return initialValue;
21
+ }
22
+ lastStrValue = strValue;
23
+ }
24
+ return lastValue;
25
+ };
26
+ const strValue = getStringStorage()?.getItem(key) ?? void 0;
27
+ if (strValue && (0, _stryke_type_checks_is_promise.isPromiseLike)(strValue)) return strValue.then((value) => parse(value));
28
+ return parse(strValue);
29
+ },
30
+ removeItem: (key) => getStringStorage()?.removeItem(key),
31
+ setItem: (key, newValue) => getStringStorage()?.setItem(key, _stryke_json_storm_json.StormJSON.stringify(newValue))
32
+ };
33
+ if (typeof window !== "undefined" && typeof window.addEventListener === "function" && window.Storage) storage.subscribe = (key, callback, initialValue) => {
34
+ if (!(getStringStorage() instanceof window.Storage)) return () => {};
35
+ const storageEventCallback = (e) => {
36
+ if (e.storageArea === getStringStorage() && e.key === key) {
37
+ let newValue;
38
+ try {
39
+ newValue = JSON.parse(e.newValue || "");
40
+ } catch {
41
+ newValue = initialValue;
42
+ }
43
+ callback(newValue);
44
+ }
45
+ };
46
+ window.addEventListener("storage", storageEventCallback);
47
+ return () => {
48
+ window.removeEventListener("storage", storageEventCallback);
49
+ };
50
+ };
51
+ return storage;
52
+ }
53
+
54
+ //#endregion
55
+ exports.createWebStorage = createWebStorage;
@@ -1,2 +1,56 @@
1
- import{StormJSON as e}from"@stryke/json/storm-json";import{isPromise as t,isPromiseLike as n}from"@stryke/type-checks/is-promise";function r(r){let i,a,o={getItem:(e,o)=>{let s=(e=``)=>{if(i!==e){try{let n=s(e);if(t(n))return n.then(e=>(a=e,e));a=n}catch{return o}i=e}return a},c=r()?.getItem(e)??void 0;return c&&n(c)?c.then(e=>s(e)):s(c)},removeItem:e=>r()?.removeItem(e),setItem:(t,n)=>r()?.setItem(t,e.stringify(n))};return typeof window<`u`&&typeof window.addEventListener==`function`&&window.Storage&&(o.subscribe=(e,t,n)=>{if(!(r()instanceof window.Storage))return()=>{};let i=i=>{if(i.storageArea===r()&&i.key===e){let e;try{e=JSON.parse(i.newValue||``)}catch{e=n}t(e)}};return window.addEventListener(`storage`,i),()=>{window.removeEventListener(`storage`,i)}}),o}export{r as createWebStorage};
1
+ import { StormJSON } from "@stryke/json/storm-json";
2
+ import { isPromise, isPromiseLike } from "@stryke/type-checks/is-promise";
3
+
4
+ //#region src/base/utilities/create-web-storage.ts
5
+ function createWebStorage(getStringStorage) {
6
+ let lastStrValue;
7
+ let lastValue;
8
+ const storage = {
9
+ getItem: (key, initialValue) => {
10
+ const parse = (strValue = "") => {
11
+ if (lastStrValue !== strValue) {
12
+ try {
13
+ const nextValue = parse(strValue);
14
+ if (isPromise(nextValue)) return nextValue.then((result) => {
15
+ lastValue = result;
16
+ return result;
17
+ });
18
+ lastValue = nextValue;
19
+ } catch {
20
+ return initialValue;
21
+ }
22
+ lastStrValue = strValue;
23
+ }
24
+ return lastValue;
25
+ };
26
+ const strValue = getStringStorage()?.getItem(key) ?? void 0;
27
+ if (strValue && isPromiseLike(strValue)) return strValue.then((value) => parse(value));
28
+ return parse(strValue);
29
+ },
30
+ removeItem: (key) => getStringStorage()?.removeItem(key),
31
+ setItem: (key, newValue) => getStringStorage()?.setItem(key, StormJSON.stringify(newValue))
32
+ };
33
+ if (typeof window !== "undefined" && typeof window.addEventListener === "function" && window.Storage) storage.subscribe = (key, callback, initialValue) => {
34
+ if (!(getStringStorage() instanceof window.Storage)) return () => {};
35
+ const storageEventCallback = (e) => {
36
+ if (e.storageArea === getStringStorage() && e.key === key) {
37
+ let newValue;
38
+ try {
39
+ newValue = JSON.parse(e.newValue || "");
40
+ } catch {
41
+ newValue = initialValue;
42
+ }
43
+ callback(newValue);
44
+ }
45
+ };
46
+ window.addEventListener("storage", storageEventCallback);
47
+ return () => {
48
+ window.removeEventListener("storage", storageEventCallback);
49
+ };
50
+ };
51
+ return storage;
52
+ }
53
+
54
+ //#endregion
55
+ export { createWebStorage };
2
56
  //# sourceMappingURL=create-web-storage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-web-storage.mjs","names":["StormParser","createWebStorage","lastStrValue","lastValue","storage","parse","strValue","nextValue","isPromise","result","initialValue","getStringStorage","key","isPromiseLike","value","StormJSON","newValue","storageEventCallback","e","callback"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"create-web-storage.mjs","names":["StormParser"],"sources":[],"mappings":""}
@@ -1 +1,52 @@
1
- const e={trailing:!0};function t(t,r=25,i={}){if(i={...e,...i},!Number.isFinite(r))throw TypeError("Expected `wait` to be a finite number");let a,o,s=[],c,l,u=async(e,r)=>(c=n(t,e,r),c.finally(async()=>{if(c=void 0,i.trailing&&l&&!o){let t=u(e,l);return l=void 0,t}}),c);return async(...e)=>c?(i.trailing&&(l=e),c):new Promise(t=>{let n=!o&&i.leading;clearTimeout(o),o=setTimeout(()=>{o=void 0;let t=i.leading?a:u(this,e);for(let e of s)e(t);s=[]},r),n?(a=u(this,e),t(a)):s.push(t)})}async function n(e,t,n){return await e.apply(t,n)}exports.debounce=t;
1
+ //#region src/base/utilities/debounce.ts
2
+ const DEBOUNCE_DEFAULTS = { trailing: true };
3
+ function debounce(fn, wait = 25, options = {}) {
4
+ options = {
5
+ ...DEBOUNCE_DEFAULTS,
6
+ ...options
7
+ };
8
+ if (!Number.isFinite(wait)) throw new TypeError("Expected `wait` to be a finite number");
9
+ let leadingValue;
10
+ let timeout;
11
+ let resolveList = [];
12
+ let currentPromise;
13
+ let trailingArgs;
14
+ const applyFn = async (_this, args) => {
15
+ currentPromise = _applyPromised(fn, _this, args);
16
+ currentPromise.finally(async () => {
17
+ currentPromise = void 0;
18
+ if (options.trailing && trailingArgs && !timeout) {
19
+ const promise = applyFn(_this, trailingArgs);
20
+ trailingArgs = void 0;
21
+ return promise;
22
+ }
23
+ });
24
+ return currentPromise;
25
+ };
26
+ return async (...args) => {
27
+ if (currentPromise) {
28
+ if (options.trailing) trailingArgs = args;
29
+ return currentPromise;
30
+ }
31
+ return new Promise((resolve) => {
32
+ const shouldCallNow = !timeout && options.leading;
33
+ clearTimeout(timeout);
34
+ timeout = setTimeout(() => {
35
+ timeout = void 0;
36
+ const promise = options.leading ? leadingValue : applyFn(this, args);
37
+ for (const _resolve of resolveList) _resolve(promise);
38
+ resolveList = [];
39
+ }, wait);
40
+ if (shouldCallNow) {
41
+ leadingValue = applyFn(this, args);
42
+ resolve(leadingValue);
43
+ } else resolveList.push(resolve);
44
+ });
45
+ };
46
+ }
47
+ async function _applyPromised(fn, _this, args) {
48
+ return await fn.apply(_this, args);
49
+ }
50
+
51
+ //#endregion
52
+ exports.debounce = debounce;
@@ -1,2 +1,53 @@
1
- const e={trailing:!0};function t(t,r=25,i={}){if(i={...e,...i},!Number.isFinite(r))throw TypeError("Expected `wait` to be a finite number");let a,o,s=[],c,l,u=async(e,r)=>(c=n(t,e,r),c.finally(async()=>{if(c=void 0,i.trailing&&l&&!o){let t=u(e,l);return l=void 0,t}}),c);return async(...e)=>c?(i.trailing&&(l=e),c):new Promise(t=>{let n=!o&&i.leading;clearTimeout(o),o=setTimeout(()=>{o=void 0;let t=i.leading?a:u(this,e);for(let e of s)e(t);s=[]},r),n?(a=u(this,e),t(a)):s.push(t)})}async function n(e,t,n){return await e.apply(t,n)}export{t as debounce};
1
+ //#region src/base/utilities/debounce.ts
2
+ const DEBOUNCE_DEFAULTS = { trailing: true };
3
+ function debounce(fn, wait = 25, options = {}) {
4
+ options = {
5
+ ...DEBOUNCE_DEFAULTS,
6
+ ...options
7
+ };
8
+ if (!Number.isFinite(wait)) throw new TypeError("Expected `wait` to be a finite number");
9
+ let leadingValue;
10
+ let timeout;
11
+ let resolveList = [];
12
+ let currentPromise;
13
+ let trailingArgs;
14
+ const applyFn = async (_this, args) => {
15
+ currentPromise = _applyPromised(fn, _this, args);
16
+ currentPromise.finally(async () => {
17
+ currentPromise = void 0;
18
+ if (options.trailing && trailingArgs && !timeout) {
19
+ const promise = applyFn(_this, trailingArgs);
20
+ trailingArgs = void 0;
21
+ return promise;
22
+ }
23
+ });
24
+ return currentPromise;
25
+ };
26
+ return async (...args) => {
27
+ if (currentPromise) {
28
+ if (options.trailing) trailingArgs = args;
29
+ return currentPromise;
30
+ }
31
+ return new Promise((resolve) => {
32
+ const shouldCallNow = !timeout && options.leading;
33
+ clearTimeout(timeout);
34
+ timeout = setTimeout(() => {
35
+ timeout = void 0;
36
+ const promise = options.leading ? leadingValue : applyFn(this, args);
37
+ for (const _resolve of resolveList) _resolve(promise);
38
+ resolveList = [];
39
+ }, wait);
40
+ if (shouldCallNow) {
41
+ leadingValue = applyFn(this, args);
42
+ resolve(leadingValue);
43
+ } else resolveList.push(resolve);
44
+ });
45
+ };
46
+ }
47
+ async function _applyPromised(fn, _this, args) {
48
+ return await fn.apply(_this, args);
49
+ }
50
+
51
+ //#endregion
52
+ export { debounce };
2
53
  //# sourceMappingURL=debounce.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.mjs","names":["DEBOUNCE_DEFAULTS","debounce","options","wait","leadingValue","timeout","resolveList","currentPromise","trailingArgs","applyFn","_applyPromised","fn","_this","args","promise","shouldCallNow","_resolve","resolve"],"sources":[],"mappings":""}
1
+ {"version":3,"file":"debounce.mjs","names":[],"sources":[],"mappings":""}
@@ -1 +1,13 @@
1
- const e=require("./set-atom-debug.cjs"),t=require("./create-web-storage.cjs"),n=require("./create-molecule.cjs"),r=require("./debounce.cjs");exports.DEFAULT_SCOPE=n.DEFAULT_SCOPE,exports.createMoleculeApi=n.createMoleculeApi,exports.createScope=n.createScope,exports.createWebStorage=t.createWebStorage,exports.debounce=r.debounce,exports.setAtomDebugLabel=e.setAtomDebugLabel,exports.setAtomDebugPrivate=e.setAtomDebugPrivate,exports.use=n.use;
1
+ const require_set_atom_debug = require("./set-atom-debug.cjs");
2
+ const require_create_web_storage = require("./create-web-storage.cjs");
3
+ const require_create_molecule = require("./create-molecule.cjs");
4
+ const require_debounce = require("./debounce.cjs");
5
+
6
+ exports.DEFAULT_SCOPE = require_create_molecule.DEFAULT_SCOPE;
7
+ exports.createMoleculeApi = require_create_molecule.createMoleculeApi;
8
+ exports.createScope = require_create_molecule.createScope;
9
+ exports.createWebStorage = require_create_web_storage.createWebStorage;
10
+ exports.debounce = require_debounce.debounce;
11
+ exports.setAtomDebugLabel = require_set_atom_debug.setAtomDebugLabel;
12
+ exports.setAtomDebugPrivate = require_set_atom_debug.setAtomDebugPrivate;
13
+ exports.use = require_create_molecule.use;
@@ -1 +1,6 @@
1
- import{setAtomDebugLabel as e,setAtomDebugPrivate as t}from"./set-atom-debug.mjs";import{createWebStorage as n}from"./create-web-storage.mjs";import{DEFAULT_SCOPE as r,createMoleculeApi as i,createScope as a,use as o}from"./create-molecule.mjs";import{debounce as s}from"./debounce.mjs";export{r as DEFAULT_SCOPE,i as createMoleculeApi,a as createScope,n as createWebStorage,s as debounce,e as setAtomDebugLabel,t as setAtomDebugPrivate,o as use};
1
+ import { setAtomDebugLabel, setAtomDebugPrivate } from "./set-atom-debug.mjs";
2
+ import { createWebStorage } from "./create-web-storage.mjs";
3
+ import { DEFAULT_SCOPE, createMoleculeApi, createScope, use } from "./create-molecule.mjs";
4
+ import { debounce } from "./debounce.mjs";
5
+
6
+ export { DEFAULT_SCOPE, createMoleculeApi, createScope, createWebStorage, debounce, setAtomDebugLabel, setAtomDebugPrivate, use };