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