atom-effect-jquery 0.1.0 → 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jeongil Suk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # atom-effect-jquery
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/atom-effect-jquery.svg)](https://www.npmjs.com/package/atom-effect-jquery)
4
+ [![License](https://img.shields.io/npm/l/atom-effect-jquery.svg)](https://github.com/but212/atom-effect-jquery/blob/main/LICENSE)
5
+
3
6
  **Reactive jQuery bindings powered by [atom-effect](https://github.com/but212/atom-effect).**
4
7
 
5
8
  `atom-effect-jquery` brings modern, fine-grained reactivity to jQuery applications. It allows you to bind DOM elements directly to atoms, ensuring efficient updates without manual DOM manipulation. It also features automatic cleanup of effects when elements are removed from the DOM, resolving one of the biggest pain points in jQuery development (memory leaks).
@@ -15,27 +18,45 @@
15
18
 
16
19
  ## Installation
17
20
 
21
+ ### NPM
22
+
18
23
  ```bash
19
24
  npm install atom-effect-jquery jquery @but212/atom-effect
20
25
  # or
21
26
  pnpm add atom-effect-jquery jquery @but212/atom-effect
22
27
  ```
23
28
 
29
+ ### CDN
30
+
31
+ ```html
32
+ <!-- Load jQuery -->
33
+ <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
34
+ <!-- Load atom-effect-jquery -->
35
+ <script src="https://cdn.jsdelivr.net/npm/atom-effect-jquery@0.1.1"></script>
36
+ ```
37
+
24
38
  ## Basic Usage
25
39
 
26
- ```typescript
27
- import $ from 'jquery';
28
- import 'atom-effect-jquery';
40
+ ```javascript
41
+ // If using NPM:
42
+ // import $ from 'jquery';
43
+ // import 'atom-effect-jquery';
29
44
 
30
45
  // 1. Create State
31
46
  const count = $.atom(0);
47
+ const doubled = $.computed(() => count.value * 2);
32
48
 
33
49
  // 2. Bind to DOM
34
50
  $('#count').atomText(count);
51
+ $('#doubled').atomText(doubled);
35
52
 
36
53
  // 3. Update State (DOM updates automatically)
37
- $('#increment').on('click', () => {
38
- count.value++;
54
+ $('#increment').on('click', () => count.value++);
55
+ $('#decrement').on('click', () => count.value--);
56
+
57
+ // 4. React to changes (Side Effects)
58
+ $.effect(() => {
59
+ console.log(`Current count: ${count.value}, Doubled: ${doubled.value}`);
39
60
  });
40
61
  ```
41
62
 
@@ -1,2 +1,2 @@
1
- (function(l,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],c):(l=typeof globalThis<"u"?globalThis:l||self,c(l.AtomEffectJQuery={},l.jQuery))})(this,(function(l,c){"use strict";var et=Object.defineProperty;var tt=(l,c,q)=>c in l?et(l,c,{enumerable:!0,configurable:!0,writable:!0,value:q}):l[c]=q;var oe=(l,c,q)=>tt(l,typeof c!="symbol"?c+"":c,q);var ke;const q={ONE_SECOND_MS:1e3},K={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},Z={DISPOSED:1,EXECUTING:2},p={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},pe={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},z=1073741823,I=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production";class A extends Error{constructor(e,s=null,n=!0){super(e),this.name="AtomError",this.cause=s,this.recoverable=n,this.timestamp=new Date}}class X extends A{constructor(e,s=null){super(e,s,!0),this.name="ComputedError"}}class F extends A{constructor(e,s=null){super(e,s,!1),this.name="EffectError"}}class $ extends A{constructor(e,s=null){super(e,s,!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"},ce=Symbol("debugName"),Me=Symbol("id"),ue=Symbol("type"),be=Symbol("noDefaultValue");function Pe(t){return"dependencies"in t&&Array.isArray(t.dependencies)}let Ee=0;function ge(t,e,s){if(t._visitedEpoch!==s){if(t._visitedEpoch=s,t===e)throw new X("Indirect circular dependency detected");if(Pe(t)){const n=t.dependencies;for(let i=0;i<n.length;i++){const r=n[i];r&&ge(r,e,s)}}}}const v={enabled:typeof process<"u"&&((ke=process.env)==null?void 0:ke.NODE_ENV)==="development",maxDependencies:pe.MAX_DEPENDENCIES,warnInfiniteLoop:pe.WARN_INFINITE_LOOP,warn(t,e){this.enabled&&t&&console.warn(`[Atom Effect] ${e}`)},checkCircular(t,e){if(t===e)throw new X("Direct circular dependency detected");this.enabled&&(Ee++,ge(t,e,Ee))},attachDebugInfo(t,e,s){if(!this.enabled)return;const n=t;n[ce]=`${e}_${s}`,n[Me]=s,n[ue]=e},getDebugName(t){if(t!=null&&ce in t)return t[ce]},getDebugType(t){if(t!=null&&ue in t)return t[ue]}};let Le=1;const je=()=>Le++;class me{constructor(){this.id=je()&z,this.flags=0}}class Se 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,s){this._functionSubscribers.forEachSafe(n=>n(e,s),n=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,n))),this._objectSubscribers.forEachSafe(n=>n.execute(),n=>console.error(new A(E.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,n)))}}let he=0;function ye(){return he=(he+1|0)&z,he}let ee=0,ae=0,te=!1;function De(){return te?(I&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(te=!0,ee=ee+1&z,ae=0,!0)}function Ce(){te=!1}function Ve(){return te?++ae:0}class Be{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 $("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,s=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,queueMicrotask(()=>{const n=De();this._processJobs(e,s),this.isProcessing=!1,n&&Ce(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=De();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&Ce()}}_mergeBatchQueue(){if(this._epoch++,this.batchQueueSize>0){for(let e=0;e<this.batchQueueSize;e++){const s=this.batchQueue[e];s&&s._nextEpoch!==this._epoch&&(s._nextEpoch=this._epoch,this.queue[this.queueSize++]=s)}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,s=this.queueSize;this.queue=this.queue===this.queueA?this.queueB:this.queueA,this.queueSize=0,this._epoch++,this._processJobs(e,s)}_handleFlushOverflow(){console.error(new $(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,s){var n;for(let i=0;i<s;i++)try{(n=e[i])==null||n.call(e)}catch(r){console.error(new $("Error occurred during scheduler execution",r))}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 $(`Max flush iterations must be at least ${M.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const J=new Be;function N(t){if(typeof t!="function")throw new A("Batch callback must be a function");J.startBatch();try{return t()}finally{J.endBatch()}}const P={current:null,run(t,e){const s=this.current;this.current=t;try{return e()}finally{this.current=s}},getCurrent(){return this.current}};function le(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 se{constructor(){this.subscribers=null}add(e){if(this.subscribers||(this.subscribers=[]),this.subscribers.indexOf(e)!==-1)return()=>{};this.subscribers.push(e);let s=!1;return()=>{s||(s=!0,this.remove(e))}}remove(e){if(!this.subscribers)return!1;const s=this.subscribers.indexOf(e);if(s===-1)return!1;const n=this.subscribers.length-1;return s!==n&&(this.subscribers[s]=this.subscribers[n]),this.subscribers.pop(),!0}has(e){return this.subscribers?this.subscribers.indexOf(e)!==-1:!1}forEach(e){if(this.subscribers)for(let s=0;s<this.subscribers.length;s++)e(this.subscribers[s],s)}forEachSafe(e,s){if(this.subscribers)for(let n=0;n<this.subscribers.length;n++)try{e(this.subscribers[n],n)}catch(i){s?s(i):console.error("[SubscriberManager] Error in subscriber callback:",i)}}get size(){var e;return((e=this.subscribers)==null?void 0:e.length)??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}function fe(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t&&typeof t.subscribe=="function"}function Ie(t){if(v.enabled&&(t==null||typeof t=="object")){const e=v.getDebugType(t);if(e)return e==="computed"}return fe(t)&&"invalidate"in t&&typeof t.invalidate=="function"}function xe(t){return t!=null&&typeof t.then=="function"}function qe(t){return typeof t=="object"&&t!==null}function ve(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&typeof t.addDependency=="function"}function Ne(t){return typeof t=="function"&&typeof t.addDependency!="function"}function Ue(t){return qe(t)&&typeof t.execute=="function"}class ze extends Se{constructor(e,s){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new se,this._objectSubscribersStore=new se,this._sync=s,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 s=this._value;this.version=this.version+1&z,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(s)}_track(e){if(ve(e)){e.addDependency(this);return}if(Ne(e)){this._functionSubscribersStore.add(e);return}Ue(e)&&this._objectSubscribersStore.add(e)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!J.isBatching?this._flushNotifications():J.schedule(this._notifyTask)}_flushNotifications(){if(!this._isNotificationScheduled)return;const e=this._pendingOldValue,s=this._value;this._pendingOldValue=void 0,this._isNotificationScheduled=!1,this._notifySubscribers(s,e)}peek(){return this._value}dispose(){this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this._value=void 0}}function Re(t,e={}){return new ze(t,e.sync??!1)}class de{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=I?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return I&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,s){if(!(s&&e===s)){if(Object.isFrozen(e)){I&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){I&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){I&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),I&&this.stats&&this.stats.released++}}getStats(){if(!I||!this.stats)return null;const{acquired:e,released:s,rejected:n}=this.stats,i=n.frozen+n.tooLarge+n.poolFull;return{acquired:e,released:s,rejected:n,leaked:e-s-i,poolSize:this.pool.length}}reset(){this.pool.length=0,I&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const m=Object.freeze([]),U=Object.freeze([]),S=Object.freeze([]),k=new de,L=new de,R=new de;function Xe(t,e,s,n){if(e!==m&&s!==U)for(let r=0;r<e.length;r++){const o=e[r];o&&(o._tempUnsub=s[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,n),i[r]=o.subscribe(n)))}if(e!==m)for(let r=0;r<e.length;r++){const o=e[r];o!=null&&o._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return s!==U&&L.release(s),i}function Q(t,e,s){if(t instanceof TypeError)return new e(`Type error (${s}): ${t.message}`,t);if(t instanceof ReferenceError)return new e(`Reference error (${s}): ${t.message}`,t);if(t instanceof A)return t;const n=t instanceof Error?t.message:String(t),i=t instanceof Error?t:null;return new e(`Unexpected error (${s}): ${n}`,i)}class Te extends Se{constructor(e,s={}){if(typeof e!="function")throw new X(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=s.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in s?s.defaultValue:be,this._hasDefaultValue=this._defaultValue!==be,this._onError=s.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new se,this._objectSubscribersStore=new se,this._dependencies=m,this._dependencyVersions=S,this._unsubscribes=U,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(n=>n(),n=>console.error(n)),this._objectSubscribersStore.forEachSafe(n=>n.execute(),n=>console.error(n))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:n=>{}}),v.attachDebugInfo(this,"computed",this.id),v.enabled){const n=this;n.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,n.isDirty=()=>this._isDirty(),n.dependencies=this._dependencies,n.stateFlags=this._getFlagsAsString()}if(s.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&&(R.release(this._dependencyVersions),this._dependencyVersions=S)}dispose(){if(this._unsubscribes!==U){for(let e=0;e<this._unsubscribes.length;e++){const s=this._unsubscribes[e];s&&s()}L.release(this._unsubscribes),this._unsubscribes=U}this._dependencies!==m&&(k.release(this._dependencies),this._dependencies=m),this._dependencyVersions!==S&&(R.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 s=p.RECOMPUTING;this.flags=this.flags&~s|-Number(e)&s}_getAsyncState(){return this._isResolved()?K.RESOLVED:this._isPending()?K.PENDING:this._isRejected()?K.REJECTED:K.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 s=!1;try{const n=P.run(this._trackable,this._fn);xe(n)?(this._commitDependencies(e),s=!0,this._handleAsyncComputation(n)):(this._commitDependencies(e),s=!0,this._handleSyncResult(n))}catch(n){this._commitDependencies(e),s=!0,this._handleComputationError(n)}finally{this._cleanupContext(e,s),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,s=this._dependencyVersions,n=k.acquire(),i=R.acquire(),r=ye(),o={depCount:0},a=f=>{f._lastSeenEpoch!==r&&(f._lastSeenEpoch=r,o.depCount<n.length?(n[o.depCount]=f,i[o.depCount]=f.version):(n.push(f),i.push(f.version)),o.depCount++)},d=this._trackable.addDependency;return this._trackable.addDependency=a,{prevDeps:e,prevVersions:s,nextDeps:n,nextVersions:i,originalAdd:d,state:o}}_commitDependencies(e){const{nextDeps:s,nextVersions:n,state:i,prevDeps:r}=e;s.length=i.depCount,n.length=i.depCount,this._unsubscribes=Xe(s,r,this._unsubscribes,this),this._dependencies=s,this._dependencyVersions=n}_cleanupContext(e,s){this._trackable.addDependency=e.originalAdd,s?(e.prevDeps!==m&&k.release(e.prevDeps),e.prevVersions!==S&&R.release(e.prevVersions)):(k.release(e.nextDeps),R.release(e.nextVersions))}_handleSyncResult(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&z),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 s=this._promiseId;e.then(n=>{s===this._promiseId&&this._handleAsyncResolution(n)}).catch(n=>{s===this._promiseId&&this._handleAsyncRejection(n)})}_handleAsyncResolution(e){(!this._isResolved()||!this._equal(this._value,e))&&(this.version=this.version+1&z),this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1)}_handleAsyncRejection(e){const s=Q(e,X,E.COMPUTED_ASYNC_COMPUTATION_FAILED);if(this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(n){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}this._notifySubscribers(void 0,void 0)}_handleComputationError(e){const s=Q(e,X,E.COMPUTED_COMPUTATION_FAILED);if(this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(n){console.error(E.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}throw s}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new X(E.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){var e;if((e=this._error)!=null&&e.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(ve(e)){e.addDependency(this);return}if(Ne(e)){this._functionSubscribersStore.add(e);return}Ue(e)&&this._objectSubscribersStore.add(e)}}}Object.freeze(Te.prototype);function Ae(t,e={}){return new Te(t,e)}class Qe extends me{constructor(e,s={}){super(),this.run=()=>{if(this.isDisposed)throw new F(E.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==S&&(R.release(this._dependencyVersions),this._dependencyVersions=S),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==U){for(let n=0;n<this._unsubscribes.length;n++){const i=this._unsubscribes[n];i&&i()}L.release(this._unsubscribes),this._unsubscribes=U}this._dependencies!==m&&(k.release(this._dependencies),this._dependencies=m),this._dependencyVersions!==S&&(R.release(this._dependencyVersions),this._dependencyVersions=S)}},this.addDependency=n=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const i=this._currentEpoch;if(n._lastSeenEpoch===i)return;n._lastSeenEpoch=i,this._nextDeps.push(n),this._nextVersions.push(n.version),n._tempUnsub?(this._nextUnsubs.push(n._tempUnsub),n._tempUnsub=void 0):this._subscribeTo(n)}},this.execute=()=>{if(this.isDisposed||this.isExecuting||!this._shouldExecute())return;this._checkInfiniteLoop(),this._setExecuting(!0),this._safeCleanup();const n=this._prepareEffectContext();let i=!1;try{const r=P.run(this,this._fn);this._commitEffect(n),i=!0,this._checkLoopWarnings(),xe(r)?r.then(o=>{!this.isDisposed&&typeof o=="function"&&(this._cleanup=o)}).catch(o=>{console.error(Q(o,F,E.EFFECT_EXECUTION_FAILED))}):this._cleanup=typeof r=="function"?r:null}catch(r){i=!0,console.error(Q(r,F,E.EFFECT_EXECUTION_FAILED)),this._cleanup=null}finally{this._cleanupEffect(n,i),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=s.sync??!1,this._maxExecutions=s.maxExecutionsPerSecond??M.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=s.maxExecutionsPerFlush??M.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=s.trackModifications??!1,this._cleanup=null,this._dependencies=m,this._dependencyVersions=S,this._unsubscribes=U,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._history=I?[]:null,this._executionCount=0,v.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,s=this._dependencyVersions,n=this._unsubscribes,i=k.acquire(),r=R.acquire(),o=L.acquire(),a=ye();if(e!==m&&n!==U)for(let d=0;d<e.length;d++){const f=e[d];f&&(f._tempUnsub=n[d])}return this._nextDeps=i,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=a,{prevDeps:e,prevVersions:s,prevUnsubs:n,nextDeps:i,nextVersions:r,nextUnsubs:o}}_commitEffect(e){const s=e.nextDeps.length;e.nextDeps.length=s,e.nextVersions.length=s,this._dependencies=e.nextDeps,this._dependencyVersions=e.nextVersions,this._unsubscribes=e.nextUnsubs}_cleanupEffect(e,s){var n,i;if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,s){if(e.prevDeps!==m){for(let r=0;r<e.prevDeps.length;r++){const o=e.prevDeps[r];o!=null&&o._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}k.release(e.prevDeps)}e.prevUnsubs!==U&&L.release(e.prevUnsubs),e.prevVersions!==S&&R.release(e.prevVersions)}else{k.release(e.nextDeps),R.release(e.nextVersions);for(let r=0;r<e.nextUnsubs.length;r++)(i=(n=e.nextUnsubs)[r])==null||i.call(n);if(L.release(e.nextUnsubs),e.prevDeps!==m)for(let r=0;r<e.prevDeps.length;r++){const o=e.prevDeps[r];o&&(o._tempUnsub=void 0)}}}_subscribeTo(e){try{const s=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():J.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(s)}catch(s){console.error(Q(s,F,E.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&Z.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&Z.EXECUTING)!==0}_setDisposed(){this.flags|=Z.DISPOSED}_setExecuting(e){const s=Z.EXECUTING;this.flags=this.flags&~s|-Number(e)&s}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(Q(e,F,E.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==ee&&(this._lastFlushEpoch=ee,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),Ve()>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 s=this._history;if(!s||this._maxExecutions<=0)return;const n=e-q.ONE_SECOND_MS;let i=0;for(let r=s.length-1;r>=0&&!(s[r]<n);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),I)throw r}}_throwInfiniteLoopError(e){const s=new F(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${ae}`);throw this.dispose(),console.error(s),s}_shouldExecute(){if(this._dependencies===m||this._dependencyVersions===S)return!0;for(let e=0;e<this._dependencies.length;e++){const s=this._dependencies[e];if(s){if("value"in s)try{le(()=>s.value)}catch{return!0}if(s.version!==this._dependencyVersions[e])return!0}}return!1}_checkLoopWarnings(){if(this._trackModifications&&v.enabled){const e=this._dependencies;for(let s=0;s<e.length;s++){const n=e[s];n&&n._modifiedAtEpoch===this._currentEpoch&&v.warn(!0,`Effect is reading a dependency (${v.getDebugName(n)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function g(t,e={}){if(typeof t!="function")throw new F(E.EFFECT_MUST_BE_FUNCTION);const s=new Qe(t,e);return s.execute(),s}function Ge(){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=Ge();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,s){j&&console.log(`[atom-effect-jquery] Atom "${t||"anonymous"}" changed:`,e,"→",s)},domUpdated(t,e,s){if(!j)return;const n=He(t);console.log(`[atom-effect-jquery] DOM updated: ${n}.${e} =`,s),Je(t)},cleanup(t){j&&console.log(`[atom-effect-jquery] Cleanup: ${t}`)},warn(...t){j&&console.warn("[atom-effect-jquery]",...t)}};function He(t){const e=t[0];if(!e)return"unknown";if(e.id)return`#${e.id}`;if(e.className){const s=String(e.className).split(" ").filter(Boolean).join(".");return`${e.tagName.toLowerCase()}.${s}`}return e.tagName.toLowerCase()}function Je(t){const e=t.css("outline"),s=t.css("transition");t.css({outline:"2px solid #ff4444","outline-offset":"1px",transition:"outline 0.1s ease-out"}),setTimeout(()=>{t.css({outline:e||"","outline-offset":"",transition:s||""})},200)}const Ye=new WeakMap;function Oe(t,e={}){const s=Re(t,e);return e.name&&Ye.set(s,{name:e.name}),s}Object.defineProperty(Oe,"debug",{get(){return u.enabled},set(t){u.enabled=t}});function We(){return new Promise(t=>setTimeout(t,0))}c.extend({atom:Oe,computed:Ae,effect:g,batch:N,untracked:le,isAtom:fe,isComputed:Ie,isReactive:t=>fe(t)||Ie(t),nextTick:We});function _(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t}function b(t){return _(t)?t.value:t}function _e(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 Ke{constructor(){oe(this,"effects",new WeakMap);oe(this,"cleanups",new WeakMap);oe(this,"boundElements",new WeakSet)}trackEffect(e,s){const n=this.effects.get(e)||[];n.push(s),this.effects.set(e,n),this.boundElements.add(e)}trackCleanup(e,s){const n=this.cleanups.get(e)||[];n.push(s),this.cleanups.set(e,n),this.boundElements.add(e)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.has(e))return;u.cleanup(_e(e));const s=this.effects.get(e);s&&(this.effects.delete(e),s.forEach(i=>{try{i.dispose()}catch(r){u.warn("Effect dispose error:",r)}}));const n=this.cleanups.get(e);n&&(this.cleanups.delete(e),n.forEach(i=>{try{i()}catch(r){u.warn("Cleanup error:",r)}})),this.boundElements.delete(e)}cleanupTree(e){e.querySelectorAll("*").forEach(n=>{this.boundElements.has(n)&&this.cleanup(n)}),this.cleanup(e)}}const h=new Ke;let V=null;function we(t=document.body){V||(V=new MutationObserver(e=>{for(const s of e)s.removedNodes.forEach(n=>{n instanceof Element&&h.cleanupTree(n)})}),V.observe(t,{childList:!0,subtree:!0}))}function Ze(){V==null||V.disconnect(),V=null}c.fn.atomText=function(t,e){return this.each(function(){const s=c(this);if(_(t)){const n=g(()=>{const i=b(t),r=e?e(i):String(i??"");s.text(r),u.domUpdated(s,"text",r)});h.trackEffect(this,n)}else{const n=e?e(t):String(t??"");s.text(n)}})},c.fn.atomHtml=function(t){return this.each(function(){const e=c(this);if(_(t)){const s=g(()=>{const n=String(b(t)??"");e.html(n),u.domUpdated(e,"html",n)});h.trackEffect(this,s)}else e.html(String(t??""))})},c.fn.atomClass=function(t,e){return this.each(function(){const s=c(this);if(_(e)){const n=g(()=>{const i=!!b(e);s.toggleClass(t,i),u.domUpdated(s,`class.${t}`,i)});h.trackEffect(this,n)}else s.toggleClass(t,!!e)})},c.fn.atomCss=function(t,e,s){return this.each(function(){const n=c(this);if(_(e)){const i=g(()=>{const r=b(e),o=s?`${r}${s}`:r;n.css(t,o),u.domUpdated(n,`css.${t}`,o)});h.trackEffect(this,i)}else n.css(t,s?`${e}${s}`:e)})},c.fn.atomAttr=function(t,e){return this.each(function(){const s=c(this),n=i=>{i==null||i===!1?s.removeAttr(t):i===!0?s.attr(t,t):s.attr(t,String(i)),u.domUpdated(s,`attr.${t}`,i)};if(_(e)){const i=g(()=>n(b(e)));h.trackEffect(this,i)}else n(e)})},c.fn.atomProp=function(t,e){return this.each(function(){const s=c(this);if(_(e)){const n=g(()=>{const i=b(e);s.prop(t,i),u.domUpdated(s,`prop.${t}`,i)});h.trackEffect(this,n)}else s.prop(t,e)})},c.fn.atomShow=function(t){return this.each(function(){const e=c(this);if(_(t)){const s=g(()=>{const n=!!b(t);e.toggle(n),u.domUpdated(e,"show",n)});h.trackEffect(this,s)}else e.toggle(!!t)})},c.fn.atomHide=function(t){return this.each(function(){const e=c(this);if(_(t)){const s=g(()=>{const n=!b(t);e.toggle(n),u.domUpdated(e,"hide",!n)});h.trackEffect(this,s)}else e.toggle(!t)})},c.fn.atomVal=function(t,e={}){const{debounce:s,event:n="input",parse:i=o=>o,format:r=o=>String(o??"")}=e;return this.each(function(){const o=c(this);let a=null,d=!1,f=!1,G=!1;const T=()=>{f=!0},D=()=>{f=!1,W()};o.on("compositionstart",T),o.on("compositionend",D);const W=()=>{d||G||N(()=>{t.value=i(o.val())})},x=()=>{f||G||d||(s?(a&&clearTimeout(a),a=window.setTimeout(W,s)):W())};o.on(n,x),o.on("change",x);const ie=g(()=>{const C=r(t.value);o.val()!==C&&(d=!0,G=!0,o.val(C),u.domUpdated(o,"val",C),G=!1,d=!1)});h.trackEffect(this,ie),h.trackCleanup(this,()=>{o.off(n,x),o.off("change",x),o.off("compositionstart",T),o.off("compositionend",D),a&&clearTimeout(a)})})},c.fn.atomChecked=function(t){return this.each(function(){const e=c(this);let s=!1;const n=()=>{s||N(()=>{t.value=e.prop("checked")})};e.on("change",n),h.trackCleanup(this,()=>e.off("change",n));const i=g(()=>{s=!0,e.prop("checked",t.value),u.domUpdated(e,"checked",t.value),s=!1});h.trackEffect(this,i)})},c.fn.atomOn=function(t,e){return this.each(function(){const s=c(this),n=function(i){N(()=>e.call(this,i))};s.on(t,n),h.trackCleanup(this,()=>s.off(t,n))})},c.fn.atomUnbind=function(){return this.each(function(){h.cleanupTree(this)})},c.fn.atomBind=function(t){return this.each(function(){const e=c(this),s=[];if(t.text!==void 0&&(_(t.text)?s.push(()=>{const n=String(b(t.text)??"");e.text(n),u.domUpdated(e,"text",n)}):e.text(String(t.text??""))),t.html!==void 0&&(_(t.html)?s.push(()=>{const n=String(b(t.html)??"");e.html(n),u.domUpdated(e,"html",n)}):e.html(String(t.html??""))),t.class)for(const[n,i]of Object.entries(t.class))_(i)?s.push(()=>{const r=!!b(i);e.toggleClass(n,r),u.domUpdated(e,`class.${n}`,r)}):e.toggleClass(n,!!i);if(t.css)for(const[n,i]of Object.entries(t.css))if(Array.isArray(i)){const[r,o]=i;_(r)?s.push(()=>{const a=`${b(r)}${o}`;e.css(n,a),u.domUpdated(e,`css.${n}`,a)}):e.css(n,`${r}${o}`)}else _(i)?s.push(()=>{const r=b(i);e.css(n,r),u.domUpdated(e,`css.${n}`,r)}):e.css(n,i);if(t.attr)for(const[n,i]of Object.entries(t.attr)){const r=o=>{o==null||o===!1?e.removeAttr(n):o===!0?e.attr(n,n):e.attr(n,String(o)),u.domUpdated(e,`attr.${n}`,o)};_(i)?s.push(()=>r(b(i))):r(i)}if(t.prop)for(const[n,i]of Object.entries(t.prop))_(i)?s.push(()=>{const r=b(i);e.prop(n,r),u.domUpdated(e,`prop.${n}`,r)}):e.prop(n,i);if(t.show!==void 0&&(_(t.show)?s.push(()=>{const n=!!b(t.show);e.toggle(n),u.domUpdated(e,"show",n)}):e.toggle(!!t.show)),t.hide!==void 0&&(_(t.hide)?s.push(()=>{const n=!b(t.hide);e.toggle(n),u.domUpdated(e,"hide",!n)}):e.toggle(!t.hide)),t.val!==void 0){const n=t.val;let i=!1,r=!1;const o=()=>{r=!0},a=()=>{r=!1,i||N(()=>{n.value=e.val()})};e.on("compositionstart",o),e.on("compositionend",a);const d=()=>{r||i||N(()=>{n.value=e.val()})};e.on("input change",d),h.trackCleanup(this,()=>{e.off("input change",d),e.off("compositionstart",o),e.off("compositionend",a)}),s.push(()=>{const f=String(n.value??"");e.val()!==f&&(i=!0,e.val(f),u.domUpdated(e,"val",f),i=!1)})}if(t.checked!==void 0){const n=t.checked;let i=!1;const r=()=>{i||N(()=>{n.value=e.prop("checked")})};e.on("change",r),h.trackCleanup(this,()=>e.off("change",r)),s.push(()=>{i=!0,e.prop("checked",n.value),u.domUpdated(e,"checked",n.value),i=!1})}if(t.on)for(const[n,i]of Object.entries(t.on)){const r=function(o){N(()=>i.call(this,o))};e.on(n,r),h.trackCleanup(this,()=>e.off(n,r))}s.forEach(n=>{const i=g(n);h.trackEffect(this,i)})})},c.fn.atomList=function(t,e){return this.each(function(){const s=c(this),n=_e(this),{key:i,render:r,bind:o,onAdd:a,onRemove:d,empty:f}=e,G=typeof i=="function"?i:x=>x[i],T=new Map;let D=null;const W=g(()=>{const x=t.value,ie=new Set;if(u.log("list",`${n} updating with ${x.length} items`),x.length===0&&f){D||(D=c(f),s.append(D));for(const[,y]of T)y.$el.remove(),h.cleanup(y.$el[0]);T.clear();return}else D&&(D.remove(),D=null);let C=null;for(let y=0;y<x.length;y++){const O=x[y],B=G(O,y);ie.add(B);const H=T.get(B);if(H){const re=H.$el[0],w=C?C[0]:null;(w?re.previousSibling===w:re===s[0].firstChild)||(C?C.after(H.$el):s.prepend(H.$el)),H.item=O,C=H.$el}else{const re=r(O,y),w=c(re);C?C.after(w):s.prepend(w),T.set(B,{$el:w,item:O}),o&&o(w,O,y),a&&a(w),u.log("list",`${n} added item:`,B),C=w}}for(const[y,O]of T)if(!ie.has(y)){const B=()=>{O.$el.remove(),h.cleanup(O.$el[0]),T.delete(y),u.log("list",`${n} removed item:`,y)};d?Promise.resolve(d(O.$el)).then(B):B()}});h.trackEffect(this,W),h.trackCleanup(this,()=>{T.clear(),D==null||D.remove()})})};const ne=new WeakMap;c.fn.atomMount=function(t,e={}){return this.each(function(){const s=c(this),n=_e(this),i=ne.get(this);i&&(u.log("mount",`${n} unmounting existing component`),i()),u.log("mount",`${n} mounting component`);let r;try{r=t(s,e)}catch(d){console.error("[atom-effect-jquery] Mount error:",d);return}let o=!1;const a=()=>{if(!o){if(o=!0,u.log("mount",`${n} full cleanup`),typeof r=="function")try{r()}catch{}h.cleanupTree(this),ne.delete(this)}};ne.set(this,a),h.trackCleanup(this,a)})},c.fn.atomUnmount=function(){return this.each(function(){var t;(t=ne.get(this))==null||t()})};const Y=new WeakMap;let Fe=!1;function $e(){if(Fe)return;Fe=!0;const t=c.fn.on,e=c.fn.off;c.fn.on=function(...s){let n=-1;for(let i=s.length-1;i>=0;i--)if(typeof s[i]=="function"){n=i;break}if(n!==-1){const i=s[n];let r;Y.has(i)?r=Y.get(i):(r=function(...o){let a;return N(()=>{a=i.apply(this,o)}),a},Y.set(i,r)),s[n]=r}return t.apply(this,s)},c.fn.off=function(...s){let n=-1;for(let i=s.length-1;i>=0;i--)if(typeof s[i]=="function"){n=i;break}if(n!==-1){const i=s[n];Y.has(i)&&(s[n]=Y.get(i))}return e.apply(this,s)}}c(()=>we(document.body)),l.default=c,l.atom=Re,l.batch=N,l.computed=Ae,l.disableAutoCleanup=Ze,l.effect=g,l.enableAutoCleanup=we,l.enablejQueryBatching=$e,l.registry=h,l.untracked=le,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
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"}})}));
2
2
  //# sourceMappingURL=atom-effect-jquery.min.js.map