@but212/atom-effect-jquery 0.8.4 → 0.9.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 +79 -124
- 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 +335 -364
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,191 +3,146 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@but212/atom-effect-jquery)
|
|
4
4
|
[](https://github.com/but212/atom-effect/blob/main/packages/jquery/LICENSE)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
`@but212/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).
|
|
9
|
-
|
|
10
|
-
## Features
|
|
11
|
-
|
|
12
|
-
- **Fine-grained Reactivity:** Powered by `@but212/atom-effect`.
|
|
13
|
-
- **Two-way Data Binding:** Seamless synchronization for inputs (`val`, `checked`).
|
|
14
|
-
- **Auto-Cleanup:** Effects are automatically disposed when elements are removed from the DOM (via MutationObserver).
|
|
15
|
-
- **Reparenting-Safe:** DOM elements moved via `.appendTo()`, `.prependTo()`, etc. preserve their reactivity (critical for drag-and-drop libraries like Sortable).
|
|
16
|
-
- **Async Removal Handling:** `atomList` properly handles async removal animations without ghost items.
|
|
17
|
-
- **Smart Input Formatting:** `atomVal` allows intermediate input (e.g., `1.`, `00`) during typing; formatting is applied on blur.
|
|
18
|
-
- **Optimized List Rendering:** `atomList` for efficient array rendering with LIS-based keyed diffing.
|
|
19
|
-
- **Debug Mode:** Visual highlighting of DOM updates to trace reactivity.
|
|
20
|
-
- **jQuery Integration:** Batching support for standard jQuery events.
|
|
6
|
+
Reactive jQuery bindings.
|
|
21
7
|
|
|
22
8
|
## Installation
|
|
23
9
|
|
|
24
|
-
### NPM
|
|
25
|
-
|
|
26
10
|
```bash
|
|
27
|
-
npm install @but212/atom-effect-jquery jquery
|
|
28
|
-
# or
|
|
29
|
-
pnpm add @but212/atom-effect-jquery jquery @but212/atom-effect
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### CDN
|
|
33
|
-
|
|
34
|
-
```html
|
|
35
|
-
<!-- Load jQuery -->
|
|
36
|
-
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
|
37
|
-
<!-- Load atom-effect-jquery -->
|
|
38
|
-
<script src="https://cdn.jsdelivr.net/npm/@but212/atom-effect-jquery@0.8.4"></script>
|
|
11
|
+
npm install @but212/atom-effect-jquery jquery
|
|
39
12
|
```
|
|
40
13
|
|
|
41
14
|
## Basic Usage
|
|
42
15
|
|
|
43
16
|
```javascript
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// import '@but212/atom-effect-jquery';
|
|
17
|
+
import $ from 'jquery';
|
|
18
|
+
import '@but212/atom-effect-jquery';
|
|
47
19
|
|
|
48
|
-
// 1. Create State
|
|
49
20
|
const count = $.atom(0);
|
|
50
|
-
const doubled = $.computed(() => count.value * 2);
|
|
51
21
|
|
|
52
|
-
//
|
|
22
|
+
// Bind text
|
|
53
23
|
$('#count').atomText(count);
|
|
54
|
-
$('#doubled').atomText(doubled);
|
|
55
|
-
|
|
56
|
-
// 3. Update State (DOM updates automatically)
|
|
57
|
-
$('#increment').on('click', () => count.value++);
|
|
58
|
-
$('#decrement').on('click', () => count.value--);
|
|
59
24
|
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
console.log(`Current count: ${count.value}, Doubled: ${doubled.value}`);
|
|
63
|
-
});
|
|
25
|
+
// Update state
|
|
26
|
+
$('#btn').on('click', () => count.value++);
|
|
64
27
|
```
|
|
65
28
|
|
|
66
29
|
## API Reference
|
|
67
30
|
|
|
31
|
+
All methods return the jQuery object for chaining.
|
|
32
|
+
Bindings automatically clean up when elements are removed.
|
|
33
|
+
|
|
68
34
|
### Static Methods
|
|
69
35
|
|
|
70
|
-
|
|
36
|
+
| Method | Description |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `$.atom(val)` | Creates a writable atom. |
|
|
39
|
+
| `$.computed(fn)` | Creates a computed atom. |
|
|
40
|
+
| `$.effect(fn)` | Runs a side effect. |
|
|
41
|
+
| `$.batch(fn)` | Batches updates. |
|
|
42
|
+
| `$.isAtom(val)` | Checks if value is an atom. |
|
|
43
|
+
|
|
44
|
+
### Content & Attributes
|
|
71
45
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
46
|
+
| Method | Description |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| `.atomText(atom, formatter?)` | Binds text content. |
|
|
49
|
+
| `.atomHtml(atom)` | Binds inner HTML. |
|
|
50
|
+
| `.atomClass(class, boolAtom)` | Toggles class based on boolean atom. |
|
|
51
|
+
| `.atomCss(prop, atom, unit?)` | Binds CSS property. |
|
|
52
|
+
| `.atomAttr(attr, atom)` | Binds HTML attribute. |
|
|
53
|
+
| `.atomProp(prop, atom)` | Binds DOM property. |
|
|
54
|
+
| `.atomShow(boolAtom)` | Shows element if true. |
|
|
55
|
+
| `.atomHide(boolAtom)` | Hides element if true. |
|
|
77
56
|
|
|
78
|
-
###
|
|
57
|
+
### Form Bindings
|
|
79
58
|
|
|
80
|
-
|
|
59
|
+
#### `.atomVal(atom, options?)`
|
|
81
60
|
|
|
82
|
-
|
|
61
|
+
Two-way binding for inputs.
|
|
83
62
|
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
- **`.atomHtml(atom)`**
|
|
87
|
-
Updates `innerHTML`. (⚠️ Use with caution regarding XSS).
|
|
63
|
+
- `options.debounce`: (ms) Debounce updates.
|
|
64
|
+
- `options.format`: (fn) Format value on blur.
|
|
88
65
|
|
|
89
|
-
####
|
|
66
|
+
#### `.atomChecked(boolAtom)`
|
|
90
67
|
|
|
91
|
-
-
|
|
92
|
-
Toggles a class based on the atom's truthy value.
|
|
93
|
-
- **`.atomCss(property, atom, unit?)`**
|
|
94
|
-
Updates a CSS property. Optional unit (e.g., 'px') can be appended.
|
|
95
|
-
- **`.atomAttr(attribute, atom)`**
|
|
96
|
-
Updates an HTML attribute.
|
|
97
|
-
- **`.atomProp(property, atom)`**
|
|
98
|
-
Updates a DOM property (e.g., `disabled`, `readOnly`).
|
|
99
|
-
- **`.atomShow(booleanAtom)`** / **`.atomHide(booleanAtom)`**
|
|
100
|
-
Toggles visibility using jQuery's `.toggle()`.
|
|
68
|
+
Two-way binding for checkboxes/radios.
|
|
101
69
|
|
|
102
|
-
|
|
70
|
+
### Events
|
|
103
71
|
|
|
104
|
-
|
|
105
|
-
Two-way binding for input elements.
|
|
106
|
-
- `options.debounce`: Debounce input updates (ms).
|
|
107
|
-
- `options.format`: Format value before ensuring it in DOM.
|
|
108
|
-
- *Note:* Automatically handles IME types (e.g., for Korean/Chinese).
|
|
109
|
-
- **`.atomChecked(booleanAtom)`**
|
|
110
|
-
Two-way binding for checkboxes and radios.
|
|
72
|
+
#### `.atomOn(event, handler)`
|
|
111
73
|
|
|
112
|
-
|
|
74
|
+
Binds event handler wrapped in `batch()` for performance.
|
|
113
75
|
|
|
114
|
-
|
|
115
|
-
Adds an event listener where the handler is automatically wrapped in `$.batch()`.
|
|
76
|
+
### Unified Binding
|
|
116
77
|
|
|
117
|
-
|
|
78
|
+
#### `.atomBind(bindings)`
|
|
118
79
|
|
|
119
|
-
|
|
80
|
+
Apply multiple bindings at once.
|
|
120
81
|
|
|
121
|
-
```
|
|
122
|
-
$('
|
|
123
|
-
text:
|
|
124
|
-
class: { 'active':
|
|
82
|
+
```javascript
|
|
83
|
+
$('.card').atomBind({
|
|
84
|
+
text: titleAtom,
|
|
85
|
+
class: { 'active': isActive },
|
|
125
86
|
css: { 'color': colorAtom },
|
|
126
|
-
on: { click:
|
|
87
|
+
on: { click: handleClick }
|
|
127
88
|
});
|
|
128
89
|
```
|
|
129
90
|
|
|
130
|
-
### List Rendering
|
|
91
|
+
### List Rendering
|
|
131
92
|
|
|
132
|
-
|
|
93
|
+
#### `.atomList(listAtom, options)`
|
|
133
94
|
|
|
134
|
-
|
|
135
|
-
const items = $.atom(['Apple', 'Banana']);
|
|
95
|
+
Efficiently renders a list of items using keyed diffing.
|
|
136
96
|
|
|
97
|
+
```javascript
|
|
137
98
|
$('ul').atomList(items, {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
// Render function returning an HTML string or Element
|
|
142
|
-
render: (item) => `<li>${item}</li>`,
|
|
143
|
-
|
|
144
|
-
// Optional: Bind events/atoms to the created element
|
|
99
|
+
key: (item) => item.id,
|
|
100
|
+
render: (item) => `<li>${item.name}</li>`,
|
|
145
101
|
bind: ($el, item) => {
|
|
146
|
-
$el.on('click', () =>
|
|
102
|
+
$el.on('click', () => select(item));
|
|
147
103
|
}
|
|
148
104
|
});
|
|
149
105
|
```
|
|
150
106
|
|
|
151
|
-
|
|
107
|
+
**Options**: `key` (required), `render`, `bind`, `onAdd`, `onRemove`, `empty`.
|
|
108
|
+
|
|
109
|
+
### Components
|
|
152
110
|
|
|
153
|
-
|
|
111
|
+
#### `.atomMount(Component, props)`
|
|
154
112
|
|
|
155
|
-
|
|
113
|
+
Mounts a functional component with its own lifestyle management.
|
|
114
|
+
|
|
115
|
+
```javascript
|
|
156
116
|
const Counter = ($el, props) => {
|
|
157
|
-
const count = $.atom(props.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
$el.find('span').atomText(count);
|
|
161
|
-
|
|
162
|
-
// Return cleanup function (optional)
|
|
163
|
-
return () => console.log('Unmounted');
|
|
117
|
+
const count = $.atom(props.start);
|
|
118
|
+
$el.atomText(count);
|
|
119
|
+
return () => console.log('cleanup');
|
|
164
120
|
};
|
|
165
121
|
|
|
166
|
-
$('#app').atomMount(Counter, {
|
|
122
|
+
$('#app').atomMount(Counter, { start: 10 });
|
|
167
123
|
```
|
|
168
124
|
|
|
169
|
-
##
|
|
170
|
-
|
|
171
|
-
### Transparent Lifecycle Management
|
|
125
|
+
## Key Features
|
|
172
126
|
|
|
173
|
-
|
|
127
|
+
- **Automatic Lifecycle**: Bindings clean up automatically when jQuery elements are removed (`$.cleanData` integration).
|
|
128
|
+
- **Fine-grained Updates**: Only the specific element property/attribute changes, preventing full list re-renders.
|
|
129
|
+
- **Batched Events**: `.atomOn` automatically wraps handlers in `$.batch()` to prevent UI jitter during multiple state changes.
|
|
130
|
+
- **Reparenting-Safe**: Elements can be moved within the DOM without losing their reactive bindings.
|
|
174
131
|
|
|
175
|
-
|
|
176
|
-
- **`.detach()`**: Preserves bindings and reactivity. Perfect for moving elements around in the DOM without losing their state connection.
|
|
177
|
-
- **Auto-Cleanup**: A `MutationObserver` acts as a safety net for elements removed via other means (e.g. `innerHTML`), ensuring eventual cleanup.
|
|
132
|
+
## Debug Mode
|
|
178
133
|
|
|
179
|
-
|
|
134
|
+
Enable internal logging and dependency tracing:
|
|
180
135
|
|
|
181
|
-
|
|
136
|
+
```javascript
|
|
137
|
+
$.atom.debug = true;
|
|
138
|
+
```
|
|
182
139
|
|
|
183
|
-
|
|
140
|
+
When enabled, any potential infinite loops or self-modifying effects will trigger detailed console warnings with trace info.
|
|
184
141
|
|
|
185
|
-
|
|
142
|
+
## Contributing
|
|
186
143
|
|
|
187
|
-
|
|
188
|
-
$.atom.debug = true;
|
|
189
|
-
```
|
|
144
|
+
Contributions are welcome! Feel free to open an issue or submit a pull request.
|
|
190
145
|
|
|
191
146
|
## License
|
|
192
147
|
|
|
193
|
-
MIT
|
|
148
|
+
MIT © [Jeongil Suk](https://github.com/but212)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(E,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],u):(E=typeof globalThis<"u"?globalThis:E||self,u(E.AtomEffectJQuery={},E.jQuery))})(this,(function(E,u){"use strict";const Be={ONE_SECOND_MS:1e3},Z={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},$={DISPOSED:1,EXECUTING:2},f={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},V={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10},Ee={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},B=1073741823,R=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",qe=Object.freeze([]);class F extends Error{constructor(e,s=null,n=!0){super(e),this.name="AtomError",this.cause=s,this.recoverable=n,this.timestamp=new Date}}class G extends F{constructor(e,s=null){super(e,s,!0),this.name="ComputedError"}}class M extends F{constructor(e,s=null){super(e,s,!1),this.name="EffectError"}}class ee extends F{constructor(e,s=null){super(e,s,!1),this.name="SchedulerError"}}const m={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"},ae=Symbol("debugName"),ze=Symbol("id"),le=Symbol("type"),ge=Symbol("noDefaultValue");function Xe(t){return"dependencies"in t&&Array.isArray(t.dependencies)}let me=0;function Se(t,e,s){if(t._visitedEpoch!==s){if(t._visitedEpoch=s,t===e)throw new G("Indirect circular dependency detected");if(Xe(t)){const n=t.dependencies;for(let i=0;i<n.length;i++){const r=n[i];r&&Se(r,e,s)}}}}const O={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:Ee.MAX_DEPENDENCIES,warnInfiniteLoop:Ee.WARN_INFINITE_LOOP,warn(t,e){this.enabled&&t&&console.warn(`[Atom Effect] ${e}`)},checkCircular(t,e){if(t===e)throw new G("Direct circular dependency detected");this.enabled&&(me++,Se(t,e,me))},attachDebugInfo(t,e,s){if(!this.enabled)return;const n=t;n[ae]=`${e}_${s}`,n[ze]=s,n[le]=e},getDebugName(t){if(t!=null&&ae in t)return t[ae]},getDebugType(t){if(t!=null&&le in t)return t[le]}};let Qe=1;const Ge=()=>Qe++;class ye{constructor(){this.id=Ge()&B,this.flags=0}}class De extends ye{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 F(m.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 F(m.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,n))),this._objectSubscribers.forEachSafe(n=>n.execute(),n=>console.error(new F(m.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,n)))}}let te=0;function Ie(){return te=(te+1|0)&B,te}function He(){return te}let se=0,fe=0,ne=!1;function Ce(){return ne?(R&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(ne=!0,se=se+1&B,fe=0,!0)}function ve(){ne=!1}function Je(){return ne?++fe:0}class Ye{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=V.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new ee("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=Ce();this._processJobs(e,s),this.isProcessing=!1,n&&ve(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=Ce();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&ve()}}_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 ee(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,s){for(let n=0;n<s;n++)try{e[n]?.()}catch(i){console.error(new ee("Error occurred during scheduler execution",i))}e.length=0}startBatch(){this.batchDepth++,this.isBatching=!0}endBatch(){this.batchDepth=Math.max(0,this.batchDepth-1),this.batchDepth===0&&(this.flushSync(),this.isBatching=!1)}setMaxFlushIterations(e){if(e<V.MIN_FLUSH_ITERATIONS)throw new ee(`Max flush iterations must be at least ${V.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const J=new Ye;function j(t){if(typeof t!="function")throw new F("Batch callback must be a function");J.startBatch();try{return t()}finally{J.endBatch()}}const q={current:null,run(t,e){const s=this.current;this.current=t;try{return e()}finally{this.current=s}},getCurrent(){return this.current}};function de(t){if(typeof t!="function")throw new F("Untracked callback must be a function");const e=q.current;q.current=null;try{return t()}finally{q.current=e}}class ie{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(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}class _e{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=R?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return R&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,s){if(!(s&&e===s)){if(Object.isFrozen(e)){R&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){R&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){R&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),R&&this.stats&&this.stats.released++}}getStats(){if(!R||!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,R&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const I=Object.freeze([]),A=Object.freeze([]),C=Object.freeze([]),L=new _e,z=new _e,x=new _e;function pe(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t&&typeof t.subscribe=="function"}function Te(t){if(O.enabled&&(t==null||typeof t=="object")){const e=O.getDebugType(t);if(e)return e==="computed"}return pe(t)&&"invalidate"in t&&typeof t.invalidate=="function"}function Ne(t){return t!=null&&typeof t.then=="function"}function Ke(t){return typeof t=="object"&&t!==null}function We(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&typeof t.addDependency=="function"}function Ze(t){return typeof t=="function"&&typeof t.addDependency!="function"}function $e(t){return Ke(t)&&typeof t.execute=="function"}function Re(t,e,s,n){if(e){if(We(e)){e.addDependency(t);return}if(Ze(e)){s.add(e);return}$e(e)&&n.add(e)}}function et(t,e,s,n){if(e!==I&&s!==A)for(let r=0;r<e.length;r++){const o=e[r];o&&(o._tempUnsub=s[r])}const i=z.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):(O.checkCircular(o,n),i[r]=o.subscribe(n)))}if(e!==I)for(let r=0;r<e.length;r++){const o=e[r];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return s!==A&&z.release(s),i}class tt extends De{constructor(e,s){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new ie,this._objectSubscribersStore=new ie,this._sync=s,this._notifyTask=this._flushNotifications.bind(this),O.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=q.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&B,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(s)}_track(e){Re(this,e,this._functionSubscribersStore,this._objectSubscribersStore)}_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 Ue(t,e={}){return new tt(t,e.sync??!1)}function H(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 F)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)}const Oe=f.RESOLVED|f.PENDING|f.REJECTED,re=Array(Oe+1).fill(Z.IDLE);re[f.RESOLVED]=Z.RESOLVED,re[f.PENDING]=Z.PENDING,re[f.REJECTED]=Z.REJECTED;class Ae extends De{constructor(e,s={}){if(typeof e!="function")throw new G(m.COMPUTED_MUST_BE_FUNCTION);if(super(),this._cachedErrors=null,this._errorCacheEpoch=-1,this._value=void 0,this.flags=f.DIRTY|f.IDLE,this._error=null,this._promiseId=0,this._equal=s.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in s?s.defaultValue:ge,this._hasDefaultValue=this._defaultValue!==ge,this._onError=s.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new ie,this._objectSubscribersStore=new ie,this._dependencies=I,this._dependencyVersions=C,this._unsubscribes=A,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=>{}}),O.attachDebugInfo(this,"computed",this.id),O.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(){return this._registerTracking(),this._computeValue()}peek(){return this._value}get state(){return this._registerTracking(),this._getAsyncState()}get hasError(){if(this._registerTracking(),this._isRejected())return!0;for(let e=0;e<this._dependencies.length;e++){const s=this._dependencies[e];if(s&&"hasError"in s&&s.hasError)return!0}return!1}get isValid(){return!this.hasError}get errors(){if(this._registerTracking(),!this.hasError)return qe;const e=He();if(this._errorCacheEpoch===e&&this._cachedErrors!==null)return this._cachedErrors;const s=new Set;this._error&&s.add(this._error);for(let n=0;n<this._dependencies.length;n++){const i=this._dependencies[n];if(i&&"errors"in i){const r=i.errors;for(let o=0;o<r.length;o++){const c=r[o];c&&s.add(c)}}}return this._cachedErrors=Object.freeze([...s]),this._errorCacheEpoch=e,this._cachedErrors}get lastError(){return this._registerTracking(),this._error}get isPending(){return this._registerTracking(),this._isPending()}get isResolved(){return this._registerTracking(),this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==C&&(x.release(this._dependencyVersions),this._dependencyVersions=C),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this._unsubscribes!==A){for(let e=0;e<this._unsubscribes.length;e++){const s=this._unsubscribes[e];s&&s()}z.release(this._unsubscribes),this._unsubscribes=A}this._dependencies!==I&&(L.release(this._dependencies),this._dependencies=I),this._dependencyVersions!==C&&(x.release(this._dependencyVersions),this._dependencyVersions=C),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=f.DIRTY|f.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_isDirty(){return(this.flags&f.DIRTY)!==0}_setDirty(){this.flags|=f.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&f.IDLE)!==0}_setIdle(){this.flags|=f.IDLE,this.flags&=-29}_isPending(){return(this.flags&f.PENDING)!==0}_setPending(){this.flags|=f.PENDING,this.flags&=-27}_isResolved(){return(this.flags&f.RESOLVED)!==0}_setResolved(){this.flags|=f.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&f.REJECTED)!==0}_setRejected(){this.flags|=f.REJECTED|f.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&f.RECOMPUTING)!==0}_setRecomputing(e){const s=f.RECOMPUTING;this.flags=this.flags&~s|-Number(e)&s}_getAsyncState(){return re[this.flags&Oe]}_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=q.run(this._trackable,this._fn);this._commitDependencies(e),s=!0,Ne(n)?this._handleAsyncComputation(n):this._handleSyncResult(n)}catch(n){if(!s)try{this._commitDependencies(e),s=!0}catch(i){this._handleComputationError(i)}this._handleComputationError(n)}finally{this._cleanupContext(e,s),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,s=this._dependencyVersions,n=L.acquire(),i=x.acquire(),r=Ie(),o={depCount:0},c=_=>{_._lastSeenEpoch!==r&&(_._lastSeenEpoch=r,o.depCount<n.length?(n[o.depCount]=_,i[o.depCount]=_.version):(n.push(_),i.push(_.version)),o.depCount++)},d=this._trackable.addDependency;return this._trackable.addDependency=c,{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=et(s,r,this._unsubscribes,this),this._dependencies=s,this._dependencyVersions=n}_cleanupContext(e,s){this._trackable.addDependency=e.originalAdd,s?(e.prevDeps!==I&&L.release(e.prevDeps),e.prevVersions!==C&&x.release(e.prevVersions)):(L.release(e.nextDeps),x.release(e.nextVersions))}_handleSyncResult(e){const s=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(s)&B,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifyJob(),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){const s=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(s)&B,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1,this._notifyJob()}_handleAsyncRejection(e){const s=H(e,G,m.COMPUTED_ASYNC_COMPUTATION_FAILED),n=!this._isRejected();if(this.version=this.version+Number(n)&B,this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(i){console.error(m.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}this._notifyJob()}_handleComputationError(e){const s=H(e,G,m.COMPUTED_COMPUTATION_FAILED);if(this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(n){console.error(m.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}throw s}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new G(m.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){Re(this,q.getCurrent(),this._functionSubscribersStore,this._objectSubscribersStore)}}Object.freeze(Ae.prototype);function xe(t,e={}){return new Ae(t,e)}class st extends ye{constructor(e,s={}){super(),this.run=()=>{if(this.isDisposed)throw new M(m.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==C&&(x.release(this._dependencyVersions),this._dependencyVersions=C),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==A){for(let n=0;n<this._unsubscribes.length;n++){const i=this._unsubscribes[n];i&&i()}z.release(this._unsubscribes),this._unsubscribes=A}this._dependencies!==I&&(L.release(this._dependencies),this._dependencies=I),this._dependencyVersions!==C&&(x.release(this._dependencyVersions),this._dependencyVersions=C)}},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=q.run(this,this._fn);this._commitEffect(n),i=!0,this._checkLoopWarnings(),Ne(r)?r.then(o=>{!this.isDisposed&&typeof o=="function"&&(this._cleanup=o)}).catch(o=>{console.error(H(o,M,m.EFFECT_EXECUTION_FAILED))}):this._cleanup=typeof r=="function"?r:null}catch(r){i=!0,console.error(H(r,M,m.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??V.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=s.maxExecutionsPerFlush??V.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=s.trackModifications??!1,this._cleanup=null,this._dependencies=I,this._dependencyVersions=C,this._unsubscribes=A,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._history=R?[]:null,this._executionCount=0,O.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,s=this._dependencyVersions,n=this._unsubscribes,i=L.acquire(),r=x.acquire(),o=z.acquire(),c=Ie();if(e!==I&&n!==A)for(let d=0;d<e.length;d++){const _=e[d];_&&(_._tempUnsub=n[d])}return this._nextDeps=i,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=c,{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){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,s){if(e.prevDeps!==I){for(let n=0;n<e.prevDeps.length;n++){const i=e.prevDeps[n];i?._tempUnsub&&(i._tempUnsub(),i._tempUnsub=void 0)}L.release(e.prevDeps)}e.prevUnsubs!==A&&z.release(e.prevUnsubs),e.prevVersions!==C&&x.release(e.prevVersions)}else{L.release(e.nextDeps),x.release(e.nextVersions);for(let n=0;n<e.nextUnsubs.length;n++)e.nextUnsubs[n]?.();if(z.release(e.nextUnsubs),e.prevDeps!==I)for(let n=0;n<e.prevDeps.length;n++){const i=e.prevDeps[n];i&&(i._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(H(s,M,m.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&$.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&$.EXECUTING)!==0}_setDisposed(){this.flags|=$.DISPOSED}_setExecuting(e){const s=$.EXECUTING;this.flags=this.flags&~s|-Number(e)&s}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(H(e,M,m.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==se&&(this._lastFlushEpoch=se,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),Je()>V.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history){const e=Date.now();this._history.push(e),this._history.length>V.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-Be.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 M(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(r),R)throw r}}_throwInfiniteLoopError(e){const s=new M(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${fe}`);throw this.dispose(),console.error(s),s}_shouldExecute(){if(this._dependencies===I||this._dependencyVersions===C)return!0;for(let e=0;e<this._dependencies.length;e++){const s=this._dependencies[e];if(s){if("value"in s)try{de(()=>s.value)}catch{return!0}if(s.version!==this._dependencyVersions[e])return!0}}return!1}_checkLoopWarnings(){if(this._trackModifications&&O.enabled){const e=this._dependencies;for(let s=0;s<e.length;s++){const n=e[s];n&&n._modifiedAtEpoch===this._currentEpoch&&O.warn(!0,`Effect is reading a dependency (${O.getDebugName(n)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function y(t,e={}){if(typeof t!="function")throw new M(m.EFFECT_MUST_BE_FUNCTION);const s=new st(t,e);return s.execute(),s}function b(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t}function g(t){return b(t)?t.value:t}function oe(t){const e=t.jquery?t[0]:t;if(!e)return"unknown";if(e.id)return`#${e.id}`;if(e.className){const s=String(e.className).split(/\s+/).filter(Boolean).join(".");return s?`${e.tagName.toLowerCase()}.${s}`:e.tagName.toLowerCase()}return e.tagName.toLowerCase()}function nt(){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 X=nt();const h={get enabled(){return X},set enabled(t){X=t},log(t,...e){X&&console.log(`[atom-effect-jquery] ${t}:`,...e)},atomChanged(t,e,s){X&&console.log(`[atom-effect-jquery] Atom "${t||"anonymous"}" changed:`,e,"→",s)},domUpdated(t,e,s){if(!X)return;const n=oe(t);console.log(`[atom-effect-jquery] DOM updated: ${n}.${e} =`,s),it(t)},cleanup(t){X&&console.log(`[atom-effect-jquery] Cleanup: ${t}`)},warn(...t){X&&console.warn("[atom-effect-jquery]",...t)}};function it(t){const e=t[0];if(!e||!document.contains(e))return;const s="atom_debug_timer",n="atom_debug_cleanup_timer",i="atom_debug_org_style";clearTimeout(t.data(s)),clearTimeout(t.data(n)),t.data(i)||t.data(i,{outline:t.css("outline"),outlineOffset:t.css("outline-offset"),transition:t.css("transition")}),t.css({outline:"2px solid rgba(255, 68, 68, 0.8)","outline-offset":"1px",transition:"none"});const r=setTimeout(()=>{const o=t.data(i);t.css("transition","outline 0.5s ease-out"),requestAnimationFrame(()=>{t.css({outline:o?.outline||"","outline-offset":o?.outlineOffset||""});const c=setTimeout(()=>{t.css("transition",o?.transition||""),t.removeData(s),t.removeData(n),t.removeData(i)},500);t.data(n,c)})},100);t.data(s,r)}const rt=new WeakMap;function we(t,e={}){const s=Ue(t,e);return e.name&&rt.set(s,{name:e.name}),s}Object.defineProperty(we,"debug",{get(){return h.enabled},set(t){h.enabled=t}});function ot(){return new Promise(t=>setTimeout(t,0))}u.extend({atom:we,computed:xe,effect:y,batch:j,untracked:de,isAtom:pe,isComputed:Te,isReactive:t=>pe(t)||Te(t),nextTick:ot});function ke(){return{timeoutId:null,phase:"idle",hasFocus:!1}}function Fe(t,e,s={}){const{debounce:n,event:i="input",parse:r=p=>p,format:o=p=>String(p??"")}=s,c=ke(),d=()=>{c.phase="composing"},_=()=>{c.phase="idle",P()};t.on("compositionstart",d),t.on("compositionend",_);const v=()=>{c.hasFocus=!0},D=()=>{c.hasFocus=!1;const p=o(e.value);t.val()!==p&&t.val(p)};t.on("focus",v),t.on("blur",D);const P=()=>{c.phase==="idle"&&(c.phase="syncing-to-atom",j(()=>{e.value=r(t.val())}),c.phase="idle")},T=()=>{c.phase==="idle"&&(n?(c.timeoutId&&clearTimeout(c.timeoutId),c.timeoutId=window.setTimeout(P,n)):P())};return t.on(i,T),t.on("change",T),{effect:()=>{const p=o(e.value),Q=t.val();if(Q!==p){if(c.hasFocus&&r(Q)===e.value)return;c.phase="syncing-to-dom",t.val(p),h.domUpdated(t,"val",p),c.phase="idle"}},cleanup:()=>{t.off(i,T),t.off("change",T),t.off("compositionstart",d),t.off("compositionend",_),t.off("focus",v),t.off("blur",D),c.timeoutId&&clearTimeout(c.timeoutId)}}}class ct{effects=new WeakMap;cleanups=new WeakMap;boundElements=new WeakSet;preservedNodes=new WeakSet;keep(e){this.preservedNodes.add(e)}isKept(e){return this.preservedNodes.has(e)}trackEffect(e,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;h.cleanup(oe(e));const s=this.effects.get(e);s&&(this.effects.delete(e),s.forEach(i=>{try{i.dispose()}catch(r){h.warn("Effect dispose error:",r)}}));const n=this.cleanups.get(e);n&&(this.cleanups.delete(e),n.forEach(i=>{try{i()}catch(r){h.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 a=new ct;let Y=null;function Me(t=document.body){Y||(Y=new MutationObserver(e=>{for(const s of e)s.removedNodes.forEach(n=>{a.isKept(n)||n.isConnected||n.nodeType===1&&a.cleanupTree(n)})}),Y.observe(t,{childList:!0,subtree:!0}))}function ut(){Y?.disconnect(),Y=null}u.fn.atomText=function(t,e){return this.each(function(){const s=u(this);if(b(t)){const n=y(()=>{const i=g(t),r=e?e(i):String(i??"");s.text(r),h.domUpdated(s,"text",r)});a.trackEffect(this,n)}else{const n=e?e(t):String(t??"");s.text(n)}})},u.fn.atomHtml=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=y(()=>{const n=String(g(t)??"");e.html(n),h.domUpdated(e,"html",n)});a.trackEffect(this,s)}else e.html(String(t??""))})},u.fn.atomClass=function(t,e){return this.each(function(){const s=u(this);if(b(e)){const n=y(()=>{const i=!!g(e);s.toggleClass(t,i),h.domUpdated(s,`class.${t}`,i)});a.trackEffect(this,n)}else s.toggleClass(t,!!e)})},u.fn.atomCss=function(t,e,s){return this.each(function(){const n=u(this);if(b(e)){const i=y(()=>{const r=g(e),o=s?`${r}${s}`:r;n.css(t,o),h.domUpdated(n,`css.${t}`,o)});a.trackEffect(this,i)}else n.css(t,s?`${e}${s}`:e)})},u.fn.atomAttr=function(t,e){return this.each(function(){const s=u(this),n=i=>{i==null||i===!1?s.removeAttr(t):i===!0?s.attr(t,t):s.attr(t,String(i)),h.domUpdated(s,`attr.${t}`,i)};if(b(e)){const i=y(()=>n(g(e)));a.trackEffect(this,i)}else n(e)})},u.fn.atomProp=function(t,e){return this.each(function(){const s=u(this);if(b(e)){const n=y(()=>{const i=g(e);s.prop(t,i),h.domUpdated(s,`prop.${t}`,i)});a.trackEffect(this,n)}else s.prop(t,e)})},u.fn.atomShow=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=y(()=>{const n=!!g(t);e.toggle(n),h.domUpdated(e,"show",n)});a.trackEffect(this,s)}else e.toggle(!!t)})},u.fn.atomHide=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=y(()=>{const n=!g(t);e.toggle(n),h.domUpdated(e,"hide",!n)});a.trackEffect(this,s)}else e.toggle(!t)})},u.fn.atomVal=function(t,e={}){return this.each(function(){const{effect:s,cleanup:n}=Fe(u(this),t,e),i=y(s);a.trackEffect(this,i),a.trackCleanup(this,n)})},u.fn.atomChecked=function(t){return this.each(function(){const e=u(this);let s=!1;const n=()=>{s||j(()=>{t.value=e.prop("checked")})};e.on("change",n),a.trackCleanup(this,()=>e.off("change",n));const i=y(()=>{s=!0,e.prop("checked",t.value),h.domUpdated(e,"checked",t.value),s=!1});a.trackEffect(this,i)})},u.fn.atomOn=function(t,e){return this.each(function(){const s=u(this),n=function(i){j(()=>e.call(this,i))};s.on(t,n),a.trackCleanup(this,()=>s.off(t,n))})},u.fn.atomUnbind=function(){return this.each(function(){a.cleanupTree(this)})};function ht(t,e){b(e)?t.effects.push(()=>{const s=String(g(e)??"");t.$el.text(s),h.domUpdated(t.$el,"text",s)}):t.$el.text(String(e??""))}function at(t,e){b(e)?t.effects.push(()=>{const s=String(g(e)??"");t.$el.html(s),h.domUpdated(t.$el,"html",s)}):t.$el.html(String(e??""))}function lt(t,e){for(const[s,n]of Object.entries(e))b(n)?t.effects.push(()=>{const i=!!g(n);t.$el.toggleClass(s,i),h.domUpdated(t.$el,`class.${s}`,i)}):t.$el.toggleClass(s,!!n)}function ft(t,e){for(const[s,n]of Object.entries(e))if(Array.isArray(n)){const[i,r]=n;b(i)?t.effects.push(()=>{const o=`${g(i)}${r}`;t.$el.css(s,o),h.domUpdated(t.$el,`css.${s}`,o)}):t.$el.css(s,`${i}${r}`)}else b(n)?t.effects.push(()=>{const i=g(n);t.$el.css(s,i),h.domUpdated(t.$el,`css.${s}`,i)}):t.$el.css(s,n)}function dt(t,e){for(const[s,n]of Object.entries(e)){const i=r=>{r==null||r===!1?t.$el.removeAttr(s):r===!0?t.$el.attr(s,s):t.$el.attr(s,String(r)),h.domUpdated(t.$el,`attr.${s}`,r)};b(n)?t.effects.push(()=>i(g(n))):i(n)}}function _t(t,e){for(const[s,n]of Object.entries(e))b(n)?t.effects.push(()=>{const i=g(n);t.$el.prop(s,i),h.domUpdated(t.$el,`prop.${s}`,i)}):t.$el.prop(s,n)}function pt(t,e){b(e)?t.effects.push(()=>{const s=!!g(e);t.$el.toggle(s),h.domUpdated(t.$el,"show",s)}):t.$el.toggle(!!e)}function bt(t,e){b(e)?t.effects.push(()=>{const s=!g(e);t.$el.toggle(s),h.domUpdated(t.$el,"hide",!s)}):t.$el.toggle(!e)}function Et(t,e){const s=Array.isArray(e)?e[0]:e,n=Array.isArray(e)?e[1]:{},{effect:i,cleanup:r}=Fe(t.$el,s,n);t.effects.push(i),t.trackCleanup(r)}function gt(t,e){const s=ke(),n=()=>{s.phase==="idle"&&j(()=>{e.value=t.$el.prop("checked")})};t.$el.on("change",n),t.trackCleanup(()=>t.$el.off("change",n)),t.effects.push(()=>{s.phase="syncing-to-dom",t.$el.prop("checked",e.value),h.domUpdated(t.$el,"checked",e.value),s.phase="idle"})}function mt(t,e){for(const[s,n]of Object.entries(e)){const i=function(r){j(()=>n.call(this,r))};t.$el.on(s,i),t.trackCleanup(()=>t.$el.off(s,i))}}u.fn.atomBind=function(t){return this.each(function(){const e=u(this),s=[],n={$el:e,el:this,effects:s,trackCleanup:i=>a.trackCleanup(this,i)};t.text!==void 0&&ht(n,t.text),t.html!==void 0&&at(n,t.html),t.class&<(n,t.class),t.css&&ft(n,t.css),t.attr&&dt(n,t.attr),t.prop&&_t(n,t.prop),t.show!==void 0&&pt(n,t.show),t.hide!==void 0&&bt(n,t.hide),t.val!==void 0&&Et(n,t.val),t.checked!==void 0&>(n,t.checked),t.on&&mt(n,t.on),s.forEach(i=>{const r=y(i);a.trackEffect(this,r)})})};function St(t){if(t.length===0)return[];const e=t.slice(),s=[0];let n,i,r,o;const c=t.length;for(n=0;n<c;n++){const v=t[n];if(v!==-1){const D=s[s.length-1];if(t[D]<v){e[n]=D,s.push(n);continue}for(i=0,r=s.length-1;i<r;)o=(i+r)/2|0,t[s[o]]<v?i=o+1:r=o;v<t[s[i]]&&(i>0&&(e[n]=s[i-1]),s[i]=n)}}let d=s.length,_=s[d-1];for(;d-- >0;)s[d]=_,_=e[_];return s}u.fn.atomList=function(t,e){return this.each(function(){const s=u(this),n=oe(this),{key:i,render:r,bind:o,onAdd:c,onRemove:d,empty:_}=e,v=typeof i=="function"?i:p=>p[i],D=new Map;let P=[],T=null;const ue=new Set,Le=y(()=>{const p=t.value,Q=[],Pe=new Set;for(let l=0;l<p.length;l++){const S=p[l],U=v(S,l);Q.push(U),Pe.add(U)}if(h.log("list",`${n} updating with ${p.length} items`),p.length===0&&_){T||(T=u(_),s.append(T));for(const[,l]of D){l.$el.remove();const S=l.$el[0];S&&a.cleanup(S)}D.clear(),P=[];return}else T&&(T.remove(),T=null);for(const[l,S]of D)if(!Pe.has(l)){if(ue.has(l))continue;const U=()=>{S.$el.remove();const he=S.$el[0];he&&a.cleanup(he),ue.delete(l),h.log("list",`${n} removed item:`,l)};D.delete(l),ue.add(l),d?Promise.resolve(d(S.$el)).then(U):U()}const Ve=new Map;P.forEach((l,S)=>Ve.set(l,S));const Dt=Q.map(l=>Ve.get(l)??-1),It=St(Dt),Ct=new Set(It);let w=null;for(let l=p.length-1;l>=0;l--){const S=Q[l],U=p[l],he=Ct.has(l);if(D.has(S)){const N=D.get(S);if(!N)continue;N.item=U;const k=N.$el[0];if(!k)continue;if(e.update&&e.update(N.$el,U,l),!he)w?N.$el.insertBefore(w):N.$el.appendTo(s);else{const W=k.nextSibling;w&&W!==w?N.$el.insertBefore(w):!w&&W&&N.$el.appendTo(s)}w=k}else{const N=r(U,l),k=(N instanceof Element,u(N));D.set(S,{$el:k,item:U}),w?k.insertBefore(w):k.appendTo(s),o&&o(k,U,l),c&&c(k),h.log("list",`${n} added item:`,S);const W=k[0];W&&(w=W)}}P=Q});a.trackEffect(this,Le),a.trackCleanup(this,()=>{D.clear(),P=[],T?.remove()})})};const ce=new WeakMap;u.fn.atomMount=function(t,e={}){return this.each(function(){const s=u(this),n=oe(this),i=ce.get(this);i&&(h.log("mount",`${n} unmounting existing component`),i()),h.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 c=()=>{if(!o){if(o=!0,h.log("mount",`${n} full cleanup`),typeof r=="function")try{r()}catch{}a.cleanupTree(this),ce.delete(this)}};ce.set(this,c),a.trackCleanup(this,c)})},u.fn.atomUnmount=function(){return this.each(function(){ce.get(this)?.()})};const K=new WeakMap;let je=!1;function be(){if(je)return;je=!0;const t=u.fn.on,e=u.fn.off,s=u.fn.remove,n=u.fn.empty,i=u.fn.detach;u.fn.remove=function(r){return(r?this.filter(r):this).each(function(){a.cleanupTree(this)}),s.call(this,r)},u.fn.empty=function(){return this.each(function(){this.querySelectorAll("*").forEach(o=>a.cleanup(o))}),n.call(this)},u.fn.detach=function(r){return(r?this.filter(r):this).each(function(){a.keep(this)}),i.call(this,r)},u.fn.on=function(...r){let o=-1;for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){o=c;break}if(o!==-1){const c=r[o];let d;K.has(c)?d=K.get(c):(d=function(..._){let v;return j(()=>{v=c.apply(this,_)}),v},K.set(c,d)),r[o]=d}return t.apply(this,r)},u.fn.off=function(...r){let o=-1;for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){o=c;break}if(o!==-1){const c=r[o];K.has(c)&&(r[o]=K.get(c))}return e.apply(this,r)}}const yt=be;be(),u(()=>{Me(document.body)}),E.default=u,E.atom=Ue,E.batch=j,E.computed=xe,E.disableAutoCleanup=ut,E.effect=y,E.enableAutoCleanup=Me,E.enablejQueryBatching=yt,E.enablejQueryOverrides=be,E.registry=a,E.untracked=de,Object.defineProperties(E,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
1
|
+
(function(E,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("jquery")):typeof define=="function"&&define.amd?define(["exports","jquery"],u):(E=typeof globalThis<"u"?globalThis:E||self,u(E.AtomEffectJQuery={},E.jQuery))})(this,(function(E,u){"use strict";const qe={ONE_SECOND_MS:1e3},Z={IDLE:"idle",PENDING:"pending",RESOLVED:"resolved",REJECTED:"rejected"},$={DISPOSED:1,EXECUTING:2},f={DIRTY:1,IDLE:2,PENDING:4,RESOLVED:8,REJECTED:16,RECOMPUTING:32,HAS_ERROR:64},V={MAX_EXECUTIONS_PER_SECOND:1e3,MAX_EXECUTIONS_PER_EFFECT:100,MAX_EXECUTIONS_PER_FLUSH:1e4,MAX_FLUSH_ITERATIONS:1e3,MIN_FLUSH_ITERATIONS:10},Ee={MAX_DEPENDENCIES:1e3,WARN_INFINITE_LOOP:!0},L=1073741823,R=typeof process<"u"&&process.env&&process.env.NODE_ENV!=="production",Be=Object.freeze([]);class F extends Error{constructor(e,s=null,i=!0){super(e),this.name="AtomError",this.cause=s,this.recoverable=i,this.timestamp=new Date}}class G extends F{constructor(e,s=null){super(e,s,!0),this.name="ComputedError"}}class q extends F{constructor(e,s=null){super(e,s,!1),this.name="EffectError"}}class ee extends F{constructor(e,s=null){super(e,s,!1),this.name="SchedulerError"}}const y={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",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",CALLBACK_ERROR_IN_ERROR_HANDLER:"Error occurred during onError callback execution"},ae=Symbol("debugName"),ze=Symbol("id"),le=Symbol("type"),ge=Symbol("noDefaultValue");function Xe(t){return"dependencies"in t&&Array.isArray(t.dependencies)}let me=0;function ye(t,e,s){if(t._visitedEpoch!==s){if(t._visitedEpoch=s,t===e)throw new G("Indirect circular dependency detected");if(Xe(t)){const i=t.dependencies;for(let n=0;n<i.length;n++){const r=i[n];r&&ye(r,e,s)}}}}const U={enabled:typeof process<"u"&&process.env?.NODE_ENV==="development",maxDependencies:Ee.MAX_DEPENDENCIES,warnInfiniteLoop:Ee.WARN_INFINITE_LOOP,warn(t,e){this.enabled&&t&&console.warn(`[Atom Effect] ${e}`)},checkCircular(t,e){if(t===e)throw new G("Direct circular dependency detected");this.enabled&&(me++,ye(t,e,me))},attachDebugInfo(t,e,s){if(!this.enabled)return;const i=t;i[ae]=`${e}_${s}`,i[ze]=s,i[le]=e},getDebugName(t){if(t!=null&&ae in t)return t[ae]},getDebugType(t){if(t!=null&&le in t)return t[le]}};let Qe=1;const Ge=()=>Qe++;class Se{constructor(){this.id=Ge()&L,this.flags=0}}class De extends Se{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 F(y.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);return this._functionSubscribers.add(e)}subscriberCount(){return this._functionSubscribers.size+this._objectSubscribers.size}_notifySubscribers(e,s){this._functionSubscribers.forEachSafe(i=>i(e,s),i=>console.error(new F(y.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i))),this._objectSubscribers.forEachSafe(i=>i.execute(),i=>console.error(new F(y.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED,i)))}}let te=0;function Ie(){return te=te+1&L||1,te}function He(){return te}let se=0,fe=0,ie=!1;function Ce(){return ie?(R&&console.warn("Warning: startFlush() called during flush - ignored to prevent infinite loop detection bypass"),!1):(ie=!0,se=se+1&L,fe=0,!0)}function ve(){ie=!1}function Je(){return ie?++fe:0}class Ye{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=V.MAX_FLUSH_ITERATIONS}get phase(){return this.isProcessing||this.isFlushingSync?2:this.isBatching?1:0}schedule(e){if(typeof e!="function")throw new ee("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 i=Ce();this._processJobs(e,s),this.isProcessing=!1,i&&ve(),this.queueSize>0&&!this.isBatching&&this.flush()})}flushSync(){this.isFlushingSync=!0;const e=Ce();try{this._mergeBatchQueue(),this._drainQueue()}finally{this.isFlushingSync=!1,e&&ve()}}_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 ee(`Maximum flush iterations (${this.maxFlushIterations}) exceeded. Possible infinite loop.`)),this.queueSize=0,this.queue.length=0,this.batchQueueSize=0}_processJobs(e,s){for(let i=0;i<s;i++)try{e[i]?.()}catch(n){console.error(new ee("Error occurred during scheduler execution",n))}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<V.MIN_FLUSH_ITERATIONS)throw new ee(`Max flush iterations must be at least ${V.MIN_FLUSH_ITERATIONS}`);this.maxFlushIterations=e}}const H=new Ye;function M(t){if(typeof t!="function")throw new F("Batch callback must be a function");H.startBatch();try{return t()}finally{H.endBatch()}}const B={current:null,run(t,e){const s=this.current;this.current=t;try{return e()}finally{this.current=s}},getCurrent(){return this.current}};function de(t){if(typeof t!="function")throw new F("Untracked callback must be a function");const e=B.current;B.current=null;try{return t()}finally{B.current=e}}class ne{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 i=this.subscribers.length-1;return s!==i&&(this.subscribers[s]=this.subscribers[i]),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 i=0;i<this.subscribers.length;i++)try{e(this.subscribers[i],i)}catch(n){s?s(n):console.error("[SubscriberManager] Error in subscriber callback:",n)}}get size(){return this.subscribers?.length??0}get hasSubscribers(){return this.subscribers!==null&&this.subscribers.length>0}clear(){this.subscribers=null}toArray(){return this.subscribers?[...this.subscribers]:[]}}class _e{constructor(){this.pool=[],this.maxPoolSize=50,this.maxReusableCapacity=256,this.stats=R?{acquired:0,released:0,rejected:{frozen:0,tooLarge:0,poolFull:0}}:null}acquire(){return R&&this.stats&&this.stats.acquired++,this.pool.pop()??[]}release(e,s){if(!(s&&e===s)){if(Object.isFrozen(e)){R&&this.stats&&this.stats.rejected.frozen++;return}if(e.length>this.maxReusableCapacity){R&&this.stats&&this.stats.rejected.tooLarge++;return}if(this.pool.length>=this.maxPoolSize){R&&this.stats&&this.stats.rejected.poolFull++;return}e.length=0,this.pool.push(e),R&&this.stats&&this.stats.released++}}getStats(){if(!R||!this.stats)return null;const{acquired:e,released:s,rejected:i}=this.stats,n=i.frozen+i.tooLarge+i.poolFull;return{acquired:e,released:s,rejected:i,leaked:e-s-n,poolSize:this.pool.length}}reset(){this.pool.length=0,R&&this.stats&&(this.stats.acquired=0,this.stats.released=0,this.stats.rejected={frozen:0,tooLarge:0,poolFull:0})}}const I=Object.freeze([]),A=Object.freeze([]),C=Object.freeze([]),j=new _e,z=new _e,O=new _e;function pe(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t&&typeof t.subscribe=="function"}function Ne(t){if(U.enabled&&(t==null||typeof t=="object")){const e=U.getDebugType(t);if(e)return e==="computed"}return pe(t)&&"invalidate"in t&&typeof t.invalidate=="function"}function Te(t){return t!=null&&typeof t.then=="function"}function Ke(t){return typeof t=="object"&&t!==null}function We(t){return(typeof t=="object"||typeof t=="function")&&t!==null&&typeof t.addDependency=="function"}function Ze(t){return typeof t=="function"&&typeof t.addDependency!="function"}function $e(t){return Ke(t)&&typeof t.execute=="function"}function Re(t,e,s,i){if(e){if(We(e)){e.addDependency(t);return}if(Ze(e)){s.add(e);return}$e(e)&&i.add(e)}}function et(t,e,s,i){if(e!==I&&s!==A)for(let r=0;r<e.length;r++){const o=e[r];o&&(o._tempUnsub=s[r])}const n=z.acquire();n.length=t.length;for(let r=0;r<t.length;r++){const o=t[r];o&&(o._tempUnsub?(n[r]=o._tempUnsub,o._tempUnsub=void 0):(U.checkCircular(o,i),n[r]=o.subscribe(i)))}if(e!==I)for(let r=0;r<e.length;r++){const o=e[r];o?._tempUnsub&&(o._tempUnsub(),o._tempUnsub=void 0)}return s!==A&&z.release(s),n}class tt extends De{constructor(e,s){super(),this._isNotificationScheduled=!1,this._value=e,this._functionSubscribersStore=new ne,this._objectSubscribersStore=new ne,this._sync=s,this._notifyTask=this._flushNotifications.bind(this),U.attachDebugInfo(this,"atom",this.id)}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){const e=B.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&L,this._value=e,!(!this._functionSubscribersStore.hasSubscribers&&!this._objectSubscribersStore.hasSubscribers)&&this._scheduleNotification(s)}_track(e){Re(this,e,this._functionSubscribersStore,this._objectSubscribersStore)}_scheduleNotification(e){this._isNotificationScheduled||(this._pendingOldValue=e,this._isNotificationScheduled=!0),this._sync&&!H.isBatching?this._flushNotifications():H.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 xe(t,e={}){return new tt(t,e.sync??!1)}function J(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 F)return t;const i=t instanceof Error?t.message:String(t),n=t instanceof Error?t:null;return new e(`Unexpected error (${s}): ${i}`,n)}const Ue=f.RESOLVED|f.PENDING|f.REJECTED,re=Array(Ue+1).fill(Z.IDLE);re[f.RESOLVED]=Z.RESOLVED,re[f.PENDING]=Z.PENDING,re[f.REJECTED]=Z.REJECTED;class Ae extends De{constructor(e,s={}){if(typeof e!="function")throw new G(y.COMPUTED_MUST_BE_FUNCTION);if(super(),this._cachedErrors=null,this._errorCacheEpoch=-1,this._value=void 0,this.flags=f.DIRTY|f.IDLE,this._error=null,this._promiseId=0,this._equal=s.equal??Object.is,this._fn=e,this._defaultValue="defaultValue"in s?s.defaultValue:ge,this._hasDefaultValue=this._defaultValue!==ge,this._onError=s.onError??null,this.MAX_PROMISE_ID=Number.MAX_SAFE_INTEGER-1,this._functionSubscribersStore=new ne,this._objectSubscribersStore=new ne,this._dependencies=I,this._dependencyVersions=C,this._unsubscribes=A,this._notifyJob=()=>{this._functionSubscribersStore.forEachSafe(i=>i(),i=>console.error(i)),this._objectSubscribersStore.forEachSafe(i=>i.execute(),i=>console.error(i))},this._trackable=Object.assign(()=>this._markDirty(),{addDependency:i=>{}}),U.attachDebugInfo(this,"computed",this.id),U.enabled){const i=this;i.subscriberCount=()=>this._functionSubscribersStore.size+this._objectSubscribersStore.size,i.isDirty=()=>this._isDirty(),i.dependencies=this._dependencies,i.stateFlags=this._getFlagsAsString()}if(s.lazy===!1)try{this._recompute()}catch{}}get _functionSubscribers(){return this._functionSubscribersStore}get _objectSubscribers(){return this._objectSubscribersStore}get value(){return this._registerTracking(),this._computeValue()}peek(){return this._value}get state(){return this._registerTracking(),this._getAsyncState()}get hasError(){if(this._registerTracking(),this._isRejected())return!0;for(let e=0;e<this._dependencies.length;e++){const s=this._dependencies[e];if(s&&"hasError"in s&&s.hasError)return!0}return!1}get isValid(){return!this.hasError}get errors(){if(this._registerTracking(),!this.hasError)return Be;const e=He();if(this._errorCacheEpoch===e&&this._cachedErrors!==null)return this._cachedErrors;const s=new Set;this._error&&s.add(this._error);for(let i=0;i<this._dependencies.length;i++){const n=this._dependencies[i];if(n&&"errors"in n){const r=n.errors;for(let o=0;o<r.length;o++){const c=r[o];c&&s.add(c)}}}return this._cachedErrors=Object.freeze([...s]),this._errorCacheEpoch=e,this._cachedErrors}get lastError(){return this._registerTracking(),this._error}get isPending(){return this._registerTracking(),this._isPending()}get isResolved(){return this._registerTracking(),this._isResolved()}invalidate(){this._markDirty(),this._dependencyVersions!==C&&(O.release(this._dependencyVersions),this._dependencyVersions=C),this._errorCacheEpoch=-1,this._cachedErrors=null}dispose(){if(this._unsubscribes!==A){for(let e=0;e<this._unsubscribes.length;e++){const s=this._unsubscribes[e];s&&s()}z.release(this._unsubscribes),this._unsubscribes=A}this._dependencies!==I&&(j.release(this._dependencies),this._dependencies=I),this._dependencyVersions!==C&&(O.release(this._dependencyVersions),this._dependencyVersions=C),this._functionSubscribersStore.clear(),this._objectSubscribersStore.clear(),this.flags=f.DIRTY|f.IDLE,this._error=null,this._value=void 0,this._promiseId=(this._promiseId+1)%this.MAX_PROMISE_ID,this._cachedErrors=null,this._errorCacheEpoch=-1}_isDirty(){return(this.flags&f.DIRTY)!==0}_setDirty(){this.flags|=f.DIRTY}_clearDirty(){this.flags&=-2}_isIdle(){return(this.flags&f.IDLE)!==0}_setIdle(){this.flags|=f.IDLE,this.flags&=-29}_isPending(){return(this.flags&f.PENDING)!==0}_setPending(){this.flags|=f.PENDING,this.flags&=-27}_isResolved(){return(this.flags&f.RESOLVED)!==0}_setResolved(){this.flags|=f.RESOLVED,this.flags&=-87}_isRejected(){return(this.flags&f.REJECTED)!==0}_setRejected(){this.flags|=f.REJECTED|f.HAS_ERROR,this.flags&=-15}_isRecomputing(){return(this.flags&f.RECOMPUTING)!==0}_setRecomputing(e){const s=f.RECOMPUTING;this.flags=this.flags&~s|-Number(e)&s}_getAsyncState(){return re[this.flags&Ue]}_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 i=B.run(this._trackable,this._fn);this._commitDependencies(e),s=!0,Te(i)?this._handleAsyncComputation(i):this._handleSyncResult(i)}catch(i){if(!s)try{this._commitDependencies(e),s=!0}catch(n){this._handleComputationError(n)}this._handleComputationError(i)}finally{this._cleanupContext(e,s),this._setRecomputing(!1)}}_prepareComputationContext(){const e=this._dependencies,s=this._dependencyVersions,i=j.acquire(),n=O.acquire(),r=Ie(),o={depCount:0},c=_=>{_._lastSeenEpoch!==r&&(_._lastSeenEpoch=r,o.depCount<i.length?(i[o.depCount]=_,n[o.depCount]=_.version):(i.push(_),n.push(_.version)),o.depCount++)},d=this._trackable.addDependency;return this._trackable.addDependency=c,{prevDeps:e,prevVersions:s,nextDeps:i,nextVersions:n,originalAdd:d,state:o}}_commitDependencies(e){const{nextDeps:s,nextVersions:i,state:n,prevDeps:r}=e;s.length=n.depCount,i.length=n.depCount,this._unsubscribes=et(s,r,this._unsubscribes,this),this._dependencies=s,this._dependencyVersions=i}_cleanupContext(e,s){this._trackable.addDependency=e.originalAdd,s?(e.prevDeps!==I&&j.release(e.prevDeps),e.prevVersions!==C&&O.release(e.prevVersions)):(j.release(e.nextDeps),O.release(e.nextVersions))}_handleSyncResult(e){const s=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(s)&L,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1}_handleAsyncComputation(e){this._setPending(),this._clearDirty(),this._notifyJob(),this._promiseId=this._promiseId>=this.MAX_PROMISE_ID?1:this._promiseId+1;const s=this._promiseId;e.then(i=>{s===this._promiseId&&this._handleAsyncResolution(i)}).catch(i=>{s===this._promiseId&&this._handleAsyncRejection(i)})}_handleAsyncResolution(e){const s=!this._isResolved()||!this._equal(this._value,e);this.version=this.version+Number(s)&L,this._value=e,this._clearDirty(),this._setResolved(),this._error=null,this._setRecomputing(!1),this._cachedErrors=null,this._errorCacheEpoch=-1,this._notifyJob()}_handleAsyncRejection(e){const s=J(e,G,y.COMPUTED_ASYNC_COMPUTATION_FAILED),i=!this._isRejected();if(this.version=this.version+Number(i)&L,this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(n){console.error(y.CALLBACK_ERROR_IN_ERROR_HANDLER,n)}this._notifyJob()}_handleComputationError(e){const s=J(e,G,y.COMPUTED_COMPUTATION_FAILED);if(this._error=s,this._setRejected(),this._clearDirty(),this._setRecomputing(!1),this._onError)try{this._onError(s)}catch(i){console.error(y.CALLBACK_ERROR_IN_ERROR_HANDLER,i)}throw s}_handlePending(){if(this._hasDefaultValue)return this._defaultValue;throw new G(y.COMPUTED_ASYNC_PENDING_NO_DEFAULT)}_handleRejected(){if(this._error?.recoverable&&this._hasDefaultValue)return this._defaultValue;throw this._error}execute(){this._markDirty()}_markDirty(){this._isRecomputing()||this._isDirty()||(this._setDirty(),this._notifyJob())}_registerTracking(){Re(this,B.getCurrent(),this._functionSubscribersStore,this._objectSubscribersStore)}}Object.freeze(Ae.prototype);function Oe(t,e={}){return new Ae(t,e)}class st extends Se{constructor(e,s={}){super(),this.run=()=>{if(this.isDisposed)throw new q(y.EFFECT_MUST_BE_FUNCTION);this._dependencyVersions!==C&&(O.release(this._dependencyVersions),this._dependencyVersions=C),this.execute()},this.dispose=()=>{if(!this.isDisposed){if(this._setDisposed(),this._safeCleanup(),this._unsubscribes!==A){for(let n=0;n<this._unsubscribes.length;n++){const r=this._unsubscribes[n];r&&r()}z.release(this._unsubscribes),this._unsubscribes=A}this._dependencies!==I&&(j.release(this._dependencies),this._dependencies=I),this._dependencyVersions!==C&&(O.release(this._dependencyVersions),this._dependencyVersions=C)}},this.addDependency=n=>{if(this.isExecuting&&this._nextDeps&&this._nextUnsubs&&this._nextVersions){const r=this._currentEpoch;if(n._lastSeenEpoch===r)return;n._lastSeenEpoch=r,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 r=!1;try{const o=B.run(this,this._fn);this._commitEffect(n),r=!0,this._checkLoopWarnings(),Te(o)?o.then(c=>{!this.isDisposed&&typeof c=="function"&&(this._cleanup=c)}).catch(c=>{this._handleExecutionError(c)}):this._cleanup=typeof o=="function"?o:null}catch(o){r=!0,this._handleExecutionError(o),this._cleanup=null}finally{this._cleanupEffect(n,r),this._setExecuting(!1)}},this._currentEpoch=-1,this._lastFlushEpoch=-1,this._executionsInEpoch=0,this._fn=e,this._sync=s.sync??!1,this._maxExecutions=s.maxExecutionsPerSecond??V.MAX_EXECUTIONS_PER_SECOND,this._maxExecutionsPerFlush=s.maxExecutionsPerFlush??V.MAX_EXECUTIONS_PER_EFFECT,this._trackModifications=s.trackModifications??!1,this._cleanup=null,this._dependencies=I,this._dependencyVersions=C,this._unsubscribes=A,this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,this._onError=s.onError??null,this._historyPtr=0;const i=Number.isFinite(this._maxExecutions);this._historyCapacity=i?Math.min(this._maxExecutions+1,V.MAX_EXECUTIONS_PER_SECOND+1):0,this._history=R&&i&&this._historyCapacity>0?new Array(this._historyCapacity).fill(0):null,this._executionCount=0,U.attachDebugInfo(this,"effect",this.id)}_prepareEffectContext(){const e=this._dependencies,s=this._dependencyVersions,i=this._unsubscribes,n=j.acquire(),r=O.acquire(),o=z.acquire(),c=Ie();if(e!==I&&i!==A)for(let d=0;d<e.length;d++){const _=e[d];_&&(_._tempUnsub=i[d])}return this._nextDeps=n,this._nextVersions=r,this._nextUnsubs=o,this._currentEpoch=c,{prevDeps:e,prevVersions:s,prevUnsubs:i,nextDeps:n,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){if(this._nextDeps=null,this._nextVersions=null,this._nextUnsubs=null,s){if(e.prevDeps!==I){for(let i=0;i<e.prevDeps.length;i++){const n=e.prevDeps[i];n?._tempUnsub&&(n._tempUnsub(),n._tempUnsub=void 0)}j.release(e.prevDeps)}e.prevUnsubs!==A&&z.release(e.prevUnsubs),e.prevVersions!==C&&O.release(e.prevVersions)}else{j.release(e.nextDeps),O.release(e.nextVersions);for(let i=0;i<e.nextUnsubs.length;i++)e.nextUnsubs[i]?.();if(z.release(e.nextUnsubs),e.prevDeps!==I)for(let i=0;i<e.prevDeps.length;i++){const n=e.prevDeps[i];n&&(n._tempUnsub=void 0)}}}_subscribeTo(e){try{const s=e.subscribe(()=>{this._trackModifications&&this.isExecuting&&(e._modifiedAtEpoch=this._currentEpoch),this._sync?this.execute():H.schedule(this.execute)});this._nextUnsubs&&this._nextUnsubs.push(s)}catch(s){console.error(J(s,q,y.EFFECT_EXECUTION_FAILED)),this._nextUnsubs&&this._nextUnsubs.push(()=>{})}}get isDisposed(){return(this.flags&$.DISPOSED)!==0}get executionCount(){return this._executionCount}get isExecuting(){return(this.flags&$.EXECUTING)!==0}_setDisposed(){this.flags|=$.DISPOSED}_setExecuting(e){const s=$.EXECUTING;this.flags=this.flags&~s|-Number(e)&s}_safeCleanup(){if(this._cleanup){try{this._cleanup()}catch(e){console.error(J(e,q,y.EFFECT_CLEANUP_FAILED))}this._cleanup=null}}_checkInfiniteLoop(){if(this._lastFlushEpoch!==se&&(this._lastFlushEpoch=se,this._executionsInEpoch=0),this._executionsInEpoch++,this._executionsInEpoch>this._maxExecutionsPerFlush&&this._throwInfiniteLoopError("per-effect"),Je()>V.MAX_EXECUTIONS_PER_FLUSH&&this._throwInfiniteLoopError("global"),this._executionCount++,this._history&&this._maxExecutions>0){const e=Date.now(),s=this._historyPtr,i=this._historyCapacity;this._history[s]=e;const n=(s+1)%i,r=this._history[n]??0;if(this._historyPtr=n,r>0&&e-r<qe.ONE_SECOND_MS){const o=new q(`Effect executed ${i} times within 1 second. Infinite loop suspected`);if(this.dispose(),console.error(o),this._onError&&this._onError(o),R)throw o}}}_throwInfiniteLoopError(e){const s=new q(`Infinite loop detected (${e}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${fe}`);throw this.dispose(),console.error(s),s}_shouldExecute(){if(this._dependencies===I||this._dependencyVersions===C)return!0;for(let e=0;e<this._dependencies.length;e++){const s=this._dependencies[e];if(s){if("value"in s)try{de(()=>s.value)}catch{return!0}if(s.version!==this._dependencyVersions[e])return!0}}return!1}_handleExecutionError(e){const s=J(e,q,y.EFFECT_EXECUTION_FAILED);console.error(s),this._onError&&this._onError(s)}_checkLoopWarnings(){if(this._trackModifications&&U.enabled){const e=this._dependencies;for(let s=0;s<e.length;s++){const i=e[s];i&&i._modifiedAtEpoch===this._currentEpoch&&U.warn(!0,`Effect is reading a dependency (${U.getDebugName(i)||"unknown"}) that it just modified. Infinite loop may occur`)}}}}function S(t,e={}){if(typeof t!="function")throw new q(y.EFFECT_MUST_BE_FUNCTION);const s=new st(t,e);return s.execute(),s}function b(t){return t!==null&&typeof t=="object"&&"value"in t&&"subscribe"in t}function g(t){return b(t)?t.value:t}function oe(t){const e=t.jquery?t[0]:t;if(!e)return"unknown";if(e.id)return`#${e.id}`;if(e.className){const s=String(e.className).split(/\s+/).filter(Boolean).join(".");return s?`${e.tagName.toLowerCase()}.${s}`:e.tagName.toLowerCase()}return e.tagName.toLowerCase()}function it(){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 X=it();const h={get enabled(){return X},set enabled(t){X=t},log(t,...e){X&&console.log(`[atom-effect-jquery] ${t}:`,...e)},atomChanged(t,e,s){X&&console.log(`[atom-effect-jquery] Atom "${t||"anonymous"}" changed:`,e,"→",s)},domUpdated(t,e,s){if(!X)return;const i=oe(t);console.log(`[atom-effect-jquery] DOM updated: ${i}.${e} =`,s),nt(t)},cleanup(t){X&&console.log(`[atom-effect-jquery] Cleanup: ${t}`)},warn(...t){X&&console.warn("[atom-effect-jquery]",...t)}};function nt(t){const e=t[0];if(!e||!document.contains(e))return;const s="atom_debug_timer",i="atom_debug_cleanup_timer",n="atom_debug_org_style";clearTimeout(t.data(s)),clearTimeout(t.data(i)),t.data(n)||t.data(n,{outline:t.css("outline"),outlineOffset:t.css("outline-offset"),transition:t.css("transition")}),t.css({outline:"2px solid rgba(255, 68, 68, 0.8)","outline-offset":"1px",transition:"none"});const r=setTimeout(()=>{const o=t.data(n);t.css("transition","outline 0.5s ease-out"),requestAnimationFrame(()=>{t.css({outline:o?.outline||"","outline-offset":o?.outlineOffset||""});const c=setTimeout(()=>{t.css("transition",o?.transition||""),t.removeData(s),t.removeData(i),t.removeData(n)},500);t.data(i,c)})},100);t.data(s,r)}const rt=new WeakMap;function we(t,e={}){const s=xe(t,e);return e.name&&rt.set(s,{name:e.name}),s}Object.defineProperty(we,"debug",{get(){return h.enabled},set(t){h.enabled=t}});function ot(){return new Promise(t=>setTimeout(t,0))}u.extend({atom:we,computed:Oe,effect:S,batch:M,untracked:de,isAtom:pe,isComputed:Ne,isReactive:t=>pe(t)||Ne(t),nextTick:ot});function ke(){return{timeoutId:null,phase:"idle",hasFocus:!1}}function Fe(t,e,s={}){const{debounce:i,event:n="input",parse:r=p=>p,format:o=p=>String(p??"")}=s,c=ke(),d=()=>{c.phase="composing"},_=()=>{c.phase="idle",P()};t.on("compositionstart",d),t.on("compositionend",_);const v=()=>{c.hasFocus=!0},D=()=>{c.hasFocus=!1;const p=o(e.value);t.val()!==p&&t.val(p)};t.on("focus",v),t.on("blur",D);const P=()=>{c.phase==="idle"&&(c.phase="syncing-to-atom",M(()=>{e.value=r(t.val())}),c.phase="idle")},N=()=>{c.phase==="idle"&&(i?(c.timeoutId&&clearTimeout(c.timeoutId),c.timeoutId=window.setTimeout(P,i)):P())};return t.on(n,N),t.on("change",N),{effect:()=>{const p=o(e.value),Q=t.val();if(Q!==p){if(c.hasFocus&&r(Q)===e.value)return;c.phase="syncing-to-dom",t.val(p),h.domUpdated(t,"val",p),c.phase="idle"}},cleanup:()=>{t.off(n,N),t.off("change",N),t.off("compositionstart",d),t.off("compositionend",_),t.off("focus",v),t.off("blur",D),c.timeoutId&&clearTimeout(c.timeoutId)}}}class ct{effects=new WeakMap;cleanups=new WeakMap;boundElements=new WeakSet;preservedNodes=new WeakSet;keep(e){this.preservedNodes.add(e)}isKept(e){return this.preservedNodes.has(e)}trackEffect(e,s){const i=this.effects.get(e)||[];i.push(s),this.effects.set(e,i),this.boundElements.add(e)}trackCleanup(e,s){const i=this.cleanups.get(e)||[];i.push(s),this.cleanups.set(e,i),this.boundElements.add(e)}hasBind(e){return this.boundElements.has(e)}cleanup(e){if(!this.boundElements.has(e))return;h.cleanup(oe(e));const s=this.effects.get(e);s&&(this.effects.delete(e),s.forEach(n=>{try{n.dispose()}catch(r){h.warn("Effect dispose error:",r)}}));const i=this.cleanups.get(e);i&&(this.cleanups.delete(e),i.forEach(n=>{try{n()}catch(r){h.warn("Cleanup error:",r)}})),this.boundElements.delete(e)}cleanupTree(e){e.querySelectorAll("*").forEach(i=>{this.boundElements.has(i)&&this.cleanup(i)}),this.cleanup(e)}}const a=new ct;let Y=null;function Me(t=document.body){Y||(Y=new MutationObserver(e=>{for(const s of e)s.removedNodes.forEach(i=>{a.isKept(i)||i.isConnected||i.nodeType===1&&a.cleanupTree(i)})}),Y.observe(t,{childList:!0,subtree:!0}))}function ut(){Y?.disconnect(),Y=null}u.fn.atomText=function(t,e){return this.each(function(){const s=u(this);if(b(t)){const i=S(()=>{const n=g(t),r=e?e(n):String(n??"");s.text(r),h.domUpdated(s,"text",r)});a.trackEffect(this,i)}else{const i=e?e(t):String(t??"");s.text(i)}})},u.fn.atomHtml=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=S(()=>{const i=String(g(t)??"");e.html(i),h.domUpdated(e,"html",i)});a.trackEffect(this,s)}else e.html(String(t??""))})},u.fn.atomClass=function(t,e){return this.each(function(){const s=u(this);if(b(e)){const i=S(()=>{const n=!!g(e);s.toggleClass(t,n),h.domUpdated(s,`class.${t}`,n)});a.trackEffect(this,i)}else s.toggleClass(t,!!e)})},u.fn.atomCss=function(t,e,s){return this.each(function(){const i=u(this);if(b(e)){const n=S(()=>{const r=g(e),o=s?`${r}${s}`:r;i.css(t,o),h.domUpdated(i,`css.${t}`,o)});a.trackEffect(this,n)}else i.css(t,s?`${e}${s}`:e)})},u.fn.atomAttr=function(t,e){return this.each(function(){const s=u(this),i=n=>{n==null||n===!1?s.removeAttr(t):n===!0?s.attr(t,t):s.attr(t,String(n)),h.domUpdated(s,`attr.${t}`,n)};if(b(e)){const n=S(()=>i(g(e)));a.trackEffect(this,n)}else i(e)})},u.fn.atomProp=function(t,e){return this.each(function(){const s=u(this);if(b(e)){const i=S(()=>{const n=g(e);s.prop(t,n),h.domUpdated(s,`prop.${t}`,n)});a.trackEffect(this,i)}else s.prop(t,e)})},u.fn.atomShow=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=S(()=>{const i=!!g(t);e.toggle(i),h.domUpdated(e,"show",i)});a.trackEffect(this,s)}else e.toggle(!!t)})},u.fn.atomHide=function(t){return this.each(function(){const e=u(this);if(b(t)){const s=S(()=>{const i=!g(t);e.toggle(i),h.domUpdated(e,"hide",!i)});a.trackEffect(this,s)}else e.toggle(!t)})},u.fn.atomVal=function(t,e={}){return this.each(function(){const{effect:s,cleanup:i}=Fe(u(this),t,e),n=S(s);a.trackEffect(this,n),a.trackCleanup(this,i)})},u.fn.atomChecked=function(t){return this.each(function(){const e=u(this);let s=!1;const i=()=>{s||M(()=>{t.value=e.prop("checked")})};e.on("change",i),a.trackCleanup(this,()=>e.off("change",i));const n=S(()=>{s=!0,e.prop("checked",t.value),h.domUpdated(e,"checked",t.value),s=!1});a.trackEffect(this,n)})},u.fn.atomOn=function(t,e){return this.each(function(){const s=u(this),i=function(n){M(()=>e.call(this,n))};s.on(t,i),a.trackCleanup(this,()=>s.off(t,i))})},u.fn.atomUnbind=function(){return this.each(function(){a.cleanupTree(this)})};function ht(t,e){b(e)?t.effects.push(()=>{const s=String(g(e)??"");t.$el.text(s),h.domUpdated(t.$el,"text",s)}):t.$el.text(String(e??""))}function at(t,e){b(e)?t.effects.push(()=>{const s=String(g(e)??"");t.$el.html(s),h.domUpdated(t.$el,"html",s)}):t.$el.html(String(e??""))}function lt(t,e){for(const[s,i]of Object.entries(e))b(i)?t.effects.push(()=>{const n=!!g(i);t.$el.toggleClass(s,n),h.domUpdated(t.$el,`class.${s}`,n)}):t.$el.toggleClass(s,!!i)}function ft(t,e){for(const[s,i]of Object.entries(e))if(Array.isArray(i)){const[n,r]=i;b(n)?t.effects.push(()=>{const o=`${g(n)}${r}`;t.$el.css(s,o),h.domUpdated(t.$el,`css.${s}`,o)}):t.$el.css(s,`${n}${r}`)}else b(i)?t.effects.push(()=>{const n=g(i);t.$el.css(s,n),h.domUpdated(t.$el,`css.${s}`,n)}):t.$el.css(s,i)}function dt(t,e){for(const[s,i]of Object.entries(e)){const n=r=>{r==null||r===!1?t.$el.removeAttr(s):r===!0?t.$el.attr(s,s):t.$el.attr(s,String(r)),h.domUpdated(t.$el,`attr.${s}`,r)};b(i)?t.effects.push(()=>n(g(i))):n(i)}}function _t(t,e){for(const[s,i]of Object.entries(e))b(i)?t.effects.push(()=>{const n=g(i);t.$el.prop(s,n),h.domUpdated(t.$el,`prop.${s}`,n)}):t.$el.prop(s,i)}function pt(t,e){b(e)?t.effects.push(()=>{const s=!!g(e);t.$el.toggle(s),h.domUpdated(t.$el,"show",s)}):t.$el.toggle(!!e)}function bt(t,e){b(e)?t.effects.push(()=>{const s=!g(e);t.$el.toggle(s),h.domUpdated(t.$el,"hide",!s)}):t.$el.toggle(!e)}function Et(t,e){const s=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:{},{effect:n,cleanup:r}=Fe(t.$el,s,i);t.effects.push(n),t.trackCleanup(r)}function gt(t,e){const s=ke(),i=()=>{s.phase==="idle"&&M(()=>{e.value=t.$el.prop("checked")})};t.$el.on("change",i),t.trackCleanup(()=>t.$el.off("change",i)),t.effects.push(()=>{s.phase="syncing-to-dom",t.$el.prop("checked",e.value),h.domUpdated(t.$el,"checked",e.value),s.phase="idle"})}function mt(t,e){for(const[s,i]of Object.entries(e)){const n=function(r){M(()=>i.call(this,r))};t.$el.on(s,n),t.trackCleanup(()=>t.$el.off(s,n))}}u.fn.atomBind=function(t){return this.each(function(){const e=u(this),s=[],i={$el:e,el:this,effects:s,trackCleanup:n=>a.trackCleanup(this,n)};t.text!==void 0&&ht(i,t.text),t.html!==void 0&&at(i,t.html),t.class&<(i,t.class),t.css&&ft(i,t.css),t.attr&&dt(i,t.attr),t.prop&&_t(i,t.prop),t.show!==void 0&&pt(i,t.show),t.hide!==void 0&&bt(i,t.hide),t.val!==void 0&&Et(i,t.val),t.checked!==void 0&>(i,t.checked),t.on&&mt(i,t.on),s.forEach(n=>{const r=S(n);a.trackEffect(this,r)})})};function yt(t){if(t.length===0)return[];const e=t.slice(),s=[0];let i,n,r,o;const c=t.length;for(i=0;i<c;i++){const v=t[i];if(v!==-1){const D=s[s.length-1];if(t[D]<v){e[i]=D,s.push(i);continue}for(n=0,r=s.length-1;n<r;)o=(n+r)/2|0,t[s[o]]<v?n=o+1:r=o;v<t[s[n]]&&(n>0&&(e[i]=s[n-1]),s[n]=i)}}let d=s.length,_=s[d-1];for(;d-- >0;)s[d]=_,_=e[_];return s}u.fn.atomList=function(t,e){return this.each(function(){const s=u(this),i=oe(this),{key:n,render:r,bind:o,onAdd:c,onRemove:d,empty:_}=e,v=typeof n=="function"?n:p=>p[n],D=new Map;let P=[],N=null;const ue=new Set,Pe=S(()=>{const p=t.value,Q=[],Ve=new Set;for(let l=0;l<p.length;l++){const m=p[l],x=v(m,l);Q.push(x),Ve.add(x)}if(h.log("list",`${i} updating with ${p.length} items`),p.length===0&&_){N||(N=u(_),s.append(N));for(const[,l]of D){l.$el.remove();const m=l.$el[0];m&&a.cleanup(m)}D.clear(),P=[];return}else N&&(N.remove(),N=null);for(const[l,m]of D)if(!Ve.has(l)){if(ue.has(l))continue;const x=()=>{m.$el.remove();const he=m.$el[0];he&&a.cleanup(he),ue.delete(l),h.log("list",`${i} removed item:`,l)};D.delete(l),ue.add(l),d?Promise.resolve(d(m.$el)).then(x):x()}const Le=new Map;P.forEach((l,m)=>Le.set(l,m));const Dt=Q.map(l=>Le.get(l)??-1),It=yt(Dt),Ct=new Set(It);let w=null;for(let l=p.length-1;l>=0;l--){const m=Q[l],x=p[l],he=Ct.has(l);if(D.has(m)){const T=D.get(m);if(!T)continue;T.item=x;const k=T.$el[0];if(!k)continue;if(e.update&&e.update(T.$el,x,l),!he)w?T.$el.insertBefore(w):T.$el.appendTo(s);else{const W=k.nextSibling;w&&W!==w?T.$el.insertBefore(w):!w&&W&&T.$el.appendTo(s)}w=k}else{const T=r(x,l),k=(T instanceof Element,u(T));D.set(m,{$el:k,item:x}),w?k.insertBefore(w):k.appendTo(s),o&&o(k,x,l),c&&c(k),h.log("list",`${i} added item:`,m);const W=k[0];W&&(w=W)}}P=Q});a.trackEffect(this,Pe),a.trackCleanup(this,()=>{D.clear(),P=[],N?.remove()})})};const ce=new WeakMap;u.fn.atomMount=function(t,e={}){return this.each(function(){const s=u(this),i=oe(this),n=ce.get(this);n&&(h.log("mount",`${i} unmounting existing component`),n()),h.log("mount",`${i} mounting component`);let r;try{r=t(s,e)}catch(d){console.error("[atom-effect-jquery] Mount error:",d);return}let o=!1;const c=()=>{if(!o){if(o=!0,h.log("mount",`${i} full cleanup`),typeof r=="function")try{r()}catch{}a.cleanupTree(this),ce.delete(this)}};ce.set(this,c),a.trackCleanup(this,c)})},u.fn.atomUnmount=function(){return this.each(function(){ce.get(this)?.()})};const K=new WeakMap;let je=!1;function be(){if(je)return;je=!0;const t=u.fn.on,e=u.fn.off,s=u.fn.remove,i=u.fn.empty,n=u.fn.detach;u.fn.remove=function(r){return(r?this.filter(r):this).each(function(){a.cleanupTree(this)}),s.call(this,r)},u.fn.empty=function(){return this.each(function(){this.querySelectorAll("*").forEach(o=>a.cleanup(o))}),i.call(this)},u.fn.detach=function(r){return(r?this.filter(r):this).each(function(){a.keep(this)}),n.call(this,r)},u.fn.on=function(...r){let o=-1;for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){o=c;break}if(o!==-1){const c=r[o];let d;K.has(c)?d=K.get(c):(d=function(..._){let v;return M(()=>{v=c.apply(this,_)}),v},K.set(c,d)),r[o]=d}return t.apply(this,r)},u.fn.off=function(...r){let o=-1;for(let c=r.length-1;c>=0;c--)if(typeof r[c]=="function"){o=c;break}if(o!==-1){const c=r[o];K.has(c)&&(r[o]=K.get(c))}return e.apply(this,r)}}const St=be;be(),u(()=>{Me(document.body)}),E.default=u,E.atom=xe,E.batch=M,E.computed=Oe,E.disableAutoCleanup=ut,E.effect=S,E.enableAutoCleanup=Me,E.enablejQueryBatching=St,E.enablejQueryOverrides=be,E.registry=a,E.untracked=de,Object.defineProperties(E,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
2
2
|
//# sourceMappingURL=atom-effect-jquery.min.js.map
|