@but212/atom-effect-jquery 0.21.2 → 0.21.3
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 +1 -1
- package/dist/atom-effect-jquery.min.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.mjs +569 -546
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../core/dist/index.mjs","../src/utils.ts","../src/debug.ts","../src/namespace.ts","../src/constants.ts","../src/registry.ts","../src/effect-factory.ts","../src/types.ts","../src/input-binding.ts","../src/unified.ts","../src/chainable.ts","../src/list.ts","../src/mount.ts","../src/route.ts","../src/fetch.ts","../src/jquery-patch.ts","../src/index.ts"],"sourcesContent":["const A = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, l = {\n DISPOSED: 1,\n EXECUTING: 8\n}, K = {\n DISPOSED: 1,\n /** Marker bit: identifies this node as a computed. */\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}, a = {\n DISPOSED: 1,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, Ct = {\n MAX_SIZE: 1e3,\n WARMUP_SIZE: 100,\n ENABLE_STATS: !1\n}, p = {\n // Infinite loop protection\n MAX_EXECUTIONS_PER_SECOND: 1e3,\n MAX_EXECUTIONS_PER_EFFECT: 100,\n // Batch processing limits to prevent blocking the main thread for too long\n MAX_EXECUTIONS_PER_FLUSH: 1e4,\n MAX_FLUSH_ITERATIONS: 1e3,\n MIN_FLUSH_ITERATIONS: 10,\n // Memory management\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, ot = {\n WARN_INFINITE_LOOP: !0,\n EFFECT_FREQUENCY_WINDOW: 1e3\n}, X = {\n MAX_ASYNC_RETRIES: 3,\n MAX_PROMISE_ID: Number.MAX_SAFE_INTEGER - 1\n}, B = 1073741823, J = typeof process < \"u\" && process.env && !1 || !1, ht = Object.freeze([]);\nclass C extends Error {\n constructor(t, e = null, s = !0) {\n super(t), this.cause = e, this.recoverable = s, this.name = \"AtomError\";\n }\n}\nclass E extends C {\n constructor(t, e = null) {\n super(t, e, !0), this.name = \"ComputedError\";\n }\n}\nclass g extends C {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"EffectError\";\n }\n}\nclass m extends C {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"SchedulerError\";\n }\n}\nconst ct = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), ut = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), U = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), L = {\n // Dev mode flag\n enabled: J,\n warnInfiniteLoop: ot.WARN_INFINITE_LOOP,\n warn(i, t) {\n },\n checkCircular(i, t) {\n if (i === t)\n throw new E(\"Direct circular dependency detected\");\n },\n attachDebugInfo(i, t, e) {\n },\n getDebugName: (i) => i?.[ct],\n getDebugType: (i) => i?.[ut]\n};\nlet lt = 1;\nconst _t = () => lt++;\nfunction Z(i, t, e) {\n if (typeof t == \"function\") {\n const n = t;\n for (let r = 0, o = e.length; r < o; r++) {\n const h = e[r];\n if (h && h.fn === n) return;\n }\n e.push(new M(n, void 0));\n return;\n }\n if (\"addDependency\" in t) {\n t.addDependency(i);\n return;\n }\n const s = t;\n for (let n = 0, r = e.length; n < r; n++) {\n const o = e[n];\n if (o && o.sub === s) return;\n }\n e.push(new M(void 0, s));\n}\nfunction G(i, t, e) {\n const s = /* @__PURE__ */ new Map();\n for (let n = 0, r = t.length; n < r; n++) {\n const o = t[n];\n o?.unsub && s.set(o.node, o.unsub);\n }\n for (let n = 0, r = i.length; n < r; n++) {\n const o = i[n];\n if (!o) continue;\n const h = o.node, I = s.get(h);\n I !== void 0 ? (o.unsub = I, s.delete(h)) : (L.checkCircular(h, e), o.unsub = h.subscribe(e));\n }\n for (const n of s.values())\n n();\n}\nclass v {\n constructor(t, e, s = void 0) {\n this.node = t, this.version = e, this.unsub = s;\n }\n}\nclass M {\n constructor(t, e) {\n this.fn = t, this.sub = e;\n }\n}\nconst c = {\n // Computed Errors\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 Errors\n ATOM_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscriber must be a function or Subscriber object\",\n ATOM_INDIVIDUAL_SUBSCRIBER_FAILED: \"Subscriber execution failed\",\n // Effect Errors\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 Errors\n SCHEDULER_FLUSH_OVERFLOW: (i, t) => `Maximum flush iterations (${i}) exceeded. ${t} jobs dropped. Possible infinite loop.`,\n // System / Debug\n CALLBACK_ERROR_IN_ERROR_HANDLER: \"Exception encountered in onError handler\",\n // Effect frequency\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};\nfunction D(i, t, e) {\n if (i instanceof C)\n return i;\n const s = i instanceof Error, n = s ? i.message : String(i), r = s ? i : void 0, h = `${s ? i.constructor.name : \"Unexpected error\"} (${e}): ${n}`;\n return new t(h, r);\n}\nclass tt {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = -1, this.id = _t() & B;\n }\n}\nclass et extends tt {\n /**\n * Adds subscriber.\n */\n subscribe(t) {\n const e = typeof t == \"function\";\n if (!e && (!t || typeof t.execute != \"function\"))\n throw D(\n new TypeError(\"Invalid subscriber\"),\n C,\n c.ATOM_SUBSCRIBER_MUST_BE_FUNCTION\n );\n const s = this._subscribers;\n for (let r = 0, o = s.length; r < o; r++) {\n const h = s[r];\n if (h && (e ? h.fn === t : h.sub === t))\n return () => {\n };\n }\n const n = new M(\n e ? t : void 0,\n e ? void 0 : t\n );\n return s.push(n), () => this._unsubscribe(n);\n }\n _unsubscribe(t) {\n const e = this._subscribers, s = e.indexOf(t);\n if (s === -1) return;\n const n = e.pop();\n s < e.length && n && (e[s] = n);\n }\n subscriberCount() {\n return this._subscribers.length;\n }\n _notifySubscribers(t, e) {\n if (this._subscribers.length === 0) return;\n const s = this._subscribers.slice(0), n = s.length;\n for (let r = 0; r < n; r++) {\n const o = s[r];\n if (o)\n try {\n o.fn ? o.fn(t, e) : o.sub && o.sub.execute();\n } catch (h) {\n this._handleNotifyError(h);\n }\n }\n }\n _handleNotifyError(t) {\n console.error(D(t, C, c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n}\nlet x = 0;\nconst z = () => (x = x + 1 & B || 1, x), w = (i) => i + 1 & B;\nlet H = 0, k = !1, st = 0;\nconst at = () => st;\nfunction Q() {\n return k ? !1 : (k = !0, st = z(), H = 0, !0);\n}\nconst Y = () => {\n k = !1;\n}, ft = () => k ? ++H : 0;\nclass Et {\n constructor() {\n this._queueBuffer = [[], []], this._bufferIndex = 0, this._size = 0, this._epoch = 0, this._isProcessing = !1, this._isBatching = !1, this._isFlushingSync = !1, this._batchDepth = 0, this._batchQueue = [], this._batchQueueSize = 0, this._maxFlushIterations = p.MAX_FLUSH_ITERATIONS, this.onOverflow = null, this._boundRunLoop = this._runLoop.bind(this);\n }\n get phase() {\n return this._isProcessing || this._isFlushingSync ? 2 : this._isBatching ? 1 : 0;\n }\n get queueSize() {\n return this._size;\n }\n get isBatching() {\n return this._isBatching;\n }\n /**\n * Schedules job.\n */\n schedule(t) {\n if (t._nextEpoch !== this._epoch) {\n if (t._nextEpoch = this._epoch, this._isBatching || this._isFlushingSync) {\n this._batchQueue[this._batchQueueSize++] = t;\n return;\n }\n this._queueBuffer[this._bufferIndex][this._size++] = t, this._isProcessing || this._flush();\n }\n }\n /**\n * Triggers flush.\n */\n _flush() {\n this._isProcessing || this._size === 0 || (this._isProcessing = !0, queueMicrotask(this._boundRunLoop));\n }\n /**\n * Scheduler loop.\n */\n _runLoop() {\n try {\n if (this._size === 0) return;\n const t = Q();\n this._drainQueue(), t && Y();\n } finally {\n this._isProcessing = !1, this._size > 0 && !this._isBatching && this._flush();\n }\n }\n _flushSync() {\n this._isFlushingSync = !0;\n const t = Q();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, t && Y();\n }\n }\n _mergeBatchQueue() {\n if (this._batchQueueSize === 0) return;\n const t = ++this._epoch, e = this._batchQueue, s = this._queueBuffer[this._bufferIndex];\n let n = this._size;\n for (let r = 0; r < this._batchQueueSize; r++) {\n const o = e[r];\n o._nextEpoch !== t && (o._nextEpoch = t, s[n++] = o);\n }\n this._size = n, this._batchQueueSize = 0, e.length > p.BATCH_QUEUE_SHRINK_THRESHOLD && (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, e = this._queueBuffer[t], s = this._size;\n this._bufferIndex = t ^ 1, this._size = 0, this._epoch++;\n for (let n = 0; n < s; n++)\n try {\n e[n]();\n } catch (r) {\n console.error(new m(\"Error occurred during scheduler execution\", r));\n }\n e.length = 0;\n }\n _handleFlushOverflow() {\n const t = this._size + this._batchQueueSize;\n if (console.error(\n new m(\n c.SCHEDULER_FLUSH_OVERFLOW(this._maxFlushIterations, t)\n )\n ), this._size = 0, this._queueBuffer[this._bufferIndex].length = 0, this._batchQueueSize = 0, this.onOverflow)\n try {\n this.onOverflow(t);\n } catch {\n }\n }\n startBatch() {\n this._batchDepth++, this._isBatching = !0;\n }\n endBatch() {\n this._batchDepth !== 0 && --this._batchDepth === 0 && (this._flushSync(), this._isBatching = !1);\n }\n setMaxFlushIterations(t) {\n if (t < p.MIN_FLUSH_ITERATIONS)\n throw new m(\n `Max flush iterations must be at least ${p.MIN_FLUSH_ITERATIONS}`\n );\n this._maxFlushIterations = t;\n }\n}\nconst b = new Et(), V = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), it = /* @__PURE__ */ Symbol.for(\"atom-effect/computed\"), nt = /* @__PURE__ */ Symbol.for(\"atom-effect/effect\"), _ = {\n /** Active listener. */\n current: null,\n /**\n * Executes in context.\n *\n * @param listener - The subscriber.\n * @param fn - The logic to execute.\n * @returns The result of `fn`.\n */\n run(i, t) {\n const e = this.current;\n this.current = i;\n try {\n return t();\n } finally {\n this.current = e;\n }\n }\n};\nfunction Tt(i) {\n const t = _.current;\n if (t === null) return i();\n _.current = null;\n try {\n return i();\n } finally {\n _.current = t;\n }\n}\nvar j;\nclass dt extends et {\n constructor(t, e) {\n super(), this._pendingOldValue = void 0, this._notifyTask = () => this._flushNotifications(), this._subscribers = [], this[j] = !0, this._value = t, e && (this.flags |= a.SYNC), L.attachDebugInfo(this, \"atom\", this.id);\n }\n get value() {\n const t = _.current;\n return t && Z(this, t, this._subscribers), this._value;\n }\n set value(t) {\n const e = this._value;\n if (Object.is(e, t)) return;\n this._value = t, this.version = w(this.version);\n const s = this.flags;\n if (!(this._subscribers.length === 0 || s & a.NOTIFICATION_SCHEDULED)) {\n if (this._pendingOldValue = e, this.flags = s | a.NOTIFICATION_SCHEDULED, s & a.SYNC && !b.isBatching) {\n this._flushNotifications();\n return;\n }\n b.schedule(this._notifyTask);\n }\n }\n /**\n * Triggers subscribers.\n */\n _flushNotifications() {\n const t = this.flags;\n if (!(t & a.NOTIFICATION_SCHEDULED) || t & a.DISPOSED)\n return;\n const e = this._pendingOldValue;\n this._pendingOldValue = void 0, this.flags &= -17, this._notifySubscribers(this._value, e);\n }\n peek() {\n return this._value;\n }\n dispose() {\n this.flags & a.DISPOSED || (this._subscribers.length = 0, this.flags |= a.DISPOSED, this._value = void 0, this._pendingOldValue = void 0);\n }\n [(j = V, Symbol.dispose)]() {\n this.dispose();\n }\n}\nfunction Ot(i, t = {}) {\n return new dt(i, t.sync ?? !1);\n}\nclass pt {\n /**\n * @param limit - Max unique arrays to hold (default: 50). Prevents the pool itself from consuming too much memory.\n * @param capacity - Max length of an array to accept (default: 256).\n * @param enableStats - Force-enable stats even in production (default: false).\n */\n constructor(t = 50, e = 256, s = !1) {\n this.limit = t, this.capacity = e, this.pool = [], this.stats = null, this.stats = s ? {\n acquired: 0,\n released: 0,\n rejected: { frozen: 0, tooLarge: 0, poolFull: 0 }\n } : null;\n }\n /**\n * Acquires array.\n */\n acquire() {\n return this.stats && this.stats.acquired++, this.pool.pop() ?? [];\n }\n /**\n * Releases array.\n *\n * @param arr - Array to release.\n * @param emptyConst - Optional empty constant.\n */\n release(t, e) {\n if (!(e && t === e)) {\n if (t.length > this.capacity) {\n this.stats && this.stats.rejected.tooLarge++;\n return;\n }\n if (this.pool.length >= this.limit) {\n this.stats && this.stats.rejected.poolFull++;\n return;\n }\n if (Object.isFrozen(t)) {\n this.stats && this.stats.rejected.frozen++;\n return;\n }\n t.length = 0, this.pool.push(t), this.stats && this.stats.released++;\n }\n }\n /**\n * Pool stats.\n */\n getStats() {\n if (!this.stats) return null;\n const { acquired: t, released: e, rejected: s } = this.stats, n = t - e - (s.frozen + s.tooLarge + s.poolFull);\n return {\n acquired: t,\n released: e,\n rejected: { ...s },\n leaked: n,\n poolSize: this.pool.length\n };\n }\n /**\n * Resets pool.\n */\n reset() {\n this.pool.length = 0, this.stats && (this.stats = {\n acquired: 0,\n released: 0,\n rejected: { frozen: 0, tooLarge: 0, poolFull: 0 }\n });\n }\n}\nconst u = Object.freeze(\n []\n), f = new pt();\nfunction bt(i) {\n return i !== null && typeof i == \"object\" && V in i;\n}\nfunction At(i) {\n return i !== null && typeof i == \"object\" && it in i;\n}\nfunction Nt(i) {\n return i !== null && typeof i == \"object\" && nt in i;\n}\nfunction rt(i) {\n return i !== null && typeof i == \"object\" && typeof i.then == \"function\";\n}\nvar q, $;\nconst { IDLE: N, DIRTY: S, PENDING: R, RESOLVED: d, REJECTED: O, HAS_ERROR: y, RECOMPUTING: T, DISPOSED: P, IS_COMPUTED: It } = K;\nfunction St(i) {\n return i & d ? A.RESOLVED : i & R ? A.PENDING : i & O ? A.REJECTED : A.IDLE;\n}\nclass gt extends et {\n constructor(t, e = {}) {\n if (typeof t != \"function\") throw new E(c.COMPUTED_MUST_BE_FUNCTION);\n super(), this[$] = !0, this[q] = !0, this._error = null, this._promiseId = 0, this._subscribers = [], this._links = u, this._asyncStartAggregateVersion = 0, this._asyncRetryCount = 0, this._trackEpoch = -1, this._trackLinks = u, this._trackCount = 0, this._value = void 0, this.flags = It | S | N, this._equal = e.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in e ? e.defaultValue : U, this._onError = e.onError ?? null;\n const s = e.maxAsyncRetries;\n if (this._maxAsyncRetries = s != null && s >= 0 ? s : X.MAX_ASYNC_RETRIES, L.attachDebugInfo(this, \"computed\", this.id), e.lazy === !1)\n try {\n this._recompute();\n } catch {\n }\n }\n _track() {\n const t = _.current;\n t && Z(this, t, this._subscribers);\n }\n get value() {\n this._track();\n const t = this.flags;\n if ((t & (d | S | N)) === d)\n return this._value;\n if (t & P)\n throw new E(c.COMPUTED_DISPOSED);\n if (t & T) {\n if (this._defaultValue !== U) return this._defaultValue;\n throw new E(c.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if (t & (S | N) && (this._recompute(), this.flags & d))\n return this._value;\n const e = this._defaultValue, s = e !== U;\n if (this.flags & R) {\n if (s) return e;\n throw new E(c.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if (this.flags & O) {\n if (s) return e;\n throw this._error;\n }\n return this._value;\n }\n peek() {\n return this._value;\n }\n get state() {\n return this._track(), St(this.flags);\n }\n get hasError() {\n if (this._track(), this.flags & (O | y)) return !0;\n const t = this._links;\n for (let e = 0, s = t.length; e < s; e++) {\n const n = t[e]?.node;\n if (n && n.flags & y) return !0;\n }\n return !1;\n }\n get isValid() {\n return !this.hasError;\n }\n get errors() {\n if (this._track(), !this.hasError) return ht;\n const t = [];\n this._error && t.push(this._error);\n const e = this._links;\n for (let s = 0, n = e.length; s < n; s++) {\n const r = e[s].node;\n if (r.flags & y) {\n const h = r.errors;\n if (h.length > 0)\n for (let I = 0; I < h.length; I++) {\n const F = h[I];\n F && t.indexOf(F) === -1 && t.push(F);\n }\n }\n }\n return Object.freeze(t);\n }\n get lastError() {\n return this._track(), this._error;\n }\n get isPending() {\n return this._track(), (this.flags & R) !== 0;\n }\n get isResolved() {\n return this._track(), (this.flags & d) !== 0;\n }\n invalidate() {\n this._markDirty();\n }\n dispose() {\n if (this.flags & P) return;\n const t = this._links;\n if (t !== u) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e].unsub?.();\n f.release(t), this._links = u;\n }\n this._subscribers.length = 0, this.flags = P | S | N, this._error = null, this._value = void 0;\n }\n [($ = V, q = it, Symbol.dispose)]() {\n this.dispose();\n }\n addDependency(t) {\n if (t._lastSeenEpoch !== this._trackEpoch) {\n if (t._lastSeenEpoch = this._trackEpoch, this._trackCount < this._trackLinks.length) {\n const e = this._trackLinks[this._trackCount];\n e.node = t, e.version = t.version;\n } else\n this._trackLinks.push(new v(t, t.version));\n this._trackCount++;\n }\n }\n _recompute() {\n if (this.flags & T) return;\n this.flags |= T;\n const t = this._links;\n this._trackEpoch = z(), this._trackLinks = f.acquire(), this._trackCount = 0;\n let e = !1;\n try {\n const s = _.run(this, this._fn);\n this._trackLinks.length = this._trackCount, G(this._trackLinks, t, this), this._links = this._trackLinks, e = !0, rt(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!e)\n try {\n this._trackLinks.length = this._trackCount, G(this._trackLinks, t, this), this._links = this._trackLinks, e = !0;\n } catch {\n }\n this._handleError(s, c.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n e && t !== u ? f.release(t) : e || f.release(this._trackLinks), this._trackEpoch = -1, this._trackLinks = u, this._trackCount = 0, this.flags &= ~T;\n }\n }\n _handleAsyncComputation(t) {\n this.flags = (this.flags | R) & -217, this._notifySubscribers(void 0, void 0), this._asyncStartAggregateVersion = this._captureVersionSnapshot(), this._asyncRetryCount = 0, this._promiseId = (this._promiseId + 1) % X.MAX_PROMISE_ID;\n const e = this._promiseId;\n t.then(\n (s) => {\n if (e === this._promiseId) {\n if (this._captureVersionSnapshot() !== this._asyncStartAggregateVersion)\n return this._asyncRetryCount++ < this._maxAsyncRetries ? this._markDirty() : this._handleError(\n new E(\n `Async drift threshold exceeded after ${this._maxAsyncRetries} retries.`\n ),\n c.COMPUTED_ASYNC_COMPUTATION_FAILED\n );\n this._finalizeResolution(s), this._notifySubscribers(s, void 0);\n }\n },\n (s) => e === this._promiseId && this._handleError(s, c.COMPUTED_ASYNC_COMPUTATION_FAILED)\n );\n }\n _captureVersionSnapshot() {\n let t = 0;\n const e = this._links;\n for (let s = 0, n = e.length; s < n; s++)\n t = (t << 5) - t + e[s].node.version | 0;\n return t;\n }\n _handleError(t, e, s = !1) {\n const n = D(t, E, e);\n if (!s && !(this.flags & O) && (this.version = w(this.version)), this._error = n, this.flags = this.flags & -121 | O | y, this._onError)\n try {\n this._onError(n);\n } catch (r) {\n console.error(c.CALLBACK_ERROR_IN_ERROR_HANDLER, r);\n }\n if (s) throw n;\n this._notifySubscribers(void 0, void 0);\n }\n _finalizeResolution(t) {\n (!(this.flags & d) || !this._equal(this._value, t)) && (this.version = w(this.version)), this._value = t, this._error = null, this.flags = (this.flags | d) & -697;\n }\n execute() {\n this._markDirty();\n }\n /** @internal */\n _markDirty() {\n this.flags & (T | S) || (this.flags |= S, this._notifySubscribers(void 0, void 0));\n }\n}\nfunction yt(i, t = {}) {\n return new gt(i, t);\n}\nvar W;\nclass Dt extends tt {\n constructor(t, e = {}) {\n super(), this[W] = !0, this._cleanup = null, this._links = u, this._nextLinks = null, this._prevLinks = u, this._currentEpoch = -1, this._lastFlushEpoch = -1, this._executionsInEpoch = 0, this._executionCount = 0, this._windowStart = 0, this._windowCount = 0, this._execId = 0, this._fn = t, this._onError = e.onError ?? null, this._sync = e.sync ?? !1, this._maxExecutions = e.maxExecutionsPerSecond ?? p.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = e.maxExecutionsPerFlush ?? p.MAX_EXECUTIONS_PER_EFFECT, this._sync ? (this._executeTask = void 0, this._notifyCallback = () => this.execute()) : (this._executeTask = () => this.execute(), this._notifyCallback = () => b.schedule(this._executeTask)), L.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.flags & l.DISPOSED)\n throw new g(c.EFFECT_DISPOSED);\n this.execute(!0);\n }\n dispose() {\n this.flags & l.DISPOSED || (this.flags |= l.DISPOSED, this._execCleanup(), this._unsubLinks(this._links), this._links !== u && f.release(this._links), this._links = u, this._prevLinks = u);\n }\n [(W = nt, Symbol.dispose)]() {\n this.dispose();\n }\n addDependency(t) {\n if (!(this.flags & l.EXECUTING)) return;\n const e = this._currentEpoch;\n if (t._lastSeenEpoch === e) return;\n t._lastSeenEpoch = e;\n const s = this._nextLinks, n = this._prevLinks;\n for (let r = 0, o = n.length; r < o; r++) {\n const h = n[r];\n if (h && h.node === t && h.unsub) {\n h.version = t.version, s.push(h), n[r] = null;\n return;\n }\n }\n try {\n const r = t.subscribe(this._notifyCallback);\n s.push(new v(t, t.version, r));\n } catch (r) {\n const o = D(r, g, c.EFFECT_EXECUTION_FAILED);\n if (console.error(o), this._onError)\n try {\n this._onError(o);\n } catch {\n }\n s.push(new v(t, t.version, void 0));\n }\n }\n /**\n * Executes effect with tracking.\n */\n execute(t = !1) {\n if (this.flags & (l.DISPOSED | l.EXECUTING) || !t && this._links.length > 0 && !this._isDirty()) return;\n this._checkInfiniteLoops(), this.flags |= l.EXECUTING, this._execCleanup(), this._prevLinks = this._links;\n const e = f.acquire();\n this._nextLinks = e, this._currentEpoch = z();\n let s = !1;\n try {\n const n = _.run(this, this._fn);\n this._links = e, s = !0, rt(n) ? this._handleAsyncResult(n) : this._cleanup = typeof n == \"function\" ? n : null;\n } catch (n) {\n this._links = e, s = !0, this._handleExecutionError(n), this._cleanup = null;\n } finally {\n this._finalizeDependencies(s, this._prevLinks, e), this.flags &= -9;\n }\n }\n _handleAsyncResult(t) {\n const e = ++this._execId;\n t.then(\n (s) => {\n if (e !== this._execId || this.flags & l.DISPOSED) {\n if (typeof s == \"function\")\n try {\n s();\n } catch (n) {\n this._handleExecutionError(n, c.EFFECT_CLEANUP_FAILED);\n }\n return;\n }\n typeof s == \"function\" && (this._cleanup = s);\n },\n (s) => e === this._execId && this._handleExecutionError(s)\n );\n }\n _finalizeDependencies(t, e, s) {\n if (this._nextLinks = null, this._prevLinks = u, t) {\n for (let n = 0, r = e.length; n < r; n++) {\n const o = e[n];\n o && o.unsub?.();\n }\n e !== u && f.release(e);\n } else\n this._unsubLinks(s), f.release(s);\n }\n _unsubLinks(t) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e]?.unsub?.();\n }\n _isDirty() {\n const t = this._links, e = _.current;\n _.current = null;\n try {\n for (let s = 0, n = t.length; s < n; s++) {\n const r = t[s], o = r.node;\n if (o.flags & K.IS_COMPUTED)\n try {\n o.value;\n } catch {\n return !0;\n }\n if (o.version !== r.version) return !0;\n }\n return !1;\n } finally {\n _.current = e;\n }\n }\n _execCleanup() {\n if (this._cleanup) {\n try {\n this._cleanup();\n } catch (t) {\n this._handleExecutionError(t, c.EFFECT_CLEANUP_FAILED);\n }\n this._cleanup = null;\n }\n }\n _checkInfiniteLoops() {\n const t = at();\n this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), ft() > p.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++;\n }\n get isDisposed() {\n return (this.flags & l.DISPOSED) !== 0;\n }\n get executionCount() {\n return this._executionCount;\n }\n get isExecuting() {\n return (this.flags & l.EXECUTING) !== 0;\n }\n _throwInfiniteLoopError(t) {\n const e = new g(\n `Infinite loop detected (${t}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${H}`\n );\n throw this.dispose(), console.error(e), e;\n }\n _handleExecutionError(t, e = c.EFFECT_EXECUTION_FAILED) {\n const s = D(t, g, e);\n if (console.error(s), this._onError)\n try {\n this._onError(s);\n } catch (n) {\n console.error(D(n, g, c.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n}\nfunction Rt(i, t = {}) {\n if (typeof i != \"function\")\n throw new g(c.EFFECT_MUST_BE_FUNCTION);\n const e = new Dt(i, t);\n return e.execute(), e;\n}\nfunction kt(i) {\n if (typeof i != \"function\")\n throw new TypeError(\"Batch callback must be a function\");\n b.startBatch();\n try {\n return i();\n } finally {\n b.endBatch();\n }\n}\nexport {\n V as ATOM_BRAND,\n A as AsyncState,\n C as AtomError,\n it as COMPUTED_BRAND,\n E as ComputedError,\n ot as DEBUG_CONFIG,\n L as DEBUG_RUNTIME,\n nt as EFFECT_BRAND,\n g as EffectError,\n Ct as POOL_CONFIG,\n p as SCHEDULER_CONFIG,\n m as SchedulerError,\n Ot as atom,\n kt as batch,\n yt as computed,\n Rt as effect,\n bt as isAtom,\n At as isComputed,\n Nt as isEffect,\n b as scheduler,\n Tt as untracked\n};\n//# sourceMappingURL=index.mjs.map\n","import { isAtom, isComputed } from '@but212/atom-effect';\nimport type { ComputedAtom, ReactiveValue, ReadonlyAtom } from './types';\n\n/**\n * Checks if a given value is a reactive object (Atom or Computed).\n */\nexport function isReactive(value: unknown): value is ReadonlyAtom<unknown> | ComputedAtom<unknown> {\n return isAtom(value) || isComputed(value);\n}\n\n/**\n * Extracts the underlying raw value from a ReactiveValue.\n */\nexport function getValue<T>(source: ReactiveValue<T>): T {\n return isReactive(source) ? source.value : (source as T);\n}\n\n/**\n * Generates a CSS selector string for a DOM element.\n * Optimized for zero-allocation parsing using native classList.\n */\nexport function getSelector(el: Element | JQuery): string {\n if (!el) return 'unknown';\n const dom = 'jquery' in el ? (el as JQuery)[0] : (el as Element);\n if (!dom) return 'unknown';\n\n const id = dom.id;\n if (id && typeof id === 'string') return `#${id}`;\n\n const tagName = dom.tagName.toLowerCase();\n const classes = dom.classList;\n\n if (classes && classes.length > 0) {\n let res = tagName;\n for (let i = 0, len = classes.length; i < len; i++) {\n const cls = classes[i];\n if (cls) res += `.${cls}`;\n }\n return res;\n }\n return tagName;\n}\n\n/**\n * Basic HTML sanitization for XSS mitigation.\n * Note: This is NOT a replacement for a full-featured sanitizer like DOMPurify.\n * It prevents common attacks like <script> tags and javascript: protocols.\n */\nexport function sanitizeHtml(html: string): string {\n let safe = String(html ?? '');\n\n // 0. Pre-process: Remove null bytes and control characters (bypass vectors)\n // These are often used to bypass regex filters while browsers ignore them\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters for XSS sanitization\n safe = safe.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, '');\n\n // 1. Remove dangerous tags entirely (content included or tag stripped)\n // Lightweight first pass — DOMPurify handles the full sanitization.\n // Note: svg/math are NOT removed — they have legitimate uses (icons, equations).\n // Their event handlers (on*) are already neutralized in step 3.\n // Also remove processing instructions <? ... ?> which can be abused in some contexts\n safe = safe.replace(/<\\?[\\s\\S]*?\\?>/g, '');\n\n // Loop tag removal to prevent nested reassembly bypass (e.g. \"<scr<script>ipt>\")\n const dangerousTagPattern =\n /(<(script|iframe|object|embed|base|meta|applet|noscript)\\b[^>]*>([\\s\\S]*?)<\\/\\2>|<(script|iframe|object|embed|base|meta|applet|noscript)\\b[^>]*\\/?>)/gim;\n let prev: string;\n do {\n prev = safe;\n safe = safe.replace(dangerousTagPattern, '');\n } while (safe !== prev);\n\n // 2. Neutralize dangerous protocols (javascript:, vbscript:)\n // Simple whitespace-tolerant regex. Entity-based obfuscation is left to DOMPurify.\n // Step 0 already strips null bytes/control chars, so basic spacing tricks are caught here.\n const protocolRegex =\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 safe = safe.replace(protocolRegex, 'data-unsafe-protocol:');\n\n // Separately handle dangerous data URIs (e.g. text/html, base64 encoded scripts)\n // Allows common inline images (data:image/...) including SVG while blocking executable payloads.\n const dangerousDataUriRegex =\n /data\\s*:\\s*(?:text\\/html|application\\/javascript|text\\/javascript|text\\/vbscript|text\\/xml|application\\/xhtml\\+xml)/gim;\n safe = safe.replace(dangerousDataUriRegex, 'data-unsafe-protocol:');\n\n // 3. Neutralize event handlers (on* attributes)\n // Replaces \"onclick=\" with \"data-unsafe-attr=\"\n safe = safe.replace(/\\bon\\w+\\s*=/gim, 'data-unsafe-attr=');\n\n // 4. Neutralize CSS expressions (IE legacy but dangerous) and behavior\n // expression(...), behavior:url(...)\n safe = safe\n .replace(/expression\\s*\\(/gim, 'data-unsafe-css(')\n .replace(/behavior\\s*:/gim, 'data-unsafe-css:');\n\n return safe;\n}\n\n/**\n * Checks if a given attribute value contains a dangerous protocol (javascript:, vbscript:).\n * Used by atomAttr/bindAttr to guard URL-bearing attributes.\n */\nconst URL_ATTRS = new Set([\n 'href',\n 'src',\n 'action',\n 'formaction',\n 'xlink:href',\n 'data',\n 'poster',\n 'srcset',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n]);\n\nconst DANGEROUS_PROTOCOL_RE = /^\\s*(?:javascript|vbscript)\\s*:/i;\n\nexport function isDangerousUrl(attrName: string, value: string): boolean {\n if (!URL_ATTRS.has(attrName.toLowerCase())) return false;\n return DANGEROUS_PROTOCOL_RE.test(value);\n}\n\n/**\n * Checks if a CSS value contains dangerous protocols in url() functions.\n * e.g. background-image: url(\"javascript:alert(1)\")\n */\nexport function isDangerousCssValue(value: string): boolean {\n // fast check for url(\n if (!value.toLowerCase().includes('url(')) return false;\n\n // Check for dangerous protocols inside url(...)\n // Pattern matches: url( ['\"]? protocol:\n const dangerousCssUrlRe = /url\\s*\\(\\s*(?:[\"']?\\s*)?(?:javascript|vbscript)\\s*:/i;\n return dangerousCssUrlRe.test(value);\n}\n\n/**\n * Shallow equality check for plain objects.\n * Returns true if both objects have the same keys with identical values (===).\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 keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n const objB = b as Record<string, unknown>;\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i]!;\n if ((a as Record<string, unknown>)[key] !== objB[key]) return false;\n }\n return true;\n}\n\n/**\n * Longest Increasing Subsequence (LIS)\n * Optimized for hardware and TypeScript strict null checks.\n * Time Complexity: O(N log N), Space Complexity: $O(N)$.\n */\nexport function getLIS(arr: Int32Array | number[]): Int32Array {\n const len = arr.length;\n if (len === 0) return new Int32Array(0);\n\n const predecessors = new Int32Array(len);\n const result = new Int32Array(len);\n let resultLen = 0;\n\n for (let i = 0; i < len; i++) {\n const val = arr[i];\n if (val === undefined || val === -1) continue;\n\n const lastIdx = resultLen > 0 ? result[resultLen - 1] : undefined;\n if (resultLen === 0 || (lastIdx !== undefined && (arr[lastIdx] ?? -1) < val)) {\n predecessors[i] = lastIdx ?? -1;\n result[resultLen++] = i;\n continue;\n }\n\n // Binary search for insertion point\n let left = 0;\n let right = resultLen - 1;\n while (left < right) {\n const mid = (left + right) >>> 1;\n const midIdx = result[mid];\n if (midIdx !== undefined && (arr[midIdx] ?? -1) < val) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n\n const leftIdx = result[left];\n if (leftIdx !== undefined && val < (arr[leftIdx] ?? Number.MAX_SAFE_INTEGER)) {\n if (left > 0) {\n predecessors[i] = result[left - 1] ?? -1;\n }\n result[left] = i;\n }\n }\n\n const lis = new Int32Array(resultLen);\n if (resultLen > 0) {\n let curr: number | undefined = result[resultLen - 1];\n for (let i = resultLen - 1; i >= 0 && curr !== undefined && curr !== -1; i--) {\n lis[i] = curr;\n curr = predecessors[curr];\n }\n }\n\n return lis;\n}\n","/**\n * Debug Mode\n *\n * When $.atom.debug = true is enabled:\n * 1. Logs state changes to the console.\n * 2. Visually highlights DOM updates (red border flash).\n *\n * Debug mode can be enabled in two ways:\n * 1. Build-time: import.meta.env.DEV\n * 2. Runtime: $.atom.debug = true or window.__ATOM_DEBUG__ = true\n */\n\nimport { getSelector } from './utils';\n\n/**\n * Determines the initial debug state based on environment.\n * Priority: window.__ATOM_DEBUG__ > import.meta.env.DEV\n */\nfunction getInitialDebugState(): boolean {\n if (typeof window !== 'undefined') {\n const flag = (window as Window & { __ATOM_DEBUG__?: boolean }).__ATOM_DEBUG__;\n if (typeof flag === 'boolean') return flag;\n }\n\n if (import.meta.env?.DEV && import.meta.env.MODE !== 'test') return true;\n\n return false;\n}\n\nlet debugEnabled = getInitialDebugState();\n\nexport const debug = {\n get enabled() {\n return debugEnabled;\n },\n set enabled(value: boolean) {\n debugEnabled = value;\n },\n\n log<T>(type: string, ...args: T[]) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] ${type}:`, ...args);\n }\n },\n\n atomChanged<T>(name: string | undefined, oldVal: T, newVal: T) {\n if (debugEnabled) {\n console.log(\n `[atom-effect-jquery] Atom \"${name ?? 'anonymous'}\" changed:`,\n oldVal,\n '→',\n newVal\n );\n }\n },\n\n /**\n * Logs DOM updates and triggers visual highlight.\n */\n domUpdated<T>($el: JQuery | Element, type: string, value: T) {\n if (!debugEnabled) return;\n console.log(`[atom-effect-jquery] DOM updated: ${getSelector($el)}.${type} =`, value);\n highlightElement($el);\n },\n\n cleanup(selector: string) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] Cleanup: ${selector}`);\n }\n },\n\n warn<T>(...args: T[]) {\n if (debugEnabled) {\n console.warn('[atom-effect-jquery]', ...args);\n }\n },\n};\n\n/**\n * Visual highlight - flashes a red border via CSS class toggle.\n */\nconst HIGHLIGHT_CLASS = 'atom-debug-highlight';\nlet styleInjected = false;\n\nfunction injectHighlightStyle(): void {\n if (styleInjected) return;\n styleInjected = true;\n const style = document.createElement('style');\n style.textContent = `.${HIGHLIGHT_CLASS}{outline:2px solid rgba(255,68,68,0.8);outline-offset:1px;transition:outline 0.5s ease-out}`;\n document.head.appendChild(style);\n}\n\nconst highlightTimers = new WeakMap<HTMLElement, ReturnType<typeof setTimeout>>();\n\nfunction highlightElement($el: JQuery | Element): void {\n const el = ('jquery' in $el ? $el[0] : $el) as HTMLElement | undefined;\n if (!el || !el.isConnected) return;\n\n injectHighlightStyle();\n\n // Clear existing timer if re-highlighted\n const existing = highlightTimers.get(el);\n if (existing) clearTimeout(existing);\n\n el.classList.add(HIGHLIGHT_CLASS);\n\n highlightTimers.set(\n el,\n setTimeout(() => {\n el.classList.remove(HIGHLIGHT_CLASS);\n highlightTimers.delete(el);\n }, 600)\n );\n}\n","import {\n batch,\n computed,\n atom as createAtom,\n effect,\n isAtom,\n isComputed,\n untracked,\n} from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport type { AtomOptions, WritableAtom } from './types';\nimport { isReactive } from './utils';\n\n/**\n * Creates an atom with optional metadata.\n */\nfunction atom<T>(initialValue: T, options: AtomOptions = {}): WritableAtom<T> {\n return createAtom(initialValue, options);\n}\n\n// Add debug property\nObject.defineProperty(atom, 'debug', {\n get() {\n return debug.enabled;\n },\n set(value: boolean) {\n debug.enabled = value;\n },\n});\n\n/**\n * Waits for the next macrotask (setTimeout 0).\n * Effects are processed in microtasks, so this runs AFTER all pending effects complete.\n */\nfunction nextTick(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/**\n * Extend jQuery static methods.\n */\n$.extend({\n atom,\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed,\n isReactive,\n nextTick,\n});\n","/**\n * Constants for atom-effect-jquery\n */\n\nexport const AES_BOUND_CLASS = '_aes-bound';\n\nexport const LOG_PREFIXES = {\n ROUTE: '[$.route]',\n BIND: '[atomBind]',\n LIST: '[atomList]',\n} as const;\n\nexport const ROUTE_DEFAULTS = {\n MODE: 'hash' as const,\n ACTIVE_CLASS: 'active',\n BASE_PATH: '',\n AUTO_BIND_LINKS: false,\n} as const;\n\nexport const INPUT_DEFAULTS = {\n EVENT: 'input',\n DEBOUNCE: 0,\n} as const;\n\nexport const DANGEROUS_PROPS = ['innerHTML', 'outerHTML'] as const;\n\nexport const ERROR_MESSAGES = {\n ROUTE_NOT_FOUND: (name: string) => `Route \"${name}\" not found and no notFound route configured`,\n TEMPLATE_NOT_FOUND: (selector: string) => `Template \"${selector}\" not found`,\n TARGET_NOT_FOUND: (selector: string) => `Target element \"${selector}\" not found`,\n MALFORMED_URI: (raw: string) => `Malformed URI component: ${raw}`,\n UNSAFE_CONTENT: 'Unsafe content neutralized during sanitization.',\n BLOCKED_DANGEROUS_VALUE: (prop: string) => `Blocked dangerous value in \"${prop}\" property.`,\n BLOCKED_EVENT_HANDLER: (name: string) =>\n `Blocked setting dangerous event handler attribute \"${name}\".`,\n BLOCKED_PROTOCOL: (name: string) => `Blocked dangerous protocol in \"${name}\" attribute.`,\n BLOCKED_DANGEROUS_PROP: (name: string) =>\n `Blocked setting dangerous property \"${name}\". Use html binding for sanitized HTML.`,\n INVALID_INPUT_ELEMENT: (tagName: string) => `Val binding used on non-input element <${tagName}>.`,\n DUPLICATE_KEY: (key: string | number, index: number) =>\n `Duplicate key \"${key}\" at index ${index}.`,\n} as const;\n","import { AES_BOUND_CLASS } from './constants';\nimport { debug } from './debug';\nimport type { EffectObject } from './types';\nimport { getSelector } from './utils';\n\n/**\n * Marker class for bound elements to optimize selector engines.\n */\nconst AES_BOUND = AES_BOUND_CLASS;\n\ninterface BindingRecord {\n effects?: EffectObject[];\n cleanups?: Array<() => void>;\n}\n\n/**\n * Binding Registry\n *\n * Highly optimized for performance:\n * - Uses WeakMap for zero-leak DOM associations.\n * - Minimal allocations in the tracking path.\n * - Efficient tree traversal for cleanup.\n */\nclass BindingRegistry {\n private records = new WeakMap<Element, BindingRecord>();\n private boundElements = new WeakSet<Element>();\n private preservedNodes = new WeakSet<Node>();\n private ignoredNodes = new WeakSet<Node>(); // Prevent redundant cleanup\n\n keep(node: Node): void {\n this.preservedNodes.add(node);\n }\n\n isKept(node: Node): boolean {\n return this.preservedNodes.has(node);\n }\n\n markIgnored(node: Node): void {\n this.ignoredNodes.add(node);\n }\n\n isIgnored(node: Node): boolean {\n return this.ignoredNodes.has(node);\n }\n\n private _getOrCreateRecord(el: Element): BindingRecord {\n let res = this.records.get(el);\n if (!res) {\n res = {};\n this.records.set(el, res);\n // Mark as bound and add class for faster querySelector lookup\n if (!this.boundElements.has(el)) {\n this.boundElements.add(el);\n el.classList.add(AES_BOUND);\n }\n }\n return res;\n }\n\n trackEffect(el: Element, fx: EffectObject): void {\n const record = this._getOrCreateRecord(el);\n record.effects ??= [];\n record.effects.push(fx);\n }\n\n trackCleanup(el: Element, fn: () => void): void {\n const record = this._getOrCreateRecord(el);\n record.cleanups ??= [];\n record.cleanups.push(fn);\n }\n\n hasBind(el: Element): boolean {\n return this.boundElements.has(el);\n }\n\n cleanup(el: Element): void {\n // Atomic delete return value used as a high-performance guard\n if (!this.boundElements.delete(el)) return;\n\n const record = this.records.get(el);\n if (!record) return;\n\n // Fast cleanup of metadata\n this.records.delete(el);\n this.preservedNodes.delete(el);\n this.ignoredNodes.delete(el);\n el.classList.remove(AES_BOUND);\n\n // Hoist costly selector string generation to debug-only block\n if (debug.enabled) {\n debug.cleanup(getSelector(el));\n }\n\n // 1. Dispose Effects (Atom -> Subscription severed)\n const effects = record.effects;\n if (effects) {\n for (let i = 0, len = effects.length; i < len; i++) {\n try {\n effects[i]?.dispose();\n } catch (e) {\n debug.warn('Effect dispose error:', e);\n }\n }\n }\n\n // 2. Execute custom cleanups\n const cleanups = record.cleanups;\n if (cleanups) {\n for (let i = 0, len = cleanups.length; i < len; i++) {\n try {\n cleanups[i]?.();\n } catch (e) {\n debug.warn('Cleanup error:', e);\n }\n }\n }\n }\n\n cleanupDescendants(el: Element): void {\n const children = el.querySelectorAll(`.${AES_BOUND}`);\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i] as Element;\n // Double check because querySelectorAll might return disconnected leftovers\n if (child && this.boundElements.has(child)) {\n this.cleanup(child);\n } else if (child) {\n child.classList.remove(AES_BOUND);\n }\n }\n }\n\n cleanupTree(el: Element): void {\n this.cleanupDescendants(el);\n this.cleanup(el);\n }\n}\n\nexport const registry = new BindingRegistry();\n\nlet observer: MutationObserver | null = null;\n\nexport function enableAutoCleanup(root: Element = document.body): void {\n if (observer) return;\n\n observer = new MutationObserver((mutations) => {\n for (let i = 0, len = mutations.length; i < len; i++) {\n const removedNodes = mutations[i]?.removedNodes;\n if (!removedNodes) continue;\n const rLen = removedNodes.length;\n if (rLen === 0) continue;\n\n for (let j = 0; j < rLen; j++) {\n const node = removedNodes[j]!;\n // Early exit: only elements can have AES_BOUND bindings\n if (node.nodeType !== 1) continue;\n\n // Skip if kept (detached for moves), explicitly ignored, or still connected\n if (node.isConnected || registry.isKept(node) || registry.isIgnored(node)) {\n continue;\n }\n\n registry.cleanupTree(node as Element);\n }\n }\n });\n\n observer.observe(root, { childList: true, subtree: true });\n}\n\nexport function disableAutoCleanup(): void {\n observer?.disconnect();\n observer = null;\n}\n","import { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ReactiveValue } from './types';\nimport { isReactive } from './utils';\n\n/**\n * Utility to register a reactive effect or apply a static update.\n * Centralizes the boilerplate for atomic bindings.\n *\n * @param el - The DOM element to associate with the effect.\n * @param source - The reactive or static value source.\n * @param updater - Function to apply the value to the DOM.\n * @param debugType - Type label for debug logging.\n */\nexport function registerReactiveEffect<T>(\n el: HTMLElement,\n source: ReactiveValue<T>,\n updater: (value: T) => void,\n debugType: string\n): void {\n if (isReactive(source)) {\n registry.trackEffect(\n el,\n effect(() => {\n const value = source.value;\n updater(value);\n debug.domUpdated($(el), debugType, value);\n })\n );\n } else {\n updater(source);\n if (debug.enabled) debug.domUpdated($(el), debugType, source);\n }\n}\n","import type {\n AtomOptions as BaseAtomOptions,\n ComputedAtom,\n ComputedOptions,\n EffectObject,\n ReadonlyAtom,\n WritableAtom,\n} from '@but212/atom-effect';\n\n/**\n * Extended options for Atom creation.\n */\nexport interface AtomOptions extends BaseAtomOptions {\n /** Name for debugging purposes */\n name?: string;\n}\n\n/**\n * Represents a value that can be either dynamic (Atom/Computed) or static.\n */\nexport type ReactiveValue<T> = T | ReadonlyAtom<T> | ComputedAtom<T>;\n\n/**\n * CSS value: either a direct reactive value or a tuple of [source, unit].\n * Named type provides clear bone structure for CSS binding configurations.\n */\nexport type CssValue =\n | ReactiveValue<string | number>\n | [source: ReactiveValue<string | number>, unit: string];\n\n/**\n * CSS bindings map property names to CSS values.\n */\nexport type CssBindings = Record<string, CssValue>;\n\n/**\n * Configuration options for `atomBind`.\n */\nexport interface BindingOptions<T> {\n text?: ReactiveValue<T>;\n html?: ReactiveValue<string>;\n class?: Record<string, ReactiveValue<boolean>>;\n css?: CssBindings;\n attr?: Record<string, ReactiveValue<string | boolean | null>>;\n prop?: Record<string, ReactiveValue<T>>;\n show?: ReactiveValue<boolean>;\n hide?: ReactiveValue<boolean>;\n val?: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>];\n checked?: WritableAtom<boolean>;\n on?: Record<string, (e: JQuery.Event) => void>;\n}\n\n/**\n * Configuration options for `atomList`.\n */\nexport interface ListOptions<T> {\n key: keyof T | ((item: T, index: number) => string | number);\n render: (item: T, index: number) => string | Element | DocumentFragment | JQuery;\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?: string | Element | DocumentFragment | JQuery;\n}\n\n/**\n * Configuration options for `atomVal`.\n */\nexport interface ValOptions<T> {\n debounce?: number;\n event?: string;\n parse?: (v: string) => T;\n format?: (v: T) => string;\n /** Custom equality check for comparing parsed values. Defaults to Object.is. */\n equal?: (a: T, b: T) => boolean;\n}\n\n/**\n * Configuration options for `atomFetch`.\n */\nexport interface FetchOptions<T> {\n /** Initial value before first fetch resolves. */\n defaultValue: T;\n /** HTTP method (default: 'GET'). */\n method?: string;\n /** Request headers. */\n headers?: Record<string, string>;\n /** Transform raw response before storing. */\n transform?: (raw: unknown) => T;\n /** Additional $.ajax settings passthrough. */\n ajaxOptions?: JQuery.AjaxSettings;\n}\n\n/**\n * State context for two-way input bindings.\n * Consolidates scattered state flags into a single, traceable object.\n * This is the \"bone structure\" for input binding lifecycle management.\n */\n/**\n * Bit flags for input binding state management.\n * Consolidates mutually exclusive phases and orthogonal states (focus) into a single integer.\n */\nexport enum BindingFlags {\n None = 0,\n Focused = 1 << 0,\n Composing = 1 << 1,\n SyncingToAtom = 1 << 2,\n SyncingToDom = 1 << 3,\n // Mask for any active processing phase (excluding simple focus)\n Busy = Composing | SyncingToAtom | SyncingToDom,\n}\n\n/**\n * State context for two-way input bindings.\n * Consolidates scattered state flags into a single, traceable object.\n * This is the \"bone structure\" for input binding lifecycle management.\n */\nexport interface InputBindingState {\n /** Timeout ID for debounced updates */\n timeoutId: number | null;\n /** Bitmask of current state flags */\n flags: number;\n}\n\n/**\n * Creates a fresh InputBindingState with default values.\n */\nexport function createInputBindingState(): InputBindingState {\n return { timeoutId: null, flags: BindingFlags.None };\n}\n\n/**\n * Functional Component type.\n */\nexport type ComponentFn<P = {}> = ($el: JQuery, props: P) => undefined | (() => void);\n\ndeclare global {\n interface JQueryStatic {\n atom: {\n <T>(initialValue: T, options?: AtomOptions): WritableAtom<T>;\n debug: boolean;\n };\n computed<T>(fn: () => T, options?: ComputedOptions<T>): ComputedAtom<T>;\n computed<T>(\n fn: () => Promise<T>,\n options: ComputedOptions<T> & { defaultValue: T }\n ): ComputedAtom<T>;\n effect(fn: () => undefined | (() => void)): 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 route(config: RouteConfig): Router;\n atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T>;\n }\n\n interface JQuery {\n // Chainable methods\n atomText<T>(source: ReactiveValue<T>, formatter?: (v: T) => string): this;\n atomHtml(source: ReactiveValue<string>): this;\n atomClass(className: string, condition: ReactiveValue<boolean>): this;\n atomCss(prop: string, source: ReactiveValue<string | number>, unit?: string): this;\n atomAttr(name: string, source: ReactiveValue<string | boolean | null>): this;\n atomProp<T extends string | number | boolean | null | undefined>(\n name: string,\n source: ReactiveValue<T>\n ): this;\n atomShow(condition: ReactiveValue<boolean>): this;\n atomHide(condition: ReactiveValue<boolean>): this;\n atomVal<T>(atom: WritableAtom<T>, options?: ValOptions<T>): this;\n atomChecked(atom: WritableAtom<boolean>): this;\n atomOn(event: string, handler: (e: JQuery.Event) => void): this;\n\n // Integrated binding\n atomBind<T extends string | number | boolean | null | undefined>(\n options: BindingOptions<T>\n ): this;\n\n // List rendering\n atomList<T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): this;\n\n // Component mounting\n atomMount<P>(component: ComponentFn<P>, props?: P): this;\n atomUnmount(): this;\n\n // Cleanup\n atomUnbind(): this;\n }\n}\n\n/**\n * Context passed to binding handlers for cleanup and effect registration.\n */\nexport interface BindingContext {\n readonly $el: JQuery;\n readonly el: HTMLElement;\n readonly trackCleanup: (fn: () => void) => void;\n}\n\n/**\n * Shared route lifecycle hooks.\n */\ninterface RouteLifecycle {\n /** Called when entering this route. Can return additional params. */\n onEnter?: (params: Record<string, string>) => Record<string, string> | undefined;\n /** Called when leaving this route. Return false to prevent navigation. */\n onLeave?: () => boolean | undefined;\n}\n\n/**\n * Route using a template selector.\n */\ninterface TemplateRoute extends RouteLifecycle {\n /** Template selector (e.g., '#tmpl-home') */\n template: string;\n render?: never;\n}\n\n/**\n * Route using a custom render function.\n */\ninterface RenderRoute extends RouteLifecycle {\n /** Custom render function */\n render: (container: HTMLElement, route: string, params: Record<string, string>) => void;\n template?: never;\n}\n\n/**\n * Route definition for a single route.\n * Either template OR render must be provided, but not both.\n */\nexport type RouteDefinition = TemplateRoute | RenderRoute;\n\n/**\n * Configuration for $.route()\n */\nexport interface RouteConfig {\n /** Target element selector for rendering route content */\n target: string;\n /** Default route name */\n default: string;\n /** Route definitions map */\n routes: Record<string, RouteDefinition>;\n /** Routing mode. 'hash' uses location.hash, 'history' uses pushState. Default: 'hash' */\n mode?: 'hash' | 'history';\n /** Base path for history mode (e.g., '/app'). Ignored in hash mode. Default: '' */\n basePath?: string;\n /** Route name to use for 404/not found */\n notFound?: string;\n /** Automatically bind links with data-route attribute */\n autoBindLinks?: boolean;\n /** CSS class to add to active links */\n activeClass?: string;\n /** Called before transitioning between routes */\n beforeTransition?: (from: string, to: string) => void;\n /** Called after transitioning between routes */\n afterTransition?: (from: string, to: string) => void;\n}\n\n/**\n * Router instance returned by $.route()\n */\nexport interface Router {\n /** Reactive atom containing current route name */\n currentRoute: WritableAtom<string>;\n /** Navigate to a different route */\n navigate: (route: string) => void;\n /** Cleanup and destroy the router */\n destroy: () => void;\n}\n\nexport type { WritableAtom, ReadonlyAtom, ComputedAtom, EffectObject, ComputedOptions };\n","import { INPUT_DEFAULTS } from './constants';\nimport { debug } from './debug';\nimport type { InputBindingState, ValOptions, WritableAtom } from './types';\nimport { BindingFlags, createInputBindingState } from './types';\n\n/**\n * Applies two-way data binding configuration to an input element.\n * Shared logic used by both implicit (atomBind) and explicit (atomVal) bindings.\n *\n * @param $el - The jQuery element to bind.\n * @param atom - The target atom for two-way binding.\n * @param options - Binding options (parse, format, debounce, events).\n * @returns Object containing the effect function (for Atom -> DOM) and cleanup function.\n */\nexport function applyInputBinding<T>(\n $el: JQuery,\n atom: WritableAtom<T>,\n options: ValOptions<T> = {}\n): { effect: () => void; cleanup: () => void } {\n const {\n debounce: debounceMs,\n event = INPUT_DEFAULTS.EVENT,\n parse = (v: string) => v as unknown as T,\n format = (v: T) => String(v ?? ''),\n equal = Object.is,\n } = options;\n\n const state: InputBindingState = createInputBindingState();\n const el = $el[0] as HTMLInputElement | HTMLTextAreaElement;\n\n // Core sync: DOM → Atom\n const syncAtomFromDom = () => {\n if (state.flags & BindingFlags.Busy) return;\n\n state.flags |= BindingFlags.SyncingToAtom;\n try {\n const currentRaw = el.value;\n const parsed = parse(currentRaw);\n // Avoid redundant atom updates to prevent unnecessary propagation\n if (!equal(atom.value, parsed)) {\n atom.value = parsed;\n }\n } finally {\n state.flags &= ~BindingFlags.SyncingToAtom;\n }\n };\n\n const onBlur = () => {\n // Flush pending debounce\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n state.timeoutId = null;\n syncAtomFromDom();\n }\n\n state.flags &= ~BindingFlags.Focused;\n\n // Force formatting on blur\n const formatted = format(atom.value);\n if (el.value !== formatted) {\n el.value = formatted;\n }\n };\n\n // Input handler with optional debounce\n const onInput = () => {\n if (state.flags & BindingFlags.Busy) return;\n\n if (debounceMs) {\n if (state.timeoutId) clearTimeout(state.timeoutId);\n state.timeoutId = setTimeout(syncAtomFromDom, debounceMs);\n } else {\n syncAtomFromDom();\n }\n };\n\n const handlers = {\n compositionstart: () => {\n state.flags |= BindingFlags.Composing;\n },\n compositionend: () => {\n state.flags &= ~BindingFlags.Composing;\n syncAtomFromDom();\n },\n focus: () => {\n state.flags |= BindingFlags.Focused;\n },\n blur: onBlur,\n [event]: onInput,\n change: onInput,\n };\n\n $el.on(handlers);\n\n const cleanup = () => {\n $el.off(handlers);\n if (state.timeoutId) clearTimeout(state.timeoutId);\n };\n\n // Core sync: Atom → DOM (Effect body)\n const effect = () => {\n const val = atom.value;\n const formatted = format(val);\n const currentVal = el.value;\n\n // 1. Skip if already synchronized\n if (currentVal === formatted) return;\n\n // 2. Skip if focused and current input parses to same value (don't interrupt user)\n if (state.flags & BindingFlags.Focused && equal(parse(currentVal), val)) {\n return;\n }\n\n state.flags |= BindingFlags.SyncingToDom;\n try {\n if (state.flags & BindingFlags.Focused) {\n // [Fix] Preserve cursor position when focused\n const { selectionStart: start, selectionEnd: end } = el;\n el.value = formatted;\n const len = formatted.length;\n el.setSelectionRange(Math.min(start ?? 0, len), Math.min(end ?? 0, len));\n } else {\n el.value = formatted;\n }\n\n debug.domUpdated($el, 'val', formatted);\n } finally {\n state.flags &= ~BindingFlags.SyncingToDom;\n }\n };\n\n return { effect, cleanup };\n}\n","import { batch, effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { DANGEROUS_PROPS, ERROR_MESSAGES, LOG_PREFIXES } from './constants';\nimport { debug } from './debug';\nimport { registerReactiveEffect } from './effect-factory';\nimport { applyInputBinding } from './input-binding';\nimport { registry } from './registry';\nimport type {\n BindingContext,\n BindingOptions,\n CssValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from './types';\nimport { BindingFlags, createInputBindingState } from './types';\nimport { isDangerousCssValue, isDangerousUrl, sanitizeHtml } from './utils';\n\n// Cache for CSS property camelization to avoid repeated regex and check overhead\nconst camelCache: Record<string, string> = Object.create(null);\nfunction getCamelCase(prop: string): string {\n let cached = camelCache[prop];\n if (cached) return cached;\n\n cached = prop.includes('-') ? prop.replace(/-./g, (m) => m[1]!.toUpperCase()) : prop;\n camelCache[prop] = cached;\n return cached;\n}\n\n// ============================================================================\n// Binding Context Factory\n// ============================================================================\n\nexport function createContext(el: HTMLElement): BindingContext {\n let _$el: JQuery | null = null;\n return {\n get $el() {\n if (!_$el) _$el = $(el);\n return _$el;\n },\n el,\n trackCleanup: (fn) => registry.trackCleanup(el, fn),\n };\n}\n\n// ============================================================================\n// One-Way Binding Handlers (Atom → DOM)\n// ============================================================================\n\nexport function bindText<T>(ctx: BindingContext, value: ReactiveValue<T>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const newVal = typeof val === 'string' ? val : String(val ?? '');\n // Guard against redundant DOM writes\n if (el.textContent !== newVal) {\n el.textContent = newVal;\n }\n },\n 'text'\n );\n}\n\nexport function bindHtml(ctx: BindingContext, value: ReactiveValue<string>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const newVal = String(val ?? '');\n const sanitized = sanitizeHtml(newVal);\n\n if (sanitized !== newVal) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.UNSAFE_CONTENT}`);\n }\n\n // Guard against redundant DOM writes which destroy/recreate subtrees\n if (el.innerHTML !== sanitized) {\n el.innerHTML = sanitized;\n }\n },\n 'html'\n );\n}\n\nexport function bindClass(\n ctx: BindingContext,\n classMap: Record<string, ReactiveValue<boolean>>\n): void {\n for (const className in classMap) {\n registerReactiveEffect(\n ctx.el,\n classMap[className],\n (val) => {\n ctx.el.classList.toggle(className, !!val);\n },\n `class.${className}`\n );\n }\n}\n\nexport function bindCss(ctx: BindingContext, cssMap: Record<string, CssValue>): void {\n const el = ctx.el;\n const style = el.style as unknown as Record<string, string>;\n for (const prop in cssMap) {\n const val = cssMap[prop];\n if (val === undefined) continue;\n\n const camel = getCamelCase(prop);\n const isArr = Array.isArray(val);\n const source = isArr ? val[0] : val;\n const unit = isArr ? val[1] : '';\n\n registerReactiveEffect(\n el,\n source,\n (v) => {\n const strVal = unit ? `${v}${unit}` : String(v);\n if (isDangerousCssValue(strVal)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_DANGEROUS_VALUE(prop)}`);\n return;\n }\n style[camel] = strVal;\n },\n `css.${prop}`\n );\n }\n}\n\nexport function bindAttr(\n ctx: BindingContext,\n attrMap: Record<string, ReactiveValue<string | boolean | null>>\n): void {\n const el = ctx.el;\n for (const name in attrMap) {\n // Block event handler attributes (on*)\n const c0 = name.charCodeAt(0);\n if ((c0 === 111 || c0 === 79) && (name.charCodeAt(1) === 110 || name.charCodeAt(1) === 78)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_EVENT_HANDLER(name)}`);\n continue;\n }\n\n registerReactiveEffect(\n el,\n attrMap[name],\n (v) => {\n if (v === null || v === undefined || v === false) {\n el.removeAttribute(name);\n return;\n }\n const newVal = v === true ? name : String(v);\n if (isDangerousUrl(name, newVal)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_PROTOCOL(name)}`);\n return;\n }\n // Attribute write guard\n if (el.getAttribute(name) !== newVal) {\n el.setAttribute(name, newVal);\n }\n },\n `attr.${name}`\n );\n }\n}\n\nexport function bindProp(\n ctx: BindingContext,\n propMap: Record<string, ReactiveValue<unknown>>\n): void {\n const el = ctx.el as unknown as Record<string, unknown>;\n for (const name in propMap) {\n // Block dangerous DOM properties that can inject raw HTML\n if (DANGEROUS_PROPS.includes(name as (typeof DANGEROUS_PROPS)[number])) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_DANGEROUS_PROP(name)}`);\n continue;\n }\n\n registerReactiveEffect(\n ctx.el,\n propMap[name],\n (val) => {\n // Redundancy check for DOM properties (e.g. className, title)\n if (el[name] !== val) {\n el[name] = val;\n }\n },\n `prop.${name}`\n );\n }\n}\n\nexport function bindVisibility(\n ctx: BindingContext,\n condition: ReactiveValue<boolean>,\n invert: boolean,\n label: 'show' | 'hide'\n): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n const visible = invert ? !val : !!val;\n el.style.display = visible ? '' : 'none';\n if (debug.enabled) debug.domUpdated(el, label, val);\n },\n label\n );\n}\n\n/**\n * Two-way value binding with full feature parity to $.fn.atomVal.\n * Supports parse/format options, debouncing, IME composition, and focus-aware updates.\n */\nexport function bindVal<T>(\n ctx: BindingContext,\n cfg: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>]\n): void {\n const tagName = ctx.el.tagName.toLowerCase();\n if (tagName !== 'input' && tagName !== 'select' && tagName !== 'textarea') {\n console.warn(`[atomBind] Val binding used on non-input element <${tagName}>.`);\n return;\n }\n const isArr = Array.isArray(cfg);\n const { effect: fxFn, cleanup } = applyInputBinding(\n ctx.$el,\n isArr ? cfg[0] : cfg,\n isArr ? cfg[1] : {}\n );\n\n registry.trackEffect(ctx.el, effect(fxFn));\n ctx.trackCleanup(cleanup);\n}\n\nexport function bindChecked(ctx: BindingContext, atom: WritableAtom<boolean>): void {\n const el = ctx.el as HTMLInputElement;\n const $el = ctx.$el;\n const state = createInputBindingState();\n\n // DOM → Atom (jQuery events for .trigger() compatibility)\n const handler = () => {\n if (state.flags & BindingFlags.Busy) return;\n const current = el.checked;\n if (atom.value !== current) {\n atom.value = current;\n }\n };\n\n $el.on('change', handler);\n ctx.trackCleanup(() => $el.off('change', handler));\n\n // Atom → DOM\n const fx = effect(() => {\n state.flags |= BindingFlags.SyncingToDom;\n const val = !!atom.value;\n if (el.checked !== val) {\n el.checked = val;\n if (debug.enabled) debug.domUpdated($el, 'checked', val);\n }\n state.flags &= ~BindingFlags.SyncingToDom;\n });\n registry.trackEffect(el, fx);\n}\n\n// ============================================================================\n// Event Binding Handler\n// ============================================================================\n\n/** Event handler map type for atomBind({ on: ... }) using jQuery's event handler signature */\ntype EventBindingMap = {\n [K in keyof JQuery.TypeToTriggeredEventMap<HTMLElement, undefined, HTMLElement, HTMLElement>]?:\n | JQuery.TypeEventHandler<HTMLElement, undefined, HTMLElement, HTMLElement, K>\n | false;\n} & {\n [eventName: string]: JQuery.EventHandler<HTMLElement, undefined> | false | undefined;\n};\n\nexport function bindEvents(ctx: BindingContext, eventMap: EventBindingMap): void {\n for (const name in eventMap) {\n const handler = eventMap[name];\n if (typeof handler !== 'function') continue;\n const listener = (e: Event) => {\n batch(() =>\n (handler as JQuery.EventHandler<HTMLElement, undefined>).call(\n ctx.el,\n $.Event(e.type, { originalEvent: e }) as JQuery.TriggeredEvent<HTMLElement>\n )\n );\n };\n ctx.el.addEventListener(name, listener);\n ctx.trackCleanup(() => ctx.el.removeEventListener(name, listener));\n }\n}\n\n// ============================================================================\n// Main Entry Point\n// ============================================================================\n\n/**\n * Extends jQuery with atom-based data binding capabilities.\n *\n * This plugin synchronizes DOM element states (text, html, classes, styles, etc.)\n * with reactive atoms. Handlers are modular and focused for maintainability.\n */\n$.fn.atomBind = function <T extends string | number | boolean | null | undefined>(\n options: BindingOptions<T>\n): JQuery {\n return this.each(function () {\n const ctx = createContext(this);\n\n // Apply bindings through focused handlers\n if (options.text !== undefined) bindText(ctx, options.text);\n if (options.html !== undefined) bindHtml(ctx, options.html);\n if (options.class) bindClass(ctx, options.class);\n if (options.css) bindCss(ctx, options.css);\n if (options.attr) bindAttr(ctx, options.attr);\n if (options.prop) bindProp(ctx, options.prop);\n if (options.show !== undefined) bindVisibility(ctx, options.show, false, 'show');\n if (options.hide !== undefined) bindVisibility(ctx, options.hide, true, 'hide');\n if (options.val !== undefined) bindVal(ctx, options.val);\n if (options.checked !== undefined) bindChecked(ctx, options.checked);\n if (options.on) bindEvents(ctx, options.on);\n });\n};\n","import $ from 'jquery';\nimport { registerReactiveEffect } from './effect-factory';\nimport { registry } from './registry';\nimport type { ReactiveValue, ValOptions, WritableAtom } from './types';\nimport {\n bindAttr,\n bindChecked,\n bindClass,\n bindCss,\n bindHtml,\n bindProp,\n bindVal,\n bindVisibility,\n createContext,\n} from './unified';\n\n/**\n * Updates element text content.\n * Kept separate from unified bindText because of the formatter parameter.\n */\n$.fn.atomText = function <T>(source: ReactiveValue<T>, formatter?: (v: T) => string): JQuery {\n return this.each(function () {\n const $el = $(this);\n const update = formatter\n ? (val: T) => $el.text(formatter(val))\n : (val: T) => $el.text(String(val ?? ''));\n\n registerReactiveEffect(this, source, update, 'text');\n });\n};\n\n/**\n * Updates element inner HTML.\n */\n$.fn.atomHtml = function (source: ReactiveValue<string>): JQuery {\n return this.each(function () {\n bindHtml(createContext(this), source);\n });\n};\n\n/**\n * Toggles a CSS class based on boolean value.\n */\n$.fn.atomClass = function (className: string, condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindClass(createContext(this), { [className]: condition });\n });\n};\n\n/**\n * Updates a CSS style property.\n */\n$.fn.atomCss = function (\n prop: string,\n source: ReactiveValue<string | number>,\n unit?: string\n): JQuery {\n return this.each(function () {\n bindCss(createContext(this), { [prop]: unit ? [source, unit] : source });\n });\n};\n\n/**\n * Updates an HTML attribute.\n */\n$.fn.atomAttr = function (name: string, source: ReactiveValue<string | boolean | null>): JQuery {\n return this.each(function () {\n bindAttr(createContext(this), { [name]: source });\n });\n};\n\n/**\n * Updates a DOM property (e.g., checked, selected, value).\n */\n$.fn.atomProp = function <T extends string | number | boolean | null | undefined>(\n name: string,\n source: ReactiveValue<T>\n): JQuery {\n return this.each(function () {\n bindProp(createContext(this), { [name]: source });\n });\n};\n\n/**\n * Shows element when condition is true.\n */\n$.fn.atomShow = function (condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindVisibility(createContext(this), condition, false, 'show');\n });\n};\n\n/**\n * Hides element when condition is true.\n */\n$.fn.atomHide = function (condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindVisibility(createContext(this), condition, true, 'hide');\n });\n};\n\n/**\n * Two-way binding for input values.\n */\n$.fn.atomVal = function <T>(atom: WritableAtom<T>, options: ValOptions<T> = {}): JQuery {\n return this.each(function () {\n bindVal(\n createContext(this),\n options && Object.keys(options).length > 0 ? [atom, options] : atom\n );\n });\n};\n\n/**\n * Two-way binding for checkbox/radio checked state.\n * Uses jQuery event system (not native) for compatibility with $.fn.trigger().\n */\n$.fn.atomChecked = function (atom: WritableAtom<boolean>): JQuery {\n return this.each(function () {\n bindChecked(createContext(this), atom);\n });\n};\n\n/**\n * Binds an event handler with automatic cleanup.\n */\n$.fn.atomOn = function (event: string, handler: (e: JQuery.Event) => void): JQuery {\n return this.each(function () {\n const $el = $(this);\n $el.on(event, handler);\n registry.trackCleanup(this, () => $el.off(event, handler));\n });\n};\n\n/**\n * Removes all atom bindings.\n */\n$.fn.atomUnbind = function (): JQuery {\n return this.each(function () {\n registry.cleanupTree(this);\n });\n};\n","import { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from './constants';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ListOptions, ReadonlyAtom } from './types';\nimport { getLIS, getSelector, sanitizeHtml, shallowEqual } from './utils';\n\n/**\n * atomList with Smart Reconciliation\n * Optimized for performance and data locality.\n */\n$.fn.atomList = function <T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): JQuery {\n const { key, render, bind, update, onAdd, onRemove, empty } = options;\n\n // Resolve getKey once to avoid repeated typeof checks in the Hot Path\n const getKey =\n typeof key === 'function'\n ? key\n : (item: T, _index: number) => item[key as keyof T] as unknown as string | number;\n\n return this.each(function () {\n const $container = $(this);\n const containerSelector = getSelector(this);\n\n const itemMap = new Map<string | number, { $el: JQuery; item: T }>();\n const removingKeys = new Set<string | number>();\n let oldKeys: (string | number)[] = [];\n let $emptyEl: JQuery | null = null;\n\n const fx = effect(() => {\n const items = source.value;\n const itemCount = items.length;\n\n // 1. Handle Empty Template Logic\n if (itemCount === 0) {\n if (empty && !$emptyEl) {\n // Use type assertion to avoid overload ambiguity while maintaining JQuery return type\n const safeEmpty = typeof empty === 'string' ? sanitizeHtml(empty) : empty;\n $emptyEl = ($(safeEmpty as string) as JQuery).appendTo($container);\n }\n } else if ($emptyEl) {\n $emptyEl.remove();\n $emptyEl = null;\n }\n\n // Hot Path: If both new and old are empty, skip processing\n if (itemCount === 0 && itemMap.size === 0) {\n oldKeys = [];\n return;\n }\n\n debug.log('list', `${containerSelector} updating with ${itemCount} items`);\n\n // 2. Build Old Index Map (O(M))\n const oldIndexMap = new Map<string | number, number>();\n const oldLen = oldKeys.length;\n for (let i = 0; i < oldLen; i++) {\n oldIndexMap.set(oldKeys[i]!, i);\n }\n\n // 3. Prepare keys and LIS indices in a single pass (O(N))\n const newKeys: (string | number)[] = new Array(itemCount);\n const newKeySet = new Set<string | number>();\n const newIndices = new Int32Array(itemCount);\n\n for (let i = 0; i < itemCount; i++) {\n const item = items[i] as T;\n const k = getKey(item, i);\n\n if (newKeySet.has(k)) {\n console.warn(`${LOG_PREFIXES.LIST} ${ERROR_MESSAGES.DUPLICATE_KEY(k, i)}`);\n }\n\n newKeys[i] = k;\n newKeySet.add(k);\n newIndices[i] = oldIndexMap.get(k) ?? -1;\n }\n\n // 4. Remove vanished items (O(M))\n if (itemMap.size > 0) {\n for (const [k, entry] of itemMap) {\n if (newKeySet.has(k) || removingKeys.has(k)) continue;\n\n const cleanupItem = () => {\n entry.$el.remove();\n if (entry.$el[0]) registry.cleanup(entry.$el[0]);\n removingKeys.delete(k);\n debug.log('list', `${containerSelector} removed item:`, k);\n };\n\n itemMap.delete(k);\n removingKeys.add(k);\n\n if (onRemove) {\n const result = onRemove(entry.$el);\n if (result instanceof Promise) result.then(cleanupItem);\n else cleanupItem();\n } else {\n cleanupItem();\n }\n }\n }\n\n // After removals, check if we can skip the rest\n if (itemCount === 0) {\n oldKeys = [];\n return;\n }\n\n // 5. Get LIS (O(N log N))\n const lisArr = getLIS(newIndices);\n let lisIdx = lisArr.length - 1;\n\n // 6. Update and Reorder (Backwards iteration for insertBefore efficiency)\n let nextNode: Node | null = null;\n for (let i = itemCount - 1; i >= 0; i--) {\n const k = newKeys[i]!;\n const item = items[i]!;\n const entry = itemMap.get(k);\n\n if (entry) {\n // Existing Item Path\n const oldItem = entry.item;\n entry.item = item;\n const el = entry.$el[0];\n if (!el) continue;\n\n if (update) {\n update(entry.$el, item, i);\n debug.domUpdated(entry.$el, 'list.update', item);\n } else if (oldItem !== item && !shallowEqual(oldItem, item)) {\n {\n const rawRender = render(item, i);\n const safeRender =\n typeof rawRender === 'string' ? sanitizeHtml(rawRender) : rawRender;\n const $newEl = $(safeRender as string) as JQuery;\n const needsNextNodeUpdate = nextNode === el;\n entry.$el.replaceWith($newEl);\n entry.$el = $newEl;\n if (bind) bind($newEl, item, i);\n debug.domUpdated($newEl, 'list.render', item);\n if (needsNextNodeUpdate) nextNode = $newEl[0] || null;\n }\n }\n\n // Move if not in LIS\n if (lisIdx >= 0 && lisArr[lisIdx] === i) {\n lisIdx--;\n } else {\n const currentEl = entry.$el[0]!;\n if (nextNode?.isConnected) {\n if (nextNode !== currentEl) entry.$el.insertBefore(nextNode);\n } else {\n entry.$el.appendTo($container);\n }\n }\n nextNode = entry.$el[0] || null;\n } else {\n // New Item Path\n const rendered = render(item, i);\n const safeRendered = typeof rendered === 'string' ? sanitizeHtml(rendered) : rendered;\n const $el = $(safeRendered as string) as JQuery;\n itemMap.set(k, { $el, item });\n\n if (nextNode?.isConnected) $el.insertBefore(nextNode);\n else $el.appendTo($container);\n\n if (bind) bind($el, item, i);\n if (onAdd) onAdd($el);\n\n debug.domUpdated($el, 'list.add', item);\n nextNode = $el[0] || null;\n }\n }\n\n oldKeys = newKeys;\n });\n\n registry.trackEffect(this, fx);\n registry.trackCleanup(this, () => {\n itemMap.clear();\n removingKeys.clear();\n oldKeys = [];\n $emptyEl?.remove();\n });\n });\n};\n","import $ from 'jquery';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ComponentFn } from './types';\nimport { getSelector } from './utils';\n\nconst mountedComponents = new WeakMap<Element, () => void>();\n\n/**\n * Mounts a functional component to the element.\n * Automatically cleans up existing components on the same element.\n */\n$.fn.atomMount = function <P>(component: ComponentFn<P>, props: P = {} as P): JQuery {\n return this.each(function () {\n const selector = getSelector(this);\n\n // 1. Unmount existing component (Consolidated O(1) lookup)\n const existingUnmount = mountedComponents.get(this);\n if (existingUnmount) {\n debug.log('mount', `${selector} unmounting existing component`);\n existingUnmount();\n }\n\n debug.log('mount', `${selector} mounting component`);\n\n // 2. Mount\n let userCleanup: undefined | (() => void);\n try {\n userCleanup = component($(this), props);\n } catch (e) {\n console.error('[atom-effect-jquery] Mount error:', e);\n return;\n }\n\n // 3. Optimized cleanup\n const fullCleanup = () => {\n // Atomic delete() acts as a high-performance guard against double-cleanup\n if (!mountedComponents.delete(this)) return;\n\n debug.log('mount', `${selector} full cleanup`);\n\n if (typeof userCleanup === 'function') {\n try {\n userCleanup();\n } catch (e) {\n console.error('[atom-effect-jquery] Cleanup error:', e);\n }\n }\n registry.cleanupTree(this);\n };\n\n mountedComponents.set(this, fullCleanup);\n registry.trackCleanup(this, fullCleanup);\n });\n};\n\n/**\n * Manually unmounts a component from the element.\n */\n$.fn.atomUnmount = function (): JQuery {\n return this.each(function () {\n const unmount = mountedComponents.get(this);\n if (unmount) unmount();\n });\n};\n","import { atom as createAtom, effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { LOG_PREFIXES, ROUTE_DEFAULTS } from './constants';\nimport { registry } from './registry';\nimport type { RouteConfig, RouteDefinition, Router, WritableAtom } from './types';\n\n/**\n * Log prefix for router warnings and errors.\n */\nconst LOG_PREFIX = LOG_PREFIXES.ROUTE;\n\n/**\n * Creates an SPA router with reactive state management.\n * Supports both hash-based and pushState-based (history) routing.\n *\n * This removes boilerplate from manual route handling by:\n * - Automatically tracking URL changes and updating the UI\n * - Managing template rendering with lifecycle hooks\n * - Handling active link states reactively\n * - Providing navigation guard support (onLeave)\n *\n * @param config - Router configuration\n * @returns Router instance with navigate, destroy methods and currentRoute atom\n *\n * @example\n * ```ts\n * const router = $.route({\n * target: '#app',\n * default: 'home',\n * routes: {\n * home: { template: '#tmpl-home' },\n * about: { template: '#tmpl-about' }\n * }\n * });\n */\nexport function route(config: RouteConfig): Router {\n // Destructure configuration with defaults\n const {\n target,\n default: defaultRoute,\n routes,\n notFound,\n mode = ROUTE_DEFAULTS.MODE,\n basePath = ROUTE_DEFAULTS.BASE_PATH,\n autoBindLinks = ROUTE_DEFAULTS.AUTO_BIND_LINKS,\n activeClass = ROUTE_DEFAULTS.ACTIVE_CLASS,\n beforeTransition,\n afterTransition,\n } = config;\n\n const isHistoryMode = mode === 'history';\n\n let isDestroyed = false;\n let previousRoute: string | null = null;\n let previousUrl: string = isHistoryMode\n ? window.location.pathname + window.location.search\n : window.location.hash;\n const cleanups: Array<() => void> = [];\n const boundLinks = new Set<HTMLElement>(); // Track links for cleanup via registry\n\n // DOM references\n const $target = $(target);\n\n // --- Mode-abstracted internal functions ---\n\n /**\n * Extracts route name from current URL.\n * Hash mode: parses window.location.hash\n * History mode: extracts from pathname after basePath\n */\n const getRouteName = (): string => {\n if (isHistoryMode) {\n let pathname = window.location.pathname;\n // Remove basePath prefix\n if (basePath && pathname.startsWith(basePath)) {\n pathname = pathname.substring(basePath.length);\n }\n // Remove leading slash and extract route name (before any query)\n const routeName = pathname.replace(/^\\//, '');\n return routeName || defaultRoute;\n }\n // Hash mode\n const hash = window.location.hash;\n const qIndex = hash.indexOf('?');\n const routeName = qIndex === -1 ? hash.substring(1) : hash.substring(1, qIndex);\n return routeName || defaultRoute;\n };\n\n /**\n * Parses query parameters from the current URL.\n * Hash mode: parses from hash string (after ?)\n * History mode: parses from window.location.search\n */\n const getQueryParams = (): Record<string, string> => {\n let raw: string;\n\n if (isHistoryMode) {\n raw = window.location.search.substring(1); // Remove leading '?'\n if (!raw) return {};\n } else {\n const hash = window.location.hash;\n const qIndex = hash.indexOf('?');\n if (qIndex === -1) return {};\n raw = hash.substring(qIndex + 1);\n }\n\n const sp = new URLSearchParams(raw);\n const params: Record<string, string> = Object.fromEntries(sp);\n\n // Warn about malformed percent-encoded sequences (e.g. %FF%FE)\n if (raw.includes('%')) {\n try {\n decodeURIComponent(raw);\n } catch (_e) {\n console.warn(`${LOG_PREFIX} Malformed URI component: ${raw}`);\n }\n }\n\n return params;\n };\n\n /**\n * Updates the URL to reflect a new route.\n * Hash mode: sets window.location.hash\n * History mode: calls history.pushState\n */\n const setUrl = (routeName: string): void => {\n if (isHistoryMode) {\n // Remove trailing slash from basePath if present\n const url = `${basePath.replace(/\\/$/, '')}/${routeName}`;\n history.pushState(null, '', url);\n previousUrl = url;\n } else {\n const hash = `#${routeName}`;\n previousUrl = hash;\n window.location.hash = hash;\n }\n };\n\n /**\n * Restores the URL when a navigation guard blocks the transition.\n * Hash mode: reverts window.location.hash\n * History mode: calls history.replaceState\n */\n const restoreUrl = (): void => {\n if (isHistoryMode) {\n history.replaceState(null, '', previousUrl);\n } else {\n window.location.hash = previousUrl;\n }\n };\n\n /**\n * Returns the current full URL string for comparison purposes.\n */\n const getCurrentUrl = (): string => {\n if (isHistoryMode) {\n return window.location.pathname + window.location.search;\n }\n return window.location.hash;\n };\n\n // --- End mode-abstracted functions ---\n\n /**\n * Resolves route configuration, falling back to notFound route if needed.\n */\n const getRouteConfig = (routeName: string): RouteDefinition | null => {\n let routeConfig = routes[routeName];\n\n // Fallback to notFound route if route doesn't exist\n if (!routeConfig && notFound) {\n routeConfig = routes[notFound];\n }\n\n if (!routeConfig) {\n console.warn(`${LOG_PREFIX} Route \"${routeName}\" not found and no notFound route configured`);\n return null;\n }\n\n return routeConfig;\n };\n\n /**\n * Renders template content into target container.\n * @returns true if template was found and rendered, false otherwise\n */\n const renderTemplate = (templateSelector: string): boolean => {\n const template = document.querySelector(templateSelector) as HTMLTemplateElement;\n\n if (!template?.content) {\n console.warn(`${LOG_PREFIX} Template \"${templateSelector}\" not found`);\n return false;\n }\n\n const clonedContent = template.content.cloneNode(true) as DocumentFragment;\n $target.append(clonedContent);\n return true;\n };\n\n const currentRoute: WritableAtom<string> = createAtom(getRouteName());\n\n /**\n * Renders the specified route, including lifecycle hooks and content.\n * This is the main rendering function that orchestrates the entire render cycle.\n */\n const renderRoute = (routeName: string): void => {\n if (isDestroyed) return;\n\n // Validate target element exists\n const container = $target[0];\n if (!container) {\n console.warn(`${LOG_PREFIX} Target element \"${target}\" not found`);\n return;\n }\n\n // Resolve route configuration\n const routeConfig = getRouteConfig(routeName);\n if (!routeConfig) return;\n\n // Parse query parameters\n const params = getQueryParams();\n\n // Call beforeTransition hook\n if (beforeTransition) {\n beforeTransition(previousRoute || routeName, routeName);\n }\n\n // Clear current content\n $target.empty();\n\n // Call onEnter hook and merge params\n let routeParams = params;\n if (routeConfig.onEnter) {\n const result = routeConfig.onEnter(params);\n if (result !== undefined) {\n routeParams = { ...params, ...result };\n }\n }\n\n // Render content (custom render or template)\n if (routeConfig.render) {\n routeConfig.render(container, routeName, routeParams);\n } else if (routeConfig.template) {\n renderTemplate(routeConfig.template);\n }\n\n // Call afterTransition hook\n if (afterTransition) {\n afterTransition(previousRoute || routeName, routeName);\n }\n\n // Update previous route for next transition\n previousRoute = routeName;\n };\n\n /**\n * Navigates to the specified route programmatically.\n * Respects navigation guards (onLeave hooks).\n */\n const navigate = (routeName: string): void => {\n if (isDestroyed) return;\n\n // Check if leaving current route is allowed\n const currentRouteName = currentRoute.value;\n const currentRouteConfig = routes[currentRouteName];\n\n if (currentRouteConfig?.onLeave) {\n const canLeave = currentRouteConfig.onLeave();\n if (canLeave === false) return; // Navigation blocked\n }\n\n // Resolve empty route name to default route, matching getRouteName behavior\n const resolved = routeName || defaultRoute;\n setUrl(resolved);\n currentRoute.value = resolved;\n };\n\n /**\n * Handles browser URL change events (hashchange or popstate).\n */\n const handleUrlChange = (): void => {\n if (isDestroyed) return;\n\n const currentUrl = getCurrentUrl();\n if (currentUrl === previousUrl) return; // No actual change, or already handled by navigate()\n\n const newRoute = getRouteName();\n const oldRouteName = currentRoute.value;\n\n if (oldRouteName !== newRoute) {\n // Check onLeave guard for user-driven navigation\n const oldRouteConfig = routes[oldRouteName];\n if (oldRouteConfig?.onLeave) {\n if (oldRouteConfig.onLeave() === false) {\n // Navigation blocked, revert URL\n restoreUrl();\n return;\n }\n }\n currentRoute.value = newRoute;\n } else {\n // Same route but URL changed (e.g., query params), manually re-render\n renderRoute(newRoute);\n }\n\n previousUrl = currentUrl;\n };\n\n /**\n * Sets up automatic binding for navigation links with data-route attribute.\n * Uses event delegation for clicks handling dynamic elements.\n * Uses MutationObserver for active state management of dynamic elements.\n */\n const setupAutoBindLinks = (): void => {\n if (!autoBindLinks) return;\n\n // 1. Event Delegation for Navigation (Handles future elements automatically)\n const delegateHandler = (e: JQuery.TriggeredEvent) => {\n e.preventDefault();\n const routeAttr = (e.currentTarget as HTMLElement).dataset.route;\n if (routeAttr != null) navigate(routeAttr);\n };\n\n $(document).on('click', '[data-route]', delegateHandler);\n\n cleanups.push(() => {\n $(document).off('click', '[data-route]', delegateHandler);\n });\n\n // 2. Active State Management via MutationObserver\n // We need to attach effects to any [data-route] element that appears in the DOM.\n const bindActiveState = (el: HTMLElement) => {\n if (boundLinks.has(el)) return;\n\n const routeAttr = el.dataset.route!;\n\n boundLinks.add(el);\n\n // Bind reactive active state tracking\n const activeEffect = effect(() => {\n const isActive = currentRoute.value === routeAttr;\n el.classList.toggle(activeClass, isActive);\n\n // Update aria-current for accessibility\n if (isActive) {\n el.setAttribute('aria-current', 'page');\n } else {\n el.removeAttribute('aria-current');\n }\n });\n\n // Register effect with registry\n registry.trackEffect(el, activeEffect);\n\n // Cleanup tracking\n registry.trackCleanup(el, () => {\n boundLinks.delete(el);\n });\n };\n\n // Initial bind\n for (const el of document.querySelectorAll<HTMLElement>('[data-route]')) {\n bindActiveState(el);\n }\n\n // Watch for new elements\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === 1) {\n // ELEMENT_NODE\n const el = node as HTMLElement;\n if (el.matches?.('[data-route]')) {\n bindActiveState(el);\n }\n // Check descendants\n if (el.querySelectorAll) {\n el.querySelectorAll('[data-route]').forEach((child) =>\n bindActiveState(child as HTMLElement)\n );\n }\n }\n });\n }\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n cleanups.push(() => observer.disconnect());\n };\n\n /**\n * Cleans up all event listeners and effects.\n * Safe to call multiple times.\n */\n const destroy = (): void => {\n if (isDestroyed) return;\n isDestroyed = true;\n\n // Cleanup router-level effects (event listener, render effect)\n cleanups.forEach((cleanup) => cleanup());\n cleanups.length = 0;\n\n // Cleanup bound links via registry\n // This handles both click handlers and active state effects\n boundLinks.forEach((el) => registry.cleanup(el));\n boundLinks.clear();\n };\n\n // Set up URL change listener (hashchange for hash mode, popstate for history mode)\n const eventName = isHistoryMode ? 'popstate' : 'hashchange';\n window.addEventListener(eventName, handleUrlChange);\n cleanups.push(() => window.removeEventListener(eventName, handleUrlChange));\n\n // Initialize: Set up reactive rendering effect\n const renderEffect = effect(() => {\n renderRoute(currentRoute.value);\n });\n cleanups.push(() => renderEffect.dispose());\n\n // Auto-bind navigation links\n setupAutoBindLinks();\n\n // Auto-cleanup router if target element is removed\n if ($target[0]) {\n registry.trackCleanup($target[0], destroy);\n }\n\n return {\n currentRoute,\n navigate,\n destroy,\n };\n}\n\n/**\n * Register as jQuery static method.\n */\n$.extend({\n route,\n});\n","import { computed } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { ComputedAtom, FetchOptions } from './types';\n\n/**\n * Creates a reactive fetch atom that auto-refetches when reactive dependencies change.\n *\n * Wraps core's async `computed` with jQuery's `$.ajax`.\n * Returns a standard `ComputedAtom<T>` with `isPending`, `hasError`, `invalidate()`, etc.\n */\nfunction atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T> {\n const { defaultValue, transform, method, headers, ajaxOptions } = options;\n const getUrl = typeof urlOrFn === 'function' ? urlOrFn : () => urlOrFn;\n\n return computed(\n async () => {\n const url = getUrl();\n const raw = await $.ajax({ ...ajaxOptions, url, method, headers });\n return transform ? transform(raw) : (raw as T);\n },\n { defaultValue, lazy: false }\n );\n}\n\n$.extend({ atomFetch });\n","import { batch } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { registry } from './registry';\n\n/** Generic event handler type matching jQuery's internal handler signature */\ntype EventHandler = JQuery.EventHandlerBase<unknown, JQuery.TriggeredEvent>;\n\n/**\n * WeakMap to store strict association between original handlers and batched wrappers.\n * This ensures that .off() works correctly when passing the original handler.\n */\nconst handlerMap = new WeakMap<EventHandler, EventHandler>();\n\nlet isjQueryOverridesEnabled = false;\n\nconst getWrappedHandler = (fn: EventHandler): EventHandler => {\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 handlerMap.set(fn, wrapped);\n }\n return wrapped;\n};\n\n/**\n * Patches jQuery methods to integrate with the reactive system.\n */\nexport function enablejQueryOverrides() {\n if (isjQueryOverridesEnabled) return;\n isjQueryOverridesEnabled = true;\n\n const originalOn = $.fn.on;\n const originalOff = $.fn.off;\n const originalRemove = $.fn.remove;\n const originalEmpty = $.fn.empty;\n const originalDetach = $.fn.detach;\n\n // ========== Lifecycle Overrides ==========\n\n // .remove() - Delete element + Unsubscribe\n $.fn.remove = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n for (let i = 0, len = targets.length; i < len; i++) {\n const el = targets[i];\n if (el) {\n registry.cleanupTree(el);\n registry.markIgnored(el);\n }\n }\n return originalRemove.call(this, selector);\n };\n\n // .empty() - Delete children + Recursive Unsubscribe\n $.fn.empty = function (this: JQuery) {\n for (let i = 0, len = this.length; i < len; i++) {\n const el = this[i];\n if (el) registry.cleanupDescendants(el);\n }\n return originalEmpty.call(this);\n };\n\n // .detach() - Remove from DOM + Keep Subscription\n $.fn.detach = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n for (let i = 0, len = targets.length; i < len; i++) {\n const el = targets[i];\n if (el) registry.keep(el);\n }\n return originalDetach.call(this, selector);\n };\n\n // ========== Event Overrides ==========\n\n // Patch .on()\n $.fn.on = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n\n if (types && typeof types === 'object') {\n const map = types as Record<string, EventHandler>;\n const newMap: Record<string, EventHandler> = {};\n for (const key in map) {\n const handler = map[key];\n if (handler) {\n newMap[key] = getWrappedHandler(handler);\n }\n }\n args[0] = newMap;\n } else {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = getWrappedHandler(args[i] as EventHandler);\n break;\n }\n }\n }\n\n return originalOn.apply(this, args as Parameters<typeof originalOn>);\n };\n\n // Patch .off()\n $.fn.off = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n\n if (types && typeof types === 'object') {\n const map = types as Record<string, EventHandler>;\n const newMap: Record<string, EventHandler> = {};\n for (const key in map) {\n const handler = map[key];\n if (handler) {\n newMap[key] = handlerMap.get(handler) || handler;\n }\n }\n args[0] = newMap;\n } else {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = handlerMap.get(args[i] as EventHandler) || args[i];\n break;\n }\n }\n }\n\n return originalOff.apply(this, args as Parameters<typeof originalOff>);\n };\n}\n","/**\n * atom-effect-jquery\n *\n * Brings reactivity to jQuery.\n *\n * Features:\n * - Full CJK IME Support (Input Method Editor).\n * - Auto-cleanup via MutationObserver (No memory leaks).\n * - Debug Mode: Console logging + Visual Highlighting.\n */\n\nimport $ from 'jquery';\n\n// Register plugins\nimport './namespace';\nimport './chainable';\nimport './unified';\nimport './list';\nimport './mount';\nimport './route';\nimport './fetch';\n\nimport { enablejQueryOverrides } from './jquery-patch';\nimport { disableAutoCleanup, enableAutoCleanup, registry } from './registry';\n\n// Auto-enable on DOM ready\n$(() => {\n enablejQueryOverrides();\n enableAutoCleanup(document.body);\n});\n\n// Explicit import support\nexport {\n atom,\n batch,\n computed,\n effect,\n untracked,\n} from '@but212/atom-effect';\n// Optional: Auto-batching for jQuery events\nexport { enablejQueryOverrides } from './jquery-patch';\n// Export types\nexport type {\n BindingOptions,\n ComponentFn,\n ComputedAtom,\n ListOptions,\n ReadonlyAtom,\n RouteConfig,\n RouteDefinition,\n Router,\n WritableAtom,\n} from './types';\n\nexport { registry, enableAutoCleanup, disableAutoCleanup };\nexport default $;\n"],"names":["A","l","K","a","p","ot","X","B","J","ht","C","e","E","g","m","ct","ut","U","L","i","lt","_t","Z","n","r","o","h","M","G","I","v","c","D","tt","et","x","z","w","H","k","st","at","Q","Y","ft","Et","b","V","it","nt","_","Tt","j","dt","Ot","pt","u","f","bt","At","rt","q","$","N","S","R","d","O","y","T","P","It","St","gt","F","yt","W","Dt","Rt","kt","isReactive","value","isAtom","isComputed","getSelector","el","dom","id","tagName","classes","res","len","cls","sanitizeHtml","html","safe","dangerousTagPattern","prev","protocolRegex","dangerousDataUriRegex","URL_ATTRS","DANGEROUS_PROTOCOL_RE","isDangerousUrl","attrName","isDangerousCssValue","shallowEqual","keysA","keysB","objB","key","getLIS","arr","predecessors","result","resultLen","val","lastIdx","left","right","mid","midIdx","leftIdx","lis","curr","getInitialDebugState","flag","debugEnabled","debug","type","args","name","oldVal","newVal","$el","highlightElement","selector","HIGHLIGHT_CLASS","styleInjected","injectHighlightStyle","style","highlightTimers","existing","atom","initialValue","options","createAtom","nextTick","resolve","computed","effect","batch","untracked","AES_BOUND_CLASS","LOG_PREFIXES","ROUTE_DEFAULTS","INPUT_DEFAULTS","DANGEROUS_PROPS","ERROR_MESSAGES","raw","prop","index","AES_BOUND","BindingRegistry","node","fx","record","fn","effects","cleanups","children","child","registry","observer","enableAutoCleanup","root","mutations","removedNodes","rLen","disableAutoCleanup","registerReactiveEffect","source","updater","debugType","BindingFlags","createInputBindingState","applyInputBinding","debounceMs","event","parse","format","equal","state","syncAtomFromDom","currentRaw","parsed","onBlur","formatted","onInput","handlers","currentVal","start","end","camelCache","getCamelCase","cached","createContext","_$el","bindText","ctx","bindHtml","sanitized","bindClass","classMap","className","bindCss","cssMap","camel","isArr","unit","strVal","bindAttr","attrMap","c0","bindProp","propMap","bindVisibility","condition","invert","label","visible","bindVal","cfg","fxFn","cleanup","bindChecked","handler","current","bindEvents","eventMap","listener","formatter","render","bind","update","onAdd","onRemove","empty","getKey","item","_index","$container","containerSelector","itemMap","removingKeys","oldKeys","$emptyEl","items","itemCount","safeEmpty","oldIndexMap","oldLen","newKeys","newKeySet","newIndices","entry","cleanupItem","lisArr","lisIdx","nextNode","oldItem","rawRender","safeRender","$newEl","needsNextNodeUpdate","currentEl","rendered","safeRendered","mountedComponents","component","props","existingUnmount","userCleanup","fullCleanup","unmount","LOG_PREFIX","route","config","target","defaultRoute","routes","notFound","mode","basePath","autoBindLinks","activeClass","beforeTransition","afterTransition","isHistoryMode","isDestroyed","previousRoute","previousUrl","boundLinks","$target","getRouteName","pathname","hash","qIndex","getQueryParams","sp","params","setUrl","routeName","url","restoreUrl","getCurrentUrl","getRouteConfig","routeConfig","renderTemplate","templateSelector","template","clonedContent","currentRoute","renderRoute","container","routeParams","navigate","currentRouteName","currentRouteConfig","resolved","handleUrlChange","currentUrl","newRoute","oldRouteName","oldRouteConfig","setupAutoBindLinks","delegateHandler","routeAttr","bindActiveState","activeEffect","isActive","mutation","destroy","eventName","renderEffect","atomFetch","urlOrFn","defaultValue","transform","method","headers","ajaxOptions","getUrl","handlerMap","isjQueryOverridesEnabled","getWrappedHandler","wrapped","enablejQueryOverrides","originalOn","originalOff","originalRemove","originalEmpty","originalDetach","targets","types","map","newMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../core/dist/index.mjs","../src/utils.ts","../src/debug.ts","../src/namespace.ts","../src/constants.ts","../src/registry.ts","../src/effect-factory.ts","../src/types.ts","../src/input-binding.ts","../src/unified.ts","../src/chainable.ts","../src/list.ts","../src/mount.ts","../src/route.ts","../src/fetch.ts","../src/jquery-patch.ts","../src/index.ts"],"sourcesContent":["const A = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, l = {\n DISPOSED: 1,\n EXECUTING: 8\n}, K = {\n DISPOSED: 1,\n /** Marker bit: identifies this node as a computed. */\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}, a = {\n DISPOSED: 1,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, Ct = {\n MAX_SIZE: 1e3,\n WARMUP_SIZE: 100,\n ENABLE_STATS: !1\n}, p = {\n // Infinite loop protection\n MAX_EXECUTIONS_PER_SECOND: 1e3,\n MAX_EXECUTIONS_PER_EFFECT: 100,\n // Batch processing limits to prevent blocking the main thread for too long\n MAX_EXECUTIONS_PER_FLUSH: 1e4,\n MAX_FLUSH_ITERATIONS: 1e3,\n MIN_FLUSH_ITERATIONS: 10,\n // Memory management\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, ot = {\n WARN_INFINITE_LOOP: !0,\n EFFECT_FREQUENCY_WINDOW: 1e3\n}, X = {\n MAX_ASYNC_RETRIES: 3,\n MAX_PROMISE_ID: Number.MAX_SAFE_INTEGER - 1\n}, B = 1073741823, J = typeof process < \"u\" && process.env && !1 || !1, ht = Object.freeze([]);\nclass C extends Error {\n constructor(t, e = null, s = !0) {\n super(t), this.cause = e, this.recoverable = s, this.name = \"AtomError\";\n }\n}\nclass E extends C {\n constructor(t, e = null) {\n super(t, e, !0), this.name = \"ComputedError\";\n }\n}\nclass g extends C {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"EffectError\";\n }\n}\nclass m extends C {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"SchedulerError\";\n }\n}\nconst ct = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), ut = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), U = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), L = {\n // Dev mode flag\n enabled: J,\n warnInfiniteLoop: ot.WARN_INFINITE_LOOP,\n warn(i, t) {\n },\n checkCircular(i, t) {\n if (i === t)\n throw new E(\"Direct circular dependency detected\");\n },\n attachDebugInfo(i, t, e) {\n },\n getDebugName: (i) => i?.[ct],\n getDebugType: (i) => i?.[ut]\n};\nlet lt = 1;\nconst _t = () => lt++;\nfunction Z(i, t, e) {\n if (typeof t == \"function\") {\n const n = t;\n for (let r = 0, o = e.length; r < o; r++) {\n const h = e[r];\n if (h && h.fn === n) return;\n }\n e.push(new M(n, void 0));\n return;\n }\n if (\"addDependency\" in t) {\n t.addDependency(i);\n return;\n }\n const s = t;\n for (let n = 0, r = e.length; n < r; n++) {\n const o = e[n];\n if (o && o.sub === s) return;\n }\n e.push(new M(void 0, s));\n}\nfunction G(i, t, e) {\n const s = /* @__PURE__ */ new Map();\n for (let n = 0, r = t.length; n < r; n++) {\n const o = t[n];\n o?.unsub && s.set(o.node, o.unsub);\n }\n for (let n = 0, r = i.length; n < r; n++) {\n const o = i[n];\n if (!o) continue;\n const h = o.node, I = s.get(h);\n I !== void 0 ? (o.unsub = I, s.delete(h)) : (L.checkCircular(h, e), o.unsub = h.subscribe(e));\n }\n for (const n of s.values())\n n();\n}\nclass v {\n constructor(t, e, s = void 0) {\n this.node = t, this.version = e, this.unsub = s;\n }\n}\nclass M {\n constructor(t, e) {\n this.fn = t, this.sub = e;\n }\n}\nconst c = {\n // Computed Errors\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 Errors\n ATOM_SUBSCRIBER_MUST_BE_FUNCTION: \"Subscriber must be a function or Subscriber object\",\n ATOM_INDIVIDUAL_SUBSCRIBER_FAILED: \"Subscriber execution failed\",\n // Effect Errors\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 Errors\n SCHEDULER_FLUSH_OVERFLOW: (i, t) => `Maximum flush iterations (${i}) exceeded. ${t} jobs dropped. Possible infinite loop.`,\n // System / Debug\n CALLBACK_ERROR_IN_ERROR_HANDLER: \"Exception encountered in onError handler\",\n // Effect frequency\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};\nfunction D(i, t, e) {\n if (i instanceof C)\n return i;\n const s = i instanceof Error, n = s ? i.message : String(i), r = s ? i : void 0, h = `${s ? i.constructor.name : \"Unexpected error\"} (${e}): ${n}`;\n return new t(h, r);\n}\nclass tt {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = -1, this.id = _t() & B;\n }\n}\nclass et extends tt {\n /**\n * Adds subscriber.\n */\n subscribe(t) {\n const e = typeof t == \"function\";\n if (!e && (!t || typeof t.execute != \"function\"))\n throw D(\n new TypeError(\"Invalid subscriber\"),\n C,\n c.ATOM_SUBSCRIBER_MUST_BE_FUNCTION\n );\n const s = this._subscribers;\n for (let r = 0, o = s.length; r < o; r++) {\n const h = s[r];\n if (h && (e ? h.fn === t : h.sub === t))\n return () => {\n };\n }\n const n = new M(\n e ? t : void 0,\n e ? void 0 : t\n );\n return s.push(n), () => this._unsubscribe(n);\n }\n _unsubscribe(t) {\n const e = this._subscribers, s = e.indexOf(t);\n if (s === -1) return;\n const n = e.pop();\n s < e.length && n && (e[s] = n);\n }\n subscriberCount() {\n return this._subscribers.length;\n }\n _notifySubscribers(t, e) {\n if (this._subscribers.length === 0) return;\n const s = this._subscribers.slice(0), n = s.length;\n for (let r = 0; r < n; r++) {\n const o = s[r];\n if (o)\n try {\n o.fn ? o.fn(t, e) : o.sub && o.sub.execute();\n } catch (h) {\n this._handleNotifyError(h);\n }\n }\n }\n _handleNotifyError(t) {\n console.error(D(t, C, c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n}\nlet x = 0;\nconst z = () => (x = x + 1 & B || 1, x), w = (i) => i + 1 & B;\nlet H = 0, k = !1, st = 0;\nconst at = () => st;\nfunction Q() {\n return k ? !1 : (k = !0, st = z(), H = 0, !0);\n}\nconst Y = () => {\n k = !1;\n}, ft = () => k ? ++H : 0;\nclass Et {\n constructor() {\n this._queueBuffer = [[], []], this._bufferIndex = 0, this._size = 0, this._epoch = 0, this._isProcessing = !1, this._isBatching = !1, this._isFlushingSync = !1, this._batchDepth = 0, this._batchQueue = [], this._batchQueueSize = 0, this._maxFlushIterations = p.MAX_FLUSH_ITERATIONS, this.onOverflow = null, this._boundRunLoop = this._runLoop.bind(this);\n }\n get phase() {\n return this._isProcessing || this._isFlushingSync ? 2 : this._isBatching ? 1 : 0;\n }\n get queueSize() {\n return this._size;\n }\n get isBatching() {\n return this._isBatching;\n }\n /**\n * Schedules job.\n */\n schedule(t) {\n if (t._nextEpoch !== this._epoch) {\n if (t._nextEpoch = this._epoch, this._isBatching || this._isFlushingSync) {\n this._batchQueue[this._batchQueueSize++] = t;\n return;\n }\n this._queueBuffer[this._bufferIndex][this._size++] = t, this._isProcessing || this._flush();\n }\n }\n /**\n * Triggers flush.\n */\n _flush() {\n this._isProcessing || this._size === 0 || (this._isProcessing = !0, queueMicrotask(this._boundRunLoop));\n }\n /**\n * Scheduler loop.\n */\n _runLoop() {\n try {\n if (this._size === 0) return;\n const t = Q();\n this._drainQueue(), t && Y();\n } finally {\n this._isProcessing = !1, this._size > 0 && !this._isBatching && this._flush();\n }\n }\n _flushSync() {\n this._isFlushingSync = !0;\n const t = Q();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, t && Y();\n }\n }\n _mergeBatchQueue() {\n if (this._batchQueueSize === 0) return;\n const t = ++this._epoch, e = this._batchQueue, s = this._queueBuffer[this._bufferIndex];\n let n = this._size;\n for (let r = 0; r < this._batchQueueSize; r++) {\n const o = e[r];\n o._nextEpoch !== t && (o._nextEpoch = t, s[n++] = o);\n }\n this._size = n, this._batchQueueSize = 0, e.length > p.BATCH_QUEUE_SHRINK_THRESHOLD && (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, e = this._queueBuffer[t], s = this._size;\n this._bufferIndex = t ^ 1, this._size = 0, this._epoch++;\n for (let n = 0; n < s; n++)\n try {\n e[n]();\n } catch (r) {\n console.error(new m(\"Error occurred during scheduler execution\", r));\n }\n e.length = 0;\n }\n _handleFlushOverflow() {\n const t = this._size + this._batchQueueSize;\n if (console.error(\n new m(\n c.SCHEDULER_FLUSH_OVERFLOW(this._maxFlushIterations, t)\n )\n ), this._size = 0, this._queueBuffer[this._bufferIndex].length = 0, this._batchQueueSize = 0, this.onOverflow)\n try {\n this.onOverflow(t);\n } catch {\n }\n }\n startBatch() {\n this._batchDepth++, this._isBatching = !0;\n }\n endBatch() {\n this._batchDepth !== 0 && --this._batchDepth === 0 && (this._flushSync(), this._isBatching = !1);\n }\n setMaxFlushIterations(t) {\n if (t < p.MIN_FLUSH_ITERATIONS)\n throw new m(\n `Max flush iterations must be at least ${p.MIN_FLUSH_ITERATIONS}`\n );\n this._maxFlushIterations = t;\n }\n}\nconst b = new Et(), V = /* @__PURE__ */ Symbol.for(\"atom-effect/atom\"), it = /* @__PURE__ */ Symbol.for(\"atom-effect/computed\"), nt = /* @__PURE__ */ Symbol.for(\"atom-effect/effect\"), _ = {\n /** Active listener. */\n current: null,\n /**\n * Executes in context.\n *\n * @param listener - The subscriber.\n * @param fn - The logic to execute.\n * @returns The result of `fn`.\n */\n run(i, t) {\n const e = this.current;\n this.current = i;\n try {\n return t();\n } finally {\n this.current = e;\n }\n }\n};\nfunction Tt(i) {\n const t = _.current;\n if (t === null) return i();\n _.current = null;\n try {\n return i();\n } finally {\n _.current = t;\n }\n}\nvar j;\nclass dt extends et {\n constructor(t, e) {\n super(), this._pendingOldValue = void 0, this._notifyTask = () => this._flushNotifications(), this._subscribers = [], this[j] = !0, this._value = t, e && (this.flags |= a.SYNC), L.attachDebugInfo(this, \"atom\", this.id);\n }\n get value() {\n const t = _.current;\n return t && Z(this, t, this._subscribers), this._value;\n }\n set value(t) {\n const e = this._value;\n if (Object.is(e, t)) return;\n this._value = t, this.version = w(this.version);\n const s = this.flags;\n if (!(this._subscribers.length === 0 || s & a.NOTIFICATION_SCHEDULED)) {\n if (this._pendingOldValue = e, this.flags = s | a.NOTIFICATION_SCHEDULED, s & a.SYNC && !b.isBatching) {\n this._flushNotifications();\n return;\n }\n b.schedule(this._notifyTask);\n }\n }\n /**\n * Triggers subscribers.\n */\n _flushNotifications() {\n const t = this.flags;\n if (!(t & a.NOTIFICATION_SCHEDULED) || t & a.DISPOSED)\n return;\n const e = this._pendingOldValue;\n this._pendingOldValue = void 0, this.flags &= -17, this._notifySubscribers(this._value, e);\n }\n peek() {\n return this._value;\n }\n dispose() {\n this.flags & a.DISPOSED || (this._subscribers.length = 0, this.flags |= a.DISPOSED, this._value = void 0, this._pendingOldValue = void 0);\n }\n [(j = V, Symbol.dispose)]() {\n this.dispose();\n }\n}\nfunction Ot(i, t = {}) {\n return new dt(i, t.sync ?? !1);\n}\nclass pt {\n /**\n * @param limit - Max unique arrays to hold (default: 50). Prevents the pool itself from consuming too much memory.\n * @param capacity - Max length of an array to accept (default: 256).\n * @param enableStats - Force-enable stats even in production (default: false).\n */\n constructor(t = 50, e = 256, s = !1) {\n this.limit = t, this.capacity = e, this.pool = [], this.stats = null, this.stats = s ? {\n acquired: 0,\n released: 0,\n rejected: { frozen: 0, tooLarge: 0, poolFull: 0 }\n } : null;\n }\n /**\n * Acquires array.\n */\n acquire() {\n return this.stats && this.stats.acquired++, this.pool.pop() ?? [];\n }\n /**\n * Releases array.\n *\n * @param arr - Array to release.\n * @param emptyConst - Optional empty constant.\n */\n release(t, e) {\n if (!(e && t === e)) {\n if (t.length > this.capacity) {\n this.stats && this.stats.rejected.tooLarge++;\n return;\n }\n if (this.pool.length >= this.limit) {\n this.stats && this.stats.rejected.poolFull++;\n return;\n }\n if (Object.isFrozen(t)) {\n this.stats && this.stats.rejected.frozen++;\n return;\n }\n t.length = 0, this.pool.push(t), this.stats && this.stats.released++;\n }\n }\n /**\n * Pool stats.\n */\n getStats() {\n if (!this.stats) return null;\n const { acquired: t, released: e, rejected: s } = this.stats, n = t - e - (s.frozen + s.tooLarge + s.poolFull);\n return {\n acquired: t,\n released: e,\n rejected: { ...s },\n leaked: n,\n poolSize: this.pool.length\n };\n }\n /**\n * Resets pool.\n */\n reset() {\n this.pool.length = 0, this.stats && (this.stats = {\n acquired: 0,\n released: 0,\n rejected: { frozen: 0, tooLarge: 0, poolFull: 0 }\n });\n }\n}\nconst u = Object.freeze(\n []\n), f = new pt();\nfunction bt(i) {\n return i !== null && typeof i == \"object\" && V in i;\n}\nfunction At(i) {\n return i !== null && typeof i == \"object\" && it in i;\n}\nfunction Nt(i) {\n return i !== null && typeof i == \"object\" && nt in i;\n}\nfunction rt(i) {\n return i !== null && typeof i == \"object\" && typeof i.then == \"function\";\n}\nvar q, $;\nconst { IDLE: N, DIRTY: S, PENDING: R, RESOLVED: d, REJECTED: O, HAS_ERROR: y, RECOMPUTING: T, DISPOSED: P, IS_COMPUTED: It } = K;\nfunction St(i) {\n return i & d ? A.RESOLVED : i & R ? A.PENDING : i & O ? A.REJECTED : A.IDLE;\n}\nclass gt extends et {\n constructor(t, e = {}) {\n if (typeof t != \"function\") throw new E(c.COMPUTED_MUST_BE_FUNCTION);\n super(), this[$] = !0, this[q] = !0, this._error = null, this._promiseId = 0, this._subscribers = [], this._links = u, this._asyncStartAggregateVersion = 0, this._asyncRetryCount = 0, this._trackEpoch = -1, this._trackLinks = u, this._trackCount = 0, this._value = void 0, this.flags = It | S | N, this._equal = e.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in e ? e.defaultValue : U, this._onError = e.onError ?? null;\n const s = e.maxAsyncRetries;\n if (this._maxAsyncRetries = s != null && s >= 0 ? s : X.MAX_ASYNC_RETRIES, L.attachDebugInfo(this, \"computed\", this.id), e.lazy === !1)\n try {\n this._recompute();\n } catch {\n }\n }\n _track() {\n const t = _.current;\n t && Z(this, t, this._subscribers);\n }\n get value() {\n this._track();\n const t = this.flags;\n if ((t & (d | S | N)) === d)\n return this._value;\n if (t & P)\n throw new E(c.COMPUTED_DISPOSED);\n if (t & T) {\n if (this._defaultValue !== U) return this._defaultValue;\n throw new E(c.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if (t & (S | N) && (this._recompute(), this.flags & d))\n return this._value;\n const e = this._defaultValue, s = e !== U;\n if (this.flags & R) {\n if (s) return e;\n throw new E(c.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if (this.flags & O) {\n if (s) return e;\n throw this._error;\n }\n return this._value;\n }\n peek() {\n return this._value;\n }\n get state() {\n return this._track(), St(this.flags);\n }\n get hasError() {\n if (this._track(), this.flags & (O | y)) return !0;\n const t = this._links;\n for (let e = 0, s = t.length; e < s; e++) {\n const n = t[e]?.node;\n if (n && n.flags & y) return !0;\n }\n return !1;\n }\n get isValid() {\n return !this.hasError;\n }\n get errors() {\n if (this._track(), !this.hasError) return ht;\n const t = [];\n this._error && t.push(this._error);\n const e = this._links;\n for (let s = 0, n = e.length; s < n; s++) {\n const r = e[s].node;\n if (r.flags & y) {\n const h = r.errors;\n if (h.length > 0)\n for (let I = 0; I < h.length; I++) {\n const F = h[I];\n F && t.indexOf(F) === -1 && t.push(F);\n }\n }\n }\n return Object.freeze(t);\n }\n get lastError() {\n return this._track(), this._error;\n }\n get isPending() {\n return this._track(), (this.flags & R) !== 0;\n }\n get isResolved() {\n return this._track(), (this.flags & d) !== 0;\n }\n invalidate() {\n this._markDirty();\n }\n dispose() {\n if (this.flags & P) return;\n const t = this._links;\n if (t !== u) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e].unsub?.();\n f.release(t), this._links = u;\n }\n this._subscribers.length = 0, this.flags = P | S | N, this._error = null, this._value = void 0;\n }\n [($ = V, q = it, Symbol.dispose)]() {\n this.dispose();\n }\n addDependency(t) {\n if (t._lastSeenEpoch !== this._trackEpoch) {\n if (t._lastSeenEpoch = this._trackEpoch, this._trackCount < this._trackLinks.length) {\n const e = this._trackLinks[this._trackCount];\n e.node = t, e.version = t.version;\n } else\n this._trackLinks.push(new v(t, t.version));\n this._trackCount++;\n }\n }\n _recompute() {\n if (this.flags & T) return;\n this.flags |= T;\n const t = this._links;\n this._trackEpoch = z(), this._trackLinks = f.acquire(), this._trackCount = 0;\n let e = !1;\n try {\n const s = _.run(this, this._fn);\n this._trackLinks.length = this._trackCount, G(this._trackLinks, t, this), this._links = this._trackLinks, e = !0, rt(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!e)\n try {\n this._trackLinks.length = this._trackCount, G(this._trackLinks, t, this), this._links = this._trackLinks, e = !0;\n } catch {\n }\n this._handleError(s, c.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n e && t !== u ? f.release(t) : e || f.release(this._trackLinks), this._trackEpoch = -1, this._trackLinks = u, this._trackCount = 0, this.flags &= ~T;\n }\n }\n _handleAsyncComputation(t) {\n this.flags = (this.flags | R) & -217, this._notifySubscribers(void 0, void 0), this._asyncStartAggregateVersion = this._captureVersionSnapshot(), this._asyncRetryCount = 0, this._promiseId = (this._promiseId + 1) % X.MAX_PROMISE_ID;\n const e = this._promiseId;\n t.then(\n (s) => {\n if (e === this._promiseId) {\n if (this._captureVersionSnapshot() !== this._asyncStartAggregateVersion)\n return this._asyncRetryCount++ < this._maxAsyncRetries ? this._markDirty() : this._handleError(\n new E(\n `Async drift threshold exceeded after ${this._maxAsyncRetries} retries.`\n ),\n c.COMPUTED_ASYNC_COMPUTATION_FAILED\n );\n this._finalizeResolution(s), this._notifySubscribers(s, void 0);\n }\n },\n (s) => e === this._promiseId && this._handleError(s, c.COMPUTED_ASYNC_COMPUTATION_FAILED)\n );\n }\n _captureVersionSnapshot() {\n let t = 0;\n const e = this._links;\n for (let s = 0, n = e.length; s < n; s++)\n t = (t << 5) - t + e[s].node.version | 0;\n return t;\n }\n _handleError(t, e, s = !1) {\n const n = D(t, E, e);\n if (!s && !(this.flags & O) && (this.version = w(this.version)), this._error = n, this.flags = this.flags & -121 | O | y, this._onError)\n try {\n this._onError(n);\n } catch (r) {\n console.error(c.CALLBACK_ERROR_IN_ERROR_HANDLER, r);\n }\n if (s) throw n;\n this._notifySubscribers(void 0, void 0);\n }\n _finalizeResolution(t) {\n (!(this.flags & d) || !this._equal(this._value, t)) && (this.version = w(this.version)), this._value = t, this._error = null, this.flags = (this.flags | d) & -697;\n }\n execute() {\n this._markDirty();\n }\n /** @internal */\n _markDirty() {\n this.flags & (T | S) || (this.flags |= S, this._notifySubscribers(void 0, void 0));\n }\n}\nfunction yt(i, t = {}) {\n return new gt(i, t);\n}\nvar W;\nclass Dt extends tt {\n constructor(t, e = {}) {\n super(), this[W] = !0, this._cleanup = null, this._links = u, this._nextLinks = null, this._prevLinks = u, this._currentEpoch = -1, this._lastFlushEpoch = -1, this._executionsInEpoch = 0, this._executionCount = 0, this._windowStart = 0, this._windowCount = 0, this._execId = 0, this._fn = t, this._onError = e.onError ?? null, this._sync = e.sync ?? !1, this._maxExecutions = e.maxExecutionsPerSecond ?? p.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = e.maxExecutionsPerFlush ?? p.MAX_EXECUTIONS_PER_EFFECT, this._sync ? (this._executeTask = void 0, this._notifyCallback = () => this.execute()) : (this._executeTask = () => this.execute(), this._notifyCallback = () => b.schedule(this._executeTask)), L.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.flags & l.DISPOSED)\n throw new g(c.EFFECT_DISPOSED);\n this.execute(!0);\n }\n dispose() {\n this.flags & l.DISPOSED || (this.flags |= l.DISPOSED, this._execCleanup(), this._unsubLinks(this._links), this._links !== u && f.release(this._links), this._links = u, this._prevLinks = u);\n }\n [(W = nt, Symbol.dispose)]() {\n this.dispose();\n }\n addDependency(t) {\n if (!(this.flags & l.EXECUTING)) return;\n const e = this._currentEpoch;\n if (t._lastSeenEpoch === e) return;\n t._lastSeenEpoch = e;\n const s = this._nextLinks, n = this._prevLinks;\n for (let r = 0, o = n.length; r < o; r++) {\n const h = n[r];\n if (h && h.node === t && h.unsub) {\n h.version = t.version, s.push(h), n[r] = null;\n return;\n }\n }\n try {\n const r = t.subscribe(this._notifyCallback);\n s.push(new v(t, t.version, r));\n } catch (r) {\n const o = D(r, g, c.EFFECT_EXECUTION_FAILED);\n if (console.error(o), this._onError)\n try {\n this._onError(o);\n } catch {\n }\n s.push(new v(t, t.version, void 0));\n }\n }\n /**\n * Executes effect with tracking.\n */\n execute(t = !1) {\n if (this.flags & (l.DISPOSED | l.EXECUTING) || !t && this._links.length > 0 && !this._isDirty()) return;\n this._checkInfiniteLoops(), this.flags |= l.EXECUTING, this._execCleanup(), this._prevLinks = this._links;\n const e = f.acquire();\n this._nextLinks = e, this._currentEpoch = z();\n let s = !1;\n try {\n const n = _.run(this, this._fn);\n this._links = e, s = !0, rt(n) ? this._handleAsyncResult(n) : this._cleanup = typeof n == \"function\" ? n : null;\n } catch (n) {\n this._links = e, s = !0, this._handleExecutionError(n), this._cleanup = null;\n } finally {\n this._finalizeDependencies(s, this._prevLinks, e), this.flags &= -9;\n }\n }\n _handleAsyncResult(t) {\n const e = ++this._execId;\n t.then(\n (s) => {\n if (e !== this._execId || this.flags & l.DISPOSED) {\n if (typeof s == \"function\")\n try {\n s();\n } catch (n) {\n this._handleExecutionError(n, c.EFFECT_CLEANUP_FAILED);\n }\n return;\n }\n typeof s == \"function\" && (this._cleanup = s);\n },\n (s) => e === this._execId && this._handleExecutionError(s)\n );\n }\n _finalizeDependencies(t, e, s) {\n if (this._nextLinks = null, this._prevLinks = u, t) {\n for (let n = 0, r = e.length; n < r; n++) {\n const o = e[n];\n o && o.unsub?.();\n }\n e !== u && f.release(e);\n } else\n this._unsubLinks(s), f.release(s);\n }\n _unsubLinks(t) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e]?.unsub?.();\n }\n _isDirty() {\n const t = this._links, e = _.current;\n _.current = null;\n try {\n for (let s = 0, n = t.length; s < n; s++) {\n const r = t[s], o = r.node;\n if (o.flags & K.IS_COMPUTED)\n try {\n o.value;\n } catch {\n return !0;\n }\n if (o.version !== r.version) return !0;\n }\n return !1;\n } finally {\n _.current = e;\n }\n }\n _execCleanup() {\n if (this._cleanup) {\n try {\n this._cleanup();\n } catch (t) {\n this._handleExecutionError(t, c.EFFECT_CLEANUP_FAILED);\n }\n this._cleanup = null;\n }\n }\n _checkInfiniteLoops() {\n const t = at();\n this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), ft() > p.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++;\n }\n get isDisposed() {\n return (this.flags & l.DISPOSED) !== 0;\n }\n get executionCount() {\n return this._executionCount;\n }\n get isExecuting() {\n return (this.flags & l.EXECUTING) !== 0;\n }\n _throwInfiniteLoopError(t) {\n const e = new g(\n `Infinite loop detected (${t}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${H}`\n );\n throw this.dispose(), console.error(e), e;\n }\n _handleExecutionError(t, e = c.EFFECT_EXECUTION_FAILED) {\n const s = D(t, g, e);\n if (console.error(s), this._onError)\n try {\n this._onError(s);\n } catch (n) {\n console.error(D(n, g, c.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n}\nfunction Rt(i, t = {}) {\n if (typeof i != \"function\")\n throw new g(c.EFFECT_MUST_BE_FUNCTION);\n const e = new Dt(i, t);\n return e.execute(), e;\n}\nfunction kt(i) {\n if (typeof i != \"function\")\n throw new TypeError(\"Batch callback must be a function\");\n b.startBatch();\n try {\n return i();\n } finally {\n b.endBatch();\n }\n}\nexport {\n V as ATOM_BRAND,\n A as AsyncState,\n C as AtomError,\n it as COMPUTED_BRAND,\n E as ComputedError,\n ot as DEBUG_CONFIG,\n L as DEBUG_RUNTIME,\n nt as EFFECT_BRAND,\n g as EffectError,\n Ct as POOL_CONFIG,\n p as SCHEDULER_CONFIG,\n m as SchedulerError,\n Ot as atom,\n kt as batch,\n yt as computed,\n Rt as effect,\n bt as isAtom,\n At as isComputed,\n Nt as isEffect,\n b as scheduler,\n Tt as untracked\n};\n//# sourceMappingURL=index.mjs.map\n","import { isAtom, isComputed } from '@but212/atom-effect';\nimport type { ComputedAtom, ReactiveValue, ReadonlyAtom } from './types';\n\n/**\n * Checks if a given value is a reactive object (Atom or Computed).\n */\nexport function isReactive(value: unknown): value is ReadonlyAtom<unknown> | ComputedAtom<unknown> {\n return isAtom(value) || isComputed(value);\n}\n\n/**\n * Extracts the underlying raw value from a ReactiveValue.\n */\nexport function getValue<T>(source: ReactiveValue<T>): T {\n return isReactive(source) ? source.value : (source as T);\n}\n\n/**\n * Generates a CSS selector string for a DOM element.\n * Optimized for zero-allocation parsing using native classList.\n */\nexport function getSelector(el: Element | JQuery): string {\n if (!el) return 'unknown';\n const dom = 'jquery' in el ? (el as JQuery)[0] : (el as Element);\n if (!dom) return 'unknown';\n\n const id = dom.id;\n if (id && typeof id === 'string') return `#${id}`;\n\n const tagName = dom.tagName.toLowerCase();\n const classes = dom.classList;\n\n if (classes && classes.length > 0) {\n let res = tagName;\n for (let i = 0, len = classes.length; i < len; i++) {\n const cls = classes[i];\n if (cls) res += `.${cls}`;\n }\n return res;\n }\n return tagName;\n}\n\n/**\n * Basic HTML sanitization for XSS mitigation.\n * Note: This is NOT a replacement for a full-featured sanitizer like DOMPurify.\n * It prevents common attacks like <script> tags and javascript: protocols.\n */\nexport function sanitizeHtml(html: string): string {\n let safe = String(html ?? '');\n\n // 0. Pre-process: Remove null bytes and control characters (bypass vectors)\n // These are often used to bypass regex filters while browsers ignore them\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Intentionally matching control characters for XSS sanitization\n safe = safe.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, '');\n\n // 1. Remove dangerous tags entirely (content included or tag stripped)\n // Lightweight first pass — DOMPurify handles the full sanitization.\n // Note: svg/math are NOT removed — they have legitimate uses (icons, equations).\n // Their event handlers (on*) are already neutralized in step 3.\n // Also remove processing instructions <? ... ?> which can be abused in some contexts\n safe = safe.replace(/<\\?[\\s\\S]*?\\?>/g, '');\n\n // Loop tag removal to prevent nested reassembly bypass (e.g. \"<scr<script>ipt>\")\n const dangerousTagPattern =\n /(<(script|iframe|object|embed|base|meta|applet|noscript)\\b[^>]*>([\\s\\S]*?)<\\/\\2>|<(script|iframe|object|embed|base|meta|applet|noscript)\\b[^>]*\\/?>)/gim;\n let prev: string;\n do {\n prev = safe;\n safe = safe.replace(dangerousTagPattern, '');\n } while (safe !== prev);\n\n // 2. Neutralize dangerous protocols (javascript:, vbscript:)\n // Simple whitespace-tolerant regex. Entity-based obfuscation is left to DOMPurify.\n // Step 0 already strips null bytes/control chars, so basic spacing tricks are caught here.\n const protocolRegex =\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 safe = safe.replace(protocolRegex, 'data-unsafe-protocol:');\n\n // Separately handle dangerous data URIs (e.g. text/html, base64 encoded scripts)\n // Allows common inline images (data:image/...) including SVG while blocking executable payloads.\n const dangerousDataUriRegex =\n /data\\s*:\\s*(?:text\\/html|application\\/javascript|text\\/javascript|text\\/vbscript|text\\/xml|application\\/xhtml\\+xml)/gim;\n safe = safe.replace(dangerousDataUriRegex, 'data-unsafe-protocol:');\n\n // 3. Neutralize event handlers (on* attributes)\n // Replaces \"onclick=\" with \"data-unsafe-attr=\"\n safe = safe.replace(/\\bon\\w+\\s*=/gim, 'data-unsafe-attr=');\n\n // 4. Neutralize CSS expressions (IE legacy but dangerous) and behavior\n // expression(...), behavior:url(...)\n safe = safe\n .replace(/expression\\s*\\(/gim, 'data-unsafe-css(')\n .replace(/behavior\\s*:/gim, 'data-unsafe-css:');\n\n return safe;\n}\n\n/**\n * Checks if a given attribute value contains a dangerous protocol (javascript:, vbscript:).\n * Used by atomAttr/bindAttr to guard URL-bearing attributes.\n */\nconst URL_ATTRS = new Set([\n 'href',\n 'src',\n 'action',\n 'formaction',\n 'xlink:href',\n 'data',\n 'poster',\n 'srcset',\n 'background',\n 'cite',\n 'longdesc',\n 'profile',\n 'usemap',\n 'classid',\n 'codebase',\n]);\n\nconst DANGEROUS_PROTOCOL_RE = /^\\s*(?:javascript|vbscript)\\s*:/i;\n\nexport function isDangerousUrl(attrName: string, value: string): boolean {\n if (!URL_ATTRS.has(attrName.toLowerCase())) return false;\n return DANGEROUS_PROTOCOL_RE.test(value);\n}\n\n/**\n * Checks if a CSS value contains dangerous protocols in url() functions.\n * e.g. background-image: url(\"javascript:alert(1)\")\n */\nexport function isDangerousCssValue(value: string): boolean {\n // fast check for url(\n if (!value.toLowerCase().includes('url(')) return false;\n\n // Check for dangerous protocols inside url(...)\n // Pattern matches: url( ['\"]? protocol:\n const dangerousCssUrlRe = /url\\s*\\(\\s*(?:[\"']?\\s*)?(?:javascript|vbscript)\\s*:/i;\n return dangerousCssUrlRe.test(value);\n}\n\n/**\n * Shallow equality check for plain objects.\n * Returns true if both objects have the same keys with identical values (===).\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 keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n\n const objB = b as Record<string, unknown>;\n for (let i = 0; i < keysA.length; i++) {\n const key = keysA[i]!;\n if ((a as Record<string, unknown>)[key] !== objB[key]) return false;\n }\n return true;\n}\n\n/**\n * Longest Increasing Subsequence (LIS)\n * Optimized for hardware and TypeScript strict null checks.\n * Time Complexity: O(N log N), Space Complexity: $O(N)$.\n */\nexport function getLIS(arr: Int32Array | number[]): Int32Array {\n const len = arr.length;\n if (len === 0) return new Int32Array(0);\n\n const predecessors = new Int32Array(len);\n const result = new Int32Array(len);\n let resultLen = 0;\n\n for (let i = 0; i < len; i++) {\n const val = arr[i];\n if (val === undefined || val === -1) continue;\n\n const lastIdx = resultLen > 0 ? result[resultLen - 1] : undefined;\n if (resultLen === 0 || (lastIdx !== undefined && (arr[lastIdx] ?? -1) < val)) {\n predecessors[i] = lastIdx ?? -1;\n result[resultLen++] = i;\n continue;\n }\n\n // Binary search for insertion point\n let left = 0;\n let right = resultLen - 1;\n while (left < right) {\n const mid = (left + right) >>> 1;\n const midIdx = result[mid];\n if (midIdx !== undefined && (arr[midIdx] ?? -1) < val) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n\n const leftIdx = result[left];\n if (leftIdx !== undefined && val < (arr[leftIdx] ?? Number.MAX_SAFE_INTEGER)) {\n if (left > 0) {\n predecessors[i] = result[left - 1] ?? -1;\n }\n result[left] = i;\n }\n }\n\n const lis = new Int32Array(resultLen);\n if (resultLen > 0) {\n let curr: number | undefined = result[resultLen - 1];\n for (let i = resultLen - 1; i >= 0 && curr !== undefined && curr !== -1; i--) {\n lis[i] = curr;\n curr = predecessors[curr];\n }\n }\n\n return lis;\n}\n","/**\n * Debug Mode\n *\n * When $.atom.debug = true is enabled:\n * 1. Logs state changes to the console.\n * 2. Visually highlights DOM updates (red border flash).\n *\n * Debug mode can be enabled in two ways:\n * 1. Build-time: import.meta.env.DEV\n * 2. Runtime: $.atom.debug = true or window.__ATOM_DEBUG__ = true\n */\n\nimport { getSelector } from './utils';\n\n/**\n * Determines the initial debug state based on environment.\n * Priority: window.__ATOM_DEBUG__ > import.meta.env.DEV\n */\nfunction getInitialDebugState(): boolean {\n if (typeof window !== 'undefined') {\n const flag = (window as Window & { __ATOM_DEBUG__?: boolean }).__ATOM_DEBUG__;\n if (typeof flag === 'boolean') return flag;\n }\n\n if (import.meta.env?.DEV && import.meta.env.MODE !== 'test') return true;\n\n return false;\n}\n\nlet debugEnabled = getInitialDebugState();\n\nexport const debug = {\n get enabled() {\n return debugEnabled;\n },\n set enabled(value: boolean) {\n debugEnabled = value;\n },\n\n log<T>(type: string, ...args: T[]) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] ${type}:`, ...args);\n }\n },\n\n atomChanged<T>(name: string | undefined, oldVal: T, newVal: T) {\n if (debugEnabled) {\n console.log(\n `[atom-effect-jquery] Atom \"${name ?? 'anonymous'}\" changed:`,\n oldVal,\n '→',\n newVal\n );\n }\n },\n\n /**\n * Logs DOM updates and triggers visual highlight.\n */\n domUpdated<T>($el: JQuery | Element, type: string, value: T) {\n if (!debugEnabled) return;\n console.log(`[atom-effect-jquery] DOM updated: ${getSelector($el)}.${type} =`, value);\n highlightElement($el);\n },\n\n cleanup(selector: string) {\n if (debugEnabled) {\n console.log(`[atom-effect-jquery] Cleanup: ${selector}`);\n }\n },\n\n warn<T>(...args: T[]) {\n if (debugEnabled) {\n console.warn('[atom-effect-jquery]', ...args);\n }\n },\n};\n\n/**\n * Visual highlight - flashes a red border via CSS class toggle.\n */\nconst HIGHLIGHT_CLASS = 'atom-debug-highlight';\nlet styleInjected = false;\n\nfunction injectHighlightStyle(): void {\n if (styleInjected) return;\n styleInjected = true;\n const style = document.createElement('style');\n style.textContent = `.${HIGHLIGHT_CLASS}{outline:2px solid rgba(255,68,68,0.8);outline-offset:1px;transition:outline 0.5s ease-out}`;\n document.head.appendChild(style);\n}\n\nconst highlightTimers = new WeakMap<HTMLElement, ReturnType<typeof setTimeout>>();\n\nfunction highlightElement($el: JQuery | Element): void {\n const el = ('jquery' in $el ? $el[0] : $el) as HTMLElement | undefined;\n if (!el || !el.isConnected) return;\n\n injectHighlightStyle();\n\n // Clear existing timer if re-highlighted\n const existing = highlightTimers.get(el);\n if (existing) clearTimeout(existing);\n\n el.classList.add(HIGHLIGHT_CLASS);\n\n highlightTimers.set(\n el,\n setTimeout(() => {\n el.classList.remove(HIGHLIGHT_CLASS);\n highlightTimers.delete(el);\n }, 600)\n );\n}\n","import {\n batch,\n computed,\n atom as createAtom,\n effect,\n isAtom,\n isComputed,\n untracked,\n} from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport type { AtomOptions, WritableAtom } from './types';\nimport { isReactive } from './utils';\n\n/**\n * Creates an atom with optional metadata.\n */\nfunction atom<T>(initialValue: T, options: AtomOptions = {}): WritableAtom<T> {\n return createAtom(initialValue, options);\n}\n\n// Add debug property\nObject.defineProperty(atom, 'debug', {\n get() {\n return debug.enabled;\n },\n set(value: boolean) {\n debug.enabled = value;\n },\n});\n\n/**\n * Waits for the next macrotask (setTimeout 0).\n * Effects are processed in microtasks, so this runs AFTER all pending effects complete.\n */\nfunction nextTick(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/**\n * Extend jQuery static methods.\n */\n$.extend({\n atom,\n computed,\n effect,\n batch,\n untracked,\n isAtom,\n isComputed,\n isReactive,\n nextTick,\n});\n","/**\n * Constants for atom-effect-jquery\n */\n\nexport const AES_BOUND_CLASS = '_aes-bound';\n\nexport const LOG_PREFIXES = {\n ROUTE: '[$.route]',\n BIND: '[atomBind]',\n LIST: '[atomList]',\n} as const;\n\nexport const ROUTE_DEFAULTS = {\n MODE: 'hash' as const,\n ACTIVE_CLASS: 'active',\n BASE_PATH: '',\n AUTO_BIND_LINKS: false,\n} as const;\n\nexport const INPUT_DEFAULTS = {\n EVENT: 'input',\n DEBOUNCE: 0,\n} as const;\n\nexport const DANGEROUS_PROPS = ['innerHTML', 'outerHTML'] as const;\n\nexport const ERROR_MESSAGES = {\n ROUTE_NOT_FOUND: (name: string) => `Route \"${name}\" not found and no notFound route configured`,\n TEMPLATE_NOT_FOUND: (selector: string) => `Template \"${selector}\" not found`,\n TARGET_NOT_FOUND: (selector: string) => `Target element \"${selector}\" not found`,\n MALFORMED_URI: (raw: string) => `Malformed URI component: ${raw}`,\n UNSAFE_CONTENT: 'Unsafe content neutralized during sanitization.',\n BLOCKED_DANGEROUS_VALUE: (prop: string) => `Blocked dangerous value in \"${prop}\" property.`,\n BLOCKED_EVENT_HANDLER: (name: string) =>\n `Blocked setting dangerous event handler attribute \"${name}\".`,\n BLOCKED_PROTOCOL: (name: string) => `Blocked dangerous protocol in \"${name}\" attribute.`,\n BLOCKED_DANGEROUS_PROP: (name: string) =>\n `Blocked setting dangerous property \"${name}\". Use html binding for sanitized HTML.`,\n INVALID_INPUT_ELEMENT: (tagName: string) => `Val binding used on non-input element <${tagName}>.`,\n DUPLICATE_KEY: (key: string | number, index: number) =>\n `Duplicate key \"${key}\" at index ${index}.`,\n} as const;\n","import { AES_BOUND_CLASS } from './constants';\nimport { debug } from './debug';\nimport type { EffectObject } from './types';\nimport { getSelector } from './utils';\n\n/**\n * Marker class for bound elements to optimize selector engines.\n */\nconst AES_BOUND = AES_BOUND_CLASS;\n\ninterface BindingRecord {\n effects?: EffectObject[];\n cleanups?: Array<() => void>;\n}\n\n/**\n * Binding Registry\n *\n * Highly optimized for performance:\n * - Uses WeakMap for zero-leak DOM associations.\n * - Minimal allocations in the tracking path.\n * - Efficient tree traversal for cleanup.\n */\nclass BindingRegistry {\n private records = new WeakMap<Element, BindingRecord>();\n private boundElements = new WeakSet<Element>();\n private preservedNodes = new WeakSet<Node>();\n private ignoredNodes = new WeakSet<Node>(); // Prevent redundant cleanup\n\n keep(node: Node): void {\n this.preservedNodes.add(node);\n }\n\n isKept(node: Node): boolean {\n return this.preservedNodes.has(node);\n }\n\n markIgnored(node: Node): void {\n this.ignoredNodes.add(node);\n }\n\n isIgnored(node: Node): boolean {\n return this.ignoredNodes.has(node);\n }\n\n private _getOrCreateRecord(el: Element): BindingRecord {\n let res = this.records.get(el);\n if (!res) {\n res = {};\n this.records.set(el, res);\n // Mark as bound and add class for faster querySelector lookup\n if (!this.boundElements.has(el)) {\n this.boundElements.add(el);\n el.classList.add(AES_BOUND);\n }\n }\n return res;\n }\n\n trackEffect(el: Element, fx: EffectObject): void {\n const record = this._getOrCreateRecord(el);\n record.effects ??= [];\n record.effects.push(fx);\n }\n\n trackCleanup(el: Element, fn: () => void): void {\n const record = this._getOrCreateRecord(el);\n record.cleanups ??= [];\n record.cleanups.push(fn);\n }\n\n hasBind(el: Element): boolean {\n return this.boundElements.has(el);\n }\n\n cleanup(el: Element): void {\n // Atomic delete return value used as a high-performance guard\n if (!this.boundElements.delete(el)) return;\n\n const record = this.records.get(el);\n if (!record) return;\n\n // Fast cleanup of metadata\n this.records.delete(el);\n this.preservedNodes.delete(el);\n this.ignoredNodes.delete(el);\n el.classList.remove(AES_BOUND);\n\n // Hoist costly selector string generation to debug-only block\n if (debug.enabled) {\n debug.cleanup(getSelector(el));\n }\n\n // 1. Dispose Effects (Atom -> Subscription severed)\n const effects = record.effects;\n if (effects) {\n for (let i = 0, len = effects.length; i < len; i++) {\n try {\n effects[i]?.dispose();\n } catch (e) {\n debug.warn('Effect dispose error:', e);\n }\n }\n }\n\n // 2. Execute custom cleanups\n const cleanups = record.cleanups;\n if (cleanups) {\n for (let i = 0, len = cleanups.length; i < len; i++) {\n try {\n cleanups[i]?.();\n } catch (e) {\n debug.warn('Cleanup error:', e);\n }\n }\n }\n }\n\n cleanupDescendants(el: Element): void {\n const children = el.querySelectorAll(`.${AES_BOUND}`);\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i] as Element;\n // Double check because querySelectorAll might return disconnected leftovers\n if (child && this.boundElements.has(child)) {\n this.cleanup(child);\n } else if (child) {\n child.classList.remove(AES_BOUND);\n }\n }\n }\n\n cleanupTree(el: Element): void {\n this.cleanupDescendants(el);\n this.cleanup(el);\n }\n}\n\nexport const registry = new BindingRegistry();\n\nlet observer: MutationObserver | null = null;\n\nexport function enableAutoCleanup(root: Element = document.body): void {\n if (observer) return;\n\n observer = new MutationObserver((mutations) => {\n for (let i = 0, len = mutations.length; i < len; i++) {\n const removedNodes = mutations[i]?.removedNodes;\n if (!removedNodes) continue;\n const rLen = removedNodes.length;\n if (rLen === 0) continue;\n\n for (let j = 0; j < rLen; j++) {\n const node = removedNodes[j]!;\n // Early exit: only elements can have AES_BOUND bindings\n if (node.nodeType !== 1) continue;\n\n // Skip if kept (detached for moves), explicitly ignored, or still connected\n if (node.isConnected || registry.isKept(node) || registry.isIgnored(node)) {\n continue;\n }\n\n registry.cleanupTree(node as Element);\n }\n }\n });\n\n observer.observe(root, { childList: true, subtree: true });\n}\n\nexport function disableAutoCleanup(): void {\n observer?.disconnect();\n observer = null;\n}\n","import { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ReactiveValue } from './types';\nimport { isReactive } from './utils';\n\n/**\n * Utility to register a reactive effect or apply a static update.\n * Centralizes the boilerplate for atomic bindings.\n *\n * @param el - The DOM element to associate with the effect.\n * @param source - The reactive or static value source.\n * @param updater - Function to apply the value to the DOM.\n * @param debugType - Type label for debug logging.\n */\nexport function registerReactiveEffect<T>(\n el: HTMLElement,\n source: ReactiveValue<T>,\n updater: (value: T) => void,\n debugType: string\n): void {\n if (isReactive(source)) {\n registry.trackEffect(\n el,\n effect(() => {\n const value = source.value;\n updater(value);\n debug.domUpdated($(el), debugType, value);\n })\n );\n } else {\n updater(source);\n if (debug.enabled) debug.domUpdated($(el), debugType, source);\n }\n}\n","import type {\n AtomOptions as BaseAtomOptions,\n ComputedAtom,\n ComputedOptions,\n EffectObject,\n ReadonlyAtom,\n WritableAtom,\n} from '@but212/atom-effect';\n\n/**\n * Extended options for Atom creation.\n */\nexport interface AtomOptions extends BaseAtomOptions {\n /** Name for debugging purposes */\n name?: string;\n}\n\n/**\n * Represents a value that can be either dynamic (Atom/Computed) or static.\n */\nexport type ReactiveValue<T> = T | ReadonlyAtom<T> | ComputedAtom<T>;\n\n/**\n * CSS value: either a direct reactive value or a tuple of [source, unit].\n * Named type provides clear bone structure for CSS binding configurations.\n */\nexport type CssValue =\n | ReactiveValue<string | number>\n | [source: ReactiveValue<string | number>, unit: string];\n\n/**\n * CSS bindings map property names to CSS values.\n */\nexport type CssBindings = Record<string, CssValue>;\n\n/**\n * Configuration options for `atomBind`.\n */\nexport interface BindingOptions<T> {\n text?: ReactiveValue<T>;\n html?: ReactiveValue<string>;\n class?: Record<string, ReactiveValue<boolean>>;\n css?: CssBindings;\n attr?: Record<string, ReactiveValue<string | boolean | null>>;\n prop?: Record<string, ReactiveValue<T>>;\n show?: ReactiveValue<boolean>;\n hide?: ReactiveValue<boolean>;\n val?: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>];\n checked?: WritableAtom<boolean>;\n on?: Record<string, (e: JQuery.Event) => void>;\n}\n\n/**\n * Configuration options for `atomList`.\n */\nexport interface ListOptions<T> {\n key: keyof T | ((item: T, index: number) => string | number);\n render: (item: T, index: number) => string | Element | DocumentFragment | JQuery;\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?: string | Element | DocumentFragment | JQuery;\n}\n\n/**\n * Configuration options for `atomVal`.\n */\nexport interface ValOptions<T> {\n debounce?: number;\n event?: string;\n parse?: (v: string) => T;\n format?: (v: T) => string;\n /** Custom equality check for comparing parsed values. Defaults to Object.is. */\n equal?: (a: T, b: T) => boolean;\n}\n\n/**\n * Configuration options for `atomFetch`.\n */\nexport interface FetchOptions<T> {\n /** Initial value before first fetch resolves. */\n defaultValue: T;\n /** HTTP method (default: 'GET'). */\n method?: string;\n /** Request headers. */\n headers?: Record<string, string>;\n /** Transform raw response before storing. */\n transform?: (raw: unknown) => T;\n /** Additional $.ajax settings passthrough. */\n ajaxOptions?: JQuery.AjaxSettings;\n}\n\n/**\n * State context for two-way input bindings.\n * Consolidates scattered state flags into a single, traceable object.\n * This is the \"bone structure\" for input binding lifecycle management.\n */\n/**\n * Bit flags for input binding state management.\n * Consolidates mutually exclusive phases and orthogonal states (focus) into a single integer.\n */\nexport enum BindingFlags {\n None = 0,\n Focused = 1 << 0,\n Composing = 1 << 1,\n SyncingToAtom = 1 << 2,\n SyncingToDom = 1 << 3,\n // Mask for any active processing phase (excluding simple focus)\n Busy = Composing | SyncingToAtom | SyncingToDom,\n}\n\n/**\n * State context for two-way input bindings.\n * Consolidates scattered state flags into a single, traceable object.\n * This is the \"bone structure\" for input binding lifecycle management.\n */\nexport interface InputBindingState {\n /** Timeout ID for debounced updates */\n timeoutId: number | null;\n /** Bitmask of current state flags */\n flags: number;\n}\n\n/**\n * Creates a fresh InputBindingState with default values.\n */\nexport function createInputBindingState(): InputBindingState {\n return { timeoutId: null, flags: BindingFlags.None };\n}\n\n/**\n * Functional Component type.\n */\nexport type ComponentFn<P = {}> = ($el: JQuery, props: P) => undefined | (() => void);\n\ndeclare global {\n interface JQueryStatic {\n atom: {\n <T>(initialValue: T, options?: AtomOptions): WritableAtom<T>;\n debug: boolean;\n };\n computed<T>(fn: () => T, options?: ComputedOptions<T>): ComputedAtom<T>;\n computed<T>(\n fn: () => Promise<T>,\n options: ComputedOptions<T> & { defaultValue: T }\n ): ComputedAtom<T>;\n effect(fn: () => undefined | (() => void)): 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 route(config: RouteConfig): Router;\n atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T>;\n }\n\n interface JQuery {\n // Chainable methods\n atomText<T>(source: ReactiveValue<T>, formatter?: (v: T) => string): this;\n atomHtml(source: ReactiveValue<string>): this;\n atomClass(className: string, condition: ReactiveValue<boolean>): this;\n atomCss(prop: string, source: ReactiveValue<string | number>, unit?: string): this;\n atomAttr(name: string, source: ReactiveValue<string | boolean | null>): this;\n atomProp<T extends string | number | boolean | null | undefined>(\n name: string,\n source: ReactiveValue<T>\n ): this;\n atomShow(condition: ReactiveValue<boolean>): this;\n atomHide(condition: ReactiveValue<boolean>): this;\n atomVal<T>(atom: WritableAtom<T>, options?: ValOptions<T>): this;\n atomChecked(atom: WritableAtom<boolean>): this;\n atomOn(event: string, handler: (e: JQuery.Event) => void): this;\n\n // Integrated binding\n atomBind<T extends string | number | boolean | null | undefined>(\n options: BindingOptions<T>\n ): this;\n\n // List rendering\n atomList<T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): this;\n\n // Component mounting\n atomMount<P>(component: ComponentFn<P>, props?: P): this;\n atomUnmount(): this;\n\n // Cleanup\n atomUnbind(): this;\n }\n}\n\n/**\n * Context passed to binding handlers for cleanup and effect registration.\n */\nexport interface BindingContext {\n readonly $el: JQuery;\n readonly el: HTMLElement;\n readonly trackCleanup: (fn: () => void) => void;\n}\n\n/**\n * Shared route lifecycle hooks.\n */\ninterface RouteLifecycle {\n /** Called when entering this route. Can return additional params. */\n onEnter?: (params: Record<string, string>) => Record<string, string> | undefined;\n /** Called when leaving this route. Return false to prevent navigation. */\n onLeave?: () => boolean | undefined;\n /** Called when the same route's query params change, instead of a full re-render. */\n onParamsChange?: (params: Record<string, string>) => void;\n}\n\n/**\n * Route using a template selector.\n */\ninterface TemplateRoute extends RouteLifecycle {\n /** Template selector (e.g., '#tmpl-home') */\n template: string;\n render?: never;\n /** Called after template content is appended to the DOM. Receives a jQuery wrapper of the content. */\n onMount?: ($content: JQuery) => void;\n}\n\n/**\n * Route using a custom render function.\n */\ninterface RenderRoute extends RouteLifecycle {\n /** Custom render function */\n render: (container: HTMLElement, route: string, params: Record<string, string>) => void;\n template?: never;\n}\n\n/**\n * Route definition for a single route.\n * Either template OR render must be provided, but not both.\n */\nexport type RouteDefinition = TemplateRoute | RenderRoute;\n\n/**\n * Configuration for $.route()\n */\nexport interface RouteConfig {\n /** Target element selector for rendering route content */\n target: string;\n /** Default route name */\n default: string;\n /** Route definitions map */\n routes: Record<string, RouteDefinition>;\n /** Routing mode. 'hash' uses location.hash, 'history' uses pushState. Default: 'hash' */\n mode?: 'hash' | 'history';\n /** Base path for history mode (e.g., '/app'). Ignored in hash mode. Default: '' */\n basePath?: string;\n /** Route name to use for 404/not found */\n notFound?: string;\n /** Automatically bind links with data-route attribute */\n autoBindLinks?: boolean;\n /** CSS class to add to active links */\n activeClass?: string;\n /** Called before transitioning between routes */\n beforeTransition?: (from: string, to: string) => void;\n /** Called after transitioning between routes */\n afterTransition?: (from: string, to: string) => void;\n}\n\n/**\n * Router instance returned by $.route()\n */\nexport interface Router {\n /** Reactive atom containing current route name */\n currentRoute: WritableAtom<string>;\n /** Reactive computed containing current query parameters */\n queryParams: ReadonlyAtom<Record<string, string>>;\n /** Navigate to a different route */\n navigate: (route: string) => void;\n /** Cleanup and destroy the router */\n destroy: () => void;\n}\n\nexport type { WritableAtom, ReadonlyAtom, ComputedAtom, EffectObject, ComputedOptions };\n","import { INPUT_DEFAULTS } from './constants';\nimport { debug } from './debug';\nimport type { InputBindingState, ValOptions, WritableAtom } from './types';\nimport { BindingFlags, createInputBindingState } from './types';\n\n/**\n * Applies two-way data binding configuration to an input element.\n * Shared logic used by both implicit (atomBind) and explicit (atomVal) bindings.\n *\n * @param $el - The jQuery element to bind.\n * @param atom - The target atom for two-way binding.\n * @param options - Binding options (parse, format, debounce, events).\n * @returns Object containing the effect function (for Atom -> DOM) and cleanup function.\n */\nexport function applyInputBinding<T>(\n $el: JQuery,\n atom: WritableAtom<T>,\n options: ValOptions<T> = {}\n): { effect: () => void; cleanup: () => void } {\n const {\n debounce: debounceMs,\n event = INPUT_DEFAULTS.EVENT,\n parse = (v: string) => v as unknown as T,\n format = (v: T) => String(v ?? ''),\n equal = Object.is,\n } = options;\n\n const state: InputBindingState = createInputBindingState();\n const el = $el[0] as HTMLInputElement | HTMLTextAreaElement;\n\n // Core sync: DOM → Atom\n const syncAtomFromDom = () => {\n if (state.flags & BindingFlags.Busy) return;\n\n state.flags |= BindingFlags.SyncingToAtom;\n try {\n const currentRaw = el.value;\n const parsed = parse(currentRaw);\n // Avoid redundant atom updates to prevent unnecessary propagation\n if (!equal(atom.value, parsed)) {\n atom.value = parsed;\n }\n } finally {\n state.flags &= ~BindingFlags.SyncingToAtom;\n }\n };\n\n const onBlur = () => {\n // Flush pending debounce\n if (state.timeoutId) {\n clearTimeout(state.timeoutId);\n state.timeoutId = null;\n syncAtomFromDom();\n }\n\n state.flags &= ~BindingFlags.Focused;\n\n // Force formatting on blur\n const formatted = format(atom.value);\n if (el.value !== formatted) {\n el.value = formatted;\n }\n };\n\n // Input handler with optional debounce\n const onInput = () => {\n if (state.flags & BindingFlags.Busy) return;\n\n if (debounceMs) {\n if (state.timeoutId) clearTimeout(state.timeoutId);\n state.timeoutId = setTimeout(syncAtomFromDom, debounceMs);\n } else {\n syncAtomFromDom();\n }\n };\n\n const handlers = {\n compositionstart: () => {\n state.flags |= BindingFlags.Composing;\n },\n compositionend: () => {\n state.flags &= ~BindingFlags.Composing;\n syncAtomFromDom();\n },\n focus: () => {\n state.flags |= BindingFlags.Focused;\n },\n blur: onBlur,\n [event]: onInput,\n change: onInput,\n };\n\n $el.on(handlers);\n\n const cleanup = () => {\n $el.off(handlers);\n if (state.timeoutId) clearTimeout(state.timeoutId);\n };\n\n // Core sync: Atom → DOM (Effect body)\n const effect = () => {\n const val = atom.value;\n const formatted = format(val);\n const currentVal = el.value;\n\n // 1. Skip if already synchronized\n if (currentVal === formatted) return;\n\n // 2. Skip if focused and current input parses to same value (don't interrupt user)\n if (state.flags & BindingFlags.Focused && equal(parse(currentVal), val)) {\n return;\n }\n\n state.flags |= BindingFlags.SyncingToDom;\n try {\n if (state.flags & BindingFlags.Focused) {\n // [Fix] Preserve cursor position when focused\n const { selectionStart: start, selectionEnd: end } = el;\n el.value = formatted;\n const len = formatted.length;\n el.setSelectionRange(Math.min(start ?? 0, len), Math.min(end ?? 0, len));\n } else {\n el.value = formatted;\n }\n\n debug.domUpdated($el, 'val', formatted);\n } finally {\n state.flags &= ~BindingFlags.SyncingToDom;\n }\n };\n\n return { effect, cleanup };\n}\n","import { batch, effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { DANGEROUS_PROPS, ERROR_MESSAGES, LOG_PREFIXES } from './constants';\nimport { debug } from './debug';\nimport { registerReactiveEffect } from './effect-factory';\nimport { applyInputBinding } from './input-binding';\nimport { registry } from './registry';\nimport type {\n BindingContext,\n BindingOptions,\n CssValue,\n ReactiveValue,\n ValOptions,\n WritableAtom,\n} from './types';\nimport { BindingFlags, createInputBindingState } from './types';\nimport { isDangerousCssValue, isDangerousUrl, sanitizeHtml } from './utils';\n\n// Cache for CSS property camelization to avoid repeated regex and check overhead\nconst camelCache: Record<string, string> = Object.create(null);\nfunction getCamelCase(prop: string): string {\n let cached = camelCache[prop];\n if (cached) return cached;\n\n cached = prop.includes('-') ? prop.replace(/-./g, (m) => m[1]!.toUpperCase()) : prop;\n camelCache[prop] = cached;\n return cached;\n}\n\n// ============================================================================\n// Binding Context Factory\n// ============================================================================\n\nexport function createContext(el: HTMLElement): BindingContext {\n let _$el: JQuery | null = null;\n return {\n get $el() {\n if (!_$el) _$el = $(el);\n return _$el;\n },\n el,\n trackCleanup: (fn) => registry.trackCleanup(el, fn),\n };\n}\n\n// ============================================================================\n// One-Way Binding Handlers (Atom → DOM)\n// ============================================================================\n\nexport function bindText<T>(ctx: BindingContext, value: ReactiveValue<T>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const newVal = typeof val === 'string' ? val : String(val ?? '');\n // Guard against redundant DOM writes\n if (el.textContent !== newVal) {\n el.textContent = newVal;\n }\n },\n 'text'\n );\n}\n\nexport function bindHtml(ctx: BindingContext, value: ReactiveValue<string>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n value,\n (val) => {\n const newVal = String(val ?? '');\n const sanitized = sanitizeHtml(newVal);\n\n if (sanitized !== newVal) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.UNSAFE_CONTENT}`);\n }\n\n // Guard against redundant DOM writes which destroy/recreate subtrees\n if (el.innerHTML !== sanitized) {\n el.innerHTML = sanitized;\n }\n },\n 'html'\n );\n}\n\nexport function bindClass(\n ctx: BindingContext,\n classMap: Record<string, ReactiveValue<boolean>>\n): void {\n for (const className in classMap) {\n registerReactiveEffect(\n ctx.el,\n classMap[className],\n (val) => {\n ctx.el.classList.toggle(className, !!val);\n },\n `class.${className}`\n );\n }\n}\n\nexport function bindCss(ctx: BindingContext, cssMap: Record<string, CssValue>): void {\n const el = ctx.el;\n const style = el.style as unknown as Record<string, string>;\n for (const prop in cssMap) {\n const val = cssMap[prop];\n if (val === undefined) continue;\n\n const camel = getCamelCase(prop);\n const isArr = Array.isArray(val);\n const source = isArr ? val[0] : val;\n const unit = isArr ? val[1] : '';\n\n registerReactiveEffect(\n el,\n source,\n (v) => {\n const strVal = unit ? `${v}${unit}` : String(v);\n if (isDangerousCssValue(strVal)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_DANGEROUS_VALUE(prop)}`);\n return;\n }\n style[camel] = strVal;\n },\n `css.${prop}`\n );\n }\n}\n\nexport function bindAttr(\n ctx: BindingContext,\n attrMap: Record<string, ReactiveValue<string | boolean | null>>\n): void {\n const el = ctx.el;\n for (const name in attrMap) {\n // Block event handler attributes (on*)\n const c0 = name.charCodeAt(0);\n if ((c0 === 111 || c0 === 79) && (name.charCodeAt(1) === 110 || name.charCodeAt(1) === 78)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_EVENT_HANDLER(name)}`);\n continue;\n }\n\n registerReactiveEffect(\n el,\n attrMap[name],\n (v) => {\n if (v === null || v === undefined || v === false) {\n el.removeAttribute(name);\n return;\n }\n const newVal = v === true ? name : String(v);\n if (isDangerousUrl(name, newVal)) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_PROTOCOL(name)}`);\n return;\n }\n // Attribute write guard\n if (el.getAttribute(name) !== newVal) {\n el.setAttribute(name, newVal);\n }\n },\n `attr.${name}`\n );\n }\n}\n\nexport function bindProp(\n ctx: BindingContext,\n propMap: Record<string, ReactiveValue<unknown>>\n): void {\n const el = ctx.el as unknown as Record<string, unknown>;\n for (const name in propMap) {\n // Block dangerous DOM properties that can inject raw HTML\n if (DANGEROUS_PROPS.includes(name as (typeof DANGEROUS_PROPS)[number])) {\n console.warn(`${LOG_PREFIXES.BIND} ${ERROR_MESSAGES.BLOCKED_DANGEROUS_PROP(name)}`);\n continue;\n }\n\n registerReactiveEffect(\n ctx.el,\n propMap[name],\n (val) => {\n // Redundancy check for DOM properties (e.g. className, title)\n if (el[name] !== val) {\n el[name] = val;\n }\n },\n `prop.${name}`\n );\n }\n}\n\nexport function bindVisibility(\n ctx: BindingContext,\n condition: ReactiveValue<boolean>,\n invert: boolean,\n label: 'show' | 'hide'\n): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n const visible = invert ? !val : !!val;\n el.style.display = visible ? '' : 'none';\n if (debug.enabled) debug.domUpdated(el, label, val);\n },\n label\n );\n}\n\n/**\n * Two-way value binding with full feature parity to $.fn.atomVal.\n * Supports parse/format options, debouncing, IME composition, and focus-aware updates.\n */\nexport function bindVal<T>(\n ctx: BindingContext,\n cfg: WritableAtom<T> | [atom: WritableAtom<T>, options: ValOptions<T>]\n): void {\n const tagName = ctx.el.tagName.toLowerCase();\n if (tagName !== 'input' && tagName !== 'select' && tagName !== 'textarea') {\n console.warn(`[atomBind] Val binding used on non-input element <${tagName}>.`);\n return;\n }\n const isArr = Array.isArray(cfg);\n const { effect: fxFn, cleanup } = applyInputBinding(\n ctx.$el,\n isArr ? cfg[0] : cfg,\n isArr ? cfg[1] : {}\n );\n\n registry.trackEffect(ctx.el, effect(fxFn));\n ctx.trackCleanup(cleanup);\n}\n\nexport function bindChecked(ctx: BindingContext, atom: WritableAtom<boolean>): void {\n const el = ctx.el as HTMLInputElement;\n const $el = ctx.$el;\n const state = createInputBindingState();\n\n // DOM → Atom (jQuery events for .trigger() compatibility)\n const handler = () => {\n if (state.flags & BindingFlags.Busy) return;\n const current = el.checked;\n if (atom.value !== current) {\n atom.value = current;\n }\n };\n\n $el.on('change', handler);\n ctx.trackCleanup(() => $el.off('change', handler));\n\n // Atom → DOM\n const fx = effect(() => {\n state.flags |= BindingFlags.SyncingToDom;\n const val = !!atom.value;\n if (el.checked !== val) {\n el.checked = val;\n if (debug.enabled) debug.domUpdated($el, 'checked', val);\n }\n state.flags &= ~BindingFlags.SyncingToDom;\n });\n registry.trackEffect(el, fx);\n}\n\n// ============================================================================\n// Event Binding Handler\n// ============================================================================\n\n/** Event handler map type for atomBind({ on: ... }) using jQuery's event handler signature */\ntype EventBindingMap = {\n [K in keyof JQuery.TypeToTriggeredEventMap<HTMLElement, undefined, HTMLElement, HTMLElement>]?:\n | JQuery.TypeEventHandler<HTMLElement, undefined, HTMLElement, HTMLElement, K>\n | false;\n} & {\n [eventName: string]: JQuery.EventHandler<HTMLElement, undefined> | false | undefined;\n};\n\nexport function bindEvents(ctx: BindingContext, eventMap: EventBindingMap): void {\n for (const name in eventMap) {\n const handler = eventMap[name];\n if (typeof handler !== 'function') continue;\n const listener = (e: Event) => {\n batch(() =>\n (handler as JQuery.EventHandler<HTMLElement, undefined>).call(\n ctx.el,\n $.Event(e.type, { originalEvent: e }) as JQuery.TriggeredEvent<HTMLElement>\n )\n );\n };\n ctx.el.addEventListener(name, listener);\n ctx.trackCleanup(() => ctx.el.removeEventListener(name, listener));\n }\n}\n\n// ============================================================================\n// Main Entry Point\n// ============================================================================\n\n/**\n * Extends jQuery with atom-based data binding capabilities.\n *\n * This plugin synchronizes DOM element states (text, html, classes, styles, etc.)\n * with reactive atoms. Handlers are modular and focused for maintainability.\n */\n$.fn.atomBind = function <T extends string | number | boolean | null | undefined>(\n options: BindingOptions<T>\n): JQuery {\n return this.each(function () {\n const ctx = createContext(this);\n\n // Apply bindings through focused handlers\n if (options.text !== undefined) bindText(ctx, options.text);\n if (options.html !== undefined) bindHtml(ctx, options.html);\n if (options.class) bindClass(ctx, options.class);\n if (options.css) bindCss(ctx, options.css);\n if (options.attr) bindAttr(ctx, options.attr);\n if (options.prop) bindProp(ctx, options.prop);\n if (options.show !== undefined) bindVisibility(ctx, options.show, false, 'show');\n if (options.hide !== undefined) bindVisibility(ctx, options.hide, true, 'hide');\n if (options.val !== undefined) bindVal(ctx, options.val);\n if (options.checked !== undefined) bindChecked(ctx, options.checked);\n if (options.on) bindEvents(ctx, options.on);\n });\n};\n","import $ from 'jquery';\nimport { registerReactiveEffect } from './effect-factory';\nimport { registry } from './registry';\nimport type { ReactiveValue, ValOptions, WritableAtom } from './types';\nimport {\n bindAttr,\n bindChecked,\n bindClass,\n bindCss,\n bindHtml,\n bindProp,\n bindVal,\n bindVisibility,\n createContext,\n} from './unified';\n\n/**\n * Updates element text content.\n * Kept separate from unified bindText because of the formatter parameter.\n */\n$.fn.atomText = function <T>(source: ReactiveValue<T>, formatter?: (v: T) => string): JQuery {\n return this.each(function () {\n const $el = $(this);\n const update = formatter\n ? (val: T) => $el.text(formatter(val))\n : (val: T) => $el.text(String(val ?? ''));\n\n registerReactiveEffect(this, source, update, 'text');\n });\n};\n\n/**\n * Updates element inner HTML.\n */\n$.fn.atomHtml = function (source: ReactiveValue<string>): JQuery {\n return this.each(function () {\n bindHtml(createContext(this), source);\n });\n};\n\n/**\n * Toggles a CSS class based on boolean value.\n */\n$.fn.atomClass = function (className: string, condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindClass(createContext(this), { [className]: condition });\n });\n};\n\n/**\n * Updates a CSS style property.\n */\n$.fn.atomCss = function (\n prop: string,\n source: ReactiveValue<string | number>,\n unit?: string\n): JQuery {\n return this.each(function () {\n bindCss(createContext(this), { [prop]: unit ? [source, unit] : source });\n });\n};\n\n/**\n * Updates an HTML attribute.\n */\n$.fn.atomAttr = function (name: string, source: ReactiveValue<string | boolean | null>): JQuery {\n return this.each(function () {\n bindAttr(createContext(this), { [name]: source });\n });\n};\n\n/**\n * Updates a DOM property (e.g., checked, selected, value).\n */\n$.fn.atomProp = function <T extends string | number | boolean | null | undefined>(\n name: string,\n source: ReactiveValue<T>\n): JQuery {\n return this.each(function () {\n bindProp(createContext(this), { [name]: source });\n });\n};\n\n/**\n * Shows element when condition is true.\n */\n$.fn.atomShow = function (condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindVisibility(createContext(this), condition, false, 'show');\n });\n};\n\n/**\n * Hides element when condition is true.\n */\n$.fn.atomHide = function (condition: ReactiveValue<boolean>): JQuery {\n return this.each(function () {\n bindVisibility(createContext(this), condition, true, 'hide');\n });\n};\n\n/**\n * Two-way binding for input values.\n */\n$.fn.atomVal = function <T>(atom: WritableAtom<T>, options: ValOptions<T> = {}): JQuery {\n return this.each(function () {\n bindVal(\n createContext(this),\n options && Object.keys(options).length > 0 ? [atom, options] : atom\n );\n });\n};\n\n/**\n * Two-way binding for checkbox/radio checked state.\n * Uses jQuery event system (not native) for compatibility with $.fn.trigger().\n */\n$.fn.atomChecked = function (atom: WritableAtom<boolean>): JQuery {\n return this.each(function () {\n bindChecked(createContext(this), atom);\n });\n};\n\n/**\n * Binds an event handler with automatic cleanup.\n */\n$.fn.atomOn = function (event: string, handler: (e: JQuery.Event) => void): JQuery {\n return this.each(function () {\n const $el = $(this);\n $el.on(event, handler);\n registry.trackCleanup(this, () => $el.off(event, handler));\n });\n};\n\n/**\n * Removes all atom bindings.\n */\n$.fn.atomUnbind = function (): JQuery {\n return this.each(function () {\n registry.cleanupTree(this);\n });\n};\n","import { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { ERROR_MESSAGES, LOG_PREFIXES } from './constants';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ListOptions, ReadonlyAtom } from './types';\nimport { getLIS, getSelector, sanitizeHtml, shallowEqual } from './utils';\n\n/**\n * atomList with Smart Reconciliation\n * Optimized for performance and data locality.\n */\n$.fn.atomList = function <T>(source: ReadonlyAtom<T[]>, options: ListOptions<T>): JQuery {\n const { key, render, bind, update, onAdd, onRemove, empty } = options;\n\n // Resolve getKey once to avoid repeated typeof checks in the Hot Path\n const getKey =\n typeof key === 'function'\n ? key\n : (item: T, _index: number) => item[key as keyof T] as unknown as string | number;\n\n return this.each(function () {\n const $container = $(this);\n const containerSelector = getSelector(this);\n\n const itemMap = new Map<string | number, { $el: JQuery; item: T }>();\n const removingKeys = new Set<string | number>();\n let oldKeys: (string | number)[] = [];\n let $emptyEl: JQuery | null = null;\n\n const fx = effect(() => {\n const items = source.value;\n const itemCount = items.length;\n\n // 1. Handle Empty Template Logic\n if (itemCount === 0) {\n if (empty && !$emptyEl) {\n // Use type assertion to avoid overload ambiguity while maintaining JQuery return type\n const safeEmpty = typeof empty === 'string' ? sanitizeHtml(empty) : empty;\n $emptyEl = ($(safeEmpty as string) as JQuery).appendTo($container);\n }\n } else if ($emptyEl) {\n $emptyEl.remove();\n $emptyEl = null;\n }\n\n // Hot Path: If both new and old are empty, skip processing\n if (itemCount === 0 && itemMap.size === 0) {\n oldKeys = [];\n return;\n }\n\n debug.log('list', `${containerSelector} updating with ${itemCount} items`);\n\n // 2. Build Old Index Map (O(M))\n const oldIndexMap = new Map<string | number, number>();\n const oldLen = oldKeys.length;\n for (let i = 0; i < oldLen; i++) {\n oldIndexMap.set(oldKeys[i]!, i);\n }\n\n // 3. Prepare keys and LIS indices in a single pass (O(N))\n const newKeys: (string | number)[] = new Array(itemCount);\n const newKeySet = new Set<string | number>();\n const newIndices = new Int32Array(itemCount);\n\n for (let i = 0; i < itemCount; i++) {\n const item = items[i] as T;\n const k = getKey(item, i);\n\n if (newKeySet.has(k)) {\n console.warn(`${LOG_PREFIXES.LIST} ${ERROR_MESSAGES.DUPLICATE_KEY(k, i)}`);\n }\n\n newKeys[i] = k;\n newKeySet.add(k);\n newIndices[i] = oldIndexMap.get(k) ?? -1;\n }\n\n // 4. Remove vanished items (O(M))\n if (itemMap.size > 0) {\n for (const [k, entry] of itemMap) {\n if (newKeySet.has(k) || removingKeys.has(k)) continue;\n\n const cleanupItem = () => {\n entry.$el.remove();\n if (entry.$el[0]) registry.cleanup(entry.$el[0]);\n removingKeys.delete(k);\n debug.log('list', `${containerSelector} removed item:`, k);\n };\n\n itemMap.delete(k);\n removingKeys.add(k);\n\n if (onRemove) {\n const result = onRemove(entry.$el);\n if (result instanceof Promise) result.then(cleanupItem);\n else cleanupItem();\n } else {\n cleanupItem();\n }\n }\n }\n\n // After removals, check if we can skip the rest\n if (itemCount === 0) {\n oldKeys = [];\n return;\n }\n\n // 5. Get LIS (O(N log N))\n const lisArr = getLIS(newIndices);\n let lisIdx = lisArr.length - 1;\n\n // 6. Update and Reorder (Backwards iteration for insertBefore efficiency)\n let nextNode: Node | null = null;\n for (let i = itemCount - 1; i >= 0; i--) {\n const k = newKeys[i]!;\n const item = items[i]!;\n const entry = itemMap.get(k);\n\n if (entry) {\n // Existing Item Path\n const oldItem = entry.item;\n entry.item = item;\n const el = entry.$el[0];\n if (!el) continue;\n\n if (update) {\n update(entry.$el, item, i);\n debug.domUpdated(entry.$el, 'list.update', item);\n } else if (oldItem !== item && !shallowEqual(oldItem, item)) {\n {\n const rawRender = render(item, i);\n const safeRender =\n typeof rawRender === 'string' ? sanitizeHtml(rawRender) : rawRender;\n const $newEl = $(safeRender as string) as JQuery;\n const needsNextNodeUpdate = nextNode === el;\n entry.$el.replaceWith($newEl);\n entry.$el = $newEl;\n if (bind) bind($newEl, item, i);\n debug.domUpdated($newEl, 'list.render', item);\n if (needsNextNodeUpdate) nextNode = $newEl[0] || null;\n }\n }\n\n // Move if not in LIS\n if (lisIdx >= 0 && lisArr[lisIdx] === i) {\n lisIdx--;\n } else {\n const currentEl = entry.$el[0]!;\n if (nextNode?.isConnected) {\n if (nextNode !== currentEl) entry.$el.insertBefore(nextNode);\n } else {\n entry.$el.appendTo($container);\n }\n }\n nextNode = entry.$el[0] || null;\n } else {\n // New Item Path\n const rendered = render(item, i);\n const safeRendered = typeof rendered === 'string' ? sanitizeHtml(rendered) : rendered;\n const $el = $(safeRendered as string) as JQuery;\n itemMap.set(k, { $el, item });\n\n if (nextNode?.isConnected) $el.insertBefore(nextNode);\n else $el.appendTo($container);\n\n if (bind) bind($el, item, i);\n if (onAdd) onAdd($el);\n\n debug.domUpdated($el, 'list.add', item);\n nextNode = $el[0] || null;\n }\n }\n\n oldKeys = newKeys;\n });\n\n registry.trackEffect(this, fx);\n registry.trackCleanup(this, () => {\n itemMap.clear();\n removingKeys.clear();\n oldKeys = [];\n $emptyEl?.remove();\n });\n });\n};\n","import $ from 'jquery';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ComponentFn } from './types';\nimport { getSelector } from './utils';\n\nconst mountedComponents = new WeakMap<Element, () => void>();\n\n/**\n * Mounts a functional component to the element.\n * Automatically cleans up existing components on the same element.\n */\n$.fn.atomMount = function <P>(component: ComponentFn<P>, props: P = {} as P): JQuery {\n return this.each(function () {\n const selector = getSelector(this);\n\n // 1. Unmount existing component (Consolidated O(1) lookup)\n const existingUnmount = mountedComponents.get(this);\n if (existingUnmount) {\n debug.log('mount', `${selector} unmounting existing component`);\n existingUnmount();\n }\n\n debug.log('mount', `${selector} mounting component`);\n\n // 2. Mount\n let userCleanup: undefined | (() => void);\n try {\n userCleanup = component($(this), props);\n } catch (e) {\n console.error('[atom-effect-jquery] Mount error:', e);\n return;\n }\n\n // 3. Optimized cleanup\n const fullCleanup = () => {\n // Atomic delete() acts as a high-performance guard against double-cleanup\n if (!mountedComponents.delete(this)) return;\n\n debug.log('mount', `${selector} full cleanup`);\n\n if (typeof userCleanup === 'function') {\n try {\n userCleanup();\n } catch (e) {\n console.error('[atom-effect-jquery] Cleanup error:', e);\n }\n }\n registry.cleanupTree(this);\n };\n\n mountedComponents.set(this, fullCleanup);\n registry.trackCleanup(this, fullCleanup);\n });\n};\n\n/**\n * Manually unmounts a component from the element.\n */\n$.fn.atomUnmount = function (): JQuery {\n return this.each(function () {\n const unmount = mountedComponents.get(this);\n if (unmount) unmount();\n });\n};\n","import { computed, atom as createAtom, effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { LOG_PREFIXES, ROUTE_DEFAULTS } from './constants';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { RouteConfig, RouteDefinition, Router, WritableAtom } from './types';\n\n/**\n * Log prefix for router warnings and errors.\n */\nconst LOG_PREFIX = LOG_PREFIXES.ROUTE;\n\n/**\n * Creates an SPA router with reactive state management.\n * Supports both hash-based and pushState-based (history) routing.\n *\n * This removes boilerplate from manual route handling by:\n * - Automatically tracking URL changes and updating the UI\n * - Managing template rendering with lifecycle hooks\n * - Handling active link states reactively\n * - Providing navigation guard support (onLeave)\n *\n * @param config - Router configuration\n * @returns Router instance with navigate, destroy methods and currentRoute atom\n *\n * @example\n * ```ts\n * const router = $.route({\n * target: '#app',\n * default: 'home',\n * routes: {\n * home: { template: '#tmpl-home' },\n * about: { template: '#tmpl-about' }\n * }\n * });\n */\nexport function route(config: RouteConfig): Router {\n // Destructure configuration with defaults\n const {\n target,\n default: defaultRoute,\n routes,\n notFound,\n mode = ROUTE_DEFAULTS.MODE,\n basePath = ROUTE_DEFAULTS.BASE_PATH,\n autoBindLinks = ROUTE_DEFAULTS.AUTO_BIND_LINKS,\n activeClass = ROUTE_DEFAULTS.ACTIVE_CLASS,\n beforeTransition,\n afterTransition,\n } = config;\n\n const isHistoryMode = mode === 'history';\n\n let isDestroyed = false;\n let previousRoute: string | null = null;\n let previousUrl: string = isHistoryMode\n ? window.location.pathname + window.location.search\n : window.location.hash;\n const cleanups: Array<() => void> = [];\n const boundLinks = new Set<HTMLElement>(); // Track links for cleanup via registry\n\n // DOM references\n const $target = $(target);\n\n // --- Mode-abstracted internal functions ---\n\n /**\n * Extracts route name from current URL.\n * Hash mode: parses window.location.hash\n * History mode: extracts from pathname after basePath\n */\n const getRouteName = (): string => {\n if (isHistoryMode) {\n let pathname = window.location.pathname;\n // Remove basePath prefix\n if (basePath && pathname.startsWith(basePath)) {\n pathname = pathname.substring(basePath.length);\n }\n // Remove leading slash and extract route name (before any query)\n const routeName = pathname.replace(/^\\//, '');\n return routeName || defaultRoute;\n }\n // Hash mode\n const hash = window.location.hash;\n const qIndex = hash.indexOf('?');\n const routeName = qIndex === -1 ? hash.substring(1) : hash.substring(1, qIndex);\n return routeName || defaultRoute;\n };\n\n /**\n * Parses query parameters from the current URL.\n * Hash mode: parses from hash string (after ?)\n * History mode: parses from window.location.search\n */\n const getQueryParams = (): Record<string, string> => {\n let raw: string;\n\n if (isHistoryMode) {\n raw = window.location.search.substring(1); // Remove leading '?'\n if (!raw) return {};\n } else {\n const hash = window.location.hash;\n const qIndex = hash.indexOf('?');\n if (qIndex === -1) return {};\n raw = hash.substring(qIndex + 1);\n }\n\n const sp = new URLSearchParams(raw);\n const params: Record<string, string> = Object.fromEntries(sp);\n\n // Warn about malformed percent-encoded sequences (e.g. %FF%FE)\n if (raw.includes('%')) {\n try {\n decodeURIComponent(raw);\n } catch (_e) {\n debug.warn(`${LOG_PREFIX} Malformed URI component: ${raw}`);\n }\n }\n\n return params;\n };\n\n // --- Helper: Safe History API Wrappers ---\n const safePushState = (data: unknown, unused: string, url: string | URL | null) => {\n try {\n history.pushState(data, unused, url);\n return true;\n } catch (e) {\n debug.warn(\n `${LOG_PREFIX} PushState failed (likely file:// protocol or security restriction). UI will update, but URL will not.`,\n e\n );\n return false;\n }\n };\n\n const safeReplaceState = (data: unknown, unused: string, url: string | URL | null) => {\n try {\n history.replaceState(data, unused, url);\n return true;\n } catch (e) {\n debug.warn(`${LOG_PREFIX} ReplaceState failed.`, e);\n return false;\n }\n };\n\n /**\n * Updates the URL to reflect a new route.\n */\n const setUrl = (routeName: string): void => {\n if (isHistoryMode) {\n // Remove trailing slash from basePath if present\n const url = `${basePath.replace(/\\/$/, '')}/${routeName}`;\n safePushState(null, '', url);\n // Always update previousUrl so internal state remains consistent\n previousUrl = url;\n } else {\n const hash = `#${routeName}`;\n previousUrl = hash;\n window.location.hash = hash;\n }\n };\n\n /**\n * Restores the URL when a navigation guard blocks the transition.\n */\n const restoreUrl = (): void => {\n if (isHistoryMode) {\n safeReplaceState(null, '', previousUrl);\n } else {\n window.location.hash = previousUrl;\n }\n };\n\n /**\n * Returns the current full URL string for comparison purposes.\n */\n const getCurrentUrl = (): string => {\n if (isHistoryMode) {\n return window.location.pathname + window.location.search;\n }\n return window.location.hash;\n };\n\n // --- End mode-abstracted functions ---\n\n /**\n * Resolves route configuration, falling back to notFound route if needed.\n */\n const getRouteConfig = (routeName: string): RouteDefinition | null => {\n let routeConfig = routes[routeName];\n\n // Fallback to notFound route if route doesn't exist\n if (!routeConfig && notFound) {\n routeConfig = routes[notFound];\n }\n\n if (!routeConfig) {\n debug.warn(`${LOG_PREFIX} Route \"${routeName}\" not found and no notFound route configured`);\n return null;\n }\n\n return routeConfig;\n };\n\n /**\n * Renders template content into target container.\n * @returns true if template was found and rendered, false otherwise\n */\n const renderTemplate = (templateSelector: string): boolean => {\n const template = document.querySelector(templateSelector) as HTMLTemplateElement;\n\n if (!template?.content) {\n debug.warn(`${LOG_PREFIX} Template \"${templateSelector}\" not found`);\n return false;\n }\n\n const clonedContent = template.content.cloneNode(true) as DocumentFragment;\n $target.append(clonedContent);\n\n return true;\n };\n\n const currentRoute: WritableAtom<string> = createAtom(getRouteName());\n const queryParamsAtom: WritableAtom<Record<string, string>> = createAtom(getQueryParams());\n\n /**\n * Renders the specified route, including lifecycle hooks and content.\n * This is the main rendering function that orchestrates the entire render cycle.\n */\n const renderRoute = (routeName: string): void => {\n if (isDestroyed) return;\n\n // Validate target element exists\n const container = $target[0];\n if (!container) {\n debug.warn(`${LOG_PREFIX} Target element \"${target}\" not found`);\n return;\n }\n\n // Resolve route configuration\n const routeConfig = getRouteConfig(routeName);\n if (!routeConfig) return;\n\n // Parse query parameters\n const params = getQueryParams();\n\n // Call beforeTransition hook\n if (beforeTransition) {\n beforeTransition(previousRoute || routeName, routeName);\n }\n\n // Clear current content\n $target.empty();\n\n // Call onEnter hook and merge params\n let routeParams = params;\n if (routeConfig.onEnter) {\n const result = routeConfig.onEnter(params);\n if (result !== undefined) {\n routeParams = { ...params, ...result };\n }\n }\n\n // Render content (custom render or template)\n if (routeConfig.render) {\n routeConfig.render(container, routeName, routeParams);\n } else if (routeConfig.template) {\n if (renderTemplate(routeConfig.template)) {\n if (routeConfig.onMount) {\n routeConfig.onMount($target.children());\n }\n }\n }\n\n // Call afterTransition hook\n if (afterTransition) {\n afterTransition(previousRoute || routeName, routeName);\n }\n\n // Update previous route for next transition\n previousRoute = routeName;\n };\n\n /**\n * Navigates to the specified route programmatically.\n * Respects navigation guards (onLeave hooks).\n */\n const navigate = (routeName: string): void => {\n if (isDestroyed) return;\n\n // Check if leaving current route is allowed\n const currentRouteName = currentRoute.value;\n const currentRouteConfig = routes[currentRouteName];\n\n if (currentRouteConfig?.onLeave) {\n const canLeave = currentRouteConfig.onLeave();\n if (canLeave === false) return; // Navigation blocked\n }\n\n // Resolve empty route name to default route, matching getRouteName behavior\n const resolved = routeName || defaultRoute;\n setUrl(resolved);\n currentRoute.value = resolved;\n };\n\n /**\n * Handles browser URL change events (hashchange or popstate).\n */\n const handleUrlChange = (): void => {\n if (isDestroyed) return;\n\n const currentUrl = getCurrentUrl();\n if (currentUrl === previousUrl) return; // No actual change, or already handled by navigate()\n\n const newRoute = getRouteName();\n const oldRouteName = currentRoute.value;\n const params = getQueryParams();\n\n if (oldRouteName !== newRoute) {\n // Check onLeave guard for user-driven navigation\n const oldRouteConfig = routes[oldRouteName];\n if (oldRouteConfig?.onLeave) {\n if (oldRouteConfig.onLeave() === false) {\n // Navigation blocked, revert URL\n restoreUrl();\n return;\n }\n }\n currentRoute.value = newRoute;\n queryParamsAtom.value = params;\n } else {\n // Same route but URL changed (e.g., query params)\n queryParamsAtom.value = params;\n const routeConfig = routes[oldRouteName];\n if (routeConfig?.onParamsChange) {\n routeConfig.onParamsChange(params);\n } else {\n renderRoute(newRoute);\n }\n }\n\n previousUrl = currentUrl;\n };\n\n /**\n * Sets up automatic binding for navigation links with data-route attribute.\n * Uses event delegation for clicks handling dynamic elements.\n * Uses MutationObserver for active state management of dynamic elements.\n */\n const setupAutoBindLinks = (): void => {\n if (!autoBindLinks) return;\n\n // 1. Event Delegation for Navigation (Handles future elements automatically)\n const delegateHandler = (e: JQuery.TriggeredEvent) => {\n e.preventDefault();\n const routeAttr = (e.currentTarget as HTMLElement).dataset.route;\n if (routeAttr != null) navigate(routeAttr);\n };\n\n $(document).on('click', '[data-route]', delegateHandler);\n\n cleanups.push(() => {\n $(document).off('click', '[data-route]', delegateHandler);\n });\n\n // 2. Active State Management — single effect for all links\n const trackLink = (el: HTMLElement) => {\n if (boundLinks.has(el)) return;\n boundLinks.add(el);\n el.classList.add('_aes-bound');\n };\n\n // Initial bind\n for (const el of document.querySelectorAll<HTMLElement>('[data-route]')) {\n trackLink(el);\n }\n\n const updateActiveStates = (current: string) => {\n for (const el of boundLinks) {\n const routeAttr = el.dataset.route!;\n const isActive = current === routeAttr;\n el.classList.toggle(activeClass, isActive);\n if (isActive) {\n el.setAttribute('aria-current', 'page');\n } else {\n el.removeAttribute('aria-current');\n }\n }\n };\n\n // Single effect that updates all tracked links\n const activeLinksEffect = effect(() => {\n updateActiveStates(currentRoute.value);\n });\n cleanups.push(() => activeLinksEffect.dispose());\n\n // Watch for new elements\n const observer = new MutationObserver((mutations) => {\n let added = false;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === 1) {\n const el = node as HTMLElement;\n if (el.matches?.('[data-route]')) {\n trackLink(el);\n added = true;\n }\n if (el.querySelectorAll) {\n el.querySelectorAll('[data-route]').forEach((child) => {\n trackLink(child as HTMLElement);\n added = true;\n });\n }\n }\n });\n }\n }\n // Update active states for newly added links\n if (added) {\n updateActiveStates(currentRoute.value);\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n cleanups.push(() => observer.disconnect());\n };\n\n /**\n * Cleans up all event listeners and effects.\n * Safe to call multiple times.\n */\n const destroy = (): void => {\n if (isDestroyed) return;\n isDestroyed = true;\n\n // Cleanup router-level effects (event listener, render effect)\n cleanups.forEach((cleanup) => cleanup());\n cleanups.length = 0;\n\n // Cleanup bound links\n boundLinks.forEach((el) => {\n el.classList.remove('_aes-bound');\n registry.cleanup(el);\n });\n boundLinks.clear();\n };\n\n // Set up URL change listener (hashchange for hash mode, popstate for history mode)\n const eventName = isHistoryMode ? 'popstate' : 'hashchange';\n window.addEventListener(eventName, handleUrlChange);\n cleanups.push(() => window.removeEventListener(eventName, handleUrlChange));\n\n // Initialize: Set up reactive rendering effect\n const renderEffect = effect(() => {\n renderRoute(currentRoute.value);\n });\n cleanups.push(() => renderEffect.dispose());\n\n // Auto-bind navigation links\n setupAutoBindLinks();\n\n // Auto-cleanup router if target element is removed\n if ($target[0]) {\n registry.trackCleanup($target[0], destroy);\n }\n\n return {\n currentRoute,\n queryParams: computed(() => queryParamsAtom.value),\n navigate,\n destroy,\n };\n}\n\n/**\n * Register as jQuery static method.\n */\n$.extend({\n route,\n});\n","import { computed } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport type { ComputedAtom, FetchOptions } from './types';\n\n/**\n * Creates a reactive fetch atom that auto-refetches when reactive dependencies change.\n *\n * Wraps core's async `computed` with jQuery's `$.ajax`.\n * Returns a standard `ComputedAtom<T>` with `isPending`, `hasError`, `invalidate()`, etc.\n */\nfunction atomFetch<T>(urlOrFn: string | (() => string), options: FetchOptions<T>): ComputedAtom<T> {\n const { defaultValue, transform, method, headers, ajaxOptions } = options;\n const getUrl = typeof urlOrFn === 'function' ? urlOrFn : () => urlOrFn;\n\n return computed(\n async () => {\n const url = getUrl();\n const raw = await $.ajax({ ...ajaxOptions, url, method, headers });\n return transform ? transform(raw) : (raw as T);\n },\n { defaultValue, lazy: false }\n );\n}\n\n$.extend({ atomFetch });\n","import { batch } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { registry } from './registry';\n\n/** Generic event handler type matching jQuery's internal handler signature */\ntype EventHandler = JQuery.EventHandlerBase<unknown, JQuery.TriggeredEvent>;\n\n/**\n * WeakMap to store strict association between original handlers and batched wrappers.\n * This ensures that .off() works correctly when passing the original handler.\n */\nconst handlerMap = new WeakMap<EventHandler, EventHandler>();\n\nlet isjQueryOverridesEnabled = false;\n\nconst getWrappedHandler = (fn: EventHandler): EventHandler => {\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 handlerMap.set(fn, wrapped);\n }\n return wrapped;\n};\n\n/**\n * Patches jQuery methods to integrate with the reactive system.\n */\nexport function enablejQueryOverrides() {\n if (isjQueryOverridesEnabled) return;\n isjQueryOverridesEnabled = true;\n\n const originalOn = $.fn.on;\n const originalOff = $.fn.off;\n const originalRemove = $.fn.remove;\n const originalEmpty = $.fn.empty;\n const originalDetach = $.fn.detach;\n\n // ========== Lifecycle Overrides ==========\n\n // .remove() - Delete element + Unsubscribe\n $.fn.remove = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n for (let i = 0, len = targets.length; i < len; i++) {\n const el = targets[i];\n if (el) {\n registry.cleanupTree(el);\n registry.markIgnored(el);\n }\n }\n return originalRemove.call(this, selector);\n };\n\n // .empty() - Delete children + Recursive Unsubscribe\n $.fn.empty = function (this: JQuery) {\n for (let i = 0, len = this.length; i < len; i++) {\n const el = this[i];\n if (el) registry.cleanupDescendants(el);\n }\n return originalEmpty.call(this);\n };\n\n // .detach() - Remove from DOM + Keep Subscription\n $.fn.detach = function (this: JQuery, selector?: string) {\n const targets = selector ? this.filter(selector) : this;\n for (let i = 0, len = targets.length; i < len; i++) {\n const el = targets[i];\n if (el) registry.keep(el);\n }\n return originalDetach.call(this, selector);\n };\n\n // ========== Event Overrides ==========\n\n // Patch .on()\n $.fn.on = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n\n if (types && typeof types === 'object') {\n const map = types as Record<string, EventHandler>;\n const newMap: Record<string, EventHandler> = {};\n for (const key in map) {\n const handler = map[key];\n if (handler) {\n newMap[key] = getWrappedHandler(handler);\n }\n }\n args[0] = newMap;\n } else {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = getWrappedHandler(args[i] as EventHandler);\n break;\n }\n }\n }\n\n return originalOn.apply(this, args as Parameters<typeof originalOn>);\n };\n\n // Patch .off()\n $.fn.off = function (this: JQuery, ...args: unknown[]) {\n const types = args[0];\n\n if (types && typeof types === 'object') {\n const map = types as Record<string, EventHandler>;\n const newMap: Record<string, EventHandler> = {};\n for (const key in map) {\n const handler = map[key];\n if (handler) {\n newMap[key] = handlerMap.get(handler) || handler;\n }\n }\n args[0] = newMap;\n } else {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = handlerMap.get(args[i] as EventHandler) || args[i];\n break;\n }\n }\n }\n\n return originalOff.apply(this, args as Parameters<typeof originalOff>);\n };\n}\n","/**\n * atom-effect-jquery\n *\n * Brings reactivity to jQuery.\n *\n * Features:\n * - Full CJK IME Support (Input Method Editor).\n * - Auto-cleanup via MutationObserver (No memory leaks).\n * - Debug Mode: Console logging + Visual Highlighting.\n */\n\nimport $ from 'jquery';\n\n// Register plugins\nimport './namespace';\nimport './chainable';\nimport './unified';\nimport './list';\nimport './mount';\nimport './route';\nimport './fetch';\n\nimport { enablejQueryOverrides } from './jquery-patch';\nimport { disableAutoCleanup, enableAutoCleanup, registry } from './registry';\n\n// Auto-enable on DOM ready\n$(() => {\n enablejQueryOverrides();\n enableAutoCleanup(document.body);\n});\n\n// Explicit import support\nexport {\n atom,\n batch,\n computed,\n effect,\n untracked,\n} from '@but212/atom-effect';\n// Optional: Auto-batching for jQuery events\nexport { enablejQueryOverrides } from './jquery-patch';\n// Export types\nexport type {\n BindingOptions,\n ComponentFn,\n ComputedAtom,\n ListOptions,\n ReadonlyAtom,\n RouteConfig,\n RouteDefinition,\n Router,\n WritableAtom,\n} from './types';\n\nexport { registry, enableAutoCleanup, disableAutoCleanup };\nexport default $;\n"],"names":["A","l","K","a","p","ot","X","B","J","ht","C","e","E","g","m","ct","ut","U","L","i","lt","_t","Z","n","r","o","h","M","G","I","v","c","D","tt","et","x","z","w","H","k","st","at","Q","Y","ft","Et","b","V","it","nt","_","Tt","j","dt","Ot","pt","u","f","bt","At","rt","q","$","N","S","R","d","O","y","T","P","It","St","gt","F","yt","W","Dt","Rt","kt","isReactive","value","isAtom","isComputed","getSelector","el","dom","id","tagName","classes","res","len","cls","sanitizeHtml","html","safe","dangerousTagPattern","prev","protocolRegex","dangerousDataUriRegex","URL_ATTRS","DANGEROUS_PROTOCOL_RE","isDangerousUrl","attrName","isDangerousCssValue","shallowEqual","keysA","keysB","objB","key","getLIS","arr","predecessors","result","resultLen","val","lastIdx","left","right","mid","midIdx","leftIdx","lis","curr","getInitialDebugState","flag","debugEnabled","debug","type","args","name","oldVal","newVal","$el","highlightElement","selector","HIGHLIGHT_CLASS","styleInjected","injectHighlightStyle","style","highlightTimers","existing","atom","initialValue","options","createAtom","nextTick","resolve","computed","effect","batch","untracked","AES_BOUND_CLASS","LOG_PREFIXES","ROUTE_DEFAULTS","INPUT_DEFAULTS","DANGEROUS_PROPS","ERROR_MESSAGES","raw","prop","index","AES_BOUND","BindingRegistry","node","fx","record","fn","effects","cleanups","children","child","registry","observer","enableAutoCleanup","root","mutations","removedNodes","rLen","disableAutoCleanup","registerReactiveEffect","source","updater","debugType","BindingFlags","createInputBindingState","applyInputBinding","debounceMs","event","parse","format","equal","state","syncAtomFromDom","currentRaw","parsed","onBlur","formatted","onInput","handlers","currentVal","start","end","camelCache","getCamelCase","cached","createContext","_$el","bindText","ctx","bindHtml","sanitized","bindClass","classMap","className","bindCss","cssMap","camel","isArr","unit","strVal","bindAttr","attrMap","c0","bindProp","propMap","bindVisibility","condition","invert","label","visible","bindVal","cfg","fxFn","cleanup","bindChecked","handler","current","bindEvents","eventMap","listener","formatter","render","bind","update","onAdd","onRemove","empty","getKey","item","_index","$container","containerSelector","itemMap","removingKeys","oldKeys","$emptyEl","items","itemCount","safeEmpty","oldIndexMap","oldLen","newKeys","newKeySet","newIndices","entry","cleanupItem","lisArr","lisIdx","nextNode","oldItem","rawRender","safeRender","$newEl","needsNextNodeUpdate","currentEl","rendered","safeRendered","mountedComponents","component","props","existingUnmount","userCleanup","fullCleanup","unmount","LOG_PREFIX","route","config","target","defaultRoute","routes","notFound","mode","basePath","autoBindLinks","activeClass","beforeTransition","afterTransition","isHistoryMode","isDestroyed","previousRoute","previousUrl","boundLinks","$target","getRouteName","pathname","hash","qIndex","getQueryParams","sp","params","safePushState","data","unused","url","safeReplaceState","setUrl","routeName","restoreUrl","getCurrentUrl","getRouteConfig","routeConfig","renderTemplate","templateSelector","template","clonedContent","currentRoute","queryParamsAtom","renderRoute","container","routeParams","navigate","currentRouteName","currentRouteConfig","resolved","handleUrlChange","currentUrl","newRoute","oldRouteName","oldRouteConfig","setupAutoBindLinks","delegateHandler","routeAttr","trackLink","updateActiveStates","isActive","activeLinksEffect","added","mutation","destroy","eventName","renderEffect","atomFetch","urlOrFn","defaultValue","transform","method","headers","ajaxOptions","getUrl","handlerMap","isjQueryOverridesEnabled","getWrappedHandler","wrapped","enablejQueryOverrides","originalOn","originalOff","originalRemove","originalEmpty","originalDetach","targets","types","map","newMap"],"mappings":";;AAAK,MAACA,KAAI;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AACZ,GAAGC,IAAI;AAAA,EACL,UAAU;AAAA,EACV,WAAW;AACb,GAAGC,KAAI;AAAA,EACL,UAAU;AAAA;AAAA,EAEV,aAAa;AAAA,EACb,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,WAAW;AACb,GAAGC,IAAI;AAAA,EACL,UAAU;AAAA,EACV,MAAM;AAAA,EACN,wBAAwB;AAC1B,GAIGC,IAAI;AAAA;AAAA,EAEL,2BAA2B;AAAA,EAC3B,2BAA2B;AAAA;AAAA,EAE3B,0BAA0B;AAAA,EAC1B,sBAAsB;AAAA,EACtB,sBAAsB;AAAA;AAAA,EAEtB,8BAA8B;AAChC,GAAGC,KAAK;AAAA,EACN,oBAAoB;AAEtB,GAAGC,KAAI;AAAA,EACL,mBAAmB;AAAA,EACnB,gBAAgB,OAAO,mBAAmB;AAC5C,GAAGC,KAAI,YAAYC,KAAI,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM,IAAIC,KAAK,OAAO,OAAO,CAAA,CAAE;AAC7F,MAAMC,WAAU,MAAM;AAAA,EACpB,YAAY,GAAGC,IAAI,MAAM,IAAI,IAAI;AAC/B,UAAM,CAAC,GAAG,KAAK,QAAQA,GAAG,KAAK,cAAc,GAAG,KAAK,OAAO;AAAA,EAC9D;AACF;AACA,MAAMC,UAAUF,GAAE;AAAA,EAChB,YAAY,GAAGC,IAAI,MAAM;AACvB,UAAM,GAAGA,GAAG,EAAE,GAAG,KAAK,OAAO;AAAA,EAC/B;AACF;AACA,MAAME,WAAUH,GAAE;AAAA,EAChB,YAAY,GAAGC,IAAI,MAAM;AACvB,UAAM,GAAGA,GAAG,EAAE,GAAG,KAAK,OAAO;AAAA,EAC/B;AACF;AACA,MAAMG,WAAUJ,GAAE;AAAA,EAChB,YAAY,GAAGC,IAAI,MAAM;AACvB,UAAM,GAAGA,GAAG,EAAE,GAAG,KAAK,OAAO;AAAA,EAC/B;AACF;AACA,MAAMI,KAAqB,uBAAO,sBAAsB,GAAGC,KAAqB,uBAAO,iBAAiB,GAAGC,KAAoB,uBAAO,2BAA2B,GAAGC,KAAI;AAAA;AAAA,EAEtK,SAASV;AAAA,EACT,kBAAkBH,GAAG;AAAA,EACrB,KAAKc,GAAG,GAAG;AAAA,EACX;AAAA,EACA,cAAcA,GAAG,GAAG;AAClB,QAAIA,MAAM;AACR,YAAM,IAAIP,EAAE,qCAAqC;AAAA,EACrD;AAAA,EACA,gBAAgBO,GAAG,GAAGR,GAAG;AAAA,EACzB;AAAA,EACA,cAAc,CAACQ,MAAMA,IAAIJ,EAAE;AAAA,EAC3B,cAAc,CAACI,MAAMA,IAAIH,EAAE;AAC7B;AACA,IAAII,KAAK;AACT,MAAMC,KAAK,MAAMD;AACjB,SAASE,GAAEH,GAAG,GAAGR,GAAG;AAClB,MAAI,OAAO,KAAK,YAAY;AAC1B,UAAMY,IAAI;AACV,aAASC,IAAI,GAAGC,IAAId,EAAE,QAAQa,IAAIC,GAAGD,KAAK;AACxC,YAAME,IAAIf,EAAEa,CAAC;AACb,UAAIE,KAAKA,EAAE,OAAOH,EAAG;AAAA,IACvB;AACA,IAAAZ,EAAE,KAAK,IAAIgB,GAAEJ,GAAG,MAAM,CAAC;AACvB;AAAA,EACF;AACA,MAAI,mBAAmB,GAAG;AACxB,MAAE,cAAcJ,CAAC;AACjB;AAAA,EACF;AACA,QAAM,IAAI;AACV,WAASI,IAAI,GAAGC,IAAIb,EAAE,QAAQY,IAAIC,GAAGD,KAAK;AACxC,UAAME,IAAId,EAAEY,CAAC;AACb,QAAIE,KAAKA,EAAE,QAAQ,EAAG;AAAA,EACxB;AACA,EAAAd,EAAE,KAAK,IAAIgB,GAAE,QAAQ,CAAC,CAAC;AACzB;AACA,SAASC,GAAET,GAAG,GAAGR,GAAG;AAClB,QAAM,IAAoB,oBAAI,IAAG;AACjC,WAASY,IAAI,GAAGC,IAAI,EAAE,QAAQD,IAAIC,GAAGD,KAAK;AACxC,UAAME,IAAI,EAAEF,CAAC;AACb,IAAAE,GAAG,SAAS,EAAE,IAAIA,EAAE,MAAMA,EAAE,KAAK;AAAA,EACnC;AACA,WAASF,IAAI,GAAGC,IAAIL,EAAE,QAAQI,IAAIC,GAAGD,KAAK;AACxC,UAAME,IAAIN,EAAEI,CAAC;AACb,QAAI,CAACE,EAAG;AACR,UAAMC,IAAID,EAAE,MAAMI,IAAI,EAAE,IAAIH,CAAC;AAC7B,IAAAG,MAAM,UAAUJ,EAAE,QAAQI,GAAG,EAAE,OAAOH,CAAC,MAAMR,GAAE,cAAcQ,GAAGf,CAAC,GAAGc,EAAE,QAAQC,EAAE,UAAUf,CAAC;AAAA,EAC7F;AACA,aAAWY,KAAK,EAAE,OAAM;AACtB,IAAAA,EAAC;AACL;AACA,MAAMO,GAAE;AAAA,EACN,YAAY,GAAGnB,GAAG,IAAI,QAAQ;AAC5B,SAAK,OAAO,GAAG,KAAK,UAAUA,GAAG,KAAK,QAAQ;AAAA,EAChD;AACF;AACA,MAAMgB,GAAE;AAAA,EACN,YAAY,GAAGhB,GAAG;AAChB,SAAK,KAAK,GAAG,KAAK,MAAMA;AAAA,EAC1B;AACF;AACA,MAAMoB,IAAI;AAAA;AAAA,EAER,2BAA2B;AAAA,EAC3B,mCAAmC;AAAA,EACnC,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,8BAA8B;AAAA,EAC9B,mBAAmB;AAAA;AAAA,EAEnB,kCAAkC;AAAA,EAClC,mCAAmC;AAAA;AAAA,EAEnC,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA;AAAA,EAEjB,0BAA0B,CAACZ,GAAG,MAAM,6BAA6BA,CAAC,eAAe,CAAC;AAAA;AAAA,EAElF,iCAAiC;AAAA;AAAA,EAEjC,iCAAiC;AAAA,EACjC,qCAAqC;AAAA,EACrC,mCAAmC;AACrC;AACA,SAASa,GAAEb,GAAG,GAAGR,GAAG;AAClB,MAAIQ,aAAaT;AACf,WAAOS;AACT,QAAM,IAAIA,aAAa,OAAOI,IAAI,IAAIJ,EAAE,UAAU,OAAOA,CAAC,GAAGK,IAAI,IAAIL,IAAI,QAAQO,IAAI,GAAG,IAAIP,EAAE,YAAY,OAAO,kBAAkB,KAAKR,CAAC,MAAMY,CAAC;AAChJ,SAAO,IAAI,EAAEG,GAAGF,CAAC;AACnB;AACA,MAAMS,GAAG;AAAA,EACP,cAAc;AACZ,SAAK,QAAQ,GAAG,KAAK,UAAU,GAAG,KAAK,iBAAiB,IAAI,KAAK,KAAKZ,GAAE,IAAKd;AAAA,EAC/E;AACF;AACA,MAAM2B,WAAWD,GAAG;AAAA;AAAA;AAAA;AAAA,EAIlB,UAAU,GAAG;AACX,UAAMtB,IAAI,OAAO,KAAK;AACtB,QAAI,CAACA,MAAM,CAAC,KAAK,OAAO,EAAE,WAAW;AACnC,YAAMqB;AAAA,QACJ,IAAI,UAAU,oBAAoB;AAAA,QAClCtB;AAAA,QACAqB,EAAE;AAAA,MACV;AACI,UAAM,IAAI,KAAK;AACf,aAASP,IAAI,GAAGC,IAAI,EAAE,QAAQD,IAAIC,GAAGD,KAAK;AACxC,YAAME,IAAI,EAAEF,CAAC;AACb,UAAIE,MAAMf,IAAIe,EAAE,OAAO,IAAIA,EAAE,QAAQ;AACnC,eAAO,MAAM;AAAA,QACb;AAAA,IACJ;AACA,UAAMH,IAAI,IAAII;AAAA,MACZhB,IAAI,IAAI;AAAA,MACRA,IAAI,SAAS;AAAA,IACnB;AACI,WAAO,EAAE,KAAKY,CAAC,GAAG,MAAM,KAAK,aAAaA,CAAC;AAAA,EAC7C;AAAA,EACA,aAAa,GAAG;AACd,UAAMZ,IAAI,KAAK,cAAc,IAAIA,EAAE,QAAQ,CAAC;AAC5C,QAAI,MAAM,GAAI;AACd,UAAMY,IAAIZ,EAAE,IAAG;AACf,QAAIA,EAAE,UAAUY,MAAMZ,EAAE,CAAC,IAAIY;AAAA,EAC/B;AAAA,EACA,kBAAkB;AAChB,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EACA,mBAAmB,GAAGZ,GAAG;AACvB,QAAI,KAAK,aAAa,WAAW,EAAG;AACpC,UAAM,IAAI,KAAK,aAAa,MAAM,CAAC,GAAGY,IAAI,EAAE;AAC5C,aAASC,IAAI,GAAGA,IAAID,GAAGC,KAAK;AAC1B,YAAMC,IAAI,EAAED,CAAC;AACb,UAAIC;AACF,YAAI;AACF,UAAAA,EAAE,KAAKA,EAAE,GAAG,GAAGd,CAAC,IAAIc,EAAE,OAAOA,EAAE,IAAI,QAAO;AAAA,QAC5C,SAASC,GAAG;AACV,eAAK,mBAAmBA,CAAC;AAAA,QAC3B;AAAA,IACJ;AAAA,EACF;AAAA,EACA,mBAAmB,GAAG;AACpB,YAAQ,MAAMM,GAAE,GAAGtB,IAAGqB,EAAE,iCAAiC,CAAC;AAAA,EAC5D;AACF;AACA,IAAII,KAAI;AACR,MAAMC,KAAI,OAAOD,KAAIA,KAAI,IAAI5B,MAAK,GAAG4B,KAAIE,KAAI,CAAClB,MAAMA,IAAI,IAAIZ;AAC5D,IAAI+B,KAAI,GAAGC,KAAI,IAAIC,KAAK;AACxB,MAAMC,KAAK,MAAMD;AACjB,SAASE,KAAI;AACX,SAAOH,KAAI,MAAMA,KAAI,IAAIC,KAAKJ,MAAKE,KAAI,GAAG;AAC5C;AACA,MAAMK,KAAI,MAAM;AACd,EAAAJ,KAAI;AACN,GAAGK,KAAK,MAAML,KAAI,EAAED,KAAI;AACxB,MAAMO,GAAG;AAAA,EACP,cAAc;AACZ,SAAK,eAAe,CAAC,CAAA,GAAI,CAAA,CAAE,GAAG,KAAK,eAAe,GAAG,KAAK,QAAQ,GAAG,KAAK,SAAS,GAAG,KAAK,gBAAgB,IAAI,KAAK,cAAc,IAAI,KAAK,kBAAkB,IAAI,KAAK,cAAc,GAAG,KAAK,cAAc,CAAA,GAAI,KAAK,kBAAkB,GAAG,KAAK,sBAAsBzC,EAAE,sBAAsB,KAAK,aAAa,MAAM,KAAK,gBAAgB,KAAK,SAAS,KAAK,IAAI;AAAA,EACjW;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,iBAAiB,KAAK,kBAAkB,IAAI,KAAK,cAAc,IAAI;AAAA,EACjF;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS,GAAG;AACV,QAAI,EAAE,eAAe,KAAK,QAAQ;AAChC,UAAI,EAAE,aAAa,KAAK,QAAQ,KAAK,eAAe,KAAK,iBAAiB;AACxE,aAAK,YAAY,KAAK,iBAAiB,IAAI;AAC3C;AAAA,MACF;AACA,WAAK,aAAa,KAAK,YAAY,EAAE,KAAK,OAAO,IAAI,GAAG,KAAK,iBAAiB,KAAK,OAAM;AAAA,IAC3F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,SAAS;AACP,SAAK,iBAAiB,KAAK,UAAU,MAAM,KAAK,gBAAgB,IAAI,eAAe,KAAK,aAAa;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACT,QAAI;AACF,UAAI,KAAK,UAAU,EAAG;AACtB,YAAM,IAAIsC,GAAC;AACX,WAAK,YAAW,GAAI,KAAKC,GAAC;AAAA,IAC5B,UAAC;AACC,WAAK,gBAAgB,IAAI,KAAK,QAAQ,KAAK,CAAC,KAAK,eAAe,KAAK,OAAM;AAAA,IAC7E;AAAA,EACF;AAAA,EACA,aAAa;AACX,SAAK,kBAAkB;AACvB,UAAM,IAAID,GAAC;AACX,QAAI;AACF,WAAK,iBAAgB,GAAI,KAAK,YAAW;AAAA,IAC3C,UAAC;AACC,WAAK,kBAAkB,IAAI,KAAKC,GAAC;AAAA,IACnC;AAAA,EACF;AAAA,EACA,mBAAmB;AACjB,QAAI,KAAK,oBAAoB,EAAG;AAChC,UAAM,IAAI,EAAE,KAAK,QAAQhC,IAAI,KAAK,aAAa,IAAI,KAAK,aAAa,KAAK,YAAY;AACtF,QAAIY,IAAI,KAAK;AACb,aAASC,IAAI,GAAGA,IAAI,KAAK,iBAAiBA,KAAK;AAC7C,YAAMC,IAAId,EAAEa,CAAC;AACb,MAAAC,EAAE,eAAe,MAAMA,EAAE,aAAa,GAAG,EAAEF,GAAG,IAAIE;AAAA,IACpD;AACA,SAAK,QAAQF,GAAG,KAAK,kBAAkB,GAAGZ,EAAE,SAASP,EAAE,iCAAiCO,EAAE,SAAS;AAAA,EACrG;AAAA,EACA,cAAc;AACZ,QAAI,IAAI;AACR,WAAO,KAAK,QAAQ,KAAK;AACvB,UAAI,EAAE,IAAI,KAAK,qBAAqB;AAClC,aAAK,qBAAoB;AACzB;AAAA,MACF;AACA,WAAK,cAAa,GAAI,KAAK,iBAAgB;AAAA,IAC7C;AAAA,EACF;AAAA,EACA,gBAAgB;AACd,UAAM,IAAI,KAAK,cAAcA,IAAI,KAAK,aAAa,CAAC,GAAG,IAAI,KAAK;AAChE,SAAK,eAAe,IAAI,GAAG,KAAK,QAAQ,GAAG,KAAK;AAChD,aAASY,IAAI,GAAGA,IAAI,GAAGA;AACrB,UAAI;AACF,QAAAZ,EAAEY,CAAC,EAAC;AAAA,MACN,SAASC,GAAG;AACV,gBAAQ,MAAM,IAAIV,GAAE,6CAA6CU,CAAC,CAAC;AAAA,MACrE;AACF,IAAAb,EAAE,SAAS;AAAA,EACb;AAAA,EACA,uBAAuB;AACrB,UAAM,IAAI,KAAK,QAAQ,KAAK;AAC5B,QAAI,QAAQ;AAAA,MACV,IAAIG;AAAA,QACFiB,EAAE,yBAAyB,KAAK,qBAAqB,CAAC;AAAA,MAC9D;AAAA,IACA,GAAO,KAAK,QAAQ,GAAG,KAAK,aAAa,KAAK,YAAY,EAAE,SAAS,GAAG,KAAK,kBAAkB,GAAG,KAAK;AACjG,UAAI;AACF,aAAK,WAAW,CAAC;AAAA,MACnB,QAAQ;AAAA,MACR;AAAA,EACJ;AAAA,EACA,aAAa;AACX,SAAK,eAAe,KAAK,cAAc;AAAA,EACzC;AAAA,EACA,WAAW;AACT,SAAK,gBAAgB,KAAK,EAAE,KAAK,gBAAgB,MAAM,KAAK,WAAU,GAAI,KAAK,cAAc;AAAA,EAC/F;AAAA,EACA,sBAAsB,GAAG;AACvB,QAAI,IAAI3B,EAAE;AACR,YAAM,IAAIU;AAAA,QACR,yCAAyCV,EAAE,oBAAoB;AAAA,MACvE;AACI,SAAK,sBAAsB;AAAA,EAC7B;AACF;AACA,MAAM0C,KAAI,IAAID,MAAME,KAAoB,uBAAO,IAAI,kBAAkB,GAAGC,KAAqB,uBAAO,IAAI,sBAAsB,GAAGC,KAAqB,uBAAO,IAAI,oBAAoB,GAAGC,IAAI;AAAA;AAAA,EAE1L,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,IAAI/B,GAAG,GAAG;AACR,UAAMR,IAAI,KAAK;AACf,SAAK,UAAUQ;AACf,QAAI;AACF,aAAO,EAAC;AAAA,IACV,UAAC;AACC,WAAK,UAAUR;AAAA,IACjB;AAAA,EACF;AACF;AACA,SAASwC,GAAGhC,GAAG;AACb,QAAM,IAAI+B,EAAE;AACZ,MAAI,MAAM,KAAM,QAAO/B,EAAC;AACxB,EAAA+B,EAAE,UAAU;AACZ,MAAI;AACF,WAAO/B,EAAC;AAAA,EACV,UAAC;AACC,IAAA+B,EAAE,UAAU;AAAA,EACd;AACF;AACA,IAAIE;AACJ,MAAMC,WAAWnB,GAAG;AAAA,EAClB,YAAY,GAAGvB,GAAG;AAChB,UAAK,GAAI,KAAK,mBAAmB,QAAQ,KAAK,cAAc,MAAM,KAAK,oBAAmB,GAAI,KAAK,eAAe,CAAA,GAAI,KAAKyC,EAAC,IAAI,IAAI,KAAK,SAAS,GAAGzC,MAAM,KAAK,SAASR,EAAE,OAAOe,GAAE,gBAAgB,MAAM,QAAQ,KAAK,EAAE;AAAA,EAC3N;AAAA,EACA,IAAI,QAAQ;AACV,UAAM,IAAIgC,EAAE;AACZ,WAAO,KAAK5B,GAAE,MAAM,GAAG,KAAK,YAAY,GAAG,KAAK;AAAA,EAClD;AAAA,EACA,IAAI,MAAM,GAAG;AACX,UAAMX,IAAI,KAAK;AACf,QAAI,OAAO,GAAGA,GAAG,CAAC,EAAG;AACrB,SAAK,SAAS,GAAG,KAAK,UAAU0B,GAAE,KAAK,OAAO;AAC9C,UAAM,IAAI,KAAK;AACf,QAAI,EAAE,KAAK,aAAa,WAAW,KAAK,IAAIlC,EAAE,yBAAyB;AACrE,UAAI,KAAK,mBAAmBQ,GAAG,KAAK,QAAQ,IAAIR,EAAE,wBAAwB,IAAIA,EAAE,QAAQ,CAAC2C,GAAE,YAAY;AACrG,aAAK,oBAAmB;AACxB;AAAA,MACF;AACA,MAAAA,GAAE,SAAS,KAAK,WAAW;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,sBAAsB;AACpB,UAAM,IAAI,KAAK;AACf,QAAI,EAAE,IAAI3C,EAAE,2BAA2B,IAAIA,EAAE;AAC3C;AACF,UAAMQ,IAAI,KAAK;AACf,SAAK,mBAAmB,QAAQ,KAAK,SAAS,KAAK,KAAK,mBAAmB,KAAK,QAAQA,CAAC;AAAA,EAC3F;AAAA,EACA,OAAO;AACL,WAAO,KAAK;AAAA,EACd;AAAA,EACA,UAAU;AACR,SAAK,QAAQR,EAAE,aAAa,KAAK,aAAa,SAAS,GAAG,KAAK,SAASA,EAAE,UAAU,KAAK,SAAS,QAAQ,KAAK,mBAAmB;AAAA,EACpI;AAAA,EACA,EAAEiD,KAAIL,IAAG,OAAO,QAAO,IAAK;AAC1B,SAAK,QAAO;AAAA,EACd;AACF;AACA,SAASO,GAAGnC,GAAG,IAAI,IAAI;AACrB,SAAO,IAAIkC,GAAGlC,GAAG,EAAE,QAAQ,EAAE;AAC/B;AACA,MAAMoC,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMP,YAAY,IAAI,IAAI5C,IAAI,KAAK,IAAI,IAAI;AACnC,SAAK,QAAQ,GAAG,KAAK,WAAWA,GAAG,KAAK,OAAO,CAAA,GAAI,KAAK,QAAQ,MAAM,KAAK,QAAQ,IAAI;AAAA,MACrF,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,EAAC;AAAA,IACrD,IAAQ;AAAA,EACN;AAAA;AAAA;AAAA;AAAA,EAIA,UAAU;AACR,WAAO,KAAK,SAAS,KAAK,MAAM,YAAY,KAAK,KAAK,IAAG,KAAM,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,GAAGA,GAAG;AACZ,QAAI,EAAEA,KAAK,MAAMA,IAAI;AACnB,UAAI,EAAE,SAAS,KAAK,UAAU;AAC5B,aAAK,SAAS,KAAK,MAAM,SAAS;AAClC;AAAA,MACF;AACA,UAAI,KAAK,KAAK,UAAU,KAAK,OAAO;AAClC,aAAK,SAAS,KAAK,MAAM,SAAS;AAClC;AAAA,MACF;AACA,UAAI,OAAO,SAAS,CAAC,GAAG;AACtB,aAAK,SAAS,KAAK,MAAM,SAAS;AAClC;AAAA,MACF;AACA,QAAE,SAAS,GAAG,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,SAAS,KAAK,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,WAAW;AACT,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,UAAM,EAAE,UAAU,GAAG,UAAUA,GAAG,UAAU,EAAC,IAAK,KAAK,OAAOY,IAAI,IAAIZ,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE;AACrG,WAAO;AAAA,MACL,UAAU;AAAA,MACV,UAAUA;AAAA,MACV,UAAU,EAAE,GAAG,EAAC;AAAA,MAChB,QAAQY;AAAA,MACR,UAAU,KAAK,KAAK;AAAA,IAC1B;AAAA,EACE;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ;AACN,SAAK,KAAK,SAAS,GAAG,KAAK,UAAU,KAAK,QAAQ;AAAA,MAChD,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,EAAC;AAAA,IACrD;AAAA,EACE;AACF;AACA,MAAMiC,IAAI,OAAO;AAAA,EACf,CAAA;AACF,GAAGC,IAAI,IAAIF,GAAE;AACb,SAASG,GAAGvC,GAAG;AACb,SAAOA,MAAM,QAAQ,OAAOA,KAAK,YAAY4B,MAAK5B;AACpD;AACA,SAASwC,GAAGxC,GAAG;AACb,SAAOA,MAAM,QAAQ,OAAOA,KAAK,YAAY6B,MAAM7B;AACrD;AAIA,SAASyC,GAAGzC,GAAG;AACb,SAAOA,MAAM,QAAQ,OAAOA,KAAK,YAAY,OAAOA,EAAE,QAAQ;AAChE;AACA,IAAI0C,IAAGC;AACP,MAAM,EAAE,MAAMC,IAAG,OAAOC,IAAG,SAASC,IAAG,UAAUC,GAAG,UAAUC,IAAG,WAAWC,IAAG,aAAaC,IAAG,UAAUC,IAAG,aAAaC,GAAE,IAAKrE;AAChI,SAASsE,GAAGrD,GAAG;AACb,SAAOA,IAAI+C,IAAIlE,GAAE,WAAWmB,IAAI8C,KAAIjE,GAAE,UAAUmB,IAAIgD,KAAInE,GAAE,WAAWA,GAAE;AACzE;AACA,MAAMyE,WAAWvC,GAAG;AAAA,EAClB,YAAY,GAAGvB,IAAI,IAAI;AACrB,QAAI,OAAO,KAAK,WAAY,OAAM,IAAIC,EAAEmB,EAAE,yBAAyB;AACnE,UAAK,GAAI,KAAK+B,EAAC,IAAI,IAAI,KAAKD,EAAC,IAAI,IAAI,KAAK,SAAS,MAAM,KAAK,aAAa,GAAG,KAAK,eAAe,CAAA,GAAI,KAAK,SAASL,GAAG,KAAK,8BAA8B,GAAG,KAAK,mBAAmB,GAAG,KAAK,cAAc,IAAI,KAAK,cAAcA,GAAG,KAAK,cAAc,GAAG,KAAK,SAAS,QAAQ,KAAK,QAAQe,KAAKP,KAAID,IAAG,KAAK,SAASpD,EAAE,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,KAAK,gBAAgB,kBAAkBA,IAAIA,EAAE,eAAeM,IAAG,KAAK,WAAWN,EAAE,WAAW;AACxb,UAAM,IAAIA,EAAE;AACZ,QAAI,KAAK,mBAAmB,KAAK,QAAQ,KAAK,IAAI,IAAIL,GAAE,mBAAmBY,GAAE,gBAAgB,MAAM,YAAY,KAAK,EAAE,GAAGP,EAAE,SAAS;AAClI,UAAI;AACF,aAAK,WAAU;AAAA,MACjB,QAAQ;AAAA,MACR;AAAA,EACJ;AAAA,EACA,SAAS;AACP,UAAM,IAAIuC,EAAE;AACZ,SAAK5B,GAAE,MAAM,GAAG,KAAK,YAAY;AAAA,EACnC;AAAA,EACA,IAAI,QAAQ;AACV,SAAK,OAAM;AACX,UAAM,IAAI,KAAK;AACf,SAAK,KAAK4C,IAAIF,KAAID,SAAQG;AACxB,aAAO,KAAK;AACd,QAAI,IAAII;AACN,YAAM,IAAI1D,EAAEmB,EAAE,iBAAiB;AACjC,QAAI,IAAIsC,IAAG;AACT,UAAI,KAAK,kBAAkBpD,GAAG,QAAO,KAAK;AAC1C,YAAM,IAAIL,EAAEmB,EAAE,4BAA4B;AAAA,IAC5C;AACA,QAAI,KAAKiC,KAAID,QAAO,KAAK,cAAc,KAAK,QAAQG;AAClD,aAAO,KAAK;AACd,UAAMvD,IAAI,KAAK,eAAe,IAAIA,MAAMM;AACxC,QAAI,KAAK,QAAQgD,IAAG;AAClB,UAAI,EAAG,QAAOtD;AACd,YAAM,IAAIC,EAAEmB,EAAE,iCAAiC;AAAA,IACjD;AACA,QAAI,KAAK,QAAQoC,IAAG;AAClB,UAAI,EAAG,QAAOxD;AACd,YAAM,KAAK;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO;AACL,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAM,GAAI6D,GAAG,KAAK,KAAK;AAAA,EACrC;AAAA,EACA,IAAI,WAAW;AACb,QAAI,KAAK,OAAM,GAAI,KAAK,SAASL,KAAIC,IAAI,QAAO;AAChD,UAAM,IAAI,KAAK;AACf,aAASzD,IAAI,GAAG,IAAI,EAAE,QAAQA,IAAI,GAAGA,KAAK;AACxC,YAAMY,IAAI,EAAEZ,CAAC,GAAG;AAChB,UAAIY,KAAKA,EAAE,QAAQ6C,GAAG,QAAO;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,CAAC,KAAK;AAAA,EACf;AAAA,EACA,IAAI,SAAS;AACX,QAAI,KAAK,OAAM,GAAI,CAAC,KAAK,SAAU,QAAO3D;AAC1C,UAAM,IAAI,CAAA;AACV,SAAK,UAAU,EAAE,KAAK,KAAK,MAAM;AACjC,UAAME,IAAI,KAAK;AACf,aAAS,IAAI,GAAGY,IAAIZ,EAAE,QAAQ,IAAIY,GAAG,KAAK;AACxC,YAAMC,IAAIb,EAAE,CAAC,EAAE;AACf,UAAIa,EAAE,QAAQ4C,IAAG;AACf,cAAM1C,IAAIF,EAAE;AACZ,YAAIE,EAAE,SAAS;AACb,mBAASG,IAAI,GAAGA,IAAIH,EAAE,QAAQG,KAAK;AACjC,kBAAM6C,IAAIhD,EAAEG,CAAC;AACb,YAAA6C,KAAK,EAAE,QAAQA,CAAC,MAAM,MAAM,EAAE,KAAKA,CAAC;AAAA,UACtC;AAAA,MACJ;AAAA,IACF;AACA,WAAO,OAAO,OAAO,CAAC;AAAA,EACxB;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,OAAM,IAAK,KAAK,QAAQT,QAAO;AAAA,EAC7C;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,OAAM,IAAK,KAAK,QAAQC,OAAO;AAAA,EAC7C;AAAA,EACA,aAAa;AACX,SAAK,WAAU;AAAA,EACjB;AAAA,EACA,UAAU;AACR,QAAI,KAAK,QAAQI,GAAG;AACpB,UAAM,IAAI,KAAK;AACf,QAAI,MAAMd,GAAG;AACX,eAAS7C,IAAI,GAAG,IAAI,EAAE,QAAQA,IAAI,GAAGA;AACnC,UAAEA,CAAC,EAAE,QAAK;AACZ,MAAA8C,EAAE,QAAQ,CAAC,GAAG,KAAK,SAASD;AAAA,IAC9B;AACA,SAAK,aAAa,SAAS,GAAG,KAAK,QAAQc,KAAIN,KAAID,IAAG,KAAK,SAAS,MAAM,KAAK,SAAS;AAAA,EAC1F;AAAA,EACA,EAAED,KAAIf,IAAGc,KAAIb,IAAI,OAAO,YAAY;AAClC,SAAK,QAAO;AAAA,EACd;AAAA,EACA,cAAc,GAAG;AACf,QAAI,EAAE,mBAAmB,KAAK,aAAa;AACzC,UAAI,EAAE,iBAAiB,KAAK,aAAa,KAAK,cAAc,KAAK,YAAY,QAAQ;AACnF,cAAMrC,IAAI,KAAK,YAAY,KAAK,WAAW;AAC3C,QAAAA,EAAE,OAAO,GAAGA,EAAE,UAAU,EAAE;AAAA,MAC5B;AACE,aAAK,YAAY,KAAK,IAAImB,GAAE,GAAG,EAAE,OAAO,CAAC;AAC3C,WAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAa;AACX,QAAI,KAAK,QAAQuC,GAAG;AACpB,SAAK,SAASA;AACd,UAAM,IAAI,KAAK;AACf,SAAK,cAAcjC,GAAC,GAAI,KAAK,cAAcqB,EAAE,QAAO,GAAI,KAAK,cAAc;AAC3E,QAAI9C,IAAI;AACR,QAAI;AACF,YAAM,IAAIuC,EAAE,IAAI,MAAM,KAAK,GAAG;AAC9B,WAAK,YAAY,SAAS,KAAK,aAAatB,GAAE,KAAK,aAAa,GAAG,IAAI,GAAG,KAAK,SAAS,KAAK,aAAajB,IAAI,IAAIiD,GAAG,CAAC,IAAI,KAAK,wBAAwB,CAAC,IAAI,KAAK,oBAAoB,CAAC;AAAA,IACxL,SAAS,GAAG;AACV,UAAI,CAACjD;AACH,YAAI;AACF,eAAK,YAAY,SAAS,KAAK,aAAaiB,GAAE,KAAK,aAAa,GAAG,IAAI,GAAG,KAAK,SAAS,KAAK,aAAajB,IAAI;AAAA,QAChH,QAAQ;AAAA,QACR;AACF,WAAK,aAAa,GAAGoB,EAAE,6BAA6B,EAAE;AAAA,IACxD,UAAC;AACC,MAAApB,KAAK,MAAM6C,IAAIC,EAAE,QAAQ,CAAC,IAAI9C,KAAK8C,EAAE,QAAQ,KAAK,WAAW,GAAG,KAAK,cAAc,IAAI,KAAK,cAAcD,GAAG,KAAK,cAAc,GAAG,KAAK,SAAS,CAACa;AAAA,IACpJ;AAAA,EACF;AAAA,EACA,wBAAwB,GAAG;AACzB,SAAK,SAAS,KAAK,QAAQJ,MAAK,MAAM,KAAK,mBAAmB,QAAQ,MAAM,GAAG,KAAK,8BAA8B,KAAK,wBAAuB,GAAI,KAAK,mBAAmB,GAAG,KAAK,cAAc,KAAK,aAAa,KAAK3D,GAAE;AACzN,UAAMK,IAAI,KAAK;AACf,MAAE;AAAA,MACA,CAAC,MAAM;AACL,YAAIA,MAAM,KAAK,YAAY;AACzB,cAAI,KAAK,8BAA8B,KAAK;AAC1C,mBAAO,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,eAAe,KAAK;AAAA,cAChF,IAAIC;AAAA,gBACF,wCAAwC,KAAK,gBAAgB;AAAA,cAC7E;AAAA,cACcmB,EAAE;AAAA,YAChB;AACU,eAAK,oBAAoB,CAAC,GAAG,KAAK,mBAAmB,GAAG,MAAM;AAAA,QAChE;AAAA,MACF;AAAA,MACA,CAAC,MAAMpB,MAAM,KAAK,cAAc,KAAK,aAAa,GAAGoB,EAAE,iCAAiC;AAAA,IAC9F;AAAA,EACE;AAAA,EACA,0BAA0B;AACxB,QAAI,IAAI;AACR,UAAMpB,IAAI,KAAK;AACf,aAAS,IAAI,GAAGY,IAAIZ,EAAE,QAAQ,IAAIY,GAAG;AACnC,WAAK,KAAK,KAAK,IAAIZ,EAAE,CAAC,EAAE,KAAK,UAAU;AACzC,WAAO;AAAA,EACT;AAAA,EACA,aAAa,GAAGA,GAAG,IAAI,IAAI;AACzB,UAAMY,IAAIS,GAAE,GAAGpB,GAAGD,CAAC;AACnB,QAAI,CAAC,KAAK,EAAE,KAAK,QAAQwD,QAAO,KAAK,UAAU9B,GAAE,KAAK,OAAO,IAAI,KAAK,SAASd,GAAG,KAAK,QAAQ,KAAK,QAAQ,OAAO4C,KAAIC,IAAG,KAAK;AAC7H,UAAI;AACF,aAAK,SAAS7C,CAAC;AAAA,MACjB,SAASC,GAAG;AACV,gBAAQ,MAAMO,EAAE,iCAAiCP,CAAC;AAAA,MACpD;AACF,QAAI,EAAG,OAAMD;AACb,SAAK,mBAAmB,QAAQ,MAAM;AAAA,EACxC;AAAA,EACA,oBAAoB,GAAG;AACrB,KAAC,EAAE,KAAK,QAAQ2C,MAAM,CAAC,KAAK,OAAO,KAAK,QAAQ,CAAC,OAAO,KAAK,UAAU7B,GAAE,KAAK,OAAO,IAAI,KAAK,SAAS,GAAG,KAAK,SAAS,MAAM,KAAK,SAAS,KAAK,QAAQ6B,KAAK;AAAA,EAChK;AAAA,EACA,UAAU;AACR,SAAK,WAAU;AAAA,EACjB;AAAA;AAAA,EAEA,aAAa;AACX,SAAK,SAASG,KAAIL,QAAO,KAAK,SAASA,IAAG,KAAK,mBAAmB,QAAQ,MAAM;AAAA,EAClF;AACF;AACA,SAASW,GAAGxD,GAAG,IAAI,IAAI;AACrB,SAAO,IAAIsD,GAAGtD,GAAG,CAAC;AACpB;AACA,IAAIyD;AACJ,MAAMC,WAAW5C,GAAG;AAAA,EAClB,YAAY,GAAGtB,IAAI,IAAI;AACrB,UAAK,GAAI,KAAKiE,EAAC,IAAI,IAAI,KAAK,WAAW,MAAM,KAAK,SAASpB,GAAG,KAAK,aAAa,MAAM,KAAK,aAAaA,GAAG,KAAK,gBAAgB,IAAI,KAAK,kBAAkB,IAAI,KAAK,qBAAqB,GAAG,KAAK,kBAAkB,GAAG,KAAK,eAAe,GAAG,KAAK,eAAe,GAAG,KAAK,UAAU,GAAG,KAAK,MAAM,GAAG,KAAK,WAAW7C,EAAE,WAAW,MAAM,KAAK,QAAQA,EAAE,QAAQ,IAAI,KAAK,iBAAiBA,EAAE,0BAA0BP,EAAE,2BAA2B,KAAK,yBAAyBO,EAAE,yBAAyBP,EAAE,2BAA2B,KAAK,SAAS,KAAK,eAAe,QAAQ,KAAK,kBAAkB,MAAM,KAAK,QAAO,MAAO,KAAK,eAAe,MAAM,KAAK,WAAW,KAAK,kBAAkB,MAAM0C,GAAE,SAAS,KAAK,YAAY,IAAI5B,GAAE,gBAAgB,MAAM,UAAU,KAAK,EAAE;AAAA,EACnvB;AAAA,EACA,MAAM;AACJ,QAAI,KAAK,QAAQjB,EAAE;AACjB,YAAM,IAAIY,GAAEkB,EAAE,eAAe;AAC/B,SAAK,QAAQ,EAAE;AAAA,EACjB;AAAA,EACA,UAAU;AACR,SAAK,QAAQ9B,EAAE,aAAa,KAAK,SAASA,EAAE,UAAU,KAAK,aAAY,GAAI,KAAK,YAAY,KAAK,MAAM,GAAG,KAAK,WAAWuD,KAAKC,EAAE,QAAQ,KAAK,MAAM,GAAG,KAAK,SAASD,GAAG,KAAK,aAAaA;AAAA,EAC5L;AAAA,EACA,EAAEoB,KAAI3B,IAAI,OAAO,QAAO,IAAK;AAC3B,SAAK,QAAO;AAAA,EACd;AAAA,EACA,cAAc,GAAG;AACf,QAAI,EAAE,KAAK,QAAQhD,EAAE,WAAY;AACjC,UAAMU,IAAI,KAAK;AACf,QAAI,EAAE,mBAAmBA,EAAG;AAC5B,MAAE,iBAAiBA;AACnB,UAAM,IAAI,KAAK,YAAYY,IAAI,KAAK;AACpC,aAASC,IAAI,GAAGC,IAAIF,EAAE,QAAQC,IAAIC,GAAGD,KAAK;AACxC,YAAME,IAAIH,EAAEC,CAAC;AACb,UAAIE,KAAKA,EAAE,SAAS,KAAKA,EAAE,OAAO;AAChC,QAAAA,EAAE,UAAU,EAAE,SAAS,EAAE,KAAKA,CAAC,GAAGH,EAAEC,CAAC,IAAI;AACzC;AAAA,MACF;AAAA,IACF;AACA,QAAI;AACF,YAAMA,IAAI,EAAE,UAAU,KAAK,eAAe;AAC1C,QAAE,KAAK,IAAIM,GAAE,GAAG,EAAE,SAASN,CAAC,CAAC;AAAA,IAC/B,SAASA,GAAG;AACV,YAAMC,IAAIO,GAAER,GAAGX,IAAGkB,EAAE,uBAAuB;AAC3C,UAAI,QAAQ,MAAMN,CAAC,GAAG,KAAK;AACzB,YAAI;AACF,eAAK,SAASA,CAAC;AAAA,QACjB,QAAQ;AAAA,QACR;AACF,QAAE,KAAK,IAAIK,GAAE,GAAG,EAAE,SAAS,MAAM,CAAC;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,QAAQ,IAAI,IAAI;AACd,QAAI,KAAK,SAAS7B,EAAE,WAAWA,EAAE,cAAc,CAAC,KAAK,KAAK,OAAO,SAAS,KAAK,CAAC,KAAK,WAAY;AACjG,SAAK,oBAAmB,GAAI,KAAK,SAASA,EAAE,WAAW,KAAK,aAAY,GAAI,KAAK,aAAa,KAAK;AACnG,UAAMU,IAAI8C,EAAE,QAAO;AACnB,SAAK,aAAa9C,GAAG,KAAK,gBAAgByB,GAAC;AAC3C,QAAI,IAAI;AACR,QAAI;AACF,YAAMb,IAAI2B,EAAE,IAAI,MAAM,KAAK,GAAG;AAC9B,WAAK,SAASvC,GAAG,IAAI,IAAIiD,GAAGrC,CAAC,IAAI,KAAK,mBAAmBA,CAAC,IAAI,KAAK,WAAW,OAAOA,KAAK,aAAaA,IAAI;AAAA,IAC7G,SAASA,GAAG;AACV,WAAK,SAASZ,GAAG,IAAI,IAAI,KAAK,sBAAsBY,CAAC,GAAG,KAAK,WAAW;AAAA,IAC1E,UAAC;AACC,WAAK,sBAAsB,GAAG,KAAK,YAAYZ,CAAC,GAAG,KAAK,SAAS;AAAA,IACnE;AAAA,EACF;AAAA,EACA,mBAAmB,GAAG;AACpB,UAAMA,IAAI,EAAE,KAAK;AACjB,MAAE;AAAA,MACA,CAAC,MAAM;AACL,YAAIA,MAAM,KAAK,WAAW,KAAK,QAAQV,EAAE,UAAU;AACjD,cAAI,OAAO,KAAK;AACd,gBAAI;AACF,gBAAC;AAAA,YACH,SAASsB,GAAG;AACV,mBAAK,sBAAsBA,GAAGQ,EAAE,qBAAqB;AAAA,YACvD;AACF;AAAA,QACF;AACA,eAAO,KAAK,eAAe,KAAK,WAAW;AAAA,MAC7C;AAAA,MACA,CAAC,MAAMpB,MAAM,KAAK,WAAW,KAAK,sBAAsB,CAAC;AAAA,IAC/D;AAAA,EACE;AAAA,EACA,sBAAsB,GAAGA,GAAG,GAAG;AAC7B,QAAI,KAAK,aAAa,MAAM,KAAK,aAAa6C,GAAG,GAAG;AAClD,eAASjC,IAAI,GAAGC,IAAIb,EAAE,QAAQY,IAAIC,GAAGD,KAAK;AACxC,cAAME,IAAId,EAAEY,CAAC;AACb,QAAAE,KAAKA,EAAE,QAAK;AAAA,MACd;AACA,MAAAd,MAAM6C,KAAKC,EAAE,QAAQ9C,CAAC;AAAA,IACxB;AACE,WAAK,YAAY,CAAC,GAAG8C,EAAE,QAAQ,CAAC;AAAA,EACpC;AAAA,EACA,YAAY,GAAG;AACb,aAAS9C,IAAI,GAAG,IAAI,EAAE,QAAQA,IAAI,GAAGA;AACnC,QAAEA,CAAC,GAAG,QAAK;AAAA,EACf;AAAA,EACA,WAAW;AACT,UAAM,IAAI,KAAK,QAAQA,IAAIuC,EAAE;AAC7B,IAAAA,EAAE,UAAU;AACZ,QAAI;AACF,eAAS,IAAI,GAAG3B,IAAI,EAAE,QAAQ,IAAIA,GAAG,KAAK;AACxC,cAAMC,IAAI,EAAE,CAAC,GAAGC,IAAID,EAAE;AACtB,YAAIC,EAAE,QAAQvB,GAAE;AACd,cAAI;AACF,YAAAuB,EAAE;AAAA,UACJ,QAAQ;AACN,mBAAO;AAAA,UACT;AACF,YAAIA,EAAE,YAAYD,EAAE,QAAS,QAAO;AAAA,MACtC;AACA,aAAO;AAAA,IACT,UAAC;AACC,MAAA0B,EAAE,UAAUvC;AAAA,IACd;AAAA,EACF;AAAA,EACA,eAAe;AACb,QAAI,KAAK,UAAU;AACjB,UAAI;AACF,aAAK,SAAQ;AAAA,MACf,SAAS,GAAG;AACV,aAAK,sBAAsB,GAAGoB,EAAE,qBAAqB;AAAA,MACvD;AACA,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EACA,sBAAsB;AACpB,UAAM,IAAIU,GAAE;AACZ,SAAK,oBAAoB,MAAM,KAAK,kBAAkB,GAAG,KAAK,qBAAqB,IAAI,EAAE,KAAK,qBAAqB,KAAK,0BAA0B,KAAK,wBAAwB,YAAY,GAAGG,GAAE,IAAKxC,EAAE,4BAA4B,KAAK,wBAAwB,QAAQ,GAAG,KAAK;AAAA,EAClR;AAAA,EACA,IAAI,aAAa;AACf,YAAQ,KAAK,QAAQH,EAAE,cAAc;AAAA,EACvC;AAAA,EACA,IAAI,iBAAiB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc;AAChB,YAAQ,KAAK,QAAQA,EAAE,eAAe;AAAA,EACxC;AAAA,EACA,wBAAwB,GAAG;AACzB,UAAMU,IAAI,IAAIE;AAAA,MACZ,2BAA2B,CAAC,sBAAsB,KAAK,kBAAkB,uDAAuDyB,EAAC;AAAA,IACvI;AACI,UAAM,KAAK,QAAO,GAAI,QAAQ,MAAM3B,CAAC,GAAGA;AAAA,EAC1C;AAAA,EACA,sBAAsB,GAAGA,IAAIoB,EAAE,yBAAyB;AACtD,UAAM,IAAIC,GAAE,GAAGnB,IAAGF,CAAC;AACnB,QAAI,QAAQ,MAAM,CAAC,GAAG,KAAK;AACzB,UAAI;AACF,aAAK,SAAS,CAAC;AAAA,MACjB,SAASY,GAAG;AACV,gBAAQ,MAAMS,GAAET,GAAGV,IAAGkB,EAAE,+BAA+B,CAAC;AAAA,MAC1D;AAAA,EACJ;AACF;AACA,SAAS+C,EAAG3D,GAAG,IAAI,IAAI;AACrB,MAAI,OAAOA,KAAK;AACd,UAAM,IAAIN,GAAEkB,EAAE,uBAAuB;AACvC,QAAMpB,IAAI,IAAIkE,GAAG1D,GAAG,CAAC;AACrB,SAAOR,EAAE,QAAO,GAAIA;AACtB;AACA,SAASoE,GAAG5D,GAAG;AACb,MAAI,OAAOA,KAAK;AACd,UAAM,IAAI,UAAU,mCAAmC;AACzD,EAAA2B,GAAE,WAAU;AACZ,MAAI;AACF,WAAO3B,EAAC;AAAA,EACV,UAAC;AACC,IAAA2B,GAAE,SAAQ;AAAA,EACZ;AACF;ACn0BO,SAASkC,GAAWC,GAAwE;AACjG,SAAOC,GAAOD,CAAK,KAAKE,GAAWF,CAAK;AAC1C;AAaO,SAASG,GAAYC,GAA8B;AACxD,MAAI,CAACA,EAAI,QAAO;AAChB,QAAMC,IAAM,YAAYD,IAAMA,EAAc,CAAC,IAAKA;AAClD,MAAI,CAACC,EAAK,QAAO;AAEjB,QAAMC,IAAKD,EAAI;AACf,MAAIC,KAAM,OAAOA,KAAO,SAAU,QAAO,IAAIA,CAAE;AAE/C,QAAMC,IAAUF,EAAI,QAAQ,YAAA,GACtBG,IAAUH,EAAI;AAEpB,MAAIG,KAAWA,EAAQ,SAAS,GAAG;AACjC,QAAIC,IAAMF;AACV,aAASrE,IAAI,GAAGwE,IAAMF,EAAQ,QAAQtE,IAAIwE,GAAKxE,KAAK;AAClD,YAAMyE,IAAMH,EAAQtE,CAAC;AACrB,MAAIyE,MAAKF,KAAO,IAAIE,CAAG;AAAA,IACzB;AACA,WAAOF;AAAA,EACT;AACA,SAAOF;AACT;AAOO,SAASK,GAAaC,GAAsB;AACjD,MAAIC,IAAO,OAAOD,KAAQ,EAAE;AAK5B,EAAAC,IAAOA,EAAK,QAAQ,qCAAqC,EAAE,GAO3DA,IAAOA,EAAK,QAAQ,mBAAmB,EAAE;AAGzC,QAAMC,IACJ;AACF,MAAIC;AACJ;AACE,IAAAA,IAAOF,GACPA,IAAOA,EAAK,QAAQC,GAAqB,EAAE;AAAA,SACpCD,MAASE;AAKlB,QAAMC,IACJ;AACF,EAAAH,IAAOA,EAAK,QAAQG,GAAe,uBAAuB;AAI1D,QAAMC,IACJ;AACF,SAAAJ,IAAOA,EAAK,QAAQI,GAAuB,uBAAuB,GAIlEJ,IAAOA,EAAK,QAAQ,kBAAkB,mBAAmB,GAIzDA,IAAOA,EACJ,QAAQ,sBAAsB,kBAAkB,EAChD,QAAQ,mBAAmB,kBAAkB,GAEzCA;AACT;AAMA,MAAMK,yBAAgB,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEKC,KAAwB;AAEvB,SAASC,GAAeC,GAAkBtB,GAAwB;AACvE,SAAKmB,GAAU,IAAIG,EAAS,YAAA,CAAa,IAClCF,GAAsB,KAAKpB,CAAK,IADY;AAErD;AAMO,SAASuB,GAAoBvB,GAAwB;AAE1D,SAAKA,EAAM,YAAA,EAAc,SAAS,MAAM,IAId,uDACD,KAAKA,CAAK,IALe;AAMpD;AAMO,SAASwB,GAAatG,GAAY2C,GAAqB;AAC5D,MAAI3C,MAAM2C,EAAG,QAAO;AACpB,MAAI,OAAO3C,KAAM,YAAYA,MAAM,QAAQ,OAAO2C,KAAM,YAAYA,MAAM,KAAM,QAAO;AAEvF,QAAM4D,IAAQ,OAAO,KAAKvG,CAAC,GACrBwG,IAAQ,OAAO,KAAK7D,CAAC;AAC3B,MAAI4D,EAAM,WAAWC,EAAM,OAAQ,QAAO;AAE1C,QAAMC,IAAO9D;AACb,WAAS3B,IAAI,GAAGA,IAAIuF,EAAM,QAAQvF,KAAK;AACrC,UAAM0F,IAAMH,EAAMvF,CAAC;AACnB,QAAKhB,EAA8B0G,CAAG,MAAMD,EAAKC,CAAG,EAAG,QAAO;AAAA,EAChE;AACA,SAAO;AACT;AAOO,SAASC,GAAOC,GAAwC;AAC7D,QAAMpB,IAAMoB,EAAI;AAChB,MAAIpB,MAAQ,EAAG,QAAO,IAAI,WAAW,CAAC;AAEtC,QAAMqB,IAAe,IAAI,WAAWrB,CAAG,GACjCsB,IAAS,IAAI,WAAWtB,CAAG;AACjC,MAAIuB,IAAY;AAEhB,WAAS/F,IAAI,GAAGA,IAAIwE,GAAKxE,KAAK;AAC5B,UAAMgG,IAAMJ,EAAI5F,CAAC;AACjB,QAAIgG,MAAQ,UAAaA,MAAQ,GAAI;AAErC,UAAMC,IAAUF,IAAY,IAAID,EAAOC,IAAY,CAAC,IAAI;AACxD,QAAIA,MAAc,KAAME,MAAY,WAAcL,EAAIK,CAAO,KAAK,MAAMD,GAAM;AAC5E,MAAAH,EAAa7F,CAAC,IAAIiG,KAAW,IAC7BH,EAAOC,GAAW,IAAI/F;AACtB;AAAA,IACF;AAGA,QAAIkG,IAAO,GACPC,IAAQJ,IAAY;AACxB,WAAOG,IAAOC,KAAO;AACnB,YAAMC,IAAOF,IAAOC,MAAW,GACzBE,IAASP,EAAOM,CAAG;AACzB,MAAIC,MAAW,WAAcT,EAAIS,CAAM,KAAK,MAAML,IAChDE,IAAOE,IAAM,IAEbD,IAAQC;AAAA,IAEZ;AAEA,UAAME,IAAUR,EAAOI,CAAI;AAC3B,IAAII,MAAY,UAAaN,KAAOJ,EAAIU,CAAO,KAAK,OAAO,sBACrDJ,IAAO,MACTL,EAAa7F,CAAC,IAAI8F,EAAOI,IAAO,CAAC,KAAK,KAExCJ,EAAOI,CAAI,IAAIlG;AAAA,EAEnB;AAEA,QAAMuG,IAAM,IAAI,WAAWR,CAAS;AACpC,MAAIA,IAAY,GAAG;AACjB,QAAIS,IAA2BV,EAAOC,IAAY,CAAC;AACnD,aAAS/F,IAAI+F,IAAY,GAAG/F,KAAK,KAAKwG,MAAS,UAAaA,MAAS,IAAIxG;AACvE,MAAAuG,EAAIvG,CAAC,IAAIwG,GACTA,IAAOX,EAAaW,CAAI;AAAA,EAE5B;AAEA,SAAOD;AACT;ACvMA,SAASE,KAAgC;AACvC,MAAI,OAAO,SAAW,KAAa;AACjC,UAAMC,IAAQ,OAAiD;AAC/D,QAAI,OAAOA,KAAS,UAAW,QAAOA;AAAA,EACxC;AAIA,SAAO;AACT;AAEA,IAAIC,IAAeF,GAAA;AAEZ,MAAMG,IAAQ;AAAA,EACnB,IAAI,UAAU;AACZ,WAAOD;AAAA,EACT;AAAA,EACA,IAAI,QAAQ7C,GAAgB;AAC1B,IAAA6C,IAAe7C;AAAA,EACjB;AAAA,EAEA,IAAO+C,MAAiBC,GAAW;AACjC,IAAIH,KACF,QAAQ,IAAI,wBAAwBE,CAAI,KAAK,GAAGC,CAAI;AAAA,EAExD;AAAA,EAEA,YAAeC,GAA0BC,GAAWC,GAAW;AAC7D,IAAIN,KACF,QAAQ;AAAA,MACN,8BAA8BI,KAAQ,WAAW;AAAA,MACjDC;AAAA,MACA;AAAA,MACAC;AAAA,IAAA;AAAA,EAGN;AAAA;AAAA;AAAA;AAAA,EAKA,WAAcC,GAAuBL,GAAc/C,GAAU;AAC3D,IAAK6C,MACL,QAAQ,IAAI,qCAAqC1C,GAAYiD,CAAG,CAAC,IAAIL,CAAI,MAAM/C,CAAK,GACpFqD,GAAiBD,CAAG;AAAA,EACtB;AAAA,EAEA,QAAQE,GAAkB;AACxB,IAAIT,KACF,QAAQ,IAAI,iCAAiCS,CAAQ,EAAE;AAAA,EAE3D;AAAA,EAEA,QAAWN,GAAW;AACpB,IAAIH,KACF,QAAQ,KAAK,wBAAwB,GAAGG,CAAI;AAAA,EAEhD;AACF,GAKMO,KAAkB;AACxB,IAAIC,KAAgB;AAEpB,SAASC,KAA6B;AACpC,MAAID,GAAe;AACnB,EAAAA,KAAgB;AAChB,QAAME,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,cAAc,IAAIH,EAAe,+FACvC,SAAS,KAAK,YAAYG,CAAK;AACjC;AAEA,MAAMC,yBAAsB,QAAA;AAE5B,SAASN,GAAiBD,GAA6B;AACrD,QAAMhD,IAAM,YAAYgD,IAAMA,EAAI,CAAC,IAAIA;AACvC,MAAI,CAAChD,KAAM,CAACA,EAAG,YAAa;AAE5B,EAAAqD,GAAA;AAGA,QAAMG,IAAWD,GAAgB,IAAIvD,CAAE;AACvC,EAAIwD,kBAAuBA,CAAQ,GAEnCxD,EAAG,UAAU,IAAImD,EAAe,GAEhCI,GAAgB;AAAA,IACdvD;AAAA,IACA,WAAW,MAAM;AACf,MAAAA,EAAG,UAAU,OAAOmD,EAAe,GACnCI,GAAgB,OAAOvD,CAAE;AAAA,IAC3B,GAAG,GAAG;AAAA,EAAA;AAEV;AChGA,SAASyD,GAAQC,GAAiBC,IAAuB,IAAqB;AAC5E,SAAOC,GAAWF,GAAcC,CAAO;AACzC;AAGA,OAAO,eAAeF,IAAM,SAAS;AAAA,EACnC,MAAM;AACJ,WAAOf,EAAM;AAAA,EACf;AAAA,EACA,IAAI9C,GAAgB;AAClB,IAAA8C,EAAM,UAAU9C;AAAA,EAClB;AACF,CAAC;AAMD,SAASiE,KAA0B;AACjC,SAAO,IAAI,QAAQ,CAACC,MAAY,WAAWA,GAAS,CAAC,CAAC;AACxD;AAKArF,EAAE,OAAO;AAAA,EACP,MAAAgF;AAAA,EAAA,UACAM;AAAAA,EAAA,QACAC;AAAAA,EAAA,OACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,QACArE;AAAAA,EAAA,YACAC;AAAAA,EACA,YAAAH;AAAA,EACA,UAAAkE;AACF,CAAC;AChDM,MAAMM,KAAkB,cAElBC,IAAe;AAAA,EAC1B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AACR,GAEaC,KAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,cAAc;AAAA,EACd,WAAW;AAAA,EACX,iBAAiB;AACnB,GAEaC,KAAiB;AAAA,EAC5B,OAAO;AAET,GAEaC,KAAkB,CAAC,aAAa,WAAW,GAE3CC,KAAiB;AAAA,EAC5B,iBAAiB,CAAC3B,MAAiB,UAAUA,CAAI;AAAA,EACjD,oBAAoB,CAACK,MAAqB,aAAaA,CAAQ;AAAA,EAC/D,kBAAkB,CAACA,MAAqB,mBAAmBA,CAAQ;AAAA,EACnE,eAAe,CAACuB,MAAgB,4BAA4BA,CAAG;AAAA,EAC/D,gBAAgB;AAAA,EAChB,yBAAyB,CAACC,MAAiB,+BAA+BA,CAAI;AAAA,EAC9E,uBAAuB,CAAC7B,MACtB,sDAAsDA,CAAI;AAAA,EAC5D,kBAAkB,CAACA,MAAiB,kCAAkCA,CAAI;AAAA,EAC1E,wBAAwB,CAACA,MACvB,uCAAuCA,CAAI;AAAA,EAC7C,uBAAuB,CAAC1C,MAAoB,0CAA0CA,CAAO;AAAA,EAC7F,eAAe,CAACqB,GAAsBmD,MACpC,kBAAkBnD,CAAG,cAAcmD,CAAK;AAC5C,GCjCMC,KAAYT;AAelB,MAAMU,GAAgB;AAAA,EAAtB,cAAA;AACE,SAAQ,8BAAc,QAAA,GACtB,KAAQ,oCAAoB,QAAA,GAC5B,KAAQ,qCAAqB,QAAA,GAC7B,KAAQ,mCAAmB,QAAA;AAAA,EAAc;AAAA;AAAA,EAEzC,KAAKC,GAAkB;AACrB,SAAK,eAAe,IAAIA,CAAI;AAAA,EAC9B;AAAA,EAEA,OAAOA,GAAqB;AAC1B,WAAO,KAAK,eAAe,IAAIA,CAAI;AAAA,EACrC;AAAA,EAEA,YAAYA,GAAkB;AAC5B,SAAK,aAAa,IAAIA,CAAI;AAAA,EAC5B;AAAA,EAEA,UAAUA,GAAqB;AAC7B,WAAO,KAAK,aAAa,IAAIA,CAAI;AAAA,EACnC;AAAA,EAEQ,mBAAmB9E,GAA4B;AACrD,QAAIK,IAAM,KAAK,QAAQ,IAAIL,CAAE;AAC7B,WAAKK,MACHA,IAAM,CAAA,GACN,KAAK,QAAQ,IAAIL,GAAIK,CAAG,GAEnB,KAAK,cAAc,IAAIL,CAAE,MAC5B,KAAK,cAAc,IAAIA,CAAE,GACzBA,EAAG,UAAU,IAAI4E,EAAS,KAGvBvE;AAAA,EACT;AAAA,EAEA,YAAYL,GAAa+E,GAAwB;AAC/C,UAAMC,IAAS,KAAK,mBAAmBhF,CAAE;AACzC,IAAAgF,EAAO,YAAY,CAAA,GACnBA,EAAO,QAAQ,KAAKD,CAAE;AAAA,EACxB;AAAA,EAEA,aAAa/E,GAAaiF,GAAsB;AAC9C,UAAMD,IAAS,KAAK,mBAAmBhF,CAAE;AACzC,IAAAgF,EAAO,aAAa,CAAA,GACpBA,EAAO,SAAS,KAAKC,CAAE;AAAA,EACzB;AAAA,EAEA,QAAQjF,GAAsB;AAC5B,WAAO,KAAK,cAAc,IAAIA,CAAE;AAAA,EAClC;AAAA,EAEA,QAAQA,GAAmB;AAEzB,QAAI,CAAC,KAAK,cAAc,OAAOA,CAAE,EAAG;AAEpC,UAAMgF,IAAS,KAAK,QAAQ,IAAIhF,CAAE;AAClC,QAAI,CAACgF,EAAQ;AAGb,SAAK,QAAQ,OAAOhF,CAAE,GACtB,KAAK,eAAe,OAAOA,CAAE,GAC7B,KAAK,aAAa,OAAOA,CAAE,GAC3BA,EAAG,UAAU,OAAO4E,EAAS,GAGzBlC,EAAM,WACRA,EAAM,QAAQ3C,GAAYC,CAAE,CAAC;AAI/B,UAAMkF,IAAUF,EAAO;AACvB,QAAIE;AACF,eAASpJ,IAAI,GAAGwE,IAAM4E,EAAQ,QAAQpJ,IAAIwE,GAAKxE;AAC7C,YAAI;AACF,UAAAoJ,EAAQpJ,CAAC,GAAG,QAAA;AAAA,QACd,SAASR,GAAG;AACV,UAAAoH,EAAM,KAAK,yBAAyBpH,CAAC;AAAA,QACvC;AAKJ,UAAM6J,IAAWH,EAAO;AACxB,QAAIG;AACF,eAASrJ,IAAI,GAAGwE,IAAM6E,EAAS,QAAQrJ,IAAIwE,GAAKxE;AAC9C,YAAI;AACF,UAAAqJ,EAASrJ,CAAC,IAAA;AAAA,QACZ,SAASR,GAAG;AACV,UAAAoH,EAAM,KAAK,kBAAkBpH,CAAC;AAAA,QAChC;AAAA,EAGN;AAAA,EAEA,mBAAmB0E,GAAmB;AACpC,UAAMoF,IAAWpF,EAAG,iBAAiB,IAAI4E,EAAS,EAAE;AACpD,aAAS9I,IAAI,GAAGwE,IAAM8E,EAAS,QAAQtJ,IAAIwE,GAAKxE,KAAK;AACnD,YAAMuJ,IAAQD,EAAStJ,CAAC;AAExB,MAAIuJ,KAAS,KAAK,cAAc,IAAIA,CAAK,IACvC,KAAK,QAAQA,CAAK,IACTA,KACTA,EAAM,UAAU,OAAOT,EAAS;AAAA,IAEpC;AAAA,EACF;AAAA,EAEA,YAAY5E,GAAmB;AAC7B,SAAK,mBAAmBA,CAAE,GAC1B,KAAK,QAAQA,CAAE;AAAA,EACjB;AACF;AAEO,MAAMsF,IAAW,IAAIT,GAAA;AAE5B,IAAIU,KAAoC;AAEjC,SAASC,GAAkBC,IAAgB,SAAS,MAAY;AACrE,EAAIF,OAEJA,KAAW,IAAI,iBAAiB,CAACG,MAAc;AAC7C,aAAS5J,IAAI,GAAGwE,IAAMoF,EAAU,QAAQ5J,IAAIwE,GAAKxE,KAAK;AACpD,YAAM6J,IAAeD,EAAU5J,CAAC,GAAG;AACnC,UAAI,CAAC6J,EAAc;AACnB,YAAMC,IAAOD,EAAa;AAC1B,UAAIC,MAAS;AAEb,iBAAS7H,IAAI,GAAGA,IAAI6H,GAAM7H,KAAK;AAC7B,gBAAM+G,IAAOa,EAAa5H,CAAC;AAE3B,UAAI+G,EAAK,aAAa,MAGlBA,EAAK,eAAeQ,EAAS,OAAOR,CAAI,KAAKQ,EAAS,UAAUR,CAAI,KAIxEQ,EAAS,YAAYR,CAAe;AAAA,QACtC;AAAA,IACF;AAAA,EACF,CAAC,GAEDS,GAAS,QAAQE,GAAM,EAAE,WAAW,IAAM,SAAS,IAAM;AAC3D;AAEO,SAASI,KAA2B;AACzC,EAAAN,IAAU,WAAA,GACVA,KAAW;AACb;AC5JO,SAASO,EACd9F,GACA+F,GACAC,GACAC,GACM;AACN,EAAItG,GAAWoG,CAAM,IACnBT,EAAS;AAAA,IACPtF;AAAA,IACAgE,EAAO,MAAM;AACX,YAAMpE,IAAQmG,EAAO;AACrB,MAAAC,EAAQpG,CAAK,GACb8C,EAAM,WAAWjE,EAAEuB,CAAE,GAAGiG,GAAWrG,CAAK;AAAA,IAC1C,CAAC;AAAA,EAAA,KAGHoG,EAAQD,CAAM,GACVrD,EAAM,WAASA,EAAM,WAAWjE,EAAEuB,CAAE,GAAGiG,GAAWF,CAAM;AAEhE;ACmEO,IAAKG,sBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,YAAY,CAAA,IAAZ,aACAA,EAAAA,EAAA,gBAAgB,CAAA,IAAhB,iBACAA,EAAAA,EAAA,eAAe,CAAA,IAAf,gBAEAA,EAAAA,EAAA,OAAO,EAAA,IAAP,QAPUA,IAAAA,KAAA,CAAA,CAAA;AAyBL,SAASC,KAA6C;AAC3D,SAAO;AAAA,IAAE,WAAW;AAAA,IAAM,OAAO;AAAA;AAAA,EAAA;AACnC;ACnHO,SAASC,GACdpD,GACAS,GACAE,IAAyB,CAAA,GACoB;AAC7C,QAAM;AAAA,IACJ,UAAU0C;AAAA,IACV,OAAAC,IAAQhC,GAAe;AAAA,IACvB,OAAAiC,IAAQ,CAAC9J,MAAcA;AAAA,IACvB,QAAA+J,IAAS,CAAC/J,MAAS,OAAOA,KAAK,EAAE;AAAA,IACjC,OAAAgK,IAAQ,OAAO;AAAA,EAAA,IACb9C,GAEE+C,IAA2BP,GAAA,GAC3BnG,IAAKgD,EAAI,CAAC,GAGV2D,IAAkB,MAAM;AAC5B,QAAI,EAAAD,EAAM,QAAQR,EAAa,OAE/B;AAAA,MAAAQ,EAAM,SAASR,EAAa;AAC5B,UAAI;AACF,cAAMU,IAAa5G,EAAG,OAChB6G,IAASN,EAAMK,CAAU;AAE/B,QAAKH,EAAMhD,EAAK,OAAOoD,CAAM,MAC3BpD,EAAK,QAAQoD;AAAA,MAEjB,UAAA;AACE,QAAAH,EAAM,SAAS,CAACR,EAAa;AAAA,MAC/B;AAAA;AAAA,EACF,GAEMY,IAAS,MAAM;AAEnB,IAAIJ,EAAM,cACR,aAAaA,EAAM,SAAS,GAC5BA,EAAM,YAAY,MAClBC,EAAA,IAGFD,EAAM,SAAS,CAACR,EAAa;AAG7B,UAAMa,IAAYP,EAAO/C,EAAK,KAAK;AACnC,IAAIzD,EAAG,UAAU+G,MACf/G,EAAG,QAAQ+G;AAAA,EAEf,GAGMC,IAAU,MAAM;AACpB,IAAIN,EAAM,QAAQR,EAAa,SAE3BG,KACEK,EAAM,aAAW,aAAaA,EAAM,SAAS,GACjDA,EAAM,YAAY,WAAWC,GAAiBN,CAAU,KAExDM,EAAA;AAAA,EAEJ,GAEMM,IAAW;AAAA,IACf,kBAAkB,MAAM;AACtB,MAAAP,EAAM,SAASR,EAAa;AAAA,IAC9B;AAAA,IACA,gBAAgB,MAAM;AACpB,MAAAQ,EAAM,SAAS,CAACR,EAAa,WAC7BS,EAAA;AAAA,IACF;AAAA,IACA,OAAO,MAAM;AACX,MAAAD,EAAM,SAASR,EAAa;AAAA,IAC9B;AAAA,IACA,MAAMY;AAAA,IACN,CAACR,CAAK,GAAGU;AAAA,IACT,QAAQA;AAAA,EAAA;AAGV,SAAAhE,EAAI,GAAGiE,CAAQ,GAuCR,EAAE,QA/BM,MAAM;AACnB,UAAMnF,IAAM2B,EAAK,OACXsD,IAAYP,EAAO1E,CAAG,GACtBoF,IAAalH,EAAG;AAGtB,QAAIkH,MAAeH,KAGf,EAAAL,EAAM,QAAQR,EAAa,WAAWO,EAAMF,EAAMW,CAAU,GAAGpF,CAAG,IAItE;AAAA,MAAA4E,EAAM,SAASR,EAAa;AAC5B,UAAI;AACF,YAAIQ,EAAM,QAAQR,EAAa,SAAS;AAEtC,gBAAM,EAAE,gBAAgBiB,GAAO,cAAcC,OAAQpH;AACrD,UAAAA,EAAG,QAAQ+G;AACX,gBAAMzG,IAAMyG,EAAU;AACtB,UAAA/G,EAAG,kBAAkB,KAAK,IAAImH,KAAS,GAAG7G,CAAG,GAAG,KAAK,IAAI8G,MAAO,GAAG9G,CAAG,CAAC;AAAA,QACzE;AACE,UAAAN,EAAG,QAAQ+G;AAGb,QAAArE,EAAM,WAAWM,GAAK,OAAO+D,CAAS;AAAA,MACxC,UAAA;AACE,QAAAL,EAAM,SAAS,CAACR,EAAa;AAAA,MAC/B;AAAA;AAAA,EACF,GAEiB,SArCD,MAAM;AACpB,IAAAlD,EAAI,IAAIiE,CAAQ,GACZP,EAAM,aAAW,aAAaA,EAAM,SAAS;AAAA,EACnD,EAkCiB;AACnB;ACjHA,MAAMW,KAAqC,uBAAO,OAAO,IAAI;AAC7D,SAASC,GAAa5C,GAAsB;AAC1C,MAAI6C,IAASF,GAAW3C,CAAI;AAC5B,SAAI6C,MAEJA,IAAS7C,EAAK,SAAS,GAAG,IAAIA,EAAK,QAAQ,OAAO,CAACjJ,MAAMA,EAAE,CAAC,EAAG,YAAA,CAAa,IAAIiJ,GAChF2C,GAAW3C,CAAI,IAAI6C,GACZA;AACT;AAMO,SAASC,EAAcxH,GAAiC;AAC7D,MAAIyH,IAAsB;AAC1B,SAAO;AAAA,IACL,IAAI,MAAM;AACR,aAAKA,MAAMA,IAAOhJ,EAAEuB,CAAE,IACfyH;AAAA,IACT;AAAA,IACA,IAAAzH;AAAA,IACA,cAAc,CAACiF,MAAOK,EAAS,aAAatF,GAAIiF,CAAE;AAAA,EAAA;AAEtD;AAMO,SAASyC,GAAYC,GAAqB/H,GAA+B;AAC9E,QAAMI,IAAK2H,EAAI;AACf,EAAA7B;AAAA,IACE9F;AAAA,IACAJ;AAAA,IACA,CAACkC,MAAQ;AACP,YAAMiB,IAAS,OAAOjB,KAAQ,WAAWA,IAAM,OAAOA,KAAO,EAAE;AAE/D,MAAI9B,EAAG,gBAAgB+C,MACrB/C,EAAG,cAAc+C;AAAA,IAErB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,SAAS6E,GAASD,GAAqB/H,GAAoC;AAChF,QAAMI,IAAK2H,EAAI;AACf,EAAA7B;AAAA,IACE9F;AAAA,IACAJ;AAAA,IACA,CAACkC,MAAQ;AACP,YAAMiB,IAAS,OAAOjB,KAAO,EAAE,GACzB+F,IAAYrH,GAAauC,CAAM;AAErC,MAAI8E,MAAc9E,KAChB,QAAQ,KAAK,GAAGqB,EAAa,IAAI,IAAII,GAAe,cAAc,EAAE,GAIlExE,EAAG,cAAc6H,MACnB7H,EAAG,YAAY6H;AAAA,IAEnB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEO,SAASC,GACdH,GACAI,GACM;AACN,aAAWC,KAAaD;AACtB,IAAAjC;AAAA,MACE6B,EAAI;AAAA,MACJI,EAASC,CAAS;AAAA,MAClB,CAAClG,MAAQ;AACP,QAAA6F,EAAI,GAAG,UAAU,OAAOK,GAAW,CAAC,CAAClG,CAAG;AAAA,MAC1C;AAAA,MACA,SAASkG,CAAS;AAAA,IAAA;AAGxB;AAEO,SAASC,GAAQN,GAAqBO,GAAwC;AACnF,QAAMlI,IAAK2H,EAAI,IACTrE,IAAQtD,EAAG;AACjB,aAAW0E,KAAQwD,GAAQ;AACzB,UAAMpG,IAAMoG,EAAOxD,CAAI;AACvB,QAAI5C,MAAQ,OAAW;AAEvB,UAAMqG,IAAQb,GAAa5C,CAAI,GACzB0D,IAAQ,MAAM,QAAQtG,CAAG,GACzBiE,IAASqC,IAAQtG,EAAI,CAAC,IAAIA,GAC1BuG,IAAOD,IAAQtG,EAAI,CAAC,IAAI;AAE9B,IAAAgE;AAAA,MACE9F;AAAA,MACA+F;AAAA,MACA,CAACtJ,MAAM;AACL,cAAM6L,IAASD,IAAO,GAAG5L,CAAC,GAAG4L,CAAI,KAAK,OAAO5L,CAAC;AAC9C,YAAI0E,GAAoBmH,CAAM,GAAG;AAC/B,kBAAQ,KAAK,GAAGlE,EAAa,IAAI,IAAII,GAAe,wBAAwBE,CAAI,CAAC,EAAE;AACnF;AAAA,QACF;AACA,QAAApB,EAAM6E,CAAK,IAAIG;AAAA,MACjB;AAAA,MACA,OAAO5D,CAAI;AAAA,IAAA;AAAA,EAEf;AACF;AAEO,SAAS6D,GACdZ,GACAa,GACM;AACN,QAAMxI,IAAK2H,EAAI;AACf,aAAW9E,KAAQ2F,GAAS;AAE1B,UAAMC,IAAK5F,EAAK,WAAW,CAAC;AAC5B,SAAK4F,MAAO,OAAOA,MAAO,QAAQ5F,EAAK,WAAW,CAAC,MAAM,OAAOA,EAAK,WAAW,CAAC,MAAM,KAAK;AAC1F,cAAQ,KAAK,GAAGuB,EAAa,IAAI,IAAII,GAAe,sBAAsB3B,CAAI,CAAC,EAAE;AACjF;AAAA,IACF;AAEA,IAAAiD;AAAA,MACE9F;AAAA,MACAwI,EAAQ3F,CAAI;AAAA,MACZ,CAACpG,MAAM;AACL,YAAIA,KAAM,QAA2BA,MAAM,IAAO;AAChD,UAAAuD,EAAG,gBAAgB6C,CAAI;AACvB;AAAA,QACF;AACA,cAAME,IAAStG,MAAM,KAAOoG,IAAO,OAAOpG,CAAC;AAC3C,YAAIwE,GAAe4B,GAAME,CAAM,GAAG;AAChC,kBAAQ,KAAK,GAAGqB,EAAa,IAAI,IAAII,GAAe,iBAAiB3B,CAAI,CAAC,EAAE;AAC5E;AAAA,QACF;AAEA,QAAI7C,EAAG,aAAa6C,CAAI,MAAME,KAC5B/C,EAAG,aAAa6C,GAAME,CAAM;AAAA,MAEhC;AAAA,MACA,QAAQF,CAAI;AAAA,IAAA;AAAA,EAEhB;AACF;AAEO,SAAS6F,GACdf,GACAgB,GACM;AACN,QAAM3I,IAAK2H,EAAI;AACf,aAAW9E,KAAQ8F,GAAS;AAE1B,QAAIpE,GAAgB,SAAS1B,CAAwC,GAAG;AACtE,cAAQ,KAAK,GAAGuB,EAAa,IAAI,IAAII,GAAe,uBAAuB3B,CAAI,CAAC,EAAE;AAClF;AAAA,IACF;AAEA,IAAAiD;AAAA,MACE6B,EAAI;AAAA,MACJgB,EAAQ9F,CAAI;AAAA,MACZ,CAACf,MAAQ;AAEP,QAAI9B,EAAG6C,CAAI,MAAMf,MACf9B,EAAG6C,CAAI,IAAIf;AAAA,MAEf;AAAA,MACA,QAAQe,CAAI;AAAA,IAAA;AAAA,EAEhB;AACF;AAEO,SAAS+F,GACdjB,GACAkB,GACAC,GACAC,GACM;AACN,QAAM/I,IAAK2H,EAAI;AACf,EAAA7B;AAAA,IACE9F;AAAA,IACA6I;AAAA,IACA,CAAC/G,MAAQ;AACP,YAAMkH,IAAUF,IAAS,CAAChH,IAAM,CAAC,CAACA;AAClC,MAAA9B,EAAG,MAAM,UAAUgJ,IAAU,KAAK,QAC9BtG,EAAM,WAASA,EAAM,WAAW1C,GAAI+I,GAAOjH,CAAG;AAAA,IACpD;AAAA,IACAiH;AAAA,EAAA;AAEJ;AAMO,SAASE,GACdtB,GACAuB,GACM;AACN,QAAM/I,IAAUwH,EAAI,GAAG,QAAQ,YAAA;AAC/B,MAAIxH,MAAY,WAAWA,MAAY,YAAYA,MAAY,YAAY;AACzE,YAAQ,KAAK,qDAAqDA,CAAO,IAAI;AAC7E;AAAA,EACF;AACA,QAAMiI,IAAQ,MAAM,QAAQc,CAAG,GACzB,EAAE,QAAQC,GAAM,SAAAC,EAAA,IAAYhD;AAAA,IAChCuB,EAAI;AAAA,IACJS,IAAQc,EAAI,CAAC,IAAIA;AAAA,IACjBd,IAAQc,EAAI,CAAC,IAAI,CAAA;AAAA,EAAC;AAGpB,EAAA5D,EAAS,YAAYqC,EAAI,IAAI3D,EAAOmF,CAAI,CAAC,GACzCxB,EAAI,aAAayB,CAAO;AAC1B;AAEO,SAASC,GAAY1B,GAAqBlE,GAAmC;AAClF,QAAMzD,IAAK2H,EAAI,IACT3E,IAAM2E,EAAI,KACVjB,IAAQP,GAAA,GAGRmD,IAAU,MAAM;AACpB,QAAI5C,EAAM,QAAQR,EAAa,KAAM;AACrC,UAAMqD,IAAUvJ,EAAG;AACnB,IAAIyD,EAAK,UAAU8F,MACjB9F,EAAK,QAAQ8F;AAAA,EAEjB;AAEA,EAAAvG,EAAI,GAAG,UAAUsG,CAAO,GACxB3B,EAAI,aAAa,MAAM3E,EAAI,IAAI,UAAUsG,CAAO,CAAC;AAGjD,QAAMvE,IAAKf,EAAO,MAAM;AACtB,IAAA0C,EAAM,SAASR,EAAa;AAC5B,UAAMpE,IAAM,CAAC,CAAC2B,EAAK;AACnB,IAAIzD,EAAG,YAAY8B,MACjB9B,EAAG,UAAU8B,GACTY,EAAM,WAASA,EAAM,WAAWM,GAAK,WAAWlB,CAAG,IAEzD4E,EAAM,SAAS,CAACR,EAAa;AAAA,EAC/B,CAAC;AACD,EAAAZ,EAAS,YAAYtF,GAAI+E,CAAE;AAC7B;AAeO,SAASyE,GAAW7B,GAAqB8B,GAAiC;AAC/E,aAAW5G,KAAQ4G,GAAU;AAC3B,UAAMH,IAAUG,EAAS5G,CAAI;AAC7B,QAAI,OAAOyG,KAAY,WAAY;AACnC,UAAMI,IAAW,CAACpO,MAAa;AAC7B2I,MAAAA;AAAAA,QAAM,MACHqF,EAAwD;AAAA,UACvD3B,EAAI;AAAA,UACJlJ,EAAE,MAAMnD,EAAE,MAAM,EAAE,eAAeA,GAAG;AAAA,QAAA;AAAA,MACtC;AAAA,IAEJ;AACA,IAAAqM,EAAI,GAAG,iBAAiB9E,GAAM6G,CAAQ,GACtC/B,EAAI,aAAa,MAAMA,EAAI,GAAG,oBAAoB9E,GAAM6G,CAAQ,CAAC;AAAA,EACnE;AACF;AAYAjL,EAAE,GAAG,WAAW,SACdkF,GACQ;AACR,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAMgE,IAAMH,EAAc,IAAI;AAG9B,IAAI7D,EAAQ,SAAS,UAAW+D,GAASC,GAAKhE,EAAQ,IAAI,GACtDA,EAAQ,SAAS,UAAWiE,GAASD,GAAKhE,EAAQ,IAAI,GACtDA,EAAQ,SAAOmE,GAAUH,GAAKhE,EAAQ,KAAK,GAC3CA,EAAQ,OAAKsE,GAAQN,GAAKhE,EAAQ,GAAG,GACrCA,EAAQ,QAAM4E,GAASZ,GAAKhE,EAAQ,IAAI,GACxCA,EAAQ,QAAM+E,GAASf,GAAKhE,EAAQ,IAAI,GACxCA,EAAQ,SAAS,UAAWiF,GAAejB,GAAKhE,EAAQ,MAAM,IAAO,MAAM,GAC3EA,EAAQ,SAAS,UAAWiF,GAAejB,GAAKhE,EAAQ,MAAM,IAAM,MAAM,GAC1EA,EAAQ,QAAQ,UAAWsF,GAAQtB,GAAKhE,EAAQ,GAAG,GACnDA,EAAQ,YAAY,UAAW0F,GAAY1B,GAAKhE,EAAQ,OAAO,GAC/DA,EAAQ,MAAI6F,GAAW7B,GAAKhE,EAAQ,EAAE;AAAA,EAC5C,CAAC;AACH;ACjTAlF,EAAE,GAAG,WAAW,SAAasH,GAA0B4D,GAAsC;AAC3F,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAM3G,IAAMvE,EAAE,IAAI;AAKlB,IAAAqH,EAAuB,MAAMC,GAJd4D,IACX,CAAC7H,MAAWkB,EAAI,KAAK2G,EAAU7H,CAAG,CAAC,IACnC,CAACA,MAAWkB,EAAI,KAAK,OAAOlB,KAAO,EAAE,CAAC,GAEG,MAAM;AAAA,EACrD,CAAC;AACH;AAKArD,EAAE,GAAG,WAAW,SAAUsH,GAAuC;AAC/D,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAA6B,GAASJ,EAAc,IAAI,GAAGzB,CAAM;AAAA,EACtC,CAAC;AACH;AAKAtH,EAAE,GAAG,YAAY,SAAUuJ,GAAmBa,GAA2C;AACvF,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAf,GAAUN,EAAc,IAAI,GAAG,EAAE,CAACQ,CAAS,GAAGa,GAAW;AAAA,EAC3D,CAAC;AACH;AAKApK,EAAE,GAAG,UAAU,SACbiG,GACAqB,GACAsC,GACQ;AACR,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAJ,GAAQT,EAAc,IAAI,GAAG,EAAE,CAAC9C,CAAI,GAAG2D,IAAO,CAACtC,GAAQsC,CAAI,IAAItC,GAAQ;AAAA,EACzE,CAAC;AACH;AAKAtH,EAAE,GAAG,WAAW,SAAUoE,GAAckD,GAAwD;AAC9F,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAwC,GAASf,EAAc,IAAI,GAAG,EAAE,CAAC3E,CAAI,GAAGkD,GAAQ;AAAA,EAClD,CAAC;AACH;AAKAtH,EAAE,GAAG,WAAW,SACdoE,GACAkD,GACQ;AACR,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAA2C,GAASlB,EAAc,IAAI,GAAG,EAAE,CAAC3E,CAAI,GAAGkD,GAAQ;AAAA,EAClD,CAAC;AACH;AAKAtH,EAAE,GAAG,WAAW,SAAUoK,GAA2C;AACnE,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAD,GAAepB,EAAc,IAAI,GAAGqB,GAAW,IAAO,MAAM;AAAA,EAC9D,CAAC;AACH;AAKApK,EAAE,GAAG,WAAW,SAAUoK,GAA2C;AACnE,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAD,GAAepB,EAAc,IAAI,GAAGqB,GAAW,IAAM,MAAM;AAAA,EAC7D,CAAC;AACH;AAKApK,EAAE,GAAG,UAAU,SAAagF,GAAuBE,IAAyB,CAAA,GAAY;AACtF,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAAsF;AAAA,MACEzB,EAAc,IAAI;AAAA,MAClB7D,KAAW,OAAO,KAAKA,CAAO,EAAE,SAAS,IAAI,CAACF,GAAME,CAAO,IAAIF;AAAA,IAAA;AAAA,EAEnE,CAAC;AACH;AAMAhF,EAAE,GAAG,cAAc,SAAUgF,GAAqC;AAChE,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAA4F,GAAY7B,EAAc,IAAI,GAAG/D,CAAI;AAAA,EACvC,CAAC;AACH;AAKAhF,EAAE,GAAG,SAAS,SAAU6H,GAAegD,GAA4C;AACjF,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAMtG,IAAMvE,EAAE,IAAI;AAClB,IAAAuE,EAAI,GAAGsD,GAAOgD,CAAO,GACrBhE,EAAS,aAAa,MAAM,MAAMtC,EAAI,IAAIsD,GAAOgD,CAAO,CAAC;AAAA,EAC3D,CAAC;AACH;AAKA7K,EAAE,GAAG,aAAa,WAAoB;AACpC,SAAO,KAAK,KAAK,WAAY;AAC3B,IAAA6G,EAAS,YAAY,IAAI;AAAA,EAC3B,CAAC;AACH;ACjIA7G,EAAE,GAAG,WAAW,SAAasH,GAA2BpC,GAAiC;AACvF,QAAM,EAAE,KAAAnC,GAAK,QAAAoI,GAAQ,MAAAC,GAAM,QAAAC,GAAQ,OAAAC,GAAO,UAAAC,GAAU,OAAAC,MAAUtG,GAGxDuG,IACJ,OAAO1I,KAAQ,aACXA,IACA,CAAC2I,GAASC,MAAmBD,EAAK3I,CAAc;AAEtD,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAM6I,IAAa5L,EAAE,IAAI,GACnB6L,IAAoBvK,GAAY,IAAI,GAEpCwK,wBAAc,IAAA,GACdC,wBAAmB,IAAA;AACzB,QAAIC,IAA+B,CAAA,GAC/BC,IAA0B;AAE9B,UAAM3F,IAAKf,EAAO,MAAM;AACtB,YAAM2G,IAAQ5E,EAAO,OACf6E,IAAYD,EAAM;AAGxB,UAAIC,MAAc;AAChB,YAAIX,KAAS,CAACS,GAAU;AAEtB,gBAAMG,IAAY,OAAOZ,KAAU,WAAWzJ,GAAayJ,CAAK,IAAIA;AACpE,UAAAS,IAAYjM,EAAEoM,CAAmB,EAAa,SAASR,CAAU;AAAA,QACnE;AAAA,aACSK,MACTA,EAAS,OAAA,GACTA,IAAW;AAIb,UAAIE,MAAc,KAAKL,EAAQ,SAAS,GAAG;AACzC,QAAAE,IAAU,CAAA;AACV;AAAA,MACF;AAEA,MAAA/H,EAAM,IAAI,QAAQ,GAAG4H,CAAiB,kBAAkBM,CAAS,QAAQ;AAGzE,YAAME,wBAAkB,IAAA,GAClBC,KAASN,EAAQ;AACvB,eAAS3O,IAAI,GAAGA,IAAIiP,IAAQjP;AAC1B,QAAAgP,EAAY,IAAIL,EAAQ3O,CAAC,GAAIA,CAAC;AAIhC,YAAMkP,IAA+B,IAAI,MAAMJ,CAAS,GAClDK,yBAAgB,IAAA,GAChBC,KAAa,IAAI,WAAWN,CAAS;AAE3C,eAAS9O,IAAI,GAAGA,IAAI8O,GAAW9O,KAAK;AAClC,cAAMqO,IAAOQ,EAAM7O,CAAC,GACdoB,IAAIgN,EAAOC,GAAMrO,CAAC;AAExB,QAAImP,GAAU,IAAI/N,CAAC,KACjB,QAAQ,KAAK,GAAGkH,EAAa,IAAI,IAAII,GAAe,cAActH,GAAGpB,CAAC,CAAC,EAAE,GAG3EkP,EAAQlP,CAAC,IAAIoB,GACb+N,GAAU,IAAI/N,CAAC,GACfgO,GAAWpP,CAAC,IAAIgP,EAAY,IAAI5N,CAAC,KAAK;AAAA,MACxC;AAGA,UAAIqN,EAAQ,OAAO;AACjB,mBAAW,CAACrN,GAAGiO,CAAK,KAAKZ,GAAS;AAChC,cAAIU,GAAU,IAAI/N,CAAC,KAAKsN,EAAa,IAAItN,CAAC,EAAG;AAE7C,gBAAMkO,IAAc,MAAM;AACxB,YAAAD,EAAM,IAAI,OAAA,GACNA,EAAM,IAAI,CAAC,OAAY,QAAQA,EAAM,IAAI,CAAC,CAAC,GAC/CX,EAAa,OAAOtN,CAAC,GACrBwF,EAAM,IAAI,QAAQ,GAAG4H,CAAiB,kBAAkBpN,CAAC;AAAA,UAC3D;AAKA,cAHAqN,EAAQ,OAAOrN,CAAC,GAChBsN,EAAa,IAAItN,CAAC,GAEd8M,GAAU;AACZ,kBAAMpI,IAASoI,EAASmB,EAAM,GAAG;AACjC,YAAIvJ,aAAkB,UAASA,EAAO,KAAKwJ,CAAW,IACjDA,EAAA;AAAA,UACP;AACE,YAAAA,EAAA;AAAA,QAEJ;AAIF,UAAIR,MAAc,GAAG;AACnB,QAAAH,IAAU,CAAA;AACV;AAAA,MACF;AAGA,YAAMY,KAAS5J,GAAOyJ,EAAU;AAChC,UAAII,KAASD,GAAO,SAAS,GAGzBE,IAAwB;AAC5B,eAASzP,IAAI8O,IAAY,GAAG9O,KAAK,GAAGA,KAAK;AACvC,cAAMoB,IAAI8N,EAAQlP,CAAC,GACbqO,IAAOQ,EAAM7O,CAAC,GACdqP,IAAQZ,EAAQ,IAAIrN,CAAC;AAE3B,YAAIiO,GAAO;AAET,gBAAMK,IAAUL,EAAM;AACtB,UAAAA,EAAM,OAAOhB;AACb,gBAAMnK,KAAKmL,EAAM,IAAI,CAAC;AACtB,cAAI,CAACnL,GAAI;AAET,cAAI8J;AACF,YAAAA,EAAOqB,EAAM,KAAKhB,GAAMrO,CAAC,GACzB4G,EAAM,WAAWyI,EAAM,KAAK,eAAehB,CAAI;AAAA,mBACtCqB,MAAYrB,KAAQ,CAAC/I,GAAaoK,GAASrB,CAAI,GACxD;AACE,kBAAMsB,IAAY7B,EAAOO,GAAMrO,CAAC,GAC1B4P,KACJ,OAAOD,KAAc,WAAWjL,GAAaiL,CAAS,IAAIA,GACtDE,IAASlN,EAAEiN,EAAoB,GAC/BE,IAAsBL,MAAavL;AACzC,YAAAmL,EAAM,IAAI,YAAYQ,CAAM,GAC5BR,EAAM,MAAMQ,GACR9B,KAAMA,EAAK8B,GAAQxB,GAAMrO,CAAC,GAC9B4G,EAAM,WAAWiJ,GAAQ,eAAexB,CAAI,GACxCyB,MAAqBL,IAAWI,EAAO,CAAC,KAAK;AAAA,UACnD;AAIF,cAAIL,MAAU,KAAKD,GAAOC,EAAM,MAAMxP;AACpC,YAAAwP;AAAA,eACK;AACL,kBAAMO,IAAYV,EAAM,IAAI,CAAC;AAC7B,YAAII,GAAU,cACRA,MAAaM,KAAWV,EAAM,IAAI,aAAaI,CAAQ,IAE3DJ,EAAM,IAAI,SAASd,CAAU;AAAA,UAEjC;AACA,UAAAkB,IAAWJ,EAAM,IAAI,CAAC,KAAK;AAAA,QAC7B,OAAO;AAEL,gBAAMW,IAAWlC,EAAOO,GAAMrO,CAAC,GACzBiQ,KAAe,OAAOD,KAAa,WAAWtL,GAAasL,CAAQ,IAAIA,GACvE9I,IAAMvE,EAAEsN,EAAsB;AACpC,UAAAxB,EAAQ,IAAIrN,GAAG,EAAE,KAAA8F,GAAK,MAAAmH,GAAM,GAExBoB,GAAU,cAAavI,EAAI,aAAauI,CAAQ,IAC/CvI,EAAI,SAASqH,CAAU,GAExBR,KAAMA,EAAK7G,GAAKmH,GAAMrO,CAAC,GACvBiO,OAAa/G,CAAG,GAEpBN,EAAM,WAAWM,GAAK,YAAYmH,CAAI,GACtCoB,IAAWvI,EAAI,CAAC,KAAK;AAAA,QACvB;AAAA,MACF;AAEA,MAAAyH,IAAUO;AAAA,IACZ,CAAC;AAED,IAAA1F,EAAS,YAAY,MAAMP,CAAE,GAC7BO,EAAS,aAAa,MAAM,MAAM;AAChC,MAAAiF,EAAQ,MAAA,GACRC,EAAa,MAAA,GACbC,IAAU,CAAA,GACVC,GAAU,OAAA;AAAA,IACZ,CAAC;AAAA,EACH,CAAC;AACH;ACrLA,MAAMsB,yBAAwB,QAAA;AAM9BvN,EAAE,GAAG,YAAY,SAAawN,GAA2BC,IAAW,CAAA,GAAiB;AACnF,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAMhJ,IAAWnD,GAAY,IAAI,GAG3BoM,IAAkBH,GAAkB,IAAI,IAAI;AAClD,IAAIG,MACFzJ,EAAM,IAAI,SAAS,GAAGQ,CAAQ,gCAAgC,GAC9DiJ,EAAA,IAGFzJ,EAAM,IAAI,SAAS,GAAGQ,CAAQ,qBAAqB;AAGnD,QAAIkJ;AACJ,QAAI;AACF,MAAAA,IAAcH,EAAUxN,EAAE,IAAI,GAAGyN,CAAK;AAAA,IACxC,SAAS5Q,GAAG;AACV,cAAQ,MAAM,qCAAqCA,CAAC;AACpD;AAAA,IACF;AAGA,UAAM+Q,IAAc,MAAM;AAExB,UAAKL,GAAkB,OAAO,IAAI,GAIlC;AAAA,YAFAtJ,EAAM,IAAI,SAAS,GAAGQ,CAAQ,eAAe,GAEzC,OAAOkJ,KAAgB;AACzB,cAAI;AACF,YAAAA,EAAA;AAAA,UACF,SAAS9Q,GAAG;AACV,oBAAQ,MAAM,uCAAuCA,CAAC;AAAA,UACxD;AAEF,QAAAgK,EAAS,YAAY,IAAI;AAAA;AAAA,IAC3B;AAEA,IAAA0G,GAAkB,IAAI,MAAMK,CAAW,GACvC/G,EAAS,aAAa,MAAM+G,CAAW;AAAA,EACzC,CAAC;AACH;AAKA5N,EAAE,GAAG,cAAc,WAAoB;AACrC,SAAO,KAAK,KAAK,WAAY;AAC3B,UAAM6N,IAAUN,GAAkB,IAAI,IAAI;AAC1C,IAAIM,KAASA,EAAA;AAAA,EACf,CAAC;AACH;ACtDA,MAAMC,KAAanI,EAAa;AA0BzB,SAASoI,GAAMC,GAA6B;AAEjD,QAAM;AAAA,IACJ,QAAAC;AAAA,IACA,SAASC;AAAA,IACT,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC,IAAOzI,GAAe;AAAA,IACtB,UAAA0I,IAAW1I,GAAe;AAAA,IAC1B,eAAA2I,IAAgB3I,GAAe;AAAA,IAC/B,aAAA4I,IAAc5I,GAAe;AAAA,IAC7B,kBAAA6I;AAAA,IACA,iBAAAC;AAAA,EAAA,IACEV,GAEEW,IAAgBN,MAAS;AAE/B,MAAIO,IAAc,IACdC,IAA+B,MAC/BC,IAAsBH,IACtB,OAAO,SAAS,WAAW,OAAO,SAAS,SAC3C,OAAO,SAAS;AACpB,QAAMjI,IAA8B,CAAA,GAC9BqI,wBAAiB,IAAA,GAGjBC,IAAUhP,EAAEiO,CAAM,GASlBgB,IAAe,MAAc;AACjC,QAAIN,GAAe;AACjB,UAAIO,IAAW,OAAO,SAAS;AAE/B,aAAIZ,KAAYY,EAAS,WAAWZ,CAAQ,MAC1CY,IAAWA,EAAS,UAAUZ,EAAS,MAAM,IAG7BY,EAAS,QAAQ,OAAO,EAAE,KACxBhB;AAAA,IACtB;AAEA,UAAMiB,IAAO,OAAO,SAAS,MACvBC,IAASD,EAAK,QAAQ,GAAG;AAE/B,YADkBC,MAAW,KAAKD,EAAK,UAAU,CAAC,IAAIA,EAAK,UAAU,GAAGC,CAAM,MAC1DlB;AAAA,EACtB,GAOMmB,IAAiB,MAA8B;AACnD,QAAIrJ;AAEJ,QAAI2I;AAEF,UADA3I,IAAM,OAAO,SAAS,OAAO,UAAU,CAAC,GACpC,CAACA,EAAK,QAAO,CAAA;AAAA,WACZ;AACL,YAAMmJ,IAAO,OAAO,SAAS,MACvBC,IAASD,EAAK,QAAQ,GAAG;AAC/B,UAAIC,MAAW,GAAI,QAAO,CAAA;AAC1B,MAAApJ,IAAMmJ,EAAK,UAAUC,IAAS,CAAC;AAAA,IACjC;AAEA,UAAME,IAAK,IAAI,gBAAgBtJ,CAAG,GAC5BuJ,IAAiC,OAAO,YAAYD,CAAE;AAG5D,QAAItJ,EAAI,SAAS,GAAG;AAClB,UAAI;AACF,2BAAmBA,CAAG;AAAA,MACxB,QAAa;AACX,QAAA/B,EAAM,KAAK,GAAG6J,EAAU,6BAA6B9H,CAAG,EAAE;AAAA,MAC5D;AAGF,WAAOuJ;AAAA,EACT,GAGMC,KAAgB,CAACC,GAAeC,GAAgBC,MAA6B;AACjF,QAAI;AACF,qBAAQ,UAAUF,GAAMC,GAAQC,CAAG,GAC5B;AAAA,IACT,SAAS9S,GAAG;AACV,aAAAoH,EAAM;AAAA,QACJ,GAAG6J,EAAU;AAAA,QACbjR;AAAA,MAAA,GAEK;AAAA,IACT;AAAA,EACF,GAEM+S,IAAmB,CAACH,GAAeC,GAAgBC,MAA6B;AACpF,QAAI;AACF,qBAAQ,aAAaF,GAAMC,GAAQC,CAAG,GAC/B;AAAA,IACT,SAAS9S,GAAG;AACV,aAAAoH,EAAM,KAAK,GAAG6J,EAAU,yBAAyBjR,CAAC,GAC3C;AAAA,IACT;AAAA,EACF,GAKMgT,KAAS,CAACC,MAA4B;AAC1C,QAAInB,GAAe;AAEjB,YAAMgB,IAAM,GAAGrB,EAAS,QAAQ,OAAO,EAAE,CAAC,IAAIwB,CAAS;AACvD,MAAAN,GAAc,MAAM,IAAIG,CAAG,GAE3Bb,IAAca;AAAA,IAChB,OAAO;AACL,YAAMR,IAAO,IAAIW,CAAS;AAC1B,MAAAhB,IAAcK,GACd,OAAO,SAAS,OAAOA;AAAA,IACzB;AAAA,EACF,GAKMY,KAAa,MAAY;AAC7B,IAAIpB,IACFiB,EAAiB,MAAM,IAAId,CAAW,IAEtC,OAAO,SAAS,OAAOA;AAAA,EAE3B,GAKMkB,KAAgB,MAChBrB,IACK,OAAO,SAAS,WAAW,OAAO,SAAS,SAE7C,OAAO,SAAS,MAQnBsB,KAAiB,CAACH,MAA8C;AACpE,QAAII,IAAc/B,EAAO2B,CAAS;AAOlC,WAJI,CAACI,KAAe9B,MAClB8B,IAAc/B,EAAOC,CAAQ,IAG1B8B,MACHjM,EAAM,KAAK,GAAG6J,EAAU,WAAWgC,CAAS,8CAA8C,GACnF;AAAA,EAIX,GAMMK,IAAiB,CAACC,MAAsC;AAC5D,UAAMC,IAAW,SAAS,cAAcD,CAAgB;AAExD,QAAI,CAACC,GAAU;AACb,aAAApM,EAAM,KAAK,GAAG6J,EAAU,cAAcsC,CAAgB,aAAa,GAC5D;AAGT,UAAME,IAAgBD,EAAS,QAAQ,UAAU,EAAI;AACrD,WAAArB,EAAQ,OAAOsB,CAAa,GAErB;AAAA,EACT,GAEMC,IAAqCpL,GAAW8J,GAAc,GAC9DuB,IAAwDrL,GAAWkK,GAAgB,GAMnFoB,IAAc,CAACX,MAA4B;AAC/C,QAAIlB,EAAa;AAGjB,UAAM8B,IAAY1B,EAAQ,CAAC;AAC3B,QAAI,CAAC0B,GAAW;AACd,MAAAzM,EAAM,KAAK,GAAG6J,EAAU,oBAAoBG,CAAM,aAAa;AAC/D;AAAA,IACF;AAGA,UAAMiC,IAAcD,GAAeH,CAAS;AAC5C,QAAI,CAACI,EAAa;AAGlB,UAAMX,IAASF,EAAA;AAGf,IAAIZ,KACFA,EAAiBI,KAAiBiB,GAAWA,CAAS,GAIxDd,EAAQ,MAAA;AAGR,QAAI2B,IAAcpB;AAClB,QAAIW,EAAY,SAAS;AACvB,YAAM/M,IAAS+M,EAAY,QAAQX,CAAM;AACzC,MAAIpM,MAAW,WACbwN,IAAc,EAAE,GAAGpB,GAAQ,GAAGpM,EAAA;AAAA,IAElC;AAGA,IAAI+M,EAAY,SACdA,EAAY,OAAOQ,GAAWZ,GAAWa,CAAW,IAC3CT,EAAY,YACjBC,EAAeD,EAAY,QAAQ,KACjCA,EAAY,WACdA,EAAY,QAAQlB,EAAQ,UAAU,GAMxCN,KACFA,EAAgBG,KAAiBiB,GAAWA,CAAS,GAIvDjB,IAAgBiB;AAAA,EAClB,GAMMc,IAAW,CAACd,MAA4B;AAC5C,QAAIlB,EAAa;AAGjB,UAAMiC,IAAmBN,EAAa,OAChCO,IAAqB3C,EAAO0C,CAAgB;AAElD,QAAIC,GAAoB,WACLA,EAAmB,QAAA,MACnB;AAAO;AAI1B,UAAMC,IAAWjB,KAAa5B;AAC9B,IAAA2B,GAAOkB,CAAQ,GACfR,EAAa,QAAQQ;AAAA,EACvB,GAKMC,IAAkB,MAAY;AAClC,QAAIpC,EAAa;AAEjB,UAAMqC,IAAajB,GAAA;AACnB,QAAIiB,MAAenC,EAAa;AAEhC,UAAMoC,IAAWjC,EAAA,GACXkC,IAAeZ,EAAa,OAC5BhB,IAASF,EAAA;AAEf,QAAI8B,MAAiBD,GAAU;AAE7B,YAAME,IAAiBjD,EAAOgD,CAAY;AAC1C,UAAIC,GAAgB,WACdA,EAAe,QAAA,MAAc,IAAO;AAEtC,QAAArB,GAAA;AACA;AAAA,MACF;AAEF,MAAAQ,EAAa,QAAQW,GACrBV,EAAgB,QAAQjB;AAAA,IAC1B,OAAO;AAEL,MAAAiB,EAAgB,QAAQjB;AACxB,YAAMW,IAAc/B,EAAOgD,CAAY;AACvC,MAAIjB,GAAa,iBACfA,EAAY,eAAeX,CAAM,IAEjCkB,EAAYS,CAAQ;AAAA,IAExB;AAEA,IAAApC,IAAcmC;AAAA,EAChB,GAOMI,KAAqB,MAAY;AACrC,QAAI,CAAC9C,EAAe;AAGpB,UAAM+C,IAAkB,CAACzU,MAA6B;AACpD,MAAAA,EAAE,eAAA;AACF,YAAM0U,IAAa1U,EAAE,cAA8B,QAAQ;AAC3D,MAAI0U,KAAa,QAAMX,EAASW,CAAS;AAAA,IAC3C;AAEAvR,IAAAA,EAAE,QAAQ,EAAE,GAAG,SAAS,gBAAgBsR,CAAe,GAEvD5K,EAAS,KAAK,MAAM;AAClB1G,MAAAA,EAAE,QAAQ,EAAE,IAAI,SAAS,gBAAgBsR,CAAe;AAAA,IAC1D,CAAC;AAGD,UAAME,IAAY,CAACjQ,MAAoB;AACrC,MAAIwN,EAAW,IAAIxN,CAAE,MACrBwN,EAAW,IAAIxN,CAAE,GACjBA,EAAG,UAAU,IAAI,YAAY;AAAA,IAC/B;AAGA,eAAWA,KAAM,SAAS,iBAA8B,cAAc;AACpE,MAAAiQ,EAAUjQ,CAAE;AAGd,UAAMkQ,IAAqB,CAAC3G,MAAoB;AAC9C,iBAAWvJ,KAAMwN,GAAY;AAC3B,cAAMwC,KAAYhQ,EAAG,QAAQ,OACvBmQ,KAAW5G,MAAYyG;AAC7B,QAAAhQ,EAAG,UAAU,OAAOiN,GAAakD,EAAQ,GACrCA,KACFnQ,EAAG,aAAa,gBAAgB,MAAM,IAEtCA,EAAG,gBAAgB,cAAc;AAAA,MAErC;AAAA,IACF,GAGMoQ,IAAoBpM,EAAO,MAAM;AACrC,MAAAkM,EAAmBlB,EAAa,KAAK;AAAA,IACvC,CAAC;AACD,IAAA7J,EAAS,KAAK,MAAMiL,EAAkB,QAAA,CAAS;AAG/C,UAAM7K,IAAW,IAAI,iBAAiB,CAACG,MAAc;AACnD,UAAI2K,IAAQ;AACZ,iBAAWC,MAAY5K;AACrB,QAAI4K,GAAS,SAAS,eACpBA,GAAS,WAAW,QAAQ,CAACxL,OAAS;AACpC,cAAIA,GAAK,aAAa,GAAG;AACvB,kBAAM9E,KAAK8E;AACX,YAAI9E,GAAG,UAAU,cAAc,MAC7BiQ,EAAUjQ,EAAE,GACZqQ,IAAQ,KAENrQ,GAAG,oBACLA,GAAG,iBAAiB,cAAc,EAAE,QAAQ,CAACqF,OAAU;AACrD,cAAA4K,EAAU5K,EAAoB,GAC9BgL,IAAQ;AAAA,YACV,CAAC;AAAA,UAEL;AAAA,QACF,CAAC;AAIL,MAAIA,KACFH,EAAmBlB,EAAa,KAAK;AAAA,IAEzC,CAAC;AAED,IAAAzJ,EAAS,QAAQ,SAAS,MAAM,EAAE,WAAW,IAAM,SAAS,IAAM,GAClEJ,EAAS,KAAK,MAAMI,EAAS,WAAA,CAAY;AAAA,EAC3C,GAMMgL,IAAU,MAAY;AAC1B,IAAIlD,MACJA,IAAc,IAGdlI,EAAS,QAAQ,CAACiE,MAAYA,EAAA,CAAS,GACvCjE,EAAS,SAAS,GAGlBqI,EAAW,QAAQ,CAACxN,MAAO;AACzB,MAAAA,EAAG,UAAU,OAAO,YAAY,GAChCsF,EAAS,QAAQtF,CAAE;AAAA,IACrB,CAAC,GACDwN,EAAW,MAAA;AAAA,EACb,GAGMgD,KAAYpD,IAAgB,aAAa;AAC/C,SAAO,iBAAiBoD,IAAWf,CAAe,GAClDtK,EAAS,KAAK,MAAM,OAAO,oBAAoBqL,IAAWf,CAAe,CAAC;AAG1E,QAAMgB,IAAezM,EAAO,MAAM;AAChC,IAAAkL,EAAYF,EAAa,KAAK;AAAA,EAChC,CAAC;AACD,SAAA7J,EAAS,KAAK,MAAMsL,EAAa,QAAA,CAAS,GAG1CX,GAAA,GAGIrC,EAAQ,CAAC,KACXnI,EAAS,aAAamI,EAAQ,CAAC,GAAG8C,CAAO,GAGpC;AAAA,IACL,cAAAvB;AAAA,IACA,aAAajL,GAAS,MAAMkL,EAAgB,KAAK;AAAA,IACjD,UAAAI;AAAA,IACA,SAAAkB;AAAA,EAAA;AAEJ;AAKA9R,EAAE,OAAO;AAAA,EACP,OAAA+N;AACF,CAAC;ACvdD,SAASkE,GAAaC,GAAkChN,GAA2C;AACjG,QAAM,EAAE,cAAAiN,GAAc,WAAAC,GAAW,QAAAC,GAAQ,SAAAC,GAAS,aAAAC,MAAgBrN,GAC5DsN,IAAS,OAAON,KAAY,aAAaA,IAAU,MAAMA;AAE/D,SAAO5M;AAAAA,IACL,YAAY;AACV,YAAMqK,IAAM6C,EAAA,GACNxM,IAAM,MAAMhG,EAAE,KAAK,EAAE,GAAGuS,GAAa,KAAA5C,GAAK,QAAA0C,GAAQ,SAAAC,GAAS;AACjE,aAAOF,IAAYA,EAAUpM,CAAG,IAAKA;AAAA,IACvC;AAAA,IACA,EAAE,cAAAmM,GAAc,MAAM,GAAA;AAAA,EAAM;AAEhC;AAEAnS,EAAE,OAAO,EAAE,WAAAiS,IAAW;ACbtB,MAAMQ,yBAAiB,QAAA;AAEvB,IAAIC,KAA2B;AAE/B,MAAMC,KAAoB,CAACnM,MAAmC;AAC5D,MAAIoM,IAAUH,GAAW,IAAIjM,CAAE;AAC/B,SAAKoM,MACHA,IAAU,YAA4BzO,GAAiB;AACrD,WAAOqB,GAAM,MAAMgB,EAAG,MAAM,MAAMrC,CAAgC,CAAC;AAAA,EACrE,GACAsO,GAAW,IAAIjM,GAAIoM,CAAO,IAErBA;AACT;AAKO,SAASC,KAAwB;AACtC,MAAIH,GAA0B;AAC9B,EAAAA,KAA2B;AAE3B,QAAMI,IAAa9S,EAAE,GAAG,IAClB+S,IAAc/S,EAAE,GAAG,KACnBgT,IAAiBhT,EAAE,GAAG,QACtBiT,IAAgBjT,EAAE,GAAG,OACrBkT,IAAiBlT,EAAE,GAAG;AAK5BA,EAAAA,EAAE,GAAG,SAAS,SAAwByE,GAAmB;AACvD,UAAM0O,IAAU1O,IAAW,KAAK,OAAOA,CAAQ,IAAI;AACnD,aAASpH,IAAI,GAAGwE,IAAMsR,EAAQ,QAAQ9V,IAAIwE,GAAKxE,KAAK;AAClD,YAAMkE,IAAK4R,EAAQ9V,CAAC;AACpB,MAAIkE,MACFsF,EAAS,YAAYtF,CAAE,GACvBsF,EAAS,YAAYtF,CAAE;AAAA,IAE3B;AACA,WAAOyR,EAAe,KAAK,MAAMvO,CAAQ;AAAA,EAC3C,GAGAzE,EAAE,GAAG,QAAQ,WAAwB;AACnC,aAAS3C,IAAI,GAAGwE,IAAM,KAAK,QAAQxE,IAAIwE,GAAKxE,KAAK;AAC/C,YAAMkE,IAAK,KAAKlE,CAAC;AACjB,MAAIkE,KAAIsF,EAAS,mBAAmBtF,CAAE;AAAA,IACxC;AACA,WAAO0R,EAAc,KAAK,IAAI;AAAA,EAChC,GAGAjT,EAAE,GAAG,SAAS,SAAwByE,GAAmB;AACvD,UAAM0O,IAAU1O,IAAW,KAAK,OAAOA,CAAQ,IAAI;AACnD,aAASpH,IAAI,GAAGwE,IAAMsR,EAAQ,QAAQ9V,IAAIwE,GAAKxE,KAAK;AAClD,YAAMkE,IAAK4R,EAAQ9V,CAAC;AACpB,MAAIkE,KAAIsF,EAAS,KAAKtF,CAAE;AAAA,IAC1B;AACA,WAAO2R,EAAe,KAAK,MAAMzO,CAAQ;AAAA,EAC3C,GAKAzE,EAAE,GAAG,KAAK,YAA2BmE,GAAiB;AACpD,UAAMiP,IAAQjP,EAAK,CAAC;AAEpB,QAAIiP,KAAS,OAAOA,KAAU,UAAU;AACtC,YAAMC,IAAMD,GACNE,IAAuC,CAAA;AAC7C,iBAAWvQ,KAAOsQ,GAAK;AACrB,cAAMxI,IAAUwI,EAAItQ,CAAG;AACvB,QAAI8H,MACFyI,EAAOvQ,CAAG,IAAI4P,GAAkB9H,CAAO;AAAA,MAE3C;AACA,MAAA1G,EAAK,CAAC,IAAImP;AAAA,IACZ;AACE,eAASjW,IAAI8G,EAAK,SAAS,GAAG9G,KAAK,GAAGA;AACpC,YAAI,OAAO8G,EAAK9G,CAAC,KAAM,YAAY;AACjC,UAAA8G,EAAK9G,CAAC,IAAIsV,GAAkBxO,EAAK9G,CAAC,CAAiB;AACnD;AAAA,QACF;AAIJ,WAAOyV,EAAW,MAAM,MAAM3O,CAAqC;AAAA,EACrE,GAGAnE,EAAE,GAAG,MAAM,YAA2BmE,GAAiB;AACrD,UAAMiP,IAAQjP,EAAK,CAAC;AAEpB,QAAIiP,KAAS,OAAOA,KAAU,UAAU;AACtC,YAAMC,IAAMD,GACNE,IAAuC,CAAA;AAC7C,iBAAWvQ,KAAOsQ,GAAK;AACrB,cAAMxI,IAAUwI,EAAItQ,CAAG;AACvB,QAAI8H,MACFyI,EAAOvQ,CAAG,IAAI0P,GAAW,IAAI5H,CAAO,KAAKA;AAAA,MAE7C;AACA,MAAA1G,EAAK,CAAC,IAAImP;AAAA,IACZ;AACE,eAASjW,IAAI8G,EAAK,SAAS,GAAG9G,KAAK,GAAGA;AACpC,YAAI,OAAO8G,EAAK9G,CAAC,KAAM,YAAY;AACjC,UAAA8G,EAAK9G,CAAC,IAAIoV,GAAW,IAAItO,EAAK9G,CAAC,CAAiB,KAAK8G,EAAK9G,CAAC;AAC3D;AAAA,QACF;AAIJ,WAAO0V,EAAY,MAAM,MAAM5O,CAAsC;AAAA,EACvE;AACF;ACpGAnE,EAAE,MAAM;AACN,EAAA6S,GAAA,GACA9L,GAAkB,SAAS,IAAI;AACjC,CAAC;"}
|