sprae 11.6.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.js +229 -90
- package/directive/class.js +9 -13
- package/directive/default.js +2 -154
- package/directive/each.js +79 -75
- package/directive/else.js +22 -0
- package/directive/fx.js +2 -2
- package/directive/if.js +40 -34
- package/directive/ref.js +8 -7
- package/directive/scope.js +17 -0
- package/directive/spread.js +3 -0
- package/directive/style.js +9 -7
- package/directive/text.js +4 -4
- package/directive/value.js +39 -40
- package/dist/sprae.js +3 -495
- package/dist/sprae.js.map +4 -4
- package/dist/sprae.umd.js +3 -640
- package/dist/sprae.umd.js.map +4 -4
- package/package.json +16 -14
- package/readme.md +432 -205
- package/signal.js +41 -40
- package/sprae.js +127 -18
- package/store.js +109 -96
- package/directive/aria.js +0 -6
- package/directive/data.js +0 -3
- package/directive/with.js +0 -12
- package/dist/sprae.auto.js +0 -662
- package/dist/sprae.auto.js.map +0 -7
- package/dist/sprae.auto.min.js +0 -5
- package/dist/sprae.auto.min.js.map +0 -7
- package/dist/sprae.min.js +0 -5
- package/dist/sprae.min.js.map +0 -7
- package/dist/sprae.umd.min.js +0 -5
- package/dist/sprae.umd.min.js.map +0 -7
package/dist/sprae.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../
|
|
4
|
-
"sourcesContent": ["// ulive copy, stable minimal implementation\nlet current;\n\nexport let signal = (v, s, obs = new Set) => (\n s = {\n get value() {\n current?.deps.push(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) sub(); // notify effects\n },\n peek() { return v },\n },\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\n s\n),\n effect = (fn, teardown, fx, deps) => (\n fx = (prev) => {\n teardown?.call?.();\n prev = current, current = fx;\n try { teardown = fn(); } finally { current = prev; }\n },\n deps = fx.deps = [],\n\n fx(),\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\n ),\n computed = (fn, s = signal(), c, e) => (\n c = {\n get value() {\n e ||= effect(() => s.value = fn());\n return s.value\n },\n peek: s.peek\n },\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\n c\n ),\n batch = fn => fn(),\n untracked = batch,\n // untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v),\n\n // signals adapter - allows switching signals implementation and not depend on core\n use = (s) => (\n signal = s.signal,\n effect = s.effect,\n computed = s.computed,\n batch = s.batch || batch,\n untracked = s.untracked || untracked\n )\n", "// signals-based proxy\nimport { signal, computed, batch } from './signal.js'\nimport { parse } from './core.js';\n\nexport const _signals = Symbol('signals'),\n _change = Symbol('change'),\n _stash = '__',\n\n // object store is not lazy\n store = (values, parent) => {\n if (!values) return values\n\n // ignore existing state as argument or globals\n if (values[_signals] || values[Symbol.toStringTag]) 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 // we must inherit signals to allow dynamic extend of parent state\n let signals = Object.create(parent?.[_signals] || {}),\n _len = signal(Object.keys(values).length),\n stash\n\n // proxy conducts prop access to signals\n let state = new Proxy(signals, {\n get: (_, k) => k === _change ? _len : k === _signals ? signals : k === _stash ? stash : k in signals ? signals[k]?.valueOf() : globalThis[k],\n set: (_, k, v, s) => k === _stash ? (stash = v, 1) : (s = k in signals, set(signals, k, v), s || ++_len.value), // bump length for new signal\n deleteProperty: (_, k) => (signals[k] && (signals[k][Symbol.dispose]?.(), delete signals[k], _len.value--), 1),\n // subscribe to length when object is spread\n ownKeys: () => (_len.value, Reflect.ownKeys(signals)),\n has: _ => true // sandbox prevents writing to global\n }),\n\n // init signals for values\n 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 else\n // init blank signal - make sure we don't take prototype one\n signals[k] = null, set(signals, k, values[k]);\n }\n\n return state\n },\n\n // array store - signals are lazy since arrays can be very large & expensive\n list = values => {\n // track last accessed property to find out if .length was directly accessed from expression or via .push/etc method\n let lastProp,\n\n // .length signal is stored separately, since it cannot be replaced on array\n _len = signal(values.length),\n\n // gotta fill with null since proto methods like .reduce may fail\n signals = Array(values.length).fill(),\n\n // proxy conducts prop access to signals\n state = new Proxy(signals, {\n get(_, k) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof k === 'symbol') return k === _change ? _len : k === _signals ? signals : signals[k]\n\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (k === 'length') return mut.includes(lastProp) ? _len.peek() : _len.value;\n\n lastProp = 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] ?? (signals[k] = signal(store(values[k])))).valueOf()\n },\n\n set(_, k, v) {\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 _len.value = signals.length = v;\n }\n else {\n set(signals, k, v)\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n if (k >= _len.peek()) _len.value = signals.length = +k + 1\n }\n\n return 1\n },\n\n deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1),\n })\n\n return state\n }\n\n// length changing methods\nconst mut = ['push', 'pop', 'shift', 'unshift', 'splice']\n\n// set/update signal value\nconst set = (signals, k, v) => {\n let s = signals[k], cur\n\n // untracked\n if (k[0] === '_') signals[k] = v\n // new property. preserve signal value as is\n else if (!s) signals[k] = s = v?.peek ? v : signal(store(v))\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === (cur = s.peek()));\n // stashed _set for value with getter/setter\n else if (s._set) s._set(v)\n // patch array\n else if (Array.isArray(v) && Array.isArray(cur)) {\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) batch(() => {\n for (let i = 0; i < v.length; i++) cur[i] = v[i]\n cur.length = v.length // forces deleting tail signals\n })\n else s.value = v\n }\n // .x = y\n else s.value = store(v)\n}\n\n// create expression setter, reflecting value back to state\nexport const setter = (expr, set = parse(`${expr}=${_stash}`)) => (\n (state, value) => (\n state[_stash] = value, // save value to stash\n set(state)\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", "import { use, effect, untracked } from \"./signal.js\";\nimport { store } from './store.js';\n\n// polyfill\nexport const _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\nexport const _state = Symbol(\"state\"), _on = Symbol('on'), _off = Symbol('off')\n\n// registered directives\nexport const directive = {}\n\n/**\n * Register a directive with a parsed expression and evaluator.\n * @param {string} name - The name of the directive.\n * @param {(el: Element, state: Object, expr: string, name: string) => (value: any) => void} create - A function to create the directive.\n * @param {(expr: string) => (state: Object) => any} [p=parse] - Create evaluator from expression string.\n */\nexport const dir = (name, create, p = parse) => directive[name] = (el, expr, state, name, update, evaluate) => (\n update = create(el, state, expr, name),\n evaluate = p(expr, ':'+name),\n () => update(evaluate(state))\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} [values] - Initial values to populate the element's reactive state.\n * @returns {Object} The reactive state object associated with the element.\n */\nexport const sprae = (el=document.body, values) => {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (el[_state]) return Object.assign(el[_state], values)\n\n // take over existing state instead of creating a clone\n let state = store(values || {}), offs = [], fx = []\n\n let init = (el, attrs = el.attributes) => {\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], update, dir\n\n // if we have parts meaning there's attr needs to be spraed\n if (name.startsWith(prefix)) {\n el.removeAttribute(name);\n\n // multiple attributes like :id:for=\"\"\n for (dir of name.slice(prefix.length).split(':')) {\n update = (directive[dir] || directive.default)(el, value, state, dir)\n\n // save & start effect\n fx.push(update)\n // FIXME: since effect can have async start, we can just use el[_on]\n offs.push(effect(update))\n\n // stop after :each, :if, :with etc.\n if (el[_state] === null) return\n }\n } else i++\n }\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n for (let child of el.childNodes) child.nodeType == 1 && init(child)\n };\n\n init(el);\n\n // if element was spraed by inline :with instruction (meaning it has extended state) - skip, otherwise save _state\n if (!(_state in el)) {\n el[_state] = state\n\n // on/off all effects\n el[_off] = () => (offs.map(off => off()), offs = [])\n el[_on] = () => offs = fx.map(f => effect(f))\n\n // destroy\n el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null)\n }\n\n return state;\n}\n\n// configure signals/compile\n// it's more compact than using sprae.signal = signal etc.\nsprae.use = s => (\n s.signal && use(s),\n s.compile && (compile = s.compile),\n s.prefix && (prefix = s.prefix)\n)\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 * @param {string} dir - The directive associated with the expression (used for error reporting).\n * @returns {Function} The compiled evaluator function for the expression.\n */\nexport const parse = (expr, dir, fn) => {\n if (fn = memo[expr = expr.trim()]) return fn\n\n // static time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n // run time errors\n return memo[expr] = s => {\n try { return fn(s) }\n catch(e) { err(e, dir, expr) }\n }\n}\nconst memo = {};\n\n/**\n * Branded sprae error with context about the directive and expression\n *\n * @param {Error} e - The original error object to enhance.\n * @param {string} dir - The directive where the error occurred.\n * @param {string} [expr=''] - The expression associated with the error, if any.\n * @throws {Error} The enhanced error object with a formatted message.\n */\nexport const err = (e, dir = '', expr = '') => {\n throw Object.assign(e, { message: `\u2234 ${e.message}\\n\\n${dir}${expr ? `=\"${expr}\"\\n\\n` : \"\"}`, expr })\n}\n\n/**\n * Compiles an expression into an evaluator function.\n *\n * @type {(expr: string) => Function}\n */\nexport let compile\n\n/**\n * Attributes prefix, by default ':'\n */\nexport let prefix = ':'\n\n// instantiated <template> fragment holder, like persisting fragment but with minimal API surface\nexport const frag = (tpl) => {\n if (!tpl.nodeType) return tpl // existing tpl\n\n let content = tpl.content.cloneNode(true), // document fragment holder of content\n attributes = [...tpl.attributes],\n ref = document.createTextNode(''),\n // ensure at least one node\n childNodes = (content.append(ref), [...content.childNodes])\n\n return {\n // get parentNode() { return childNodes[0].parentNode },\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 // setAttributeNode() { }\n }\n}\n\nexport default sprae\n", "import sprae, { dir, _state, _on, _off, frag } from \"../core.js\";\n\n// :if is interchangeable with :each depending on order, :if :each or :each :if have different meanings\n// as for :if :with - :if must init first, since it is lazy, to avoid initializing component ahead of time by :with\n// we consider :with={x} :if={x} case insignificant\nconst _prevIf = Symbol(\"if\");\n\ndir('if', (el, state) => {\n let holder = document.createTextNode('')\n\n let nextEl = el.nextElementSibling,\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n ifEl[_state] = null // mark el as fake-spraed to hold-on init, since we sprae rest when branch matches\n\n // FIXME: instead of nextEl / el we should use elseEl / ifEl\n if (nextEl?.hasAttribute(\":else\")) {\n nextEl.removeAttribute(\":else\");\n // if nextEl is :else :if - leave it for its own :if handler\n if (!nextEl.hasAttribute(\":if\")) nextEl.remove(), elseEl = nextEl.content ? frag(nextEl) : nextEl, elseEl[_state] = null\n }\n else nextEl = null\n\n return (value, newEl = el[_prevIf] ? null : value ? ifEl : elseEl) => {\n if (nextEl) nextEl[_prevIf] = el[_prevIf] || newEl == ifEl\n if (curEl != newEl) {\n // disable effects on child elements when element is not matched\n if (curEl) curEl.remove(), curEl[_off]?.();\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n // remove fake memo to sprae as new\n curEl[_state] === null ? (delete curEl[_state], sprae(curEl, state))\n // enable effects if branch is matched\n : curEl[_on]()\n }\n }\n };\n})\n", "import sprae, { _state, dir, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect } from '../signal.js';\n\n\ndir('each', (tpl, state, expr) => {\n let [itemVar, idxVar = \"$\"] = expr.split(/\\bin\\b/)[0].trim().split(/\\s*,\\s*/);\n\n // we need :if to be able to replace holder instead of tpl for :if :each case\n let holder = document.createTextNode(\"\");\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n let update = () => {\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 // 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 // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n // FIXME: inherited state is cheaper in terms of memory and faster in terms of performance\n // compared to cloning all parent signals and creating a proxy\n // FIXME: besides try to avoid _signals access: we can optimize store then not checking for _signals key\n scope = store({\n [itemVar]: cur[_signals]?.[idx] || cur[idx],\n [idxVar]: keys ? keys[idx] : idx\n }, state),\n\n el = tpl.content ? frag(tpl) : tpl.cloneNode(true);\n\n holder.before(el.content || el);\n sprae(el, scope);\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\n prevl = newl\n }\n\n tpl.replaceWith(holder);\n tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n return value => {\n // obtain 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 planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned++) update(), queueMicrotask(() => (planned > 1 && update(), planned = 0));\n })\n }\n },\n\n // redefine evaluator to take second part of expression\n expr => parse(expr.split(/\\bin\\b/)[1])\n)\n", "import { dir, parse } from \"../core.js\";\nimport { untracked } from \"../signal.js\";\nimport { setter } from \"../store.js\";\n\ndir('ref', (el, state, expr) => (\n typeof parse(expr)(state) == 'function' ?\n v => v.call(null, el) :\n (setter(expr)(state, el), _ => _)\n))\n", "import sprae, { dir } from \"../core.js\";\nimport { untracked } from \"../signal.js\";\nimport store, { _signals } from '../store.js';\n\ndir('with', (el, rootState, state) => (\n state=null,\n values => !state ?\n // NOTE: we force untracked because internal directives can eval outside of effects (like ref etc) that would cause unwanted subscribe\n // FIXME: since this can be async effect, we should create & sprae it in advance.\n untracked(() => sprae(el, state = store(values, rootState))) :\n sprae(el, values)\n))\n", "import { dir, frag } from \"../core.js\";\n\ndir('text', el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n value => el.textContent = value == null ? \"\" : value\n))\n", "import { dir } from \"../core.js\";\n\ndir('class', (el, cur) => (\n cur = new Set,\n v => {\n let clsx = new Set;\n if (v) {\n if (typeof v === \"string\") v.split(' ').map(cls => clsx.add(cls));\n else if (Array.isArray(v)) v.map(v => v && clsx.add(v));\n else Object.entries(v).map(([k, v]) => v && clsx.add(k));\n }\n for (let cls of cur) if (clsx.has(cls)) clsx.delete(cls); else el.classList.remove(cls);\n for (let cls of cur = clsx) el.classList.add(cls)\n })\n)\n", "import { dir } from \"../core.js\";\n\ndir('style', (el, initStyle) => (\n initStyle = el.getAttribute(\"style\"),\n v => {\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + (initStyle.endsWith(';') ? '' : '; ') + v);\n else {\n if (initStyle) el.setAttribute(\"style\", initStyle);\n for (let k in v) k[0] == '-' ? (el.style.setProperty(k, v[k])) : el.style[k] = v[k]\n }\n })\n)\n", "// generic property directive\nimport { dir, err } from \"../core.js\";\n\ndir('default', (target, state, expr, name) => {\n // simple prop\n if (!name.startsWith('on'))\n return name ?\n value => attr(target, name, value) :\n value => { for (let key in value) attr(target, dashcase(key), value[key]) };\n\n // bind event to a target\n // NOTE: if you decide to remove chain of events, thing again - that's unique feature of sprae, don't diminish your own value.\n // ona..onb\n let ctxs = name.split('..').map(e => {\n let ctx = { evt: '', target, test: () => true };\n ctx.evt = (e.startsWith('on') ? e.slice(2) : e).replace(/\\.(\\w+)?-?([-\\w]+)?/g,\n (_, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // add listener with the context\n let addListener = (fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }, cb) => {\n if (defer) fn = defer(fn)\n\n cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e))\n } catch (error) { err(error, `:on${evt}`, fn) }\n };\n\n target.addEventListener(evt, cb, opts)\n return () => target.removeEventListener(evt, cb, opts)\n };\n\n // single event\n if (ctxs.length == 1) return v => addListener(v, ctxs[0])\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n let nextListener = (fn) => {\n off = addListener((e) => (\n off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : (startFn && nextListener(startFn))\n ), ctxs[idx]);\n }\n\n return value => (\n startFn = value,\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n )\n})\n\n// event modifiers\nconst mods = {\n // actions\n prevent(ctx) { ctx.prevent = true; },\n stop(ctx) { ctx.stop = true; },\n immediate(ctx) { ctx.immediate = true; },\n\n // options\n once(ctx) { ctx.once = true; },\n passive(ctx) { ctx.passive = true; },\n capture(ctx) { ctx.capture = true; },\n\n // target\n window(ctx) { ctx.target = window; },\n document(ctx) { ctx.target = document; },\n parent(ctx) { ctx.target = ctx.target.parentNode; },\n\n throttle(ctx, limit=108) { ctx.defer = (fn) => throttle(fn, limit)},\n debounce(ctx, wait=108) { ctx.defer = (fn) => debounce(fn, wait) },\n\n // test\n outside: (ctx) => (e) => {\n let target = ctx.target;\n if (target.contains(e.target)) return false;\n if (e.target.isConnected === false) return false;\n if (target.offsetWidth < 1 && target.offsetHeight < 1) return false;\n return true;\n },\n self: (ctx) => (e) => e.target === ctx.target,\n\n // keyboard\n ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),\n shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),\n alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),\n meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => (keys[p] ? keys[p](e) : e.key === p)),\n // NOTE: we don't expose up/left/right/down as too verbose: can and better be handled/differentiated at once\n arrow: () => keys.arrow,\n enter: () => keys.enter,\n esc: () => keys.esc,\n tab: () => keys.tab,\n space: () => keys.space,\n delete: () => keys.delete,\n digit: () => keys.digit,\n letter: () => keys.letter,\n char: () => keys.char,\n};\n\n// key testers\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\" || 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// create delayed fns\nconst throttle = (fn, limit) => {\n let pause, planned,\n block = (e) => {\n pause = true;\n setTimeout(() => {\n pause = false;\n // if event happened during blocked time, it schedules call by the end\n if (planned) return (planned = false), block(e), fn(e);\n }, limit);\n };\n return (e) => {\n if (pause) return (planned = true);\n block(e);\n return fn(e);\n };\n};\n\nconst debounce = (fn, wait) => {\n let timeout;\n return (e) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n timeout = null;\n fn(e);\n }, wait);\n };\n};\n\n// set attr\nexport const attr = (el, name, v) => {\n if (v == null || v === false) el.removeAttribute(name);\n else el.setAttribute(name, v === true ? \"\" : typeof v === \"number\" || typeof v === \"string\" ? v : \"\");\n}\n\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n}\n", "import sprae, { parse } from \"../core.js\";\nimport { dir } from \"../core.js\";\nimport { untracked } from \"../signal.js\";\nimport { setter } from \"../store.js\";\nimport { attr } from './default.js';\n\n\ndir('value', (el, state, expr) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ?\n (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)) :\n (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ?\n (value, from, to) => (\n // we retain selection in input\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.value === value && ((el.checked = value), attr(el, 'checked', value))\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) o.removeAttribute('selected')\n for (let v of value) el.querySelector(`[value=\"${v}\"]`).setAttribute('selected', '')\n } :\n (value) => (el.value = value);\n\n // bind back to value, but some values can be not bindable, eg. `:value=\"7\"`\n try {\n const set = setter(expr)\n const handleChange = el.type === 'checkbox' ? () => set(state, el.checked) :\n el.type === 'select-multiple' ? () => set(state, [...el.selectedOptions].map(o => o.value)) :\n () => set(state, el.selectedIndex < 0 ? null : el.value)\n\n el.oninput = el.onchange = handleChange; // hope user doesn't redefine these manually via `.oninput = somethingElse` - it saves 5 loc vs addEventListener\n\n if (el.type?.startsWith('select')) {\n // select element also must observe any added/removed options or changed values (outside of sprae)\n new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });\n\n // select options must be initialized before calling an update\n sprae(el, state)\n }\n\n // initial state value\n parse(expr)(state) ?? handleChange()\n } catch {}\n\n return update\n})\n", "import { dir } from \"../core.js\";\n\ndir('fx', _ => _ => _)\n", "import { dir } from \"../core.js\";\nimport { attr, dashcase } from './default.js'\n\ndir('aria', (el) => value => {\n for (let key in value) attr(el, 'aria-' + dashcase(key), value[key] == null ? null : value[key] + '')\n})\n", "import { dir } from \"../core.js\";\n\ndir('data', el => value => {for (let key in value) el.dataset[key] = value[key];})\n", "import sprae from './core.js'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/text.js'\nimport './directive/class.js'\nimport './directive/style.js'\nimport './directive/value.js'\nimport './directive/fx.js'\nimport './directive/default.js'\nimport './directive/aria.js'\nimport './directive/data.js'\n\n// default compiler (indirect new Function to avoid detector)\nsprae.use({ compile: expr => sprae.constructor(`with (arguments[0]) { return ${expr} };`) })\n\nexport default sprae\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
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/default.js", "../directive/spread.js", "../sprae.js"],
|
|
4
|
+
"sourcesContent": ["import store, { _change, _signals } from \"./store.js\";\n\nexport const _dispose = (Symbol.dispose ||= Symbol(\"dispose\")),\n _state = Symbol(\"state\"),\n _on = Symbol('on'),\n _off = Symbol('off'),\n _add = Symbol('add');\n\n\nexport let prefix = ':', signal, effect, computed, batch = (fn) => fn(), untracked = batch;\n\nexport let directive = {}, modifier = {}\n\nlet currentDir = null;\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|store} [state] - Initial state values to populate the element's reactive state.\n * @returns {Object} The reactive state object associated with the element.\n */\nconst sprae = (el = document.body, state) => {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (el[_state]) return Object.assign(el[_state], state)\n\n // console.group('sprae', el.outerHTML)\n\n // take over existing state instead of creating a clone\n state = store(state || {})\n\n let fx = [], offs = [], fn,\n on = () => (!offs && (offs = fx.map(fn => fn()))),\n off = () => (offs?.map(off => off()), offs = null)\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] = on\n el[_off] = off\n\n // destroy\n el[_dispose] ||= () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = el[_add] = null)\n\n const add = (el, _attrs = el.attributes) => {\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 // directive initializer can be redefined\n fx.push(fn = initDirective(el, name, value, state))\n offs.push(fn())\n\n // stop after subsprae like :each, :if, :scope etc.\n if (_state in el) return\n } else i++\n }\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n // for (let i = 0, child; i < (el.childNodes.length); i++) child = el.childNodes[i], child.nodeType == 1 && add(child)\n for (let child of [...el.childNodes]) child.nodeType == 1 && add(child)\n };\n\n el[_add] = add;\n\n add(el);\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\n/**\n * Initializes directive (defined by sprae build), returns \"on\" function that enables it\n * Multiprop sequences initializer, eg. :a:b..c:d\n * @type {(el: HTMLElement, name:string, value:string, state:Object) => Function}\n * */\nconst initDirective = (el, attrName, expr, state) => {\n let cur, // current step callback\n off // current step disposal\n\n let steps = attrName.slice(prefix.length).split('..').map((step, i, { length }) => (\n // multiple attributes like :id:for=\"\"\n step.split(prefix).reduce((prev, str) => {\n let [name, ...mods] = str.split('.');\n let evaluate = parse(expr, directive[currentDir = name]?.parse)\n\n // events have no effects and can be sequenced\n if (name.startsWith('on')) {\n let type = name.slice(2),\n first = e => (call(evaluate(state), e)),\n fn = applyMods(\n Object.assign(\n // single event vs chain\n length == 1 ? first :\n e => (cur = (!i ? first : cur)(e), off(), off = steps[(i + 1) % length]()),\n { target: el, type }\n ),\n mods);\n\n return (_poff) => (_poff = prev?.(), fn.target.addEventListener(type, fn, fn), () => (_poff?.(), fn.target.removeEventListener(type, fn)))\n }\n\n // props have no sequences and can be sync\n let update = (directive[name] || directive['*'])(el, state, expr, name)\n\n // no-modifiers shortcut\n if (!mods.length && !prev) return () => update && effect(() => evaluate(state, update))\n\n let dispose,\n change = signal(-1), // signal authorized to trigger effect: 0 = init; >0 = trigger\n count = -1, // called effect count\n\n // effect applier - first time it applies the effect, next times effect is triggered by change signal\n fn = throttle(applyMods(() => {\n if (++change.value) return // all calls except for the first one are handled by effect\n dispose = effect(() => update && (\n change.value == count ? fn() : // separate tick makes sure planner effect call is finished before real eval call\n (count = change.value, evaluate(state, update)) // if changed more than effect called - call it\n ));\n }, mods))\n\n return (_poff) => (\n _poff = prev?.(),\n // console.log('ON', name),\n fn(),\n ({\n [name]: () => (\n // console.log('OFF', name, el),\n _poff?.(), dispose(), change.value = -1, count = dispose = null\n )\n })[name]\n )\n }, null)\n ));\n\n // off can be changed on the go\n return () => (off = steps[0]())\n}\n\n\n/**\n * Configure sprae\n */\nexport const use = (s) => (\n s.compile && (compile = s.compile),\n s.prefix && (prefix = s.prefix),\n s.signal && (signal = s.signal),\n s.effect && (effect = s.effect),\n s.computed && (computed = s.computed),\n s.batch && (batch = s.batch),\n s.untracked && (untracked = s.untracked)\n)\n\n\n/**\n * Lifecycle hanger: makes DOM slightly slower but spraes automatically\n */\nexport const start = (root = document.body, values) => {\n const state = store(values);\n sprae(root, state);\n const mo = new MutationObserver(mutations => {\n for (const m of mutations) {\n for (const el of m.addedNodes) {\n if (el.nodeType === 1 && el[_state] === undefined) {\n for (const attr of el.attributes) {\n if (attr.name.startsWith(prefix)) {\n root[_add](el); break;\n }\n }\n }\n }\n // for (const el of m.removedNodes) el[Symbol.dispose]?.()\n }\n });\n mo.observe(root, { childList: true, subtree: true });\n return state\n}\n\n\n/**\n * Compiles an expression into an evaluator function.\n * @type {(dir:string, expr: string, clean?: string => string) => Function}\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 {Function} The compiled evaluator function for the expression.\n */\nexport const parse = (expr, prepare, _fn) => {\n if (_fn = parse.cache[expr]) return _fn\n\n let _expr = expr.trim() || 'undefined'\n if (prepare) _expr = prepare(_expr)\n\n // if, const, let - no return\n if (/^(if|let|const)\\b/.test(_expr) || /;/.test(_expr)) ;\n else _expr = `return ${_expr}`\n\n // async expression\n if (/\\bawait\\s/.test(_expr)) _expr = `return (async()=>{ ${_expr} })()`\n\n // static time errors\n try {\n _fn = compile(_expr)\n Object.defineProperty(_fn, \"name\", {value: `\u2234 ${expr}`})\n } catch (e) { console.error(`\u2234 ${e}\\n\\n${prefix + currentDir}=\"${expr}\"`) }\n\n // run time errors\n return parse.cache[expr] = (state, cb, _out) => {\n try {\n let result = _fn?.(state)\n // if cb is given - call it with result and return function that returns last cb result - needed for effect cleanup\n if (cb) return result?.then ? result.then(v => _out = cb(v)) : _out = cb(result), () => call(_out)\n else return result\n } catch (e) {\n console.error(`\u2234 ${e}\\n\\n${prefix + currentDir}=\"${expr}\"`)\n }\n }\n}\nparse.cache = {};\n\n\n// apply modifiers to context (from the end due to nature of wrapping ctx.call)\nconst applyMods = (fn, mods) => {\n while (mods.length) {\n let [name, ...params] = mods.pop().split('-')\n fn = sx(modifier[name]?.(fn, ...params) ?? fn, fn)\n }\n return fn\n}\n\n// soft-extend missing props and ignoring signals\nconst sx = (a, b) => { if (a != b) for (let k in b) (a[k] ??= b[k]); return a }\n\n// instantiated <template> fragment holder, like persisting fragment but with minimal API surface\nexport const frag = (tpl) => {\n if (!tpl.nodeType) return tpl // existing tpl\n\n let content = tpl.content.cloneNode(true), // document fragment holder of content\n attributes = [...tpl.attributes],\n ref = document.createTextNode(''),\n // ensure at least one node\n childNodes = (content.append(ref), [...content.childNodes])\n\n return {\n // get parentNode() { return childNodes[0].parentNode },\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 // setAttributeNode() { }\n }\n}\n\n// if value is function - return result of its call\nexport const call = (v, arg) => typeof v === 'function' ? v(arg) : v\n\n// camel to kebab\nexport const dashcase = (str) => str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n\n// set attr\nexport const attr = (el, name, v) => (v == null || v === false) ? el.removeAttribute(name) : el.setAttribute(name, v === true ? \"\" : v);\n\n// convert any-arg to className string\nexport const clsx = (c, _out = []) => !c ? '' : typeof c === 'string' ? c : (\n Array.isArray(c) ? c.map(clsx) :\n Object.entries(c).reduce((s, [k, v]) => !v ? s : [...s, k], [])\n).join(' ')\n\n// throttle function to (once per tick or other custom scheduler)\nexport const throttle = (fn, schedule = queueMicrotask) => {\n let _planned = 0;\n const throttled = (e) => {\n if (!_planned++) fn(e), schedule((_dirty = _planned > 1) => (\n _planned = 0, _dirty && throttled(e)\n ));\n }\n return throttled;\n}\n\nexport const debounce = (fn, schedule = queueMicrotask, _count = 0) => (arg, _planned=++_count) => schedule(() => (_planned == _count && fn(arg)))\n\nexport * from './store.js';\n\nexport default sprae\n", "// signals-based proxy\nimport { signal, computed, batch, untracked } from './core.js'\n\n\n// _signals allows both storing signals and checking instance, which would be difficult with WeakMap\nexport const _signals = Symbol('signals'),\n _change = Symbol('change'),\n _set = Symbol('set')\n\n// object store is not lazy\n// parent defines parent scope or sandbox\nexport const store = (values, parent = globalThis) => {\n if (!values) return values\n\n // ignore globals\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 // NOTE: be careful\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, {[_change]: signal(keyCount), [_signals]: signals}), {\n get: (_, k) => (k in signals ? (signals[k] ? signals[k].valueOf() : signals[k]) : parent[k]),\n set: (_, k, v, _s) => (k in signals ? set(signals, k, v) : (create(signals, k, v), signals[_change].value = ++keyCount), 1), // bump length for new signal\n // FIXME: try to avild calling Symbol.dispose here\n deleteProperty: (_, k) => (k in signals && (k[0] != '_' && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount), 1),\n // subscribe to length when object is spread\n ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),\n has: _ => 1 // sandbox prevents writing to global\n }),\n\n // init signals for values\n 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\nconst mut = ['push', 'pop', 'shift', 'unshift', 'splice']\n\n// array store - signals are lazy since arrays can be very large & expensive\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 conducts prop access to signals\n state = new Proxy(\n Object.assign(signals, {\n [_change]: length,\n [_signals]: signals,\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// create signal value, skip untracked\nconst create = (signals, k, v) => (signals[k] = k[0] == '_' || v?.peek ? v : signal(store(v)))\n\n// set/update signal value\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] === '_' ? (signals[k] = v) :\n (v !== (_v = (_s = signals[k]).peek())) && (\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 ? 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 })) : _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", "// preact-signals minimal implementation\nlet current, depth = 0, batched;\n\n// default signals impl\n\nexport const signal = (v, _s, _obs = new Set, _v = () => _s.value) => (\n _s = {\n get value() {\n current?.deps.push(_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, then: _v, toString: _v, valueOf: _v\n }\n)\n\nexport const effect = (fn, _teardown, _fx, _deps, __tmp) => (\n _fx = (prev) => {\n __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++ > 10) throw 'Cycle detected';\n try { _teardown = fn(); } finally { current = prev; depth-- }\n },\n _deps = _fx.deps = [],\n\n _fx(),\n (dep) => { _teardown?.call?.(); while (dep = _deps.pop()) dep.delete(_fx); }\n)\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, then: _v, toString: _v, valueOf: _v\n }\n)\n\nexport const batch = (fn, _first = !batched) => {\n batched ??= new Set;\n try { fn(); }\n finally { if (_first) { for (const fx of batched) fx(); batched = null } }\n}\n\nexport const untracked = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v)\n", "// \"centralized\" version of :if\nimport sprae, { throttle, _on, _off, _state, frag } from '../core.js';\n\n// :if=\"a\"\nexport default (el, state, _holder, _el, _match) => {\n // new element :if\n // console.log(':if init', el)\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\n el.replaceWith(_holder = document.createTextNode(''))\n _el._holder = _holder._holder = _holder\n\n\n _holder._clauses = [_el._clause = [_el, false]]\n\n _holder.update = throttle(() => {\n let match = _holder._clauses.find(([, s]) => s)\n // console.group(':if update clauses', ..._holder._clauses)\n\n if (match != _match) {\n // console.log(':if match', match)\n _match?.[0].remove()\n _match?.[0][_off]?.()\n if (_match = match) {\n _holder.before(_match[0].content || _match[0])\n // there's no :else after :if, so lazy-sprae here doesn't risk adding own destructor to own list of destructors\n !_match[0][_state] ? (delete _match[0][_state], sprae(_match[0], state)) : _match[0][_on]?.()\n }\n }\n // console.groupEnd()\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 return value => {\n // console.log(':if update', _el, value)\n _el._clause[1] = value\n _el._holder.update()\n }\n}\n", "import { _on, _off, _state, frag } from '../core.js';\n\n\n// NOTE: we can reach :else counterpart whereas prev :else :if is on hold\nexport default (el, state, _el, _, _prev=el) => {\n\n // console.log(':else init', el)\n _el = el.content ? frag(el) : el\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() => {\n // console.log(':else update', _el)\n _el._holder.update()\n }\n}\n", "import { frag, call } from \"../core.js\"\n\nexport default el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n v => (v = call(v, el.textContent), el.textContent = v == null ? \"\" : v)\n)\n", "import { clsx, call } from \"../core.js\";\n\nexport default (el, _cur, _new) => (\n _cur = new Set,\n (v) => {\n _new = new Set\n if (v) clsx(call(v, el.className)).split(' ').map(c => c && _new.add(c))\n for (let c of _cur) if (_new.has(c)) _new.delete(c); else el.classList.remove(c);\n for (let c of _cur = _new) el.classList.add(c)\n }\n)\n", "import { call, attr } from \"../core.js\";\n\nexport default (el, _static) => (\n _static = el.getAttribute(\"style\"),\n v => {\n v = call(v, el.style)\n if (typeof v === \"string\") attr(el, \"style\", _static + '; ' + 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", "import { call } from \"../core.js\"\n\nexport default () => v => (call(v))\n", "import sprae, { attr, parse, _state } from \"../core.js\";\n\n\n// create expression setter, reflecting value back to state\nexport const setter = (expr, _set = parse(`${expr}=__`)) => (target, value) => {\n // save value to stash\n target.__ = value; _set(target), delete target.__\n}\n\nexport default (el, state, expr, name) => {\n // bind back to value, but some values can be not bindable, eg. `:value=\"7\"`\n try {\n const set = setter(expr)\n const handleChange = el.type === 'checkbox' ? () => set(state, el.checked) :\n el.type === 'select-multiple' ? () => set(state, [...el.selectedOptions].map(o => o.value)) :\n () => set(state, el.selectedIndex < 0 ? null : el.value)\n\n el.oninput = el.onchange = handleChange; // hope user doesn't redefine these manually via `.oninput = somethingElse` - it saves 5 loc vs addEventListener\n\n if (el.type?.startsWith('select')) {\n // select element also must observe any added/removed options or changed values (outside of sprae)\n new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });\n\n // select options must be initialized before calling an update\n sprae(el, state)\n }\n\n // initial state value - setter has already cached it, no need to parse again\n parse(expr)(state) ?? handleChange()\n } catch { }\n\n return (el.type === \"text\" || el.type === \"\") ?\n (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)) :\n (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ?\n (value, from, to) => (\n // we retain selection in input\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.value === value && ((el.checked = value), attr(el, 'checked', value))\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) o.removeAttribute('selected')\n for (let v of value) el.querySelector(`[value=\"${v}\"]`).setAttribute('selected', '')\n } :\n (value) => (el.value = value);\n}\n", "import { parse } from \"../core.js\"\n// import { setter } from \"./value.js\"\n\nexport default (el, state, expr, name, _prev, _set) => (\n typeof parse(expr)(state) == 'function' ?\n v => (v(el)) :\n // NOTE: we have to set element statically (outside of effect) to avoid parasitic sub - multiple els with same :ref can cause recursion (eg. :each :ref=\"x\")\n // (setter(expr)(state, el))\n (Object.defineProperty(state, expr, { value: el, configurable: true }), () => {})\n)\n", "import sprae, { store, call, untracked, _state } from '../core.js'\n\nexport default (el, rootState, _scope) => (\n // prevent subsequent effects\n el[_state] = null,\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 _scope = store({}, rootState),\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 _scope\n values => {\n let ext = call(values, _scope);\n // we bind to _scope to alleviate friction of using scope method directly\n for (let k in ext) _scope[k] = typeof ext[k] === 'function' ? ext[k].bind(_scope) : ext[k];\n // Object.assign(_scope, call(values, _scope))\n return el[_state] ?? (delete el[_state], untracked(() => sprae(el, _scope)))\n }\n)\n", "import sprae, { store, _state, effect, _change, _signals, frag, throttle } from \"../core.js\";\n\nconst each = (tpl, state, expr) => {\n let [itemVar, idxVar = \"$\"] = expr.split(/\\bin\\b/)[0].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 holder = document.createTextNode(\"\");\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n // FIXME: pass items to update instead of global\n let update = throttle(() => {\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 // 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 // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n\n let idx = i,\n // inherited state must be cheaper in terms of memory and faster in terms of performance, compared to creating a proxy store\n // subscope = store({\n // // NOTE: since we simulate signal, we have to make sure it's actual signal, not fake one\n // // FIXME: try to avoid this, we also have issue with wrongly calling dispose in store on delete\n // [itemVar]: cur[_signals]?.[idx]?.peek ? cur[_signals]?.[idx] : cur[idx],\n // [idxVar]: keys ? keys[idx] : idx\n // }, state)\n subscope = Object.create(state, {\n [itemVar]: { get: () => cur[idx] },\n [idxVar]: { value: keys ? keys[idx] : idx }\n })\n\n let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);\n\n holder.before(el.content || el);\n\n sprae(el, subscope);\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\n prevl = newl\n })\n\n tpl.replaceWith(holder);\n tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n return 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 return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n update()\n })\n }\n}\n\n// :each directive skips v, k\neach.parse = (str) => str.split(/\\bin\\b/)[1].trim()\n\nexport default each\n", "import { attr, call } from \"../core.js\";\n\nexport default (el, st, ex, name) => v => attr(el, name, call(v, el.getAttribute(name)))\n", "import { attr, dashcase } from \"../core.js\";\n\nexport default (target) => value => { for (let key in value) attr(target, dashcase(key), value[key]) }\n", "import store from \"./store.js\";\nimport { batch, computed, effect, signal, untracked } from './signal.js';\nimport sprae, { use, directive, modifier, start, throttle, debounce, _add, _off, _state, _on, _dispose } 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/default.js\";\nimport _spread from \"./directive/spread.js\";\n\n\nObject.assign(directive, {\n // :x=\"x\"\n '*': _default,\n\n // :=\"{a,b,c}\"\n '': _spread,\n\n // :class=\"[a, b, c]\"\n class: _class,\n\n // :text=\"...\"\n text: _text,\n\n // :style=\"...\"\n style: _style,\n\n // :fx=\"...\"\n fx: _fx,\n\n // :value - 2 way binding like x-model\n value: _value,\n\n // :ref=\"...\"\n ref: _ref,\n\n // :scope creates variables scope for a subtree\n scope: _scope,\n\n if: _if,\n else: _else,\n\n // :each=\"v,k in src\"\n each: _each\n})\n\nObject.assign(modifier, {\n debounce: (fn,\n _how = 250,\n _schedule = _how === \"tick\" ? queueMicrotask : _how === \"raf\" ? requestAnimationFrame : _how === \"idle\" ? requestIdleCallback : ((fn) => setTimeout(fn, _how)),\n _count = 0\n ) =>\n debounce(fn, _schedule),\n\n throttle: (fn, _how = 250, _schedule = _how === \"tick\" ? queueMicrotask : _how === \"raf\" ? requestAnimationFrame : ((fn) => setTimeout(fn, _how))) => (\n throttle(fn, _schedule)\n ),\n\n once: (fn, _done, _fn) => Object.assign((e) => !_done && (_done = 1, fn(e)), { once: true }),\n\n // event modifiers\n // actions\n prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),\n stop: (fn) => (e) => (e?.stopPropagation(), fn(e)),\n immediate: (fn) => (e) => (e?.stopImmediatePropagation(), fn(e)),\n\n // options\n passive: fn => (fn.passive = true, fn),\n capture: fn => (fn.capture = true, fn),\n\n // target\n window: fn => (fn.target = window, fn),\n document: fn => (fn.target = document, fn),\n parent: fn => (fn.target = fn.target.parentNode, fn),\n\n // test\n self: (fn) => (e) => (e.target === fn.target && fn(e)),\n\n outside: (fn) => (e, _target) => (\n _target = fn.target,\n !_target.contains(e.target) && e.target.isConnected && (_target.offsetWidth || _target.offsetHeight)\n ),\n})\n\n// key testers\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\" || 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// augment modifiers with key testers\nfor (let k in keys) modifier[k] = (fn, ...params) => (e) => keys[k](e) && params.every(k => keys[k]?.(e) ?? e.key === k) && fn(e)\n\nuse({\n compile: expr => {\n return sprae.constructor(`with (arguments[0]) { ${expr} }`)\n },\n\n // signals\n signal, effect, computed, batch, untracked\n})\n\n// expose for runtime config\nsprae.use = use\nsprae.store = store\nsprae.directive = directive\nsprae.modifier = modifier\nsprae.start = start\n\nexport default sprae\nexport { sprae, store, signal, effect, computed, batch, untracked, start, use }\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["_dispose", "_state", "_on", "_off", "_add", "prefix", "signal", "effect", "computed", "batch", "fn", "untracked", "directive", "modifier", "currentDir", "sprae", "el", "state", "store_default", "fx", "offs", "on", "off", "add", "_attrs", "i", "name", "value", "initDirective", "child", "attrName", "expr", "cur", "steps", "step", "length", "prev", "str", "mods", "evaluate", "parse", "type", "first", "e", "call", "applyMods", "_poff", "update", "dispose", "change", "count", "throttle", "use", "s", "compile", "start", "root", "values", "mutations", "m", "attr", "prepare", "_fn", "_expr", "cb", "_out", "result", "v", "params", "sx", "a", "b", "k", "frag", "tpl", "content", "attributes", "ref", "childNodes", "arg", "dashcase", "match", "clsx", "c", "schedule", "_planned", "throttled", "_dirty", "debounce", "_count", "core_default", "_signals", "_change", "_set", "store", "values", "parent", "list", "keyCount", "signals", "state", "signal", "_", "k", "v", "_s", "set", "create", "descs", "computed", "list", "values", "parent", "signals", "isMut", "mut", "fn", "length", "signal", "state", "_change", "_signals", "_", "k", "store", "v", "i", "create", "set", "_s", "_v", "_set", "untracked", "batch", "store_default", "current", "depth", "batched", "signal", "v", "_s", "_obs", "_v", "val", "sub", "effect", "fn", "_teardown", "_fx", "_deps", "__tmp", "prev", "dep", "computed", "_c", "_e", "batch", "_first", "fx", "untracked", "_prev", "if_default", "el", "state", "_holder", "_el", "_match", "_a", "core_default", "_state", "frag", "throttle", "match", "s", "_off", "_on", "value", "else_default", "el", "state", "_el", "_", "_prev", "frag", "_state", "text_default", "el", "frag", "v", "call", "class_default", "el", "_cur", "_new", "v", "clsx", "call", "c", "style_default", "el", "_static", "v", "call", "attr", "k", "fx_default", "v", "call", "setter", "expr", "_set", "parse", "target", "value", "value_default", "el", "state", "name", "set", "handleChange", "o", "core_default", "from", "to", "attr", "v", "ref_default", "el", "state", "expr", "name", "_prev", "_set", "parse", "v", "scope_default", "el", "rootState", "_scope", "_state", "store", "values", "ext", "call", "k", "untracked", "core_default", "each", "tpl", "state", "expr", "itemVar", "idxVar", "holder", "cur", "keys", "items", "prevl", "update", "throttle", "_a", "_b", "i", "newItems", "newl", "_change", "s", "_signals", "idx", "subscope", "el", "frag", "core_default", "_prev", "_state", "value", "_", "effect", "str", "each_default", "default_default", "el", "st", "ex", "name", "v", "attr", "call", "spread_default", "target", "value", "key", "attr", "dashcase", "directive", "default_default", "spread_default", "class_default", "text_default", "style_default", "fx_default", "value_default", "ref_default", "scope_default", "if_default", "else_default", "each_default", "modifier", "fn", "_how", "_schedule", "_count", "debounce", "throttle", "_done", "_fn", "e", "_target", "keys", "k", "params", "use", "expr", "core_default", "signal", "effect", "computed", "batch", "untracked", "store_default", "start", "sprae_default"]
|
|
7
7
|
}
|