@but212/atom-effect-jquery 0.8.3 → 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 CHANGED
@@ -3,191 +3,146 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@but212/atom-effect-jquery.svg)](https://www.npmjs.com/package/@but212/atom-effect-jquery)
4
4
  [![License](https://img.shields.io/npm/l/@but212/atom-effect-jquery.svg)](https://github.com/but212/atom-effect/blob/main/packages/jquery/LICENSE)
5
5
 
6
- **Reactive jQuery bindings powered by [atom-effect](https://github.com/but212/atom-effect).**
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 @but212/atom-effect
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.3"></script>
11
+ npm install @but212/atom-effect-jquery jquery
39
12
  ```
40
13
 
41
14
  ## Basic Usage
42
15
 
43
16
  ```javascript
44
- // If using NPM:
45
- // import $ from 'jquery';
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
- // 2. Bind to DOM
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
- // 4. React to changes (Side Effects)
61
- $.effect(() => {
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
- The library extends the main jQuery function `$`:
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
- - `$.atom(initialValue)`: Creates a writable atom.
73
- - `$.computed(() => ...)`: Creates a derived computed atom.
74
- - `$.effect(() => ...)`: Runs a side effect.
75
- - `$.batch(() => ...)`: Batches multiple updates into a single render.
76
- - `$.nextTick()`: Returns a Promise that resolves after the next update cycle.
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
- ### DOM Binding Methods
57
+ ### Form Bindings
79
58
 
80
- All methods are chainable and return the jQuery object.
59
+ #### `.atomVal(atom, options?)`
81
60
 
82
- #### Text & Content
61
+ Two-way binding for inputs.
83
62
 
84
- - **`.atomText(atom, formatter?)`**
85
- Updates `textContent`. Optional formatter function.
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
- #### Attributes & Styles
66
+ #### `.atomChecked(boolAtom)`
90
67
 
91
- - **`.atomClass(className, booleanAtom)`**
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
- #### Two-Way Binding
70
+ ### Events
103
71
 
104
- - **`.atomVal(atom, options?)`**
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
- #### Events
74
+ Binds event handler wrapped in `batch()` for performance.
113
75
 
114
- - **`.atomOn(event, handler)`**
115
- Adds an event listener where the handler is automatically wrapped in `$.batch()`.
76
+ ### Unified Binding
116
77
 
117
- ### Unified Binding (`.atomBind`)
78
+ #### `.atomBind(bindings)`
118
79
 
119
- For cleaner code when setting multiple bindings at once.
80
+ Apply multiple bindings at once.
120
81
 
121
- ```typescript
122
- $('div').atomBind({
123
- text: nameAtom,
124
- class: { 'active': isActiveAtom },
82
+ ```javascript
83
+ $('.card').atomBind({
84
+ text: titleAtom,
85
+ class: { 'active': isActive },
125
86
  css: { 'color': colorAtom },
126
- on: { click: () => console.log('clicked') }
87
+ on: { click: handleClick }
127
88
  });
128
89
  ```
129
90
 
130
- ### List Rendering (`.atomList`)
91
+ ### List Rendering
131
92
 
132
- Efficiently renders a list of atoms.
93
+ #### `.atomList(listAtom, options)`
133
94
 
134
- ```typescript
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
- // Unique key for efficient diffing (required)
139
- key: (item) => item,
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', () => alert(item));
102
+ $el.on('click', () => select(item));
147
103
  }
148
104
  });
149
105
  ```
150
106
 
151
- ### Component Mounting (`.atomMount`)
107
+ **Options**: `key` (required), `render`, `bind`, `onAdd`, `onRemove`, `empty`.
108
+
109
+ ### Components
152
110
 
153
- Mounts a functional component that manages its own lifecycle.
111
+ #### `.atomMount(Component, props)`
154
112
 
155
- ```typescript
113
+ Mounts a functional component with its own lifestyle management.
114
+
115
+ ```javascript
156
116
  const Counter = ($el, props) => {
157
- const count = $.atom(props.initial || 0);
158
-
159
- $el.append('<span>0</span>');
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, { initial: 10 });
122
+ $('#app').atomMount(Counter, { start: 10 });
167
123
  ```
168
124
 
169
- ## Advanced Features
170
-
171
- ### Transparent Lifecycle Management
125
+ ## Key Features
172
126
 
173
- Memory management is handled automatically through overrides of standard jQuery methods. You don't need to manually dispose of bindings.
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
- - **`.remove()` / `.empty()`**: Automatically cleans up all associated reactivity and event listeners to prevent memory leaks.
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
- ### Performance Optimization
134
+ Enable internal logging and dependency tracing:
180
135
 
181
- The library automatically patches jQuery's event methods (`.on`, `.off`) to wrap handlers in `$.batch()`. This ensures that multiple state updates triggering within a single event (e.g., a click handler) are batched together, resulting in a single re-render.
136
+ ```javascript
137
+ $.atom.debug = true;
138
+ ```
182
139
 
183
- ### Debug Mode
140
+ When enabled, any potential infinite loops or self-modifying effects will trigger detailed console warnings with trace info.
184
141
 
185
- Enable debug mode to see console logs for every DOM update and visually highlight updated elements in the browser.
142
+ ## Contributing
186
143
 
187
- ```typescript
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&&lt(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&&gt(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&&lt(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&&gt(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