atom-effect-jquery 0.1.1 → 0.2.1

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/README.md CHANGED
@@ -32,7 +32,7 @@ pnpm add atom-effect-jquery jquery @but212/atom-effect
32
32
  <!-- Load jQuery -->
33
33
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
34
34
  <!-- Load atom-effect-jquery -->
35
- <script src="https://cdn.jsdelivr.net/npm/atom-effect-jquery@0.1.1"></script>
35
+ <script src="https://cdn.jsdelivr.net/npm/atom-effect-jquery@0.2.1"></script>
36
36
  ```
37
37
 
38
38
  ## Basic Usage
@@ -165,19 +165,17 @@ $('#app').atomMount(Counter, { initial: 10 });
165
165
 
166
166
  ## Advanced Features
167
167
 
168
- ### Automatic Cleanup
168
+ ### Transparent Lifecycle Management
169
169
 
170
- When an element bound with `atom-effect-jquery` is removed from the DOM (e.g., via `.remove()` or `.empty()`), the library automatically detects this via `MutationObserver` and cleans up all associated subscribers and effects. You don't need to manually dispose of your bindings.
170
+ Memory management is handled automatically through overrides of standard jQuery methods. You don't need to manually dispose of bindings.
171
171
 
172
- ### jQuery Event Batching
172
+ - **`.remove()` / `.empty()`**: Automatically cleans up all associated reactivity and event listeners to prevent memory leaks.
173
+ - **`.detach()`**: Preserves bindings and reactivity. Perfect for moving elements around in the DOM without losing their state connection.
174
+ - **Auto-Cleanup**: A `MutationObserver` acts as a safety net for elements removed via other means (e.g. `innerHTML`), ensuring eventual cleanup.
173
175
 
174
- To ensure optimal performance, you can enable global patching of jQuery's event handlers. This wraps every jQuery event handler in a `batch()`, so multiple state updates within a single event only trigger one DOM update.
176
+ ### Performance Optimization
175
177
 
176
- ```typescript
177
- import { enablejQueryBatching } from 'atom-effect-jquery';
178
-
179
- enablejQueryBatching(); // Call this once at startup
180
- ```
178
+ The library automatically patches jQuery's event methods (`.on`, `.off`) to wrap handlers in `$.batch()`. This ensures that multiple state updates triggering within a single event (e.g., a click handler) are batched together, resulting in a single re-render.
181
179
 
182
180
  ### Debug Mode
183
181
 
@@ -1,2 +1,2 @@
1
- (function(b,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],c):(b=typeof globalThis<"u"?globalThis:b||self,c(b.AtomEffectJQuery={},b.jQuery))})(this,(function(b,c){"use strict";const we={ONE_SECOND_MS:1e3},W={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},K={DISPOSED:1,EXECUTING:2},_={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},M={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10},de={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},B=1073741823,C=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production";class A extends Error{constructor(e,n=null,s=!0){super(e),this.name="AtomError",this.cause=n,this.recoverable=s,this.timestamp=new Date}}class q extends A{constructor(e,n=null){super(e,n,!0),this.name="ComputedError"}}class F extends A{constructor(e,n=null){super(e,n,!1),this.name="EffectError"}}class Z extends A{constructor(e,n=null){super(e,n,!1),this.name="SchedulerError"}}const E={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",COMPUTED_SUBSCRIBER_MUST_BE_FUNCTION:"Subscriber listener must be a function or Subscriber object",COMPUTED_ASYNC_PENDING_NO_DEFAULT:"Async computation is pending. No default value provided",COMPUTED_COMPUTATION_FAILED:"Computed computation failed",COMPUTED_ASYNC_COMPUTATION_FAILED:"Async computed computation failed",COMPUTED_DEPENDENCY_SUBSCRIPTION_FAILED:"Failed to subscribe to dependency",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",ATOM_SUBSCRIBER_EXECUTION_FAILED:"Error occurred while executing atom subscribers",ATOM_INDIVIDUAL_SUBSCRIBER_FAILED:"Error during individual atom subscriber execution",EFFECT_MUST_BE_FUNCTION:"Effect function must be a function",EFFECT_EXECUTION_FAILED:"Effect execution failed",EFFECT_CLEANUP_FAILED:"Effect cleanup function execution failed",LARGE_DEPENDENCY_GRAPH:t=>`Large dependency graph detected: ${t} dependencies`,UNSUBSCRIBE_NON_EXISTENT:"Attempted to unsubscribe a non-existent listener",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},re=Symbol("debugName"),Fe=Symbol("id"),oe=Symbol("type"),_e=Symbol("noDefaultValue");function ke(t){return"dependencies"in t&&Array.isArray(t.dependencies)}let pe=0;function be(t,e,n){if(t._visitedEpoch!==n){if(t._visitedEpoch=n,t===e)throw new q("Indirect circular dependency detected");if(ke(t)){const s=t.dependencies;for(let i=0;i<s.length;i++){const r=s[i];r&&be(r,e,n)}}}}const v={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:de.MAX_DEPENDENCIES,warnInfiniteLoop:de.WARN_INFINITE_LOOP,warn(t,e){this.enabled&&t&&console.warn(`[Atom Effect] ${e}`)},checkCircular(t,e){if(t===e)throw new q("Direct circular dependency detected");this.enabled&&(pe++,be(t,e,pe))},attachDebugInfo(t,e,n){if(!this.enabled)return;const s=t;s[re]=`${e}_${n}`,s[Fe]=n,s[oe]=e},getDebugName(t){if(t!=null&&re in t)return t[re]},getDebugType(t){if(t!=null&&oe in t)return t[oe]}};let Me=1;const Pe=()=>Me++;class Ee{constructor(){this.id=Pe()&B,this.flags=0}}class me extends Ee{constructor(){super(),this.version=0,this._lastSeenEpoch=-1}subscribe(e){if(typeof e=="object"&&e!==null&&"execute"in e)return this._objectSubscribers.add(e);if(typeof e!="function")throw new A(E.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);return this._functionSubscribers.add(e)}subscriberCount(){return this._functionSubscribers.size+this._objectSubscribers.size}_notifySubscribers(e,n){this._functionSubscribers.forEachSafe(s=>s(e,n),s=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,s))),this._objectSubscribers.forEachSafe(s=>s.execute(),s=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,s)))}}let ce=0;function ge(){return ce=(ce+1|0)&B,ce}let $=0,ue=0,ee=!1;function Se(){return ee?(C&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(ee=!0,$=$+1&B,ue=0,!0)}function ye(){ee=!1}function Le(){return ee?++ue:0}class je{constructor(){this.queueA=[],this.queueB=[],this.queue=this.queueA,this.queueSize=0,this._epoch=0,this.isProcessing=!1,this.isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=M.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new Z("Scheduler callback must be a function");e._nextEpoch!==this._epoch&&(e._nextEpoch=this._epoch,this.isBatching||this.isFlushingSync?this.batchQueue[this.batchQueueSize++]=e:(this.queue[this.queueSize++]=e,this.isProcessing||this.flush()))}flush(){if(this.isProcessing||this.queueSize===0)return;this.isProcessing=!0;const e=this.queue,n=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,queueMicrotask(()=>{const s=Se();this._processJobs(e,n),this.isProcessing=!1,s&&ye(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=Se();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&ye()}}_mergeBatchQueue(){if(this._epoch++,this.batchQueueSize>0){for(let e=0;e<this.batchQueueSize;e++){const n=this.batchQueue[e];n&&n._nextEpoch!==this._epoch&&(n._nextEpoch=this._epoch,this.queue[this.queueSize++]=n)}this.batchQueueSize=0}}_drainQueue(){let e=0;for(;this.queueSize>0;){if(++e>this.maxFlushIterations){this._handleFlushOverflow();break}this._processCurrentQueue(),this._mergeBatchQueue()}}_processCurrentQueue(){const e=this.queue,n=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,this._processJobs(e,n)}_handleFlushOverflow(){console.error(new Z(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,n){for(let s=0;s<n;s++)try{e[s]?.()}catch(i){console.error(new Z("Error occurred during scheduler execution",i))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<M.MIN_FLUSH_ITERATIONS)throw new Z(`Max flush iterations must be at least ${M.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const G=new je;function x(t){if(typeof t!="function")throw new A("Batch callback must be a function");G.startBatch();try{return t()}finally{G.endBatch()}}const P={current:null,run(t,e){const n=this.current;this.current=t;try{return e()}finally{this.current=n}},getCurrent(){return this.current}};function he(t){if(typeof t!="function")throw new A("Untracked callback must be a function");const e=P.current;P.current=null;try{return t()}finally{P.current=e}}class te{constructor(){this.subscribers=null}add(e){if(this.subscribers||(this.subscribers=[]),this.subscribers.indexOf(e)!==-1)return()=>{};this.subscribers.push(e);let n=!1;return()=>{n||(n=!0,this.remove(e))}}remove(e){if(!this.subscribers)return!1;const n=this.subscribers.indexOf(e);if(n===-1)return!1;const s=this.subscribers.length-1;return n!==s&&(this.subscribers[n]=this.subscribers[s]),this.subscribers.pop(),!0}has(e){return this.subscribers?this.subscribers.indexOf(e)!==-1:!1}forEach(e){if(this.subscribers)for(let n=0;n<this.subscribers.length;n++)e(this.subscribers[n],n)}forEachSafe(e,n){if(this.subscribers)for(let s=0;s<this.subscribers.length;s++)try{e(this.subscribers[s],s)}catch(i){n?n(i):console.error("[SubscriberManager] Error in subscriber callback:",i)}}get size(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}function ae(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t&&typeof t.subscribe=="function"}function De(t){if(v.enabled&&(t==null||typeof t=="object")){const e=v.getDebugType(t);if(e)return e==="computed"}return ae(t)&&"invalidate"in t&&typeof t.invalidate=="function"}function Ce(t){return t!=null&&typeof t.then=="function"}function Ve(t){return typeof t=="object"&&t!==null}function Ie(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&typeof t.addDependency=="function"}function ve(t){return typeof t=="function"&&typeof t.addDependency!="function"}function xe(t){return Ve(t)&&typeof t.execute=="function"}class Be extends me{constructor(e,n){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new te,this._objectSubscribersStore=new te,this._sync=n,this._notifyTask=this._flushNotifications.bind(this),v.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=P.getCurrent();return e&&this._track(e),this._value}set value(e){if(Object.is(this._value,e))return;const n=this._value;this.version=this.version+1&B,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(n)}_track(e){if(Ie(e)){e.addDependency(this);return}if(ve(e)){this._functionSubscribersStore.add(e);return}xe(e)&&this._objectSubscribersStore.add(e)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!G.isBatching?this._flushNotifications():G.schedule(this._notifyTask)}_flushNotifications(){if(!this._isNotificationScheduled)return;const e=this._pendingOldValue,n=this._value;this._pendingOldValue=void 0,this._isNotificationScheduled=!1,this._notifySubscribers(n,e)}peek(){return this._value}dispose(){this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this._value=void 0}}function Ne(t,e={}){return new Be(t,e.sync??!1)}class le{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=C?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return C&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,n){if(!(n&&e===n)){if(Object.isFrozen(e)){C&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){C&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){C&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),C&&this.stats&&this.stats.released++}}getStats(){if(!C||!this.stats)return null;const{acquired:e,released:n,rejected:s}=this.stats,i=s.frozen+s.tooLarge+s.poolFull;return{acquired:e,released:n,rejected:s,leaked:e-n-i,poolSize:this.pool.length}}reset(){this.pool.length=0,C&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const g=Object.freeze([]),N=Object.freeze([]),S=Object.freeze([]),k=new le,L=new le,U=new le;function qe(t,e,n,s){if(e!==g&&n!==N)for(let r=0;r<e.length;r++){const o=e[r];o&&(o._tempUnsub=n[r])}const i=L.acquire();i.length=t.length;for(let r=0;r<t.length;r++){const o=t[r];o&&(o._tempUnsub?(i[r]=o._tempUnsub,o._tempUnsub=void 0):(v.checkCircular(o,s),i[r]=o.subscribe(s)))}if(e!==g)for(let r=0;r<e.length;r++){const o=e[r];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return n!==N&&L.release(n),i}function z(t,e,n){if(t instanceof TypeError)return new e(`Type error (${n}): ${t.message}`,t);if(t instanceof ReferenceError)return new e(`Reference error (${n}): ${t.message}`,t);if(t instanceof A)return t;const s=t instanceof Error?t.message:String(t),i=t instanceof Error?t:null;return new e(`Unexpected error (${n}): ${s}`,i)}class Ue extends me{constructor(e,n={}){if(typeof e!="function")throw new q(E.COMPUTED_MUST_BE_FUNCTION);if(super(),this._value=void 0,this.flags=_.DIRTY|_.IDLE,this._error=null,this._promiseId=0,this._equal=n.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in n?n.defaultValue:_e,this._hasDefaultValue=this._defaultValue!==_e,this._onError=n.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new te,this._objectSubscribersStore=new te,this._dependencies=g,this._dependencyVersions=S,this._unsubscribes=N,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(s=>s(),s=>console.error(s)),this._objectSubscribersStore.forEachSafe(s=>s.execute(),s=>console.error(s))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:s=>{}}),v.attachDebugInfo(this,"computed",this.id),v.enabled){const s=this;s.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,s.isDirty=()=>this._isDirty(),s.dependencies=this._dependencies,s.stateFlags=this._getFlagsAsString()}if(n.lazy===!1)try{this._recompute()}catch{}}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=this._computeValue();return this._registerTracking(),e}peek(){return this._value}get state(){return this._getAsyncState()}get hasError(){return this._isRejected()}get lastError(){return this._error}get isPending(){return this._isPending()}get isResolved(){return this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S)}dispose(){if(this._unsubscribes!==N){for(let e=0;e<this._unsubscribes.length;e++){const n=this._unsubscribes[e];n&&n()}L.release(this._unsubscribes),this._unsubscribes=N}this._dependencies!==g&&(k.release(this._dependencies),this._dependencies=g),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=_.DIRTY|_.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID}_isDirty(){return(this.flags&_.DIRTY)!==0}_setDirty(){this.flags|=_.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&_.IDLE)!==0}_setIdle(){this.flags|=_.IDLE,this.flags&=-29}_isPending(){return(this.flags&_.PENDING)!==0}_setPending(){this.flags|=_.PENDING,this.flags&=-27}_isResolved(){return(this.flags&_.RESOLVED)!==0}_setResolved(){this.flags|=_.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&_.REJECTED)!==0}_setRejected(){this.flags|=_.REJECTED|_.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&_.RECOMPUTING)!==0}_setRecomputing(e){const n=_.RECOMPUTING;this.flags=this.flags&~n|-Number(e)&n}_getAsyncState(){return this._isResolved()?W.RESOLVED:this._isPending()?W.PENDING:this._isRejected()?W.REJECTED:W.IDLE}_getFlagsAsString(){const e=[];return this._isDirty()&&e.push("DIRTY"),this._isIdle()&&e.push("IDLE"),this._isPending()&&e.push("PENDING"),this._isResolved()&&e.push("RESOLVED"),this._isRejected()&&e.push("REJECTED"),this._isRecomputing()&&e.push("RECOMPUTING"),e.join(" | ")}_computeValue(){return this._isRecomputing()?this._value:((this._isDirty()||this._isIdle())&&this._recompute(),this._isPending()?this._handlePending():this._isRejected()?this._handleRejected():this._value)}_recompute(){if(this._isRecomputing())return;this._setRecomputing(!0);const e=this._prepareComputationContext();let n=!1;try{const s=P.run(this._trackable,this._fn);Ce(s)?(this._commitDependencies(e),n=!0,this._handleAsyncComputation(s)):(this._commitDependencies(e),n=!0,this._handleSyncResult(s))}catch(s){this._commitDependencies(e),n=!0,this._handleComputationError(s)}finally{this._cleanupContext(e,n),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,n=this._dependencyVersions,s=k.acquire(),i=U.acquire(),r=ge(),o={depCount:0},a=l=>{l._lastSeenEpoch!==r&&(l._lastSeenEpoch=r,o.depCount<s.length?(s[o.depCount]=l,i[o.depCount]=l.version):(s.push(l),i.push(l.version)),o.depCount++)},f=this._trackable.addDependency;return this._trackable.addDependency=a,{prevDeps:e,prevVersions:n,nextDeps:s,nextVersions:i,originalAdd:f,state:o}}_commitDependencies(e){const{nextDeps:n,nextVersions:s,state:i,prevDeps:r}=e;n.length=i.depCount,s.length=i.depCount,this._unsubscribes=qe(n,r,this._unsubscribes,this),this._dependencies=n,this._dependencyVersions=s}_cleanupContext(e,n){this._trackable.addDependency=e.originalAdd,n?(e.prevDeps!==g&&k.release(e.prevDeps),e.prevVersions!==S&&U.release(e.prevVersions)):(k.release(e.nextDeps),U.release(e.nextVersions))}_handleSyncResult(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&B),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1)}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._promiseId=this._promiseId>=this.MAX_PROMISE_ID?1:this._promiseId+1;const n=this._promiseId;e.then(s=>{n===this._promiseId&&this._handleAsyncResolution(s)}).catch(s=>{n===this._promiseId&&this._handleAsyncRejection(s)})}_handleAsyncResolution(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&B),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1)}_handleAsyncRejection(e){const n=z(e,q,E.COMPUTED_ASYNC_COMPUTATION_FAILED);if(this._error=n,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(n)}catch(s){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,s)}this._notifySubscribers(void 0,void 0)}_handleComputationError(e){const n=z(e,q,E.COMPUTED_COMPUTATION_FAILED);if(this._error=n,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(n)}catch(s){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,s)}throw n}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new q(E.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){const e=P.getCurrent();if(e){if(Ie(e)){e.addDependency(this);return}if(ve(e)){this._functionSubscribersStore.add(e);return}xe(e)&&this._objectSubscribersStore.add(e)}}}Object.freeze(Ue.prototype);function Re(t,e={}){return new Ue(t,e)}class ze extends Ee{constructor(e,n={}){super(),this.run=()=>{if(this.isDisposed)throw new F(E.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==N){for(let s=0;s<this._unsubscribes.length;s++){const i=this._unsubscribes[s];i&&i()}L.release(this._unsubscribes),this._unsubscribes=N}this._dependencies!==g&&(k.release(this._dependencies),this._dependencies=g),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S)}},this.addDependency=s=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const i=this._currentEpoch;if(s._lastSeenEpoch===i)return;s._lastSeenEpoch=i,this._nextDeps.push(s),this._nextVersions.push(s.version),s._tempUnsub?(this._nextUnsubs.push(s._tempUnsub),s._tempUnsub=void 0):this._subscribeTo(s)}},this.execute=()=>{if(this.isDisposed||this.isExecuting||!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const s=this._prepareEffectContext();let i=!1;try{const r=P.run(this,this._fn);this._commitEffect(s),i=!0,this._checkLoopWarnings(),Ce(r)?r.then(o=>{!this.isDisposed&&typeof o=="function"&&(this._cleanup=o)}).catch(o=>{console.error(z(o,F,E.EFFECT_EXECUTION_FAILED))}):this._cleanup=typeof r=="function"?r:null}catch(r){i=!0,console.error(z(r,F,E.EFFECT_EXECUTION_FAILED)),this._cleanup=null}finally{this._cleanupEffect(s,i),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=n.sync??!1,this._maxExecutions=n.maxExecutionsPerSecond??M.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=n.maxExecutionsPerFlush??M.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=n.trackModifications??!1,this._cleanup=null,this._dependencies=g,this._dependencyVersions=S,this._unsubscribes=N,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._history=C?[]:null,this._executionCount=0,v.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,n=this._dependencyVersions,s=this._unsubscribes,i=k.acquire(),r=U.acquire(),o=L.acquire(),a=ge();if(e!==g&&s!==N)for(let f=0;f<e.length;f++){const l=e[f];l&&(l._tempUnsub=s[f])}return this._nextDeps=i,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=a,{prevDeps:e,prevVersions:n,prevUnsubs:s,nextDeps:i,nextVersions:r,nextUnsubs:o}}_commitEffect(e){const n=e.nextDeps.length;e.nextDeps.length=n,e.nextVersions.length=n,this._dependencies=e.nextDeps,this._dependencyVersions=e.nextVersions,this._unsubscribes=e.nextUnsubs}_cleanupEffect(e,n){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,n){if(e.prevDeps!==g){for(let s=0;s<e.prevDeps.length;s++){const i=e.prevDeps[s];i?._tempUnsub&&(i._tempUnsub(),i._tempUnsub=void 0)}k.release(e.prevDeps)}e.prevUnsubs!==N&&L.release(e.prevUnsubs),e.prevVersions!==S&&U.release(e.prevVersions)}else{k.release(e.nextDeps),U.release(e.nextVersions);for(let s=0;s<e.nextUnsubs.length;s++)e.nextUnsubs[s]?.();if(L.release(e.nextUnsubs),e.prevDeps!==g)for(let s=0;s<e.prevDeps.length;s++){const i=e.prevDeps[s];i&&(i._tempUnsub=void 0)}}}_subscribeTo(e){try{const n=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():G.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(n)}catch(n){console.error(z(n,F,E.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&K.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&K.EXECUTING)!==0}_setDisposed(){this.flags|=K.DISPOSED}_setExecuting(e){const n=K.EXECUTING;this.flags=this.flags&~n|-Number(e)&n}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(z(e,F,E.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==$&&(this._lastFlushEpoch=$,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),Le()>M.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history){const e=Date.now();this._history.push(e),this._history.length>M.MAX_EXECUTIONS_PER_SECOND+10&&this._history.shift(),this._checkTimestampLoop(e)}}_checkTimestampLoop(e){const n=this._history;if(!n||this._maxExecutions<=0)return;const s=e-we.ONE_SECOND_MS;let i=0;for(let r=n.length-1;r>=0&&!(n[r]<s);r--)i++;if(i>this._maxExecutions){const r=new F(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(r),C)throw r}}_throwInfiniteLoopError(e){const n=new F(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${ue}`);throw this.dispose(),console.error(n),n}_shouldExecute(){if(this._dependencies===g||this._dependencyVersions===S)return!0;for(let e=0;e<this._dependencies.length;e++){const n=this._dependencies[e];if(n){if("value"in n)try{he(()=>n.value)}catch{return!0}if(n.version!==this._dependencyVersions[e])return!0}}return!1}_checkLoopWarnings(){if(this._trackModifications&&v.enabled){const e=this._dependencies;for(let n=0;n<e.length;n++){const s=e[n];s&&s._modifiedAtEpoch===this._currentEpoch&&v.warn(!0,`Effect is reading a dependency (${v.getDebugName(s)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function m(t,e={}){if(typeof t!="function")throw new F(E.EFFECT_MUST_BE_FUNCTION);const n=new ze(t,e);return n.execute(),n}function Xe(){if(typeof window<"u"){const t=window.__ATOM_DEBUG__;if(typeof t=="boolean")return t}try{if(typeof process<"u"&&process.env&&process.env.NODE_ENV==="development")return!0}catch{}return!1}let j=Xe();const u={get enabled(){return j},set enabled(t){j=t},log(t,...e){j&&console.log(`[atom-effect-jquery] ${t}:`,...e)},atomChanged(t,e,n){j&&console.log(`[atom-effect-jquery] Atom "${t||"anonymous"}" changed:`,e,"→",n)},domUpdated(t,e,n){if(!j)return;const s=Qe(t);console.log(`[atom-effect-jquery] DOM updated: ${s}.${e} =`,n),Ge(t)},cleanup(t){j&&console.log(`[atom-effect-jquery] Cleanup: ${t}`)},warn(...t){j&&console.warn("[atom-effect-jquery]",...t)}};function Qe(t){const e=t[0];if(!e)return"unknown";if(e.id)return`#${e.id}`;if(e.className){const n=String(e.className).split(" ").filter(Boolean).join(".");return`${e.tagName.toLowerCase()}.${n}`}return e.tagName.toLowerCase()}function Ge(t){const e=t[0];if(!e||!document.contains(e))return;const n="atom_debug_timer",s="atom_debug_cleanup_timer",i="atom_debug_org_style";clearTimeout(t.data(n)),clearTimeout(t.data(s)),t.data(i)||t.data(i,{outline:t.css("outline"),outlineOffset:t.css("outline-offset"),transition:t.css("transition")}),t.css({outline:"2px solid rgba(255, 68, 68, 0.8)","outline-offset":"1px",transition:"none"});const r=setTimeout(()=>{const o=t.data(i);t.css("transition","outline 0.5s ease-out"),requestAnimationFrame(()=>{t.css({outline:o?.outline||"","outline-offset":o?.outlineOffset||""});const a=setTimeout(()=>{t.css("transition",o?.transition||""),t.removeData(n),t.removeData(s),t.removeData(i)},500);t.data(s,a)})},100);t.data(n,r)}const He=new WeakMap;function Te(t,e={}){const n=Ne(t,e);return e.name&&He.set(n,{name:e.name}),n}Object.defineProperty(Te,"debug",{get(){return u.enabled},set(t){u.enabled=t}});function Ye(){return new Promise(t=>setTimeout(t,0))}c.extend({atom:Te,computed:Re,effect:m,batch:x,untracked:he,isAtom:ae,isComputed:De,isReactive:t=>ae(t)||De(t),nextTick:Ye});function d(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t}function p(t){return d(t)?t.value:t}function fe(t){if(t.id)return`#${t.id}`;if(t.className){const e=String(t.className).split(/\s+/).filter(Boolean).join(".");return e?`${t.tagName.toLowerCase()}.${e}`:t.tagName.toLowerCase()}return t.tagName.toLowerCase()}class Je{effects=new WeakMap;cleanups=new WeakMap;boundElements=new WeakSet;trackEffect(e,n){const s=this.effects.get(e)||[];s.push(n),this.effects.set(e,s),this.boundElements.add(e)}trackCleanup(e,n){const s=this.cleanups.get(e)||[];s.push(n),this.cleanups.set(e,s),this.boundElements.add(e)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.has(e))return;u.cleanup(fe(e));const n=this.effects.get(e);n&&(this.effects.delete(e),n.forEach(i=>{try{i.dispose()}catch(r){u.warn("Effect dispose error:",r)}}));const s=this.cleanups.get(e);s&&(this.cleanups.delete(e),s.forEach(i=>{try{i()}catch(r){u.warn("Cleanup error:",r)}})),this.boundElements.delete(e)}cleanupTree(e){e.querySelectorAll("*").forEach(s=>{this.boundElements.has(s)&&this.cleanup(s)}),this.cleanup(e)}}const h=new Je;let H=null;function Ae(t=document.body){H||(H=new MutationObserver(e=>{for(const n of e)n.removedNodes.forEach(s=>{s instanceof Element&&h.cleanupTree(s)})}),H.observe(t,{childList:!0,subtree:!0}))}function We(){H?.disconnect(),H=null}c.fn.atomText=function(t,e){return this.each(function(){const n=c(this);if(d(t)){const s=m(()=>{const i=p(t),r=e?e(i):String(i??"");n.text(r),u.domUpdated(n,"text",r)});h.trackEffect(this,s)}else{const s=e?e(t):String(t??"");n.text(s)}})},c.fn.atomHtml=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=String(p(t)??"");e.html(s),u.domUpdated(e,"html",s)});h.trackEffect(this,n)}else e.html(String(t??""))})},c.fn.atomClass=function(t,e){return this.each(function(){const n=c(this);if(d(e)){const s=m(()=>{const i=!!p(e);n.toggleClass(t,i),u.domUpdated(n,`class.${t}`,i)});h.trackEffect(this,s)}else n.toggleClass(t,!!e)})},c.fn.atomCss=function(t,e,n){return this.each(function(){const s=c(this);if(d(e)){const i=m(()=>{const r=p(e),o=n?`${r}${n}`:r;s.css(t,o),u.domUpdated(s,`css.${t}`,o)});h.trackEffect(this,i)}else s.css(t,n?`${e}${n}`:e)})},c.fn.atomAttr=function(t,e){return this.each(function(){const n=c(this),s=i=>{i==null||i===!1?n.removeAttr(t):i===!0?n.attr(t,t):n.attr(t,String(i)),u.domUpdated(n,`attr.${t}`,i)};if(d(e)){const i=m(()=>s(p(e)));h.trackEffect(this,i)}else s(e)})},c.fn.atomProp=function(t,e){return this.each(function(){const n=c(this);if(d(e)){const s=m(()=>{const i=p(e);n.prop(t,i),u.domUpdated(n,`prop.${t}`,i)});h.trackEffect(this,s)}else n.prop(t,e)})},c.fn.atomShow=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=!!p(t);e.toggle(s),u.domUpdated(e,"show",s)});h.trackEffect(this,n)}else e.toggle(!!t)})},c.fn.atomHide=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=!p(t);e.toggle(s),u.domUpdated(e,"hide",!s)});h.trackEffect(this,n)}else e.toggle(!t)})},c.fn.atomVal=function(t,e={}){const{debounce:n,event:s="input",parse:i=o=>o,format:r=o=>String(o??"")}=e;return this.each(function(){const o=c(this);let a=null,f=!1,l=!1,X=!1;const R=()=>{l=!0},T=()=>{l=!1,J()};o.on("compositionstart",R),o.on("compositionend",T);const J=()=>{f||X||x(()=>{t.value=i(o.val())})},I=()=>{l||X||f||(n?(a&&clearTimeout(a),a=window.setTimeout(J,n)):J())};o.on(s,I),o.on("change",I);const ne=m(()=>{const D=r(t.value);o.val()!==D&&(f=!0,X=!0,o.val(D),u.domUpdated(o,"val",D),X=!1,f=!1)});h.trackEffect(this,ne),h.trackCleanup(this,()=>{o.off(s,I),o.off("change",I),o.off("compositionstart",R),o.off("compositionend",T),a&&clearTimeout(a)})})},c.fn.atomChecked=function(t){return this.each(function(){const e=c(this);let n=!1;const s=()=>{n||x(()=>{t.value=e.prop("checked")})};e.on("change",s),h.trackCleanup(this,()=>e.off("change",s));const i=m(()=>{n=!0,e.prop("checked",t.value),u.domUpdated(e,"checked",t.value),n=!1});h.trackEffect(this,i)})},c.fn.atomOn=function(t,e){return this.each(function(){const n=c(this),s=function(i){x(()=>e.call(this,i))};n.on(t,s),h.trackCleanup(this,()=>n.off(t,s))})},c.fn.atomUnbind=function(){return this.each(function(){h.cleanupTree(this)})},c.fn.atomBind=function(t){return this.each(function(){const e=c(this),n=[];if(t.text!==void 0&&(d(t.text)?n.push(()=>{const s=String(p(t.text)??"");e.text(s),u.domUpdated(e,"text",s)}):e.text(String(t.text??""))),t.html!==void 0&&(d(t.html)?n.push(()=>{const s=String(p(t.html)??"");e.html(s),u.domUpdated(e,"html",s)}):e.html(String(t.html??""))),t.class)for(const[s,i]of Object.entries(t.class))d(i)?n.push(()=>{const r=!!p(i);e.toggleClass(s,r),u.domUpdated(e,`class.${s}`,r)}):e.toggleClass(s,!!i);if(t.css)for(const[s,i]of Object.entries(t.css))if(Array.isArray(i)){const[r,o]=i;d(r)?n.push(()=>{const a=`${p(r)}${o}`;e.css(s,a),u.domUpdated(e,`css.${s}`,a)}):e.css(s,`${r}${o}`)}else d(i)?n.push(()=>{const r=p(i);e.css(s,r),u.domUpdated(e,`css.${s}`,r)}):e.css(s,i);if(t.attr)for(const[s,i]of Object.entries(t.attr)){const r=o=>{o==null||o===!1?e.removeAttr(s):o===!0?e.attr(s,s):e.attr(s,String(o)),u.domUpdated(e,`attr.${s}`,o)};d(i)?n.push(()=>r(p(i))):r(i)}if(t.prop)for(const[s,i]of Object.entries(t.prop))d(i)?n.push(()=>{const r=p(i);e.prop(s,r),u.domUpdated(e,`prop.${s}`,r)}):e.prop(s,i);if(t.show!==void 0&&(d(t.show)?n.push(()=>{const s=!!p(t.show);e.toggle(s),u.domUpdated(e,"show",s)}):e.toggle(!!t.show)),t.hide!==void 0&&(d(t.hide)?n.push(()=>{const s=!p(t.hide);e.toggle(s),u.domUpdated(e,"hide",!s)}):e.toggle(!t.hide)),t.val!==void 0){const s=t.val;let i=!1,r=!1;const o=()=>{r=!0},a=()=>{r=!1,i||x(()=>{s.value=e.val()})};e.on("compositionstart",o),e.on("compositionend",a);const f=()=>{r||i||x(()=>{s.value=e.val()})};e.on("input change",f),h.trackCleanup(this,()=>{e.off("input change",f),e.off("compositionstart",o),e.off("compositionend",a)}),n.push(()=>{const l=String(s.value??"");e.val()!==l&&(i=!0,e.val(l),u.domUpdated(e,"val",l),i=!1)})}if(t.checked!==void 0){const s=t.checked;let i=!1;const r=()=>{i||x(()=>{s.value=e.prop("checked")})};e.on("change",r),h.trackCleanup(this,()=>e.off("change",r)),n.push(()=>{i=!0,e.prop("checked",s.value),u.domUpdated(e,"checked",s.value),i=!1})}if(t.on)for(const[s,i]of Object.entries(t.on)){const r=function(o){x(()=>i.call(this,o))};e.on(s,r),h.trackCleanup(this,()=>e.off(s,r))}n.forEach(s=>{const i=m(s);h.trackEffect(this,i)})})},c.fn.atomList=function(t,e){return this.each(function(){const n=c(this),s=fe(this),{key:i,render:r,bind:o,onAdd:a,onRemove:f,empty:l}=e,X=typeof i=="function"?i:I=>I[i],R=new Map;let T=null;const J=m(()=>{const I=t.value,ne=new Set;if(u.log("list",`${s} updating with ${I.length} items`),I.length===0&&l){T||(T=c(l),n.append(T));for(const[,y]of R)y.$el.remove(),h.cleanup(y.$el[0]);R.clear();return}else T&&(T.remove(),T=null);let D=null;for(let y=0;y<I.length;y++){const O=I[y],V=X(O,y);ne.add(V);const Q=R.get(V);if(Q){const ie=Q.$el[0],w=D?D[0]:null;(w?ie.previousSibling===w:ie===n[0].firstChild)||(D?D.after(Q.$el):n.prepend(Q.$el)),Q.item=O,D=Q.$el}else{const ie=r(O,y),w=c(ie);D?D.after(w):n.prepend(w),R.set(V,{$el:w,item:O}),o&&o(w,O,y),a&&a(w),u.log("list",`${s} added item:`,V),D=w}}for(const[y,O]of R)if(!ne.has(y)){const V=()=>{O.$el.remove(),h.cleanup(O.$el[0]),R.delete(y),u.log("list",`${s} removed item:`,y)};f?Promise.resolve(f(O.$el)).then(V):V()}});h.trackEffect(this,J),h.trackCleanup(this,()=>{R.clear(),T?.remove()})})};const se=new WeakMap;c.fn.atomMount=function(t,e={}){return this.each(function(){const n=c(this),s=fe(this),i=se.get(this);i&&(u.log("mount",`${s} unmounting existing component`),i()),u.log("mount",`${s} mounting component`);let r;try{r=t(n,e)}catch(f){console.error("[atom-effect-jquery] Mount error:",f);return}let o=!1;const a=()=>{if(!o){if(o=!0,u.log("mount",`${s} full cleanup`),typeof r=="function")try{r()}catch{}h.cleanupTree(this),se.delete(this)}};se.set(this,a),h.trackCleanup(this,a)})},c.fn.atomUnmount=function(){return this.each(function(){se.get(this)?.()})};const Y=new WeakMap;let Oe=!1;function Ke(){if(Oe)return;Oe=!0;const t=c.fn.on,e=c.fn.off;c.fn.on=function(...n){let s=-1;for(let i=n.length-1;i>=0;i--)if(typeof n[i]=="function"){s=i;break}if(s!==-1){const i=n[s];let r;Y.has(i)?r=Y.get(i):(r=function(...o){let a;return x(()=>{a=i.apply(this,o)}),a},Y.set(i,r)),n[s]=r}return t.apply(this,n)},c.fn.off=function(...n){let s=-1;for(let i=n.length-1;i>=0;i--)if(typeof n[i]=="function"){s=i;break}if(s!==-1){const i=n[s];Y.has(i)&&(n[s]=Y.get(i))}return e.apply(this,n)}}c(()=>Ae(document.body)),b.default=c,b.atom=Ne,b.batch=x,b.computed=Re,b.disableAutoCleanup=We,b.effect=m,b.enableAutoCleanup=Ae,b.enablejQueryBatching=Ke,b.registry=h,b.untracked=he,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
1
+ (function(_,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],c):(_=typeof globalThis<"u"?globalThis:_||self,c(_.AtomEffectJQuery={},_.jQuery))})(this,(function(_,c){"use strict";const Fe={ONE_SECOND_MS:1e3},W={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},K={DISPOSED:1,EXECUTING:2},p={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},P={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10},_e={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},q=1073741823,C=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production";class A extends Error{constructor(e,n=null,s=!0){super(e),this.name="AtomError",this.cause=n,this.recoverable=s,this.timestamp=new Date}}class z extends A{constructor(e,n=null){super(e,n,!0),this.name="ComputedError"}}class k extends A{constructor(e,n=null){super(e,n,!1),this.name="EffectError"}}class Z extends A{constructor(e,n=null){super(e,n,!1),this.name="SchedulerError"}}const E={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",COMPUTED_SUBSCRIBER_MUST_BE_FUNCTION:"Subscriber listener must be a function or Subscriber object",COMPUTED_ASYNC_PENDING_NO_DEFAULT:"Async computation is pending. No default value provided",COMPUTED_COMPUTATION_FAILED:"Computed computation failed",COMPUTED_ASYNC_COMPUTATION_FAILED:"Async computed computation failed",COMPUTED_DEPENDENCY_SUBSCRIPTION_FAILED:"Failed to subscribe to dependency",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",ATOM_SUBSCRIBER_EXECUTION_FAILED:"Error occurred while executing atom subscribers",ATOM_INDIVIDUAL_SUBSCRIBER_FAILED:"Error during individual atom subscriber execution",EFFECT_MUST_BE_FUNCTION:"Effect function must be a function",EFFECT_EXECUTION_FAILED:"Effect execution failed",EFFECT_CLEANUP_FAILED:"Effect cleanup function execution failed",LARGE_DEPENDENCY_GRAPH:t=>`Large dependency graph detected: ${t} dependencies`,UNSUBSCRIBE_NON_EXISTENT:"Attempted to unsubscribe a non-existent listener",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},re=Symbol("debugName"),ke=Symbol("id"),oe=Symbol("type"),pe=Symbol("noDefaultValue");function Me(t){return"dependencies"in t&&Array.isArray(t.dependencies)}let be=0;function Ee(t,e,n){if(t._visitedEpoch!==n){if(t._visitedEpoch=n,t===e)throw new z("Indirect circular dependency detected");if(Me(t)){const s=t.dependencies;for(let i=0;i<s.length;i++){const r=s[i];r&&Ee(r,e,n)}}}}const v={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:_e.MAX_DEPENDENCIES,warnInfiniteLoop:_e.WARN_INFINITE_LOOP,warn(t,e){this.enabled&&t&&console.warn(`[Atom Effect] ${e}`)},checkCircular(t,e){if(t===e)throw new z("Direct circular dependency detected");this.enabled&&(be++,Ee(t,e,be))},attachDebugInfo(t,e,n){if(!this.enabled)return;const s=t;s[re]=`${e}_${n}`,s[ke]=n,s[oe]=e},getDebugName(t){if(t!=null&&re in t)return t[re]},getDebugType(t){if(t!=null&&oe in t)return t[oe]}};let Pe=1;const Le=()=>Pe++;class me{constructor(){this.id=Le()&q,this.flags=0}}class ge extends me{constructor(){super(),this.version=0,this._lastSeenEpoch=-1}subscribe(e){if(typeof e=="object"&&e!==null&&"execute"in e)return this._objectSubscribers.add(e);if(typeof e!="function")throw new A(E.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);return this._functionSubscribers.add(e)}subscriberCount(){return this._functionSubscribers.size+this._objectSubscribers.size}_notifySubscribers(e,n){this._functionSubscribers.forEachSafe(s=>s(e,n),s=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,s))),this._objectSubscribers.forEachSafe(s=>s.execute(),s=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,s)))}}let ce=0;function Se(){return ce=(ce+1|0)&q,ce}let $=0,ue=0,ee=!1;function ye(){return ee?(C&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(ee=!0,$=$+1&q,ue=0,!0)}function De(){ee=!1}function je(){return ee?++ue:0}class Ve{constructor(){this.queueA=[],this.queueB=[],this.queue=this.queueA,this.queueSize=0,this._epoch=0,this.isProcessing=!1,this.isBatching=!1,this.batchDepth=0,this.batchQueue=[],this.batchQueueSize=0,this.isFlushingSync=!1,this.maxFlushIterations=P.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new Z("Scheduler callback must be a function");e._nextEpoch!==this._epoch&&(e._nextEpoch=this._epoch,this.isBatching||this.isFlushingSync?this.batchQueue[this.batchQueueSize++]=e:(this.queue[this.queueSize++]=e,this.isProcessing||this.flush()))}flush(){if(this.isProcessing||this.queueSize===0)return;this.isProcessing=!0;const e=this.queue,n=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,queueMicrotask(()=>{const s=ye();this._processJobs(e,n),this.isProcessing=!1,s&&De(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=ye();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&De()}}_mergeBatchQueue(){if(this._epoch++,this.batchQueueSize>0){for(let e=0;e<this.batchQueueSize;e++){const n=this.batchQueue[e];n&&n._nextEpoch!==this._epoch&&(n._nextEpoch=this._epoch,this.queue[this.queueSize++]=n)}this.batchQueueSize=0}}_drainQueue(){let e=0;for(;this.queueSize>0;){if(++e>this.maxFlushIterations){this._handleFlushOverflow();break}this._processCurrentQueue(),this._mergeBatchQueue()}}_processCurrentQueue(){const e=this.queue,n=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,this._processJobs(e,n)}_handleFlushOverflow(){console.error(new Z(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,n){for(let s=0;s<n;s++)try{e[s]?.()}catch(i){console.error(new Z("Error occurred during scheduler execution",i))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<P.MIN_FLUSH_ITERATIONS)throw new Z(`Max flush iterations must be at least ${P.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const G=new Ve;function x(t){if(typeof t!="function")throw new A("Batch callback must be a function");G.startBatch();try{return t()}finally{G.endBatch()}}const L={current:null,run(t,e){const n=this.current;this.current=t;try{return e()}finally{this.current=n}},getCurrent(){return this.current}};function he(t){if(typeof t!="function")throw new A("Untracked callback must be a function");const e=L.current;L.current=null;try{return t()}finally{L.current=e}}class te{constructor(){this.subscribers=null}add(e){if(this.subscribers||(this.subscribers=[]),this.subscribers.indexOf(e)!==-1)return()=>{};this.subscribers.push(e);let n=!1;return()=>{n||(n=!0,this.remove(e))}}remove(e){if(!this.subscribers)return!1;const n=this.subscribers.indexOf(e);if(n===-1)return!1;const s=this.subscribers.length-1;return n!==s&&(this.subscribers[n]=this.subscribers[s]),this.subscribers.pop(),!0}has(e){return this.subscribers?this.subscribers.indexOf(e)!==-1:!1}forEach(e){if(this.subscribers)for(let n=0;n<this.subscribers.length;n++)e(this.subscribers[n],n)}forEachSafe(e,n){if(this.subscribers)for(let s=0;s<this.subscribers.length;s++)try{e(this.subscribers[s],s)}catch(i){n?n(i):console.error("[SubscriberManager] Error in subscriber callback:",i)}}get size(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}function ae(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t&&typeof t.subscribe=="function"}function Ce(t){if(v.enabled&&(t==null||typeof t=="object")){const e=v.getDebugType(t);if(e)return e==="computed"}return ae(t)&&"invalidate"in t&&typeof t.invalidate=="function"}function Ie(t){return t!=null&&typeof t.then=="function"}function Be(t){return typeof t=="object"&&t!==null}function ve(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&typeof t.addDependency=="function"}function xe(t){return typeof t=="function"&&typeof t.addDependency!="function"}function Ne(t){return Be(t)&&typeof t.execute=="function"}class qe extends ge{constructor(e,n){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new te,this._objectSubscribersStore=new te,this._sync=n,this._notifyTask=this._flushNotifications.bind(this),v.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=L.getCurrent();return e&&this._track(e),this._value}set value(e){if(Object.is(this._value,e))return;const n=this._value;this.version=this.version+1&q,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(n)}_track(e){if(ve(e)){e.addDependency(this);return}if(xe(e)){this._functionSubscribersStore.add(e);return}Ne(e)&&this._objectSubscribersStore.add(e)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!G.isBatching?this._flushNotifications():G.schedule(this._notifyTask)}_flushNotifications(){if(!this._isNotificationScheduled)return;const e=this._pendingOldValue,n=this._value;this._pendingOldValue=void 0,this._isNotificationScheduled=!1,this._notifySubscribers(n,e)}peek(){return this._value}dispose(){this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this._value=void 0}}function Ue(t,e={}){return new qe(t,e.sync??!1)}class le{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=C?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return C&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,n){if(!(n&&e===n)){if(Object.isFrozen(e)){C&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){C&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){C&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),C&&this.stats&&this.stats.released++}}getStats(){if(!C||!this.stats)return null;const{acquired:e,released:n,rejected:s}=this.stats,i=s.frozen+s.tooLarge+s.poolFull;return{acquired:e,released:n,rejected:s,leaked:e-n-i,poolSize:this.pool.length}}reset(){this.pool.length=0,C&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const g=Object.freeze([]),N=Object.freeze([]),S=Object.freeze([]),M=new le,j=new le,U=new le;function ze(t,e,n,s){if(e!==g&&n!==N)for(let r=0;r<e.length;r++){const o=e[r];o&&(o._tempUnsub=n[r])}const i=j.acquire();i.length=t.length;for(let r=0;r<t.length;r++){const o=t[r];o&&(o._tempUnsub?(i[r]=o._tempUnsub,o._tempUnsub=void 0):(v.checkCircular(o,s),i[r]=o.subscribe(s)))}if(e!==g)for(let r=0;r<e.length;r++){const o=e[r];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return n!==N&&j.release(n),i}function X(t,e,n){if(t instanceof TypeError)return new e(`Type error (${n}): ${t.message}`,t);if(t instanceof ReferenceError)return new e(`Reference error (${n}): ${t.message}`,t);if(t instanceof A)return t;const s=t instanceof Error?t.message:String(t),i=t instanceof Error?t:null;return new e(`Unexpected error (${n}): ${s}`,i)}class Re extends ge{constructor(e,n={}){if(typeof e!="function")throw new z(E.COMPUTED_MUST_BE_FUNCTION);if(super(),this._value=void 0,this.flags=p.DIRTY|p.IDLE,this._error=null,this._promiseId=0,this._equal=n.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in n?n.defaultValue:pe,this._hasDefaultValue=this._defaultValue!==pe,this._onError=n.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new te,this._objectSubscribersStore=new te,this._dependencies=g,this._dependencyVersions=S,this._unsubscribes=N,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(s=>s(),s=>console.error(s)),this._objectSubscribersStore.forEachSafe(s=>s.execute(),s=>console.error(s))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:s=>{}}),v.attachDebugInfo(this,"computed",this.id),v.enabled){const s=this;s.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,s.isDirty=()=>this._isDirty(),s.dependencies=this._dependencies,s.stateFlags=this._getFlagsAsString()}if(n.lazy===!1)try{this._recompute()}catch{}}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=this._computeValue();return this._registerTracking(),e}peek(){return this._value}get state(){return this._getAsyncState()}get hasError(){return this._isRejected()}get lastError(){return this._error}get isPending(){return this._isPending()}get isResolved(){return this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S)}dispose(){if(this._unsubscribes!==N){for(let e=0;e<this._unsubscribes.length;e++){const n=this._unsubscribes[e];n&&n()}j.release(this._unsubscribes),this._unsubscribes=N}this._dependencies!==g&&(M.release(this._dependencies),this._dependencies=g),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=p.DIRTY|p.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID}_isDirty(){return(this.flags&p.DIRTY)!==0}_setDirty(){this.flags|=p.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&p.IDLE)!==0}_setIdle(){this.flags|=p.IDLE,this.flags&=-29}_isPending(){return(this.flags&p.PENDING)!==0}_setPending(){this.flags|=p.PENDING,this.flags&=-27}_isResolved(){return(this.flags&p.RESOLVED)!==0}_setResolved(){this.flags|=p.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&p.REJECTED)!==0}_setRejected(){this.flags|=p.REJECTED|p.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&p.RECOMPUTING)!==0}_setRecomputing(e){const n=p.RECOMPUTING;this.flags=this.flags&~n|-Number(e)&n}_getAsyncState(){return this._isResolved()?W.RESOLVED:this._isPending()?W.PENDING:this._isRejected()?W.REJECTED:W.IDLE}_getFlagsAsString(){const e=[];return this._isDirty()&&e.push("DIRTY"),this._isIdle()&&e.push("IDLE"),this._isPending()&&e.push("PENDING"),this._isResolved()&&e.push("RESOLVED"),this._isRejected()&&e.push("REJECTED"),this._isRecomputing()&&e.push("RECOMPUTING"),e.join(" | ")}_computeValue(){return this._isRecomputing()?this._value:((this._isDirty()||this._isIdle())&&this._recompute(),this._isPending()?this._handlePending():this._isRejected()?this._handleRejected():this._value)}_recompute(){if(this._isRecomputing())return;this._setRecomputing(!0);const e=this._prepareComputationContext();let n=!1;try{const s=L.run(this._trackable,this._fn);Ie(s)?(this._commitDependencies(e),n=!0,this._handleAsyncComputation(s)):(this._commitDependencies(e),n=!0,this._handleSyncResult(s))}catch(s){this._commitDependencies(e),n=!0,this._handleComputationError(s)}finally{this._cleanupContext(e,n),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,n=this._dependencyVersions,s=M.acquire(),i=U.acquire(),r=Se(),o={depCount:0},u=f=>{f._lastSeenEpoch!==r&&(f._lastSeenEpoch=r,o.depCount<s.length?(s[o.depCount]=f,i[o.depCount]=f.version):(s.push(f),i.push(f.version)),o.depCount++)},l=this._trackable.addDependency;return this._trackable.addDependency=u,{prevDeps:e,prevVersions:n,nextDeps:s,nextVersions:i,originalAdd:l,state:o}}_commitDependencies(e){const{nextDeps:n,nextVersions:s,state:i,prevDeps:r}=e;n.length=i.depCount,s.length=i.depCount,this._unsubscribes=ze(n,r,this._unsubscribes,this),this._dependencies=n,this._dependencyVersions=s}_cleanupContext(e,n){this._trackable.addDependency=e.originalAdd,n?(e.prevDeps!==g&&M.release(e.prevDeps),e.prevVersions!==S&&U.release(e.prevVersions)):(M.release(e.nextDeps),U.release(e.nextVersions))}_handleSyncResult(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&q),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1)}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._promiseId=this._promiseId>=this.MAX_PROMISE_ID?1:this._promiseId+1;const n=this._promiseId;e.then(s=>{n===this._promiseId&&this._handleAsyncResolution(s)}).catch(s=>{n===this._promiseId&&this._handleAsyncRejection(s)})}_handleAsyncResolution(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&q),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1)}_handleAsyncRejection(e){const n=X(e,z,E.COMPUTED_ASYNC_COMPUTATION_FAILED);if(this._error=n,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(n)}catch(s){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,s)}this._notifySubscribers(void 0,void 0)}_handleComputationError(e){const n=X(e,z,E.COMPUTED_COMPUTATION_FAILED);if(this._error=n,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(n)}catch(s){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,s)}throw n}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new z(E.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){const e=L.getCurrent();if(e){if(ve(e)){e.addDependency(this);return}if(xe(e)){this._functionSubscribersStore.add(e);return}Ne(e)&&this._objectSubscribersStore.add(e)}}}Object.freeze(Re.prototype);function Te(t,e={}){return new Re(t,e)}class Xe extends me{constructor(e,n={}){super(),this.run=()=>{if(this.isDisposed)throw new k(E.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==N){for(let s=0;s<this._unsubscribes.length;s++){const i=this._unsubscribes[s];i&&i()}j.release(this._unsubscribes),this._unsubscribes=N}this._dependencies!==g&&(M.release(this._dependencies),this._dependencies=g),this._dependencyVersions!==S&&(U.release(this._dependencyVersions),this._dependencyVersions=S)}},this.addDependency=s=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const i=this._currentEpoch;if(s._lastSeenEpoch===i)return;s._lastSeenEpoch=i,this._nextDeps.push(s),this._nextVersions.push(s.version),s._tempUnsub?(this._nextUnsubs.push(s._tempUnsub),s._tempUnsub=void 0):this._subscribeTo(s)}},this.execute=()=>{if(this.isDisposed||this.isExecuting||!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const s=this._prepareEffectContext();let i=!1;try{const r=L.run(this,this._fn);this._commitEffect(s),i=!0,this._checkLoopWarnings(),Ie(r)?r.then(o=>{!this.isDisposed&&typeof o=="function"&&(this._cleanup=o)}).catch(o=>{console.error(X(o,k,E.EFFECT_EXECUTION_FAILED))}):this._cleanup=typeof r=="function"?r:null}catch(r){i=!0,console.error(X(r,k,E.EFFECT_EXECUTION_FAILED)),this._cleanup=null}finally{this._cleanupEffect(s,i),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=n.sync??!1,this._maxExecutions=n.maxExecutionsPerSecond??P.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=n.maxExecutionsPerFlush??P.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=n.trackModifications??!1,this._cleanup=null,this._dependencies=g,this._dependencyVersions=S,this._unsubscribes=N,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._history=C?[]:null,this._executionCount=0,v.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,n=this._dependencyVersions,s=this._unsubscribes,i=M.acquire(),r=U.acquire(),o=j.acquire(),u=Se();if(e!==g&&s!==N)for(let l=0;l<e.length;l++){const f=e[l];f&&(f._tempUnsub=s[l])}return this._nextDeps=i,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=u,{prevDeps:e,prevVersions:n,prevUnsubs:s,nextDeps:i,nextVersions:r,nextUnsubs:o}}_commitEffect(e){const n=e.nextDeps.length;e.nextDeps.length=n,e.nextVersions.length=n,this._dependencies=e.nextDeps,this._dependencyVersions=e.nextVersions,this._unsubscribes=e.nextUnsubs}_cleanupEffect(e,n){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,n){if(e.prevDeps!==g){for(let s=0;s<e.prevDeps.length;s++){const i=e.prevDeps[s];i?._tempUnsub&&(i._tempUnsub(),i._tempUnsub=void 0)}M.release(e.prevDeps)}e.prevUnsubs!==N&&j.release(e.prevUnsubs),e.prevVersions!==S&&U.release(e.prevVersions)}else{M.release(e.nextDeps),U.release(e.nextVersions);for(let s=0;s<e.nextUnsubs.length;s++)e.nextUnsubs[s]?.();if(j.release(e.nextUnsubs),e.prevDeps!==g)for(let s=0;s<e.prevDeps.length;s++){const i=e.prevDeps[s];i&&(i._tempUnsub=void 0)}}}_subscribeTo(e){try{const n=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():G.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(n)}catch(n){console.error(X(n,k,E.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&K.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&K.EXECUTING)!==0}_setDisposed(){this.flags|=K.DISPOSED}_setExecuting(e){const n=K.EXECUTING;this.flags=this.flags&~n|-Number(e)&n}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(X(e,k,E.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==$&&(this._lastFlushEpoch=$,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),je()>P.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history){const e=Date.now();this._history.push(e),this._history.length>P.MAX_EXECUTIONS_PER_SECOND+10&&this._history.shift(),this._checkTimestampLoop(e)}}_checkTimestampLoop(e){const n=this._history;if(!n||this._maxExecutions<=0)return;const s=e-Fe.ONE_SECOND_MS;let i=0;for(let r=n.length-1;r>=0&&!(n[r]<s);r--)i++;if(i>this._maxExecutions){const r=new k(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(r),C)throw r}}_throwInfiniteLoopError(e){const n=new k(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${ue}`);throw this.dispose(),console.error(n),n}_shouldExecute(){if(this._dependencies===g||this._dependencyVersions===S)return!0;for(let e=0;e<this._dependencies.length;e++){const n=this._dependencies[e];if(n){if("value"in n)try{he(()=>n.value)}catch{return!0}if(n.version!==this._dependencyVersions[e])return!0}}return!1}_checkLoopWarnings(){if(this._trackModifications&&v.enabled){const e=this._dependencies;for(let n=0;n<e.length;n++){const s=e[n];s&&s._modifiedAtEpoch===this._currentEpoch&&v.warn(!0,`Effect is reading a dependency (${v.getDebugName(s)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function m(t,e={}){if(typeof t!="function")throw new k(E.EFFECT_MUST_BE_FUNCTION);const n=new Xe(t,e);return n.execute(),n}function Qe(){if(typeof window<"u"){const t=window.__ATOM_DEBUG__;if(typeof t=="boolean")return t}try{if(typeof process<"u"&&process.env&&process.env.NODE_ENV==="development")return!0}catch{}return!1}let V=Qe();const h={get enabled(){return V},set enabled(t){V=t},log(t,...e){V&&console.log(`[atom-effect-jquery] ${t}:`,...e)},atomChanged(t,e,n){V&&console.log(`[atom-effect-jquery] Atom "${t||"anonymous"}" changed:`,e,"→",n)},domUpdated(t,e,n){if(!V)return;const s=Ge(t);console.log(`[atom-effect-jquery] DOM updated: ${s}.${e} =`,n),He(t)},cleanup(t){V&&console.log(`[atom-effect-jquery] Cleanup: ${t}`)},warn(...t){V&&console.warn("[atom-effect-jquery]",...t)}};function Ge(t){const e=t[0];if(!e)return"unknown";if(e.id)return`#${e.id}`;if(e.className){const n=String(e.className).split(" ").filter(Boolean).join(".");return`${e.tagName.toLowerCase()}.${n}`}return e.tagName.toLowerCase()}function He(t){const e=t[0];if(!e||!document.contains(e))return;const n="atom_debug_timer",s="atom_debug_cleanup_timer",i="atom_debug_org_style";clearTimeout(t.data(n)),clearTimeout(t.data(s)),t.data(i)||t.data(i,{outline:t.css("outline"),outlineOffset:t.css("outline-offset"),transition:t.css("transition")}),t.css({outline:"2px solid rgba(255, 68, 68, 0.8)","outline-offset":"1px",transition:"none"});const r=setTimeout(()=>{const o=t.data(i);t.css("transition","outline 0.5s ease-out"),requestAnimationFrame(()=>{t.css({outline:o?.outline||"","outline-offset":o?.outlineOffset||""});const u=setTimeout(()=>{t.css("transition",o?.transition||""),t.removeData(n),t.removeData(s),t.removeData(i)},500);t.data(s,u)})},100);t.data(n,r)}const Ye=new WeakMap;function Ae(t,e={}){const n=Ue(t,e);return e.name&&Ye.set(n,{name:e.name}),n}Object.defineProperty(Ae,"debug",{get(){return h.enabled},set(t){h.enabled=t}});function Je(){return new Promise(t=>setTimeout(t,0))}c.extend({atom:Ae,computed:Te,effect:m,batch:x,untracked:he,isAtom:ae,isComputed:Ce,isReactive:t=>ae(t)||Ce(t),nextTick:Je});function d(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t}function b(t){return d(t)?t.value:t}function fe(t){if(t.id)return`#${t.id}`;if(t.className){const e=String(t.className).split(/\s+/).filter(Boolean).join(".");return e?`${t.tagName.toLowerCase()}.${e}`:t.tagName.toLowerCase()}return t.tagName.toLowerCase()}class We{effects=new WeakMap;cleanups=new WeakMap;boundElements=new WeakSet;preservedNodes=new WeakSet;keep(e){this.preservedNodes.add(e)}isKept(e){return this.preservedNodes.has(e)}trackEffect(e,n){const s=this.effects.get(e)||[];s.push(n),this.effects.set(e,s),this.boundElements.add(e)}trackCleanup(e,n){const s=this.cleanups.get(e)||[];s.push(n),this.cleanups.set(e,s),this.boundElements.add(e)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.has(e))return;h.cleanup(fe(e));const n=this.effects.get(e);n&&(this.effects.delete(e),n.forEach(i=>{try{i.dispose()}catch(r){h.warn("Effect dispose error:",r)}}));const s=this.cleanups.get(e);s&&(this.cleanups.delete(e),s.forEach(i=>{try{i()}catch(r){h.warn("Cleanup error:",r)}})),this.boundElements.delete(e)}cleanupTree(e){e.querySelectorAll("*").forEach(s=>{this.boundElements.has(s)&&this.cleanup(s)}),this.cleanup(e)}}const a=new We;let H=null;function Oe(t=document.body){H||(H=new MutationObserver(e=>{for(const n of e)n.removedNodes.forEach(s=>{a.isKept(s)||s instanceof Element&&a.cleanupTree(s)})}),H.observe(t,{childList:!0,subtree:!0}))}function Ke(){H?.disconnect(),H=null}c.fn.atomText=function(t,e){return this.each(function(){const n=c(this);if(d(t)){const s=m(()=>{const i=b(t),r=e?e(i):String(i??"");n.text(r),h.domUpdated(n,"text",r)});a.trackEffect(this,s)}else{const s=e?e(t):String(t??"");n.text(s)}})},c.fn.atomHtml=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=String(b(t)??"");e.html(s),h.domUpdated(e,"html",s)});a.trackEffect(this,n)}else e.html(String(t??""))})},c.fn.atomClass=function(t,e){return this.each(function(){const n=c(this);if(d(e)){const s=m(()=>{const i=!!b(e);n.toggleClass(t,i),h.domUpdated(n,`class.${t}`,i)});a.trackEffect(this,s)}else n.toggleClass(t,!!e)})},c.fn.atomCss=function(t,e,n){return this.each(function(){const s=c(this);if(d(e)){const i=m(()=>{const r=b(e),o=n?`${r}${n}`:r;s.css(t,o),h.domUpdated(s,`css.${t}`,o)});a.trackEffect(this,i)}else s.css(t,n?`${e}${n}`:e)})},c.fn.atomAttr=function(t,e){return this.each(function(){const n=c(this),s=i=>{i==null||i===!1?n.removeAttr(t):i===!0?n.attr(t,t):n.attr(t,String(i)),h.domUpdated(n,`attr.${t}`,i)};if(d(e)){const i=m(()=>s(b(e)));a.trackEffect(this,i)}else s(e)})},c.fn.atomProp=function(t,e){return this.each(function(){const n=c(this);if(d(e)){const s=m(()=>{const i=b(e);n.prop(t,i),h.domUpdated(n,`prop.${t}`,i)});a.trackEffect(this,s)}else n.prop(t,e)})},c.fn.atomShow=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=!!b(t);e.toggle(s),h.domUpdated(e,"show",s)});a.trackEffect(this,n)}else e.toggle(!!t)})},c.fn.atomHide=function(t){return this.each(function(){const e=c(this);if(d(t)){const n=m(()=>{const s=!b(t);e.toggle(s),h.domUpdated(e,"hide",!s)});a.trackEffect(this,n)}else e.toggle(!t)})},c.fn.atomVal=function(t,e={}){const{debounce:n,event:s="input",parse:i=o=>o,format:r=o=>String(o??"")}=e;return this.each(function(){const o=c(this);let u=null,l=!1,f=!1,O=!1;const R=()=>{f=!0},T=()=>{f=!1,J()};o.on("compositionstart",R),o.on("compositionend",T);const J=()=>{l||O||x(()=>{t.value=i(o.val())})},I=()=>{f||O||l||(n?(u&&clearTimeout(u),u=window.setTimeout(J,n)):J())};o.on(s,I),o.on("change",I);const ne=m(()=>{const D=r(t.value);o.val()!==D&&(l=!0,O=!0,o.val(D),h.domUpdated(o,"val",D),O=!1,l=!1)});a.trackEffect(this,ne),a.trackCleanup(this,()=>{o.off(s,I),o.off("change",I),o.off("compositionstart",R),o.off("compositionend",T),u&&clearTimeout(u)})})},c.fn.atomChecked=function(t){return this.each(function(){const e=c(this);let n=!1;const s=()=>{n||x(()=>{t.value=e.prop("checked")})};e.on("change",s),a.trackCleanup(this,()=>e.off("change",s));const i=m(()=>{n=!0,e.prop("checked",t.value),h.domUpdated(e,"checked",t.value),n=!1});a.trackEffect(this,i)})},c.fn.atomOn=function(t,e){return this.each(function(){const n=c(this),s=function(i){x(()=>e.call(this,i))};n.on(t,s),a.trackCleanup(this,()=>n.off(t,s))})},c.fn.atomUnbind=function(){return this.each(function(){a.cleanupTree(this)})},c.fn.atomBind=function(t){return this.each(function(){const e=c(this),n=[];if(t.text!==void 0&&(d(t.text)?n.push(()=>{const s=String(b(t.text)??"");e.text(s),h.domUpdated(e,"text",s)}):e.text(String(t.text??""))),t.html!==void 0&&(d(t.html)?n.push(()=>{const s=String(b(t.html)??"");e.html(s),h.domUpdated(e,"html",s)}):e.html(String(t.html??""))),t.class)for(const[s,i]of Object.entries(t.class))d(i)?n.push(()=>{const r=!!b(i);e.toggleClass(s,r),h.domUpdated(e,`class.${s}`,r)}):e.toggleClass(s,!!i);if(t.css)for(const[s,i]of Object.entries(t.css))if(Array.isArray(i)){const[r,o]=i;d(r)?n.push(()=>{const u=`${b(r)}${o}`;e.css(s,u),h.domUpdated(e,`css.${s}`,u)}):e.css(s,`${r}${o}`)}else d(i)?n.push(()=>{const r=b(i);e.css(s,r),h.domUpdated(e,`css.${s}`,r)}):e.css(s,i);if(t.attr)for(const[s,i]of Object.entries(t.attr)){const r=o=>{o==null||o===!1?e.removeAttr(s):o===!0?e.attr(s,s):e.attr(s,String(o)),h.domUpdated(e,`attr.${s}`,o)};d(i)?n.push(()=>r(b(i))):r(i)}if(t.prop)for(const[s,i]of Object.entries(t.prop))d(i)?n.push(()=>{const r=b(i);e.prop(s,r),h.domUpdated(e,`prop.${s}`,r)}):e.prop(s,i);if(t.show!==void 0&&(d(t.show)?n.push(()=>{const s=!!b(t.show);e.toggle(s),h.domUpdated(e,"show",s)}):e.toggle(!!t.show)),t.hide!==void 0&&(d(t.hide)?n.push(()=>{const s=!b(t.hide);e.toggle(s),h.domUpdated(e,"hide",!s)}):e.toggle(!t.hide)),t.val!==void 0){const s=t.val;let i=!1,r=!1;const o=()=>{r=!0},u=()=>{r=!1,i||x(()=>{s.value=e.val()})};e.on("compositionstart",o),e.on("compositionend",u);const l=()=>{r||i||x(()=>{s.value=e.val()})};e.on("input change",l),a.trackCleanup(this,()=>{e.off("input change",l),e.off("compositionstart",o),e.off("compositionend",u)}),n.push(()=>{const f=String(s.value??"");e.val()!==f&&(i=!0,e.val(f),h.domUpdated(e,"val",f),i=!1)})}if(t.checked!==void 0){const s=t.checked;let i=!1;const r=()=>{i||x(()=>{s.value=e.prop("checked")})};e.on("change",r),a.trackCleanup(this,()=>e.off("change",r)),n.push(()=>{i=!0,e.prop("checked",s.value),h.domUpdated(e,"checked",s.value),i=!1})}if(t.on)for(const[s,i]of Object.entries(t.on)){const r=function(o){x(()=>i.call(this,o))};e.on(s,r),a.trackCleanup(this,()=>e.off(s,r))}n.forEach(s=>{const i=m(s);a.trackEffect(this,i)})})},c.fn.atomList=function(t,e){return this.each(function(){const n=c(this),s=fe(this),{key:i,render:r,bind:o,onAdd:u,onRemove:l,empty:f}=e,O=typeof i=="function"?i:I=>I[i],R=new Map;let T=null;const J=m(()=>{const I=t.value,ne=new Set;if(h.log("list",`${s} updating with ${I.length} items`),I.length===0&&f){T||(T=c(f),n.append(T));for(const[,y]of R)y.$el.remove(),a.cleanup(y.$el[0]);R.clear();return}else T&&(T.remove(),T=null);let D=null;for(let y=0;y<I.length;y++){const w=I[y],B=O(w,y);ne.add(B);const Q=R.get(B);if(Q){const ie=Q.$el[0],F=D?D[0]:null;(F?ie.previousSibling===F:ie===n[0].firstChild)||(D?D.after(Q.$el):n.prepend(Q.$el)),Q.item=w,D=Q.$el}else{const ie=r(w,y),F=c(ie);D?D.after(F):n.prepend(F),R.set(B,{$el:F,item:w}),o&&o(F,w,y),u&&u(F),h.log("list",`${s} added item:`,B),D=F}}for(const[y,w]of R)if(!ne.has(y)){const B=()=>{w.$el.remove(),a.cleanup(w.$el[0]),R.delete(y),h.log("list",`${s} removed item:`,y)};l?Promise.resolve(l(w.$el)).then(B):B()}});a.trackEffect(this,J),a.trackCleanup(this,()=>{R.clear(),T?.remove()})})};const se=new WeakMap;c.fn.atomMount=function(t,e={}){return this.each(function(){const n=c(this),s=fe(this),i=se.get(this);i&&(h.log("mount",`${s} unmounting existing component`),i()),h.log("mount",`${s} mounting component`);let r;try{r=t(n,e)}catch(l){console.error("[atom-effect-jquery] Mount error:",l);return}let o=!1;const u=()=>{if(!o){if(o=!0,h.log("mount",`${s} full cleanup`),typeof r=="function")try{r()}catch{}a.cleanupTree(this),se.delete(this)}};se.set(this,u),a.trackCleanup(this,u)})},c.fn.atomUnmount=function(){return this.each(function(){se.get(this)?.()})};const Y=new WeakMap;let we=!1;function de(){if(we)return;we=!0;const t=c.fn.on,e=c.fn.off,n=c.fn.remove,s=c.fn.empty,i=c.fn.detach;c.fn.remove=function(r){return(r?this.filter(r):this).each(function(){a.cleanupTree(this)}),n.call(this,r)},c.fn.empty=function(){return this.each(function(){this.querySelectorAll("*").forEach(o=>a.cleanup(o))}),s.call(this)},c.fn.detach=function(r){return(r?this.filter(r):this).each(function(){a.keep(this)}),i.call(this,r)},c.fn.on=function(...r){let o=-1;for(let u=r.length-1;u>=0;u--)if(typeof r[u]=="function"){o=u;break}if(o!==-1){const u=r[o];let l;Y.has(u)?l=Y.get(u):(l=function(...f){let O;return x(()=>{O=u.apply(this,f)}),O},Y.set(u,l)),r[o]=l}return t.apply(this,r)},c.fn.off=function(...r){let o=-1;for(let u=r.length-1;u>=0;u--)if(typeof r[u]=="function"){o=u;break}if(o!==-1){const u=r[o];Y.has(u)&&(r[o]=Y.get(u))}return e.apply(this,r)}}const Ze=de;de(),c(()=>{Oe(document.body)}),_.default=c,_.atom=Ue,_.batch=x,_.computed=Te,_.disableAutoCleanup=Ke,_.effect=m,_.enableAutoCleanup=Oe,_.enablejQueryBatching=Ze,_.enablejQueryOverrides=de,_.registry=a,_.untracked=he,Object.defineProperties(_,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
2
2
  //# sourceMappingURL=atom-effect-jquery.min.js.map