@but212/atom-effect-jquery 0.16.0 → 0.17.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 +17 -158
- package/dist/atom-effect-jquery.min.js +1 -1
- package/dist/atom-effect-jquery.min.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1054 -1278
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# @but212/atom-effect-jquery
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@but212/atom-effect-jquery)
|
|
4
|
-
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
## Quick Start
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
### Installation
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
npm install @but212/atom-effect-jquery jquery
|
|
@@ -14,174 +14,33 @@ npm install @but212/atom-effect-jquery jquery
|
|
|
14
14
|
### CDN
|
|
15
15
|
|
|
16
16
|
```html
|
|
17
|
-
<script src="https://
|
|
18
|
-
<script src="https://cdn.jsdelivr.net/npm/@but212/atom-effect-jquery@latest"></script>
|
|
17
|
+
<script src="https://cdn.jsdelivr.net/npm/@but212/atom-effect-jquery@0.17.0"></script>
|
|
19
18
|
```
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
### Usage
|
|
21
|
+
|
|
22
|
+
Instead of manually updating the DOM in 5 different places, you define the relationship **once**.
|
|
22
23
|
|
|
23
24
|
```javascript
|
|
24
25
|
import $ from 'jquery';
|
|
25
26
|
import '@but212/atom-effect-jquery';
|
|
26
27
|
|
|
28
|
+
// 1. Define State
|
|
27
29
|
const count = $.atom(0);
|
|
28
30
|
|
|
29
|
-
// Bind
|
|
30
|
-
$('#count').atomText(count);
|
|
31
|
+
// 2. Bind to DOM (Declarative)
|
|
32
|
+
$('#count-display').atomText(count);
|
|
33
|
+
$('#btn-increment').on('click', () => count.value++);
|
|
31
34
|
|
|
32
|
-
//
|
|
33
|
-
|
|
35
|
+
// 3. Conditional UI
|
|
36
|
+
const isBig = $.computed(() => count.value > 10);
|
|
37
|
+
$('#warning-msg').atomShow(isBig);
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
##
|
|
37
|
-
|
|
38
|
-
All methods return the jQuery object for chaining.
|
|
39
|
-
Bindings automatically clean up when elements are removed.
|
|
40
|
-
|
|
41
|
-
### Static Methods
|
|
42
|
-
|
|
43
|
-
| Method | Description |
|
|
44
|
-
| --- | --- |
|
|
45
|
-
| `$.atom(val)` | Creates a writable atom. |
|
|
46
|
-
| `$.computed(fn)` | Creates a computed atom. |
|
|
47
|
-
| `$.effect(fn)` | Runs a side effect. |
|
|
48
|
-
| `$.batch(fn)` | Groups updates for synchronous reflection. |
|
|
49
|
-
| `$.isAtom(val)` | Checks if value is an atom. |
|
|
50
|
-
|
|
51
|
-
### Content & Attributes
|
|
52
|
-
|
|
53
|
-
| Method | Description |
|
|
54
|
-
| --- | --- |
|
|
55
|
-
| `.atomText(atom, formatter?)` | Binds text content. |
|
|
56
|
-
| `.atomHtml(atom)` | Binds inner HTML. |
|
|
57
|
-
| `.atomClass(class, boolAtom)` | Toggles class based on boolean atom. |
|
|
58
|
-
| `.atomCss(prop, atom, unit?)` | Binds CSS property. |
|
|
59
|
-
| `.atomAttr(attr, atom)` | Binds HTML attribute. |
|
|
60
|
-
| `.atomProp(prop, atom)` | Binds DOM property. |
|
|
61
|
-
| `.atomShow(boolAtom)` | Shows element if true. |
|
|
62
|
-
| `.atomHide(boolAtom)` | Hides element if true. |
|
|
63
|
-
|
|
64
|
-
### Form Bindings
|
|
65
|
-
|
|
66
|
-
#### `.atomVal(atom, options?)`
|
|
67
|
-
|
|
68
|
-
Two-way binding for inputs.
|
|
69
|
-
|
|
70
|
-
- `options.debounce`: (ms) Debounce updates.
|
|
71
|
-
- `options.format`: (fn) Format value on blur.
|
|
72
|
-
|
|
73
|
-
#### `.atomChecked(boolAtom)`
|
|
74
|
-
|
|
75
|
-
Two-way binding for checkboxes/radios.
|
|
76
|
-
|
|
77
|
-
### Events
|
|
78
|
-
|
|
79
|
-
#### `.atomOn(event, handler)`
|
|
80
|
-
|
|
81
|
-
Binds event handler with automatic lifecycle management (cleanup).
|
|
82
|
-
|
|
83
|
-
### Unified Binding
|
|
84
|
-
|
|
85
|
-
#### `.atomBind(bindings)`
|
|
86
|
-
|
|
87
|
-
Apply multiple bindings at once.
|
|
88
|
-
|
|
89
|
-
```javascript
|
|
90
|
-
$('.card').atomBind({
|
|
91
|
-
text: titleAtom,
|
|
92
|
-
class: { 'active': isActive },
|
|
93
|
-
css: { 'color': colorAtom },
|
|
94
|
-
on: { click: handleClick }
|
|
95
|
-
});
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### List Rendering
|
|
99
|
-
|
|
100
|
-
#### `.atomList(listAtom, options)`
|
|
101
|
-
|
|
102
|
-
Efficiently renders a list of items using keyed diffing.
|
|
103
|
-
|
|
104
|
-
```javascript
|
|
105
|
-
$('ul').atomList(items, {
|
|
106
|
-
key: (item) => item.id,
|
|
107
|
-
render: (item) => `<li>${item.name}</li>`,
|
|
108
|
-
bind: ($el, item) => {
|
|
109
|
-
$el.on('click', () => select(item));
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Options**: `key` (required), `render`, `bind`, `onAdd`, `onRemove`, `empty`.
|
|
115
|
-
|
|
116
|
-
### Components
|
|
117
|
-
|
|
118
|
-
#### `.atomMount(Component, props)`
|
|
119
|
-
|
|
120
|
-
Mounts a functional component with its own lifestyle management.
|
|
121
|
-
|
|
122
|
-
```javascript
|
|
123
|
-
const Counter = ($el, props) => {
|
|
124
|
-
const count = $.atom(props.start);
|
|
125
|
-
$el.atomText(count);
|
|
126
|
-
return () => console.log('cleanup');
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
$('#app').atomMount(Counter, { start: 10 });
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
## Key Features
|
|
133
|
-
|
|
134
|
-
- **Automatic Lifecycle**: Bindings clean up automatically when jQuery elements are removed (`$.cleanData` integration).
|
|
135
|
-
- **Fine-grained Updates**: Only the specific element property/attribute changes, preventing full list re-renders.
|
|
136
|
-
- **Reparenting-Safe**: Elements can be moved within the DOM without losing their reactive bindings.
|
|
137
|
-
|
|
138
|
-
## Automatic Batching
|
|
139
|
-
|
|
140
|
-
When `enablejQueryOverrides()` is called, all event handlers registered via jQuery (`.on()`, etc.) are automatically wrapped in `batch()`. This ensures:
|
|
141
|
-
|
|
142
|
-
1. **Synchronous Reflection**: Any atom updates within the handler are flushed to the DOM immediately after the handler finishes execution, but before the browser repaints.
|
|
143
|
-
2. **Atomic Updates**: Multiple atom updates are grouped into a single DOM update. This prevents redundant renders and ensures that the DOM never reflects a partial state.
|
|
144
|
-
|
|
145
|
-
> **Note**: Reading DOM properties (like `text()`) immediately after an atom update **inside the same synchronous handler** will still return the old value. The DOM is synchronized only when the handler returns and the batch block completes.
|
|
146
|
-
|
|
147
|
-
### The "Async Trap"
|
|
148
|
-
|
|
149
|
-
Automatic batching only covers the **synchronous** execution of the handler. If you use `async/await`, updates occurring after an `await` are no longer inside the `batch()` scope.
|
|
150
|
-
|
|
151
|
-
```javascript
|
|
152
|
-
$('#btn').on('click', async () => {
|
|
153
|
-
count.value++; // Batched (synchronous)
|
|
154
|
-
|
|
155
|
-
await fetchData();
|
|
156
|
-
|
|
157
|
-
// No longer in batch scope!
|
|
158
|
-
// Updates will be batched via microtasks (asynchronous reflection)
|
|
159
|
-
count.value++;
|
|
160
|
-
});
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
If you need synchronous reflection after an `await`, wrap the updates manually:
|
|
164
|
-
|
|
165
|
-
```javascript
|
|
166
|
-
await fetchData();
|
|
167
|
-
$.batch(() => {
|
|
168
|
-
count.value++;
|
|
169
|
-
});
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Debug Mode
|
|
173
|
-
|
|
174
|
-
Enable internal logging and dependency tracing:
|
|
175
|
-
|
|
176
|
-
```javascript
|
|
177
|
-
$.atom.debug = true;
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
When enabled, any potential infinite loops or self-modifying effects will trigger detailed console warnings with trace info.
|
|
181
|
-
|
|
182
|
-
## Contributing
|
|
40
|
+
## Documentation
|
|
183
41
|
|
|
184
|
-
|
|
42
|
+
- [**API Reference**](./docs/API.md): Full list of bindings (`atomText`, `atomVal`, `atomBind`...).
|
|
43
|
+
- [**Common Patterns**](./docs/PATTERNS.md): How to handle async loading, modals, and legacy plugins.
|
|
185
44
|
|
|
186
45
|
## License
|
|
187
46
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(D,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],l):(D=typeof globalThis<"u"?globalThis:D||self,l(D.AtomEffectJQuery={},D.jQuery))})(this,(function(D,l){"use strict";const st={ONE_SECOND_MS:1e3},ce={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},w={DISPOSED:1,HAS_FN_SUBS:2,HAS_OBJ_SUBS:4},x={...w,EXECUTING:8},f={...w,DIRTY:8,IDLE:16,PENDING:32,RESOLVED:64,REJECTED:128,RECOMPUTING:256,HAS_ERROR:512},L={...w,SYNC:8,NOTIFICATION_SCHEDULED:16},z={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10,BATCH_QUEUE_SHRINK_THRESHOLD:1e3},xe={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},K=1073741823,Z=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",it=Object.freeze([]);class q extends Error{constructor(e,t=null,s=!0){super(e),this.name="AtomError",this.cause=t,this.recoverable=s,this.timestamp=new Date}}class M extends q{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class $ extends q{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class ue extends q{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const I={COMPUTED_MUST_BE_FUNCTION:"Computed function must be a function",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_CIRCULAR_DEPENDENCY:"Circular dependency detected during computation",COMPUTED_DISPOSED:"Cannot access a disposed computed",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscription listener must be a function or Subscriber object",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",EFFECT_DISPOSED:"Cannot run a disposed effect",LARGE_DEPENDENCY_GRAPH:n=>`Large dependency graph detected: ${n} dependencies`,CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},be=Symbol("debugName"),rt=Symbol("id"),Se=Symbol("type"),ye=Symbol("noDefaultValue");function ot(n){return"dependencies"in n&&Array.isArray(n.dependencies)}function ke(n,e,t){if(!t.has(n.id)){if(t.add(n.id),n===e)throw new M("Indirect circular dependency detected");if(ot(n)){const s=n.dependencies;for(let i=0;i<s.length;i++){const r=s[i];r&&ke(r,e,t)}}}}const F={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:xe.MAX_DEPENDENCIES,warnInfiniteLoop:xe.WARN_INFINITE_LOOP,warn(n,e){this.enabled&&n&&console.warn(`[Atom Effect] ${e}`)},checkCircular(n,e){if(n===e)throw new M("Direct circular dependency detected");this.enabled&&ke(n,e,new Set)},attachDebugInfo(n,e,t){if(!this.enabled)return;const s=n;s[be]=`${e}_${t}`,s[rt]=t,s[Se]=e},getDebugName(n){if(n!=null&&be in n)return n[be]},getDebugType(n){if(n!=null&&Se in n)return n[Se]}};let ct=1;const ut=()=>ct++;class Le{constructor(){this.flags=0,this.version=0,this._lastSeenEpoch=-1,this._modifiedAtEpoch=-1,this.id=ut()&K,this._tempUnsub=void 0}}class Fe extends Le{subscribe(e){if(typeof e=="function")return this._addSubscriber(this._fnSubs,e,w.HAS_FN_SUBS);if(e!==null&&typeof e=="object"&&"execute"in e)return this._addSubscriber(this._objSubs,e,w.HAS_OBJ_SUBS);throw new q(I.ATOM_SUBSCRIBER_MUST_BE_FUNCTION)}_addSubscriber(e,t,s){return e.indexOf(t)!==-1?(Z&&console.warn("Attempted to subscribe the same listener twice. Ignoring duplicate subscription."),()=>{}):(e.push(t),this.flags|=s,()=>{const i=e.indexOf(t);if(i===-1)return;const r=e.pop();i<e.length&&(e[i]=r),e.length===0&&(this.flags&=~s)})}subscriberCount(){return this._fnSubs.length+this._objSubs.length}_notifySubscribers(e,t){const s=this.flags;if(s&(w.HAS_FN_SUBS|w.HAS_OBJ_SUBS)){if(s&w.HAS_FN_SUBS){const i=this._fnSubs;for(let r=0;r<i.length;r++)try{i[r](e,t)}catch(o){this._handleNotifyError(o)}}if(s&w.HAS_OBJ_SUBS){const i=this._objSubs;for(let r=0;r<i.length;r++)try{i[r].execute()}catch(o){this._handleNotifyError(o)}}}}_handleNotifyError(e){console.error(new q(I.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,e))}}class lt{constructor(){this.frozen=0,this.tooLarge=0,this.poolFull=0}}class ht{constructor(){this.acquired=0,this.released=0,this.rejected=new lt}}class Ie{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=Z?new ht:null}acquire(){const e=this.stats;return e&&e.acquired++,this.pool.pop()??[]}release(e,t){const s=this.stats;if(t&&e===t)return;if(Object.isFrozen(e)){s&&s.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){s&&s.rejected.tooLarge++;return}const i=this.pool;if(i.length>=this.maxPoolSize){s&&s.rejected.poolFull++;return}e.length=0,i.push(e),s&&s.released++}getStats(){const e=this.stats;if(!e)return null;const{acquired:t,released:s,rejected:i}=e,{frozen:r,tooLarge:o,poolFull:c}=i;return{acquired:t,released:s,rejected:{frozen:r,tooLarge:o,poolFull:c},leaked:t-s-(r+o+c),poolSize:this.pool.length}}reset(){this.pool.length=0;const e=this.stats;e&&(e.acquired=0,e.released=0,e.rejected.frozen=0,e.rejected.tooLarge=0,e.rejected.poolFull=0)}}const v=Object.freeze([]),X=Object.freeze([]),R=Object.freeze([]),G=new Ie,ee=new Ie,B=new Ie;function Q(n,e,t,s){if(e!=null){if(typeof e.addDependency=="function"){e.addDependency(n);return}if(typeof e=="function"){const i=e;t.indexOf(i)===-1&&(t.push(i),n.flags|=w.HAS_FN_SUBS);return}if(typeof e.execute=="function"){const i=e;s.indexOf(i)===-1&&(s.push(i),n.flags|=w.HAS_OBJ_SUBS)}}}function at(n,e,t,s){const i=e.length;if(i>0)for(let c=0;c<i;c++){const u=e[c];u&&(u._tempUnsub=t[c])}const r=n.length,o=ee.acquire();o.length=r;for(let c=0;c<r;c++){const u=n[c];if(!u)continue;const h=u._tempUnsub;h?(o[c]=h,u._tempUnsub=void 0):(F.checkCircular(u,s),o[c]=u.subscribe(s))}if(i>0)for(let c=0;c<i;c++){const u=e[c];if(u){const h=u._tempUnsub;h&&(h(),u._tempUnsub=void 0)}}return t!==X&&ee.release(t),o}let le=0;function Pe(){return le=le+1&K||1,le}function ft(){return le}let Ce=0,De=0,he=!1;function Me(){return he?(Z&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(he=!0,Ce=Ce+1&K||1,De=0,!0)}function Be(){he=!1}function dt(){return he?++De:0}class _t{constructor(){this._queueBuffer=[[],[]],this._bufferIndex=0,this._size=0,this._epoch=0,this._isProcessing=!1,this._isBatching=!1,this._batchDepth=0,this._batchQueue=[],this._batchQueueSize=0,this._isFlushingSync=!1,this._maxFlushIterations=z.MAX_FLUSH_ITERATIONS}get phase(){return this._isProcessing||this._isFlushingSync?2:this._isBatching?1:0}get queueSize(){return this._size}get isBatching(){return this._isBatching}schedule(e){if(Z&&typeof e!="function")throw new ue("Scheduler callback must be a function");const t=this._epoch;if(e._nextEpoch===t)return;if(e._nextEpoch=t,this._isBatching||this._isFlushingSync){this._batchQueue[this._batchQueueSize++]=e;return}const s=this._bufferIndex,i=this._size;this._queueBuffer[s][i]=e,this._size=i+1,this._isProcessing||this.flush()}flush(){this._isProcessing||this._size===0||(this._isProcessing=!0,queueMicrotask(()=>{try{if(this._size===0)return;const e=Me();this._drainQueue(),e&&Be()}finally{this._isProcessing=!1,this._size>0&&!this._isBatching&&this.flush()}}))}flushSync(){this._isFlushingSync=!0;const e=Me();try{this._mergeBatchQueue(),this._drainQueue()}finally{this._isFlushingSync=!1,e&&Be()}}_mergeBatchQueue(){const e=this._batchQueueSize;if(e===0)return;const t=++this._epoch,s=this._batchQueue,i=this._queueBuffer[this._bufferIndex];let r=this._size;for(let o=0;o<e;o++){const c=s[o];c._nextEpoch!==t&&(c._nextEpoch=t,i[r++]=c)}this._size=r,this._batchQueueSize=0,s.length>z.BATCH_QUEUE_SHRINK_THRESHOLD&&(s.length=0)}_drainQueue(){let e=0;const t=this._maxFlushIterations;for(;this._size>0;){if(++e>t){this._handleFlushOverflow();return}this._processQueue(),this._mergeBatchQueue()}}_processQueue(){const e=this._bufferIndex,t=this._queueBuffer[e],s=this._size;this._bufferIndex=e^1,this._size=0,this._epoch++,this._processJobs(t,s)}_handleFlushOverflow(){console.error(new ue(`Maximum flush iterations (${this._maxFlushIterations}) exceeded. Possible infinite loop.`)),this._size=0,this._queueBuffer[this._bufferIndex].length=0,this._batchQueueSize=0}_processJobs(e,t){for(let s=0;s<t;s++)try{const i=e[s];i&&i()}catch(i){console.error(new ue("Error occurred during scheduler execution",i))}e.length=0}startBatch(){this._batchDepth++,this._isBatching=!0}endBatch(){const e=this._batchDepth;if(e===0){Z&&console.warn("endBatch() called without matching startBatch(). Ignoring.");return}const t=e-1;this._batchDepth=t,t===0&&(this.flushSync(),this._isBatching=!1)}setMaxFlushIterations(e){if(e<z.MIN_FLUSH_ITERATIONS)throw new ue(`Max flush iterations must be at least ${z.MIN_FLUSH_ITERATIONS}`);this._maxFlushIterations=e}}const ie=new _t;class pt{constructor(){this.current=null}run(e,t){const s=this.current;this.current=e;try{return t()}finally{this.current=s}}getCurrent(){return this.current}}const A=new pt;function Te(n){if(typeof n!="function")throw new q("Untracked callback must be a function");const e=A.current;A.current=null;try{return n()}finally{A.current=e}}class Et extends Fe{constructor(e,t){super(),this._value=e,this._pendingOldValue=void 0,this._notifyTask=void 0,this._fnSubs=[],this._objSubs=[],t&&(this.flags|=L.SYNC),F.attachDebugInfo(this,"atom",this.id)}get value(){const e=A.current;return e&&Q(this,e,this._fnSubs,this._objSubs),this._value}set value(e){const t=this._value;t===e||Object.is(t,e)||(this._value=e,this.version=this.version+1&K,this.flags&(L.HAS_FN_SUBS|L.HAS_OBJ_SUBS)&&this._scheduleNotification(t))}_scheduleNotification(e){let t=this.flags;if(t&L.NOTIFICATION_SCHEDULED||(this._pendingOldValue=e,t|=L.NOTIFICATION_SCHEDULED,this.flags=t),t&L.SYNC&&!ie.isBatching){this._flushNotifications();return}this._notifyTask||(this._notifyTask=()=>this._flushNotifications());const s=this._notifyTask;ie.schedule(s)}_flushNotifications(){const e=this.flags;if(!(e&L.NOTIFICATION_SCHEDULED)||e&L.DISPOSED)return;const t=this._pendingOldValue;this._pendingOldValue=void 0,this.flags=e&-17,this._notifySubscribers(this._value,t)}peek(){return this._value}dispose(){const e=this.flags;e&L.DISPOSED||(this._fnSubs.length=0,this._objSubs.length=0,this.flags=e|L.DISPOSED,this._value=void 0,this._pendingOldValue=void 0,this._notifyTask=void 0)}}function je(n,e={}){return new Et(n,e.sync??!1)}function re(n,e,t){if(n instanceof TypeError)return new e(`Type error (${t}): ${n.message}`,n);if(n instanceof ReferenceError)return new e(`Reference error (${t}): ${n.message}`,n);if(n instanceof q)return n;const s=n instanceof Error?n.message:String(n),i=n instanceof Error?n:null;return new e(`Unexpected error (${t}): ${s}`,i)}function Ne(n){return n!==null&&typeof n=="object"&&"value"in n&&typeof n.subscribe=="function"}function Ve(n){return F.enabled&&n!=null&&typeof n=="object"&&F.getDebugType(n)==="computed"?!0:Ne(n)&&typeof n.invalidate=="function"}function He(n){return n!=null&&typeof n.then=="function"}const ze=f.RESOLVED|f.PENDING|f.REJECTED,ae=Array(ze+1).fill(ce.IDLE);ae[f.RESOLVED]=ce.RESOLVED,ae[f.PENDING]=ce.PENDING,ae[f.REJECTED]=ce.REJECTED;const qe=3,Xe=Number.MAX_SAFE_INTEGER-1;class Ge extends Fe{constructor(e,t={}){if(typeof e!="function")throw new M(I.COMPUTED_MUST_BE_FUNCTION);if(super(),this._value=void 0,this.flags=f.DIRTY|f.IDLE,this._error=null,this._promiseId=0,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:ye,this._onError=t.onError??null,this._fnSubs=[],this._objSubs=[],this._dependencies=v,this._dependencyVersions=R,this._unsubscribes=X,this._cachedErrors=null,this._errorCacheEpoch=-1,this._asyncStartAggregateVersion=0,this._asyncRetryCount=0,this._trackEpoch=-1,this._trackDeps=v,this._trackVersions=R,this._trackCount=0,F.attachDebugInfo(this,"computed",this.id),F.enabled){const s=this;s.subscriberCount=this.subscriberCount.bind(this),s.isDirty=()=>(this.flags&f.DIRTY)!==0,s.dependencies=this._dependencies}if(t.lazy===!1)try{this._recompute()}catch{}}get value(){const e=A.current;e&&Q(this,e,this._fnSubs,this._objSubs);let t=this.flags;if((t&(f.RESOLVED|f.DIRTY|f.IDLE))===f.RESOLVED)return this._value;if(t&f.DISPOSED)throw new M(I.COMPUTED_DISPOSED);if(t&f.RECOMPUTING){const r=this._defaultValue;if(r!==ye)return r;throw new M(I.COMPUTED_CIRCULAR_DEPENDENCY)}if(t&(f.DIRTY|f.IDLE)&&(this._recompute(),t=this.flags),t&f.RESOLVED)return this._value;const s=this._defaultValue,i=s!==ye;if(t&f.PENDING){if(i)return s;throw new M(I.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}if(t&f.REJECTED){const r=this._error;if(r?.recoverable&&i)return s;throw r}return this._value}peek(){return this._value}get state(){const e=A.current;return e&&Q(this,e,this._fnSubs,this._objSubs),ae[this.flags&ze]}get hasError(){const e=A.current;if(e&&Q(this,e,this._fnSubs,this._objSubs),this.flags&(f.REJECTED|f.HAS_ERROR))return!0;const t=this._dependencies;for(let s=0,i=t.length;s<i;s++)if(t[s].flags&f.HAS_ERROR)return!0;return!1}get isValid(){return!this.hasError}get errors(){const e=A.current;if(e&&Q(this,e,this._fnSubs,this._objSubs),!this.hasError)return it;const t=ft();if(this._errorCacheEpoch===t&&this._cachedErrors!==null)return this._cachedErrors;const s=new Set,i=this._error;i&&s.add(i);const r=this._dependencies;for(let c=0,u=r.length;c<u;c++){const h=r[c];if(h.flags&f.HAS_ERROR){const p=h.errors;if(p)for(let a=0,_=p.length;a<_;a++){const d=p[a];d&&s.add(d)}}}const o=Object.freeze(Array.from(s));return this._errorCacheEpoch=t,this._cachedErrors=o,o}get lastError(){const e=A.current;return e&&Q(this,e,this._fnSubs,this._objSubs),this._error}get isPending(){const e=A.current;return e&&Q(this,e,this._fnSubs,this._objSubs),(this.flags&f.PENDING)!==0}get isResolved(){const e=A.current;return e&&Q(this,e,this._fnSubs,this._objSubs),(this.flags&f.RESOLVED)!==0}invalidate(){this._markDirty();const e=this._dependencyVersions;e!==R&&(B.release(e),this._dependencyVersions=R),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this.flags&f.DISPOSED)return;const e=this._unsubscribes;if(e!==X){for(let i=0,r=e.length;i<r;i++){const o=e[i];o&&o()}ee.release(e),this._unsubscribes=X}const t=this._dependencies;t!==v&&(G.release(t),this._dependencies=v);const s=this._dependencyVersions;s!==R&&(B.release(s),this._dependencyVersions=R),this._fnSubs.length=0,this._objSubs.length=0,this.flags=f.DISPOSED|f.DIRTY|f.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%Xe,this._cachedErrors=null,this._errorCacheEpoch=-1}addDependency(e){if(e._lastSeenEpoch===this._trackEpoch)return;e._lastSeenEpoch=this._trackEpoch;const t=this._trackCount,s=this._trackDeps,i=this._trackVersions;t<s.length?(s[t]=e,i[t]=e.version):(s.push(e),i.push(e.version)),this._trackCount=t+1}_commitDeps(e){const t=this._trackDeps,s=this._trackVersions,i=this._trackCount;t.length=i,s.length=i,this._unsubscribes=at(t,e,this._unsubscribes,this),this._dependencies=t,this._dependencyVersions=s}_recompute(){if(this.flags&f.RECOMPUTING)return;this.flags|=f.RECOMPUTING;const e=this._dependencies,t=this._dependencyVersions;this._trackEpoch=Pe(),this._trackDeps=G.acquire(),this._trackVersions=B.acquire(),this._trackCount=0;let s=!1;try{const i=A.run(this,this._fn);this._commitDeps(e),s=!0,He(i)?this._handleAsyncComputation(i):this._finalizeResolution(i)}catch(i){let r=i;if(!s)try{this._commitDeps(e),s=!0}catch(o){r=o}this._handleComputationError(r)}finally{s?(e!==v&&G.release(e),t!==R&&B.release(t)):(G.release(this._trackDeps),B.release(this._trackVersions)),this._trackEpoch=-1,this._trackDeps=v,this._trackVersions=R,this._trackCount=0,this.flags&=-257}}_handleAsyncComputation(e){this.flags=(this.flags|f.PENDING)&-217,this._notifySubscribers(void 0,void 0),this._asyncStartAggregateVersion=this._captureVersionSnapshot(),this._asyncRetryCount=0,this._promiseId=(this._promiseId+1)%Xe;const t=this._promiseId;e.then(s=>{if(t===this._promiseId){if(this._captureVersionSnapshot()!==this._asyncStartAggregateVersion){if(this._asyncRetryCount<qe){this._asyncRetryCount++,this._markDirty();return}this._handleAsyncRejection(new M(`Async drift threshold exceeded after ${qe} retries.`));return}this._finalizeResolution(s),this._notifySubscribers(s,void 0)}}).catch(s=>{t===this._promiseId&&this._handleAsyncRejection(s)})}_captureVersionSnapshot(){let e=0;const t=this._dependencies;for(let s=0,i=t.length;s<i;s++){const r=t[s];if(r){const o=r.version;e=((e<<5)-e|0)+o&K}}return e}_handleAsyncRejection(e){const t=re(e,M,I.COMPUTED_ASYNC_COMPUTATION_FAILED);this.flags&f.REJECTED||(this.version=this.version+1&K),this._error=t,this.flags=this.flags&-121|(f.REJECTED|f.HAS_ERROR);const s=this._onError;if(s)try{s(t)}catch(i){console.error(I.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}this._notifySubscribers(void 0,void 0)}_finalizeResolution(e){(!(this.flags&f.RESOLVED)||!this._equal(this._value,e))&&(this.version=this.version+1&K),this._value=e,this._error=null,this.flags=(this.flags|f.RESOLVED)&-697,this._cachedErrors=null,this._errorCacheEpoch=-1}_handleComputationError(e){const t=re(e,M,I.COMPUTED_COMPUTATION_FAILED);this._error=t,this.flags=this.flags&-121|(f.REJECTED|f.HAS_ERROR);const s=this._onError;if(s)try{s(t)}catch(i){console.error(I.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}throw t}execute(){this._markDirty()}_markDirty(){const e=this.flags;e&(f.RECOMPUTING|f.DIRTY)||(this.flags=e|f.DIRTY,this._notifySubscribers(void 0,void 0))}}Object.freeze(Ge.prototype);function Qe(n,e={}){return new Ge(n,e)}class gt extends Le{constructor(e,t={}){super(),this._cleanup=null,this._dependencies=v,this._dependencyVersions=R,this._unsubscribes=X,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._executeTask=void 0,this._onError=t.onError??null,this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??z.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??z.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1,this._executionCount=0,this._historyPtr=0;const s=Number.isFinite(this._maxExecutions),i=s?Math.min(this._maxExecutions+1,z.MAX_EXECUTIONS_PER_SECOND+1):0;this._historyCapacity=i,this._history=Z&&s&&i>0?new Array(i).fill(0):null,this._execId=0,F.attachDebugInfo(this,"effect",this.id)}run(){if(this.flags&x.DISPOSED)throw new $(I.EFFECT_DISPOSED);this.execute(!0)}dispose(){const e=this.flags;if(e&x.DISPOSED)return;if(this.flags=e|x.DISPOSED,this._cleanup){try{this._cleanup()}catch(r){this._handleExecutionError(r,I.EFFECT_CLEANUP_FAILED)}this._cleanup=null}const t=this._unsubscribes;if(t!==X){for(let r=0,o=t.length;r<o;r++){const c=t[r];c&&c()}ee.release(t),this._unsubscribes=X}const s=this._dependencies;s!==v&&(G.release(s),this._dependencies=v);const i=this._dependencyVersions;i!==R&&(B.release(i),this._dependencyVersions=R),this._executeTask=void 0}addDependency(e){if(!(this.flags&x.EXECUTING))return;const t=this._currentEpoch;if(e._lastSeenEpoch===t)return;e._lastSeenEpoch=t;const s=this._nextDeps,i=this._nextVersions,r=this._nextUnsubs;s.push(e),i.push(e.version);const o=e._tempUnsub;if(o){r.push(o),e._tempUnsub=void 0;return}try{const c=this._sync,u=this._trackModifications,h=e.subscribe(()=>{if(u&&this.flags&x.EXECUTING&&(e._modifiedAtEpoch=this._currentEpoch),c){this.execute();return}this._executeTask||(this._executeTask=()=>this.execute());const p=this._executeTask;ie.schedule(p)});r.push(h)}catch(c){console.error(re(c,$,I.EFFECT_EXECUTION_FAILED)),r.push(()=>{})}}execute(e=!1){if(this.flags&(x.DISPOSED|x.EXECUTING))return;if(!e){const a=this._dependencies,_=a.length;if(_>0){const d=this._dependencyVersions;let S=!1;for(let N=0;N<_;N++){const C=a[N];if(C.version!==d[N]){S=!0;break}if("value"in C)try{if(Te(()=>C.value),C.version!==d[N]){S=!0;break}}catch{S=!0;break}}if(!S)return}}const t=Ce;this._lastFlushEpoch!==t&&(this._lastFlushEpoch=t,this._executionsInEpoch=0),++this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),dt()>z.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++;const s=this._history;if(s){const a=Date.now(),_=this._historyPtr;s[_]=a;const d=(_+1)%this._historyCapacity;this._historyPtr=d;const S=s[d]||0;if(S>0&&a-S<st.ONE_SECOND_MS){const N=new $("Effect executed too frequently within 1 second. Suspected infinite loop.");if(this.dispose(),this._handleExecutionError(N),Z)throw N;return}}if(this.flags|=x.EXECUTING,this._cleanup){try{this._cleanup()}catch(a){this._handleExecutionError(a,I.EFFECT_CLEANUP_FAILED)}this._cleanup=null}const i=this._dependencies,r=this._dependencyVersions,o=this._unsubscribes;if(i!==v)for(let a=0,_=i.length;a<_;a++){const d=i[a];d&&(d._tempUnsub=o[a])}const c=G.acquire(),u=B.acquire(),h=ee.acquire();this._nextDeps=c,this._nextVersions=u,this._nextUnsubs=h,this._currentEpoch=Pe();let p=!1;try{const a=A.run(this,this._fn);this._dependencies=c,this._dependencyVersions=u,this._unsubscribes=h,p=!0,this._checkLoopWarnings();const _=++this._execId;He(a)?a.then(d=>{if(_!==this._execId||this.flags&x.DISPOSED){if(typeof d=="function")try{d()}catch(S){this._handleExecutionError(S,I.EFFECT_CLEANUP_FAILED)}return}typeof d=="function"&&(this._cleanup=d)}).catch(d=>{_===this._execId&&this._handleExecutionError(d)}):this._cleanup=typeof a=="function"?a:null}catch(a){p=!0,this._handleExecutionError(a),this._cleanup=null}finally{if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,p){if(i!==v){for(let a=0,_=i.length;a<_;a++){const d=i[a],S=d?d._tempUnsub:void 0;S&&(S(),d&&(d._tempUnsub=void 0))}G.release(i)}r!==R&&B.release(r),o!==X&&ee.release(o)}else{G.release(c),B.release(u);for(let a=0,_=h.length;a<_;a++){const d=h[a];d&&d()}if(ee.release(h),i!==v)for(let a=0,_=i.length;a<_;a++){const d=i[a];d&&(d._tempUnsub=void 0)}}this.flags&=-9}}get isDisposed(){return(this.flags&x.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&x.EXECUTING)!==0}_throwInfiniteLoopError(e){const t=new $(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${De}`);throw this.dispose(),console.error(t),t}_handleExecutionError(e,t=I.EFFECT_EXECUTION_FAILED){const s=re(e,$,t);console.error(s);const i=this._onError;if(i)try{i(s)}catch(r){console.error(re(r,$,I.CALLBACK_ERROR_IN_ERROR_HANDLER))}}_checkLoopWarnings(){if(this._trackModifications&&F.enabled){const e=this._dependencies,t=this._currentEpoch;for(let s=0,i=e.length;s<i;s++){const r=e[s];r&&r._modifiedAtEpoch===t&&F.warn(!0,`Effect is reading a dependency (${F.getDebugName(r)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function J(n,e={}){if(typeof n!="function")throw new $(I.EFFECT_MUST_BE_FUNCTION);const t=new gt(n,e);return t.execute(),t}function fe(n){if(typeof n!="function")throw new q("Batch callback must be a function");ie.startBatch();try{return n()}finally{ie.endBatch()}}function mt(n){return n!==null&&typeof n=="object"&&"value"in n&&"subscribe"in n}function de(n){if(!n)return"unknown";const e="jquery"in n?n[0]:n;if(!e)return"unknown";const t=e.id;if(t&&typeof t=="string")return`#${t}`;const s=e.tagName.toLowerCase(),i=e.classList;if(i&&i.length>0){let r=s;for(let o=0,c=i.length;o<c;o++){const u=i[o];u&&(r+=`.${u}`)}return r}return s}function bt(n){const e=n.length;if(e===0)return new Int32Array(0);const t=new Int32Array(e),s=new Int32Array(e);let i=0;for(let o=0;o<e;o++){const c=n[o];if(c===void 0||c===-1)continue;const u=i>0?s[i-1]:void 0;if(i===0||u!==void 0&&(n[u]??-1)<c){t[o]=u??-1,s[i++]=o;continue}let h=0,p=i-1;for(;h<p;){const _=h+p>>>1,d=s[_];d!==void 0&&(n[d]??-1)<c?h=_+1:p=_}const a=s[h];a!==void 0&&c<(n[a]??Number.MAX_SAFE_INTEGER)&&(h>0&&(t[o]=s[h-1]??-1),s[h]=o)}const r=new Int32Array(i);if(i>0){let o=s[i-1];for(let c=i-1;c>=0&&o!==void 0&&o!==-1;c--)r[c]=o,o=t[o]}return r}function St(){if(typeof window<"u"){const n=window.__ATOM_DEBUG__;if(typeof n=="boolean")return n}try{if(typeof process<"u"&&process.env?.NODE_ENV==="development")return!0}catch{}return!1}let te=St();const g={get enabled(){return te},set enabled(n){te=n},log(n,...e){te&&console.log(`[atom-effect-jquery] ${n}:`,...e)},atomChanged(n,e,t){te&&console.log(`[atom-effect-jquery] Atom "${n??"anonymous"}" changed:`,e,"→",t)},domUpdated(n,e,t){te&&(console.log(`[atom-effect-jquery] DOM updated: ${de(n)}.${e} =`,t),yt(n))},cleanup(n){te&&console.log(`[atom-effect-jquery] Cleanup: ${n}`)},warn(...n){te&&console.warn("[atom-effect-jquery]",...n)}},Oe=new WeakMap;function yt(n){const e="jquery"in n?n[0]:n;if(!e||!e.isConnected)return;let t=Oe.get(e);if(t||(t={},Oe.set(e,t)),t.timer&&clearTimeout(t.timer),t.cleanupTimer&&clearTimeout(t.cleanupTimer),!t.orgStyle){const i=e.style;t.orgStyle={outline:i.outline,outlineOffset:i.outlineOffset,transition:i.transition}}const s=e.style;s.outline="2px solid rgba(255, 68, 68, 0.8)",s.outlineOffset="1px",s.transition="none",t.timer=setTimeout(()=>{e.isConnected&&(s.transition="outline 0.5s ease-out",requestAnimationFrame(()=>{if(!e.isConnected)return;const i=t?.orgStyle;i&&(s.outline=i.outline,s.outlineOffset=i.outlineOffset),t.cleanupTimer=setTimeout(()=>{e.isConnected&&t?.orgStyle&&(s.transition=t.orgStyle.transition),Oe.delete(e)},500)}))},100)}const It=new WeakMap;function Je(n,e={}){const t=je(n,e);return e.name&&It.set(t,{name:e.name}),t}Object.defineProperty(Je,"debug",{get(){return g.enabled},set(n){g.enabled=n}});function Ct(){return new Promise(n=>setTimeout(n,0))}l.extend({atom:Je,computed:Qe,effect:J,batch:fe,untracked:Te,isAtom:Ne,isComputed:Ve,isReactive:n=>Ne(n)||Ve(n),nextTick:Ct});const _e="_aes-bound";class Dt{records=new WeakMap;boundElements=new WeakSet;preservedNodes=new WeakSet;ignoredNodes=new WeakSet;keep(e){this.preservedNodes.add(e)}isKept(e){return this.preservedNodes.has(e)}markIgnored(e){this.ignoredNodes.add(e)}isIgnored(e){return this.ignoredNodes.has(e)}_getOrCreateRecord(e){let t=this.records.get(e);return t||(t={},this.records.set(e,t),this.boundElements.has(e)||(this.boundElements.add(e),e.classList.add(_e))),t}trackEffect(e,t){const s=this._getOrCreateRecord(e);s.effects||(s.effects=[]),s.effects.push(t)}trackCleanup(e,t){const s=this._getOrCreateRecord(e);s.cleanups||(s.cleanups=[]),s.cleanups.push(t)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.delete(e))return;const t=this.records.get(e);if(!t)return;this.records.delete(e),this.preservedNodes.delete(e),this.ignoredNodes.delete(e),e.classList.remove(_e),g.enabled&&g.cleanup(de(e));const s=t.effects;if(s)for(let r=0,o=s.length;r<o;r++)try{s[r]?.dispose()}catch(c){g.warn("Effect dispose error:",c)}const i=t.cleanups;if(i)for(let r=0,o=i.length;r<o;r++)try{i[r]?.()}catch(c){g.warn("Cleanup error:",c)}}cleanupDescendants(e){const t=e.querySelectorAll(`.${_e}`);for(let s=0,i=t.length;s<i;s++){const r=t[s];r&&this.boundElements.has(r)?this.cleanup(r):r&&r.classList.remove(_e)}}cleanupTree(e){this.cleanupDescendants(e),this.cleanup(e)}}const b=new Dt;let oe=null;function Ye(n=document.body){oe||(oe=new MutationObserver(e=>{for(let t=0,s=e.length;t<s;t++){const i=e[t]?.removedNodes;if(!i)continue;const r=i.length;if(r!==0)for(let o=0;o<r;o++){const c=i[o];c.nodeType===1&&(c.isConnected||b.isKept(c)||b.isIgnored(c)||b.cleanupTree(c))}}}),oe.observe(n,{childList:!0,subtree:!0}))}function Tt(){oe?.disconnect(),oe=null}function T(n,e,t,s){mt(e)?b.trackEffect(n,J(()=>{const i=e.value;t(i),g.domUpdated(l(n),s,i)})):(t(e),g.domUpdated(l(n),s,e))}var y=(n=>(n[n.None=0]="None",n[n.Focused=1]="Focused",n[n.Composing=2]="Composing",n[n.SyncingToAtom=4]="SyncingToAtom",n[n.SyncingToDom=8]="SyncingToDom",n[n.Busy=14]="Busy",n))(y||{});function Ae(){return{timeoutId:null,flags:0}}function We(n,e,t={}){const{debounce:s,event:i="input",parse:r=C=>C,format:o=C=>String(C??""),equal:c=Object.is}=t,u=Ae(),h=n[0],p=()=>{if(!(u.flags&y.Busy)){u.flags|=y.SyncingToAtom;try{const C=h.value,U=r(C);c(e.value,U)||(e.value=U)}finally{u.flags&=~y.SyncingToAtom}}},a=()=>{u.timeoutId&&(clearTimeout(u.timeoutId),u.timeoutId=null,p()),u.flags&=~y.Focused;const C=o(e.value);h.value!==C&&(h.value=C)},_=()=>{u.flags&y.Busy||(s?(u.timeoutId&&clearTimeout(u.timeoutId),u.timeoutId=setTimeout(p,s)):p())},d={compositionstart:()=>{u.flags|=y.Composing},compositionend:()=>{u.flags&=~y.Composing,p()},focus:()=>{u.flags|=y.Focused},blur:a,[i]:_,change:_};return n.on(d),{effect:()=>{const C=e.value,U=o(C),k=h.value;if(k!==U&&!(u.flags&y.Focused&&c(r(k),C))){u.flags|=y.SyncingToDom;try{if(u.flags&y.Focused){const{selectionStart:ge,selectionEnd:Re}=h;h.value=U;const Y=U.length;h.setSelectionRange(Math.min(ge??Y,Y),Math.min(Re??Y,Y))}else h.value=U;g.domUpdated(n,"val",U)}finally{u.flags&=~y.SyncingToDom}}},cleanup:()=>{n.off(d),u.timeoutId&&clearTimeout(u.timeoutId)}}}l.fn.atomText=function(n,e){return this.each(function(){const t=l(this);T(this,n,e?i=>t.text(e(i)):i=>t.text(String(i??"")),"text")})},l.fn.atomHtml=function(n){return this.each(function(){const e=l(this);T(this,n,t=>e.html(String(t??"")),"html")})},l.fn.atomClass=function(n,e){return this.each(function(){const t=l(this);T(this,e,s=>t.toggleClass(n,!!s),`class.${n}`)})},l.fn.atomCss=function(n,e,t){return this.each(function(){const s=l(this);T(this,e,t?r=>s.css(n,`${r}${t}`):r=>s.css(n,r),`css.${n}`)})},l.fn.atomAttr=function(n,e){return this.each(function(){const t=l(this);T(this,e,s=>{if(s==null||s===!1){t.removeAttr(n);return}t.attr(n,s===!0?n:String(s))},`attr.${n}`)})},l.fn.atomProp=function(n,e){return this.each(function(){const t=l(this);T(this,e,s=>t.prop(n,s),`prop.${n}`)})},l.fn.atomShow=function(n){return this.each(function(){const e=l(this);T(this,n,t=>e.toggle(!!t),"show")})},l.fn.atomHide=function(n){return this.each(function(){const e=l(this);T(this,n,t=>e.toggle(!t),"hide")})},l.fn.atomVal=function(n,e={}){return this.each(function(){const{effect:t,cleanup:s}=We(l(this),n,e);b.trackEffect(this,J(t)),b.trackCleanup(this,s)})},l.fn.atomChecked=function(n){return this.each(function(){const e=l(this),t=this,s=Ae(),i=()=>{if(s.flags&y.Busy)return;const o=t.checked;n.value!==o&&(n.value=o)};e.on("change",i),b.trackCleanup(this,()=>e.off("change",i));const r=J(()=>{s.flags|=y.SyncingToDom;const o=!!n.value;t.checked!==o&&(t.checked=o,g.domUpdated(e,"checked",o)),s.flags&=~y.SyncingToDom});b.trackEffect(this,r)})},l.fn.atomOn=function(n,e){return this.each(function(){const t=l(this);t.on(n,e),b.trackCleanup(this,()=>t.off(n,e))})},l.fn.atomUnbind=function(){return this.each(function(){b.cleanupTree(this)})};const Ke=Object.create(null);function Nt(n){let e=Ke[n];return e||(e=n.includes("-")?n.replace(/-./g,t=>t[1].toUpperCase()):n,Ke[n]=e,e)}function Ot(n,e){const t=n.el;T(t,e,s=>{const i=typeof s=="string"?s:String(s??"");t.textContent!==i&&(t.textContent=i)},"text")}function At(n,e){const t=n.el;T(t,e,s=>{const i=String(s??"");t.innerHTML!==i&&(t.innerHTML=i)},"html")}function vt(n,e){for(const t in e)T(n.el,e[t],s=>{n.el.classList.toggle(t,!!s)},`class.${t}`)}function Rt(n,e){const t=n.el,s=t.style;for(const i in e){const r=e[i];if(r===void 0)continue;const o=Nt(i);Array.isArray(r)?T(t,r[0],c=>{s[o]=`${c}${r[1]}`},`css.${i}`):T(t,r,c=>{s[o]=c},`css.${i}`)}}function Ut(n,e){const t=n.el;for(const s in e)T(t,e[s],i=>{if(i==null||i===!1){t.removeAttribute(s);return}const r=i===!0?s:String(i);t.getAttribute(s)!==r&&t.setAttribute(s,r)},`attr.${s}`)}function wt(n,e){const t=n.el;for(const s in e)T(n.el,e[s],i=>{t[s]!==i&&(t[s]=i)},`prop.${s}`)}function xt(n,e){const t=n.el;T(t,e,s=>{t.style.display=s?"":"none",g.enabled&&g.domUpdated(t,"show",s)},"show")}function kt(n,e){const t=n.el;T(t,e,s=>{t.style.display=s?"none":"",g.enabled&&g.domUpdated(t,"hide",s)},"hide")}function Lt(n,e){const t=Array.isArray(e),{effect:s,cleanup:i}=We(n.$el,t?e[0]:e,t?e[1]:{});b.trackEffect(n.el,J(s)),n.trackCleanup(i)}function Ft(n,e){const t=n.el,s=Ae(),i=()=>{if(s.flags&y.Busy)return;const o=t.checked;e.value!==o&&(e.value=o)};t.addEventListener("change",i),n.trackCleanup(()=>t.removeEventListener("change",i));const r=J(()=>{s.flags|=y.SyncingToDom;const o=!!e.value;t.checked!==o&&(t.checked=o,g.enabled&&g.domUpdated(t,"checked",o)),s.flags&=~y.SyncingToDom});b.trackEffect(t,r)}function Pt(n,e){for(const t in e){const s=e[t];if(typeof s!="function")continue;const i=r=>{fe(()=>s.call(n.el,l.Event(r.type,{originalEvent:r})))};n.el.addEventListener(t,i),n.trackCleanup(()=>n.el.removeEventListener(t,i))}}l.fn.atomBind=function(n){return this.each(function(){const e=this;let t=null;const s={get $el(){return t||(t=l(e)),t},el:e,trackCleanup:i=>b.trackCleanup(e,i)};n.text!==void 0&&Ot(s,n.text),n.html!==void 0&&At(s,n.html),n.class&&vt(s,n.class),n.css&&Rt(s,n.css),n.attr&&Ut(s,n.attr),n.prop&&wt(s,n.prop),n.show!==void 0&&xt(s,n.show),n.hide!==void 0&&kt(s,n.hide),n.val!==void 0&&Lt(s,n.val),n.checked!==void 0&&Ft(s,n.checked),n.on&&Pt(s,n.on)})},l.fn.atomList=function(n,e){const{key:t,render:s,bind:i,update:r,onAdd:o,onRemove:c,empty:u}=e,h=typeof t=="function"?t:(p,a)=>p[t];return this.each(function(){const p=l(this),a=de(this),_=new Map,d=new Set;let S=[],N=null;const C=J(()=>{const U=n.value,k=U.length;if(k===0?u&&!N&&(N=l(u).appendTo(p)):N&&(N.remove(),N=null),k===0&&_.size===0){S=[];return}g.log("list",`${a} updating with ${k} items`);const ge=new Map,Re=S.length;for(let E=0;E<Re;E++)ge.set(S[E],E);const Y=new Array(k),Ue=new Set,et=new Int32Array(k);for(let E=0;E<k;E++){const V=U[E],m=h(V,E);g.enabled&&Ue.has(m)&&console.warn(`[atomList] Duplicate key "${m}" at index ${E}.`),Y[E]=m,Ue.add(m),et[E]=ge.get(m)??-1}if(_.size>0)for(const[E,V]of _){if(Ue.has(E)||d.has(E))continue;const m=()=>{V.$el.remove(),V.$el[0]&&b.cleanup(V.$el[0]),d.delete(E),g.log("list",`${a} removed item:`,E)};if(_.delete(E),d.add(E),c){const O=c(V.$el);O instanceof Promise?O.then(m):m()}else m()}if(k===0){S=[];return}const tt=bt(et);let we=tt.length-1,j=null;for(let E=k-1;E>=0;E--){const V=Y[E],m=U[E],O=_.get(V);if(O){const ne=O.item;O.item=m;const P=O.$el[0];if(!P)continue;if(r)r(O.$el,m,E),g.domUpdated(O.$el,"list.update",m);else if(ne!==m){let W=!0;if(typeof ne=="object"&&ne!==null&&typeof m=="object"&&m!==null){W=!1;let H=0;const me=ne,nt=m;for(const se in me){if(me[se]!==nt[se]){W=!0;break}H++}if(!W){let se=0;for(const Bt in nt)if(se++,se>H){W=!0;break}H!==se&&(W=!0)}}if(W){const H=l(s(m,E)),me=j===P;O.$el.replaceWith(H),O.$el=H,i&&i(H,m,E),g.domUpdated(H,"list.render",m),me&&(j=H[0]||null)}}if(we>=0&&tt[we]===E)we--;else{const W=O.$el[0];j?.isConnected?j!==W&&O.$el.insertBefore(j):O.$el.appendTo(p)}j=O.$el[0]||null}else{const ne=s(m,E),P=l(ne);_.set(V,{$el:P,item:m}),j?.isConnected?P.insertBefore(j):P.appendTo(p),i&&i(P,m,E),o&&o(P),g.domUpdated(P,"list.add",m),j=P[0]||null}}S=Y});b.trackEffect(this,C),b.trackCleanup(this,()=>{_.clear(),d.clear(),S=[],N?.remove()})})};const pe=new WeakMap;l.fn.atomMount=function(n,e={}){return this.each(function(){const t=g.enabled,s=t?de(this):"",i=pe.get(this);i&&(t&&g.log("mount",`${s} unmounting existing component`),i()),t&&g.log("mount",`${s} mounting component`);let r;try{r=n(l(this),e)}catch(c){console.error("[atom-effect-jquery] Mount error:",c);return}const o=()=>{if(pe.delete(this)){if(t&&g.log("mount",`${s} full cleanup`),typeof r=="function")try{r()}catch(c){console.error("[atom-effect-jquery] Cleanup error:",c)}b.cleanupTree(this)}};pe.set(this,o),b.trackCleanup(this,o)})},l.fn.atomUnmount=function(){return this.each(function(){const n=pe.get(this);n&&n()})};const Ee=new WeakMap;let Ze=!1;const $e=n=>{let e=Ee.get(n);return e||(e=function(...t){return fe(()=>n.apply(this,t))},Ee.set(n,e)),e};function ve(){if(Ze)return;Ze=!0;const n=l.fn.on,e=l.fn.off,t=l.fn.remove,s=l.fn.empty,i=l.fn.detach;l.fn.remove=function(r){const o=r?this.filter(r):this;for(let c=0,u=o.length;c<u;c++){const h=o[c];h&&(b.cleanupTree(h),b.markIgnored(h))}return t.call(this,r)},l.fn.empty=function(){for(let r=0,o=this.length;r<o;r++){const c=this[r];c&&b.cleanupDescendants(c)}return s.call(this)},l.fn.detach=function(r){const o=r?this.filter(r):this;for(let c=0,u=o.length;c<u;c++){const h=o[c];h&&b.keep(h)}return i.call(this,r)},l.fn.on=function(...r){const o=r[0];if(o&&typeof o=="object"){const c=o,u={};for(const h in c){const p=c[h];p&&(u[h]=$e(p))}r[0]=u}else for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){r[c]=$e(r[c]);break}return n.apply(this,r)},l.fn.off=function(...r){const o=r[0];if(o&&typeof o=="object"){const c=o,u={};for(const h in c){const p=c[h];p&&(u[h]=Ee.get(p)||p)}r[0]=u}else for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){r[c]=Ee.get(r[c])||r[c];break}return e.apply(this,r)}}const Mt=ve;ve(),l(()=>{Ye(document.body)}),D.default=l,D.atom=je,D.batch=fe,D.computed=Qe,D.disableAutoCleanup=Tt,D.effect=J,D.enableAutoCleanup=Ye,D.enablejQueryBatching=Mt,D.enablejQueryOverrides=ve,D.registry=b,D.untracked=Te,Object.defineProperties(D,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
1
|
+
(function(y,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],u):(y=typeof globalThis<"u"?globalThis:y||self,u(y.AtomEffectJQuery={},y.jQuery))})(this,(function(y,u){"use strict";const tt={ONE_SECOND_MS:1e3},se={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},L={DISPOSED:1,HAS_FN_SUBS:2,HAS_OBJ_SUBS:4},O={...L,EXECUTING:8},h={...L,DIRTY:8,IDLE:16,PENDING:32,RESOLVED:64,REJECTED:128,RECOMPUTING:256,HAS_ERROR:512},U={...L,SYNC:8,NOTIFICATION_SCHEDULED:16},M={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10,BATCH_QUEUE_SHRINK_THRESHOLD:1e3},ke={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},q=1073741823,m=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production"||typeof __DEV__<"u"&&!!__DEV__,nt=Object.freeze([]);class K extends Error{constructor(e,t=null,s=!0){super(e),this.cause=t,this.recoverable=s,this.timestamp=new Date,this.name="AtomError"}}class B extends K{constructor(e,t=null){super(e,t,!0),this.name="ComputedError"}}class X extends K{constructor(e,t=null){super(e,t,!1),this.name="EffectError"}}class ie extends K{constructor(e,t=null){super(e,t,!1),this.name="SchedulerError"}}const Ae=Symbol("AtomEffect.DebugName"),st=Symbol("AtomEffect.Id"),ve=Symbol("AtomEffect.Type"),Ee=Symbol("AtomEffect.NoDefaultValue"),it=n=>"dependencies"in n&&Array.isArray(n.dependencies);function Ue(n,e,t){if(n===e)throw new B("Circular dependency detected: The computation refers to itself explicitly or implicitly.");if(!t.has(n.id)&&(t.add(n.id),it(n))){const s=n.dependencies;for(let i=0;i<s.length;i++){const o=s[i];o&&Ue(o,e,t)}}}const Q={enabled:m,maxDependencies:ke.MAX_DEPENDENCIES,warnInfiniteLoop:ke.WARN_INFINITE_LOOP,warn(n,e){m&&this.enabled&&n&&console.warn(`[Atom Effect] ${e}`)},checkCircular(n,e){if(n===e)throw new B("Direct circular dependency detected");m&&this.enabled&&Ue(n,e,new Set)},attachDebugInfo(n,e,t){if(!m||!this.enabled)return;const s=n;s[Ae]=`${e}_${t}`,s[st]=t,s[ve]=e},getDebugName:n=>n?.[Ae],getDebugType:n=>n?.[ve]};let ot=1;const rt=()=>ot++;function Re(n,e,t){if(typeof e=="function"){const i=e;for(let o=0,r=t.length;o<r;o++){const c=t[o];if(c&&c.fn===i)return}t.push(new ge(i,void 0)),n.flags|=L.HAS_FN_SUBS,"_fnSubCount"in n&&n._fnSubCount++;return}if("addDependency"in e){e.addDependency(n);return}const s=e;for(let i=0,o=t.length;i<o;i++){const r=t[i];if(r&&r.sub===s)return}t.push(new ge(void 0,s)),n.flags|=L.HAS_OBJ_SUBS,"_objSubCount"in n&&n._objSubCount++}function ct(n,e,t){for(let s=0,i=e.length;s<i;s++){const o=e[s];o&&(o.node._tempUnsub=o.unsub)}for(let s=0,i=n.length;s<i;s++){const o=n[s];if(!o)continue;const r=o.node;r._tempUnsub!==void 0?(o.unsub=r._tempUnsub,r._tempUnsub=void 0):(Q.checkCircular(r,t),o.unsub=r.subscribe(t))}for(let s=0,i=e.length;s<i;s++){const o=e[s];if(o){const r=o.node;r._tempUnsub!==void 0&&(r._tempUnsub(),r._tempUnsub=void 0),o.unsub=void 0}}}class pe{constructor(e,t,s=void 0){this.node=e,this.version=t,this.unsub=s}}class ge{constructor(e,t){this.fn=e,this.sub=t}}const b={COMPUTED_MUST_BE_FUNCTION:"Computed target must be a function",COMPUTED_ASYNC_PENDING_NO_DEFAULT:"Async computation pending with no default value",COMPUTED_COMPUTATION_FAILED:"Computation execution failed",COMPUTED_ASYNC_COMPUTATION_FAILED:"Async computation execution failed",COMPUTED_CIRCULAR_DEPENDENCY:"Circular dependency detected",COMPUTED_DISPOSED:"Attempted to access disposed computed",ATOM_SUBSCRIBER_MUST_BE_FUNCTION:"Subscriber must be a function or Subscriber object",ATOM_INDIVIDUAL_SUBSCRIBER_FAILED:"Subscriber execution failed",EFFECT_MUST_BE_FUNCTION:"Effect target must be a function",EFFECT_EXECUTION_FAILED:"Effect execution failed",EFFECT_CLEANUP_FAILED:"Effect cleanup failed",EFFECT_DISPOSED:"Attempted to run disposed effect",CALLBACK_ERROR_IN_ERROR_HANDLER:"Exception encountered in onError handler"};function Z(n,e,t){if(n instanceof K)return n;const s=n instanceof Error,i=s?n.message:String(n),o=s?n:void 0;let r="Unexpected error";n instanceof TypeError?r="Type error":n instanceof ReferenceError&&(r="Reference error");const c=`${r} (${t}): ${i}`;return new e(c,o)}class we{constructor(){this.flags=0,this.version=0,this._lastSeenEpoch=-1,this._modifiedAtEpoch=-1,this.id=rt()&q,this._tempUnsub=void 0}}class Le extends we{constructor(){super(...arguments),this._fnSubCount=0,this._objSubCount=0}subscribe(e){const t=typeof e=="function";if(!t&&(!e||typeof e.execute!="function"))throw Z(new TypeError("Invalid subscriber"),K,b.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);const s=this._subscribers;for(let o=0,r=s.length;o<r;o++){const c=s[o];if(c&&(t?c.fn===e:c.sub===e))return m&&console.warn("Duplicate subscription ignored."),()=>{}}const i=new ge(t?e:void 0,t?void 0:e);return s.push(i),t?(this._fnSubCount++,this.flags|=L.HAS_FN_SUBS):(this._objSubCount++,this.flags|=L.HAS_OBJ_SUBS),()=>this._unsubscribe(i)}_unsubscribe(e){const t=this._subscribers,s=t.indexOf(e);if(s===-1)return;const i=t.pop();s<t.length&&i&&(t[s]=i),e.fn?this._fnSubCount--:this._objSubCount--,t.length===0?(this.flags&=-7,this._fnSubCount=0,this._objSubCount=0):e.fn&&this._fnSubCount<=0?(this.flags&=-3,this._fnSubCount=0):!e.fn&&this._objSubCount<=0&&(this.flags&=-5,this._objSubCount=0)}subscriberCount(){return this._subscribers.length}_notifySubscribers(e,t){if(!(this.flags&(L.HAS_FN_SUBS|L.HAS_OBJ_SUBS)))return;const s=this._subscribers,i=s.length;for(let o=0;o<i;o++){const r=s[o];if(r)try{r.fn?r.fn(e,t):r.sub&&r.sub.execute()}catch(c){this._handleNotifyError(c)}}}_handleNotifyError(e){console.error(Z(e,K,b.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED))}}let oe=0;const xe=()=>(oe=oe+1&q||1,oe),ut=()=>oe;let me=0,ye=0,re=!1;function Fe(){return re?(m&&console.warn("startFlush() called during flush - ignored"),!1):(re=!0,me=me+1&q||1,ye=0,!0)}const Pe=()=>{re=!1},lt=()=>re?++ye:0,k={_queueBuffer:[[],[]],_bufferIndex:0,_size:0,_epoch:0,_isProcessing:!1,_isBatching:!1,_isFlushingSync:!1,_batchDepth:0,_batchQueue:[],_batchQueueSize:0,_maxFlushIterations:M.MAX_FLUSH_ITERATIONS,get phase(){return this._isProcessing||this._isFlushingSync?2:this._isBatching?1:0},get queueSize(){return this._size},get isBatching(){return this._isBatching},schedule(n){if(m&&typeof n!="function")throw new ie("Scheduler callback must be a function");if(n._nextEpoch!==this._epoch){if(n._nextEpoch=this._epoch,this._isBatching||this._isFlushingSync){this._batchQueue[this._batchQueueSize++]=n;return}this._queueBuffer[this._bufferIndex][this._size++]=n,this._isProcessing||this._flush()}},_flush(){this._isProcessing||this._size===0||(this._isProcessing=!0,queueMicrotask(this._runLoop))},_runLoop:()=>{try{if(k._size===0)return;const n=Fe();k._drainQueue(),n&&Pe()}finally{k._isProcessing=!1,k._size>0&&!k._isBatching&&k._flush()}},_flushSync(){this._isFlushingSync=!0;const n=Fe();try{this._mergeBatchQueue(),this._drainQueue()}finally{this._isFlushingSync=!1,n&&Pe()}},_mergeBatchQueue(){if(this._batchQueueSize===0)return;const n=++this._epoch,e=this._batchQueue,t=this._queueBuffer[this._bufferIndex];let s=this._size;for(let i=0;i<this._batchQueueSize;i++){const o=e[i];o._nextEpoch!==n&&(o._nextEpoch=n,t[s++]=o)}this._size=s,this._batchQueueSize=0,e.length>M.BATCH_QUEUE_SHRINK_THRESHOLD&&(e.length=0)},_drainQueue(){let n=0;for(;this._size>0;){if(++n>this._maxFlushIterations){this._handleFlushOverflow();return}this._processQueue(),this._mergeBatchQueue()}},_processQueue(){const n=this._bufferIndex,e=this._queueBuffer[n],t=this._size;this._bufferIndex=n^1,this._size=0,this._epoch++;for(let s=0;s<t;s++)try{e[s]()}catch(i){console.error(new ie("Error occurred during scheduler execution",i))}e.length=0},_handleFlushOverflow(){console.error(new ie(`Maximum flush iterations (${this._maxFlushIterations}) exceeded. Possible infinite loop.`)),this._size=0,this._queueBuffer[this._bufferIndex].length=0,this._batchQueueSize=0},startBatch(){this._batchDepth++,this._isBatching=!0},endBatch(){if(this._batchDepth===0){m&&console.warn("endBatch() called without matching startBatch(). Ignoring.");return}--this._batchDepth===0&&(this._flushSync(),this._isBatching=!1)},setMaxFlushIterations(n){if(n<M.MIN_FLUSH_ITERATIONS)throw new ie(`Max flush iterations must be at least ${M.MIN_FLUSH_ITERATIONS}`);this._maxFlushIterations=n}},G={current:null,run(n,e){const t=this.current;this.current=n;try{return e()}finally{this.current=t}}};function be(n){const e=G.current;if(e===null)return n();G.current=null;try{return n()}finally{G.current=e}}const ht=U.HAS_FN_SUBS|U.HAS_OBJ_SUBS;class at extends Le{constructor(e,t){super(),this._pendingOldValue=void 0,this._notifyTask=void 0,this._subscribers=[],this._value=e,t&&(this.flags|=U.SYNC),Q.attachDebugInfo(this,"atom",this.id)}get value(){const e=G.current;return e&&Re(this,e,this._subscribers),this._value}set value(e){const t=this._value;if(Object.is(t,e))return;this._value=e,this.version=this.version+1&q;const s=this.flags;if(!((s&ht)===0||s&U.NOTIFICATION_SCHEDULED)){if(this._pendingOldValue=t,this.flags=s|U.NOTIFICATION_SCHEDULED,s&U.SYNC&&!k.isBatching){this._flushNotifications();return}this._notifyTask||(this._notifyTask=()=>this._flushNotifications()),k.schedule(this._notifyTask)}}_flushNotifications(){const e=this.flags;if(!(e&U.NOTIFICATION_SCHEDULED)||e&U.DISPOSED)return;const t=this._pendingOldValue;this._pendingOldValue=void 0,this.flags&=-17,this._notifySubscribers(this._value,t)}peek(){return this._value}dispose(){this.flags&U.DISPOSED||(this._subscribers.length=0,this.flags|=U.DISPOSED,this._value=void 0,this._pendingOldValue=void 0,this._notifyTask=void 0)}}function Me(n,e={}){return new at(n,e.sync??!1)}class ft{constructor(e=50,t=256){this.limit=e,this.capacity=t,this.pool=[],this.stats=m?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return m&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,t){if(!(t&&e===t)){if(e.length>this.capacity){m&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.limit){m&&this.stats&&this.stats.rejected.poolFull++;return}if(Object.isFrozen(e)){m&&this.stats&&this.stats.rejected.frozen++;return}e.length=0,this.pool.push(e),m&&this.stats&&this.stats.released++}}getStats(){if(!m||!this.stats)return null;const{acquired:e,released:t,rejected:s}=this.stats,i=e-t-(s.frozen+s.tooLarge+s.poolFull);return{acquired:e,released:t,rejected:{...s},leaked:i,poolSize:this.pool.length}}reset(){this.pool.length=0,m&&this.stats&&(this.stats={acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}})}}const $=n=>Object.freeze(n);$([]),$([]),$([]),$([]);const T=$([]);$([]);const j=new ft;function Se(n){return n!==null&&typeof n=="object"&&"value"in n&&typeof n.subscribe=="function"}function Be(n){return Se(n)&&typeof n.invalidate=="function"}function je(n){return n!==null&&typeof n=="object"&&typeof n.then=="function"}const He=h.RESOLVED|h.PENDING|h.REJECTED,ce=Array(He+1).fill(se.IDLE);ce[h.RESOLVED]=se.RESOLVED,ce[h.PENDING]=se.PENDING,ce[h.REJECTED]=se.REJECTED;const Ve=3,ze=Number.MAX_SAFE_INTEGER-1;class qe extends Le{constructor(e,t={}){if(typeof e!="function")throw new B(b.COMPUTED_MUST_BE_FUNCTION);if(super(),this._error=null,this._promiseId=0,this._subscribers=[],this._links=T,this._cachedErrors=null,this._errorCacheEpoch=-1,this._asyncStartAggregateVersion=0,this._asyncRetryCount=0,this._trackEpoch=-1,this._trackLinks=T,this._trackCount=0,this._value=void 0,this.flags=h.DIRTY|h.IDLE,this._equal=t.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in t?t.defaultValue:Ee,this._onError=t.onError??null,Q.attachDebugInfo(this,"computed",this.id),t.lazy===!1)try{this._recompute()}catch{}}_track(){const e=G.current;e&&Re(this,e,this._subscribers)}get value(){this._track();const e=this.flags;if((e&(h.RESOLVED|h.DIRTY|h.IDLE))===h.RESOLVED)return this._value;if(e&h.DISPOSED)throw new B(b.COMPUTED_DISPOSED);if(e&h.RECOMPUTING){if(this._defaultValue!==Ee)return this._defaultValue;throw new B(b.COMPUTED_CIRCULAR_DEPENDENCY)}if(e&(h.DIRTY|h.IDLE)&&(this._recompute(),this.flags&h.RESOLVED))return this._value;const t=this._defaultValue,s=t!==Ee;if(this.flags&h.PENDING){if(s)return t;throw new B(b.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}if(this.flags&h.REJECTED){if(this._error?.recoverable&&s)return t;throw this._error}return this._value}peek(){return this._value}get state(){return this._track(),ce[this.flags&He]}get hasError(){if(this._track(),this.flags&(h.REJECTED|h.HAS_ERROR))return!0;const e=this._links;for(let t=0,s=e.length;t<s;t++){const i=e[t]?.node;if(i&&i.flags&h.HAS_ERROR)return!0}return!1}get isValid(){return!this.hasError}get errors(){if(this._track(),!this.hasError)return nt;const e=ut();if(this._errorCacheEpoch===e&&this._cachedErrors)return this._cachedErrors;const t=new Set;this._error&&t.add(this._error);const s=this._links;for(let o=0,r=s.length;o<r;o++){const c=s[o].node;if(c.flags&h.HAS_ERROR){const l=c;if(l.errors){const a=l.errors;for(let _=0;_<a.length;_++){const A=a[_];A&&t.add(A)}}}}const i=Object.freeze(Array.from(t));return this._errorCacheEpoch=e,this._cachedErrors=i,i}get lastError(){return this._track(),this._error}get isPending(){return this._track(),(this.flags&h.PENDING)!==0}get isResolved(){return this._track(),(this.flags&h.RESOLVED)!==0}invalidate(){this._markDirty(),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this.flags&h.DISPOSED)return;const e=this._links;if(e!==T){for(let t=0,s=e.length;t<s;t++)e[t].unsub?.();j.release(e),this._links=T}this._subscribers.length=0,this.flags=h.DISPOSED|h.DIRTY|h.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%ze,this._cachedErrors=null,this._errorCacheEpoch=-1}addDependency(e){if(e._lastSeenEpoch!==this._trackEpoch){if(e._lastSeenEpoch=this._trackEpoch,this._trackCount<this._trackLinks.length){const t=this._trackLinks[this._trackCount];t.node=e,t.version=e.version}else this._trackLinks.push(new pe(e,e.version));this._trackCount++}}_commitDeps(e){this._trackLinks.length=this._trackCount,ct(this._trackLinks,e,this),this._links=this._trackLinks}_recompute(){if(this.flags&h.RECOMPUTING)return;this.flags|=h.RECOMPUTING;const e=this._links;this._trackEpoch=xe(),this._trackLinks=j.acquire(),this._trackCount=0;let t=!1;try{const s=G.run(this,this._fn);this._commitDeps(e),t=!0,je(s)?this._handleAsyncComputation(s):this._finalizeResolution(s)}catch(s){if(!t)try{this._commitDeps(e),t=!0}catch{}this._handleError(s,b.COMPUTED_COMPUTATION_FAILED,!0)}finally{t&&e!==T?j.release(e):t||j.release(this._trackLinks),this._trackEpoch=-1,this._trackLinks=T,this._trackCount=0,this.flags&=-257}}_handleAsyncComputation(e){this.flags=(this.flags|h.PENDING)&-217,this._notifySubscribers(void 0,void 0),this._asyncStartAggregateVersion=this._captureVersionSnapshot(),this._asyncRetryCount=0,this._promiseId=(this._promiseId+1)%ze;const t=this._promiseId;e.then(s=>{if(t===this._promiseId){if(this._captureVersionSnapshot()!==this._asyncStartAggregateVersion)return this._asyncRetryCount++<Ve?this._markDirty():this._handleError(new B(`Async drift threshold exceeded after ${Ve} retries.`),b.COMPUTED_ASYNC_COMPUTATION_FAILED);this._finalizeResolution(s),this._notifySubscribers(s,void 0)}},s=>t===this._promiseId&&this._handleError(s,b.COMPUTED_ASYNC_COMPUTATION_FAILED))}_captureVersionSnapshot(){let e=0;const t=this._links;for(let s=0,i=t.length;s<i;s++)e=((e<<5)-e|0)+t[s].node.version&q;return e}_handleError(e,t,s=!1){const i=Z(e,B,t);if(!s&&!(this.flags&h.REJECTED)&&(this.version=this.version+1&q),this._error=i,this.flags=this.flags&-121|(h.REJECTED|h.HAS_ERROR),this._onError)try{this._onError(i)}catch(o){console.error(b.CALLBACK_ERROR_IN_ERROR_HANDLER,o)}if(s)throw i;this._notifySubscribers(void 0,void 0)}_finalizeResolution(e){(!(this.flags&h.RESOLVED)||!this._equal(this._value,e))&&(this.version=this.version+1&q),this._value=e,this._error=null,this.flags=(this.flags|h.RESOLVED)&-697,this._cachedErrors=null,this._errorCacheEpoch=-1}execute(){this._markDirty()}_markDirty(){this.flags&(h.RECOMPUTING|h.DIRTY)||(this.flags|=h.DIRTY,this._notifySubscribers(void 0,void 0))}}Object.freeze(qe.prototype);function Xe(n,e={}){return new qe(n,e)}class dt extends we{constructor(e,t={}){super(),this._cleanup=null,this._links=T,this._nextLinks=null,this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._executionCount=0,this._historyPtr=0,this._execId=0,this._fn=e,this._onError=t.onError??null,this._sync=t.sync??!1,this._maxExecutions=t.maxExecutionsPerSecond??M.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=t.maxExecutionsPerFlush??M.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=t.trackModifications??!1;const s=Number.isFinite(this._maxExecutions),i=s?Math.min(this._maxExecutions+1,M.MAX_EXECUTIONS_PER_SECOND+1):0;this._historyCapacity=i,this._history=m&&s&&i>0?new Array(i).fill(0):null,Q.attachDebugInfo(this,"effect",this.id)}run(){if(this.flags&O.DISPOSED)throw new X(b.EFFECT_DISPOSED);this.execute(!0)}dispose(){this.flags&O.DISPOSED||(this.flags|=O.DISPOSED,this._execCleanup(),this._releaseLinks(this._links),this._links=T,this._executeTask=void 0)}addDependency(e){if(!(this.flags&O.EXECUTING)||e._lastSeenEpoch===this._currentEpoch)return;e._lastSeenEpoch=this._currentEpoch;const t=this._nextLinks;if(e._tempUnsub){t.push(new pe(e,e.version,e._tempUnsub)),e._tempUnsub=void 0;return}try{const s=e.subscribe(()=>{if(this._trackModifications&&this.flags&O.EXECUTING&&(e._modifiedAtEpoch=this._currentEpoch),this._sync)return this.execute();this._executeTask||(this._executeTask=()=>this.execute()),k.schedule(this._executeTask)});t.push(new pe(e,e.version,s))}catch(s){console.error(Z(s,X,b.EFFECT_EXECUTION_FAILED))}}execute(e=!1){if(this.flags&(O.DISPOSED|O.EXECUTING)||!e&&this._links.length>0&&!this._isDirty())return;this._checkInfiniteLoops(),this.flags|=O.EXECUTING,this._execCleanup();const t=this._links;if(t!==T)for(let o=0,r=t.length;o<r;o++){const c=t[o];c&&(c.node._tempUnsub=c.unsub)}const s=j.acquire();this._nextLinks=s,this._currentEpoch=xe();let i=!1;try{const o=G.run(this,this._fn);this._links=s,i=!0,this._checkLoopWarnings(),je(o)?this._handleAsyncResult(o):this._cleanup=typeof o=="function"?o:null}catch(o){i=!0,this._handleExecutionError(o),this._cleanup=null}finally{this._finalizeDependencies(i,t,s),this.flags&=-9}}_handleAsyncResult(e){const t=++this._execId;e.then(s=>{if(t!==this._execId||this.flags&O.DISPOSED){if(typeof s=="function")try{s()}catch(i){this._handleExecutionError(i,b.EFFECT_CLEANUP_FAILED)}return}typeof s=="function"&&(this._cleanup=s)},s=>t===this._execId&&this._handleExecutionError(s))}_finalizeDependencies(e,t,s){if(this._nextLinks=null,e){if(t!==T){for(let i=0,o=t.length;i<o;i++){const r=t[i],c=r?.node._tempUnsub;c&&(c(),r&&(r.node._tempUnsub=void 0))}j.release(t)}}else if(this._releaseLinks(s),j.release(s),t!==T)for(let i=0,o=t.length;i<o;i++)t[i]&&(t[i].node._tempUnsub=void 0)}_releaseLinks(e){if(e!==T){for(let t=0,s=e.length;t<s;t++)e[t]?.unsub?.();j.release(e)}}_isDirty(){const e=this._links;for(let t=0,s=e.length;t<s;t++){const i=e[t],o=i.node;if(o.version!==i.version)return!0;if("value"in o){try{be(()=>o.value)}catch{return!0}if(o.version!==i.version)return!0}}return!1}_execCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){this._handleExecutionError(e,b.EFFECT_CLEANUP_FAILED)}this._cleanup=null}}_checkInfiniteLoops(){const e=me;if(this._lastFlushEpoch!==e&&(this._lastFlushEpoch=e,this._executionsInEpoch=0),++this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),lt()>M.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history){const t=Date.now();this._history[this._historyPtr]=t,this._historyPtr=(this._historyPtr+1)%this._historyCapacity;const s=this._history[this._historyPtr]||0;if(s>0&&t-s<tt.ONE_SECOND_MS){const i=new X("Effect executed too frequently within 1 second. Suspected infinite loop.");if(this.dispose(),this._handleExecutionError(i),m)throw i}}}get isDisposed(){return(this.flags&O.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&O.EXECUTING)!==0}_throwInfiniteLoopError(e){const t=new X(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${ye}`);throw this.dispose(),console.error(t),t}_handleExecutionError(e,t=b.EFFECT_EXECUTION_FAILED){const s=Z(e,X,t);if(console.error(s),this._onError)try{this._onError(s)}catch(i){console.error(Z(i,X,b.CALLBACK_ERROR_IN_ERROR_HANDLER))}}_checkLoopWarnings(){if(this._trackModifications&&Q.enabled){const e=this._currentEpoch,t=this._links;for(let s=0,i=t.length;s<i;s++){const o=t[s].node;o._modifiedAtEpoch===e&&Q.warn(!0,`Effect is reading a dependency (${Q.getDebugName(o)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function H(n,e={}){if(typeof n!="function")throw new X(b.EFFECT_MUST_BE_FUNCTION);const t=new dt(n,e);return t.execute(),t}function ue(n){if(typeof n!="function")throw new TypeError("Batch callback must be a function");k.startBatch();try{return n()}finally{k.endBatch()}}function _t(n){return n!==null&&typeof n=="object"&&"value"in n&&"subscribe"in n}function le(n){if(!n)return"unknown";const e="jquery"in n?n[0]:n;if(!e)return"unknown";const t=e.id;if(t&&typeof t=="string")return`#${t}`;const s=e.tagName.toLowerCase(),i=e.classList;if(i&&i.length>0){let o=s;for(let r=0,c=i.length;r<c;r++){const l=i[r];l&&(o+=`.${l}`)}return o}return s}function Et(n){const e=n.length;if(e===0)return new Int32Array(0);const t=new Int32Array(e),s=new Int32Array(e);let i=0;for(let r=0;r<e;r++){const c=n[r];if(c===void 0||c===-1)continue;const l=i>0?s[i-1]:void 0;if(i===0||l!==void 0&&(n[l]??-1)<c){t[r]=l??-1,s[i++]=r;continue}let a=0,_=i-1;for(;a<_;){const I=a+_>>>1,R=s[I];R!==void 0&&(n[R]??-1)<c?a=I+1:_=I}const A=s[a];A!==void 0&&c<(n[A]??Number.MAX_SAFE_INTEGER)&&(a>0&&(t[r]=s[a-1]??-1),s[a]=r)}const o=new Int32Array(i);if(i>0){let r=s[i-1];for(let c=i-1;c>=0&&r!==void 0&&r!==-1;c--)o[c]=r,r=t[r]}return o}function pt(){if(typeof window<"u"){const n=window.__ATOM_DEBUG__;if(typeof n=="boolean")return n}try{if(typeof process<"u"&&process.env?.NODE_ENV==="development")return!0}catch{}return!1}let Y=pt();const d={get enabled(){return Y},set enabled(n){Y=n},log(n,...e){Y&&console.log(`[atom-effect-jquery] ${n}:`,...e)},atomChanged(n,e,t){Y&&console.log(`[atom-effect-jquery] Atom "${n??"anonymous"}" changed:`,e,"→",t)},domUpdated(n,e,t){Y&&(console.log(`[atom-effect-jquery] DOM updated: ${le(n)}.${e} =`,t),gt(n))},cleanup(n){Y&&console.log(`[atom-effect-jquery] Cleanup: ${n}`)},warn(...n){Y&&console.warn("[atom-effect-jquery]",...n)}},Ce=new WeakMap;function gt(n){const e="jquery"in n?n[0]:n;if(!e||!e.isConnected)return;let t=Ce.get(e);if(t||(t={},Ce.set(e,t)),t.timer&&clearTimeout(t.timer),t.cleanupTimer&&clearTimeout(t.cleanupTimer),!t.orgStyle){const i=e.style;t.orgStyle={outline:i.outline,outlineOffset:i.outlineOffset,transition:i.transition}}const s=e.style;s.outline="2px solid rgba(255, 68, 68, 0.8)",s.outlineOffset="1px",s.transition="none",t.timer=setTimeout(()=>{e.isConnected&&(s.transition="outline 0.5s ease-out",requestAnimationFrame(()=>{if(!e.isConnected)return;const i=t?.orgStyle;i&&(s.outline=i.outline,s.outlineOffset=i.outlineOffset),t.cleanupTimer=setTimeout(()=>{e.isConnected&&t?.orgStyle&&(s.transition=t.orgStyle.transition),Ce.delete(e)},500)}))},100)}const mt=new WeakMap;function Qe(n,e={}){const t=Me(n,e);return e.name&&mt.set(t,{name:e.name}),t}Object.defineProperty(Qe,"debug",{get(){return d.enabled},set(n){d.enabled=n}});function yt(){return new Promise(n=>setTimeout(n,0))}u.extend({atom:Qe,computed:Xe,effect:H,batch:ue,untracked:be,isAtom:Se,isComputed:Be,isReactive:n=>Se(n)||Be(n),nextTick:yt});const he="_aes-bound";class bt{records=new WeakMap;boundElements=new WeakSet;preservedNodes=new WeakSet;ignoredNodes=new WeakSet;keep(e){this.preservedNodes.add(e)}isKept(e){return this.preservedNodes.has(e)}markIgnored(e){this.ignoredNodes.add(e)}isIgnored(e){return this.ignoredNodes.has(e)}_getOrCreateRecord(e){let t=this.records.get(e);return t||(t={},this.records.set(e,t),this.boundElements.has(e)||(this.boundElements.add(e),e.classList.add(he))),t}trackEffect(e,t){const s=this._getOrCreateRecord(e);s.effects||(s.effects=[]),s.effects.push(t)}trackCleanup(e,t){const s=this._getOrCreateRecord(e);s.cleanups||(s.cleanups=[]),s.cleanups.push(t)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.delete(e))return;const t=this.records.get(e);if(!t)return;this.records.delete(e),this.preservedNodes.delete(e),this.ignoredNodes.delete(e),e.classList.remove(he),d.enabled&&d.cleanup(le(e));const s=t.effects;if(s)for(let o=0,r=s.length;o<r;o++)try{s[o]?.dispose()}catch(c){d.warn("Effect dispose error:",c)}const i=t.cleanups;if(i)for(let o=0,r=i.length;o<r;o++)try{i[o]?.()}catch(c){d.warn("Cleanup error:",c)}}cleanupDescendants(e){const t=e.querySelectorAll(`.${he}`);for(let s=0,i=t.length;s<i;s++){const o=t[s];o&&this.boundElements.has(o)?this.cleanup(o):o&&o.classList.remove(he)}}cleanupTree(e){this.cleanupDescendants(e),this.cleanup(e)}}const p=new bt;let ne=null;function Ge(n=document.body){ne||(ne=new MutationObserver(e=>{for(let t=0,s=e.length;t<s;t++){const i=e[t]?.removedNodes;if(!i)continue;const o=i.length;if(o!==0)for(let r=0;r<o;r++){const c=i[r];c.nodeType===1&&(c.isConnected||p.isKept(c)||p.isIgnored(c)||p.cleanupTree(c))}}}),ne.observe(n,{childList:!0,subtree:!0}))}function St(){ne?.disconnect(),ne=null}function S(n,e,t,s){_t(e)?p.trackEffect(n,H(()=>{const i=e.value;t(i),d.domUpdated(u(n),s,i)})):(t(e),d.domUpdated(u(n),s,e))}var g=(n=>(n[n.None=0]="None",n[n.Focused=1]="Focused",n[n.Composing=2]="Composing",n[n.SyncingToAtom=4]="SyncingToAtom",n[n.SyncingToDom=8]="SyncingToDom",n[n.Busy=14]="Busy",n))(g||{});function Ie(){return{timeoutId:null,flags:0}}function Ye(n,e,t={}){const{debounce:s,event:i="input",parse:o=D=>D,format:r=D=>String(D??""),equal:c=Object.is}=t,l=Ie(),a=n[0],_=()=>{if(!(l.flags&g.Busy)){l.flags|=g.SyncingToAtom;try{const D=a.value,N=o(D);c(e.value,N)||(e.value=N)}finally{l.flags&=~g.SyncingToAtom}}},A=()=>{l.timeoutId&&(clearTimeout(l.timeoutId),l.timeoutId=null,_()),l.flags&=~g.Focused;const D=r(e.value);a.value!==D&&(a.value=D)},I=()=>{l.flags&g.Busy||(s?(l.timeoutId&&clearTimeout(l.timeoutId),l.timeoutId=setTimeout(_,s)):_())},R={compositionstart:()=>{l.flags|=g.Composing},compositionend:()=>{l.flags&=~g.Composing,_()},focus:()=>{l.flags|=g.Focused},blur:A,[i]:I,change:I};return n.on(R),{effect:()=>{const D=e.value,N=r(D),v=a.value;if(v!==N&&!(l.flags&g.Focused&&c(o(v),D))){l.flags|=g.SyncingToDom;try{if(l.flags&g.Focused){const{selectionStart:de,selectionEnd:Te}=a;a.value=N;const V=N.length;a.setSelectionRange(Math.min(de??V,V),Math.min(Te??V,V))}else a.value=N;d.domUpdated(n,"val",N)}finally{l.flags&=~g.SyncingToDom}}},cleanup:()=>{n.off(R),l.timeoutId&&clearTimeout(l.timeoutId)}}}u.fn.atomText=function(n,e){return this.each(function(){const t=u(this);S(this,n,e?i=>t.text(e(i)):i=>t.text(String(i??"")),"text")})},u.fn.atomHtml=function(n){return this.each(function(){const e=u(this);S(this,n,t=>e.html(String(t??"")),"html")})},u.fn.atomClass=function(n,e){return this.each(function(){const t=u(this);S(this,e,s=>t.toggleClass(n,!!s),`class.${n}`)})},u.fn.atomCss=function(n,e,t){return this.each(function(){const s=u(this);S(this,e,t?o=>s.css(n,`${o}${t}`):o=>s.css(n,o),`css.${n}`)})},u.fn.atomAttr=function(n,e){return this.each(function(){const t=u(this);S(this,e,s=>{if(s==null||s===!1){t.removeAttr(n);return}t.attr(n,s===!0?n:String(s))},`attr.${n}`)})},u.fn.atomProp=function(n,e){return this.each(function(){const t=u(this);S(this,e,s=>t.prop(n,s),`prop.${n}`)})},u.fn.atomShow=function(n){return this.each(function(){const e=u(this);S(this,n,t=>e.toggle(!!t),"show")})},u.fn.atomHide=function(n){return this.each(function(){const e=u(this);S(this,n,t=>e.toggle(!t),"hide")})},u.fn.atomVal=function(n,e={}){return this.each(function(){const{effect:t,cleanup:s}=Ye(u(this),n,e);p.trackEffect(this,H(t)),p.trackCleanup(this,s)})},u.fn.atomChecked=function(n){return this.each(function(){const e=u(this),t=this,s=Ie(),i=()=>{if(s.flags&g.Busy)return;const r=t.checked;n.value!==r&&(n.value=r)};e.on("change",i),p.trackCleanup(this,()=>e.off("change",i));const o=H(()=>{s.flags|=g.SyncingToDom;const r=!!n.value;t.checked!==r&&(t.checked=r,d.domUpdated(e,"checked",r)),s.flags&=~g.SyncingToDom});p.trackEffect(this,o)})},u.fn.atomOn=function(n,e){return this.each(function(){const t=u(this);t.on(n,e),p.trackCleanup(this,()=>t.off(n,e))})},u.fn.atomUnbind=function(){return this.each(function(){p.cleanupTree(this)})};const Je=Object.create(null);function Ct(n){let e=Je[n];return e||(e=n.includes("-")?n.replace(/-./g,t=>t[1].toUpperCase()):n,Je[n]=e,e)}function It(n,e){const t=n.el;S(t,e,s=>{const i=typeof s=="string"?s:String(s??"");t.textContent!==i&&(t.textContent=i)},"text")}function Dt(n,e){const t=n.el;S(t,e,s=>{const i=String(s??"");t.innerHTML!==i&&(t.innerHTML=i)},"html")}function Tt(n,e){for(const t in e)S(n.el,e[t],s=>{n.el.classList.toggle(t,!!s)},`class.${t}`)}function Nt(n,e){const t=n.el,s=t.style;for(const i in e){const o=e[i];if(o===void 0)continue;const r=Ct(i);Array.isArray(o)?S(t,o[0],c=>{s[r]=`${c}${o[1]}`},`css.${i}`):S(t,o,c=>{s[r]=c},`css.${i}`)}}function Ot(n,e){const t=n.el;for(const s in e)S(t,e[s],i=>{if(i==null||i===!1){t.removeAttribute(s);return}const o=i===!0?s:String(i);t.getAttribute(s)!==o&&t.setAttribute(s,o)},`attr.${s}`)}function kt(n,e){const t=n.el;for(const s in e)S(n.el,e[s],i=>{t[s]!==i&&(t[s]=i)},`prop.${s}`)}function At(n,e){const t=n.el;S(t,e,s=>{t.style.display=s?"":"none",d.enabled&&d.domUpdated(t,"show",s)},"show")}function vt(n,e){const t=n.el;S(t,e,s=>{t.style.display=s?"none":"",d.enabled&&d.domUpdated(t,"hide",s)},"hide")}function Ut(n,e){const t=Array.isArray(e),{effect:s,cleanup:i}=Ye(n.$el,t?e[0]:e,t?e[1]:{});p.trackEffect(n.el,H(s)),n.trackCleanup(i)}function Rt(n,e){const t=n.el,s=Ie(),i=()=>{if(s.flags&g.Busy)return;const r=t.checked;e.value!==r&&(e.value=r)};t.addEventListener("change",i),n.trackCleanup(()=>t.removeEventListener("change",i));const o=H(()=>{s.flags|=g.SyncingToDom;const r=!!e.value;t.checked!==r&&(t.checked=r,d.enabled&&d.domUpdated(t,"checked",r)),s.flags&=~g.SyncingToDom});p.trackEffect(t,o)}function wt(n,e){for(const t in e){const s=e[t];if(typeof s!="function")continue;const i=o=>{ue(()=>s.call(n.el,u.Event(o.type,{originalEvent:o})))};n.el.addEventListener(t,i),n.trackCleanup(()=>n.el.removeEventListener(t,i))}}u.fn.atomBind=function(n){return this.each(function(){const e=this;let t=null;const s={get $el(){return t||(t=u(e)),t},el:e,trackCleanup:i=>p.trackCleanup(e,i)};n.text!==void 0&&It(s,n.text),n.html!==void 0&&Dt(s,n.html),n.class&&Tt(s,n.class),n.css&&Nt(s,n.css),n.attr&&Ot(s,n.attr),n.prop&&kt(s,n.prop),n.show!==void 0&&At(s,n.show),n.hide!==void 0&&vt(s,n.hide),n.val!==void 0&&Ut(s,n.val),n.checked!==void 0&&Rt(s,n.checked),n.on&&wt(s,n.on)})},u.fn.atomList=function(n,e){const{key:t,render:s,bind:i,update:o,onAdd:r,onRemove:c,empty:l}=e,a=typeof t=="function"?t:(_,A)=>_[t];return this.each(function(){const _=u(this),A=le(this),I=new Map,R=new Set;let J=[],W=null;const D=H(()=>{const N=n.value,v=N.length;if(v===0?l&&!W&&(W=u(l).appendTo(_)):W&&(W.remove(),W=null),v===0&&I.size===0){J=[];return}d.log("list",`${A} updating with ${v} items`);const de=new Map,Te=J.length;for(let f=0;f<Te;f++)de.set(J[f],f);const V=new Array(v),Ne=new Set,Ze=new Int32Array(v);for(let f=0;f<v;f++){const F=N[f],E=a(F,f);d.enabled&&Ne.has(E)&&console.warn(`[atomList] Duplicate key "${E}" at index ${f}.`),V[f]=E,Ne.add(E),Ze[f]=de.get(E)??-1}if(I.size>0)for(const[f,F]of I){if(Ne.has(f)||R.has(f))continue;const E=()=>{F.$el.remove(),F.$el[0]&&p.cleanup(F.$el[0]),R.delete(f),d.log("list",`${A} removed item:`,f)};if(I.delete(f),R.add(f),c){const C=c(F.$el);C instanceof Promise?C.then(E):E()}else E()}if(v===0){J=[];return}const $e=Et(Ze);let Oe=$e.length-1,x=null;for(let f=v-1;f>=0;f--){const F=V[f],E=N[f],C=I.get(F);if(C){const ee=C.item;C.item=E;const w=C.$el[0];if(!w)continue;if(o)o(C.$el,E,f),d.domUpdated(C.$el,"list.update",E);else if(ee!==E){let z=!0;if(typeof ee=="object"&&ee!==null&&typeof E=="object"&&E!==null){z=!1;let P=0;const _e=ee,et=E;for(const te in _e){if(_e[te]!==et[te]){z=!0;break}P++}if(!z){let te=0;for(const xt in et)if(te++,te>P){z=!0;break}P!==te&&(z=!0)}}if(z){const P=u(s(E,f)),_e=x===w;C.$el.replaceWith(P),C.$el=P,i&&i(P,E,f),d.domUpdated(P,"list.render",E),_e&&(x=P[0]||null)}}if(Oe>=0&&$e[Oe]===f)Oe--;else{const z=C.$el[0];x?.isConnected?x!==z&&C.$el.insertBefore(x):C.$el.appendTo(_)}x=C.$el[0]||null}else{const ee=s(E,f),w=u(ee);I.set(F,{$el:w,item:E}),x?.isConnected?w.insertBefore(x):w.appendTo(_),i&&i(w,E,f),r&&r(w),d.domUpdated(w,"list.add",E),x=w[0]||null}}J=V});p.trackEffect(this,D),p.trackCleanup(this,()=>{I.clear(),R.clear(),J=[],W?.remove()})})};const ae=new WeakMap;u.fn.atomMount=function(n,e={}){return this.each(function(){const t=d.enabled,s=t?le(this):"",i=ae.get(this);i&&(t&&d.log("mount",`${s} unmounting existing component`),i()),t&&d.log("mount",`${s} mounting component`);let o;try{o=n(u(this),e)}catch(c){console.error("[atom-effect-jquery] Mount error:",c);return}const r=()=>{if(ae.delete(this)){if(t&&d.log("mount",`${s} full cleanup`),typeof o=="function")try{o()}catch(c){console.error("[atom-effect-jquery] Cleanup error:",c)}p.cleanupTree(this)}};ae.set(this,r),p.trackCleanup(this,r)})},u.fn.atomUnmount=function(){return this.each(function(){const n=ae.get(this);n&&n()})};const fe=new WeakMap;let We=!1;const Ke=n=>{let e=fe.get(n);return e||(e=function(...t){return ue(()=>n.apply(this,t))},fe.set(n,e)),e};function De(){if(We)return;We=!0;const n=u.fn.on,e=u.fn.off,t=u.fn.remove,s=u.fn.empty,i=u.fn.detach;u.fn.remove=function(o){const r=o?this.filter(o):this;for(let c=0,l=r.length;c<l;c++){const a=r[c];a&&(p.cleanupTree(a),p.markIgnored(a))}return t.call(this,o)},u.fn.empty=function(){for(let o=0,r=this.length;o<r;o++){const c=this[o];c&&p.cleanupDescendants(c)}return s.call(this)},u.fn.detach=function(o){const r=o?this.filter(o):this;for(let c=0,l=r.length;c<l;c++){const a=r[c];a&&p.keep(a)}return i.call(this,o)},u.fn.on=function(...o){const r=o[0];if(r&&typeof r=="object"){const c=r,l={};for(const a in c){const _=c[a];_&&(l[a]=Ke(_))}o[0]=l}else for(let c=o.length-1;c>=0;c--)if(typeof o[c]=="function"){o[c]=Ke(o[c]);break}return n.apply(this,o)},u.fn.off=function(...o){const r=o[0];if(r&&typeof r=="object"){const c=r,l={};for(const a in c){const _=c[a];_&&(l[a]=fe.get(_)||_)}o[0]=l}else for(let c=o.length-1;c>=0;c--)if(typeof o[c]=="function"){o[c]=fe.get(o[c])||o[c];break}return e.apply(this,o)}}const Lt=De;De(),u(()=>{Ge(document.body)}),y.default=u,y.atom=Me,y.batch=ue,y.computed=Xe,y.disableAutoCleanup=St,y.effect=H,y.enableAutoCleanup=Ge,y.enablejQueryBatching=Lt,y.enablejQueryOverrides=De,y.registry=p,y.untracked=be,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
2
2
|
//# sourceMappingURL=atom-effect-jquery.min.js.map
|