tempest.games 0.3.2 → 0.3.3

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # tempest.games
2
2
 
3
+ ## 0.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [a061ed7]
8
+ - atom.io@0.46.14
9
+
3
10
  ## 0.3.2
4
11
 
5
12
  ### Patch Changes
@@ -22,7 +22,7 @@ ${y.trace}`:`No previous disposal trace for ${t} was found.`);return}i.subject.n
22
22
  ${y.trace}`:`No previous disposal trace for ${r} was found.`),t}const a=As(e),c=s.molecules.get(a);if(!c){const y=n.disposalTraces.buffer.find(v=>v?.key===a);return n.logger.error("❌","key",t,"claim failed:",`Could not allocate to ${a} in store "${n.config.name}".`,y?`
23
23
  ${a} was most recently disposed
24
24
  ${y.trace}`:`No previous disposal trace for ${a} was found.`),t}const f=n.moleculeGraph.getRelationEntries({downstreamMoleculeKey:o.stringKey}).filter(([,{source:y}])=>y!==r).map(([y])=>Tu(y));i&&s.moleculeGraph.delete(r),s.moleculeGraph.set({upstreamMoleculeKey:c.stringKey,downstreamMoleculeKey:o.stringKey},{source:c.stringKey});const h={type:"molecule_transfer",key:o.key,exclusive:!!i,from:f,to:[c.key],timestamp:Date.now()};return ja(s)&&s.transactionMeta.phase==="building"&&s.transactionMeta.update.subEvents.push(h),t}function kJ(n,e,t){switch(t){case"newValue":{j2(n,e);break}case"oldValue":{LT(n,e.token);break}}}function LJ(n,e,t){switch(t){case"newValue":{LT(n,e.token);break}case"oldValue":{j2(n,e),e.subType==="atom"&&n.valueMap.set(e.token.key,e.value);break}}}function j2(n,e){const{token:t}=e;e.subType==="writable"&&e.value?Xi(n,t,e.value):Ga(n,t)}function UJ(n,e,t){switch(t){case"newValue":V2(n,e.provenance,e.key);break;case"oldValue":QP(n,e.key);break}}function FJ(n,e,t){switch(t){case"newValue":QP(n,e.key);break;case"oldValue":{const i=e.provenance.map(Tu);V2(n,i,e.key);for(const[r,s]of e.values){const o=n.families.get(r);if(o){Ga(n,o,e.key);const a=`${r}(${As(e.key)})`;n.valueMap.set(a,s)}}}break}}function BJ(n,e,t){switch(t){case"newValue":for(const i of e.to)PL(n,i,e.key,e.exclusive?"exclusive":void 0);break;case"oldValue":{let i="exclusive";for(const r of e.from)PL(n,r,e.key,i),i=void 0}break}}function hy(n,e,t){const i=t==="newValue"?e.subEvents:[...e.subEvents].reverse();for(const r of i)switch(r.type){case"atom_update":OJ(n,r,t);break;case"state_creation":kJ(n,r,t);break;case"state_disposal":LJ(n,r,t);break;case"molecule_creation":UJ(n,r,t);break;case"molecule_disposal":FJ(n,r,t);break;case"molecule_transfer":BJ(n,r,t);break;case"transaction_outcome":hy(n,r,t);break}}function tx(n){return"epoch"in n.transactionMeta}function ja(n){return"phase"in n.transactionMeta}function G2(n,e){return n.transactionMeta.actionContinuities.getRelatedKey(e)}function H2(n,e){return n.transactionMeta.epoch.get(e)}function zJ(n,e){const t=G2(n,e);if(t!==void 0)return H2(n,t)}function eI(n,e,t){n.transactionMeta.epoch.set(e,t)}function VJ(n,e,t){const i=G2(n,e);i!==void 0&&n.transactionMeta.epoch.set(i,t)}function jJ(n,e){const t=Gn(n),{parent:i}=t;t.transactionMeta.phase="applying",t.transactionMeta.update.output=e,i.child=null,i.on.transactionApplying.next(t.transactionMeta);const{subEvents:r}=t.transactionMeta.update;n.logger.info("🛄","transaction",t.transactionMeta.update.token.key,`applying ${r.length} subEvents:`,r),hy(i,t.transactionMeta.update,"newValue"),tx(i)?(VJ(i,t.transactionMeta.update.token.key,t.transactionMeta.update.epoch),Mr(n,{key:t.transactionMeta.update.token.key,type:"transaction"})?.subject.next(t.transactionMeta.update),n.logger.info("🛬","transaction",t.transactionMeta.update.token.key,"applied")):ja(i)&&i.transactionMeta.update.subEvents.push(t.transactionMeta.update),i.on.transactionApplying.next(null)}function $2(n,e,t){const{epoch:i,actionContinuities:r}=n.transactionMeta;r.set(e,t),i.has(e)||i.set(e,-1)}function GJ(n){return{store:n}}const HJ=(n,e,t,i)=>{const r=Gn(n),s={parent:r,child:null,on:r.on,loggers:r.loggers,logger:r.logger,config:r.config,atoms:new sc(r.atoms),atomsThatAreDefault:new Set(r.atomsThatAreDefault),families:new sc(r.families),joins:new sc(r.joins),operation:{open:!1},readonlySelectors:new sc(r.readonlySelectors),timelines:new sc(r.timelines),timelineTopics:r.timelineTopics.overlay(),trackers:new Map,transactions:new sc(r.transactions),selectorAtoms:r.selectorAtoms.overlay(),selectorGraph:r.selectorGraph.overlay(),writableSelectors:new sc(r.writableSelectors),valueMap:new sc(r.valueMap),defaults:r.defaults,disposalTraces:n.disposalTraces.copy(),molecules:new sc(r.molecules),moleculeGraph:r.moleculeGraph.overlay(),moleculeData:r.moleculeData.overlay(),keyRefsInJoins:r.keyRefsInJoins.overlay(),miscResources:new sc(r.miscResources)},o=zJ(n,e.key),a={phase:"building",update:{type:"transaction_outcome",token:e,id:i,epoch:o===void 0?Number.NaN:o+1,timestamp:Date.now(),subEvents:[],params:t,output:void 0},toolkit:{get:((...f)=>Ga(c,...f)),set:((...f)=>{Xi(c,...f)}),reset:((...f)=>{rI(c,...f)}),run:(f,h=kT())=>ZP(c,f,h),find:((...f)=>or(n,...f)),json:f=>Nu(c,f),dispose:((...f)=>{LT(c,...f)}),env:()=>GJ(c)}},c=Object.assign(s,{transactionMeta:a});return r.child=c,n.logger.info("🛫","transaction",e.key,"building with params:",t),c};function W2(n,e){const{key:t}=e,i=n.transactions.has(t),r={key:t,type:"transaction",run:(a,c)=>{const f=_h(r),h=HJ(n,f,a,c);try{const{toolkit:g}=h.transactionMeta,y=e.do(g,...a);return jJ(h,y),y}catch(g){throw IJ(h),n.logger.warn("💥","transaction",t,"caught:",g),g}},install:a=>W2(a,e),subject:new Oi};Gn(n).transactions.set(t,r);const o=_h(r);return i||n.on.transactionCreation.next(o),o}class $J{parent=null;child=null;valueMap=new Map;defaults=new Map;atoms=new Map;writableSelectors=new Map;readonlySelectors=new Map;atomsThatAreDefault=new Set;selectorAtoms=new ac({between:["selectorKey","atomKey"],cardinality:"n:n"});selectorGraph=new ac({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});trackers=new Map;families=new Map;joins=new Map;transactions=new Map;transactionMeta={epoch:new Map,actionContinuities:new ac({between:["continuity","action"],cardinality:"1:n"})};timelines=new Map;timelineTopics=new ac({between:["timelineKey","topicKey"],cardinality:"1:n"});disposalTraces=new JP(100);molecules=new Map;moleculeGraph=new ac({between:["upstreamMoleculeKey","downstreamMoleculeKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});moleculeData=new ac({between:["moleculeKey","stateFamilyKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});keyRefsInJoins=new ac({between:["moleculeKey","joinKey"],cardinality:"n:n"},{makeContentKey:(...e)=>e.sort().join(":")});miscResources=new Map;on={atomCreation:new Oi,atomDisposal:new Oi,selectorCreation:new Oi,selectorDisposal:new Oi,timelineCreation:new Oi,transactionCreation:new Oi,transactionApplying:new _J(null),operationClose:new Oi,moleculeCreation:new Oi,moleculeDisposal:new Oi};operation={open:!1};config={name:"IMPLICIT_STORE",lifespan:"ephemeral",isProduction:!0};loggers=[new MJ("warn",(e,t,i)=>!PJ(i))];logger={error:(...e)=>{for(const t of this.loggers)t.error(...e)},info:(...e)=>{for(const t of this.loggers)t.info(...e)},warn:(...e)=>{for(const t of this.loggers)t.warn(...e)}};constructor(e,t=null){if(this.config={...t?.config,...e},t!==null){this.operation={...t?.operation},tx(t)&&(this.transactionMeta={epoch:new Map(t?.transactionMeta.epoch),actionContinuities:new ac(t?.transactionMeta.actionContinuities.toJSON())});for(const[,r]of t.families)r.internalRoles?.includes("mutable")||r.internalRoles?.includes("join")||r.install(this);const i=new Set;for(const[,r]of t.atoms)if(!i.has(r.key)&&(r.install(this),r.type==="mutable_atom")){const s=Nu(t,r),o=BT(r);i.add(s.key),i.add(o.key)}for(const[,r]of t.readonlySelectors)r.install(this);for(const[,r]of t.writableSelectors)i.has(r.key)||r.install(this);for(const[,r]of t.transactions)r.install(this);for(const[,r]of t.timelines)r.install(this)}}}const Ws={get STORE(){return globalThis.ATOM_IO_IMPLICIT_STORE??=new $J({name:"IMPLICIT_STORE",lifespan:"ephemeral",isProduction:!0}),globalThis.ATOM_IO_IMPLICIT_STORE}};class WJ extends Error{constructor(e,t){super(`${Dh[e.type]} ${As(e.key)} not found in store "${t.config.name}".`)}}function Mr(n,e){let t,i=n;for(;i!==null;){switch(e.type){case"atom":case"mutable_atom":t=i.atoms.get(e.key);break;case"writable_pure_selector":case"writable_held_selector":t=i.writableSelectors.get(e.key);break;case"readonly_pure_selector":case"readonly_held_selector":t=i.readonlySelectors.get(e.key);break;case"atom_family":case"mutable_atom_family":case"writable_pure_selector_family":case"readonly_pure_selector_family":case"writable_held_selector_family":case"readonly_held_selector_family":t=i.families.get(e.key);break;case"timeline":t=i.timelines.get(e.key);break;case"transaction":t=i.transactions.get(e.key);break}if(t)return t;i=i.child}throw new WJ(e,n)}function q2(n,e,t,i){const r=n.disposalTraces.buffer.find(s=>s?.key===As(i));switch(n.logger.error("❌",e.type,e.key,"gets a fallback value because key",i,"is not allocated",r?`This key was previously disposed:
25
- ${r.trace}`:"(no previous disposal trace found)"),t.type){case"mutable_atom_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=new t.class;return n.defaults.set(t.key,s),s.READONLY_VIEW}case"atom_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=t.default,o=s(i);return n.defaults.set(t.key,o),o}case"readonly_pure_selector_family":case"writable_pure_selector_family":case"readonly_held_selector_family":case"writable_held_selector_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=t.default(i);return n.defaults.set(t.key,s),s}}}function Gw(n,e){const{type:t,key:i,catch:r}=e;switch(t){case"readonly_pure_selector":case"writable_pure_selector":{let s;n.logger.info("🧮",t,i,"computing value");try{s=e.getFrom(n),s instanceof Promise&&(s=s.catch(a=>{if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return a}throw a}))}catch(a){if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return vu(n,e,a)}throw a}return vu(n,e,s)}case"atom":{let s;if(xh(e.default))try{s=e.default(),s instanceof Promise&&(s=s.catch(a=>{if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return a}throw a}))}catch(a){if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return s=vu(n,e,a),n.logger.info("✨",e.type,i,"computed default",s),s}throw a}else s=e.default,n.logger.info("✨",e.type,i,"using static default",s);return vu(n,e,s)}}}function bm(n,e,t){if(n.valueMap.has(e.key))return rV(n,e,t);n.logger.info("❔",e.type,e.key,"value not found in cache");const{key:i}=e;switch(e.type){case"readonly_held_selector":case"writable_held_selector":return n.logger.info("🧮",e.type,i,"computing value"),e.getFrom(n);case"writable_pure_selector":case"readonly_pure_selector":case"atom":return Gw(n,e);case"mutable_atom":{const r=new e.class;return n.logger.info("✨",e.type,i,"created new instance",r),vu(n,e,r)}}}function nx(n,e){return Mr(n,{key:e.family.key,type:`${e.type}_family`})}const IL={atom_family:"atom",molecule_family:"molecule",mutable_atom_family:"mutable_atom",readonly_held_selector_family:"readonly_held_selector",readonly_pure_selector_family:"readonly_pure_selector",writable_held_selector_family:"writable_held_selector",writable_pure_selector_family:"writable_pure_selector"},ix=Symbol("MUST_CREATE"),qJ=Symbol("DO_NOT_CREATE");function rx(n,e,t,i){const r=As(i),s=e.molecules.get(r);if(!s&&e.config.lifespan==="immortal"){const{type:c,key:f}=t;e.logger.warn("💣","key",r,"was used to mint a counterfeit token for",c,`"${f}"`);const h=`${f}(${r})`,g=IL[c];return{counterfeit:!0,key:h,type:g,family:{key:f,subKey:r}}}let a;if(n===ix)e.logger.info("👪",t.type,t.key,"adds member",typeof i=="string"?`\`${i}\``:i),a=t.create(i),s&&e.moleculeData.set(r,t.key);else{const{type:c,key:f}=t,h=`${f}(${r})`,g=IL[c];return{key:h,type:g,family:{key:f,subKey:r}}}return a}function tI(n,...e){let t,i,r,s,o;if(e.length===1){if(o=e[0],"family"in o){const f=nx(n,o);if(r=Mr(n,f),s=Tu(o.family.subKey),t=sx(n,f,s),"counterfeit"in o)return{token:o,family:r,subKey:s,isNew:!1};t?o=t:(i=rx(ix,n,f,s),o=i)}}else r=Mr(n,e[0]),s=e[1],t=sx(n,r,s),t?o=t:(i=rx(ix,n,r,s),o=i);const a="counterfeit"in o;if(!!i&&a===!1&&r){let f;switch(o.type){case"readonly_pure_selector":case"readonly_held_selector":f="readable";break;case"atom":case"mutable_atom":case"writable_pure_selector":case"writable_held_selector":f="writable";break}const h={type:"state_creation",subType:f,token:o,timestamp:Date.now()};r.subject.next(h);const y=Gn(n);if(o.family)if(tx(y))switch(o.type){case"atom":case"mutable_atom":n.on.atomCreation.next(o);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":n.on.selectorCreation.next(o);break}else ja(y)&&y.on.transactionApplying.state===null&&y.transactionMeta.update.subEvents.push(h)}return{token:o,family:r,subKey:s,isNew:!!i}}function Ga(n,...e){const{token:t,family:i,subKey:r}=tI(n,...e);if("counterfeit"in t&&i&&r)return q2(n,t,i,r);const s=Mr(n,t);return bm(n,s)}function sx(n,e,t){const i=As(t),r=`${e.key}(${i})`,s=Gn(n);let o;switch(e.type){case"atom_family":case"mutable_atom_family":o=s.atoms.get(r);break;case"writable_held_selector_family":case"writable_pure_selector_family":o=s.writableSelectors.get(r);break;case"readonly_held_selector_family":case"readonly_pure_selector_family":o=s.readonlySelectors.get(r);break}return o&&_h(o)}function or(n,e,t){const i=Mr(n,e),r=sx(n,e,t);return r||rx(qJ,n,i,t)}function Hw(n,e,t){const i=e.key,r="readonly_pure_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n),S={key:v,get:e.get(h)};return e.catch&&(S.catch=e.catch),aI(_,S,y)},internalRoles:t,subject:a,install:h=>Hw(h,e),default:h=>e.get(h)({get:((...y)=>Ga(n,...y)),find:((...y)=>or(n,...y)),json:y=>Nu(n,y)})};return n.families.set(i,f),s}function nI(n,e,t){const i={key:e.key,type:"atom_family"},r=n.families.get(e.key);r&&n.config.isProduction===!0&&n.logger.error("❗","atom_family",e.key,`Overwriting an existing ${Dh[r.type]} "${r.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const s=new Oi,a={...i,create:c=>{const f=As(c),h={key:e.key,subKey:f},g=`${e.key}(${f})`,y=Gn(n),v=e.default,_={key:g,default:xh(v)?()=>v(c):v};return e.effects&&(_.effects=e.effects(c)),e.catch&&(_.catch=e.catch),zT(y,_,h)},default:e.default,subject:s,install:c=>nI(c,e),internalRoles:t};return n.families.set(e.key,a),xh(e.default)===!1&&n.defaults.set(e.key,e.default),i}function K2(n,e,t){const i=e.key,r="readonly_held_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n);return oI(_,{key:v,const:e.const(h),get:e.get(h)},y)},internalRoles:t,subject:a,install:h=>K2(h,e),default:e.const};return n.families.set(i,f),s}function X2(n,e,t){const i=e.key,r="writable_held_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n);return lI(_,{key:v,const:e.const(h),get:e.get(h),set:e.set(h)},y)},internalRoles:t,subject:a,install:h=>X2(h,e),default:e.const};return n.families.set(i,f),s}function iI(n,e,t){const i=e.key,r="writable_pure_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n),S={key:v,get:e.get(h),set:e.set(h)};return e.catch&&(S.catch=e.catch),cI(_,S,y)},internalRoles:t,subject:a,install:h=>iI(h,e),default:h=>e.get(h)({get:((...y)=>Ga(n,...y)),find:((...y)=>or(n,...y)),json:y=>Nu(n,y)})};return n.families.set(i,f),s}function KJ(n,e){const t="set"in e,i="const"in e;return i&&t?X2(n,e,void 0):i?K2(n,e,void 0):t?iI(n,e):Hw(n,e)}function LT(n,...e){let t;if(e.length===1)t=e[0];else{const i=e[0],r=e[1];t=or(n,i,r)}try{Mr(n,t)}catch{n.logger.error("❌",t.type,t.key,`could not be disposed because it was not found in the store "${n.config.name}".`);return}switch(t.type){case"atom":case"mutable_atom":pI(n,t);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":nZ(n,t);break}}function Y2(n,e){if(n.operation.open){const t=performance.now();return n.logger.info("🚫",e.type,e.key,`deferring setState at T-${t} until setState for "${n.operation.token.key}" is done`),t}return n.operation={open:!0,done:new Set,prev:new Map,timestamp:Date.now(),token:e,subEvents:[]},n.logger.info("⭕",e.type,e.key,`operation start in store "${n.config.name}"${ja(n)?` ${n.transactionMeta.phase} "${n.transactionMeta.update.token.key}"`:""}`),n}function J2(n){n.operation.open&&n.logger.info("🔴",n.operation.token.type,n.operation.token.key,`operation done in store "${n.config.name}"`),n.operation={open:!1},n.on.operationClose.next(n.operation)}const Z2=(n,e)=>n.operation.open?n.operation.done.has(e):(n.logger.error("🐞","unknown",e,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0),UT=(n,e)=>{if(!n.operation.open){n.logger.error("🐞","unknown",e,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}n.operation.done.add(e)};function E3(n,e,t,i,r){const{oldValue:s,newValue:o}=t,a="oldValue"in t,c=_h(e);if(i&&r){e.subject.next({newValue:o});const v={checkpoint:!0,type:"state_creation",subType:"writable",token:c,timestamp:Date.now(),value:o};n.operation.subEvents.push(v),r.subject.next(v);const S=Gn(n);if(c.family)if(tx(S))switch(c.type){case"atom":case"mutable_atom":n.on.atomCreation.next(c);break;case"writable_pure_selector":case"writable_held_selector":n.on.selectorCreation.next(c);break}else ja(S)&&S.on.transactionApplying.state===null&&S.transactionMeta.update.subEvents.push(v);return}const{key:f,subject:h,type:g}=e;let y;if(a?y={oldValue:QS(s)?s.READONLY_VIEW:s,newValue:QS(o)?o.READONLY_VIEW:o}:y={newValue:QS(o)?o.READONLY_VIEW:o},tx(n)){switch(g){case"mutable_atom":n.logger.info("📢",g,f,"is now (",o,") subscribers:",h.subscribers.keys());break;case"atom":case"writable_pure_selector":case"writable_held_selector":n.logger.info("📢",g,f,"went (",s,"->",o,") subscribers:",h.subscribers.keys())}h.next(y)}if(ja(n)&&(g==="mutable_atom"||g==="atom")){if(n.on.transactionApplying.state===null){if(QS(o))return;const{timestamp:v}=n.operation,_={type:"atom_update",token:c,timestamp:v,update:y};n.transactionMeta.update.subEvents.push(_),n.logger.info("📁","atom",f,"stowed (",s,"->",o,")");return}if(hI(e,"tracker:signal")){const v=f.slice(1),_=n.atoms.get(v);bm(n,_,"mut").do(y.newValue)===null===!0&&dI(n,_)}}}const OL=Symbol("UNSET"),A3=(n,e,t)=>{let i,r;if(xh(t)){const s=bm(n,e,"mut");i=s,r=t(s)}else n.valueMap.has(e.key)?i=rV(n,e,"mut"):e.type==="atom"&&!xh(e.default)?i=e.default:i=OL,r=t;return n.logger.info("⭐","atom",e.key,"setting value",r),r=vu(n,e,r),UT(n,e.key),dI(n,e),i===OL?{newValue:r}:{oldValue:i,newValue:r}};function cC(n,e){switch(e.type){case"mutable_atom":return A3(n,e,new e.class);case"atom":{let t;return xh(e.default)?t=Gw(n,e):t=e.default,A3(n,e,t)}}}function XJ(n,e){let t;switch(e.type){case"atom":case"mutable_atom":t=cC(n,e);break;case"writable_held_selector":{const i=ox(n,e.key);for(const s of i.values()){const o=cC(n,s);E3(n,e,o,!1)}const r=e.getFrom(n);t={oldValue:r,newValue:r}}break;case"writable_pure_selector":{const i=Gw(n,e),r=ox(n,e.key);for(const o of r.values()){const a=cC(n,o);E3(n,e,a,!1)}const s=Gw(n,e);t={oldValue:i,newValue:s}}break}return t}function Xi(n,...e){Hx(R3,n,...e)}const C3=Symbol("RESET");function rI(n,...e){const t=[...e,C3];Xi(n,...t)}function YJ(n,e,t){let i,r,s;const{type:o,key:a}=e;switch(e.type){case"writable_pure_selector":i=bm(n,e,"mut"),r=DL(t,i),r=vu(n,e,r);break;case"writable_held_selector":s=e.const,DL(t,s),i=s,r=s}return n.logger.info("⭐",o,a,"setting to",r),UT(n,a),e.setSelf(r),{oldValue:i,newValue:r}}const JJ=(n,e,t)=>{let i;switch(e.type){case"atom":case"mutable_atom":i=A3(n,e,t);break;case"writable_pure_selector":case"writable_held_selector":i=YJ(n,e,t);break}return i},R3=Symbol("OWN_OP"),sI=Symbol("JOIN_OP");function Hx(n,e,...t){let i,r,s,o,a,c;t.length===2?(s=t[0],c=t[1],"family"in s&&(o=nx(e,s),a=Tu(s.family.subKey),i=sx(e,o,a),i?s=i:s=r=rx(ix,e,o,a))):(o=Mr(e,t[0]),a=t[1],c=t[2],i=sx(e,o,a),i?s=i:s=r=rx(ix,e,o,a));const f=c===C3?"reset":"set";let h;if(n===R3){const _=Y2(e,s);if(typeof _=="number"){const M=_,w=e.on.operationClose.subscribe(`waiting to ${f} "${s.key}" at T-${M}`,function(){w(),e.logger.info("🟢",s.type,s.key,"resuming deferred",f,`from T-${M}`),Hx(n,e,s,c)});return}h=_}else h=e;if("counterfeit"in s&&"family"in s){const _=s.family.subKey,S=e.disposalTraces.buffer.find(M=>M?.key===_);e.logger.error("❌",s.type,s.key,"could not be",f,"because key",_,"is not allocated.",S?`this key was previously disposed:${S.trace}`:"(no previous disposal trace found)");return}const g=Mr(h,s);let y;c===C3?y=XJ(h,g):y=JJ(h,g,c),E3(h,g,y,!!r,o),n===R3&&J2(h)}const Q2=(n,e)=>Gn(n).atoms.has(e),ZJ=(n,e)=>Gn(n).writableSelectors.has(e),QJ=(n,e)=>Gn(n).readonlySelectors.has(e),eZ=(n,e)=>Q2(n,e)||ZJ(n,e)||QJ(n,e);function NL(n,e){return Gn(n).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([i,{source:r}])=>r!==e).map(([i,{source:r}])=>r).filter(i=>eZ(n,i))}function ox(n,e,t=new Set){const i=NL(n,e),r=new Map;for(;i.length>0;){const s=i.pop();if(!t.has(s))if(t.add(s),Q2(n,s)){const o=n.atoms.get(s);r.set(o.key,o)}else i.push(...NL(n,s))}return r}function tZ(n,e,t,i,r){const s=Gn(n),{type:o,key:a}=i;if(o==="atom"||o==="mutable_atom")s.selectorAtoms.set({selectorKey:t,atomKey:a}),n.logger.info("🔍",e,t,`discovers root atom "${a}"`);else{const c=ox(n,a,r);n.logger.info("🔍",e,t,`discovers root atoms: [ ${[...c.values()].map(f=>`"${f.key}"`).join(", ")} ]`);for(const{key:f}of c.values())s.selectorAtoms=s.selectorAtoms.set({selectorKey:t,atomKey:f})}r.add(a)}function FT(n,e,t,i){return{get:(...r)=>{const s=Gn(n),{token:o,family:a,subKey:c}=tI(n,...r);let f;if("counterfeit"in o&&a&&c)f=q2(n,o,a,c);else{const h=Mr(n,o);f=bm(n,h)}return n.logger.info("🔌",e,t,`registers dependency ( "${o.key}" =`,f,")"),s.selectorGraph.set({upstreamSelectorKey:o.key,downstreamSelectorKey:t},{source:o.key}),tZ(n,e,t,o,i),f},set:((...r)=>{const s=Gn(n);Hx(sI,s,...r)}),find:((...r)=>or(n,...r)),json:r=>Nu(n,r)}}function oI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,{key:o,const:a}=e,c="readonly_held_selector";n.logger.info("🔨",c,o,"is being created");const{get:f,find:h,json:g}=FT(i,c,o,s),v={...e,type:c,subject:r,getFrom:S=>{const M=S.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[w,{source:A}]of M)A!==o&&S.selectorGraph.delete(w,o);return S.selectorAtoms.delete(o),e.get({get:f,find:h,json:g},a),vu(S,v,a),n.logger.info("✨",c,o,"=",a),s.clear(),a},install:S=>oI(S,e,t)};t&&(v.family=t),i.readonlySelectors.set(o,v);const _={key:o,type:c};return t&&(_.family=t),_}function aI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,o=e.key,a="readonly_pure_selector";n.logger.info("🔨",a,o,"is being created");const{get:c,find:f,json:h}=FT(i,a,o,s),y={...e,type:a,subject:r,getFrom:()=>{const _=Gn(n),S=_.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[w,{source:A}]of S)A!==o&&_.selectorGraph.delete(w,o);_.selectorAtoms.delete(o);const M=e.get({get:c,find:f,json:h});return n.logger.info("✨",a,o,"=",M),s.clear(),M},install:_=>aI(_,e,t)};t&&(y.family=t),i.readonlySelectors.set(o,y);const v={key:o,type:a};return t&&(v.family=t),v}function lI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,{key:o,const:a}=e,c="writable_held_selector";n.logger.info("🔨",c,o,"is being created");const f=FT(i,c,o,s),{find:h,get:g,json:y}=f,v={find:h,get:g,json:y},M={...e,type:c,subject:r,getFrom:A=>{const R=A.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[P,{source:I}]of R)I!==o&&A.selectorGraph.delete(P,o);return A.selectorAtoms.delete(o),e.get(v,a),vu(A,M,a),n.logger.info("✨",c,o,"=",a),s.clear(),a},setSelf:()=>{e.set(f,a)},install:A=>lI(A,e,t)};t&&(M.family=t),i.writableSelectors.set(o,M);const w={key:o,type:c};return t&&(w.family=t),w}function cI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,o=e.key,a="writable_pure_selector";n.logger.info("🔨",a,o,"is being created");const c=FT(i,a,o,s),{find:f,get:h,json:g}=c,y={find:f,get:h,json:g},S={...e,type:a,subject:r,getFrom:w=>{const A=w.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[P,{source:I}]of A)I!==o&&w.selectorGraph.delete(P,o);w.selectorAtoms.delete(o);const R=e.get(y);return n.logger.info("✨",a,o,"=",R),s.clear(),R},setSelf:w=>{e.set(c,w)},install:w=>cI(w,e,t)};t&&(S.family=t),i.writableSelectors.set(o,S);const M={key:o,type:a};return t&&(M.family=t),M}function eV(n,e){const t="set"in e,i="const"in e;if(i&&t){const s=lI(n,e,void 0);return n.on.selectorCreation.next(s),s}if(i){const s=oI(n,e,void 0);return n.on.selectorCreation.next(s),s}if(t){const s=cI(n,e,void 0);return n.on.selectorCreation.next(s),s}const r=aI(n,e,void 0);return n.on.selectorCreation.next(r),r}function nZ(n,e){const t=Gn(n),{key:i,type:r,family:s}=e;if(!s)n.logger.error("❌",r,i,"Standalone selectors cannot be disposed.");else{t.molecules.get(s.subKey)&&t.moleculeData.delete(s.subKey,s.key);let a;switch(e.type){case"writable_held_selector":t.writableSelectors.delete(i),a={key:s.key,type:"writable_held_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"writable_pure_selector":t.writableSelectors.delete(i),a={key:s.key,type:"writable_pure_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"readonly_held_selector":t.readonlySelectors.delete(i),a={key:s.key,type:"readonly_held_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"readonly_pure_selector":t.readonlySelectors.delete(i),a={key:s.key,type:"readonly_pure_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break}t.valueMap.delete(i),t.selectorAtoms.delete(i),t.selectorGraph.delete(i),t.moleculeData.delete(s.key,s.subKey),n.logger.info("🔥",e.type,i,"deleted"),ja(t)&&t.transactionMeta.phase==="building"?t.transactionMeta.update.subEvents.push({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()}):n.on.selectorDisposal.next(e)}}const iZ=(n,e)=>{const t=Gn(n);return t.operation.open?t.operation.prev.get(e.key):t.valueMap.get(e.key)},kL=(n,e,t)=>t.subject.subscribe(`${e.type}:${e.key}`,i=>{n.logger.info("📢",e.type,e.key,"root",t.key,"went",i.oldValue,"->",i.newValue);const r=iZ(n,e),s=bm(n,e);n.logger.info("✨",e.type,e.key,"went",r,"->",s),e.subject.next({newValue:s,oldValue:r})});function Sh(n,e,t,i){function r(g){n.operation.open&&s?.type==="atom"&&hI(s,"tracker:signal")&&"*"+n.operation.token.key===e.key&&"inboundTracker"in i||i(g)}tI(n,e);const s=Mr(n,e);n.logger.info("👀",s.type,s.key,`Adding subscription "${t}"`);const o=s.type==="writable_pure_selector"||s.type==="readonly_pure_selector",a=new Map;let c=r;if(o){bm(n,s);for(const[g,y]of ox(n,s.key))a.set(g,kL(n,s,y));c=function(y){const v=ox(n,s.key);for(const[_,S]of a)v.get(_)?v.delete(_):(S(),a.delete(_));for(const[_,S]of v)a.set(_,kL(n,s,S));r(y)}}const f=s.subject.subscribe(t,c);return()=>{n.logger.info("🙈",s.type,s.key,`Removing subscription "${t}"`),f();for(const g of a.values())g()}}const tV=(n,e,t,i)=>{const r=Mr(n,e);n.logger.info("👀","timeline",e.key,`Adding subscription "${t}"`);const s=r.subject.subscribe(t,i);return()=>{n.logger.info("🙈","timeline",e.key,`Removing subscription "${t}" from timeline`),s()}},nV=(n,e,t,i)=>{const r=Mr(n,e);n.logger.info("👀","transaction",e.key,`Adding subscription "${t}"`);const s=r.subject.subscribe(t,i);return()=>{n.logger.info("🙈","transaction",e.key,`Removing subscription "${t}"`),s()}};function rZ(n,e,t,i=kT()){switch(e.type){case"atom":case"mutable_atom":case"readonly_pure_selector":case"readonly_held_selector":case"writable_pure_selector":case"writable_held_selector":return Sh(n,e,i,t);case"transaction":return nV(n,e,i,t);case"timeline":return tV(n,e,i,t)}}class uI{initializeSignalAtom(e,t){const i=`*${e.key}`;t.atoms.delete(i),t.valueMap.delete(i);const r=e.family?{key:`*${e.family.key}`,subKey:e.family.subKey}:void 0,s=zT(t,{key:i,default:null},r,["tracker:signal"]);if(t.parent?.valueMap.has(i)){const o=t.parent.valueMap.get(i);t.valueMap.set(i,o)}return s}unsubscribeFromInnerValue;unsubscribeFromState;captureSignalsFromCore(e,t,i){const r=e.key,s=i.config.name,o=ja(i)?i.transactionMeta.update.token.key:"main",a=`tracker-from-core:${s}:${o}:${r}`,c=h=>{Hx(sI,i,t,h)},f=Ga(i,e);this.unsubscribeFromInnerValue=f.subscribe(a,c),this.unsubscribeFromState=Sh(i,e,a,(function(g){g.newValue!==g.oldValue&&(this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=g.newValue.subscribe(a,c))}).bind(this))}supplySignalsToCore(e,t,i){const r=e.key,s=i.config.name,o=ja(i)?i.transactionMeta.update.token.key:"main",a=`tracker-to-core:${s}:${o}:${r}`;Sh(i,t,a,Object.assign(function({newValue:f,oldValue:h}){const g=i.timelineTopics.getRelatedKey(t.key);if(g&&i.timelines.get(g)?.timeTraveling){const y=tV(i,{key:g,type:"timeline"},a,function(_){y(),Xi(i,e,S=>(_==="redo"&&f?S.do(f):_==="undo"&&h&&S.undo(h),S))});return}Xi(i,e,y=>(y.do(f),y))},{inboundTracker:!0}))}mutableAtomToken;latestSignalToken;[Symbol.dispose];constructor(e,t){const i=Gn(t),r=this.initializeSignalAtom(e,i);this.mutableAtomToken=e,this.latestSignalToken=r,this.captureSignalsFromCore(e,r,i),this.supplySignalsToCore(e,r,i),i.trackers.set(e.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),i.trackers.delete(e.key)}}}function fI(n,e,t){n.logger.info("🔨","atom",e.key,`creating in store "${n.config.name}"`);const i=Gn(n),{key:r}=e,s=i.atoms.get(r),o="mutable_atom";if(s?.type===o&&n.config.isProduction===!0)return n.logger.error("❌",o,r,"Tried to create atom, but it already exists in the store."),_h(s);const a=new Oi,c={...e,type:o,install:h=>(h.logger.info("🛠️","atom",r,`installing in store "${h.config.name}"`),fI(h,e,t)),subject:a};t&&(c.family=t),i.atoms.set(c.key,c);const f=_h(c);if(new uI(f,n),t||eV(n,{key:`${r}:JSON`,get:({get:h})=>h(f).toJSON(),set:({set:h},g)=>{h(f,e.class.fromJSON(g))}}),e.effects){let h=0;const g=[];for(const y of e.effects){const v=y({resetSelf:()=>{rI(n,f)},setSelf:_=>{Xi(n,f,_)},onSet:_=>Sh(n,f,`effect[${h}]`,_),token:f,store:XP(n)});v&&g.push(v),++h}c.cleanup=()=>{for(const y of g)y()}}return n.on.atomCreation.next(f),f}class sZ{trackers=new Map;latestSignalAtoms;mutableAtoms;constructor(e,t){const i=nI(t,{key:`*${e.key}`,default:null},["mutable","updates"]);this.latestSignalAtoms=Mr(t,i),this.mutableAtoms=e;const r=s=>{const{type:o,token:a}=s;if(a.family){const c=Tu(a.family.subKey);switch(o){case"state_creation":this.trackers.set(c,new uI(a,t));break;case"state_disposal":{const f=this.trackers.get(c);f&&(f[Symbol.dispose](),this.trackers.delete(c))}}}};this.mutableAtoms.subject.subscribe(`store=${t.config.name}::tracker-atom-family`,r)}}function iV(n,e,t){const i={key:e.key,type:"mutable_atom_family"},r=n.families.get(e.key);r&&n.config.isProduction===!0&&n.logger.error("❗","mutable_atom_family",e.key,`Overwriting an existing ${Dh[r.type]} "${r.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const s=new Oi,a={...i,create:c=>{const f=As(c),h={key:e.key,subKey:f},g=`${e.key}(${f})`,y=Gn(n),v={key:g,class:e.class};return e.effects&&(v.effects=e.effects(c)),fI(y,v,h)},class:e.class,subject:s,install:c=>iV(c,e),internalRoles:t};return n.families.set(e.key,a),iI(n,{key:`${e.key}:JSON`,get:c=>({get:f})=>f(i,c).toJSON(),set:c=>({set:f},h)=>{f(i,c,e.class.fromJSON(h))}},["mutable","json"]),new sZ(a,n),i}const oZ=(n,e)=>{const t=Gn(e),i=`${n.key}:JSON`;return t.families.get(i)},Nu=(n,e)=>{if(e.family){const i=Gn(n),s={key:`${e.family.key}:JSON`,type:"writable_pure_selector_family"},o=Mr(i,s),a=Tu(e.family.subKey);return or(n,o,a)}return{type:"writable_pure_selector",key:`${e.key}:JSON`}},BT=n=>{const t={type:"atom",key:`*${n.key}`};return n.family&&(t.family={key:`*${n.family.key}`,subKey:n.family.subKey}),t};function QS(n){return typeof n=="object"&&n!==null&&"do"in n&&"undo"in n&&"subscribe"in n&&"READONLY_VIEW"in n&&"toJSON"in n}function vu(n,e,t){const{key:i,subject:r,type:s}=e,o=n.valueMap.get(i);if(o instanceof jw&&!o.done){const a=o;return t instanceof Promise?(a.use(t),a):(n.valueMap.set(i,t),t)}if(t instanceof Promise){const a=new jw(t);return n.valueMap.set(i,a),a.then(function(f){if(n.valueMap.get(i)===a){switch(Y2(n,e),vu(n,e,f),s){case"atom":dI(n,e);break;case"readonly_pure_selector":case"writable_pure_selector":oV(n,i);break}J2(n),r.next({newValue:f,oldValue:a})}}).catch(c=>{n.logger.error("💥",e.type,i,"rejected:",c)}),a}return n.logger.info("📝",e.type,e.key,"writing to cache",t),n.valueMap.set(i,t),t}function rV(n,e,t){n.logger.info("📖",e.type,e.key,"reading cached value");let i=n.valueMap.get(e.key);if(t==="mut"&&e.type==="mutable_atom"&&ja(n)){const s=e,{parent:o}=n;if(n.valueMap.hasOwn(s.key))return i;const a=o.valueMap.get(s.key);n.logger.info("📃","atom",s.key,"copying");const c=a.toJSON(),f=s.class.fromJSON(c);n.valueMap.set(s.key,f),new uI(s,o),i=f}return i}function sV(n,e){const t=n.valueMap.get(e);t instanceof jw||(n.operation.open&&n.operation.prev.set(e,t),n.valueMap.delete(e),n.logger.info("🗑","state",e,"evicted"))}function dI(n,e){const t=Gn(n),{key:i,type:r}=e,s=t.selectorAtoms.getRelatedKeys(i);if(t.logger.info("🧹",r,i,s?`evicting ${s.size} states downstream:`:"no downstream states",s??"to evict"),s){t.operation.open&&t.logger.info("🧹",r,i,`[ ${[...t.operation.done].join(", ")} ] already done`);for(const o of s)Z2(t,o)||(sV(t,o),UT(t,o))}}function oV(n,e){const t=Gn(n),i=t.selectorGraph.getRelationEntries({upstreamSelectorKey:e}).filter(([r,{source:s}])=>s===e);for(const[r]of i)Z2(t,r)||(sV(t,r),UT(t,r),oV(n,r))}function zT(n,e,t,i){const r="atom",{key:s}=e;n.logger.info("🔨",r,s,"is being created");const o=Gn(n),a=o.atoms.get(s);if(a?.type===r&&n.config.isProduction===!0)return n.logger.error("❌","atom",s,"Tried to create atom, but it already exists in the store."),_h(a);const c=new Oi,f={...e,type:r,install:g=>(g.logger.info("🛠️",r,s,`installing in store "${g.config.name}"`),zT(g,e,t)),subject:c};t&&(f.family=t),i&&(f.internalRoles=i),o.atoms.set(s,f);const h=_h(f);if(e.effects){let g=0;const y=[];for(const v of e.effects){const _=v({resetSelf:()=>{rI(n,h)},setSelf:S=>{Xi(n,h,S)},onSet:S=>Sh(n,h,`effect[${g}]`,S),token:h,store:XP(n)});_&&y.push(_),++g}f.cleanup=()=>{for(const v of y)v()}}return n.on.atomCreation.next(h),h}function hI(n,e){return"internalRoles"in n?n.internalRoles.includes(e):!1}function pI(n,e){const t=Gn(n),{key:i,family:r}=e,s=Mr(t,e);if(!r)n.logger.error("❌","atom",i,"Standalone atoms cannot be disposed.");else{s.cleanup?.();const o=n.valueMap.get(s.key),a=nx(n,e),f=Mr(n,a).subject,h={type:"state_disposal",subType:"atom",token:e,value:o,timestamp:Date.now()};f.next(h);const g=ja(t);if(t.atoms.delete(i),t.valueMap.delete(i),t.selectorAtoms.delete(i),t.atomsThatAreDefault.delete(i),t.moleculeData.delete(r.key,r.subKey),n.timelineTopics.delete(i),e.type==="mutable_atom"){const y=BT(e);pI(n,y),n.trackers.delete(i)}if(n.logger.info("🔥","atom",i,"deleted"),g&&t.transactionMeta.phase==="building"){const y=t.transactionMeta.update.subEvents.at(-1),_=y?.type==="molecule_disposal"&&y.values.some(([M])=>M===s.family?.key),S=hI(s,"tracker:signal");!_&&!S&&t.transactionMeta.update.subEvents.push(h)}else n.on.atomDisposal.next(e)}}function Ml(n){return n[0].toUpperCase()+n.slice(1)}const LL=B2(["add","delete","clear"]);class th extends Set{mode="record";subject=new Oi;constructor(e){super(e)}READONLY_VIEW=this;toJSON(){return[...this]}static fromJSON(e){return new th(e)}add(e){const t=super.add(e);return this.mode==="record"&&this.emit({type:"add",value:e}),t}clear(){const e=this.mode==="record"?[...this]:null;super.clear(),e&&this.emit({type:"clear",values:e})}delete(e){const t=super.delete(e);return this.mode==="record"&&this.emit({type:"delete",value:e}),t}subscribe(e,t){return this.subject.subscribe(e,t)}emit(e){this.subject.next(th.packUpdate(e))}do(e){this.mode="playback";const t=th.unpackUpdate(e);switch(t.type){case"add":this.add(t.value);break;case"delete":this.delete(t.value);break;case"clear":this.clear()}return this.mode="record",null}undo(e){const t=th.unpackUpdate(e);switch(this.mode="playback",t.type){case"add":this.delete(t.value);break;case"delete":this.add(t.value);break;case"clear":{const i=t.values;for(const r of i)this.add(r)}}return this.mode="record",null}static packUpdate(e){const t=LL[e.type]+"";return e.type==="clear"?t+e.values.map(da).join(""):t+da(e.value)}static unpackUpdate(e){const[t,i]=e.split(""),r=LL[t];return r==="clear"?{type:"clear",values:i.split("").map(ha)}:{type:r,value:ha(i)}}}class aV{toolkit;options;relations;states;relatedKeysAtoms;transact(e,t){const i=this.toolkit;this.toolkit=e,t(this),this.toolkit=i}store;[Symbol.dispose](){}constructor(e,t){this.store=e,this.options=t,this.store.miscResources.set(`join:${t.key}`,this),this.toolkit={get:((...v)=>Ga(e,...v)),set:((...v)=>{Xi(e,...v)}),find:((...v)=>or(e,...v)),json:v=>Nu(e,v)};const i=t.between[0],r=t.between[1],s=iV(e,{key:`${t.key}/relatedKeys`,class:th},["join","relations"]);this.relatedKeysAtoms=s;const o=(v,_,S)=>{const{find:M,get:w,set:A}=v,R=M(s,_),P=w(R);for(const I of P)S.includes(I)||A(s,I,U=>(U.delete(_),U));A(R,I=>{I.clear();for(const k of S){const U=M(s,k),B=w(U),N=B.has(_);if(this.relations.cardinality==="1:n"){const L=[];for(const $ of B){if($===_)continue;let W;Hx(sI,this.store,s,$,q=>(q.delete(k),W=q.size,q)),W===0&&L.push($)}!N&&B.size>0&&A(U,$=>($.clear(),$));for(const $ of L)e.keyRefsInJoins.delete(hw(k,$))}N||A(U,L=>(L.add(_),L)),I.add(k)}return I})},a=(v,_,S)=>{const{set:M}=v;M(s,_,w=>{for(const A of S)w.add(A);return w});for(const w of S)M(s,w,A=>(A.add(_),A));return!0},f={getRelatedKeys:v=>this.toolkit.get(s,v),addRelation:(v,_)=>{this.store.keyRefsInJoins.set(`"${v}"`,t.key),this.store.keyRefsInJoins.set(`"${_}"`,t.key),this.store.keyRefsInJoins.set(hw(v,_),t.key),this.toolkit.set(s,v,S=>S.add(_)),this.toolkit.set(s,_,S=>S.add(v))},deleteRelation:(v,_)=>{this.toolkit.set(s,v,M=>(M.delete(_),M)),this.toolkit.set(s,_,M=>(M.delete(v),M));const S=hw(v,_);this.store.keyRefsInJoins.delete(S)},replaceRelationsSafely:(v,_)=>{o(this.toolkit,v,_)},replaceRelationsUnsafely:(v,_)=>{a(this.toolkit,v,_)},has:(v,_)=>{const S=this.toolkit.get(s,v);return _?S.has(_):S.size>0}},h=new ac(t,{externalStore:f,isAType:t.isAType,isBType:t.isBType}),g=()=>Hw(e,{key:`${t.key}/singleRelatedKey`,get:v=>({get:_})=>{const S=_(s,v);for(const M of S)return M;return null}},["join","keys"]),y=()=>Hw(e,{key:`${t.key}/multipleRelatedKeys`,get:v=>({get:_})=>{const S=oZ(s,e);return _(S,v)}},["join","keys"]);switch(t.cardinality){case"1:1":{const v=g(),_=`${i}KeyOf${Ml(r)}`,S=`${r}KeyOf${Ml(i)}`;this.relations=h,this.states={[_]:v,[S]:v};break}case"1:n":{const v=g(),_=y(),S=`${i}KeyOf${Ml(r)}`,M=`${r}KeysOf${Ml(i)}`,w={[S]:v,[M]:_};this.relations=h,this.states=w;break}case"n:n":{const v=y(),_=`${i}KeysOf${Ml(r)}`,S=`${r}KeysOf${Ml(i)}`;this.relations=h,this.states={[_]:v,[S]:v}}}}}function aZ(n,e){return n.joins.set(e.key,new aV(n,e)),{key:e.key,type:"join",a:e.between[0],b:e.between[1],cardinality:e.cardinality}}function lV(n,e){let t=n.joins.get(e.key);if(t===void 0){const r=Ws.STORE.joins.get(e.key);if(r===void 0)throw new Error(`Join "${e.key}" not found in store "${n.config.name}"`);const s=XP(n);t=new aV(s,r.options),n.joins.set(e.key,t)}return t}function lZ(n,e,t){const i=lV(n,e);let r;switch(e.cardinality){case"1:1":{const s=`${e.a}KeyOf${Ml(e.b)}`,o=`${e.b}KeyOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}};break}case"1:n":{const s=`${e.a}KeyOf${Ml(e.b)}`,o=`${e.b}KeysOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}};break}case"n:n":{const s=`${e.a}KeysOf${Ml(e.b)}`,o=`${e.b}KeysOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}}}}return r}function D3(n,e,t){const i=lV(n,e);return[i.relatedKeysAtoms,i.relatedKeysAtoms]}const wc=ne.createContext(Ws.STORE);function cV(n,e){const t=e(null);return ne.useEffect(()=>{It(n,t.current)},[n]),t}function uV(n,...e){let t;if(e.length===2){const i=e[0],r=e[1];t=or(n,i,r)}else t=e[0];return t}function ka(...n){const e=ne.useContext(wc),t=uV(e,...n),i=ne.useRef(null);return i.current??=r=>{Xi(e,t,r)},i.current}function fV(n,e){if(globalThis.env?.NODE_ENV==="development"){const r=ne.useRef(!1);ne.useEffect(()=>{let s=r.current;if(s===!1)s=n()??!0,r.current=s;else return()=>{xh(s)&&s(),r.current=!1}},e)}else ne.useEffect(n,e)}function on(...n){const e=ne.useContext(wc),t=uV(e,...n),i=ne.useId();if(t.type==="mutable_atom"||t.type==="readonly_held_selector"||t.type==="writable_held_selector"){const[,o]=ne.useState(0),a=ne.useRef(Ga(e,t));return fV(()=>Sh(e,t,`use-o:${i}`,({newValue:f})=>{a.current=f,o(h=>h+1)}),[t.key]),a.current}const r=ne.useCallback(o=>Sh(e,t,`use-o:${i}`,o),[t.key]),s=ne.useCallback(()=>Ga(e,t),[t.key]);return ne.useSyncExternalStore(r,s,s)}function VT(n,e){const t=ne.useContext(wc),i=n.type==="mutable_atom_family"?or(t,n,e):n,r=Nu(t,i);return on(r)}const cZ="modulepreload",uZ=function(n){return"/"+n},UL={},mI=function(e,t,i){let r=Promise.resolve();if(t&&t.length>0){let f=function(h){return Promise.all(h.map(g=>Promise.resolve(g).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};var o=f;document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=a?.nonce||a?.getAttribute("nonce");r=f(t.map(h=>{if(h=uZ(h),h in UL)return;UL[h]=!0;const g=h.endsWith(".css"),y=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${y}`))return;const v=document.createElement("link");if(v.rel=g?"stylesheet":cZ,g||(v.as="script"),v.crossOrigin="",v.href=h,c&&v.setAttribute("nonce",c),document.head.appendChild(v),g)return new Promise((_,S)=>{v.addEventListener("load",_),v.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return r.then(a=>{for(const c of a||[])c.status==="rejected"&&s(c.reason);return e().catch(s)})};function Uy(n,e,t){return n.on(e,t),()=>{n.off(e,t)}}class fZ extends Map{set(e,t){return this.has(e)?(console.warn("Tried to set a key that already exists in an InvariantMap",{key:e,value:t}),this):super.set(e,t)}}class $w{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(e){this.key=e}static existing=new fZ;static create(e,t){const i=new $w(e),{type:r,globals:s,actions:o,perspectives:a}=t(i),c={type:r,key:e,globals:s,actions:o,perspectives:a};return $w.existing.set(e,c),c}add(...e){switch(e[0].type){case"atom":case"mutable_atom":this.globals.push(...e);break;case"transaction":this.actions.push(...e);break;case"atom_family":case"mutable_atom_family":{const[i,r]=e;this.perspectives.push({type:"realtime_perspective",resourceAtoms:i,viewAtoms:r})}break}return this}}function dZ(n){const{key:e,config:t}=n,i=$w.create(e,t),{actions:r}=i;for(const s of r)$2(Ws.STORE,e,s.key);return eI(Ws.STORE,e,-1),i}const dV=n=>n.startsWith("user::"),hV=n=>n.startsWith("room::"),P3=YP({key:"roomKeys",class:th}),xm=N2({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:hV,isBType:dV});Sc({key:"visibleUsersInRooms",get:n=>({get:e})=>{const[,t]=uv(xm),i=e(t,n);return[n,...i]}});Sc({key:"visibilityFromRoom",get:n=>({get:e})=>{const[t]=uv(xm),i=e(t,n);return[n,...i]}});Sc({key:"mutualUsers",get:n=>({get:e})=>{const[t,i]=uv(xm),r=e(i,n);for(const s of r)return[...e(t,s)];return[n]}});const pV=N2({key:"ownersOfRooms",between:["user","room"],cardinality:"1:n",isAType:dV,isBType:hV});var FL={};const hZ=ti({key:"mySocketKey",default:void 0}),Zf=ti({key:"myUserKey",default:null,effects:[n=>{typeof window<"u"&&mI(async()=>{const{storageSync:e}=await Promise.resolve().then(()=>$oe);return{storageSync:e}},void 0).then(({storageSync:e})=>{e(globalThis.localStorage,JSON,"myUserKey")(n)})}]}),gI=dr({key:"myRoomKey",get:({get:n})=>{if("process"in globalThis&&"env"in process&&"REALTIME_ROOM_KEY"in FL)return FL.REALTIME_ROOM_KEY;const e=n(Zf);if(!e)return null;const[,t]=uv(xm),i=n(t,e);for(const r of i)return r;return null}}),pw=ti({key:"optimisticUpdateQueue",default:()=>[]}),I3=ti({key:"confirmedUpdateQueue",default:()=>[]}),pZ=(n,e,t,i,r)=>s=>{function o(c,f){if(n.logger.info("🧑‍⚖️","continuity",e,"reconciling updates"),Xi(n,pw,g=>(g.shift(),g)),c.id===f.id){const g=JSON.stringify(c.subEvents),y=JSON.stringify(f.subEvents);if(g===y){n.logger.info("✅","continuity",e,`results for ${c.id} match between client and server`),t.emit(`ack:${e}`,f.epoch);return}}else n.logger.info("❌","continuity",e,`thought update #${f.epoch} was ${c.token.key}:${c.id}, but it was actually ${f.token.key}:${f.id}`);n.logger.info("🧑‍⚖️","continuity",e,"updates do not match",c,f);const h=i.toReversed();for(const g of h)hy(n,g,"oldValue");n.logger.info("⏪","continuity",e,"undid optimistic updates:",h),hy(n,c,"oldValue"),n.logger.info("⏪","continuity",e,"undid zeroth optimistic update",c),hy(n,f,"newValue"),n.logger.info("⏩","continuity",e,"applied confirmed update",f),t.emit(`ack:${e}`,f.epoch);for(const g of i){const y={type:"transaction",key:g.token.key},{id:v,params:_}=g;ZP(n,y,v)(..._)}n.logger.info("⏩","continuity",e,"reapplied subsequent optimistic updates:",i)}n.logger.info("🧑‍⚖️","continuity",e,"integrating confirmed update",{confirmedUpdate:s,confirmedUpdates:r,optimisticUpdates:i});const a=i[0];if(a)if(n.logger.info("🧑‍⚖️","continuity",e,"has optimistic updates to reconcile"),s.epoch===a.epoch){n.logger.info("🧑‍⚖️","continuity",e,`epoch of confirmed update #${s.epoch} matches zeroth optimistic update`),o(a,s);for(const c of r){const f=i[0];if(c.epoch===f?.epoch)o(f,c);else break}}else n.logger.info("🧑‍⚖️","continuity",e,`epoch of confirmed update #${s.epoch} does not match zeroth optimistic update #${a.epoch}`),r.some(f=>f.epoch===s.epoch)||(n.logger.info("👈","continuity",e,"pushing confirmed update to queue",s),Xi(n,I3,f=>(f.push(s),f.sort((h,g)=>h.epoch-g.epoch),f)));else{n.logger.info("🧑‍⚖️","continuity",e,"has no optimistic updates to deal with");let c;c=H2(n,e),c===s.epoch-1?(n.logger.info("✅","continuity",e,`integrating update #${s.epoch} (${s.token.key} ${s.id})`),hy(n,s,"newValue"),t.emit(`ack:${e}`,s.epoch),eI(n,e,s.epoch)):c!==void 0&&(n.logger.info("🧑‍⚖️","continuity",e,`received update #${s.epoch} but still waiting for update #${c+1}`,{clientEpoch:c,serverEpoch:s.epoch}),r.some(h=>h.epoch===s.epoch)?n.logger.info("👍","continuity",e,`confirmed update #${s.epoch} is already enqueued`):(n.logger.info("👈","continuity",e,`pushing confirmed update #${s.epoch} to queue`),Xi(n,I3,h=>(h.push(s),h.sort((g,y)=>g.epoch-y.epoch),h))))}};function mZ(n){return e=>{for(const t of e)pI(n,t)}}function gZ(n){return e=>{let t=0,i,r;for(const s of e)t%2===0?i=s:(r=s,Xi(n,i,r)),t++}}const O3=new WeakMap,BL=new WeakMap;function yZ(n){let e=O3.get(n);return e===void 0&&(e=new Map,O3.set(n,e)),e}function jT(n,e,t){BL.get(n)!==n.id&&(BL.set(n,n.id),O3.delete(n));const r=yZ(n);let s=r.get(e);if(s)s.timer.use(new Promise(()=>{})),s.refcount++;else{s={refcount:1,timer:new jw(()=>{})},r.set(e,s);const o=t(e);s.timer.then(()=>{o(),r.delete(e)})}return()=>{if(s.refcount--,s.refcount===0){const o=new Promise(a=>{setTimeout(a,50)});s.timer.use(o)}}}function mV(n,e,t){return jT(e,t.key,i=>{const r=Uy(e,`serve:${i}`,s=>{Xi(n,t,s)});return e.emit(`sub:${t.key}`),()=>{e.emit(`unsub:${i}`),r()}})}function gV(n,e,t,i){const r=or(n,t,i);return jT(e,r.key,()=>{const s=Uy(e,`serve:${r.key}`,o=>{Xi(n,r,o)});return e.emit(`sub:${t.key}`,i),()=>{e.emit(`unsub:${r.key}`),s()}})}function yV(n,e,t){const i=Nu(n,t),r=BT(t);return jT(e,t.key,()=>{const s=Uy(e,`init:${t.key}`,a=>{Xi(n,i,a)}),o=Uy(e,`next:${t.key}`,a=>{Xi(n,r,a)});return e.emit(`sub:${t.key}`),()=>{e.emit(`unsub:${t.key}`),s(),o()}})}function vV(n,e,t,i){const r=or(n,t,i),s=Nu(n,r),o=BT(r);return jT(e,r.key,()=>{const a=Uy(e,`init:${r.key}`,f=>{Xi(n,s,f)}),c=Uy(e,`next:${r.key}`,f=>{Xi(n,o,f)});return e.emit(`sub:${t.key}`,i),()=>{e.emit(`unsub:${r.key}`),a(),c()}})}function bV(n,e,t){const i=new Map,r=()=>{const o=n.selectorAtoms.getRelatedKeys(t.key);if(o){for(const[a,c]of i)o.has(a)||(c(),i.delete(a));for(const a of o){if(i.has(a))continue;const c=n.atoms.get(a);switch(c.type){case"atom":{if(c.family){const{subKey:f}=c.family,h=Tu(f),g=nx(n,c);i.set(a,gV(n,e,g,h))}else i.set(a,mV(n,e,c));break}case"mutable_atom":{if(c.family){const{subKey:f}=c.family,h=Tu(f),g=nx(n,c);i.set(a,vV(n,e,g,h))}else i.set(a,yV(n,e,c));break}}}}},s=Sh(n,t,"pull-watches-dependencies",()=>{r()});return r(),()=>{for(const[,o]of i)o();i.clear(),s()}}function vZ(n,e,t){return bV(n,e,t)}function bZ(n,e,t,i){const r=or(n,t,i);return bV(n,e,r)}function xZ(n,e,t){const i=t.key,r=Ga(n,pw),s=Ga(n,I3),o=(g,y)=>{e.off(`continuity-init:${i}`,o);let v=0,_,S;for(const M of y)v%2===0?_=M:(S=M,"type"in _&&_.type==="mutable_atom"&&(_=Nu(n,_)),Xi(n,_,S)),v++;eI(n,i,g)};e.off(`continuity-init:${i}`),e.on(`continuity-init:${i}`,o);const a=pZ(n,i,e,r,s);e.off(`tx-new:${i}`),e.on(`tx-new:${i}`,a);const c=t.actions.map(g=>($2(n,i,g.key),nV(n,g,`tx-run:${i}`,v=>{n.logger.info("🤞","continuity",i,"enqueuing optimistic update");const _=r.findIndex(S=>S.id===v.id);_===-1?(n.logger.info("🤞","continuity",i,"enqueuing new optimistic update"),Xi(n,pw,S=>(S.push(v),S.sort((M,w)=>M.epoch-w.epoch),S))):(n.logger.info("🤞","continuity",i,`replacing existing optimistic update at index ${_}`),Xi(n,pw,S=>(S[_]=v,S))),e.emit(`tx-run:${i}`,{id:v.id,token:g,params:v.params})}))),f=gZ(n),h=mZ(n);return e.on(`reveal:${i}`,f),e.on(`conceal:${i}`,h),e.emit(`get:${i}`),()=>{e.off(`continuity-init:${i}`),e.off(`tx-new:${i}`);for(const g of c)g()}}const _m=ne.createContext({socket:null,services:null}),_Z=({children:n,socket:e})=>{const t=ne.useRef(new Map).current,i=ka(hZ);return ne.useEffect(()=>{i(e?.id?`socket::${e.id}`:void 0),e?.on("connect",()=>{i(e?.id?`socket::${e.id}`:void 0)}),e?.on("disconnect",()=>{i(void 0)})},[e,i]),j.jsx(_m.Provider,{value:{socket:e,services:t},children:n})};function Sm(n,e){const{socket:t,services:i}=ne.useContext(_m);fV(()=>{let r=i?.get(n);return r?++r.consumerCount:t&&(r={consumerCount:1,dispose:e(t)},i?.set(n,r)),()=>{r&&(--r.consumerCount,r.consumerCount===0&&(r.dispose?.(),i?.delete(n)))}},[t,n])}function Eu(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>mV(e,t,n)),on(n)}function vc(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>gV(t,r,n,e)),on(i)}function yI(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>yV(e,t,n)),on(n)}function e1(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>vV(t,r,n,e)),on(i)}function rm(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>vZ(e,t,n)),on(n)}function SZ(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>bZ(t,r,n,e)),on(i)}function wm(){const n=ne.useContext(wc),{socket:e}=ne.useContext(_m);yI(P3);const t=Eu(Zf)??"user::$_NONE_$",[i,r]=D3(n,xm);e1(r,t);const s=on(r,t);let o;for(const y of s){o=y;break}const a=o??"room::$_NONE_$",c=or(n,i,a);e1(i,a);const[f,h]=D3(n,pV),g=or(n,f,t);return e1(f,t),e1(h,a),{roomSocket:e,myRoomKey:o,allRoomKeysAtom:P3,myMutualsAtom:c,myOwnedRoomsAtom:g}}function wZ(n){const e=ne.useContext(wc);Sm(`tx-sync:${n.key}`,t=>xZ(e,t,n))}var uC={exports:{}},H0={},fC={exports:{}},dC={};var zL;function MZ(){return zL||(zL=1,(function(n){function e(H,Q){var te=H.length;H.push(Q);e:for(;0<te;){var le=te-1>>>1,ce=H[le];if(0<r(ce,Q))H[le]=Q,H[te]=ce,te=le;else break e}}function t(H){return H.length===0?null:H[0]}function i(H){if(H.length===0)return null;var Q=H[0],te=H.pop();if(te!==Q){H[0]=te;e:for(var le=0,ce=H.length,F=ce>>>1;le<F;){var ee=2*(le+1)-1,re=H[ee],he=ee+1,pe=H[he];if(0>r(re,te))he<ce&&0>r(pe,re)?(H[le]=pe,H[he]=te,le=he):(H[le]=re,H[ee]=te,le=ee);else if(he<ce&&0>r(pe,te))H[le]=pe,H[he]=te,le=he;else break e}}return Q}function r(H,Q){var te=H.sortIndex-Q.sortIndex;return te!==0?te:H.id-Q.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;n.unstable_now=function(){return s.now()}}else{var o=Date,a=o.now();n.unstable_now=function(){return o.now()-a}}var c=[],f=[],h=1,g=null,y=3,v=!1,_=!1,S=!1,M=!1,w=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;function P(H){for(var Q=t(f);Q!==null;){if(Q.callback===null)i(f);else if(Q.startTime<=H)i(f),Q.sortIndex=Q.expirationTime,e(c,Q);else break;Q=t(f)}}function I(H){if(S=!1,P(H),!_)if(t(c)!==null)_=!0,k||(k=!0,W());else{var Q=t(f);Q!==null&&ie(I,Q.startTime-H)}}var k=!1,U=-1,B=5,N=-1;function L(){return M?!0:!(n.unstable_now()-N<B)}function $(){if(M=!1,k){var H=n.unstable_now();N=H;var Q=!0;try{e:{_=!1,S&&(S=!1,A(U),U=-1),v=!0;var te=y;try{t:{for(P(H),g=t(c);g!==null&&!(g.expirationTime>H&&L());){var le=g.callback;if(typeof le=="function"){g.callback=null,y=g.priorityLevel;var ce=le(g.expirationTime<=H);if(H=n.unstable_now(),typeof ce=="function"){g.callback=ce,P(H),Q=!0;break t}g===t(c)&&i(c),P(H)}else i(c);g=t(c)}if(g!==null)Q=!0;else{var F=t(f);F!==null&&ie(I,F.startTime-H),Q=!1}}break e}finally{g=null,y=te,v=!1}Q=void 0}}finally{Q?W():k=!1}}}var W;if(typeof R=="function")W=function(){R($)};else if(typeof MessageChannel<"u"){var q=new MessageChannel,Y=q.port2;q.port1.onmessage=$,W=function(){Y.postMessage(null)}}else W=function(){w($,0)};function ie(H,Q){U=w(function(){H(n.unstable_now())},Q)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(H){H.callback=null},n.unstable_forceFrameRate=function(H){0>H||125<H?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<H?Math.floor(1e3/H):5},n.unstable_getCurrentPriorityLevel=function(){return y},n.unstable_next=function(H){switch(y){case 1:case 2:case 3:var Q=3;break;default:Q=y}var te=y;y=Q;try{return H()}finally{y=te}},n.unstable_requestPaint=function(){M=!0},n.unstable_runWithPriority=function(H,Q){switch(H){case 1:case 2:case 3:case 4:case 5:break;default:H=3}var te=y;y=H;try{return Q()}finally{y=te}},n.unstable_scheduleCallback=function(H,Q,te){var le=n.unstable_now();switch(typeof te=="object"&&te!==null?(te=te.delay,te=typeof te=="number"&&0<te?le+te:le):te=le,H){case 1:var ce=-1;break;case 2:ce=250;break;case 5:ce=1073741823;break;case 4:ce=1e4;break;default:ce=5e3}return ce=te+ce,H={id:h++,callback:Q,priorityLevel:H,startTime:te,expirationTime:ce,sortIndex:-1},te>le?(H.sortIndex=te,e(f,H),t(c)===null&&H===t(f)&&(S?(A(U),U=-1):S=!0,ie(I,te-le))):(H.sortIndex=ce,e(c,H),_||v||(_=!0,k||(k=!0,W()))),H},n.unstable_shouldYield=L,n.unstable_wrapCallback=function(H){var Q=y;return function(){var te=y;y=Q;try{return H.apply(this,arguments)}finally{y=te}}}})(dC)),dC}var VL;function xV(){return VL||(VL=1,fC.exports=MZ()),fC.exports}var hC={exports:{}},ro={};var jL;function TZ(){if(jL)return ro;jL=1;var n=Fx();function e(c){var f="https://react.dev/errors/"+c;if(1<arguments.length){f+="?args[]="+encodeURIComponent(arguments[1]);for(var h=2;h<arguments.length;h++)f+="&args[]="+encodeURIComponent(arguments[h])}return"Minified React error #"+c+"; visit "+f+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function t(){}var i={d:{f:t,r:function(){throw Error(e(522))},D:t,C:t,L:t,m:t,X:t,S:t,M:t},p:0,findDOMNode:null},r=Symbol.for("react.portal");function s(c,f,h){var g=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:g==null?null:""+g,children:c,containerInfo:f,implementation:h}}var o=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function a(c,f){if(c==="font")return"";if(typeof f=="string")return f==="use-credentials"?f:""}return ro.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,ro.createPortal=function(c,f){var h=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!f||f.nodeType!==1&&f.nodeType!==9&&f.nodeType!==11)throw Error(e(299));return s(c,f,null,h)},ro.flushSync=function(c){var f=o.T,h=i.p;try{if(o.T=null,i.p=2,c)return c()}finally{o.T=f,i.p=h,i.d.f()}},ro.preconnect=function(c,f){typeof c=="string"&&(f?(f=f.crossOrigin,f=typeof f=="string"?f==="use-credentials"?f:"":void 0):f=null,i.d.C(c,f))},ro.prefetchDNS=function(c){typeof c=="string"&&i.d.D(c)},ro.preinit=function(c,f){if(typeof c=="string"&&f&&typeof f.as=="string"){var h=f.as,g=a(h,f.crossOrigin),y=typeof f.integrity=="string"?f.integrity:void 0,v=typeof f.fetchPriority=="string"?f.fetchPriority:void 0;h==="style"?i.d.S(c,typeof f.precedence=="string"?f.precedence:void 0,{crossOrigin:g,integrity:y,fetchPriority:v}):h==="script"&&i.d.X(c,{crossOrigin:g,integrity:y,fetchPriority:v,nonce:typeof f.nonce=="string"?f.nonce:void 0})}},ro.preinitModule=function(c,f){if(typeof c=="string")if(typeof f=="object"&&f!==null){if(f.as==null||f.as==="script"){var h=a(f.as,f.crossOrigin);i.d.M(c,{crossOrigin:h,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0})}}else f==null&&i.d.M(c)},ro.preload=function(c,f){if(typeof c=="string"&&typeof f=="object"&&f!==null&&typeof f.as=="string"){var h=f.as,g=a(h,f.crossOrigin);i.d.L(c,h,{crossOrigin:g,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0,type:typeof f.type=="string"?f.type:void 0,fetchPriority:typeof f.fetchPriority=="string"?f.fetchPriority:void 0,referrerPolicy:typeof f.referrerPolicy=="string"?f.referrerPolicy:void 0,imageSrcSet:typeof f.imageSrcSet=="string"?f.imageSrcSet:void 0,imageSizes:typeof f.imageSizes=="string"?f.imageSizes:void 0,media:typeof f.media=="string"?f.media:void 0})}},ro.preloadModule=function(c,f){if(typeof c=="string")if(f){var h=a(f.as,f.crossOrigin);i.d.m(c,{as:typeof f.as=="string"&&f.as!=="script"?f.as:void 0,crossOrigin:h,integrity:typeof f.integrity=="string"?f.integrity:void 0})}else i.d.m(c)},ro.requestFormReset=function(c){i.d.r(c)},ro.unstable_batchedUpdates=function(c,f){return c(f)},ro.useFormState=function(c,f,h){return o.H.useFormState(c,f,h)},ro.useFormStatus=function(){return o.H.useHostTransitionStatus()},ro.version="19.2.3",ro}var GL;function _V(){if(GL)return hC.exports;GL=1;function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}return n(),hC.exports=TZ(),hC.exports}var HL;function EZ(){if(HL)return H0;HL=1;var n=xV(),e=Fx(),t=_V();function i(l){var u="https://react.dev/errors/"+l;if(1<arguments.length){u+="?args[]="+encodeURIComponent(arguments[1]);for(var m=2;m<arguments.length;m++)u+="&args[]="+encodeURIComponent(arguments[m])}return"Minified React error #"+l+"; visit "+u+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(l){return!(!l||l.nodeType!==1&&l.nodeType!==9&&l.nodeType!==11)}function s(l){var u=l,m=l;if(l.alternate)for(;u.return;)u=u.return;else{l=u;do u=l,(u.flags&4098)!==0&&(m=u.return),l=u.return;while(l)}return u.tag===3?m:null}function o(l){if(l.tag===13){var u=l.memoizedState;if(u===null&&(l=l.alternate,l!==null&&(u=l.memoizedState)),u!==null)return u.dehydrated}return null}function a(l){if(l.tag===31){var u=l.memoizedState;if(u===null&&(l=l.alternate,l!==null&&(u=l.memoizedState)),u!==null)return u.dehydrated}return null}function c(l){if(s(l)!==l)throw Error(i(188))}function f(l){var u=l.alternate;if(!u){if(u=s(l),u===null)throw Error(i(188));return u!==l?null:l}for(var m=l,b=u;;){var E=m.return;if(E===null)break;var C=E.alternate;if(C===null){if(b=E.return,b!==null){m=b;continue}break}if(E.child===C.child){for(C=E.child;C;){if(C===m)return c(E),l;if(C===b)return c(E),u;C=C.sibling}throw Error(i(188))}if(m.return!==b.return)m=E,b=C;else{for(var V=!1,Z=E.child;Z;){if(Z===m){V=!0,m=E,b=C;break}if(Z===b){V=!0,b=E,m=C;break}Z=Z.sibling}if(!V){for(Z=C.child;Z;){if(Z===m){V=!0,m=C,b=E;break}if(Z===b){V=!0,b=C,m=E;break}Z=Z.sibling}if(!V)throw Error(i(189))}}if(m.alternate!==b)throw Error(i(190))}if(m.tag!==3)throw Error(i(188));return m.stateNode.current===m?l:u}function h(l){var u=l.tag;if(u===5||u===26||u===27||u===6)return l;for(l=l.child;l!==null;){if(u=h(l),u!==null)return u;l=l.sibling}return null}var g=Object.assign,y=Symbol.for("react.element"),v=Symbol.for("react.transitional.element"),_=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),M=Symbol.for("react.strict_mode"),w=Symbol.for("react.profiler"),A=Symbol.for("react.consumer"),R=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),I=Symbol.for("react.suspense"),k=Symbol.for("react.suspense_list"),U=Symbol.for("react.memo"),B=Symbol.for("react.lazy"),N=Symbol.for("react.activity"),L=Symbol.for("react.memo_cache_sentinel"),$=Symbol.iterator;function W(l){return l===null||typeof l!="object"?null:(l=$&&l[$]||l["@@iterator"],typeof l=="function"?l:null)}var q=Symbol.for("react.client.reference");function Y(l){if(l==null)return null;if(typeof l=="function")return l.$$typeof===q?null:l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case S:return"Fragment";case w:return"Profiler";case M:return"StrictMode";case I:return"Suspense";case k:return"SuspenseList";case N:return"Activity"}if(typeof l=="object")switch(l.$$typeof){case _:return"Portal";case R:return l.displayName||"Context";case A:return(l._context.displayName||"Context")+".Consumer";case P:var u=l.render;return l=l.displayName,l||(l=u.displayName||u.name||"",l=l!==""?"ForwardRef("+l+")":"ForwardRef"),l;case U:return u=l.displayName||null,u!==null?u:Y(l.type)||"Memo";case B:u=l._payload,l=l._init;try{return Y(l(u))}catch{}}return null}var ie=Array.isArray,H=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q=t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,te={pending:!1,data:null,method:null,action:null},le=[],ce=-1;function F(l){return{current:l}}function ee(l){0>ce||(l.current=le[ce],le[ce]=null,ce--)}function re(l,u){ce++,le[ce]=l.current,l.current=u}var he=F(null),pe=F(null),ae=F(null),fe=F(null);function xe(l,u){switch(re(ae,u),re(pe,l),re(he,null),u.nodeType){case 9:case 11:l=(l=u.documentElement)&&(l=l.namespaceURI)?TN(l):0;break;default:if(l=u.tagName,u=u.namespaceURI)u=TN(u),l=EN(u,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ee(he),re(he,l)}function Be(){ee(he),ee(pe),ee(ae)}function Xe(l){l.memoizedState!==null&&re(fe,l);var u=he.current,m=EN(u,l.type);u!==m&&(re(pe,l),re(he,m))}function et(l){pe.current===l&&(ee(he),ee(pe)),fe.current===l&&(ee(fe),U0._currentValue=te)}var De,tt;function ye(l){if(De===void 0)try{throw Error()}catch(m){var u=m.stack.trim().match(/\n( *(at )?)/);De=u&&u[1]||"",tt=-1<m.stack.indexOf(`
25
+ ${r.trace}`:"(no previous disposal trace found)"),t.type){case"mutable_atom_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=new t.class;return n.defaults.set(t.key,s),s.READONLY_VIEW}case"atom_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=t.default,o=s(i);return n.defaults.set(t.key,o),o}case"readonly_pure_selector_family":case"writable_pure_selector_family":case"readonly_held_selector_family":case"writable_held_selector_family":{if(n.defaults.has(t.key))return n.defaults.get(t.key);const s=t.default(i);return n.defaults.set(t.key,s),s}}}function Gw(n,e){const{type:t,key:i,catch:r}=e;switch(t){case"readonly_pure_selector":case"writable_pure_selector":{let s;n.logger.info("🧮",t,i,"computing value");try{s=e.getFrom(n),s instanceof Promise&&(s=s.catch(a=>{if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return a}throw a}))}catch(a){if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return vu(n,e,a)}throw a}return vu(n,e,s)}case"atom":{let s;if(xh(e.default))try{s=e.default(),s instanceof Promise&&(s=s.catch(a=>{if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return a}throw a}))}catch(a){if(n.logger.error("💥",t,i,"rejected:",a),r){for(const c of r)if(a instanceof c)return s=vu(n,e,a),n.logger.info("✨",e.type,i,"computed default",s),s}throw a}else s=e.default,n.logger.info("✨",e.type,i,"using static default",s);return vu(n,e,s)}}}function bm(n,e,t){if(n.valueMap.has(e.key))return rV(n,e,t);n.logger.info("❔",e.type,e.key,"value not found in cache");const{key:i}=e;switch(e.type){case"readonly_held_selector":case"writable_held_selector":return n.logger.info("🧮",e.type,i,"computing value"),e.getFrom(n);case"writable_pure_selector":case"readonly_pure_selector":case"atom":return Gw(n,e);case"mutable_atom":{const r=new e.class;return n.logger.info("✨",e.type,i,"created new instance",r),vu(n,e,r)}}}function nx(n,e){return Mr(n,{key:e.family.key,type:`${e.type}_family`})}const IL={atom_family:"atom",molecule_family:"molecule",mutable_atom_family:"mutable_atom",readonly_held_selector_family:"readonly_held_selector",readonly_pure_selector_family:"readonly_pure_selector",writable_held_selector_family:"writable_held_selector",writable_pure_selector_family:"writable_pure_selector"},ix=Symbol("MUST_CREATE"),qJ=Symbol("DO_NOT_CREATE");function rx(n,e,t,i){const r=As(i),s=e.molecules.get(r);if(!s&&e.config.lifespan==="immortal"){const{type:c,key:f}=t;e.logger.warn("💣","key",r,"was used to mint a counterfeit token for",c,`"${f}"`);const h=`${f}(${r})`,g=IL[c];return{counterfeit:!0,key:h,type:g,family:{key:f,subKey:r}}}let a;if(n===ix)e.logger.info("👪",t.type,t.key,"adds member",typeof i=="string"?`\`${i}\``:i),a=t.create(i),s&&e.moleculeData.set(r,t.key);else{const{type:c,key:f}=t,h=`${f}(${r})`,g=IL[c];return{key:h,type:g,family:{key:f,subKey:r}}}return a}function tI(n,...e){let t,i,r,s,o;if(e.length===1){if(o=e[0],"family"in o){const f=nx(n,o);if(r=Mr(n,f),s=Tu(o.family.subKey),t=sx(n,f,s),"counterfeit"in o)return{token:o,family:r,subKey:s,isNew:!1};t?o=t:(i=rx(ix,n,f,s),o=i)}}else r=Mr(n,e[0]),s=e[1],t=sx(n,r,s),t?o=t:(i=rx(ix,n,r,s),o=i);const a="counterfeit"in o;if(!!i&&a===!1&&r){let f;switch(o.type){case"readonly_pure_selector":case"readonly_held_selector":f="readable";break;case"atom":case"mutable_atom":case"writable_pure_selector":case"writable_held_selector":f="writable";break}const h={type:"state_creation",subType:f,token:o,timestamp:Date.now()};r.subject.next(h);const y=Gn(n);if(o.family)if(tx(y))switch(o.type){case"atom":case"mutable_atom":n.on.atomCreation.next(o);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":n.on.selectorCreation.next(o);break}else ja(y)&&y.on.transactionApplying.state===null&&y.transactionMeta.update.subEvents.push(h)}return{token:o,family:r,subKey:s,isNew:!!i}}function Ga(n,...e){const{token:t,family:i,subKey:r}=tI(n,...e);if("counterfeit"in t&&i&&r)return q2(n,t,i,r);const s=Mr(n,t);return bm(n,s)}function sx(n,e,t){const i=As(t),r=`${e.key}(${i})`,s=Gn(n);let o;switch(e.type){case"atom_family":case"mutable_atom_family":o=s.atoms.get(r);break;case"writable_held_selector_family":case"writable_pure_selector_family":o=s.writableSelectors.get(r);break;case"readonly_held_selector_family":case"readonly_pure_selector_family":o=s.readonlySelectors.get(r);break}return o&&_h(o)}function or(n,e,t){const i=Mr(n,e),r=sx(n,e,t);return r||rx(qJ,n,i,t)}function Hw(n,e,t){const i=e.key,r="readonly_pure_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n),S={key:v,get:e.get(h)};return e.catch&&(S.catch=e.catch),aI(_,S,y)},internalRoles:t,subject:a,install:h=>Hw(h,e),default:h=>e.get(h)({get:((...y)=>Ga(n,...y)),find:((...y)=>or(n,...y)),json:y=>Nu(n,y)})};return n.families.set(i,f),s}function nI(n,e,t){const i={key:e.key,type:"atom_family"},r=n.families.get(e.key);r&&n.config.isProduction===!0&&n.logger.error("❗","atom_family",e.key,`Overwriting an existing ${Dh[r.type]} "${r.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const s=new Oi,a={...i,create:c=>{const f=As(c),h={key:e.key,subKey:f},g=`${e.key}(${f})`,y=Gn(n),v=e.default,_={key:g,default:xh(v)?()=>v(c):v};return e.effects&&(_.effects=e.effects(c)),e.catch&&(_.catch=e.catch),zT(y,_,h)},default:e.default,subject:s,install:c=>nI(c,e),internalRoles:t};return n.families.set(e.key,a),xh(e.default)===!1&&n.defaults.set(e.key,e.default),i}function K2(n,e,t){const i=e.key,r="readonly_held_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n);return oI(_,{key:v,const:e.const(h),get:e.get(h)},y)},internalRoles:t,subject:a,install:h=>K2(h,e),default:e.const};return n.families.set(i,f),s}function X2(n,e,t){const i=e.key,r="writable_held_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n);return lI(_,{key:v,const:e.const(h),get:e.get(h),set:e.set(h)},y)},internalRoles:t,subject:a,install:h=>X2(h,e),default:e.const};return n.families.set(i,f),s}function iI(n,e,t){const i=e.key,r="writable_pure_selector_family",s={key:i,type:r},o=n.families.get(i);o&&n.config.isProduction===!0&&n.logger.error("❗",r,i,`Overwriting an existing ${Dh[o.type]} "${o.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const a=new Oi,f={...s,create:h=>{const g=As(h),y={key:i,subKey:g},v=`${i}(${g})`,_=Gn(n),S={key:v,get:e.get(h),set:e.set(h)};return e.catch&&(S.catch=e.catch),cI(_,S,y)},internalRoles:t,subject:a,install:h=>iI(h,e),default:h=>e.get(h)({get:((...y)=>Ga(n,...y)),find:((...y)=>or(n,...y)),json:y=>Nu(n,y)})};return n.families.set(i,f),s}function KJ(n,e){const t="set"in e,i="const"in e;return i&&t?X2(n,e,void 0):i?K2(n,e,void 0):t?iI(n,e):Hw(n,e)}function LT(n,...e){let t;if(e.length===1)t=e[0];else{const i=e[0],r=e[1];t=or(n,i,r)}try{Mr(n,t)}catch{n.logger.error("❌",t.type,t.key,`could not be disposed because it was not found in the store "${n.config.name}".`);return}switch(t.type){case"atom":case"mutable_atom":pI(n,t);break;case"writable_pure_selector":case"readonly_pure_selector":case"writable_held_selector":case"readonly_held_selector":nZ(n,t);break}}function Y2(n,e){if(n.operation.open){const t=performance.now();return n.logger.info("🚫",e.type,e.key,`deferring setState at T-${t} until setState for "${n.operation.token.key}" is done`),t}return n.operation={open:!0,done:new Set,prev:new Map,timestamp:Date.now(),token:e,subEvents:[]},n.logger.info("⭕",e.type,e.key,`operation start in store "${n.config.name}"${ja(n)?` ${n.transactionMeta.phase} "${n.transactionMeta.update.token.key}"`:""}`),n}function J2(n){n.operation.open&&n.logger.info("🔴",n.operation.token.type,n.operation.token.key,`operation done in store "${n.config.name}"`),n.operation={open:!1},n.on.operationClose.next(n.operation)}const Z2=(n,e)=>n.operation.open?n.operation.done.has(e):(n.logger.error("🐞","unknown",e,"isDone called outside of an operation. This is probably a bug in AtomIO."),!0),UT=(n,e)=>{if(!n.operation.open){n.logger.error("🐞","unknown",e,"markDone called outside of an operation. This is probably a bug in AtomIO.");return}n.operation.done.add(e)};function E3(n,e,t,i,r){const{oldValue:s,newValue:o}=t,a="oldValue"in t,c=_h(e);if(i&&r){e.subject.next({newValue:o});const v={checkpoint:!0,type:"state_creation",subType:"writable",token:c,timestamp:Date.now(),value:o};n.operation.subEvents.push(v),r.subject.next(v);const S=Gn(n);if(c.family)if(tx(S))switch(c.type){case"atom":case"mutable_atom":n.on.atomCreation.next(c);break;case"writable_pure_selector":case"writable_held_selector":n.on.selectorCreation.next(c);break}else ja(S)&&S.on.transactionApplying.state===null&&S.transactionMeta.update.subEvents.push(v);return}const{key:f,subject:h,type:g}=e;let y;if(a?y={oldValue:QS(s)?s.READONLY_VIEW:s,newValue:QS(o)?o.READONLY_VIEW:o}:y={newValue:QS(o)?o.READONLY_VIEW:o},tx(n)){switch(g){case"mutable_atom":n.logger.info("📢",g,f,"is now (",o,") subscribers:",h.subscribers.keys());break;case"atom":case"writable_pure_selector":case"writable_held_selector":n.logger.info("📢",g,f,"went (",s,"->",o,") subscribers:",h.subscribers.keys())}h.next(y)}if(ja(n)&&(g==="mutable_atom"||g==="atom")){if(n.on.transactionApplying.state===null){if(QS(o))return;const{timestamp:v}=n.operation,_={type:"atom_update",token:c,timestamp:v,update:y};n.transactionMeta.update.subEvents.push(_),n.logger.info("📁","atom",f,"stowed (",s,"->",o,")");return}if(hI(e,"tracker:signal")){const v=f.slice(1),_=n.atoms.get(v);bm(n,_,"mut").do(y.newValue)===null===!0&&dI(n,_)}}}const OL=Symbol("UNSET"),A3=(n,e,t)=>{let i,r;if(xh(t)){const s=bm(n,e,"mut");i=s,r=t(s)}else n.valueMap.has(e.key)?i=rV(n,e,"mut"):e.type==="atom"&&!xh(e.default)?i=e.default:i=OL,r=t;return n.logger.info("⭐","atom",e.key,"setting value",r),r=vu(n,e,r),UT(n,e.key),dI(n,e),i===OL?{newValue:r}:{oldValue:i,newValue:r}};function cC(n,e){switch(e.type){case"mutable_atom":return A3(n,e,new e.class);case"atom":{let t;return xh(e.default)?t=Gw(n,e):t=e.default,A3(n,e,t)}}}function XJ(n,e){let t;switch(e.type){case"atom":case"mutable_atom":t=cC(n,e);break;case"writable_held_selector":{const i=ox(n,e.key);for(const s of i.values()){const o=cC(n,s);E3(n,e,o,!1)}const r=e.getFrom(n);t={oldValue:r,newValue:r}}break;case"writable_pure_selector":{const i=Gw(n,e),r=ox(n,e.key);for(const o of r.values()){const a=cC(n,o);E3(n,e,a,!1)}const s=Gw(n,e);t={oldValue:i,newValue:s}}break}return t}function Xi(n,...e){Hx(R3,n,...e)}const C3=Symbol("RESET");function rI(n,...e){const t=[...e,C3];Xi(n,...t)}function YJ(n,e,t){let i,r,s;const{type:o,key:a}=e;switch(e.type){case"writable_pure_selector":i=bm(n,e,"mut"),r=DL(t,i),r=vu(n,e,r);break;case"writable_held_selector":s=e.const,DL(t,s),i=s,r=s}return n.logger.info("⭐",o,a,"setting to",r),UT(n,a),e.setSelf(r),{oldValue:i,newValue:r}}const JJ=(n,e,t)=>{let i;switch(e.type){case"atom":case"mutable_atom":i=A3(n,e,t);break;case"writable_pure_selector":case"writable_held_selector":i=YJ(n,e,t);break}return i},R3=Symbol("OWN_OP"),sI=Symbol("JOIN_OP");function Hx(n,e,...t){let i,r,s,o,a,c;t.length===2?(s=t[0],c=t[1],"family"in s&&(o=nx(e,s),a=Tu(s.family.subKey),i=sx(e,o,a),i?s=i:s=r=rx(ix,e,o,a))):(o=Mr(e,t[0]),a=t[1],c=t[2],i=sx(e,o,a),i?s=i:s=r=rx(ix,e,o,a));const f=c===C3?"reset":"set";let h;if(n===R3){const _=Y2(e,s);if(typeof _=="number"){const M=_,w=e.on.operationClose.subscribe(`waiting to ${f} "${s.key}" at T-${M}`,function(){w(),e.logger.info("🟢",s.type,s.key,"resuming deferred",f,`from T-${M}`),Hx(n,e,s,c)});return}h=_}else h=e;if("counterfeit"in s&&"family"in s){const _=s.family.subKey,S=e.disposalTraces.buffer.find(M=>M?.key===_);e.logger.error("❌",s.type,s.key,"could not be",f,"because key",_,"is not allocated.",S?`this key was previously disposed:${S.trace}`:"(no previous disposal trace found)");return}const g=Mr(h,s);let y;c===C3?y=XJ(h,g):y=JJ(h,g,c),E3(h,g,y,!!r,o),n===R3&&J2(h)}const Q2=(n,e)=>Gn(n).atoms.has(e),ZJ=(n,e)=>Gn(n).writableSelectors.has(e),QJ=(n,e)=>Gn(n).readonlySelectors.has(e),eZ=(n,e)=>Q2(n,e)||ZJ(n,e)||QJ(n,e);function NL(n,e){return Gn(n).selectorGraph.getRelationEntries({downstreamSelectorKey:e}).filter(([i,{source:r}])=>r!==e).map(([i,{source:r}])=>r).filter(i=>eZ(n,i))}function ox(n,e,t=new Set){const i=NL(n,e),r=new Map;for(;i.length>0;){const s=i.pop();if(!t.has(s))if(t.add(s),Q2(n,s)){const o=n.atoms.get(s);r.set(o.key,o)}else i.push(...NL(n,s))}return r}function tZ(n,e,t,i,r){const s=Gn(n),{type:o,key:a}=i;if(o==="atom"||o==="mutable_atom")s.selectorAtoms.set({selectorKey:t,atomKey:a}),n.logger.info("🔍",e,t,`discovers root atom "${a}"`);else{const c=ox(n,a,r);n.logger.info("🔍",e,t,`discovers root atoms: [ ${[...c.values()].map(f=>`"${f.key}"`).join(", ")} ]`);for(const{key:f}of c.values())s.selectorAtoms=s.selectorAtoms.set({selectorKey:t,atomKey:f})}r.add(a)}function FT(n,e,t,i){return{get:(...r)=>{const s=Gn(n),{token:o,family:a,subKey:c}=tI(n,...r);let f;if("counterfeit"in o&&a&&c)f=q2(n,o,a,c);else{const h=Mr(n,o);f=bm(n,h)}return n.logger.info("🔌",e,t,`registers dependency ( "${o.key}" =`,f,")"),s.selectorGraph.set({upstreamSelectorKey:o.key,downstreamSelectorKey:t},{source:o.key}),tZ(n,e,t,o,i),f},set:((...r)=>{const s=Gn(n);Hx(sI,s,...r)}),find:((...r)=>or(n,...r)),json:r=>Nu(n,r)}}function oI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,{key:o,const:a}=e,c="readonly_held_selector";n.logger.info("🔨",c,o,"is being created");const{get:f,find:h,json:g}=FT(i,c,o,s),v={...e,type:c,subject:r,getFrom:S=>{const M=S.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[w,{source:A}]of M)A!==o&&S.selectorGraph.delete(w,o);return S.selectorAtoms.delete(o),e.get({get:f,find:h,json:g},a),vu(S,v,a),n.logger.info("✨",c,o,"=",a),s.clear(),a},install:S=>oI(S,e,t)};t&&(v.family=t),i.readonlySelectors.set(o,v);const _={key:o,type:c};return t&&(_.family=t),_}function aI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,o=e.key,a="readonly_pure_selector";n.logger.info("🔨",a,o,"is being created");const{get:c,find:f,json:h}=FT(i,a,o,s),y={...e,type:a,subject:r,getFrom:()=>{const _=Gn(n),S=_.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[w,{source:A}]of S)A!==o&&_.selectorGraph.delete(w,o);_.selectorAtoms.delete(o);const M=e.get({get:c,find:f,json:h});return n.logger.info("✨",a,o,"=",M),s.clear(),M},install:_=>aI(_,e,t)};t&&(y.family=t),i.readonlySelectors.set(o,y);const v={key:o,type:a};return t&&(v.family=t),v}function lI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,{key:o,const:a}=e,c="writable_held_selector";n.logger.info("🔨",c,o,"is being created");const f=FT(i,c,o,s),{find:h,get:g,json:y}=f,v={find:h,get:g,json:y},M={...e,type:c,subject:r,getFrom:A=>{const R=A.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[P,{source:I}]of R)I!==o&&A.selectorGraph.delete(P,o);return A.selectorAtoms.delete(o),e.get(v,a),vu(A,M,a),n.logger.info("✨",c,o,"=",a),s.clear(),a},setSelf:()=>{e.set(f,a)},install:A=>lI(A,e,t)};t&&(M.family=t),i.writableSelectors.set(o,M);const w={key:o,type:c};return t&&(w.family=t),w}function cI(n,e,t){const i=Gn(n),r=new Oi,s=new Set,o=e.key,a="writable_pure_selector";n.logger.info("🔨",a,o,"is being created");const c=FT(i,a,o,s),{find:f,get:h,json:g}=c,y={find:f,get:h,json:g},S={...e,type:a,subject:r,getFrom:w=>{const A=w.selectorGraph.getRelationEntries({downstreamSelectorKey:o});for(const[P,{source:I}]of A)I!==o&&w.selectorGraph.delete(P,o);w.selectorAtoms.delete(o);const R=e.get(y);return n.logger.info("✨",a,o,"=",R),s.clear(),R},setSelf:w=>{e.set(c,w)},install:w=>cI(w,e,t)};t&&(S.family=t),i.writableSelectors.set(o,S);const M={key:o,type:a};return t&&(M.family=t),M}function eV(n,e){const t="set"in e,i="const"in e;if(i&&t){const s=lI(n,e,void 0);return n.on.selectorCreation.next(s),s}if(i){const s=oI(n,e,void 0);return n.on.selectorCreation.next(s),s}if(t){const s=cI(n,e,void 0);return n.on.selectorCreation.next(s),s}const r=aI(n,e,void 0);return n.on.selectorCreation.next(r),r}function nZ(n,e){const t=Gn(n),{key:i,type:r,family:s}=e;if(!s)n.logger.error("❌",r,i,"Standalone selectors cannot be disposed.");else{t.molecules.get(s.subKey)&&t.moleculeData.delete(s.subKey,s.key);let a;switch(e.type){case"writable_held_selector":t.writableSelectors.delete(i),a={key:s.key,type:"writable_held_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"writable_pure_selector":t.writableSelectors.delete(i),a={key:s.key,type:"writable_pure_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"readonly_held_selector":t.readonlySelectors.delete(i),a={key:s.key,type:"readonly_held_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break;case"readonly_pure_selector":t.readonlySelectors.delete(i),a={key:s.key,type:"readonly_pure_selector_family"},Mr(n,a).subject.next({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()});break}t.valueMap.delete(i),t.selectorAtoms.delete(i),t.selectorGraph.delete(i),t.moleculeData.delete(s.key,s.subKey),n.logger.info("🔥",e.type,i,"deleted"),ja(t)&&t.transactionMeta.phase==="building"?t.transactionMeta.update.subEvents.push({type:"state_disposal",subType:"selector",token:e,timestamp:Date.now()}):n.on.selectorDisposal.next(e)}}const iZ=(n,e)=>{const t=Gn(n);return t.operation.open?t.operation.prev.get(e.key):t.valueMap.get(e.key)},kL=(n,e,t)=>t.subject.subscribe(`${e.type}:${e.key}`,i=>{n.logger.info("📢",e.type,e.key,"root",t.key,"went",i.oldValue,"->",i.newValue);const r=iZ(n,e),s=bm(n,e);n.logger.info("✨",e.type,e.key,"went",r,"->",s),e.subject.next({newValue:s,oldValue:r})});function Sh(n,e,t,i){function r(g){n.operation.open&&s?.type==="atom"&&hI(s,"tracker:signal")&&"*"+n.operation.token.key===e.key&&"inboundTracker"in i||i(g)}tI(n,e);const s=Mr(n,e);n.logger.info("👀",s.type,s.key,`Adding subscription "${t}"`);const o=s.type==="writable_pure_selector"||s.type==="readonly_pure_selector",a=new Map;let c=r;if(o){bm(n,s);for(const[g,y]of ox(n,s.key))a.set(g,kL(n,s,y));c=function(y){const v=ox(n,s.key);for(const[_,S]of a)v.get(_)?v.delete(_):(S(),a.delete(_));for(const[_,S]of v)a.set(_,kL(n,s,S));r(y)}}const f=s.subject.subscribe(t,c);return()=>{n.logger.info("🙈",s.type,s.key,`Removing subscription "${t}"`),f();for(const g of a.values())g()}}const tV=(n,e,t,i)=>{const r=Mr(n,e);n.logger.info("👀","timeline",e.key,`Adding subscription "${t}"`);const s=r.subject.subscribe(t,i);return()=>{n.logger.info("🙈","timeline",e.key,`Removing subscription "${t}" from timeline`),s()}},nV=(n,e,t,i)=>{const r=Mr(n,e);n.logger.info("👀","transaction",e.key,`Adding subscription "${t}"`);const s=r.subject.subscribe(t,i);return()=>{n.logger.info("🙈","transaction",e.key,`Removing subscription "${t}"`),s()}};function rZ(n,e,t,i=kT()){switch(e.type){case"atom":case"mutable_atom":case"readonly_pure_selector":case"readonly_held_selector":case"writable_pure_selector":case"writable_held_selector":return Sh(n,e,i,t);case"transaction":return nV(n,e,i,t);case"timeline":return tV(n,e,i,t)}}class uI{initializeSignalAtom(e,t){const i=`*${e.key}`;t.atoms.delete(i),t.valueMap.delete(i);const r=e.family?{key:`*${e.family.key}`,subKey:e.family.subKey}:void 0,s=zT(t,{key:i,default:null},r,["tracker:signal"]);if(t.parent?.valueMap.has(i)){const o=t.parent.valueMap.get(i);t.valueMap.set(i,o)}return s}unsubscribeFromInnerValue;unsubscribeFromState;captureSignalsFromCore(e,t,i){const r=e.key,s=i.config.name,o=ja(i)?i.transactionMeta.update.token.key:"main",a=`tracker-from-core:${s}:${o}:${r}`,c=h=>{Hx(sI,i,t,h)},f=Ga(i,e);this.unsubscribeFromInnerValue=f.subscribe(a,c),this.unsubscribeFromState=Sh(i,e,a,(function(g){g.newValue!==g.oldValue&&(this.unsubscribeFromInnerValue(),this.unsubscribeFromInnerValue=g.newValue.subscribe(a,c))}).bind(this))}supplySignalsToCore(e,t,i){const r=e.key,s=i.config.name,o=ja(i)?i.transactionMeta.update.token.key:"main",a=`tracker-to-core:${s}:${o}:${r}`;Sh(i,t,a,Object.assign(function({newValue:f,oldValue:h}){const g=i.timelineTopics.getRelatedKey(t.key);if(g&&i.timelines.get(g)?.timeTraveling){const y=tV(i,{key:g,type:"timeline"},a,function(_){y(),Xi(i,e,S=>(_==="redo"&&f?S.do(f):_==="undo"&&h&&S.undo(h),S))});return}Xi(i,e,y=>(y.do(f),y))},{inboundTracker:!0}))}mutableAtomToken;latestSignalToken;[Symbol.dispose];constructor(e,t){const i=Gn(t),r=this.initializeSignalAtom(e,i);this.mutableAtomToken=e,this.latestSignalToken=r,this.captureSignalsFromCore(e,r,i),this.supplySignalsToCore(e,r,i),i.trackers.set(e.key,this),this[Symbol.dispose]=()=>{this.unsubscribeFromInnerValue(),this.unsubscribeFromState(),i.trackers.delete(e.key)}}}function fI(n,e,t){n.logger.info("🔨","atom",e.key,`creating in store "${n.config.name}"`);const i=Gn(n),{key:r}=e,s=i.atoms.get(r),o="mutable_atom";if(s?.type===o&&n.config.isProduction===!0)return n.logger.error("❌",o,r,"Tried to create atom, but it already exists in the store."),_h(s);const a=new Oi,c={...e,type:o,install:h=>(h.logger.info("🛠️","atom",r,`installing in store "${h.config.name}"`),fI(h,e,t)),subject:a};t&&(c.family=t),i.atoms.set(c.key,c);const f=_h(c);if(new uI(f,n),t||eV(n,{key:`${r}:JSON`,get:({get:h})=>h(f).toJSON(),set:({set:h},g)=>{h(f,e.class.fromJSON(g))}}),e.effects){let h=0;const g=[];for(const y of e.effects){const v=y({resetSelf:()=>{rI(n,f)},setSelf:_=>{Xi(n,f,_)},onSet:_=>Sh(n,f,`effect[${h}]`,_),token:f,store:XP(n)});v&&g.push(v),++h}c.cleanup=()=>{for(const y of g)y()}}return n.on.atomCreation.next(f),f}class sZ{trackers=new Map;latestSignalAtoms;mutableAtoms;constructor(e,t){const i=nI(t,{key:`*${e.key}`,default:null},["mutable","updates"]);this.latestSignalAtoms=Mr(t,i),this.mutableAtoms=e;const r=s=>{const{type:o,token:a}=s;if(a.family){const c=Tu(a.family.subKey);switch(o){case"state_creation":this.trackers.set(c,new uI(a,t));break;case"state_disposal":{const f=this.trackers.get(c);f&&(f[Symbol.dispose](),this.trackers.delete(c))}}}};this.mutableAtoms.subject.subscribe(`store=${t.config.name}::tracker-atom-family`,r)}}function iV(n,e,t){const i={key:e.key,type:"mutable_atom_family"},r=n.families.get(e.key);r&&n.config.isProduction===!0&&n.logger.error("❗","mutable_atom_family",e.key,`Overwriting an existing ${Dh[r.type]} "${r.key}" in store "${n.config.name}". You can safely ignore this warning if it is due to hot module replacement.`);const s=new Oi,a={...i,create:c=>{const f=As(c),h={key:e.key,subKey:f},g=`${e.key}(${f})`,y=Gn(n),v={key:g,class:e.class};return e.effects&&(v.effects=e.effects(c)),fI(y,v,h)},class:e.class,subject:s,install:c=>iV(c,e),internalRoles:t};return n.families.set(e.key,a),iI(n,{key:`${e.key}:JSON`,get:c=>({get:f})=>f(i,c).toJSON(),set:c=>({set:f},h)=>{f(i,c,e.class.fromJSON(h))}},["mutable","json"]),new sZ(a,n),i}const oZ=(n,e)=>{const t=Gn(e),i=`${n.key}:JSON`;return t.families.get(i)},Nu=(n,e)=>{if(e.family){const i=Gn(n),s={key:`${e.family.key}:JSON`,type:"writable_pure_selector_family"},o=Mr(i,s),a=Tu(e.family.subKey);return or(n,o,a)}return{type:"writable_pure_selector",key:`${e.key}:JSON`}},BT=n=>{const t={type:"atom",key:`*${n.key}`};return n.family&&(t.family={key:`*${n.family.key}`,subKey:n.family.subKey}),t};function QS(n){return typeof n=="object"&&n!==null&&"do"in n&&"undo"in n&&"subscribe"in n&&"READONLY_VIEW"in n&&"toJSON"in n}function vu(n,e,t){const{key:i,subject:r,type:s}=e,o=n.valueMap.get(i);if(o instanceof jw&&!o.done){const a=o;return t instanceof Promise?(a.use(t),a):(n.valueMap.set(i,t),t)}if(t instanceof Promise){const a=new jw(t);return n.valueMap.set(i,a),a.then(function(f){if(n.valueMap.get(i)===a){switch(Y2(n,e),vu(n,e,f),s){case"atom":dI(n,e);break;case"readonly_pure_selector":case"writable_pure_selector":oV(n,i);break}J2(n),r.next({newValue:f,oldValue:a})}}).catch(c=>{n.logger.error("💥",e.type,i,"rejected:",c)}),a}return n.logger.info("📝",e.type,e.key,"writing to cache",t),n.valueMap.set(i,t),t}function rV(n,e,t){n.logger.info("📖",e.type,e.key,"reading cached value");let i=n.valueMap.get(e.key);if(t==="mut"&&e.type==="mutable_atom"&&ja(n)){const s=e,{parent:o}=n;if(n.valueMap.hasOwn(s.key))return i;const a=o.valueMap.get(s.key);n.logger.info("📃","atom",s.key,"copying");const c=a.toJSON(),f=s.class.fromJSON(c);n.valueMap.set(s.key,f),new uI(s,o),i=f}return i}function sV(n,e){const t=n.valueMap.get(e);t instanceof jw||(n.operation.open&&n.operation.prev.set(e,t),n.valueMap.delete(e),n.logger.info("🗑","state",e,"evicted"))}function dI(n,e){const t=Gn(n),{key:i,type:r}=e,s=t.selectorAtoms.getRelatedKeys(i);if(t.logger.info("🧹",r,i,s?`evicting ${s.size} states downstream:`:"no downstream states",s??"to evict"),s){t.operation.open&&t.logger.info("🧹",r,i,`[ ${[...t.operation.done].join(", ")} ] already done`);for(const o of s)Z2(t,o)||(sV(t,o),UT(t,o))}}function oV(n,e){const t=Gn(n),i=t.selectorGraph.getRelationEntries({upstreamSelectorKey:e}).filter(([r,{source:s}])=>s===e);for(const[r]of i)Z2(t,r)||(sV(t,r),UT(t,r),oV(n,r))}function zT(n,e,t,i){const r="atom",{key:s}=e;n.logger.info("🔨",r,s,"is being created");const o=Gn(n),a=o.atoms.get(s);if(a?.type===r&&n.config.isProduction===!0)return n.logger.error("❌","atom",s,"Tried to create atom, but it already exists in the store."),_h(a);const c=new Oi,f={...e,type:r,install:g=>(g.logger.info("🛠️",r,s,`installing in store "${g.config.name}"`),zT(g,e,t)),subject:c};t&&(f.family=t),i&&(f.internalRoles=i),o.atoms.set(s,f);const h=_h(f);if(e.effects){let g=0;const y=[];for(const v of e.effects){const _=v({resetSelf:()=>{rI(n,h)},setSelf:S=>{Xi(n,h,S)},onSet:S=>Sh(n,h,`effect[${g}]`,S),token:h,store:XP(n)});_&&y.push(_),++g}f.cleanup=()=>{for(const v of y)v()}}return n.on.atomCreation.next(h),h}function hI(n,e){return"internalRoles"in n?n.internalRoles.includes(e):!1}function pI(n,e){const t=Gn(n),{key:i,family:r}=e,s=Mr(t,e);if(!r)n.logger.error("❌","atom",i,"Standalone atoms cannot be disposed.");else{s.cleanup?.();const o=n.valueMap.get(s.key),a=nx(n,e),f=Mr(n,a).subject,h={type:"state_disposal",subType:"atom",token:e,value:o,timestamp:Date.now()};f.next(h);const g=ja(t);if(t.atoms.delete(i),t.valueMap.delete(i),t.selectorAtoms.delete(i),t.atomsThatAreDefault.delete(i),t.moleculeData.delete(r.key,r.subKey),n.timelineTopics.delete(i),e.type==="mutable_atom"){const y=BT(e);pI(n,y),n.trackers.delete(i)}if(n.logger.info("🔥","atom",i,"deleted"),g&&t.transactionMeta.phase==="building"){const y=t.transactionMeta.update.subEvents.at(-1),_=y?.type==="molecule_disposal"&&y.values.some(([M])=>M===s.family?.key),S=hI(s,"tracker:signal");!_&&!S&&t.transactionMeta.update.subEvents.push(h)}else n.on.atomDisposal.next(e)}}function Ml(n){return n[0].toUpperCase()+n.slice(1)}const LL=B2(["add","delete","clear"]);class th extends Set{mode="record";subject=new Oi;constructor(e){super(e)}READONLY_VIEW=this;toJSON(){return[...this]}static fromJSON(e){return new th(e)}add(e){const t=super.add(e);return this.mode==="record"&&this.emit({type:"add",value:e}),t}clear(){const e=this.mode==="record"?[...this]:null;super.clear(),e&&this.emit({type:"clear",values:e})}delete(e){const t=super.delete(e);return this.mode==="record"&&this.emit({type:"delete",value:e}),t}subscribe(e,t){return this.subject.subscribe(e,t)}emit(e){this.subject.next(th.packUpdate(e))}do(e){this.mode="playback";const t=th.unpackUpdate(e);switch(t.type){case"add":this.add(t.value);break;case"delete":this.delete(t.value);break;case"clear":this.clear()}return this.mode="record",null}undo(e){const t=th.unpackUpdate(e);switch(this.mode="playback",t.type){case"add":this.delete(t.value);break;case"delete":this.add(t.value);break;case"clear":{const i=t.values;for(const r of i)this.add(r)}}return this.mode="record",null}static packUpdate(e){const t=LL[e.type]+"";return e.type==="clear"?t+e.values.map(da).join(""):t+da(e.value)}static unpackUpdate(e){const[t,i]=e.split(""),r=LL[t];return r==="clear"?{type:"clear",values:i.split("").map(ha)}:{type:r,value:ha(i)}}}class aV{toolkit;options;relations;states;relatedKeysAtoms;transact(e,t){const i=this.toolkit;this.toolkit=e,t(this),this.toolkit=i}store;[Symbol.dispose](){}constructor(e,t){this.store=e,this.options=t,this.store.miscResources.set(`join:${t.key}`,this),this.toolkit={get:((...v)=>Ga(e,...v)),set:((...v)=>{Xi(e,...v)}),find:((...v)=>or(e,...v)),json:v=>Nu(e,v)};const i=t.between[0],r=t.between[1],s=iV(e,{key:`${t.key}/relatedKeys`,class:th},["join","relations"]);this.relatedKeysAtoms=s;const o=(v,_,S)=>{const{find:M,get:w,set:A}=v,R=M(s,_),P=w(R);for(const I of P)S.includes(I)||A(s,I,U=>(U.delete(_),U));A(R,I=>{I.clear();for(const k of S){const U=M(s,k),B=w(U),N=B.has(_);if(this.relations.cardinality==="1:n"){const L=[];for(const $ of B){if($===_)continue;let W;Hx(sI,this.store,s,$,q=>(q.delete(k),W=q.size,q)),W===0&&L.push($)}!N&&B.size>0&&A(U,$=>($.clear(),$));for(const $ of L)e.keyRefsInJoins.delete(hw(k,$))}N||A(U,L=>(L.add(_),L)),I.add(k)}return I})},a=(v,_,S)=>{const{set:M}=v;M(s,_,w=>{for(const A of S)w.add(A);return w});for(const w of S)M(s,w,A=>(A.add(_),A));return!0},f={getRelatedKeys:v=>this.toolkit.get(s,v),addRelation:(v,_)=>{this.store.keyRefsInJoins.set(`"${v}"`,t.key),this.store.keyRefsInJoins.set(`"${_}"`,t.key),this.store.keyRefsInJoins.set(hw(v,_),t.key),this.toolkit.set(s,v,S=>S.add(_)),this.toolkit.set(s,_,S=>S.add(v))},deleteRelation:(v,_)=>{this.toolkit.set(s,v,M=>(M.delete(_),M)),this.toolkit.set(s,_,M=>(M.delete(v),M));const S=hw(v,_);this.store.keyRefsInJoins.delete(S)},replaceRelationsSafely:(v,_)=>{o(this.toolkit,v,_)},replaceRelationsUnsafely:(v,_)=>{a(this.toolkit,v,_)},has:(v,_)=>{const S=this.toolkit.get(s,v);return _?S.has(_):S.size>0}},h=new ac(t,{externalStore:f,isAType:t.isAType,isBType:t.isBType}),g=()=>Hw(e,{key:`${t.key}/singleRelatedKey`,get:v=>({get:_})=>{const S=_(s,v);for(const M of S)return M;return null}},["join","keys"]),y=()=>Hw(e,{key:`${t.key}/multipleRelatedKeys`,get:v=>({get:_})=>{const S=oZ(s,e);return _(S,v)}},["join","keys"]);switch(t.cardinality){case"1:1":{const v=g(),_=`${i}KeyOf${Ml(r)}`,S=`${r}KeyOf${Ml(i)}`;this.relations=h,this.states={[_]:v,[S]:v};break}case"1:n":{const v=g(),_=y(),S=`${i}KeyOf${Ml(r)}`,M=`${r}KeysOf${Ml(i)}`,w={[S]:v,[M]:_};this.relations=h,this.states=w;break}case"n:n":{const v=y(),_=`${i}KeysOf${Ml(r)}`,S=`${r}KeysOf${Ml(i)}`;this.relations=h,this.states={[_]:v,[S]:v}}}}}function aZ(n,e){return n.joins.set(e.key,new aV(n,e)),{key:e.key,type:"join",a:e.between[0],b:e.between[1],cardinality:e.cardinality}}function lV(n,e){let t=n.joins.get(e.key);if(t===void 0){const r=Ws.STORE.joins.get(e.key);if(r===void 0)throw new Error(`Join "${e.key}" not found in store "${n.config.name}"`);const s=XP(n);t=new aV(s,r.options),n.joins.set(e.key,t)}return t}function lZ(n,e,t){const i=lV(n,e);let r;switch(e.cardinality){case"1:1":{const s=`${e.a}KeyOf${Ml(e.b)}`,o=`${e.b}KeyOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}};break}case"1:n":{const s=`${e.a}KeyOf${Ml(e.b)}`,o=`${e.b}KeysOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}};break}case"n:n":{const s=`${e.a}KeysOf${Ml(e.b)}`,o=`${e.b}KeysOf${Ml(e.a)}`;r={get[s](){const a=i.states[s];return or(n,a,t)},get[o](){const a=i.states[o];return or(n,a,t)}}}}return r}function D3(n,e,t){const i=lV(n,e);return[i.relatedKeysAtoms,i.relatedKeysAtoms]}const wc=ne.createContext(Ws.STORE);function cV(n,e){const t=e(null);return ne.useEffect(()=>{It(n,t.current)},[n]),t}function uV(n,...e){let t;if(e.length===2){const i=e[0],r=e[1];t=or(n,i,r)}else t=e[0];return t}function ka(...n){const e=ne.useContext(wc),t=uV(e,...n),i=ne.useRef(null);return i.current??=r=>{Xi(e,t,r)},i.current}function fV(n,e){if(globalThis.env?.NODE_ENV==="development"){const r=ne.useRef(!1);ne.useEffect(()=>{let s=r.current;if(s===!1)s=n()??!0,r.current=s;else return()=>{xh(s)&&s(),r.current=!1}},e)}else ne.useEffect(n,e)}function on(...n){const e=ne.useContext(wc),t=uV(e,...n),i=ne.useId();if(t.type==="mutable_atom"||t.type==="readonly_held_selector"||t.type==="writable_held_selector"){const[,o]=ne.useState(0),a=ne.useRef(Ga(e,t));return fV(()=>Sh(e,t,`use-o:${i}`,({newValue:f})=>{a.current=f,o(h=>h+1)}),[t.key]),a.current}const r=ne.useCallback(o=>Sh(e,t,`use-o:${i}`,o),[t.key]),s=ne.useCallback(()=>Ga(e,t),[t.key]);return ne.useSyncExternalStore(r,s,s)}function VT(n,e){const t=ne.useContext(wc),i=n.type==="mutable_atom_family"?or(t,n,e):n,r=Nu(t,i);return on(r)}const cZ="modulepreload",uZ=function(n){return"/"+n},UL={},mI=function(e,t,i){let r=Promise.resolve();if(t&&t.length>0){let f=function(h){return Promise.all(h.map(g=>Promise.resolve(g).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};var o=f;document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=a?.nonce||a?.getAttribute("nonce");r=f(t.map(h=>{if(h=uZ(h),h in UL)return;UL[h]=!0;const g=h.endsWith(".css"),y=g?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${y}`))return;const v=document.createElement("link");if(v.rel=g?"stylesheet":cZ,g||(v.as="script"),v.crossOrigin="",v.href=h,c&&v.setAttribute("nonce",c),document.head.appendChild(v),g)return new Promise((_,S)=>{v.addEventListener("load",_),v.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${h}`)))})}))}function s(a){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=a,window.dispatchEvent(c),!c.defaultPrevented)throw a}return r.then(a=>{for(const c of a||[])c.status==="rejected"&&s(c.reason);return e().catch(s)})};function Uy(n,e,t){return n.on(e,t),n.off.bind(n,e,t)}class fZ extends Map{set(e,t){return this.has(e)?(console.warn("Tried to set a key that already exists in an InvariantMap",{key:e,value:t}),this):super.set(e,t)}}class $w{type="continuity";globals=[];actions=[];perspectives=[];key;constructor(e){this.key=e}static existing=new fZ;static create(e,t){const i=new $w(e),{type:r,globals:s,actions:o,perspectives:a}=t(i),c={type:r,key:e,globals:s,actions:o,perspectives:a};return $w.existing.set(e,c),c}add(...e){switch(e[0].type){case"atom":case"mutable_atom":this.globals.push(...e);break;case"transaction":this.actions.push(...e);break;case"atom_family":case"mutable_atom_family":{const[i,r]=e;this.perspectives.push({type:"realtime_perspective",resourceAtoms:i,viewAtoms:r})}break}return this}}function dZ(n){const{key:e,config:t}=n,i=$w.create(e,t),{actions:r}=i;for(const s of r)$2(Ws.STORE,e,s.key);return eI(Ws.STORE,e,-1),i}const dV=n=>n.startsWith("user::"),hV=n=>n.startsWith("room::"),P3=YP({key:"roomKeys",class:th}),xm=N2({key:"usersInRooms",between:["room","user"],cardinality:"1:n",isAType:hV,isBType:dV});Sc({key:"visibleUsersInRooms",get:n=>({get:e})=>{const[,t]=uv(xm),i=e(t,n);return[n,...i]}});Sc({key:"visibilityFromRoom",get:n=>({get:e})=>{const[t]=uv(xm),i=e(t,n);return[n,...i]}});Sc({key:"mutualUsers",get:n=>({get:e})=>{const[t,i]=uv(xm),r=e(i,n);for(const s of r)return[...e(t,s)];return[n]}});const pV=N2({key:"ownersOfRooms",between:["user","room"],cardinality:"1:n",isAType:dV,isBType:hV});var FL={};const hZ=ti({key:"mySocketKey",default:void 0}),Zf=ti({key:"myUserKey",default:null,effects:[n=>{typeof window<"u"&&mI(async()=>{const{storageSync:e}=await Promise.resolve().then(()=>$oe);return{storageSync:e}},void 0).then(({storageSync:e})=>{e(globalThis.localStorage,JSON,"myUserKey")(n)})}]}),gI=dr({key:"myRoomKey",get:({get:n})=>{if("process"in globalThis&&"env"in process&&"REALTIME_ROOM_KEY"in FL)return FL.REALTIME_ROOM_KEY;const e=n(Zf);if(!e)return null;const[,t]=uv(xm),i=n(t,e);for(const r of i)return r;return null}}),pw=ti({key:"optimisticUpdateQueue",default:()=>[]}),I3=ti({key:"confirmedUpdateQueue",default:()=>[]}),pZ=(n,e,t,i,r)=>s=>{function o(c,f){if(n.logger.info("🧑‍⚖️","continuity",e,"reconciling updates"),Xi(n,pw,g=>(g.shift(),g)),c.id===f.id){const g=JSON.stringify(c.subEvents),y=JSON.stringify(f.subEvents);if(g===y){n.logger.info("✅","continuity",e,`results for ${c.id} match between client and server`),t.emit(`ack:${e}`,f.epoch);return}}else n.logger.info("❌","continuity",e,`thought update #${f.epoch} was ${c.token.key}:${c.id}, but it was actually ${f.token.key}:${f.id}`);n.logger.info("🧑‍⚖️","continuity",e,"updates do not match",c,f);const h=i.toReversed();for(const g of h)hy(n,g,"oldValue");n.logger.info("⏪","continuity",e,"undid optimistic updates:",h),hy(n,c,"oldValue"),n.logger.info("⏪","continuity",e,"undid zeroth optimistic update",c),hy(n,f,"newValue"),n.logger.info("⏩","continuity",e,"applied confirmed update",f),t.emit(`ack:${e}`,f.epoch);for(const g of i){const y={type:"transaction",key:g.token.key},{id:v,params:_}=g;ZP(n,y,v)(..._)}n.logger.info("⏩","continuity",e,"reapplied subsequent optimistic updates:",i)}n.logger.info("🧑‍⚖️","continuity",e,"integrating confirmed update",{confirmedUpdate:s,confirmedUpdates:r,optimisticUpdates:i});const a=i[0];if(a)if(n.logger.info("🧑‍⚖️","continuity",e,"has optimistic updates to reconcile"),s.epoch===a.epoch){n.logger.info("🧑‍⚖️","continuity",e,`epoch of confirmed update #${s.epoch} matches zeroth optimistic update`),o(a,s);for(const c of r){const f=i[0];if(c.epoch===f?.epoch)o(f,c);else break}}else n.logger.info("🧑‍⚖️","continuity",e,`epoch of confirmed update #${s.epoch} does not match zeroth optimistic update #${a.epoch}`),r.some(f=>f.epoch===s.epoch)||(n.logger.info("👈","continuity",e,"pushing confirmed update to queue",s),Xi(n,I3,f=>(f.push(s),f.sort((h,g)=>h.epoch-g.epoch),f)));else{n.logger.info("🧑‍⚖️","continuity",e,"has no optimistic updates to deal with");let c;c=H2(n,e),c===s.epoch-1?(n.logger.info("✅","continuity",e,`integrating update #${s.epoch} (${s.token.key} ${s.id})`),hy(n,s,"newValue"),t.emit(`ack:${e}`,s.epoch),eI(n,e,s.epoch)):c!==void 0&&(n.logger.info("🧑‍⚖️","continuity",e,`received update #${s.epoch} but still waiting for update #${c+1}`,{clientEpoch:c,serverEpoch:s.epoch}),r.some(h=>h.epoch===s.epoch)?n.logger.info("👍","continuity",e,`confirmed update #${s.epoch} is already enqueued`):(n.logger.info("👈","continuity",e,`pushing confirmed update #${s.epoch} to queue`),Xi(n,I3,h=>(h.push(s),h.sort((g,y)=>g.epoch-y.epoch),h))))}};function mZ(n){return e=>{for(const t of e)pI(n,t)}}function gZ(n){return e=>{let t=0,i,r;for(const s of e)t%2===0?i=s:(r=s,Xi(n,i,r)),t++}}const O3=new WeakMap,BL=new WeakMap;function yZ(n){let e=O3.get(n);return e===void 0&&(e=new Map,O3.set(n,e)),e}function jT(n,e,t){BL.get(n)!==n.id&&(BL.set(n,n.id),O3.delete(n));const r=yZ(n);let s=r.get(e);if(s)s.timer.use(new Promise(()=>{})),s.refcount++;else{s={refcount:1,timer:new jw(()=>{})},r.set(e,s);const o=t(e);s.timer.then(()=>{o(),r.delete(e)})}return()=>{if(s.refcount--,s.refcount===0){const o=new Promise(a=>{setTimeout(a,50)});s.timer.use(o)}}}function mV(n,e,t){return jT(e,t.key,i=>{const r=Uy(e,`serve:${i}`,s=>{Xi(n,t,s)});return e.emit(`sub:${t.key}`),()=>{e.emit(`unsub:${i}`),r()}})}function gV(n,e,t,i){const r=or(n,t,i);return jT(e,r.key,()=>{const s=Uy(e,`serve:${r.key}`,o=>{Xi(n,r,o)});return e.emit(`sub:${t.key}`,i),()=>{e.emit(`unsub:${r.key}`),s()}})}function yV(n,e,t){const i=Nu(n,t),r=BT(t);return jT(e,t.key,()=>{const s=Uy(e,`init:${t.key}`,a=>{Xi(n,i,a)}),o=Uy(e,`next:${t.key}`,a=>{Xi(n,r,a)});return e.emit(`sub:${t.key}`),()=>{e.emit(`unsub:${t.key}`),s(),o()}})}function vV(n,e,t,i){const r=or(n,t,i),s=Nu(n,r),o=BT(r);return jT(e,r.key,()=>{const a=Uy(e,`init:${r.key}`,f=>{Xi(n,s,f)}),c=Uy(e,`next:${r.key}`,f=>{Xi(n,o,f)});return e.emit(`sub:${t.key}`,i),()=>{e.emit(`unsub:${r.key}`),a(),c()}})}function bV(n,e,t){const i=new Map,r=()=>{const o=n.selectorAtoms.getRelatedKeys(t.key);if(o){for(const[a,c]of i)o.has(a)||(c(),i.delete(a));for(const a of o){if(i.has(a))continue;const c=n.atoms.get(a);switch(c.type){case"atom":{if(c.family){const{subKey:f}=c.family,h=Tu(f),g=nx(n,c);i.set(a,gV(n,e,g,h))}else i.set(a,mV(n,e,c));break}case"mutable_atom":{if(c.family){const{subKey:f}=c.family,h=Tu(f),g=nx(n,c);i.set(a,vV(n,e,g,h))}else i.set(a,yV(n,e,c));break}}}}},s=Sh(n,t,"pull-watches-dependencies",()=>{r()});return r(),()=>{for(const[,o]of i)o();i.clear(),s()}}function vZ(n,e,t){return bV(n,e,t)}function bZ(n,e,t,i){const r=or(n,t,i);return bV(n,e,r)}function xZ(n,e,t){const i=t.key,r=Ga(n,pw),s=Ga(n,I3),o=(g,y)=>{e.off(`continuity-init:${i}`,o);let v=0,_,S;for(const M of y)v%2===0?_=M:(S=M,"type"in _&&_.type==="mutable_atom"&&(_=Nu(n,_)),Xi(n,_,S)),v++;eI(n,i,g)};e.off(`continuity-init:${i}`),e.on(`continuity-init:${i}`,o);const a=pZ(n,i,e,r,s);e.off(`tx-new:${i}`),e.on(`tx-new:${i}`,a);const c=t.actions.map(g=>($2(n,i,g.key),nV(n,g,`tx-run:${i}`,v=>{n.logger.info("🤞","continuity",i,"enqueuing optimistic update");const _=r.findIndex(S=>S.id===v.id);_===-1?(n.logger.info("🤞","continuity",i,"enqueuing new optimistic update"),Xi(n,pw,S=>(S.push(v),S.sort((M,w)=>M.epoch-w.epoch),S))):(n.logger.info("🤞","continuity",i,`replacing existing optimistic update at index ${_}`),Xi(n,pw,S=>(S[_]=v,S))),e.emit(`tx-run:${i}`,{id:v.id,token:g,params:v.params})}))),f=gZ(n),h=mZ(n);return e.on(`reveal:${i}`,f),e.on(`conceal:${i}`,h),e.emit(`get:${i}`),()=>{e.off(`continuity-init:${i}`),e.off(`tx-new:${i}`);for(const g of c)g()}}const _m=ne.createContext({socket:null,services:null}),_Z=({children:n,socket:e})=>{const t=ne.useRef(new Map).current,i=ka(hZ);return ne.useEffect(()=>{i(e?.id?`socket::${e.id}`:void 0),e?.on("connect",()=>{i(e?.id?`socket::${e.id}`:void 0)}),e?.on("disconnect",()=>{i(void 0)})},[e,i]),j.jsx(_m.Provider,{value:{socket:e,services:t},children:n})};function Sm(n,e){const{socket:t,services:i}=ne.useContext(_m);fV(()=>{let r=i?.get(n);return r?++r.consumerCount:t&&(r={consumerCount:1,dispose:e(t)},i?.set(n,r)),()=>{r&&(--r.consumerCount,r.consumerCount===0&&(r.dispose?.(),i?.delete(n)))}},[t,n])}function Eu(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>mV(e,t,n)),on(n)}function vc(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>gV(t,r,n,e)),on(i)}function yI(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>yV(e,t,n)),on(n)}function e1(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>vV(t,r,n,e)),on(i)}function rm(n){const e=ne.useContext(wc);return Sm(`pull:${n.key}`,t=>vZ(e,t,n)),on(n)}function SZ(n,e){const t=ne.useContext(wc),i=or(t,n,e);return Sm(`pull:${i.key}`,r=>bZ(t,r,n,e)),on(i)}function wm(){const n=ne.useContext(wc),{socket:e}=ne.useContext(_m);yI(P3);const t=Eu(Zf)??"user::$_NONE_$",[i,r]=D3(n,xm);e1(r,t);const s=on(r,t);let o;for(const y of s){o=y;break}const a=o??"room::$_NONE_$",c=or(n,i,a);e1(i,a);const[f,h]=D3(n,pV),g=or(n,f,t);return e1(f,t),e1(h,a),{roomSocket:e,myRoomKey:o,allRoomKeysAtom:P3,myMutualsAtom:c,myOwnedRoomsAtom:g}}function wZ(n){const e=ne.useContext(wc);Sm(`tx-sync:${n.key}`,t=>xZ(e,t,n))}var uC={exports:{}},H0={},fC={exports:{}},dC={};var zL;function MZ(){return zL||(zL=1,(function(n){function e(H,Q){var te=H.length;H.push(Q);e:for(;0<te;){var le=te-1>>>1,ce=H[le];if(0<r(ce,Q))H[le]=Q,H[te]=ce,te=le;else break e}}function t(H){return H.length===0?null:H[0]}function i(H){if(H.length===0)return null;var Q=H[0],te=H.pop();if(te!==Q){H[0]=te;e:for(var le=0,ce=H.length,F=ce>>>1;le<F;){var ee=2*(le+1)-1,re=H[ee],he=ee+1,pe=H[he];if(0>r(re,te))he<ce&&0>r(pe,re)?(H[le]=pe,H[he]=te,le=he):(H[le]=re,H[ee]=te,le=ee);else if(he<ce&&0>r(pe,te))H[le]=pe,H[he]=te,le=he;else break e}}return Q}function r(H,Q){var te=H.sortIndex-Q.sortIndex;return te!==0?te:H.id-Q.id}if(n.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;n.unstable_now=function(){return s.now()}}else{var o=Date,a=o.now();n.unstable_now=function(){return o.now()-a}}var c=[],f=[],h=1,g=null,y=3,v=!1,_=!1,S=!1,M=!1,w=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,R=typeof setImmediate<"u"?setImmediate:null;function P(H){for(var Q=t(f);Q!==null;){if(Q.callback===null)i(f);else if(Q.startTime<=H)i(f),Q.sortIndex=Q.expirationTime,e(c,Q);else break;Q=t(f)}}function I(H){if(S=!1,P(H),!_)if(t(c)!==null)_=!0,k||(k=!0,W());else{var Q=t(f);Q!==null&&ie(I,Q.startTime-H)}}var k=!1,U=-1,B=5,N=-1;function L(){return M?!0:!(n.unstable_now()-N<B)}function $(){if(M=!1,k){var H=n.unstable_now();N=H;var Q=!0;try{e:{_=!1,S&&(S=!1,A(U),U=-1),v=!0;var te=y;try{t:{for(P(H),g=t(c);g!==null&&!(g.expirationTime>H&&L());){var le=g.callback;if(typeof le=="function"){g.callback=null,y=g.priorityLevel;var ce=le(g.expirationTime<=H);if(H=n.unstable_now(),typeof ce=="function"){g.callback=ce,P(H),Q=!0;break t}g===t(c)&&i(c),P(H)}else i(c);g=t(c)}if(g!==null)Q=!0;else{var F=t(f);F!==null&&ie(I,F.startTime-H),Q=!1}}break e}finally{g=null,y=te,v=!1}Q=void 0}}finally{Q?W():k=!1}}}var W;if(typeof R=="function")W=function(){R($)};else if(typeof MessageChannel<"u"){var q=new MessageChannel,Y=q.port2;q.port1.onmessage=$,W=function(){Y.postMessage(null)}}else W=function(){w($,0)};function ie(H,Q){U=w(function(){H(n.unstable_now())},Q)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(H){H.callback=null},n.unstable_forceFrameRate=function(H){0>H||125<H?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):B=0<H?Math.floor(1e3/H):5},n.unstable_getCurrentPriorityLevel=function(){return y},n.unstable_next=function(H){switch(y){case 1:case 2:case 3:var Q=3;break;default:Q=y}var te=y;y=Q;try{return H()}finally{y=te}},n.unstable_requestPaint=function(){M=!0},n.unstable_runWithPriority=function(H,Q){switch(H){case 1:case 2:case 3:case 4:case 5:break;default:H=3}var te=y;y=H;try{return Q()}finally{y=te}},n.unstable_scheduleCallback=function(H,Q,te){var le=n.unstable_now();switch(typeof te=="object"&&te!==null?(te=te.delay,te=typeof te=="number"&&0<te?le+te:le):te=le,H){case 1:var ce=-1;break;case 2:ce=250;break;case 5:ce=1073741823;break;case 4:ce=1e4;break;default:ce=5e3}return ce=te+ce,H={id:h++,callback:Q,priorityLevel:H,startTime:te,expirationTime:ce,sortIndex:-1},te>le?(H.sortIndex=te,e(f,H),t(c)===null&&H===t(f)&&(S?(A(U),U=-1):S=!0,ie(I,te-le))):(H.sortIndex=ce,e(c,H),_||v||(_=!0,k||(k=!0,W()))),H},n.unstable_shouldYield=L,n.unstable_wrapCallback=function(H){var Q=y;return function(){var te=y;y=Q;try{return H.apply(this,arguments)}finally{y=te}}}})(dC)),dC}var VL;function xV(){return VL||(VL=1,fC.exports=MZ()),fC.exports}var hC={exports:{}},ro={};var jL;function TZ(){if(jL)return ro;jL=1;var n=Fx();function e(c){var f="https://react.dev/errors/"+c;if(1<arguments.length){f+="?args[]="+encodeURIComponent(arguments[1]);for(var h=2;h<arguments.length;h++)f+="&args[]="+encodeURIComponent(arguments[h])}return"Minified React error #"+c+"; visit "+f+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function t(){}var i={d:{f:t,r:function(){throw Error(e(522))},D:t,C:t,L:t,m:t,X:t,S:t,M:t},p:0,findDOMNode:null},r=Symbol.for("react.portal");function s(c,f,h){var g=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:g==null?null:""+g,children:c,containerInfo:f,implementation:h}}var o=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function a(c,f){if(c==="font")return"";if(typeof f=="string")return f==="use-credentials"?f:""}return ro.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,ro.createPortal=function(c,f){var h=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!f||f.nodeType!==1&&f.nodeType!==9&&f.nodeType!==11)throw Error(e(299));return s(c,f,null,h)},ro.flushSync=function(c){var f=o.T,h=i.p;try{if(o.T=null,i.p=2,c)return c()}finally{o.T=f,i.p=h,i.d.f()}},ro.preconnect=function(c,f){typeof c=="string"&&(f?(f=f.crossOrigin,f=typeof f=="string"?f==="use-credentials"?f:"":void 0):f=null,i.d.C(c,f))},ro.prefetchDNS=function(c){typeof c=="string"&&i.d.D(c)},ro.preinit=function(c,f){if(typeof c=="string"&&f&&typeof f.as=="string"){var h=f.as,g=a(h,f.crossOrigin),y=typeof f.integrity=="string"?f.integrity:void 0,v=typeof f.fetchPriority=="string"?f.fetchPriority:void 0;h==="style"?i.d.S(c,typeof f.precedence=="string"?f.precedence:void 0,{crossOrigin:g,integrity:y,fetchPriority:v}):h==="script"&&i.d.X(c,{crossOrigin:g,integrity:y,fetchPriority:v,nonce:typeof f.nonce=="string"?f.nonce:void 0})}},ro.preinitModule=function(c,f){if(typeof c=="string")if(typeof f=="object"&&f!==null){if(f.as==null||f.as==="script"){var h=a(f.as,f.crossOrigin);i.d.M(c,{crossOrigin:h,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0})}}else f==null&&i.d.M(c)},ro.preload=function(c,f){if(typeof c=="string"&&typeof f=="object"&&f!==null&&typeof f.as=="string"){var h=f.as,g=a(h,f.crossOrigin);i.d.L(c,h,{crossOrigin:g,integrity:typeof f.integrity=="string"?f.integrity:void 0,nonce:typeof f.nonce=="string"?f.nonce:void 0,type:typeof f.type=="string"?f.type:void 0,fetchPriority:typeof f.fetchPriority=="string"?f.fetchPriority:void 0,referrerPolicy:typeof f.referrerPolicy=="string"?f.referrerPolicy:void 0,imageSrcSet:typeof f.imageSrcSet=="string"?f.imageSrcSet:void 0,imageSizes:typeof f.imageSizes=="string"?f.imageSizes:void 0,media:typeof f.media=="string"?f.media:void 0})}},ro.preloadModule=function(c,f){if(typeof c=="string")if(f){var h=a(f.as,f.crossOrigin);i.d.m(c,{as:typeof f.as=="string"&&f.as!=="script"?f.as:void 0,crossOrigin:h,integrity:typeof f.integrity=="string"?f.integrity:void 0})}else i.d.m(c)},ro.requestFormReset=function(c){i.d.r(c)},ro.unstable_batchedUpdates=function(c,f){return c(f)},ro.useFormState=function(c,f,h){return o.H.useFormState(c,f,h)},ro.useFormStatus=function(){return o.H.useHostTransitionStatus()},ro.version="19.2.3",ro}var GL;function _V(){if(GL)return hC.exports;GL=1;function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}return n(),hC.exports=TZ(),hC.exports}var HL;function EZ(){if(HL)return H0;HL=1;var n=xV(),e=Fx(),t=_V();function i(l){var u="https://react.dev/errors/"+l;if(1<arguments.length){u+="?args[]="+encodeURIComponent(arguments[1]);for(var m=2;m<arguments.length;m++)u+="&args[]="+encodeURIComponent(arguments[m])}return"Minified React error #"+l+"; visit "+u+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(l){return!(!l||l.nodeType!==1&&l.nodeType!==9&&l.nodeType!==11)}function s(l){var u=l,m=l;if(l.alternate)for(;u.return;)u=u.return;else{l=u;do u=l,(u.flags&4098)!==0&&(m=u.return),l=u.return;while(l)}return u.tag===3?m:null}function o(l){if(l.tag===13){var u=l.memoizedState;if(u===null&&(l=l.alternate,l!==null&&(u=l.memoizedState)),u!==null)return u.dehydrated}return null}function a(l){if(l.tag===31){var u=l.memoizedState;if(u===null&&(l=l.alternate,l!==null&&(u=l.memoizedState)),u!==null)return u.dehydrated}return null}function c(l){if(s(l)!==l)throw Error(i(188))}function f(l){var u=l.alternate;if(!u){if(u=s(l),u===null)throw Error(i(188));return u!==l?null:l}for(var m=l,b=u;;){var E=m.return;if(E===null)break;var C=E.alternate;if(C===null){if(b=E.return,b!==null){m=b;continue}break}if(E.child===C.child){for(C=E.child;C;){if(C===m)return c(E),l;if(C===b)return c(E),u;C=C.sibling}throw Error(i(188))}if(m.return!==b.return)m=E,b=C;else{for(var V=!1,Z=E.child;Z;){if(Z===m){V=!0,m=E,b=C;break}if(Z===b){V=!0,b=E,m=C;break}Z=Z.sibling}if(!V){for(Z=C.child;Z;){if(Z===m){V=!0,m=C,b=E;break}if(Z===b){V=!0,b=C,m=E;break}Z=Z.sibling}if(!V)throw Error(i(189))}}if(m.alternate!==b)throw Error(i(190))}if(m.tag!==3)throw Error(i(188));return m.stateNode.current===m?l:u}function h(l){var u=l.tag;if(u===5||u===26||u===27||u===6)return l;for(l=l.child;l!==null;){if(u=h(l),u!==null)return u;l=l.sibling}return null}var g=Object.assign,y=Symbol.for("react.element"),v=Symbol.for("react.transitional.element"),_=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),M=Symbol.for("react.strict_mode"),w=Symbol.for("react.profiler"),A=Symbol.for("react.consumer"),R=Symbol.for("react.context"),P=Symbol.for("react.forward_ref"),I=Symbol.for("react.suspense"),k=Symbol.for("react.suspense_list"),U=Symbol.for("react.memo"),B=Symbol.for("react.lazy"),N=Symbol.for("react.activity"),L=Symbol.for("react.memo_cache_sentinel"),$=Symbol.iterator;function W(l){return l===null||typeof l!="object"?null:(l=$&&l[$]||l["@@iterator"],typeof l=="function"?l:null)}var q=Symbol.for("react.client.reference");function Y(l){if(l==null)return null;if(typeof l=="function")return l.$$typeof===q?null:l.displayName||l.name||null;if(typeof l=="string")return l;switch(l){case S:return"Fragment";case w:return"Profiler";case M:return"StrictMode";case I:return"Suspense";case k:return"SuspenseList";case N:return"Activity"}if(typeof l=="object")switch(l.$$typeof){case _:return"Portal";case R:return l.displayName||"Context";case A:return(l._context.displayName||"Context")+".Consumer";case P:var u=l.render;return l=l.displayName,l||(l=u.displayName||u.name||"",l=l!==""?"ForwardRef("+l+")":"ForwardRef"),l;case U:return u=l.displayName||null,u!==null?u:Y(l.type)||"Memo";case B:u=l._payload,l=l._init;try{return Y(l(u))}catch{}}return null}var ie=Array.isArray,H=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Q=t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,te={pending:!1,data:null,method:null,action:null},le=[],ce=-1;function F(l){return{current:l}}function ee(l){0>ce||(l.current=le[ce],le[ce]=null,ce--)}function re(l,u){ce++,le[ce]=l.current,l.current=u}var he=F(null),pe=F(null),ae=F(null),fe=F(null);function xe(l,u){switch(re(ae,u),re(pe,l),re(he,null),u.nodeType){case 9:case 11:l=(l=u.documentElement)&&(l=l.namespaceURI)?TN(l):0;break;default:if(l=u.tagName,u=u.namespaceURI)u=TN(u),l=EN(u,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}ee(he),re(he,l)}function Be(){ee(he),ee(pe),ee(ae)}function Xe(l){l.memoizedState!==null&&re(fe,l);var u=he.current,m=EN(u,l.type);u!==m&&(re(pe,l),re(he,m))}function et(l){pe.current===l&&(ee(he),ee(pe)),fe.current===l&&(ee(fe),U0._currentValue=te)}var De,tt;function ye(l){if(De===void 0)try{throw Error()}catch(m){var u=m.stack.trim().match(/\n( *(at )?)/);De=u&&u[1]||"",tt=-1<m.stack.indexOf(`
26
26
  at`)?" (<anonymous>)":-1<m.stack.indexOf("@")?"@unknown:0:0":""}return`
27
27
  `+De+l+tt}var Ce=!1;function we(l,u){if(!l||Ce)return"";Ce=!0;var m=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var b={DetermineComponentFrameRoot:function(){try{if(u){var ct=function(){throw Error()};if(Object.defineProperty(ct.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(ct,[])}catch(Ke){var je=Ke}Reflect.construct(l,[],ct)}else{try{ct.call()}catch(Ke){je=Ke}l.call(ct.prototype)}}else{try{throw Error()}catch(Ke){je=Ke}(ct=l())&&typeof ct.catch=="function"&&ct.catch(function(){})}}catch(Ke){if(Ke&&je&&typeof Ke.stack=="string")return[Ke.stack,je.stack]}return[null,null]}};b.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var E=Object.getOwnPropertyDescriptor(b.DetermineComponentFrameRoot,"name");E&&E.configurable&&Object.defineProperty(b.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var C=b.DetermineComponentFrameRoot(),V=C[0],Z=C[1];if(V&&Z){var me=V.split(`
28
28
  `),Fe=Z.split(`
package/app/index.html CHANGED
@@ -10,7 +10,7 @@
10
10
  />
11
11
  <meta name="apple-mobile-web-app-capable" content="yes" />
12
12
  <title>TEMPEST</title>
13
- <script type="module" crossorigin src="/assets/index-BwGzMVub.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-Cedsqfu2.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="/assets/index-92RdVh_1.css">
15
15
  </head>
16
16
  <body>
@@ -3510,13 +3510,17 @@ var init_internal = __esm(() => {
3510
3510
  });
3511
3511
 
3512
3512
  // ../../packages/atom.io/dist/realtime/index.js
3513
+ function employSocket(socket, event, handleEvent) {
3514
+ socket.on(event, handleEvent);
3515
+ return socket.off.bind(socket, event, handleEvent);
3516
+ }
3513
3517
  function onLoad(loadable, fn2) {
3514
3518
  if (loadable instanceof Promise)
3515
3519
  loadable.then(fn2);
3516
3520
  else
3517
3521
  fn2(loadable);
3518
3522
  }
3519
- function castSocket(socket, guard, logError) {
3523
+ function guardSocket(socket, guard, logError) {
3520
3524
  if (guard === `TRUST`)
3521
3525
  return socket;
3522
3526
  return {
@@ -3548,13 +3552,6 @@ function castSocket(socket, guard, logError) {
3548
3552
  emit: socket.emit.bind(socket)
3549
3553
  };
3550
3554
  }
3551
- function employSocket(socket, event, handleEvent) {
3552
- socket.on(event, handleEvent);
3553
- const retireSocket = () => {
3554
- socket.off(event, handleEvent);
3555
- };
3556
- return retireSocket;
3557
- }
3558
3555
  var mutexAtoms, InvariantMap, SyncGroup, isSocketKey = (key) => key.startsWith(`socket::`), isUserKey = (key) => key.startsWith(`user::`), isRoomKey = (key) => key.startsWith(`room::`), roomKeysAtom, usersInRooms, visibleUsersInRoomsSelector, visibilityFromRoomSelector, mutualUsersSelector, ownersOfRooms;
3559
3556
  var init_realtime = __esm(() => {
3560
3557
  init_main();
@@ -4374,7 +4371,7 @@ function provideRooms({
4374
4371
  roomNames,
4375
4372
  userKey
4376
4373
  }) {
4377
- const roomSocket = castSocket(socket, createRoomSocketGuard(roomNames));
4374
+ const roomSocket = guardSocket(socket, createRoomSocketGuard(roomNames));
4378
4375
  const exposeMutable = realtimeMutableProvider({
4379
4376
  socket,
4380
4377
  store,
@@ -12166,13 +12166,17 @@ var init_internal = __esm(() => {
12166
12166
  });
12167
12167
 
12168
12168
  // ../../packages/atom.io/dist/realtime/index.js
12169
+ function employSocket2(socket, event, handleEvent) {
12170
+ socket.on(event, handleEvent);
12171
+ return socket.off.bind(socket, event, handleEvent);
12172
+ }
12169
12173
  function onLoad2(loadable, fn2) {
12170
12174
  if (loadable instanceof Promise)
12171
12175
  loadable.then(fn2);
12172
12176
  else
12173
12177
  fn2(loadable);
12174
12178
  }
12175
- function castSocket2(socket, guard, logError) {
12179
+ function guardSocket2(socket, guard, logError) {
12176
12180
  if (guard === `TRUST`)
12177
12181
  return socket;
12178
12182
  return {
@@ -12204,13 +12208,6 @@ function castSocket2(socket, guard, logError) {
12204
12208
  emit: socket.emit.bind(socket)
12205
12209
  };
12206
12210
  }
12207
- function employSocket2(socket, event, handleEvent) {
12208
- socket.on(event, handleEvent);
12209
- const retireSocket = () => {
12210
- socket.off(event, handleEvent);
12211
- };
12212
- return retireSocket;
12213
- }
12214
12211
  var mutexAtoms, InvariantMap, SyncGroup, isSocketKey = (key) => key.startsWith(`socket::`), isUserKey2 = (key) => key.startsWith(`user::`), isRoomKey2 = (key) => key.startsWith(`room::`), roomKeysAtom2, usersInRooms2, visibleUsersInRoomsSelector2, visibilityFromRoomSelector2, mutualUsersSelector2, ownersOfRooms2;
12215
12212
  var init_realtime = __esm(() => {
12216
12213
  init_main();
@@ -13051,7 +13048,7 @@ function provideRooms({
13051
13048
  roomNames,
13052
13049
  userKey
13053
13050
  }) {
13054
- const roomSocket = castSocket2(socket, createRoomSocketGuard(roomNames));
13051
+ const roomSocket = guardSocket2(socket, createRoomSocketGuard(roomNames));
13055
13052
  const exposeMutable = realtimeMutableProvider({
13056
13053
  socket,
13057
13054
  store,
@@ -15454,7 +15451,13 @@ function setState(...params) {
15454
15451
  // src/backend.worker.bug-rangers.bun.ts
15455
15452
  init_internal();
15456
15453
 
15457
- // ../../packages/atom.io/src/realtime/cast-socket.ts
15454
+ // ../../packages/atom.io/src/realtime/employ-socket.ts
15455
+ function employSocket(socket, event, handleEvent) {
15456
+ socket.on(event, handleEvent);
15457
+ return socket.off.bind(socket, event, handleEvent);
15458
+ }
15459
+
15460
+ // ../../packages/atom.io/src/realtime/guard-socket.ts
15458
15461
  function onLoad(loadable, fn2) {
15459
15462
  if (loadable instanceof Promise) {
15460
15463
  loadable.then(fn2);
@@ -15462,7 +15465,7 @@ function onLoad(loadable, fn2) {
15462
15465
  fn2(loadable);
15463
15466
  }
15464
15467
  }
15465
- function castSocket(socket, guard, logError) {
15468
+ function guardSocket(socket, guard, logError) {
15466
15469
  if (guard === `TRUST`) {
15467
15470
  return socket;
15468
15471
  }
@@ -15502,15 +15505,6 @@ function castSocket(socket, guard, logError) {
15502
15505
  return guardedSocket;
15503
15506
  }
15504
15507
 
15505
- // ../../packages/atom.io/src/realtime/employ-socket.ts
15506
- function employSocket(socket, event, handleEvent) {
15507
- socket.on(event, handleEvent);
15508
- const retireSocket = () => {
15509
- socket.off(event, handleEvent);
15510
- };
15511
- return retireSocket;
15512
- }
15513
-
15514
15508
  // ../../packages/atom.io/src/realtime/realtime-key-types.ts
15515
15509
  var isUserKey = (key) => key.startsWith(`user::`);
15516
15510
  var isRoomKey = (key) => key.startsWith(`room::`);
@@ -29121,7 +29115,7 @@ parent.receiveRelay((socket, userKey) => {
29121
29115
  const exposeState = realtimeStateProvider(config3);
29122
29116
  const exposeMutable = realtimeMutableProvider(config3);
29123
29117
  const exposeFamily = realtimeAtomFamilyProvider(config3);
29124
- const gameSocket = castSocket(socket, bugRangersGuard, parent.logger.error);
29118
+ const gameSocket = guardSocket(socket, bugRangersGuard, parent.logger.error);
29125
29119
  const usersHereAtom = findState(usersInRoomsAtoms, ROOM_KEY);
29126
29120
  const coreStack = [];
29127
29121
  coreStack.push(exposeState(turnNumberAtom), exposeState(gameStateAtom), exposeState(turnInProgressAtom), exposeMutable(playerTurnOrderAtom), exposeMutable(gameTilesAtom), exposeFamily(playerReadyStatusAtoms, usersHereAtom), exposeFamily(playerColorAtoms, usersHereAtom), exposeFamily(playerRemainingCubesAtoms, usersHereAtom), exposeFamily(playerRemainingTilesAtoms, usersHereAtom), exposeFamily(tileOwnerAtoms, gameTilesAtom), exposeFamily(tileCubeCountAtoms, gameTilesAtom), exposeFamily(gameTilesStackHeightAtoms, gameTilesAtom), employSocket(gameSocket, `wantFirst`, () => {
@@ -12166,13 +12166,17 @@ var init_internal = __esm(() => {
12166
12166
  });
12167
12167
 
12168
12168
  // ../../packages/atom.io/dist/realtime/index.js
12169
+ function employSocket(socket, event, handleEvent) {
12170
+ socket.on(event, handleEvent);
12171
+ return socket.off.bind(socket, event, handleEvent);
12172
+ }
12169
12173
  function onLoad(loadable, fn2) {
12170
12174
  if (loadable instanceof Promise)
12171
12175
  loadable.then(fn2);
12172
12176
  else
12173
12177
  fn2(loadable);
12174
12178
  }
12175
- function castSocket(socket, guard, logError) {
12179
+ function guardSocket(socket, guard, logError) {
12176
12180
  if (guard === `TRUST`)
12177
12181
  return socket;
12178
12182
  return {
@@ -12204,13 +12208,6 @@ function castSocket(socket, guard, logError) {
12204
12208
  emit: socket.emit.bind(socket)
12205
12209
  };
12206
12210
  }
12207
- function employSocket(socket, event, handleEvent) {
12208
- socket.on(event, handleEvent);
12209
- const retireSocket = () => {
12210
- socket.off(event, handleEvent);
12211
- };
12212
- return retireSocket;
12213
- }
12214
12211
  var mutexAtoms, InvariantMap, SyncGroup, isSocketKey = (key) => key.startsWith(`socket::`), isUserKey = (key) => key.startsWith(`user::`), isRoomKey = (key) => key.startsWith(`room::`), roomKeysAtom, usersInRooms, visibleUsersInRoomsSelector, visibilityFromRoomSelector, mutualUsersSelector, ownersOfRooms;
12215
12212
  var init_realtime = __esm(() => {
12216
12213
  init_main();
@@ -13030,7 +13027,7 @@ function provideRooms({
13030
13027
  roomNames,
13031
13028
  userKey
13032
13029
  }) {
13033
- const roomSocket = castSocket(socket, createRoomSocketGuard(roomNames));
13030
+ const roomSocket = guardSocket(socket, createRoomSocketGuard(roomNames));
13034
13031
  const exposeMutable = realtimeMutableProvider({
13035
13032
  socket,
13036
13033
  store,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tempest.games",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -50,7 +50,7 @@
50
50
  "socket.io-client": "4.8.3",
51
51
  "three": "0.182.0",
52
52
  "three-stdlib": "2.36.1",
53
- "atom.io": "0.46.13",
53
+ "atom.io": "0.46.14",
54
54
  "safedeposit": "0.1.2",
55
55
  "treetrunks": "0.1.5"
56
56
  },
@@ -76,7 +76,7 @@
76
76
  "vite": "7.3.0",
77
77
  "vite-tsconfig-paths": "6.0.3",
78
78
  "vitest": "4.0.16",
79
- "flightdeck": "0.3.33",
79
+ "flightdeck": "0.3.34",
80
80
  "varmint": "0.5.11"
81
81
  },
82
82
  "scripts": {