@but212/atom-effect-jquery 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -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 +5 -7
- package/dist/index.mjs +1065 -1151
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atom-effect-jquery.min.js","sources":["../../core/dist/index.mjs","../src/utils.ts","../src/debug.ts","../src/namespace.ts","../src/registry.ts","../src/effect-factory.ts","../src/types.ts","../src/input-binding.ts","../src/chainable.ts","../src/unified.ts","../src/list.ts","../src/mount.ts","../src/route.ts","../src/jquery-patch.ts","../src/index.ts"],"sourcesContent":["const tt = {\n ONE_SECOND_MS: 1e3\n}, m = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, M = {\n DISPOSED: 1\n}, a = {\n ...M,\n EXECUTING: 8\n}, o = {\n ...M,\n DIRTY: 8,\n IDLE: 16,\n PENDING: 32,\n RESOLVED: 64,\n REJECTED: 128,\n RECOMPUTING: 256,\n HAS_ERROR: 512\n}, d = {\n ...M,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, pt = {\n MAX_SIZE: 1e3,\n WARMUP_SIZE: 100,\n ENABLE_STATS: !1\n}, I = {\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 CLEANUP_THRESHOLD: 1e3,\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, et = {\n WARN_INFINITE_LOOP: !0\n}, O = 1073741823, _ = typeof process < \"u\" && process.env && process.env.NODE_ENV !== \"production\" || typeof __DEV__ < \"u\" && !!__DEV__, st = Object.freeze([]);\nclass T extends Error {\n constructor(t, e = null, s = !0) {\n super(t), this.cause = e, this.recoverable = s, this.timestamp = /* @__PURE__ */ new Date(), this.name = \"AtomError\";\n }\n}\nclass p extends T {\n constructor(t, e = null) {\n super(t, e, !0), this.name = \"ComputedError\";\n }\n}\nclass S extends T {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"EffectError\";\n }\n}\nclass N extends T {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"SchedulerError\";\n }\n}\nconst z = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), it = /* @__PURE__ */ Symbol(\"AtomEffect.Id\"), G = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), x = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), nt = (i) => \"dependencies\" in i && Array.isArray(i.dependencies);\nfunction Q(i, t, e) {\n if (i === t)\n throw new p(\n \"Circular dependency detected: The computation refers to itself explicitly or implicitly.\"\n );\n if (!e.has(i.id) && (e.add(i.id), nt(i))) {\n const s = i.dependencies;\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n r && Q(r, t, e);\n }\n }\n}\nconst g = {\n // Dev mode flag\n enabled: _,\n warnInfiniteLoop: et.WARN_INFINITE_LOOP,\n warn(i, t) {\n _ && this.enabled && i && console.warn(`[Atom Effect] ${t}`);\n },\n checkCircular(i, t) {\n if (i === t)\n throw new p(\"Direct circular dependency detected\");\n _ && this.enabled && Q(i, t, /* @__PURE__ */ new Set());\n },\n attachDebugInfo(i, t, e) {\n if (!_ || !this.enabled) return;\n const s = i;\n s[z] = `${t}_${e}`, s[it] = e, s[G] = t;\n },\n getDebugName: (i) => i?.[z],\n getDebugType: (i) => i?.[G]\n};\nlet rt = 1;\nconst ot = () => rt++;\nfunction j(i, t, e) {\n if (typeof t == \"function\") {\n const n = t;\n for (let r = 0, h = e.length; r < h; r++) {\n const c = e[r];\n if (c && c.fn === n) return;\n }\n e.push(new k(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 h = e[n];\n if (h && h.sub === s) return;\n }\n e.push(new k(void 0, s));\n}\nfunction ht(i, t, e) {\n for (let s = 0, n = t.length; s < n; s++) {\n const r = t[s];\n r && (r.node._tempUnsub = r.unsub);\n }\n for (let s = 0, n = i.length; s < n; s++) {\n const r = i[s];\n if (!r) continue;\n const h = r.node;\n h._tempUnsub !== void 0 ? (r.unsub = h._tempUnsub, h._tempUnsub = void 0) : (g.checkCircular(h, e), r.unsub = h.subscribe(e));\n }\n for (let s = 0, n = t.length; s < n; s++) {\n const r = t[s];\n if (r) {\n const h = r.node;\n h._tempUnsub !== void 0 && (h._tempUnsub(), h._tempUnsub = void 0), r.unsub = void 0;\n }\n }\n}\nclass b {\n constructor(t, e, s = void 0) {\n this.node = t, this.version = e, this.unsub = s;\n }\n}\nclass k {\n constructor(t, e) {\n this.fn = t, this.sub = e;\n }\n}\nconst u = {\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};\nfunction C(i, t, e) {\n if (i instanceof T)\n return i;\n const s = i instanceof Error, n = s ? i.message : String(i), r = s ? i : void 0;\n let h = \"Unexpected error\";\n i instanceof TypeError ? h = \"Type error\" : i instanceof ReferenceError && (h = \"Reference error\");\n const c = `${h} (${e}): ${n}`;\n return new t(c, r);\n}\nclass q {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = -1, this._modifiedAtEpoch = -1, this.id = ot() & O, this._tempUnsub = void 0;\n }\n}\nclass $ extends q {\n /**\n * Adds subscriber.\n */\n subscribe(t) {\n const e = typeof t == \"function\";\n if (!e && (!t || typeof t.execute != \"function\"))\n throw C(\n new TypeError(\"Invalid subscriber\"),\n T,\n u.ATOM_SUBSCRIBER_MUST_BE_FUNCTION\n );\n const s = this._subscribers;\n for (let r = 0, h = s.length; r < h; r++) {\n const c = s[r];\n if (c && (e ? c.fn === t : c.sub === t))\n return _ && console.warn(\"Duplicate subscription ignored.\"), () => {\n };\n }\n const n = new k(\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 h = s[r];\n if (h)\n try {\n h.fn ? h.fn(t, e) : h.sub && h.sub.execute();\n } catch (c) {\n this._handleNotifyError(c);\n }\n }\n }\n _handleNotifyError(t) {\n console.error(C(t, T, u.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n}\nlet R = 0;\nconst J = () => (R = R + 1 & O || 1, R), ct = () => R, P = (i) => i + 1 & O;\nlet v = 0, w = 0, A = !1;\nfunction H() {\n return A ? (_ && console.warn(\"startFlush() called during flush - ignored\"), !1) : (A = !0, v = v + 1 & O || 1, w = 0, !0);\n}\nconst X = () => {\n A = !1;\n}, ut = () => A ? ++w : 0, f = {\n /** Queue buffer */\n _queueBuffer: [[], []],\n _bufferIndex: 0,\n _size: 0,\n /** Epoch counter */\n _epoch: 0,\n /** State flags */\n _isProcessing: !1,\n _isBatching: !1,\n _isFlushingSync: !1,\n /** Batching state */\n _batchDepth: 0,\n _batchQueue: [],\n _batchQueueSize: 0,\n /** Config */\n _maxFlushIterations: I.MAX_FLUSH_ITERATIONS,\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(i) {\n if (_ && typeof i != \"function\")\n throw new N(\"Scheduler callback must be a function\");\n if (i._nextEpoch !== this._epoch) {\n if (i._nextEpoch = this._epoch, this._isBatching || this._isFlushingSync) {\n this._batchQueue[this._batchQueueSize++] = i;\n return;\n }\n this._queueBuffer[this._bufferIndex][this._size++] = i, this._isProcessing || this._flush();\n }\n },\n /**\n * Triggers flush.\n */\n _flush() {\n this._isProcessing || this._size === 0 || (this._isProcessing = !0, queueMicrotask(this._runLoop));\n },\n /**\n * Scheduler loop.\n */\n _runLoop: () => {\n try {\n if (f._size === 0) return;\n const i = H();\n f._drainQueue(), i && X();\n } finally {\n f._isProcessing = !1, f._size > 0 && !f._isBatching && f._flush();\n }\n },\n _flushSync() {\n this._isFlushingSync = !0;\n const i = H();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, i && X();\n }\n },\n _mergeBatchQueue() {\n if (this._batchQueueSize === 0) return;\n const i = ++this._epoch, t = this._batchQueue, e = this._queueBuffer[this._bufferIndex];\n let s = this._size;\n for (let n = 0; n < this._batchQueueSize; n++) {\n const r = t[n];\n r._nextEpoch !== i && (r._nextEpoch = i, e[s++] = r);\n }\n this._size = s, this._batchQueueSize = 0, t.length > I.BATCH_QUEUE_SHRINK_THRESHOLD && (t.length = 0);\n },\n _drainQueue() {\n let i = 0;\n for (; this._size > 0; ) {\n if (++i > this._maxFlushIterations) {\n this._handleFlushOverflow();\n return;\n }\n this._processQueue(), this._mergeBatchQueue();\n }\n },\n _processQueue() {\n const i = this._bufferIndex, t = this._queueBuffer[i], e = this._size;\n this._bufferIndex = i ^ 1, this._size = 0, this._epoch++;\n for (let s = 0; s < e; s++)\n try {\n t[s]();\n } catch (n) {\n console.error(new N(\"Error occurred during scheduler execution\", n));\n }\n t.length = 0;\n },\n /** Overflow callback */\n onOverflow: null,\n _handleFlushOverflow() {\n const i = this._size + this._batchQueueSize;\n if (console.error(\n new N(\n u.SCHEDULER_FLUSH_OVERFLOW(this._maxFlushIterations, i)\n )\n ), this._size = 0, this._queueBuffer[this._bufferIndex].length = 0, this._batchQueueSize = 0, this.onOverflow)\n try {\n this.onOverflow(i);\n } catch {\n }\n },\n startBatch() {\n this._batchDepth++, this._isBatching = !0;\n },\n endBatch() {\n if (this._batchDepth === 0) {\n _ && console.warn(\"endBatch() called without matching startBatch(). Ignoring.\");\n return;\n }\n --this._batchDepth === 0 && (this._flushSync(), this._isBatching = !1);\n },\n setMaxFlushIterations(i) {\n if (i < I.MIN_FLUSH_ITERATIONS)\n throw new N(\n `Max flush iterations must be at least ${I.MIN_FLUSH_ITERATIONS}`\n );\n this._maxFlushIterations = i;\n }\n}, E = {\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 It(i) {\n const t = E.current;\n if (t === null) return i();\n E.current = null;\n try {\n return i();\n } finally {\n E.current = t;\n }\n}\nclass _t extends $ {\n constructor(t, e) {\n super(), this._pendingOldValue = void 0, this._notifyTask = void 0, this._subscribers = [], this._value = t, e && (this.flags |= d.SYNC), g.attachDebugInfo(this, \"atom\", this.id);\n }\n get value() {\n const t = E.current;\n return t && j(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 = P(this.version);\n const s = this.flags;\n if (!(this._subscribers.length === 0 || s & d.NOTIFICATION_SCHEDULED)) {\n if (this._pendingOldValue = e, this.flags = s | d.NOTIFICATION_SCHEDULED, s & d.SYNC && !f.isBatching) {\n this._flushNotifications();\n return;\n }\n this._notifyTask || (this._notifyTask = () => this._flushNotifications()), f.schedule(this._notifyTask);\n }\n }\n /**\n * Triggers subscribers.\n */\n _flushNotifications() {\n const t = this.flags;\n if (!(t & d.NOTIFICATION_SCHEDULED) || t & d.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 & d.DISPOSED || (this._subscribers.length = 0, this.flags |= d.DISPOSED, this._value = void 0, this._pendingOldValue = void 0, this._notifyTask = void 0);\n }\n}\nfunction Dt(i, t = {}) {\n return new _t(i, t.sync ?? !1);\n}\nclass lt {\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 y = (i) => Object.freeze(i);\ny([]);\ny([]);\ny([]);\ny([]);\nconst l = y([]), D = new lt();\nfunction at(i) {\n return i !== null && typeof i == \"object\" && \"value\" in i && typeof i.subscribe == \"function\";\n}\nfunction St(i) {\n return at(i) && typeof i.invalidate == \"function\";\n}\nfunction gt(i) {\n return i !== null && typeof i == \"object\" && typeof i.dispose == \"function\" && typeof i.run == \"function\";\n}\nfunction K(i) {\n return i !== null && typeof i == \"object\" && typeof i.then == \"function\";\n}\nconst W = o.RESOLVED | o.PENDING | o.REJECTED, U = Array(W + 1).fill(m.IDLE);\nU[o.RESOLVED] = m.RESOLVED;\nU[o.PENDING] = m.PENDING;\nU[o.REJECTED] = m.REJECTED;\nconst ft = 3, Y = Number.MAX_SAFE_INTEGER - 1, Et = o.REJECTED | o.HAS_ERROR;\nclass Z extends $ {\n constructor(t, e = {}) {\n if (typeof t != \"function\") throw new p(u.COMPUTED_MUST_BE_FUNCTION);\n super(), this._error = null, this._promiseId = 0, this._subscribers = [], this._links = l, this._cachedErrors = null, this._errorCacheEpoch = -1, this._asyncStartAggregateVersion = 0, this._asyncRetryCount = 0, this._errorDepCount = 0, this._trackEpoch = -1, this._trackLinks = l, this._trackCount = 0, this._value = void 0, this.flags = o.DIRTY | o.IDLE, this._equal = e.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in e ? e.defaultValue : x, this._onError = e.onError ?? null;\n const s = e.maxAsyncRetries;\n if (this._maxAsyncRetries = s != null && s >= 0 ? s : ft, g.attachDebugInfo(this, \"computed\", this.id), e.lazy === !1)\n try {\n this._recompute();\n } catch {\n }\n }\n _track() {\n const t = E.current;\n t && j(this, t, this._subscribers);\n }\n get value() {\n this._track();\n const t = this.flags;\n if ((t & (o.RESOLVED | o.DIRTY | o.IDLE)) === o.RESOLVED)\n return this._value;\n if (t & o.DISPOSED)\n throw new p(u.COMPUTED_DISPOSED);\n if (t & o.RECOMPUTING) {\n if (this._defaultValue !== x) return this._defaultValue;\n throw new p(u.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if (t & (o.DIRTY | o.IDLE) && (this._recompute(), this.flags & o.RESOLVED))\n return this._value;\n const e = this._defaultValue, s = e !== x;\n if (this.flags & o.PENDING) {\n if (s) return e;\n throw new p(u.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if (this.flags & o.REJECTED) {\n if (this._error?.recoverable && 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(), U[this.flags & W];\n }\n get hasError() {\n if (this._track(), this.flags & (o.REJECTED | o.HAS_ERROR) || this._errorDepCount > 0) 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 & o.HAS_ERROR) return !0;\n }\n return !1;\n }\n // ... (isValid, errors, lastError getters remain structurally similar, omitted for brevity if mostly unchanged) ...\n get isValid() {\n return !this.hasError;\n }\n get errors() {\n if (this._track(), !this.hasError) return st;\n const t = ct();\n if (this._errorCacheEpoch === t && this._cachedErrors) return this._cachedErrors;\n const e = [];\n this._error && e.push(this._error);\n const s = this._links;\n for (let r = 0, h = s.length; r < h; r++) {\n const c = s[r].node;\n if (c.flags & o.HAS_ERROR) {\n const B = c;\n if (B.errors) {\n const V = B.errors;\n for (let L = 0; L < V.length; L++) {\n const F = V[L];\n F && e.indexOf(F) === -1 && e.push(F);\n }\n }\n }\n }\n const n = Object.freeze(e);\n return this._errorCacheEpoch = t, this._cachedErrors = n, n;\n }\n get lastError() {\n return this._track(), this._error;\n }\n get isPending() {\n return this._track(), (this.flags & o.PENDING) !== 0;\n }\n get isResolved() {\n return this._track(), (this.flags & o.RESOLVED) !== 0;\n }\n invalidate() {\n this._markDirty(), this._errorCacheEpoch = -1, this._cachedErrors = null;\n }\n dispose() {\n if (this.flags & o.DISPOSED) return;\n const t = this._links;\n if (t !== l) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e].unsub?.();\n D.release(t), this._links = l;\n }\n this._subscribers.length = 0, this.flags = o.DISPOSED | o.DIRTY | o.IDLE, this._error = null, this._value = void 0, this._promiseId = (this._promiseId + 1) % Y, this._cachedErrors = null, this._errorCacheEpoch = -1;\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 b(t, t.version));\n this._trackCount++;\n }\n }\n _commitDeps(t) {\n this._trackLinks.length = this._trackCount, ht(this._trackLinks, t, this), this._links = this._trackLinks;\n }\n _updateErrorDepCount() {\n let t = 0;\n const e = this._links;\n for (let s = 0, n = e.length; s < n; s++) {\n const r = e[s]?.node;\n r && r.flags & o.HAS_ERROR && t++;\n }\n this._errorDepCount = t;\n }\n _recompute() {\n if (this.flags & o.RECOMPUTING) return;\n this.flags |= o.RECOMPUTING;\n const t = this._links;\n this._trackEpoch = J(), this._trackLinks = D.acquire(), this._trackCount = 0;\n let e = !1;\n try {\n const s = E.run(this, this._fn);\n this._commitDeps(t), e = !0, this._updateErrorDepCount(), K(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!e)\n try {\n this._commitDeps(t), e = !0, this._updateErrorDepCount();\n } catch (n) {\n _ && console.warn(\"[atom-effect] _commitDeps failed during error recovery:\", n);\n }\n this._handleError(s, u.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n e && t !== l ? D.release(t) : e || D.release(this._trackLinks), this._trackEpoch = -1, this._trackLinks = l, this._trackCount = 0, this.flags &= -257;\n }\n }\n _handleAsyncComputation(t) {\n this.flags = (this.flags | o.PENDING) & -217, this._notifySubscribers(void 0, void 0), this._asyncStartAggregateVersion = this._captureVersionSnapshot(), this._asyncRetryCount = 0, this._promiseId = (this._promiseId + 1) % Y;\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 p(\n `Async drift threshold exceeded after ${this._maxAsyncRetries} retries.`\n ),\n u.COMPUTED_ASYNC_COMPUTATION_FAILED\n );\n this._finalizeResolution(s), this._notifySubscribers(s, void 0);\n }\n },\n (s) => e === this._promiseId && this._handleError(s, u.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 | 0) + e[s].node.version & O;\n return t;\n }\n _handleError(t, e, s = !1) {\n const n = C(t, p, e);\n if (!s && !(this.flags & o.REJECTED) && (this.version = P(this.version)), this._error = n, this.flags = this.flags & -121 | Et, this._onError)\n try {\n this._onError(n);\n } catch (r) {\n console.error(u.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 & o.RESOLVED) || !this._equal(this._value, t)) && (this.version = P(this.version)), this._value = t, this._error = null, this.flags = (this.flags | o.RESOLVED) & -697, this._cachedErrors = null, this._errorCacheEpoch = -1;\n }\n execute() {\n this._markDirty();\n }\n /** @internal */\n _markDirty() {\n this.flags & (o.RECOMPUTING | o.DIRTY) || (this.flags |= o.DIRTY, this._notifySubscribers(void 0, void 0));\n }\n}\nObject.freeze(Z.prototype);\nfunction Ct(i, t = {}) {\n return new Z(i, t);\n}\nclass dt extends q {\n constructor(t, e = {}) {\n super(), this._cleanup = null, this._links = l, this._nextLinks = null, this._currentEpoch = -1, this._lastFlushEpoch = -1, this._executionsInEpoch = 0, this._executionCount = 0, this._historyPtr = 0, this._execId = 0, this._fn = t, this._onError = e.onError ?? null, this._sync = e.sync ?? !1, this._maxExecutions = e.maxExecutionsPerSecond ?? I.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = e.maxExecutionsPerFlush ?? I.MAX_EXECUTIONS_PER_EFFECT, this._trackModifications = e.trackModifications ?? !1;\n const s = Number.isFinite(this._maxExecutions), n = s ? Math.min(this._maxExecutions + 1, I.MAX_EXECUTIONS_PER_SECOND + 1) : 0;\n this._historyCapacity = n, this._history = _ && s && n > 0 ? new Array(n).fill(0) : null, g.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.flags & a.DISPOSED)\n throw new S(u.EFFECT_DISPOSED);\n this.execute(!0);\n }\n dispose() {\n this.flags & a.DISPOSED || (this.flags |= a.DISPOSED, this._execCleanup(), this._releaseLinks(this._links), this._links = l, this._executeTask = void 0);\n }\n addDependency(t) {\n if (!(this.flags & a.EXECUTING) || t._lastSeenEpoch === this._currentEpoch) return;\n t._lastSeenEpoch = this._currentEpoch;\n const e = this._nextLinks;\n if (t._tempUnsub) {\n e.push(new b(t, t.version, t._tempUnsub)), t._tempUnsub = void 0;\n return;\n }\n try {\n const s = t.subscribe(() => {\n if (this._trackModifications && this.flags & a.EXECUTING && (t._modifiedAtEpoch = this._currentEpoch), this._sync) return this.execute();\n this._executeTask || (this._executeTask = () => this.execute()), f.schedule(this._executeTask);\n });\n e.push(new b(t, t.version, s));\n } catch (s) {\n const n = C(s, S, u.EFFECT_EXECUTION_FAILED);\n if (console.error(n), this._onError)\n try {\n this._onError(n);\n } catch {\n }\n e.push(new b(t, t.version, void 0));\n }\n }\n /**\n * Executes effect with tracking.\n */\n execute(t = !1) {\n if (this.flags & (a.DISPOSED | a.EXECUTING) || !t && this._links.length > 0 && !this._isDirty()) return;\n this._checkInfiniteLoops(), this.flags |= a.EXECUTING, this._execCleanup();\n const e = this._links;\n if (e !== l)\n for (let r = 0, h = e.length; r < h; r++) {\n const c = e[r];\n c && (c.node._tempUnsub = c.unsub);\n }\n const s = D.acquire();\n this._nextLinks = s, this._currentEpoch = J();\n let n = !1;\n try {\n const r = E.run(this, this._fn);\n this._links = s, n = !0, this._checkLoopWarnings(), K(r) ? this._handleAsyncResult(r) : this._cleanup = typeof r == \"function\" ? r : null;\n } catch (r) {\n n = !0, this._handleExecutionError(r), this._cleanup = null;\n } finally {\n this._finalizeDependencies(n, e, s), 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 & a.DISPOSED) {\n if (typeof s == \"function\")\n try {\n s();\n } catch (n) {\n this._handleExecutionError(n, u.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, t) {\n if (e !== l) {\n for (let n = 0, r = e.length; n < r; n++) {\n const h = e[n], c = h?.node._tempUnsub;\n c && (c(), h && (h.node._tempUnsub = void 0));\n }\n D.release(e);\n }\n } else if (this._releaseLinks(s), D.release(s), e !== l)\n for (let n = 0, r = e.length; n < r; n++)\n e[n] && (e[n].node._tempUnsub = void 0);\n }\n _releaseLinks(t) {\n if (t !== l) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e]?.unsub?.();\n D.release(t);\n }\n }\n _isDirty() {\n const t = this._links, e = E.current;\n E.current = null;\n try {\n for (let s = 0, n = t.length; s < n; s++) {\n const r = t[s], h = r.node;\n if (\"value\" in h)\n try {\n h.value;\n } catch {\n return _ && console.warn(`[atom-effect] Dependency #${h.id} threw during dirty check`), !0;\n }\n if (h.version !== r.version) return !0;\n }\n return !1;\n } finally {\n E.current = e;\n }\n }\n _execCleanup() {\n if (this._cleanup) {\n try {\n this._cleanup();\n } catch (t) {\n this._handleExecutionError(t, u.EFFECT_CLEANUP_FAILED);\n }\n this._cleanup = null;\n }\n }\n _checkInfiniteLoops() {\n const t = v;\n if (this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), ut() > I.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++, this._history) {\n const e = Date.now();\n this._history[this._historyPtr] = e, this._historyPtr = (this._historyPtr + 1) % this._historyCapacity;\n const s = this._history[this._historyPtr] || 0;\n if (s > 0 && e - s < tt.ONE_SECOND_MS) {\n const n = new S(u.EFFECT_FREQUENCY_LIMIT_EXCEEDED);\n if (this.dispose(), this._handleExecutionError(n), _) throw n;\n }\n }\n }\n get isDisposed() {\n return (this.flags & a.DISPOSED) !== 0;\n }\n get executionCount() {\n return this._executionCount;\n }\n get isExecuting() {\n return (this.flags & a.EXECUTING) !== 0;\n }\n _throwInfiniteLoopError(t) {\n const e = new S(\n `Infinite loop detected (${t}): effect executed ${this._executionsInEpoch} times in current flush. Total executions in flush: ${w}`\n );\n throw this.dispose(), console.error(e), e;\n }\n _handleExecutionError(t, e = u.EFFECT_EXECUTION_FAILED) {\n const s = C(t, S, e);\n if (console.error(s), this._onError)\n try {\n this._onError(s);\n } catch (n) {\n console.error(C(n, S, u.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n _checkLoopWarnings() {\n if (this._trackModifications && g.enabled) {\n const t = this._currentEpoch, e = this._links;\n for (let s = 0, n = e.length; s < n; s++) {\n const r = e[s].node;\n r._modifiedAtEpoch === t && g.warn(\n !0,\n `Effect is reading a dependency (${g.getDebugName(r) || \"unknown\"}) that it just modified. Infinite loop may occur`\n );\n }\n }\n }\n}\nfunction Tt(i, t = {}) {\n if (typeof i != \"function\")\n throw new S(u.EFFECT_MUST_BE_FUNCTION);\n const e = new dt(i, t);\n return e.execute(), e;\n}\nfunction Ot(i) {\n if (typeof i != \"function\")\n throw new TypeError(\"Batch callback must be a function\");\n f.startBatch();\n try {\n return i();\n } finally {\n f.endBatch();\n }\n}\nexport {\n m as AsyncState,\n T as AtomError,\n p as ComputedError,\n et as DEBUG_CONFIG,\n g as DEBUG_RUNTIME,\n S as EffectError,\n pt as POOL_CONFIG,\n I as SCHEDULER_CONFIG,\n N as SchedulerError,\n Dt as atom,\n Ot as batch,\n Ct as computed,\n Tt as effect,\n at as isAtom,\n St as isComputed,\n gt as isEffect,\n f as scheduler,\n It as untracked\n};\n//# sourceMappingURL=index.mjs.map\n","import type { ComputedAtom, ReactiveValue, ReadonlyAtom } from './types';\n\n/**\n * Checks if a given value is a reactive object (Atom or Computed).\n * Robust check for correctness: must have both 'value' property and 'subscribe' method.\n */\nexport function isReactive(value: unknown): value is ReadonlyAtom<unknown> | ComputedAtom<unknown> {\n return value !== null && typeof value === 'object' && 'value' in value && 'subscribe' in value;\n}\n\n/**\n * Extracts the underlying raw value from a ReactiveValue.\n * Optimized for hot path by inlining the reactive check with high correctness.\n */\nexport function getValue<T>(source: ReactiveValue<T>): T {\n if (source !== null && typeof source === 'object' && 'value' in source && 'subscribe' in source) {\n return (source as ReadonlyAtom<T>).value;\n }\n return 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 // Dangerous tags: script, iframe, object, embed, base, meta, form, applet, link, style, template, noscript, title\n // Also remove processing instructions <? ... ?> which can be abused in some contexts\n safe = safe\n .replace(/<\\?[\\s\\S]*?\\?>/g, '')\n .replace(\n /<(script|iframe|object|embed|base|meta|form|applet|link|style|template|noscript|title)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gim,\n ''\n )\n .replace(\n /<(script|iframe|object|embed|base|meta|form|applet|link|style|template|noscript|title)\\b[^>]*\\/?>/gim,\n ''\n );\n\n // 2. Neutralize dangerous protocols (javascript:, vbscript:, data:)\n\n // Helper to decode HTML entities for inspection (simple implementation)\n // This allows us to detect obfuscated protocols like \"javascript:\" -> \"javascript:\"\n const decodeEntities = (str: string) => {\n return str\n .replace(/&#x([0-9a-f]+);?/gi, (_, code) => String.fromCharCode(parseInt(code, 16)))\n .replace(/&#([0-9]+);?/gi, (_, code) => String.fromCharCode(parseInt(code, 10)));\n };\n\n const decoded = decodeEntities(safe);\n // Check against decoded version for protocols\n // We use a simple regex on the decoded string to find protocols\n if (decoded.match(/(?:java|vb)script:|data:/i)) {\n // If decoded string contains dangerous protocol, we must sanitize the ORIGINAL string\n // Since we can't easily map back, we aggressively replace potential protocol patterns in the original\n // A robust way: fail safe by removing the protocol from the original if detected in decoded\n\n // Aggressive pattern for the original string dealing with entities\n // Matches \"j\" or \"j\" followed by \"a\" or \"a\" etc...\n // This is too complex.\n // Easier: Just replace the specific dangerous strings in the original using a broad regex\n // that matches the protocol chars OR their entity equivalents.\n\n // Let's use a regex that matches \"javascript:\" where each char can be an entity\n const buildProtocolRegex = (protocol: string) => {\n return new RegExp(\n `${protocol\n .split('')\n .map((c) => {\n const code = c.charCodeAt(0);\n // Match the char, or decimal entity, or hex entity (case insensitive)\n return `(?:${c}|�*${code};?|�*${code.toString(16)};?)`;\n })\n .join('\\\\s*')}\\\\s*(?::|:|&#x?0*((58)|(3a));?|%3a)`,\n 'gi'\n );\n };\n\n safe = safe\n .replace(buildProtocolRegex('javascript'), 'data-unsafe-protocol:')\n .replace(buildProtocolRegex('vbscript'), 'data-unsafe-protocol:');\n // data: is handled separately below to allow images\n } else {\n // Fast path for non-obfuscated protocols\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*(?::|:|&#x?0*((58)|(3a));?|%3a))/gim;\n safe = safe.replace(protocolRegex, 'data-unsafe-protocol:');\n }\n\n // Separately handle dangerous data URIs (e.g. text/html, base64 encoded scripts)\n // This allows common inline images (data:image/...) while blocking executable payloads.\n // Note: Only basic detection.\n const dangerousDataUriRegex =\n /data\\s*:\\s*(?:text\\/html|application\\/javascript|text\\/javascript|text\\/vbscript)/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 * 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. Environment variable (build-time): NODE_ENV=development\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__ > NODE_ENV === 'development'\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 try {\n // @ts-expect-error\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') return true;\n } catch {\n // ignore\n }\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.\n * Optimized with WeakMap and direct style access to minimize GC and reflows in debug mode.\n */\ninterface HighlightState {\n timer?: ReturnType<typeof setTimeout>;\n cleanupTimer?: ReturnType<typeof setTimeout>;\n orgStyle?: {\n outline: string;\n outlineOffset: string;\n transition: string;\n };\n}\n\nconst highlightStateMap = new WeakMap<HTMLElement, HighlightState>();\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; // O(1) check instead of O(N) document.contains\n\n let state = highlightStateMap.get(el);\n if (!state) {\n state = {};\n highlightStateMap.set(el, state);\n }\n\n // 1. Clear existing timers\n if (state.timer) clearTimeout(state.timer);\n if (state.cleanupTimer) clearTimeout(state.cleanupTimer);\n\n // 2. Save original style (inline only for performance & correctness)\n if (!state.orgStyle) {\n const style = el.style;\n state.orgStyle = {\n outline: style.outline,\n outlineOffset: style.outlineOffset,\n transition: style.transition,\n };\n }\n\n // 3. Apply highlight style via direct DOM properties\n const style = el.style;\n style.outline = '2px solid rgba(255, 68, 68, 0.8)';\n style.outlineOffset = '1px';\n style.transition = 'none';\n\n // 4. Set timer to restore\n state.timer = setTimeout(() => {\n if (!el.isConnected) return;\n\n // We add a transition for the fade out\n style.transition = 'outline 0.5s ease-out';\n\n // Defer the actual style restoration to allow transition to take effect\n requestAnimationFrame(() => {\n if (!el.isConnected) return;\n\n const org = state?.orgStyle;\n if (org) {\n style.outline = org.outline;\n style.outlineOffset = org.outlineOffset;\n }\n\n // 5. Cleanup data after fade out\n state!.cleanupTimer = setTimeout(() => {\n if (el.isConnected && state?.orgStyle) {\n style.transition = state.orgStyle.transition;\n }\n highlightStateMap.delete(el);\n }, 500);\n });\n }, 100);\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';\n\n/**\n * Stores Atom metadata (for debugging).\n */\nconst atomMetadata = new WeakMap<WritableAtom<unknown>, { name?: string }>();\n\n/**\n * Creates an atom with optional metadata.\n */\nfunction atom<T>(initialValue: T, options: AtomOptions = {}): WritableAtom<T> {\n const instance = createAtom(initialValue, options);\n\n // Store metadata\n if (options.name) {\n atomMetadata.set(instance, { name: options.name });\n }\n\n return instance;\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 microtask (tick).\n * Useful for waiting for batched updates to complete in tests or async logic.\n * logic: Uses setTimeout to ensure it runs after all microtasks (where effects are processed).\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: (v: unknown) => isAtom(v) || isComputed(v),\n nextTick,\n});\n","import { 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';\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 if (!record.effects) record.effects = [];\n record.effects.push(fx);\n }\n\n trackCleanup(el: Element, fn: () => void): void {\n const record = this._getOrCreateRecord(el);\n if (!record.cleanups) 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 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<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 * 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 }\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 /** 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 { 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',\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 ?? len, len), Math.min(end ?? len, 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 { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport { registerReactiveEffect } from './effect-factory';\nimport { applyInputBinding } from './input-binding';\nimport { registry } from './registry';\nimport type { ReactiveValue, ValOptions, WritableAtom } from './types';\nimport { BindingFlags, createInputBindingState } from './types';\nimport { sanitizeHtml } from './utils';\n\n/**\n * Updates element text content.\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 const $el = $(this);\n registerReactiveEffect(\n this,\n source,\n (val) => {\n const rawVal = String(val ?? '');\n const safeVal = sanitizeHtml(rawVal);\n\n if (safeVal !== rawVal) {\n console.warn('[atomHtml] Unsafe content neutralized during sanitization.');\n }\n $el.html(safeVal);\n },\n 'html'\n );\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 const $el = $(this);\n registerReactiveEffect(\n this,\n condition,\n (val) => $el.toggleClass(className, Boolean(val)),\n `class.${className}`\n );\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 const $el = $(this);\n const update = unit\n ? (val: string | number) => $el.css(prop, `${val}${unit}`)\n : (val: string | number) => $el.css(prop, val);\n\n registerReactiveEffect(this, source, update, `css.${prop}`);\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 const $el = $(this);\n registerReactiveEffect(\n this,\n source,\n (val) => {\n if (val == null || val === false) {\n $el.removeAttr(name);\n return;\n }\n $el.attr(name, val === true ? name : String(val));\n },\n `attr.${name}`\n );\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 const $el = $(this);\n registerReactiveEffect(this, source, (val) => $el.prop(name, val), `prop.${name}`);\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 const $el = $(this);\n registerReactiveEffect(this, condition, (val) => $el.toggle(Boolean(val)), '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 const $el = $(this);\n registerReactiveEffect(this, condition, (val) => $el.toggle(!val), '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 const tagName = this.tagName.toLowerCase();\n if (!['input', 'select', 'textarea'].includes(tagName)) {\n console.warn(`[atomVal] Element <${tagName}> is not a valid input element.`);\n return;\n }\n const { effect: fxFn, cleanup } = applyInputBinding($(this), atom, options);\n registry.trackEffect(this, effect(fxFn));\n registry.trackCleanup(this, cleanup);\n });\n};\n\n/**\n * Two-way binding for checkbox/radio checked state.\n */\n$.fn.atomChecked = function (atom: WritableAtom<boolean>): JQuery {\n return this.each(function () {\n const $el = $(this);\n const element = this as HTMLInputElement;\n const state = createInputBindingState();\n\n // DOM → Atom\n const handler = () => {\n if (state.flags & BindingFlags.Busy) return;\n const checked = element.checked;\n if (atom.value !== checked) {\n atom.value = checked;\n }\n };\n\n $el.on('change', handler);\n registry.trackCleanup(this, () => $el.off('change', handler));\n\n // Atom → DOM\n const fx = effect(() => {\n state.flags |= BindingFlags.SyncingToDom;\n const val = !!atom.value;\n if (element.checked !== val) {\n element.checked = val;\n debug.domUpdated($el, 'checked', val);\n }\n state.flags &= ~BindingFlags.SyncingToDom;\n });\n registry.trackEffect(this, fx);\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 { batch, effect } from '@but212/atom-effect';\nimport $ from 'jquery';\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 { 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// One-Way Binding Handlers (Atom → DOM)\n// ============================================================================\n\nfunction 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\nfunction 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('[atomBind] Unsafe content neutralized during sanitization.');\n }\n\n const safeVal = sanitized;\n\n // Guard against redundant DOM writes which destroy/recreate subtrees\n // Guard against redundant DOM writes which destroy/recreate subtrees\n if (el.innerHTML !== safeVal) {\n el.innerHTML = safeVal;\n }\n },\n 'html'\n );\n}\n\nfunction bindClass(ctx: BindingContext, classMap: Record<string, ReactiveValue<boolean>>): 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\nfunction 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\n if (Array.isArray(val)) {\n registerReactiveEffect(\n el,\n val[0],\n (v) => {\n style[camel] = `${v}${val[1]}`;\n },\n `css.${prop}`\n );\n } else {\n registerReactiveEffect(\n el,\n val,\n (v) => {\n style[camel] = v as string;\n },\n `css.${prop}`\n );\n }\n }\n}\n\nfunction 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 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 // Attribute write guard\n if (el.getAttribute(name) !== newVal) {\n el.setAttribute(name, newVal);\n }\n },\n `attr.${name}`\n );\n }\n}\n\nfunction bindProp(ctx: BindingContext, propMap: Record<string, ReactiveValue<unknown>>): void {\n const el = ctx.el as unknown as Record<string, unknown>;\n for (const name in propMap) {\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\nfunction bindShow(ctx: BindingContext, condition: ReactiveValue<boolean>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n // Direct style access is faster than $el.toggle()\n el.style.display = val ? '' : 'none';\n if (debug.enabled) debug.domUpdated(el, 'show', val);\n },\n 'show'\n );\n}\n\nfunction bindHide(ctx: BindingContext, condition: ReactiveValue<boolean>): void {\n const el = ctx.el;\n registerReactiveEffect(\n el,\n condition,\n (val) => {\n // Direct style access is faster than $el.toggle()\n el.style.display = val ? 'none' : '';\n if (debug.enabled) debug.domUpdated(el, 'hide', val);\n },\n 'hide'\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 */\nfunction 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 (!['input', 'select', 'textarea'].includes(tagName)) {\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\nfunction bindChecked(ctx: BindingContext, atom: WritableAtom<boolean>): void {\n const el = ctx.el as HTMLInputElement;\n const state = createInputBindingState();\n\n // DOM → Atom\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.addEventListener('change', handler);\n ctx.trackCleanup(() => el.removeEventListener('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\nfunction 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 el = this;\n let _$el: JQuery | null = null;\n\n // Build binding context with a lazy JQuery wrapper\n const ctx: BindingContext = {\n get $el() {\n if (!_$el) {\n _$el = $(el);\n }\n return _$el;\n },\n el,\n trackCleanup: (fn) => registry.trackCleanup(el, fn),\n };\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) bindShow(ctx, options.show);\n if (options.hide !== undefined) bindHide(ctx, options.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 { effect } from '@but212/atom-effect';\nimport $ from 'jquery';\nimport { debug } from './debug';\nimport { registry } from './registry';\nimport type { ListOptions, ReadonlyAtom } from './types';\nimport { getLIS, getSelector } 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 $emptyEl = ($(empty 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(`[atomList] Duplicate key \"${k}\" at index ${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) {\n // Optimized shallow equal (O(K) without Object.keys allocations)\n let isChanged = true;\n if (\n typeof oldItem === 'object' &&\n oldItem !== null &&\n typeof item === 'object' &&\n item !== null\n ) {\n isChanged = false;\n let countA = 0;\n const objA = oldItem as Record<string, unknown>;\n const objB = item as Record<string, unknown>;\n for (const prop in objA) {\n if (objA[prop] !== objB[prop]) {\n isChanged = true;\n break;\n }\n countA++;\n }\n if (!isChanged) {\n let countB = 0;\n for (const _prop in objB) {\n countB++;\n if (countB > countA) {\n isChanged = true;\n break;\n }\n }\n if (countA !== countB) isChanged = true;\n }\n }\n\n if (isChanged) {\n const $newEl = $(render(item, i) 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 $el = $(rendered 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 isDebug = debug.enabled;\n const selector = isDebug ? getSelector(this) : '';\n\n // 1. Unmount existing component (Consolidated O(1) lookup)\n const existingUnmount = mountedComponents.get(this);\n if (existingUnmount) {\n if (isDebug) debug.log('mount', `${selector} unmounting existing component`);\n existingUnmount();\n }\n\n if (isDebug) 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 if (isDebug) 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 { 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 = '[$.route]';\n\n/**\n * Creates a hash-based SPA router with reactive state management.\n *\n * This removes boilerplate from manual route handling by:\n * - Automatically tracking hash 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 autoBindLinks = false,\n activeClass = 'active',\n beforeTransition,\n afterTransition,\n } = config;\n\n let isDestroyed = false;\n let previousRoute: string | null = null;\n let previousHash: string = 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 /**\n * Extracts route name from current hash.\n * Optimized to avoid array allocations.\n */\n const getHashRoute = (): string => {\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 hash string.\n * Optimized for low allocation (no intermediate arrays).\n * @example parseQueryParams('#home?id=123&name=test') // { id: '123', name: 'test' }\n */\n const parseQueryParams = (hash: string): Record<string, string> => {\n const qIndex = hash.indexOf('?');\n if (qIndex === -1) return {};\n\n const params: Record<string, string> = {};\n const len = hash.length;\n let start = qIndex + 1;\n\n // Helper for safe decoding\n const safeDecode = (str: string): string => {\n try {\n return decodeURIComponent(str);\n } catch (_e) {\n console.warn(`${LOG_PREFIX} Malformed URI component: ${str}`);\n return str;\n }\n };\n\n while (start < len) {\n let end = hash.indexOf('&', start);\n if (end === -1) end = len;\n\n if (end > start) {\n const eqIndex = hash.indexOf('=', start);\n if (eqIndex !== -1 && eqIndex < end) {\n params[safeDecode(hash.substring(start, eqIndex))] = safeDecode(\n hash.substring(eqIndex + 1, end)\n );\n } else {\n params[safeDecode(hash.substring(start, end))] = '';\n }\n }\n start = end + 1;\n }\n return params;\n };\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(getHashRoute());\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 = parseQueryParams(window.location.hash);\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 // Update hash and state, and pre-set previousHash to prevent double render\n previousHash = `#${routeName}`;\n window.location.hash = previousHash;\n currentRoute.value = routeName; // Update immediately for synchronous behavior\n };\n\n /**\n * Handles browser hash change events.\n */\n const handleHashChange = (): void => {\n if (isDestroyed) return;\n\n const currentHash = window.location.hash;\n if (currentHash === previousHash) return; // No actual change, or already handled by navigate()\n\n const newRoute = getHashRoute();\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 hash\n window.location.hash = previousHash;\n return;\n }\n }\n currentRoute.value = newRoute;\n } else {\n // Same route but hash changed (e.g., query params), manually re-render\n renderRoute(newRoute);\n }\n\n previousHash = currentHash;\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).data('route');\n 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 $link = $(el);\n const routeAttr = $link.data('route') as string;\n\n boundLinks.add(el);\n\n // Bind reactive active state tracking\n const activeEffect = effect(() => {\n const isActive = currentRoute.value === routeAttr;\n $link.toggleClass(activeClass, isActive);\n\n // Update aria-current for accessibility\n if (isActive) {\n $link.attr('aria-current', 'page');\n } else {\n $link.removeAttr('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 $('[data-route]').each(function () {\n bindActiveState(this as HTMLElement);\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 (hashchange 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 hash change listener\n window.addEventListener('hashchange', handleHashChange);\n cleanups.push(() => window.removeEventListener('hashchange', handleHashChange));\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 { 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/**\n * @deprecated use `enablejQueryOverrides()` instead.\n * This alias will be removed in the future.\n */\nexport const enablejQueryBatching = enablejQueryOverrides;\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';\n\nimport { enablejQueryOverrides } from './jquery-patch';\nimport { disableAutoCleanup, enableAutoCleanup, registry } from './registry';\n\n// Auto-enable on DOM ready\nenablejQueryOverrides();\n$(() => {\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 { enablejQueryBatching, 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":["tt","m","M","a","o","d","I","et","O","_","st","T","t","e","p","S","N","z","it","G","x","nt","i","Q","n","r","g","rt","ot","j","h","k","ht","b","u","C","q","$","R","J","ct","P","v","w","A","H","X","ut","f","E","It","_t","Dt","lt","y","l","D","at","St","K","W","U","ft","Y","Et","Z","B","V","L","F","Ct","dt","Tt","Ot","isReactive","value","getSelector","el","dom","id","tagName","classes","res","len","cls","sanitizeHtml","html","safe","str","code","buildProtocolRegex","protocol","protocolRegex","dangerousDataUriRegex","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","highlightStateMap","state","style","org","atomMetadata","atom","initialValue","options","instance","createAtom","nextTick","resolve","computed","effect","batch","untracked","isAtom","isComputed","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","syncAtomFromDom","currentRaw","parsed","onBlur","formatted","onInput","handlers","currentVal","start","end","formatter","rawVal","safeVal","className","condition","prop","unit","fxFn","cleanup","element","handler","checked","camelCache","getCamelCase","cached","bindText","ctx","bindHtml","sanitized","bindClass","classMap","bindCss","cssMap","camel","bindAttr","attrMap","bindProp","propMap","bindShow","bindHide","bindVal","cfg","isArr","bindChecked","current","bindEvents","eventMap","listener","_$el","key","render","bind","update","onAdd","onRemove","empty","getKey","item","_index","$container","containerSelector","itemMap","removingKeys","oldKeys","$emptyEl","items","itemCount","oldIndexMap","oldLen","newKeys","newKeySet","newIndices","entry","cleanupItem","lisArr","lisIdx","nextNode","oldItem","isChanged","countA","objA","objB","countB","_prop","$newEl","needsNextNodeUpdate","currentEl","rendered","mountedComponents","component","props","isDebug","existingUnmount","userCleanup","fullCleanup","unmount","LOG_PREFIX","route","config","target","defaultRoute","routes","notFound","autoBindLinks","activeClass","beforeTransition","afterTransition","isDestroyed","previousRoute","previousHash","boundLinks","$target","getHashRoute","hash","qIndex","parseQueryParams","params","safeDecode","eqIndex","getRouteConfig","routeName","routeConfig","renderTemplate","templateSelector","template","clonedContent","currentRoute","renderRoute","container","routeParams","navigate","currentRouteName","currentRouteConfig","handleHashChange","currentHash","newRoute","oldRouteName","oldRouteConfig","setupAutoBindLinks","delegateHandler","routeAttr","bindActiveState","$link","activeEffect","isActive","mutation","destroy","renderEffect","handlerMap","isjQueryOverridesEnabled","getWrappedHandler","wrapped","enablejQueryOverrides","originalOn","originalOff","originalRemove","originalEmpty","originalDetach","targets","types","map","newMap","enablejQueryBatching"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atom-effect-jquery.min.js","sources":["../../core/dist/index.mjs","../src/utils.ts","../src/debug.ts","../src/namespace.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/jquery-patch.ts","../src/index.ts"],"sourcesContent":["const k = {\n IDLE: \"idle\",\n PENDING: \"pending\",\n RESOLVED: \"resolved\",\n REJECTED: \"rejected\"\n}, l = {\n DISPOSED: 1,\n EXECUTING: 8\n}, q = {\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}, E = {\n DISPOSED: 1,\n SYNC: 8,\n NOTIFICATION_SCHEDULED: 16\n}, St = {\n MAX_SIZE: 1e3,\n WARMUP_SIZE: 100,\n ENABLE_STATS: !1\n}, S = {\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 CLEANUP_THRESHOLD: 1e3,\n BATCH_QUEUE_SHRINK_THRESHOLD: 1e3\n}, et = {\n WARN_INFINITE_LOOP: !0\n}, z = 1073741823, u = typeof process < \"u\" && process.env && process.env.NODE_ENV !== \"production\" || typeof __DEV__ < \"u\" && !!__DEV__, st = Object.freeze([]);\nclass O extends Error {\n constructor(t, e = null, s = !0) {\n super(t), this.cause = e, this.recoverable = s, this.name = \"AtomError\";\n }\n}\nclass d extends O {\n constructor(t, e = null) {\n super(t, e, !0), this.name = \"ComputedError\";\n }\n}\nclass I extends O {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"EffectError\";\n }\n}\nclass L extends O {\n constructor(t, e = null) {\n super(t, e, !1), this.name = \"SchedulerError\";\n }\n}\nconst X = /* @__PURE__ */ Symbol(\"AtomEffect.DebugName\"), it = /* @__PURE__ */ Symbol(\"AtomEffect.Id\"), G = /* @__PURE__ */ Symbol(\"AtomEffect.Type\"), v = /* @__PURE__ */ Symbol(\"AtomEffect.NoDefaultValue\"), nt = (i) => \"dependencies\" in i && Array.isArray(i.dependencies);\nfunction $(i, t, e) {\n if (i === t)\n throw new d(\n \"Circular dependency detected: The computation refers to itself explicitly or implicitly.\"\n );\n if (!e.has(i.id) && (e.add(i.id), nt(i))) {\n const s = i.dependencies;\n for (let n = 0; n < s.length; n++) {\n const r = s[n];\n r && $(r, t, e);\n }\n }\n}\nconst D = {\n // Dev mode flag\n enabled: u,\n warnInfiniteLoop: et.WARN_INFINITE_LOOP,\n warn(i, t) {\n u && this.enabled && i && console.warn(`[Atom Effect] ${t}`);\n },\n checkCircular(i, t) {\n if (i === t)\n throw new d(\"Direct circular dependency detected\");\n u && this.enabled && $(i, t, /* @__PURE__ */ new Set());\n },\n attachDebugInfo(i, t, e) {\n if (!u || !this.enabled) return;\n const s = i;\n s[X] = `${t}_${e}`, s[it] = e, s[G] = t;\n },\n getDebugName: (i) => i?.[X],\n getDebugType: (i) => i?.[G]\n};\nlet rt = 1;\nconst ot = () => rt++;\nfunction K(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 Q(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, f = s.get(h);\n f !== void 0 ? (o.unsub = f, s.delete(h)) : (D.checkCircular(h, e), o.unsub = h.subscribe(e));\n }\n for (const n of s.values())\n n();\n}\nclass x {\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};\nfunction b(i, t, e) {\n if (i instanceof O)\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 W {\n constructor() {\n this.flags = 0, this.version = 0, this._lastSeenEpoch = -1, this.id = ot() & z;\n }\n}\nclass J extends W {\n /**\n * Adds subscriber.\n */\n subscribe(t) {\n const e = typeof t == \"function\";\n if (!e && (!t || typeof t.execute != \"function\"))\n throw b(\n new TypeError(\"Invalid subscriber\"),\n O,\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 u && console.warn(\"Duplicate subscription ignored.\"), () => {\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(b(t, O, c.ATOM_INDIVIDUAL_SUBSCRIBER_FAILED));\n }\n}\nlet w = 0;\nconst V = () => (w = w + 1 & z || 1, w), B = (i) => i + 1 & z;\nlet H = 0, U = !1, Z = 0;\nconst ht = () => Z;\nfunction Y() {\n return U ? (u && console.warn(\"startFlush() called during flush - ignored\"), !1) : (U = !0, Z = V(), H = 0, !0);\n}\nconst j = () => {\n U = !1;\n}, ct = () => U ? ++H : 0;\nclass ut {\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 = S.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 (u && typeof t != \"function\")\n throw new L(\"Scheduler callback must be a function\");\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 = Y();\n this._drainQueue(), t && j();\n } finally {\n this._isProcessing = !1, this._size > 0 && !this._isBatching && this._flush();\n }\n }\n _flushSync() {\n this._isFlushingSync = !0;\n const t = Y();\n try {\n this._mergeBatchQueue(), this._drainQueue();\n } finally {\n this._isFlushingSync = !1, t && j();\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 > S.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 L(\"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 L(\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 if (this._batchDepth === 0) {\n u && console.warn(\"endBatch() called without matching startBatch(). Ignoring.\");\n return;\n }\n --this._batchDepth === 0 && (this._flushSync(), this._isBatching = !1);\n }\n setMaxFlushIterations(t) {\n if (t < S.MIN_FLUSH_ITERATIONS)\n throw new L(\n `Max flush iterations must be at least ${S.MIN_FLUSH_ITERATIONS}`\n );\n this._maxFlushIterations = t;\n }\n}\nconst N = new ut(), a = {\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 Dt(i) {\n const t = a.current;\n if (t === null) return i();\n a.current = null;\n try {\n return i();\n } finally {\n a.current = t;\n }\n}\nclass lt extends J {\n constructor(t, e) {\n super(), this._pendingOldValue = void 0, this._notifyTask = void 0, this._subscribers = [], this._value = t, e && (this.flags |= E.SYNC), D.attachDebugInfo(this, \"atom\", this.id);\n }\n get value() {\n const t = a.current;\n return t && K(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 = B(this.version);\n const s = this.flags;\n if (!(this._subscribers.length === 0 || s & E.NOTIFICATION_SCHEDULED)) {\n if (this._pendingOldValue = e, this.flags = s | E.NOTIFICATION_SCHEDULED, s & E.SYNC && !N.isBatching) {\n this._flushNotifications();\n return;\n }\n this._notifyTask || (this._notifyTask = () => this._flushNotifications()), N.schedule(this._notifyTask);\n }\n }\n /**\n * Triggers subscribers.\n */\n _flushNotifications() {\n const t = this.flags;\n if (!(t & E.NOTIFICATION_SCHEDULED) || t & E.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 & E.DISPOSED || (this._subscribers.length = 0, this.flags |= E.DISPOSED, this._value = void 0, this._pendingOldValue = void 0, this._notifyTask = void 0);\n }\n}\nfunction Ct(i, t = {}) {\n return new lt(i, t.sync ?? !1);\n}\nclass _t {\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 = u || 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 _ = Object.freeze(\n []\n), p = new _t();\nfunction at(i) {\n return i !== null && typeof i == \"object\" && \"value\" in i && typeof i.subscribe == \"function\";\n}\nfunction Tt(i) {\n return at(i) && typeof i.invalidate == \"function\";\n}\nfunction bt(i) {\n return i !== null && typeof i == \"object\" && typeof i.dispose == \"function\" && typeof i.run == \"function\";\n}\nfunction tt(i) {\n return i !== null && typeof i == \"object\" && typeof i.then == \"function\";\n}\nconst ft = 3, Et = Number.MAX_SAFE_INTEGER - 1, { IDLE: F, DIRTY: T, PENDING: R, RESOLVED: g, REJECTED: A, HAS_ERROR: m, RECOMPUTING: y, DISPOSED: P, IS_COMPUTED: dt } = q;\nfunction pt(i) {\n return i & g ? k.RESOLVED : i & R ? k.PENDING : i & A ? k.REJECTED : k.IDLE;\n}\nclass It extends J {\n constructor(t, e = {}) {\n if (typeof t != \"function\") throw new d(c.COMPUTED_MUST_BE_FUNCTION);\n super(), this._error = null, this._promiseId = 0, this._subscribers = [], this._links = _, this._asyncStartAggregateVersion = 0, this._asyncRetryCount = 0, this._trackEpoch = -1, this._trackLinks = _, this._trackCount = 0, this._value = void 0, this.flags = dt | T | F, this._equal = e.equal ?? Object.is, this._fn = t, this._defaultValue = \"defaultValue\" in e ? e.defaultValue : v, this._onError = e.onError ?? null;\n const s = e.maxAsyncRetries;\n if (this._maxAsyncRetries = s != null && s >= 0 ? s : ft, D.attachDebugInfo(this, \"computed\", this.id), e.lazy === !1)\n try {\n this._recompute();\n } catch {\n }\n }\n _track() {\n const t = a.current;\n t && K(this, t, this._subscribers);\n }\n get value() {\n this._track();\n const t = this.flags;\n if ((t & (g | T | F)) === g)\n return this._value;\n if (t & P)\n throw new d(c.COMPUTED_DISPOSED);\n if (t & y) {\n if (this._defaultValue !== v) return this._defaultValue;\n throw new d(c.COMPUTED_CIRCULAR_DEPENDENCY);\n }\n if (t & (T | F) && (this._recompute(), this.flags & g))\n return this._value;\n const e = this._defaultValue, s = e !== v;\n if (this.flags & R) {\n if (s) return e;\n throw new d(c.COMPUTED_ASYNC_PENDING_NO_DEFAULT);\n }\n if (this.flags & A) {\n if (this._error?.recoverable && 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(), pt(this.flags);\n }\n get hasError() {\n if (this._track(), this.flags & (A | m)) 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 & m) 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 st;\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 & m) {\n const o = r;\n if (o.errors) {\n const h = o.errors;\n for (let f = 0; f < h.length; f++) {\n const C = h[f];\n C && t.indexOf(C) === -1 && t.push(C);\n }\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 & g) !== 0;\n }\n invalidate() {\n this._markDirty();\n }\n dispose() {\n if (this.flags & P) return;\n const t = this._links;\n if (t !== _) {\n for (let e = 0, s = t.length; e < s; e++)\n t[e].unsub?.();\n p.release(t), this._links = _;\n }\n this._subscribers.length = 0, this.flags = P | T | F, this._error = null, this._value = void 0;\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 x(t, t.version));\n this._trackCount++;\n }\n }\n _recompute() {\n if (this.flags & y) return;\n this.flags |= y;\n const t = this._links;\n this._trackEpoch = V(), this._trackLinks = p.acquire(), this._trackCount = 0;\n let e = !1;\n try {\n const s = a.run(this, this._fn);\n this._trackLinks.length = this._trackCount, Q(this._trackLinks, t, this), this._links = this._trackLinks, e = !0, tt(s) ? this._handleAsyncComputation(s) : this._finalizeResolution(s);\n } catch (s) {\n if (!e)\n try {\n this._trackLinks.length = this._trackCount, Q(this._trackLinks, t, this), this._links = this._trackLinks, e = !0;\n } catch (n) {\n u && console.warn(\"[atom-effect] _commitDeps failed during error recovery:\", n);\n }\n this._handleError(s, c.COMPUTED_COMPUTATION_FAILED, !0);\n } finally {\n e && t !== _ ? p.release(t) : e || p.release(this._trackLinks), this._trackEpoch = -1, this._trackLinks = _, this._trackCount = 0, this.flags &= ~y;\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) % Et;\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 d(\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 += e[s].node.version;\n return t;\n }\n _handleError(t, e, s = !1) {\n const n = b(t, d, e);\n if (!s && !(this.flags & A) && (this.version = B(this.version)), this._error = n, this.flags = this.flags & -121 | A | m, 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 & g) || !this._equal(this._value, t)) && (this.version = B(this.version)), this._value = t, this._error = null, this.flags = (this.flags | g) & -697;\n }\n execute() {\n this._markDirty();\n }\n /** @internal */\n _markDirty() {\n this.flags & (y | T) || (this.flags |= T, this._notifySubscribers(void 0, void 0));\n }\n}\nfunction Ot(i, t = {}) {\n return new It(i, t);\n}\nclass gt extends W {\n constructor(t, e = {}) {\n super(), this._cleanup = null, this._links = _, this._nextLinks = null, this._prevLinks = null, 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 ?? S.MAX_EXECUTIONS_PER_SECOND, this._maxExecutionsPerFlush = e.maxExecutionsPerFlush ?? S.MAX_EXECUTIONS_PER_EFFECT, this._trackModifications = e.trackModifications ?? !1, D.attachDebugInfo(this, \"effect\", this.id);\n }\n run() {\n if (this.flags & l.DISPOSED)\n throw new I(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 !== _ && p.release(this._links), this._links = _, this._executeTask = void 0);\n }\n addDependency(t) {\n if (!(this.flags & l.EXECUTING) || t._lastSeenEpoch === this._currentEpoch) return;\n t._lastSeenEpoch = this._currentEpoch;\n const e = this._nextLinks, s = this._prevLinks;\n if (s)\n for (let n = 0, r = s.length; n < r; n++) {\n const o = s[n];\n if (o && o.node === t && o.unsub) {\n e.push(new x(t, t.version, o.unsub)), o.unsub = void 0;\n return;\n }\n }\n try {\n const n = t.subscribe(() => {\n if (this._trackModifications && this.flags & l.EXECUTING && (t._modifiedAtEpoch = this._currentEpoch), this._sync) return this.execute();\n this._executeTask || (this._executeTask = () => this.execute()), N.schedule(this._executeTask);\n });\n e.push(new x(t, t.version, n));\n } catch (n) {\n const r = b(n, I, c.EFFECT_EXECUTION_FAILED);\n if (console.error(r), this._onError)\n try {\n this._onError(r);\n } catch {\n }\n e.push(new x(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();\n const e = this._links;\n this._prevLinks = e !== _ ? e : null;\n const s = p.acquire();\n this._nextLinks = s, this._currentEpoch = V();\n let n = !1;\n try {\n const r = a.run(this, this._fn);\n if (this._links = s, n = !0, this._trackModifications && D.enabled) {\n const o = this._currentEpoch;\n for (let h = 0, f = s.length; h < f; h++) {\n const C = s[h].node;\n C._modifiedAtEpoch === o && D.warn(\n !0,\n `Effect is reading a dependency (${D.getDebugName(C) || \"unknown\"}) that it just modified. Infinite loop may occur`\n );\n }\n }\n tt(r) ? this._handleAsyncResult(r) : this._cleanup = typeof r == \"function\" ? r : null;\n } catch (r) {\n n = !0, this._handleExecutionError(r), this._cleanup = null;\n } finally {\n this._finalizeDependencies(n, e, s), 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, t) {\n const n = this._prevLinks;\n if (n)\n for (let r = 0, o = n.length; r < o; r++)\n n[r]?.unsub?.();\n e !== _ && p.release(e);\n } else\n this._unsubLinks(s), p.release(s);\n this._prevLinks = null;\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 = a.current;\n a.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 & q.IS_COMPUTED)\n try {\n o.value;\n } catch {\n return u && console.warn(`[atom-effect] Dependency #${o.id} threw during dirty check`), !0;\n }\n if (o.version !== r.version) return !0;\n }\n return !1;\n } finally {\n a.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 = ht();\n if (this._lastFlushEpoch !== t && (this._lastFlushEpoch = t, this._executionsInEpoch = 0), ++this._executionsInEpoch > this._maxExecutionsPerFlush && this._throwInfiniteLoopError(\"per-effect\"), ct() > S.MAX_EXECUTIONS_PER_FLUSH && this._throwInfiniteLoopError(\"global\"), this._executionCount++, u && Number.isFinite(this._maxExecutions)) {\n const e = Date.now();\n if (e - this._windowStart >= 1e3)\n this._windowStart = e, this._windowCount = 1;\n else if (++this._windowCount > this._maxExecutions) {\n const s = new I(c.EFFECT_FREQUENCY_LIMIT_EXCEEDED);\n throw this.dispose(), this._handleExecutionError(s), s;\n }\n }\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 I(\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 = b(t, I, e);\n if (console.error(s), this._onError)\n try {\n this._onError(s);\n } catch (n) {\n console.error(b(n, I, c.CALLBACK_ERROR_IN_ERROR_HANDLER));\n }\n }\n}\nfunction yt(i, t = {}) {\n if (typeof i != \"function\")\n throw new I(c.EFFECT_MUST_BE_FUNCTION);\n const e = new gt(i, t);\n return e.execute(), e;\n}\nfunction At(i) {\n if (typeof i != \"function\")\n throw new TypeError(\"Batch callback must be a function\");\n N.startBatch();\n try {\n return i();\n } finally {\n N.endBatch();\n }\n}\nexport {\n k as AsyncState,\n O as AtomError,\n d as ComputedError,\n et as DEBUG_CONFIG,\n D as DEBUG_RUNTIME,\n I as EffectError,\n St as POOL_CONFIG,\n S as SCHEDULER_CONFIG,\n L as SchedulerError,\n Ct as atom,\n At as batch,\n Ot as computed,\n yt as effect,\n at as isAtom,\n Tt as isComputed,\n bt as isEffect,\n N as scheduler,\n Dt 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","import { 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';\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 if (!record.effects) record.effects = [];\n record.effects.push(fx);\n }\n\n trackCleanup(el: Element, fn: () => void): void {\n const record = this._getOrCreateRecord(el);\n if (!record.cleanups) 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 * 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 }\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 { 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',\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 { 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('[atomBind] Unsafe content neutralized during sanitization.');\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(`[atomBind] Blocked dangerous value in \"${prop}\" property.`);\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(`[atomBind] Blocked setting dangerous event handler attribute \"${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(`[atomBind] Blocked dangerous protocol in \"${name}\" attribute.`);\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\nconst DANGEROUS_PROPS = ['innerHTML', 'outerHTML'];\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)) {\n console.warn(\n `[atomBind] Blocked setting dangerous property \"${name}\". Use html binding for sanitized HTML.`\n );\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 { 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(`[atomList] Duplicate key \"${k}\" at index ${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 { 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 = '[$.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 = 'hash',\n basePath = '',\n autoBindLinks = false,\n activeClass = 'active',\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 // Update URL and state\n setUrl(routeName);\n currentRoute.value = routeName; // Update immediately for synchronous behavior\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).data('route');\n 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 $link = $(el);\n const routeAttr = $link.data('route') as string;\n\n boundLinks.add(el);\n\n // Bind reactive active state tracking\n const activeEffect = effect(() => {\n const isActive = currentRoute.value === routeAttr;\n $link.toggleClass(activeClass, isActive);\n\n // Update aria-current for accessibility\n if (isActive) {\n $link.attr('aria-current', 'page');\n } else {\n $link.removeAttr('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 $('[data-route]').each(function () {\n bindActiveState(this as HTMLElement);\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 { 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';\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":["k","l","q","E","S","et","z","u","st","O","t","e","d","I","L","X","it","G","v","nt","i","$","n","r","D","rt","ot","K","o","h","M","Q","f","x","c","b","W","J","w","V","B","H","U","Z","ht","Y","j","ct","ut","N","a","Dt","lt","Ct","_t","_","p","at","Tt","ft","Et","F","T","R","g","A","m","y","P","dt","pt","It","C","Ot","gt","yt","At","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","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","prop","cached","createContext","_$el","bindText","ctx","bindHtml","sanitized","bindClass","classMap","className","bindCss","cssMap","camel","isArr","unit","strVal","bindAttr","attrMap","c0","DANGEROUS_PROPS","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","raw","sp","params","setUrl","routeName","url","restoreUrl","getCurrentUrl","getRouteConfig","routeConfig","renderTemplate","templateSelector","template","clonedContent","currentRoute","renderRoute","container","routeParams","navigate","currentRouteName","currentRouteConfig","handleUrlChange","currentUrl","newRoute","oldRouteName","oldRouteConfig","setupAutoBindLinks","delegateHandler","routeAttr","bindActiveState","$link","activeEffect","isActive","mutation","destroy","eventName","renderEffect","handlerMap","isjQueryOverridesEnabled","getWrappedHandler","wrapped","enablejQueryOverrides","originalOn","originalOff","originalRemove","originalEmpty","originalDetach","targets","types","map","newMap"],"mappings":"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"}
|