atom-effect-jquery 0.1.0
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 +171 -0
- package/dist/atom-effect-jquery.min.js +2 -0
- package/dist/atom-effect-jquery.min.js.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +123 -0
- package/dist/index.mjs +1677 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# atom-effect-jquery
|
|
2
|
+
|
|
3
|
+
**Reactive jQuery bindings powered by [atom-effect](https://github.com/but212/atom-effect).**
|
|
4
|
+
|
|
5
|
+
`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).
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Fine-grained Reactivity:** Powered by `@but212/atom-effect`.
|
|
10
|
+
- **Two-way Data Binding:** Seamless synchronization for inputs (`val`, `checked`).
|
|
11
|
+
- **Auto-Cleanup:** Effects are automatically disposed when elements are removed from the DOM (via MutionObserver).
|
|
12
|
+
- **Optimized List Rendering:** `atomList` for efficient array rendering.
|
|
13
|
+
- **Debug Mode:** Visual highlighting of DOM updates to trace reactivity.
|
|
14
|
+
- **jQuery Integration:** Batching support for standard jQuery events.
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install atom-effect-jquery jquery @but212/atom-effect
|
|
20
|
+
# or
|
|
21
|
+
pnpm add atom-effect-jquery jquery @but212/atom-effect
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Basic Usage
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import $ from 'jquery';
|
|
28
|
+
import 'atom-effect-jquery';
|
|
29
|
+
|
|
30
|
+
// 1. Create State
|
|
31
|
+
const count = $.atom(0);
|
|
32
|
+
|
|
33
|
+
// 2. Bind to DOM
|
|
34
|
+
$('#count').atomText(count);
|
|
35
|
+
|
|
36
|
+
// 3. Update State (DOM updates automatically)
|
|
37
|
+
$('#increment').on('click', () => {
|
|
38
|
+
count.value++;
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## API Reference
|
|
43
|
+
|
|
44
|
+
### Static Methods
|
|
45
|
+
|
|
46
|
+
The library extends the main jQuery function `$`:
|
|
47
|
+
|
|
48
|
+
- `$.atom(initialValue)`: Creates a writable atom.
|
|
49
|
+
- `$.computed(() => ...)`: Creates a derived computed atom.
|
|
50
|
+
- `$.effect(() => ...)`: Runs a side effect.
|
|
51
|
+
- `$.batch(() => ...)`: Batches multiple updates into a single render.
|
|
52
|
+
- `$.nextTick()`: Returns a Promise that resolves after the next update cycle.
|
|
53
|
+
|
|
54
|
+
### DOM Binding Methods
|
|
55
|
+
|
|
56
|
+
All methods are chainable and return the jQuery object.
|
|
57
|
+
|
|
58
|
+
#### Text & Content
|
|
59
|
+
|
|
60
|
+
- **`.atomText(atom, formatter?)`**
|
|
61
|
+
Updates `textContent`. Optional formatter function.
|
|
62
|
+
- **`.atomHtml(atom)`**
|
|
63
|
+
Updates `innerHTML`. (⚠️ Use with caution regarding XSS).
|
|
64
|
+
|
|
65
|
+
#### Attributes & Styles
|
|
66
|
+
|
|
67
|
+
- **`.atomClass(className, booleanAtom)`**
|
|
68
|
+
Toggles a class based on the atom's truthy value.
|
|
69
|
+
- **`.atomCss(property, atom, unit?)`**
|
|
70
|
+
Updates a CSS property. Optional unit (e.g., 'px') can be appended.
|
|
71
|
+
- **`.atomAttr(attribute, atom)`**
|
|
72
|
+
Updates an HTML attribute.
|
|
73
|
+
- **`.atomProp(property, atom)`**
|
|
74
|
+
Updates a DOM property (e.g., `disabled`, `readOnly`).
|
|
75
|
+
- **`.atomShow(booleanAtom)`** / **`.atomHide(booleanAtom)`**
|
|
76
|
+
Toggles visibility using jQuery's `.toggle()`.
|
|
77
|
+
|
|
78
|
+
#### Two-Way Binding
|
|
79
|
+
|
|
80
|
+
- **`.atomVal(atom, options?)`**
|
|
81
|
+
Two-way binding for input elements.
|
|
82
|
+
- `options.debounce`: Debounce input updates (ms).
|
|
83
|
+
- `options.format`: Format value before ensuring it in DOM.
|
|
84
|
+
- *Note:* Automatically handles IME types (e.g., for Korean/Chinese).
|
|
85
|
+
- **`.atomChecked(booleanAtom)`**
|
|
86
|
+
Two-way binding for checkboxes and radios.
|
|
87
|
+
|
|
88
|
+
#### Events
|
|
89
|
+
|
|
90
|
+
- **`.atomOn(event, handler)`**
|
|
91
|
+
Adds an event listener where the handler is automatically wrapped in `$.batch()`.
|
|
92
|
+
|
|
93
|
+
### Unified Binding (`.atomBind`)
|
|
94
|
+
|
|
95
|
+
For cleaner code when setting multiple bindings at once.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
$('div').atomBind({
|
|
99
|
+
text: nameAtom,
|
|
100
|
+
class: { 'active': isActiveAtom },
|
|
101
|
+
css: { 'color': colorAtom },
|
|
102
|
+
on: { click: () => console.log('clicked') }
|
|
103
|
+
});
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### List Rendering (`.atomList`)
|
|
107
|
+
|
|
108
|
+
Efficiently renders a list of atoms.
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
const items = $.atom(['Apple', 'Banana']);
|
|
112
|
+
|
|
113
|
+
$('ul').atomList(items, {
|
|
114
|
+
// Unique key for efficient diffing (required)
|
|
115
|
+
key: (item) => item,
|
|
116
|
+
|
|
117
|
+
// Render function returning an HTML string or Element
|
|
118
|
+
render: (item) => `<li>${item}</li>`,
|
|
119
|
+
|
|
120
|
+
// Optional: Bind events/atoms to the created element
|
|
121
|
+
bind: ($el, item) => {
|
|
122
|
+
$el.on('click', () => alert(item));
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Component Mounting (`.atomMount`)
|
|
128
|
+
|
|
129
|
+
Mounts a functional component that manages its own lifecycle.
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
const Counter = ($el, props) => {
|
|
133
|
+
const count = $.atom(props.initial || 0);
|
|
134
|
+
|
|
135
|
+
$el.append('<span>0</span>');
|
|
136
|
+
$el.find('span').atomText(count);
|
|
137
|
+
|
|
138
|
+
// Return cleanup function (optional)
|
|
139
|
+
return () => console.log('Unmounted');
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
$('#app').atomMount(Counter, { initial: 10 });
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Advanced Features
|
|
146
|
+
|
|
147
|
+
### Automatic Cleanup
|
|
148
|
+
|
|
149
|
+
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.
|
|
150
|
+
|
|
151
|
+
### jQuery Event Batching
|
|
152
|
+
|
|
153
|
+
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.
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
import { enablejQueryBatching } from 'atom-effect-jquery';
|
|
157
|
+
|
|
158
|
+
enablejQueryBatching(); // Call this once at startup
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Debug Mode
|
|
162
|
+
|
|
163
|
+
Enable debug mode to see console logs for every DOM update and visually highlight updated elements in the browser.
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
$.atom.debug = true;
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## License
|
|
170
|
+
|
|
171
|
+
MIT
|
|
@@ -0,0 +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"}})}));
|
|
2
|
+
//# sourceMappingURL=atom-effect-jquery.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atom-effect-jquery.min.js","sources":["../node_modules/.pnpm/@but212+atom-effect@0.5.1/node_modules/@but212/atom-effect/dist/index.mjs","../src/debug.ts","../src/namespace.ts","../src/utils.ts","../src/registry.ts","../src/chainable.ts","../src/unified.ts","../src/list.ts","../src/mount.ts","../src/jquery-patch.ts","../src/index.ts"],"sourcesContent":["const Z = {\n /** One second in milliseconds */\n ONE_SECOND_MS: 1e3\n}, T = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, A = {\n DISPOSED: 1,\n // 0001 - Effect has been disposed\n EXECUTING: 2\n // 0010 - Effect is currently executing\n}, u = {\n DIRTY: 1,\n // 0001 - Needs recomputation\n IDLE: 2,\n // 0010 - Initial state, not computed yet\n PENDING: 4,\n // 0100 - Async computation in progress\n RESOLVED: 8,\n // 1000 - Successfully computed\n REJECTED: 16,\n // 10000 - Computation failed\n RECOMPUTING: 32,\n // 100000 - Currently recomputing\n HAS_ERROR: 64\n // 1000000 - Has error state\n}, ae = {\n /** Maximum number of pooled objects to prevent memory bloat */\n MAX_SIZE: 1e3,\n /** Number of objects to pre-allocate for performance-critical paths */\n WARMUP_SIZE: 100\n}, g = {\n /** Maximum effect executions per second to detect infinite loops (Legacy/Fallback) */\n MAX_EXECUTIONS_PER_SECOND: 1e3,\n /** Threshold for cleaning up old execution timestamps */\n CLEANUP_THRESHOLD: 1e3,\n /**\n * Maximum executions per effect within a single flush cycle\n * Increased from 50 to 100\n */\n MAX_EXECUTIONS_PER_EFFECT: 100,\n /**\n * Maximum total executions across all effects in a single flush cycle\n * Increased from 5000 to 10000\n */\n MAX_EXECUTIONS_PER_FLUSH: 1e4,\n /** Maximum iterations for synchronous flush loop to prevent infinite loops */\n MAX_FLUSH_ITERATIONS: 1e3,\n /** Minimum allowed value for max flush iterations */\n MIN_FLUSH_ITERATIONS: 10\n}, B = {\n /** Maximum dependencies before warning about large dependency graphs */\n MAX_DEPENDENCIES: 1e3,\n /** Enable infinite loop detection warnings */\n WARN_INFINITE_LOOP: !0\n}, N = 1073741823, l = typeof process < \"u\" && process.env && process.env.NODE_ENV !== \"production\";\nclass E extends Error {\n /**\n * Creates a new AtomError\n * @param message - Error message describing what went wrong\n * @param cause - Original error that caused this error\n * @param recoverable - Whether the operation can be retried\n */\n constructor(e, t = null, s = !0) {\n super(e), this.name = \"AtomError\", this.cause = t, this.recoverable = s, this.timestamp = /* @__PURE__ */ new Date();\n }\n}\nclass m extends E {\n /**\n * Creates a new ComputedError\n * @param message - Error message\n * @param cause - Original error\n */\n constructor(e, t = null) {\n super(e, t, !0), this.name = \"ComputedError\";\n }\n}\nclass b extends E {\n /**\n * Creates a new EffectError\n * @param message - Error message\n * @param cause - Original error\n */\n constructor(e, t = null) {\n super(e, t, !1), this.name = \"EffectError\";\n }\n}\nclass U extends E {\n /**\n * Creates a new SchedulerError\n * @param message - Error message\n * @param cause - Original error\n */\n constructor(e, t = null) {\n super(e, t, !1), this.name = \"SchedulerError\";\n }\n}\nconst c = {\n // ─────────────────────────────────────────────────────────────────\n // Computed errors\n // ─────────────────────────────────────────────────────────────────\n /**\n * Error thrown when computed() receives a non-function argument.\n */\n COMPUTED_MUST_BE_FUNCTION: \"Computed function must be a function\",\n /**\n * Error thrown when subscribe() receives an invalid listener.\n */\n COMPUTED_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscriber listener must be a function or Subscriber object\",\n /**\n * Error thrown when accessing a pending async computed without a default value.\n */\n COMPUTED_ASYNC_PENDING_NO_DEFAULT: \"Async computation is pending. No default value provided\",\n /**\n * Error thrown when a synchronous computed computation fails.\n */\n COMPUTED_COMPUTATION_FAILED: \"Computed computation failed\",\n /**\n * Error thrown when an asynchronous computed computation fails.\n */\n COMPUTED_ASYNC_COMPUTATION_FAILED: \"Async computed computation failed\",\n /**\n * Error thrown when subscribing to a dependency fails.\n */\n COMPUTED_DEPENDENCY_SUBSCRIPTION_FAILED: \"Failed to subscribe to dependency\",\n // ─────────────────────────────────────────────────────────────────\n // Atom errors\n // ─────────────────────────────────────────────────────────────────\n /**\n * Error thrown when atom.subscribe() receives an invalid listener.\n */\n ATOM_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscription listener must be a function or Subscriber object\",\n /**\n * Error thrown when the atom subscriber notification process fails.\n */\n ATOM_SUBSCRIBER_EXECUTION_FAILED: \"Error occurred while executing atom subscribers\",\n /**\n * Error logged when an individual subscriber throws during notification.\n * @remarks This error is caught and logged to prevent cascading failures.\n */\n ATOM_INDIVIDUAL_SUBSCRIBER_FAILED: \"Error during individual atom subscriber execution\",\n // ─────────────────────────────────────────────────────────────────\n // Effect errors\n // ─────────────────────────────────────────────────────────────────\n /**\n * Error thrown when effect() receives a non-function argument.\n */\n EFFECT_MUST_BE_FUNCTION: \"Effect function must be a function\",\n /**\n * Error thrown when an effect's execution fails.\n */\n EFFECT_EXECUTION_FAILED: \"Effect execution failed\",\n /**\n * Error thrown when an effect's cleanup function fails.\n */\n EFFECT_CLEANUP_FAILED: \"Effect cleanup function execution failed\",\n // ─────────────────────────────────────────────────────────────────\n // Debug warnings\n // ─────────────────────────────────────────────────────────────────\n /**\n * Warning message for large dependency graphs.\n *\n * @param count - The number of dependencies detected\n * @returns Formatted warning message with dependency count\n *\n * @example\n * ```ts\n * console.warn(ERROR_MESSAGES.LARGE_DEPENDENCY_GRAPH(150));\n * // Output: \"Large dependency graph detected: 150 dependencies\"\n * ```\n */\n LARGE_DEPENDENCY_GRAPH: (i) => `Large dependency graph detected: ${i} dependencies`,\n /**\n * Warning logged when attempting to unsubscribe a non-existent listener.\n */\n UNSUBSCRIBE_NON_EXISTENT: \"Attempted to unsubscribe a non-existent listener\",\n /**\n * Error logged when the onError callback itself throws an error.\n * @remarks This prevents cascading failures from masking the original error.\n */\n CALLBACK_ERROR_IN_ERROR_HANDLER: \"Error occurred during onError callback execution\"\n}, P = /* @__PURE__ */ Symbol(\"debugName\"), ee = /* @__PURE__ */ Symbol(\"id\"), M = /* @__PURE__ */ Symbol(\"type\"), q = /* @__PURE__ */ Symbol(\"noDefaultValue\");\nfunction te(i) {\n return \"dependencies\" in i && Array.isArray(i.dependencies);\n}\nlet k = 0;\nfunction X(i, e, t) {\n if (i._visitedEpoch !== t) {\n if (i._visitedEpoch = t, i === e)\n throw new m(\"Indirect circular dependency detected\");\n if (te(i)) {\n const s = i.dependencies;\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n r && X(r, e, t);\n }\n }\n }\n}\nconst d = {\n enabled: typeof process < \"u\" && process.env?.NODE_ENV === \"development\",\n maxDependencies: B.MAX_DEPENDENCIES,\n warnInfiniteLoop: B.WARN_INFINITE_LOOP,\n warn(i, e) {\n this.enabled && i && console.warn(`[Atom Effect] ${e}`);\n },\n /**\n * Checks for circular dependencies.\n * Direct check runs always; indirect check only in dev mode.\n * @throws {ComputedError} When circular dependency detected\n */\n checkCircular(i, e) {\n if (i === e)\n throw new m(\"Direct circular dependency detected\");\n this.enabled && (k++, X(i, e, k));\n },\n attachDebugInfo(i, e, t) {\n if (!this.enabled)\n return;\n const s = i;\n s[P] = `${e}_${t}`, s[ee] = t, s[M] = e;\n },\n getDebugName(i) {\n if (i != null && P in i)\n return i[P];\n },\n getDebugType(i) {\n if (i != null && M in i)\n return i[M];\n }\n};\nlet se = 1;\nconst ie = () => se++;\nclass G {\n constructor() {\n this.id = ie() & N, this.flags = 0;\n }\n}\nclass $ extends G {\n constructor() {\n super(), this.version = 0, this._lastSeenEpoch = -1;\n }\n /**\n * Subscribes a listener function or Subscriber object to value changes.\n *\n * @param listener - Function or Subscriber object to call when the value changes\n * @returns An unsubscribe function\n * @throws {AtomError} If listener is not a function or Subscriber\n */\n subscribe(e) {\n if (typeof e == \"object\" && e !== null && \"execute\" in e)\n return this._objectSubscribers.add(e);\n if (typeof e != \"function\")\n throw new E(c.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);\n return this._functionSubscribers.add(e);\n }\n /**\n * Gets the total number of active subscribers.\n */\n subscriberCount() {\n return this._functionSubscribers.size + this._objectSubscribers.size;\n }\n /**\n * Notifies all subscribers of a change.\n *\n * @param newValue - The new value\n * @param oldValue - The old value\n */\n _notifySubscribers(e, t) {\n this._functionSubscribers.forEachSafe(\n (s) => s(e, t),\n (s) => console.error(new E(c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED, s))\n ), this._objectSubscribers.forEachSafe(\n (s) => s.execute(),\n (s) => console.error(new E(c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED, s))\n );\n }\n}\nlet L = 0;\nfunction H() {\n return L = (L + 1 | 0) & N, L;\n}\nlet O = 0, V = 0, x = !1;\nfunction j() {\n return x ? (l && console.warn(\n \"Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass\"\n ), !1) : (x = !0, O = O + 1 & N, V = 0, !0);\n}\nfunction z() {\n x = !1;\n}\nfunction ne() {\n return x ? ++V : 0;\n}\nclass re {\n constructor() {\n 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 = g.MAX_FLUSH_ITERATIONS;\n }\n get phase() {\n return this.isProcessing || this.isFlushingSync ? 2 : this.isBatching ? 1 : 0;\n }\n /**\n * Schedules a task for execution.\n * Tasks are deduplicated within the same flush cycle using epoch tracking.\n * @param callback - The function to execute.\n * @throws {SchedulerError} If the callback is not a function.\n */\n schedule(e) {\n if (typeof e != \"function\")\n throw new U(\"Scheduler callback must be a function\");\n 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()));\n }\n flush() {\n if (this.isProcessing || this.queueSize === 0) return;\n this.isProcessing = !0;\n const e = this.queue, t = this.queueSize;\n this.queue = this.queue === this.queueA ? this.queueB : this.queueA, this.queueSize = 0, this._epoch++, queueMicrotask(() => {\n const s = j();\n this._processJobs(e, t), this.isProcessing = !1, s && z(), this.queueSize > 0 && !this.isBatching && this.flush();\n });\n }\n flushSync() {\n this.isFlushingSync = !0;\n const e = j();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this.isFlushingSync = !1, e && z();\n }\n }\n _mergeBatchQueue() {\n if (this._epoch++, this.batchQueueSize > 0) {\n for (let e = 0; e < this.batchQueueSize; e++) {\n const t = this.batchQueue[e];\n t && t._nextEpoch !== this._epoch && (t._nextEpoch = this._epoch, this.queue[this.queueSize++] = t);\n }\n this.batchQueueSize = 0;\n }\n }\n _drainQueue() {\n let e = 0;\n for (; this.queueSize > 0; ) {\n if (++e > this.maxFlushIterations) {\n this._handleFlushOverflow();\n break;\n }\n this._processCurrentQueue(), this._mergeBatchQueue();\n }\n }\n _processCurrentQueue() {\n const e = this.queue, t = this.queueSize;\n this.queue = this.queue === this.queueA ? this.queueB : this.queueA, this.queueSize = 0, this._epoch++, this._processJobs(e, t);\n }\n _handleFlushOverflow() {\n console.error(\n new U(\n `Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`\n )\n ), this.queueSize = 0, this.queue.length = 0, this.batchQueueSize = 0;\n }\n _processJobs(e, t) {\n for (let s = 0; s < t; s++)\n try {\n e[s]?.();\n } catch (n) {\n console.error(\n new U(\"Error occurred during scheduler execution\", n)\n );\n }\n e.length = 0;\n }\n /** Starts a new batch of updates. Updates will be deferred until endBatch is called. */\n startBatch() {\n this.batchDepth++, this.isBatching = !0;\n }\n /**\n * Ends the current batch. If the batch depth reaches zero, all pending updates are flushed synchronously.\n */\n endBatch() {\n this.batchDepth = Math.max(0, this.batchDepth - 1), this.batchDepth === 0 && (this.flushSync(), this.isBatching = !1);\n }\n /**\n * Configures the maximum number of iterations allowed during a synchronous flush.\n * Used to prevent infinite loops.\n * @param max - Maximum iterations count.\n */\n setMaxFlushIterations(e) {\n if (e < g.MIN_FLUSH_ITERATIONS)\n throw new U(\n `Max flush iterations must be at least ${g.MIN_FLUSH_ITERATIONS}`\n );\n this.maxFlushIterations = e;\n }\n}\nconst R = new re();\nfunction fe(i) {\n if (typeof i != \"function\")\n throw new E(\"Batch callback must be a function\");\n R.startBatch();\n try {\n return i();\n } finally {\n R.endBatch();\n }\n}\nconst I = {\n current: null,\n run(i, e) {\n const t = this.current;\n this.current = i;\n try {\n return e();\n } finally {\n this.current = t;\n }\n },\n getCurrent() {\n return this.current;\n }\n};\nfunction oe(i) {\n if (typeof i != \"function\")\n throw new E(\"Untracked callback must be a function\");\n const e = I.current;\n I.current = null;\n try {\n return i();\n } finally {\n I.current = e;\n }\n}\nclass F {\n constructor() {\n this.subscribers = null;\n }\n /** Adds subscriber and returns unsubscribe function (idempotent) */\n add(e) {\n if (this.subscribers || (this.subscribers = []), this.subscribers.indexOf(e) !== -1)\n return () => {\n };\n this.subscribers.push(e);\n let t = !1;\n return () => {\n t || (t = !0, this.remove(e));\n };\n }\n /** Removes subscriber using swap-and-pop */\n remove(e) {\n if (!this.subscribers)\n return !1;\n const t = this.subscribers.indexOf(e);\n if (t === -1)\n return !1;\n const s = this.subscribers.length - 1;\n return t !== s && (this.subscribers[t] = this.subscribers[s]), this.subscribers.pop(), !0;\n }\n has(e) {\n return this.subscribers ? this.subscribers.indexOf(e) !== -1 : !1;\n }\n forEach(e) {\n if (this.subscribers)\n for (let t = 0; t < this.subscribers.length; t++)\n e(this.subscribers[t], t);\n }\n /** Iterates with error handling to prevent one failure from breaking the chain */\n forEachSafe(e, t) {\n if (this.subscribers)\n for (let s = 0; s < this.subscribers.length; s++)\n try {\n e(this.subscribers[s], s);\n } catch (n) {\n t ? t(n) : console.error(\"[SubscriberManager] Error in subscriber callback:\", n);\n }\n }\n get size() {\n return this.subscribers?.length ?? 0;\n }\n get hasSubscribers() {\n return this.subscribers !== null && this.subscribers.length > 0;\n }\n clear() {\n this.subscribers = null;\n }\n toArray() {\n return this.subscribers ? [...this.subscribers] : [];\n }\n}\nfunction ue(i) {\n return i !== null && typeof i == \"object\" && \"value\" in i && \"subscribe\" in i && typeof i.subscribe == \"function\";\n}\nfunction de(i) {\n if (d.enabled && (i == null || typeof i == \"object\")) {\n const e = d.getDebugType(i);\n if (e)\n return e === \"computed\";\n }\n return ue(i) && \"invalidate\" in i && typeof i.invalidate == \"function\";\n}\nfunction pe(i) {\n return i !== null && typeof i == \"object\" && \"dispose\" in i && \"run\" in i && typeof i.dispose == \"function\" && typeof i.run == \"function\";\n}\nfunction Q(i) {\n return i != null && typeof i.then == \"function\";\n}\nfunction ce(i) {\n return typeof i == \"object\" && i !== null;\n}\nfunction Y(i) {\n return (typeof i == \"object\" || typeof i == \"function\") && i !== null && typeof i.addDependency == \"function\";\n}\nfunction J(i) {\n return typeof i == \"function\" && typeof i.addDependency != \"function\";\n}\nfunction W(i) {\n return ce(i) && typeof i.execute == \"function\";\n}\nclass he extends $ {\n constructor(e, t) {\n super(), this._isNotificationScheduled = !1, this._value = e, this._functionSubscribersStore = new F(), this._objectSubscribersStore = new F(), this._sync = t, this._notifyTask = this._flushNotifications.bind(this), d.attachDebugInfo(this, \"atom\", this.id);\n }\n /** Gets the manager for function-based subscribers. */\n get _functionSubscribers() {\n return this._functionSubscribersStore;\n }\n /** Gets the manager for object-based subscribers. */\n get _objectSubscribers() {\n return this._objectSubscribersStore;\n }\n /**\n * Returns the current value and registers the atom as a dependency in the current tracking context.\n */\n get value() {\n const e = I.getCurrent();\n return e && this._track(e), this._value;\n }\n /**\n * Sets a new value and schedules notifications if the value has changed.\n * Uses `Object.is` for comparison.\n */\n set value(e) {\n if (Object.is(this._value, e)) return;\n const t = this._value;\n this.version = this.version + 1 & N, this._value = e, !(!this._functionSubscribersStore.hasSubscribers && !this._objectSubscribersStore.hasSubscribers) && this._scheduleNotification(t);\n }\n _track(e) {\n if (Y(e)) {\n e.addDependency(this);\n return;\n }\n if (J(e)) {\n this._functionSubscribersStore.add(e);\n return;\n }\n W(e) && this._objectSubscribersStore.add(e);\n }\n _scheduleNotification(e) {\n this._isNotificationScheduled || (this._pendingOldValue = e, this._isNotificationScheduled = !0), this._sync && !R.isBatching ? this._flushNotifications() : R.schedule(this._notifyTask);\n }\n _flushNotifications() {\n if (!this._isNotificationScheduled) return;\n const e = this._pendingOldValue, t = this._value;\n this._pendingOldValue = void 0, this._isNotificationScheduled = !1, this._notifySubscribers(t, e);\n }\n /**\n * Returns the current value without registering as a dependency in the tracking context.\n */\n peek() {\n return this._value;\n }\n /**\n * Disposes of the atom, clearing all subscribers and resetting the value.\n */\n dispose() {\n this._functionSubscribersStore.clear(), this._objectSubscribersStore.clear(), this._value = void 0;\n }\n}\nfunction Ee(i, e = {}) {\n return new he(i, e.sync ?? !1);\n}\nclass w {\n constructor() {\n this.pool = [], this.maxPoolSize = 50, this.maxReusableCapacity = 256, this.stats = l ? {\n acquired: 0,\n released: 0,\n rejected: { frozen: 0, tooLarge: 0, poolFull: 0 }\n } : null;\n }\n /** Acquires an array from the pool or creates a new one if the pool is empty. */\n acquire() {\n return l && this.stats && this.stats.acquired++, this.pool.pop() ?? [];\n }\n /**\n * Releases an array back to the pool.\n * Clears the array before storing it.\n * @param arr - The array to release.\n * @param emptyConst - Optional reference to a constant empty array to skip.\n */\n release(e, t) {\n if (!(t && e === t)) {\n if (Object.isFrozen(e)) {\n l && this.stats && this.stats.rejected.frozen++;\n return;\n }\n if (e.length > this.maxReusableCapacity) {\n l && this.stats && this.stats.rejected.tooLarge++;\n return;\n }\n if (this.pool.length >= this.maxPoolSize) {\n l && this.stats && this.stats.rejected.poolFull++;\n return;\n }\n e.length = 0, this.pool.push(e), l && this.stats && this.stats.released++;\n }\n }\n /** Returns current stats for the pool (dev mode only). */\n getStats() {\n if (!l || !this.stats) return null;\n const { acquired: e, released: t, rejected: s } = this.stats, n = s.frozen + s.tooLarge + s.poolFull;\n return {\n acquired: e,\n released: t,\n rejected: s,\n leaked: e - t - n,\n poolSize: this.pool.length\n };\n }\n /** Resets the pool and its stats. */\n reset() {\n this.pool.length = 0, l && this.stats && (this.stats.acquired = 0, this.stats.released = 0, this.stats.rejected = { frozen: 0, tooLarge: 0, poolFull: 0 });\n }\n}\nconst h = Object.freeze([]), a = Object.freeze([]), _ = Object.freeze([]), S = new w(), D = new w(), f = new w();\nfunction _e(i, e, t, s) {\n if (e !== h && t !== a)\n for (let r = 0; r < e.length; r++) {\n const o = e[r];\n o && (o._tempUnsub = t[r]);\n }\n const n = D.acquire();\n n.length = i.length;\n for (let r = 0; r < i.length; r++) {\n const o = i[r];\n o && (o._tempUnsub ? (n[r] = o._tempUnsub, o._tempUnsub = void 0) : (d.checkCircular(o, s), n[r] = o.subscribe(s)));\n }\n if (e !== h)\n for (let r = 0; r < e.length; r++) {\n const o = e[r];\n o?._tempUnsub && (o._tempUnsub(), o._tempUnsub = void 0);\n }\n return t !== a && D.release(t), n;\n}\nfunction C(i, e, t) {\n if (i instanceof TypeError)\n return new e(`Type error (${t}): ${i.message}`, i);\n if (i instanceof ReferenceError)\n return new e(`Reference error (${t}): ${i.message}`, i);\n if (i instanceof E)\n return i;\n const s = i instanceof Error ? i.message : String(i), n = i instanceof Error ? i : null;\n return new e(`Unexpected error (${t}): ${s}`, n);\n}\nclass K extends $ {\n constructor(e, t = {}) {\n if (typeof e != \"function\")\n throw new m(c.COMPUTED_MUST_BE_FUNCTION);\n if (super(), this._value = void 0, this.flags = u.DIRTY | u.IDLE, this._error = null, this._promiseId = 0, this._equal = t.equal ?? Object.is, this._fn = e, this._defaultValue = \"defaultValue\" in t ? t.defaultValue : q, this._hasDefaultValue = this._defaultValue !== q, this._onError = t.onError ?? null, this.MAX_PROMISE_ID = Number.MAX_SAFE_INTEGER - 1, this._functionSubscribersStore = new F(), this._objectSubscribersStore = new F(), this._dependencies = h, this._dependencyVersions = _, this._unsubscribes = a, this._notifyJob = () => {\n this._functionSubscribersStore.forEachSafe(\n (s) => s(),\n (s) => console.error(s)\n ), this._objectSubscribersStore.forEachSafe(\n (s) => s.execute(),\n (s) => console.error(s)\n );\n }, this._trackable = Object.assign(() => this._markDirty(), {\n addDependency: (s) => {\n }\n }), d.attachDebugInfo(this, \"computed\", this.id), d.enabled) {\n const s = this;\n s.subscriberCount = () => this._functionSubscribersStore.size + this._objectSubscribersStore.size, s.isDirty = () => this._isDirty(), s.dependencies = this._dependencies, s.stateFlags = this._getFlagsAsString();\n }\n if (t.lazy === !1)\n try {\n this._recompute();\n } catch {\n }\n }\n get _functionSubscribers() {\n return this._functionSubscribersStore;\n }\n get _objectSubscribers() {\n return this._objectSubscribersStore;\n }\n get value() {\n const e = this._computeValue();\n return this._registerTracking(), e;\n }\n peek() {\n return this._value;\n }\n get state() {\n return this._getAsyncState();\n }\n get hasError() {\n return this._isRejected();\n }\n get lastError() {\n return this._error;\n }\n get isPending() {\n return this._isPending();\n }\n get isResolved() {\n return this._isResolved();\n }\n invalidate() {\n this._markDirty(), this._dependencyVersions !== _ && (f.release(this._dependencyVersions), this._dependencyVersions = _);\n }\n dispose() {\n if (this._unsubscribes !== a) {\n for (let e = 0; e < this._unsubscribes.length; e++) {\n const t = this._unsubscribes[e];\n t && t();\n }\n D.release(this._unsubscribes), this._unsubscribes = a;\n }\n this._dependencies !== h && (S.release(this._dependencies), this._dependencies = h), this._dependencyVersions !== _ && (f.release(this._dependencyVersions), this._dependencyVersions = _), this._functionSubscribersStore.clear(), this._objectSubscribersStore.clear(), this.flags = u.DIRTY | u.IDLE, this._error = null, this._value = void 0, this._promiseId = (this._promiseId + 1) % this.MAX_PROMISE_ID;\n }\n // State flag operations\n _isDirty() {\n return (this.flags & u.DIRTY) !== 0;\n }\n _setDirty() {\n this.flags |= u.DIRTY;\n }\n _clearDirty() {\n this.flags &= -2;\n }\n _isIdle() {\n return (this.flags & u.IDLE) !== 0;\n }\n _setIdle() {\n this.flags |= u.IDLE, this.flags &= -29;\n }\n _isPending() {\n return (this.flags & u.PENDING) !== 0;\n }\n _setPending() {\n this.flags |= u.PENDING, this.flags &= -27;\n }\n _isResolved() {\n return (this.flags & u.RESOLVED) !== 0;\n }\n _setResolved() {\n this.flags |= u.RESOLVED, this.flags &= -87;\n }\n _isRejected() {\n return (this.flags & u.REJECTED) !== 0;\n }\n _setRejected() {\n this.flags |= u.REJECTED | u.HAS_ERROR, this.flags &= -15;\n }\n _isRecomputing() {\n return (this.flags & u.RECOMPUTING) !== 0;\n }\n _setRecomputing(e) {\n const t = u.RECOMPUTING;\n this.flags = this.flags & ~t | -Number(e) & t;\n }\n _getAsyncState() {\n return this._isResolved() ? T.RESOLVED : this._isPending() ? T.PENDING : this._isRejected() ? T.REJECTED : T.IDLE;\n }\n _getFlagsAsString() {\n const e = [];\n 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(\" | \");\n }\n _computeValue() {\n return this._isRecomputing() ? this._value : ((this._isDirty() || this._isIdle()) && this._recompute(), this._isPending() ? this._handlePending() : this._isRejected() ? this._handleRejected() : this._value);\n }\n _recompute() {\n if (this._isRecomputing()) return;\n this._setRecomputing(!0);\n const e = this._prepareComputationContext();\n let t = !1;\n try {\n const s = I.run(this._trackable, this._fn);\n Q(s) ? (this._commitDependencies(e), t = !0, this._handleAsyncComputation(s)) : (this._commitDependencies(e), t = !0, this._handleSyncResult(s));\n } catch (s) {\n this._commitDependencies(e), t = !0, this._handleComputationError(s);\n } finally {\n this._cleanupContext(e, t), this._setRecomputing(!1);\n }\n }\n _prepareComputationContext() {\n const e = this._dependencies, t = this._dependencyVersions, s = S.acquire(), n = f.acquire(), r = H(), o = { depCount: 0 }, v = (p) => {\n p._lastSeenEpoch !== r && (p._lastSeenEpoch = r, o.depCount < s.length ? (s[o.depCount] = p, n[o.depCount] = p.version) : (s.push(p), n.push(p.version)), o.depCount++);\n }, y = this._trackable.addDependency;\n return this._trackable.addDependency = v, { prevDeps: e, prevVersions: t, nextDeps: s, nextVersions: n, originalAdd: y, state: o };\n }\n _commitDependencies(e) {\n const { nextDeps: t, nextVersions: s, state: n, prevDeps: r } = e;\n t.length = n.depCount, s.length = n.depCount, this._unsubscribes = _e(t, r, this._unsubscribes, this), this._dependencies = t, this._dependencyVersions = s;\n }\n _cleanupContext(e, t) {\n this._trackable.addDependency = e.originalAdd, t ? (e.prevDeps !== h && S.release(e.prevDeps), e.prevVersions !== _ && f.release(e.prevVersions)) : (S.release(e.nextDeps), f.release(e.nextVersions));\n }\n _handleSyncResult(e) {\n (!this._isResolved() || !this._equal(this._value, e)) && (this.version = this.version + 1 & N), this._value = e, this._clearDirty(), this._setResolved(), this._error = null, this._setRecomputing(!1);\n }\n _handleAsyncComputation(e) {\n this._setPending(), this._clearDirty(), this._promiseId = this._promiseId >= this.MAX_PROMISE_ID ? 1 : this._promiseId + 1;\n const t = this._promiseId;\n e.then((s) => {\n t === this._promiseId && this._handleAsyncResolution(s);\n }).catch((s) => {\n t === this._promiseId && this._handleAsyncRejection(s);\n });\n }\n _handleAsyncResolution(e) {\n (!this._isResolved() || !this._equal(this._value, e)) && (this.version = this.version + 1 & N), this._value = e, this._clearDirty(), this._setResolved(), this._error = null, this._setRecomputing(!1);\n }\n _handleAsyncRejection(e) {\n const t = C(e, m, c.COMPUTED_ASYNC_COMPUTATION_FAILED);\n if (this._error = t, this._setRejected(), this._clearDirty(), this._setRecomputing(!1), this._onError)\n try {\n this._onError(t);\n } catch (s) {\n console.error(c.CALLBACK_ERROR_IN_ERROR_HANDLER, s);\n }\n this._notifySubscribers(void 0, void 0);\n }\n _handleComputationError(e) {\n const t = C(e, m, c.COMPUTED_COMPUTATION_FAILED);\n if (this._error = t, this._setRejected(), this._clearDirty(), this._setRecomputing(!1), this._onError)\n try {\n this._onError(t);\n } catch (s) {\n console.error(c.CALLBACK_ERROR_IN_ERROR_HANDLER, s);\n }\n throw t;\n }\n _handlePending() {\n if (this._hasDefaultValue)\n return this._defaultValue;\n throw new m(c.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n _handleRejected() {\n if (this._error?.recoverable && this._hasDefaultValue)\n return this._defaultValue;\n throw this._error;\n }\n /** Subscriber interface - marks dirty on dependency change */\n execute() {\n this._markDirty();\n }\n _markDirty() {\n this._isRecomputing() || this._isDirty() || (this._setDirty(), this._notifyJob());\n }\n _registerTracking() {\n const e = I.getCurrent();\n if (e) {\n if (Y(e)) {\n e.addDependency(this);\n return;\n }\n if (J(e)) {\n this._functionSubscribersStore.add(e);\n return;\n }\n W(e) && this._objectSubscribersStore.add(e);\n }\n }\n}\nObject.freeze(K.prototype);\nfunction be(i, e = {}) {\n return new K(i, e);\n}\nclass le extends G {\n /**\n * Creates a new EffectImpl instance.\n * @param fn - The effect function to run.\n * @param options - Configuration options for the effect.\n */\n constructor(e, t = {}) {\n super(), this.run = () => {\n if (this.isDisposed)\n throw new b(c.EFFECT_MUST_BE_FUNCTION);\n this._dependencyVersions !== _ && (f.release(this._dependencyVersions), this._dependencyVersions = _), this.execute();\n }, this.dispose = () => {\n if (!this.isDisposed) {\n if (this._setDisposed(), this._safeCleanup(), this._unsubscribes !== a) {\n for (let s = 0; s < this._unsubscribes.length; s++) {\n const n = this._unsubscribes[s];\n n && n();\n }\n D.release(this._unsubscribes), this._unsubscribes = a;\n }\n this._dependencies !== h && (S.release(this._dependencies), this._dependencies = h), this._dependencyVersions !== _ && (f.release(this._dependencyVersions), this._dependencyVersions = _);\n }\n }, this.addDependency = (s) => {\n if (this.isExecuting && this._nextDeps && this._nextUnsubs && this._nextVersions) {\n const n = this._currentEpoch;\n if (s._lastSeenEpoch === n) return;\n s._lastSeenEpoch = n, this._nextDeps.push(s), this._nextVersions.push(s.version), s._tempUnsub ? (this._nextUnsubs.push(s._tempUnsub), s._tempUnsub = void 0) : this._subscribeTo(s);\n }\n }, this.execute = () => {\n if (this.isDisposed || this.isExecuting || !this._shouldExecute()) return;\n this._checkInfiniteLoop(), this._setExecuting(!0), this._safeCleanup();\n const s = this._prepareEffectContext();\n let n = !1;\n try {\n const r = I.run(this, this._fn);\n this._commitEffect(s), n = !0, this._checkLoopWarnings(), Q(r) ? r.then((o) => {\n !this.isDisposed && typeof o == \"function\" && (this._cleanup = o);\n }).catch((o) => {\n console.error(C(o, b, c.EFFECT_EXECUTION_FAILED));\n }) : this._cleanup = typeof r == \"function\" ? r : null;\n } catch (r) {\n n = !0, console.error(C(r, b, c.EFFECT_EXECUTION_FAILED)), this._cleanup = null;\n } finally {\n this._cleanupEffect(s, n), this._setExecuting(!1);\n }\n }, this._currentEpoch = -1, this._lastFlushEpoch = -1, this._executionsInEpoch = 0, this._fn = e, this._sync = t.sync ?? !1, this._maxExecutions = t.maxExecutionsPerSecond ?? g.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = t.maxExecutionsPerFlush ?? g.MAX_EXECUTIONS_PER_EFFECT, this._trackModifications = t.trackModifications ?? !1, this._cleanup = null, this._dependencies = h, this._dependencyVersions = _, this._unsubscribes = a, this._nextDeps = null, this._nextVersions = null, this._nextUnsubs = null, this._history = l ? [] : null, this._executionCount = 0, d.attachDebugInfo(this, \"effect\", this.id);\n }\n /**\n * Prepares the execution context by acquiring pools and setting up epoch.\n * @returns The prepared EffectContext.\n */\n _prepareEffectContext() {\n const e = this._dependencies, t = this._dependencyVersions, s = this._unsubscribes, n = S.acquire(), r = f.acquire(), o = D.acquire(), v = H();\n if (e !== h && s !== a)\n for (let y = 0; y < e.length; y++) {\n const p = e[y];\n p && (p._tempUnsub = s[y]);\n }\n return this._nextDeps = n, this._nextVersions = r, this._nextUnsubs = o, this._currentEpoch = v, { prevDeps: e, prevVersions: t, prevUnsubs: s, nextDeps: n, nextVersions: r, nextUnsubs: o };\n }\n /**\n * Commits the tracked dependencies as the current active dependencies.\n * @param ctx - The current effect context.\n */\n _commitEffect(e) {\n const t = e.nextDeps.length;\n e.nextDeps.length = t, e.nextVersions.length = t, this._dependencies = e.nextDeps, this._dependencyVersions = e.nextVersions, this._unsubscribes = e.nextUnsubs;\n }\n /**\n * Cleans up the effect execution context, releasing resources back to pools.\n * @param ctx - The effect context to clean up.\n * @param committed - Whether the changes were committed to the effect.\n */\n _cleanupEffect(e, t) {\n if (this._nextDeps = null, this._nextVersions = null, this._nextUnsubs = null, t) {\n if (e.prevDeps !== h) {\n for (let s = 0; s < e.prevDeps.length; s++) {\n const n = e.prevDeps[s];\n n?._tempUnsub && (n._tempUnsub(), n._tempUnsub = void 0);\n }\n S.release(e.prevDeps);\n }\n e.prevUnsubs !== a && D.release(e.prevUnsubs), e.prevVersions !== _ && f.release(e.prevVersions);\n } else {\n S.release(e.nextDeps), f.release(e.nextVersions);\n for (let s = 0; s < e.nextUnsubs.length; s++)\n e.nextUnsubs[s]?.();\n if (D.release(e.nextUnsubs), e.prevDeps !== h)\n for (let s = 0; s < e.prevDeps.length; s++) {\n const n = e.prevDeps[s];\n n && (n._tempUnsub = void 0);\n }\n }\n }\n /**\n * Subscribes to a dependency's changes.\n * @param dep - The dependency to subscribe to.\n */\n _subscribeTo(e) {\n try {\n const t = e.subscribe(() => {\n this._trackModifications && this.isExecuting && (e._modifiedAtEpoch = this._currentEpoch), this._sync ? this.execute() : R.schedule(this.execute);\n });\n this._nextUnsubs && this._nextUnsubs.push(t);\n } catch (t) {\n console.error(C(t, b, c.EFFECT_EXECUTION_FAILED)), this._nextUnsubs && this._nextUnsubs.push(() => {\n });\n }\n }\n /**\n * Whether the effect has been disposed.\n */\n get isDisposed() {\n return (this.flags & A.DISPOSED) !== 0;\n }\n /**\n * Total number of times this effect has executed.\n */\n get executionCount() {\n return this._executionCount;\n }\n /**\n * Whether the effect is currently executing.\n */\n get isExecuting() {\n return (this.flags & A.EXECUTING) !== 0;\n }\n _setDisposed() {\n this.flags |= A.DISPOSED;\n }\n _setExecuting(e) {\n const t = A.EXECUTING;\n this.flags = this.flags & ~t | -Number(e) & t;\n }\n /**\n * Executes the cleanup function if it exists.\n */\n _safeCleanup() {\n if (this._cleanup) {\n try {\n this._cleanup();\n } catch (e) {\n console.error(C(e, b, c.EFFECT_CLEANUP_FAILED));\n }\n this._cleanup = null;\n }\n }\n /**\n * Checks for infinite loops by tracking execution counts within a flush and time period.\n * @throws {EffectError} If an infinite loop is detected.\n */\n _checkInfiniteLoop() {\n if (this._lastFlushEpoch !== O && (this._lastFlushEpoch = O, this._executionsInEpoch = 0), this._executionsInEpoch++, this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), ne() > g.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++, this._history) {\n const e = Date.now();\n this._history.push(e), this._history.length > g.MAX_EXECUTIONS_PER_SECOND + 10 && this._history.shift(), this._checkTimestampLoop(e);\n }\n }\n _checkTimestampLoop(e) {\n const t = this._history;\n if (!t || this._maxExecutions <= 0) return;\n const s = e - Z.ONE_SECOND_MS;\n let n = 0;\n for (let r = t.length - 1; r >= 0 && !(t[r] < s); r--)\n n++;\n if (n > this._maxExecutions) {\n const r = new b(\n `Effect executed ${n} times within 1 second. Infinite loop suspected`\n );\n if (this.dispose(), console.error(r), l)\n throw r;\n }\n }\n _throwInfiniteLoopError(e) {\n const t = new b(\n `Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${V}`\n );\n throw this.dispose(), console.error(t), t;\n }\n /**\n * Determines if the effect should execute based on dependency versions.\n * @returns true if any dependency has changed or if it's the first run.\n */\n _shouldExecute() {\n if (this._dependencies === h || this._dependencyVersions === _)\n return !0;\n for (let e = 0; e < this._dependencies.length; e++) {\n const t = this._dependencies[e];\n if (t) {\n if (\"value\" in t)\n try {\n oe(() => t.value);\n } catch {\n return !0;\n }\n if (t.version !== this._dependencyVersions[e])\n return !0;\n }\n }\n return !1;\n }\n /**\n * Checks for potential infinite loops where an effect modifies its own dependencies.\n * Only active if trackModifications is enabled and debug is on.\n */\n _checkLoopWarnings() {\n if (this._trackModifications && d.enabled) {\n const e = this._dependencies;\n for (let t = 0; t < e.length; t++) {\n const s = e[t];\n s && s._modifiedAtEpoch === this._currentEpoch && d.warn(\n !0,\n `Effect is reading a dependency (${d.getDebugName(s) || \"unknown\"}) that it just modified. Infinite loop may occur`\n );\n }\n }\n }\n}\nfunction Se(i, e = {}) {\n if (typeof i != \"function\")\n throw new b(c.EFFECT_MUST_BE_FUNCTION);\n const t = new le(i, e);\n return t.execute(), t;\n}\nexport {\n T as AsyncState,\n E as AtomError,\n m as ComputedError,\n B as DEBUG_CONFIG,\n d as DEBUG_RUNTIME,\n b as EffectError,\n ae as POOL_CONFIG,\n g as SCHEDULER_CONFIG,\n U as SchedulerError,\n Ee as atom,\n fe as batch,\n be as computed,\n Se as effect,\n ue as isAtom,\n de as isComputed,\n pe as isEffect,\n R as scheduler,\n oe as untracked\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Debug Mode\n * \n * When $.atom.debug = true is enabled:\n * 1. Logs state changes to the console.\n * 2. Visually highlights DOM updates (red border flash).\n * \n * Debug mode can be enabled in two ways:\n * 1. Environment variable (build-time): NODE_ENV=development\n * 2. Runtime: $.atom.debug = true or window.__ATOM_DEBUG__ = true\n */\n\n/**\n * Determines the initial debug state based on environment.\n * Priority: window.__ATOM_DEBUG__ > NODE_ENV === 'development'\n */\nfunction getInitialDebugState(): boolean {\n // Browser: check global flag\n if (typeof window !== 'undefined') {\n const globalFlag = (window as Window & { __ATOM_DEBUG__?: boolean }).__ATOM_DEBUG__;\n if (typeof globalFlag === 'boolean') {\n return globalFlag;\n }\n }\n\n // Vite support\n if (import.meta.env?.DEV && import.meta.env.MODE !== 'test') {\n return true;\n }\n\n // Node/Bundler check\n try {\n // @ts-expect-error\n if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'development') {\n return true;\n }\n } catch (_e) {\n // ignore\n }\n\n return false;\n}\n\nlet debugEnabled = getInitialDebugState();\n\nexport const debug = {\n get enabled() {\n return debugEnabled;\n },\n set enabled(value: boolean) {\n debugEnabled = value;\n },\n\n log<T>(type: string, ...args: T[]) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] ${type}:`, ...args);\n }\n },\n\n atomChanged<T>(name: string | undefined, oldVal: T, newVal: T) {\n if (debugEnabled) {\n const label = name || 'anonymous';\n console.log(\n `[atom-effect-jquery] Atom \"${label}\" changed:`,\n oldVal, '→', newVal\n );\n }\n },\n\n /**\n * Logs DOM updates and triggers visual highlight.\n */\n domUpdated<T>($el: JQuery, type: string, value: T) {\n if (!debugEnabled) return;\n\n // Console logging\n const selector = getDebugSelector($el);\n console.log(\n `[atom-effect-jquery] DOM updated: ${selector}.${type} =`,\n value\n );\n\n // Visual highlight (red border flash)\n highlightElement($el);\n },\n\n cleanup(selector: string) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] Cleanup: ${selector}`);\n }\n },\n\n warn<T>(...args: T[]) {\n if (debugEnabled) {\n console.warn('[atom-effect-jquery]', ...args);\n }\n }\n};\n\n/**\n * Generates a selector string for the element (for debugging).\n */\nfunction getDebugSelector($el: JQuery): string {\n const el = $el[0];\n if (!el) return 'unknown';\n if (el.id) return `#${el.id}`;\n if (el.className) {\n const classes = String(el.className).split(' ').filter(Boolean).join('.');\n return `${el.tagName.toLowerCase()}.${classes}`;\n }\n return el.tagName.toLowerCase();\n}\n\n/**\n * Visual highlight - flashes a red border.\n * Inspired by React DevTools \"Highlight updates\".\n */\nfunction highlightElement($el: JQuery): void {\n // Save current outline\n const originalOutline = $el.css('outline');\n const originalTransition = $el.css('transition');\n\n // Apply red border\n $el.css({\n 'outline': '2px solid #ff4444',\n 'outline-offset': '1px',\n 'transition': 'outline 0.1s ease-out'\n });\n\n // Restore after 200ms\n setTimeout(() => {\n $el.css({\n 'outline': originalOutline || '',\n 'outline-offset': '',\n 'transition': originalTransition || ''\n });\n }, 200);\n}\n","import $ from 'jquery';\nimport {\n atom as createAtom,\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed\n} from '@but212/atom-effect';\nimport { debug } from './debug';\nimport type { AtomOptions, WritableAtom } from './types';\n\n/**\n * Stores Atom metadata (for debugging).\n */\nconst atomMetadata = new WeakMap<WritableAtom<unknown>, { name?: string }>();\n\n/**\n * Creates an atom with optional metadata.\n */\nfunction atom<T>(initialValue: T, options: AtomOptions = {}): WritableAtom<T> {\n const instance = createAtom(initialValue, options);\n \n // Store metadata\n if (options.name) {\n atomMetadata.set(instance, { name: options.name });\n }\n\n // Debug mode: Value change detection\n // Note: Wrapper logic removed due to interference with atom-effect internals (computed reactivity)\n // Revisit if safer interception method is found.\n /*\n if (debug.enabled || options.name) {\n // ... removed ...\n }\n */\n\n return instance;\n}\n\n// Add debug property\nObject.defineProperty(atom, 'debug', {\n get() {\n return debug.enabled;\n },\n set(value: boolean) {\n debug.enabled = value;\n }\n});\n\n/**\n * Waits for the next microtask (tick).\n * Useful for waiting for batched updates to complete in tests or async logic.\n * logic: Uses setTimeout to ensure it runs after all microtasks (where effects are processed).\n */\nfunction nextTick(): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, 0));\n}\n\n/**\n * Extend jQuery static methods.\n */\n$.extend({\n atom,\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed,\n isReactive: (v: unknown) => isAtom(v) || isComputed(v),\n nextTick\n});\n","import type { ReactiveValue, ReadonlyAtom, ComputedAtom } from './types';\n\n/**\n * Checks if a given value is a reactive object (Atom or Computed).\n * A reactive object is expected to have a 'value' property and a 'subscribe' method.\n * \n * @param value - The value to check.\n * @returns True if the value is reactive, false otherwise.\n */\nexport function isReactive(value: unknown): value is ReadonlyAtom<unknown> | ComputedAtom<unknown> {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'subscribe' in value\n );\n}\n\n/**\n * Extracts the underlying raw value from a ReactiveValue.\n * If the source is reactive, it returns its current value; otherwise, it returns the source itself.\n * \n * @template T - The type of the value.\n * @param source - The reactive value or raw value to extract from.\n * @returns The extracted raw value.\n */\nexport function getValue<T>(source: ReactiveValue<T>): T {\n if (isReactive(source)) {\n return (source as ReadonlyAtom<T>).value;\n }\n return source as T;\n}\n\n/**\n * Generates a CSS selector string for a DOM element.\n * This is primarily used for debugging and logging purposes to identify elements.\n * \n * @param el - The DOM element to generate a selector for.\n * @returns A string representing the element's ID, classes, or tag name.\n */\nexport function getSelector(el: Element): string {\n if (el.id) return `#${el.id}`;\n if (el.className) {\n const classes = String(el.className).split(/\\s+/).filter(Boolean).join('.');\n return classes ? `${el.tagName.toLowerCase()}.${classes}` : el.tagName.toLowerCase();\n }\n return el.tagName.toLowerCase();\n}\n","import type { EffectObject } from './types';\nimport { debug } from './debug';\nimport { getSelector } from './utils';\n\n/**\n * Binding Registry\n * \n * Solving Circular Reference Issues:\n * - Prevents Atom -> Subscription -> Callback -> DOM Element cycle.\n * - Uses WeakMap to track effects and cleanup functions per DOM element.\n * - Automatically unsubscribes when DOM elements are removed via MutationObserver.\n * \n * Preventing Memory Leaks:\n * - Must call unsubscribe() when DOM is removed.\n * - Recursively cleans up child nodes.\n */\nclass BindingRegistry {\n // DOM Element -> Effect Array (for disposal)\n private effects = new WeakMap<Element, EffectObject[]>();\n \n // DOM Element -> Custom Cleanup Function Array\n private cleanups = new WeakMap<Element, Array<() => void>>();\n \n // Track bound elements (Performance optimization)\n private boundElements = new WeakSet<Element>();\n\n /**\n * Registers an Effect to be disposed later.\n */\n trackEffect(el: Element, fx: EffectObject): void {\n const list = this.effects.get(el) || [];\n list.push(fx);\n this.effects.set(el, list);\n this.boundElements.add(el);\n }\n\n /**\n * Registers a custom cleanup function (e.g., event listener removal).\n */\n trackCleanup(el: Element, fn: () => void): void {\n const list = this.cleanups.get(el) || [];\n list.push(fn);\n this.cleanups.set(el, list);\n this.boundElements.add(el);\n }\n\n /**\n * Checks if an element has bindings (Fast check).\n */\n hasBind(el: Element): boolean {\n return this.boundElements.has(el);\n }\n\n /**\n * Cleans up a single element.\n * - Disposes all Effects (severs connection with Atom).\n * - Executes all custom cleanups.\n */\n cleanup(el: Element): void {\n if (!this.boundElements.has(el)) return;\n\n debug.cleanup(getSelector(el));\n\n // 1. Dispose Effects - Unsubscribe from Atoms (Break circular reference!)\n const effects = this.effects.get(el);\n if (effects) {\n this.effects.delete(el); // Delete first to prevent re-entry\n effects.forEach(fx => {\n try { \n fx.dispose(); \n } catch (e) {\n debug.warn('Effect dispose error:', e);\n }\n });\n }\n\n // 2. Execute custom cleanups (e.g., remove event listeners)\n const cleanups = this.cleanups.get(el);\n if (cleanups) {\n this.cleanups.delete(el); // Delete first to prevent re-entry\n cleanups.forEach(fn => {\n try { fn(); } catch (e) {\n debug.warn('Cleanup error:', e);\n }\n });\n }\n\n this.boundElements.delete(el);\n }\n\n /**\n * Cleans up the element and all its descendants (Recursive).\n * - Essential for deep removal (empty(), remove(), etc.).\n */\n cleanupTree(el: Element): void {\n // Descendants first (Depth-First)\n const children = el.querySelectorAll('*');\n children.forEach(child => {\n if (this.boundElements.has(child)) {\n this.cleanup(child);\n }\n });\n \n // Then the element itself\n this.cleanup(el);\n }\n}\n\nexport const registry = new BindingRegistry();\n\n/**\n * MutationObserver for Auto-Cleanup\n * \n * jQuery's .remove() or .empty() cannot clean up external library (Atom) subscriptions.\n * MutationObserver is essential to detect DOM removals and trigger cleanup.\n */\n\nlet observer: MutationObserver | null = null;\n\nexport function enableAutoCleanup(root: Element = document.body): void {\n if (observer) return;\n\n observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n mutation.removedNodes.forEach(node => {\n if (node instanceof Element) {\n // Cleanup removed node and all its descendants recursively\n registry.cleanupTree(node);\n }\n });\n }\n });\n\n observer.observe(root, { childList: true, subtree: true });\n}\n\nexport function disableAutoCleanup(): void {\n observer?.disconnect();\n observer = null;\n}\n","import $ from 'jquery';\nimport { effect, batch } from '@but212/atom-effect';\nimport { registry } from './registry';\nimport { debug } from './debug';\nimport { isReactive, getValue } from './utils';\nimport type { ReactiveValue, WritableAtom, ValOptions } from './types';\n\n/**\n * Updates element text content.\n * @param source - Atom or static value.\n * @param formatter - Optional function to format the value.\n */\n$.fn.atomText = function<T>(\n source: ReactiveValue<T>,\n formatter?: (v: T) => string\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(source)) {\n const fx = effect(() => {\n const value = getValue(source);\n const text = formatter ? formatter(value) : String(value ?? '');\n $el.text(text);\n debug.domUpdated($el, 'text', text);\n });\n registry.trackEffect(this, fx);\n } else {\n const text = formatter ? formatter(source) : String(source ?? '');\n $el.text(text);\n }\n });\n};\n\n/**\n * Updates element inner HTML.\n * @param source - Atom or static value.\n */\n$.fn.atomHtml = function(source: ReactiveValue<string>): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(source)) {\n const fx = effect(() => {\n const html = String(getValue(source) ?? '');\n $el.html(html);\n debug.domUpdated($el, 'html', html);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.html(String(source ?? ''));\n }\n });\n};\n\n/**\n * Toggles a CSS class based on boolean value.\n * @param className - The class to toggle.\n * @param condition - Boolean source value.\n */\n$.fn.atomClass = function(\n className: string,\n condition: ReactiveValue<boolean>\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(condition)) {\n const fx = effect(() => {\n const value = Boolean(getValue(condition));\n $el.toggleClass(className, value);\n debug.domUpdated($el, `class.${className}`, value);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.toggleClass(className, Boolean(condition));\n }\n });\n};\n\n/**\n * Updates a CSS style property.\n * @param prop - CSS property name.\n * @param source - Value source.\n * @param unit - Optional unit (e.g., 'px', 'em').\n */\n$.fn.atomCss = function(\n prop: string,\n source: ReactiveValue<string | number>,\n unit?: string\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(source)) {\n const fx = effect(() => {\n const value = getValue(source);\n const cssValue = unit ? `${value}${unit}` : value;\n $el.css(prop, cssValue);\n debug.domUpdated($el, `css.${prop}`, cssValue);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.css(prop, unit ? `${source}${unit}` : source);\n }\n });\n};\n\n/**\n * Updates an HTML attribute.\n * @param name - Attribute name.\n * @param source - Attribute value.\n */\n$.fn.atomAttr = function(\n name: string,\n source: ReactiveValue<string | boolean | null>\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n const applyAttr = (value: string | boolean | null) => {\n if (value === null || value === undefined || value === false) {\n $el.removeAttr(name);\n } else if (value === true) {\n $el.attr(name, name);\n } else {\n $el.attr(name, String(value));\n }\n debug.domUpdated($el, `attr.${name}`, value);\n };\n\n if (isReactive(source)) {\n const fx = effect(() => applyAttr(getValue(source)));\n registry.trackEffect(this, fx);\n } else {\n applyAttr(source);\n }\n });\n};\n\n/**\n * Updates a DOM property (e.g., checked, selected, value).\n * @param name - Property name.\n * @param source - Property value.\n */\n$.fn.atomProp = function<T extends string | number | boolean | null | undefined>(\n name: string,\n source: ReactiveValue<T>\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(source)) {\n const fx = effect(() => {\n const value = getValue(source);\n $el.prop(name, value);\n debug.domUpdated($el, `prop.${name}`, value);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.prop(name, source);\n }\n });\n};\n\n/**\n * Shows element when condition is true.\n * @param condition - Boolean source value.\n */\n$.fn.atomShow = function(condition: ReactiveValue<boolean>): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(condition)) {\n const fx = effect(() => {\n const value = Boolean(getValue(condition));\n $el.toggle(value);\n debug.domUpdated($el, 'show', value);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.toggle(Boolean(condition));\n }\n });\n};\n\n/**\n * Hides element when condition is true.\n * @param condition - Boolean source value.\n */\n$.fn.atomHide = function(condition: ReactiveValue<boolean>): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n if (isReactive(condition)) {\n const fx = effect(() => {\n const value = !getValue(condition);\n $el.toggle(value);\n debug.domUpdated($el, 'hide', !value);\n });\n registry.trackEffect(this, fx);\n } else {\n $el.toggle(!condition);\n }\n });\n};\n\n/**\n * Two-way binding for input values.\n * Supports IME (Input Method Editor) for CJK languages.\n * Prevents infinite loops between DOM events and Atom updates.\n */\n$.fn.atomVal = function<T>(\n atom: WritableAtom<T>,\n options: ValOptions<T> = {}\n): JQuery {\n const {\n debounce: debounceMs,\n event = 'input',\n parse = (v: string) => v as unknown as T,\n format = (v: T) => String(v ?? '')\n } = options;\n\n return this.each(function() {\n const $el = $(this);\n \n let timeoutId: number | null = null;\n let isUpdatingFromAtom = false; // Prevents infinite loop\n let isComposing = false; // IME composition state\n let isUpdating = false; // Update lock flag\n\n // ========== IME Events ==========\n const onCompositionStart = () => {\n isComposing = true;\n };\n\n const onCompositionEnd = () => {\n isComposing = false;\n // Update Atom on composition end\n updateAtom();\n };\n\n $el.on('compositionstart', onCompositionStart);\n $el.on('compositionend', onCompositionEnd);\n\n // ========== Update Logic ==========\n const updateAtom = () => {\n if (isUpdatingFromAtom || isUpdating) return;\n \n batch(() => {\n atom.value = parse($el.val() as string);\n });\n };\n\n // ========== DOM → Atom ==========\n const onInput = () => {\n // Ignore if composing or currently updating\n if (isComposing || isUpdating) return;\n if (isUpdatingFromAtom) return;\n\n if (debounceMs) {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = window.setTimeout(updateAtom, debounceMs);\n } else {\n updateAtom();\n }\n };\n\n $el.on(event, onInput);\n $el.on('change', onInput);\n \n // ========== Atom → DOM ==========\n const fx = effect(() => {\n const formatted = format(atom.value);\n \n // Update only if value matches specific formatted string to prevent cursor jumps or unnecessary updates\n if ($el.val() !== formatted) {\n isUpdatingFromAtom = true;\n isUpdating = true; // Lock\n $el.val(formatted);\n debug.domUpdated($el, 'val', formatted);\n isUpdating = false; // Unlock\n isUpdatingFromAtom = false;\n }\n });\n\n registry.trackEffect(this, fx);\n\n // ========== Cleanup ==========\n registry.trackCleanup(this, () => {\n $el.off(event, onInput);\n $el.off('change', onInput);\n $el.off('compositionstart', onCompositionStart);\n $el.off('compositionend', onCompositionEnd);\n if (timeoutId) clearTimeout(timeoutId);\n });\n });\n};\n\n/**\n * Two-way binding for checkbox/radio checked state.\n */\n$.fn.atomChecked = function(atom: WritableAtom<boolean>): JQuery {\n return this.each(function() {\n const $el = $(this);\n \n let isUpdatingFromAtom = false;\n\n // DOM → Atom\n const handler = () => {\n if (isUpdatingFromAtom) return;\n \n batch(() => {\n atom.value = $el.prop('checked');\n });\n };\n \n $el.on('change', handler);\n registry.trackCleanup(this, () => $el.off('change', handler));\n\n // Atom → DOM\n const fx = effect(() => {\n isUpdatingFromAtom = true;\n $el.prop('checked', atom.value);\n debug.domUpdated($el, 'checked', atom.value);\n isUpdatingFromAtom = false;\n });\n registry.trackEffect(this, fx);\n });\n};\n\n/**\n * Binds an event handler that automatically runs within a batch.\n */\n$.fn.atomOn = function(\n event: string,\n handler: (e: JQuery.Event) => void\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n\n const wrappedHandler = function(this: HTMLElement, e: JQuery.Event) {\n batch(() => handler.call(this, e));\n };\n\n $el.on(event, wrappedHandler);\n registry.trackCleanup(this, () => $el.off(event, wrappedHandler));\n });\n};\n\n/**\n * Removes all atom bindings and cleanup effects from the elements.\n */\n$.fn.atomUnbind = function(): JQuery {\n return this.each(function() {\n registry.cleanupTree(this);\n });\n};\n","import $ from 'jquery';\nimport { effect, batch } from '@but212/atom-effect';\nimport { registry } from './registry';\nimport { debug } from './debug';\nimport { isReactive, getValue } from './utils';\nimport type { BindingOptions } from './types';\n\n/**\n * Extends jQuery with atom-based data binding capabilities.\n * This plugin allows synchronizing DOM element states (text, html, classes, styles, etc.)\n * with reactive atoms or static values. It also supports two-way binding for form inputs\n * and automatic cleanup of effects and event listeners.\n *\n * @param options - Configuration object defining the bindings.\n * @returns The jQuery object for chainability.\n */\n$.fn.atomBind = function<T extends string | number | boolean | null | undefined>(options: BindingOptions<T>): JQuery {\n return this.each(function() {\n const $el = $(this);\n const effects: (() => void)[] = [];\n\n // Text\n if (options.text !== undefined) {\n if (isReactive(options.text)) {\n effects.push(() => {\n const text = String(getValue(options.text) ?? '');\n $el.text(text);\n debug.domUpdated($el, 'text', text);\n });\n } else {\n $el.text(String(options.text ?? ''));\n }\n }\n\n // HTML\n if (options.html !== undefined) {\n if (isReactive(options.html)) {\n effects.push(() => {\n const html = String(getValue(options.html) ?? '');\n $el.html(html);\n debug.domUpdated($el, 'html', html);\n });\n } else {\n $el.html(String(options.html ?? ''));\n }\n }\n\n // Class\n if (options.class) {\n for (const [className, condition] of Object.entries(options.class)) {\n if (isReactive(condition)) {\n effects.push(() => {\n const value = Boolean(getValue(condition));\n $el.toggleClass(className, value);\n debug.domUpdated($el, `class.${className}`, value);\n });\n } else {\n $el.toggleClass(className, Boolean(condition));\n }\n }\n }\n\n // CSS\n if (options.css) {\n for (const [prop, value] of Object.entries(options.css)) {\n if (Array.isArray(value)) {\n const [source, unit] = value;\n if (isReactive(source)) {\n effects.push(() => {\n const cssValue = `${getValue(source)}${unit}`;\n $el.css(prop, cssValue);\n debug.domUpdated($el, `css.${prop}`, cssValue);\n });\n } else {\n $el.css(prop, `${source}${unit}`);\n }\n } else if (isReactive(value)) {\n effects.push(() => {\n const cssValue = getValue(value) as string | number;\n $el.css(prop, cssValue);\n debug.domUpdated($el, `css.${prop}`, cssValue);\n });\n } else {\n $el.css(prop, value as string | number);\n }\n }\n }\n\n // Attributes\n if (options.attr) {\n for (const [name, value] of Object.entries(options.attr)) {\n const applyAttr = (v: string | boolean | null | undefined) => {\n if (v === null || v === undefined || v === false) {\n $el.removeAttr(name);\n } else if (v === true) {\n $el.attr(name, name);\n } else {\n $el.attr(name, String(v));\n }\n debug.domUpdated($el, `attr.${name}`, v);\n };\n\n if (isReactive(value)) {\n effects.push(() => applyAttr(getValue(value)));\n } else {\n applyAttr(value);\n }\n }\n }\n\n // Properties\n if (options.prop) {\n for (const [name, value] of Object.entries(options.prop)) {\n if (isReactive(value)) {\n effects.push(() => {\n const propValue = getValue(value);\n $el.prop(name, propValue);\n debug.domUpdated($el, `prop.${name}`, propValue);\n });\n } else {\n $el.prop(name, value);\n }\n }\n }\n\n // Show\n if (options.show !== undefined) {\n if (isReactive(options.show)) {\n effects.push(() => {\n const value = Boolean(getValue(options.show));\n $el.toggle(value);\n debug.domUpdated($el, 'show', value);\n });\n } else {\n $el.toggle(Boolean(options.show));\n }\n }\n\n // Hide\n if (options.hide !== undefined) {\n if (isReactive(options.hide)) {\n effects.push(() => {\n const value = !getValue(options.hide);\n $el.toggle(value);\n debug.domUpdated($el, 'hide', !value);\n });\n } else {\n $el.toggle(!options.hide);\n }\n }\n\n // Val (Two-way) - Supports IME\n if (options.val !== undefined) {\n const atom = options.val;\n let isUpdatingFromAtom = false;\n let isComposing = false;\n\n // IME Events\n const onCompositionStart = () => { isComposing = true; };\n const onCompositionEnd = () => {\n isComposing = false;\n if (!isUpdatingFromAtom) {\n batch(() => { atom.value = $el.val() as unknown as T; });\n }\n };\n\n $el.on('compositionstart', onCompositionStart);\n $el.on('compositionend', onCompositionEnd);\n\n const handler = () => {\n if (isComposing || isUpdatingFromAtom) return;\n batch(() => { atom.value = $el.val() as unknown as T; });\n };\n \n $el.on('input change', handler);\n \n registry.trackCleanup(this, () => {\n $el.off('input change', handler);\n $el.off('compositionstart', onCompositionStart);\n $el.off('compositionend', onCompositionEnd);\n });\n\n effects.push(() => {\n const v = String(atom.value ?? '');\n if ($el.val() !== v) {\n isUpdatingFromAtom = true;\n $el.val(v);\n debug.domUpdated($el, 'val', v);\n isUpdatingFromAtom = false;\n }\n });\n }\n\n // Checked (Two-way)\n if (options.checked !== undefined) {\n const atom = options.checked;\n let isUpdatingFromAtom = false;\n\n const handler = () => {\n if (isUpdatingFromAtom) return;\n batch(() => { atom.value = $el.prop('checked'); });\n };\n \n $el.on('change', handler);\n registry.trackCleanup(this, () => $el.off('change', handler));\n\n effects.push(() => {\n isUpdatingFromAtom = true;\n $el.prop('checked', atom.value);\n debug.domUpdated($el, 'checked', atom.value);\n isUpdatingFromAtom = false;\n });\n }\n\n // Event Handlers\n if (options.on) {\n for (const [eventName, handler] of Object.entries(options.on)) {\n const wrapped = function(this: HTMLElement, e: JQuery.Event) {\n batch(() => handler.call(this, e));\n };\n $el.on(eventName, wrapped);\n registry.trackCleanup(this, () => $el.off(eventName, wrapped));\n }\n }\n\n // Register Effects\n effects.forEach(fn => {\n const fx = effect(fn);\n registry.trackEffect(this, fx);\n });\n });\n};\n","import $ from 'jquery';\nimport { effect } from '@but212/atom-effect';\nimport { registry } from './registry';\nimport { debug } from './debug';\nimport { getSelector } from './utils';\nimport type { ListOptions, ReadonlyAtom } from './types';\n\n/**\n * Implementation of atomList\n * \n * v1.0 Limitations:\n * - Optimized for simple additions/removals.\n * - Sorting/Moving re-inserts elements (preserving instances).\n * - Advanced keyed diffing planned for v2.0.\n * \n * WARNING:\n * While basic node reuse is implemented, complex updates might cause focus loss depending on usage.\n * For complex interactive lists, considering using individual component bindings is recommended.\n */\n$.fn.atomList = function<T>(\n source: ReadonlyAtom<T[]>,\n options: ListOptions<T>\n): JQuery {\n return this.each(function() {\n const $container = $(this);\n const containerSelector = getSelector(this);\n\n const { key, render, bind, onAdd, onRemove, empty } = options;\n\n const getKey = typeof key === 'function'\n ? key\n : (item: T) => item[key as keyof T] as unknown as string | number;\n\n const itemMap = new Map<string | number, { $el: JQuery; item: T }>();\n let $emptyEl: JQuery | null = null;\n\n const fx = effect(() => {\n const items = source.value;\n const newKeys = new Set<string | number>();\n\n debug.log('list', `${containerSelector} updating with ${items.length} items`);\n\n // Empty state\n if (items.length === 0 && empty) {\n if (!$emptyEl) {\n $emptyEl = $(empty);\n $container.append($emptyEl);\n }\n for (const [, entry] of itemMap) {\n entry.$el.remove();\n registry.cleanup(entry.$el[0]!);\n }\n itemMap.clear();\n return;\n } else if ($emptyEl) {\n $emptyEl.remove();\n $emptyEl = null;\n }\n\n // Process items\n let $prev: JQuery | null = null;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n const k = getKey(item, i);\n newKeys.add(k);\n\n const existing = itemMap.get(k);\n\n if (existing) {\n // Reposition if needed (Reconciliation)\n const node = existing.$el[0]!;\n const prevNode = $prev ? $prev[0] : null;\n\n // Ideal next sibling\n // If prevNode exists, our node should be prevNode.nextSibling\n // If prevNode is null, our node should be container.firstChild\n const isAtCorrectPos = prevNode \n ? node.previousSibling === prevNode\n : node === $container[0]!.firstChild;\n\n if (!isAtCorrectPos) {\n if ($prev) {\n $prev.after(existing.$el);\n } else {\n $container.prepend(existing.$el);\n }\n }\n existing.item = item;\n $prev = existing.$el;\n } else {\n // Create new\n const html = render(item, i);\n const $el = $(html);\n\n if ($prev) {\n $prev.after($el);\n } else {\n $container.prepend($el);\n }\n\n itemMap.set(k, { $el, item });\n\n if (bind) {\n bind($el, item, i);\n }\n\n if (onAdd) {\n onAdd($el);\n }\n\n debug.log('list', `${containerSelector} added item:`, k);\n\n $prev = $el;\n }\n }\n\n // Remove\n for (const [k, entry] of itemMap) {\n if (!newKeys.has(k)) {\n const doRemove = () => {\n entry.$el.remove();\n registry.cleanup(entry.$el[0]!);\n itemMap.delete(k);\n debug.log('list', `${containerSelector} removed item:`, k);\n };\n\n if (onRemove) {\n Promise.resolve(onRemove(entry.$el)).then(doRemove);\n } else {\n doRemove();\n }\n }\n }\n });\n\n registry.trackEffect(this, fx);\n registry.trackCleanup(this, () => {\n itemMap.clear();\n $emptyEl?.remove();\n });\n });\n};\n","import $ from 'jquery';\nimport { registry } from './registry';\nimport { debug } from './debug';\nimport { getSelector } from './utils';\nimport type { ComponentFn } from './types';\n\nconst mountedComponents = new WeakMap<Element, () => void>();\n\n/**\n * Mounts a functional component to the element.\n * Automatically cleans up existing components on the same element.\n */\n$.fn.atomMount = function<P>(\n component: ComponentFn<P>,\n props: P = {} as P\n): JQuery {\n return this.each(function() {\n const $el = $(this);\n const selector = getSelector(this);\n\n // Unmount existing component\n const existing = mountedComponents.get(this);\n if (existing) {\n debug.log('mount', `${selector} unmounting existing component`);\n existing();\n }\n\n debug.log('mount', `${selector} mounting component`);\n\n // Mount\n let userCleanup: void | (() => void);\n try {\n userCleanup = component($el, props);\n } catch (e) {\n console.error('[atom-effect-jquery] Mount error:', e);\n return;\n }\n\n // cleanup\n let isUnmounted = false;\n const fullCleanup = () => {\n if (isUnmounted) return;\n isUnmounted = true;\n\n debug.log('mount', `${selector} full cleanup`);\n \n if (typeof userCleanup === 'function') {\n try { userCleanup(); } catch {}\n }\n registry.cleanupTree(this);\n mountedComponents.delete(this);\n };\n\n mountedComponents.set(this, fullCleanup);\n registry.trackCleanup(this, fullCleanup);\n });\n};\n\n/**\n * Manually unmounts a component from the element.\n */\n$.fn.atomUnmount = function(): JQuery {\n return this.each(function() {\n mountedComponents.get(this)?.();\n });\n};\n","import $ from 'jquery';\nimport { batch } from '@but212/atom-effect';\n\n/**\n * WeakMap to store strict association between original handlers and batched wrappers.\n * This ensures that .off() works correctly when passing the original handler.\n */\nconst handlerMap = new WeakMap<Function, Function>();\n\nlet isjQueryBatchingEnabled = false;\n\n/**\n * Patches jQuery event methods to automatically wrap handlers in a batch().\n * This ensures that state changes inside standard jQuery event handlers\n * trigger updates efficiently.\n */\nexport function enablejQueryBatching() {\n if (isjQueryBatchingEnabled) return;\n isjQueryBatchingEnabled = true;\n const originalOn = $.fn.on;\n const originalOff = $.fn.off;\n\n // Patch .on()\n // biome-ignore lint/suspicious/noExplicitAny: jQuery method patching requires dynamic arguments\n $.fn.on = function (this: any, ...args: any[]) {\n // 1. Find the handler function in arguments\n // jQuery .on() signatures are flexible, but the handler is always \n // the last argument that is a function.\n let fnIndex = -1;\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n fnIndex = i;\n break;\n }\n }\n\n if (fnIndex !== -1) {\n const originalFn = args[fnIndex];\n \n // 2. reuse or create wrapper\n let wrappedFn: Function | undefined;\n if (handlerMap.has(originalFn)) {\n wrappedFn = handlerMap.get(originalFn);\n } else {\n // biome-ignore lint/suspicious/noExplicitAny: preserving internal this context\n wrappedFn = function (this: any, ...eventArgs: any[]) {\n // biome-ignore lint/suspicious/noExplicitAny: capture any return value\n let result: any;\n batch(() => {\n result = originalFn.apply(this, eventArgs);\n });\n return result;\n };\n handlerMap.set(originalFn, wrappedFn);\n }\n\n // 3. Replace argument\n args[fnIndex] = wrappedFn;\n }\n\n // 4. Call original\n // biome-ignore lint/suspicious/noExplicitAny: dynamic arguments binding\n return originalOn.apply(this, args as any);\n };\n\n // Patch .off()\n // biome-ignore lint/suspicious/noExplicitAny: jQuery method patching requires dynamic arguments\n $.fn.off = function (this: any, ...args: any[]) {\n // 1. Find the handler\n let fnIndex = -1;\n for (let i = args.length - 1; i >= 0; i--) {\n // Note: In .off(), sometimes the function is not the last valid arg,\n // but usually provided clearly.\n if (typeof args[i] === 'function') {\n fnIndex = i;\n break;\n }\n }\n\n if (fnIndex !== -1) {\n const originalFn = args[fnIndex];\n // 2. If we have a wrapper for this, pass the wrapper to .off()\n // because that's what jQuery has stored.\n if (handlerMap.has(originalFn)) {\n args[fnIndex] = handlerMap.get(originalFn);\n }\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: dynamic arguments binding\n return originalOff.apply(this, args as any);\n };\n}\n","/**\n * atom-effect-jquery\n * \n * Brings reactivity to jQuery.\n * \n * Features:\n * - Full CJK IME Support (Input Method Editor).\n * - Auto-cleanup via MutationObserver (No memory leaks).\n * - Debug Mode: Console logging + Visual Highlighting.\n */\n\nimport $ from 'jquery';\n\n// Register plugins\nimport './namespace';\nimport './chainable';\nimport './unified';\nimport './list';\nimport './mount';\n\n// Auto-cleanup (Crucial!)\nimport { enableAutoCleanup, disableAutoCleanup, registry } from './registry';\n\n// Auto-enable on DOM ready\n$(() => enableAutoCleanup(document.body));\n\n// Explicit import support\nexport {\n atom,\n computed,\n effect,\n batch,\n untracked\n} from '@but212/atom-effect';\n\n// Export types\nexport type {\n WritableAtom,\n ReadonlyAtom,\n ComputedAtom,\n BindingOptions,\n ListOptions,\n ComponentFn\n} from './types';\n\n// Optional: Auto-batching for jQuery events\nexport { enablejQueryBatching } from './jquery-patch';\n\nexport { registry, enableAutoCleanup, disableAutoCleanup };\nexport default $;\n"],"names":["Z","T","A","u","g","B","N","l","E","t","s","m","b","U","c","i","P","ee","M","q","te","k","X","n","d","_a","se","ie","G","$","L","H","O","V","x","j","z","ne","re","R","fe","I","oe","F","ue","de","Q","ce","Y","J","W","he","Ee","w","h","a","_","S","D","f","_e","C","K","v","p","y","be","le","_b","Se","getInitialDebugState","globalFlag","debugEnabled","debug","value","type","args","name","oldVal","newVal","$el","selector","getDebugSelector","highlightElement","el","classes","originalOutline","originalTransition","atomMetadata","atom","initialValue","options","instance","createAtom","nextTick","resolve","computed","effect","batch","untracked","isAtom","isComputed","isReactive","getValue","source","getSelector","BindingRegistry","__publicField","fx","list","fn","effects","e","cleanups","child","registry","observer","enableAutoCleanup","root","mutations","mutation","node","disableAutoCleanup","formatter","text","html","className","condition","prop","unit","cssValue","applyAttr","debounceMs","event","parse","format","timeoutId","isUpdatingFromAtom","isComposing","isUpdating","onCompositionStart","onCompositionEnd","updateAtom","onInput","formatted","handler","wrappedHandler","propValue","eventName","wrapped","$container","containerSelector","key","render","bind","onAdd","onRemove","empty","getKey","item","itemMap","$emptyEl","items","newKeys","entry","$prev","existing","prevNode","doRemove","mountedComponents","component","props","userCleanup","isUnmounted","fullCleanup","handlerMap","isjQueryBatchingEnabled","enablejQueryBatching","originalOn","originalOff","fnIndex","originalFn","wrappedFn","eventArgs","result"],"mappings":"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","x_google_ignoreList":[0]}
|