var e=(function(t){return t[t.None=0]="None",t[t.Mutable=1]="Mutable",t[t.Watching=2]="Watching",t[t.RecursedCheck=4]="RecursedCheck",t[t.Recursed=8]="Recursed",t[t.Dirty=16]="Dirty",t[t.Pending=32]="Pending",t})({});function N({update:t,notify:p,unwatched:c}){return{link:l,unlink:n,propagate:f,checkDirty:b,shallowPropagate:g};function l(s,o,r){const u=o.depsTail;if(u!==void 0&&u.dep===s)return;const i=u!==void 0?u.nextDep:o.deps;if(i!==void 0&&i.dep===s){i.version=r,o.depsTail=i;return}const d=s.subsTail;if(d!==void 0&&d.version===r&&d.sub===o)return;const a=o.depsTail=s.subsTail={version:r,dep:s,sub:o,prevDep:u,nextDep:i,prevSub:d,nextSub:void 0};i!==void 0&&(i.prevDep=a),u!==void 0?u.nextDep=a:o.deps=a,d!==void 0?d.nextSub=a:s.subs=a}function n(s,o=s.sub){const r=s.dep,u=s.prevDep,i=s.nextDep,d=s.nextSub,a=s.prevSub;return i!==void 0?i.prevDep=u:o.depsTail=u,u!==void 0?u.nextDep=i:o.deps=i,d!==void 0?d.prevSub=a:r.subsTail=a,a!==void 0?a.nextSub=d:(r.subs=d)===void 0&&c(r),i}function f(s){let o=s.nextSub,r;e:do{const u=s.sub;let i=u.flags;if(i&(e.RecursedCheck|e.Recursed|e.Dirty|e.Pending)?i&(e.RecursedCheck|e.Recursed)?i&e.RecursedCheck?!(i&(e.Dirty|e.Pending))&&D(s,u)?(u.flags=i|(e.Recursed|e.Pending),i&=e.Mutable):i=e.None:u.flags=i&~e.Recursed|e.Pending:i=e.None:u.flags=i|e.Pending,i&e.Watching&&p(u),i&e.Mutable){const d=u.subs;if(d!==void 0){const a=(s=d).nextSub;a!==void 0&&(r={value:o,prev:r},o=a);continue}}if((s=o)!==void 0){o=s.nextSub;continue}for(;r!==void 0;)if(s=r.value,r=r.prev,s!==void 0){o=s.nextSub;continue e}break}while(!0)}function b(s,o){let r,u=0,i=!1;e:do{const d=s.dep,a=d.flags;if(o.flags&e.Dirty)i=!0;else if((a&(e.Mutable|e.Dirty))===(e.Mutable|e.Dirty)){if(t(d)){const h=d.subs;h.nextSub!==void 0&&g(h),i=!0}}else if((a&(e.Mutable|e.Pending))===(e.Mutable|e.Pending)){(s.nextSub!==void 0||s.prevSub!==void 0)&&(r={value:s,prev:r}),s=d.deps,o=d,++u;continue}if(!i){const h=s.nextDep;if(h!==void 0){s=h;continue}}for(;u--;){const h=o.subs,w=h.nextSub!==void 0;if(w?(s=r.value,r=r.prev):s=h,i){if(t(o)){w&&g(h),o=s.sub;continue}i=!1}else o.flags&=~e.Pending;o=s.sub;const M=s.nextDep;if(M!==void 0){s=M;continue e}}return i}while(!0)}function g(s){do{const o=s.sub,r=o.flags;(r&(e.Pending|e.Dirty))===e.Pending&&(o.flags=r|e.Dirty,(r&(e.Watching|e.RecursedCheck))===e.Watching&&p(o))}while((s=s.nextSub)!==void 0)}function D(s,o){let r=o.depsTail;for(;r!==void 0;){if(r===s)return!0;r=r.prevDep}return!1}}function m(t,p,c){const l=typeof t=="object",n=l?t:void 0;return{next:(l?t.next:t)?.bind(n),error:(l?t.error:p)?.bind(n),complete:(l?t.complete:c)?.bind(n)}}var T=[],y=0,{link:C,unlink:R,propagate:j,checkDirty:W,shallowPropagate:_}=N({update(t){return t._update()},notify(t){T[P++]=t,t.flags&=~e.Watching},unwatched(t){t.depsTail!==void 0&&(t.depsTail=void 0,t.flags=e.Mutable|e.Dirty,x(t))}}),S=0,P=0,v,L=0;function x(t){const p=t.depsTail;let c=p!==void 0?p.nextDep:t.deps;for(;c!==void 0;)c=R(c,t)}function q(){if(!(L>0)){for(;S
{n.get(),g.current?b.next?.(n._snapshot):g.current=!0});return{unsubscribe:()=>{D.stop()}}},_update(f){const b=v,g=p?.compare??Object.is;if(c)v=n,++y,n.depsTail=void 0;else if(f===void 0)return!1;c&&(n.flags=e.Mutable|e.RecursedCheck);try{const D=n._snapshot,s=typeof f=="function"?f(D):f===void 0&&c?l(D):f;return D===void 0||!g(D,s)?(n._snapshot=s,!0):!1}finally{v=b,c&&(n.flags&=~e.RecursedCheck),x(n)}}};return c?(n.flags=e.Mutable|e.Dirty,n.get=function(){const f=n.flags;if(f&e.Dirty||f&e.Pending&&W(n.deps,n)){if(n._update()){const b=n.subs;b!==void 0&&_(b)}}else f&e.Pending&&(n.flags=f&~e.Pending);return v!==void 0&&C(n,v,y),n._snapshot}):n.set=function(f){if(n._update(f)){const b=n.subs;b!==void 0&&(j(b),_(b),q())}},n}function O(t){const p=()=>{const l=v;v=c,++y,c.depsTail=void 0,c.flags=e.Watching|e.RecursedCheck;try{return t()}finally{v=l,c.flags&=~e.RecursedCheck,x(c)}},c={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:e.Watching|e.RecursedCheck,notify(){const l=this.flags;l&e.Dirty||l&e.Pending&&W(this.deps,this)?p():this.flags=e.Watching},stop(){this.flags=e.None,this.depsTail=void 0,x(this)}};return p(),c}var A=class{constructor(t,p){this.atom=E(t),this.get=this.get.bind(this),this.setState=this.setState.bind(this),this.subscribe=this.subscribe.bind(this),p&&(this.actions=p(this))}setState(t){this.atom.set(t)}get state(){return this.atom.get()}get(){return this.state}subscribe(t){return this.atom.subscribe(m(t))}};export{A as t};