canvas/canvas-demo/node_modules/.vite/deps/chunk-HZEBPUXZ.js

885 lines
27 KiB
JavaScript
Raw Normal View History

2026-03-11 18:42:08 -07:00
import {
require_react
} from "./chunk-T3SJLYUH.js";
import {
__toESM
} from "./chunk-4B2QHNJT.js";
// ../../node_modules/.pnpm/jotai@2.16.0_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.2.7_react@19.2.3/node_modules/jotai/esm/vanilla/internals.mjs
function hasInitialValue(atom2) {
return "init" in atom2;
}
function isActuallyWritableAtom(atom2) {
return !!atom2.write;
}
function isAtomStateInitialized(atomState) {
return "v" in atomState || "e" in atomState;
}
function returnAtomValue(atomState) {
if ("e" in atomState) {
throw atomState.e;
}
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !("v" in atomState)) {
throw new Error("[Bug] atom state is not initialized");
}
return atomState.v;
}
var promiseStateMap = /* @__PURE__ */ new WeakMap();
function isPendingPromise(value) {
var _a;
return isPromiseLike(value) && !!((_a = promiseStateMap.get(value)) == null ? void 0 : _a[0]);
}
function abortPromise(promise) {
const promiseState = promiseStateMap.get(promise);
if (promiseState == null ? void 0 : promiseState[0]) {
promiseState[0] = false;
promiseState[1].forEach((fn) => fn());
}
}
function registerAbortHandler(promise, abortHandler) {
let promiseState = promiseStateMap.get(promise);
if (!promiseState) {
promiseState = [true, /* @__PURE__ */ new Set()];
promiseStateMap.set(promise, promiseState);
const settle = () => {
promiseState[0] = false;
};
promise.then(settle, settle);
}
promiseState[1].add(abortHandler);
}
function isPromiseLike(p) {
return typeof (p == null ? void 0 : p.then) === "function";
}
function addPendingPromiseToDependency(atom2, promise, dependencyAtomState) {
if (!dependencyAtomState.p.has(atom2)) {
dependencyAtomState.p.add(atom2);
const cleanup = () => dependencyAtomState.p.delete(atom2);
promise.then(cleanup, cleanup);
}
}
function getMountedOrPendingDependents(atom2, atomState, mountedMap) {
var _a;
const dependents = /* @__PURE__ */ new Set();
for (const a of ((_a = mountedMap.get(atom2)) == null ? void 0 : _a.t) || []) {
dependents.add(a);
}
for (const atomWithPendingPromise of atomState.p) {
dependents.add(atomWithPendingPromise);
}
return dependents;
}
var atomRead = (_store, atom2, ...params) => atom2.read(...params);
var atomWrite = (_store, atom2, ...params) => atom2.write(...params);
var atomOnInit = (store, atom2) => {
if (atom2.INTERNAL_onInit) {
return atom2.INTERNAL_onInit(store);
}
if (atom2.unstable_onInit) {
console.warn(
"[DEPRECATED] atom.unstable_onInit is renamed to atom.INTERNAL_onInit."
);
return atom2.unstable_onInit(store);
}
};
var atomOnMount = (_store, atom2, setAtom) => {
var _a;
return (_a = atom2.onMount) == null ? void 0 : _a.call(atom2, setAtom);
};
var ensureAtomState = (store, atom2) => {
var _a;
const buildingBlocks = getInternalBuildingBlocks(store);
const atomStateMap = buildingBlocks[0];
const storeHooks = buildingBlocks[6];
const atomOnInit2 = buildingBlocks[9];
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !atom2) {
throw new Error("Atom is undefined or null");
}
let atomState = atomStateMap.get(atom2);
if (!atomState) {
atomState = { d: /* @__PURE__ */ new Map(), p: /* @__PURE__ */ new Set(), n: 0 };
atomStateMap.set(atom2, atomState);
(_a = storeHooks.i) == null ? void 0 : _a.call(storeHooks, atom2);
atomOnInit2 == null ? void 0 : atomOnInit2(store, atom2);
}
return atomState;
};
var flushCallbacks = (store) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const changedAtoms = buildingBlocks[3];
const mountCallbacks = buildingBlocks[4];
const unmountCallbacks = buildingBlocks[5];
const storeHooks = buildingBlocks[6];
const recomputeInvalidatedAtoms2 = buildingBlocks[13];
const errors = [];
const call = (fn) => {
try {
fn();
} catch (e) {
errors.push(e);
}
};
do {
if (storeHooks.f) {
call(storeHooks.f);
}
const callbacks = /* @__PURE__ */ new Set();
const add = callbacks.add.bind(callbacks);
changedAtoms.forEach((atom2) => {
var _a;
return (_a = mountedMap.get(atom2)) == null ? void 0 : _a.l.forEach(add);
});
changedAtoms.clear();
unmountCallbacks.forEach(add);
unmountCallbacks.clear();
mountCallbacks.forEach(add);
mountCallbacks.clear();
callbacks.forEach(call);
if (changedAtoms.size) {
recomputeInvalidatedAtoms2(store);
}
} while (changedAtoms.size || unmountCallbacks.size || mountCallbacks.size);
if (errors.length) {
throw new AggregateError(errors);
}
};
var recomputeInvalidatedAtoms = (store) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const invalidatedAtoms = buildingBlocks[2];
const changedAtoms = buildingBlocks[3];
const ensureAtomState2 = buildingBlocks[11];
const readAtomState2 = buildingBlocks[14];
const mountDependencies2 = buildingBlocks[17];
const topSortedReversed = [];
const visiting = /* @__PURE__ */ new WeakSet();
const visited = /* @__PURE__ */ new WeakSet();
const stack = Array.from(changedAtoms);
while (stack.length) {
const a = stack[stack.length - 1];
const aState = ensureAtomState2(store, a);
if (visited.has(a)) {
stack.pop();
continue;
}
if (visiting.has(a)) {
if (invalidatedAtoms.get(a) === aState.n) {
topSortedReversed.push([a, aState]);
} else if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && invalidatedAtoms.has(a)) {
throw new Error("[Bug] invalidated atom exists");
}
visited.add(a);
stack.pop();
continue;
}
visiting.add(a);
for (const d of getMountedOrPendingDependents(a, aState, mountedMap)) {
if (!visiting.has(d)) {
stack.push(d);
}
}
}
for (let i = topSortedReversed.length - 1; i >= 0; --i) {
const [a, aState] = topSortedReversed[i];
let hasChangedDeps = false;
for (const dep of aState.d.keys()) {
if (dep !== a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
}
}
if (hasChangedDeps) {
readAtomState2(store, a);
mountDependencies2(store, a);
}
invalidatedAtoms.delete(a);
}
};
var storeMutationSet = /* @__PURE__ */ new WeakSet();
var readAtomState = (store, atom2) => {
var _a, _b;
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const invalidatedAtoms = buildingBlocks[2];
const changedAtoms = buildingBlocks[3];
const storeHooks = buildingBlocks[6];
const atomRead2 = buildingBlocks[7];
const ensureAtomState2 = buildingBlocks[11];
const flushCallbacks2 = buildingBlocks[12];
const recomputeInvalidatedAtoms2 = buildingBlocks[13];
const readAtomState2 = buildingBlocks[14];
const writeAtomState2 = buildingBlocks[16];
const mountDependencies2 = buildingBlocks[17];
const atomState = ensureAtomState2(store, atom2);
if (isAtomStateInitialized(atomState)) {
if (mountedMap.has(atom2) && invalidatedAtoms.get(atom2) !== atomState.n) {
return atomState;
}
let hasChangedDeps = false;
for (const [a, n] of atomState.d) {
if (readAtomState2(store, a).n !== n) {
hasChangedDeps = true;
break;
}
}
if (!hasChangedDeps) {
return atomState;
}
}
atomState.d.clear();
let isSync = true;
function mountDependenciesIfAsync() {
if (mountedMap.has(atom2)) {
mountDependencies2(store, atom2);
recomputeInvalidatedAtoms2(store);
flushCallbacks2(store);
}
}
function getter(a) {
var _a2;
if (a === atom2) {
const aState2 = ensureAtomState2(store, a);
if (!isAtomStateInitialized(aState2)) {
if (hasInitialValue(a)) {
setAtomStateValueOrPromise(store, a, a.init);
} else {
throw new Error("no atom init");
}
}
return returnAtomValue(aState2);
}
const aState = readAtomState2(store, a);
try {
return returnAtomValue(aState);
} finally {
atomState.d.set(a, aState.n);
if (isPendingPromise(atomState.v)) {
addPendingPromiseToDependency(atom2, atomState.v, aState);
}
if (mountedMap.has(atom2)) {
(_a2 = mountedMap.get(a)) == null ? void 0 : _a2.t.add(atom2);
}
if (!isSync) {
mountDependenciesIfAsync();
}
}
}
let controller;
let setSelf;
const options = {
get signal() {
if (!controller) {
controller = new AbortController();
}
return controller.signal;
},
get setSelf() {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !isActuallyWritableAtom(atom2)) {
console.warn("setSelf function cannot be used with read-only atom");
}
if (!setSelf && isActuallyWritableAtom(atom2)) {
setSelf = (...args) => {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && isSync) {
console.warn("setSelf function cannot be called in sync");
}
if (!isSync) {
try {
return writeAtomState2(store, atom2, ...args);
} finally {
recomputeInvalidatedAtoms2(store);
flushCallbacks2(store);
}
}
};
}
return setSelf;
}
};
const prevEpochNumber = atomState.n;
try {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") {
storeMutationSet.delete(store);
}
const valueOrPromise = atomRead2(store, atom2, getter, options);
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && storeMutationSet.has(store)) {
console.warn(
"Detected store mutation during atom read. This is not supported."
);
}
setAtomStateValueOrPromise(store, atom2, valueOrPromise);
if (isPromiseLike(valueOrPromise)) {
registerAbortHandler(valueOrPromise, () => controller == null ? void 0 : controller.abort());
valueOrPromise.then(mountDependenciesIfAsync, mountDependenciesIfAsync);
}
(_a = storeHooks.r) == null ? void 0 : _a.call(storeHooks, atom2);
return atomState;
} catch (error) {
delete atomState.v;
atomState.e = error;
++atomState.n;
return atomState;
} finally {
isSync = false;
if (prevEpochNumber !== atomState.n && invalidatedAtoms.get(atom2) === prevEpochNumber) {
invalidatedAtoms.set(atom2, atomState.n);
changedAtoms.add(atom2);
(_b = storeHooks.c) == null ? void 0 : _b.call(storeHooks, atom2);
}
}
};
var invalidateDependents = (store, atom2) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const invalidatedAtoms = buildingBlocks[2];
const ensureAtomState2 = buildingBlocks[11];
const stack = [atom2];
while (stack.length) {
const a = stack.pop();
const aState = ensureAtomState2(store, a);
for (const d of getMountedOrPendingDependents(a, aState, mountedMap)) {
const dState = ensureAtomState2(store, d);
invalidatedAtoms.set(d, dState.n);
stack.push(d);
}
}
};
var writeAtomState = (store, atom2, ...args) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const changedAtoms = buildingBlocks[3];
const storeHooks = buildingBlocks[6];
const atomWrite2 = buildingBlocks[8];
const ensureAtomState2 = buildingBlocks[11];
const flushCallbacks2 = buildingBlocks[12];
const recomputeInvalidatedAtoms2 = buildingBlocks[13];
const readAtomState2 = buildingBlocks[14];
const invalidateDependents2 = buildingBlocks[15];
const mountDependencies2 = buildingBlocks[17];
let isSync = true;
const getter = (a) => returnAtomValue(readAtomState2(store, a));
const setter = (a, ...args2) => {
var _a;
const aState = ensureAtomState2(store, a);
try {
if (a === atom2) {
if (!hasInitialValue(a)) {
throw new Error("atom not writable");
}
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") {
storeMutationSet.add(store);
}
const prevEpochNumber = aState.n;
const v = args2[0];
setAtomStateValueOrPromise(store, a, v);
mountDependencies2(store, a);
if (prevEpochNumber !== aState.n) {
changedAtoms.add(a);
invalidateDependents2(store, a);
(_a = storeHooks.c) == null ? void 0 : _a.call(storeHooks, a);
}
return void 0;
} else {
return writeAtomState(store, a, ...args2);
}
} finally {
if (!isSync) {
recomputeInvalidatedAtoms2(store);
flushCallbacks2(store);
}
}
};
try {
return atomWrite2(store, atom2, getter, setter, ...args);
} finally {
isSync = false;
}
};
var mountDependencies = (store, atom2) => {
var _a;
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const changedAtoms = buildingBlocks[3];
const storeHooks = buildingBlocks[6];
const ensureAtomState2 = buildingBlocks[11];
const invalidateDependents2 = buildingBlocks[15];
const mountAtom2 = buildingBlocks[18];
const unmountAtom2 = buildingBlocks[19];
const atomState = ensureAtomState2(store, atom2);
const mounted = mountedMap.get(atom2);
if (mounted && !isPendingPromise(atomState.v)) {
for (const [a, n] of atomState.d) {
if (!mounted.d.has(a)) {
const aState = ensureAtomState2(store, a);
const aMounted = mountAtom2(store, a);
aMounted.t.add(atom2);
mounted.d.add(a);
if (n !== aState.n) {
changedAtoms.add(a);
invalidateDependents2(store, a);
(_a = storeHooks.c) == null ? void 0 : _a.call(storeHooks, a);
}
}
}
for (const a of mounted.d) {
if (!atomState.d.has(a)) {
mounted.d.delete(a);
const aMounted = unmountAtom2(store, a);
aMounted == null ? void 0 : aMounted.t.delete(atom2);
}
}
}
};
var mountAtom = (store, atom2) => {
var _a;
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const mountCallbacks = buildingBlocks[4];
const storeHooks = buildingBlocks[6];
const atomOnMount2 = buildingBlocks[10];
const ensureAtomState2 = buildingBlocks[11];
const flushCallbacks2 = buildingBlocks[12];
const recomputeInvalidatedAtoms2 = buildingBlocks[13];
const readAtomState2 = buildingBlocks[14];
const writeAtomState2 = buildingBlocks[16];
const atomState = ensureAtomState2(store, atom2);
let mounted = mountedMap.get(atom2);
if (!mounted) {
readAtomState2(store, atom2);
for (const a of atomState.d.keys()) {
const aMounted = mountAtom(store, a);
aMounted.t.add(atom2);
}
mounted = {
l: /* @__PURE__ */ new Set(),
d: new Set(atomState.d.keys()),
t: /* @__PURE__ */ new Set()
};
mountedMap.set(atom2, mounted);
if (isActuallyWritableAtom(atom2)) {
const processOnMount = () => {
let isSync = true;
const setAtom = (...args) => {
try {
return writeAtomState2(store, atom2, ...args);
} finally {
if (!isSync) {
recomputeInvalidatedAtoms2(store);
flushCallbacks2(store);
}
}
};
try {
const onUnmount = atomOnMount2(store, atom2, setAtom);
if (onUnmount) {
mounted.u = () => {
isSync = true;
try {
onUnmount();
} finally {
isSync = false;
}
};
}
} finally {
isSync = false;
}
};
mountCallbacks.add(processOnMount);
}
(_a = storeHooks.m) == null ? void 0 : _a.call(storeHooks, atom2);
}
return mounted;
};
var unmountAtom = (store, atom2) => {
var _a, _b;
const buildingBlocks = getInternalBuildingBlocks(store);
const mountedMap = buildingBlocks[1];
const unmountCallbacks = buildingBlocks[5];
const storeHooks = buildingBlocks[6];
const ensureAtomState2 = buildingBlocks[11];
const unmountAtom2 = buildingBlocks[19];
const atomState = ensureAtomState2(store, atom2);
let mounted = mountedMap.get(atom2);
if (!mounted || mounted.l.size) {
return mounted;
}
let isDependent = false;
for (const a of mounted.t) {
if ((_a = mountedMap.get(a)) == null ? void 0 : _a.d.has(atom2)) {
isDependent = true;
break;
}
}
if (!isDependent) {
if (mounted.u) {
unmountCallbacks.add(mounted.u);
}
mounted = void 0;
mountedMap.delete(atom2);
for (const a of atomState.d.keys()) {
const aMounted = unmountAtom2(store, a);
aMounted == null ? void 0 : aMounted.t.delete(atom2);
}
(_b = storeHooks.u) == null ? void 0 : _b.call(storeHooks, atom2);
return void 0;
}
return mounted;
};
var setAtomStateValueOrPromise = (store, atom2, valueOrPromise) => {
const ensureAtomState2 = getInternalBuildingBlocks(store)[11];
const atomState = ensureAtomState2(store, atom2);
const hasPrevValue = "v" in atomState;
const prevValue = atomState.v;
if (isPromiseLike(valueOrPromise)) {
for (const a of atomState.d.keys()) {
addPendingPromiseToDependency(
atom2,
valueOrPromise,
ensureAtomState2(store, a)
);
}
}
atomState.v = valueOrPromise;
delete atomState.e;
if (!hasPrevValue || !Object.is(prevValue, atomState.v)) {
++atomState.n;
if (isPromiseLike(prevValue)) {
abortPromise(prevValue);
}
}
};
var storeGet = (store, atom2) => {
const readAtomState2 = getInternalBuildingBlocks(store)[14];
return returnAtomValue(readAtomState2(store, atom2));
};
var storeSet = (store, atom2, ...args) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const flushCallbacks2 = buildingBlocks[12];
const recomputeInvalidatedAtoms2 = buildingBlocks[13];
const writeAtomState2 = buildingBlocks[16];
try {
return writeAtomState2(store, atom2, ...args);
} finally {
recomputeInvalidatedAtoms2(store);
flushCallbacks2(store);
}
};
var storeSub = (store, atom2, listener) => {
const buildingBlocks = getInternalBuildingBlocks(store);
const flushCallbacks2 = buildingBlocks[12];
const mountAtom2 = buildingBlocks[18];
const unmountAtom2 = buildingBlocks[19];
const mounted = mountAtom2(store, atom2);
const listeners = mounted.l;
listeners.add(listener);
flushCallbacks2(store);
return () => {
listeners.delete(listener);
unmountAtom2(store, atom2);
flushCallbacks2(store);
};
};
var buildingBlockMap = /* @__PURE__ */ new WeakMap();
var getInternalBuildingBlocks = (store) => {
const buildingBlocks = buildingBlockMap.get(store);
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !buildingBlocks) {
throw new Error(
"Store must be created by buildStore to read its building blocks"
);
}
return buildingBlocks;
};
function buildStore(...buildArgs) {
const store = {
get(atom2) {
const storeGet2 = getInternalBuildingBlocks(store)[21];
return storeGet2(store, atom2);
},
set(atom2, ...args) {
const storeSet2 = getInternalBuildingBlocks(store)[22];
return storeSet2(store, atom2, ...args);
},
sub(atom2, listener) {
const storeSub2 = getInternalBuildingBlocks(store)[23];
return storeSub2(store, atom2, listener);
}
};
const buildingBlocks = [
// store state
/* @__PURE__ */ new WeakMap(),
// atomStateMap
/* @__PURE__ */ new WeakMap(),
// mountedMap
/* @__PURE__ */ new WeakMap(),
// invalidatedAtoms
/* @__PURE__ */ new Set(),
// changedAtoms
/* @__PURE__ */ new Set(),
// mountCallbacks
/* @__PURE__ */ new Set(),
// unmountCallbacks
{},
// storeHooks
// atom interceptors
atomRead,
atomWrite,
atomOnInit,
atomOnMount,
// building-block functions
ensureAtomState,
flushCallbacks,
recomputeInvalidatedAtoms,
readAtomState,
invalidateDependents,
writeAtomState,
mountDependencies,
mountAtom,
unmountAtom,
setAtomStateValueOrPromise,
storeGet,
storeSet,
storeSub,
void 0
].map((fn, i) => buildArgs[i] || fn);
buildingBlockMap.set(store, Object.freeze(buildingBlocks));
return store;
}
// ../../node_modules/.pnpm/jotai@2.16.0_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.2.7_react@19.2.3/node_modules/jotai/esm/vanilla.mjs
var keyCount = 0;
function atom(read, write) {
const key = `atom${++keyCount}`;
const config = {
toString() {
return (import.meta.env ? import.meta.env.MODE : void 0) !== "production" && this.debugLabel ? key + ":" + this.debugLabel : key;
}
};
if (typeof read === "function") {
config.read = read;
} else {
config.init = read;
config.read = defaultRead;
config.write = defaultWrite;
}
if (write) {
config.write = write;
}
return config;
}
function defaultRead(get) {
return get(this);
}
function defaultWrite(get, set, arg) {
return set(
this,
typeof arg === "function" ? arg(get(this)) : arg
);
}
var overiddenCreateStore;
function INTERNAL_overrideCreateStore(fn) {
overiddenCreateStore = fn(overiddenCreateStore);
}
function createStore() {
if (overiddenCreateStore) {
return overiddenCreateStore();
}
return buildStore();
}
var defaultStore;
function getDefaultStore() {
if (!defaultStore) {
defaultStore = createStore();
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production") {
globalThis.__JOTAI_DEFAULT_STORE__ || (globalThis.__JOTAI_DEFAULT_STORE__ = defaultStore);
if (globalThis.__JOTAI_DEFAULT_STORE__ !== defaultStore) {
console.warn(
"Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044"
);
}
}
}
return defaultStore;
}
// ../../node_modules/.pnpm/jotai@2.16.0_@babel+core@7.28.5_@babel+template@7.27.2_@types+react@19.2.7_react@19.2.3/node_modules/jotai/esm/react.mjs
var import_react = __toESM(require_react(), 1);
var StoreContext = (0, import_react.createContext)(
void 0
);
function useStore(options) {
const store = (0, import_react.useContext)(StoreContext);
return (options == null ? void 0 : options.store) || store || getDefaultStore();
}
function Provider({
children,
store
}) {
const storeRef = (0, import_react.useRef)(null);
if (store) {
return (0, import_react.createElement)(StoreContext.Provider, { value: store }, children);
}
if (storeRef.current === null) {
storeRef.current = createStore();
}
return (0, import_react.createElement)(
StoreContext.Provider,
{
// TODO: If this is not a false positive, consider using useState instead of useRef like https://github.com/pmndrs/jotai/pull/2771
// eslint-disable-next-line react-hooks/refs
value: storeRef.current
},
children
);
}
var isPromiseLike2 = (x) => typeof (x == null ? void 0 : x.then) === "function";
var attachPromiseStatus = (promise) => {
if (!promise.status) {
promise.status = "pending";
promise.then(
(v) => {
promise.status = "fulfilled";
promise.value = v;
},
(e) => {
promise.status = "rejected";
promise.reason = e;
}
);
}
};
var use = import_react.default.use || // A shim for older React versions
((promise) => {
if (promise.status === "pending") {
throw promise;
} else if (promise.status === "fulfilled") {
return promise.value;
} else if (promise.status === "rejected") {
throw promise.reason;
} else {
attachPromiseStatus(promise);
throw promise;
}
});
var continuablePromiseMap = /* @__PURE__ */ new WeakMap();
var createContinuablePromise = (promise, getValue) => {
let continuablePromise = continuablePromiseMap.get(promise);
if (!continuablePromise) {
continuablePromise = new Promise((resolve, reject) => {
let curr = promise;
const onFulfilled = (me) => (v) => {
if (curr === me) {
resolve(v);
}
};
const onRejected = (me) => (e) => {
if (curr === me) {
reject(e);
}
};
const onAbort = () => {
try {
const nextValue = getValue();
if (isPromiseLike2(nextValue)) {
continuablePromiseMap.set(nextValue, continuablePromise);
curr = nextValue;
nextValue.then(onFulfilled(nextValue), onRejected(nextValue));
registerAbortHandler(nextValue, onAbort);
} else {
resolve(nextValue);
}
} catch (e) {
reject(e);
}
};
promise.then(onFulfilled(promise), onRejected(promise));
registerAbortHandler(promise, onAbort);
});
continuablePromiseMap.set(promise, continuablePromise);
}
return continuablePromise;
};
function useAtomValue(atom2, options) {
const { delay, unstable_promiseStatus: promiseStatus = !import_react.default.use } = options || {};
const store = useStore(options);
const [[valueFromReducer, storeFromReducer, atomFromReducer], rerender] = (0, import_react.useReducer)(
(prev) => {
const nextValue = store.get(atom2);
if (Object.is(prev[0], nextValue) && prev[1] === store && prev[2] === atom2) {
return prev;
}
return [nextValue, store, atom2];
},
void 0,
() => [store.get(atom2), store, atom2]
);
let value = valueFromReducer;
if (storeFromReducer !== store || atomFromReducer !== atom2) {
rerender();
value = store.get(atom2);
}
(0, import_react.useEffect)(() => {
const unsub = store.sub(atom2, () => {
if (promiseStatus) {
try {
const value2 = store.get(atom2);
if (isPromiseLike2(value2)) {
attachPromiseStatus(
createContinuablePromise(value2, () => store.get(atom2))
);
}
} catch (e) {
}
}
if (typeof delay === "number") {
setTimeout(rerender, delay);
return;
}
rerender();
});
rerender();
return unsub;
}, [store, atom2, delay, promiseStatus]);
(0, import_react.useDebugValue)(value);
if (isPromiseLike2(value)) {
const promise = createContinuablePromise(value, () => store.get(atom2));
if (promiseStatus) {
attachPromiseStatus(promise);
}
return use(promise);
}
return value;
}
function useSetAtom(atom2, options) {
const store = useStore(options);
const setAtom = (0, import_react.useCallback)(
(...args) => {
if ((import.meta.env ? import.meta.env.MODE : void 0) !== "production" && !("write" in atom2)) {
throw new Error("not writable atom");
}
return store.set(atom2, ...args);
},
[store, atom2]
);
return setAtom;
}
function useAtom(atom2, options) {
return [
useAtomValue(atom2, options),
// We do wrong type assertion here, which results in throwing an error.
useSetAtom(atom2, options)
];
}
export {
atom,
INTERNAL_overrideCreateStore,
createStore,
getDefaultStore,
useStore,
Provider,
useAtomValue,
useSetAtom,
useAtom
};
//# sourceMappingURL=chunk-HZEBPUXZ.js.map