1 | System.register(['react/jsx-runtime', 'react', 'jotai/vanilla'], (function (exports) {
|
2 | 'use strict';
|
3 | var jsx, createContext, useContext, useRef, ReactExports, useReducer, useEffect, useDebugValue, useCallback, getDefaultStore, createStore;
|
4 | return {
|
5 | setters: [function (module) {
|
6 | jsx = module.jsx;
|
7 | }, function (module) {
|
8 | createContext = module.createContext;
|
9 | useContext = module.useContext;
|
10 | useRef = module.useRef;
|
11 | ReactExports = module.default;
|
12 | useReducer = module.useReducer;
|
13 | useEffect = module.useEffect;
|
14 | useDebugValue = module.useDebugValue;
|
15 | useCallback = module.useCallback;
|
16 | }, function (module) {
|
17 | getDefaultStore = module.getDefaultStore;
|
18 | createStore = module.createStore;
|
19 | }],
|
20 | execute: (function () {
|
21 |
|
22 | exports({
|
23 | useAtom: useAtom,
|
24 | useAtomValue: useAtomValue,
|
25 | useSetAtom: useSetAtom
|
26 | });
|
27 |
|
28 | const StoreContext = createContext(void 0);
|
29 | const useStore = exports('useStore', (options) => {
|
30 | const store = useContext(StoreContext);
|
31 | return (options == null ? void 0 : options.store) || store || getDefaultStore();
|
32 | });
|
33 | const Provider = exports('Provider', ({
|
34 | children,
|
35 | store
|
36 | }) => {
|
37 | const storeRef = useRef();
|
38 | if (!store && !storeRef.current) {
|
39 | storeRef.current = createStore();
|
40 | }
|
41 | return jsx(StoreContext.Provider, { value: store || storeRef.current, children });
|
42 | });
|
43 |
|
44 | const isPromise = (x) => x instanceof Promise;
|
45 | const use = ReactExports.use || ((promise) => {
|
46 | if (promise.status === "pending") {
|
47 | throw promise;
|
48 | } else if (promise.status === "fulfilled") {
|
49 | return promise.value;
|
50 | } else if (promise.status === "rejected") {
|
51 | throw promise.reason;
|
52 | } else {
|
53 | promise.status = "pending";
|
54 | promise.then(
|
55 | (v) => {
|
56 | promise.status = "fulfilled";
|
57 | promise.value = v;
|
58 | },
|
59 | (e) => {
|
60 | promise.status = "rejected";
|
61 | promise.reason = e;
|
62 | }
|
63 | );
|
64 | throw promise;
|
65 | }
|
66 | });
|
67 | function useAtomValue(atom, options) {
|
68 | const store = useStore(options);
|
69 | const [[valueFromReducer, storeFromReducer, atomFromReducer], rerender] = useReducer(
|
70 | (prev) => {
|
71 | const nextValue = store.get(atom);
|
72 | if (Object.is(prev[0], nextValue) && prev[1] === store && prev[2] === atom) {
|
73 | return prev;
|
74 | }
|
75 | return [nextValue, store, atom];
|
76 | },
|
77 | void 0,
|
78 | () => [store.get(atom), store, atom]
|
79 | );
|
80 | let value = valueFromReducer;
|
81 | if (storeFromReducer !== store || atomFromReducer !== atom) {
|
82 | rerender();
|
83 | value = store.get(atom);
|
84 | }
|
85 | const delay = options == null ? void 0 : options.delay;
|
86 | useEffect(() => {
|
87 | const unsub = store.sub(atom, () => {
|
88 | if (typeof delay === "number") {
|
89 | setTimeout(rerender, delay);
|
90 | return;
|
91 | }
|
92 | rerender();
|
93 | });
|
94 | rerender();
|
95 | return unsub;
|
96 | }, [store, atom, delay]);
|
97 | useDebugValue(value);
|
98 | return isPromise(value) ? use(value) : value;
|
99 | }
|
100 |
|
101 | function useSetAtom(atom, options) {
|
102 | const store = useStore(options);
|
103 | const setAtom = useCallback(
|
104 | (...args) => {
|
105 | if (!("write" in atom)) {
|
106 | throw new Error("not writable atom");
|
107 | }
|
108 | return store.set(atom, ...args);
|
109 | },
|
110 | [store, atom]
|
111 | );
|
112 | return setAtom;
|
113 | }
|
114 |
|
115 | function useAtom(atom, options) {
|
116 | return [
|
117 | useAtomValue(atom, options),
|
118 | useSetAtom(atom, options)
|
119 | ];
|
120 | }
|
121 |
|
122 | })
|
123 | };
|
124 | }));
|