@but212/atom-effect-jquery 0.28.0 → 0.29.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 +1 -1
- package/dist/atom-effect-jquery.min.js +2 -2
- package/dist/atom-effect-jquery.min.js.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.mjs +747 -753
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atom-effect-jquery.min.js","names":["$"],"sources":["../../core/dist/index.mjs","../src/utils/index.ts","../src/constants.ts","../src/utils/debug.ts","../src/core/namespace.ts","../src/utils/array-pool.ts","../src/utils/object-pool.ts","../src/internal/pool.ts","../src/core/registry.ts","../src/core/jquery-patch.ts","../src/types.ts","../src/bindings/input-binding.ts","../src/core/effect-factory.ts","../src/utils/sanitize.ts","../src/bindings/unified.ts","../src/bindings/form.ts","../src/bindings/chainable.ts","../src/bindings/list.ts","../src/bindings/mount.ts","../src/features/route.ts","../src/features/fetch.ts","../src/index.ts"],"sourcesContent":["var A = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, I = {\n DISPOSED: 1,\n EXECUTING: 8\n}, z = {\n DISPOSED: 1,\n IS_COMPUTED: 2,\n DIRTY: 8,\n IDLE: 16,\n PENDING: 32,\n RESOLVED: 64,\n REJECTED: 128,\n RECOMPUTING: 256,\n HAS_ERROR: 512,\n FORCE_COMPUTE: 1024\n}, a = {\n DISPOSED: 1,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, C = {\n MAX_EXECUTIONS_PER_SECOND: 1e3,\n MAX_EXECUTIONS_PER_EFFECT: 100,\n MAX_EXECUTIONS_PER_FLUSH: 1e4,\n MAX_FLUSH_ITERATIONS: 1e3,\n MIN_FLUSH_ITERATIONS: 10,\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, et = {\n WARN_INFINITE_LOOP: !0,\n EFFECT_FREQUENCY_WINDOW: 1e3\n}, W = {\n MAX_ASYNC_RETRIES: 3,\n MAX_PROMISE_ID: Number.MAX_SAFE_INTEGER - 1\n}, T = {\n UNINITIALIZED: -1,\n MIN: 1\n}, U = 1073741823, Et = { VERSION_BITS: 16 }, Ot = (typeof process < \"u\" && process.env, !1), K = Object.freeze([]), X = class {\n constructor(t, s, e = void 0) {\n this.node = t, this.version = s, this.unsub = e;\n }\n}, dt = class {\n constructor(t, s) {\n this.fn = t, this.sub = s;\n }\n notify(t, s) {\n const e = this.fn;\n if (e !== void 0) {\n e(t, s);\n return;\n }\n const i = this.sub;\n i !== void 0 && i.execute();\n }\n}, N = class extends Error {\n constructor(t, s = null, e = !0) {\n super(t), this.cause = s, this.recoverable = e, this.name = \"AtomError\";\n }\n}, S = class extends N {\n constructor(t, s = null) {\n super(t, s, !0), this.name = \"ComputedError\";\n }\n}, v = class extends N {\n constructor(t, s = null) {\n super(t, s, !1), this.name = \"EffectError\";\n }\n}, P = class extends N {\n constructor(t, s = null) {\n super(t, s, !1), this.name = \"SchedulerError\";\n }\n}, _ = {\n COMPUTED_MUST_BE_FUNCTION: \"Computed target must be a function\",\n COMPUTED_ASYNC_PENDING_NO_DEFAULT: \"Async computation pending with no default value\",\n COMPUTED_COMPUTATION_FAILED: \"Computation execution failed\",\n COMPUTED_ASYNC_COMPUTATION_FAILED: \"Async computation execution failed\",\n COMPUTED_CIRCULAR_DEPENDENCY: \"Circular dependency detected\",\n COMPUTED_DISPOSED: \"Attempted to access disposed computed\",\n ATOM_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscriber must be a function or Subscriber object\",\n ATOM_INDIVIDUAL_SUBSCRIBER_FAILED: \"Subscriber execution failed\",\n EFFECT_MUST_BE_FUNCTION: \"Effect target must be a function\",\n EFFECT_EXECUTION_FAILED: \"Effect execution failed\",\n EFFECT_CLEANUP_FAILED: \"Effect cleanup failed\",\n EFFECT_DISPOSED: \"Attempted to run disposed effect\",\n SCHEDULER_FLUSH_OVERFLOW: (t, s) => `Maximum flush iterations (${t}) exceeded. ${s} jobs dropped. Possible infinite loop.`,\n CALLBACK_ERROR_IN_ERROR_HANDLER: \"Exception encountered in onError handler\",\n EFFECT_FREQUENCY_LIMIT_EXCEEDED: \"Effect executed too frequently within 1 second. Suspected infinite loop.\",\n SCHEDULER_CALLBACK_MUST_BE_FUNCTION: \"Scheduler callback must be a function\",\n SCHEDULER_END_BATCH_WITHOUT_START: \"endBatch() called without matching startBatch(). Ignoring.\",\n BATCH_CALLBACK_MUST_BE_FUNCTION: \"Batch callback must be a function\"\n}, it = class {\n constructor() {\n this._s0 = null, this._s1 = null, this._s2 = null, this._s3 = null, this._count = 0, this._overflow = null, this._freeIndices = null;\n }\n get size() {\n return this._count;\n }\n getAt(t) {\n if (t < 4) switch (t) {\n case 0:\n return this._s0;\n case 1:\n return this._s1;\n case 2:\n return this._s2;\n case 3:\n return this._s3;\n }\n const s = this._overflow;\n if (s !== null) {\n const e = s[t - 4];\n return e === void 0 ? null : e;\n }\n return null;\n }\n setAt(t, s) {\n switch (t) {\n case 0:\n this._s0 = s;\n break;\n case 1:\n this._s1 = s;\n break;\n case 2:\n this._s2 = s;\n break;\n case 3:\n this._s3 = s;\n break;\n default:\n this._overflow ??= [], this._overflow[t - 4] = s;\n }\n t >= this._count && (this._count = t + 1);\n }\n truncateFrom(t) {\n const s = this._count;\n if (t >= s) return;\n if (t <= 3) {\n if (t <= 0) {\n const i = this._s0;\n i != null && (this._onItemRemoved(i), this._s0 = null);\n }\n if (t <= 1) {\n const i = this._s1;\n i != null && (this._onItemRemoved(i), this._s1 = null);\n }\n if (t <= 2) {\n const i = this._s2;\n i != null && (this._onItemRemoved(i), this._s2 = null);\n }\n if (t <= 3) {\n const i = this._s3;\n i != null && (this._onItemRemoved(i), this._s3 = null);\n }\n }\n const e = this._overflow;\n if (e !== null && s > 4) {\n const i = t > 4 ? t - 4 : 0, r = e.length;\n for (let n = i; n < r; n++) {\n const o = e[n];\n o != null && (this._onItemRemoved(o), e[n] = null);\n }\n t <= 4 ? (e.length = 0, this._overflow = null) : e.length = t - 4;\n }\n this._freeIndices !== null && (this._freeIndices = null), this._count = t;\n }\n _onItemRemoved(t) {\n }\n add(t) {\n if (this._s0 === null) {\n this._s0 = t, this._count++;\n return;\n }\n if (this._s1 === null) {\n this._s1 = t, this._count++;\n return;\n }\n if (this._s2 === null) {\n this._s2 = t, this._count++;\n return;\n }\n if (this._s3 === null) {\n this._s3 = t, this._count++;\n return;\n }\n this._addToOverflow(t);\n }\n _addToOverflow(t) {\n const s = this._overflow;\n if (s === null) this._overflow = [t];\n else {\n const e = this._freeIndices;\n e !== null && e.length > 0 ? s[e.pop()] = t : s.push(t);\n }\n this._count++;\n }\n remove(t) {\n if (this._s0 === t)\n return this._s0 = null, this._count--, !0;\n if (this._s1 === t)\n return this._s1 = null, this._count--, !0;\n if (this._s2 === t)\n return this._s2 = null, this._count--, !0;\n if (this._s3 === t)\n return this._s3 = null, this._count--, !0;\n const s = this._overflow;\n if (s == null) return !1;\n for (let e = 0, i = s.length; e < i; e++) if (s[e] === t) {\n s[e] = null, this._count--;\n let r = this._freeIndices;\n return r === null && (r = this._freeIndices = []), r.push(e), !0;\n }\n return !1;\n }\n has(t) {\n if (this._count === 0) return !1;\n if (this._s0 === t || this._s1 === t || this._s2 === t || this._s3 === t) return !0;\n const s = this._overflow;\n if (s != null) {\n for (let e = 0, i = s.length; e < i; e++) if (s[e] === t) return !0;\n }\n return !1;\n }\n forEach(t) {\n const s = this._count;\n if (s === 0) return;\n let e = 0;\n const i = this._s0;\n if (i != null && (t(i), ++e === s))\n return;\n const r = this._s1;\n if (r != null && (t(r), ++e === s))\n return;\n const n = this._s2;\n if (n != null && (t(n), ++e === s))\n return;\n const o = this._s3;\n if (o != null && (t(o), ++e === s))\n return;\n const u = this._overflow;\n if (u != null) for (let l = 0, h = u.length; l < h; l++) {\n const c = u[l];\n if (c != null && (t(c), ++e === s))\n return;\n }\n }\n forEachIndexed(t) {\n const s = this._count;\n if (s === 0) return 0;\n let e = 0;\n const i = this._s0;\n if (i != null && (t(i), ++e === s))\n return e;\n const r = this._s1;\n if (r != null && (t(r), ++e === s))\n return e;\n const n = this._s2;\n if (n != null && (t(n), ++e === s))\n return e;\n const o = this._s3;\n if (o != null && (t(o), ++e === s))\n return e;\n const u = this._overflow;\n if (u != null) for (let l = 0, h = u.length; l < h; l++) {\n const c = u[l];\n if (c != null && (t(c), ++e === s))\n return e;\n }\n return e;\n }\n compact() {\n const t = this._overflow;\n if (t === null) return;\n let s = t.length;\n if (s === 0) return;\n let e = 0;\n for (; e < s; ) if (t[e] === null) {\n for (; s > e && t[s - 1] === null; )\n t.pop(), s--;\n s > e && (t[e] = t.pop(), s--, e++);\n } else e++;\n this._freeIndices = null, s === 0 && (this._overflow = null);\n }\n clear() {\n this._s0 = null, this._s1 = null, this._s2 = null, this._s3 = null, this._count = 0, this._overflow !== null && (this._overflow.length = 0, this._overflow = null), this._freeIndices = null;\n }\n dispose() {\n this.clear();\n }\n}, Z = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), pt = /* @__PURE__ */ Symbol(\"AtomEffect.Id\"), J = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), M = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), Ct = class {\n constructor() {\n this.enabled = !1, this.warnInfiniteLoop = et.WARN_INFINITE_LOOP;\n }\n warn(t, s) {\n }\n attachDebugInfo(t, s, e) {\n }\n getDebugName(t) {\n if (t != null)\n return t[Z];\n }\n getDebugType(t) {\n if (t != null)\n return t[J];\n }\n}, Q = new Ct(), It = 1, Dt = () => It++ | 0;\nfunction m(t, s, e) {\n return t instanceof N ? t : t instanceof Error ? new s(`${t.name || t.constructor.name || \"Error\"} (${e}): ${t.message}`, t) : new s(`Unexpected error (${e}): ${String(t)}`);\n}\nvar Y = class {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = T.UNINITIALIZED, this._notifying = 0, this._hotIndex = -1, this._slots = null, this._deps = null, this.id = Dt() & U;\n }\n get isDisposed() {\n return (this.flags & z.DISPOSED) !== 0;\n }\n get isComputed() {\n return (this.flags & z.IS_COMPUTED) !== 0;\n }\n get hasError() {\n return !1;\n }\n subscribe(t) {\n const s = typeof t == \"function\";\n if (!s && (!t || typeof t.execute != \"function\")) throw m(/* @__PURE__ */ new TypeError(\"Invalid subscriber\"), N, _.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);\n let e = this._slots;\n e || (e = new it(), this._slots = e);\n let i = !1;\n if (e._s0 != null && (s ? e._s0.fn === t : e._s0.sub === t)) i = !0;\n else if (e._s1 != null && (s ? e._s1.fn === t : e._s1.sub === t)) i = !0;\n else if (e._s2 != null && (s ? e._s2.fn === t : e._s2.sub === t)) i = !0;\n else if (e._s3 != null && (s ? e._s3.fn === t : e._s3.sub === t)) i = !0;\n else {\n const n = e._overflow;\n if (n != null) for (let o = 0, u = n.length; o < u; o++) {\n const l = n[o];\n if (l != null && (s ? l.fn === t : l.sub === t)) {\n i = !0;\n break;\n }\n }\n }\n if (i)\n return () => {\n };\n const r = new dt(s ? t : void 0, s ? void 0 : t);\n return e.add(r), () => this._unsubscribe(r);\n }\n _unsubscribe(t) {\n const s = this._slots;\n s && (s.remove(t), this._notifying === 0 && s.compact());\n }\n subscriberCount() {\n const t = this._slots;\n return t === null ? 0 : t.size;\n }\n _notifySubscribers(t, s) {\n const e = this._slots;\n if (!(e === null || e.size === 0)) {\n this._notifying++;\n try {\n let i = e._s0;\n if (i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s1, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s2, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s3, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n const r = e._overflow;\n if (r != null) for (let n = 0, o = r.length; n < o; n++) {\n const u = r[n];\n if (u != null) try {\n u.notify(t, s);\n } catch (l) {\n this._logNotifyError(l);\n }\n }\n } finally {\n --this._notifying === 0 && e.compact();\n }\n }\n }\n _logNotifyError(t) {\n console.error(m(t, N, _.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n _isDirty() {\n const t = this._deps;\n if (t === null || t.size === 0) return !1;\n const s = this._hotIndex;\n if (s !== -1) {\n const e = t.getAt(s);\n if (e != null && e.node.version !== e.version) return !0;\n }\n return !t.hasComputeds && !t.isDirtyFast() ? !1 : this._deepDirtyCheck();\n }\n}, x = 0;\nfunction k() {\n const t = x + 1 & U;\n return x = t === 0 ? 1 : t, x;\n}\nfunction G(t) {\n const s = t + 1 & U;\n return s === 0 ? 1 : s;\n}\nvar V = 0, F = !1, nt = 0;\nfunction rt() {\n return nt;\n}\nfunction tt() {\n return F ? !1 : (F = !0, nt = k(), V = 0, !0);\n}\nfunction st() {\n F = !1;\n}\nfunction vt() {\n if (!F) return 0;\n const t = ++V;\n if (t <= C.MAX_EXECUTIONS_PER_FLUSH) return t;\n throw new Error(`[atom-effect] Infinite loop detected: flush execution count exceeded ${C.MAX_EXECUTIONS_PER_FLUSH}`);\n}\nvar St = class {\n constructor() {\n this._queueBuffer = [[], []], this._bufferIndex = 0, this._size = 0, this._epoch = 0, this._isProcessing = !1, this._isFlushingSync = !1, this._batchDepth = 0, this._batchQueue = [], this._batchQueueSize = 0, this._maxFlushIterations = C.MAX_FLUSH_ITERATIONS, this.onOverflow = null, this._boundRunLoop = this._runLoop.bind(this);\n }\n get queueSize() {\n return this._size;\n }\n get isBatching() {\n return this._batchDepth > 0;\n }\n schedule(t) {\n const s = this._epoch;\n if (t._nextEpoch === s) return;\n if (t._nextEpoch = s, this._batchDepth > 0 || this._isFlushingSync) {\n this._batchQueue[this._batchQueueSize++] = t;\n return;\n }\n const e = this._bufferIndex, i = this._queueBuffer[e];\n i[this._size++] = t, this._isProcessing || this._flush();\n }\n _flush() {\n this._isProcessing || this._size === 0 || (this._isProcessing = !0, queueMicrotask(this._boundRunLoop));\n }\n _runLoop() {\n try {\n if (this._size === 0) return;\n const t = tt();\n this._drainQueue(), t && st();\n } finally {\n this._isProcessing = !1, this._size > 0 && this._batchDepth === 0 && this._flush();\n }\n }\n _flushSync() {\n this._isFlushingSync = !0;\n const t = tt();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, t && st();\n }\n }\n _mergeBatchQueue() {\n const t = this._batchQueueSize;\n if (t === 0) return;\n const s = ++this._epoch, e = this._batchQueue, i = this._bufferIndex, r = this._queueBuffer[i];\n let n = this._size;\n for (let o = 0; o < t; o++) {\n const u = e[o];\n u._nextEpoch !== s && (u._nextEpoch = s, r[n++] = u);\n }\n this._size = n, this._batchQueueSize = 0, e.length = 0;\n }\n _drainQueue() {\n let t = 0;\n for (; this._size > 0; ) {\n if (++t > this._maxFlushIterations) {\n this._handleFlushOverflow();\n return;\n }\n this._processQueue(), this._mergeBatchQueue();\n }\n }\n _processQueue() {\n const t = this._bufferIndex, s = this._queueBuffer[t], e = this._size;\n this._bufferIndex = t ^ 1, this._size = 0, this._epoch = this._epoch + 1 | 0;\n for (let i = 0; i < e; i++) {\n const r = s[i];\n try {\n typeof r == \"function\" ? r() : r.execute();\n } catch (n) {\n console.error(new P(\"Error occurred during scheduler execution\", n));\n }\n }\n s.length = 0;\n }\n _handleFlushOverflow() {\n const t = this._size + this._batchQueueSize, s = this._maxFlushIterations;\n console.error(new P(_.SCHEDULER_FLUSH_OVERFLOW(s, t))), this._size = 0;\n const e = this._bufferIndex;\n this._queueBuffer[e].length = 0, this._batchQueueSize = 0;\n const i = this.onOverflow;\n if (i) try {\n i(t);\n } catch {\n }\n }\n startBatch() {\n this._batchDepth++;\n }\n endBatch() {\n this._batchDepth !== 0 && --this._batchDepth === 0 && this._flushSync();\n }\n setMaxFlushIterations(t) {\n if (t < C.MIN_FLUSH_ITERATIONS) throw new P(`Max flush iterations must be at least ${C.MIN_FLUSH_ITERATIONS}`);\n this._maxFlushIterations = t;\n }\n}, w = new St(), $ = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), ot = /* @__PURE__ */ Symbol.for(\"atom-effect/computed\"), ut = /* @__PURE__ */ Symbol.for(\"atom-effect/effect\"), gt = /* @__PURE__ */ Symbol.for(\"atom-effect/writable\"), Tt = class {\n constructor() {\n this.current = null;\n }\n run(t, s) {\n if (this.current === t) return s();\n const e = this.current;\n this.current = t;\n try {\n return s();\n } finally {\n this.current = e;\n }\n }\n}, f = new Tt();\nfunction Rt(t) {\n const s = f, e = s.current;\n if (e === null) return t();\n s.current = null;\n try {\n return t();\n } finally {\n s.current = e;\n }\n}\nvar mt = class extends Y {\n constructor(t, s) {\n super(), this[$] = !0, this[gt] = !0, this._value = t, s && (this.flags |= a.SYNC), Q.attachDebugInfo(this, \"atom\", this.id);\n }\n get isNotificationScheduled() {\n return (this.flags & a.NOTIFICATION_SCHEDULED) !== 0;\n }\n get isSync() {\n return (this.flags & a.SYNC) !== 0;\n }\n get value() {\n const t = f.current;\n return t?.addDependency(this), this._value;\n }\n set value(t) {\n const s = this._value;\n if (Object.is(s, t)) return;\n this._value = t, this.version = G(this.version);\n const e = this.flags;\n if ((e & a.NOTIFICATION_SCHEDULED) !== 0) return;\n const i = this._slots;\n i == null || i.size === 0 || (this._pendingOldValue = s, this.flags = e | a.NOTIFICATION_SCHEDULED, (e & a.SYNC) !== 0 && !w.isBatching ? this._flushNotifications() : w.schedule(this));\n }\n execute() {\n this._flushNotifications();\n }\n _flushNotifications() {\n const t = this.flags;\n if ((t & (a.NOTIFICATION_SCHEDULED | a.DISPOSED)) !== a.NOTIFICATION_SCHEDULED) return;\n const s = this._pendingOldValue;\n this._pendingOldValue = void 0, this.flags = t & ~a.NOTIFICATION_SCHEDULED, this._notifySubscribers(this._value, s);\n }\n peek() {\n return this._value;\n }\n dispose() {\n const t = this.flags;\n (t & a.DISPOSED) === 0 && (this._slots?.clear(), this.flags = t | a.DISPOSED, this._value = void 0, this._pendingOldValue = void 0);\n }\n _deepDirtyCheck() {\n return !1;\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n};\nfunction Ft(t, s = {}) {\n return new mt(t, s.sync ?? !1);\n}\nvar lt = class extends it {\n constructor(...t) {\n super(...t), this._map = null, this._SCAN_THRESHOLD = 32, this.hasComputeds = !1, this._depsHash = 0;\n }\n prepareTracking() {\n this.hasComputeds = !1;\n }\n _onItemRemoved(t) {\n const s = t.unsub;\n s && s();\n }\n claimExisting(t, s) {\n const e = this._count;\n if (s >= e) return !1;\n const i = e - s;\n if (this._map !== null || i > this._SCAN_THRESHOLD) return this._claimViaMap(t, s);\n if (s < 4) switch (s) {\n case 0: {\n const n = this._s0;\n if (n && n.node === t && n.unsub)\n return n.version = t.version, !0;\n }\n case 1:\n if (e > 1) {\n const n = this._s1;\n if (n && n.node === t && n.unsub)\n return n.version = t.version, s !== 1 && (this._s1 = this._s0, this._s0 = n), !0;\n }\n case 2:\n if (e > 2) {\n const n = this._s2;\n if (n && n.node === t && n.unsub) {\n if (n.version = t.version, s !== 2) {\n const o = s === 0 ? this._s0 : this._s1;\n s === 0 ? this._s0 = n : this._s1 = n, this._s2 = o;\n }\n return !0;\n }\n }\n case 3:\n if (e > 3) {\n const n = this._s3;\n if (n && n.node === t && n.unsub) {\n if (n.version = t.version, s !== 3) {\n let o;\n s === 0 ? (o = this._s0, this._s0 = n) : s === 1 ? (o = this._s1, this._s1 = n) : (o = this._s2, this._s2 = n), this._s3 = o;\n }\n return !0;\n }\n }\n }\n const r = this._overflow;\n if (r) {\n const n = t.version, o = s > 4 ? s : 4, u = r.length;\n for (let l = o - 4; l < u; l++) {\n const h = r[l];\n if (h && h.node === t && h.unsub)\n return h.version = n, this._swapGeneral(l + 4, s, h), !0;\n }\n }\n return !1;\n }\n _claimViaMap(t, s) {\n let e = this._map;\n if (e === null) {\n e = this._map = /* @__PURE__ */ new Map();\n const n = this._count;\n if (s < 4) {\n const u = this._s0;\n s <= 0 && u?.unsub && e.set(u.node, 0);\n const l = this._s1;\n s <= 1 && l?.unsub && e.set(l.node, 1);\n const h = this._s2;\n s <= 2 && h?.unsub && e.set(h.node, 2);\n const c = this._s3;\n s <= 3 && c?.unsub && e.set(c.node, 3);\n }\n const o = this._overflow;\n if (o && n > 4) {\n const u = s > 4 ? s : 4, l = o.length;\n for (let h = u - 4; h < l; h++) {\n const c = o[h];\n c?.unsub && e.set(c.node, h + 4);\n }\n }\n }\n const i = e.get(t);\n if (i === void 0 || i < s) return !1;\n const r = this.getAt(i);\n if (r == null || !r.unsub) return !1;\n if (r.version = t.version, i !== s) {\n let n;\n s === 0 ? n = this._s0 : s === 1 ? n = this._s1 : s === 2 ? n = this._s2 : s === 3 ? n = this._s3 : n = this._overflow[s - 4] ?? null, this.setAt(s, r), this.setAt(i, n), n?.unsub && e.set(n.node, i), e.set(t, s);\n }\n return !0;\n }\n _swapGeneral(t, s, e) {\n if (t === s) return;\n let i;\n if (s === 0 ? i = this._s0 : s === 1 ? i = this._s1 : s === 2 ? i = this._s2 : s === 3 ? i = this._s3 : i = this._overflow[s - 4] ?? null, this.setAt(s, e), t === 0) this._s0 = i;\n else if (t === 1) this._s1 = i;\n else if (t === 2) this._s2 = i;\n else if (t === 3) this._s3 = i;\n else {\n const r = this._overflow;\n r[t - 4] = i;\n }\n }\n insertNew(t, s) {\n const e = this._count;\n if (t < e) {\n let i;\n t === 0 ? i = this._s0 : t === 1 ? i = this._s1 : t === 2 ? i = this._s2 : t === 3 ? i = this._s3 : i = this._overflow[t - 4] ?? null, i != null && (this._addToOverflow(i), this._map !== null && i.unsub && this._map.set(i.node, this._count - 1));\n }\n if (t === 0) this._s0 = s;\n else if (t === 1) this._s1 = s;\n else if (t === 2) this._s2 = s;\n else if (t === 3) this._s3 = s;\n else {\n let i = this._overflow;\n i || (i = [], this._overflow = i), i[t - 4] = s;\n }\n t >= e && (this._count = t + 1);\n }\n truncateFrom(t) {\n t >= this._count || (super.truncateFrom(t), this._map !== null && (this._map.clear(), this._map = null));\n }\n seal() {\n this._depsHash = this._calculateHash(!1);\n }\n isDirtyFast() {\n return this._calculateHash(!0) !== this._depsHash;\n }\n _calculateHash(t) {\n const s = this._count;\n if (s === 0) return 0;\n const e = Et.VERSION_BITS;\n let i = 0;\n const r = this._s0;\n if (r != null) {\n const n = r.node, o = t ? n.version : r.version;\n i = i + (o << e) + n.id | 0;\n const u = this._s1;\n if (s > 1 && u != null) {\n const l = u.node, h = t ? l.version : u.version;\n i = i + (h << e) + l.id | 0;\n const c = this._s2;\n if (s > 2 && c != null) {\n const q = c.node, ft = t ? q.version : c.version;\n i = i + (ft << e) + q.id | 0;\n const L = this._s3;\n if (s > 3 && L != null) {\n const j = L.node, at = t ? j.version : L.version;\n i = i + (at << e) + j.id | 0;\n }\n }\n }\n }\n if (s > 4) {\n const n = this._overflow;\n for (let o = 0, u = n.length; o < u; o++) {\n const l = n[o], h = l.node, c = t ? h.version : l.version;\n i = i + (c << e) + h.id | 0;\n }\n }\n return i;\n }\n disposeAll() {\n this._count > 0 && this.truncateFrom(0), this.hasComputeds = !1;\n }\n remove(t) {\n throw new Error(\"remove() is strictly prohibited in DepSlotBuffer to preserve sequential cache paths.\");\n }\n compact() {\n }\n};\nfunction wt(t) {\n return typeof t == \"object\" && t !== null && $ in t;\n}\nfunction Ut(t) {\n return typeof t == \"object\" && t !== null && ot in t;\n}\nfunction Lt(t) {\n return typeof t == \"object\" && t !== null && ut in t;\n}\nfunction ht(t) {\n return typeof t == \"object\" && t !== null && typeof t.then == \"function\";\n}\nvar { IDLE: p, DIRTY: E, PENDING: g, RESOLVED: d, REJECTED: D, HAS_ERROR: b, RECOMPUTING: y, DISPOSED: B, IS_COMPUTED: O, FORCE_COMPUTE: H } = z, Nt = class extends Y {\n constructor(t, s = {}) {\n if (typeof t != \"function\") throw new S(_.COMPUTED_MUST_BE_FUNCTION);\n if (super(), this[$] = !0, this[ot] = !0, this._error = null, this._promiseId = 0, this._deps = new lt(), this._asyncRetryCount = 0, this._lastDriftEpoch = T.UNINITIALIZED, this._trackEpoch = T.UNINITIALIZED, this._trackCount = 0, this._value = void 0, this.flags = O | E | p, this._equal = s.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in s ? s.defaultValue : M, this._onError = s.onError ?? null, this._maxAsyncRetries = (s.maxAsyncRetries ?? W.MAX_ASYNC_RETRIES) & U, Q.attachDebugInfo(this, \"computed\", this.id), s.lazy === !1) try {\n this._recompute();\n } catch {\n }\n }\n get isDirty() {\n return (this.flags & E) !== 0;\n }\n get isRejected() {\n return (this.flags & D) !== 0;\n }\n get isRecomputing() {\n return (this.flags & y) !== 0;\n }\n get _hasErrorInternal() {\n return (this.flags & b) !== 0;\n }\n _track() {\n f.current?.addDependency(this);\n }\n get value() {\n const t = f.current;\n t?.addDependency(this);\n let s = this.flags;\n if ((s & (d | E | p)) === d) return this._value;\n if ((s & B) !== 0) throw new S(_.COMPUTED_DISPOSED);\n if ((s & y) !== 0) {\n const r = this._defaultValue;\n if (r !== M) return r;\n throw new S(_.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if ((s & (E | p)) !== 0) {\n const r = this._deps;\n if ((s & p) === 0 && (s & H) === 0 && r.size > 0 && !this._isDirty() ? s = this.flags &= ~E : (this._recompute(), s = this.flags), (s & d) !== 0) return this._value;\n }\n const e = this._defaultValue, i = e !== M;\n if ((s & g) !== 0) {\n if (i) return e;\n throw new S(_.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if ((s & D) !== 0) {\n if (i) return e;\n throw this._error;\n }\n return this._value;\n }\n peek() {\n return this._value;\n }\n get state() {\n const t = f.current;\n t?.addDependency(this);\n const s = this.flags;\n return (s & d) !== 0 ? A.RESOLVED : (s & g) !== 0 ? A.PENDING : (s & D) !== 0 ? A.REJECTED : A.IDLE;\n }\n get hasError() {\n const t = f.current;\n if (t?.addDependency(this), (this.flags & (D | b)) !== 0) return !0;\n const s = this._deps;\n if (!s.hasComputeds) return !1;\n const e = s.size;\n for (let i = 0; i < e; i++) if (s.getAt(i)?.node.hasError) return !0;\n return !1;\n }\n get isValid() {\n return !this.hasError;\n }\n get errors() {\n const t = f.current;\n t?.addDependency(this);\n const s = this._error, e = this._deps;\n if (!e.hasComputeds)\n return s == null ? K : Object.freeze([s]);\n const i = [];\n s != null && i.push(s);\n const r = e.size;\n for (let n = 0; n < r; n++) {\n const o = e.getAt(n);\n if (o == null) continue;\n const u = o.node;\n (u.flags & O) !== 0 && u.hasError && this._collectErrorsFromDep(u, i);\n }\n return i.length === 0 ? K : Object.freeze(i);\n }\n _collectErrorsFromDep(t, s) {\n const e = t.errors, i = e.length;\n for (let r = 0; r < i; r++) {\n const n = e[r];\n n != null && !s.includes(n) && s.push(n);\n }\n }\n get lastError() {\n const t = f.current;\n return t?.addDependency(this), this._error;\n }\n get isPending() {\n const t = f.current;\n return t?.addDependency(this), (this.flags & g) !== 0;\n }\n get isResolved() {\n const t = f.current;\n return t?.addDependency(this), (this.flags & d) !== 0;\n }\n invalidate() {\n this.flags |= H, this._markDirty();\n }\n dispose() {\n (this.flags & B) === 0 && (this._deps.disposeAll(), this._slots != null && this._slots.clear(), this.flags = B | E | p, this._error = null, this._value = void 0, this._hotIndex = -1);\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n addDependency(t) {\n const s = this._trackEpoch;\n if (t._lastSeenEpoch === s) return;\n t._lastSeenEpoch = s;\n const e = this._trackCount++, i = this._deps, r = i.getAt(e);\n if (r != null && r.node === t) r.version = t.version;\n else if (!i.claimExisting(t, e)) {\n const n = new X(t, t.version, t.subscribe(this));\n i.insertNew(e, n);\n }\n (t.flags & O) !== 0 && (i.hasComputeds = !0);\n }\n _recompute() {\n if (this.isRecomputing) return;\n this.flags = (this.flags | y) & ~H, this._trackEpoch = k(), this._trackCount = 0, this._deps.prepareTracking(), this._hotIndex = -1;\n let t = !1;\n try {\n const s = f.run(this, this._fn);\n this._deps.truncateFrom(this._trackCount), this._deps.seal(), t = !0, ht(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!t) try {\n this._deps.truncateFrom(this._trackCount);\n } catch {\n }\n this._handleError(s, _.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n this._trackEpoch = T.UNINITIALIZED, this._trackCount = 0, this.flags &= ~y;\n }\n }\n _handleAsyncComputation(t) {\n this.flags = (this.flags | g) & ~(p | E | d | D), this._notifySubscribers(void 0, void 0), this._asyncRetryCount = 0, this._promiseId = (this._promiseId + 1) % W.MAX_PROMISE_ID;\n const s = this._promiseId;\n t.then((e) => {\n if (s === this._promiseId) {\n if (this._isDirty()) {\n const i = rt();\n return this._lastDriftEpoch !== i && (this._lastDriftEpoch = i, this._asyncRetryCount = 0), this._asyncRetryCount++ < this._maxAsyncRetries ? this._markDirty() : this._handleError(new S(`Async drift threshold exceeded after ${this._maxAsyncRetries} retries.`), _.COMPUTED_ASYNC_COMPUTATION_FAILED);\n }\n this._finalizeResolution(e), this._notifySubscribers(e, void 0);\n }\n }, (e) => s === this._promiseId && this._handleError(e, _.COMPUTED_ASYNC_COMPUTATION_FAILED));\n }\n _handleError(t, s, e = !1) {\n const i = m(t, S, s);\n if (!e && !this.isRejected && (this.version = G(this.version)), this._error = i, this.flags = this.flags & ~(p | E | g | d) | D | b, this._onError) try {\n this._onError(i);\n } catch (r) {\n console.error(_.CALLBACK_ERROR_IN_ERROR_HANDLER, r);\n }\n if (e) throw i;\n this._notifySubscribers(void 0, void 0);\n }\n _finalizeResolution(t) {\n const s = this.flags;\n ((s & d) === 0 || !this._equal(this._value, t)) && (this.version = G(this.version)), this._value = t, this._error = null, this.flags = (s | d) & ~(p | E | g | D | b);\n }\n execute() {\n this._markDirty();\n }\n _markDirty() {\n const t = this.flags;\n (t & (y | E)) === 0 && (this.flags = t | E, this._notifySubscribers(void 0, void 0));\n }\n _isDirty() {\n const t = this._deps;\n return t.hasComputeds ? this._deepDirtyCheck() : t.isDirtyFast();\n }\n _deepDirtyCheck() {\n const t = this._deps, s = f.current;\n f.current = null;\n try {\n const e = t.size;\n for (let i = 0; i < e; i++) {\n const r = t.getAt(i);\n if (r == null) continue;\n const n = r.node;\n if ((n.flags & O) !== 0) try {\n n.value;\n } catch {\n }\n if (n.version !== r.version)\n return this._hotIndex = i, !0;\n }\n return this._hotIndex = -1, !1;\n } finally {\n f.current = s;\n }\n }\n};\nfunction Pt(t, s = {}) {\n return new Nt(t, s);\n}\nvar yt = class extends Y {\n constructor(t, s = {}) {\n super(), this[ut] = !0, this._cleanup = null, this._deps = new lt(), this._currentEpoch = T.UNINITIALIZED, this._lastFlushEpoch = T.UNINITIALIZED, this._fn = t, this._onError = s.onError ?? null, this._sync = s.sync ?? !1, this._maxExecutions = s.maxExecutionsPerSecond ?? C.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = s.maxExecutionsPerFlush ?? C.MAX_EXECUTIONS_PER_EFFECT, this._executionsInEpoch = 0, this._executionCount = 0, this._windowStart = 0, this._windowCount = 0, this._execId = 0, this._trackCount = 0, this._sync ? this._notifyCallback = () => this.execute() : this._notifyCallback = () => w.schedule(this), Q.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.isDisposed) throw new v(_.EFFECT_DISPOSED);\n this.execute(!0);\n }\n dispose() {\n this.isDisposed || (this.flags |= I.DISPOSED, this._execCleanup(), this._deps?.disposeAll());\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n addDependency(t) {\n if ((this.flags & I.EXECUTING) === 0) return;\n const s = this._currentEpoch;\n if (t._lastSeenEpoch === s) return;\n t._lastSeenEpoch = s;\n const e = this._trackCount++, i = this._deps;\n let r;\n switch (e) {\n case 0:\n r = i._s0;\n break;\n case 1:\n r = i._s1;\n break;\n case 2:\n r = i._s2;\n break;\n case 3:\n r = i._s3;\n break;\n default:\n r = i.getAt(e);\n }\n r != null && r.node === t ? r.version = t.version : i.claimExisting(t, e) || this._insertNewDependency(t, e), t.isComputed && (i.hasComputeds = !0);\n }\n _insertNewDependency(t, s) {\n let e;\n try {\n const i = t.subscribe(this._notifyCallback);\n e = new X(t, t.version, i);\n } catch (i) {\n const r = m(i, v, _.EFFECT_EXECUTION_FAILED);\n if (console.error(r), this._onError) try {\n this._onError(r);\n } catch {\n }\n e = new X(t, t.version, void 0);\n }\n this._deps.insertNew(s, e);\n }\n execute(t = !1) {\n const s = this.flags;\n if ((s & (I.DISPOSED | I.EXECUTING)) !== 0) return;\n const e = this._deps;\n if (!t && e.size > 0 && !this._isDirty()) return;\n this._checkInfiniteLoops(), this.flags = s | I.EXECUTING, this._execCleanup(), this._currentEpoch = k(), this._trackCount = 0, e.prepareTracking(), this._hotIndex = -1;\n let i = !1;\n try {\n const r = f.run(this, this._fn);\n e.truncateFrom(this._trackCount), e.seal(), i = !0, ht(r) ? this._handleAsyncResult(r) : this._cleanup = typeof r == \"function\" ? r : null;\n } catch (r) {\n if (!i) try {\n e.truncateFrom(this._trackCount);\n } catch {\n }\n this._handleExecutionError(r), this._cleanup = null;\n } finally {\n this.flags &= ~I.EXECUTING;\n }\n }\n _isDirty() {\n const t = this._deps;\n return t.hasComputeds ? this._deepDirtyCheck() : t.isDirtyFast();\n }\n _handleAsyncResult(t) {\n const s = ++this._execId;\n t.then((e) => {\n if (s !== this._execId || this.isDisposed) {\n if (typeof e == \"function\") try {\n e();\n } catch (i) {\n this._handleExecutionError(i, _.EFFECT_CLEANUP_FAILED);\n }\n return;\n }\n typeof e == \"function\" && (this._cleanup = e);\n }, (e) => s === this._execId && this._handleExecutionError(e));\n }\n _deepDirtyCheck() {\n const t = f.current;\n f.current = null;\n const s = this._deps;\n try {\n const e = s.size;\n for (let i = 0; i < e; i++) {\n const r = s.getAt(i);\n if (r == null) continue;\n const n = r.node;\n if (n.isComputed && this._tryPullComputed(n), n.version !== r.version)\n return this._hotIndex = i, !0;\n }\n return !1;\n } finally {\n f.current = t;\n }\n }\n _tryPullComputed(t) {\n try {\n t.value;\n } catch {\n }\n }\n _execCleanup() {\n const t = this._cleanup;\n if (t != null) {\n this._cleanup = null;\n try {\n t();\n } catch (s) {\n this._handleExecutionError(s, _.EFFECT_CLEANUP_FAILED);\n }\n }\n }\n _checkInfiniteLoops() {\n const t = rt();\n this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), vt() > C.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++;\n }\n _checkFrequencyLimit() {\n if (!Number.isFinite(this._maxExecutions)) return;\n const t = Date.now();\n if (t - this._windowStart >= et.EFFECT_FREQUENCY_WINDOW) {\n this._windowStart = t, this._windowCount = 1;\n return;\n }\n if (++this._windowCount > this._maxExecutions) {\n const s = new v(_.EFFECT_FREQUENCY_LIMIT_EXCEEDED);\n throw this.dispose(), this._handleExecutionError(s), s;\n }\n }\n get executionCount() {\n return this._executionCount;\n }\n get isExecuting() {\n return (this.flags & I.EXECUTING) !== 0;\n }\n _throwInfiniteLoopError(t) {\n const s = new v(`Infinite loop detected (${t}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${V}`);\n throw this.dispose(), console.error(s), s;\n }\n _handleExecutionError(t, s = _.EFFECT_EXECUTION_FAILED) {\n const e = m(t, v, s);\n if (console.error(e), this._onError) try {\n this._onError(e);\n } catch (i) {\n console.error(m(i, v, _.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n};\nfunction Mt(t, s = {}) {\n if (typeof t != \"function\") throw new v(_.EFFECT_MUST_BE_FUNCTION);\n const e = new yt(t, s);\n return e.execute(), e;\n}\nvar At = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), bt = /* @__PURE__ */ Symbol.for(\"atom-effect/writable\");\nfunction ct(t, s, e, i) {\n if (e === s.length) return i;\n const r = s[e], n = t != null && typeof t == \"object\" ? t : {}, o = n[r], u = ct(o, s, e + 1, i);\n if (Object.is(o, u)) return t;\n if (Array.isArray(n)) {\n const l = n.slice(), h = Number.parseInt(r, 10);\n return Number.isNaN(h) ? l[r] = u : l[h] = u, l;\n }\n return {\n ...n,\n [r]: u\n };\n}\nfunction R(t, s) {\n let e = t;\n const i = s.length;\n for (let r = 0; r < i; r++) {\n if (e == null) return;\n e = e[s[r]];\n }\n return e;\n}\nfunction _t(t, s) {\n const e = s.includes(\".\") ? s.split(\".\") : [s], i = /* @__PURE__ */ new Set(), r = () => {\n i.forEach((n) => n()), i.clear();\n };\n return {\n get value() {\n return R(t.value, e);\n },\n set value(n) {\n const o = t.peek(), u = ct(o, e, 0, n);\n u !== o && (t.value = u);\n },\n peek: () => R(t.peek(), e),\n subscribe(n) {\n const o = t.subscribe((u, l) => {\n const h = R(u, e), c = R(l, e);\n Object.is(h, c) || n(h, c);\n });\n return i.add(o), () => {\n o(), i.delete(o);\n };\n },\n subscriberCount: () => i.size,\n dispose: r,\n [Symbol.dispose]: r,\n [At]: !0,\n [bt]: !0\n };\n}\nvar xt = (t, s) => _t(t, s), Bt = (t) => (s) => _t(t, s);\nfunction Ht(t) {\n if (typeof t != \"function\") throw new TypeError(_.BATCH_CALLBACK_MUST_BE_FUNCTION);\n const s = w;\n s.startBatch();\n try {\n return t();\n } finally {\n s.endBatch();\n }\n}\nexport {\n A as AsyncState,\n N as AtomError,\n S as ComputedError,\n et as DEBUG_CONFIG,\n Q as DEBUG_RUNTIME,\n v as EffectError,\n C as SCHEDULER_CONFIG,\n P as SchedulerError,\n Ft as atom,\n _t as atomLens,\n Ht as batch,\n xt as composeLens,\n Pt as computed,\n Mt as effect,\n R as getPathValue,\n wt as isAtom,\n Ut as isComputed,\n Lt as isEffect,\n Bt as lensFor,\n w as scheduler,\n ct as setDeepValue,\n Rt as untracked\n};\n\n//# sourceMappingURL=index.mjs.map","import type { ReadonlyAtom } from '@but212/atom-effect';\nimport { isAtom } from '@but212/atom-effect';\nimport type { RenderRoute, RouteDefinition, TemplateRoute } from '@/types';\n\n// ============================================================================\n// Reactive helpers\n// ============================================================================\n\n/** Checks if a given value is a reactive node (Atom or Computed). */\nexport const isReactive = (v: unknown): v is ReadonlyAtom<unknown> => isAtom(v);\n\n/** Checks if value is a Promise. */\nexport const isPromise = <T>(v: unknown): v is Promise<T> =>\n v !== null && typeof v === 'object' && typeof (v as Record<string, unknown>).then === 'function';\n\n/** Generates a human-readable selector string for debug. */\nexport function getSelector(el: Element): string {\n const tag = el.localName;\n const id = el.id;\n if (id) return `${tag}#${id}`;\n const className = el.className;\n if (typeof className === 'string') {\n const trimmed = className.trim();\n if (trimmed) {\n return `${tag}.${trimmed.replace(/\\s+/g, '.')}`;\n }\n }\n return tag;\n}\n\nexport const hasOwn = Object.prototype.hasOwnProperty;\n\nexport const isTemplateRoute = (r: RouteDefinition): r is TemplateRoute =>\n 'template' in r && typeof r.template === 'string';\nexport const isRenderRoute = (r: RouteDefinition): r is RenderRoute =>\n 'render' in r && typeof r.render === 'function';\n\n/**\n * Shallow equality check for objects.\n * Optimized to avoid Object.keys() array allocations.\n */\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n\n let countA = 0;\n for (const k in objA) {\n if (hasOwn.call(objA, k)) {\n if (!hasOwn.call(objB, k) || objA[k] !== objB[k]) return false;\n countA++;\n }\n }\n\n let countB = 0;\n for (const k in objB) {\n if (hasOwn.call(objB, k)) countB++;\n }\n\n return countA === countB;\n}\n","/**\n * Constants for atom-effect-jquery\n */\n\n// ============================================================================\n// Log Prefixes\n// ============================================================================\n\n/**\n * Log prefixes keyed by subsystem.\n * Each prefix names the specific subsystem that emitted the message so that\n * console output is unambiguous regardless of which binding triggered it.\n */\nexport const LOG_PREFIXES = {\n ROUTE: '[atom-route]',\n BINDING: '[atom-binding]',\n LIST: '[atom-list]',\n MOUNT: '[atom-mount]',\n} as const;\n\nexport const ROUTE_DEFAULTS = Object.freeze({\n mode: 'hash',\n basePath: '',\n autoBindLinks: false,\n activeClass: 'active',\n} as const);\n\nexport const INPUT_DEFAULTS = { EVENT: 'input', DEBOUNCE: 0 } as const;\nexport const DEBUG_DEFAULTS = { HIGHLIGHT_DURATION_MS: 500 } as const;\n\nexport const VALID_INPUT_TAGS: ReadonlySet<string> = new Set(['input', 'select', 'textarea']);\n\nexport const URL_PROPS: ReadonlySet<string> = new Set([\n 'src',\n 'href',\n 'action',\n 'formaction',\n 'data',\n 'poster',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n 'xlink:href',\n]);\n\nexport const DANGEROUS_PROPS: ReadonlySet<string> = new Set([\n 'innerHTML',\n 'outerHTML',\n 'srcdoc',\n '__proto__',\n 'constructor',\n 'prototype',\n]);\n\n/**\n * Centralized error messages for the entire library.\n * Structured by subsystem to facilitate easy debugging and consistent error reporting.\n *\n * Each entry is a function that takes dynamic data (e.g. element name) to produce\n * a human-readable and actionable error message.\n */\nexport const ERROR_MESSAGES = {\n /** Errors related to the SPA Router. */\n ROUTE: {\n NOT_FOUND: (n: string) => `Route \"${n}\" not found and no notFound route configured`,\n TEMPLATE_NOT_FOUND: (s: string) => `Template \"${s}\" not found`,\n TARGET_NOT_FOUND: (s: string) => `Target element \"${s}\" not found`,\n MALFORMED_URI: (r: string) => `Malformed URI component: ${r}`,\n },\n /** Security-related errors, specifically from the CSS/HTML sanitizer. */\n SECURITY: {\n UNSAFE_CONTENT: () => 'Unsafe content neutralized during sanitization.',\n BLOCKED_CSS_VALUE: (p: string) => `Blocked dangerous value in CSS style property \"${p}\".`,\n BLOCKED_EVENT_HANDLER: (n: string) =>\n `Blocked setting dangerous event handler attribute/property \"${n}\".`,\n BLOCKED_PROTOCOL: (n: string) => `Blocked dangerous protocol in \"${n}\".`,\n BLOCKED_PROP: (n: string) =>\n `Blocked setting dangerous property \"${n}\". Use html binding for sanitized HTML.`,\n },\n /** General errors from reactive bindings (text, map, input, etc). */\n BINDING: {\n INVALID_INPUT_ELEMENT: (t: string) => `Val binding used on non-input element <${t}>.`,\n MISSING_SOURCE: (m: string) => `[${m}] source is required when prop/name is a string.`,\n MISSING_CONDITION: (m: string) => `[${m}] condition is required when className is a string.`,\n UPDATER_ERROR: (d: string, s?: boolean) =>\n `Updater threw in binding \"${d}\"${s ? ' (static)' : ''}`,\n CLEANUP_ERROR: (i?: string) => `Binding cleanup error${i ? `: ${i}` : ''}`,\n PARSE_ERROR: (d?: string) => `parse() threw during DOM→Atom sync${d ? `: ${d}` : ''}`,\n },\n /** Errors specific to atomList rendering and reconciliation. */\n LIST: {\n DUPLICATE_KEY: (k: string | number, i: number, c: string) =>\n `Duplicate key \"${k}\" at index ${i} in atomList <${c}>.`,\n },\n /** Lifecycle errors from atomMount/atomUnmount. */\n MOUNT: {\n ERROR: (n?: string) => `Mount error${n ? ` in component <${n}>` : ''}`,\n CLEANUP_ERROR: (n?: string) => `Cleanup error${n ? ` in component <${n}>` : ''}`,\n },\n /** Internal architectural errors from the core engine or registry. */\n CORE: {\n EFFECT_DISPOSE_ERROR: (i?: string) => `Effect dispose error${i ? `: ${i}` : ''}`,\n },\n} as const;\n","import { DEBUG_DEFAULTS } from '@/constants';\nimport { getSelector } from '@/utils';\n\n// ============================================================================\n// Environment utilities\n// ============================================================================\n\nconst IS_BROWSER = typeof window !== 'undefined';\nconst HIGHLIGHT_TRANSITION = `${DEBUG_DEFAULTS.HIGHLIGHT_DURATION_MS / 1000}s`;\n\nfunction getInitialState(): boolean {\n // biome-ignore lint/suspicious/noExplicitAny: globalThis is not typed\n const g = globalThis as any;\n if (IS_BROWSER && g.window?.__ATOM_DEBUG__ === true) return true;\n try {\n if (import.meta.env?.VITE_ATOM_DEBUG === 'true') return true;\n } catch {}\n try {\n if (g.process?.env?.VITE_ATOM_DEBUG === 'true') return true;\n } catch {}\n return false;\n}\n\n// ============================================================================\n// DebugController — Class-based singleton for JIT optimization\n// ============================================================================\n\nclass DebugController {\n private _enabled = false;\n private _lastState = false;\n\n constructor() {\n this._enabled = getInitialState();\n this._lastState = this._enabled;\n this._applyMethods(this._enabled);\n }\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n set enabled(v: boolean) {\n if (this._enabled !== v) {\n this._enabled = v;\n this._applyMethods(v);\n }\n }\n\n /** Normal logs (No-op in production) */\n public log: (p: string, ...a: unknown[]) => void = () => {};\n\n /** Atom state change logs (No-op in production) */\n public atomChanged: (p: string, n: string | undefined, o: unknown, v: unknown) => void = () => {};\n\n /** DOM update logs with highlighting (No-op in production) */\n public domUpdated: (p: string, t: Element | JQuery<Element>, type: string, v: unknown) => void =\n () => {};\n\n /** Resource cleanup logs (No-op in production) */\n public cleanup: (p: string, s: string) => void = () => {};\n\n /** Warnings (Always logged) */\n warn(p: string, m: string, ...r: unknown[]): void {\n console.warn(`${p} ${m}`, ...r);\n }\n\n /** Errors (Always logged) */\n error(p: string, m: string, c: unknown): void {\n console.error(`${p} ${m}`, c);\n }\n\n private _applyMethods(isEnabled: boolean) {\n if (isEnabled) {\n this.log = (p, ...a) => console.log(p, ...a);\n this.atomChanged = (p, n, o, v) =>\n console.log(`${p} Atom \"${n ?? 'anonymous'}\" changed:`, o, '→', v);\n this.domUpdated = (p, t, type, v) => {\n const el = t instanceof Element ? t : (t[0] as Element | undefined);\n if (el?.isConnected) {\n console.log(`${p} DOM updated: ${getSelector(el)}.${type} =`, v);\n this._highlightElement(el);\n }\n };\n this.cleanup = (p, s) => console.log(`${p} Cleanup: ${s}`);\n } else {\n this.log = () => {};\n this.atomChanged = () => {};\n this.domUpdated = () => {};\n this.cleanup = () => {};\n }\n }\n\n private _highlightElement(el: Element): void {\n if (!el.isConnected) return;\n injectStyle();\n\n const exR = rafs.get(el);\n const exT = timers.get(el);\n if (exR !== undefined) cancelAnimationFrame(exR);\n if (exT !== undefined) {\n clearTimeout(exT);\n timers.delete(el);\n }\n\n rafs.set(\n el,\n requestAnimationFrame(() => {\n rafs.delete(el);\n if (!el.isConnected) return;\n el.classList.add(HIGHLIGHT_CLASS);\n timers.set(\n el,\n setTimeout(() => {\n if (el.isConnected) el.classList.remove(HIGHLIGHT_CLASS);\n timers.delete(el);\n }, DEBUG_DEFAULTS.HIGHLIGHT_DURATION_MS)\n );\n })\n );\n }\n}\n\nexport const debug = new DebugController();\n\n// ============================================================================\n// Highlighting logic\n// ============================================================================\n\nconst HIGHLIGHT_CLASS = 'atom-debug-highlight',\n H_ATTR = 'data-atom-debug';\nlet styleInjected = false;\n\nfunction injectStyle(): void {\n if (styleInjected || !IS_BROWSER) return;\n if (document.querySelector(`style[${H_ATTR}]`)) {\n styleInjected = true;\n return;\n }\n const s = Object.assign(document.createElement('style'), {\n textContent: `.${HIGHLIGHT_CLASS}{outline:2px solid rgba(255,68,68,0.8);outline-offset:1px;transition:outline ${HIGHLIGHT_TRANSITION} ease-out}`,\n });\n s.setAttribute(H_ATTR, '');\n document.head.appendChild(s);\n styleInjected = true;\n}\n\nconst timers = new WeakMap<Element, ReturnType<typeof setTimeout>>(),\n rafs = new WeakMap<Element, number>();\n","import {\n atomLens,\n batch,\n composeLens,\n computed,\n atom as createAtom,\n effect,\n isAtom,\n isComputed,\n lensFor,\n untracked,\n} from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { AtomOptions, WritableAtom } from '@/types';\n// isReactive is defined in utils.ts because core's isAtom already covers computed\n// atoms (ComputedAtom carries ATOM_BRAND), making a separate isComputed check redundant.\nimport { isReactive } from '@/utils';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// atom factory + debug namespace\n// ============================================================================\n\n/**\n * Local wrapper around core's `atom` factory.\n *\n * This wrapper exists to attach the `$.atom.debug` accessor directly to the\n * function object at runtime. TypeScript requires a double cast for this\n * augmentation, but `NamespaceExtensions` ensures all other fields are type-safe.\n *\n * `options` is not defaulted here — core's `atom` defaults `options` to `{}`\n * internally, so passing `undefined` is safe and avoids an extra allocation\n * per call.\n */\nfunction atom<T>(v: T, opts?: AtomOptions): WritableAtom<T> {\n return createAtom(v, opts);\n}\n\nObject.defineProperty(atom, 'debug', {\n enumerable: true,\n configurable: true,\n get: () => debug.enabled,\n set: (v: boolean) => {\n debug.enabled = v;\n },\n});\n\n/** Resolves after microtask effects flush. Fast Promise-based scheduling. */\nexport const nextTick = (): Promise<void> => Promise.resolve();\n\n// Register static extensions to jQuery\n$.extend({\n atom: atom as unknown as JQueryStatic['atom'],\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed,\n isReactive,\n nextTick,\n atomLens,\n composeLens,\n lensFor,\n});\n","/**\n * Array pool for reusing temporarily allocated arrays to avoid GC pressure.\n * Ported from @but212/atom-effect core.\n *\n * @template T - Element type.\n */\nexport class ArrayPool<T> {\n private readonly pool: T[][] = [];\n\n constructor(\n private readonly limit = 50,\n private readonly capacity = 256\n ) {}\n\n /** Acquires array from pool or returns a new one. */\n acquire(): T[] {\n return this.pool.pop() ?? [];\n }\n\n /** Releases array back to pool if within capacity and limit. */\n release(arr: T[]): void {\n // Fast capacity check first to avoid frozen check cost\n if (arr.length > this.capacity || this.pool.length >= this.limit) return;\n if (Object.isFrozen(arr)) return;\n\n arr.length = 0;\n this.pool.push(arr);\n }\n\n /** Clears the pool. */\n reset(): void {\n this.pool.length = 0;\n }\n}\n","/**\n * Generic object pool for reusing fixed-shape plain objects.\n *\n * Design constraints:\n * - Pooled objects MUST have a fixed property shape (monomorphic).\n * Mixing shapes in a single pool will de-optimize V8's hidden classes.\n * - The `reset` callback MUST restore the object to a clean, reusable state.\n * Failing to do so leaks stale references and causes subtle bugs.\n * - The pool is LIFO (stack) for better CPU cache locality.\n *\n * @template T - Object type to pool. Must be a plain object with a fixed shape.\n */\nexport class ObjectPool<T extends object> {\n private readonly pool: T[] = [];\n\n constructor(\n private readonly factory: () => T,\n private readonly reset: (obj: T) => void,\n private readonly limit = 64\n ) {}\n\n /** Acquires object from pool or creates a new one. */\n acquire(): T {\n return this.pool.pop() ?? this.factory();\n }\n\n /** Releases object back to pool after reset. */\n release(obj: T): void {\n if (this.pool.length < this.limit) {\n this.reset(obj);\n this.pool.push(obj);\n }\n }\n\n /** Drains all retained objects. */\n drain(): void {\n if (this.pool.length > 0) {\n this.pool.length = 0;\n }\n }\n\n get size(): number {\n return this.pool.length;\n }\n}\n","import type { EffectObject } from '@/types';\nimport { ArrayPool } from '../utils/array-pool';\nimport { ObjectPool } from '../utils/object-pool';\n\n// ============================================================================\n// Array Pools\n// ============================================================================\n\nexport const effectsArrayPool = new ArrayPool<EffectObject>();\nexport const cleanupsArrayPool = new ArrayPool<() => void>();\n\n// ============================================================================\n// Object Pools\n// ============================================================================\n\n/**\n * Per-element record of all reactive resources that must be released on cleanup.\n * Fields are optional to avoid allocating arrays for the common case where only\n * one resource type is used.\n *\n * Extracted here so that both the pool and registry share the same type.\n */\nexport interface BindingRecord {\n effects: EffectObject[] | undefined;\n cleanups: Array<() => void> | undefined;\n componentCleanup: (() => void) | undefined;\n}\n\n/**\n * Pool for BindingRecord objects.\n * Uses a fixed hidden class for V8 optimization.\n */\nexport const bindingRecordPool = new ObjectPool<BindingRecord>(\n () => {\n return {\n effects: undefined,\n cleanups: undefined,\n componentCleanup: undefined,\n };\n },\n (r) => {\n r.effects = undefined;\n r.cleanups = undefined;\n r.componentCleanup = undefined;\n },\n 128\n);\n","import { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport {\n type BindingRecord,\n bindingRecordPool,\n cleanupsArrayPool,\n effectsArrayPool,\n} from '@/internal/pool';\nimport type { EffectObject } from '@/types';\nimport { getSelector } from '@/utils';\nimport { debug } from '@/utils/debug';\n\nlet autoCleanupScheduled = false;\n\n/**\n * Ensures that the MutationObserver for automatic cleanup is active.\n * Lazily triggered on the first reactive binding registration.\n */\nfunction ensureAutoCleanup(): void {\n if (autoCleanupScheduled) return;\n autoCleanupScheduled = true;\n if (typeof document !== 'undefined' && document.body) {\n enableAutoCleanup(document.body);\n }\n}\n\n/**\n * CSS class added to every element that has at least one active binding.\n * Used by `querySelectorAll` in `cleanupDescendants` for efficient subtree traversal.\n * Internal use only.\n */\nconst AES_BOUND = '_aes-bound';\n\n// BindingRecord type is defined in @/internal/pool to co-locate with its ObjectPool.\n\n// ============================================================================\n// BindingRegistry\n// ============================================================================\n\n/**\n * Central registry mapping DOM elements to their reactive binding records.\n *\n * Design goals:\n * - Zero memory leaks: all collections use WeakMap/WeakSet keyed by Element.\n * - Minimal allocations in the hot tracking path.\n * - O(bound-descendants) cleanup via a single querySelectorAll pass.\n */\nclass BindingRegistry {\n private records = new WeakMap<Element, BindingRecord>();\n private preservedNodes = new WeakSet<Node>();\n private ignoredNodes = new WeakSet<Node>();\n\n keep(node: Node): void {\n this.preservedNodes.add(node);\n }\n isKept(node: Node): boolean {\n return this.preservedNodes.has(node);\n }\n markIgnored(node: Node): void {\n this.ignoredNodes.add(node);\n }\n isIgnored(node: Node): boolean {\n return this.ignoredNodes.has(node);\n }\n\n private getOrCreateRecord(el: Element): BindingRecord {\n ensureAutoCleanup();\n let res = this.records.get(el);\n if (!res) {\n res = bindingRecordPool.acquire();\n this.records.set(el, res);\n el.classList.add(AES_BOUND);\n }\n return res;\n }\n\n /**\n * Registers a reactive effect with an element's record.\n * Effects are automatically disposed when the element is removed from the DOM.\n *\n * @param el - The DOM element to bind the effect to.\n * @param fx - The reactive effect instance.\n */\n trackEffect(el: Element, fx: EffectObject): void {\n const record = this.getOrCreateRecord(el);\n if (!record.effects) {\n record.effects = effectsArrayPool.acquire();\n }\n record.effects.push(fx);\n }\n\n /**\n * Registers an arbitrary cleanup function with an element's record.\n * Cleanups are executed when the element is removed from the DOM.\n *\n * @param el - The DOM element to bind the cleanup to.\n * @param fn - The cleanup function (e.g., event unbinding, timer clear).\n */\n trackCleanup(el: Element, fn: () => void): void {\n const record = this.getOrCreateRecord(el);\n if (!record.cleanups) {\n record.cleanups = cleanupsArrayPool.acquire();\n }\n record.cleanups.push(fn);\n }\n\n /**\n * Assigns a component-level cleanup function (e.g., from atomMount).\n * Unlike generic cleanups, there can only be one component cleanup per element.\n */\n setComponentCleanup(el: Element, fn: (() => void) | undefined): void {\n this.getOrCreateRecord(el).componentCleanup = fn;\n }\n\n hasBind(el: Element): boolean {\n return this.records.has(el);\n }\n\n cleanup(el: Element | Node): void {\n const isElement = el.nodeType === 1;\n const record = this.records.get(el as Element);\n\n // Consolidate deletions\n this.preservedNodes.delete(el);\n this.ignoredNodes.delete(el);\n\n if (!record) {\n if (isElement) (el as Element).classList.remove(AES_BOUND);\n return;\n }\n\n this.records.delete(el as Element);\n if (isElement) (el as Element).classList.remove(AES_BOUND);\n\n const selector = isElement ? getSelector(el as Element) : el.nodeName || 'Node';\n debug.cleanup(LOG_PREFIXES.BINDING, selector);\n\n if (record.componentCleanup) {\n try {\n record.componentCleanup();\n } catch (e) {\n debug.error(LOG_PREFIXES.MOUNT, ERROR_MESSAGES.MOUNT.CLEANUP_ERROR(selector), e);\n }\n }\n\n if (record.effects) {\n for (const fx of record.effects) {\n try {\n fx.dispose();\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.CORE.EFFECT_DISPOSE_ERROR(selector), e);\n }\n }\n effectsArrayPool.release(record.effects);\n record.effects = undefined;\n }\n\n if (record.cleanups) {\n for (const fn of record.cleanups) {\n try {\n fn();\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.CLEANUP_ERROR(selector), e);\n }\n }\n cleanupsArrayPool.release(record.cleanups);\n record.cleanups = undefined;\n }\n bindingRecordPool.release(record);\n }\n\n cleanupDescendants(el: Element | DocumentFragment | ShadowRoot): void {\n // Fast path: getElementsByClassName is significantly faster than querySelectorAll\n const live = (el as { getElementsByClassName?(name: string): HTMLCollectionOf<Element> })\n .getElementsByClassName\n ? (el as Element).getElementsByClassName(AES_BOUND)\n : el.querySelectorAll(`.${AES_BOUND}`);\n\n const len = live.length;\n if (len === 0) return;\n\n // Snapshot to avoid issues with live collection changing during cleanup\n // and to stabilize loop prediction.\n const snapshot = new Array<Element>(len);\n for (let i = 0; i < len; i++) snapshot[i] = live[i]!;\n\n for (let i = len - 1; i >= 0; i--) {\n const child = snapshot[i]!;\n // Pre-check registry to avoid unnecessary cleanup calls\n if (this.records.has(child)) {\n this.cleanup(child);\n } else {\n child.classList.remove(AES_BOUND);\n }\n }\n }\n\n cleanupTree(el: Element | Node): void {\n if (el.nodeType === 1 || el.nodeType === 11) {\n this.cleanupDescendants(el as Element | DocumentFragment | ShadowRoot);\n }\n this.cleanup(el);\n }\n}\n\n// ============================================================================\n// Singleton + auto-cleanup\n// ============================================================================\n\nexport const registry = new BindingRegistry();\n\nconst observers = new Map<Element, MutationObserver>();\n\n/**\n * Starts observing `root` for removed elements and automatically disposes\n * their reactive bindings when they leave the DOM.\n *\n * Multiple roots can be observed concurrently (e.g. for Micro-Frontends).\n * The `root` parameter is required (no default) to make the caller explicit\n * about which subtree is being observed.\n *\n * Idempotent: calling more than once with the same root has no effect.\n */\nexport function enableAutoCleanup(root: Element): void {\n // Support independent multiple roots for Micro-Frontend architectures.\n if (observers.has(root)) {\n return;\n }\n\n const observer = new MutationObserver((mutations) => {\n const reg = registry;\n for (let i = 0, mLen = mutations.length; i < mLen; i++) {\n const removedNodes = mutations[i]!.removedNodes;\n for (let j = 0, rLen = removedNodes.length; j < rLen; j++) {\n const node = removedNodes[j]!;\n\n // Only Element nodes can carry bindings marked by our AES_BOUND class.\n // We skip text and comment nodes early for performance.\n // Combined check for nodeType and connectivity (the two most common early exits)\n // to reduce separate branch prediction entries.\n if (node.nodeType !== 1 || (node as Element).isConnected) continue;\n\n const el = node as Element;\n\n // Combined flag checks for explicit detach (.keep) or manual cleanup traversal (.ignore).\n if (reg.isKept(el) || reg.isIgnored(el)) continue;\n\n reg.cleanupTree(el);\n }\n }\n });\n\n observer.observe(root, { childList: true, subtree: true });\n observers.set(root, observer);\n}\n\n/**\n * Marks the auto-cleanup as scheduled or already running.\n * Used internally and by reset helpers in tests.\n */\nexport function setAutoCleanupScheduled(scheduled: boolean): void {\n autoCleanupScheduled = scheduled;\n}\n\n/**\n * Stops all MutationObservers started by `enableAutoCleanup`.\n */\nexport function disableAutoCleanup(): void {\n observers.forEach((obs) => obs.disconnect());\n observers.clear();\n}\n","import { batch } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { registry } from '@/core/registry';\n\n/** Generic event handler type matching jQuery's internal handler signature. */\ntype EventHandler = JQuery.EventHandlerBase<unknown, JQuery.TriggeredEvent>;\n\n/**\n * Symbol marker attached to handlers registered by this library's internals.\n * Handlers carrying this marker are NOT wrapped in batch() — they already\n * manage atom writes directly and do not need an extra reactive flush.\n */\nexport const INTERNAL_HANDLER = Symbol('atom-effect-internal');\n\n/**\n * WeakMap from original handler function → batch-wrapped handler function.\n * Keys are functions (held alive by jQuery's internal event store for as long\n * as the handler is registered), so entries are naturally released when the\n * handler is removed via .off() and jQuery drops its reference.\n */\nconst handlerMap = new WeakMap<EventHandler, EventHandler>();\n\n// ============================================================================\n// Originals store\n// ============================================================================\n\n/**\n * Snapshot of jQuery prototype methods captured at `enablejQueryOverrides()`\n * time and restored by `disablejQueryOverrides()`.\n *\n * Stored as a typed object and captured into `orig` (a local const) inside\n * `enablejQueryOverrides` so that the override closures always reference the\n * pre-patch methods even if `disablejQueryOverrides()` later resets the\n * module-level `originals` variable to null.\n */\ntype OriginalMethods = {\n on: typeof $.fn.on;\n off: typeof $.fn.off;\n remove: typeof $.fn.remove;\n empty: typeof $.fn.empty;\n detach: typeof $.fn.detach;\n};\n\nlet originals: OriginalMethods | null = null;\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nconst getWrappedHandler = (fn: EventHandler): EventHandler => {\n // Fast check: is already wrapped?\n if ((fn as { [INTERNAL_HANDLER]?: boolean })[INTERNAL_HANDLER]) return fn;\n\n let wrapped = handlerMap.get(fn);\n if (!wrapped) {\n wrapped = function (this: unknown, ...args: unknown[]) {\n return batch(() => fn.apply(this, args as Parameters<EventHandler>));\n } as unknown as EventHandler;\n (wrapped as { [INTERNAL_HANDLER]?: boolean })[INTERNAL_HANDLER] = true;\n handlerMap.set(fn, wrapped);\n }\n return wrapped;\n};\n\nfunction wrapEventMap(map: Record<string, EventHandler>): Record<string, EventHandler> {\n const newMap: Record<string, EventHandler> = {};\n for (const k in map) if (map[k]) newMap[k] = getWrappedHandler(map[k]);\n return newMap;\n}\n\nfunction resolveOffEventMap(\n map: Record<string, EventHandler | undefined>\n): Record<string, EventHandler | undefined> {\n const newMap: Record<string, EventHandler | undefined> = {};\n for (const k in map) {\n const h = map[k];\n newMap[k] = h ? (handlerMap.get(h) ?? h) : undefined;\n }\n return newMap;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport function enablejQueryOverrides(): void {\n if (originals !== null) return;\n\n originals = {\n on: $.fn.on,\n off: $.fn.off,\n remove: $.fn.remove,\n empty: $.fn.empty,\n detach: $.fn.detach,\n };\n const orig = originals;\n\n $.fn.remove = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n const len = targets.length;\n for (let i = 0; i < len; i++) {\n const el = targets[i];\n if (el) {\n registry.markIgnored(el);\n registry.cleanupTree(el);\n }\n }\n return orig.remove.call(this, selector) ?? this;\n };\n\n $.fn.empty = function (this: JQuery) {\n const len = this.length;\n for (let i = 0; i < len; i++) {\n const el = this[i];\n if (el?.hasChildNodes()) registry.cleanupDescendants(el);\n }\n return orig.empty.call(this) ?? this;\n };\n\n $.fn.detach = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n const len = targets.length;\n for (let i = 0; i < len; i++) {\n const el = targets[i];\n if (el) registry.keep(el);\n }\n return orig.detach.call(this, selector) ?? this;\n };\n\n $.fn.on = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n if (types && typeof types === 'object') {\n args[0] = wrapEventMap(types as Record<string, EventHandler>);\n } else {\n const last = args.length - 1;\n if (last >= 0 && typeof args[last] === 'function') {\n args[last] = getWrappedHandler(args[last] as EventHandler);\n }\n }\n return orig.on.apply(this, args as Parameters<typeof $.fn.on>) ?? this;\n };\n\n $.fn.off = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n if (types && typeof types === 'object') {\n args[0] = resolveOffEventMap(types as Record<string, EventHandler | undefined>);\n } else {\n const last = args.length - 1;\n if (last >= 0 && typeof args[last] === 'function') {\n const fn = args[last] as EventHandler;\n args[last] = handlerMap.get(fn) ?? fn;\n }\n }\n return orig.off.apply(this, args as Parameters<typeof $.fn.off>) ?? this;\n };\n}\n\n/**\n * Restores all jQuery methods patched by `enablejQueryOverrides()`.\n * Primarily useful in test environments to reset state between suites.\n */\nexport function disablejQueryOverrides(): void {\n if (originals === null) return;\n\n $.fn.on = originals.on;\n $.fn.off = originals.off;\n $.fn.remove = originals.remove;\n $.fn.empty = originals.empty;\n $.fn.detach = originals.detach;\n\n originals = null;\n}\n","import type {\n AtomOptions as BaseAtomOptions,\n ComputedAtom,\n ComputedOptions,\n EffectObject,\n Paths,\n PathValue,\n ReadonlyAtom,\n WritableAtom,\n} from '@but212/atom-effect';\n\n// ============================================================================\n// Shared API Types\n// ============================================================================\n\nexport type EffectCleanup = () => void;\nexport type EffectResult = undefined | EffectCleanup;\nexport type EqualFn<T> = (a: T, b: T) => boolean;\n\nexport interface AtomOptions extends BaseAtomOptions {\n name?: string;\n}\n\n/**\n * Represents a value that can be tracked by the reactive system.\n * - T: Static value (one-time bind)\n * - ReadonlyAtom<T>: Reactive value (updates DOM when atom changes)\n * - () => T: Reactive function (updates DOM when any atom read inside changes)\n */\nexport type ReactiveValue<T> = T | ReadonlyAtom<T> | (() => T);\n\n/**\n * An extension of ReactiveValue that also supports Promises and async functions.\n * The binding system automatically handles the promise lifecycle, showing the\n * latest resolved value and ignoring stale ones (race condition protection).\n */\nexport type AsyncReactiveValue<T> =\n | T\n | ReadonlyAtom<T | Promise<T>>\n | Promise<T>\n | (() => T | Promise<T>);\nexport type PrimitiveValue = string | number | boolean | null | undefined;\ntype KeysOfType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];\n\nexport type CssValue =\n | AsyncReactiveValue<string | number>\n | [source: AsyncReactiveValue<number>, unit: string];\nexport type CssBindings = Record<string, CssValue>;\n\nexport interface BindingOptions<T = unknown> {\n text?: AsyncReactiveValue<unknown>;\n html?: AsyncReactiveValue<string>;\n class?: Record<string, AsyncReactiveValue<boolean>>;\n css?: CssBindings;\n attr?: Record<string, AsyncReactiveValue<PrimitiveValue>>;\n prop?: Record<string, AsyncReactiveValue<unknown>>;\n show?: AsyncReactiveValue<boolean>;\n hide?: AsyncReactiveValue<boolean>;\n val?: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>];\n checked?: WritableAtom<boolean>;\n form?: WritableAtom<T extends object ? T : unknown>;\n on?: Record<string, (e: JQuery.Event) => void>;\n}\n\nexport interface DisposableWritableAtom<T> extends WritableAtom<T>, Disposable {\n dispose(): void;\n}\n\nexport type ListKey = string | number;\nexport type ListRenderResult = string | Element | DocumentFragment | JQuery;\nexport type ListKeyFn<T> = (item: T, index: number) => ListKey;\n\nexport interface ListOptions<T> {\n key: KeysOfType<T, ListKey> | ListKeyFn<T>;\n render: (item: T, index: number) => ListRenderResult;\n bind?: ($el: JQuery, item: T, index: number) => void;\n update?: ($el: JQuery, item: T, index: number) => void;\n onAdd?: ($el: JQuery) => void;\n onRemove?: ($el: JQuery) => Promise<void> | void;\n empty?: ListRenderResult;\n events?: Record<string, (item: T, index: number, e: JQuery.TriggeredEvent) => void>;\n isEqual?: (a: T, b: T) => boolean;\n}\n\n/**\n * Options for `atomVal`, `atomChecked`, and `atomForm` bindings.\n */\nexport interface ValOptions<T> {\n /** Debounce duration in milliseconds for DOM -> Atom sync. Defaults to 0. */\n debounce?: number;\n /** jQuery event name(s) to listen to. Defaults to \"input\". */\n event?: string;\n /** Custom function to parse DOM string to atom type T. */\n parse?: (v: string) => T;\n /** Custom function to format atom type T to DOM string. */\n format?: (v: T) => string;\n /** Custom equality check to prevent redundant atom updates. */\n equal?: EqualFn<T>;\n}\n\nexport interface FetchOptions<T> {\n defaultValue: T;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS' | (string & {});\n headers?: Record<string, string>;\n transform?: (raw: unknown) => T;\n ajaxOptions?: JQuery.AjaxSettings | (() => JQuery.AjaxSettings);\n onError?: (err: unknown) => void;\n eager?: boolean;\n}\n\nexport interface FetchError extends Error {\n jqXHR?: JQuery.jqXHR;\n}\n\nexport type ComponentFn<P = Record<string, unknown>> = ($el: JQuery, props: P) => EffectResult;\n\nexport interface RouteLifecycle {\n onEnter?: (params: Record<string, string>, router: Router) => Record<string, string> | undefined;\n onLeave?: (router: Router) => boolean | undefined;\n}\n\nexport interface TemplateRoute extends RouteLifecycle {\n template: string;\n render?: never;\n onMount?: ($content: JQuery, onUnmount: (cleanupFn: () => void) => void, router: Router) => void;\n}\n\nexport interface RenderRoute extends RouteLifecycle {\n render: (\n container: HTMLElement,\n route: string,\n params: Record<string, string>,\n onUnmount: (cleanupFn: () => void) => void,\n router: Router\n ) => void;\n template?: never;\n}\n\nexport type RouteDefinition = TemplateRoute | RenderRoute;\n\nexport interface RouteConfig {\n target: string;\n default: string;\n routes: Record<string, RouteDefinition>;\n mode?: 'hash' | 'history';\n basePath?: string;\n notFound?: string;\n autoBindLinks?: boolean;\n activeClass?: string;\n beforeTransition?: (from: string, to: string) => void;\n afterTransition?: (from: string, to: string) => void;\n}\n\nexport interface Router {\n currentRoute: ReadonlyAtom<string>;\n queryParams: ReadonlyAtom<Record<string, string>>;\n navigate: (route: string) => void;\n destroy: () => void;\n}\n\nexport enum BindingFlags {\n None = 0,\n Focused = 1 << 0,\n Composing = 1 << 1,\n SyncingToAtom = 1 << 2,\n SyncingToDom = 1 << 3,\n Busy = Composing | SyncingToAtom | SyncingToDom,\n}\n\nexport interface BindingContext {\n readonly el: HTMLElement;\n readonly trackCleanup: (fn: EffectCleanup) => void;\n}\n\ndeclare global {\n interface JQueryStatic {\n atom: { <T>(v: T, opts?: AtomOptions): WritableAtom<T>; debug: boolean };\n computed<T>(fn: () => T, opts?: ComputedOptions<T>): ComputedAtom<T>;\n computed<T>(\n fn: () => Promise<T>,\n opts: ComputedOptions<T> & { defaultValue: T }\n ): ComputedAtom<T>;\n effect(fn: () => EffectResult): EffectObject;\n batch(fn: () => void): void;\n untracked<T>(fn: () => T): T;\n isAtom(v: unknown): boolean;\n isComputed(v: unknown): boolean;\n isReactive(v: unknown): boolean;\n nextTick(): Promise<void>;\n atomLens<T extends object, P extends Paths<T>>(\n atom: WritableAtom<T>,\n path: P\n ): DisposableWritableAtom<PathValue<T, P>>;\n composeLens<T extends object, P extends Paths<T>>(\n lens: WritableAtom<T>,\n path: P\n ): DisposableWritableAtom<PathValue<T, P>>;\n lensFor<T extends object>(\n atom: WritableAtom<T>\n ): <P extends Paths<T>>(p: P) => DisposableWritableAtom<PathValue<T, P>>;\n route(config: RouteConfig): Router;\n atomFetch<T>(\n url: string | (() => string),\n opts: FetchOptions<T>\n ): ComputedAtom<T> & { abort: () => void };\n }\n\n interface JQuery {\n atomText<T>(src: AsyncReactiveValue<T>, fmt?: (v: T) => string): this;\n atomHtml(src: AsyncReactiveValue<string>): this;\n atomClass(name: string, cond: AsyncReactiveValue<boolean>): this;\n atomClass(map: Record<string, AsyncReactiveValue<boolean>>): this;\n atomCss(prop: string, src: AsyncReactiveValue<string | number>, unit?: string): this;\n atomCss(map: CssBindings): this;\n atomAttr(name: string, src: AsyncReactiveValue<PrimitiveValue>): this;\n atomAttr(map: Record<string, AsyncReactiveValue<PrimitiveValue>>): this;\n atomProp<T>(name: string, src: AsyncReactiveValue<T>): this;\n atomProp<T>(map: Record<string, AsyncReactiveValue<T>>): this;\n atomShow(cond: AsyncReactiveValue<boolean>): this;\n atomHide(cond: AsyncReactiveValue<boolean>): this;\n atomVal<T>(atom: WritableAtom<T>, opts?: ValOptions<T>): this;\n atomChecked(atom: WritableAtom<boolean>): this;\n atomForm<T extends object>(atom: WritableAtom<T>, opts?: ValOptions<unknown>): this;\n atomOn(event: string, handler: (e: JQuery.Event) => void): this;\n atomBind<T = unknown>(opts: BindingOptions<T>): this;\n atomList<T>(src: ReadonlyAtom<T[]>, opts: ListOptions<T>): this;\n atomMount<P>(comp: ComponentFn<P>, props?: P): this;\n atomUnmount(): this;\n atomUnbind(): this;\n }\n}\n\nexport type { ComputedAtom, ComputedOptions, EffectObject, ReadonlyAtom, WritableAtom };\n","import { effect, untracked } from '@but212/atom-effect';\nimport { ERROR_MESSAGES, INPUT_DEFAULTS, LOG_PREFIXES } from '@/constants';\nimport { INTERNAL_HANDLER } from '@/core/jquery-patch';\nimport type { EffectObject, ValOptions, WritableAtom } from '@/types';\nimport { BindingFlags } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// Monotonically increasing counter used to generate per-instance event\n// namespaces, preventing cleanup of sibling bindings on the same element.\nlet instanceCounter = 0;\n\ntype InputEl = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\n/**\n * Marks a handler as library-internal so the jQuery patch skips batch() wrapping.\n * All handlers registered by InputBinding must be marked — unmarked handlers are\n * wrapped in batch() by the jQuery override, which is redundant and potentially\n * harmful here since InputBinding manages atom writes directly.\n */\nfunction markInternal(fn: Function): void {\n (fn as unknown as Record<symbol, true>)[INTERNAL_HANDLER] = true;\n}\n\nclass InputBinding<T> {\n private readonly $el: JQuery;\n private readonly el: InputEl;\n private readonly atom: WritableAtom<T>;\n private readonly isMultipleSelect: boolean;\n private readonly isTextControl: boolean;\n\n private readonly parse: (v: string) => T;\n private readonly format: (v: T) => string;\n private readonly equal: (a: T, b: T) => boolean;\n private readonly readDom: () => T;\n private readonly getRawDom: () => string | string[];\n private readonly writeDom: (val: T, formatted: string) => void;\n\n /**\n * Internal state flags using bitwise operations for zero-overhead tracking.\n * Tracks focus, IME composition, and sync direction to prevent infinite loops.\n */\n private flags = 0;\n private timeoutId: ReturnType<typeof setTimeout> | undefined = undefined;\n\n /** Per-instance jQuery event namespace — prevents cleanup collisions. */\n private readonly ns: string;\n private readonly handleInput: () => void;\n\n constructor($el: JQuery, atom: WritableAtom<T>, options: ValOptions<T>) {\n this.$el = $el;\n this.el = $el[0] as InputEl;\n this.atom = atom;\n const tagName = this.el.tagName;\n const isMultiple = tagName === 'SELECT' && (this.el as HTMLSelectElement).multiple;\n this.isMultipleSelect = isMultiple;\n this.isTextControl = tagName === 'INPUT' || tagName === 'TEXTAREA';\n this.ns = `.atomBind-${++instanceCounter}`;\n\n const debounce = options.debounce ?? 0;\n\n this.parse = options.parse ?? ((v: string) => v as unknown as T);\n\n // Specialize strategy functions at construction to avoid branches in sync hot-paths\n if (isMultiple) {\n this.format =\n options.format ?? ((v: T) => (Array.isArray(v) ? v : v ? [String(v)] : []).join(','));\n this.getRawDom = () => (this.$el.val() as string[] | null) || [];\n this.readDom = () => this.getRawDom() as unknown as T;\n this.writeDom = (val) => {\n this.$el.val(val as unknown as string[]);\n };\n } else {\n this.format = options.format ?? ((v: T) => String(v ?? ''));\n this.getRawDom = () => this.el.value;\n this.readDom = () => this.parse(this.el.value);\n\n if (this.isTextControl) {\n this.writeDom = (_val, formatted) => {\n if (this.flags & BindingFlags.Focused) {\n // --- Cursor Preservation Strategy ---\n try {\n const el = this.el as HTMLInputElement;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n el.value = formatted;\n const len = formatted.length;\n if (start !== null && end !== null) {\n el.setSelectionRange(start < len ? start : len, end < len ? end : len);\n }\n } catch {\n this.el.value = formatted;\n }\n } else {\n this.el.value = formatted;\n }\n };\n } else {\n this.writeDom = (_, formatted) => {\n this.el.value = formatted;\n };\n }\n }\n\n const baseEqual = options.equal ?? Object.is;\n if (isMultiple) {\n this.equal = (a: T, b: T): boolean => {\n if (baseEqual(a, b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!Object.is(a[i], b[i])) return false;\n }\n return true;\n }\n return false;\n };\n } else {\n this.equal = baseEqual;\n }\n\n if (debounce > 0) {\n this.handleInput = () => {\n if (this.flags & BindingFlags.Composing) return;\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(() => this.syncAtomFromDom(), debounce);\n };\n } else {\n this.handleInput = () => {\n if (!(this.flags & BindingFlags.Composing)) this.syncAtomFromDom();\n };\n }\n\n [\n this.handleFocus,\n this.handleBlur,\n this.handleCompositionStart,\n this.handleCompositionEnd,\n this.handleInput,\n ].forEach(markInternal);\n\n this.bindEvents(options.event ?? INPUT_DEFAULTS.EVENT);\n }\n\n // --- Event Handlers ---\n\n private readonly handleCompositionStart = () => {\n // We ignore input events while the user is still composing characters\n // (e.g., CJK character selection) to avoid syncing incomplete/partial data.\n this.flags |= BindingFlags.Composing;\n };\n\n private readonly handleCompositionEnd = () => {\n this.flags &= ~BindingFlags.Composing;\n // Trigger sync once composition is finished to capture the final character.\n this.handleInput();\n };\n\n private readonly handleFocus = () => {\n this.flags |= BindingFlags.Focused;\n };\n\n private readonly handleBlur = () => {\n this.flags &= ~BindingFlags.Focused;\n const wasComposing = !!(this.flags & BindingFlags.Composing);\n this.flags &= ~BindingFlags.Composing;\n\n // Ensure any pending debounced change is committed immediately on blur.\n this.flushPendingDebounce();\n\n // If composition was interrupted by blur (e.g. clicking away),\n // we must perform a final sync to stay consistent with the DOM.\n if (wasComposing && this.timeoutId === undefined) {\n this.syncAtomFromDom();\n }\n\n // Restore the strict formatted value from the atom.\n this.normalizeDomValue();\n };\n\n // --- Helpers ---\n\n private flushPendingDebounce(): void {\n if (this.timeoutId !== undefined) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n this.syncAtomFromDom();\n }\n }\n\n private normalizeDomValue(): void {\n const val = this.atom.peek();\n const formatted = this.format(val);\n const raw = this.getRawDom();\n\n if (this.isMultipleSelect) {\n if (!this.equal(raw as unknown as T, val)) {\n this.writeDom(val, formatted);\n }\n } else if (raw !== formatted) {\n this.writeDom(val, formatted);\n }\n }\n\n private syncAtomFromDom(): void {\n if (this.flags & BindingFlags.Busy) return;\n this.flags |= BindingFlags.SyncingToAtom;\n try {\n const parsed = this.readDom();\n if (!this.equal(this.atom.peek(), parsed)) {\n this.atom.value = parsed;\n }\n } catch (e) {\n debug.warn(\n LOG_PREFIXES.BINDING,\n ERROR_MESSAGES.BINDING.PARSE_ERROR(e instanceof Error ? e.message : String(e)),\n e\n );\n } finally {\n this.flags &= ~BindingFlags.SyncingToAtom;\n }\n }\n\n public readonly syncDomFromAtom = () => {\n const val = this.atom.value;\n\n untracked(() => {\n const formatted = this.format(val);\n const raw = this.getRawDom();\n\n // Skip if raw DOM matches formatted string (or array for select-multiple)\n if (this.isMultipleSelect) {\n if (this.equal(raw as unknown as T, val)) return;\n } else if (raw === formatted) {\n return;\n }\n\n // If focused, check if it's already \"functionally\" equal via parse to avoid\n // overwriting while user is typing (e.g. typing \"1.0\" when atom is 1)\n if (this.flags & BindingFlags.Focused) {\n try {\n if (this.equal(this.readDom(), val)) return;\n } catch {\n // Ignore parse errors on check-only read\n }\n }\n\n this.flags |= BindingFlags.SyncingToDom;\n try {\n this.writeDom(val, formatted);\n debug.domUpdated(LOG_PREFIXES.BINDING, this.$el, 'val', formatted);\n } finally {\n this.flags &= ~BindingFlags.SyncingToDom;\n }\n });\n };\n\n public readonly cleanup = () => {\n this.$el.off(this.ns);\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n };\n\n private bindEvents(eventName: string): void {\n const ns = this.ns;\n const namespacedEvents = eventName\n .trim()\n .split(/\\s+/)\n .map((e) => `${e}${ns}`)\n .join(' ');\n\n this.$el\n .on(`focus${ns}`, this.handleFocus)\n .on(`blur${ns}`, this.handleBlur)\n .on(`compositionstart${ns}`, this.handleCompositionStart)\n .on(`compositionend${ns}`, this.handleCompositionEnd)\n .on(namespacedEvents, this.handleInput);\n }\n}\n\n/**\n * Applies two-way data binding between a writable atom and an input element.\n */\nexport function applyInputBinding<T>(\n $el: JQuery,\n atom: WritableAtom<T>,\n options: ValOptions<T>\n): { fx: EffectObject; cleanup: () => void } {\n let binding: InputBinding<T> | null = new InputBinding($el, atom, options);\n return {\n fx: effect(binding.syncDomFromAtom),\n cleanup: () => {\n if (binding) {\n binding.cleanup();\n binding = null;\n }\n },\n };\n}\n","import { effect, type ReadonlyAtom, untracked } from '@but212/atom-effect';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { AsyncReactiveValue } from '@/types';\n\nimport { isPromise, isReactive } from '@/utils';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// Debug type\n// ============================================================================\n\n/**\n * Structured label identifying which binding produced a debug log entry.\n * Fixed bindings use a plain literal; per-key bindings use a `prefix.key` form\n * where the key portion must be non-empty.\n *\n * Note: the trailing `(string & {})` member makes this type accept any string\n * at runtime while still surfacing the named literals as IDE autocomplete\n * suggestions. It does NOT enforce that only the listed values are used —\n * TypeScript absorbs all narrower literal members into `string & {}`, so there\n * is no compile-time restriction beyond `string`.\n */\nexport type BindingDebugType =\n | 'text'\n | 'html'\n | 'show'\n | 'hide'\n | 'checked'\n | `class.${string & {}}`\n | `css.${string & {}}`\n | `attr.${string & {}}`\n | `prop.${string & {}}`\n | (string & {});\n\n// ============================================================================\n// Core factory\n// ============================================================================\n\n/**\n * Registers a reactive effect that calls `updater` whenever `source` changes,\n * or calls `updater` once immediately if `source` is a static value.\n *\n * Responsibilities:\n * - Reactive path: wraps `updater` in an `effect`, tracks it on the registry.\n * - Static path: applies the value once; no effect is registered.\n * - Debug path: logs both the static initial bind and reactive updates via\n * `debug.domUpdated` so that all DOM writes appear in a uniform format.\n * - Error path: catches `updater` exceptions and surfaces them via `console.error`\n * so that a broken binding does not silently kill the effect loop.\n * Both the reactive and static paths are guarded consistently with `untracked`.\n *\n * @param el DOM element or SVG element to associate the effect with.\n * @param source Reactive or static value source.\n * @param updater Function that writes the value to the DOM.\n * @param debugType Structured label used in debug log output and effect naming.\n */\nexport function registerReactiveEffect<T>(\n el: Element,\n source: AsyncReactiveValue<T>,\n updater: (value: T) => void,\n debugType: BindingDebugType\n): void {\n let latestPromise: Promise<T> | null = null;\n\n const runUpdater = (val: T | Promise<T>) => {\n if (!isPromise(val)) {\n latestPromise = null;\n try {\n updater(val);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, debugType, val);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType, true), e);\n }\n return;\n }\n\n latestPromise = val;\n val\n .then((resolved) => {\n // Ensure this is still the most recent promise to avoid race conditions\n if (latestPromise === val) {\n untracked(() => {\n try {\n updater(resolved);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, `${debugType} (async)`, resolved);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n }\n })\n .catch((e) => {\n if (latestPromise === val) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n };\n\n /**\n * Decide whether to register a reactive effect or perform a one-time static update.\n *\n * STRATEGY:\n * 1. If it's an Atom or a function, it's considered 'reactive' and wrapped in an effect.\n * 2. If it's a plain value or a Promise, it's 'static' and applied once.\n */\n const sourceIsReactive = isReactive(source);\n const sourceIsFunction = typeof source === 'function';\n\n if (sourceIsReactive || sourceIsFunction) {\n registry.trackEffect(\n el,\n effect(\n () => {\n // Resolve the current value based on the source type.\n // Both paths subscribe to their respective dependencies automatically.\n const value = sourceIsReactive\n ? (source as ReadonlyAtom<T | Promise<T>>).value\n : (source as () => T | Promise<T>)();\n\n untracked(() => runUpdater(value));\n },\n { name: debugType }\n )\n );\n } else {\n // Static path: applies the value immediately and doesn't register an effect.\n untracked(() => runUpdater(source as T | Promise<T>));\n }\n}\n\n/**\n * Registers a single reactive effect that observes multiple sources in a map.\n * When any source changes, the entire map is re-processed via the updater.\n */\nexport function registerMapEffect<T>(\n el: Element,\n map: Record<string, AsyncReactiveValue<T>>,\n updater: (map: Record<string, T>) => void,\n debugType: BindingDebugType\n): void {\n const keys = Object.keys(map);\n const reactiveKeys: string[] = [];\n const reactiveSources: AsyncReactiveValue<T>[] = [];\n const sourceIsAtom: boolean[] = [];\n const staticValues: Record<string, T | Promise<T>> = {};\n\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i]!;\n const val = map[key]!;\n const isAtomVal = isReactive(val);\n if (isAtomVal || typeof val === 'function') {\n reactiveKeys.push(key);\n reactiveSources.push(val);\n sourceIsAtom.push(isAtomVal);\n } else {\n staticValues[key] = val;\n }\n }\n\n let latestPromiseId = 0;\n\n const runUpdater = (currentMap: Record<string, T | Promise<T>>) => {\n const promises: Promise<{ key: string; val: T }>[] = [];\n const resolvedMap: Record<string, T> = {};\n const len = keys.length;\n\n for (let i = 0; i < len; i++) {\n const key = keys[i]!;\n const val = currentMap[key]!;\n if (isPromise(val)) {\n promises.push(val.then((v) => ({ key, val: v })));\n } else {\n resolvedMap[key] = val as T;\n }\n }\n\n const pLen = promises.length;\n if (pLen > 0) {\n const myId = ++latestPromiseId;\n Promise.all(promises).then((results) => {\n if (myId === latestPromiseId) {\n for (let i = 0; i < pLen; i++) {\n const res = results[i]!;\n resolvedMap[res.key] = res.val;\n }\n untracked(() => {\n try {\n updater(resolvedMap);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, `${debugType} (async)`, resolvedMap);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n }\n });\n } else {\n latestPromiseId++; // Invalidate any pending promises\n try {\n updater(resolvedMap);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, debugType, resolvedMap);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType, true), e);\n }\n }\n };\n\n if (reactiveKeys.length > 0) {\n registry.trackEffect(\n el,\n effect(\n () => {\n const currentMap: Record<string, T | Promise<T>> = { ...staticValues };\n for (let i = 0, len = reactiveKeys.length; i < len; i++) {\n const source = reactiveSources[i]!;\n currentMap[reactiveKeys[i]!] = sourceIsAtom[i]\n ? (source as ReadonlyAtom<T | Promise<T>>).value\n : (source as () => T | Promise<T>)();\n }\n untracked(() => runUpdater(currentMap));\n },\n { name: debugType }\n )\n );\n } else {\n untracked(() => runUpdater(staticValues));\n }\n}\n","/**\n * HTML sanitization and security guards for XSS mitigation.\n *\n * This module is the **sole** sanitization layer — there is no downstream\n * sanitizer (e.g. DOMPurify) applied automatically. All regex-based\n * filtering happens here before content reaches the DOM.\n *\n * **Threat model:** best-effort defence for developer-authored templates and\n * reactive string bindings. For user-controlled rich text (e.g. a WYSIWYG\n * editor), replace or supplement this with DOMPurify.\n */\n\n// ============================================================================\n// URL attribute registry\n// ============================================================================\n\n/**\n * Attributes that carry a single URL value.\n *\n * `srcset` is intentionally excluded: its value is a comma-separated list of\n * URLs (e.g. `\"img.png 1x, img@2x.png 2x\"`), so a start-anchored regex cannot\n * reliably detect a dangerous protocol buried after the first comma. Callers\n * that need to validate srcset should parse each URL individually.\n */\nexport const URL_ATTRS = new Set([\n 'href',\n 'src',\n 'action',\n 'formaction',\n 'xlink:href',\n 'data',\n 'poster',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n]);\n\n// ============================================================================\n// Pre-compiled regex constants\n// ============================================================================\n\nexport const DANGEROUS_PROTOCOL_RE = /^\\s*(?:javascript|vbscript)\\s*:/i;\n\nconst DANGEROUS_CSS_RE =\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters for XSS sanitization\n /(?:expression\\s*\\(|behavior\\s*:|-moz-binding\\s*:|(?:\\\\[0-9a-f]{1,6}\\s*|[\\s\\x00-\\x20/'\"])*(?:j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|v\\s*b\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|d\\s*a\\s*t\\s*a)\\s*:(?!image\\/))/i;\n\n/** Detects `javascript:` / `vbscript:` inside a CSS `url()` function. Non-global — no `lastIndex` state. */\nconst DANGEROUS_CSS_URL_RE = /url\\s*\\(\\s*(?:[\"']?\\s*)?(?:javascript|vbscript)\\s*:/i;\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters\nconst STRIP_CTRL_RE = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g;\n\n/**\n * Numeric HTML entity decoder: &#NNN; and &#xHH; forms.\n *\n * Runs before protocol/tag checks so entity-encoded bypass vectors like\n * \"javascript:\" (j=106) are normalised to their literal characters.\n * Safe structural entities (& < > ") are intentionally left\n * encoded — they produce inert text when re-inserted via innerHTML and must\n * remain escaped for correct HTML rendering.\n *\n * The semicolon is optional (`?`) to catch unterminated references such as\n * \"javascript:\" which some parsers still decode.\n */\nconst DECODE_NUMERIC_ENTITY_RE = /&#x([0-9a-f]+);?|&#([0-9]+);?/gi;\n\n/**\n * Named-entity decoder for the small set of entities relevant to protocol\n * smuggling (colon, Tab, NewLine).\n *\n * HTML5 named character references are **case-sensitive** — `	` exists,\n * `&tab;` does not. Do NOT add the `i` flag: it would incorrectly decode\n * non-existent variants and widen the attack surface.\n */\nconst NAMED_ENTITY_MAP: Record<string, string> = {\n colon: ':',\n Tab: '\\t',\n NewLine: '\\n',\n};\nconst DECODE_NAMED_ENTITY_RE = /&(colon|Tab|NewLine);/g;\n\nconst STRIP_XML_RE = /<\\?[\\s\\S]*?\\?>/g;\n\nconst DANGEROUS_TAG_RE =\n /(<(script|iframe|object|embed|base|meta|applet|noscript|form|style|link)\\b[^>]*>([\\s\\S]*?)<\\/\\2>|<(script|iframe|object|embed|base|meta|applet|noscript|form|style|link)\\b[^>]*\\/?>)/gi;\n\nconst DANGEROUS_PROTOCOL_GLOBAL_RE =\n /(j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|v\\s*b\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t)\\s*:/gi;\n\nconst DANGEROUS_DATA_URI_RE =\n /data\\s*:\\s*(?:text\\/(?:html|javascript|vbscript|xml)|application\\/(?:javascript|xhtml\\+xml|xml|x-shockwave-flash)|image\\/svg\\+xml)/gi;\n\nconst UNSAFE_ATTR_RE = /\\bon\\w+\\s*=/gim;\n\n/** Global variant of DANGEROUS_CSS_RE for use inside sanitizeHtml. */\nconst DANGEROUS_CSS_GLOBAL_RE = new RegExp(DANGEROUS_CSS_RE.source, 'gim');\n\n// ============================================================================\n// sanitizeHtml\n// ============================================================================\n\n/**\n * O(n) single-pass scan for characters that indicate potential danger.\n * Much cheaper than running 5+ regexes on safe strings.\n */\nfunction needsSanitization(s: string): boolean {\n const len = s.length;\n for (let i = 0; i < len; i++) {\n const c = s.charCodeAt(i);\n // '<' (0x3C), '&' (0x26), control chars (0x00-0x1F excl. tab/nl/cr)\n if (c === 0x3c || c === 0x26 || (c <= 0x1f && c !== 0x09 && c !== 0x0a && c !== 0x0d)) {\n return true;\n }\n }\n\n // Use a more conservative check for protocols and event handlers.\n // Any colon or the pattern \"on\" + letter should trigger a full regex-based sanitization.\n if (s.indexOf(':') !== -1) return true;\n\n const lower = s.toLowerCase();\n const onIdx = lower.indexOf('on');\n if (onIdx !== -1 && onIdx < len - 2) {\n const nextChar = lower.charCodeAt(onIdx + 2);\n // Check if it's \"on\" followed by a letter (potential event handler like onclick)\n if (nextChar >= 97 && nextChar <= 122) return true;\n }\n\n return false;\n}\n\n/**\n * HTML sanitization for XSS mitigation using regex-based filtering.\n * Optimized with an early-exit fast-path for safe strings.\n */\nexport function sanitizeHtml(html: string | null | undefined): string {\n if (!html) return '';\n const sInit = String(html);\n\n // Fast path: if no dangerous characters or patterns exist, skip all regex processing.\n if (!needsSanitization(sInit)) return sInit;\n\n let s = sInit\n .replace(STRIP_CTRL_RE, '')\n .replace(DECODE_NUMERIC_ENTITY_RE, (_, hex, dec) =>\n String.fromCodePoint(hex ? parseInt(hex, 16) : parseInt(dec, 10))\n )\n .replace(DECODE_NAMED_ENTITY_RE, (_, name) => NAMED_ENTITY_MAP[name] ?? '');\n\n if (s.indexOf('<') !== -1) {\n s = s.replace(STRIP_XML_RE, '');\n let prev: string;\n do {\n prev = s;\n s = s.replace(DANGEROUS_TAG_RE, '');\n } while (s !== prev);\n }\n\n return s\n .replace(DANGEROUS_PROTOCOL_GLOBAL_RE, 'data-unsafe-protocol:')\n .replace(DANGEROUS_DATA_URI_RE, 'data-unsafe-protocol:')\n .replace(UNSAFE_ATTR_RE, 'data-unsafe-attr=')\n .replace(DANGEROUS_CSS_GLOBAL_RE, 'data-unsafe-css:');\n}\n\n/** Checks for javascript:/vbscript: protocols in URL attributes. */\nexport const isDangerousUrl = (attr: string, val: string): boolean => {\n if (val.length < 10) return false; // \"javascript:\".length = 11\n const lower = attr.toLowerCase();\n return URL_ATTRS.has(lower) && DANGEROUS_PROTOCOL_RE.test(val);\n};\n\n/** Checks for protocols inside CSS url() functions. */\nexport const isDangerousCssValue = (val: string): boolean => {\n if (val.length < 15) return false; // \"url(javascript:)\".length = 15\n return val.toLowerCase().includes('url(') && DANGEROUS_CSS_URL_RE.test(val);\n};\n","import { computed, effect, isAtom, type ReadonlyAtom, untracked } from '@but212/atom-effect';\n\nimport $ from 'jquery';\nimport { applyInputBinding } from '@/bindings/input-binding';\nimport { DANGEROUS_PROPS, ERROR_MESSAGES, LOG_PREFIXES, VALID_INPUT_TAGS } from '@/constants';\nimport { registerMapEffect, registerReactiveEffect } from '@/core/effect-factory';\nimport { INTERNAL_HANDLER } from '@/core/jquery-patch';\nimport { registry } from '@/core/registry';\nimport type {\n AsyncReactiveValue,\n BindingContext,\n BindingOptions,\n CssValue,\n PrimitiveValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from '@/types';\nimport { debug } from '@/utils/debug';\n\nexport type { BindingContext };\n\nimport { hasOwn, isPromise } from '@/utils';\n\nimport {\n DANGEROUS_PROTOCOL_RE,\n isDangerousCssValue,\n sanitizeHtml,\n URL_ATTRS,\n} from '@/utils/sanitize';\n\n// Cache for CSS property camelization to avoid repeated regex overhead.\n// Uses Map instead of a plain object to avoid prototype pollution risk and\n// for clearer semantics — CSS property names are a small, finite set so the\n// cache is effectively bounded in practice.\nconst camelCache = new Map<string, string>();\nfunction getCamelCase(prop: string): string {\n let cached = camelCache.get(prop);\n if (cached !== undefined) return cached;\n\n cached = prop.includes('-') ? prop.replace(/-./g, (m) => m[1]!.toUpperCase()) : prop;\n camelCache.set(prop, cached);\n return cached;\n}\n\n/**\n * Cache for sanitized versions of reactive strings.\n * Ensures that if 100 elements are bound to the same atom, sanitizeHtml() is\n * called only once per update instead of 100 times.\n */\nconst htmlSanitizeCache = new WeakMap<\n ReadonlyAtom<string | Promise<string>>,\n ReadonlyAtom<string | Promise<string>>\n>();\n\nfunction getSanitizedHtml(\n source: ReadonlyAtom<string | Promise<string>>\n): ReadonlyAtom<string | Promise<string>> {\n let cached = htmlSanitizeCache.get(source);\n if (!cached) {\n cached = computed(() => {\n const val = source.value;\n if (isPromise(val)) {\n return val.then((v: string) => sanitizeHtml(v));\n }\n return sanitizeHtml(val);\n });\n htmlSanitizeCache.set(source, cached);\n }\n return cached;\n}\n\n// ============================================================================\n// Binding Context Factory\n// ============================================================================\n\nexport function createContext(el: HTMLElement): BindingContext {\n return {\n el,\n trackCleanup: (fn) => registry.trackCleanup(el, fn),\n };\n}\n\n// ============================================================================\n// One-Way Binding Handlers (Atom → DOM)\n// ============================================================================\n\n/**\n * Updates element text content.\n */\nexport function bindText<T = unknown>(\n { el }: BindingContext,\n value: AsyncReactiveValue<T>,\n formatter?: (val: T) => string\n): void {\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const text = formatter ? formatter(val) : String(val ?? '');\n if (el.textContent !== text) el.textContent = text;\n },\n 'text'\n );\n}\n\n/**\n * Updates element inner HTML with XSS sanitization.\n */\nexport function bindHtml({ el }: BindingContext, value: AsyncReactiveValue<string>): void {\n const source = isAtom(value)\n ? getSanitizedHtml(value as ReadonlyAtom<string | Promise<string>>)\n : value;\n\n registerReactiveEffect(\n el,\n source,\n (val) => {\n const html = source === value ? sanitizeHtml(val) : val;\n if (el.innerHTML !== html) {\n registry.cleanupDescendants(el);\n el.innerHTML = html;\n }\n },\n 'html'\n );\n}\n\n/**\n * Toggles multiple CSS classes based on reactive boolean conditions.\n */\nexport function bindClass(\n { el }: BindingContext,\n classMap: Record<string, AsyncReactiveValue<boolean>>\n): void {\n const tokenMap: Record<string, string[]> = {};\n for (const k in classMap) {\n if (hasOwn.call(classMap, k)) {\n const trimmed = k.trim();\n // Optimization: avoid regex for simple single-class keys\n tokenMap[k] = trimmed.indexOf(' ') === -1 ? [trimmed] : trimmed.split(/\\s+/).filter(Boolean);\n }\n }\n\n registerMapEffect(\n el,\n classMap,\n (states) => {\n for (const k in states) {\n const tokens = tokenMap[k]!;\n if (states[k]) {\n el.classList.add(...tokens);\n } else {\n el.classList.remove(...tokens);\n }\n }\n },\n 'class'\n );\n}\n\n/**\n * Updates multiple CSS style properties.\n */\nexport function bindCss({ el }: BindingContext, cssMap: Record<string, CssValue>): void {\n const style = el.style as unknown as Record<string, string | null>;\n const reactiveMap: Record<string, ReactiveValue<unknown>> = {};\n const meta: Record<string, { camel: string; unit: string }> = {};\n\n for (const p in cssMap) {\n if (hasOwn.call(cssMap, p)) {\n const val = cssMap[p]!;\n const [src, unit] = Array.isArray(val) ? val : ([val, ''] as const);\n reactiveMap[p] = src;\n meta[p] = { camel: getCamelCase(p), unit };\n }\n }\n\n registerMapEffect(\n el,\n reactiveMap,\n (states) => {\n for (const p in states) {\n const m = meta[p]!;\n const val = states[p];\n const str = m.unit ? `${val}${m.unit}` : String(val);\n const camel = m.camel;\n if (!isDangerousCssValue(str) && style[camel] !== str) {\n style[camel] = str;\n }\n }\n },\n 'css'\n );\n}\n\n/**\n * Binds DOM attributes with security guards and primitive value constraints.\n */\nexport function bindAttr(\n { el }: BindingContext,\n attrMap: Record<string, AsyncReactiveValue<PrimitiveValue>>\n): void {\n const safeMap: Record<string, AsyncReactiveValue<PrimitiveValue>> = {};\n const metaMap: Record<string, { isAria: boolean; isUrl: boolean }> = {};\n const cache: Record<string, string | null> = {};\n\n for (const name in attrMap) {\n if (!hasOwn.call(attrMap, name)) continue;\n const lower = name.toLowerCase();\n if (lower.startsWith('on')) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_EVENT_HANDLER(name)}`\n );\n continue;\n }\n safeMap[name] = attrMap[name]!;\n metaMap[name] = { isAria: lower.startsWith('aria-'), isUrl: URL_ATTRS.has(lower) };\n cache[name] = el.getAttribute(name);\n }\n\n registerMapEffect(\n el,\n safeMap,\n (states) => {\n for (const name in states) {\n const m = metaMap[name]!;\n const val = states[name] as PrimitiveValue;\n\n if (val == null || (val === false && !m.isAria)) {\n if (cache[name] !== null) el.removeAttribute(name);\n cache[name] = null;\n continue;\n }\n\n const newVal = val === true ? (m.isAria ? 'true' : name) : String(val);\n if (m.isUrl && DANGEROUS_PROTOCOL_RE.test(newVal)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_PROTOCOL(name)}`);\n continue;\n }\n\n if (cache[name] !== newVal) {\n el.setAttribute(name, newVal);\n cache[name] = newVal;\n }\n }\n },\n 'attr'\n );\n}\n\n/**\n * Binds DOM properties. Uses strict property write guards and security filters.\n */\nexport function bindProp(\n ctx: BindingContext,\n propMap: Record<string, AsyncReactiveValue<unknown>>\n): void {\n const el = ctx.el as unknown as Record<string, unknown>;\n const safeMap: Record<string, AsyncReactiveValue<unknown>> = {};\n const metaMap: Record<string, { isUrl: boolean }> = {};\n\n for (const name in propMap) {\n if (!hasOwn.call(propMap, name)) continue;\n const lower = name.toLowerCase();\n if (lower.startsWith('on') || DANGEROUS_PROPS.has(name)) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${\n lower.startsWith('on')\n ? ERROR_MESSAGES.SECURITY.BLOCKED_EVENT_HANDLER(name)\n : ERROR_MESSAGES.SECURITY.BLOCKED_PROP(name)\n }`\n );\n continue;\n }\n safeMap[name] = propMap[name]!;\n metaMap[name] = { isUrl: URL_ATTRS.has(lower) };\n }\n\n registerMapEffect(\n ctx.el,\n safeMap,\n (states) => {\n for (const name in states) {\n const val = states[name];\n if (metaMap[name]!.isUrl && typeof val === 'string' && DANGEROUS_PROTOCOL_RE.test(val)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_PROTOCOL(name)}`);\n continue;\n }\n if (el[name] !== val) {\n el[name] = val;\n }\n }\n },\n 'prop'\n );\n}\n\n/**\n * Handles visibility (display: none) toggle.\n */\nexport function bindVisibility(\n { el }: BindingContext,\n condition: AsyncReactiveValue<boolean>,\n invert: boolean\n): void {\n const show = el.style.display === 'none' ? '' : el.style.display;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n const target = invert !== !!val ? show : 'none';\n if (el.style.display !== target) el.style.display = target;\n },\n invert ? 'hide' : 'show'\n );\n}\n\n/**\n * Two-way value binding with full feature parity to $.fn.atomVal.\n */\nexport function bindVal(\n ctx: BindingContext,\n atom: WritableAtom<unknown>,\n options: ValOptions<unknown> = {}\n): void {\n const tag = ctx.el.tagName.toLowerCase();\n if (!VALID_INPUT_TAGS.has(tag)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.INVALID_INPUT_ELEMENT(tag)}`);\n return;\n }\n const { fx, cleanup } = applyInputBinding($(ctx.el), atom, options);\n registry.trackEffect(ctx.el, fx);\n ctx.trackCleanup(cleanup);\n}\n\n/**\n * Two-way binding for checkbox/radio checked state.\n */\nexport function bindChecked(ctx: BindingContext, atom: WritableAtom<boolean>): void {\n const el = ctx.el as HTMLInputElement;\n const $el = $(el);\n\n const handler = () => {\n if (atom.peek() !== el.checked) {\n atom.value = el.checked;\n if (el.type === 'radio' && el.checked && el.name) {\n (el.form ? $(el.form) : $(document))\n .find(`input[type=\"radio\"][name=\"${el.name.replace(/\"/g, '\\\\\"')}\"]`)\n .not(el)\n .trigger('change.atomRadioSync');\n }\n }\n };\n (handler as unknown as Record<symbol, boolean>)[INTERNAL_HANDLER] = true;\n\n $el.on('change change.atomRadioSync', handler);\n ctx.trackCleanup(() => $el.off('change change.atomRadioSync', handler));\n\n registry.trackEffect(\n el,\n effect(() => {\n const val = !!atom.value;\n untracked(() => {\n if (el.checked !== val) {\n el.checked = val;\n debug.domUpdated(LOG_PREFIXES.BINDING, el, 'checked', val);\n }\n });\n })\n );\n}\n\n// ============================================================================\n// Event Binding Handler\n// ============================================================================\n\nexport function bindEvents(ctx: BindingContext, eventMap: NonNullable<BindingOptions['on']>): void {\n const $el = $(ctx.el);\n $el.on(eventMap);\n ctx.trackCleanup(() => $el.off(eventMap));\n}\n\n/**\n * Binds a single event handler using jQuery's event system for compatibility.\n */\nexport function bindOn(\n { el, trackCleanup }: BindingContext,\n event: string,\n handler: (e: JQuery.TriggeredEvent) => void\n): void {\n const $el = $(el);\n $el.on(event, handler);\n trackCleanup(() => $el.off(event, handler));\n}\n\n/**\n * Disposes all reactive bindings on an element and its descendants.\n */\nexport function bindUnbind(el: HTMLElement): void {\n registry.cleanupTree(el);\n}\n","import {\n atom as createAtom,\n effect,\n getPathValue,\n setDeepValue,\n untracked,\n type WritableAtom,\n} from '@but212/atom-effect';\nimport { registry } from '@/core/registry';\nimport type { ValOptions } from '@/types';\nimport { bindChecked, bindVal, createContext } from './unified';\n\n/**\n * Binds an entire form to a single object-based atom.\n *\n * DESIGN STRATEGY:\n * Optimized for O(1) performance on large forms. Instead of each input\n * directly observing a \"lens\" of the root atom (which would create N effects),\n * we use a single centralized 'rootDispatcher' effect. This dispatcher\n * watches the root atom once and pushes updates to individual 'leaf atoms'\n * only when their specific values change, eliminating O(N) effect fan-out.\n */\nexport function bindForm<T extends object>(\n form: HTMLFormElement,\n atom: WritableAtom<T>,\n options: ValOptions<unknown> = {}\n): void {\n // Use a flat array for O(N) iteration without Map iterator overhead\n const fieldAtoms = new Map<string, WritableAtom<unknown>>();\n const fields: { atom: WritableAtom<unknown>; parts: string[] }[] = [];\n\n // Single effect to watch the root atom and dispatch updates to individual fields.\n // This ensures that typing in one field doesn't trigger O(N) re-computations\n // across all other fields.\n const rootDispatcher = effect(() => {\n const rootValue = atom.value; // Subscribes to the root atom once\n const len = fields.length;\n if (len === 0) return;\n\n untracked(() => {\n for (let i = 0; i < len; i++) {\n const item = fields[i]!;\n const newValue = getPathValue(rootValue, item.parts);\n // Only trigger the leaf atom if the value actually changed.\n if (!Object.is(item.atom.peek(), newValue)) {\n item.atom.value = newValue;\n }\n }\n });\n });\n\n // Track the dispatcher for cleanup when the form is removed.\n registry.trackEffect(form, rootDispatcher);\n\n const getOrFieldAtom = (name: string): WritableAtom<unknown> => {\n let fieldAtom = fieldAtoms.get(name);\n if (!fieldAtom) {\n const parts = name.includes('.') ? name.split('.') : [name];\n\n // Create a leaf atom that only holds the value of this specific field.\n fieldAtom = createAtom(getPathValue(atom.peek(), parts));\n fields.push({ atom: fieldAtom, parts });\n\n // Separate effect to sync changes from the field atom back to the root atom.\n registry.trackEffect(\n form,\n effect(() => {\n const newValue = fieldAtom!.value; // Subscribes to the leaf atom only\n const currentRoot = atom.peek();\n const nextRoot = setDeepValue(currentRoot, parts, 0, newValue);\n\n if (nextRoot !== currentRoot) {\n atom.value = nextRoot as T;\n }\n })\n );\n\n fieldAtoms.set(name, fieldAtom);\n }\n return fieldAtom;\n };\n\n const bindElement = (el: Element) => {\n if (\n !(\n el instanceof HTMLInputElement ||\n el instanceof HTMLTextAreaElement ||\n el instanceof HTMLSelectElement\n )\n ) {\n return;\n }\n const name = el.name;\n if (!name || registry.hasBind(el)) return;\n\n const fieldAtom = getOrFieldAtom(name);\n const controlCtx = createContext(el as HTMLElement);\n\n if (el instanceof HTMLInputElement && (el.type === 'checkbox' || el.type === 'radio')) {\n bindChecked(controlCtx, fieldAtom as WritableAtom<boolean>);\n } else {\n bindVal(controlCtx, fieldAtom, options);\n }\n };\n\n for (let i = 0, len = form.elements.length; i < len; i++) {\n bindElement(form.elements[i]!);\n }\n\n const observer = new MutationObserver((mutations) => {\n for (let i = 0, mLen = mutations.length; i < mLen; i++) {\n const mutation = mutations[i]!;\n if (mutation.type === 'childList') {\n for (let j = 0, aLen = mutation.addedNodes.length; j < aLen; j++) {\n const node = mutation.addedNodes[j]!;\n if (node.nodeType === 1) {\n const el = node as HTMLElement;\n bindElement(el);\n // Search for inputs within the newly added fragment\n const controls = el.matches?.('input, select, textarea')\n ? [el]\n : el.querySelectorAll('input, select, textarea');\n for (let k = 0, cLen = controls.length; k < cLen; k++) {\n bindElement(controls[k]!);\n }\n }\n }\n } else if (mutation.type === 'attributes' && mutation.attributeName === 'name') {\n bindElement(mutation.target as Element);\n }\n }\n });\n\n observer.observe(form, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['name'],\n });\n\n registry.trackCleanup(form, () => observer.disconnect());\n}\n","import $ from 'jquery';\nimport { bindForm } from '@/bindings/form';\nimport {\n bindAttr,\n bindChecked,\n bindClass,\n bindCss,\n bindEvents,\n bindHtml,\n bindOn,\n bindProp,\n bindText,\n bindUnbind,\n bindVal,\n bindVisibility,\n createContext,\n} from '@/bindings/unified';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport type {\n AsyncReactiveValue,\n BindingContext,\n BindingOptions,\n CssBindings,\n PrimitiveValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from '@/types';\n\nimport { debug } from '@/utils/debug';\n\n/**\n * Internal helper to iterate over a jQuery set and apply a binding function\n * to each Element node. Handles nodeType check and context creation.\n */\nfunction atomEachElement(jq: JQuery, fn: (ctx: BindingContext, el: HTMLElement) => void): JQuery {\n const len = jq.length;\n for (let i = 0; i < len; i++) {\n const node = jq[i];\n if (node?.nodeType === 1) {\n const el = node as HTMLElement;\n fn(createContext(el), el);\n } else if (node) {\n debug.log(LOG_PREFIXES.BINDING, `Skipping non-Element node (nodeType=${node.nodeType})`);\n }\n }\n return jq;\n}\n\n/**\n * Binds element `textContent` to a reactive source.\n */\n$.fn.atomText = function <T>(source: AsyncReactiveValue<T>, formatter?: (v: T) => string): JQuery {\n return atomEachElement(this, (ctx) => bindText(ctx, source, formatter));\n};\n\n/**\n * Binds element `innerHTML` to a reactive string source.\n */\n$.fn.atomHtml = function (source: AsyncReactiveValue<string>): JQuery {\n return atomEachElement(this, (ctx) => bindHtml(ctx, source));\n};\n\n/**\n * Toggles one or more CSS classes based on reactive boolean conditions.\n */\n$.fn.atomClass = function (\n this: JQuery,\n classNameOrMap: string | Record<string, AsyncReactiveValue<boolean>>,\n condition?: AsyncReactiveValue<boolean>\n): JQuery {\n if (typeof classNameOrMap === 'string') {\n if (condition === undefined) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_CONDITION('atomClass')}`\n );\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [classNameOrMap]: condition };\n return atomEachElement(this, (ctx) => bindClass(ctx, map));\n }\n return atomEachElement(this, (ctx) => bindClass(ctx, classNameOrMap));\n};\n\n/**\n * Binds one or more CSS style properties to reactive values.\n */\n$.fn.atomCss = function (\n this: JQuery,\n propOrMap: string | CssBindings,\n source?: AsyncReactiveValue<string | number>,\n unit?: string\n): JQuery {\n if (typeof propOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomCss')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [propOrMap]: unit ? [source as ReactiveValue<number>, unit] : source! };\n return atomEachElement(this, (ctx) => bindCss(ctx, map as CssBindings));\n }\n return atomEachElement(this, (ctx) => bindCss(ctx, propOrMap));\n};\n\n/**\n * Binds one or more HTML attributes to reactive values with security guards.\n */\n$.fn.atomAttr = function (\n this: JQuery,\n nameOrMap: string | Record<string, AsyncReactiveValue<PrimitiveValue>>,\n source?: AsyncReactiveValue<PrimitiveValue>\n): JQuery {\n if (typeof nameOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomAttr')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [nameOrMap]: source };\n return atomEachElement(this, (ctx) => bindAttr(ctx, map));\n }\n return atomEachElement(this, (ctx) => bindAttr(ctx, nameOrMap));\n};\n\n/**\n * Binds one or more DOM properties to reactive values.\n */\n$.fn.atomProp = function <T>(\n this: JQuery,\n nameOrMap: string | Record<string, AsyncReactiveValue<T>>,\n source?: AsyncReactiveValue<T>\n): JQuery {\n if (typeof nameOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomProp')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [nameOrMap]: source } as Record<string, AsyncReactiveValue<unknown>>;\n return atomEachElement(this, (ctx) => bindProp(ctx, map));\n }\n return atomEachElement(this, (ctx) =>\n bindProp(ctx, nameOrMap as Record<string, AsyncReactiveValue<unknown>>)\n );\n};\n\n/**\n * Shows the element when `condition` is truthy (`display: ''`).\n */\n$.fn.atomShow = function (condition: AsyncReactiveValue<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindVisibility(ctx, condition, false));\n};\n\n/**\n * Hides the element when `condition` is truthy (`display: 'none'`).\n */\n$.fn.atomHide = function (condition: AsyncReactiveValue<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindVisibility(ctx, condition, true));\n};\n\n/**\n * Two-way binding for `<input>`, `<select>`, and `<textarea>` values.\n */\n$.fn.atomVal = function <T>(atom: WritableAtom<T>, options: ValOptions<T> = {}): JQuery {\n return atomEachElement(this, (ctx) =>\n bindVal(ctx, atom as WritableAtom<unknown>, options as unknown as ValOptions<unknown>)\n );\n};\n\n/**\n * Two-way binding for checkbox and radio button `checked` state.\n */\n$.fn.atomChecked = function (atom: WritableAtom<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindChecked(ctx, atom));\n};\n\n/**\n * Two-way binding for an entire form.\n */\n$.fn.atomForm = function <T extends object>(\n atom: WritableAtom<T>,\n options: ValOptions<unknown> = {}\n): JQuery {\n return atomEachElement(this, (_, el) => {\n if (el instanceof HTMLFormElement) bindForm(el, atom, options);\n });\n};\n\n/**\n * Attaches a lifecycle-aware event handler using the jQuery event system.\n */\n$.fn.atomOn = function (event: string, handler: (e: JQuery.Event) => void): JQuery {\n return atomEachElement(this, (ctx) => bindOn(ctx, event, handler));\n};\n\n/**\n * Lookup table for reactive binding handlers.\n * Ordered to match the bitmask bits in atomBind.\n */\nconst BIND_HANDLERS: Array<(ctx: BindingContext, options: BindingOptions<unknown>) => void> = [\n (ctx, o) => bindText(ctx, o.text), // 1 << 0\n (ctx, o) => bindHtml(ctx, o.html!), // 1 << 1\n (ctx, o) => bindClass(ctx, o.class!), // 1 << 2\n (ctx, o) => bindCss(ctx, o.css!), // 1 << 3\n (ctx, o) => bindAttr(ctx, o.attr!), // 1 << 4\n (ctx, o) => bindProp(ctx, o.prop as Record<string, AsyncReactiveValue<unknown>>), // 1 << 5\n (ctx, o) => bindVisibility(ctx, o.show!, false), // 1 << 6\n (ctx, o) => bindVisibility(ctx, o.hide!, true), // 1 << 7\n (ctx, o) => {\n // 1 << 8: val\n const v = o.val!;\n if (Array.isArray(v)) {\n bindVal(ctx, v[0] as WritableAtom<unknown>, v[1] as ValOptions<unknown>);\n } else {\n bindVal(ctx, v as WritableAtom<unknown>);\n }\n },\n (ctx, o) => bindChecked(ctx, o.checked!), // 1 << 9\n (ctx, o) => {\n // 1 << 10: form\n if (ctx.el instanceof HTMLFormElement) {\n bindForm(ctx.el, o.form as WritableAtom<object>);\n }\n },\n (ctx, o) => bindEvents(ctx, o.on!), // 1 << 11\n];\n\n/**\n * Integrated multi-behavior reactive binding.\n * Uses a bitmask dispatch strategy to minimize branch mispredictions in hot-path.\n */\n$.fn.atomBind = function <T>(this: JQuery, options: BindingOptions<T>): JQuery {\n let mask = 0;\n if (options.text !== undefined) mask |= 1 << 0;\n if (options.html !== undefined) mask |= 1 << 1;\n if (options.class !== undefined) mask |= 1 << 2;\n if (options.css !== undefined) mask |= 1 << 3;\n if (options.attr !== undefined) mask |= 1 << 4;\n if (options.prop !== undefined) mask |= 1 << 5;\n if (options.show !== undefined) mask |= 1 << 6;\n if (options.hide !== undefined) mask |= 1 << 7;\n if (options.val !== undefined) mask |= 1 << 8;\n if (options.checked !== undefined) mask |= 1 << 9;\n if (options.form !== undefined) mask |= 1 << 10;\n if (options.on !== undefined) mask |= 1 << 11;\n\n if (mask === 0) return this;\n\n return atomEachElement(this, (ctx) => {\n let m = mask;\n while (m > 0) {\n const bit = m & -m;\n const idx = 31 - Math.clz32(bit);\n BIND_HANDLERS[idx]!(ctx, options as BindingOptions<unknown>);\n m ^= bit;\n }\n });\n};\n\n/**\n * Destroys all reactive bindings on the selected elements **and their descendants**.\n */\n$.fn.atomUnbind = function (this: JQuery): JQuery {\n const len = this.length;\n for (let i = 0; i < len; i++) {\n const node = this[i];\n if (node?.nodeType === 1) {\n bindUnbind(node as HTMLElement);\n }\n }\n return this;\n};\n","import { effect, untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { EffectObject, ListKey, ListKeyFn, ListOptions, ReadonlyAtom } from '@/types';\nimport { getSelector, hasOwn, shallowEqual } from '@/utils';\nimport { ArrayPool } from '@/utils/array-pool';\nimport { debug } from '@/utils/debug';\nimport { ObjectPool } from '@/utils/object-pool';\nimport { sanitizeHtml } from '@/utils/sanitize';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst listInstances = new WeakMap<Element, { fx: EffectObject; ctx: ListContext<unknown> }>();\nlet listBatchIdCounter = 0;\n\nconst mapPool = new ObjectPool<Map<ListKey, number>>(\n () => new Map(),\n (m) => m.clear()\n);\nconst setPool = new ObjectPool<Set<ListKey>>(\n () => new Set(),\n (s) => s.clear()\n);\nconst arrayPool = new ArrayPool<unknown>(100, 1024);\n\nfunction insertOrAppend(elOrJq: Element | JQuery, nextNode: Node | null, container: Element): void {\n // Optimization: insertBefore(node, null) is same as appendChild(node)\n if (elOrJq instanceof Element) {\n container.insertBefore(elOrJq, nextNode);\n return;\n }\n const len = elOrJq.length;\n for (let i = 0; i < len; i++) {\n const el = elOrJq[i];\n if (el) {\n container.insertBefore(el, nextNode);\n }\n }\n}\n\nfunction wrap($el: Element | JQuery<Element>): JQuery {\n return ($el instanceof Element ? $($el) : $el) as unknown as JQuery;\n}\n\n// ============================================================================\n// ListContext\n// ============================================================================\n\nclass ListContext<T> {\n oldKeys: ListKey[] = [];\n oldItems: T[] = [];\n oldNodes: (Element | JQuery)[] = [];\n\n readonly removingKeys = new Set<ListKey>();\n $emptyEl: JQuery | null = null;\n readonly keyToIndex = new Map<ListKey, number>();\n fx?: EffectObject;\n\n statesBuffer = new Uint8Array(256);\n indicesBuffer = new Int32Array(256);\n\n constructor(\n public readonly $container: JQuery,\n /** @internal */\n public readonly containerSelector: string,\n public readonly onRemove: (($el: JQuery) => Promise<void> | void) | undefined\n ) {}\n\n scheduleRemoval(k: ListKey, $el: JQuery): void {\n const commit = () => {\n if (this.fx?.isDisposed) return;\n if ($el[0]?.isConnected) $el.remove();\n this.removingKeys.delete(k);\n debug.log(LOG_PREFIXES.LIST, `${this.containerSelector} removed item:`, k);\n };\n\n const res = this.onRemove?.($el);\n if (res instanceof Promise) res.then(commit, commit);\n else commit();\n }\n\n removeItem(k: ListKey, $el: JQuery): void {\n for (let j = 0; j < $el.length; j++) {\n if ($el[j] instanceof Element) ($el[j] as Element).removeAttribute('data-atom-key');\n }\n this.removingKeys.add(k);\n this.scheduleRemoval(k, $el);\n }\n\n dispose(): void {\n this.removingKeys.clear();\n this.oldKeys.length = 0;\n this.oldItems.length = 0;\n this.oldNodes.length = 0;\n this.keyToIndex.clear();\n this.$emptyEl?.remove();\n this.$container.off('.atomList');\n this.statesBuffer = new Uint8Array(0);\n this.indicesBuffer = new Int32Array(0);\n }\n\n ensureBuffers(size: number): void {\n if (this.statesBuffer.length < size) {\n this.statesBuffer = new Uint8Array(Math.max(size, this.statesBuffer.length * 2));\n }\n if (this.indicesBuffer.length < size) {\n this.indicesBuffer = new Int32Array(Math.max(size, this.indicesBuffer.length * 2));\n }\n }\n}\n\n// ============================================================================\n// Internal diff types\n// ============================================================================\n\ninterface PreparedDiff<T> {\n newKeys: ListKey[];\n newKeySet: Set<ListKey>;\n newItems: T[];\n newNodes: (Element | JQuery)[];\n newStates: Uint8Array;\n newIndices: Int32Array;\n trKeys: ListKey[];\n trItems: T[];\n trIdxs: number[];\n startIndex: number;\n oldEndIndex: number;\n newEndIndex: number;\n}\n\ninterface PlaceCallbacks<T> {\n bind: ListOptions<T>['bind'];\n update: ListOptions<T>['update'];\n onAdd: ListOptions<T>['onAdd'];\n onRemove: ListOptions<T>['onRemove'];\n events: ListOptions<T>['events'];\n}\n\n// ============================================================================\n// Step functions\n// ============================================================================\n\nfunction handleEmpty<T>(\n ctx: ListContext<T>,\n itemCount: number,\n $container: JQuery,\n empty: ListOptions<T>['empty']\n): void {\n if (ctx.$emptyEl && itemCount > 0) {\n ctx.$emptyEl.remove();\n ctx.$emptyEl = null;\n }\n if (itemCount !== 0) return;\n\n const { oldKeys, oldNodes, onRemove } = ctx;\n if (!onRemove) {\n for (let i = 0, len = oldKeys.length; i < len; i++) ctx.removingKeys.delete(oldKeys[i]!);\n $container.empty();\n } else {\n for (let i = 0, len = oldKeys.length; i < len; i++) {\n const k = oldKeys[i]!;\n if (oldNodes[i]) ctx.removeItem(k, wrap(oldNodes[i]!));\n }\n }\n\n if (empty && !ctx.$emptyEl) {\n ctx.$emptyEl = (typeof empty === 'string'\n ? $(sanitizeHtml(empty))\n : $(empty as Element | JQuery)) as unknown as JQuery;\n ctx.$emptyEl.appendTo($container);\n }\n\n arrayPool.release(ctx.oldKeys);\n arrayPool.release(ctx.oldItems);\n arrayPool.release(ctx.oldNodes);\n ctx.oldKeys = [];\n ctx.oldItems = [];\n ctx.oldNodes = [];\n}\n\nfunction buildIndices<T>(\n ctx: ListContext<T>,\n items: T[],\n itemCount: number,\n getKey: ListKeyFn<T>,\n update: ListOptions<T>['update'],\n isEqual: ListOptions<T>['isEqual']\n): PreparedDiff<T> {\n const { oldKeys, oldItems, oldNodes, removingKeys, keyToIndex } = ctx;\n const oldLen = oldKeys.length;\n\n let startIndex = 0,\n oldEndIndex = oldLen - 1,\n newEndIndex = itemCount - 1;\n\n const eq = isEqual || shallowEqual;\n\n while (startIndex <= oldEndIndex && startIndex <= newEndIndex) {\n const item = items[startIndex]!;\n const k = getKey(item, startIndex);\n if (oldKeys[startIndex] !== k || !eq(oldItems[startIndex]!, item)) {\n break;\n }\n keyToIndex.set(k, startIndex++);\n }\n\n while (oldEndIndex >= startIndex && newEndIndex >= startIndex) {\n const item = items[newEndIndex]!;\n const k = getKey(item, newEndIndex);\n if (oldKeys[oldEndIndex] !== k || !eq(oldItems[oldEndIndex]!, item)) {\n break;\n }\n keyToIndex.set(k, newEndIndex--);\n oldEndIndex--;\n }\n\n const oldIndexMap = mapPool.acquire();\n for (let i = startIndex; i <= oldEndIndex; i++) oldIndexMap.set(oldKeys[i]!, i);\n\n const newKeySet = setPool.acquire();\n ctx.ensureBuffers(itemCount);\n\n const newKeys = arrayPool.acquire() as ListKey[];\n newKeys.length = itemCount;\n const newItems = arrayPool.acquire() as T[];\n newItems.length = itemCount;\n const newNodes = arrayPool.acquire() as (Element | JQuery)[];\n newNodes.length = itemCount;\n const newStates = ctx.statesBuffer,\n newIndices = ctx.indicesBuffer;\n\n const trKeys = arrayPool.acquire() as ListKey[],\n trItems = arrayPool.acquire() as T[],\n trIdxs = arrayPool.acquire() as number[];\n\n for (let i = 0; i < startIndex; i++) {\n newKeys[i] = oldKeys[i]!;\n newItems[i] = items[i]!;\n newNodes[i] = oldNodes[i]!;\n newStates[i] = 3;\n newIndices[i] = i;\n }\n for (let j = oldLen - 1, i = itemCount - 1; i > newEndIndex; i--, j--) {\n newKeys[i] = oldKeys[j]!;\n newItems[i] = items[i]!;\n newNodes[i] = oldNodes[j]!;\n newStates[i] = 3;\n newIndices[i] = j;\n }\n\n for (let i = startIndex; i <= newEndIndex; i++) {\n const item = items[i]!,\n k = getKey(item, i);\n newKeys[i] = k;\n newItems[i] = item;\n keyToIndex.set(k, i);\n\n if (newKeySet.has(k)) {\n debug.warn(LOG_PREFIXES.LIST, ERROR_MESSAGES.LIST.DUPLICATE_KEY(k, i, ctx.containerSelector));\n newIndices[i] = -1;\n continue;\n }\n newKeySet.add(k);\n\n const oldIdx = oldIndexMap.get(k);\n if (oldIdx === undefined) {\n trKeys.push(k);\n trItems.push(item);\n trIdxs.push(i);\n newIndices[i] = -1;\n newStates[i] = 1;\n continue;\n }\n\n const oldItem = oldItems[oldIdx]!;\n newNodes[i] = oldNodes[oldIdx]!;\n\n if (\n !update &&\n oldItem !== item &&\n !(isEqual ? isEqual(oldItem, item) : shallowEqual(oldItem, item))\n ) {\n trKeys.push(k);\n trItems.push(item);\n trIdxs.push(i);\n newStates[i] = 2;\n } else {\n newStates[i] = 0;\n }\n newIndices[i] = removingKeys.has(k) ? -1 : oldIdx;\n }\n\n mapPool.release(oldIndexMap);\n return {\n newKeys,\n newKeySet,\n newItems,\n newNodes,\n newStates,\n newIndices,\n trKeys,\n trItems,\n trIdxs,\n startIndex,\n oldEndIndex,\n newEndIndex,\n };\n}\n\nfunction renderItems<T>(\n diff: PreparedDiff<T>,\n options: ListOptions<T>,\n isInitial: boolean\n): string[] | null {\n const { trKeys, trItems, trIdxs, newNodes, newStates } = diff;\n const renderCount = trKeys.length;\n const renderResults: (string | Element | DocumentFragment | JQuery)[] = new Array(renderCount);\n const htmlParts: string[] = [];\n let stringCount = 0;\n\n for (let t = 0; t < renderCount; t++) {\n const raw = options.render(trItems[t]!, trIdxs[t]!);\n renderResults[t] = raw;\n if (typeof raw === 'string') {\n htmlParts.push(raw);\n stringCount++;\n }\n }\n\n let sanitized: string[] | null = null;\n if (htmlParts.length > 0) {\n if (htmlParts.length === 1) sanitized = [sanitizeHtml(htmlParts[0]!)];\n else {\n const sep = `<template data-atom-sep=\"${(listBatchIdCounter++).toString(36)}\"></template>`;\n sanitized = sanitizeHtml(htmlParts.join(sep)).split(sep);\n }\n }\n\n if (\n isInitial &&\n sanitized &&\n stringCount === renderCount &&\n !options.bind &&\n !options.onAdd &&\n !options.onRemove &&\n !options.events\n ) {\n return sanitized;\n }\n\n let fragIdx = 0;\n for (let t = 0; t < renderCount; t++) {\n const raw = renderResults[t]!;\n const $el = (typeof raw === 'string'\n ? $(sanitized![fragIdx++]!)\n : $(raw as Element | DocumentFragment | JQuery)) as unknown as JQuery;\n const targetIdx = trIdxs[t]!,\n keyStr = String(trKeys[t]!);\n\n for (let j = 0, elLen = $el.length; j < elLen; j++) {\n const node = $el[j];\n if (node instanceof Element) {\n node.setAttribute('data-atom-key', keyStr);\n }\n }\n\n if (newStates[targetIdx] === 2 && newNodes[targetIdx]) {\n const node = newNodes[targetIdx]!;\n if (node instanceof Element) {\n registry.cleanupTree(node);\n } else {\n for (let j = 0, nLen = node.length; j < nLen; j++) {\n const el = node[j];\n if (el instanceof Element) registry.cleanupTree(el);\n }\n }\n wrap(node).replaceWith($el);\n }\n newNodes[targetIdx] = $el.length === 1 ? ($el[0] as Element) : $el;\n }\n return null;\n}\n\nfunction cleanupRemoved<T>(ctx: ListContext<T>, diff: PreparedDiff<T>): void {\n const { startIndex, oldEndIndex, newKeySet } = diff;\n for (let i = startIndex; i <= oldEndIndex; i++) {\n const k = ctx.oldKeys[i]!;\n if (!newKeySet.has(k) && ctx.oldNodes[i]) ctx.removeItem(k, wrap(ctx.oldNodes[i]!));\n }\n}\n\nfunction placeItems<T>(\n ctx: ListContext<T>,\n diff: PreparedDiff<T>,\n rawContainer: Element,\n callbacks: PlaceCallbacks<T>,\n innerHtmlFragments: string[] | null\n): void {\n const { newKeys, newItems, newNodes, newStates, newIndices } = diff;\n const itemCount = newKeys.length;\n\n if (innerHtmlFragments !== null) {\n rawContainer.innerHTML = innerHtmlFragments.join('');\n let el = rawContainer.firstElementChild;\n for (let i = 0; i < itemCount; i++) {\n if (!el) break;\n el.setAttribute('data-atom-key', String(newKeys[i]));\n newNodes[i] = el;\n newStates[i] = 0;\n ctx.removingKeys.delete(newKeys[i]!);\n debug.domUpdated(LOG_PREFIXES.LIST, $(el) as unknown as JQuery, 'list.add', newItems[i]);\n el = el.nextElementSibling;\n }\n return;\n }\n\n if (ctx.oldKeys.length === 0) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < itemCount; i++) {\n const node = newNodes[i]!;\n if (node instanceof Element) frag.appendChild(node);\n else for (let j = 0; j < node.length; j++) frag.appendChild(node[j]!);\n }\n rawContainer.appendChild(frag);\n } else {\n let nextNode: Node | null = null,\n min = 2147483647;\n for (let i = itemCount - 1; i >= 0; i--) {\n const idx = newIndices[i]!;\n if (idx !== -1 && idx < min) {\n min = idx;\n } else {\n insertOrAppend(newNodes[i]!, nextNode, rawContainer);\n }\n const node = newNodes[i]!;\n nextNode = node instanceof Element ? node : (node[0] ?? null);\n }\n }\n\n for (let i = 0; i < itemCount; i++) {\n const state = newStates[i]!;\n if (state !== 3) {\n const $el = wrap(newNodes[i]!),\n item = newItems[i]!;\n if (state === 0) callbacks.update?.($el, item, i);\n else callbacks.bind?.($el, item, i);\n if (state === 1) {\n callbacks.onAdd?.($el);\n ctx.removingKeys.delete(newKeys[i]!);\n debug.domUpdated(LOG_PREFIXES.LIST, $el, 'list.add', item);\n }\n }\n }\n}\n\n// ============================================================================\n// atomList\n// ============================================================================\n\n$.fn.atomList = function <T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): JQuery {\n const getKey: ListKeyFn<T> =\n typeof options.key === 'function'\n ? options.key\n : (item: T) => item[options.key as keyof T] as unknown as ListKey;\n const callbacks: PlaceCallbacks<T> = {\n bind: options.bind,\n update: options.update,\n onAdd: options.onAdd,\n onRemove: options.onRemove,\n events: options.events,\n };\n\n for (let cIdx = 0, cLen = this.length; cIdx < cLen; cIdx++) {\n const raw = this[cIdx]!,\n $c = $(raw);\n $c.off('.atomList');\n const old = listInstances.get(raw);\n if (old) {\n old.fx.dispose();\n old.ctx.dispose();\n }\n\n const ctx = new ListContext<T>($c, getSelector(raw), options.onRemove);\n const fx = effect(() => {\n const items = source.value,\n len = items.length;\n untracked(() => {\n handleEmpty(ctx, len, $c, options.empty);\n if (len === 0) return;\n debug.log(LOG_PREFIXES.LIST, `${ctx.containerSelector} updating with ${len} items`);\n\n const diff = buildIndices(ctx, items, len, getKey, options.update, options.isEqual);\n const frag = renderItems(diff, options, ctx.oldKeys.length === 0);\n cleanupRemoved(ctx, diff);\n placeItems(ctx, diff, raw, callbacks, frag);\n\n if (options.events) {\n for (let i = diff.startIndex; i <= diff.oldEndIndex; i++) {\n if (!diff.newKeySet.has(ctx.oldKeys[i]!)) ctx.keyToIndex.delete(ctx.oldKeys[i]!);\n }\n }\n arrayPool.release(ctx.oldKeys);\n arrayPool.release(ctx.oldItems);\n arrayPool.release(ctx.oldNodes);\n ctx.oldKeys = diff.newKeys;\n ctx.oldItems = diff.newItems;\n ctx.oldNodes = diff.newNodes;\n setPool.release(diff.newKeySet);\n arrayPool.release(diff.trKeys);\n arrayPool.release(diff.trItems);\n arrayPool.release(diff.trIdxs);\n });\n });\n\n ctx.fx = fx;\n if (options.events) {\n for (const ek in options.events) {\n if (!hasOwn.call(options.events, ek)) continue;\n const s = ek.indexOf(' '),\n type = s === -1 ? ek : ek.slice(0, s),\n sel = s === -1 ? '> *' : ek.slice(s + 1).trim();\n const handler = options.events[ek]!;\n\n $c.on(`${type}.atomList`, sel, function (this: Element, e: JQuery.TriggeredEvent) {\n const itemEl = (e.target as Element).closest?.('[data-atom-key]') as HTMLElement | null;\n const rk = itemEl?.getAttribute('data-atom-key');\n if (rk === null || rk === undefined) return;\n\n let k: ListKey = rk;\n if (!ctx.keyToIndex.has(rk)) {\n const nk = Number(rk);\n if (!Number.isNaN(nk) && ctx.keyToIndex.has(nk)) k = nk;\n }\n const idx = ctx.keyToIndex.get(k);\n if (idx !== undefined) handler.call(itemEl as HTMLElement, ctx.oldItems[idx]!, idx, e);\n });\n }\n }\n registry.trackEffect(raw, fx);\n listInstances.set(raw, { fx, ctx });\n registry.trackCleanup(raw, () => {\n ctx.dispose();\n listInstances.delete(raw);\n });\n }\n return this;\n};\n","import { untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { bindUnbind } from '@/bindings/unified';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { ComponentFn } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nconst EMPTY_PROPS = Object.freeze({});\n\n// ============================================================================\n// jQuery plugin methods\n// ============================================================================\n\n/**\n * Mounts a functional component on each selected element.\n *\n * @param component - Function receiving `($el, props)` and returning an\n * optional cleanup callback. See {@link ComponentFn}.\n * @param props - Props passed to the component. When omitted, `P` must be\n * compatible with an empty object (i.e. all fields optional or\n * `P = object`). Passing no props to a component with required fields is\n * a type error that TypeScript will catch at the call site, but only when\n * `props` is explicitly typed — the `{} as P` fallback is not type-safe\n * for components with required fields, which is why the cast is explicit\n * rather than implicit.\n */\n$.fn.atomMount = function <P>(this: JQuery, component: ComponentFn<P>, props?: P): JQuery {\n const p = (props ?? EMPTY_PROPS) as P;\n const compName = component.name || 'Component';\n\n for (let i = 0, len = this.length; i < len; i++) {\n const rootEl = this[i];\n if (!rootEl) continue;\n\n registry.cleanupTree(rootEl);\n try {\n // Untracked execution prevents component initialization from leaking into parent effects\n const teardown = untracked(() => component($(rootEl), p));\n if (typeof teardown === 'function') {\n registry.setComponentCleanup(rootEl, teardown);\n }\n } catch (err) {\n debug.error(LOG_PREFIXES.MOUNT, ERROR_MESSAGES.MOUNT.ERROR(compName), err);\n }\n }\n return this;\n};\n\n/**\n * Unmounts the component and disposes all reactive bindings on each selected\n * element and its descendants.\n */\n$.fn.atomUnmount = function (this: JQuery): JQuery {\n for (let i = 0, len = this.length; i < len; i++) {\n const el = this[i];\n if (el) bindUnbind(el);\n }\n return this;\n};\n","import type { ReadonlyAtom } from '@but212/atom-effect';\nimport { computed, atom as createAtom, effect, untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES, ROUTE_DEFAULTS } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { RouteConfig, Router, WritableAtom } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// --- Helper: Safe History API Wrappers ---\nfunction safePushState(data: unknown, url: string | URL | null): void {\n try {\n history.pushState(data, '', url);\n } catch (e) {\n debug.warn(\n LOG_PREFIXES.ROUTE,\n 'PushState failed (likely file:// protocol or security restriction). UI will update, but URL will not.',\n e\n );\n }\n}\n\nclass RouterImpl implements Router {\n public currentRoute: ReadonlyAtom<string>;\n public queryParams: ReadonlyAtom<Record<string, string>>;\n\n private config: RouteConfig &\n Required<Pick<RouteConfig, 'mode' | 'basePath' | 'autoBindLinks' | 'activeClass'>>;\n private readonly isHistoryMode: boolean;\n private readonly basePath: string;\n private readonly activeClass: string;\n\n private isDestroyed = false;\n private previousRoute = '';\n private previousUrl: string;\n private cleanups: Array<() => void> = [];\n private $target: JQuery;\n private currentRouteAtom: WritableAtom<string>;\n private queryParamsAtom: WritableAtom<Record<string, string>>;\n private templateCache = new Map<string, HTMLTemplateElement>();\n private routeCleanups: Array<() => void> = [];\n private lastRawQuery = '';\n private cachedParams: Record<string, string> = {};\n\n constructor(config: RouteConfig) {\n this.config = {\n mode: ROUTE_DEFAULTS.mode,\n basePath: ROUTE_DEFAULTS.basePath,\n autoBindLinks: ROUTE_DEFAULTS.autoBindLinks,\n activeClass: ROUTE_DEFAULTS.activeClass,\n ...config,\n } as typeof this.config;\n\n this.isHistoryMode = this.config.mode === 'history';\n this.basePath = this.config.basePath.replace(/\\/$/, '');\n this.activeClass = this.config.activeClass;\n\n this.$target = $(this.config.target);\n this.previousUrl = this.isHistoryMode ? location.pathname + location.search : location.hash;\n this.currentRouteAtom = createAtom(this.getRouteName());\n this.currentRoute = this.currentRouteAtom;\n this.queryParamsAtom = createAtom(this.getQueryParams());\n this.queryParams = computed(() => this.queryParamsAtom.value);\n this.init();\n }\n\n private init() {\n const event = this.isHistoryMode ? 'popstate' : 'hashchange';\n const handler = this.handleUrlChange.bind(this);\n window.addEventListener(event, handler);\n this.cleanups.push(() => window.removeEventListener(event, handler));\n\n const renderEffect = effect(() => {\n const routeName = this.currentRouteAtom.value;\n untracked(() => {\n for (const fn of this.routeCleanups)\n try {\n fn();\n } catch {}\n this.routeCleanups.length = 0;\n });\n this.renderRoute(routeName);\n });\n this.cleanups.push(() => renderEffect.dispose());\n this.setupAutoBindLinks();\n if (this.$target[0]) registry.trackCleanup(this.$target[0], () => this.destroy());\n }\n\n private getRouteName(): string {\n const { default: defaultRoute } = this.config;\n if (this.isHistoryMode) {\n const base = this.basePath;\n let path = location.pathname;\n if (base && path.startsWith(base)) {\n path = path.substring(base.length);\n }\n return path.replace(/^\\//, '') || defaultRoute!;\n }\n return location.hash.split('?')[0]!.substring(1) || defaultRoute!;\n }\n\n private getQueryParams(): Record<string, string> {\n const hash = location.hash;\n const queryIndex = hash.indexOf('?');\n const raw = this.isHistoryMode\n ? location.search.substring(1)\n : queryIndex !== -1\n ? hash.substring(queryIndex + 1)\n : '';\n\n if (raw === this.lastRawQuery) return this.cachedParams;\n this.lastRawQuery = raw;\n\n const res: Record<string, string> = {};\n let newLen = 0;\n if (raw) {\n new URLSearchParams(raw).forEach((v, k) => {\n res[k] = v;\n newLen++;\n });\n }\n\n let oldLen = 0;\n for (const _ in this.cachedParams) oldLen++;\n\n let changed = newLen !== oldLen;\n if (!changed) {\n for (const k in res) {\n if (res[k] !== this.cachedParams[k]) {\n changed = true;\n break;\n }\n }\n }\n\n if (changed) {\n if (raw.indexOf('%') !== -1)\n try {\n decodeURIComponent(raw);\n } catch {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.MALFORMED_URI(raw));\n }\n this.cachedParams = res;\n }\n return this.cachedParams;\n }\n\n private setUrl(name: string): void {\n const url = this.isHistoryMode ? `${this.basePath}/${name}` : `#${name}`;\n if (this.isHistoryMode) {\n safePushState(null, url);\n } else {\n location.hash = url;\n }\n this.previousUrl = this.isHistoryMode ? url : location.hash;\n }\n\n private restoreUrl(): void {\n if (this.isHistoryMode) {\n safePushState(null, this.previousUrl);\n } else {\n location.hash = this.previousUrl;\n }\n }\n\n private renderRoute(name: string): void {\n if (this.isDestroyed || !this.$target[0]) return;\n const { routes, notFound, beforeTransition, afterTransition } = this.config;\n const cfg = routes[name] ?? (notFound ? routes[notFound] : undefined);\n if (!cfg) {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.NOT_FOUND(name));\n return;\n }\n\n const params = this.getQueryParams(),\n from = this.previousRoute;\n if (beforeTransition) untracked(() => beforeTransition(from, name));\n\n this.$target.empty();\n let routeParams = params;\n if (cfg.onEnter) {\n const res = untracked(() => cfg.onEnter!(params, this));\n if (res) routeParams = { ...params, ...res };\n }\n\n const onUnmount = (fn: () => void) => this.routeCleanups.push(fn);\n if (cfg.render) cfg.render(this.$target[0], name, routeParams, onUnmount, this);\n else if (cfg.template) {\n let tmpl = this.templateCache.get(cfg.template);\n if (!tmpl) {\n const el = document.querySelector(cfg.template);\n if (el instanceof HTMLTemplateElement) {\n tmpl = el;\n this.templateCache.set(cfg.template, tmpl);\n } else {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.TEMPLATE_NOT_FOUND(cfg.template));\n return;\n }\n }\n this.$target.append(tmpl.content.cloneNode(true) as DocumentFragment);\n if (cfg.onMount) cfg.onMount(this.$target.children(), onUnmount, this);\n }\n\n if (afterTransition) untracked(() => afterTransition(from, name));\n this.previousRoute = name;\n }\n\n private handleUrlChange(): void {\n if (this.isDestroyed) return;\n\n const currentUrl = this.isHistoryMode ? location.pathname + location.search : location.hash;\n if (currentUrl === this.previousUrl) return;\n\n const nextRoute = this.getRouteName();\n const oldRoute = this.currentRouteAtom.peek();\n\n if (oldRoute !== nextRoute) {\n if (untracked(() => this.config.routes[oldRoute]?.onLeave?.(this)) === false) {\n this.restoreUrl();\n return;\n }\n this.currentRouteAtom.value = nextRoute;\n }\n this.queryParamsAtom.value = this.getQueryParams();\n this.previousUrl = currentUrl;\n }\n\n private setupAutoBindLinks(): void {\n if (!this.config.autoBindLinks) return;\n const onClick = (e: JQuery.TriggeredEvent) => {\n e.preventDefault();\n const r = (e.currentTarget as HTMLElement).dataset.route;\n if (r != null) this.navigate(r);\n };\n $(document).on('click', '[data-route]', onClick);\n this.cleanups.push(() => $(document).off('click', '[data-route]', onClick));\n\n let previousActiveNodes: HTMLElement[] = [];\n const activeLinkEffect = effect(() => {\n const routeName = this.currentRouteAtom.value;\n const activeClass = this.activeClass;\n untracked(() => {\n const len = previousActiveNodes.length;\n for (let i = 0; i < len; i++) {\n const el = previousActiveNodes[i]!;\n el.classList.remove(activeClass);\n el.removeAttribute('aria-current');\n }\n\n try {\n const selector = `[data-route=\"${routeName.replace(/\"/g, '\\\\\"')}\"]`;\n const nodes = Array.from(document.querySelectorAll<HTMLElement>(selector));\n const nLen = nodes.length;\n for (let i = 0; i < nLen; i++) {\n const el = nodes[i]!;\n el.classList.add(activeClass);\n el.setAttribute('aria-current', 'page');\n }\n previousActiveNodes = nodes;\n } catch {\n previousActiveNodes = [];\n }\n });\n });\n this.cleanups.push(() => activeLinkEffect.dispose());\n }\n\n public navigate(name: string): void {\n if (this.isDestroyed) return;\n const old = this.currentRouteAtom.peek();\n if (this.config.routes[old]?.onLeave?.(this) === false) return;\n\n const resolved = name || this.config.default;\n if (!resolved) return;\n\n this.setUrl(resolved);\n this.queryParamsAtom.value = {};\n this.currentRouteAtom.value = resolved;\n }\n\n public destroy(): void {\n if (this.isDestroyed) return;\n this.isDestroyed = true;\n for (const fn of this.cleanups)\n try {\n fn();\n } catch {}\n this.templateCache.clear();\n }\n}\n\n/**\n * Creates an SPA router with reactive state management.\n */\nexport function route(config: RouteConfig): Router {\n return new RouterImpl(config);\n}\n\n$.extend({\n route,\n});\n","import { computed } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { ComputedAtom, FetchError, FetchOptions } from '@/types';\n\n// ============================================================================\n// atomFetch\n// ============================================================================\n\n/**\n * Context for a reactive fetch operation.\n * Manages the lifecycle of a single $.ajax request, including automatic\n * cancellation (via AbortController) and reactive URL/option resolution.\n */\nclass FetchContext<T> {\n private abortController: AbortController | null = null;\n private readonly staticOptions: JQuery.AjaxSettings;\n private readonly ajaxOptionsFn: (() => JQuery.AjaxSettings) | undefined;\n private readonly getUrl: () => string;\n\n /**\n * Optimization: If true, the URL is a static string and doesn't need to be\n * re-evaluated within a reactive scope.\n */\n private readonly isStaticUrl: boolean;\n private readonly staticUrl: string | undefined;\n\n private readonly transformFn: ((val: unknown) => T) | undefined;\n private readonly onErrorFn: ((err: unknown) => void) | undefined;\n\n constructor(urlOrFn: string | (() => string), options: FetchOptions<T>) {\n const isStatic = typeof urlOrFn === 'string';\n this.isStaticUrl = isStatic;\n if (isStatic) {\n this.staticUrl = urlOrFn as string;\n this.getUrl = () => this.staticUrl!;\n } else {\n this.getUrl = urlOrFn as () => string;\n }\n\n this.ajaxOptionsFn =\n typeof options.ajaxOptions === 'function' ? options.ajaxOptions : undefined;\n\n const baseAjax = typeof options.ajaxOptions === 'object' ? options.ajaxOptions : {};\n this.staticOptions = {\n ...baseAjax,\n method: options.method,\n headers: { ...(baseAjax as JQuery.AjaxSettings)?.headers, ...options.headers },\n };\n this.transformFn = options.transform;\n this.onErrorFn = options.onError;\n }\n\n public abort(): void {\n this.abortController?.abort();\n }\n\n private handleError(err: unknown): never {\n let final: Error;\n if (err && typeof (err as JQuery.jqXHR).readyState !== 'undefined') {\n const x = err as JQuery.jqXHR;\n final = new Error(`Network Error: ${x.statusText || 'Unknown'} (${x.status})`);\n (final as FetchError).jqXHR = x;\n } else {\n final = err instanceof Error ? err : new Error(String(err ?? 'Unknown error'));\n }\n\n if (this.onErrorFn) {\n try {\n this.onErrorFn(final);\n } catch {\n // Suppress errors in error callback\n }\n }\n throw final;\n }\n\n public execute = async (): Promise<T> => {\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n const dynamicOptions = this.ajaxOptionsFn?.() ?? {};\n // Use shallow merge for high-performance request setup\n const req: JQuery.AjaxSettings = {\n ...this.staticOptions,\n ...dynamicOptions,\n headers: {\n ...this.staticOptions.headers,\n ...dynamicOptions.headers,\n },\n url: this.isStaticUrl ? this.staticUrl : this.getUrl(),\n success: undefined,\n error: undefined,\n complete: undefined,\n };\n const xhr = $.ajax(req);\n\n signal.onabort = () => xhr.abort();\n if (signal.aborted) xhr.abort();\n\n try {\n const raw = await xhr;\n return this.transformFn ? this.transformFn(raw) : (raw as T);\n } catch (err) {\n if (signal.aborted) {\n const e = new Error('AbortError');\n e.name = 'AbortError';\n throw e;\n }\n return this.handleError(err);\n } finally {\n signal.onabort = null;\n if (this.abortController?.signal === signal) this.abortController = null;\n }\n };\n}\n\n/**\n * Creates a declarative reactive AJAX primitive.\n * Wraps core's async `computed` with jQuery's `$.ajax`.\n *\n * Features:\n * - Auto-Cancellation: Aborts pending requests when dependencies change.\n * - Reactive URL: Re-fetches automatically if `urlOrFn` depends on atoms.\n * - Error Isolation: Network errors are captured in .hasError/.lastError.\n */\n$.extend({\n atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T> {\n const ctx = new FetchContext<T>(urlOrFn, options);\n const atomVal = computed(ctx.execute, {\n defaultValue: options.defaultValue,\n lazy: options.eager === false,\n });\n return Object.assign(atomVal, {\n abort: () => ctx.abort(),\n }) as ComputedAtom<T> & { abort: () => void };\n },\n});\n","/**\n * atom-effect-jquery\n *\n * Brings reactivity to jQuery.\n *\n * Features:\n * - Full CJK IME Support (Input Method Editor).\n * - Auto-cleanup via MutationObserver (No memory leaks).\n * - Debug Mode: Console logging + Visual Highlighting.\n *\n * Type augmentation note:\n * This package extends both `JQuery` and `JQueryStatic` via global interface\n * merging in `types.ts`. Consumers using the `export default $` path will\n * receive the augmented type automatically because the module's side-effect\n * imports apply the augmentation at import time.\n */\n\nimport $ from 'jquery';\nimport '@/core/namespace'; // $.atom, $.computed, etc.\nimport '@/bindings/chainable'; // $.fn.atomText, etc.\nimport '@/bindings/list'; // $.fn.atomList\nimport '@/bindings/mount'; // $.fn.atomMount\nimport '@/features/route'; // $.route\nimport '@/features/fetch'; // $.atomFetch\n\nimport { enablejQueryOverrides } from '@/core/jquery-patch';\nimport { disableAutoCleanup, enableAutoCleanup, registry } from '@/core/registry';\n\n// Global initialization on DOM ready.\n$(() => {\n enablejQueryOverrides();\n enableAutoCleanup(document.body!);\n});\n\nexport { disablejQueryOverrides, enablejQueryOverrides } from '@/core/jquery-patch';\nexport { nextTick } from '@/core/namespace';\nexport type {\n BindingOptions,\n ComponentFn,\n ComputedAtom,\n CssBindings,\n CssValue,\n EffectCleanup,\n EffectResult,\n EqualFn,\n FetchOptions,\n ListOptions,\n PrimitiveValue,\n ReactiveValue,\n ReadonlyAtom,\n RenderRoute,\n RouteConfig,\n RouteDefinition,\n RouteLifecycle,\n Router,\n TemplateRoute,\n ValOptions,\n WritableAtom,\n} from '@/types';\nexport { isReactive } from '@/utils';\nexport { disableAutoCleanup, enableAutoCleanup, registry };\n\nexport default $;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atom-effect-jquery.min.js","names":["$"],"sources":["../../core/dist/index.mjs","../src/utils/index.ts","../src/constants.ts","../src/utils/debug.ts","../src/core/namespace.ts","../src/utils/pool.ts","../src/core/registry.ts","../src/core/jquery-patch.ts","../src/types.ts","../src/bindings/input-binding.ts","../src/core/effect-factory.ts","../src/utils/sanitize.ts","../src/bindings/unified.ts","../src/bindings/form.ts","../src/bindings/chainable.ts","../src/bindings/list.ts","../src/bindings/mount.ts","../src/features/route.ts","../src/features/fetch.ts","../src/index.ts"],"sourcesContent":["var y = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, I = {\n DISPOSED: 1,\n EXECUTING: 8\n}, B = {\n DISPOSED: 1,\n IS_COMPUTED: 2,\n DIRTY: 8,\n IDLE: 16,\n PENDING: 32,\n RESOLVED: 64,\n REJECTED: 128,\n RECOMPUTING: 256,\n HAS_ERROR: 512,\n FORCE_COMPUTE: 1024\n}, a = {\n DISPOSED: 1,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, C = {\n MAX_EXECUTIONS_PER_SECOND: 1e3,\n MAX_EXECUTIONS_PER_EFFECT: 100,\n MAX_EXECUTIONS_PER_FLUSH: 1e4,\n MAX_FLUSH_ITERATIONS: 1e3,\n MIN_FLUSH_ITERATIONS: 10,\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, Z = {\n WARN_INFINITE_LOOP: !0,\n EFFECT_FREQUENCY_WINDOW: 1e3\n}, ut = { MAX_PROMISE_ID: Number.MAX_SAFE_INTEGER - 1 }, b = {\n UNINITIALIZED: -1,\n MIN: 1\n}, X = 1073741823, Tt = (typeof process < \"u\" && process.env, !1), Y = Object.freeze([]), T = class extends Error {\n constructor(t, s = null, e = !0) {\n super(t), this.cause = s, this.recoverable = e, this.name = \"AtomError\";\n }\n}, m = class extends T {\n constructor(t, s = null) {\n super(t, s, !0), this.name = \"ComputedError\";\n }\n}, v = class extends T {\n constructor(t, s = null) {\n super(t, s, !1), this.name = \"EffectError\";\n }\n}, U = class extends T {\n constructor(t, s = null) {\n super(t, s, !1), this.name = \"SchedulerError\";\n }\n}, c = {\n COMPUTED_MUST_BE_FUNCTION: \"Computed target must be a function\",\n COMPUTED_ASYNC_PENDING_NO_DEFAULT: \"Async computation pending with no default value\",\n COMPUTED_COMPUTATION_FAILED: \"Computation execution failed\",\n COMPUTED_ASYNC_COMPUTATION_FAILED: \"Async computation execution failed\",\n COMPUTED_CIRCULAR_DEPENDENCY: \"Circular dependency detected\",\n COMPUTED_DISPOSED: \"Attempted to access disposed computed\",\n ATOM_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscriber must be a function or Subscriber object\",\n ATOM_INDIVIDUAL_SUBSCRIBER_FAILED: \"Subscriber execution failed\",\n EFFECT_MUST_BE_FUNCTION: \"Effect target must be a function\",\n EFFECT_EXECUTION_FAILED: \"Effect execution failed\",\n EFFECT_CLEANUP_FAILED: \"Effect cleanup failed\",\n EFFECT_DISPOSED: \"Attempted to run disposed effect\",\n SCHEDULER_FLUSH_OVERFLOW: (t, s) => `Maximum flush iterations (${t}) exceeded. ${s} jobs dropped. Possible infinite loop.`,\n CALLBACK_ERROR_IN_ERROR_HANDLER: \"Exception encountered in onError handler\",\n EFFECT_FREQUENCY_LIMIT_EXCEEDED: \"Effect executed too frequently within 1 second. Suspected infinite loop.\",\n SCHEDULER_CALLBACK_MUST_BE_FUNCTION: \"Scheduler callback must be a function\",\n SCHEDULER_END_BATCH_WITHOUT_START: \"endBatch() called without matching startBatch(). Ignoring.\",\n BATCH_CALLBACK_MUST_BE_FUNCTION: \"Batch callback must be a function\"\n};\nfunction g(t, s, e) {\n return t instanceof T ? t : t instanceof Error ? new s(`${t.name || t.constructor.name || \"Error\"} (${e}): ${t.message}`, t) : new s(`Unexpected error (${e}): ${String(t)}`);\n}\nvar q = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), lt = /* @__PURE__ */ Symbol(\"AtomEffect.Id\"), j = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), L = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), ht = class {\n constructor() {\n this.enabled = !1, this.warnInfiniteLoop = Z.WARN_INFINITE_LOOP;\n }\n warn(t, s) {\n }\n attachDebugInfo(t, s, e) {\n }\n getDebugName(t) {\n if (t != null)\n return t[q];\n }\n getDebugType(t) {\n if (t != null)\n return t[j];\n }\n}, G = new ht(), ct = 1, _t = () => ct++ | 0, J = class {\n constructor() {\n this._s0 = null, this._s1 = null, this._s2 = null, this._s3 = null, this._count = 0, this._overflow = null, this._freeIndices = null;\n }\n get size() {\n return this._count;\n }\n getAt(t) {\n if (t < 4) switch (t) {\n case 0:\n return this._s0;\n case 1:\n return this._s1;\n case 2:\n return this._s2;\n case 3:\n return this._s3;\n }\n const s = this._overflow;\n if (s !== null) {\n const e = s[t - 4];\n return e === void 0 ? null : e;\n }\n return null;\n }\n setAt(t, s) {\n switch (t) {\n case 0:\n this._s0 = s;\n break;\n case 1:\n this._s1 = s;\n break;\n case 2:\n this._s2 = s;\n break;\n case 3:\n this._s3 = s;\n break;\n default:\n this._overflow ??= [], this._overflow[t - 4] = s;\n }\n t >= this._count && (this._count = t + 1);\n }\n truncateFrom(t) {\n const s = this._count;\n if (t >= s) return;\n if (t <= 3) {\n if (t <= 0) {\n const i = this._s0;\n i != null && (this._onItemRemoved(i), this._s0 = null);\n }\n if (t <= 1) {\n const i = this._s1;\n i != null && (this._onItemRemoved(i), this._s1 = null);\n }\n if (t <= 2) {\n const i = this._s2;\n i != null && (this._onItemRemoved(i), this._s2 = null);\n }\n if (t <= 3) {\n const i = this._s3;\n i != null && (this._onItemRemoved(i), this._s3 = null);\n }\n }\n const e = this._overflow;\n if (e !== null && s > 4) {\n const i = t > 4 ? t - 4 : 0, r = e.length;\n for (let n = i; n < r; n++) {\n const o = e[n];\n o != null && (this._onItemRemoved(o), e[n] = null);\n }\n t <= 4 ? (e.length = 0, this._overflow = null) : e.length = t - 4;\n }\n this._freeIndices !== null && (this._freeIndices = null), this._count = t;\n }\n _onItemRemoved(t) {\n }\n add(t) {\n if (this._s0 === null) {\n this._s0 = t, this._count++;\n return;\n }\n if (this._s1 === null) {\n this._s1 = t, this._count++;\n return;\n }\n if (this._s2 === null) {\n this._s2 = t, this._count++;\n return;\n }\n if (this._s3 === null) {\n this._s3 = t, this._count++;\n return;\n }\n this._addToOverflow(t);\n }\n _addToOverflow(t) {\n const s = this._overflow;\n if (s === null) this._overflow = [t];\n else {\n const e = this._freeIndices;\n e !== null && e.length > 0 ? s[e.pop()] = t : s.push(t);\n }\n this._count++;\n }\n remove(t) {\n if (this._s0 === t)\n return this._s0 = null, this._count--, !0;\n if (this._s1 === t)\n return this._s1 = null, this._count--, !0;\n if (this._s2 === t)\n return this._s2 = null, this._count--, !0;\n if (this._s3 === t)\n return this._s3 = null, this._count--, !0;\n const s = this._overflow;\n if (s == null) return !1;\n for (let e = 0, i = s.length; e < i; e++) if (s[e] === t) {\n s[e] = null, this._count--;\n let r = this._freeIndices;\n return r === null && (r = this._freeIndices = []), r.push(e), !0;\n }\n return !1;\n }\n has(t) {\n if (this._count === 0) return !1;\n if (this._s0 === t || this._s1 === t || this._s2 === t || this._s3 === t) return !0;\n const s = this._overflow;\n if (s != null) {\n for (let e = 0, i = s.length; e < i; e++) if (s[e] === t) return !0;\n }\n return !1;\n }\n forEach(t) {\n const s = this._count;\n if (s === 0) return;\n let e = 0;\n const i = this._s0;\n if (i != null && (t(i), ++e === s))\n return;\n const r = this._s1;\n if (r != null && (t(r), ++e === s))\n return;\n const n = this._s2;\n if (n != null && (t(n), ++e === s))\n return;\n const o = this._s3;\n if (o != null && (t(o), ++e === s))\n return;\n const u = this._overflow;\n if (u != null) for (let l = 0, h = u.length; l < h; l++) {\n const f = u[l];\n if (f != null && (t(f), ++e === s))\n return;\n }\n }\n forEachIndexed(t) {\n const s = this._count;\n if (s === 0) return 0;\n let e = 0;\n const i = this._s0;\n if (i != null && (t(i), ++e === s))\n return e;\n const r = this._s1;\n if (r != null && (t(r), ++e === s))\n return e;\n const n = this._s2;\n if (n != null && (t(n), ++e === s))\n return e;\n const o = this._s3;\n if (o != null && (t(o), ++e === s))\n return e;\n const u = this._overflow;\n if (u != null) for (let l = 0, h = u.length; l < h; l++) {\n const f = u[l];\n if (f != null && (t(f), ++e === s))\n return e;\n }\n return e;\n }\n compact() {\n const t = this._overflow;\n if (t === null) return;\n let s = t.length;\n if (s === 0) return;\n let e = 0;\n for (; e < s; ) if (t[e] === null) {\n for (; s > e && t[s - 1] === null; )\n t.pop(), s--;\n s > e && (t[e] = t.pop(), s--, e++);\n } else e++;\n this._freeIndices = null, s === 0 && (this._overflow = null);\n }\n clear() {\n this._s0 = null, this._s1 = null, this._s2 = null, this._s3 = null, this._count = 0, this._overflow !== null && (this._overflow.length = 0, this._overflow = null), this._freeIndices = null;\n }\n dispose() {\n this.clear();\n }\n}, tt = class extends J {\n constructor(...t) {\n super(...t), this._map = null, this._SCAN_THRESHOLD = 32, this.hasComputeds = !1;\n }\n prepareTracking() {\n this.hasComputeds = !1;\n }\n _onItemRemoved(t) {\n const s = t.unsub;\n s && s();\n }\n claimExisting(t, s) {\n const e = this._count;\n if (s >= e) return !1;\n const i = e - s;\n if (this._map !== null || i > this._SCAN_THRESHOLD) return this._claimViaMap(t, s);\n if (s < 4) switch (s) {\n case 0: {\n const n = this._s0;\n if (n && n.node === t && n.unsub)\n return n.version = t.version, !0;\n }\n case 1:\n if (e > 1) {\n const n = this._s1;\n if (n && n.node === t && n.unsub)\n return n.version = t.version, s !== 1 && (this._s1 = this._s0, this._s0 = n), !0;\n }\n case 2:\n if (e > 2) {\n const n = this._s2;\n if (n && n.node === t && n.unsub) {\n if (n.version = t.version, s !== 2) {\n const o = s === 0 ? this._s0 : this._s1;\n s === 0 ? this._s0 = n : this._s1 = n, this._s2 = o;\n }\n return !0;\n }\n }\n case 3:\n if (e > 3) {\n const n = this._s3;\n if (n && n.node === t && n.unsub) {\n if (n.version = t.version, s !== 3) {\n let o;\n s === 0 ? (o = this._s0, this._s0 = n) : s === 1 ? (o = this._s1, this._s1 = n) : (o = this._s2, this._s2 = n), this._s3 = o;\n }\n return !0;\n }\n }\n }\n const r = this._overflow;\n if (r) {\n const n = t.version, o = s > 4 ? s : 4, u = r.length;\n for (let l = o - 4; l < u; l++) {\n const h = r[l];\n if (h && h.node === t && h.unsub)\n return h.version = n, this._swapGeneral(l + 4, s, h), !0;\n }\n }\n return !1;\n }\n _claimViaMap(t, s) {\n let e = this._map;\n if (e === null) {\n e = this._map = /* @__PURE__ */ new Map();\n const n = this._count;\n if (s < 4) {\n const u = this._s0;\n s <= 0 && u?.unsub && e.set(u.node, 0);\n const l = this._s1;\n s <= 1 && l?.unsub && e.set(l.node, 1);\n const h = this._s2;\n s <= 2 && h?.unsub && e.set(h.node, 2);\n const f = this._s3;\n s <= 3 && f?.unsub && e.set(f.node, 3);\n }\n const o = this._overflow;\n if (o && n > 4) {\n const u = s > 4 ? s : 4, l = o.length;\n for (let h = u - 4; h < l; h++) {\n const f = o[h];\n f?.unsub && e.set(f.node, h + 4);\n }\n }\n }\n const i = e.get(t);\n if (i === void 0 || i < s) return !1;\n const r = this.getAt(i);\n if (r == null || !r.unsub) return !1;\n if (r.version = t.version, i !== s) {\n let n;\n s === 0 ? n = this._s0 : s === 1 ? n = this._s1 : s === 2 ? n = this._s2 : s === 3 ? n = this._s3 : n = this._overflow[s - 4] ?? null, this.setAt(s, r), this.setAt(i, n), n?.unsub && e.set(n.node, i), e.set(t, s);\n }\n return !0;\n }\n _swapGeneral(t, s, e) {\n if (t === s) return;\n let i;\n if (s === 0 ? i = this._s0 : s === 1 ? i = this._s1 : s === 2 ? i = this._s2 : s === 3 ? i = this._s3 : i = this._overflow[s - 4] ?? null, this.setAt(s, e), t === 0) this._s0 = i;\n else if (t === 1) this._s1 = i;\n else if (t === 2) this._s2 = i;\n else if (t === 3) this._s3 = i;\n else {\n const r = this._overflow;\n r[t - 4] = i;\n }\n }\n insertNew(t, s) {\n const e = this._count;\n if (t < e) {\n let i;\n t === 0 ? i = this._s0 : t === 1 ? i = this._s1 : t === 2 ? i = this._s2 : t === 3 ? i = this._s3 : i = this._overflow[t - 4] ?? null, i != null && (this._addToOverflow(i), this._map !== null && i.unsub && this._map.set(i.node, this._count - 1));\n }\n if (t === 0) this._s0 = s;\n else if (t === 1) this._s1 = s;\n else if (t === 2) this._s2 = s;\n else if (t === 3) this._s3 = s;\n else {\n let i = this._overflow;\n i || (i = [], this._overflow = i), i[t - 4] = s;\n }\n t >= e && (this._count = t + 1);\n }\n truncateFrom(t) {\n t >= this._count || (super.truncateFrom(t), this._map !== null && (this._map.clear(), this._map = null));\n }\n disposeAll() {\n this._count > 0 && this.truncateFrom(0), this.hasComputeds = !1;\n }\n remove(t) {\n throw new Error(\"remove() is strictly prohibited in DepSlotBuffer to preserve sequential cache paths.\");\n }\n compact() {\n }\n}, z = class {\n constructor(t, s, e = void 0) {\n this.node = t, this.version = s, this.unsub = e;\n }\n}, ft = class {\n constructor(t, s) {\n this.fn = t, this.sub = s;\n }\n notify(t, s) {\n const e = this.fn;\n if (e !== void 0) {\n e(t, s);\n return;\n }\n const i = this.sub;\n i !== void 0 && i.execute();\n }\n}, at = class {\n constructor() {\n this.current = null;\n }\n run(t, s) {\n if (this.current === t) return s();\n const e = this.current;\n this.current = t;\n try {\n return s();\n } finally {\n this.current = e;\n }\n }\n}, _ = new at();\nfunction mt(t) {\n const s = _, e = s.current;\n if (e === null) return t();\n s.current = null;\n try {\n return t();\n } finally {\n s.current = e;\n }\n}\nvar Q = class {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = b.UNINITIALIZED, this._notifying = 0, this._hotIndex = -1, this._slots = null, this._deps = null, this.id = _t() & X;\n }\n get isDisposed() {\n return (this.flags & B.DISPOSED) !== 0;\n }\n get isComputed() {\n return (this.flags & B.IS_COMPUTED) !== 0;\n }\n get hasError() {\n return !1;\n }\n subscribe(t) {\n const s = typeof t == \"function\";\n if (!s && (!t || typeof t.execute != \"function\")) throw g(/* @__PURE__ */ new TypeError(\"Invalid subscriber\"), T, c.ATOM_SUBSCRIBER_MUST_BE_FUNCTION);\n let e = this._slots;\n e || (e = new J(), this._slots = e);\n let i = !1;\n if (e._s0 != null && (s ? e._s0.fn === t : e._s0.sub === t)) i = !0;\n else if (e._s1 != null && (s ? e._s1.fn === t : e._s1.sub === t)) i = !0;\n else if (e._s2 != null && (s ? e._s2.fn === t : e._s2.sub === t)) i = !0;\n else if (e._s3 != null && (s ? e._s3.fn === t : e._s3.sub === t)) i = !0;\n else {\n const n = e._overflow;\n if (n != null) for (let o = 0, u = n.length; o < u; o++) {\n const l = n[o];\n if (l != null && (s ? l.fn === t : l.sub === t)) {\n i = !0;\n break;\n }\n }\n }\n if (i)\n return () => {\n };\n const r = new ft(s ? t : void 0, s ? void 0 : t);\n return e.add(r), () => this._unsubscribe(r);\n }\n _unsubscribe(t) {\n const s = this._slots;\n s && (s.remove(t), this._notifying === 0 && s.compact());\n }\n subscriberCount() {\n const t = this._slots;\n return t === null ? 0 : t.size;\n }\n _notifySubscribers(t, s) {\n const e = this._slots;\n if (!(e === null || e.size === 0)) {\n this._notifying++;\n try {\n let i = e._s0;\n if (i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s1, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s2, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n if (i = e._s3, i != null) try {\n i.notify(t, s);\n } catch (n) {\n this._logNotifyError(n);\n }\n const r = e._overflow;\n if (r != null) for (let n = 0, o = r.length; n < o; n++) {\n const u = r[n];\n if (u != null) try {\n u.notify(t, s);\n } catch (l) {\n this._logNotifyError(l);\n }\n }\n } finally {\n --this._notifying === 0 && e.compact();\n }\n }\n }\n _logNotifyError(t) {\n console.error(g(t, T, c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n _isDirty() {\n const t = this._deps;\n if (t === null || t.size === 0) return !1;\n const s = this._hotIndex;\n if (s !== -1) {\n const e = t.getAt(s);\n if (e != null && e.node.version !== e.version) return !0;\n }\n return this._deepDirtyCheck();\n }\n}, $ = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), st = /* @__PURE__ */ Symbol.for(\"atom-effect/computed\"), et = /* @__PURE__ */ Symbol.for(\"atom-effect/effect\"), Et = /* @__PURE__ */ Symbol.for(\"atom-effect/writable\"), P = 0;\nfunction k() {\n const t = P + 1 & X;\n return P = t === 0 ? 1 : t, P;\n}\nfunction H(t) {\n const s = t + 1 & X;\n return s === 0 ? 1 : s;\n}\nvar V = 0, R = !1, it = 0;\nfunction dt() {\n return it;\n}\nfunction W() {\n return R ? !1 : (R = !0, it = k(), V = 0, !0);\n}\nfunction K() {\n R = !1;\n}\nfunction pt() {\n if (!R) return 0;\n const t = ++V;\n if (t <= C.MAX_EXECUTIONS_PER_FLUSH) return t;\n throw new Error(`[atom-effect] Infinite loop detected: flush execution count exceeded ${C.MAX_EXECUTIONS_PER_FLUSH}`);\n}\nvar Ct = class {\n constructor() {\n this._queueBuffer = [[], []], this._bufferIndex = 0, this._size = 0, this._epoch = 0, this._isProcessing = !1, this._isFlushingSync = !1, this._batchDepth = 0, this._batchQueue = [], this._batchQueueSize = 0, this._maxFlushIterations = C.MAX_FLUSH_ITERATIONS, this.onOverflow = null, this._boundRunLoop = this._runLoop.bind(this);\n }\n get queueSize() {\n return this._size;\n }\n get isBatching() {\n return this._batchDepth > 0;\n }\n schedule(t) {\n const s = this._epoch;\n if (t._nextEpoch === s) return;\n if (t._nextEpoch = s, this._batchDepth > 0 || this._isFlushingSync) {\n this._batchQueue[this._batchQueueSize++] = t;\n return;\n }\n const e = this._bufferIndex, i = this._queueBuffer[e];\n i[this._size++] = t, this._isProcessing || this._flush();\n }\n _flush() {\n this._isProcessing || this._size === 0 || (this._isProcessing = !0, queueMicrotask(this._boundRunLoop));\n }\n _runLoop() {\n try {\n if (this._size === 0) return;\n const t = W();\n this._drainQueue(), t && K();\n } finally {\n this._isProcessing = !1, this._size > 0 && this._batchDepth === 0 && this._flush();\n }\n }\n _flushSync() {\n this._isFlushingSync = !0;\n const t = W();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, t && K();\n }\n }\n _mergeBatchQueue() {\n const t = this._batchQueueSize;\n if (t === 0) return;\n const s = ++this._epoch, e = this._batchQueue, i = this._bufferIndex, r = this._queueBuffer[i];\n let n = this._size;\n for (let o = 0; o < t; o++) {\n const u = e[o];\n u._nextEpoch !== s && (u._nextEpoch = s, r[n++] = u);\n }\n this._size = n, this._batchQueueSize = 0, e.length = 0;\n }\n _drainQueue() {\n let t = 0;\n for (; this._size > 0; ) {\n if (++t > this._maxFlushIterations) {\n this._handleFlushOverflow();\n return;\n }\n this._processQueue(), this._mergeBatchQueue();\n }\n }\n _processQueue() {\n const t = this._bufferIndex, s = this._queueBuffer[t], e = this._size;\n this._bufferIndex = t ^ 1, this._size = 0, this._epoch = this._epoch + 1 | 0;\n for (let i = 0; i < e; i++) {\n const r = s[i];\n try {\n typeof r == \"function\" ? r() : r.execute();\n } catch (n) {\n console.error(new U(\"Error occurred during scheduler execution\", n));\n }\n }\n s.length = 0;\n }\n _handleFlushOverflow() {\n const t = this._size + this._batchQueueSize, s = this._maxFlushIterations;\n console.error(new U(c.SCHEDULER_FLUSH_OVERFLOW(s, t))), this._size = 0;\n const e = this._bufferIndex;\n this._queueBuffer[e].length = 0, this._batchQueueSize = 0;\n const i = this.onOverflow;\n if (i) try {\n i(t);\n } catch {\n }\n }\n startBatch() {\n this._batchDepth++;\n }\n endBatch() {\n this._batchDepth !== 0 && --this._batchDepth === 0 && this._flushSync();\n }\n setMaxFlushIterations(t) {\n if (t < C.MIN_FLUSH_ITERATIONS) throw new U(`Max flush iterations must be at least ${C.MIN_FLUSH_ITERATIONS}`);\n this._maxFlushIterations = t;\n }\n}, w = new Ct();\nfunction Nt(t) {\n if (typeof t != \"function\") throw new TypeError(c.BATCH_CALLBACK_MUST_BE_FUNCTION);\n const s = w;\n s.startBatch();\n try {\n return t();\n } finally {\n s.endBatch();\n }\n}\nvar It = class extends Q {\n constructor(t, s) {\n super(), this[$] = !0, this[Et] = !0, this._value = t, s && (this.flags |= a.SYNC), G.attachDebugInfo(this, \"atom\", this.id);\n }\n get isNotificationScheduled() {\n return (this.flags & a.NOTIFICATION_SCHEDULED) !== 0;\n }\n get isSync() {\n return (this.flags & a.SYNC) !== 0;\n }\n get value() {\n const t = _.current;\n return t?.addDependency(this), this._value;\n }\n set value(t) {\n const s = this._value;\n if (Object.is(s, t)) return;\n this._value = t, this.version = H(this.version);\n const e = this.flags;\n if ((e & a.NOTIFICATION_SCHEDULED) !== 0) return;\n const i = this._slots;\n i == null || i.size === 0 || (this._pendingOldValue = s, this.flags = e | a.NOTIFICATION_SCHEDULED, (e & a.SYNC) !== 0 && !w.isBatching ? this._flushNotifications() : w.schedule(this));\n }\n execute() {\n this._flushNotifications();\n }\n _flushNotifications() {\n const t = this.flags;\n if ((t & (a.NOTIFICATION_SCHEDULED | a.DISPOSED)) !== a.NOTIFICATION_SCHEDULED) return;\n const s = this._pendingOldValue;\n this._pendingOldValue = void 0, this.flags = t & ~a.NOTIFICATION_SCHEDULED, this._notifySubscribers(this._value, s);\n }\n peek() {\n return this._value;\n }\n dispose() {\n const t = this.flags;\n (t & a.DISPOSED) === 0 && (this._slots?.clear(), this.flags = t | a.DISPOSED, this._value = void 0, this._pendingOldValue = void 0);\n }\n _deepDirtyCheck() {\n return !1;\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n};\nfunction bt(t, s = {}) {\n return new It(t, s.sync ?? !1);\n}\nfunction yt(t) {\n return typeof t == \"object\" && t !== null && $ in t;\n}\nfunction At(t) {\n return typeof t == \"object\" && t !== null && st in t;\n}\nfunction Ot(t) {\n return typeof t == \"object\" && t !== null && et in t;\n}\nfunction nt(t) {\n return typeof t == \"object\" && t !== null && typeof t.then == \"function\";\n}\nvar { IDLE: p, DIRTY: E, PENDING: S, RESOLVED: d, REJECTED: D, HAS_ERROR: A, RECOMPUTING: N, DISPOSED: M, IS_COMPUTED: O, FORCE_COMPUTE: x } = B, Dt = class extends Q {\n constructor(t, s = {}) {\n if (typeof t != \"function\") throw new m(c.COMPUTED_MUST_BE_FUNCTION);\n if (super(), this[$] = !0, this[st] = !0, this._error = null, this._promiseId = 0, this._deps = new tt(), this._trackEpoch = b.UNINITIALIZED, this._trackCount = 0, this._value = void 0, this.flags = O | E | p, this._equal = s.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in s ? s.defaultValue : L, this._onError = s.onError ?? null, G.attachDebugInfo(this, \"computed\", this.id), s.lazy === !1) try {\n this._recompute();\n } catch {\n }\n }\n get isDirty() {\n return (this.flags & E) !== 0;\n }\n get isRejected() {\n return (this.flags & D) !== 0;\n }\n get isRecomputing() {\n return (this.flags & N) !== 0;\n }\n get _hasErrorInternal() {\n return (this.flags & A) !== 0;\n }\n _track() {\n _.current?.addDependency(this);\n }\n get value() {\n const t = _.current;\n t?.addDependency(this);\n let s = this.flags;\n if ((s & (d | E | p)) === d) return this._value;\n if ((s & M) !== 0) throw new m(c.COMPUTED_DISPOSED);\n if ((s & N) !== 0) {\n const r = this._defaultValue;\n if (r !== L) return r;\n throw new m(c.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if ((s & (E | p)) !== 0) {\n const r = this._deps;\n if ((s & p) === 0 && (s & x) === 0 && r.size > 0 && !this._isDirty() ? s = this.flags &= ~E : (this._recompute(), s = this.flags), (s & d) !== 0) return this._value;\n }\n const e = this._defaultValue, i = e !== L;\n if ((s & S) !== 0) {\n if (i) return e;\n throw new m(c.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if ((s & D) !== 0) {\n if (i) return e;\n throw this._error;\n }\n return this._value;\n }\n peek() {\n return this._value;\n }\n get state() {\n const t = _.current;\n t?.addDependency(this);\n const s = this.flags;\n return (s & d) !== 0 ? y.RESOLVED : (s & S) !== 0 ? y.PENDING : (s & D) !== 0 ? y.REJECTED : y.IDLE;\n }\n get hasError() {\n const t = _.current;\n if (t?.addDependency(this), (this.flags & (D | A)) !== 0) return !0;\n const s = this._deps;\n if (!s.hasComputeds) return !1;\n const e = s.size;\n for (let i = 0; i < e; i++) if (s.getAt(i)?.node.hasError) return !0;\n return !1;\n }\n get isValid() {\n return !this.hasError;\n }\n get errors() {\n const t = _.current;\n t?.addDependency(this);\n const s = this._error, e = this._deps;\n if (!e.hasComputeds)\n return s == null ? Y : Object.freeze([s]);\n const i = [];\n s != null && i.push(s);\n const r = e.size;\n for (let n = 0; n < r; n++) {\n const o = e.getAt(n);\n if (o == null) continue;\n const u = o.node;\n (u.flags & O) !== 0 && u.hasError && this._collectErrorsFromDep(u, i);\n }\n return i.length === 0 ? Y : Object.freeze(i);\n }\n _collectErrorsFromDep(t, s) {\n const e = t.errors, i = e.length;\n for (let r = 0; r < i; r++) {\n const n = e[r];\n n != null && !s.includes(n) && s.push(n);\n }\n }\n get lastError() {\n const t = _.current;\n return t?.addDependency(this), this._error;\n }\n get isPending() {\n const t = _.current;\n return t?.addDependency(this), (this.flags & S) !== 0;\n }\n get isResolved() {\n const t = _.current;\n return t?.addDependency(this), (this.flags & d) !== 0;\n }\n invalidate() {\n this.flags |= x, this._markDirty();\n }\n dispose() {\n (this.flags & M) === 0 && (this._deps.disposeAll(), this._slots != null && this._slots.clear(), this.flags = M | E | p, this._error = null, this._value = void 0, this._hotIndex = -1);\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n addDependency(t) {\n const s = this._trackEpoch;\n if (t._lastSeenEpoch === s) return;\n t._lastSeenEpoch = s;\n const e = this._trackCount++, i = this._deps, r = i.getAt(e);\n if (r != null && r.node === t) r.version = t.version;\n else if (!i.claimExisting(t, e)) {\n const n = new z(t, t.version, t.subscribe(this));\n i.insertNew(e, n);\n }\n (t.flags & O) !== 0 && (i.hasComputeds = !0);\n }\n _recompute() {\n if (this.isRecomputing) return;\n this.flags = (this.flags | N) & ~x, this._trackEpoch = k(), this._trackCount = 0, this._deps.prepareTracking(), this._hotIndex = -1;\n let t = !1;\n try {\n const s = _.run(this, this._fn);\n this._deps.truncateFrom(this._trackCount), t = !0, nt(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!t) try {\n this._deps.truncateFrom(this._trackCount);\n } catch {\n }\n this._handleError(s, c.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n this._trackEpoch = b.UNINITIALIZED, this._trackCount = 0, this.flags &= ~N;\n }\n }\n _handleAsyncComputation(t) {\n this.flags = (this.flags | S) & ~(p | E | d | D), this._notifySubscribers(void 0, void 0), this._promiseId = (this._promiseId + 1) % ut.MAX_PROMISE_ID;\n const s = this._promiseId;\n t.then((e) => {\n if (s === this._promiseId) {\n if (this._isDirty()) return this._markDirty();\n this._finalizeResolution(e), this._notifySubscribers(e, void 0);\n }\n }, (e) => s === this._promiseId && this._handleError(e, c.COMPUTED_ASYNC_COMPUTATION_FAILED));\n }\n _handleError(t, s, e = !1) {\n const i = g(t, m, s);\n if (!e && !this.isRejected && (this.version = H(this.version)), this._error = i, this.flags = this.flags & ~(p | E | S | d) | D | A, this._onError) try {\n this._onError(i);\n } catch (r) {\n console.error(c.CALLBACK_ERROR_IN_ERROR_HANDLER, r);\n }\n if (e) throw i;\n this._notifySubscribers(void 0, void 0);\n }\n _finalizeResolution(t) {\n const s = this.flags;\n ((s & d) === 0 || !this._equal(this._value, t)) && (this.version = H(this.version)), this._value = t, this._error = null, this.flags = (s | d) & ~(p | E | S | D | A);\n }\n execute() {\n this._markDirty();\n }\n _markDirty() {\n const t = this.flags;\n (t & (N | E)) === 0 && (this.flags = t | E, this._notifySubscribers(void 0, void 0));\n }\n _deepDirtyCheck() {\n const t = this._deps, s = _.current;\n _.current = null;\n try {\n const e = t.size;\n for (let i = 0; i < e; i++) {\n const r = t.getAt(i);\n if (r == null) continue;\n const n = r.node;\n if ((n.flags & O) !== 0) try {\n n.value;\n } catch {\n }\n if (n.version !== r.version)\n return this._hotIndex = i, !0;\n }\n return this._hotIndex = -1, !1;\n } finally {\n _.current = s;\n }\n }\n};\nfunction Ft(t, s = {}) {\n return new Dt(t, s);\n}\nvar vt = class extends Q {\n constructor(t, s = {}) {\n super(), this[et] = !0, this._cleanup = null, this._deps = new tt(), this._currentEpoch = b.UNINITIALIZED, this._lastFlushEpoch = b.UNINITIALIZED, this._fn = t, this._onError = s.onError ?? null, this._sync = s.sync ?? !1, this._maxExecutions = s.maxExecutionsPerSecond ?? C.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = s.maxExecutionsPerFlush ?? C.MAX_EXECUTIONS_PER_EFFECT, this._executionsInEpoch = 0, this._executionCount = 0, this._windowStart = 0, this._windowCount = 0, this._execId = 0, this._trackCount = 0, this._sync ? this._notifyCallback = () => this.execute() : this._notifyCallback = () => w.schedule(this), G.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.isDisposed) throw new v(c.EFFECT_DISPOSED);\n this.execute(!0);\n }\n dispose() {\n this.isDisposed || (this.flags |= I.DISPOSED, this._execCleanup(), this._deps?.disposeAll());\n }\n [Symbol.dispose]() {\n this.dispose();\n }\n addDependency(t) {\n if ((this.flags & I.EXECUTING) === 0) return;\n const s = this._currentEpoch;\n if (t._lastSeenEpoch === s) return;\n t._lastSeenEpoch = s;\n const e = this._trackCount++, i = this._deps;\n let r;\n switch (e) {\n case 0:\n r = i._s0;\n break;\n case 1:\n r = i._s1;\n break;\n case 2:\n r = i._s2;\n break;\n case 3:\n r = i._s3;\n break;\n default:\n r = i.getAt(e);\n }\n r != null && r.node === t ? r.version = t.version : i.claimExisting(t, e) || this._insertNewDependency(t, e), t.isComputed && (i.hasComputeds = !0);\n }\n _insertNewDependency(t, s) {\n let e;\n try {\n const i = t.subscribe(this._notifyCallback);\n e = new z(t, t.version, i);\n } catch (i) {\n const r = g(i, v, c.EFFECT_EXECUTION_FAILED);\n if (console.error(r), this._onError) try {\n this._onError(r);\n } catch {\n }\n e = new z(t, t.version, void 0);\n }\n this._deps.insertNew(s, e);\n }\n execute(t = !1) {\n const s = this.flags;\n if ((s & (I.DISPOSED | I.EXECUTING)) !== 0) return;\n const e = this._deps;\n if (!t && e.size > 0 && !this._isDirty()) return;\n this._checkInfiniteLoops(), this.flags = s | I.EXECUTING, this._execCleanup(), this._currentEpoch = k(), this._trackCount = 0, e.prepareTracking(), this._hotIndex = -1;\n let i = !1;\n try {\n const r = _.run(this, this._fn);\n e.truncateFrom(this._trackCount), i = !0, nt(r) ? this._handleAsyncResult(r) : this._cleanup = typeof r == \"function\" ? r : null;\n } catch (r) {\n if (!i) try {\n e.truncateFrom(this._trackCount);\n } catch {\n }\n this._handleExecutionError(r), this._cleanup = null;\n } finally {\n this.flags &= ~I.EXECUTING;\n }\n }\n _handleAsyncResult(t) {\n const s = ++this._execId;\n t.then((e) => {\n if (s !== this._execId || this.isDisposed) {\n if (typeof e == \"function\") try {\n e();\n } catch (i) {\n this._handleExecutionError(i, c.EFFECT_CLEANUP_FAILED);\n }\n return;\n }\n typeof e == \"function\" && (this._cleanup = e);\n }, (e) => s === this._execId && this._handleExecutionError(e));\n }\n _deepDirtyCheck() {\n const t = _.current;\n _.current = null;\n const s = this._deps;\n try {\n const e = s.size;\n for (let i = 0; i < e; i++) {\n const r = s.getAt(i);\n if (r == null) continue;\n const n = r.node;\n if (n.isComputed && this._tryPullComputed(n), n.version !== r.version)\n return this._hotIndex = i, !0;\n }\n return !1;\n } finally {\n _.current = t;\n }\n }\n _tryPullComputed(t) {\n try {\n t.value;\n } catch {\n }\n }\n _execCleanup() {\n const t = this._cleanup;\n if (t != null) {\n this._cleanup = null;\n try {\n t();\n } catch (s) {\n this._handleExecutionError(s, c.EFFECT_CLEANUP_FAILED);\n }\n }\n }\n _checkInfiniteLoops() {\n const t = dt();\n this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), pt() > C.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++;\n }\n _checkFrequencyLimit() {\n if (!Number.isFinite(this._maxExecutions)) return;\n const t = Date.now();\n if (t - this._windowStart >= Z.EFFECT_FREQUENCY_WINDOW) {\n this._windowStart = t, this._windowCount = 1;\n return;\n }\n if (++this._windowCount > this._maxExecutions) {\n const s = new v(c.EFFECT_FREQUENCY_LIMIT_EXCEEDED);\n throw this.dispose(), this._handleExecutionError(s), s;\n }\n }\n get executionCount() {\n return this._executionCount;\n }\n get isExecuting() {\n return (this.flags & I.EXECUTING) !== 0;\n }\n _throwInfiniteLoopError(t) {\n const s = new v(`Infinite loop detected (${t}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${V}`);\n throw this.dispose(), console.error(s), s;\n }\n _handleExecutionError(t, s = c.EFFECT_EXECUTION_FAILED) {\n const e = g(t, v, s);\n if (console.error(e), this._onError) try {\n this._onError(e);\n } catch (i) {\n console.error(g(i, v, c.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n};\nfunction Rt(t, s = {}) {\n if (typeof t != \"function\") throw new v(c.EFFECT_MUST_BE_FUNCTION);\n const e = new vt(t, s);\n return e.execute(), e;\n}\nvar St = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), gt = /* @__PURE__ */ Symbol.for(\"atom-effect/writable\");\nfunction rt(t, s, e, i) {\n if (e === s.length) return i;\n const r = s[e], n = t != null && typeof t == \"object\" ? t : {}, o = n[r], u = rt(o, s, e + 1, i);\n if (Object.is(o, u)) return t;\n if (Array.isArray(n)) {\n const l = n.slice(), h = Number.parseInt(r, 10);\n return Number.isNaN(h) ? l[r] = u : l[h] = u, l;\n }\n return {\n ...n,\n [r]: u\n };\n}\nfunction F(t, s) {\n let e = t;\n const i = s.length;\n for (let r = 0; r < i; r++) {\n if (e == null) return;\n e = e[s[r]];\n }\n return e;\n}\nfunction ot(t, s) {\n const e = s.includes(\".\") ? s.split(\".\") : [s], i = /* @__PURE__ */ new Set(), r = () => {\n i.forEach((n) => n()), i.clear();\n };\n return {\n get value() {\n return F(t.value, e);\n },\n set value(n) {\n const o = t.peek(), u = rt(o, e, 0, n);\n u !== o && (t.value = u);\n },\n peek: () => F(t.peek(), e),\n subscribe(n) {\n const o = t.subscribe((u, l) => {\n const h = F(u, e), f = F(l, e);\n Object.is(h, f) || n(h, f);\n });\n return i.add(o), () => {\n o(), i.delete(o);\n };\n },\n subscriberCount: () => i.size,\n dispose: r,\n [Symbol.dispose]: r,\n [St]: !0,\n [gt]: !0\n };\n}\nvar wt = (t, s) => ot(t, s), Ut = (t) => (s) => ot(t, s);\nexport {\n y as AsyncState,\n T as AtomError,\n m as ComputedError,\n Z as DEBUG_CONFIG,\n G as DEBUG_RUNTIME,\n v as EffectError,\n C as SCHEDULER_CONFIG,\n U as SchedulerError,\n bt as atom,\n ot as atomLens,\n Nt as batch,\n wt as composeLens,\n Ft as computed,\n Rt as effect,\n F as getPathValue,\n yt as isAtom,\n At as isComputed,\n Ot as isEffect,\n Ut as lensFor,\n w as scheduler,\n rt as setDeepValue,\n mt as untracked\n};\n\n//# sourceMappingURL=index.mjs.map","import type { ReadonlyAtom } from '@but212/atom-effect';\nimport { isAtom } from '@but212/atom-effect';\nimport type { RenderRoute, RouteDefinition, TemplateRoute } from '@/types';\n\n// ============================================================================\n// Reactive helpers\n// ============================================================================\n\n/** Checks if a given value is a reactive node (Atom or Computed). */\nexport const isReactive = (v: unknown): v is ReadonlyAtom<unknown> => isAtom(v);\n\n/** Checks if value is a Promise. */\nexport const isPromise = <T>(v: unknown): v is Promise<T> =>\n v !== null && typeof v === 'object' && typeof (v as Record<string, unknown>).then === 'function';\n\n/** Generates a human-readable selector string for debug. */\nexport function getSelector(el: Element): string {\n const tag = el.localName;\n const id = el.id;\n if (id) return `${tag}#${id}`;\n const className = el.className;\n if (typeof className === 'string') {\n const trimmed = className.trim();\n if (trimmed) {\n return `${tag}.${trimmed.replace(/\\s+/g, '.')}`;\n }\n }\n return tag;\n}\n\nexport const hasOwn = Object.prototype.hasOwnProperty;\n\nexport const isTemplateRoute = (r: RouteDefinition): r is TemplateRoute =>\n 'template' in r && typeof r.template === 'string';\nexport const isRenderRoute = (r: RouteDefinition): r is RenderRoute =>\n 'render' in r && typeof r.render === 'function';\n\n/**\n * Shallow equality check for objects.\n * Optimized to avoid Object.keys() array allocations.\n */\nexport function shallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false;\n\n const objA = a as Record<string, unknown>;\n const objB = b as Record<string, unknown>;\n\n let countA = 0;\n for (const k in objA) {\n if (hasOwn.call(objA, k)) {\n if (!hasOwn.call(objB, k) || objA[k] !== objB[k]) return false;\n countA++;\n }\n }\n\n let countB = 0;\n for (const k in objB) {\n if (hasOwn.call(objB, k)) countB++;\n }\n\n return countA === countB;\n}\n","/**\n * Constants for atom-effect-jquery\n */\n\n// ============================================================================\n// Log Prefixes\n// ============================================================================\n\n/**\n * Log prefixes keyed by subsystem.\n * Each prefix names the specific subsystem that emitted the message so that\n * console output is unambiguous regardless of which binding triggered it.\n */\nexport const LOG_PREFIXES = {\n ROUTE: '[atom-route]',\n BINDING: '[atom-binding]',\n LIST: '[atom-list]',\n MOUNT: '[atom-mount]',\n} as const;\n\nexport const ROUTE_DEFAULTS = Object.freeze({\n mode: 'hash',\n basePath: '',\n autoBindLinks: false,\n activeClass: 'active',\n} as const);\n\nexport const INPUT_DEFAULTS = { EVENT: 'input', DEBOUNCE: 0 } as const;\nexport const DEBUG_DEFAULTS = { HIGHLIGHT_DURATION_MS: 500 } as const;\n\nexport const VALID_INPUT_TAGS: ReadonlySet<string> = new Set(['input', 'select', 'textarea']);\n\nexport const URL_PROPS: ReadonlySet<string> = new Set([\n 'src',\n 'href',\n 'action',\n 'formaction',\n 'data',\n 'poster',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n 'xlink:href',\n]);\n\nexport const DANGEROUS_PROPS: ReadonlySet<string> = new Set([\n 'innerHTML',\n 'outerHTML',\n 'srcdoc',\n '__proto__',\n 'constructor',\n 'prototype',\n]);\n\n/**\n * Centralized error messages for the entire library.\n * Structured by subsystem to facilitate easy debugging and consistent error reporting.\n *\n * Each entry is a function that takes dynamic data (e.g. element name) to produce\n * a human-readable and actionable error message.\n */\nexport const ERROR_MESSAGES = {\n /** Errors related to the SPA Router. */\n ROUTE: {\n NOT_FOUND: (n: string) => `Route \"${n}\" not found and no notFound route configured`,\n TEMPLATE_NOT_FOUND: (s: string) => `Template \"${s}\" not found`,\n TARGET_NOT_FOUND: (s: string) => `Target element \"${s}\" not found`,\n MALFORMED_URI: (r: string) => `Malformed URI component: ${r}`,\n },\n /** Security-related errors, specifically from the CSS/HTML sanitizer. */\n SECURITY: {\n UNSAFE_CONTENT: () => 'Unsafe content neutralized during sanitization.',\n BLOCKED_CSS_VALUE: (p: string) => `Blocked dangerous value in CSS style property \"${p}\".`,\n BLOCKED_EVENT_HANDLER: (n: string) =>\n `Blocked setting dangerous event handler attribute/property \"${n}\".`,\n BLOCKED_PROTOCOL: (n: string) => `Blocked dangerous protocol in \"${n}\".`,\n BLOCKED_PROP: (n: string) =>\n `Blocked setting dangerous property \"${n}\". Use html binding for sanitized HTML.`,\n },\n /** General errors from reactive bindings (text, map, input, etc). */\n BINDING: {\n INVALID_INPUT_ELEMENT: (t: string) => `Val binding used on non-input element <${t}>.`,\n MISSING_SOURCE: (m: string) => `[${m}] source is required when prop/name is a string.`,\n MISSING_CONDITION: (m: string) => `[${m}] condition is required when className is a string.`,\n UPDATER_ERROR: (d: string, s?: boolean) =>\n `Updater threw in binding \"${d}\"${s ? ' (static)' : ''}`,\n CLEANUP_ERROR: (i?: string) => `Binding cleanup error${i ? `: ${i}` : ''}`,\n PARSE_ERROR: (d?: string) => `parse() threw during DOM→Atom sync${d ? `: ${d}` : ''}`,\n },\n /** Errors specific to atomList rendering and reconciliation. */\n LIST: {\n DUPLICATE_KEY: (k: string | number, i: number, c: string) =>\n `Duplicate key \"${k}\" at index ${i} in atomList <${c}>.`,\n },\n /** Lifecycle errors from atomMount/atomUnmount. */\n MOUNT: {\n ERROR: (n?: string) => `Mount error${n ? ` in component <${n}>` : ''}`,\n CLEANUP_ERROR: (n?: string) => `Cleanup error${n ? ` in component <${n}>` : ''}`,\n },\n /** Internal architectural errors from the core engine or registry. */\n CORE: {\n EFFECT_DISPOSE_ERROR: (i?: string) => `Effect dispose error${i ? `: ${i}` : ''}`,\n },\n} as const;\n","import { DEBUG_DEFAULTS } from '@/constants';\nimport { getSelector } from '@/utils';\n\n// ============================================================================\n// Environment utilities\n// ============================================================================\n\nconst IS_BROWSER = typeof window !== 'undefined';\nconst HIGHLIGHT_TRANSITION = `${DEBUG_DEFAULTS.HIGHLIGHT_DURATION_MS / 1000}s`;\n\nfunction getInitialState(): boolean {\n // biome-ignore lint/suspicious/noExplicitAny: globalThis is not typed\n const g = globalThis as any;\n if (IS_BROWSER && g.window?.__ATOM_DEBUG__ === true) return true;\n try {\n if (import.meta.env?.VITE_ATOM_DEBUG === 'true') return true;\n } catch {}\n try {\n if (g.process?.env?.VITE_ATOM_DEBUG === 'true') return true;\n } catch {}\n return false;\n}\n\n// ============================================================================\n// DebugController — Class-based singleton for JIT optimization\n// ============================================================================\n\nclass DebugController {\n private _enabled = false;\n private _lastState = false;\n\n constructor() {\n this._enabled = getInitialState();\n this._lastState = this._enabled;\n this._applyMethods(this._enabled);\n }\n\n get enabled(): boolean {\n return this._enabled;\n }\n\n set enabled(v: boolean) {\n if (this._enabled !== v) {\n this._enabled = v;\n this._applyMethods(v);\n }\n }\n\n /** Normal logs (No-op in production) */\n public log: (p: string, ...a: unknown[]) => void = () => {};\n\n /** Atom state change logs (No-op in production) */\n public atomChanged: (p: string, n: string | undefined, o: unknown, v: unknown) => void = () => {};\n\n /** DOM update logs with highlighting (No-op in production) */\n public domUpdated: (p: string, t: Element | JQuery<Element>, type: string, v: unknown) => void =\n () => {};\n\n /** Resource cleanup logs (No-op in production) */\n public cleanup: (p: string, s: string) => void = () => {};\n\n /** Warnings (Always logged) */\n warn(p: string, m: string, ...r: unknown[]): void {\n console.warn(`${p} ${m}`, ...r);\n }\n\n /** Errors (Always logged) */\n error(p: string, m: string, c: unknown): void {\n console.error(`${p} ${m}`, c);\n }\n\n private _applyMethods(isEnabled: boolean) {\n if (isEnabled) {\n this.log = (p, ...a) => console.log(p, ...a);\n this.atomChanged = (p, n, o, v) =>\n console.log(`${p} Atom \"${n ?? 'anonymous'}\" changed:`, o, '→', v);\n this.domUpdated = (p, t, type, v) => {\n const el = t instanceof Element ? t : (t[0] as Element | undefined);\n if (el?.isConnected) {\n console.log(`${p} DOM updated: ${getSelector(el)}.${type} =`, v);\n this._highlightElement(el);\n }\n };\n this.cleanup = (p, s) => console.log(`${p} Cleanup: ${s}`);\n } else {\n this.log = () => {};\n this.atomChanged = () => {};\n this.domUpdated = () => {};\n this.cleanup = () => {};\n }\n }\n\n private _highlightElement(el: Element): void {\n if (!el.isConnected) return;\n injectStyle();\n\n const exR = rafs.get(el);\n const exT = timers.get(el);\n if (exR !== undefined) cancelAnimationFrame(exR);\n if (exT !== undefined) {\n clearTimeout(exT);\n timers.delete(el);\n }\n\n rafs.set(\n el,\n requestAnimationFrame(() => {\n rafs.delete(el);\n if (!el.isConnected) return;\n el.classList.add(HIGHLIGHT_CLASS);\n timers.set(\n el,\n setTimeout(() => {\n if (el.isConnected) el.classList.remove(HIGHLIGHT_CLASS);\n timers.delete(el);\n }, DEBUG_DEFAULTS.HIGHLIGHT_DURATION_MS)\n );\n })\n );\n }\n}\n\nexport const debug = new DebugController();\n\n// ============================================================================\n// Highlighting logic\n// ============================================================================\n\nconst HIGHLIGHT_CLASS = 'atom-debug-highlight',\n H_ATTR = 'data-atom-debug';\nlet styleInjected = false;\n\nfunction injectStyle(): void {\n if (styleInjected || !IS_BROWSER) return;\n if (document.querySelector(`style[${H_ATTR}]`)) {\n styleInjected = true;\n return;\n }\n const s = Object.assign(document.createElement('style'), {\n textContent: `.${HIGHLIGHT_CLASS}{outline:2px solid rgba(255,68,68,0.8);outline-offset:1px;transition:outline ${HIGHLIGHT_TRANSITION} ease-out}`,\n });\n s.setAttribute(H_ATTR, '');\n document.head.appendChild(s);\n styleInjected = true;\n}\n\nconst timers = new WeakMap<Element, ReturnType<typeof setTimeout>>(),\n rafs = new WeakMap<Element, number>();\n","import {\n atomLens,\n batch,\n composeLens,\n computed,\n atom as createAtom,\n effect,\n isAtom,\n isComputed,\n lensFor,\n untracked,\n} from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { AtomOptions, WritableAtom } from '@/types';\n// isReactive is defined in utils.ts because core's isAtom already covers computed\n// atoms (ComputedAtom carries ATOM_BRAND), making a separate isComputed check redundant.\nimport { isReactive } from '@/utils';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// atom factory + debug namespace\n// ============================================================================\n\n/**\n * Local wrapper around core's `atom` factory.\n *\n * This wrapper exists to attach the `$.atom.debug` accessor directly to the\n * function object at runtime. TypeScript requires a double cast for this\n * augmentation, but `NamespaceExtensions` ensures all other fields are type-safe.\n *\n * `options` is not defaulted here — core's `atom` defaults `options` to `{}`\n * internally, so passing `undefined` is safe and avoids an extra allocation\n * per call.\n */\nfunction atom<T>(v: T, opts?: AtomOptions): WritableAtom<T> {\n return createAtom(v, opts);\n}\n\nObject.defineProperty(atom, 'debug', {\n enumerable: true,\n configurable: true,\n get: () => debug.enabled,\n set: (v: boolean) => {\n debug.enabled = v;\n },\n});\n\n/** Resolves after microtask effects flush. Fast Promise-based scheduling. */\nexport const nextTick = (): Promise<void> => Promise.resolve();\n\n// Register static extensions to jQuery\n$.extend({\n atom: atom as unknown as JQueryStatic['atom'],\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed,\n isReactive,\n nextTick,\n atomLens,\n composeLens,\n lensFor,\n});\n","import type { EffectObject } from '@/types';\n\n// ============================================================================\n// ArrayPool\n// ============================================================================\n\n/**\n * Array pool for reusing temporarily allocated arrays to avoid GC pressure.\n * Ported from @but212/atom-effect core.\n *\n * @template T - Element type.\n */\nexport class ArrayPool<T> {\n private readonly pool: T[][] = [];\n\n constructor(\n private readonly limit = 50,\n private readonly capacity = 256\n ) {}\n\n /** Acquires array from pool or returns a new one. */\n acquire(): T[] {\n return this.pool.pop() ?? [];\n }\n\n /** Releases array back to pool if within capacity and limit. */\n release(arr: T[]): void {\n // Fast capacity check first to avoid frozen check cost\n if (arr.length > this.capacity || this.pool.length >= this.limit) return;\n if (Object.isFrozen(arr)) return;\n\n arr.length = 0;\n this.pool.push(arr);\n }\n\n /** Clears the pool. */\n reset(): void {\n this.pool.length = 0;\n }\n}\n\n// ============================================================================\n// ObjectPool\n// ============================================================================\n\n/**\n * Generic object pool for reusing fixed-shape plain objects.\n *\n * Design constraints:\n * - Pooled objects MUST have a fixed property shape (monomorphic).\n * Mixing shapes in a single pool will de-optimize V8's hidden classes.\n * - The `reset` callback MUST restore the object to a clean, reusable state.\n * Failing to do so leaks stale references and causes subtle bugs.\n * - The pool is LIFO (stack) for better CPU cache locality.\n *\n * @template T - Object type to pool. Must be a plain object with a fixed shape.\n */\nexport class ObjectPool<T extends object> {\n private readonly pool: T[] = [];\n\n constructor(\n private readonly factory: () => T,\n private readonly reset: (obj: T) => void,\n private readonly limit = 64\n ) {}\n\n /** Acquires object from pool or creates a new one. */\n acquire(): T {\n return this.pool.pop() ?? this.factory();\n }\n\n /** Releases object back to pool after reset. */\n release(obj: T): void {\n if (this.pool.length < this.limit) {\n this.reset(obj);\n this.pool.push(obj);\n }\n }\n\n /** Drains all retained objects. */\n drain(): void {\n if (this.pool.length > 0) {\n this.pool.length = 0;\n }\n }\n\n get size(): number {\n return this.pool.length;\n }\n}\n\n// ============================================================================\n// Specialized Pools\n// ============================================================================\n\nexport const effectsArrayPool = new ArrayPool<EffectObject>();\nexport const cleanupsArrayPool = new ArrayPool<() => void>();\n\n/**\n * Per-element record of all reactive resources that must be released on cleanup.\n * Fields are optional to avoid allocating arrays for the common case where only\n * one resource type is used.\n *\n * Extracted here so that both the pool and registry share the same type.\n */\nexport interface BindingRecord {\n effects: EffectObject[] | undefined;\n cleanups: Array<() => void> | undefined;\n componentCleanup: (() => void) | undefined;\n}\n\n/**\n * Pool for BindingRecord objects.\n * Uses a fixed hidden class for V8 optimization.\n */\nexport const bindingRecordPool = new ObjectPool<BindingRecord>(\n () => {\n return {\n effects: undefined,\n cleanups: undefined,\n componentCleanup: undefined,\n };\n },\n (r) => {\n r.effects = undefined;\n r.cleanups = undefined;\n r.componentCleanup = undefined;\n },\n 128\n);\n","import { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport type { EffectObject } from '@/types';\nimport { getSelector } from '@/utils';\nimport { debug } from '@/utils/debug';\nimport {\n type BindingRecord,\n bindingRecordPool,\n cleanupsArrayPool,\n effectsArrayPool,\n} from '@/utils/pool';\n\nlet autoCleanupScheduled = false;\n\n/**\n * Ensures that the MutationObserver for automatic cleanup is active.\n * Lazily triggered on the first reactive binding registration.\n */\nfunction ensureAutoCleanup(): void {\n if (autoCleanupScheduled) return;\n autoCleanupScheduled = true;\n if (typeof document !== 'undefined' && document.body) {\n enableAutoCleanup(document.body);\n }\n}\n\n/**\n * CSS class added to every element that has at least one active binding.\n * Used by `querySelectorAll` in `cleanupDescendants` for efficient subtree traversal.\n * Internal use only.\n */\nconst AES_BOUND = '_aes-bound';\n\n// BindingRecord type is defined in @/internal/pool to co-locate with its ObjectPool.\n\n// ============================================================================\n// BindingRegistry\n// ============================================================================\n\n/**\n * Central registry mapping DOM elements to their reactive binding records.\n *\n * Design goals:\n * - Zero memory leaks: all collections use WeakMap/WeakSet keyed by Element.\n * - Minimal allocations in the hot tracking path.\n * - O(bound-descendants) cleanup via a single querySelectorAll pass.\n */\nclass BindingRegistry {\n private records = new WeakMap<Element, BindingRecord>();\n private preservedNodes = new WeakSet<Node>();\n private ignoredNodes = new WeakSet<Node>();\n\n keep(node: Node): void {\n this.preservedNodes.add(node);\n }\n isKept(node: Node): boolean {\n return this.preservedNodes.has(node);\n }\n markIgnored(node: Node): void {\n this.ignoredNodes.add(node);\n }\n isIgnored(node: Node): boolean {\n return this.ignoredNodes.has(node);\n }\n\n private getOrCreateRecord(el: Element): BindingRecord {\n ensureAutoCleanup();\n let res = this.records.get(el);\n if (!res) {\n res = bindingRecordPool.acquire();\n this.records.set(el, res);\n el.classList.add(AES_BOUND);\n }\n return res;\n }\n\n /**\n * Registers a reactive effect with an element's record.\n * Effects are automatically disposed when the element is removed from the DOM.\n *\n * @param el - The DOM element to bind the effect to.\n * @param fx - The reactive effect instance.\n */\n trackEffect(el: Element, fx: EffectObject): void {\n const record = this.getOrCreateRecord(el);\n if (!record.effects) {\n record.effects = effectsArrayPool.acquire();\n }\n record.effects.push(fx);\n }\n\n /**\n * Registers an arbitrary cleanup function with an element's record.\n * Cleanups are executed when the element is removed from the DOM.\n *\n * @param el - The DOM element to bind the cleanup to.\n * @param fn - The cleanup function (e.g., event unbinding, timer clear).\n */\n trackCleanup(el: Element, fn: () => void): void {\n const record = this.getOrCreateRecord(el);\n if (!record.cleanups) {\n record.cleanups = cleanupsArrayPool.acquire();\n }\n record.cleanups.push(fn);\n }\n\n /**\n * Assigns a component-level cleanup function (e.g., from atomMount).\n * Unlike generic cleanups, there can only be one component cleanup per element.\n */\n setComponentCleanup(el: Element, fn: (() => void) | undefined): void {\n this.getOrCreateRecord(el).componentCleanup = fn;\n }\n\n hasBind(el: Element): boolean {\n return this.records.has(el);\n }\n\n cleanup(el: Element | Node): void {\n const isElement = el.nodeType === 1;\n const record = this.records.get(el as Element);\n\n // Consolidate deletions\n this.preservedNodes.delete(el);\n this.ignoredNodes.delete(el);\n\n if (!record) {\n if (isElement) (el as Element).classList.remove(AES_BOUND);\n return;\n }\n\n this.records.delete(el as Element);\n if (isElement) (el as Element).classList.remove(AES_BOUND);\n\n const selector = isElement ? getSelector(el as Element) : el.nodeName || 'Node';\n debug.cleanup(LOG_PREFIXES.BINDING, selector);\n\n if (record.componentCleanup) {\n try {\n record.componentCleanup();\n } catch (e) {\n debug.error(LOG_PREFIXES.MOUNT, ERROR_MESSAGES.MOUNT.CLEANUP_ERROR(selector), e);\n }\n }\n\n if (record.effects) {\n for (const fx of record.effects) {\n try {\n fx.dispose();\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.CORE.EFFECT_DISPOSE_ERROR(selector), e);\n }\n }\n effectsArrayPool.release(record.effects);\n record.effects = undefined;\n }\n\n if (record.cleanups) {\n for (const fn of record.cleanups) {\n try {\n fn();\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.CLEANUP_ERROR(selector), e);\n }\n }\n cleanupsArrayPool.release(record.cleanups);\n record.cleanups = undefined;\n }\n bindingRecordPool.release(record);\n }\n\n cleanupDescendants(el: Element | DocumentFragment | ShadowRoot): void {\n // Fast path: getElementsByClassName is significantly faster than querySelectorAll\n const live = (el as { getElementsByClassName?(name: string): HTMLCollectionOf<Element> })\n .getElementsByClassName\n ? (el as Element).getElementsByClassName(AES_BOUND)\n : el.querySelectorAll(`.${AES_BOUND}`);\n\n const len = live.length;\n if (len === 0) return;\n\n // Snapshot to avoid issues with live collection changing during cleanup\n // and to stabilize loop prediction.\n const snapshot = new Array<Element>(len);\n for (let i = 0; i < len; i++) snapshot[i] = live[i]!;\n\n for (let i = len - 1; i >= 0; i--) {\n const child = snapshot[i]!;\n // Pre-check registry to avoid unnecessary cleanup calls\n if (this.records.has(child)) {\n this.cleanup(child);\n } else {\n child.classList.remove(AES_BOUND);\n }\n }\n }\n\n cleanupTree(el: Element | Node): void {\n if (el.nodeType === 1 || el.nodeType === 11) {\n this.cleanupDescendants(el as Element | DocumentFragment | ShadowRoot);\n }\n this.cleanup(el);\n }\n}\n\n// ============================================================================\n// Singleton + auto-cleanup\n// ============================================================================\n\nexport const registry = new BindingRegistry();\n\nconst observers = new Map<Element, MutationObserver>();\n\n/**\n * Starts observing `root` for removed elements and automatically disposes\n * their reactive bindings when they leave the DOM.\n *\n * Multiple roots can be observed concurrently (e.g. for Micro-Frontends).\n * The `root` parameter is required (no default) to make the caller explicit\n * about which subtree is being observed.\n *\n * Idempotent: calling more than once with the same root has no effect.\n */\nexport function enableAutoCleanup(root: Element): void {\n // Support independent multiple roots for Micro-Frontend architectures.\n if (observers.has(root)) {\n return;\n }\n\n const observer = new MutationObserver((mutations) => {\n const reg = registry;\n for (let i = 0, mLen = mutations.length; i < mLen; i++) {\n const removedNodes = mutations[i]!.removedNodes;\n for (let j = 0, rLen = removedNodes.length; j < rLen; j++) {\n const node = removedNodes[j]!;\n\n // Only Element nodes can carry bindings marked by our AES_BOUND class.\n // We skip text and comment nodes early for performance.\n // Combined check for nodeType and connectivity (the two most common early exits)\n // to reduce separate branch prediction entries.\n if (node.nodeType !== 1 || (node as Element).isConnected) continue;\n\n const el = node as Element;\n\n // Combined flag checks for explicit detach (.keep) or manual cleanup traversal (.ignore).\n if (reg.isKept(el) || reg.isIgnored(el)) continue;\n\n reg.cleanupTree(el);\n }\n }\n });\n\n observer.observe(root, { childList: true, subtree: true });\n observers.set(root, observer);\n}\n\n/**\n * Marks the auto-cleanup as scheduled or already running.\n * Used internally and by reset helpers in tests.\n */\nexport function setAutoCleanupScheduled(scheduled: boolean): void {\n autoCleanupScheduled = scheduled;\n}\n\n/**\n * Stops all MutationObservers started by `enableAutoCleanup`.\n */\nexport function disableAutoCleanup(): void {\n observers.forEach((obs) => obs.disconnect());\n observers.clear();\n}\n","import { batch } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { registry } from '@/core/registry';\n\n/** Generic event handler type matching jQuery's internal handler signature. */\ntype EventHandler = JQuery.EventHandlerBase<unknown, JQuery.TriggeredEvent>;\n\n/**\n * Symbol marker attached to handlers registered by this library's internals.\n * Handlers carrying this marker are NOT wrapped in batch() — they already\n * manage atom writes directly and do not need an extra reactive flush.\n */\nexport const INTERNAL_HANDLER = Symbol('atom-effect-internal');\n\n/**\n * WeakMap from original handler function → batch-wrapped handler function.\n * Keys are functions (held alive by jQuery's internal event store for as long\n * as the handler is registered), so entries are naturally released when the\n * handler is removed via .off() and jQuery drops its reference.\n */\nconst handlerMap = new WeakMap<EventHandler, EventHandler>();\n\n// ============================================================================\n// Originals store\n// ============================================================================\n\n/**\n * Snapshot of jQuery prototype methods captured at `enablejQueryOverrides()`\n * time and restored by `disablejQueryOverrides()`.\n *\n * Stored as a typed object and captured into `orig` (a local const) inside\n * `enablejQueryOverrides` so that the override closures always reference the\n * pre-patch methods even if `disablejQueryOverrides()` later resets the\n * module-level `originals` variable to null.\n */\ntype OriginalMethods = {\n on: typeof $.fn.on;\n off: typeof $.fn.off;\n remove: typeof $.fn.remove;\n empty: typeof $.fn.empty;\n detach: typeof $.fn.detach;\n};\n\nlet originals: OriginalMethods | null = null;\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nconst getWrappedHandler = (fn: EventHandler): EventHandler => {\n // Fast check: is already wrapped?\n if ((fn as { [INTERNAL_HANDLER]?: boolean })[INTERNAL_HANDLER]) return fn;\n\n let wrapped = handlerMap.get(fn);\n if (!wrapped) {\n wrapped = function (this: unknown, ...args: unknown[]) {\n return batch(() => fn.apply(this, args as Parameters<EventHandler>));\n } as unknown as EventHandler;\n (wrapped as { [INTERNAL_HANDLER]?: boolean })[INTERNAL_HANDLER] = true;\n handlerMap.set(fn, wrapped);\n }\n return wrapped;\n};\n\nfunction wrapEventMap(map: Record<string, EventHandler>): Record<string, EventHandler> {\n const newMap: Record<string, EventHandler> = {};\n for (const k in map) if (map[k]) newMap[k] = getWrappedHandler(map[k]);\n return newMap;\n}\n\nfunction resolveOffEventMap(\n map: Record<string, EventHandler | undefined>\n): Record<string, EventHandler | undefined> {\n const newMap: Record<string, EventHandler | undefined> = {};\n for (const k in map) {\n const h = map[k];\n newMap[k] = h ? (handlerMap.get(h) ?? h) : undefined;\n }\n return newMap;\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\nexport function enablejQueryOverrides(): void {\n if (originals !== null) return;\n\n originals = {\n on: $.fn.on,\n off: $.fn.off,\n remove: $.fn.remove,\n empty: $.fn.empty,\n detach: $.fn.detach,\n };\n const orig = originals;\n\n $.fn.remove = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n const len = targets.length;\n for (let i = 0; i < len; i++) {\n const el = targets[i];\n if (el) {\n registry.markIgnored(el);\n registry.cleanupTree(el);\n }\n }\n return orig.remove.call(this, selector) ?? this;\n };\n\n $.fn.empty = function (this: JQuery) {\n const len = this.length;\n for (let i = 0; i < len; i++) {\n const el = this[i];\n if (el?.hasChildNodes()) registry.cleanupDescendants(el);\n }\n return orig.empty.call(this) ?? this;\n };\n\n $.fn.detach = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n const len = targets.length;\n for (let i = 0; i < len; i++) {\n const el = targets[i];\n if (el) registry.keep(el);\n }\n return orig.detach.call(this, selector) ?? this;\n };\n\n $.fn.on = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n if (types && typeof types === 'object') {\n args[0] = wrapEventMap(types as Record<string, EventHandler>);\n } else {\n const last = args.length - 1;\n if (last >= 0 && typeof args[last] === 'function') {\n args[last] = getWrappedHandler(args[last] as EventHandler);\n }\n }\n return orig.on.apply(this, args as Parameters<typeof $.fn.on>) ?? this;\n };\n\n $.fn.off = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n if (types && typeof types === 'object') {\n args[0] = resolveOffEventMap(types as Record<string, EventHandler | undefined>);\n } else {\n const last = args.length - 1;\n if (last >= 0 && typeof args[last] === 'function') {\n const fn = args[last] as EventHandler;\n args[last] = handlerMap.get(fn) ?? fn;\n }\n }\n return orig.off.apply(this, args as Parameters<typeof $.fn.off>) ?? this;\n };\n}\n\n/**\n * Restores all jQuery methods patched by `enablejQueryOverrides()`.\n * Primarily useful in test environments to reset state between suites.\n */\nexport function disablejQueryOverrides(): void {\n if (originals === null) return;\n\n $.fn.on = originals.on;\n $.fn.off = originals.off;\n $.fn.remove = originals.remove;\n $.fn.empty = originals.empty;\n $.fn.detach = originals.detach;\n\n originals = null;\n}\n","import type {\n AtomOptions as BaseAtomOptions,\n ComputedAtom,\n ComputedOptions,\n EffectObject,\n Paths,\n PathValue,\n ReadonlyAtom,\n WritableAtom,\n} from '@but212/atom-effect';\n\n// ============================================================================\n// Shared API Types\n// ============================================================================\n\nexport type EffectCleanup = () => void;\nexport type EffectResult = undefined | EffectCleanup;\nexport type EqualFn<T> = (a: T, b: T) => boolean;\n\nexport interface AtomOptions extends BaseAtomOptions {\n name?: string;\n}\n\n/**\n * Represents a value that can be tracked by the reactive system.\n * - T: Static value (one-time bind)\n * - ReadonlyAtom<T>: Reactive value (updates DOM when atom changes)\n * - () => T: Reactive function (updates DOM when any atom read inside changes)\n */\nexport type ReactiveValue<T> = T | ReadonlyAtom<T> | (() => T);\n\n/**\n * An extension of ReactiveValue that also supports Promises and async functions.\n * The binding system automatically handles the promise lifecycle, showing the\n * latest resolved value and ignoring stale ones (race condition protection).\n */\nexport type AsyncReactiveValue<T> =\n | T\n | ReadonlyAtom<T | Promise<T>>\n | Promise<T>\n | (() => T | Promise<T>);\nexport type PrimitiveValue = string | number | boolean | null | undefined;\ntype KeysOfType<T, V> = { [K in keyof T]: T[K] extends V ? K : never }[keyof T];\n\nexport type CssValue =\n | AsyncReactiveValue<string | number>\n | [source: AsyncReactiveValue<number>, unit: string];\nexport type CssBindings = Record<string, CssValue>;\n\nexport interface BindingOptions<T = unknown> {\n text?: AsyncReactiveValue<unknown>;\n html?: AsyncReactiveValue<string>;\n class?: Record<string, AsyncReactiveValue<boolean>>;\n css?: CssBindings;\n attr?: Record<string, AsyncReactiveValue<PrimitiveValue>>;\n prop?: Record<string, AsyncReactiveValue<unknown>>;\n show?: AsyncReactiveValue<boolean>;\n hide?: AsyncReactiveValue<boolean>;\n val?: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>];\n checked?: WritableAtom<boolean>;\n form?:\n | WritableAtom<T extends object ? T : unknown>\n | [atom: WritableAtom<T extends object ? T : unknown>, options: FormOptions<unknown>];\n on?: Record<string, (e: JQuery.Event) => void>;\n}\n\nexport interface DisposableWritableAtom<T> extends WritableAtom<T>, Disposable {\n dispose(): void;\n}\n\nexport type ListKey = string | number;\nexport type ListRenderResult = string | Element | DocumentFragment | JQuery;\nexport type ListKeyFn<T> = (item: T, index: number) => ListKey;\n\nexport interface ListOptions<T> {\n key: KeysOfType<T, ListKey> | ListKeyFn<T>;\n render: (item: T, index: number) => ListRenderResult;\n bind?: ($el: JQuery, item: T, index: number) => void;\n update?: ($el: JQuery, item: T, index: number) => void;\n onAdd?: ($el: JQuery) => void;\n onRemove?: ($el: JQuery) => Promise<void> | void;\n empty?: ListRenderResult;\n events?: Record<string, (item: T, index: number, e: JQuery.TriggeredEvent) => void>;\n isEqual?: (a: T, b: T) => boolean;\n}\n\n/**\n * Options for `atomVal`, `atomChecked`, and `atomForm` bindings.\n */\nexport interface ValOptions<T> {\n /** Debounce duration in milliseconds for DOM -> Atom sync. Defaults to 0. */\n debounce?: number;\n /** jQuery event name(s) to listen to. Defaults to \"input\". */\n event?: string;\n /** Custom function to parse DOM string to atom type T. */\n parse?: (v: string) => T;\n /** Custom function to format atom type T to DOM string. */\n format?: (v: T) => string;\n /** Custom equality check to prevent redundant atom updates. */\n equal?: EqualFn<T>;\n}\n\n/**\n * Options for `atomForm` binding.\n */\nexport interface FormOptions<T> extends ValOptions<T> {\n /** Custom function to transform field value based on path before atomic sync. */\n transform?: (path: string, value: unknown) => unknown;\n /** Callback triggered when a field value changes. */\n onChange?: (path: string, value: unknown) => void;\n}\n\nexport interface FetchOptions<T> {\n defaultValue: T;\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS' | (string & {});\n headers?: Record<string, string>;\n transform?: (raw: unknown) => T;\n ajaxOptions?: JQuery.AjaxSettings | (() => JQuery.AjaxSettings);\n onError?: (err: unknown) => void;\n eager?: boolean;\n}\n\nexport interface FetchError extends Error {\n jqXHR?: JQuery.jqXHR;\n}\n\nexport type ComponentFn<P = Record<string, unknown>> = ($el: JQuery, props: P) => EffectResult;\n\nexport interface RouteLifecycle {\n onEnter?: (params: Record<string, string>, router: Router) => Record<string, string> | undefined;\n onLeave?: (router: Router) => boolean | undefined;\n}\n\nexport interface TemplateRoute extends RouteLifecycle {\n template: string;\n render?: never;\n onMount?: ($content: JQuery, onUnmount: (cleanupFn: () => void) => void, router: Router) => void;\n}\n\nexport interface RenderRoute extends RouteLifecycle {\n render: (\n container: HTMLElement,\n route: string,\n params: Record<string, string>,\n onUnmount: (cleanupFn: () => void) => void,\n router: Router\n ) => void;\n template?: never;\n}\n\nexport type RouteDefinition = TemplateRoute | RenderRoute;\n\nexport interface RouteConfig {\n target: string;\n default: string;\n routes: Record<string, RouteDefinition>;\n mode?: 'hash' | 'history';\n basePath?: string;\n notFound?: string;\n autoBindLinks?: boolean;\n activeClass?: string;\n beforeTransition?: (from: string, to: string) => void;\n afterTransition?: (from: string, to: string) => void;\n}\n\nexport interface Router {\n currentRoute: ReadonlyAtom<string>;\n queryParams: ReadonlyAtom<Record<string, string>>;\n navigate: (route: string) => void;\n destroy: () => void;\n}\n\nexport enum BindingFlags {\n None = 0,\n Focused = 1 << 0,\n Composing = 1 << 1,\n SyncingToAtom = 1 << 2,\n SyncingToDom = 1 << 3,\n Busy = Composing | SyncingToAtom | SyncingToDom,\n}\n\nexport interface BindingContext {\n readonly el: HTMLElement;\n readonly trackCleanup: (fn: EffectCleanup) => void;\n}\n\ndeclare global {\n interface JQueryStatic {\n atom: { <T>(v: T, opts?: AtomOptions): WritableAtom<T>; debug: boolean };\n computed<T>(fn: () => T, opts?: ComputedOptions<T>): ComputedAtom<T>;\n computed<T>(\n fn: () => Promise<T>,\n opts: ComputedOptions<T> & { defaultValue: T }\n ): ComputedAtom<T>;\n effect(fn: () => EffectResult): EffectObject;\n batch(fn: () => void): void;\n untracked<T>(fn: () => T): T;\n isAtom(v: unknown): boolean;\n isComputed(v: unknown): boolean;\n isReactive(v: unknown): boolean;\n nextTick(): Promise<void>;\n atomLens<T extends object, P extends Paths<T>>(\n atom: WritableAtom<T>,\n path: P\n ): DisposableWritableAtom<PathValue<T, P>>;\n composeLens<T extends object, P extends Paths<T>>(\n lens: WritableAtom<T>,\n path: P\n ): DisposableWritableAtom<PathValue<T, P>>;\n lensFor<T extends object>(\n atom: WritableAtom<T>\n ): <P extends Paths<T>>(p: P) => DisposableWritableAtom<PathValue<T, P>>;\n route(config: RouteConfig): Router;\n atomFetch<T>(\n url: string | (() => string),\n opts: FetchOptions<T>\n ): ComputedAtom<T> & { abort: () => void };\n }\n\n interface JQuery {\n atomText<T>(src: AsyncReactiveValue<T>, fmt?: (v: T) => string): this;\n atomHtml(src: AsyncReactiveValue<string>): this;\n atomClass(name: string, cond: AsyncReactiveValue<boolean>): this;\n atomClass(map: Record<string, AsyncReactiveValue<boolean>>): this;\n atomCss(prop: string, src: AsyncReactiveValue<string | number>, unit?: string): this;\n atomCss(map: CssBindings): this;\n atomAttr(name: string, src: AsyncReactiveValue<PrimitiveValue>): this;\n atomAttr(map: Record<string, AsyncReactiveValue<PrimitiveValue>>): this;\n atomProp<T>(name: string, src: AsyncReactiveValue<T>): this;\n atomProp<T>(map: Record<string, AsyncReactiveValue<T>>): this;\n atomShow(cond: AsyncReactiveValue<boolean>): this;\n atomHide(cond: AsyncReactiveValue<boolean>): this;\n atomVal<T>(atom: WritableAtom<T>, opts?: ValOptions<T>): this;\n atomChecked(atom: WritableAtom<boolean>): this;\n atomForm<T extends object>(atom: WritableAtom<T>, opts?: FormOptions<unknown>): this;\n atomOn(event: string, handler: (e: JQuery.Event) => void): this;\n atomBind<T = unknown>(opts: BindingOptions<T>): this;\n atomList<T>(src: ReadonlyAtom<T[]>, opts: ListOptions<T>): this;\n atomMount<P>(comp: ComponentFn<P>, props?: P): this;\n atomUnmount(): this;\n atomUnbind(): this;\n }\n}\n\nexport type { ComputedAtom, ComputedOptions, EffectObject, ReadonlyAtom, WritableAtom };\n","import { effect, untracked } from '@but212/atom-effect';\nimport { ERROR_MESSAGES, INPUT_DEFAULTS, LOG_PREFIXES } from '@/constants';\nimport { INTERNAL_HANDLER } from '@/core/jquery-patch';\nimport type { EffectObject, ValOptions, WritableAtom } from '@/types';\nimport { BindingFlags } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// Monotonically increasing counter used to generate per-instance event\n// namespaces, preventing cleanup of sibling bindings on the same element.\nlet instanceCounter = 0;\n\ntype InputEl = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\n/**\n * Marks a handler as library-internal so the jQuery patch skips batch() wrapping.\n * All handlers registered by InputBinding must be marked — unmarked handlers are\n * wrapped in batch() by the jQuery override, which is redundant and potentially\n * harmful here since InputBinding manages atom writes directly.\n */\nfunction markInternal(fn: Function): void {\n (fn as unknown as Record<symbol, true>)[INTERNAL_HANDLER] = true;\n}\n\nclass InputBinding<T> {\n private readonly $el: JQuery;\n private readonly el: InputEl;\n private readonly atom: WritableAtom<T>;\n private readonly isMultipleSelect: boolean;\n private readonly isTextControl: boolean;\n\n private readonly parse: (v: string) => T;\n private readonly format: (v: T) => string;\n private readonly equal: (a: T, b: T) => boolean;\n private readonly readDom: () => T;\n private readonly getRawDom: () => string | string[];\n private readonly writeDom: (val: T, formatted: string) => void;\n\n /**\n * Internal state flags using bitwise operations for zero-overhead tracking.\n * Tracks focus, IME composition, and sync direction to prevent infinite loops.\n */\n private flags = 0;\n private timeoutId: ReturnType<typeof setTimeout> | undefined = undefined;\n\n /** Per-instance jQuery event namespace — prevents cleanup collisions. */\n private readonly ns: string;\n private readonly handleInput: () => void;\n\n constructor($el: JQuery, atom: WritableAtom<T>, options: ValOptions<T>) {\n this.$el = $el;\n this.el = $el[0] as InputEl;\n this.atom = atom;\n const tagName = this.el.tagName;\n const isMultiple = tagName === 'SELECT' && (this.el as HTMLSelectElement).multiple;\n this.isMultipleSelect = isMultiple;\n this.isTextControl = tagName === 'INPUT' || tagName === 'TEXTAREA';\n this.ns = `.atomBind-${++instanceCounter}`;\n\n const debounce = options.debounce ?? 0;\n\n this.parse = options.parse ?? ((v: string) => v as unknown as T);\n\n // Specialize strategy functions at construction to avoid branches in sync hot-paths\n if (isMultiple) {\n this.format =\n options.format ?? ((v: T) => (Array.isArray(v) ? v : v ? [String(v)] : []).join(','));\n this.getRawDom = () => (this.$el.val() as string[] | null) || [];\n this.readDom = () => this.getRawDom() as unknown as T;\n this.writeDom = (val) => {\n this.$el.val(val as unknown as string[]);\n };\n } else {\n this.format = options.format ?? ((v: T) => String(v ?? ''));\n this.getRawDom = () => this.el.value;\n this.readDom = () => this.parse(this.el.value);\n\n if (this.isTextControl) {\n this.writeDom = (_val, formatted) => {\n if (this.flags & BindingFlags.Focused) {\n // --- Cursor Preservation Strategy ---\n try {\n const el = this.el as HTMLInputElement;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n el.value = formatted;\n const len = formatted.length;\n if (start !== null && end !== null) {\n el.setSelectionRange(start < len ? start : len, end < len ? end : len);\n }\n } catch {\n this.el.value = formatted;\n }\n } else {\n this.el.value = formatted;\n }\n };\n } else {\n this.writeDom = (_, formatted) => {\n this.el.value = formatted;\n };\n }\n }\n\n const baseEqual = options.equal ?? Object.is;\n if (isMultiple) {\n this.equal = (a: T, b: T): boolean => {\n if (baseEqual(a, b)) return true;\n if (Array.isArray(a) && Array.isArray(b)) {\n const len = a.length;\n if (len !== b.length) return false;\n for (let i = 0; i < len; i++) {\n if (!Object.is(a[i], b[i])) return false;\n }\n return true;\n }\n return false;\n };\n } else {\n this.equal = baseEqual;\n }\n\n if (debounce > 0) {\n this.handleInput = () => {\n if (this.flags & BindingFlags.Composing) return;\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(() => this.syncAtomFromDom(), debounce);\n };\n } else {\n this.handleInput = () => {\n if (!(this.flags & BindingFlags.Composing)) this.syncAtomFromDom();\n };\n }\n\n [\n this.handleFocus,\n this.handleBlur,\n this.handleCompositionStart,\n this.handleCompositionEnd,\n this.handleInput,\n ].forEach(markInternal);\n\n this.bindEvents(options.event ?? INPUT_DEFAULTS.EVENT);\n }\n\n // --- Event Handlers ---\n\n private readonly handleCompositionStart = () => {\n // We ignore input events while the user is still composing characters\n // (e.g., CJK character selection) to avoid syncing incomplete/partial data.\n this.flags |= BindingFlags.Composing;\n };\n\n private readonly handleCompositionEnd = () => {\n this.flags &= ~BindingFlags.Composing;\n // Trigger sync once composition is finished to capture the final character.\n this.handleInput();\n };\n\n private readonly handleFocus = () => {\n this.flags |= BindingFlags.Focused;\n };\n\n private readonly handleBlur = () => {\n this.flags &= ~BindingFlags.Focused;\n const wasComposing = !!(this.flags & BindingFlags.Composing);\n this.flags &= ~BindingFlags.Composing;\n\n // Ensure any pending debounced change is committed immediately on blur.\n this.flushPendingDebounce();\n\n // If composition was interrupted by blur (e.g. clicking away),\n // we must perform a final sync to stay consistent with the DOM.\n if (wasComposing && this.timeoutId === undefined) {\n this.syncAtomFromDom();\n }\n\n // Restore the strict formatted value from the atom.\n this.normalizeDomValue();\n };\n\n // --- Helpers ---\n\n private flushPendingDebounce(): void {\n if (this.timeoutId !== undefined) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n this.syncAtomFromDom();\n }\n }\n\n private normalizeDomValue(): void {\n const val = this.atom.peek();\n const formatted = this.format(val);\n const raw = this.getRawDom();\n\n if (this.isMultipleSelect) {\n if (!this.equal(raw as unknown as T, val)) {\n this.writeDom(val, formatted);\n }\n } else if (raw !== formatted) {\n this.writeDom(val, formatted);\n }\n }\n\n private syncAtomFromDom(): void {\n if (this.flags & BindingFlags.Busy) return;\n this.flags |= BindingFlags.SyncingToAtom;\n try {\n const parsed = this.readDom();\n if (!this.equal(this.atom.peek(), parsed)) {\n this.atom.value = parsed;\n }\n } catch (e) {\n debug.warn(\n LOG_PREFIXES.BINDING,\n ERROR_MESSAGES.BINDING.PARSE_ERROR(e instanceof Error ? e.message : String(e)),\n e\n );\n } finally {\n this.flags &= ~BindingFlags.SyncingToAtom;\n }\n }\n\n public readonly syncDomFromAtom = () => {\n const val = this.atom.value;\n\n untracked(() => {\n const formatted = this.format(val);\n const raw = this.getRawDom();\n\n // Skip if raw DOM matches formatted string (or array for select-multiple)\n if (this.isMultipleSelect) {\n if (this.equal(raw as unknown as T, val)) return;\n } else if (raw === formatted) {\n return;\n }\n\n // If focused, check if it's already \"functionally\" equal via parse to avoid\n // overwriting while user is typing (e.g. typing \"1.0\" when atom is 1)\n if (this.flags & BindingFlags.Focused) {\n try {\n if (this.equal(this.readDom(), val)) return;\n } catch {\n // Ignore parse errors on check-only read\n }\n }\n\n this.flags |= BindingFlags.SyncingToDom;\n try {\n this.writeDom(val, formatted);\n debug.domUpdated(LOG_PREFIXES.BINDING, this.$el, 'val', formatted);\n } finally {\n this.flags &= ~BindingFlags.SyncingToDom;\n }\n });\n };\n\n public readonly cleanup = () => {\n this.$el.off(this.ns);\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n };\n\n private bindEvents(eventName: string): void {\n const ns = this.ns;\n const namespacedEvents = eventName\n .trim()\n .split(/\\s+/)\n .map((e) => `${e}${ns}`)\n .join(' ');\n\n this.$el\n .on(`focus${ns}`, this.handleFocus)\n .on(`blur${ns}`, this.handleBlur)\n .on(`compositionstart${ns}`, this.handleCompositionStart)\n .on(`compositionend${ns}`, this.handleCompositionEnd)\n .on(namespacedEvents, this.handleInput);\n }\n}\n\n/**\n * Applies two-way data binding between a writable atom and an input element.\n */\nexport function applyInputBinding<T>(\n $el: JQuery,\n atom: WritableAtom<T>,\n options: ValOptions<T>\n): { fx: EffectObject; cleanup: () => void } {\n let binding: InputBinding<T> | null = new InputBinding($el, atom, options);\n return {\n fx: effect(binding.syncDomFromAtom),\n cleanup: () => {\n if (binding) {\n binding.cleanup();\n binding = null;\n }\n },\n };\n}\n","import { effect, type ReadonlyAtom, untracked } from '@but212/atom-effect';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { AsyncReactiveValue } from '@/types';\n\nimport { isPromise, isReactive } from '@/utils';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// Debug type\n// ============================================================================\n\n/**\n * Structured label identifying which binding produced a debug log entry.\n * Fixed bindings use a plain literal; per-key bindings use a `prefix.key` form\n * where the key portion must be non-empty.\n *\n * Note: the trailing `(string & {})` member makes this type accept any string\n * at runtime while still surfacing the named literals as IDE autocomplete\n * suggestions. It does NOT enforce that only the listed values are used —\n * TypeScript absorbs all narrower literal members into `string & {}`, so there\n * is no compile-time restriction beyond `string`.\n */\nexport type BindingDebugType =\n | 'text'\n | 'html'\n | 'show'\n | 'hide'\n | 'checked'\n | `class.${string & {}}`\n | `css.${string & {}}`\n | `attr.${string & {}}`\n | `prop.${string & {}}`\n | (string & {});\n\n// ============================================================================\n// Core factory\n// ============================================================================\n\n/**\n * Registers a reactive effect that calls `updater` whenever `source` changes,\n * or calls `updater` once immediately if `source` is a static value.\n *\n * Responsibilities:\n * - Reactive path: wraps `updater` in an `effect`, tracks it on the registry.\n * - Static path: applies the value once; no effect is registered.\n * - Debug path: logs both the static initial bind and reactive updates via\n * `debug.domUpdated` so that all DOM writes appear in a uniform format.\n * - Error path: catches `updater` exceptions and surfaces them via `console.error`\n * so that a broken binding does not silently kill the effect loop.\n * Both the reactive and static paths are guarded consistently with `untracked`.\n *\n * @param el DOM element or SVG element to associate the effect with.\n * @param source Reactive or static value source.\n * @param updater Function that writes the value to the DOM.\n * @param debugType Structured label used in debug log output and effect naming.\n */\nexport function registerReactiveEffect<T>(\n el: Element,\n source: AsyncReactiveValue<T>,\n updater: (value: T) => void,\n debugType: BindingDebugType\n): void {\n let latestPromise: Promise<T> | null = null;\n\n const runUpdater = (val: T | Promise<T>) => {\n if (!isPromise(val)) {\n latestPromise = null;\n try {\n updater(val);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, debugType, val);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType, true), e);\n }\n return;\n }\n\n latestPromise = val;\n val\n .then((resolved) => {\n // Ensure this is still the most recent promise to avoid race conditions\n if (latestPromise === val) {\n untracked(() => {\n try {\n updater(resolved);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, `${debugType} (async)`, resolved);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n }\n })\n .catch((e) => {\n if (latestPromise === val) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n };\n\n /**\n * Decide whether to register a reactive effect or perform a one-time static update.\n *\n * STRATEGY:\n * 1. If it's an Atom or a function, it's considered 'reactive' and wrapped in an effect.\n * 2. If it's a plain value or a Promise, it's 'static' and applied once.\n */\n const sourceIsReactive = isReactive(source);\n const sourceIsFunction = typeof source === 'function';\n\n if (sourceIsReactive || sourceIsFunction) {\n registry.trackEffect(\n el,\n effect(\n () => {\n // Resolve the current value based on the source type.\n // Both paths subscribe to their respective dependencies automatically.\n const value = sourceIsReactive\n ? (source as ReadonlyAtom<T | Promise<T>>).value\n : (source as () => T | Promise<T>)();\n\n untracked(() => runUpdater(value));\n },\n { name: debugType }\n )\n );\n } else {\n // Static path: applies the value immediately and doesn't register an effect.\n untracked(() => runUpdater(source as T | Promise<T>));\n }\n}\n\n/**\n * Registers a single reactive effect that observes multiple sources in a map.\n * When any source changes, the entire map is re-processed via the updater.\n */\nexport function registerMapEffect<T>(\n el: Element,\n map: Record<string, AsyncReactiveValue<T>>,\n updater: (map: Record<string, T>) => void,\n debugType: BindingDebugType\n): void {\n const keys = Object.keys(map);\n const reactiveKeys: string[] = [];\n const reactiveSources: AsyncReactiveValue<T>[] = [];\n const sourceIsAtom: boolean[] = [];\n const staticValues: Record<string, T | Promise<T>> = {};\n\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i]!;\n const val = map[key]!;\n const isAtomVal = isReactive(val);\n if (isAtomVal || typeof val === 'function') {\n reactiveKeys.push(key);\n reactiveSources.push(val);\n sourceIsAtom.push(isAtomVal);\n } else {\n staticValues[key] = val;\n }\n }\n\n let latestPromiseId = 0;\n\n const runUpdater = (currentMap: Record<string, T | Promise<T>>) => {\n const promises: Promise<{ key: string; val: T }>[] = [];\n const resolvedMap: Record<string, T> = {};\n const len = keys.length;\n\n for (let i = 0; i < len; i++) {\n const key = keys[i]!;\n const val = currentMap[key]!;\n if (isPromise(val)) {\n promises.push(val.then((v) => ({ key, val: v })));\n } else {\n resolvedMap[key] = val as T;\n }\n }\n\n const pLen = promises.length;\n if (pLen > 0) {\n const myId = ++latestPromiseId;\n Promise.all(promises).then((results) => {\n if (myId === latestPromiseId) {\n for (let i = 0; i < pLen; i++) {\n const res = results[i]!;\n resolvedMap[res.key] = res.val;\n }\n untracked(() => {\n try {\n updater(resolvedMap);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, `${debugType} (async)`, resolvedMap);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType), e);\n }\n });\n }\n });\n } else {\n latestPromiseId++; // Invalidate any pending promises\n try {\n updater(resolvedMap);\n debug.domUpdated(LOG_PREFIXES.BINDING, el, debugType, resolvedMap);\n } catch (e) {\n debug.error(LOG_PREFIXES.BINDING, ERROR_MESSAGES.BINDING.UPDATER_ERROR(debugType, true), e);\n }\n }\n };\n\n if (reactiveKeys.length > 0) {\n registry.trackEffect(\n el,\n effect(\n () => {\n const currentMap: Record<string, T | Promise<T>> = { ...staticValues };\n for (let i = 0, len = reactiveKeys.length; i < len; i++) {\n const source = reactiveSources[i]!;\n currentMap[reactiveKeys[i]!] = sourceIsAtom[i]\n ? (source as ReadonlyAtom<T | Promise<T>>).value\n : (source as () => T | Promise<T>)();\n }\n untracked(() => runUpdater(currentMap));\n },\n { name: debugType }\n )\n );\n } else {\n untracked(() => runUpdater(staticValues));\n }\n}\n","/**\n * HTML sanitization and security guards for XSS mitigation.\n *\n * This module is the **sole** sanitization layer — there is no downstream\n * sanitizer (e.g. DOMPurify) applied automatically. All regex-based\n * filtering happens here before content reaches the DOM.\n *\n * **Threat model:** best-effort defence for developer-authored templates and\n * reactive string bindings. For user-controlled rich text (e.g. a WYSIWYG\n * editor), replace or supplement this with DOMPurify.\n */\n\n// ============================================================================\n// URL attribute registry\n// ============================================================================\n\n/**\n * Attributes that carry a single URL value.\n *\n * `srcset` is intentionally excluded: its value is a comma-separated list of\n * URLs (e.g. `\"img.png 1x, img@2x.png 2x\"`), so a start-anchored regex cannot\n * reliably detect a dangerous protocol buried after the first comma. Callers\n * that need to validate srcset should parse each URL individually.\n */\nexport const URL_ATTRS = new Set([\n 'href',\n 'src',\n 'action',\n 'formaction',\n 'xlink:href',\n 'data',\n 'poster',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n]);\n\n// ============================================================================\n// Pre-compiled regex constants\n// ============================================================================\n\nexport const DANGEROUS_PROTOCOL_RE = /^\\s*(?:javascript|vbscript)\\s*:/i;\n\nconst DANGEROUS_CSS_RE =\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters for XSS sanitization\n /(?:expression\\s*\\(|behavior\\s*:|-moz-binding\\s*:|(?:\\\\[0-9a-f]{1,6}\\s*|[\\s\\x00-\\x20/'\"])*(?:j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|v\\s*b\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|d\\s*a\\s*t\\s*a)\\s*:(?!image\\/))/i;\n\n/** Detects `javascript:` / `vbscript:` inside a CSS `url()` function. Non-global — no `lastIndex` state. */\nconst DANGEROUS_CSS_URL_RE = /url\\s*\\(\\s*(?:[\"']?\\s*)?(?:javascript|vbscript)\\s*:/i;\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters\nconst STRIP_CTRL_RE = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g;\n\n/**\n * Numeric HTML entity decoder: &#NNN; and &#xHH; forms.\n *\n * Runs before protocol/tag checks so entity-encoded bypass vectors like\n * \"javascript:\" (j=106) are normalised to their literal characters.\n * Safe structural entities (& < > ") are intentionally left\n * encoded — they produce inert text when re-inserted via innerHTML and must\n * remain escaped for correct HTML rendering.\n *\n * The semicolon is optional (`?`) to catch unterminated references such as\n * \"javascript:\" which some parsers still decode.\n */\nconst DECODE_NUMERIC_ENTITY_RE = /&#x([0-9a-f]+);?|&#([0-9]+);?/gi;\n\n/**\n * Named-entity decoder for the small set of entities relevant to protocol\n * smuggling (colon, Tab, NewLine).\n *\n * HTML5 named character references are **case-sensitive** — `	` exists,\n * `&tab;` does not. Do NOT add the `i` flag: it would incorrectly decode\n * non-existent variants and widen the attack surface.\n */\nconst NAMED_ENTITY_MAP: Record<string, string> = {\n colon: ':',\n Tab: '\\t',\n NewLine: '\\n',\n};\nconst DECODE_NAMED_ENTITY_RE = /&(colon|Tab|NewLine);/g;\n\nconst STRIP_XML_RE = /<\\?[\\s\\S]*?\\?>/g;\n\nconst DANGEROUS_TAG_RE =\n /(<(script|iframe|object|embed|base|meta|applet|noscript|form|style|link)\\b[^>]*>([\\s\\S]*?)<\\/\\2>|<(script|iframe|object|embed|base|meta|applet|noscript|form|style|link)\\b[^>]*\\/?>)/gi;\n\nconst DANGEROUS_PROTOCOL_GLOBAL_RE =\n /(j\\s*a\\s*v\\s*a\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t|v\\s*b\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t)\\s*:/gi;\n\nconst DANGEROUS_DATA_URI_RE =\n /data\\s*:\\s*(?:text\\/(?:html|javascript|vbscript|xml)|application\\/(?:javascript|xhtml\\+xml|xml|x-shockwave-flash)|image\\/svg\\+xml)/gi;\n\nconst UNSAFE_ATTR_RE = /\\bon\\w+\\s*=/gim;\n\n/** Global variant of DANGEROUS_CSS_RE for use inside sanitizeHtml. */\nconst DANGEROUS_CSS_GLOBAL_RE = new RegExp(DANGEROUS_CSS_RE.source, 'gim');\n\n// ============================================================================\n// sanitizeHtml\n// ============================================================================\n\n/**\n * O(n) single-pass scan for characters that indicate potential danger.\n * Much cheaper than running 5+ regexes on safe strings.\n */\nfunction needsSanitization(s: string): boolean {\n const len = s.length;\n for (let i = 0; i < len; i++) {\n const c = s.charCodeAt(i);\n // '<' (0x3C), '&' (0x26), control chars (0x00-0x1F excl. tab/nl/cr)\n if (c === 0x3c || c === 0x26 || (c <= 0x1f && c !== 0x09 && c !== 0x0a && c !== 0x0d)) {\n return true;\n }\n }\n\n // Use a more conservative check for protocols and event handlers.\n // Any colon or the pattern \"on\" + letter should trigger a full regex-based sanitization.\n if (s.indexOf(':') !== -1) return true;\n\n const lower = s.toLowerCase();\n const onIdx = lower.indexOf('on');\n if (onIdx !== -1 && onIdx < len - 2) {\n const nextChar = lower.charCodeAt(onIdx + 2);\n // Check if it's \"on\" followed by a letter (potential event handler like onclick)\n if (nextChar >= 97 && nextChar <= 122) return true;\n }\n\n return false;\n}\n\n/**\n * HTML sanitization for XSS mitigation using regex-based filtering.\n * Optimized with an early-exit fast-path for safe strings.\n */\nexport function sanitizeHtml(html: string | null | undefined): string {\n if (!html) return '';\n const sInit = String(html);\n\n // Fast path: if no dangerous characters or patterns exist, skip all regex processing.\n if (!needsSanitization(sInit)) return sInit;\n\n let s = sInit\n .replace(STRIP_CTRL_RE, '')\n .replace(DECODE_NUMERIC_ENTITY_RE, (_, hex, dec) =>\n String.fromCodePoint(hex ? parseInt(hex, 16) : parseInt(dec, 10))\n )\n .replace(DECODE_NAMED_ENTITY_RE, (_, name) => NAMED_ENTITY_MAP[name] ?? '');\n\n if (s.indexOf('<') !== -1) {\n s = s.replace(STRIP_XML_RE, '');\n let prev: string;\n do {\n prev = s;\n s = s.replace(DANGEROUS_TAG_RE, '');\n } while (s !== prev);\n }\n\n return s\n .replace(DANGEROUS_PROTOCOL_GLOBAL_RE, 'data-unsafe-protocol:')\n .replace(DANGEROUS_DATA_URI_RE, 'data-unsafe-protocol:')\n .replace(UNSAFE_ATTR_RE, 'data-unsafe-attr=')\n .replace(DANGEROUS_CSS_GLOBAL_RE, 'data-unsafe-css:');\n}\n\n/** Checks for javascript:/vbscript: protocols in URL attributes. */\nexport const isDangerousUrl = (attr: string, val: string): boolean => {\n if (val.length < 10) return false; // \"javascript:\".length = 11\n const lower = attr.toLowerCase();\n return URL_ATTRS.has(lower) && DANGEROUS_PROTOCOL_RE.test(val);\n};\n\n/** Checks for protocols inside CSS url() functions. */\nexport const isDangerousCssValue = (val: string): boolean => {\n if (val.length < 15) return false; // \"url(javascript:)\".length = 15\n return val.toLowerCase().includes('url(') && DANGEROUS_CSS_URL_RE.test(val);\n};\n","import { computed, effect, isAtom, type ReadonlyAtom, untracked } from '@but212/atom-effect';\n\nimport $ from 'jquery';\nimport { applyInputBinding } from '@/bindings/input-binding';\nimport { DANGEROUS_PROPS, ERROR_MESSAGES, LOG_PREFIXES, VALID_INPUT_TAGS } from '@/constants';\nimport { registerMapEffect, registerReactiveEffect } from '@/core/effect-factory';\nimport { INTERNAL_HANDLER } from '@/core/jquery-patch';\nimport { registry } from '@/core/registry';\nimport type {\n AsyncReactiveValue,\n BindingContext,\n BindingOptions,\n CssValue,\n PrimitiveValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from '@/types';\nimport { debug } from '@/utils/debug';\n\nexport type { BindingContext };\n\nimport { hasOwn, isPromise } from '@/utils';\n\nimport {\n DANGEROUS_PROTOCOL_RE,\n isDangerousCssValue,\n sanitizeHtml,\n URL_ATTRS,\n} from '@/utils/sanitize';\n\n// Cache for CSS property camelization to avoid repeated regex overhead.\n// Uses Map instead of a plain object to avoid prototype pollution risk and\n// for clearer semantics — CSS property names are a small, finite set so the\n// cache is effectively bounded in practice.\nconst camelCache = new Map<string, string>();\nfunction getCamelCase(prop: string): string {\n let cached = camelCache.get(prop);\n if (cached !== undefined) return cached;\n\n cached = prop.includes('-') ? prop.replace(/-./g, (m) => m[1]!.toUpperCase()) : prop;\n camelCache.set(prop, cached);\n return cached;\n}\n\n/**\n * Cache for sanitized versions of reactive strings.\n * Ensures that if 100 elements are bound to the same atom, sanitizeHtml() is\n * called only once per update instead of 100 times.\n */\nconst htmlSanitizeCache = new WeakMap<\n ReadonlyAtom<string | Promise<string>>,\n ReadonlyAtom<string | Promise<string>>\n>();\n\nfunction getSanitizedHtml(\n source: ReadonlyAtom<string | Promise<string>>\n): ReadonlyAtom<string | Promise<string>> {\n let cached = htmlSanitizeCache.get(source);\n if (!cached) {\n cached = computed(() => {\n const val = source.value;\n if (isPromise(val)) {\n return val.then((v: string) => sanitizeHtml(v));\n }\n return sanitizeHtml(val);\n });\n htmlSanitizeCache.set(source, cached);\n }\n return cached;\n}\n\n// ============================================================================\n// Binding Context Factory\n// ============================================================================\n\nexport function createContext(el: HTMLElement): BindingContext {\n return {\n el,\n trackCleanup: (fn) => registry.trackCleanup(el, fn),\n };\n}\n\n// ============================================================================\n// One-Way Binding Handlers (Atom → DOM)\n// ============================================================================\n\n/**\n * Updates element text content.\n */\nexport function bindText<T = unknown>(\n { el }: BindingContext,\n value: AsyncReactiveValue<T>,\n formatter?: (val: T) => string\n): void {\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const text = formatter ? formatter(val) : String(val ?? '');\n if (el.textContent !== text) el.textContent = text;\n },\n 'text'\n );\n}\n\n/**\n * Updates element inner HTML with XSS sanitization.\n */\nexport function bindHtml({ el }: BindingContext, value: AsyncReactiveValue<string>): void {\n const source = isAtom(value)\n ? getSanitizedHtml(value as ReadonlyAtom<string | Promise<string>>)\n : value;\n\n registerReactiveEffect(\n el,\n source,\n (val) => {\n const html = source === value ? sanitizeHtml(val) : val;\n if (el.innerHTML !== html) {\n registry.cleanupDescendants(el);\n el.innerHTML = html;\n }\n },\n 'html'\n );\n}\n\n/**\n * Toggles multiple CSS classes based on reactive boolean conditions.\n */\nexport function bindClass(\n { el }: BindingContext,\n classMap: Record<string, AsyncReactiveValue<boolean>>\n): void {\n const tokenMap: Record<string, string[]> = {};\n for (const k in classMap) {\n if (hasOwn.call(classMap, k)) {\n const trimmed = k.trim();\n // Optimization: avoid regex for simple single-class keys\n tokenMap[k] = trimmed.indexOf(' ') === -1 ? [trimmed] : trimmed.split(/\\s+/).filter(Boolean);\n }\n }\n\n registerMapEffect(\n el,\n classMap,\n (states) => {\n for (const k in states) {\n const tokens = tokenMap[k]!;\n if (states[k]) {\n el.classList.add(...tokens);\n } else {\n el.classList.remove(...tokens);\n }\n }\n },\n 'class'\n );\n}\n\n/**\n * Updates multiple CSS style properties.\n */\nexport function bindCss({ el }: BindingContext, cssMap: Record<string, CssValue>): void {\n const style = el.style as unknown as Record<string, string | null>;\n const reactiveMap: Record<string, ReactiveValue<unknown>> = {};\n const meta: Record<string, { camel: string; unit: string }> = {};\n\n for (const p in cssMap) {\n if (hasOwn.call(cssMap, p)) {\n const val = cssMap[p]!;\n const [src, unit] = Array.isArray(val) ? val : ([val, ''] as const);\n reactiveMap[p] = src;\n meta[p] = { camel: getCamelCase(p), unit };\n }\n }\n\n registerMapEffect(\n el,\n reactiveMap,\n (states) => {\n for (const p in states) {\n const m = meta[p]!;\n const val = states[p];\n const str = m.unit ? `${val}${m.unit}` : String(val);\n const camel = m.camel;\n if (!isDangerousCssValue(str) && style[camel] !== str) {\n style[camel] = str;\n }\n }\n },\n 'css'\n );\n}\n\n/**\n * Binds DOM attributes with security guards and primitive value constraints.\n */\nexport function bindAttr(\n { el }: BindingContext,\n attrMap: Record<string, AsyncReactiveValue<PrimitiveValue>>\n): void {\n const safeMap: Record<string, AsyncReactiveValue<PrimitiveValue>> = {};\n const metaMap: Record<string, { isAria: boolean; isUrl: boolean }> = {};\n const cache: Record<string, string | null> = {};\n\n for (const name in attrMap) {\n if (!hasOwn.call(attrMap, name)) continue;\n const lower = name.toLowerCase();\n if (lower.startsWith('on')) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_EVENT_HANDLER(name)}`\n );\n continue;\n }\n safeMap[name] = attrMap[name]!;\n metaMap[name] = { isAria: lower.startsWith('aria-'), isUrl: URL_ATTRS.has(lower) };\n cache[name] = el.getAttribute(name);\n }\n\n registerMapEffect(\n el,\n safeMap,\n (states) => {\n for (const name in states) {\n const m = metaMap[name]!;\n const val = states[name] as PrimitiveValue;\n\n if (val == null || (val === false && !m.isAria)) {\n if (cache[name] !== null) el.removeAttribute(name);\n cache[name] = null;\n continue;\n }\n\n const newVal = val === true ? (m.isAria ? 'true' : name) : String(val);\n if (m.isUrl && DANGEROUS_PROTOCOL_RE.test(newVal)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_PROTOCOL(name)}`);\n continue;\n }\n\n if (cache[name] !== newVal) {\n el.setAttribute(name, newVal);\n cache[name] = newVal;\n }\n }\n },\n 'attr'\n );\n}\n\n/**\n * Binds DOM properties. Uses strict property write guards and security filters.\n */\nexport function bindProp(\n ctx: BindingContext,\n propMap: Record<string, AsyncReactiveValue<unknown>>\n): void {\n const el = ctx.el as unknown as Record<string, unknown>;\n const safeMap: Record<string, AsyncReactiveValue<unknown>> = {};\n const metaMap: Record<string, { isUrl: boolean }> = {};\n\n for (const name in propMap) {\n if (!hasOwn.call(propMap, name)) continue;\n const lower = name.toLowerCase();\n if (lower.startsWith('on') || DANGEROUS_PROPS.has(name)) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${\n lower.startsWith('on')\n ? ERROR_MESSAGES.SECURITY.BLOCKED_EVENT_HANDLER(name)\n : ERROR_MESSAGES.SECURITY.BLOCKED_PROP(name)\n }`\n );\n continue;\n }\n safeMap[name] = propMap[name]!;\n metaMap[name] = { isUrl: URL_ATTRS.has(lower) };\n }\n\n registerMapEffect(\n ctx.el,\n safeMap,\n (states) => {\n for (const name in states) {\n const val = states[name];\n if (metaMap[name]!.isUrl && typeof val === 'string' && DANGEROUS_PROTOCOL_RE.test(val)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.SECURITY.BLOCKED_PROTOCOL(name)}`);\n continue;\n }\n if (el[name] !== val) {\n el[name] = val;\n }\n }\n },\n 'prop'\n );\n}\n\n/**\n * Handles visibility (display: none) toggle.\n */\nexport function bindVisibility(\n { el }: BindingContext,\n condition: AsyncReactiveValue<boolean>,\n invert: boolean\n): void {\n const show = el.style.display === 'none' ? '' : el.style.display;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n const target = invert !== !!val ? show : 'none';\n if (el.style.display !== target) el.style.display = target;\n },\n invert ? 'hide' : 'show'\n );\n}\n\n/**\n * Two-way value binding with full feature parity to $.fn.atomVal.\n */\nexport function bindVal(\n ctx: BindingContext,\n atom: WritableAtom<unknown>,\n options: ValOptions<unknown> = {}\n): void {\n const tag = ctx.el.tagName.toLowerCase();\n if (!VALID_INPUT_TAGS.has(tag)) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.INVALID_INPUT_ELEMENT(tag)}`);\n return;\n }\n const { fx, cleanup } = applyInputBinding($(ctx.el), atom, options);\n registry.trackEffect(ctx.el, fx);\n ctx.trackCleanup(cleanup);\n}\n\n/**\n * Two-way binding for checkbox/radio checked state.\n */\nexport function bindChecked(ctx: BindingContext, atom: WritableAtom<boolean>): void {\n const el = ctx.el as HTMLInputElement;\n const $el = $(el);\n\n const handler = () => {\n if (atom.peek() !== el.checked) {\n atom.value = el.checked;\n if (el.type === 'radio' && el.checked && el.name) {\n (el.form ? $(el.form) : $(document))\n .find(`input[type=\"radio\"][name=\"${el.name.replace(/\"/g, '\\\\\"')}\"]`)\n .not(el)\n .trigger('change.atomRadioSync');\n }\n }\n };\n (handler as unknown as Record<symbol, boolean>)[INTERNAL_HANDLER] = true;\n\n $el.on('change change.atomRadioSync', handler);\n ctx.trackCleanup(() => $el.off('change change.atomRadioSync', handler));\n\n registry.trackEffect(\n el,\n effect(() => {\n const val = !!atom.value;\n untracked(() => {\n if (el.checked !== val) {\n el.checked = val;\n debug.domUpdated(LOG_PREFIXES.BINDING, el, 'checked', val);\n }\n });\n })\n );\n}\n\n// ============================================================================\n// Event Binding Handler\n// ============================================================================\n\nexport function bindEvents(ctx: BindingContext, eventMap: NonNullable<BindingOptions['on']>): void {\n const $el = $(ctx.el);\n $el.on(eventMap);\n ctx.trackCleanup(() => $el.off(eventMap));\n}\n\n/**\n * Binds a single event handler using jQuery's event system for compatibility.\n */\nexport function bindOn(\n { el, trackCleanup }: BindingContext,\n event: string,\n handler: (e: JQuery.TriggeredEvent) => void\n): void {\n const $el = $(el);\n $el.on(event, handler);\n trackCleanup(() => $el.off(event, handler));\n}\n\n/**\n * Disposes all reactive bindings on an element and its descendants.\n */\nexport function bindUnbind(el: HTMLElement): void {\n registry.cleanupTree(el);\n}\n","import {\n batch,\n atom as createAtom,\n type EffectObject,\n effect,\n getPathValue,\n setDeepValue,\n untracked,\n type WritableAtom,\n} from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { INTERNAL_HANDLER } from '@/core/jquery-patch';\nimport { registry } from '@/core/registry';\nimport type { BindingContext, FormOptions } from '@/types';\nimport { bindVal, createContext } from './unified';\n\n/**\n * Manager class for orchestrating two-way form synchronization.\n * Optimizes performance via Root -> Leaf dispatcher and maintains circular protection.\n */\ninterface FieldEntry {\n atom: WritableAtom<unknown>;\n parts: string[];\n name: string;\n refCount: number;\n effect: EffectObject | null;\n}\n\nconst SELECTOR = 'input, select, textarea';\n\nclass FormBinder<T extends object> {\n private fieldMap = new Map<string, FieldEntry>();\n private fields: FieldEntry[] = [];\n private elementNames = new WeakMap<Element, string>();\n private isSyncingFromLeaf = false;\n\n constructor(\n private form: HTMLFormElement,\n private atom: WritableAtom<T>,\n private options: FormOptions<unknown> = {}\n ) {\n this.init();\n }\n\n private init(): void {\n const rootDispatcher = effect(() => {\n const rootValue = this.atom.value;\n if (this.isSyncingFromLeaf || !this.fields.length) return;\n\n batch(() => {\n untracked(() => {\n for (let i = 0; i < this.fields.length; i++) {\n const f = this.fields[i]!;\n const newVal = getPathValue(rootValue, f.parts);\n if (!Object.is(f.atom.peek(), newVal)) f.atom.value = newVal;\n }\n });\n });\n });\n\n registry.trackEffect(this.form, rootDispatcher);\n this.bindElement(this.form);\n this.setupObserver();\n }\n\n public bindElement(el: Element): void {\n const targets = el.matches?.(SELECTOR)\n ? [el]\n : (el as HTMLElement).querySelectorAll?.(SELECTOR) || [];\n for (let i = 0, len = targets.length; i < len; i++) {\n this.bindControl(targets[i] as Element);\n }\n }\n\n private bindControl(el: Element): void {\n if (\n !(\n el instanceof HTMLInputElement ||\n el instanceof HTMLSelectElement ||\n el instanceof HTMLTextAreaElement\n )\n ) {\n return;\n }\n const control = el;\n const name = control.name;\n if (!name) return;\n\n const oldName = this.elementNames.get(control);\n if (oldName !== undefined && oldName !== name) registry.cleanup(control);\n if (this.elementNames.has(control) && oldName === name) return;\n\n const entry = this.acquireField(name);\n this.elementNames.set(control, name);\n\n const ctx = createContext(control);\n ctx.trackCleanup(() => this.releaseField(control, name));\n\n if (\n control instanceof HTMLInputElement &&\n (control.type === 'radio' || control.type === 'checkbox')\n ) {\n this.bindToggle(ctx, entry.atom, control.value, control.type === 'checkbox');\n } else {\n bindVal(ctx, entry.atom, this.options);\n }\n }\n\n private bindToggle(\n ctx: BindingContext,\n atom: WritableAtom<unknown>,\n val: string,\n isCheck: boolean\n ): void {\n const el = ctx.el as HTMLInputElement;\n const handler = () => {\n const curr = atom.peek();\n if (isCheck && Array.isArray(curr)) {\n const s = new Set(curr.map(String));\n el.checked ? s.add(val) : s.delete(val);\n atom.value = Array.from(s);\n } else {\n atom.value = isCheck ? el.checked : val;\n }\n };\n\n (handler as unknown as { [INTERNAL_HANDLER]: boolean })[INTERNAL_HANDLER] = true;\n $(el).on('change', handler);\n ctx.trackCleanup(() => $(el).off('change', handler));\n\n registry.trackEffect(\n el,\n effect(() => {\n const v = atom.value;\n const checked = isCheck\n ? Array.isArray(v)\n ? v.some((x) => String(x) === val)\n : !!v\n : String(v) === val;\n if (el.checked !== checked) el.checked = checked;\n })\n );\n }\n\n private acquireField(name: string): FieldEntry {\n let entry = this.fieldMap.get(name);\n if (entry) {\n entry.refCount++;\n return entry;\n }\n\n const parts = name\n .replace(/\\[(\\w+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n const fieldAtom = createAtom(getPathValue(this.atom.peek(), parts));\n entry = { atom: fieldAtom, parts, name, refCount: 1, effect: null };\n\n entry.effect = effect(() => {\n let val = fieldAtom.value;\n if (this.options.transform) val = this.options.transform(name, val);\n\n const root = this.atom.peek();\n const next = setDeepValue(root, parts, 0, val);\n\n if (next !== root) {\n this.isSyncingFromLeaf = true;\n try {\n this.atom.value = next as T;\n if (this.options.onChange) untracked(() => this.options.onChange!(name, val));\n } finally {\n this.isSyncingFromLeaf = false;\n }\n }\n });\n\n this.fieldMap.set(name, entry);\n this.fields.push(entry);\n return entry;\n }\n\n private releaseField(el: Element, name: string): void {\n const entry = this.fieldMap.get(name);\n if (entry && --entry.refCount <= 0) {\n const idx = this.fields.indexOf(entry);\n if (idx !== -1) this.fields.splice(idx, 1);\n entry.effect?.dispose();\n this.fieldMap.delete(name);\n }\n registry.cleanup(el);\n }\n\n private setupObserver(): void {\n const observer = new MutationObserver((ms) => {\n for (let i = 0, len = ms.length; i < len; i++) {\n const m = ms[i]!;\n if (m.type === 'childList') {\n for (let j = 0; j < m.addedNodes.length; j++) {\n const node = m.addedNodes[j]!;\n if (node.nodeType === 1) this.bindElement(node as Element);\n }\n } else if (m.attributeName === 'name') {\n this.bindElement(m.target as Element);\n }\n }\n });\n\n observer.observe(this.form, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['name'],\n });\n\n registry.trackCleanup(this.form, () => observer.disconnect());\n }\n}\n\n/**\n * Binds an entire form to a single object-based atom.\n * Features: O(1) performance for large forms, circular loop protection,\n * and custom transform/change hooks.\n */\nexport function bindForm<T extends object>(\n form: HTMLFormElement,\n atom: WritableAtom<T>,\n options: FormOptions<unknown> = {}\n): void {\n new FormBinder(form, atom, options);\n}\n","import $ from 'jquery';\nimport { bindForm } from '@/bindings/form';\nimport {\n bindAttr,\n bindChecked,\n bindClass,\n bindCss,\n bindEvents,\n bindHtml,\n bindOn,\n bindProp,\n bindText,\n bindUnbind,\n bindVal,\n bindVisibility,\n createContext,\n} from '@/bindings/unified';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport type {\n AsyncReactiveValue,\n BindingContext,\n BindingOptions,\n CssBindings,\n FormOptions,\n PrimitiveValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from '@/types';\n\nimport { debug } from '@/utils/debug';\n\n/**\n * Internal helper to iterate over a jQuery set and apply a binding function\n * to each Element node. Handles nodeType check and context creation.\n */\nfunction atomEachElement(jq: JQuery, fn: (ctx: BindingContext, el: HTMLElement) => void): JQuery {\n const len = jq.length;\n for (let i = 0; i < len; i++) {\n const node = jq[i];\n if (node?.nodeType === 1) {\n const el = node as HTMLElement;\n fn(createContext(el), el);\n } else if (node) {\n debug.log(LOG_PREFIXES.BINDING, `Skipping non-Element node (nodeType=${node.nodeType})`);\n }\n }\n return jq;\n}\n\n/**\n * Binds element `textContent` to a reactive source.\n */\n$.fn.atomText = function <T>(source: AsyncReactiveValue<T>, formatter?: (v: T) => string): JQuery {\n return atomEachElement(this, (ctx) => bindText(ctx, source, formatter));\n};\n\n/**\n * Binds element `innerHTML` to a reactive string source.\n */\n$.fn.atomHtml = function (source: AsyncReactiveValue<string>): JQuery {\n return atomEachElement(this, (ctx) => bindHtml(ctx, source));\n};\n\n/**\n * Toggles one or more CSS classes based on reactive boolean conditions.\n */\n$.fn.atomClass = function (\n this: JQuery,\n classNameOrMap: string | Record<string, AsyncReactiveValue<boolean>>,\n condition?: AsyncReactiveValue<boolean>\n): JQuery {\n if (typeof classNameOrMap === 'string') {\n if (condition === undefined) {\n console.warn(\n `${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_CONDITION('atomClass')}`\n );\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [classNameOrMap]: condition };\n return atomEachElement(this, (ctx) => bindClass(ctx, map));\n }\n return atomEachElement(this, (ctx) => bindClass(ctx, classNameOrMap));\n};\n\n/**\n * Binds one or more CSS style properties to reactive values.\n */\n$.fn.atomCss = function (\n this: JQuery,\n propOrMap: string | CssBindings,\n source?: AsyncReactiveValue<string | number>,\n unit?: string\n): JQuery {\n if (typeof propOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomCss')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [propOrMap]: unit ? [source as ReactiveValue<number>, unit] : source! };\n return atomEachElement(this, (ctx) => bindCss(ctx, map as CssBindings));\n }\n return atomEachElement(this, (ctx) => bindCss(ctx, propOrMap));\n};\n\n/**\n * Binds one or more HTML attributes to reactive values with security guards.\n */\n$.fn.atomAttr = function (\n this: JQuery,\n nameOrMap: string | Record<string, AsyncReactiveValue<PrimitiveValue>>,\n source?: AsyncReactiveValue<PrimitiveValue>\n): JQuery {\n if (typeof nameOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomAttr')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [nameOrMap]: source };\n return atomEachElement(this, (ctx) => bindAttr(ctx, map));\n }\n return atomEachElement(this, (ctx) => bindAttr(ctx, nameOrMap));\n};\n\n/**\n * Binds one or more DOM properties to reactive values.\n */\n$.fn.atomProp = function <T>(\n this: JQuery,\n nameOrMap: string | Record<string, AsyncReactiveValue<T>>,\n source?: AsyncReactiveValue<T>\n): JQuery {\n if (typeof nameOrMap === 'string') {\n if (source === undefined) {\n console.warn(`${LOG_PREFIXES.BINDING} ${ERROR_MESSAGES.BINDING.MISSING_SOURCE('atomProp')}`);\n return this;\n }\n // Hoist map creation outside the element loop\n const map = { [nameOrMap]: source } as Record<string, AsyncReactiveValue<unknown>>;\n return atomEachElement(this, (ctx) => bindProp(ctx, map));\n }\n return atomEachElement(this, (ctx) =>\n bindProp(ctx, nameOrMap as Record<string, AsyncReactiveValue<unknown>>)\n );\n};\n\n/**\n * Shows the element when `condition` is truthy (`display: ''`).\n */\n$.fn.atomShow = function (condition: AsyncReactiveValue<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindVisibility(ctx, condition, false));\n};\n\n/**\n * Hides the element when `condition` is truthy (`display: 'none'`).\n */\n$.fn.atomHide = function (condition: AsyncReactiveValue<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindVisibility(ctx, condition, true));\n};\n\n/**\n * Two-way binding for `<input>`, `<select>`, and `<textarea>` values.\n */\n$.fn.atomVal = function <T>(atom: WritableAtom<T>, options: ValOptions<T> = {}): JQuery {\n return atomEachElement(this, (ctx) =>\n bindVal(ctx, atom as WritableAtom<unknown>, options as unknown as ValOptions<unknown>)\n );\n};\n\n/**\n * Two-way binding for checkbox and radio button `checked` state.\n */\n$.fn.atomChecked = function (atom: WritableAtom<boolean>): JQuery {\n return atomEachElement(this, (ctx) => bindChecked(ctx, atom));\n};\n\n/**\n * Two-way binding for an entire form.\n */\n$.fn.atomForm = function <T extends object>(\n atom: WritableAtom<T>,\n options: FormOptions<unknown> = {}\n): JQuery {\n return atomEachElement(this, (_, el) => {\n if (el instanceof HTMLFormElement) bindForm(el, atom, options);\n });\n};\n\n/**\n * Attaches a lifecycle-aware event handler using the jQuery event system.\n */\n$.fn.atomOn = function (event: string, handler: (e: JQuery.Event) => void): JQuery {\n return atomEachElement(this, (ctx) => bindOn(ctx, event, handler));\n};\n\n/**\n * Lookup table for reactive binding handlers.\n * Ordered to match the bitmask bits in atomBind.\n */\nconst BIND_HANDLERS: Array<(ctx: BindingContext, options: BindingOptions<unknown>) => void> = [\n (ctx, o) => bindText(ctx, o.text), // 1 << 0\n (ctx, o) => bindHtml(ctx, o.html!), // 1 << 1\n (ctx, o) => bindClass(ctx, o.class!), // 1 << 2\n (ctx, o) => bindCss(ctx, o.css!), // 1 << 3\n (ctx, o) => bindAttr(ctx, o.attr!), // 1 << 4\n (ctx, o) => bindProp(ctx, o.prop as Record<string, AsyncReactiveValue<unknown>>), // 1 << 5\n (ctx, o) => bindVisibility(ctx, o.show!, false), // 1 << 6\n (ctx, o) => bindVisibility(ctx, o.hide!, true), // 1 << 7\n (ctx, o) => {\n // 1 << 8: val\n const v = o.val!;\n if (Array.isArray(v)) {\n bindVal(ctx, v[0] as WritableAtom<unknown>, v[1] as ValOptions<unknown>);\n } else {\n bindVal(ctx, v as WritableAtom<unknown>);\n }\n },\n (ctx, o) => bindChecked(ctx, o.checked!), // 1 << 9\n (ctx, o) => {\n // 1 << 10: form\n if (ctx.el instanceof HTMLFormElement) {\n const f = o.form!;\n if (Array.isArray(f)) {\n bindForm(ctx.el, f[0] as WritableAtom<object>, f[1] as FormOptions<unknown>);\n } else {\n bindForm(ctx.el, f as WritableAtom<object>);\n }\n }\n },\n (ctx, o) => bindEvents(ctx, o.on!), // 1 << 11\n];\n\n/**\n * Integrated multi-behavior reactive binding.\n * Uses a bitmask dispatch strategy to minimize branch mispredictions in hot-path.\n */\n$.fn.atomBind = function <T>(this: JQuery, options: BindingOptions<T>): JQuery {\n let mask = 0;\n if (options.text !== undefined) mask |= 1 << 0;\n if (options.html !== undefined) mask |= 1 << 1;\n if (options.class !== undefined) mask |= 1 << 2;\n if (options.css !== undefined) mask |= 1 << 3;\n if (options.attr !== undefined) mask |= 1 << 4;\n if (options.prop !== undefined) mask |= 1 << 5;\n if (options.show !== undefined) mask |= 1 << 6;\n if (options.hide !== undefined) mask |= 1 << 7;\n if (options.val !== undefined) mask |= 1 << 8;\n if (options.checked !== undefined) mask |= 1 << 9;\n if (options.form !== undefined) mask |= 1 << 10;\n if (options.on !== undefined) mask |= 1 << 11;\n\n if (mask === 0) return this;\n\n return atomEachElement(this, (ctx) => {\n let m = mask;\n while (m > 0) {\n const bit = m & -m;\n const idx = 31 - Math.clz32(bit);\n BIND_HANDLERS[idx]!(ctx, options as BindingOptions<unknown>);\n m ^= bit;\n }\n });\n};\n\n/**\n * Destroys all reactive bindings on the selected elements **and their descendants**.\n */\n$.fn.atomUnbind = function (this: JQuery): JQuery {\n const len = this.length;\n for (let i = 0; i < len; i++) {\n const node = this[i];\n if (node?.nodeType === 1) {\n bindUnbind(node as HTMLElement);\n }\n }\n return this;\n};\n","import { effect, untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { EffectObject, ListKey, ListKeyFn, ListOptions, ReadonlyAtom } from '@/types';\nimport { getSelector, hasOwn, shallowEqual } from '@/utils';\nimport { debug } from '@/utils/debug';\nimport { ArrayPool, ObjectPool } from '@/utils/pool';\nimport { sanitizeHtml } from '@/utils/sanitize';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nconst listInstances = new WeakMap<Element, { fx: EffectObject; ctx: ListContext<unknown> }>();\nlet listBatchIdCounter = 0;\n\nconst mapPool = new ObjectPool<Map<ListKey, number>>(\n () => new Map(),\n (m) => m.clear()\n);\nconst setPool = new ObjectPool<Set<ListKey>>(\n () => new Set(),\n (s) => s.clear()\n);\nconst arrayPool = new ArrayPool<unknown>(100, 1024);\n\nfunction insertOrAppend(elOrJq: Element | JQuery, nextNode: Node | null, container: Element): void {\n // Optimization: insertBefore(node, null) is same as appendChild(node)\n if (elOrJq instanceof Element) {\n container.insertBefore(elOrJq, nextNode);\n return;\n }\n const len = elOrJq.length;\n for (let i = 0; i < len; i++) {\n const el = elOrJq[i];\n if (el) {\n container.insertBefore(el, nextNode);\n }\n }\n}\n\nfunction wrap($el: Element | JQuery<Element>): JQuery {\n return ($el instanceof Element ? $($el) : $el) as unknown as JQuery;\n}\n\n// ============================================================================\n// ListContext\n// ============================================================================\n\nclass ListContext<T> {\n oldKeys: ListKey[] = [];\n oldItems: T[] = [];\n oldNodes: (Element | JQuery)[] = [];\n\n readonly removingKeys = new Set<ListKey>();\n $emptyEl: JQuery | null = null;\n readonly keyToIndex = new Map<ListKey, number>();\n fx?: EffectObject;\n\n statesBuffer = new Uint8Array(256);\n indicesBuffer = new Int32Array(256);\n\n constructor(\n public readonly $container: JQuery,\n /** @internal */\n public readonly containerSelector: string,\n public readonly onRemove: (($el: JQuery) => Promise<void> | void) | undefined\n ) {}\n\n scheduleRemoval(k: ListKey, $el: JQuery): void {\n const commit = () => {\n if (this.fx?.isDisposed) return;\n if ($el[0]?.isConnected) $el.remove();\n this.removingKeys.delete(k);\n debug.log(LOG_PREFIXES.LIST, `${this.containerSelector} removed item:`, k);\n };\n\n const res = this.onRemove?.($el);\n if (res instanceof Promise) res.then(commit, commit);\n else commit();\n }\n\n removeItem(k: ListKey, $el: JQuery): void {\n for (let j = 0; j < $el.length; j++) {\n if ($el[j] instanceof Element) ($el[j] as Element).removeAttribute('data-atom-key');\n }\n this.removingKeys.add(k);\n this.scheduleRemoval(k, $el);\n }\n\n dispose(): void {\n this.removingKeys.clear();\n this.oldKeys.length = 0;\n this.oldItems.length = 0;\n this.oldNodes.length = 0;\n this.keyToIndex.clear();\n this.$emptyEl?.remove();\n this.$container.off('.atomList');\n this.statesBuffer = new Uint8Array(0);\n this.indicesBuffer = new Int32Array(0);\n }\n\n ensureBuffers(size: number): void {\n if (this.statesBuffer.length < size) {\n this.statesBuffer = new Uint8Array(Math.max(size, this.statesBuffer.length * 2));\n }\n if (this.indicesBuffer.length < size) {\n this.indicesBuffer = new Int32Array(Math.max(size, this.indicesBuffer.length * 2));\n }\n }\n}\n\n// ============================================================================\n// Internal diff types\n// ============================================================================\n\ninterface PreparedDiff<T> {\n newKeys: ListKey[];\n newKeySet: Set<ListKey>;\n newItems: T[];\n newNodes: (Element | JQuery)[];\n newStates: Uint8Array;\n newIndices: Int32Array;\n trKeys: ListKey[];\n trItems: T[];\n trIdxs: number[];\n startIndex: number;\n oldEndIndex: number;\n newEndIndex: number;\n}\n\ninterface PlaceCallbacks<T> {\n bind: ListOptions<T>['bind'];\n update: ListOptions<T>['update'];\n onAdd: ListOptions<T>['onAdd'];\n onRemove: ListOptions<T>['onRemove'];\n events: ListOptions<T>['events'];\n}\n\n// ============================================================================\n// Step functions\n// ============================================================================\n\nfunction handleEmpty<T>(\n ctx: ListContext<T>,\n itemCount: number,\n $container: JQuery,\n empty: ListOptions<T>['empty']\n): void {\n if (ctx.$emptyEl && itemCount > 0) {\n ctx.$emptyEl.remove();\n ctx.$emptyEl = null;\n }\n if (itemCount !== 0) return;\n\n const { oldKeys, oldNodes, onRemove } = ctx;\n if (!onRemove) {\n for (let i = 0, len = oldKeys.length; i < len; i++) ctx.removingKeys.delete(oldKeys[i]!);\n $container.empty();\n } else {\n for (let i = 0, len = oldKeys.length; i < len; i++) {\n const k = oldKeys[i]!;\n if (oldNodes[i]) ctx.removeItem(k, wrap(oldNodes[i]!));\n }\n }\n\n if (empty && !ctx.$emptyEl) {\n ctx.$emptyEl = (typeof empty === 'string'\n ? $(sanitizeHtml(empty))\n : $(empty as Element | JQuery)) as unknown as JQuery;\n ctx.$emptyEl.appendTo($container);\n }\n\n arrayPool.release(ctx.oldKeys);\n arrayPool.release(ctx.oldItems);\n arrayPool.release(ctx.oldNodes);\n ctx.oldKeys = [];\n ctx.oldItems = [];\n ctx.oldNodes = [];\n}\n\nfunction buildIndices<T>(\n ctx: ListContext<T>,\n items: T[],\n itemCount: number,\n getKey: ListKeyFn<T>,\n update: ListOptions<T>['update'],\n isEqual: ListOptions<T>['isEqual']\n): PreparedDiff<T> {\n const { oldKeys, oldItems, oldNodes, removingKeys, keyToIndex } = ctx;\n const oldLen = oldKeys.length;\n\n let startIndex = 0,\n oldEndIndex = oldLen - 1,\n newEndIndex = itemCount - 1;\n\n const eq = isEqual || shallowEqual;\n\n while (startIndex <= oldEndIndex && startIndex <= newEndIndex) {\n const item = items[startIndex]!;\n const k = getKey(item, startIndex);\n if (oldKeys[startIndex] !== k || !eq(oldItems[startIndex]!, item)) {\n break;\n }\n keyToIndex.set(k, startIndex++);\n }\n\n while (oldEndIndex >= startIndex && newEndIndex >= startIndex) {\n const item = items[newEndIndex]!;\n const k = getKey(item, newEndIndex);\n if (oldKeys[oldEndIndex] !== k || !eq(oldItems[oldEndIndex]!, item)) {\n break;\n }\n keyToIndex.set(k, newEndIndex--);\n oldEndIndex--;\n }\n\n const oldIndexMap = mapPool.acquire();\n for (let i = startIndex; i <= oldEndIndex; i++) oldIndexMap.set(oldKeys[i]!, i);\n\n const newKeySet = setPool.acquire();\n ctx.ensureBuffers(itemCount);\n\n const newKeys = arrayPool.acquire() as ListKey[];\n newKeys.length = itemCount;\n const newItems = arrayPool.acquire() as T[];\n newItems.length = itemCount;\n const newNodes = arrayPool.acquire() as (Element | JQuery)[];\n newNodes.length = itemCount;\n const newStates = ctx.statesBuffer,\n newIndices = ctx.indicesBuffer;\n\n const trKeys = arrayPool.acquire() as ListKey[],\n trItems = arrayPool.acquire() as T[],\n trIdxs = arrayPool.acquire() as number[];\n\n for (let i = 0; i < startIndex; i++) {\n newKeys[i] = oldKeys[i]!;\n newItems[i] = items[i]!;\n newNodes[i] = oldNodes[i]!;\n newStates[i] = 3;\n newIndices[i] = i;\n }\n for (let j = oldLen - 1, i = itemCount - 1; i > newEndIndex; i--, j--) {\n newKeys[i] = oldKeys[j]!;\n newItems[i] = items[i]!;\n newNodes[i] = oldNodes[j]!;\n newStates[i] = 3;\n newIndices[i] = j;\n }\n\n for (let i = startIndex; i <= newEndIndex; i++) {\n const item = items[i]!,\n k = getKey(item, i);\n newKeys[i] = k;\n newItems[i] = item;\n keyToIndex.set(k, i);\n\n if (newKeySet.has(k)) {\n debug.warn(LOG_PREFIXES.LIST, ERROR_MESSAGES.LIST.DUPLICATE_KEY(k, i, ctx.containerSelector));\n newIndices[i] = -1;\n continue;\n }\n newKeySet.add(k);\n\n const oldIdx = oldIndexMap.get(k);\n if (oldIdx === undefined) {\n trKeys.push(k);\n trItems.push(item);\n trIdxs.push(i);\n newIndices[i] = -1;\n newStates[i] = 1;\n continue;\n }\n\n const oldItem = oldItems[oldIdx]!;\n newNodes[i] = oldNodes[oldIdx]!;\n\n if (\n !update &&\n oldItem !== item &&\n !(isEqual ? isEqual(oldItem, item) : shallowEqual(oldItem, item))\n ) {\n trKeys.push(k);\n trItems.push(item);\n trIdxs.push(i);\n newStates[i] = 2;\n } else {\n newStates[i] = 0;\n }\n newIndices[i] = removingKeys.has(k) ? -1 : oldIdx;\n }\n\n mapPool.release(oldIndexMap);\n return {\n newKeys,\n newKeySet,\n newItems,\n newNodes,\n newStates,\n newIndices,\n trKeys,\n trItems,\n trIdxs,\n startIndex,\n oldEndIndex,\n newEndIndex,\n };\n}\n\nfunction renderItems<T>(\n diff: PreparedDiff<T>,\n options: ListOptions<T>,\n isInitial: boolean\n): string[] | null {\n const { trKeys, trItems, trIdxs, newNodes, newStates } = diff;\n const renderCount = trKeys.length;\n const renderResults: (string | Element | DocumentFragment | JQuery)[] = new Array(renderCount);\n const htmlParts: string[] = [];\n let stringCount = 0;\n\n for (let t = 0; t < renderCount; t++) {\n const raw = options.render(trItems[t]!, trIdxs[t]!);\n renderResults[t] = raw;\n if (typeof raw === 'string') {\n htmlParts.push(raw);\n stringCount++;\n }\n }\n\n let sanitized: string[] | null = null;\n if (htmlParts.length > 0) {\n if (htmlParts.length === 1) sanitized = [sanitizeHtml(htmlParts[0]!)];\n else {\n const sep = `<template data-atom-sep=\"${(listBatchIdCounter++).toString(36)}\"></template>`;\n sanitized = sanitizeHtml(htmlParts.join(sep)).split(sep);\n }\n }\n\n if (\n isInitial &&\n sanitized &&\n stringCount === renderCount &&\n !options.bind &&\n !options.onAdd &&\n !options.onRemove &&\n !options.events\n ) {\n return sanitized;\n }\n\n let fragIdx = 0;\n for (let t = 0; t < renderCount; t++) {\n const raw = renderResults[t]!;\n const $el = (typeof raw === 'string'\n ? $(sanitized![fragIdx++]!)\n : $(raw as Element | DocumentFragment | JQuery)) as unknown as JQuery;\n const targetIdx = trIdxs[t]!,\n keyStr = String(trKeys[t]!);\n\n for (let j = 0, elLen = $el.length; j < elLen; j++) {\n const node = $el[j];\n if (node instanceof Element) {\n node.setAttribute('data-atom-key', keyStr);\n }\n }\n\n if (newStates[targetIdx] === 2 && newNodes[targetIdx]) {\n const node = newNodes[targetIdx]!;\n if (node instanceof Element) {\n registry.cleanupTree(node);\n } else {\n for (let j = 0, nLen = node.length; j < nLen; j++) {\n const el = node[j];\n if (el instanceof Element) registry.cleanupTree(el);\n }\n }\n wrap(node).replaceWith($el);\n }\n newNodes[targetIdx] = $el.length === 1 ? ($el[0] as Element) : $el;\n }\n return null;\n}\n\nfunction cleanupRemoved<T>(ctx: ListContext<T>, diff: PreparedDiff<T>): void {\n const { startIndex, oldEndIndex, newKeySet } = diff;\n for (let i = startIndex; i <= oldEndIndex; i++) {\n const k = ctx.oldKeys[i]!;\n if (!newKeySet.has(k) && ctx.oldNodes[i]) ctx.removeItem(k, wrap(ctx.oldNodes[i]!));\n }\n}\n\nfunction placeItems<T>(\n ctx: ListContext<T>,\n diff: PreparedDiff<T>,\n rawContainer: Element,\n callbacks: PlaceCallbacks<T>,\n innerHtmlFragments: string[] | null\n): void {\n const { newKeys, newItems, newNodes, newStates, newIndices } = diff;\n const itemCount = newKeys.length;\n\n if (innerHtmlFragments !== null) {\n rawContainer.innerHTML = innerHtmlFragments.join('');\n let el = rawContainer.firstElementChild;\n for (let i = 0; i < itemCount; i++) {\n if (!el) break;\n el.setAttribute('data-atom-key', String(newKeys[i]));\n newNodes[i] = el;\n newStates[i] = 0;\n ctx.removingKeys.delete(newKeys[i]!);\n debug.domUpdated(LOG_PREFIXES.LIST, $(el) as unknown as JQuery, 'list.add', newItems[i]);\n el = el.nextElementSibling;\n }\n return;\n }\n\n if (ctx.oldKeys.length === 0) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < itemCount; i++) {\n const node = newNodes[i]!;\n if (node instanceof Element) frag.appendChild(node);\n else for (let j = 0; j < node.length; j++) frag.appendChild(node[j]!);\n }\n rawContainer.appendChild(frag);\n } else {\n let nextNode: Node | null = null,\n min = 2147483647;\n for (let i = itemCount - 1; i >= 0; i--) {\n const idx = newIndices[i]!;\n if (idx !== -1 && idx < min) {\n min = idx;\n } else {\n insertOrAppend(newNodes[i]!, nextNode, rawContainer);\n }\n const node = newNodes[i]!;\n nextNode = node instanceof Element ? node : (node[0] ?? null);\n }\n }\n\n for (let i = 0; i < itemCount; i++) {\n const state = newStates[i]!;\n if (state !== 3) {\n const $el = wrap(newNodes[i]!),\n item = newItems[i]!;\n if (state === 0) callbacks.update?.($el, item, i);\n else callbacks.bind?.($el, item, i);\n if (state === 1) {\n callbacks.onAdd?.($el);\n ctx.removingKeys.delete(newKeys[i]!);\n debug.domUpdated(LOG_PREFIXES.LIST, $el, 'list.add', item);\n }\n }\n }\n}\n\n// ============================================================================\n// atomList\n// ============================================================================\n\n$.fn.atomList = function <T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): JQuery {\n const getKey: ListKeyFn<T> =\n typeof options.key === 'function'\n ? options.key\n : (item: T) => item[options.key as keyof T] as unknown as ListKey;\n const callbacks: PlaceCallbacks<T> = {\n bind: options.bind,\n update: options.update,\n onAdd: options.onAdd,\n onRemove: options.onRemove,\n events: options.events,\n };\n\n for (let cIdx = 0, cLen = this.length; cIdx < cLen; cIdx++) {\n const raw = this[cIdx]!,\n $c = $(raw);\n $c.off('.atomList');\n const old = listInstances.get(raw);\n if (old) {\n old.fx.dispose();\n old.ctx.dispose();\n }\n\n const ctx = new ListContext<T>($c, getSelector(raw), options.onRemove);\n const fx = effect(() => {\n const items = source.value,\n len = items.length;\n untracked(() => {\n handleEmpty(ctx, len, $c, options.empty);\n if (len === 0) return;\n debug.log(LOG_PREFIXES.LIST, `${ctx.containerSelector} updating with ${len} items`);\n\n const diff = buildIndices(ctx, items, len, getKey, options.update, options.isEqual);\n const frag = renderItems(diff, options, ctx.oldKeys.length === 0);\n cleanupRemoved(ctx, diff);\n placeItems(ctx, diff, raw, callbacks, frag);\n\n if (options.events) {\n for (let i = diff.startIndex; i <= diff.oldEndIndex; i++) {\n if (!diff.newKeySet.has(ctx.oldKeys[i]!)) ctx.keyToIndex.delete(ctx.oldKeys[i]!);\n }\n }\n arrayPool.release(ctx.oldKeys);\n arrayPool.release(ctx.oldItems);\n arrayPool.release(ctx.oldNodes);\n ctx.oldKeys = diff.newKeys;\n ctx.oldItems = diff.newItems;\n ctx.oldNodes = diff.newNodes;\n setPool.release(diff.newKeySet);\n arrayPool.release(diff.trKeys);\n arrayPool.release(diff.trItems);\n arrayPool.release(diff.trIdxs);\n });\n });\n\n ctx.fx = fx;\n if (options.events) {\n for (const ek in options.events) {\n if (!hasOwn.call(options.events, ek)) continue;\n const s = ek.indexOf(' '),\n type = s === -1 ? ek : ek.slice(0, s),\n sel = s === -1 ? '> *' : ek.slice(s + 1).trim();\n const handler = options.events[ek]!;\n\n $c.on(`${type}.atomList`, sel, function (this: Element, e: JQuery.TriggeredEvent) {\n const itemEl = (e.target as Element).closest?.('[data-atom-key]') as HTMLElement | null;\n const rk = itemEl?.getAttribute('data-atom-key');\n if (rk === null || rk === undefined) return;\n\n let k: ListKey = rk;\n if (!ctx.keyToIndex.has(rk)) {\n const nk = Number(rk);\n if (!Number.isNaN(nk) && ctx.keyToIndex.has(nk)) k = nk;\n }\n const idx = ctx.keyToIndex.get(k);\n if (idx !== undefined) handler.call(itemEl as HTMLElement, ctx.oldItems[idx]!, idx, e);\n });\n }\n }\n registry.trackEffect(raw, fx);\n listInstances.set(raw, { fx, ctx });\n registry.trackCleanup(raw, () => {\n ctx.dispose();\n listInstances.delete(raw);\n });\n }\n return this;\n};\n","import { untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { bindUnbind } from '@/bindings/unified';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { ComponentFn } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// ============================================================================\n// Internal helpers\n// ============================================================================\n\nconst EMPTY_PROPS = Object.freeze({});\n\n// ============================================================================\n// jQuery plugin methods\n// ============================================================================\n\n/**\n * Mounts a functional component on each selected element.\n *\n * @param component - Function receiving `($el, props)` and returning an\n * optional cleanup callback. See {@link ComponentFn}.\n * @param props - Props passed to the component. When omitted, `P` must be\n * compatible with an empty object (i.e. all fields optional or\n * `P = object`). Passing no props to a component with required fields is\n * a type error that TypeScript will catch at the call site, but only when\n * `props` is explicitly typed — the `{} as P` fallback is not type-safe\n * for components with required fields, which is why the cast is explicit\n * rather than implicit.\n */\n$.fn.atomMount = function <P>(this: JQuery, component: ComponentFn<P>, props?: P): JQuery {\n const p = (props ?? EMPTY_PROPS) as P;\n const compName = component.name || 'Component';\n\n for (let i = 0, len = this.length; i < len; i++) {\n const rootEl = this[i];\n if (!rootEl) continue;\n\n registry.cleanupTree(rootEl);\n try {\n // Untracked execution prevents component initialization from leaking into parent effects\n const teardown = untracked(() => component($(rootEl), p));\n if (typeof teardown === 'function') {\n registry.setComponentCleanup(rootEl, teardown);\n }\n } catch (err) {\n debug.error(LOG_PREFIXES.MOUNT, ERROR_MESSAGES.MOUNT.ERROR(compName), err);\n }\n }\n return this;\n};\n\n/**\n * Unmounts the component and disposes all reactive bindings on each selected\n * element and its descendants.\n */\n$.fn.atomUnmount = function (this: JQuery): JQuery {\n for (let i = 0, len = this.length; i < len; i++) {\n const el = this[i];\n if (el) bindUnbind(el);\n }\n return this;\n};\n","import type { ReadonlyAtom } from '@but212/atom-effect';\nimport { computed, atom as createAtom, effect, untracked } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES, ROUTE_DEFAULTS } from '@/constants';\nimport { registry } from '@/core/registry';\nimport type { RouteConfig, Router, WritableAtom } from '@/types';\nimport { debug } from '@/utils/debug';\n\n// --- Helper: Safe History API Wrappers ---\nfunction safePushState(data: unknown, url: string | URL | null): void {\n try {\n history.pushState(data, '', url);\n } catch (e) {\n debug.warn(\n LOG_PREFIXES.ROUTE,\n 'PushState failed (likely file:// protocol or security restriction). UI will update, but URL will not.',\n e\n );\n }\n}\n\nclass RouterImpl implements Router {\n public currentRoute: ReadonlyAtom<string>;\n public queryParams: ReadonlyAtom<Record<string, string>>;\n\n private config: RouteConfig &\n Required<Pick<RouteConfig, 'mode' | 'basePath' | 'autoBindLinks' | 'activeClass'>>;\n private readonly isHistoryMode: boolean;\n private readonly basePath: string;\n private readonly activeClass: string;\n\n private isDestroyed = false;\n private previousRoute = '';\n private previousUrl: string;\n private cleanups: Array<() => void> = [];\n private $target: JQuery;\n private currentRouteAtom: WritableAtom<string>;\n private queryParamsAtom: WritableAtom<Record<string, string>>;\n private templateCache = new Map<string, HTMLTemplateElement>();\n private routeCleanups: Array<() => void> = [];\n private lastRawQuery = '';\n private cachedParams: Record<string, string> = {};\n\n constructor(config: RouteConfig) {\n this.config = {\n mode: ROUTE_DEFAULTS.mode,\n basePath: ROUTE_DEFAULTS.basePath,\n autoBindLinks: ROUTE_DEFAULTS.autoBindLinks,\n activeClass: ROUTE_DEFAULTS.activeClass,\n ...config,\n } as typeof this.config;\n\n this.isHistoryMode = this.config.mode === 'history';\n this.basePath = this.config.basePath.replace(/\\/$/, '');\n this.activeClass = this.config.activeClass;\n\n this.$target = $(this.config.target);\n this.previousUrl = this.isHistoryMode ? location.pathname + location.search : location.hash;\n this.currentRouteAtom = createAtom(this.getRouteName());\n this.currentRoute = this.currentRouteAtom;\n this.queryParamsAtom = createAtom(this.getQueryParams());\n this.queryParams = computed(() => this.queryParamsAtom.value);\n this.init();\n }\n\n private init() {\n const event = this.isHistoryMode ? 'popstate' : 'hashchange';\n const handler = this.handleUrlChange.bind(this);\n window.addEventListener(event, handler);\n this.cleanups.push(() => window.removeEventListener(event, handler));\n\n const renderEffect = effect(() => {\n const routeName = this.currentRouteAtom.value;\n untracked(() => {\n for (const fn of this.routeCleanups)\n try {\n fn();\n } catch {}\n this.routeCleanups.length = 0;\n });\n this.renderRoute(routeName);\n });\n this.cleanups.push(() => renderEffect.dispose());\n this.setupAutoBindLinks();\n if (this.$target[0]) registry.trackCleanup(this.$target[0], () => this.destroy());\n }\n\n private getRouteName(): string {\n const { default: defaultRoute } = this.config;\n if (this.isHistoryMode) {\n const base = this.basePath;\n let path = location.pathname;\n if (base && path.startsWith(base)) {\n path = path.substring(base.length);\n }\n return path.replace(/^\\//, '') || defaultRoute!;\n }\n return location.hash.split('?')[0]!.substring(1) || defaultRoute!;\n }\n\n private getQueryParams(): Record<string, string> {\n const hash = location.hash;\n const queryIndex = hash.indexOf('?');\n const raw = this.isHistoryMode\n ? location.search.substring(1)\n : queryIndex !== -1\n ? hash.substring(queryIndex + 1)\n : '';\n\n if (raw === this.lastRawQuery) return this.cachedParams;\n this.lastRawQuery = raw;\n\n const res: Record<string, string> = {};\n let newLen = 0;\n if (raw) {\n new URLSearchParams(raw).forEach((v, k) => {\n res[k] = v;\n newLen++;\n });\n }\n\n let oldLen = 0;\n for (const _ in this.cachedParams) oldLen++;\n\n let changed = newLen !== oldLen;\n if (!changed) {\n for (const k in res) {\n if (res[k] !== this.cachedParams[k]) {\n changed = true;\n break;\n }\n }\n }\n\n if (changed) {\n if (raw.indexOf('%') !== -1)\n try {\n decodeURIComponent(raw);\n } catch {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.MALFORMED_URI(raw));\n }\n this.cachedParams = res;\n }\n return this.cachedParams;\n }\n\n private setUrl(name: string): void {\n const url = this.isHistoryMode ? `${this.basePath}/${name}` : `#${name}`;\n if (this.isHistoryMode) {\n safePushState(null, url);\n } else {\n location.hash = url;\n }\n this.previousUrl = this.isHistoryMode ? url : location.hash;\n }\n\n private restoreUrl(): void {\n if (this.isHistoryMode) {\n safePushState(null, this.previousUrl);\n } else {\n location.hash = this.previousUrl;\n }\n }\n\n private renderRoute(name: string): void {\n if (this.isDestroyed || !this.$target[0]) return;\n const { routes, notFound, beforeTransition, afterTransition } = this.config;\n const cfg = routes[name] ?? (notFound ? routes[notFound] : undefined);\n if (!cfg) {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.NOT_FOUND(name));\n return;\n }\n\n const params = this.getQueryParams(),\n from = this.previousRoute;\n if (beforeTransition) untracked(() => beforeTransition(from, name));\n\n this.$target.empty();\n let routeParams = params;\n if (cfg.onEnter) {\n const res = untracked(() => cfg.onEnter!(params, this));\n if (res) routeParams = { ...params, ...res };\n }\n\n const onUnmount = (fn: () => void) => this.routeCleanups.push(fn);\n if (cfg.render) cfg.render(this.$target[0], name, routeParams, onUnmount, this);\n else if (cfg.template) {\n let tmpl = this.templateCache.get(cfg.template);\n if (!tmpl) {\n const el = document.querySelector(cfg.template);\n if (el instanceof HTMLTemplateElement) {\n tmpl = el;\n this.templateCache.set(cfg.template, tmpl);\n } else {\n debug.warn(LOG_PREFIXES.ROUTE, ERROR_MESSAGES.ROUTE.TEMPLATE_NOT_FOUND(cfg.template));\n return;\n }\n }\n this.$target.append(tmpl.content.cloneNode(true) as DocumentFragment);\n if (cfg.onMount) cfg.onMount(this.$target.children(), onUnmount, this);\n }\n\n if (afterTransition) untracked(() => afterTransition(from, name));\n this.previousRoute = name;\n }\n\n private handleUrlChange(): void {\n if (this.isDestroyed) return;\n\n const currentUrl = this.isHistoryMode ? location.pathname + location.search : location.hash;\n if (currentUrl === this.previousUrl) return;\n\n const nextRoute = this.getRouteName();\n const oldRoute = this.currentRouteAtom.peek();\n\n if (oldRoute !== nextRoute) {\n if (untracked(() => this.config.routes[oldRoute]?.onLeave?.(this)) === false) {\n this.restoreUrl();\n return;\n }\n this.currentRouteAtom.value = nextRoute;\n }\n this.queryParamsAtom.value = this.getQueryParams();\n this.previousUrl = currentUrl;\n }\n\n private setupAutoBindLinks(): void {\n if (!this.config.autoBindLinks) return;\n const onClick = (e: JQuery.TriggeredEvent) => {\n e.preventDefault();\n const r = (e.currentTarget as HTMLElement).dataset.route;\n if (r != null) this.navigate(r);\n };\n $(document).on('click', '[data-route]', onClick);\n this.cleanups.push(() => $(document).off('click', '[data-route]', onClick));\n\n let previousActiveNodes: HTMLElement[] = [];\n const activeLinkEffect = effect(() => {\n const routeName = this.currentRouteAtom.value;\n const activeClass = this.activeClass;\n untracked(() => {\n const len = previousActiveNodes.length;\n for (let i = 0; i < len; i++) {\n const el = previousActiveNodes[i]!;\n el.classList.remove(activeClass);\n el.removeAttribute('aria-current');\n }\n\n try {\n const selector = `[data-route=\"${routeName.replace(/\"/g, '\\\\\"')}\"]`;\n const nodes = Array.from(document.querySelectorAll<HTMLElement>(selector));\n const nLen = nodes.length;\n for (let i = 0; i < nLen; i++) {\n const el = nodes[i]!;\n el.classList.add(activeClass);\n el.setAttribute('aria-current', 'page');\n }\n previousActiveNodes = nodes;\n } catch {\n previousActiveNodes = [];\n }\n });\n });\n this.cleanups.push(() => activeLinkEffect.dispose());\n }\n\n public navigate(name: string): void {\n if (this.isDestroyed) return;\n const old = this.currentRouteAtom.peek();\n if (this.config.routes[old]?.onLeave?.(this) === false) return;\n\n const resolved = name || this.config.default;\n if (!resolved) return;\n\n this.setUrl(resolved);\n this.queryParamsAtom.value = {};\n this.currentRouteAtom.value = resolved;\n }\n\n public destroy(): void {\n if (this.isDestroyed) return;\n this.isDestroyed = true;\n for (const fn of this.cleanups)\n try {\n fn();\n } catch {}\n this.templateCache.clear();\n }\n}\n\n/**\n * Creates an SPA router with reactive state management.\n */\nexport function route(config: RouteConfig): Router {\n return new RouterImpl(config);\n}\n\n$.extend({\n route,\n});\n","import { computed } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { ComputedAtom, FetchError, FetchOptions } from '@/types';\n\n// ============================================================================\n// atomFetch\n// ============================================================================\n\n/**\n * Context for a reactive fetch operation.\n * Manages the lifecycle of a single $.ajax request, including automatic\n * cancellation (via AbortController) and reactive URL/option resolution.\n */\nclass FetchContext<T> {\n private abortController: AbortController | null = null;\n private readonly staticOptions: JQuery.AjaxSettings;\n private readonly ajaxOptionsFn: (() => JQuery.AjaxSettings) | undefined;\n private readonly getUrl: () => string;\n\n /**\n * Optimization: If true, the URL is a static string and doesn't need to be\n * re-evaluated within a reactive scope.\n */\n private readonly isStaticUrl: boolean;\n private readonly staticUrl: string | undefined;\n\n private readonly transformFn: ((val: unknown) => T) | undefined;\n private readonly onErrorFn: ((err: unknown) => void) | undefined;\n\n constructor(urlOrFn: string | (() => string), options: FetchOptions<T>) {\n const isStatic = typeof urlOrFn === 'string';\n this.isStaticUrl = isStatic;\n if (isStatic) {\n this.staticUrl = urlOrFn as string;\n this.getUrl = () => this.staticUrl!;\n } else {\n this.getUrl = urlOrFn as () => string;\n }\n\n this.ajaxOptionsFn =\n typeof options.ajaxOptions === 'function' ? options.ajaxOptions : undefined;\n\n const baseAjax = typeof options.ajaxOptions === 'object' ? options.ajaxOptions : {};\n this.staticOptions = {\n ...baseAjax,\n method: options.method,\n headers: { ...(baseAjax as JQuery.AjaxSettings)?.headers, ...options.headers },\n };\n this.transformFn = options.transform;\n this.onErrorFn = options.onError;\n }\n\n public abort(): void {\n this.abortController?.abort();\n }\n\n private handleError(err: unknown): never {\n let final: Error;\n if (err && typeof (err as JQuery.jqXHR).readyState !== 'undefined') {\n const x = err as JQuery.jqXHR;\n final = new Error(`Network Error: ${x.statusText || 'Unknown'} (${x.status})`);\n (final as FetchError).jqXHR = x;\n } else {\n final = err instanceof Error ? err : new Error(String(err ?? 'Unknown error'));\n }\n\n if (this.onErrorFn) {\n try {\n this.onErrorFn(final);\n } catch {\n // Suppress errors in error callback\n }\n }\n throw final;\n }\n\n public execute = async (): Promise<T> => {\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n\n const dynamicOptions = this.ajaxOptionsFn?.() ?? {};\n // Use shallow merge for high-performance request setup\n const req: JQuery.AjaxSettings = {\n ...this.staticOptions,\n ...dynamicOptions,\n headers: {\n ...this.staticOptions.headers,\n ...dynamicOptions.headers,\n },\n url: this.isStaticUrl ? this.staticUrl : this.getUrl(),\n success: undefined,\n error: undefined,\n complete: undefined,\n };\n const xhr = $.ajax(req);\n\n signal.onabort = () => xhr.abort();\n if (signal.aborted) xhr.abort();\n\n try {\n const raw = await xhr;\n return this.transformFn ? this.transformFn(raw) : (raw as T);\n } catch (err) {\n if (signal.aborted) {\n const e = new Error('AbortError');\n e.name = 'AbortError';\n throw e;\n }\n return this.handleError(err);\n } finally {\n signal.onabort = null;\n if (this.abortController?.signal === signal) this.abortController = null;\n }\n };\n}\n\n/**\n * Creates a declarative reactive AJAX primitive.\n * Wraps core's async `computed` with jQuery's `$.ajax`.\n *\n * Features:\n * - Auto-Cancellation: Aborts pending requests when dependencies change.\n * - Reactive URL: Re-fetches automatically if `urlOrFn` depends on atoms.\n * - Error Isolation: Network errors are captured in .hasError/.lastError.\n */\n$.extend({\n atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T> {\n const ctx = new FetchContext<T>(urlOrFn, options);\n const atomVal = computed(ctx.execute, {\n defaultValue: options.defaultValue,\n lazy: options.eager === false,\n });\n return Object.assign(atomVal, {\n abort: () => ctx.abort(),\n }) as ComputedAtom<T> & { abort: () => void };\n },\n});\n","/**\n * atom-effect-jquery\n *\n * Brings reactivity to jQuery.\n *\n * Features:\n * - Full CJK IME Support (Input Method Editor).\n * - Auto-cleanup via MutationObserver (No memory leaks).\n * - Debug Mode: Console logging + Visual Highlighting.\n *\n * Type augmentation note:\n * This package extends both `JQuery` and `JQueryStatic` via global interface\n * merging in `types.ts`. Consumers using the `export default $` path will\n * receive the augmented type automatically because the module's side-effect\n * imports apply the augmentation at import time.\n */\n\nimport $ from 'jquery';\nimport '@/core/namespace'; // $.atom, $.computed, etc.\nimport '@/bindings/chainable'; // $.fn.atomText, etc.\nimport '@/bindings/list'; // $.fn.atomList\nimport '@/bindings/mount'; // $.fn.atomMount\nimport '@/features/route'; // $.route\nimport '@/features/fetch'; // $.atomFetch\n\nimport { enablejQueryOverrides } from '@/core/jquery-patch';\nimport { disableAutoCleanup, enableAutoCleanup, registry } from '@/core/registry';\n\n// Global initialization on DOM ready.\n$(() => {\n enablejQueryOverrides();\n enableAutoCleanup(document.body!);\n});\n\nexport { disablejQueryOverrides, enablejQueryOverrides } from '@/core/jquery-patch';\nexport { nextTick } from '@/core/namespace';\nexport type {\n BindingOptions,\n ComponentFn,\n ComputedAtom,\n CssBindings,\n CssValue,\n EffectCleanup,\n EffectResult,\n EqualFn,\n FetchOptions,\n ListOptions,\n PrimitiveValue,\n ReactiveValue,\n ReadonlyAtom,\n RenderRoute,\n RouteConfig,\n RouteDefinition,\n RouteLifecycle,\n Router,\n TemplateRoute,\n ValOptions,\n WritableAtom,\n} from '@/types';\nexport { isReactive } from '@/utils';\nexport { disableAutoCleanup, enableAutoCleanup, registry };\n\nexport default $;\n"],"mappings":"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"}
|