sprae 13.0.1 → 13.1.1

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../core.js", "../store.js", "../signal.js", "../directive/if.js", "../directive/else.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/fx.js", "../directive/value.js", "../directive/ref.js", "../directive/scope.js", "../directive/each.js", "../directive/_.js", "../directive/spread.js", "../directive/event.js", "../directive/sequence.js", "../directive/html.js", "../directive/portal.js", "../directive/hidden.js", "../directive/mount.js", "../directive/change.js", "../directive/intersect.js", "../directive/resize.js", "../sprae.js", "<stdin>"],
4
- "sourcesContent": ["import store, { _change, _signals } from \"./store.js\";\n\n\n\n/** Symbol for disposal (using standard Symbol.dispose if available) */\nexport const _dispose = (Symbol.dispose ||= Symbol(\"dispose\"))\n\n/** Symbol for accessing element's reactive state */\nexport const _state = Symbol(\"state\")\n\n/** Symbol for enabling element effects */\nexport const _on = Symbol('on')\n\n/** Symbol for disabling element effects */\nexport const _off = Symbol('off')\n\n/** Symbol for adding child to element */\nexport const _add = Symbol('init')\n\n/** Directive prefix (default: ':') */\nexport let prefix = ':';\n\n/** Check if element is a custom element (has hyphen in tag name) */\nexport const isCE = (el) => el.localName?.includes('-')\n\n/**\n * A reactive signal containing a value.\n * @template T\n * @typedef {Object} Signal\n * @property {T} value - Current value (reading subscribes, writing notifies)\n * @property {() => T} peek - Read without subscribing\n * @property {() => T} valueOf - Get value for coercion\n * @property {() => T} toJSON - Get value for JSON serialization\n * @property {() => string} toString - Get value as string\n */\n\n/**\n * Internal effect function type.\n * @typedef {Object} EffectFn\n * @property {Set<Set<EffectFn>>} deps - Dependency sets\n * @property {() => void} fn - Original function\n */\n\n/**\n * Creates a reactive signal.\n * @template T\n * @type {<T>(value: T) => Signal<T>}\n */\nexport let signal;\n\n/**\n * Creates a reactive effect that re-runs when dependencies change.\n * @type {(fn: () => void | (() => void)) => () => void}\n */\nexport let effect;\n\n/**\n * Creates a computed signal derived from other signals.\n * @template T\n * @type {<T>(fn: () => T) => Signal<T>}\n */\nexport let computed;\n\n/**\n * Batches multiple signal updates into a single notification.\n * @template T\n * @type {<T>(fn: () => T) => T}\n */\nexport let batch = (fn) => fn();\n\n/**\n * Runs a function without tracking signal dependencies.\n * @template T\n * @type {<T>(fn: () => T) => T}\n */\nexport let untracked = batch;\n\n/**\n * Registry of directive handlers.\n * @type {Record<string, DirectiveHandler>}\n */\nexport let directive = {};\n\n/**\n * Registry of modifier functions.\n * @type {Record<string, ModifierHandler>}\n */\nexport let modifier = {}\n\n\nlet currentDir = null;\nlet currentEl = null;\n\n/**\n * Formats element for error message (minimal context).\n * @param {Element} [el] - Element to format\n * @returns {string} Element hint like \"<div#id.class>\"\n */\nconst elHint = (el) => {\n if (!el?.tagName) return ''\n let hint = el.tagName.toLowerCase()\n if (el.id) hint += '#' + el.id\n else if (el.className) hint += '.' + el.className.split(' ')[0]\n return `<${hint}>`\n}\n\n/**\n * Reports an error with context.\n * @param {Error|string} e - Error to report\n * @param {string} [expr] - Expression that caused error\n */\nconst err = (e, expr, el = currentEl) => {\n let msg = `\u2234 ${e}`\n if (el) msg += `\\n in ${elHint(el)}`\n if (expr) {\n const display = expr.length > 100 ? expr.slice(0, 80) + `\u2026 (${expr.length} chars)` : expr\n msg += currentDir ? `\\n ${currentDir}=\"${display}\"` : `\\n =\"${display}\"`\n }\n console.error(msg)\n}\n\n/**\n * @callback DirectiveHandler\n * @param {Element} el - Target element\n * @param {Object} state - Reactive state object\n * @param {string} expr - Expression string\n * @param {string} [name] - Directive name with modifiers\n * @returns {((value: any) => void | (() => void)) | { [Symbol.dispose]: () => void } | void}\n */\n\n/**\n * @callback ModifierHandler\n * @param {Function} fn - Function to modify\n * @param {...string} args - Modifier arguments (from dash-separated values)\n * @returns {Function}\n */\n\n/**\n * @typedef {Object} SpraeState\n * @property {Record<string, Signal>} [_signals] - Internal signals map\n */\n\n/**\n * Applies directives to an HTML element and manages its reactive state.\n *\n * @param {Element} [el=document.body] - The target HTML element to apply directives to.\n * @param {Object} [state] - Initial state values to populate the element's reactive state.\n * @returns {SpraeState & Object} The reactive state object associated with the element.\n */\nconst sprae = (root = document.body, state) => {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (root[_state]) return Object.assign(root[_state], state)\n\n // console.group('sprae', root)\n\n // take over existing state instead of creating a clone\n state = store(state || {})\n\n let el = root, fx = [], offs = []\n\n // on/off all effects\n // we don't call prevOn as convention: everything defined before :else :if won't be disabled by :if\n // imagine <x :onx=\"...\" :if=\"...\"/> - when :if is false, it disables directives after :if (calls _off) but ignores :onx\n el[_on] = () => (!offs && (offs = fx.map(fn => fn())))\n el[_off] = () => (offs?.map(off => off?.()), offs = null)\n\n // destroy\n el[_dispose] ||= () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_add] = el[_state] = null)\n\n const add = el[_add] = (el) => {\n let _attrs = el.attributes, start;\n\n // we iterate live collection (subsprae can init args)\n if (_attrs) for (let i = 0; i < _attrs.length;) {\n let { name, value } = _attrs[i]\n\n if (name.startsWith(prefix)) {\n el.removeAttribute(name)\n\n currentDir = name;\n currentEl = el;\n\n // directive initializer can be redefined\n fx.push(start = dir(el, name.slice(prefix.length), value, state)), offs.push(start())\n\n // stop after subsprae like :each, :if, :scope etc.\n // custom elements: continue processing all directives (prop setters), descent blocked separately (line 189)\n if (_state in el && !isCE(el)) return\n } else i++\n }\n\n // custom elements own their children \u2014 don't descend\n if (el !== root && isCE(el)) return\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n // real DOM: firstChild/nextSibling avoids array copy; frag.childNodes is already snapshot array\n if (el.firstChild !== undefined) {\n let child = el.firstChild, next\n while (child) (next = child.nextSibling, child.nodeType == 1 && add(child), child = next)\n }\n else for (let child of el.childNodes) child.nodeType == 1 && add(child)\n };\n\n add(el);\n\n currentDir = currentEl = null;\n\n // if element was spraed by inline :with/:if/:each/etc instruction (meaning it has state placeholder) - skip, otherwise save _state\n if (el[_state] === undefined) el[_state] = state\n\n // console.groupEnd()\n\n return state;\n}\n\n/** Package version (injected by bundler) */\nsprae.version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev'\n\n\n// directive initializer\n/** @type {(el: Element, name: string, expr: string, state: Object) => () => (() => void) | void} */\nexport let dir\n\n/**\n * Compiles an expression string into an evaluator function.\n * @type {(expr: string) => (state: Object) => any}\n */\nexport let compile\n\n/**\n * Parses an expression into an evaluator function, caching the result for reuse.\n *\n * @param {string} expr - The expression to parse and compile into a function.\n * @returns {(state: Object, cb?: (value: any) => any) => any} The compiled evaluator function for the expression.\n */\nexport const parse = (expr) => {\n let fn = cache[expr=expr.trim()]\n if (fn) return fn\n\n // static time errors\n try {\n fn = compile(expr || 'undefined')\n // Object.defineProperty(fn, \"name\", { value: `\u2234 ${expr}` })\n } catch (e) { err(e, expr) }\n\n // run time errors\n return cache[expr] = function (state, cb, _out) {\n try {\n let result = fn?.call(this, state)\n // if cb is given (to handle async/await exprs, usually directive update) - call it with result and return a cleanup function\n if (cb) return result?.then\n ? (result.then(v => _out = cb(v)).catch(e => err(e, expr, this)), () => typeof _out === 'function' && _out())\n : cb(result)\n else return result\n } catch (e) {\n err(e, expr, this)\n }\n }\n}\nconst cache = {};\n\n\n/**\n * @typedef {Object} SpraeConfig\n * @property {(expr: string) => (state: Object) => any} [compile] - Custom expression compiler\n * @property {string} [prefix] - Directive prefix (default: ':')\n * @property {<T>(value: T) => Signal<T>} [signal] - Signal factory\n * @property {(fn: () => void | (() => void)) => () => void} [effect] - Effect factory\n * @property {<T>(fn: () => T) => Signal<T>} [computed] - Computed factory\n * @property {<T>(fn: () => T) => T} [batch] - Batch function\n * @property {<T>(fn: () => T) => T} [untracked] - Untracked function\n * @property {(el: Element, name: string, expr: string, state: Object) => () => (() => void) | void} [dir] - Directive initializer\n */\n\n/**\n * Configure sprae with custom signals, compiler, or prefix.\n * @param {SpraeConfig} config - Configuration options\n * @returns {void}\n */\nexport const use = (config) => (\n config.compile && (compile = config.compile),\n config.prefix && (prefix = config.prefix),\n config.signal && (signal = config.signal),\n config.effect && (effect = config.effect),\n config.computed && (computed = config.computed),\n config.batch && (batch = config.batch),\n config.untracked && (untracked = config.untracked),\n config.dir && (dir = config.dir)\n)\n\n/**\n * Applies modifiers to a function.\n * @param {Function & { target?: Element }} fn - Function to decorate\n * @param {string[]} mods - Modifier names with arguments (e.g., ['throttle-500', 'prevent'])\n * @returns {Function} Decorated function\n */\nexport const decorate = (fn, mods) => {\n while (mods.length) {\n let [name, ...params] = mods.pop().split('-'), mod = modifier[name], wrapFn\n if (mod) {\n if ((wrapFn = mod(fn, ...params)) !== fn) {\n for (let k in fn) wrapFn[k] ??= fn[k];\n fn = wrapFn\n }\n }\n }\n return fn\n}\n\n\n/** MutationObserver reference, set by sprae.start() */\nexport let mo = null\n/** Pauses MO during DOM mutations to prevent disposing managed elements */\nexport const mutate = (fn) => { mo?.disconnect(); fn(); mo?.observe(mo._root, { childList: true, subtree: true }) }\n\n/**\n * Auto-initializes sprae on dynamically added elements.\n * Uses MutationObserver to detect new DOM nodes and apply directives.\n *\n * @param {Element} [root=document.body] - Root element to observe\n * @param {Object} [values] - Initial state values\n * @returns {Object} The reactive state object\n *\n * @example\n * ```js\n * // Auto-init on page load\n * sprae.start(document.body, { count: 0 })\n * ```\n */\nexport const start = (root = document.body, values) => {\n const state = store(values)\n sprae(root, state);\n mo = new MutationObserver(mutations => {\n for (const m of mutations) {\n for (const el of m.addedNodes) {\n // el can be spraed or removed by subsprae (like within :each/:if)\n if (el.nodeType === 1 && el[_state] === undefined && root.contains(el)) {\n // even if element has no spraeable attrs, some of its children can have\n root[_add](el)\n }\n }\n for (const el of m.removedNodes) {\n // Only dispose if element is truly removed from document\n if (el.nodeType === 1 && !root.contains(el)) el[_dispose]?.()\n }\n }\n });\n mo._root = root\n mo.observe(root, { childList: true, subtree: true });\n return state\n}\n\n/**\n * @typedef {Object} FragmentLike\n * @property {Document} ownerDocument - The owner document\n * @property {Node[]} childNodes - Child nodes of the fragment\n * @property {DocumentFragment} content - The document fragment content\n * @property {() => void} remove - Remove the fragment from DOM\n * @property {(el: Node) => void} replaceWith - Replace the fragment with an element\n * @property {Attr[]} attributes - Attributes from the original template\n * @property {(name: string) => void} removeAttribute - Remove an attribute\n */\n\n/**\n * Creates a fragment holder from a template element with minimal API surface.\n * @param {HTMLTemplateElement | FragmentLike} tpl - Template element or existing fragment\n * @returns {FragmentLike} Fragment-like object\n */\nexport const frag = (tpl) => {\n if (!tpl.nodeType) return tpl // existing tpl\n\n let doc = tpl.ownerDocument,\n content = tpl.content.cloneNode(true), // document fragment holder of content\n attributes = [...tpl.attributes],\n ref = doc.createTextNode(''),\n // ensure at least one node\n childNodes = (content.append(ref), [...content.childNodes])\n\n return {\n ownerDocument: doc,\n childNodes,\n content,\n remove: () => content.append(...childNodes),\n replaceWith(el) {\n if (el === ref) return\n ref.before(el)\n content.append(...childNodes)\n },\n attributes,\n removeAttribute(name) { attributes.splice(attributes.findIndex(a => a.name === name), 1) },\n }\n}\n\n/**\n * Converts camelCase to kebab-case.\n * @param {string} str - String to convert\n * @returns {string} Kebab-case string\n */\nexport const dashcase = (str) => str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n\n/**\n * Sets or removes an attribute on an element.\n * @param {Element} el - Target element\n * @param {string} name - Attribute name\n * @param {string | boolean | null | undefined} v - Attribute value (null/false removes, true sets empty)\n * @returns {void}\n */\nconst camelcase = (str) => str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\nexport const attr = (el, name, v) => (v == null || v === false) ? el.removeAttribute(name) :\n isCE(el) ? (el[camelcase(name)] = v) :\n el.setAttribute(name, v === true ? \"\" : v);\n\n/**\n * Converts class input to className string (like clsx/classnames).\n * @param {string | string[] | Record<string, boolean> | null | undefined} c - Class input\n * @returns {string} Space-separated class string\n */\nexport const clsx = (c) => !c ? '' : typeof c === 'string' ? c : (\n Array.isArray(c) ? c.map(clsx) :\n Object.entries(c).reduce((s, [k, v]) => (v && s.push(k), s), [])\n).join(' ')\n\n/**\n * Throttles a function to run at most once per tick (or custom scheduler).\n * Fires on leading edge, then on trailing edge if called during throttle.\n * @template {Function} T\n * @param {T} fn - Function to throttle\n * @param {number|Function} [ms] - Delay in ms or scheduler function (default: microtask)\n * @returns {T} Throttled function\n */\nexport const throttle = (fn, ms) => {\n let _planned = 0, arg, schedule = typeof ms === 'function' ? ms : ms ? (fn) => setTimeout(fn, ms) : queueMicrotask;\n const throttled = (e) => {\n arg = e\n if (!_planned++) fn(arg), schedule(() => {\n let dirty = _planned > 1\n _planned = 0\n dirty && throttled(arg)\n });\n }\n return throttled;\n}\n\n/**\n * Debounces a function to run after a delay since the last call.\n * @template {Function} T\n * @param {T} fn - Function to debounce\n * @param {number|Function} [ms] - Delay in ms or scheduler function (default: microtask)\n * @param {boolean} [immediate=false] - Fire on leading edge instead of trailing\n * @returns {T} Debounced function\n */\nexport const debounce = (fn, ms, immediate) => {\n let schedule = typeof ms === 'function' ? ms : ms ? (fn) => setTimeout(fn, ms) : queueMicrotask;\n return immediate\n ? ((_blocked) => (arg) => !_blocked && (fn(arg), _blocked = 1, schedule(() => _blocked = 0)))()\n : ((_count = 0) => (arg, _c = ++_count) => schedule(() => _c == _count && fn(arg)))()\n}\n\nexport * from './store.js';\n\nexport default sprae\n", "/**\n * @fileoverview Signals-powered reactive proxy store\n * @module sprae/store\n */\n\nimport { signal, computed, batch, untracked } from './core.js'\n\n/** Symbol for accessing the internal signals map */\nexport const _signals = Symbol('signals')\n\n/** Symbol for the change signal that tracks object keys or array length */\nexport const _change = Symbol('change')\n\n/** Symbol for stashed setter on computed values */\nexport const _set = Symbol('set')\n\n// a hack to simulate sandbox for `with` in evaluator\nlet sandbox = true\n\n/**\n * Reactive store with signals backing.\n * @template T\n * @typedef {T & { [_signals]: Record<string | symbol, import('./core.js').Signal<any>> }} ReactiveStore\n */\n\n/**\n * Creates a reactive proxy store from an object or array.\n * Properties become signals for fine-grained reactivity.\n * Supports nested objects, arrays, computed getters, and methods.\n *\n * @template {Object} T\n * @param {T} values - Initial values object\n * @param {Object} [parent] - Parent scope for inheritance\n * @returns {ReactiveStore<T>} Reactive proxy store\n *\n * @example\n * const state = store({ count: 0, get doubled() { return this.count * 2 } })\n * state.count = 5 // triggers updates\n * state.doubled // 10 (computed)\n */\nexport const store = (values, parent) => {\n if (!values) return values\n\n // ignore globals\n // FIXME: handle via has trap\n if (values[Symbol.toStringTag]) return values;\n\n // bypass existing store\n if (values[_signals]) return values\n\n // non-objects: for array redirect to list\n if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values\n\n // _change stores total number of keys to track new props\n let keyCount = Object.keys(values).length,\n signals = {}\n\n // proxy conducts prop access to signals\n let state = new Proxy(Object.assign(signals, {\n [_change]: signal(keyCount),\n [_signals]: signals\n }), {\n get: (_, k) => {\n if (k in signals) {\n // raw methods (no prototype) - bind to state for consistent `this`\n if (signals.hasOwnProperty(k) && typeof signals[k] === 'function' && !signals[k].prototype) return signals[k].bind(state)\n return (signals[k] ? signals[k].valueOf() : signals[k])\n }\n if (parent) {\n return parent[k]\n }\n return (typeof globalThis[k] === 'function' && !globalThis[k].prototype ? globalThis[k].bind(globalThis) : globalThis[k])\n },\n\n set: (_, k, v) => {\n // console.group('SET', k, v)\n if (k in signals) return set(signals, k, v), 1\n\n // turn off sandbox to check if parents have the prop - we don't want to create new prop in global scope\n sandbox = false\n\n // write transparency for parent scope, unlike prototype chain\n // if prop is defined in parent scope (except global) - write there\n if (parent && k in parent) {\n parent[k] = v\n }\n // else create in current scope\n else {\n create(signals, k, v)\n signals[_change].value = ++keyCount\n }\n\n sandbox = true\n\n // console.groupEnd()\n // bump length for new signal\n return 1\n },\n\n // FIXME: try to avild calling Symbol.dispose here. Maybe _delete method?\n deleteProperty: (_, k) => {\n k in signals && (k[0] != '_' && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount)\n return 1\n },\n\n // subscribe to length when spreading\n ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),\n\n // sandbox prevents writing to global\n has: (_, k) => {\n if (k in signals) return true\n if (parent) return k in parent\n return sandbox\n }\n })\n\n // init signals for values\n const descs = Object.getOwnPropertyDescriptors(values)\n\n for (let k in values) {\n // getter turns into computed\n if (descs[k]?.get)\n // stash setter\n (signals[k] = computed(descs[k].get.bind(state)))[_set] = descs[k].set?.bind(state);\n\n // init blank signal - make sure we don't take prototype one\n else create(signals, k, values[k])\n }\n\n return state\n}\n\n/**\n * Creates a reactive array store with lazy signal initialization.\n * Arrays can be large, so signals are created on-demand.\n * @param {any[]} values - Initial array values\n * @param {Object} [parent=globalThis] - Parent scope\n * @returns {ReactiveStore<any[]>} Reactive array proxy\n */\nconst list = (values, parent = globalThis) => {\n\n // gotta fill with null since proto methods like .reduce may fail\n let signals = Array(values.length).fill(null),\n\n // if .length was accessed from mutator (.push/etc) method\n isMut = false,\n\n // since array mutator methods read .length internally only once, we disable it on the moment of call, allowing rest of operations to be reactive\n mut = fn => function () { isMut = true; return fn.apply(this, arguments); },\n\n length = signal(values.length),\n\n // proxy passes prop access to signals\n state = new Proxy(\n Object.assign(signals, {\n [_change]: length,\n [_signals]: signals,\n // patch mutators\n push: mut(signals.push),\n pop: mut(signals.pop),\n shift: mut(signals.shift),\n unshift: mut(signals.unshift),\n splice: mut(signals.splice),\n }),\n {\n get(_, k) {\n // console.log('GET', k, isMut)\n\n // if .length is read within mutators - peek signal to avoid recursive subscription\n // we need to ignore it only once and keep for the rest of the mutator call\n if (k === 'length') return isMut ? (isMut = false, signals.length) : length.value;\n\n // non-numeric\n if (typeof k === 'symbol' || isNaN(k)) return signals[k]?.valueOf() ?? parent[k];\n\n // create signal (lazy)\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n return (signals[k] ??= signal(store(values[k]))).valueOf()\n },\n\n set(_, k, v) {\n // console.log('SET', k, v)\n\n // .length\n if (k === 'length') {\n // force cleaning up tail\n for (let i = v; i < signals.length; i++) delete state[i]\n // .length = N directly\n length.value = signals.length = v;\n }\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n else if (k >= signals.length) create(signals, k, v), state.length = +k + 1\n\n // existing signal\n else signals[k] ? set(signals, k, v) : create(signals, k, v)\n\n return 1\n },\n\n // dispose notifies any signal deps, like :each\n deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1),\n })\n\n return state\n}\n\n/**\n * Creates a signal for a property value.\n * Skips wrapping for untracked props (underscore prefix), existing signals, and functions.\n * @param {Object} signals - Signals storage object\n * @param {string} k - Property key\n * @param {any} v - Property value\n */\nconst create = (signals, k, v) => (signals[k] = (k[0] == '_' || v?.peek || typeof v === 'function') ? v : signal(store(v)))\n\n/**\n * Updates a signal value, handling arrays specially for efficient patching.\n * @param {Object} signals - Signals storage object\n * @param {string} k - Property key\n * @param {any} v - New value\n */\nconst set = (signals, k, v, _s, _v) => {\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n return k[0] === '_' || typeof signals[k] === 'function' ? (signals[k] = v) :\n (v !== (_v = (_s = signals[k]).peek?.() ?? _s)) && (\n // stashed _set for value with getter/setter\n _s[_set] ? _s[_set](v) :\n // patch array\n Array.isArray(v) && Array.isArray(_v) ?\n // if we update plain array (stored in signal) - take over value instead\n // since input value can be store, we have to make sure we don't subscribe to its length or values\n // FIXME: generalize to objects\n _change in _v ?\n untracked(() => batch(() => {\n for (let i = 0; i < v.length; i++) _v[i] = v[i]\n _v.length = v.length // forces deleting tail signals\n })) :\n (_s.value = v) :\n // .x = y\n (_s.value = store(v))\n )\n}\n\n\n// make sure state contains first element of path, eg. `a` from `a.b[c]`\n// NOTE: we don't need since we force proxy sandbox\n// export const ensure = (state, expr, _name = expr.match(/^\\w+(?=\\s*(?:\\.|\\[|$))/)) => _name && (state[_signals][_name[0]] ??= null)\n\nexport default store\n", "/**\n * @fileoverview Minimal signals implementation (preact-signals compatible)\n * @module sprae/signal\n */\n\n/** @type {import('./core.js').EffectFn | null} */\nlet current\n\nlet depth = 0\n\n/** @type {Set<import('./core.js').EffectFn> | null} */\nlet batched;\n\n/**\n * Creates a reactive signal.\n * @template T\n * @param {T} v - Initial value\n * @returns {import('./core.js').Signal<T>}\n */\nexport const signal = (v, _s, _obs = new Set, _v = () => _s.value) => (\n _s = {\n get value() {\n current?.deps.add(_obs.add(current));\n return v\n },\n set value(val) {\n if (val === v) return\n v = val;\n for (let sub of _obs) batched ? batched.add(sub) : sub(); // notify effects\n },\n peek() { return v },\n toJSON: _v, toString: _v, valueOf: _v\n }\n)\n\n/**\n * Creates a reactive effect that re-runs when dependencies change.\n * @param {() => void | (() => void)} fn - Effect function, may return cleanup\n * @returns {() => void} Dispose function\n */\nexport const effect = (fn, _teardown, _fx, _deps) => (\n _fx = (prev) => {\n let tmp = _teardown;\n _teardown = null; // we null _teardown to avoid repeated call in case of recursive update\n tmp?.call?.();\n prev = current, current = _fx\n if (depth++ > 50) throw 'Cycle detected';\n try { _teardown = fn() } finally { current = prev; depth-- }\n },\n _fx.fn = fn,\n _deps = _fx.deps = new Set(),\n\n _fx(),\n (dep) => { _teardown?.call?.(); _teardown = fn = _fx.fn = null; for (dep of _deps) dep.delete(_fx); _deps.clear() }\n)\n\n/**\n * Creates a computed signal derived from other signals.\n * @template T\n * @param {() => T} fn - Computation function\n * @returns {import('./core.js').Signal<T>}\n */\nexport const computed = (fn, _s = signal(), _c, _e, _v = () => _c.value) => (\n _c = {\n get value() {\n _e ||= effect(() => _s.value = fn());\n return _s.value\n },\n peek: _s.peek,\n toJSON: _v, toString: _v, valueOf: _v\n }\n)\n\n/**\n * Batches multiple signal updates into a single notification.\n * @template T\n * @param {() => T} fn - Function containing updates\n * @returns {T}\n */\nexport const batch = (fn, _first = !batched, _list) => {\n batched ??= new Set;\n try { fn(); }\n finally { if (_first) { [batched, _list] = [null, batched]; for (const fx of _list) fx(); } }\n}\n\n/**\n * Runs a function without tracking dependencies.\n * @template T\n * @param {() => T} fn - Function to run untracked\n * @returns {T}\n */\nexport const untracked = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v)\n\n", "import sprae, { throttle, _on, _off, _state, frag, mutate } from '../core.js';\n\n/**\n * Conditional directive - shows/hides element based on condition.\n * Works with :else and :else :if for branching.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @param {Object} state - State object\n * @returns {(value: any) => void} Update function\n */\nexport default (el, state) => {\n let _holder, _el\n\n // new element :if\n if (!el._holder) {\n // mark el as fake-spraed to delay init, since we sprae rest when branch matches, both :if and :else :if\n el[_state] ??= null\n\n _el = el.content ? frag(el) : el\n _el[_state] ??= null // mark _el (frag) as needing sprae\n\n mutate(() => el.replaceWith(_holder = el.ownerDocument.createTextNode('')))\n _el._holder = _holder._holder = _holder\n\n\n _holder._clauses = [_el._clause = [_el, false]]\n _holder._match = null\n\n _holder.update = throttle(() => {\n let match = _holder._clauses.find(([, s]) => s)\n\n if (match != _holder._match) {\n mutate(() => {\n _holder._match?.[0].remove()\n _holder._match?.[0][_off]?.()\n if (_holder._match = match) {\n _holder.before(_holder._match[0].content || _holder._match[0])\n // check if element needs initial sprae (null) vs just re-enabling (_on)\n !_holder._match[0][_state] ? (delete _holder._match[0][_state], sprae(_holder._match[0], state)) : _holder._match[0][_on]?.()\n }\n })\n }\n })\n }\n // :else :if needs to be spraed all over to have clean list of offable effects\n else sprae(_el = el, state)\n\n // :else may have children to init which is called after :if\n // or preact can schedule :else after :if, so we ensure order of call by next tick\n let cb = value => {\n _el._clause[1] = value\n _el._holder.update()\n }\n cb[_off] = () => { _el._holder._match?.[0][_off]?.(); _el._holder._match = null }\n return cb\n}\n", "import { _on, _off, _state, frag } from '../core.js';\n\n/**\n * Else directive - conditional branch following :if.\n * Can be used as `:else` or `:else :if=\"condition\"`.\n * @param {Element | HTMLTemplateElement} el - Element with directive\n * @returns {() => void} Update function\n */\nexport default (el) => {\n let _el, _prev = el\n\n _el = el.content ? frag(el) : el\n _el[_state] ??= null // mark _el (frag) as needing sprae\n\n // find holder\n while (_prev && !(_el._holder = _prev._holder)) _prev = _prev.previousSibling\n\n el.remove()\n el[_state] = null // mark as fake-spraed to stop further init, to lazy-sprae when branch matches\n\n _el._holder._clauses.push(_el._clause = [_el, true])\n\n return _el._holder.update\n}\n", "import { frag } from \"../core.js\"\n\n/**\n * Text directive - sets textContent reactively.\n * Preserves caret/selection position across updates.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @returns {(v: any) => void} Update function\n */\nexport default el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n v => {\n v = typeof v === 'function' ? v(el.textContent) : v\n v = v == null ? \"\" : v\n if (el.textContent === v) return\n\n // save caret position\n let s = el.getRootNode().getSelection?.()\n let off = s?.rangeCount && el.contains(s.anchorNode) ? s.getRangeAt(0).startOffset : -1\n\n el.textContent = v\n\n // restore caret\n if (off >= 0 && el.firstChild) {\n let pos = Math.min(off, el.firstChild.textContent.length)\n let r = new Range()\n r.setStart(el.firstChild, pos)\n r.collapse(true)\n s.removeAllRanges()\n s.addRange(r)\n }\n }\n)\n", "import { clsx } from \"../core.js\";\n\n/**\n * Class directive - manages CSS classes reactively.\n * Supports strings, arrays, and objects (like clsx/classnames).\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Directive name with modifiers\n * @returns {(v: string | string[] | Record<string, boolean>) => void} Update function\n */\nexport default (el, st, ex, name) => {\n let _cur = new Set, _new\n\n return (v) => {\n _new = new Set\n if (v) for (let c of clsx(typeof v === 'function' ? v(el.className) : v).split(' ')) c && _new.add(c)\n for (let c of _cur) if (!_new.has(c)) el.classList.remove(c);\n for (let c of _new) if (!_cur.has(c)) el.classList.add(c);\n if (!el.classList.length) el.removeAttribute('class')\n _cur = _new\n }\n}\n", "import { attr } from \"../core.js\";\n\n/**\n * Style directive - sets inline styles reactively.\n * Accepts string or object. Preserves static styles.\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Directive name with modifiers\n * @returns {(v: string | Record<string, string> | ((style: CSSStyleDeclaration) => any)) => void} Update function\n */\nexport default (el, st, ex, name) => {\n let _static;\n\n return v => {\n if (_static === undefined) _static = el.getAttribute(\"style\") ?? \"\"\n v = typeof v === \"function\" ? v(el.style) : v\n if (typeof v === \"string\") attr(el, \"style\", _static ? _static + '; ' + v : v)\n else {\n if (_static) attr(el, \"style\", _static);\n // NOTE: we skip names not starting with a letter - eg. el.style stores properties as { 0: --x } or JSDOM has _pfx\n for (let k in v) k[0] == '-' ? el.style.setProperty(k, v[k]) : k[0] >= 'A' && (el.style[k] = v[k])\n }\n }\n}\n", "/**\n * Effect directive - runs side effects.\n * Calls function result if expression evaluates to a function.\n * @returns {(fn: any) => any} Update function\n */\nexport default () => (fn) => typeof fn === 'function' && fn()\n", "import sprae, { attr, _dispose } from \"../core.js\";\n\n/**\n * Value directive - one-way binding (state \u2192 DOM).\n * Sets element value/checked/selected from state.\n * For write-back (DOM \u2192 state), use :change directive.\n *\n * @param {HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement} el - Form element\n * @param {Object} state - State object\n * @returns {(value: any) => void} Update function\n */\nexport default (el, state) => {\n // select elements need children spraed first (for :each options)\n if (el.type?.startsWith('select')) sprae(el, state)\n\n return (el.type === \"text\" || el.type === \"\" || el.tagName === \"TEXTAREA\") ?\n (value, _from, _to) => (\n _from = el.selectionStart,\n _to = el.selectionEnd,\n el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)),\n _from && el.setSelectionRange(_from, _to)\n ) :\n (el.type === \"checkbox\") ?\n (value) => (el.checked = value, attr(el, \"checked\", value)) :\n (el.type === 'radio') ? (value) => (\n el.checked = el.value === value, attr(el, 'checked', el.checked || null)\n ) :\n (el.type === \"select-one\") ?\n (value) => {\n for (let o of el.options)\n o.value == value ? o.setAttribute(\"selected\", '') : o.removeAttribute(\"selected\");\n el.value = value;\n } :\n (el.type === 'select-multiple') ? (value) => {\n for (let o of el.options) value.some(v => v == o.value) ? o.setAttribute('selected', '') : o.removeAttribute('selected')\n } :\n (value) => (el.value = value)\n}\n", "import { parse } from \"../core.js\"\n\n/**\n * Creates a setter function for assigning a value to a state path.\n * @param {string} expr - Expression to assign to (e.g., \"x\" or \"refs.el\")\n * @returns {(target: Object, value: any) => void} Setter function\n */\nconst setter = (expr, _set = parse(`${expr}=__`)) => (target, value) => {\n target.__ = value; _set(target), delete target.__\n}\n\n/**\n * Ref directive - stores element reference in state or calls callback with element.\n *\n * :ref=\"x\" \u2192 state.x = el\n * :ref=\"refs.el\" \u2192 state.refs.el = el\n * :ref=\"el => setup(el)\" \u2192 calls callback with element\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Variable name, path, or callback expression\n */\nexport default (el, state, expr) => {\n let result = parse(expr).call(el, state)\n if (typeof result === 'function') result(el)\n else setter(expr)(state, el)\n}\n", "import sprae, { store, untracked, frag, _state, _signals, signal } from '../core.js'\n\n/**\n * Scope directive - creates a child scope with local state.\n * Properties merge into a new scope inheriting from parent.\n * @param {Element} el - Target element\n * @param {Object} rootState - Parent state object\n * @returns {(values: Object | ((state: Object) => Object)) => void | boolean} Update function\n */\nexport default (el, rootState) => {\n // 0 run pre-creates state to provide scope for the first effect - it can write vars in it, so we should already have it\n // el[_state] even replaces own :scope effect state\n let state = el[_state] = store({}, rootState), init = false\n\n // <template :scope=\"{}\" /> or previously initialized template\n let holder, _frag = el.content && frag(el)\n if (_frag) el.replaceWith(holder = el.ownerDocument.createTextNode(''))\n\n // 1st run spraes subtree with values from scope, it can be postponed by modifiers (we isolate reads from parent effect)\n // 2nd+ runs update subscope\n return values => {\n values = typeof values === 'function' ? values(state) : values;\n\n // we bind to subscope to alleviate friction using scope method directly\n // also returned props should force-create signals in subscope, not overwriting parent\n if (values !== state) {\n for (let k in values) {\n // _add forces new prop, instead of checking parent\n let v = typeof values[k] === 'function' ? values[k].bind(state) : values[k]\n // update\n if (k in state[_signals]) state[k] = v\n // create\n else (state[_signals][k] = (k[0] == '_' || v?.peek) ? v : signal(store(v)))\n }\n }\n\n return !init && (init = true, !holder && (delete el[_state]), untracked(() => (holder?.before(_frag.content || el), sprae(_frag || el, state))))\n }\n}\n", "import sprae, { store, parse, _state, effect, _change, _signals, frag, throttle, debounce, mutate } from \"../core.js\";\n\n/**\n * Each directive - renders list items from array/object/number.\n * Syntax: `:each=\"item in items\"` or `:each=\"(item, idx) of items\"`\n * @param {HTMLTemplateElement | Element} tpl - Template element\n * @param {Object} state - State object\n * @param {string} expr - Iterator expression\n * @returns {{ eval: Function, [Symbol.dispose]: () => void }} Directive result\n */\nexport default (tpl, state, expr) => {\n const [lhs, rhs] = expr.split(/\\bin|of\\b/)\n\n let [itemVar, idxVar = \"$\"] = lhs.trim().replace(/\\(|\\)/g, '').split(/\\s*,\\s*/);\n\n // we need :if to be able to replace holder instead of tpl for :if :each case\n let doc = tpl.ownerDocument\n let holder = doc.createTextNode(\"\");\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n let update = throttle(() => mutate(() => {\n let i = 0, newItems = items, newl = newItems.length\n\n // plain array update, not store (signal with array) - updates full list\n if (cur && !cur[_change]) {\n for (let s of cur[_signals] || []) s[Symbol.dispose]()\n cur = null, prevl = 0\n }\n\n\n // delete\n if (newl < prevl) cur.length = newl\n\n // update, append, init\n else {\n // init\n if (!cur) cur = newItems\n // update\n else while (i < prevl) cur[i] = newItems[i++]\n\n // batch append using DocumentFragment for efficiency\n let batchSize = newl - i\n let batch = batchSize > 1 ? doc.createDocumentFragment() : null\n let pending = batch ? [] : null\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n\n let idx = i\n let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);\n // el.content is DocumentFragment for frag() output, el itself for cloneNode\n let insertNode = el.content || el\n\n // collect for batch insert\n if (batch) {\n batch.appendChild(insertNode)\n pending.push([ el, idx ])\n } else {\n holder.before(insertNode)\n let subscope = store({\n get [itemVar]() { return cur[idx] },\n [idxVar]: keys ? keys[idx] : idx\n }, state)\n sprae(el, subscope)\n }\n\n // signal/holder disposal removes element\n let _prev = ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose]\n cur[_signals][i][Symbol.dispose] = () => {\n _prev?.(), el[Symbol.dispose]?.(), el.remove()\n };\n }\n\n // batch insert all at once, then sprae\n if (batch) {\n holder.before(batch)\n for (let [el, idx] of pending) {\n let subscope = store({\n get [itemVar]() { return cur[idx] },\n [idxVar]: keys ? keys[idx] : idx\n }, state)\n sprae(el, subscope)\n }\n }\n }\n\n prevl = newl\n }))\n\n mutate(() => tpl.replaceWith(holder))\n tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n let disposeItems = () => { if (cur) { for (let s of cur[_signals] || []) s[Symbol.dispose]?.(); cur = null; prevl = 0 } }\n\n return Object.assign(value => {\n // resolve new items\n keys = null\n if (typeof value === \"number\") items = Array.from({ length: value }, (_, i) => i + 1)\n else if (value?.constructor === Object) keys = Object.keys(value), items = Object.values(value)\n else items = value || []\n\n // whenever list changes, we rebind internal change effect\n let off = effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact signals unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n update()\n })\n return () => { off(); disposeItems() }\n }, {eval:parse(rhs)})\n}\n", "import { attr, isCE } from \"../core.js\";\n\n/**\n * Default attribute directive - sets any attribute value.\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Attribute name\n * @returns {(v: any) => void} Update function\n */\nexport default (el, st, ex, name) => v => attr(el, name, typeof v === 'function' && !isCE(el) ? v(el.getAttribute(name)) : v)\n", "import { attr, dashcase, isCE } from \"../core.js\";\n\n/**\n * Spread directive - sets multiple attributes from object.\n * Keys are converted from camelCase to kebab-case.\n * @param {Element} target - Target element\n * @returns {(value: Record<string, any>) => void} Update function\n */\nexport default (target) => value => { let ce = isCE(target); for (let key in value) attr(target, ce ? key : dashcase(key), value[key]) }\n", "import { parse, decorate } from \"../core.js\"\n\n/**\n * Event directive - attaches event listeners with modifiers.\n * Syntax: `:onclick=\"handler\"` or `:onclick.prevent.stop=\"handler\"`\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Event name with modifiers (e.g., 'onclick.prevent')\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n // wrap inline cb into function\n // if (!/^(?:[\\w$]+|\\([^()]*\\))\\s*=>/.test(expr) && !/^function\\b/.test(expr)) expr = `()=>{${expr}}`;\n\n const [type, ...mods] = name.slice(2).split('.'),\n evaluate = parse(expr).bind(el),\n trigger = decorate(Object.assign(e => evaluate(state, (fn) => typeof fn === 'function' ? fn(e) : fn), { target: el }), mods);\n\n trigger.target.addEventListener(type, trigger, trigger)\n return {\n [Symbol.dispose]() {\n trigger.target.removeEventListener(type, trigger)\n trigger[Symbol.dispose]?.()\n }\n }\n}\n", "import { _dispose, parse, decorate } from \"../core.js\"\n\n/**\n * Sequence directive - chains event handlers.\n * Syntax: `:onclick..keyup.enter=\"handler\"` - click triggers, then waits for Enter.\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} names - Chained event names separated by `..`\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, names) => {\n let cur, // current step callback\n off // current step disposal\n\n const evaluate = parse(expr).bind(el)\n\n let steps = names.split('..').map((step, i, { length }) => step.split(':').reduce(\n (prev, str) => {\n const [name, ...mods] = str.slice(2).split('.')\n\n const next = (fn, e) => cur = typeof fn === 'function' ? fn(e) : fn\n const trigger = decorate(Object.assign(\n e => (!i ? evaluate(state, (fn) => next(fn, e)) : next(cur, e), off(), off = steps[(i + 1) % length]()),\n { target: el }\n ), mods)\n\n\n return (_poff) => (\n _poff = prev?.(),\n trigger.target.addEventListener(name, trigger, trigger),\n () => (_poff?.(), trigger.target.removeEventListener(name, trigger))\n )\n }, null)\n )\n\n off = steps[0]()\n\n return {\n [Symbol.dispose]() {\n off?.()\n }\n }\n}\n", "import sprae, { untracked, frag, _dispose, _state } from \"../core.js\"\n\nconst isTemplate = v => !!v?.content\n\n/**\n * HTML directive - sets innerHTML and initializes nested directives.\n * Supports templates for fragment insertion.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @param {Object} state - State object\n * @returns {(v: string | HTMLTemplateElement | ((html: string) => string)) => void | (() => void)} Update function\n */\nexport default (el, state) => {\n // <template :html=\"a\"/> - fragment case: use placeholder + frag\n if (el.content) {\n let _el, html = el.innerHTML,\n doc = el.ownerDocument,\n holder = el._holder\n\n if (!holder) el.replaceWith(holder = doc.createTextNode(''))\n\n return v => {\n if (typeof v === 'function') v = v(html)\n\n // :if case: remove current content from DOM\n if (el._holder) el.remove(), el.content.replaceChildren()\n _el?.[_dispose]?.()\n _el?.remove()\n\n if (v != null && v !== '') {\n _el = isTemplate(v)\n ? (html = v.innerHTML, frag(v))\n : frag((_el = doc.createElement('template'), _el.innerHTML = html = v, _el))\n\n untracked(() => sprae(_el, state))\n\n holder.before(_el.content)\n\n // :if case: update childNodes in-place for remove() closure\n if (el._holder) el.childNodes.splice(0, Infinity, ..._el.childNodes)\n\n return _el[_dispose]\n }\n else if (el._holder) el.childNodes.length = 0, html = ''\n }\n }\n\n return v => (\n v = typeof v === 'function' ? v(el.innerHTML) : v,\n isTemplate(v) ? el.replaceChildren(v.content.cloneNode(true)) : (el.innerHTML = v == null ? \"\" : v),\n el[_state] &&= null,\n untracked(() => sprae(el, state)),\n el[_dispose]\n )\n}\n", "/**\n * Portal directive - teleports element to another container.\n * Value can be selector string, element, or falsy to return home.\n * @param {Element} el - Element to teleport\n * @param {Object} state - State object\n * @param {string} expr - Expression\n * @returns {(value: string | Element | null | false) => void} Update function\n */\nexport default (el, state, expr) => {\n const doc = el.ownerDocument\n const comment = doc.createComment(':portal')\n let currentTarget = null\n\n // Insert placeholder before element\n el.before(comment)\n\n return (value) => {\n const root = el.getRootNode()\n const target = typeof value === 'string'\n ? (root.querySelector?.(value) || doc.querySelector(value))\n : value?.nodeType === 1 ? value\n : value ? doc.body : null\n\n if (target === currentTarget) return\n\n if (target) target.appendChild(el)\n else comment.after(el)\n\n currentTarget = target\n\n return () => { currentTarget && (comment.after(el), currentTarget = null) }\n }\n}\n", "/**\n * Hidden directive - toggles the hidden attribute.\n * @param {Element} el - Target element\n * @returns {(value: any) => boolean} Update function\n */\nexport default (el) => (value) => el.hidden = !!value\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Mount directive - lifecycle observer.\n * Runs once on connect. Function form receives element, can return cleanup.\n * Statement form runs directly.\n *\n * :mount=\"console.log('connected')\"\n * :mount=\"el => (setup(el), () => cleanup(el))\"\n * :mount=\"el => ref = el\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n const [, ...mods] = name.split('.'),\n evaluate = parse(expr).bind(el)\n\n let cleanup\n\n const trigger = decorate(Object.assign(() => {\n const result = evaluate(state, fn => typeof fn === 'function' ? fn(el) : fn)\n if (typeof result === 'function') cleanup = result\n }, { target: el }), mods)\n\n trigger()\n\n return {\n [_dispose]() {\n cleanup?.()\n cleanup = null\n }\n }\n}\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Change directive - normalized input write-back observer.\n * Handles type detection, coercion, caret preservation.\n *\n * :change=\"v => x = v\"\n * :change.debounce-300=\"v => query = v\"\n *\n * @param {Element} el - Form element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression (receives coerced value)\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n const [, ...mods] = name.split('.'),\n evaluate = parse(expr).bind(el)\n\n // coerce value from element based on input type\n const coerce =\n el.type === 'checkbox' ? () => el.checked :\n el.type === 'select-multiple' ? () => [...el.selectedOptions].map(o => o.value) :\n /^(date|time|month|week)/.test(el.type) ? () => el.value :\n () => el.selectedIndex < 0 ? null : isNaN(el.valueAsNumber) ? el.value : el.valueAsNumber\n\n const handler = decorate(Object.assign(() => {\n evaluate(state, fn => typeof fn === 'function' ? fn(coerce()) : fn)\n }, { target: el }), mods)\n\n el.addEventListener('input', handler)\n el.addEventListener('change', handler)\n\n return {\n [_dispose]() {\n el.removeEventListener('input', handler)\n el.removeEventListener('change', handler)\n }\n }\n}\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Intersect directive - IntersectionObserver wrapper.\n * Statement form fires on enter. Function form receives entry for full control.\n *\n * :intersect=\"visible = true\"\n * :intersect.once=\"loadImage()\"\n * :intersect=\"entry => visible = entry.isIntersecting\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nconst intersect = (el, state, expr, name) => {\n const [, ...mods] = name.split('.')\n const evaluate = parse(expr).bind(el)\n\n let once = mods.includes('once')\n\n const trigger = decorate(Object.assign((entry) => {\n evaluate(state, fn => typeof fn === 'function' ? fn(entry) : fn)\n }, { target: el }), mods)\n\n const io = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n trigger(entry)\n if (once) io.disconnect()\n }\n }\n })\n\n io.observe(el)\n\n return {\n [_dispose]() { io.disconnect() }\n }\n}\n\nintersect.observer = true\nexport default intersect\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Resize directive - ResizeObserver wrapper.\n * Function form receives {width, height, entry} object.\n *\n * :resize=\"({width, height}) => cols = Math.floor(width / 200)\"\n * :resize.throttle-100=\"({width}) => narrow = width < 600\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nconst resize = (el, state, expr, name) => {\n const [, ...mods] = name.split('.')\n const evaluate = parse(expr).bind(el)\n\n const trigger = decorate(Object.assign((size) => {\n evaluate(state, fn => typeof fn === 'function' ? fn(size) : fn)\n }, { target: el }), mods)\n\n const ro = new ResizeObserver(entries => {\n for (const entry of entries) {\n const rect = entry.contentRect\n trigger({ width: rect.width, height: rect.height, entry })\n }\n })\n\n ro.observe(el)\n\n return {\n [_dispose]() { ro.disconnect() }\n }\n}\n\nresize.observer = true\nexport default resize\n", "/**\n * @fileoverview Sprae - lightweight reactive HTML templating library\n * @module sprae\n */\n\nimport store from \"./store.js\";\nimport { batch, computed, effect, signal, untracked } from './core.js';\nimport * as signals from './signal.js';\nimport sprae, { use, decorate, directive, modifier, parse, throttle, debounce, _off, _state, _on, _dispose, _add, start, isCE } from './core.js';\n\nimport _if from \"./directive/if.js\";\nimport _else from \"./directive/else.js\";\nimport _text from \"./directive/text.js\";\nimport _class from \"./directive/class.js\";\nimport _style from \"./directive/style.js\";\nimport _fx from \"./directive/fx.js\";\nimport _value from \"./directive/value.js\";\nimport _ref from \"./directive/ref.js\";\nimport _scope from \"./directive/scope.js\";\nimport _each from \"./directive/each.js\";\nimport _default from \"./directive/_.js\";\nimport _spread from \"./directive/spread.js\";\nimport _event from \"./directive/event.js\";\nimport _seq from \"./directive/sequence.js\";\nimport _html from \"./directive/html.js\";\nimport _portal from \"./directive/portal.js\";\nimport _hidden from \"./directive/hidden.js\";\nimport _mount from \"./directive/mount.js\";\nimport _change from \"./directive/change.js\";\nimport _intersect from \"./directive/intersect.js\";\nimport _resize from \"./directive/resize.js\";\n\n\n// mark observers: they handle own modifiers, bypass reactive plumbing\n_mount.observer = _change.observer = true\n\nObject.assign(directive, {\n _: _default,\n '': _spread,\n class: _class,\n text: _text,\n html: _html,\n style: _style,\n fx: _fx,\n value: _value,\n ref: _ref,\n scope: _scope,\n if: _if,\n else: _else,\n each: _each,\n portal: _portal,\n hidden: _hidden,\n mount: _mount,\n change: _change,\n intersect: _intersect,\n resize: _resize,\n})\n\n\n/**\n * Directive initializer with modifiers support.\n * @param {Element} target - Target element\n * @param {string} name - Directive name with modifiers (e.g., 'onclick.throttle-500')\n * @param {string} expr - Expression string\n * @param {Object} state - Reactive state object\n * @returns {() => (() => void) | void} Initializer function that returns a disposer\n */\nconst dir = (target, name, expr, state) => {\n let [dirName, ...mods] = name.split('.'), create = directive[dirName] || directive._\n\n return () => {\n // decorate trigger to resolve target from modifiers (parent, root, body, etc.)\n let change = signal(0),\n\n // throttle prevents multiple updates within one tick as well as isolates stack for each update\n trigger = decorate(Object.assign(throttle(() => change.value++), { target }), mods),\n\n el = trigger.target ?? target\n\n let update = create(el, state, expr, dirName)\n\n if (!update?.call) return update?.[_dispose]\n\n let count = 0,\n evaluate = update.eval ?? parse(expr).bind(el),\n _out, out = () => (typeof _out === 'function' && _out(), _out=null) // effect trigger and invoke may happen in the same tick, so it will be effect-within-effect call - we need to store output of evaluate to return from trigger effect\n\n // use element's own state for expression evaluation, unless it's a custom element\n // (custom elements: directives are parent prop setters, must evaluate against parent state)\n if (!isCE(el)) state = el[_state] ?? state\n\n let off = effect(() => {\n const result = change.value == count ? (trigger()) : (count = change.value, _out = evaluate(state, update))\n return out\n })\n if (!(_state in el)) return off\n let _d = 0\n return () => { if (_d) return; _d = 1; off(); update[_off] ? update[_off]() : el[_dispose]?.() }\n }\n}\n\n// Parses time string to ms: 100, 100ms, 1s, 1m\nconst parseTime = (t) => !t ? 0 : typeof t === 'number' ? t :\n (([, n, u] = t.match(/^(\\d+)(ms|s|m)?$/) || []) => (n = +n, u === 's' ? n * 1000 : u === 'm' ? n * 60000 : n))()\n\n// Creates scheduler from time/keyword (idle, raf, tick, or ms)\nconst scheduler = (t) =>\n t === 'idle' ? requestIdleCallback :\n t === 'raf' ? requestAnimationFrame :\n !t || t === 'tick' ? queueMicrotask :\n (fn) => setTimeout(fn, parseTime(t))\n\n// Built-in modifiers for timing, targeting, and event handling\nObject.assign(modifier, {\n /**\n * Delays callback by interval since last call (trailing edge).\n * Supports: tick (default), raf, idle, N, Nms, Ns, Nm. Add -immediate for leading edge.\n * Examples: .debounce, .debounce-100, .debounce-1s, .debounce-raf, .debounce-idle, .debounce-100-immediate\n */\n debounce: (fn, a, b) => debounce(fn, scheduler(a === 'immediate' ? b : a), a === 'immediate' || b === 'immediate'),\n /**\n * Limits callback rate to interval (leading + trailing edges).\n * Supports: tick (default), raf, idle, N, Nms, Ns, Nm.\n * Examples: .throttle, .throttle-100, .throttle-1s, .throttle-raf, .throttle-idle\n */\n throttle: (fn, a) => throttle(fn, scheduler(a)),\n /** Runs callback after delay. Supports: tick (default), raf, idle, N, Nms, Ns, Nm. */\n delay: (fn, a) => ((sched = scheduler(a)) => (e) => sched(() => fn(e)))(),\n /** Shortcut for delay-tick (next microtask). */\n tick: (fn) => (e) => queueMicrotask(() => fn(e)),\n /** Shortcut for delay-raf (next animation frame). */\n raf: (fn) => (e) => requestAnimationFrame(() => fn(e)),\n\n /** Calls handler only once. */\n once: (fn, _done, _fn) => (_fn = (e) => !_done && (_done = 1, fn(e)), _fn.once = true, _fn),\n\n /** Attaches event listener to window. */\n window: fn => (fn.target = fn.target.ownerDocument.defaultView, fn),\n /** Attaches event listener to document. */\n document: fn => (fn.target = fn.target.ownerDocument, fn),\n /** Attaches event listener to document root element (<html>). */\n root: fn => (fn.target = fn.target.ownerDocument.documentElement, fn),\n /** Attaches event listener to body. */\n body: fn => (fn.target = fn.target.ownerDocument.body, fn),\n /** Attaches event listener to parent element. */\n parent: fn => (fn.target = fn.target.parentNode, fn),\n /** Triggers only when event target is the element itself. */\n self: (fn) => (e) => (e.target === fn.target && fn(e)),\n /** Triggers when event is outside the element. Ignores drag-out (pointerdown inside, pointerup outside). */\n away: (fn, _pd) => {\n let doc = fn.target.ownerDocument, pdHandler = e => _pd = e.target, _skip = doc.currentEvent || doc.defaultView?.event\n doc.addEventListener('pointerdown', pdHandler, true)\n return Object.assign(\n (e) => e !== _skip && !fn.target.contains(e.type === 'click' ? _pd ?? e.target : e.target) && e.target.isConnected && fn(e),\n { target: doc, [_dispose]: () => doc.removeEventListener('pointerdown', pdHandler, true) }\n )\n },\n\n /** Calls preventDefault() before handler. */\n prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),\n /** Calls stopPropagation() or stopImmediatePropagation() (with -immediate). */\n stop: (fn, _how) => (e) => (_how?.[0] === 'i' ? e?.stopImmediatePropagation() : e?.stopPropagation(), fn(e)),\n /** Sets passive option for event listener. */\n passive: fn => (fn.passive = true, fn),\n /** Sets capture option for event listener. */\n capture: fn => (fn.capture = true, fn),\n})\n/** Alias for .away modifier */\nmodifier.outside = modifier.away\n\n/**\n * Key testers for keyboard event modifiers.\n * @type {Record<string, (e: KeyboardEvent) => boolean>}\n */\nconst keys = {\n ctrl: e => e.ctrlKey || e.key === \"Control\" || e.key === \"Ctrl\",\n shift: e => e.shiftKey || e.key === \"Shift\",\n alt: e => e.altKey || e.key === \"Alt\",\n meta: e => e.metaKey || e.key === \"Meta\",\n cmd: e => e.metaKey || e.key === \"Command\",\n arrow: e => e.key?.startsWith(\"Arrow\"),\n enter: e => e.key === \"Enter\",\n esc: e => e.key?.startsWith(\"Esc\"),\n tab: e => e.key === \"Tab\",\n space: e => e.key === \"\u00A0\" || e.key === \"Space\" || e.key === \" \",\n delete: e => e.key === \"Delete\" || e.key === \"Backspace\",\n digit: e => /^\\d$/.test(e.key),\n letter: e => /^\\p{L}$/gu.test(e.key),\n char: e => /^\\S$/.test(e.key),\n};\n\n// match key by name, or by e.key (case-insensitive), or by keyCode (digits)\nconst keyMatch = (k, e) => keys[k]?.(e) || e.key?.toLowerCase() === k || e.keyCode == k\n\n// Augment modifiers with key testers (e.g., .enter, .ctrl, .ctrl-a, .ctrl-65)\nfor (let k in keys) modifier[k] = (fn, a, b) => (e) => keys[k](e) && (!a || keyMatch(a, e)) && (!b || keyMatch(b, e)) && fn(e)\n\n\n// Checks for first-level semicolons (statement vs expression)\nconst hasSemi = s => {\n let d = 0, q = '', esc = 0\n for (let ch of s) {\n if (q) {\n if (esc) esc = 0\n else if (ch === '\\\\') esc = 1\n else if (ch === q) q = ''\n continue\n }\n if (ch === ';' && !d) return true\n if (ch === '{') d++\n else if (ch === '}') d--\n else if (ch === '\"' || ch === \"'\" || ch === '`') q = ch\n }\n return false\n}\n\n// Configure sprae with default compiler and signals\nuse({\n\n// Default compiler wraps expression for new Function\n compile: expr => {\n // if, const, let - no return\n if (/^(if|let|const)\\b/.test(expr));\n // first-level semicolons - no return\n else if (hasSemi(expr));\n else expr = `return ${expr}`\n // async expression\n if (/\\bawait\\s/.test(expr)) expr = `return (async()=>{${expr}})()`\n return sprae.constructor(`with(arguments[0]){${expr}}`)\n },\n // these 2 exceptions might look inconsistent, but arguably that's the cleanest way to avoid coupling\n dir: (el, name, expr, state) => {\n // sequences: handle own modifiers, return dispose\n if (name.includes('..')) return () => _seq(el, state, expr, name)[_dispose]\n return name.split(':').reduce((prev, str) => {\n let dirName = str.split('.')[0]\n // events and observers handle own modifiers, return dispose\n let obs = directive[dirName]\n let start = str.startsWith('on') ? () => _event(el, state, expr, str)[_dispose]\n : obs?.observer ? () => obs(el, state, expr, str)[_dispose]\n : dir(el, str, expr, state)\n return !prev ? start : (p, s) => (p = prev(), s = start(), () => { p(); s() })\n }, null)\n },\n ...signals\n})\n\n\n// Expose for runtime configuration\nsprae.use = use\nsprae.store = store\nsprae.directive = directive\nsprae.modifier = modifier\n\n/**\n * Disposes a spraed element, cleaning up all effects and state.\n * @param {Element} el - Element to dispose\n */\nconst dispose = sprae.dispose = (el) => el[_dispose]?.()\n\n\nsprae.start = start\n\nexport default sprae\nexport { sprae, store, signal, effect, computed, batch, untracked, start, use, throttle, debounce, dispose }\n", "var sprae = require(\"./sprae.js\").default; module.exports = sprae; var cur = document.currentScript;\nvar prefix = cur.getAttribute(\"prefix\") ?? cur.dataset.prefix ?? cur.dataset.spraePrefix;\nvar start = cur.getAttribute(\"start\") ?? cur.dataset.start ?? cur.dataset.spraeStart;\ncur.removeAttribute(\"prefix\"); cur.removeAttribute(\"start\"); delete cur.dataset.prefix; delete cur.dataset.start; delete cur.dataset.spraePrefix; delete cur.dataset.spraeStart;\nif (prefix) sprae.use({ prefix });\nif (start != null && start !== 'false') (start && start !== 'true' ? document.querySelectorAll(start) : [document.body || document.documentElement]).forEach(el => sprae.start(el))"],
5
- "mappings": "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",
6
- "names": ["_dispose", "_state", "_on", "_off", "_add", "prefix", "isCE", "signal", "effect", "computed", "batch", "untracked", "directive", "modifier", "currentDir", "currentEl", "elHint", "err", "sprae", "dir", "compile", "parse", "cache", "use", "decorate", "mo", "mutate", "start", "frag", "dashcase", "camelcase", "attr", "clsx", "throttle", "debounce", "core_default", "init_core", "__esmMin", "init_store", "el", "fn", "hint", "expr", "msg", "display", "root", "state", "store_default", "fx", "offs", "off", "add", "_attrs", "i", "name", "value", "child", "next", "e", "cb", "_out", "result", "v", "config", "mods", "params", "mod", "wrapFn", "k", "values", "mutations", "m", "tpl", "doc", "content", "attributes", "ref", "childNodes", "str", "match", "_", "c", "s", "ms", "_planned", "arg", "schedule", "throttled", "dirty", "immediate", "_blocked", "_count", "_c", "_signals", "_change", "_set", "sandbox", "store", "list", "create", "set", "store_default", "init_store", "__esmMin", "init_core", "values", "parent", "keyCount", "signals", "state", "signal", "_", "k", "v", "descs", "computed", "isMut", "mut", "fn", "length", "i", "_s", "_v", "untracked", "batch", "signal_exports", "__export", "batch", "computed", "effect", "signal", "untracked", "current", "depth", "batched", "init_signal", "__esmMin", "v", "_s", "_obs", "_v", "val", "sub", "fn", "_teardown", "_fx", "_deps", "prev", "tmp", "dep", "_c", "_e", "_first", "_list", "fx", "_prev", "if_default", "init_if", "__esmMin", "init_core", "el", "state", "_a", "_b", "_holder", "_el", "core_default", "_state", "frag", "mutate", "throttle", "match", "s", "_off", "_on", "cb", "value", "else_default", "init_else", "__esmMin", "init_core", "el", "_a", "_el", "_prev", "frag", "_state", "text_default", "init_text", "__esmMin", "init_core", "el", "frag", "v", "s", "off", "pos", "r", "class_default", "init_class", "__esmMin", "init_core", "el", "st", "ex", "name", "_cur", "_new", "v", "c", "clsx", "style_default", "init_style", "__esmMin", "init_core", "el", "st", "ex", "name", "_static", "v", "attr", "k", "fx_default", "init_fx", "__esmMin", "fn", "value_default", "init_value", "__esmMin", "init_core", "el", "state", "core_default", "value", "_from", "_to", "attr", "v", "setter", "ref_default", "init_ref", "__esmMin", "init_core", "expr", "_set", "parse", "target", "value", "el", "state", "result", "scope_default", "init_scope", "__esmMin", "init_core", "el", "rootState", "state", "_state", "store", "init", "holder", "_frag", "frag", "values", "k", "v", "_signals", "signal", "untracked", "core_default", "each_default", "init_each", "__esmMin", "init_core", "tpl", "state", "expr", "lhs", "rhs", "itemVar", "idxVar", "doc", "holder", "cur", "keys", "items", "prevl", "update", "throttle", "mutate", "_a", "_b", "i", "newItems", "newl", "_change", "s", "_signals", "batch", "pending", "idx", "el", "frag", "insertNode", "subscope", "store", "core_default", "_prev", "_state", "disposeItems", "value", "_", "off", "effect", "parse", "__default", "init__", "__esmMin", "init_core", "el", "st", "ex", "name", "v", "attr", "isCE", "spread_default", "init_spread", "__esmMin", "init_core", "target", "value", "ce", "isCE", "key", "attr", "dashcase", "event_default", "init_event", "__esmMin", "init_core", "el", "state", "expr", "name", "type", "mods", "evaluate", "parse", "trigger", "decorate", "e", "fn", "sequence_default", "init_sequence", "__esmMin", "init_core", "el", "state", "expr", "names", "cur", "off", "evaluate", "parse", "steps", "step", "i", "length", "prev", "str", "name", "mods", "next", "fn", "e", "trigger", "decorate", "_poff", "isTemplate", "html_default", "init_html", "__esmMin", "init_core", "v", "el", "state", "_el", "html", "doc", "holder", "_dispose", "frag", "untracked", "core_default", "_a", "_state", "portal_default", "init_portal", "__esmMin", "el", "state", "expr", "doc", "comment", "currentTarget", "value", "root", "target", "hidden_default", "init_hidden", "__esmMin", "el", "value", "mount_default", "init_mount", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "cleanup", "decorate", "result", "fn", "_dispose", "change_default", "init_change", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "coerce", "o", "handler", "decorate", "fn", "_dispose", "intersect", "intersect_default", "init_intersect", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "once", "trigger", "decorate", "entry", "fn", "io", "entries", "_dispose", "resize", "resize_default", "init_resize", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "trigger", "decorate", "size", "fn", "ro", "entries", "entry", "rect", "_dispose", "sprae_exports", "__export", "batch", "computed", "debounce", "sprae_default", "dispose", "effect", "signal", "core_default", "start", "store_default", "throttle", "untracked", "use", "dir", "parseTime", "scheduler", "keys", "keyMatch", "hasSemi", "init_sprae", "__esmMin", "init_store", "init_core", "init_signal", "init_if", "init_else", "init_text", "init_class", "init_style", "init_fx", "init_value", "init_ref", "init_scope", "init_each", "init__", "init_spread", "init_event", "init_sequence", "init_html", "init_portal", "init_hidden", "init_mount", "init_change", "init_intersect", "init_resize", "mount_default", "change_default", "directive", "__default", "spread_default", "class_default", "text_default", "html_default", "style_default", "fx_default", "value_default", "ref_default", "scope_default", "if_default", "else_default", "each_default", "portal_default", "hidden_default", "intersect_default", "resize_default", "target", "name", "expr", "state", "dirName", "mods", "create", "change", "trigger", "decorate", "el", "update", "_dispose", "count", "evaluate", "parse", "_out", "out", "isCE", "_state", "off", "result", "_d", "_off", "t", "n", "u", "fn", "modifier", "a", "b", "sched", "e", "_done", "_fn", "_pd", "doc", "pdHandler", "_skip", "_how", "k", "s", "d", "q", "esc", "ch", "sequence_default", "prev", "str", "obs", "event_default", "p", "signal_exports", "sprae", "cur", "prefix", "start", "el"]
4
+ "sourcesContent": ["import store, { _change, _signals } from \"./store.js\";\n\n\n\n/** Symbol for disposal (using standard Symbol.dispose if available) */\nexport const _dispose = (Symbol.dispose ||= Symbol(\"dispose\"))\n\n/** Symbol for accessing element's reactive state */\nexport const _state = Symbol(\"state\")\n\n/** Symbol for enabling element effects */\nexport const _on = Symbol('on')\n\n/** Symbol for disabling element effects */\nexport const _off = Symbol('off')\n\n/** Symbol for adding child to element */\nexport const _add = Symbol('init')\n\n/** Directive prefix (default: ':') */\nexport let prefix = ':';\n\n/** Check if element is a custom element (has hyphen in tag name) */\nexport const isCE = (el) => el.localName?.includes('-')\n\n/**\n * A reactive signal containing a value.\n * @template T\n * @typedef {Object} Signal\n * @property {T} value - Current value (reading subscribes, writing notifies)\n * @property {() => T} peek - Read without subscribing\n * @property {() => T} valueOf - Get value for coercion\n * @property {() => T} toJSON - Get value for JSON serialization\n * @property {() => string} toString - Get value as string\n */\n\n/**\n * Internal effect function type.\n * @typedef {Object} EffectFn\n * @property {Set<Set<EffectFn>>} deps - Dependency sets\n * @property {() => void} fn - Original function\n */\n\n/**\n * Creates a reactive signal.\n * @template T\n * @type {<T>(value: T) => Signal<T>}\n */\nexport let signal;\n\n/**\n * Creates a reactive effect that re-runs when dependencies change.\n * @type {(fn: () => void | (() => void)) => () => void}\n */\nexport let effect;\n\n/**\n * Creates a computed signal derived from other signals.\n * @template T\n * @type {<T>(fn: () => T) => Signal<T>}\n */\nexport let computed;\n\n/**\n * Batches multiple signal updates into a single notification.\n * @template T\n * @type {<T>(fn: () => T) => T}\n */\nexport let batch = (fn) => fn();\n\n/**\n * Runs a function without tracking signal dependencies.\n * @template T\n * @type {<T>(fn: () => T) => T}\n */\nexport let untracked = batch;\n\n/**\n * Registry of directive handlers.\n * @type {Record<string, DirectiveHandler>}\n */\nexport let directive = {};\n\n/**\n * Registry of modifier functions.\n * @type {Record<string, ModifierHandler>}\n */\nexport let modifier = {}\n\n\nlet currentDir = null;\nlet currentEl = null;\n\n/**\n * Formats element for error message (minimal context).\n * @param {Element} [el] - Element to format\n * @returns {string} Element hint like \"<div#id.class>\"\n */\nconst elHint = (el) => {\n if (!el?.tagName) return ''\n let hint = el.tagName.toLowerCase()\n if (el.id) hint += '#' + el.id\n else if (el.className) hint += '.' + el.className.split(' ')[0]\n return `<${hint}>`\n}\n\n/**\n * Reports an error with context.\n * @param {Error|string} e - Error to report\n * @param {string} [expr] - Expression that caused error\n */\nconst err = (e, expr, el = currentEl) => {\n let msg = `\u2234 ${e}`\n if (el) msg += `\\n in ${elHint(el)}`\n if (expr) {\n const display = expr.length > 100 ? expr.slice(0, 80) + `\u2026 (${expr.length} chars)` : expr\n msg += currentDir ? `\\n ${currentDir}=\"${display}\"` : `\\n =\"${display}\"`\n }\n console.error(msg)\n}\n\n/**\n * @callback DirectiveHandler\n * @param {Element} el - Target element\n * @param {Object} state - Reactive state object\n * @param {string} expr - Expression string\n * @param {string} [name] - Directive name with modifiers\n * @returns {((value: any) => void | (() => void)) | { [Symbol.dispose]: () => void } | void}\n */\n\n/**\n * @callback ModifierHandler\n * @param {Function} fn - Function to modify\n * @param {...string} args - Modifier arguments (from dash-separated values)\n * @returns {Function}\n */\n\n/**\n * @typedef {Object} SpraeState\n * @property {Record<string, Signal>} [_signals] - Internal signals map\n */\n\n/**\n * Applies directives to an HTML element and manages its reactive state.\n *\n * @param {Element} [el=document.body] - The target HTML element to apply directives to.\n * @param {Object} [state] - Initial state values to populate the element's reactive state.\n * @returns {SpraeState & Object} The reactive state object associated with the element.\n */\nconst sprae = (root = document.body, state) => {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (root[_state]) return Object.assign(root[_state], state)\n\n // console.group('sprae', root)\n\n // take over existing state instead of creating a clone\n state = store(state || {})\n\n let el = root, fx = [], offs = []\n\n // on/off all effects\n // we don't call prevOn as convention: everything defined before :else :if won't be disabled by :if\n // imagine <x :onx=\"...\" :if=\"...\"/> - when :if is false, it disables directives after :if (calls _off) but ignores :onx\n el[_on] = () => (!offs && (offs = fx.map(fn => fn())))\n el[_off] = () => (offs?.map(off => off?.()), offs = null)\n\n // destroy\n el[_dispose] ||= () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_add] = el[_state] = null)\n\n const add = el[_add] = (el) => {\n let _attrs = el.attributes, start;\n\n if (_attrs) for (let i = 0; i < _attrs.length;) {\n let { name, value } = _attrs[i]\n\n if (name.startsWith(prefix)) {\n el.removeAttribute(name)\n\n let prev = el[_state]\n currentDir = name;\n currentEl = el;\n\n // directive initializer can be redefined\n fx.push(start = dir(el, name.slice(prefix.length), value, state)), offs.push(start())\n\n // stop after subsprae directives (:each, :if, :scope) that change element's state identity\n if (el[_state] !== prev) return\n } else i++\n }\n\n // custom elements own their children \u2014 don't descend\n if (el !== root && isCE(el)) return\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n // real DOM: firstChild/nextSibling avoids array copy; frag.childNodes is already snapshot array\n if (el.firstChild !== undefined) {\n let child = el.firstChild, next\n while (child) (next = child.nextSibling, child.nodeType == 1 && add(child), child = next)\n }\n else for (let child of el.childNodes) child.nodeType == 1 && add(child)\n };\n\n add(el);\n\n currentDir = currentEl = null;\n\n // if element was spraed by inline :with/:if/:each/etc instruction (meaning it has state placeholder) - skip, otherwise save _state\n // CE roots: don't claim _state \u2014 CE manages its own via connectedCallback (parent processes attrs, CE processes children)\n if (el[_state] === undefined && !isCE(root)) el[_state] = state\n\n // console.groupEnd()\n\n return state;\n}\n\n/** Package version (injected by bundler) */\nsprae.version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'dev'\n\n\n// directive initializer\n/** @type {(el: Element, name: string, expr: string, state: Object) => () => (() => void) | void} */\nexport let dir\n\n/**\n * Compiles an expression string into an evaluator function.\n * @type {(expr: string) => (state: Object) => any}\n */\nexport let compile\n\n/**\n * Parses an expression into an evaluator function, caching the result for reuse.\n *\n * @param {string} expr - The expression to parse and compile into a function.\n * @returns {(state: Object, cb?: (value: any) => any) => any} The compiled evaluator function for the expression.\n */\nexport const parse = (expr) => {\n let fn = cache[expr=expr.trim()]\n if (fn) return fn\n\n // static time errors\n try {\n fn = compile(expr || 'undefined')\n // Object.defineProperty(fn, \"name\", { value: `\u2234 ${expr}` })\n } catch (e) { err(e, expr) }\n\n // run time errors\n return cache[expr] = function (state, cb, _out) {\n try {\n let result = fn?.call(this, state)\n // if cb is given (to handle async/await exprs, usually directive update) - call it with result and return a cleanup function\n if (cb) return result?.then\n ? (result.then(v => _out = cb(v)).catch(e => err(e, expr, this)), () => typeof _out === 'function' && _out())\n : cb(result)\n else return result\n } catch (e) {\n err(e, expr, this)\n }\n }\n}\nconst cache = {};\n\n\n/**\n * @typedef {Object} SpraeConfig\n * @property {(expr: string) => (state: Object) => any} [compile] - Custom expression compiler\n * @property {string} [prefix] - Directive prefix (default: ':')\n * @property {<T>(value: T) => Signal<T>} [signal] - Signal factory\n * @property {(fn: () => void | (() => void)) => () => void} [effect] - Effect factory\n * @property {<T>(fn: () => T) => Signal<T>} [computed] - Computed factory\n * @property {<T>(fn: () => T) => T} [batch] - Batch function\n * @property {<T>(fn: () => T) => T} [untracked] - Untracked function\n * @property {(el: Element, name: string, expr: string, state: Object) => () => (() => void) | void} [dir] - Directive initializer\n */\n\n/**\n * Configure sprae with custom signals, compiler, or prefix.\n * @param {SpraeConfig} config - Configuration options\n * @returns {void}\n */\nexport const use = (config) => (\n config.compile && (compile = config.compile),\n config.prefix && (prefix = config.prefix),\n config.signal && (signal = config.signal),\n config.effect && (effect = config.effect),\n config.computed && (computed = config.computed),\n config.batch && (batch = config.batch),\n config.untracked && (untracked = config.untracked),\n config.dir && (dir = config.dir)\n)\n\n/**\n * Applies modifiers to a function.\n * @param {Function & { target?: Element }} fn - Function to decorate\n * @param {string[]} mods - Modifier names with arguments (e.g., ['throttle-500', 'prevent'])\n * @returns {Function} Decorated function\n */\nexport const decorate = (fn, mods) => {\n while (mods.length) {\n let [name, ...params] = mods.pop().split('-'), mod = modifier[name], wrapFn\n if (mod) {\n if ((wrapFn = mod(fn, ...params)) !== fn) {\n for (let k in fn) wrapFn[k] ??= fn[k];\n fn = wrapFn\n }\n }\n }\n return fn\n}\n\n\n/** MutationObserver reference, set by sprae.start() */\nexport let mo = null\n/** Pauses MO during DOM mutations to prevent disposing managed elements */\nexport const mutate = (fn) => { mo?.disconnect(); fn(); mo?.observe(mo._root, { childList: true, subtree: true }) }\n\n/**\n * Auto-initializes sprae on dynamically added elements.\n * Uses MutationObserver to detect new DOM nodes and apply directives.\n *\n * @param {Element} [root=document.body] - Root element to observe\n * @param {Object} [values] - Initial state values\n * @returns {Object} The reactive state object\n *\n * @example\n * ```js\n * // Auto-init on page load\n * sprae.start(document.body, { count: 0 })\n * ```\n */\nexport const start = (root = document.body, values) => {\n const state = store(values)\n sprae(root, state);\n mo = new MutationObserver(mutations => {\n for (const m of mutations) {\n for (const el of m.addedNodes) {\n // el can be spraed or removed by subsprae (like within :each/:if)\n if (el.nodeType === 1 && el[_state] === undefined && root.contains(el)) {\n // even if element has no spraeable attrs, some of its children can have\n root[_add](el)\n }\n }\n for (const el of m.removedNodes) {\n // Only dispose if element is truly removed from document\n if (el.nodeType === 1 && !root.contains(el)) el[_dispose]?.()\n }\n }\n });\n mo._root = root\n mo.observe(root, { childList: true, subtree: true });\n return state\n}\n\n/**\n * @typedef {Object} FragmentLike\n * @property {Document} ownerDocument - The owner document\n * @property {Node[]} childNodes - Child nodes of the fragment\n * @property {DocumentFragment} content - The document fragment content\n * @property {() => void} remove - Remove the fragment from DOM\n * @property {(el: Node) => void} replaceWith - Replace the fragment with an element\n * @property {Attr[]} attributes - Attributes from the original template\n * @property {(name: string) => void} removeAttribute - Remove an attribute\n */\n\n/**\n * Creates a fragment holder from a template element with minimal API surface.\n * @param {HTMLTemplateElement | FragmentLike} tpl - Template element or existing fragment\n * @returns {FragmentLike} Fragment-like object\n */\nexport const frag = (tpl) => {\n if (!tpl.nodeType) return tpl // existing tpl\n\n let doc = tpl.ownerDocument,\n content = tpl.content.cloneNode(true), // document fragment holder of content\n attributes = [...tpl.attributes],\n ref = doc.createTextNode(''),\n // ensure at least one node\n childNodes = (content.append(ref), [...content.childNodes])\n\n return {\n ownerDocument: doc,\n childNodes,\n content,\n remove: () => content.append(...childNodes),\n replaceWith(el) {\n if (el === ref) return\n ref.before(el)\n content.append(...childNodes)\n },\n attributes,\n removeAttribute(name) { attributes.splice(attributes.findIndex(a => a.name === name), 1) },\n }\n}\n\n/**\n * Converts camelCase to kebab-case.\n * @param {string} str - String to convert\n * @returns {string} Kebab-case string\n */\nexport const dashcase = (str) => str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n\n/**\n * Sets or removes an attribute on an element.\n * @param {Element} el - Target element\n * @param {string} name - Attribute name\n * @param {string | boolean | null | undefined} v - Attribute value (null/false removes, true sets empty)\n * @returns {void}\n */\nconst camelcase = (str) => str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n\nexport const attr = (el, name, v) => (v == null || v === false) ? el.removeAttribute(name) :\n isCE(el) ? (el[camelcase(name)] = v) :\n el.setAttribute(name, v === true ? \"\" : v);\n\n/**\n * Converts class input to className string (like clsx/classnames).\n * @param {string | string[] | Record<string, boolean> | null | undefined} c - Class input\n * @returns {string} Space-separated class string\n */\nexport const clsx = (c) => !c ? '' : typeof c === 'string' ? c : (\n Array.isArray(c) ? c.map(clsx) :\n Object.entries(c).reduce((s, [k, v]) => (v && s.push(k), s), [])\n).join(' ')\n\n/**\n * Throttles a function to run at most once per tick (or custom scheduler).\n * Fires on leading edge, then on trailing edge if called during throttle.\n * @template {Function} T\n * @param {T} fn - Function to throttle\n * @param {number|Function} [ms] - Delay in ms or scheduler function (default: microtask)\n * @returns {T} Throttled function\n */\nexport const throttle = (fn, ms) => {\n let _planned = 0, _depth = 0, arg, schedule = typeof ms === 'function' ? ms : ms ? (fn) => setTimeout(fn, ms) : queueMicrotask;\n const throttled = (e) => {\n arg = e\n if (!_planned++) fn(arg), schedule(() => {\n let dirty = _planned > 1\n _planned = 0\n if (dirty) {\n if (++_depth > 50) { _depth = 0; console.error('\u2234 Reactive loop detected'); return }\n throttled(arg)\n } else _depth = 0\n });\n }\n return throttled;\n}\n\n/**\n * Debounces a function to run after a delay since the last call.\n * @template {Function} T\n * @param {T} fn - Function to debounce\n * @param {number|Function} [ms] - Delay in ms or scheduler function (default: microtask)\n * @param {boolean} [immediate=false] - Fire on leading edge instead of trailing\n * @returns {T} Debounced function\n */\nexport const debounce = (fn, ms, immediate) => {\n let schedule = typeof ms === 'function' ? ms : ms ? (fn) => setTimeout(fn, ms) : queueMicrotask;\n return immediate\n ? ((_blocked) => (arg) => !_blocked && (fn(arg), _blocked = 1, schedule(() => _blocked = 0)))()\n : ((_count = 0) => (arg, _c = ++_count) => schedule(() => _c == _count && fn(arg)))()\n}\n\nexport * from './store.js';\n\nexport default sprae\n", "/**\n * @fileoverview Signals-powered reactive proxy store\n * @module sprae/store\n */\n\nimport { signal, computed, batch, untracked } from './core.js'\n\n/** Symbol for accessing the internal signals map */\nexport const _signals = Symbol('signals')\n\n/** Symbol for the change signal that tracks object keys or array length */\nexport const _change = Symbol('change')\n\n/** Symbol for stashed setter on computed values */\nexport const _set = Symbol('set')\n\n// a hack to simulate sandbox for `with` in evaluator\nlet sandbox = true\n\n/**\n * Reactive store with signals backing.\n * @template T\n * @typedef {T & { [_signals]: Record<string | symbol, import('./core.js').Signal<any>> }} ReactiveStore\n */\n\n/**\n * Creates a reactive proxy store from an object or array.\n * Properties become signals for fine-grained reactivity.\n * Supports nested objects, arrays, computed getters, and methods.\n *\n * @template {Object} T\n * @param {T} values - Initial values object\n * @param {Object} [parent] - Parent scope for inheritance\n * @returns {ReactiveStore<T>} Reactive proxy store\n *\n * @example\n * const state = store({ count: 0, get doubled() { return this.count * 2 } })\n * state.count = 5 // triggers updates\n * state.doubled // 10 (computed)\n */\nexport const store = (values, parent) => {\n if (!values) return values\n\n // ignore globals\n // FIXME: handle via has trap\n if (values[Symbol.toStringTag]) return values;\n\n // bypass existing store\n if (values[_signals]) return values\n\n // non-objects: for array redirect to list\n if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values\n\n // _change stores total number of keys to track new props\n let keyCount = Object.keys(values).length,\n signals = {}\n\n // proxy conducts prop access to signals\n let state = new Proxy(Object.assign(signals, {\n [_change]: signal(keyCount),\n [_signals]: signals\n }), {\n get: (_, k) => {\n if (k in signals) {\n // raw methods (no prototype) - bind to state for consistent `this`\n if (signals.hasOwnProperty(k) && typeof signals[k] === 'function' && !signals[k].prototype) return signals[k].bind(state)\n return (signals[k] ? signals[k].valueOf() : signals[k])\n }\n if (parent) {\n return parent[k]\n }\n return (typeof globalThis[k] === 'function' && !globalThis[k].prototype ? globalThis[k].bind(globalThis) : globalThis[k])\n },\n\n set: (_, k, v) => {\n // console.group('SET', k, v)\n if (k in signals) return set(signals, k, v), 1\n\n // turn off sandbox to check if parents have the prop - we don't want to create new prop in global scope\n sandbox = false\n\n // write transparency for parent scope, unlike prototype chain\n // if prop is defined in parent scope (except global) - write there\n if (parent && k in parent) {\n parent[k] = v\n }\n // else create in current scope\n else {\n create(signals, k, v)\n signals[_change].value = ++keyCount\n }\n\n sandbox = true\n\n // console.groupEnd()\n // bump length for new signal\n return 1\n },\n\n // FIXME: try to avild calling Symbol.dispose here. Maybe _delete method?\n deleteProperty: (_, k) => {\n k in signals && (k[0] != '_' && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount)\n return 1\n },\n\n // subscribe to length when spreading\n ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),\n\n // sandbox prevents writing to global\n has: (_, k) => {\n if (k in signals) return true\n if (parent) return k in parent\n return sandbox\n }\n })\n\n // init signals for values\n const descs = Object.getOwnPropertyDescriptors(values)\n\n for (let k in values) {\n // getter turns into computed\n if (descs[k]?.get)\n // stash setter\n (signals[k] = computed(descs[k].get.bind(state)))[_set] = descs[k].set?.bind(state);\n\n // init blank signal - make sure we don't take prototype one\n else create(signals, k, values[k])\n }\n\n return state\n}\n\n/**\n * Creates a reactive array store with lazy signal initialization.\n * Arrays can be large, so signals are created on-demand.\n * @param {any[]} values - Initial array values\n * @param {Object} [parent=globalThis] - Parent scope\n * @returns {ReactiveStore<any[]>} Reactive array proxy\n */\nconst list = (values, parent = globalThis) => {\n\n // gotta fill with null since proto methods like .reduce may fail\n let signals = Array(values.length).fill(null),\n\n // if .length was accessed from mutator (.push/etc) method\n isMut = false,\n\n // since array mutator methods read .length internally only once, we disable it on the moment of call, allowing rest of operations to be reactive\n mut = fn => function () { isMut = true; return fn.apply(this, arguments); },\n\n length = signal(values.length),\n\n // proxy passes prop access to signals\n state = new Proxy(\n Object.assign(signals, {\n [_change]: length,\n [_signals]: signals,\n // patch mutators\n push: mut(signals.push),\n pop: mut(signals.pop),\n shift: mut(signals.shift),\n unshift: mut(signals.unshift),\n splice: mut(signals.splice),\n }),\n {\n get(_, k) {\n // console.log('GET', k, isMut)\n\n // if .length is read within mutators - peek signal to avoid recursive subscription\n // we need to ignore it only once and keep for the rest of the mutator call\n if (k === 'length') return isMut ? (isMut = false, signals.length) : length.value;\n\n // non-numeric\n if (typeof k === 'symbol' || isNaN(k)) return signals[k]?.valueOf() ?? parent[k];\n\n // create signal (lazy)\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n return (signals[k] ??= signal(store(values[k]))).valueOf()\n },\n\n set(_, k, v) {\n // console.log('SET', k, v)\n\n // .length\n if (k === 'length') {\n // force cleaning up tail\n for (let i = v; i < signals.length; i++) delete state[i]\n // .length = N directly\n length.value = signals.length = v;\n }\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n else if (k >= signals.length) create(signals, k, v), state.length = +k + 1\n\n // existing signal\n else signals[k] ? set(signals, k, v) : create(signals, k, v)\n\n return 1\n },\n\n // dispose notifies any signal deps, like :each\n deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1),\n })\n\n return state\n}\n\n/**\n * Creates a signal for a property value.\n * Skips wrapping for untracked props (underscore prefix), existing signals, and functions.\n * @param {Object} signals - Signals storage object\n * @param {string} k - Property key\n * @param {any} v - Property value\n */\nconst create = (signals, k, v) => (signals[k] = (k[0] == '_' || v?.peek || typeof v === 'function') ? v : signal(store(v)))\n\n/**\n * Updates a signal value, handling arrays specially for efficient patching.\n * @param {Object} signals - Signals storage object\n * @param {string} k - Property key\n * @param {any} v - New value\n */\nconst set = (signals, k, v, _s, _v) => {\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n return k[0] === '_' || typeof signals[k] === 'function' ? (signals[k] = v) :\n (v !== (_v = (_s = signals[k]).peek?.() ?? _s)) && (\n // stashed _set for value with getter/setter\n _s[_set] ? _s[_set](v) :\n // patch array\n Array.isArray(v) && Array.isArray(_v) ?\n // if we update plain array (stored in signal) - take over value instead\n // since input value can be store, we have to make sure we don't subscribe to its length or values\n // FIXME: generalize to objects\n _change in _v ?\n untracked(() => batch(() => {\n for (let i = 0; i < v.length; i++) _v[i] = v[i]\n _v.length = v.length // forces deleting tail signals\n })) :\n (_s.value = v) :\n // .x = y\n (_s.value = store(v))\n )\n}\n\n\n// make sure state contains first element of path, eg. `a` from `a.b[c]`\n// NOTE: we don't need since we force proxy sandbox\n// export const ensure = (state, expr, _name = expr.match(/^\\w+(?=\\s*(?:\\.|\\[|$))/)) => _name && (state[_signals][_name[0]] ??= null)\n\nexport default store\n", "/**\n * @fileoverview Minimal signals implementation (preact-signals compatible)\n * @module sprae/signal\n */\n\n/** @type {import('./core.js').EffectFn | null} */\nlet current\n\nlet depth = 0\n\n/** @type {Set<import('./core.js').EffectFn> | null} */\nlet batched;\n\n/**\n * Creates a reactive signal.\n * @template T\n * @param {T} v - Initial value\n * @returns {import('./core.js').Signal<T>}\n */\nexport const signal = (v, _s, _obs = new Set, _v = () => _s.value) => (\n _s = {\n get value() {\n current?.deps.add(_obs.add(current));\n return v\n },\n set value(val) {\n if (val === v) return\n v = val;\n for (let sub of _obs) batched ? batched.add(sub) : sub(); // notify effects\n },\n peek() { return v },\n toJSON: _v, toString: _v, valueOf: _v\n }\n)\n\n/**\n * Creates a reactive effect that re-runs when dependencies change.\n * @param {() => void | (() => void)} fn - Effect function, may return cleanup\n * @returns {() => void} Dispose function\n */\nexport const effect = (fn, _teardown, _fx, _deps) => (\n _fx = (prev) => {\n let tmp = _teardown;\n _teardown = null;\n tmp?.call?.();\n prev = current, current = _fx\n if (depth++ > 50) {\n depth--; current = prev;\n // dispose: unsubscribe from all deps so this effect never fires again\n _teardown = fn = _fx.fn = null; for (let dep of _deps) dep.delete(_fx); _deps.clear()\n console.error('\u2234 Reactive loop detected'); return\n }\n try { _teardown = fn() } finally { current = prev; depth-- }\n },\n _fx.fn = fn,\n _deps = _fx.deps = new Set(),\n\n _fx(),\n (dep) => { _teardown?.call?.(); _teardown = fn = _fx.fn = null; for (dep of _deps) dep.delete(_fx); _deps.clear() }\n)\n\n/**\n * Creates a computed signal derived from other signals.\n * @template T\n * @param {() => T} fn - Computation function\n * @returns {import('./core.js').Signal<T>}\n */\nexport const computed = (fn, _s = signal(), _c, _e, _v = () => _c.value) => (\n _c = {\n get value() {\n _e ||= effect(() => _s.value = fn());\n return _s.value\n },\n peek: _s.peek,\n toJSON: _v, toString: _v, valueOf: _v\n }\n)\n\n/**\n * Batches multiple signal updates into a single notification.\n * @template T\n * @param {() => T} fn - Function containing updates\n * @returns {T}\n */\nexport const batch = (fn, _first = !batched, _list) => {\n batched ??= new Set;\n try { fn(); }\n finally { if (_first) { [batched, _list] = [null, batched]; for (const fx of _list) fx(); } }\n}\n\n/**\n * Runs a function without tracking dependencies.\n * @template T\n * @param {() => T} fn - Function to run untracked\n * @returns {T}\n */\nexport const untracked = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v)\n\n", "import sprae, { throttle, _on, _off, _state, frag, mutate } from '../core.js';\n\n/**\n * Conditional directive - shows/hides element based on condition.\n * Works with :else and :else :if for branching.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @param {Object} state - State object\n * @returns {(value: any) => void} Update function\n */\nexport default (el, state) => {\n let _holder, _el\n\n // new element :if\n if (!el._holder) {\n // mark el as fake-spraed to delay init, since we sprae rest when branch matches, both :if and :else :if\n el[_state] ??= null\n\n _el = el.content ? frag(el) : el\n _el[_state] ??= null // mark _el (frag) as needing sprae\n\n mutate(() => el.replaceWith(_holder = el.ownerDocument.createTextNode('')))\n _el._holder = _holder._holder = _holder\n\n\n _holder._clauses = [_el._clause = [_el, false]]\n _holder._match = null\n\n _holder.update = throttle(() => {\n let match = _holder._clauses.find(([, s]) => s)\n\n if (match != _holder._match) {\n mutate(() => {\n _holder._match?.[0].remove()\n _holder._match?.[0][_off]?.()\n if (_holder._match = match) {\n _holder.before(_holder._match[0].content || _holder._match[0])\n // check if element needs initial sprae (null) vs just re-enabling (_on)\n !_holder._match[0][_state] ? (delete _holder._match[0][_state], sprae(_holder._match[0], state)) : _holder._match[0][_on]?.()\n }\n })\n }\n })\n }\n // :else :if needs to be spraed all over to have clean list of offable effects\n else sprae(_el = el, state)\n\n // :else may have children to init which is called after :if\n // or preact can schedule :else after :if, so we ensure order of call by next tick\n let cb = value => {\n _el._clause[1] = value\n _el._holder.update()\n }\n cb[_off] = () => { _el._holder._match?.[0][_off]?.(); _el._holder._match = null }\n return cb\n}\n", "import { _on, _off, _state, frag } from '../core.js';\n\n/**\n * Else directive - conditional branch following :if.\n * Can be used as `:else` or `:else :if=\"condition\"`.\n * @param {Element | HTMLTemplateElement} el - Element with directive\n * @returns {() => void} Update function\n */\nexport default (el) => {\n let _el, _prev = el\n\n _el = el.content ? frag(el) : el\n _el[_state] ??= null // mark _el (frag) as needing sprae\n\n // find holder\n while (_prev && !(_el._holder = _prev._holder)) _prev = _prev.previousSibling\n\n el.remove()\n el[_state] = null // mark as fake-spraed to stop further init, to lazy-sprae when branch matches\n\n _el._holder._clauses.push(_el._clause = [_el, true])\n\n return _el._holder.update\n}\n", "import { frag } from \"../core.js\"\n\n/**\n * Text directive - sets textContent reactively.\n * Preserves caret/selection position across updates.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @returns {(v: any) => void} Update function\n */\nexport default el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n v => {\n v = typeof v === 'function' ? v(el.textContent) : v\n v = v == null ? \"\" : \"\" + v\n let cur = el.textContent\n if (cur === v) return\n\n // append-only: reuse text node, skip caret save/restore\n let node = el.firstChild\n if (node && v.startsWith(cur)) { node.appendData(v.slice(cur.length)); return }\n\n // save caret position\n let s = el.getRootNode().getSelection?.()\n let off = s?.rangeCount && el.contains(s.anchorNode) ? s.getRangeAt(0).startOffset : -1\n\n el.textContent = v\n\n // restore caret\n if (off >= 0 && el.firstChild) {\n let pos = Math.min(off, el.firstChild.textContent.length)\n let r = new Range()\n r.setStart(el.firstChild, pos)\n r.collapse(true)\n s.removeAllRanges()\n s.addRange(r)\n }\n }\n)\n", "import { clsx } from \"../core.js\";\n\n/**\n * Class directive - manages CSS classes reactively.\n * Supports strings, arrays, and objects (like clsx/classnames).\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Directive name with modifiers\n * @returns {(v: string | string[] | Record<string, boolean>) => void} Update function\n */\nexport default (el, st, ex, name) => {\n let _cur = new Set, _new\n\n return (v) => {\n _new = new Set\n if (v) for (let c of clsx(typeof v === 'function' ? v(el.className) : v).split(' ')) c && _new.add(c)\n for (let c of _cur) if (!_new.has(c)) el.classList.remove(c);\n for (let c of _new) if (!_cur.has(c)) el.classList.add(c);\n if (!el.classList.length) el.removeAttribute('class')\n _cur = _new\n }\n}\n", "import { attr } from \"../core.js\";\n\n/**\n * Style directive - sets inline styles reactively.\n * Accepts string or object. Preserves static styles.\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Directive name with modifiers\n * @returns {(v: string | Record<string, string> | ((style: CSSStyleDeclaration) => any)) => void} Update function\n */\nexport default (el, st, ex, name) => {\n let _static;\n\n return v => {\n if (_static === undefined) _static = el.getAttribute(\"style\") ?? \"\"\n v = typeof v === \"function\" ? v(el.style) : v\n if (typeof v === \"string\") attr(el, \"style\", _static ? _static + '; ' + v : v)\n else {\n if (_static) attr(el, \"style\", _static);\n // NOTE: we skip names not starting with a letter - eg. el.style stores properties as { 0: --x } or JSDOM has _pfx\n for (let k in v) k[0] == '-' ? el.style.setProperty(k, v[k]) : k[0] >= 'A' && (el.style[k] = v[k])\n }\n }\n}\n", "/**\n * Effect directive - runs side effects.\n * Calls function result if expression evaluates to a function.\n * @returns {(fn: any) => any} Update function\n */\nexport default () => (fn) => typeof fn === 'function' && fn()\n", "import sprae, { attr, _dispose } from \"../core.js\";\n\n/**\n * Value directive - one-way binding (state \u2192 DOM).\n * Sets element value/checked/selected from state.\n * For write-back (DOM \u2192 state), use :change directive.\n *\n * @param {HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement} el - Form element\n * @param {Object} state - State object\n * @returns {(value: any) => void} Update function\n */\nexport default (el, state) => {\n // select elements need children spraed first (for :each options)\n if (el.type?.startsWith('select')) sprae(el, state)\n\n return (el.type === \"text\" || el.type === \"\" || el.tagName === \"TEXTAREA\") ?\n (value, _from, _to) => (\n _from = el.selectionStart,\n _to = el.selectionEnd,\n el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)),\n _from && el.setSelectionRange(_from, _to)\n ) :\n (el.type === \"checkbox\") ?\n (value) => (el.checked = value, attr(el, \"checked\", value)) :\n (el.type === 'radio') ? (value) => (\n el.checked = el.value === value, attr(el, 'checked', el.checked || null)\n ) :\n (el.type === \"select-one\") ?\n (value) => {\n for (let o of el.options)\n o.value == value ? o.setAttribute(\"selected\", '') : o.removeAttribute(\"selected\");\n el.value = value;\n } :\n (el.type === 'select-multiple') ? (value) => {\n for (let o of el.options) value.some(v => v == o.value) ? o.setAttribute('selected', '') : o.removeAttribute('selected')\n } :\n (value) => (el.value = value)\n}\n", "import { parse } from \"../core.js\"\n\n/**\n * Creates a setter function for assigning a value to a state path.\n * @param {string} expr - Expression to assign to (e.g., \"x\" or \"refs.el\")\n * @returns {(target: Object, value: any) => void} Setter function\n */\nconst setter = (expr, _set = parse(`${expr}=__`)) => (target, value) => {\n target.__ = value; _set(target), delete target.__\n}\n\n/**\n * Ref directive - stores element reference in state or calls callback with element.\n *\n * :ref=\"x\" \u2192 state.x = el\n * :ref=\"refs.el\" \u2192 state.refs.el = el\n * :ref=\"el => setup(el)\" \u2192 calls callback with element\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Variable name, path, or callback expression\n */\nexport default (el, state, expr) => {\n let result = parse(expr).call(el, state)\n if (typeof result === 'function') result(el)\n else setter(expr)(state, el)\n}\n", "import sprae, { store, untracked, frag, _state, _signals, signal } from '../core.js'\n\n/**\n * Scope directive - creates a child scope with local state.\n * Properties merge into a new scope inheriting from parent.\n * @param {Element} el - Target element\n * @param {Object} rootState - Parent state object\n * @returns {(values: Object | ((state: Object) => Object)) => void | boolean} Update function\n */\nexport default (el, rootState) => {\n // 0 run pre-creates state to provide scope for the first effect - it can write vars in it, so we should already have it\n // el[_state] even replaces own :scope effect state\n let state = el[_state] = store({}, rootState), init = false\n\n // <template :scope=\"{}\" /> or previously initialized template\n let holder, _frag = el.content && frag(el)\n if (_frag) el.replaceWith(holder = el.ownerDocument.createTextNode(''))\n\n // 1st run spraes subtree with values from scope, it can be postponed by modifiers (we isolate reads from parent effect)\n // 2nd+ runs update subscope\n return values => {\n values = typeof values === 'function' ? values(state) : values;\n\n // we bind to subscope to alleviate friction using scope method directly\n // also returned props should force-create signals in subscope, not overwriting parent\n if (values !== state) {\n for (let k in values) {\n // _add forces new prop, instead of checking parent\n let v = typeof values[k] === 'function' ? values[k].bind(state) : values[k]\n // update\n if (k in state[_signals]) state[k] = v\n // create\n else (state[_signals][k] = (k[0] == '_' || v?.peek) ? v : signal(store(v)))\n }\n }\n\n return !init && (init = true, !holder && (delete el[_state]), untracked(() => (holder?.before(_frag.content || el), sprae(_frag || el, state))))\n }\n}\n", "import sprae, { store, parse, _state, effect, _change, _signals, frag, throttle, debounce, mutate } from \"../core.js\";\n\n/**\n * Each directive - renders list items from array/object/number.\n * Syntax: `:each=\"item in items\"` or `:each=\"(item, idx) of items\"`\n * @param {HTMLTemplateElement | Element} tpl - Template element\n * @param {Object} state - State object\n * @param {string} expr - Iterator expression\n * @returns {{ eval: Function, [Symbol.dispose]: () => void }} Directive result\n */\nexport default (tpl, state, expr) => {\n const [lhs, rhs] = expr.split(/\\bin|of\\b/)\n\n let [itemVar, idxVar = \"$\"] = lhs.trim().replace(/\\(|\\)/g, '').split(/\\s*,\\s*/);\n\n // we need :if to be able to replace holder instead of tpl for :if :each case\n let doc = tpl.ownerDocument\n let holder = doc.createTextNode(\"\");\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n let update = throttle(() => mutate(() => {\n let i = 0, newItems = items, newl = newItems.length\n\n // plain array update, not store (signal with array) - updates full list\n if (cur && !cur[_change]) {\n for (let s of cur[_signals] || []) s[Symbol.dispose]()\n cur = null, prevl = 0\n }\n\n\n // delete\n if (newl < prevl) cur.length = newl\n\n // update, append, init\n else {\n // init\n if (!cur) cur = newItems\n // update\n else while (i < prevl) cur[i] = newItems[i++]\n\n // batch append using DocumentFragment for efficiency\n let batchSize = newl - i\n let batch = batchSize > 1 ? doc.createDocumentFragment() : null\n let pending = batch ? [] : null\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n\n let idx = i\n let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);\n // el.content is DocumentFragment for frag() output, el itself for cloneNode\n let insertNode = el.content || el\n\n // collect for batch insert\n if (batch) {\n batch.appendChild(insertNode)\n pending.push([ el, idx ])\n } else {\n holder.before(insertNode)\n let subscope = store({\n get [itemVar]() { return cur[idx] },\n [idxVar]: keys ? keys[idx] : idx\n }, state)\n sprae(el, subscope)\n }\n\n // signal/holder disposal removes element\n let _prev = ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose]\n cur[_signals][i][Symbol.dispose] = () => {\n _prev?.(), el[Symbol.dispose]?.(), el.remove()\n };\n }\n\n // batch insert all at once, then sprae\n if (batch) {\n holder.before(batch)\n for (let [el, idx] of pending) {\n let subscope = store({\n get [itemVar]() { return cur[idx] },\n [idxVar]: keys ? keys[idx] : idx\n }, state)\n sprae(el, subscope)\n }\n }\n }\n\n prevl = newl\n }))\n\n mutate(() => tpl.replaceWith(holder))\n tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n let disposeItems = () => { if (cur) { for (let s of cur[_signals] || []) s[Symbol.dispose]?.(); cur = null; prevl = 0 } }\n\n return Object.assign(value => {\n // resolve new items\n keys = null\n if (typeof value === \"number\") items = Array.from({ length: value }, (_, i) => i + 1)\n else if (value?.constructor === Object) keys = Object.keys(value), items = Object.values(value)\n else items = value || []\n\n // whenever list changes, we rebind internal change effect\n let off = effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact signals unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n update()\n })\n return () => { off(); disposeItems() }\n }, {eval:parse(rhs)})\n}\n", "import { attr, isCE } from \"../core.js\";\n\n/**\n * Default attribute directive - sets any attribute value.\n * @param {Element} el - Target element\n * @param {Object} st - State object\n * @param {string} ex - Expression\n * @param {string} name - Attribute name\n * @returns {(v: any) => void} Update function\n */\nexport default (el, st, ex, name) => v => attr(el, name, typeof v === 'function' && !isCE(el) ? v(el.getAttribute(name)) : v)\n", "import { attr, dashcase, isCE } from \"../core.js\";\n\n/**\n * Spread directive - sets multiple attributes from object.\n * Keys are converted from camelCase to kebab-case.\n * @param {Element} target - Target element\n * @returns {(value: Record<string, any>) => void} Update function\n */\nexport default (target) => value => { let ce = isCE(target); for (let key in value) attr(target, ce ? key : dashcase(key), value[key]) }\n", "import { parse, decorate } from \"../core.js\"\n\n/**\n * Event directive - attaches event listeners with modifiers.\n * Syntax: `:onclick=\"handler\"` or `:onclick.prevent.stop=\"handler\"`\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Event name with modifiers (e.g., 'onclick.prevent')\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n // wrap inline cb into function\n // if (!/^(?:[\\w$]+|\\([^()]*\\))\\s*=>/.test(expr) && !/^function\\b/.test(expr)) expr = `()=>{${expr}}`;\n\n const [type, ...mods] = name.slice(2).split('.'),\n evaluate = parse(expr).bind(el),\n trigger = decorate(Object.assign(e => evaluate(state, (fn) => typeof fn === 'function' ? fn(e) : fn), { target: el }), mods);\n\n trigger.target.addEventListener(type, trigger, trigger)\n return {\n [Symbol.dispose]() {\n trigger.target.removeEventListener(type, trigger)\n trigger[Symbol.dispose]?.()\n }\n }\n}\n", "import { _dispose, parse, decorate } from \"../core.js\"\n\n/**\n * Sequence directive - chains event handlers.\n * Syntax: `:onclick..keyup.enter=\"handler\"` - click triggers, then waits for Enter.\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} names - Chained event names separated by `..`\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, names) => {\n let cur, // current step callback\n off // current step disposal\n\n const evaluate = parse(expr).bind(el)\n\n let steps = names.split('..').map((step, i, { length }) => step.split(':').reduce(\n (prev, str) => {\n const [name, ...mods] = str.slice(2).split('.')\n\n const next = (fn, e) => cur = typeof fn === 'function' ? fn(e) : fn\n const trigger = decorate(Object.assign(\n e => (!i ? evaluate(state, (fn) => next(fn, e)) : next(cur, e), off(), off = steps[(i + 1) % length]()),\n { target: el }\n ), mods)\n\n\n return (_poff) => (\n _poff = prev?.(),\n trigger.target.addEventListener(name, trigger, trigger),\n () => (_poff?.(), trigger.target.removeEventListener(name, trigger))\n )\n }, null)\n )\n\n off = steps[0]()\n\n return {\n [Symbol.dispose]() {\n off?.()\n }\n }\n}\n", "import sprae, { untracked, frag, _dispose, _state } from \"../core.js\"\n\nconst isTemplate = v => !!v?.content\n\n/**\n * HTML directive - sets innerHTML and initializes nested directives.\n * Supports templates for fragment insertion.\n * @param {Element | HTMLTemplateElement} el - Target element\n * @param {Object} state - State object\n * @returns {(v: string | HTMLTemplateElement | ((html: string) => string)) => void | (() => void)} Update function\n */\nexport default (el, state) => {\n // <template :html=\"a\"/> - fragment case: use placeholder + frag\n if (el.content) {\n let _el, html = el.innerHTML,\n doc = el.ownerDocument,\n holder = el._holder\n\n if (!holder) el.replaceWith(holder = doc.createTextNode(''))\n\n return v => {\n if (typeof v === 'function') v = v(html)\n\n // :if case: remove current content from DOM\n if (el._holder) el.remove(), el.content.replaceChildren()\n _el?.[_dispose]?.()\n _el?.remove()\n\n if (v != null && v !== '') {\n _el = isTemplate(v)\n ? (html = v.innerHTML, frag(v))\n : frag((_el = doc.createElement('template'), _el.innerHTML = html = v, _el))\n\n untracked(() => sprae(_el, state))\n\n holder.before(_el.content)\n\n // :if case: update childNodes in-place for remove() closure\n if (el._holder) el.childNodes.splice(0, Infinity, ..._el.childNodes)\n\n return _el[_dispose]\n }\n else if (el._holder) el.childNodes.length = 0, html = ''\n }\n }\n\n return v => (\n v = typeof v === 'function' ? v(el.innerHTML) : v,\n isTemplate(v) ? el.replaceChildren(v.content.cloneNode(true)) : (el.innerHTML = v == null ? \"\" : v),\n el[_state] &&= null,\n untracked(() => sprae(el, state)),\n el[_dispose]\n )\n}\n", "/**\n * Portal directive - teleports element to another container.\n * Value can be selector string, element, or falsy to return home.\n * @param {Element} el - Element to teleport\n * @param {Object} state - State object\n * @param {string} expr - Expression\n * @returns {(value: string | Element | null | false) => void} Update function\n */\nexport default (el, state, expr) => {\n const doc = el.ownerDocument\n const comment = doc.createComment(':portal')\n let currentTarget = null\n\n // Insert placeholder before element\n el.before(comment)\n\n return (value) => {\n const root = el.getRootNode()\n const target = typeof value === 'string'\n ? (root.querySelector?.(value) || doc.querySelector(value))\n : value?.nodeType === 1 ? value\n : value ? doc.body : null\n\n if (target === currentTarget) return\n\n if (target) target.appendChild(el)\n else comment.after(el)\n\n currentTarget = target\n\n return () => { currentTarget && (comment.after(el), currentTarget = null) }\n }\n}\n", "/**\n * Hidden directive - toggles the hidden attribute.\n * @param {Element} el - Target element\n * @returns {(value: any) => boolean} Update function\n */\nexport default (el) => (value) => el.hidden = !!value\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Mount directive - lifecycle observer.\n * Runs once on connect. Function form receives element, can return cleanup.\n * Statement form runs directly.\n *\n * :mount=\"console.log('connected')\"\n * :mount=\"el => (setup(el), () => cleanup(el))\"\n * :mount=\"el => ref = el\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n const [, ...mods] = name.split('.'),\n evaluate = parse(expr).bind(el)\n\n let cleanup\n\n const trigger = decorate(Object.assign(() => {\n const result = evaluate(state, fn => typeof fn === 'function' ? fn(el) : fn)\n if (typeof result === 'function') cleanup = result\n }, { target: el }), mods)\n\n trigger()\n\n return {\n [_dispose]() {\n cleanup?.()\n cleanup = null\n }\n }\n}\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Change directive - normalized input write-back observer.\n * Handles type detection, coercion, caret preservation.\n *\n * :change=\"v => x = v\"\n * :change.debounce-300=\"v => query = v\"\n *\n * @param {Element} el - Form element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression (receives coerced value)\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nexport default (el, state, expr, name) => {\n const [, ...mods] = name.split('.'),\n evaluate = parse(expr).bind(el)\n\n // coerce value from element based on input type\n const coerce =\n el.type === 'checkbox' ? () => el.checked :\n el.type === 'select-multiple' ? () => [...el.selectedOptions].map(o => o.value) :\n /^(date|time|month|week)/.test(el.type) ? () => el.value :\n () => el.selectedIndex < 0 ? null : isNaN(el.valueAsNumber) ? el.value : el.valueAsNumber\n\n const handler = decorate(Object.assign(() => {\n evaluate(state, fn => typeof fn === 'function' ? fn(coerce()) : fn)\n }, { target: el }), mods)\n\n el.addEventListener('input', handler)\n el.addEventListener('change', handler)\n\n return {\n [_dispose]() {\n el.removeEventListener('input', handler)\n el.removeEventListener('change', handler)\n }\n }\n}\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Intersect directive - IntersectionObserver wrapper.\n * Statement form fires on enter. Function form receives entry for full control.\n *\n * :intersect=\"visible = true\"\n * :intersect.once=\"loadImage()\"\n * :intersect=\"entry => visible = entry.isIntersecting\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nconst intersect = (el, state, expr, name) => {\n const [, ...mods] = name.split('.')\n const evaluate = parse(expr).bind(el)\n\n let once = mods.includes('once')\n\n const trigger = decorate(Object.assign((entry) => {\n evaluate(state, fn => typeof fn === 'function' ? fn(entry) : fn)\n }, { target: el }), mods)\n\n const io = new IntersectionObserver(entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n trigger(entry)\n if (once) io.disconnect()\n }\n }\n })\n\n io.observe(el)\n\n return {\n [_dispose]() { io.disconnect() }\n }\n}\n\nintersect.observer = true\nexport default intersect\n", "import { parse, decorate, _dispose } from \"../core.js\"\n\n/**\n * Resize directive - ResizeObserver wrapper.\n * Function form receives {width, height, entry} object.\n *\n * :resize=\"({width, height}) => cols = Math.floor(width / 200)\"\n * :resize.throttle-100=\"({width}) => narrow = width < 600\"\n *\n * @param {Element} el - Target element\n * @param {Object} state - State object\n * @param {string} expr - Handler expression\n * @param {string} name - Directive name with modifiers\n * @returns {{ [Symbol.dispose]: () => void }} Disposal object\n */\nconst resize = (el, state, expr, name) => {\n const [, ...mods] = name.split('.')\n const evaluate = parse(expr).bind(el)\n\n const trigger = decorate(Object.assign((size) => {\n evaluate(state, fn => typeof fn === 'function' ? fn(size) : fn)\n }, { target: el }), mods)\n\n const ro = new ResizeObserver(entries => {\n for (const entry of entries) {\n const rect = entry.contentRect\n trigger({ width: rect.width, height: rect.height, entry })\n }\n })\n\n ro.observe(el)\n\n return {\n [_dispose]() { ro.disconnect() }\n }\n}\n\nresize.observer = true\nexport default resize\n", "/**\n * @fileoverview Sprae - lightweight reactive HTML templating library\n * @module sprae\n */\n\nimport store from \"./store.js\";\nimport { batch, computed, effect, signal, untracked } from './core.js';\nimport * as signals from './signal.js';\nimport sprae, { use, decorate, directive, modifier, parse, throttle, debounce, _off, _state, _on, _dispose, _add, start, isCE } from './core.js';\n\nimport _if from \"./directive/if.js\";\nimport _else from \"./directive/else.js\";\nimport _text from \"./directive/text.js\";\nimport _class from \"./directive/class.js\";\nimport _style from \"./directive/style.js\";\nimport _fx from \"./directive/fx.js\";\nimport _value from \"./directive/value.js\";\nimport _ref from \"./directive/ref.js\";\nimport _scope from \"./directive/scope.js\";\nimport _each from \"./directive/each.js\";\nimport _default from \"./directive/_.js\";\nimport _spread from \"./directive/spread.js\";\nimport _event from \"./directive/event.js\";\nimport _seq from \"./directive/sequence.js\";\nimport _html from \"./directive/html.js\";\nimport _portal from \"./directive/portal.js\";\nimport _hidden from \"./directive/hidden.js\";\nimport _mount from \"./directive/mount.js\";\nimport _change from \"./directive/change.js\";\nimport _intersect from \"./directive/intersect.js\";\nimport _resize from \"./directive/resize.js\";\n\n\n// mark observers: they handle own modifiers, bypass reactive plumbing\n_mount.observer = _change.observer = true\n\nObject.assign(directive, {\n _: _default,\n '': _spread,\n class: _class,\n text: _text,\n html: _html,\n style: _style,\n fx: _fx,\n value: _value,\n ref: _ref,\n scope: _scope,\n if: _if,\n else: _else,\n each: _each,\n portal: _portal,\n hidden: _hidden,\n mount: _mount,\n change: _change,\n intersect: _intersect,\n resize: _resize,\n})\n\n\n/**\n * Directive initializer with modifiers support.\n * @param {Element} target - Target element\n * @param {string} name - Directive name with modifiers (e.g., 'onclick.throttle-500')\n * @param {string} expr - Expression string\n * @param {Object} state - Reactive state object\n * @returns {() => (() => void) | void} Initializer function that returns a disposer\n */\nconst dir = (target, name, expr, state) => {\n let [dirName, ...mods] = name.split('.'), create = directive[dirName] || directive._\n\n return () => {\n // decorate trigger to resolve target from modifiers (parent, root, body, etc.)\n let change = signal(0),\n\n // throttle prevents multiple updates within one tick as well as isolates stack for each update\n trigger = decorate(Object.assign(throttle(() => change.value++), { target }), mods),\n\n el = trigger.target ?? target\n\n let update = create(el, state, expr, dirName)\n\n if (!update?.call) return update?.[_dispose]\n\n let count = 0,\n evaluate = update.eval ?? parse(expr).bind(el),\n _out, out = () => (typeof _out === 'function' && _out(), _out=null) // effect trigger and invoke may happen in the same tick, so it will be effect-within-effect call - we need to store output of evaluate to return from trigger effect\n\n // use element's own state for expression evaluation, unless it's a custom element\n // (custom elements: directives are parent prop setters, must evaluate against parent state)\n if (!isCE(el)) state = el[_state] ?? state\n\n let off = effect(() => {\n const result = change.value == count ? (trigger()) : (count = change.value, _out = evaluate(state, update))\n return out\n })\n if (!(_state in el)) return off\n let _d = 0\n return () => { if (_d) return; _d = 1; off(); update[_off] ? update[_off]() : el[_dispose]?.() }\n }\n}\n\n// Parses time string to ms: 100, 100ms, 1s, 1m\nconst parseTime = (t) => !t ? 0 : typeof t === 'number' ? t :\n (([, n, u] = t.match(/^(\\d+)(ms|s|m)?$/) || []) => (n = +n, u === 's' ? n * 1000 : u === 'm' ? n * 60000 : n))()\n\n// Creates scheduler from time/keyword (idle, raf, tick, or ms)\nconst scheduler = (t) =>\n t === 'idle' ? requestIdleCallback :\n t === 'raf' ? requestAnimationFrame :\n !t || t === 'tick' ? queueMicrotask :\n (fn) => setTimeout(fn, parseTime(t))\n\n// Built-in modifiers for timing, targeting, and event handling\nObject.assign(modifier, {\n /**\n * Delays callback by interval since last call (trailing edge).\n * Supports: tick (default), raf, idle, N, Nms, Ns, Nm. Add -immediate for leading edge.\n * Examples: .debounce, .debounce-100, .debounce-1s, .debounce-raf, .debounce-idle, .debounce-100-immediate\n */\n debounce: (fn, a, b) => debounce(fn, scheduler(a === 'immediate' ? b : a), a === 'immediate' || b === 'immediate'),\n /**\n * Limits callback rate to interval (leading + trailing edges).\n * Supports: tick (default), raf, idle, N, Nms, Ns, Nm.\n * Examples: .throttle, .throttle-100, .throttle-1s, .throttle-raf, .throttle-idle\n */\n throttle: (fn, a) => throttle(fn, scheduler(a)),\n /** Runs callback after delay. Supports: tick (default), raf, idle, N, Nms, Ns, Nm. */\n delay: (fn, a) => ((sched = scheduler(a)) => (e) => sched(() => fn(e)))(),\n /** Shortcut for delay-tick (next microtask). */\n tick: (fn) => (e) => queueMicrotask(() => fn(e)),\n /** Shortcut for delay-raf (next animation frame). */\n raf: (fn) => (e) => requestAnimationFrame(() => fn(e)),\n\n /** Calls handler only once. */\n once: (fn, _done, _fn) => (_fn = (e) => !_done && (_done = 1, fn(e)), _fn.once = true, _fn),\n\n /** Attaches event listener to window. */\n window: fn => (fn.target = fn.target.ownerDocument.defaultView, fn),\n /** Attaches event listener to document. */\n document: fn => (fn.target = fn.target.ownerDocument, fn),\n /** Attaches event listener to document root element (<html>). */\n root: fn => (fn.target = fn.target.ownerDocument.documentElement, fn),\n /** Attaches event listener to body. */\n body: fn => (fn.target = fn.target.ownerDocument.body, fn),\n /** Attaches event listener to parent element. */\n parent: fn => (fn.target = fn.target.parentNode, fn),\n /** Triggers only when event target is the element itself. */\n self: (fn) => (e) => (e.target === fn.target && fn(e)),\n /** Triggers when event is outside the element. Ignores drag-out (pointerdown inside, pointerup outside). */\n away: (fn, _pd) => {\n let doc = fn.target.ownerDocument, pdHandler = e => _pd = e.target, _skip = doc.currentEvent || doc.defaultView?.event\n doc.addEventListener('pointerdown', pdHandler, true)\n return Object.assign(\n (e) => e !== _skip && !fn.target.contains(e.type === 'click' ? _pd ?? e.target : e.target) && e.target.isConnected && fn(e),\n { target: doc, [_dispose]: () => doc.removeEventListener('pointerdown', pdHandler, true) }\n )\n },\n\n /** Calls preventDefault() before handler. */\n prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),\n /** Calls stopPropagation() or stopImmediatePropagation() (with -immediate). */\n stop: (fn, _how) => (e) => (_how?.[0] === 'i' ? e?.stopImmediatePropagation() : e?.stopPropagation(), fn(e)),\n /** Sets passive option for event listener. */\n passive: fn => (fn.passive = true, fn),\n /** Sets capture option for event listener. */\n capture: fn => (fn.capture = true, fn),\n})\n/** Alias for .away modifier */\nmodifier.outside = modifier.away\n\n/**\n * Key testers for keyboard event modifiers.\n * @type {Record<string, (e: KeyboardEvent) => boolean>}\n */\nconst keys = {\n ctrl: e => e.ctrlKey || e.key === \"Control\" || e.key === \"Ctrl\",\n shift: e => e.shiftKey || e.key === \"Shift\",\n alt: e => e.altKey || e.key === \"Alt\",\n meta: e => e.metaKey || e.key === \"Meta\",\n cmd: e => e.metaKey || e.key === \"Command\",\n arrow: e => e.key?.startsWith(\"Arrow\"),\n enter: e => e.key === \"Enter\",\n esc: e => e.key?.startsWith(\"Esc\"),\n tab: e => e.key === \"Tab\",\n space: e => e.key === \"\u00A0\" || e.key === \"Space\" || e.key === \" \",\n delete: e => e.key === \"Delete\" || e.key === \"Backspace\",\n digit: e => /^\\d$/.test(e.key),\n letter: e => /^\\p{L}$/gu.test(e.key),\n char: e => /^\\S$/.test(e.key),\n};\n\n// match key by name, or by e.key (case-insensitive), or by keyCode (digits)\nconst keyMatch = (k, e) => keys[k]?.(e) || e.key?.toLowerCase() === k || e.keyCode == k\n\n// Augment modifiers with key testers (e.g., .enter, .ctrl, .ctrl-a, .ctrl-65)\nfor (let k in keys) modifier[k] = (fn, a, b) => (e) => keys[k](e) && (!a || keyMatch(a, e)) && (!b || keyMatch(b, e)) && fn(e)\n\n\n// Checks for first-level semicolons (statement vs expression)\nconst hasSemi = s => {\n let d = 0, q = '', esc = 0\n for (let ch of s) {\n if (q) {\n if (esc) esc = 0\n else if (ch === '\\\\') esc = 1\n else if (ch === q) q = ''\n continue\n }\n if (ch === ';' && !d) return true\n if (ch === '{') d++\n else if (ch === '}') d--\n else if (ch === '\"' || ch === \"'\" || ch === '`') q = ch\n }\n return false\n}\n\n// Configure sprae with default compiler and signals\nuse({\n\n// Default compiler wraps expression for new Function\n compile: expr => {\n // if, const, let - no return\n if (/^(if|let|const)\\b/.test(expr));\n // first-level semicolons - no return\n else if (hasSemi(expr));\n else expr = `return ${expr}`\n // async expression\n if (/\\bawait\\s/.test(expr)) expr = `return (async()=>{${expr}})()`\n return sprae.constructor(`with(arguments[0]){${expr}}`)\n },\n // these 2 exceptions might look inconsistent, but arguably that's the cleanest way to avoid coupling\n dir: (el, name, expr, state) => {\n // sequences: handle own modifiers, return dispose\n if (name.includes('..')) return () => _seq(el, state, expr, name)[_dispose]\n return name.split(':').reduce((prev, str) => {\n let dirName = str.split('.')[0]\n // events and observers handle own modifiers, return dispose\n let obs = directive[dirName]\n let start = str.startsWith('on') ? () => _event(el, state, expr, str)[_dispose]\n : obs?.observer ? () => obs(el, state, expr, str)[_dispose]\n : dir(el, str, expr, state)\n return !prev ? start : (p, s) => (p = prev(), s = start(), () => { p(); s() })\n }, null)\n },\n ...signals\n})\n\n\n// Expose for runtime configuration\nsprae.use = use\nsprae.store = store\nsprae.directive = directive\nsprae.modifier = modifier\n\n/**\n * Disposes a spraed element, cleaning up all effects and state.\n * @param {Element} el - Element to dispose\n */\nconst dispose = sprae.dispose = (el) => el[_dispose]?.()\n\n\nsprae.start = start\n\nexport default sprae\nexport { sprae, store, signal, effect, computed, batch, untracked, start, use, throttle, debounce, dispose }\n", "var sprae = require(\"./sprae.js\").default; module.exports = sprae; var cur = document.currentScript;\nvar prefix = cur.getAttribute(\"prefix\") ?? cur.dataset.prefix ?? cur.dataset.spraePrefix;\nvar start = cur.getAttribute(\"start\") ?? cur.dataset.start ?? cur.dataset.spraeStart;\ncur.removeAttribute(\"prefix\"); cur.removeAttribute(\"start\"); delete cur.dataset.prefix; delete cur.dataset.start; delete cur.dataset.spraePrefix; delete cur.dataset.spraeStart;\nif (prefix) sprae.use({ prefix });\nif (start != null && start !== 'false') (start && start !== 'true' ? document.querySelectorAll(start) : [document.body || document.documentElement]).forEach(el => sprae.start(el))"],
5
+ "mappings": "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",
6
+ "names": ["_dispose", "_state", "_on", "_off", "_add", "prefix", "isCE", "signal", "effect", "computed", "batch", "untracked", "directive", "modifier", "currentDir", "currentEl", "elHint", "err", "sprae", "dir", "compile", "parse", "cache", "use", "decorate", "mo", "mutate", "start", "frag", "dashcase", "camelcase", "attr", "clsx", "throttle", "debounce", "core_default", "init_core", "__esmMin", "init_store", "el", "fn", "hint", "expr", "msg", "display", "root", "state", "store_default", "fx", "offs", "off", "add", "_attrs", "i", "name", "value", "prev", "child", "next", "e", "cb", "_out", "result", "v", "config", "mods", "params", "mod", "wrapFn", "k", "values", "mutations", "m", "tpl", "doc", "content", "attributes", "ref", "childNodes", "str", "match", "_", "c", "s", "ms", "_planned", "_depth", "arg", "schedule", "throttled", "dirty", "immediate", "_blocked", "_count", "_c", "_signals", "_change", "_set", "sandbox", "store", "list", "create", "set", "store_default", "init_store", "__esmMin", "init_core", "values", "parent", "keyCount", "signals", "state", "signal", "_", "k", "v", "descs", "computed", "isMut", "mut", "fn", "length", "i", "_s", "_v", "untracked", "batch", "signal_exports", "__export", "batch", "computed", "effect", "signal", "untracked", "current", "depth", "batched", "init_signal", "__esmMin", "v", "_s", "_obs", "_v", "val", "sub", "fn", "_teardown", "_fx", "_deps", "prev", "tmp", "dep", "_c", "_e", "_first", "_list", "fx", "_prev", "if_default", "init_if", "__esmMin", "init_core", "el", "state", "_a", "_b", "_holder", "_el", "core_default", "_state", "frag", "mutate", "throttle", "match", "s", "_off", "_on", "cb", "value", "else_default", "init_else", "__esmMin", "init_core", "el", "_a", "_el", "_prev", "frag", "_state", "text_default", "init_text", "__esmMin", "init_core", "el", "frag", "v", "cur", "node", "s", "off", "pos", "r", "class_default", "init_class", "__esmMin", "init_core", "el", "st", "ex", "name", "_cur", "_new", "v", "c", "clsx", "style_default", "init_style", "__esmMin", "init_core", "el", "st", "ex", "name", "_static", "v", "attr", "k", "fx_default", "init_fx", "__esmMin", "fn", "value_default", "init_value", "__esmMin", "init_core", "el", "state", "core_default", "value", "_from", "_to", "attr", "v", "setter", "ref_default", "init_ref", "__esmMin", "init_core", "expr", "_set", "parse", "target", "value", "el", "state", "result", "scope_default", "init_scope", "__esmMin", "init_core", "el", "rootState", "state", "_state", "store", "init", "holder", "_frag", "frag", "values", "k", "v", "_signals", "signal", "untracked", "core_default", "each_default", "init_each", "__esmMin", "init_core", "tpl", "state", "expr", "lhs", "rhs", "itemVar", "idxVar", "doc", "holder", "cur", "keys", "items", "prevl", "update", "throttle", "mutate", "_a", "_b", "i", "newItems", "newl", "_change", "s", "_signals", "batch", "pending", "idx", "el", "frag", "insertNode", "subscope", "store", "core_default", "_prev", "_state", "disposeItems", "value", "_", "off", "effect", "parse", "__default", "init__", "__esmMin", "init_core", "el", "st", "ex", "name", "v", "attr", "isCE", "spread_default", "init_spread", "__esmMin", "init_core", "target", "value", "ce", "isCE", "key", "attr", "dashcase", "event_default", "init_event", "__esmMin", "init_core", "el", "state", "expr", "name", "type", "mods", "evaluate", "parse", "trigger", "decorate", "e", "fn", "sequence_default", "init_sequence", "__esmMin", "init_core", "el", "state", "expr", "names", "cur", "off", "evaluate", "parse", "steps", "step", "i", "length", "prev", "str", "name", "mods", "next", "fn", "e", "trigger", "decorate", "_poff", "isTemplate", "html_default", "init_html", "__esmMin", "init_core", "v", "el", "state", "_el", "html", "doc", "holder", "_dispose", "frag", "untracked", "core_default", "_a", "_state", "portal_default", "init_portal", "__esmMin", "el", "state", "expr", "doc", "comment", "currentTarget", "value", "root", "target", "hidden_default", "init_hidden", "__esmMin", "el", "value", "mount_default", "init_mount", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "cleanup", "decorate", "result", "fn", "_dispose", "change_default", "init_change", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "coerce", "o", "handler", "decorate", "fn", "_dispose", "intersect", "intersect_default", "init_intersect", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "once", "trigger", "decorate", "entry", "fn", "io", "entries", "_dispose", "resize", "resize_default", "init_resize", "__esmMin", "init_core", "el", "state", "expr", "name", "mods", "evaluate", "parse", "trigger", "decorate", "size", "fn", "ro", "entries", "entry", "rect", "_dispose", "sprae_exports", "__export", "batch", "computed", "debounce", "sprae_default", "dispose", "effect", "signal", "core_default", "start", "store_default", "throttle", "untracked", "use", "dir", "parseTime", "scheduler", "keys", "keyMatch", "hasSemi", "init_sprae", "__esmMin", "init_store", "init_core", "init_signal", "init_if", "init_else", "init_text", "init_class", "init_style", "init_fx", "init_value", "init_ref", "init_scope", "init_each", "init__", "init_spread", "init_event", "init_sequence", "init_html", "init_portal", "init_hidden", "init_mount", "init_change", "init_intersect", "init_resize", "mount_default", "change_default", "directive", "__default", "spread_default", "class_default", "text_default", "html_default", "style_default", "fx_default", "value_default", "ref_default", "scope_default", "if_default", "else_default", "each_default", "portal_default", "hidden_default", "intersect_default", "resize_default", "target", "name", "expr", "state", "dirName", "mods", "create", "change", "trigger", "decorate", "el", "update", "_dispose", "count", "evaluate", "parse", "_out", "out", "isCE", "_state", "off", "result", "_d", "_off", "t", "n", "u", "fn", "modifier", "a", "b", "sched", "e", "_done", "_fn", "_pd", "doc", "pdHandler", "_skip", "_how", "k", "s", "d", "q", "esc", "ch", "sequence_default", "prev", "str", "obs", "event_default", "p", "signal_exports", "sprae", "cur", "prefix", "start", "el"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sprae",
3
3
  "description": "DOM microhydration",
4
- "version": "13.0.1",
4
+ "version": "13.1.1",
5
5
  "main": "./sprae.js",
6
6
  "module": "./sprae.js",
7
7
  "umd:main": "dist/sprae.umd.js",