sprae 10.8.2 → 10.9.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.
package/core.js CHANGED
@@ -53,7 +53,7 @@ export default function sprae(el, values) {
53
53
  // NOTE: secondary directives don't stop flow nor extend state, so no need to check
54
54
  for (let name of names) {
55
55
  let dir = directive[name] || directive.default
56
- let evaluate = (dir.parse || parse)(attr.value, parse)
56
+ let evaluate = (dir.parse || parse)(attr.value)
57
57
  let dispose = dir(el, evaluate, state, name);
58
58
  if (dispose) disposes.push(dispose);
59
59
  }
@@ -73,7 +73,7 @@ export default function sprae(el, values) {
73
73
 
74
74
  // compiler
75
75
  const evalMemo = {};
76
- const parse = (expr, dir, fn) => {
76
+ export const parse = (expr, dir, fn) => {
77
77
  if (fn = evalMemo[expr = expr.trim()]) return fn
78
78
 
79
79
  // static-time errors
@@ -85,7 +85,7 @@ const parse = (expr, dir, fn) => {
85
85
  }
86
86
 
87
87
  // wrapped call
88
- export let err = (e, dir, expr = '') => {
88
+ export const err = (e, dir, expr = '') => {
89
89
  throw Object.assign(e, { message: `∴ ${e.message}\n\n${dir}${expr ? `="${expr}"\n\n` : ""}`, expr })
90
90
  }
91
91
 
package/directive/each.js CHANGED
@@ -1,4 +1,4 @@
1
- import sprae, { directive, frag } from "../core.js";
1
+ import sprae, { directive, frag, parse } from "../core.js";
2
2
  import store, { _change, _signals } from "../store.js";
3
3
  import { effect, untracked, computed } from '../signal.js';
4
4
 
@@ -87,7 +87,7 @@ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
87
87
 
88
88
 
89
89
  // redefine parser to exclude `[a in] b`
90
- directive.each.parse = (expr, parse) => {
90
+ directive.each.parse = (expr) => {
91
91
  let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
92
92
  let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
93
93
 
@@ -10,7 +10,7 @@ directive.style = (el, evaluate, state) => {
10
10
  if (typeof v === "string") el.setAttribute("style", initStyle + v);
11
11
  else {
12
12
  el.setAttribute("style", initStyle);
13
- for (let k in v) el.style.setProperty(k, v[k]);
13
+ for (let k in v) el.style.setProperty(k, el.style[k] = v[k])
14
14
  }
15
15
  });
16
16
  };
@@ -1,14 +1,12 @@
1
- import { directive } from "../core.js";
1
+ import { directive, parse } from "../core.js";
2
2
  import { attr } from './default.js';
3
3
  import { effect } from "../signal.js";
4
4
 
5
5
  // connect expr to element value
6
- directive.value = (el, evaluate, state) => {
7
- let from, to;
8
- let update = el.type === "text" || el.type === ""
9
- ? (value) => el.setAttribute("value", (el.value = value == null ? "" : value))
10
- : el.tagName === "TEXTAREA" || el.type === "text" || el.type === ""
11
- ? (value) =>
6
+ directive.value = (el, [getValue, setValue], state) => {
7
+ const update =
8
+ (el.type === "text" || el.type === "") ? (value) => el.setAttribute("value", (el.value = value == null ? "" : value))
9
+ : (el.tagName === "TEXTAREA" || el.type === "text" || el.type === "") ? (value, from, to) =>
12
10
  (
13
11
  // we retain selection in input
14
12
  (from = el.selectionStart),
@@ -16,15 +14,28 @@ directive.value = (el, evaluate, state) => {
16
14
  el.setAttribute("value", (el.value = value == null ? "" : value)),
17
15
  from && el.setSelectionRange(from, to)
18
16
  )
19
- : el.type === "checkbox"
20
- ? (value) => (el.checked = value, attr(el, "checked", value))
21
- : el.type === "select-one"
22
- ? (value) => {
17
+ : (el.type === "checkbox") ? (value) => (el.checked = value, attr(el, "checked", value))
18
+ : (el.type === "select-one") ? (value) => {
23
19
  for (let option in el.options) option.removeAttribute("selected");
24
20
  el.value = value;
25
21
  el.selectedOptions[0]?.setAttribute("selected", "");
26
22
  }
27
- : (value) => (el.value = value);
23
+ : (value) => (el.value = value);
28
24
 
29
- return effect(() => (update(evaluate(state))));
25
+ // bind back
26
+ const handleChange = el.type === 'checkbox' ? e => setValue(state, el.checked) : e => setValue(state, el.value)
27
+ el.addEventListener('input', handleChange)
28
+ el.addEventListener('change', handleChange)
29
+
30
+ return effect(() => (update(getValue(state))));
30
31
  };
32
+
33
+ directive.value.parse = expr => {
34
+ let evaluate = [parse(expr)]
35
+ try {
36
+ // for values like `123 = arguments[1]`, `foo?.bar = arguments[1]`
37
+ evaluate.push(parse(`${expr}=arguments[1];`))
38
+ }
39
+ catch (e) { }
40
+ return evaluate
41
+ }
package/dist/sprae.js CHANGED
@@ -122,7 +122,7 @@ function del(signals, key) {
122
122
  }
123
123
 
124
124
  // core.js
125
- var _dispose = Symbol.dispose ||= Symbol("dispose");
125
+ var _dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
126
126
  var directive = {};
127
127
  var memo = /* @__PURE__ */ new WeakMap();
128
128
  function sprae(el, values) {
@@ -151,7 +151,7 @@ function sprae(el, values) {
151
151
  let names = attr2.name.slice(1).split(":");
152
152
  for (let name of names) {
153
153
  let dir = directive[name] || directive.default;
154
- let evaluate = (dir.parse || parse)(attr2.value, parse);
154
+ let evaluate = (dir.parse || parse)(attr2.value);
155
155
  let dispose = dir(el2, evaluate, state, name);
156
156
  if (dispose)
157
157
  disposes.push(dispose);
@@ -254,7 +254,7 @@ var effect2 = (fn, teardown, fx, deps) => (fx = (prev) => {
254
254
  });
255
255
  var computed2 = (fn, s = signal2(), c, e) => (c = {
256
256
  get value() {
257
- e ||= effect2(() => s.value = fn());
257
+ e || (e = effect2(() => s.value = fn()));
258
258
  return s.value;
259
259
  },
260
260
  peek: s.peek
@@ -319,6 +319,7 @@ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
319
319
  });
320
320
  const update = () => {
321
321
  untracked(() => {
322
+ var _a, _b;
322
323
  let i = 0, newItems = items.value, newl = newItems.length;
323
324
  if (cur && !cur[_change]) {
324
325
  for (let s of cur[_signals] || []) {
@@ -344,7 +345,7 @@ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
344
345
  }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
345
346
  holder.before(el.content || el);
346
347
  sprae(el, scope);
347
- ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {
348
+ ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose] = () => {
348
349
  el[Symbol.dispose](), el.remove();
349
350
  };
350
351
  }
@@ -362,10 +363,10 @@ directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
362
363
  planned++;
363
364
  });
364
365
  };
365
- directive.each.parse = (expr, parse2) => {
366
+ directive.each.parse = (expr) => {
366
367
  let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
367
368
  let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
368
- return [itemVar, idxVar, parse2(itemsExpr)];
369
+ return [itemVar, idxVar, parse(itemsExpr)];
369
370
  };
370
371
 
371
372
  // directive/ref.js
@@ -439,7 +440,7 @@ directive.style = (el, evaluate, state) => {
439
440
  else {
440
441
  el.setAttribute("style", initStyle);
441
442
  for (let k in v)
442
- el.style.setProperty(k, v[k]);
443
+ el.style.setProperty(k, el.style[k] = v[k]);
443
444
  }
444
445
  });
445
446
  };
@@ -593,15 +594,25 @@ var dashcase = (str) => {
593
594
  };
594
595
 
595
596
  // directive/value.js
596
- directive.value = (el, evaluate, state) => {
597
- let from, to;
598
- let update = el.type === "text" || el.type === "" ? (value) => el.setAttribute("value", el.value = value == null ? "" : value) : el.tagName === "TEXTAREA" || el.type === "text" || el.type === "" ? (value) => (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to)) : el.type === "checkbox" ? (value) => (el.checked = value, attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
597
+ directive.value = (el, [getValue, setValue], state) => {
598
+ const update = el.type === "text" || el.type === "" ? (value) => el.setAttribute("value", el.value = value == null ? "" : value) : el.tagName === "TEXTAREA" || el.type === "text" || el.type === "" ? (value, from, to) => (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to)) : el.type === "checkbox" ? (value) => (el.checked = value, attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
599
599
  for (let option in el.options)
600
600
  option.removeAttribute("selected");
601
601
  el.value = value;
602
602
  el.selectedOptions[0]?.setAttribute("selected", "");
603
603
  } : (value) => el.value = value;
604
- return effect(() => update(evaluate(state)));
604
+ const handleChange = el.type === "checkbox" ? (e) => setValue(state, el.checked) : (e) => setValue(state, el.value);
605
+ el.addEventListener("input", handleChange);
606
+ el.addEventListener("change", handleChange);
607
+ return effect(() => update(getValue(state)));
608
+ };
609
+ directive.value.parse = (expr) => {
610
+ let evaluate = [parse(expr)];
611
+ try {
612
+ evaluate.push(parse(`${expr}=arguments[1];`));
613
+ } catch (e) {
614
+ }
615
+ return evaluate;
605
616
  };
606
617
 
607
618
  // directive/fx.js
@@ -611,7 +622,7 @@ directive.fx = (el, evaluate, state) => {
611
622
 
612
623
  // sprae.js
613
624
  sprae.use(ulive_es_exports);
614
- sprae.use({ compile: (expr) => sprae.constructor(`__scope`, `with (__scope) { return ${expr} };`) });
625
+ sprae.use({ compile: (expr) => sprae.constructor(`with (arguments[0]) { return ${expr} };`) });
615
626
  var sprae_default = sprae;
616
627
  export {
617
628
  sprae_default as default
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../signal.js", "../store.js", "../core.js", "../node_modules/ulive/dist/ulive.es.js", "../directive/if.js", "../directive/each.js", "../directive/ref.js", "../directive/with.js", "../directive/html.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/default.js", "../directive/value.js", "../directive/fx.js", "../sprae.js"],
4
+ "sourcesContent": ["// signals adapter - allows switching signals implementation and not depend on core\nexport let signal, effect, untracked, batch, computed;\n\nexport function use(s) {\n signal = s.signal\n effect = s.effect\n computed = s.computed\n batch = s.batch || (fn => fn())\n untracked = s.untracked || batch\n}\n", "// signals-based proxy\nimport { signal, computed, effect, batch, untracked } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('length');\n\n// object store is not lazy\nexport default function store(values, parent) {\n if (!values) return values\n\n // ignore existing state as argument\n if (values[_signals]) return values;\n\n // redirect for optimized array store\n if (Array.isArray(values)) return list(values)\n\n // ignore non-objects\n if (values.constructor !== Object) return values;\n\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length)\n\n // proxy conducts prop access to signals\n const state = new Proxy(signals, {\n get: (_, key) => key === _change ? _len : key === _signals ? signals : (signals[key]?.valueOf()),\n set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? (++_len.value), 1), // bump length for new signal\n deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),\n ownKeys() {\n // subscribe to length when object is spread\n _len.value\n return Reflect.ownKeys(signals);\n },\n })\n\n // init signals for values\n for (let key in values) {\n const desc = Object.getOwnPropertyDescriptor(values, key)\n\n // getter turns into computed\n if (desc?.get) {\n // stash setter\n (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);\n }\n else {\n // init blank signal - make sure we don't take prototype one\n signals[key] = undefined\n set(signals, key, values[key]);\n }\n }\n\n return state\n}\n\n// length changing methods\nconst mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 }\n\n// array store - signals are lazy since arrays can be very large & expensive\nexport function 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 // ignore existing state as argument\n if (values[_signals]) return values;\n\n // .length signal is stored separately, since it cannot be replaced on array\n let _len = signal(values.length),\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 const state = new Proxy(signals, {\n get(_, key) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof key === 'symbol') return key === _change ? _len : key === _signals ? signals : signals[key]\n\n // console.log('get', key)\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut[lastProp] ? _len.peek() : _len.value;\n\n lastProp = key;\n\n if (signals[key]) return signals[key].valueOf()\n\n // I hope reading values here won't diverge from signals\n if (key < signals.length) return (signals[key] = signal(store(values[key]))).value\n },\n\n set(_, key, v) {\n // console.log('set', key, v)\n // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v, l = signals.length; i < l; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n return true\n }\n\n set(signals, key, v)\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n if (key >= _len.peek()) _len.value = signals.length = Number(key) + 1\n\n return true\n },\n\n deleteProperty: (_, key) => (signals[key] && del(signals, key), 1),\n\n })\n\n return state\n}\n\n// set/update signal value\nfunction set(signals, key, v) {\n let s = signals[key]\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property\n else if (!s) {\n // preserve signal value as is\n signals[key] = s = v?.peek ? v : signal(store(v))\n }\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === 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(s.peek())) {\n const cur = s.peek()\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) untracked(() => {\n batch(() => {\n let i = 0, l = v.length;\n for (; i < l; i++) cur[i] = v[i]\n cur.length = l // forces deleting tail signals\n })\n })\n else {\n s.value = v\n }\n }\n // .x = y\n else {\n s.value = store(v)\n }\n}\n\n// delete signal\nfunction del(signals, key) {\n const s = signals[key], del = s[Symbol.dispose]\n if (del) delete s[Symbol.dispose]\n delete signals[key]\n del?.()\n}\n", "import { use } from \"./signal.js\";\nimport store, { _signals } from './store.js';\n\n// polyfill\nconst _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\n// reserved directives - order matters!\nexport const directive = {};\n\n// every element that's in cache === directly spraed and un subsequent sprae is just updated (like each)\nexport const memo = new WeakMap();\n\n// sprae element: apply directives\nexport default function sprae(el, values) {\n // text nodes, comments etc\n if (!el?.childNodes) return\n\n // repeated call can be caused by :each with new objects with old keys needs an update\n if (memo.has(el)) {\n // we rewrite signals instead of update, because user should have what he provided\n return Object.assign(memo.get(el), values)\n }\n\n // take over existing state instead of creating clone\n const state = store(values || {}), disposes = []\n\n init(el);\n\n // if element was spraed by :with or :each instruction - skip, otherwise save\n if (!memo.has(el)) memo.set(el, state);\n\n // disposer unspraes all internal elements\n el[_dispose] = () => {\n while (disposes.length) disposes.pop()();\n memo.delete(el);\n }\n\n return state;\n\n function init(el, parent = el.parentNode) {\n if (!el.childNodes) return // ignore text nodes, comments etc\n\n // init generic-name attributes second\n for (let i = 0; i < el.attributes?.length;) {\n let attr = el.attributes[i];\n\n if (attr.name[0] === ':') {\n el.removeAttribute(attr.name);\n\n // multiple attributes like :id:for=\"\"\n let names = attr.name.slice(1).split(':')\n\n // NOTE: secondary directives don't stop flow nor extend state, so no need to check\n for (let name of names) {\n let dir = directive[name] || directive.default\n let evaluate = (dir.parse || parse)(attr.value)\n let dispose = dir(el, evaluate, state, name);\n if (dispose) disposes.push(dispose);\n }\n\n // stop if element was spraed by internal directive\n if (memo.has(el)) return el[_dispose] && disposes.push(el[_dispose])\n\n // stop if element is skipped (detached) like in case of :if or :each\n if (el.parentNode !== parent) return\n } else i++;\n }\n\n for (let child of [...el.childNodes]) init(child, el);\n };\n}\n\n\n// compiler\nconst evalMemo = {};\nexport const parse = (expr, dir, fn) => {\n if (fn = evalMemo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n // runtime errors\n return evalMemo[expr] = fn\n}\n\n// wrapped call\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\nexport let compile\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}\n\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),\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 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", "let current, batched;\r\n\r\nconst signal = (v, s, obs = new Set) => (\r\n s = {\r\n get value() {\r\n current?.deps.push(obs.add(current));\r\n return v\r\n },\r\n set value(val) {\r\n if (val === v) return\r\n v = val;\r\n for (let sub of obs) batched ? batched.add(sub) : sub(); // notify effects\r\n },\r\n peek() { return v },\r\n },\r\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\r\n s\r\n),\r\n effect = (fn, teardown, fx, deps) => (\r\n fx = (prev) => {\r\n teardown?.call?.();\r\n prev = current, current = fx;\r\n try { teardown = fn(); } finally { current = prev; }\r\n },\r\n deps = fx.deps = [],\r\n\r\n fx(),\r\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\r\n ),\r\n computed = (fn, s = signal(), c, e) => (\r\n c = {\r\n get value() {\r\n e ||= effect(() => s.value = fn());\r\n return s.value\r\n },\r\n peek: s.peek\r\n },\r\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\r\n c\r\n ),\r\n batch = (fn) => {\r\n let fxs = batched;\r\n if (!fxs) batched = new Set;\r\n try { fn(); }\r\n finally {\r\n if (!fxs) {\r\n fxs = batched;\r\n batched = null;\r\n for (const fx of fxs) fx();\r\n }\r\n }\r\n },\r\n untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);\n\nexport { batch, computed, effect, signal, untracked };\n", "import sprae, { directive, memo, frag } from \"../core.js\";\nimport { effect } from \"../signal.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\");\ndirective.if = (el, evaluate, state) => {\n let next = el.nextElementSibling,\n holder = document.createTextNode(''),\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n memo.set(ifEl, null) // mark all el as fake-spraed, because we have to sprae for real on insert\n\n if (next?.hasAttribute(\":else\")) {\n next.removeAttribute(\":else\");\n // if next is :else :if - leave it for its own :if handler\n if (!next.hasAttribute(\":if\")) next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null)\n }\n\n return effect(() => {\n const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n curEl?.remove()\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n memo.get(curEl) === null && memo.delete(curEl) // remove fake memo to sprae as new\n sprae(curEl, state)\n }\n }\n });\n};\n", "import sprae, { directive, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect, untracked, computed } from '../signal.js';\n\n\ndirective.each = (tpl, [itemVar, idxVar, evaluate], state) => {\n // we need :if to be able to replace holder instead of tpl for :if :each case\n const holder = (document.createTextNode(\"\"));\n tpl.replaceWith(holder);\n\n // we re-create items any time new items are produced\n let cur, keys, prevl = 0\n\n // separate computed effect reduces number of needed updates for the effect\n const items = computed(() => {\n keys = null\n let items = evaluate(state)\n if (typeof items === \"number\") items = Array.from({ length: items }, (_, i) => i + 1)\n if (items?.constructor === Object) keys = Object.keys(items), items = Object.values(items)\n return items || []\n })\n\n const update = () => {\n // NOTE: untracked avoids rerendering full list whenever internal items or props change\n untracked(() => {\n let i = 0, newItems = items.value, 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) {\n cur.length = newl\n }\n // update, append, init\n else {\n // init\n if (!cur) {\n cur = newItems\n }\n // update\n else {\n for (; i < prevl; i++) {\n cur[i] = newItems[i]\n }\n }\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n scope = store({\n [itemVar]: cur[_signals]?.[idx] || cur[idx],\n [idxVar]: keys ? keys[idx] : idx\n }, state),\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 ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {\n el[Symbol.dispose](), el.remove()\n };\n }\n }\n\n prevl = newl\n })\n }\n\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just on init) since preact unsubscribes unused signals\n items.value[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned) {\n update()\n queueMicrotask(() => (planned && update(), planned = 0))\n } else planned++\n })\n}\n\n\n// redefine parser to exclude `[a in] b`\ndirective.each.parse = (expr) => {\n let [leftSide, itemsExpr] = expr.split(/\\s+in\\s+/);\n let [itemVar, idxVar = \"$\"] = leftSide.split(/\\s*,\\s*/);\n\n return [itemVar, idxVar, parse(itemsExpr)]\n}\n", "import { directive } from \"../core.js\";\nimport { _change, _signals } from \"../store.js\";\n\n// ref must be last within primaries, since that must be skipped by :each, but before secondaries\ndirective.ref = (el, expr, state) => {\n state[expr] = el\n}\n\ndirective.ref.parse = expr => expr\n", "import sprae, { directive } from \"../core.js\";\nimport store, { _signals } from '../store.js';\nimport { effect } from \"../signal.js\";\n\ndirective.with = (el, evaluate, rootState) => {\n let state\n return effect(() => {\n let values = evaluate(rootState);\n sprae(el, state ? values : state = store(values, rootState))\n })\n};\n", "import sprae, { directive } from \"../core.js\";\n\ndirective.html = (el, evaluate, state) => {\n let tpl = evaluate(state);\n\n if (!tpl) return\n\n let content = (tpl.content || tpl).cloneNode(true);\n el.replaceChildren(content);\n sprae(el, state);\n};\n", "import { directive, frag } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set text content\ndirective.text = (el, evaluate, state) => {\n // <template :text=\"a\"/> or previously initialized template\n if (el.content) el.replaceWith(el = frag(el).childNodes[0])\n\n return effect(() => {\n let value = evaluate(state);\n el.textContent = value == null ? \"\" : value;\n });\n};\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.class = (el, evaluate, state) => {\n let cur = new Set\n return effect(() => {\n let v = evaluate(state);\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 { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.style = (el, evaluate, state) => {\n let initStyle = el.getAttribute(\"style\") || \"\";\n if (!initStyle.endsWith(\";\")) initStyle += \"; \";\n\n return effect(() => {\n let v = evaluate(state);\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + v);\n else {\n el.setAttribute(\"style\", initStyle);\n for (let k in v) el.style.setProperty(k, el.style[k] = v[k])\n }\n });\n};\n", "import { directive, err } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set generic property directive\ndirective.default = (target, evaluate, state, name) => {\n // simple prop\n if (!name.startsWith('on')) return effect(() => {\n let value = evaluate(state);\n if (name) attr(target, name, value)\n else for (let key in value) attr(target, dashcase(key), value[key]);\n });\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 const 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 (match, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // single event\n if (ctxs.length == 1) return effect(() => addListener(evaluate(state), ctxs[0]))\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n const 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 effect(() => (\n startFn = evaluate(state),\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n ))\n\n // add listener with the context\n function addListener(fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }) {\n if (defer) fn = defer(fn)\n\n const cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(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};\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\n throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108); },\n debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108); },\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// 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\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\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => \"-\" + match.toLowerCase());\n}\n", "import { directive, parse } from \"../core.js\";\nimport { attr } from './default.js';\nimport { effect } from \"../signal.js\";\n\n// connect expr to element value\ndirective.value = (el, [getValue, setValue], state) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ? (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value))\n : (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ? (value, from, to) =>\n (\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\") ? (value) => (el.checked = value, attr(el, \"checked\", value))\n : (el.type === \"select-one\") ? (value) => {\n for (let option in el.options) option.removeAttribute(\"selected\");\n el.value = value;\n el.selectedOptions[0]?.setAttribute(\"selected\", \"\");\n }\n : (value) => (el.value = value);\n\n // bind back\n const handleChange = el.type === 'checkbox' ? e => setValue(state, el.checked) : e => setValue(state, el.value)\n el.addEventListener('input', handleChange)\n el.addEventListener('change', handleChange)\n\n return effect(() => (update(getValue(state))));\n};\n\ndirective.value.parse = expr => {\n let evaluate = [parse(expr)]\n try {\n // for values like `123 = arguments[1]`, `foo?.bar = arguments[1]`\n evaluate.push(parse(`${expr}=arguments[1];`))\n }\n catch (e) { }\n return evaluate\n}\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.fx = (el, evaluate, state) => {\n return effect(() => evaluate(state));\n};\n", "import sprae from './core.js'\n\nimport * as signals from 'ulive'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/html.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'\n\n// default signals\nsprae.use(signals)\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": ["del", "el", "attr", "batch", "computed", "effect", "signal", "untracked", "keys", "items", "v", "target"]
7
+ }
package/dist/sprae.min.js CHANGED
@@ -1 +1,5 @@
1
- var e,t,r,l,n,s=Object.defineProperty,o=Symbol("signals"),a=Symbol("length");function i(t,r){if(!t)return t;if(t[o])return t;if(Array.isArray(t))return function(t){let r;if(t[o])return t;let l=e(t.length),n=Array(t.length).fill();const s=new Proxy(n,{get:(s,c)=>"symbol"==typeof c?c===a?l:c===o?n:n[c]:"length"===c?u[r]?l.peek():l.value:(r=c,n[c]?n[c].valueOf():c<n.length?(n[c]=e(i(t[c]))).value:void 0),set(e,t,r){if("length"===t){for(let e=r,t=n.length;e<t;e++)delete s[e];return l.value=n.length=r,!0}return c(n,t,r),t>=l.peek()&&(l.value=n.length=Number(t)+1),!0},deleteProperty:(e,t)=>(n[t]&&f(n,t),1)});return s}(t);if(t.constructor!==Object)return t;let l={...r?.[o]},s=e(Object.values(t).length);const p=new Proxy(l,{get:(e,t)=>t===a?s:t===o?l:l[t]?.valueOf(),set:(e,t,r,n)=>(n=l[t],c(l,t,r),n??++s.value,1),deleteProperty:(e,t)=>(l[t]&&(f(l,t),s.value--),1),ownKeys:()=>(s.value,Reflect.ownKeys(l))});for(let e in t){const r=Object.getOwnPropertyDescriptor(t,e);r?.get?(l[e]=n(r.get.bind(p)))._set=r.set?.bind(p):(l[e]=void 0,c(l,e,t[e]))}return p}var u={push:1,pop:1,shift:1,unshift:1,splice:1};function c(t,n,s){let o=t[n];if("_"===n[0])t[n]=s;else if(o)if(s===o.peek());else if(o._set)o._set(s);else if(Array.isArray(s)&&Array.isArray(o.peek())){const e=o.peek();e[a]?r((()=>{l((()=>{let t=0,r=s.length;for(;t<r;t++)e[t]=s[t];e.length=r}))})):o.value=s}else o.value=i(s);else t[n]=o=s?.peek?s:e(i(s))}function f(e,t){const r=e[t],l=r[Symbol.dispose];l&&delete r[Symbol.dispose],delete e[t],l?.()}var p=Symbol.dispose||=Symbol("dispose"),d={},y=new WeakMap;function h(e,t){if(!e?.childNodes)return;if(y.has(e))return Object.assign(y.get(e),t);const r=i(t||{}),l=[];return function e(t,n=t.parentNode){if(t.childNodes){for(let e=0;e<t.attributes?.length;){let s=t.attributes[e];if(":"===s.name[0]){t.removeAttribute(s.name);let e=s.name.slice(1).split(":");for(let n of e){let e=d[n]||d.default,o=e(t,(e.parse||g)(s.value,g),r,n);o&&l.push(o)}if(y.has(t))return t[p]&&l.push(t[p]);if(t.parentNode!==n)return}else e++}for(let r of[...t.childNodes])e(r,t)}}(e),y.has(e)||y.set(e,r),e[p]=()=>{for(;l.length;)l.pop()();y.delete(e)},r}var m,v={},g=(e,t,r)=>{if(r=v[e=e.trim()])return r;try{r=m(e)}catch(r){b(r,t,e)}return v[e]=r},b=(e,t,r="")=>{throw Object.assign(e,{message:`∴ ${e.message}\n\n${t}${r?`="${r}"\n\n`:""}`,expr:r})};h.use=s=>{s.signal&&function(s){e=s.signal,t=s.effect,n=s.computed,l=s.batch||(e=>e()),r=s.untracked||l}(s),s.compile&&(m=s.compile)};var k,A,w=e=>{if(!e.nodeType)return e;let t=e.content.cloneNode(!0),r=[...e.attributes],l=document.createTextNode(""),n=(t.append(l),[...t.childNodes]);return{childNodes:n,content:t,remove:()=>t.append(...n),replaceWith(e){e!==l&&(l.before(e),t.append(...n))},attributes:r,removeAttribute(e){r.splice(r.findIndex((t=>t.name===e)),1)}}},S={};((e,t)=>{for(var r in t)s(e,r,{get:t[r],enumerable:!0})})(S,{batch:()=>W,computed:()=>x,effect:()=>O,signal:()=>N,untracked:()=>j});var N=(e,t,r=new Set)=>((t={get value(){return k?.deps.push(r.add(k)),e},set value(t){if(t!==e){e=t;for(let e of r)A?A.add(e):e()}},peek:()=>e}).toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),O=(e,t,r,l)=>(l=(r=l=>{t?.call?.(),l=k,k=r;try{t=e()}finally{k=l}}).deps=[],r(),e=>{for(t?.call?.();e=l.pop();)e.delete(r)}),x=(e,t=N(),r,l)=>((r={get value(){return l||=O((()=>t.value=e())),t.value},peek:t.peek}).toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),W=e=>{let t=A;t||(A=new Set);try{e()}finally{if(!t){t=A,A=null;for(const e of t)e()}}},j=(e,t,r)=>(t=k,k=null,r=e(),k=t,r),T=Symbol("if");d.if=(e,r,l)=>{let n,s,o,a=e.nextElementSibling,i=document.createTextNode("");return e.replaceWith(i),s=e.content?w(e):e,y.set(s,null),a?.hasAttribute(":else")&&(a.removeAttribute(":else"),a.hasAttribute(":if")||(a.remove(),o=a.content?w(a):a,y.set(o,null))),t((()=>{const t=r(l)?s:e[T]?null:o;a&&(a[T]=t===s),n!=t&&(n?.remove(),(n=t)&&(i.before(n.content||n),null===y.get(n)&&y.delete(n),h(n,l)))}))},d.each=(e,[l,s,u],c)=>{const f=document.createTextNode("");e.replaceWith(f);let p,d,y=0;const m=n((()=>{d=null;let e=u(c);return"number"==typeof e&&(e=Array.from({length:e},((e,t)=>t+1))),e?.constructor===Object&&(d=Object.keys(e),e=Object.values(e)),e||[]})),v=()=>{r((()=>{let t=0,r=m.value,n=r.length;if(p&&!p[a]){for(let e of p[o]||[])e[Symbol.dispose]();p=null,y=0}if(n<y)p.length=n;else{if(p)for(;t<y;t++)p[t]=r[t];else p=r;for(;t<n;t++){p[t]=r[t];let n=t,a=i({[l]:p[o]?.[n]||p[n],[s]:d?d[n]:n},c),u=e.content?w(e):e.cloneNode(!0);f.before(u.content||u),h(u,a),((p[o]||=[])[t]||={})[Symbol.dispose]=()=>{u[Symbol.dispose](),u.remove()}}}y=n}))};let g=0;return t((()=>{m.value[a]?.value,g?g++:(v(),queueMicrotask((()=>(g&&v(),g=0))))}))},d.each.parse=(e,t)=>{let[r,l]=e.split(/\s+in\s+/),[n,s="$"]=r.split(/\s*,\s*/);return[n,s,t(l)]},d.ref=(e,t,r)=>{r[t]=e},d.ref.parse=e=>e,d.with=(e,r,l)=>{let n;return t((()=>{let t=r(l);h(e,n?t:n=i(t,l))}))},d.html=(e,t,r)=>{let l=t(r);if(!l)return;let n=(l.content||l).cloneNode(!0);e.replaceChildren(n),h(e,r)},d.text=(e,r,l)=>(e.content&&e.replaceWith(e=w(e).childNodes[0]),t((()=>{let t=r(l);e.textContent=null==t?"":t}))),d.class=(e,r,l)=>{let n=new Set;return t((()=>{let t=r(l),s=new Set;t&&("string"==typeof t?t.split(" ").map((e=>s.add(e))):Array.isArray(t)?t.map((e=>e&&s.add(e))):Object.entries(t).map((([e,t])=>t&&s.add(e))));for(let t of n)s.has(t)?s.delete(t):e.classList.remove(t);for(let t of n=s)e.classList.add(t)}))},d.style=(e,r,l)=>{let n=e.getAttribute("style")||"";return n.endsWith(";")||(n+="; "),t((()=>{let t=r(l);if("string"==typeof t)e.setAttribute("style",n+t);else{e.setAttribute("style",n);for(let r in t)e.style.setProperty(r,t[r])}}))},d.default=(e,r,l,n)=>{if(!n.startsWith("on"))return t((()=>{let t=r(l);if(n)P(e,n,t);else for(let r in t)P(e,D(r),t[r])}));const s=n.split("..").map((t=>{let r={evt:"",target:e,test:()=>!0};return r.evt=(t.startsWith("on")?t.slice(2):t).replace(/\.(\w+)?-?([-\w]+)?/g,((e,t,l="")=>(r.test=$[t]?.(r,...l.split("-"))||r.test,""))),r}));if(1==s.length)return t((()=>f(r(l),s[0])));let o,a,i,u=0;const c=e=>{i=f((t=>(i(),a=e?.(t),(u=++u%s.length)?c(a):o&&c(o))),s[u])};return t((()=>(o=r(l),!i&&c(o),()=>o=null)));function f(e,{evt:t,target:r,test:l,defer:n,stop:s,prevent:o,immediate:a,...i}){n&&(e=n(e));const u=r=>{try{l(r)&&(s&&(a?r.stopImmediatePropagation():r.stopPropagation()),o&&r.preventDefault(),e?.(r))}catch(r){b(r,`:on${t}`,e)}};return r.addEventListener(t,u,i),()=>r.removeEventListener(t,u,i)}};var $={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},throttle(e,t){e.defer=e=>C(e,t?Number(t)||0:108)},debounce(e,t){e.defer=e=>_(e,t?Number(t)||0:108)},outside:e=>t=>{let r=e.target;return!(r.contains(t.target)||!1===t.target.isConnected||r.offsetWidth<1&&r.offsetHeight<1)},self:e=>t=>t.target===e.target,ctrl:(e,...t)=>e=>E.ctrl(e)&&t.every((t=>E[t]?E[t](e):e.key===t)),shift:(e,...t)=>e=>E.shift(e)&&t.every((t=>E[t]?E[t](e):e.key===t)),alt:(e,...t)=>e=>E.alt(e)&&t.every((t=>E[t]?E[t](e):e.key===t)),meta:(e,...t)=>e=>E.meta(e)&&t.every((t=>E[t]?E[t](e):e.key===t)),arrow:()=>E.arrow,enter:()=>E.enter,esc:()=>E.esc,tab:()=>E.tab,space:()=>E.space,delete:()=>E.delete,digit:()=>E.digit,letter:()=>E.letter,char:()=>E.char},E={ctrl:e=>e.ctrlKey||"Control"===e.key||"Ctrl"===e.key,shift:e=>e.shiftKey||"Shift"===e.key,alt:e=>e.altKey||"Alt"===e.key,meta:e=>e.metaKey||"Meta"===e.key||"Command"===e.key,arrow:e=>e.key.startsWith("Arrow"),enter:e=>"Enter"===e.key,esc:e=>e.key.startsWith("Esc"),tab:e=>"Tab"===e.key,space:e=>" "===e.key||"Space"===e.key||" "===e.key,delete:e=>"Delete"===e.key||"Backspace"===e.key,digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},P=(e,t,r)=>{null==r||!1===r?e.removeAttribute(t):e.setAttribute(t,!0===r?"":"number"==typeof r||"string"==typeof r?r:"")},C=(e,t)=>{let r,l,n=s=>{r=!0,setTimeout((()=>{if(r=!1,l)return l=!1,n(s),e(s)}),t)};return t=>r?l=!0:(n(t),e(t))},_=(e,t)=>{let r;return l=>{clearTimeout(r),r=setTimeout((()=>{r=null,e(l)}),t)}},D=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase()));d.value=(e,r,l)=>{let n,s,o="text"===e.type||""===e.type?t=>e.setAttribute("value",e.value=null==t?"":t):"TEXTAREA"===e.tagName||"text"===e.type||""===e.type?t=>(n=e.selectionStart,s=e.selectionEnd,e.setAttribute("value",e.value=null==t?"":t),n&&e.setSelectionRange(n,s)):"checkbox"===e.type?t=>(e.checked=t,P(e,"checked",t)):"select-one"===e.type?t=>{for(let t in e.options)t.removeAttribute("selected");e.value=t,e.selectedOptions[0]?.setAttribute("selected","")}:t=>e.value=t;return t((()=>o(r(l))))},d.fx=(e,r,l)=>t((()=>r(l))),h.use(S),h.use({compile:e=>h.constructor("__scope",`with (__scope) { return ${e} };`)});var K=h;export{K as default};
1
+ var Q=Object.defineProperty;var U=(e,o)=>{for(var t in o)Q(e,t,{get:o[t],enumerable:!0})};var O,p,T,P,j;function q(e){O=e.signal,p=e.effect,j=e.computed,P=e.batch||(o=>o()),T=e.untracked||P}var x=Symbol("signals"),E=Symbol("length");function v(e,o){if(!e||e[x])return e;if(Array.isArray(e))return ee(e);if(e.constructor!==Object)return e;let t={...o?.[x]},r=O(Object.values(e).length),s=new Proxy(t,{get:(n,i)=>i===E?r:i===x?t:t[i]?.valueOf(),set:(n,i,c,a)=>(a=t[i],I(t,i,c),a??++r.value,1),deleteProperty:(n,i)=>(t[i]&&(B(t,i),r.value--),1),ownKeys(){return r.value,Reflect.ownKeys(t)}});for(let n in e){let i=Object.getOwnPropertyDescriptor(e,n);i?.get?(t[n]=j(i.get.bind(s)))._set=i.set?.bind(s):(t[n]=void 0,I(t,n,e[n]))}return s}var Y={push:1,pop:1,shift:1,unshift:1,splice:1};function ee(e){let o;if(e[x])return e;let t=O(e.length),r=Array(e.length).fill(),s=new Proxy(r,{get(n,i){if(typeof i=="symbol")return i===E?t:i===x?r:r[i];if(i==="length")return Y[o]?t.peek():t.value;if(o=i,r[i])return r[i].valueOf();if(i<r.length)return(r[i]=O(v(e[i]))).value},set(n,i,c){if(i==="length"){for(let a=c,y=r.length;a<y;a++)delete s[a];return t.value=r.length=c,!0}return I(r,i,c),i>=t.peek()&&(t.value=r.length=Number(i)+1),!0},deleteProperty:(n,i)=>(r[i]&&B(r,i),1)});return s}function I(e,o,t){let r=e[o];if(o[0]==="_")e[o]=t;else if(!r)e[o]=r=t?.peek?t:O(v(t));else if(t!==r.peek())if(r._set)r._set(t);else if(Array.isArray(t)&&Array.isArray(r.peek())){let s=r.peek();s[E]?T(()=>{P(()=>{let n=0,i=t.length;for(;n<i;n++)s[n]=t[n];s.length=i})}):r.value=t}else r.value=v(t)}function B(e,o){let t=e[o],r=t[Symbol.dispose];r&&delete t[Symbol.dispose],delete e[o],r?.()}var M=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),f={},g=new WeakMap;function d(e,o){if(!e?.childNodes)return;if(g.has(e))return Object.assign(g.get(e),o);let t=v(o||{}),r=[];return s(e),g.has(e)||g.set(e,t),e[M]=()=>{for(;r.length;)r.pop()();g.delete(e)},t;function s(n,i=n.parentNode){if(!!n.childNodes){for(let c=0;c<n.attributes?.length;){let a=n.attributes[c];if(a.name[0]===":"){n.removeAttribute(a.name);let y=a.name.slice(1).split(":");for(let k of y){let u=f[k]||f.default,l=(u.parse||W)(a.value),h=u(n,l,t,k);h&&r.push(h)}if(g.has(n))return n[M]&&r.push(n[M]);if(n.parentNode!==i)return}else c++}for(let c of[...n.childNodes])s(c,n)}}}var H={},W=(e,o,t)=>{if(t=H[e=e.trim()])return t;try{t=V(e)}catch(r){R(r,o,e)}return H[e]=t},R=(e,o,t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
2
+
3
+ ${o}${t?`="${t}"
4
+
5
+ `:""}`,expr:t})},V;d.use=e=>{e.signal&&q(e),e.compile&&(V=e.compile)};var N=e=>{if(!e.nodeType)return e;let o=e.content.cloneNode(!0),t=[...e.attributes],r=document.createTextNode(""),s=(o.append(r),[...o.childNodes]);return{childNodes:s,content:o,remove:()=>o.append(...s),replaceWith(n){n!==r&&(r.before(n),o.append(...s))},attributes:t,removeAttribute(n){t.splice(t.findIndex(i=>i.name===n),1)}}};var F={};U(F,{batch:()=>re,computed:()=>te,effect:()=>Z,signal:()=>X,untracked:()=>oe});var w,$,X=(e,o,t=new Set)=>(o={get value(){return w?.deps.push(t.add(w)),e},set value(r){if(r!==e){e=r;for(let s of t)$?$.add(s):s()}},peek(){return e}},o.toJSON=o.then=o.toString=o.valueOf=()=>o.value,o),Z=(e,o,t,r)=>(t=s=>{o?.call?.(),s=w,w=t;try{o=e()}finally{w=s}},r=t.deps=[],t(),s=>{for(o?.call?.();s=r.pop();)s.delete(t)}),te=(e,o=X(),t,r)=>(t={get value(){return r||(r=Z(()=>o.value=e())),o.value},peek:o.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),re=e=>{let o=$;o||($=new Set);try{e()}finally{if(!o){o=$,$=null;for(let t of o)t()}}},oe=(e,o,t)=>(o=w,w=null,t=e(),w=o,t);var z=Symbol("if");f.if=(e,o,t)=>{let r=e.nextElementSibling,s=document.createTextNode(""),n,i,c;return e.replaceWith(s),i=e.content?N(e):e,g.set(i,null),r?.hasAttribute(":else")&&(r.removeAttribute(":else"),r.hasAttribute(":if")||(r.remove(),c=r.content?N(r):r,g.set(c,null))),p(()=>{let a=o(t)?i:e[z]?null:c;r&&(r[z]=a===i),n!=a&&(n?.remove(),(n=a)&&(s.before(n.content||n),g.get(n)===null&&g.delete(n),d(n,t)))})};f.each=(e,[o,t,r],s)=>{let n=document.createTextNode("");e.replaceWith(n);let i,c,a=0,y=j(()=>{c=null;let l=r(s);return typeof l=="number"&&(l=Array.from({length:l},(h,b)=>b+1)),l?.constructor===Object&&(c=Object.keys(l),l=Object.values(l)),l||[]}),k=()=>{T(()=>{var S,C;let l=0,h=y.value,b=h.length;if(i&&!i[E]){for(let A of i[x]||[])A[Symbol.dispose]();i=null,a=0}if(b<a)i.length=b;else{if(!i)i=h;else for(;l<a;l++)i[l]=h[l];for(;l<b;l++){i[l]=h[l];let A=l,K=v({[o]:i[x]?.[A]||i[A],[t]:c?c[A]:A},s),_=e.content?N(e):e.cloneNode(!0);n.before(_.content||_),d(_,K),((C=i[S=x]||(i[S]=[]))[l]||(C[l]={}))[Symbol.dispose]=()=>{_[Symbol.dispose](),_.remove()}}}a=b})},u=0;return p(()=>{y.value[E]?.value,u?u++:(k(),queueMicrotask(()=>(u&&k(),u=0)))})};f.each.parse=e=>{let[o,t]=e.split(/\s+in\s+/),[r,s="$"]=o.split(/\s*,\s*/);return[r,s,W(t)]};f.ref=(e,o,t)=>{t[o]=e};f.ref.parse=e=>e;f.with=(e,o,t)=>{let r;return p(()=>{let s=o(t);d(e,r?s:r=v(s,t))})};f.html=(e,o,t)=>{let r=o(t);if(!r)return;let s=(r.content||r).cloneNode(!0);e.replaceChildren(s),d(e,t)};f.text=(e,o,t)=>(e.content&&e.replaceWith(e=N(e).childNodes[0]),p(()=>{let r=o(t);e.textContent=r??""}));f.class=(e,o,t)=>{let r=new Set;return p(()=>{let s=o(t),n=new Set;s&&(typeof s=="string"?s.split(" ").map(i=>n.add(i)):Array.isArray(s)?s.map(i=>i&&n.add(i)):Object.entries(s).map(([i,c])=>c&&n.add(i)));for(let i of r)n.has(i)?n.delete(i):e.classList.remove(i);for(let i of r=n)e.classList.add(i)})};f.style=(e,o,t)=>{let r=e.getAttribute("style")||"";return r.endsWith(";")||(r+="; "),p(()=>{let s=o(t);if(typeof s=="string")e.setAttribute("style",r+s);else{e.setAttribute("style",r);for(let n in s)e.style.setProperty(n,e.style[n]=s[n])}})};f.default=(e,o,t,r)=>{if(!r.startsWith("on"))return p(()=>{let u=o(t);if(r)D(e,r,u);else for(let l in u)D(e,le(l),u[l])});let s=r.split("..").map(u=>{let l={evt:"",target:e,test:()=>!0};return l.evt=(u.startsWith("on")?u.slice(2):u).replace(/\.(\w+)?-?([-\w]+)?/g,(h,b,S="")=>(l.test=ie[b]?.(l,...S.split("-"))||l.test,"")),l});if(s.length==1)return p(()=>k(o(t),s[0]));let n,i,c,a=0,y=u=>{c=k(l=>(c(),i=u?.(l),(a=++a%s.length)?y(i):n&&y(n)),s[a])};return p(()=>(n=o(t),!c&&y(n),()=>n=null));function k(u,{evt:l,target:h,test:b,defer:S,stop:C,prevent:A,immediate:K,..._}){S&&(u=S(u));let J=L=>{try{b(L)&&(C&&(K?L.stopImmediatePropagation():L.stopPropagation()),A&&L.preventDefault(),u?.(L))}catch(G){R(G,`:on${l}`,u)}};return h.addEventListener(l,J,_),()=>h.removeEventListener(l,J,_)}};var ie={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},throttle(e,o){e.defer=t=>ne(t,o?Number(o)||0:108)},debounce(e,o){e.defer=t=>se(t,o?Number(o)||0:108)},outside:e=>o=>{let t=e.target;return!(t.contains(o.target)||o.target.isConnected===!1||t.offsetWidth<1&&t.offsetHeight<1)},self:e=>o=>o.target===e.target,ctrl:(e,...o)=>t=>m.ctrl(t)&&o.every(r=>m[r]?m[r](t):t.key===r),shift:(e,...o)=>t=>m.shift(t)&&o.every(r=>m[r]?m[r](t):t.key===r),alt:(e,...o)=>t=>m.alt(t)&&o.every(r=>m[r]?m[r](t):t.key===r),meta:(e,...o)=>t=>m.meta(t)&&o.every(r=>m[r]?m[r](t):t.key===r),arrow:()=>m.arrow,enter:()=>m.enter,esc:()=>m.esc,tab:()=>m.tab,space:()=>m.space,delete:()=>m.delete,digit:()=>m.digit,letter:()=>m.letter,char:()=>m.char},m={ctrl:e=>e.ctrlKey||e.key==="Control"||e.key==="Ctrl",shift:e=>e.shiftKey||e.key==="Shift",alt:e=>e.altKey||e.key==="Alt",meta:e=>e.metaKey||e.key==="Meta"||e.key==="Command",arrow:e=>e.key.startsWith("Arrow"),enter:e=>e.key==="Enter",esc:e=>e.key.startsWith("Esc"),tab:e=>e.key==="Tab",space:e=>e.key==="\xA0"||e.key==="Space"||e.key===" ",delete:e=>e.key==="Delete"||e.key==="Backspace",digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},D=(e,o,t)=>{t==null||t===!1?e.removeAttribute(o):e.setAttribute(o,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},ne=(e,o)=>{let t,r,s=n=>{t=!0,setTimeout(()=>{if(t=!1,r)return r=!1,s(n),e(n)},o)};return n=>t?r=!0:(s(n),e(n))},se=(e,o)=>{let t;return r=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(r)},o)}},le=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,o=>"-"+o.toLowerCase());f.value=(e,[o,t],r)=>{let s=e.type==="text"||e.type===""?i=>e.setAttribute("value",e.value=i??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(i,c,a)=>(c=e.selectionStart,a=e.selectionEnd,e.setAttribute("value",e.value=i??""),c&&e.setSelectionRange(c,a)):e.type==="checkbox"?i=>(e.checked=i,D(e,"checked",i)):e.type==="select-one"?i=>{for(let c in e.options)c.removeAttribute("selected");e.value=i,e.selectedOptions[0]?.setAttribute("selected","")}:i=>e.value=i,n=e.type==="checkbox"?i=>t(r,e.checked):i=>t(r,e.value);return e.addEventListener("input",n),e.addEventListener("change",n),p(()=>s(o(r)))};f.value.parse=e=>{let o=[W(e)];try{o.push(W(`${e}=arguments[1];`))}catch{}return o};f.fx=(e,o,t)=>p(()=>o(t));d.use(F);d.use({compile:e=>d.constructor(`with (arguments[0]) { return ${e} };`)});var ot=d;export{ot as default};
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../signal.js", "../store.js", "../core.js", "../node_modules/ulive/dist/ulive.es.js", "../directive/if.js", "../directive/each.js", "../directive/ref.js", "../directive/with.js", "../directive/html.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/default.js", "../directive/value.js", "../directive/fx.js", "../sprae.js"],
4
+ "sourcesContent": ["// signals adapter - allows switching signals implementation and not depend on core\nexport let signal, effect, untracked, batch, computed;\n\nexport function use(s) {\n signal = s.signal\n effect = s.effect\n computed = s.computed\n batch = s.batch || (fn => fn())\n untracked = s.untracked || batch\n}\n", "// signals-based proxy\nimport { signal, computed, effect, batch, untracked } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('length');\n\n// object store is not lazy\nexport default function store(values, parent) {\n if (!values) return values\n\n // ignore existing state as argument\n if (values[_signals]) return values;\n\n // redirect for optimized array store\n if (Array.isArray(values)) return list(values)\n\n // ignore non-objects\n if (values.constructor !== Object) return values;\n\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length)\n\n // proxy conducts prop access to signals\n const state = new Proxy(signals, {\n get: (_, key) => key === _change ? _len : key === _signals ? signals : (signals[key]?.valueOf()),\n set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? (++_len.value), 1), // bump length for new signal\n deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),\n ownKeys() {\n // subscribe to length when object is spread\n _len.value\n return Reflect.ownKeys(signals);\n },\n })\n\n // init signals for values\n for (let key in values) {\n const desc = Object.getOwnPropertyDescriptor(values, key)\n\n // getter turns into computed\n if (desc?.get) {\n // stash setter\n (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);\n }\n else {\n // init blank signal - make sure we don't take prototype one\n signals[key] = undefined\n set(signals, key, values[key]);\n }\n }\n\n return state\n}\n\n// length changing methods\nconst mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 }\n\n// array store - signals are lazy since arrays can be very large & expensive\nexport function 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 // ignore existing state as argument\n if (values[_signals]) return values;\n\n // .length signal is stored separately, since it cannot be replaced on array\n let _len = signal(values.length),\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 const state = new Proxy(signals, {\n get(_, key) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof key === 'symbol') return key === _change ? _len : key === _signals ? signals : signals[key]\n\n // console.log('get', key)\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut[lastProp] ? _len.peek() : _len.value;\n\n lastProp = key;\n\n if (signals[key]) return signals[key].valueOf()\n\n // I hope reading values here won't diverge from signals\n if (key < signals.length) return (signals[key] = signal(store(values[key]))).value\n },\n\n set(_, key, v) {\n // console.log('set', key, v)\n // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v, l = signals.length; i < l; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n return true\n }\n\n set(signals, key, v)\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n if (key >= _len.peek()) _len.value = signals.length = Number(key) + 1\n\n return true\n },\n\n deleteProperty: (_, key) => (signals[key] && del(signals, key), 1),\n\n })\n\n return state\n}\n\n// set/update signal value\nfunction set(signals, key, v) {\n let s = signals[key]\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property\n else if (!s) {\n // preserve signal value as is\n signals[key] = s = v?.peek ? v : signal(store(v))\n }\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === 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(s.peek())) {\n const cur = s.peek()\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) untracked(() => {\n batch(() => {\n let i = 0, l = v.length;\n for (; i < l; i++) cur[i] = v[i]\n cur.length = l // forces deleting tail signals\n })\n })\n else {\n s.value = v\n }\n }\n // .x = y\n else {\n s.value = store(v)\n }\n}\n\n// delete signal\nfunction del(signals, key) {\n const s = signals[key], del = s[Symbol.dispose]\n if (del) delete s[Symbol.dispose]\n delete signals[key]\n del?.()\n}\n", "import { use } from \"./signal.js\";\nimport store, { _signals } from './store.js';\n\n// polyfill\nconst _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\n// reserved directives - order matters!\nexport const directive = {};\n\n// every element that's in cache === directly spraed and un subsequent sprae is just updated (like each)\nexport const memo = new WeakMap();\n\n// sprae element: apply directives\nexport default function sprae(el, values) {\n // text nodes, comments etc\n if (!el?.childNodes) return\n\n // repeated call can be caused by :each with new objects with old keys needs an update\n if (memo.has(el)) {\n // we rewrite signals instead of update, because user should have what he provided\n return Object.assign(memo.get(el), values)\n }\n\n // take over existing state instead of creating clone\n const state = store(values || {}), disposes = []\n\n init(el);\n\n // if element was spraed by :with or :each instruction - skip, otherwise save\n if (!memo.has(el)) memo.set(el, state);\n\n // disposer unspraes all internal elements\n el[_dispose] = () => {\n while (disposes.length) disposes.pop()();\n memo.delete(el);\n }\n\n return state;\n\n function init(el, parent = el.parentNode) {\n if (!el.childNodes) return // ignore text nodes, comments etc\n\n // init generic-name attributes second\n for (let i = 0; i < el.attributes?.length;) {\n let attr = el.attributes[i];\n\n if (attr.name[0] === ':') {\n el.removeAttribute(attr.name);\n\n // multiple attributes like :id:for=\"\"\n let names = attr.name.slice(1).split(':')\n\n // NOTE: secondary directives don't stop flow nor extend state, so no need to check\n for (let name of names) {\n let dir = directive[name] || directive.default\n let evaluate = (dir.parse || parse)(attr.value)\n let dispose = dir(el, evaluate, state, name);\n if (dispose) disposes.push(dispose);\n }\n\n // stop if element was spraed by internal directive\n if (memo.has(el)) return el[_dispose] && disposes.push(el[_dispose])\n\n // stop if element is skipped (detached) like in case of :if or :each\n if (el.parentNode !== parent) return\n } else i++;\n }\n\n for (let child of [...el.childNodes]) init(child, el);\n };\n}\n\n\n// compiler\nconst evalMemo = {};\nexport const parse = (expr, dir, fn) => {\n if (fn = evalMemo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n // runtime errors\n return evalMemo[expr] = fn\n}\n\n// wrapped call\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\nexport let compile\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}\n\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),\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 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", "let current, batched;\r\n\r\nconst signal = (v, s, obs = new Set) => (\r\n s = {\r\n get value() {\r\n current?.deps.push(obs.add(current));\r\n return v\r\n },\r\n set value(val) {\r\n if (val === v) return\r\n v = val;\r\n for (let sub of obs) batched ? batched.add(sub) : sub(); // notify effects\r\n },\r\n peek() { return v },\r\n },\r\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\r\n s\r\n),\r\n effect = (fn, teardown, fx, deps) => (\r\n fx = (prev) => {\r\n teardown?.call?.();\r\n prev = current, current = fx;\r\n try { teardown = fn(); } finally { current = prev; }\r\n },\r\n deps = fx.deps = [],\r\n\r\n fx(),\r\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\r\n ),\r\n computed = (fn, s = signal(), c, e) => (\r\n c = {\r\n get value() {\r\n e ||= effect(() => s.value = fn());\r\n return s.value\r\n },\r\n peek: s.peek\r\n },\r\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\r\n c\r\n ),\r\n batch = (fn) => {\r\n let fxs = batched;\r\n if (!fxs) batched = new Set;\r\n try { fn(); }\r\n finally {\r\n if (!fxs) {\r\n fxs = batched;\r\n batched = null;\r\n for (const fx of fxs) fx();\r\n }\r\n }\r\n },\r\n untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);\n\nexport { batch, computed, effect, signal, untracked };\n", "import sprae, { directive, memo, frag } from \"../core.js\";\nimport { effect } from \"../signal.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\");\ndirective.if = (el, evaluate, state) => {\n let next = el.nextElementSibling,\n holder = document.createTextNode(''),\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n memo.set(ifEl, null) // mark all el as fake-spraed, because we have to sprae for real on insert\n\n if (next?.hasAttribute(\":else\")) {\n next.removeAttribute(\":else\");\n // if next is :else :if - leave it for its own :if handler\n if (!next.hasAttribute(\":if\")) next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null)\n }\n\n return effect(() => {\n const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n curEl?.remove()\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n memo.get(curEl) === null && memo.delete(curEl) // remove fake memo to sprae as new\n sprae(curEl, state)\n }\n }\n });\n};\n", "import sprae, { directive, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect, untracked, computed } from '../signal.js';\n\n\ndirective.each = (tpl, [itemVar, idxVar, evaluate], state) => {\n // we need :if to be able to replace holder instead of tpl for :if :each case\n const holder = (document.createTextNode(\"\"));\n tpl.replaceWith(holder);\n\n // we re-create items any time new items are produced\n let cur, keys, prevl = 0\n\n // separate computed effect reduces number of needed updates for the effect\n const items = computed(() => {\n keys = null\n let items = evaluate(state)\n if (typeof items === \"number\") items = Array.from({ length: items }, (_, i) => i + 1)\n if (items?.constructor === Object) keys = Object.keys(items), items = Object.values(items)\n return items || []\n })\n\n const update = () => {\n // NOTE: untracked avoids rerendering full list whenever internal items or props change\n untracked(() => {\n let i = 0, newItems = items.value, 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) {\n cur.length = newl\n }\n // update, append, init\n else {\n // init\n if (!cur) {\n cur = newItems\n }\n // update\n else {\n for (; i < prevl; i++) {\n cur[i] = newItems[i]\n }\n }\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n scope = store({\n [itemVar]: cur[_signals]?.[idx] || cur[idx],\n [idxVar]: keys ? keys[idx] : idx\n }, state),\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 ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {\n el[Symbol.dispose](), el.remove()\n };\n }\n }\n\n prevl = newl\n })\n }\n\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just on init) since preact unsubscribes unused signals\n items.value[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned) {\n update()\n queueMicrotask(() => (planned && update(), planned = 0))\n } else planned++\n })\n}\n\n\n// redefine parser to exclude `[a in] b`\ndirective.each.parse = (expr) => {\n let [leftSide, itemsExpr] = expr.split(/\\s+in\\s+/);\n let [itemVar, idxVar = \"$\"] = leftSide.split(/\\s*,\\s*/);\n\n return [itemVar, idxVar, parse(itemsExpr)]\n}\n", "import { directive } from \"../core.js\";\nimport { _change, _signals } from \"../store.js\";\n\n// ref must be last within primaries, since that must be skipped by :each, but before secondaries\ndirective.ref = (el, expr, state) => {\n state[expr] = el\n}\n\ndirective.ref.parse = expr => expr\n", "import sprae, { directive } from \"../core.js\";\nimport store, { _signals } from '../store.js';\nimport { effect } from \"../signal.js\";\n\ndirective.with = (el, evaluate, rootState) => {\n let state\n return effect(() => {\n let values = evaluate(rootState);\n sprae(el, state ? values : state = store(values, rootState))\n })\n};\n", "import sprae, { directive } from \"../core.js\";\n\ndirective.html = (el, evaluate, state) => {\n let tpl = evaluate(state);\n\n if (!tpl) return\n\n let content = (tpl.content || tpl).cloneNode(true);\n el.replaceChildren(content);\n sprae(el, state);\n};\n", "import { directive, frag } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set text content\ndirective.text = (el, evaluate, state) => {\n // <template :text=\"a\"/> or previously initialized template\n if (el.content) el.replaceWith(el = frag(el).childNodes[0])\n\n return effect(() => {\n let value = evaluate(state);\n el.textContent = value == null ? \"\" : value;\n });\n};\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.class = (el, evaluate, state) => {\n let cur = new Set\n return effect(() => {\n let v = evaluate(state);\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 { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.style = (el, evaluate, state) => {\n let initStyle = el.getAttribute(\"style\") || \"\";\n if (!initStyle.endsWith(\";\")) initStyle += \"; \";\n\n return effect(() => {\n let v = evaluate(state);\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + v);\n else {\n el.setAttribute(\"style\", initStyle);\n for (let k in v) el.style.setProperty(k, el.style[k] = v[k])\n }\n });\n};\n", "import { directive, err } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set generic property directive\ndirective.default = (target, evaluate, state, name) => {\n // simple prop\n if (!name.startsWith('on')) return effect(() => {\n let value = evaluate(state);\n if (name) attr(target, name, value)\n else for (let key in value) attr(target, dashcase(key), value[key]);\n });\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 const 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 (match, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // single event\n if (ctxs.length == 1) return effect(() => addListener(evaluate(state), ctxs[0]))\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n const 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 effect(() => (\n startFn = evaluate(state),\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n ))\n\n // add listener with the context\n function addListener(fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }) {\n if (defer) fn = defer(fn)\n\n const cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(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};\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\n throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108); },\n debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108); },\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// 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\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\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => \"-\" + match.toLowerCase());\n}\n", "import { directive, parse } from \"../core.js\";\nimport { attr } from './default.js';\nimport { effect } from \"../signal.js\";\n\n// connect expr to element value\ndirective.value = (el, [getValue, setValue], state) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ? (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value))\n : (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ? (value, from, to) =>\n (\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\") ? (value) => (el.checked = value, attr(el, \"checked\", value))\n : (el.type === \"select-one\") ? (value) => {\n for (let option in el.options) option.removeAttribute(\"selected\");\n el.value = value;\n el.selectedOptions[0]?.setAttribute(\"selected\", \"\");\n }\n : (value) => (el.value = value);\n\n // bind back\n const handleChange = el.type === 'checkbox' ? e => setValue(state, el.checked) : e => setValue(state, el.value)\n el.addEventListener('input', handleChange)\n el.addEventListener('change', handleChange)\n\n return effect(() => (update(getValue(state))));\n};\n\ndirective.value.parse = expr => {\n let evaluate = [parse(expr)]\n try {\n // for values like `123 = arguments[1]`, `foo?.bar = arguments[1]`\n evaluate.push(parse(`${expr}=arguments[1];`))\n }\n catch (e) { }\n return evaluate\n}\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.fx = (el, evaluate, state) => {\n return effect(() => evaluate(state));\n};\n", "import sprae from './core.js'\n\nimport * as signals from 'ulive'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/html.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'\n\n// default signals\nsprae.use(signals)\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": ["signal", "effect", "untracked", "batch", "computed", "use", "s", "fn", "_signals", "_change", "store", "values", "parent", "list", "signals", "_len", "signal", "state", "_", "key", "v", "s", "set", "del", "desc", "computed", "mut", "lastProp", "i", "l", "cur", "untracked", "batch", "_dispose", "directive", "memo", "sprae", "el", "values", "state", "store", "disposes", "init", "parent", "i", "attr", "names", "name", "dir", "evaluate", "parse", "dispose", "child", "evalMemo", "expr", "fn", "compile", "e", "err", "s", "use", "frag", "tpl", "content", "attributes", "ref", "childNodes", "a", "ulive_es_exports", "__export", "batch", "computed", "effect", "signal", "untracked", "current", "batched", "v", "s", "obs", "val", "sub", "fn", "teardown", "fx", "deps", "prev", "dep", "c", "e", "fxs", "_prevIf", "directive", "el", "evaluate", "state", "next", "holder", "curEl", "ifEl", "elseEl", "frag", "memo", "effect", "newEl", "sprae", "directive", "tpl", "itemVar", "idxVar", "evaluate", "state", "holder", "cur", "keys", "prevl", "items", "computed", "_", "i", "update", "untracked", "_a", "_b", "newItems", "newl", "_change", "s", "_signals", "idx", "scope", "store", "el", "frag", "sprae", "planned", "effect", "expr", "leftSide", "itemsExpr", "parse", "directive", "el", "expr", "state", "directive", "el", "evaluate", "rootState", "state", "effect", "values", "sprae", "store", "directive", "el", "evaluate", "state", "tpl", "content", "sprae", "directive", "el", "evaluate", "state", "frag", "effect", "value", "directive", "el", "evaluate", "state", "cur", "effect", "v", "clsx", "cls", "k", "directive", "el", "evaluate", "state", "initStyle", "effect", "v", "k", "directive", "target", "evaluate", "state", "name", "effect", "value", "attr", "key", "dashcase", "ctxs", "e", "ctx", "match", "mod", "param", "mods", "addListener", "startFn", "nextFn", "off", "idx", "nextListener", "fn", "evt", "test", "defer", "stop", "prevent", "immediate", "opts", "cb", "error", "err", "limit", "throttle", "wait", "debounce", "_", "keys", "p", "el", "v", "pause", "planned", "block", "timeout", "str", "directive", "el", "getValue", "setValue", "state", "update", "value", "from", "to", "attr", "option", "handleChange", "e", "effect", "expr", "evaluate", "parse", "directive", "el", "evaluate", "state", "effect", "sprae", "ulive_es_exports", "expr", "sprae_default"]
7
+ }
@@ -0,0 +1,63 @@
1
+ (function (g, f) {
2
+ if ("object" == typeof exports && "object" == typeof module) {
3
+ module.exports = f();
4
+ } else if ("function" == typeof define && define.amd) {
5
+ define("sprae", [], f);
6
+ } else if ("object" == typeof exports) {
7
+ exports["sprae"] = f();
8
+ } else {
9
+ g["sprae"] = f();
10
+ }
11
+ }(this, () => {
12
+ var exports = {};
13
+ var module = { exports };(function (g, f) {
14
+ if ("object" == typeof exports && "object" == typeof module) {
15
+ module.exports = f();
16
+ } else if ("function" == typeof define && define.amd) {
17
+ define("sprae", [], f);
18
+ } else if ("object" == typeof exports) {
19
+ exports["sprae"] = f();
20
+ } else {
21
+ g["sprae"] = f();
22
+ }
23
+ }(this, () => {
24
+ var exports = {};
25
+ var module = { exports };
26
+ var I=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var B=(e,r)=>{for(var t in r)I(e,t,{get:r[t],enumerable:!0})},re=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ee(r))!te.call(e,s)&&s!==t&&I(e,s,{get:()=>r[s],enumerable:!(o=Y(r,s))||o.enumerable});return e};var oe=e=>re(I({},"__esModule",{value:!0}),e);var de={};B(de,{default:()=>me});module.exports=oe(de);var O,p,T,P,j;function H(e){O=e.signal,p=e.effect,j=e.computed,P=e.batch||(r=>r()),T=e.untracked||P}var x=Symbol("signals"),E=Symbol("length");function v(e,r){if(!e||e[x])return e;if(Array.isArray(e))return ne(e);if(e.constructor!==Object)return e;let t={...r?.[x]},o=O(Object.values(e).length),s=new Proxy(t,{get:(n,i)=>i===E?o:i===x?t:t[i]?.valueOf(),set:(n,i,c,a)=>(a=t[i],M(t,i,c),a??++o.value,1),deleteProperty:(n,i)=>(t[i]&&(V(t,i),o.value--),1),ownKeys(){return o.value,Reflect.ownKeys(t)}});for(let n in e){let i=Object.getOwnPropertyDescriptor(e,n);i?.get?(t[n]=j(i.get.bind(s)))._set=i.set?.bind(s):(t[n]=void 0,M(t,n,e[n]))}return s}var ie={push:1,pop:1,shift:1,unshift:1,splice:1};function ne(e){let r;if(e[x])return e;let t=O(e.length),o=Array(e.length).fill(),s=new Proxy(o,{get(n,i){if(typeof i=="symbol")return i===E?t:i===x?o:o[i];if(i==="length")return ie[r]?t.peek():t.value;if(r=i,o[i])return o[i].valueOf();if(i<o.length)return(o[i]=O(v(e[i]))).value},set(n,i,c){if(i==="length"){for(let a=c,y=o.length;a<y;a++)delete s[a];return t.value=o.length=c,!0}return M(o,i,c),i>=t.peek()&&(t.value=o.length=Number(i)+1),!0},deleteProperty:(n,i)=>(o[i]&&V(o,i),1)});return s}function M(e,r,t){let o=e[r];if(r[0]==="_")e[r]=t;else if(!o)e[r]=o=t?.peek?t:O(v(t));else if(t!==o.peek())if(o._set)o._set(t);else if(Array.isArray(t)&&Array.isArray(o.peek())){let s=o.peek();s[E]?T(()=>{P(()=>{let n=0,i=t.length;for(;n<i;n++)s[n]=t[n];s.length=i})}):o.value=t}else o.value=v(t)}function V(e,r){let t=e[r],o=t[Symbol.dispose];o&&delete t[Symbol.dispose],delete e[r],o?.()}var R=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),f={},g=new WeakMap;function d(e,r){if(!e?.childNodes)return;if(g.has(e))return Object.assign(g.get(e),r);let t=v(r||{}),o=[];return s(e),g.has(e)||g.set(e,t),e[R]=()=>{for(;o.length;)o.pop()();g.delete(e)},t;function s(n,i=n.parentNode){if(!!n.childNodes){for(let c=0;c<n.attributes?.length;){let a=n.attributes[c];if(a.name[0]===":"){n.removeAttribute(a.name);let y=a.name.slice(1).split(":");for(let k of y){let u=f[k]||f.default,l=(u.parse||W)(a.value),h=u(n,l,t,k);h&&o.push(h)}if(g.has(n))return n[R]&&o.push(n[R]);if(n.parentNode!==i)return}else c++}for(let c of[...n.childNodes])s(c,n)}}}var X={},W=(e,r,t)=>{if(t=X[e=e.trim()])return t;try{t=Z(e)}catch(o){F(o,r,e)}return X[e]=t},F=(e,r,t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
27
+
28
+ ${r}${t?`="${t}"
29
+
30
+ `:""}`,expr:t})},Z;d.use=e=>{e.signal&&H(e),e.compile&&(Z=e.compile)};var N=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],o=document.createTextNode(""),s=(r.append(o),[...r.childNodes]);return{childNodes:s,content:r,remove:()=>r.append(...s),replaceWith(n){n!==o&&(o.before(n),r.append(...s))},attributes:t,removeAttribute(n){t.splice(t.findIndex(i=>i.name===n),1)}}};var J={};B(J,{batch:()=>le,computed:()=>se,effect:()=>G,signal:()=>z,untracked:()=>ce});var w,$,z=(e,r,t=new Set)=>(r={get value(){return w?.deps.push(t.add(w)),e},set value(o){if(o!==e){e=o;for(let s of t)$?$.add(s):s()}},peek(){return e}},r.toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),G=(e,r,t,o)=>(t=s=>{r?.call?.(),s=w,w=t;try{r=e()}finally{w=s}},o=t.deps=[],t(),s=>{for(r?.call?.();s=o.pop();)s.delete(t)}),se=(e,r=z(),t,o)=>(t={get value(){return o||(o=G(()=>r.value=e())),r.value},peek:r.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),le=e=>{let r=$;r||($=new Set);try{e()}finally{if(!r){r=$,$=null;for(let t of r)t()}}},ce=(e,r,t)=>(r=w,w=null,t=e(),w=r,t);var Q=Symbol("if");f.if=(e,r,t)=>{let o=e.nextElementSibling,s=document.createTextNode(""),n,i,c;return e.replaceWith(s),i=e.content?N(e):e,g.set(i,null),o?.hasAttribute(":else")&&(o.removeAttribute(":else"),o.hasAttribute(":if")||(o.remove(),c=o.content?N(o):o,g.set(c,null))),p(()=>{let a=r(t)?i:e[Q]?null:c;o&&(o[Q]=a===i),n!=a&&(n?.remove(),(n=a)&&(s.before(n.content||n),g.get(n)===null&&g.delete(n),d(n,t)))})};f.each=(e,[r,t,o],s)=>{let n=document.createTextNode("");e.replaceWith(n);let i,c,a=0,y=j(()=>{c=null;let l=o(s);return typeof l=="number"&&(l=Array.from({length:l},(h,b)=>b+1)),l?.constructor===Object&&(c=Object.keys(l),l=Object.values(l)),l||[]}),k=()=>{T(()=>{var S,C;let l=0,h=y.value,b=h.length;if(i&&!i[E]){for(let A of i[x]||[])A[Symbol.dispose]();i=null,a=0}if(b<a)i.length=b;else{if(!i)i=h;else for(;l<a;l++)i[l]=h[l];for(;l<b;l++){i[l]=h[l];let A=l,K=v({[r]:i[x]?.[A]||i[A],[t]:c?c[A]:A},s),_=e.content?N(e):e.cloneNode(!0);n.before(_.content||_),d(_,K),((C=i[S=x]||(i[S]=[]))[l]||(C[l]={}))[Symbol.dispose]=()=>{_[Symbol.dispose](),_.remove()}}}a=b})},u=0;return p(()=>{y.value[E]?.value,u?u++:(k(),queueMicrotask(()=>(u&&k(),u=0)))})};f.each.parse=e=>{let[r,t]=e.split(/\s+in\s+/),[o,s="$"]=r.split(/\s*,\s*/);return[o,s,W(t)]};f.ref=(e,r,t)=>{t[r]=e};f.ref.parse=e=>e;f.with=(e,r,t)=>{let o;return p(()=>{let s=r(t);d(e,o?s:o=v(s,t))})};f.html=(e,r,t)=>{let o=r(t);if(!o)return;let s=(o.content||o).cloneNode(!0);e.replaceChildren(s),d(e,t)};f.text=(e,r,t)=>(e.content&&e.replaceWith(e=N(e).childNodes[0]),p(()=>{let o=r(t);e.textContent=o??""}));f.class=(e,r,t)=>{let o=new Set;return p(()=>{let s=r(t),n=new Set;s&&(typeof s=="string"?s.split(" ").map(i=>n.add(i)):Array.isArray(s)?s.map(i=>i&&n.add(i)):Object.entries(s).map(([i,c])=>c&&n.add(i)));for(let i of o)n.has(i)?n.delete(i):e.classList.remove(i);for(let i of o=n)e.classList.add(i)})};f.style=(e,r,t)=>{let o=e.getAttribute("style")||"";return o.endsWith(";")||(o+="; "),p(()=>{let s=r(t);if(typeof s=="string")e.setAttribute("style",o+s);else{e.setAttribute("style",o);for(let n in s)e.style.setProperty(n,e.style[n]=s[n])}})};f.default=(e,r,t,o)=>{if(!o.startsWith("on"))return p(()=>{let u=r(t);if(o)D(e,o,u);else for(let l in u)D(e,pe(l),u[l])});let s=o.split("..").map(u=>{let l={evt:"",target:e,test:()=>!0};return l.evt=(u.startsWith("on")?u.slice(2):u).replace(/\.(\w+)?-?([-\w]+)?/g,(h,b,S="")=>(l.test=ae[b]?.(l,...S.split("-"))||l.test,"")),l});if(s.length==1)return p(()=>k(r(t),s[0]));let n,i,c,a=0,y=u=>{c=k(l=>(c(),i=u?.(l),(a=++a%s.length)?y(i):n&&y(n)),s[a])};return p(()=>(n=r(t),!c&&y(n),()=>n=null));function k(u,{evt:l,target:h,test:b,defer:S,stop:C,prevent:A,immediate:K,..._}){S&&(u=S(u));let q=L=>{try{b(L)&&(C&&(K?L.stopImmediatePropagation():L.stopPropagation()),A&&L.preventDefault(),u?.(L))}catch(U){F(U,`:on${l}`,u)}};return h.addEventListener(l,q,_),()=>h.removeEventListener(l,q,_)}};var ae={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},throttle(e,r){e.defer=t=>fe(t,r?Number(r)||0:108)},debounce(e,r){e.defer=t=>ue(t,r?Number(r)||0:108)},outside:e=>r=>{let t=e.target;return!(t.contains(r.target)||r.target.isConnected===!1||t.offsetWidth<1&&t.offsetHeight<1)},self:e=>r=>r.target===e.target,ctrl:(e,...r)=>t=>m.ctrl(t)&&r.every(o=>m[o]?m[o](t):t.key===o),shift:(e,...r)=>t=>m.shift(t)&&r.every(o=>m[o]?m[o](t):t.key===o),alt:(e,...r)=>t=>m.alt(t)&&r.every(o=>m[o]?m[o](t):t.key===o),meta:(e,...r)=>t=>m.meta(t)&&r.every(o=>m[o]?m[o](t):t.key===o),arrow:()=>m.arrow,enter:()=>m.enter,esc:()=>m.esc,tab:()=>m.tab,space:()=>m.space,delete:()=>m.delete,digit:()=>m.digit,letter:()=>m.letter,char:()=>m.char},m={ctrl:e=>e.ctrlKey||e.key==="Control"||e.key==="Ctrl",shift:e=>e.shiftKey||e.key==="Shift",alt:e=>e.altKey||e.key==="Alt",meta:e=>e.metaKey||e.key==="Meta"||e.key==="Command",arrow:e=>e.key.startsWith("Arrow"),enter:e=>e.key==="Enter",esc:e=>e.key.startsWith("Esc"),tab:e=>e.key==="Tab",space:e=>e.key==="\xA0"||e.key==="Space"||e.key===" ",delete:e=>e.key==="Delete"||e.key==="Backspace",digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},D=(e,r,t)=>{t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},fe=(e,r)=>{let t,o,s=n=>{t=!0,setTimeout(()=>{if(t=!1,o)return o=!1,s(n),e(n)},r)};return n=>t?o=!0:(s(n),e(n))},ue=(e,r)=>{let t;return o=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(o)},r)}},pe=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,r=>"-"+r.toLowerCase());f.value=(e,[r,t],o)=>{let s=e.type==="text"||e.type===""?i=>e.setAttribute("value",e.value=i??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(i,c,a)=>(c=e.selectionStart,a=e.selectionEnd,e.setAttribute("value",e.value=i??""),c&&e.setSelectionRange(c,a)):e.type==="checkbox"?i=>(e.checked=i,D(e,"checked",i)):e.type==="select-one"?i=>{for(let c in e.options)c.removeAttribute("selected");e.value=i,e.selectedOptions[0]?.setAttribute("selected","")}:i=>e.value=i,n=e.type==="checkbox"?i=>t(o,e.checked):i=>t(o,e.value);return e.addEventListener("input",n),e.addEventListener("change",n),p(()=>s(r(o)))};f.value.parse=e=>{let r=[W(e)];try{r.push(W(`${e}=arguments[1];`))}catch{}return r};f.fx=(e,r,t)=>p(()=>r(t));d.use(J);d.use({compile:e=>d.constructor(`with (arguments[0]) { return ${e} };`)});var me=d;
31
+ if (document?.currentScript?.hasAttribute('init')) sprae(document.documentElement)if (typeof module.exports == "object" && typeof exports == "object") {
32
+ var __cp = (to, from, except, desc) => {
33
+ if ((from && typeof from === "object") || typeof from === "function") {
34
+ for (let key of Object.getOwnPropertyNames(from)) {
35
+ if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
36
+ Object.defineProperty(to, key, {
37
+ get: () => from[key],
38
+ enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
39
+ });
40
+ }
41
+ }
42
+ return to;
43
+ };
44
+ module.exports = __cp(module.exports, exports);
45
+ }
46
+ return module.exports;
47
+ }))if (typeof module.exports == "object" && typeof exports == "object") {
48
+ var __cp = (to, from, except, desc) => {
49
+ if ((from && typeof from === "object") || typeof from === "function") {
50
+ for (let key of Object.getOwnPropertyNames(from)) {
51
+ if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
52
+ Object.defineProperty(to, key, {
53
+ get: () => from[key],
54
+ enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
55
+ });
56
+ }
57
+ }
58
+ return to;
59
+ };
60
+ module.exports = __cp(module.exports, exports);
61
+ }
62
+ return module.exports;
63
+ }))
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../sprae.js", "../signal.js", "../store.js", "../core.js", "../node_modules/ulive/dist/ulive.es.js", "../directive/if.js", "../directive/each.js", "../directive/ref.js", "../directive/with.js", "../directive/html.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/default.js", "../directive/value.js", "../directive/fx.js"],
4
+ "sourcesContent": ["import sprae from './core.js'\n\nimport * as signals from 'ulive'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/html.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'\n\n// default signals\nsprae.use(signals)\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", "// signals adapter - allows switching signals implementation and not depend on core\nexport let signal, effect, untracked, batch, computed;\n\nexport function use(s) {\n signal = s.signal\n effect = s.effect\n computed = s.computed\n batch = s.batch || (fn => fn())\n untracked = s.untracked || batch\n}\n", "// signals-based proxy\nimport { signal, computed, effect, batch, untracked } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('length');\n\n// object store is not lazy\nexport default function store(values, parent) {\n if (!values) return values\n\n // ignore existing state as argument\n if (values[_signals]) return values;\n\n // redirect for optimized array store\n if (Array.isArray(values)) return list(values)\n\n // ignore non-objects\n if (values.constructor !== Object) return values;\n\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length)\n\n // proxy conducts prop access to signals\n const state = new Proxy(signals, {\n get: (_, key) => key === _change ? _len : key === _signals ? signals : (signals[key]?.valueOf()),\n set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? (++_len.value), 1), // bump length for new signal\n deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),\n ownKeys() {\n // subscribe to length when object is spread\n _len.value\n return Reflect.ownKeys(signals);\n },\n })\n\n // init signals for values\n for (let key in values) {\n const desc = Object.getOwnPropertyDescriptor(values, key)\n\n // getter turns into computed\n if (desc?.get) {\n // stash setter\n (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);\n }\n else {\n // init blank signal - make sure we don't take prototype one\n signals[key] = undefined\n set(signals, key, values[key]);\n }\n }\n\n return state\n}\n\n// length changing methods\nconst mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 }\n\n// array store - signals are lazy since arrays can be very large & expensive\nexport function 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 // ignore existing state as argument\n if (values[_signals]) return values;\n\n // .length signal is stored separately, since it cannot be replaced on array\n let _len = signal(values.length),\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 const state = new Proxy(signals, {\n get(_, key) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof key === 'symbol') return key === _change ? _len : key === _signals ? signals : signals[key]\n\n // console.log('get', key)\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut[lastProp] ? _len.peek() : _len.value;\n\n lastProp = key;\n\n if (signals[key]) return signals[key].valueOf()\n\n // I hope reading values here won't diverge from signals\n if (key < signals.length) return (signals[key] = signal(store(values[key]))).value\n },\n\n set(_, key, v) {\n // console.log('set', key, v)\n // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v, l = signals.length; i < l; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n return true\n }\n\n set(signals, key, v)\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n if (key >= _len.peek()) _len.value = signals.length = Number(key) + 1\n\n return true\n },\n\n deleteProperty: (_, key) => (signals[key] && del(signals, key), 1),\n\n })\n\n return state\n}\n\n// set/update signal value\nfunction set(signals, key, v) {\n let s = signals[key]\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property\n else if (!s) {\n // preserve signal value as is\n signals[key] = s = v?.peek ? v : signal(store(v))\n }\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === 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(s.peek())) {\n const cur = s.peek()\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) untracked(() => {\n batch(() => {\n let i = 0, l = v.length;\n for (; i < l; i++) cur[i] = v[i]\n cur.length = l // forces deleting tail signals\n })\n })\n else {\n s.value = v\n }\n }\n // .x = y\n else {\n s.value = store(v)\n }\n}\n\n// delete signal\nfunction del(signals, key) {\n const s = signals[key], del = s[Symbol.dispose]\n if (del) delete s[Symbol.dispose]\n delete signals[key]\n del?.()\n}\n", "import { use } from \"./signal.js\";\nimport store, { _signals } from './store.js';\n\n// polyfill\nconst _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\n// reserved directives - order matters!\nexport const directive = {};\n\n// every element that's in cache === directly spraed and un subsequent sprae is just updated (like each)\nexport const memo = new WeakMap();\n\n// sprae element: apply directives\nexport default function sprae(el, values) {\n // text nodes, comments etc\n if (!el?.childNodes) return\n\n // repeated call can be caused by :each with new objects with old keys needs an update\n if (memo.has(el)) {\n // we rewrite signals instead of update, because user should have what he provided\n return Object.assign(memo.get(el), values)\n }\n\n // take over existing state instead of creating clone\n const state = store(values || {}), disposes = []\n\n init(el);\n\n // if element was spraed by :with or :each instruction - skip, otherwise save\n if (!memo.has(el)) memo.set(el, state);\n\n // disposer unspraes all internal elements\n el[_dispose] = () => {\n while (disposes.length) disposes.pop()();\n memo.delete(el);\n }\n\n return state;\n\n function init(el, parent = el.parentNode) {\n if (!el.childNodes) return // ignore text nodes, comments etc\n\n // init generic-name attributes second\n for (let i = 0; i < el.attributes?.length;) {\n let attr = el.attributes[i];\n\n if (attr.name[0] === ':') {\n el.removeAttribute(attr.name);\n\n // multiple attributes like :id:for=\"\"\n let names = attr.name.slice(1).split(':')\n\n // NOTE: secondary directives don't stop flow nor extend state, so no need to check\n for (let name of names) {\n let dir = directive[name] || directive.default\n let evaluate = (dir.parse || parse)(attr.value)\n let dispose = dir(el, evaluate, state, name);\n if (dispose) disposes.push(dispose);\n }\n\n // stop if element was spraed by internal directive\n if (memo.has(el)) return el[_dispose] && disposes.push(el[_dispose])\n\n // stop if element is skipped (detached) like in case of :if or :each\n if (el.parentNode !== parent) return\n } else i++;\n }\n\n for (let child of [...el.childNodes]) init(child, el);\n };\n}\n\n\n// compiler\nconst evalMemo = {};\nexport const parse = (expr, dir, fn) => {\n if (fn = evalMemo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n // runtime errors\n return evalMemo[expr] = fn\n}\n\n// wrapped call\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\nexport let compile\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}\n\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),\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 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", "let current, batched;\r\n\r\nconst signal = (v, s, obs = new Set) => (\r\n s = {\r\n get value() {\r\n current?.deps.push(obs.add(current));\r\n return v\r\n },\r\n set value(val) {\r\n if (val === v) return\r\n v = val;\r\n for (let sub of obs) batched ? batched.add(sub) : sub(); // notify effects\r\n },\r\n peek() { return v },\r\n },\r\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\r\n s\r\n),\r\n effect = (fn, teardown, fx, deps) => (\r\n fx = (prev) => {\r\n teardown?.call?.();\r\n prev = current, current = fx;\r\n try { teardown = fn(); } finally { current = prev; }\r\n },\r\n deps = fx.deps = [],\r\n\r\n fx(),\r\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\r\n ),\r\n computed = (fn, s = signal(), c, e) => (\r\n c = {\r\n get value() {\r\n e ||= effect(() => s.value = fn());\r\n return s.value\r\n },\r\n peek: s.peek\r\n },\r\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\r\n c\r\n ),\r\n batch = (fn) => {\r\n let fxs = batched;\r\n if (!fxs) batched = new Set;\r\n try { fn(); }\r\n finally {\r\n if (!fxs) {\r\n fxs = batched;\r\n batched = null;\r\n for (const fx of fxs) fx();\r\n }\r\n }\r\n },\r\n untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);\n\nexport { batch, computed, effect, signal, untracked };\n", "import sprae, { directive, memo, frag } from \"../core.js\";\nimport { effect } from \"../signal.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\");\ndirective.if = (el, evaluate, state) => {\n let next = el.nextElementSibling,\n holder = document.createTextNode(''),\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n memo.set(ifEl, null) // mark all el as fake-spraed, because we have to sprae for real on insert\n\n if (next?.hasAttribute(\":else\")) {\n next.removeAttribute(\":else\");\n // if next is :else :if - leave it for its own :if handler\n if (!next.hasAttribute(\":if\")) next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null)\n }\n\n return effect(() => {\n const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n curEl?.remove()\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n memo.get(curEl) === null && memo.delete(curEl) // remove fake memo to sprae as new\n sprae(curEl, state)\n }\n }\n });\n};\n", "import sprae, { directive, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect, untracked, computed } from '../signal.js';\n\n\ndirective.each = (tpl, [itemVar, idxVar, evaluate], state) => {\n // we need :if to be able to replace holder instead of tpl for :if :each case\n const holder = (document.createTextNode(\"\"));\n tpl.replaceWith(holder);\n\n // we re-create items any time new items are produced\n let cur, keys, prevl = 0\n\n // separate computed effect reduces number of needed updates for the effect\n const items = computed(() => {\n keys = null\n let items = evaluate(state)\n if (typeof items === \"number\") items = Array.from({ length: items }, (_, i) => i + 1)\n if (items?.constructor === Object) keys = Object.keys(items), items = Object.values(items)\n return items || []\n })\n\n const update = () => {\n // NOTE: untracked avoids rerendering full list whenever internal items or props change\n untracked(() => {\n let i = 0, newItems = items.value, 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) {\n cur.length = newl\n }\n // update, append, init\n else {\n // init\n if (!cur) {\n cur = newItems\n }\n // update\n else {\n for (; i < prevl; i++) {\n cur[i] = newItems[i]\n }\n }\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n scope = store({\n [itemVar]: cur[_signals]?.[idx] || cur[idx],\n [idxVar]: keys ? keys[idx] : idx\n }, state),\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 ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {\n el[Symbol.dispose](), el.remove()\n };\n }\n }\n\n prevl = newl\n })\n }\n\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just on init) since preact unsubscribes unused signals\n items.value[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned) {\n update()\n queueMicrotask(() => (planned && update(), planned = 0))\n } else planned++\n })\n}\n\n\n// redefine parser to exclude `[a in] b`\ndirective.each.parse = (expr) => {\n let [leftSide, itemsExpr] = expr.split(/\\s+in\\s+/);\n let [itemVar, idxVar = \"$\"] = leftSide.split(/\\s*,\\s*/);\n\n return [itemVar, idxVar, parse(itemsExpr)]\n}\n", "import { directive } from \"../core.js\";\nimport { _change, _signals } from \"../store.js\";\n\n// ref must be last within primaries, since that must be skipped by :each, but before secondaries\ndirective.ref = (el, expr, state) => {\n state[expr] = el\n}\n\ndirective.ref.parse = expr => expr\n", "import sprae, { directive } from \"../core.js\";\nimport store, { _signals } from '../store.js';\nimport { effect } from \"../signal.js\";\n\ndirective.with = (el, evaluate, rootState) => {\n let state\n return effect(() => {\n let values = evaluate(rootState);\n sprae(el, state ? values : state = store(values, rootState))\n })\n};\n", "import sprae, { directive } from \"../core.js\";\n\ndirective.html = (el, evaluate, state) => {\n let tpl = evaluate(state);\n\n if (!tpl) return\n\n let content = (tpl.content || tpl).cloneNode(true);\n el.replaceChildren(content);\n sprae(el, state);\n};\n", "import { directive, frag } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set text content\ndirective.text = (el, evaluate, state) => {\n // <template :text=\"a\"/> or previously initialized template\n if (el.content) el.replaceWith(el = frag(el).childNodes[0])\n\n return effect(() => {\n let value = evaluate(state);\n el.textContent = value == null ? \"\" : value;\n });\n};\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.class = (el, evaluate, state) => {\n let cur = new Set\n return effect(() => {\n let v = evaluate(state);\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 { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.style = (el, evaluate, state) => {\n let initStyle = el.getAttribute(\"style\") || \"\";\n if (!initStyle.endsWith(\";\")) initStyle += \"; \";\n\n return effect(() => {\n let v = evaluate(state);\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + v);\n else {\n el.setAttribute(\"style\", initStyle);\n for (let k in v) el.style.setProperty(k, el.style[k] = v[k])\n }\n });\n};\n", "import { directive, err } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set generic property directive\ndirective.default = (target, evaluate, state, name) => {\n // simple prop\n if (!name.startsWith('on')) return effect(() => {\n let value = evaluate(state);\n if (name) attr(target, name, value)\n else for (let key in value) attr(target, dashcase(key), value[key]);\n });\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 const 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 (match, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // single event\n if (ctxs.length == 1) return effect(() => addListener(evaluate(state), ctxs[0]))\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n const 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 effect(() => (\n startFn = evaluate(state),\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n ))\n\n // add listener with the context\n function addListener(fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }) {\n if (defer) fn = defer(fn)\n\n const cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(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};\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\n throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108); },\n debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108); },\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// 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\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\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => \"-\" + match.toLowerCase());\n}\n", "import { directive, parse } from \"../core.js\";\nimport { attr } from './default.js';\nimport { effect } from \"../signal.js\";\n\n// connect expr to element value\ndirective.value = (el, [getValue, setValue], state) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ? (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value))\n : (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ? (value, from, to) =>\n (\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\") ? (value) => (el.checked = value, attr(el, \"checked\", value))\n : (el.type === \"select-one\") ? (value) => {\n for (let option in el.options) option.removeAttribute(\"selected\");\n el.value = value;\n el.selectedOptions[0]?.setAttribute(\"selected\", \"\");\n }\n : (value) => (el.value = value);\n\n // bind back\n const handleChange = el.type === 'checkbox' ? e => setValue(state, el.checked) : e => setValue(state, el.value)\n el.addEventListener('input', handleChange)\n el.addEventListener('change', handleChange)\n\n return effect(() => (update(getValue(state))));\n};\n\ndirective.value.parse = expr => {\n let evaluate = [parse(expr)]\n try {\n // for values like `123 = arguments[1]`, `foo?.bar = arguments[1]`\n evaluate.push(parse(`${expr}=arguments[1];`))\n }\n catch (e) { }\n return evaluate\n}\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.fx = (el, evaluate, state) => {\n return effect(() => evaluate(state));\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["sprae_exports", "__export", "sprae_default", "__toCommonJS", "signal", "effect", "untracked", "batch", "computed", "use", "s", "fn", "_signals", "_change", "store", "values", "parent", "list", "signals", "_len", "signal", "state", "_", "key", "v", "s", "set", "del", "desc", "computed", "mut", "lastProp", "i", "l", "cur", "untracked", "batch", "_dispose", "directive", "memo", "sprae", "el", "values", "state", "store", "disposes", "init", "parent", "i", "attr", "names", "name", "dir", "evaluate", "parse", "dispose", "child", "evalMemo", "expr", "fn", "compile", "e", "err", "s", "use", "frag", "tpl", "content", "attributes", "ref", "childNodes", "a", "ulive_es_exports", "__export", "batch", "computed", "effect", "signal", "untracked", "current", "batched", "v", "s", "obs", "val", "sub", "fn", "teardown", "fx", "deps", "prev", "dep", "c", "e", "fxs", "_prevIf", "directive", "el", "evaluate", "state", "next", "holder", "curEl", "ifEl", "elseEl", "frag", "memo", "effect", "newEl", "sprae", "directive", "tpl", "itemVar", "idxVar", "evaluate", "state", "holder", "cur", "keys", "prevl", "items", "computed", "_", "i", "update", "untracked", "_a", "_b", "newItems", "newl", "_change", "s", "_signals", "idx", "scope", "store", "el", "frag", "sprae", "planned", "effect", "expr", "leftSide", "itemsExpr", "parse", "directive", "el", "expr", "state", "directive", "el", "evaluate", "rootState", "state", "effect", "values", "sprae", "store", "directive", "el", "evaluate", "state", "tpl", "content", "sprae", "directive", "el", "evaluate", "state", "frag", "effect", "value", "directive", "el", "evaluate", "state", "cur", "effect", "v", "clsx", "cls", "k", "directive", "el", "evaluate", "state", "initStyle", "effect", "v", "k", "directive", "target", "evaluate", "state", "name", "effect", "value", "attr", "key", "dashcase", "ctxs", "e", "ctx", "match", "mod", "param", "mods", "addListener", "startFn", "nextFn", "off", "idx", "nextListener", "fn", "evt", "test", "defer", "stop", "prevent", "immediate", "opts", "cb", "error", "err", "limit", "throttle", "wait", "debounce", "_", "keys", "p", "el", "v", "pause", "planned", "block", "timeout", "str", "directive", "el", "getValue", "setValue", "state", "update", "value", "from", "to", "attr", "option", "handleChange", "e", "effect", "expr", "evaluate", "parse", "directive", "el", "evaluate", "state", "effect", "sprae", "ulive_es_exports", "expr", "sprae_default"]
7
+ }
@@ -0,0 +1,35 @@
1
+ (function (g, f) {
2
+ if ("object" == typeof exports && "object" == typeof module) {
3
+ module.exports = f();
4
+ } else if ("function" == typeof define && define.amd) {
5
+ define("sprae", [], f);
6
+ } else if ("object" == typeof exports) {
7
+ exports["sprae"] = f();
8
+ } else {
9
+ g["sprae"] = f();
10
+ }
11
+ }(this, () => {
12
+ var exports = {};
13
+ var module = { exports };
14
+ var I=Object.defineProperty;var Y=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.prototype.hasOwnProperty;var B=(e,r)=>{for(var t in r)I(e,t,{get:r[t],enumerable:!0})},re=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of ee(r))!te.call(e,s)&&s!==t&&I(e,s,{get:()=>r[s],enumerable:!(o=Y(r,s))||o.enumerable});return e};var oe=e=>re(I({},"__esModule",{value:!0}),e);var de={};B(de,{default:()=>me});module.exports=oe(de);var E,p,T,P,j;function H(e){E=e.signal,p=e.effect,j=e.computed,P=e.batch||(r=>r()),T=e.untracked||P}var x=Symbol("signals"),O=Symbol("length");function v(e,r){if(!e||e[x])return e;if(Array.isArray(e))return ne(e);if(e.constructor!==Object)return e;let t={...r?.[x]},o=E(Object.values(e).length),s=new Proxy(t,{get:(n,i)=>i===O?o:i===x?t:t[i]?.valueOf(),set:(n,i,c,a)=>(a=t[i],M(t,i,c),a??++o.value,1),deleteProperty:(n,i)=>(t[i]&&(V(t,i),o.value--),1),ownKeys(){return o.value,Reflect.ownKeys(t)}});for(let n in e){let i=Object.getOwnPropertyDescriptor(e,n);i?.get?(t[n]=j(i.get.bind(s)))._set=i.set?.bind(s):(t[n]=void 0,M(t,n,e[n]))}return s}var ie={push:1,pop:1,shift:1,unshift:1,splice:1};function ne(e){let r;if(e[x])return e;let t=E(e.length),o=Array(e.length).fill(),s=new Proxy(o,{get(n,i){if(typeof i=="symbol")return i===O?t:i===x?o:o[i];if(i==="length")return ie[r]?t.peek():t.value;if(r=i,o[i])return o[i].valueOf();if(i<o.length)return(o[i]=E(v(e[i]))).value},set(n,i,c){if(i==="length"){for(let a=c,y=o.length;a<y;a++)delete s[a];return t.value=o.length=c,!0}return M(o,i,c),i>=t.peek()&&(t.value=o.length=Number(i)+1),!0},deleteProperty:(n,i)=>(o[i]&&V(o,i),1)});return s}function M(e,r,t){let o=e[r];if(r[0]==="_")e[r]=t;else if(!o)e[r]=o=t?.peek?t:E(v(t));else if(t!==o.peek())if(o._set)o._set(t);else if(Array.isArray(t)&&Array.isArray(o.peek())){let s=o.peek();s[O]?T(()=>{P(()=>{let n=0,i=t.length;for(;n<i;n++)s[n]=t[n];s.length=i})}):o.value=t}else o.value=v(t)}function V(e,r){let t=e[r],o=t[Symbol.dispose];o&&delete t[Symbol.dispose],delete e[r],o?.()}var R=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),u={},g=new WeakMap;function d(e,r){if(!e?.childNodes)return;if(g.has(e))return Object.assign(g.get(e),r);let t=v(r||{}),o=[];return s(e),g.has(e)||g.set(e,t),e[R]=()=>{for(;o.length;)o.pop()();g.delete(e)},t;function s(n,i=n.parentNode){if(!!n.childNodes){for(let c=0;c<n.attributes?.length;){let a=n.attributes[c];if(a.name[0]===":"){n.removeAttribute(a.name);let y=a.name.slice(1).split(":");for(let A of y){let f=u[A]||u.default,l=(f.parse||W)(a.value),h=f(n,l,t,A);h&&o.push(h)}if(g.has(n))return n[R]&&o.push(n[R]);if(n.parentNode!==i)return}else c++}for(let c of[...n.childNodes])s(c,n)}}}var X={},W=(e,r,t)=>{if(t=X[e=e.trim()])return t;try{t=Z(e)}catch(o){F(o,r,e)}return X[e]=t},F=(e,r,t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
15
+
16
+ ${r}${t?`="${t}"
17
+
18
+ `:""}`,expr:t})},Z;d.use=e=>{e.signal&&H(e),e.compile&&(Z=e.compile)};var N=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],o=document.createTextNode(""),s=(r.append(o),[...r.childNodes]);return{childNodes:s,content:r,remove:()=>r.append(...s),replaceWith(n){n!==o&&(o.before(n),r.append(...s))},attributes:t,removeAttribute(n){t.splice(t.findIndex(i=>i.name===n),1)}}};var J={};B(J,{batch:()=>le,computed:()=>se,effect:()=>G,signal:()=>z,untracked:()=>ce});var w,$,z=(e,r,t=new Set)=>(r={get value(){return w?.deps.push(t.add(w)),e},set value(o){if(o!==e){e=o;for(let s of t)$?$.add(s):s()}},peek(){return e}},r.toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),G=(e,r,t,o)=>(t=s=>{r?.call?.(),s=w,w=t;try{r=e()}finally{w=s}},o=t.deps=[],t(),s=>{for(r?.call?.();s=o.pop();)s.delete(t)}),se=(e,r=z(),t,o)=>(t={get value(){return o||(o=G(()=>r.value=e())),r.value},peek:r.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),le=e=>{let r=$;r||($=new Set);try{e()}finally{if(!r){r=$,$=null;for(let t of r)t()}}},ce=(e,r,t)=>(r=w,w=null,t=e(),w=r,t);var Q=Symbol("if");u.if=(e,r,t)=>{let o=e.nextElementSibling,s=document.createTextNode(""),n,i,c;return e.replaceWith(s),i=e.content?N(e):e,g.set(i,null),o?.hasAttribute(":else")&&(o.removeAttribute(":else"),o.hasAttribute(":if")||(o.remove(),c=o.content?N(o):o,g.set(c,null))),p(()=>{let a=r(t)?i:e[Q]?null:c;o&&(o[Q]=a===i),n!=a&&(n?.remove(),(n=a)&&(s.before(n.content||n),g.get(n)===null&&g.delete(n),d(n,t)))})};u.each=(e,[r,t,o],s)=>{let n=document.createTextNode("");e.replaceWith(n);let i,c,a=0,y=j(()=>{c=null;let l=o(s);return typeof l=="number"&&(l=Array.from({length:l},(h,b)=>b+1)),l?.constructor===Object&&(c=Object.keys(l),l=Object.values(l)),l||[]}),A=()=>{T(()=>{var S,C;let l=0,h=y.value,b=h.length;if(i&&!i[O]){for(let k of i[x]||[])k[Symbol.dispose]();i=null,a=0}if(b<a)i.length=b;else{if(!i)i=h;else for(;l<a;l++)i[l]=h[l];for(;l<b;l++){i[l]=h[l];let k=l,K=v({[r]:i[x]?.[k]||i[k],[t]:c?c[k]:k},s),_=e.content?N(e):e.cloneNode(!0);n.before(_.content||_),d(_,K),((C=i[S=x]||(i[S]=[]))[l]||(C[l]={}))[Symbol.dispose]=()=>{_[Symbol.dispose](),_.remove()}}}a=b})},f=0;return p(()=>{y.value[O]?.value,f?f++:(A(),queueMicrotask(()=>(f&&A(),f=0)))})};u.each.parse=e=>{let[r,t]=e.split(/\s+in\s+/),[o,s="$"]=r.split(/\s*,\s*/);return[o,s,W(t)]};u.ref=(e,r,t)=>{t[r]=e};u.ref.parse=e=>e;u.with=(e,r,t)=>{let o;return p(()=>{let s=r(t);d(e,o?s:o=v(s,t))})};u.html=(e,r,t)=>{let o=r(t);if(!o)return;let s=(o.content||o).cloneNode(!0);e.replaceChildren(s),d(e,t)};u.text=(e,r,t)=>(e.content&&e.replaceWith(e=N(e).childNodes[0]),p(()=>{let o=r(t);e.textContent=o??""}));u.class=(e,r,t)=>{let o=new Set;return p(()=>{let s=r(t),n=new Set;s&&(typeof s=="string"?s.split(" ").map(i=>n.add(i)):Array.isArray(s)?s.map(i=>i&&n.add(i)):Object.entries(s).map(([i,c])=>c&&n.add(i)));for(let i of o)n.has(i)?n.delete(i):e.classList.remove(i);for(let i of o=n)e.classList.add(i)})};u.style=(e,r,t)=>{let o=e.getAttribute("style")||"";return o.endsWith(";")||(o+="; "),p(()=>{let s=r(t);if(typeof s=="string")e.setAttribute("style",o+s);else{e.setAttribute("style",o);for(let n in s)e.style.setProperty(n,s[n])}})};u.default=(e,r,t,o)=>{if(!o.startsWith("on"))return p(()=>{let f=r(t);if(o)D(e,o,f);else for(let l in f)D(e,pe(l),f[l])});let s=o.split("..").map(f=>{let l={evt:"",target:e,test:()=>!0};return l.evt=(f.startsWith("on")?f.slice(2):f).replace(/\.(\w+)?-?([-\w]+)?/g,(h,b,S="")=>(l.test=ae[b]?.(l,...S.split("-"))||l.test,"")),l});if(s.length==1)return p(()=>A(r(t),s[0]));let n,i,c,a=0,y=f=>{c=A(l=>(c(),i=f?.(l),(a=++a%s.length)?y(i):n&&y(n)),s[a])};return p(()=>(n=r(t),!c&&y(n),()=>n=null));function A(f,{evt:l,target:h,test:b,defer:S,stop:C,prevent:k,immediate:K,..._}){S&&(f=S(f));let q=L=>{try{b(L)&&(C&&(K?L.stopImmediatePropagation():L.stopPropagation()),k&&L.preventDefault(),f?.(L))}catch(U){F(U,`:on${l}`,f)}};return h.addEventListener(l,q,_),()=>h.removeEventListener(l,q,_)}};var ae={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},throttle(e,r){e.defer=t=>ue(t,r?Number(r)||0:108)},debounce(e,r){e.defer=t=>fe(t,r?Number(r)||0:108)},outside:e=>r=>{let t=e.target;return!(t.contains(r.target)||r.target.isConnected===!1||t.offsetWidth<1&&t.offsetHeight<1)},self:e=>r=>r.target===e.target,ctrl:(e,...r)=>t=>m.ctrl(t)&&r.every(o=>m[o]?m[o](t):t.key===o),shift:(e,...r)=>t=>m.shift(t)&&r.every(o=>m[o]?m[o](t):t.key===o),alt:(e,...r)=>t=>m.alt(t)&&r.every(o=>m[o]?m[o](t):t.key===o),meta:(e,...r)=>t=>m.meta(t)&&r.every(o=>m[o]?m[o](t):t.key===o),arrow:()=>m.arrow,enter:()=>m.enter,esc:()=>m.esc,tab:()=>m.tab,space:()=>m.space,delete:()=>m.delete,digit:()=>m.digit,letter:()=>m.letter,char:()=>m.char},m={ctrl:e=>e.ctrlKey||e.key==="Control"||e.key==="Ctrl",shift:e=>e.shiftKey||e.key==="Shift",alt:e=>e.altKey||e.key==="Alt",meta:e=>e.metaKey||e.key==="Meta"||e.key==="Command",arrow:e=>e.key.startsWith("Arrow"),enter:e=>e.key==="Enter",esc:e=>e.key.startsWith("Esc"),tab:e=>e.key==="Tab",space:e=>e.key==="\xA0"||e.key==="Space"||e.key===" ",delete:e=>e.key==="Delete"||e.key==="Backspace",digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},D=(e,r,t)=>{t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},ue=(e,r)=>{let t,o,s=n=>{t=!0,setTimeout(()=>{if(t=!1,o)return o=!1,s(n),e(n)},r)};return n=>t?o=!0:(s(n),e(n))},fe=(e,r)=>{let t;return o=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(o)},r)}},pe=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,r=>"-"+r.toLowerCase());u.value=(e,[r,t],o)=>{let s=e.type==="text"||e.type===""?i=>e.setAttribute("value",e.value=i??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(i,c,a)=>(c=e.selectionStart,a=e.selectionEnd,e.setAttribute("value",e.value=i??""),c&&e.setSelectionRange(c,a)):e.type==="checkbox"?i=>(e.checked=i,D(e,"checked",i)):e.type==="select-one"?i=>{for(let c in e.options)c.removeAttribute("selected");e.value=i,e.selectedOptions[0]?.setAttribute("selected","")}:i=>e.value=i,n=e.type==="checkbox"?i=>t(o,e.checked):i=>t(o,e.value);return e.addEventListener("input",n),e.addEventListener("change",n),p(()=>s(r(o)))};u.value.parse=e=>{let r=[W(e)];try{r.push(W(`${e}=arguments[1];`))}catch{}return r};u.fx=(e,r,t)=>p(()=>r(t));d.use(J);d.use({compile:e=>d.constructor(`with (arguments[0]) { return ${e} };`)});var me=d;document?.currentScript?.hasAttribute("init")&&d(document.documentElement);
19
+ if (typeof module.exports == "object" && typeof exports == "object") {
20
+ var __cp = (to, from, except, desc) => {
21
+ if ((from && typeof from === "object") || typeof from === "function") {
22
+ for (let key of Object.getOwnPropertyNames(from)) {
23
+ if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
24
+ Object.defineProperty(to, key, {
25
+ get: () => from[key],
26
+ enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
27
+ });
28
+ }
29
+ }
30
+ return to;
31
+ };
32
+ module.exports = __cp(module.exports, exports);
33
+ }
34
+ return module.exports;
35
+ }))
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../sprae.js", "../signal.js", "../store.js", "../core.js", "../node_modules/ulive/dist/ulive.es.js", "../directive/if.js", "../directive/each.js", "../directive/ref.js", "../directive/with.js", "../directive/html.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/default.js", "../directive/value.js", "../directive/fx.js"],
4
+ "sourcesContent": ["import sprae from './core.js'\n\nimport * as signals from 'ulive'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/html.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'\n\n// default signals\nsprae.use(signals)\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\n// autoinit\nif (document?.currentScript?.hasAttribute('init')) sprae(document.documentElement)\n", "// signals adapter - allows switching signals implementation and not depend on core\nexport let signal, effect, untracked, batch, computed;\n\nexport function use(s) {\n signal = s.signal\n effect = s.effect\n computed = s.computed\n batch = s.batch || (fn => fn())\n untracked = s.untracked || batch\n}\n", "// signals-based proxy\nimport { signal, computed, effect, batch, untracked } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('length');\n\n// object store is not lazy\nexport default function store(values, parent) {\n if (!values) return values\n\n // ignore existing state as argument\n if (values[_signals]) return values;\n\n // redirect for optimized array store\n if (Array.isArray(values)) return list(values)\n\n // ignore non-objects\n if (values.constructor !== Object) return values;\n\n // NOTE: if you decide to unlazy values, think about large arrays - init upfront can be costly\n let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length)\n\n // proxy conducts prop access to signals\n const state = new Proxy(signals, {\n get: (_, key) => key === _change ? _len : key === _signals ? signals : (signals[key]?.valueOf()),\n set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? (++_len.value), 1), // bump length for new signal\n deleteProperty: (_, key) => (signals[key] && (del(signals, key), _len.value--), 1),\n ownKeys() {\n // subscribe to length when object is spread\n _len.value\n return Reflect.ownKeys(signals);\n },\n })\n\n // init signals for values\n for (let key in values) {\n const desc = Object.getOwnPropertyDescriptor(values, key)\n\n // getter turns into computed\n if (desc?.get) {\n // stash setter\n (signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);\n }\n else {\n // init blank signal - make sure we don't take prototype one\n signals[key] = undefined\n set(signals, key, values[key]);\n }\n }\n\n return state\n}\n\n// length changing methods\nconst mut = { push: 1, pop: 1, shift: 1, unshift: 1, splice: 1 }\n\n// array store - signals are lazy since arrays can be very large & expensive\nexport function 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 // ignore existing state as argument\n if (values[_signals]) return values;\n\n // .length signal is stored separately, since it cannot be replaced on array\n let _len = signal(values.length),\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 const state = new Proxy(signals, {\n get(_, key) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof key === 'symbol') return key === _change ? _len : key === _signals ? signals : signals[key]\n\n // console.log('get', key)\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut[lastProp] ? _len.peek() : _len.value;\n\n lastProp = key;\n\n if (signals[key]) return signals[key].valueOf()\n\n // I hope reading values here won't diverge from signals\n if (key < signals.length) return (signals[key] = signal(store(values[key]))).value\n },\n\n set(_, key, v) {\n // console.log('set', key, v)\n // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v, l = signals.length; i < l; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n return true\n }\n\n set(signals, key, v)\n\n // force changing length, if eg. a=[]; a[1]=1 - need to come after setting the item\n if (key >= _len.peek()) _len.value = signals.length = Number(key) + 1\n\n return true\n },\n\n deleteProperty: (_, key) => (signals[key] && del(signals, key), 1),\n\n })\n\n return state\n}\n\n// set/update signal value\nfunction set(signals, key, v) {\n let s = signals[key]\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property\n else if (!s) {\n // preserve signal value as is\n signals[key] = s = v?.peek ? v : signal(store(v))\n }\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === 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(s.peek())) {\n const cur = s.peek()\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) untracked(() => {\n batch(() => {\n let i = 0, l = v.length;\n for (; i < l; i++) cur[i] = v[i]\n cur.length = l // forces deleting tail signals\n })\n })\n else {\n s.value = v\n }\n }\n // .x = y\n else {\n s.value = store(v)\n }\n}\n\n// delete signal\nfunction del(signals, key) {\n const s = signals[key], del = s[Symbol.dispose]\n if (del) delete s[Symbol.dispose]\n delete signals[key]\n del?.()\n}\n", "import { use } from \"./signal.js\";\nimport store, { _signals } from './store.js';\n\n// polyfill\nconst _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\n// reserved directives - order matters!\nexport const directive = {};\n\n// every element that's in cache === directly spraed and un subsequent sprae is just updated (like each)\nexport const memo = new WeakMap();\n\n// sprae element: apply directives\nexport default function sprae(el, values) {\n // text nodes, comments etc\n if (!el?.childNodes) return\n\n // repeated call can be caused by :each with new objects with old keys needs an update\n if (memo.has(el)) {\n // we rewrite signals instead of update, because user should have what he provided\n return Object.assign(memo.get(el), values)\n }\n\n // take over existing state instead of creating clone\n const state = store(values || {}), disposes = []\n\n init(el);\n\n // if element was spraed by :with or :each instruction - skip, otherwise save\n if (!memo.has(el)) memo.set(el, state);\n\n // disposer unspraes all internal elements\n el[_dispose] = () => {\n while (disposes.length) disposes.pop()();\n memo.delete(el);\n }\n\n return state;\n\n function init(el, parent = el.parentNode) {\n if (!el.childNodes) return // ignore text nodes, comments etc\n\n // init generic-name attributes second\n for (let i = 0; i < el.attributes?.length;) {\n let attr = el.attributes[i];\n\n if (attr.name[0] === ':') {\n el.removeAttribute(attr.name);\n\n // multiple attributes like :id:for=\"\"\n let names = attr.name.slice(1).split(':')\n\n // NOTE: secondary directives don't stop flow nor extend state, so no need to check\n for (let name of names) {\n let dir = directive[name] || directive.default\n let evaluate = (dir.parse || parse)(attr.value)\n let dispose = dir(el, evaluate, state, name);\n if (dispose) disposes.push(dispose);\n }\n\n // stop if element was spraed by internal directive\n if (memo.has(el)) return el[_dispose] && disposes.push(el[_dispose])\n\n // stop if element is skipped (detached) like in case of :if or :each\n if (el.parentNode !== parent) return\n } else i++;\n }\n\n for (let child of [...el.childNodes]) init(child, el);\n };\n}\n\n\n// compiler\nconst evalMemo = {};\nexport const parse = (expr, dir, fn) => {\n if (fn = evalMemo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n // runtime errors\n return evalMemo[expr] = fn\n}\n\n// wrapped call\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\nexport let compile\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}\n\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),\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 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", "let current, batched;\r\n\r\nconst signal = (v, s, obs = new Set) => (\r\n s = {\r\n get value() {\r\n current?.deps.push(obs.add(current));\r\n return v\r\n },\r\n set value(val) {\r\n if (val === v) return\r\n v = val;\r\n for (let sub of obs) batched ? batched.add(sub) : sub(); // notify effects\r\n },\r\n peek() { return v },\r\n },\r\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\r\n s\r\n),\r\n effect = (fn, teardown, fx, deps) => (\r\n fx = (prev) => {\r\n teardown?.call?.();\r\n prev = current, current = fx;\r\n try { teardown = fn(); } finally { current = prev; }\r\n },\r\n deps = fx.deps = [],\r\n\r\n fx(),\r\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\r\n ),\r\n computed = (fn, s = signal(), c, e) => (\r\n c = {\r\n get value() {\r\n e ||= effect(() => s.value = fn());\r\n return s.value\r\n },\r\n peek: s.peek\r\n },\r\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\r\n c\r\n ),\r\n batch = (fn) => {\r\n let fxs = batched;\r\n if (!fxs) batched = new Set;\r\n try { fn(); }\r\n finally {\r\n if (!fxs) {\r\n fxs = batched;\r\n batched = null;\r\n for (const fx of fxs) fx();\r\n }\r\n }\r\n },\r\n untracked = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);\n\nexport { batch, computed, effect, signal, untracked };\n", "import sprae, { directive, memo, frag } from \"../core.js\";\nimport { effect } from \"../signal.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\");\ndirective.if = (el, evaluate, state) => {\n let next = el.nextElementSibling,\n holder = document.createTextNode(''),\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n memo.set(ifEl, null) // mark all el as fake-spraed, because we have to sprae for real on insert\n\n if (next?.hasAttribute(\":else\")) {\n next.removeAttribute(\":else\");\n // if next is :else :if - leave it for its own :if handler\n if (!next.hasAttribute(\":if\")) next.remove(), elseEl = next.content ? frag(next) : next, memo.set(elseEl, null)\n }\n\n return effect(() => {\n const newEl = evaluate(state) ? ifEl : el[_prevIf] ? null : elseEl;\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n curEl?.remove()\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n memo.get(curEl) === null && memo.delete(curEl) // remove fake memo to sprae as new\n sprae(curEl, state)\n }\n }\n });\n};\n", "import sprae, { directive, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect, untracked, computed } from '../signal.js';\n\n\ndirective.each = (tpl, [itemVar, idxVar, evaluate], state) => {\n // we need :if to be able to replace holder instead of tpl for :if :each case\n const holder = (document.createTextNode(\"\"));\n tpl.replaceWith(holder);\n\n // we re-create items any time new items are produced\n let cur, keys, prevl = 0\n\n // separate computed effect reduces number of needed updates for the effect\n const items = computed(() => {\n keys = null\n let items = evaluate(state)\n if (typeof items === \"number\") items = Array.from({ length: items }, (_, i) => i + 1)\n if (items?.constructor === Object) keys = Object.keys(items), items = Object.values(items)\n return items || []\n })\n\n const update = () => {\n // NOTE: untracked avoids rerendering full list whenever internal items or props change\n untracked(() => {\n let i = 0, newItems = items.value, 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) {\n cur.length = newl\n }\n // update, append, init\n else {\n // init\n if (!cur) {\n cur = newItems\n }\n // update\n else {\n for (; i < prevl; i++) {\n cur[i] = newItems[i]\n }\n }\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n scope = store({\n [itemVar]: cur[_signals]?.[idx] || cur[idx],\n [idxVar]: keys ? keys[idx] : idx\n }, state),\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 ((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {\n el[Symbol.dispose](), el.remove()\n };\n }\n }\n\n prevl = newl\n })\n }\n\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just on init) since preact unsubscribes unused signals\n items.value[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned) {\n update()\n queueMicrotask(() => (planned && update(), planned = 0))\n } else planned++\n })\n}\n\n\n// redefine parser to exclude `[a in] b`\ndirective.each.parse = (expr) => {\n let [leftSide, itemsExpr] = expr.split(/\\s+in\\s+/);\n let [itemVar, idxVar = \"$\"] = leftSide.split(/\\s*,\\s*/);\n\n return [itemVar, idxVar, parse(itemsExpr)]\n}\n", "import { directive } from \"../core.js\";\nimport { _change, _signals } from \"../store.js\";\n\n// ref must be last within primaries, since that must be skipped by :each, but before secondaries\ndirective.ref = (el, expr, state) => {\n state[expr] = el\n}\n\ndirective.ref.parse = expr => expr\n", "import sprae, { directive } from \"../core.js\";\nimport store, { _signals } from '../store.js';\nimport { effect } from \"../signal.js\";\n\ndirective.with = (el, evaluate, rootState) => {\n let state\n return effect(() => {\n let values = evaluate(rootState);\n sprae(el, state ? values : state = store(values, rootState))\n })\n};\n", "import sprae, { directive } from \"../core.js\";\n\ndirective.html = (el, evaluate, state) => {\n let tpl = evaluate(state);\n\n if (!tpl) return\n\n let content = (tpl.content || tpl).cloneNode(true);\n el.replaceChildren(content);\n sprae(el, state);\n};\n", "import { directive, frag } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set text content\ndirective.text = (el, evaluate, state) => {\n // <template :text=\"a\"/> or previously initialized template\n if (el.content) el.replaceWith(el = frag(el).childNodes[0])\n\n return effect(() => {\n let value = evaluate(state);\n el.textContent = value == null ? \"\" : value;\n });\n};\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.class = (el, evaluate, state) => {\n let cur = new Set\n return effect(() => {\n let v = evaluate(state);\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 { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.style = (el, evaluate, state) => {\n let initStyle = el.getAttribute(\"style\") || \"\";\n if (!initStyle.endsWith(\";\")) initStyle += \"; \";\n\n return effect(() => {\n let v = evaluate(state);\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + v);\n else {\n el.setAttribute(\"style\", initStyle);\n for (let k in v) el.style.setProperty(k, v[k]);\n }\n });\n};\n", "import { directive, err } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\n// set generic property directive\ndirective.default = (target, evaluate, state, name) => {\n // simple prop\n if (!name.startsWith('on')) return effect(() => {\n let value = evaluate(state);\n if (name) attr(target, name, value)\n else for (let key in value) attr(target, dashcase(key), value[key]);\n });\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 const 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 (match, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // single event\n if (ctxs.length == 1) return effect(() => addListener(evaluate(state), ctxs[0]))\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n const 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 effect(() => (\n startFn = evaluate(state),\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n ))\n\n // add listener with the context\n function addListener(fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }) {\n if (defer) fn = defer(fn)\n\n const cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.(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};\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\n throttle(ctx, limit) { ctx.defer = (fn) => throttle(fn, limit ? Number(limit) || 0 : 108); },\n debounce(ctx, wait) { ctx.defer = (fn) => debounce(fn, wait ? Number(wait) || 0 : 108); },\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// 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\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\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => \"-\" + match.toLowerCase());\n}\n", "import { directive, parse } from \"../core.js\";\nimport { attr } from './default.js';\nimport { effect } from \"../signal.js\";\n\n// connect expr to element value\ndirective.value = (el, [getValue, setValue], state) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ? (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value))\n : (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ? (value, from, to) =>\n (\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\") ? (value) => (el.checked = value, attr(el, \"checked\", value))\n : (el.type === \"select-one\") ? (value) => {\n for (let option in el.options) option.removeAttribute(\"selected\");\n el.value = value;\n el.selectedOptions[0]?.setAttribute(\"selected\", \"\");\n }\n : (value) => (el.value = value);\n\n // bind back\n const handleChange = el.type === 'checkbox' ? e => setValue(state, el.checked) : e => setValue(state, el.value)\n el.addEventListener('input', handleChange)\n el.addEventListener('change', handleChange)\n\n return effect(() => (update(getValue(state))));\n};\n\ndirective.value.parse = expr => {\n let evaluate = [parse(expr)]\n try {\n // for values like `123 = arguments[1]`, `foo?.bar = arguments[1]`\n evaluate.push(parse(`${expr}=arguments[1];`))\n }\n catch (e) { }\n return evaluate\n}\n", "import { directive } from \"../core.js\";\nimport { effect } from \"../signal.js\";\n\ndirective.fx = (el, evaluate, state) => {\n return effect(() => evaluate(state));\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["sprae_exports", "__export", "sprae_default", "__toCommonJS", "signal", "effect", "untracked", "batch", "computed", "use", "s", "fn", "_signals", "_change", "store", "values", "parent", "list", "signals", "_len", "signal", "state", "_", "key", "v", "s", "set", "del", "desc", "computed", "mut", "lastProp", "i", "l", "cur", "untracked", "batch", "_dispose", "directive", "memo", "sprae", "el", "values", "state", "store", "disposes", "init", "parent", "i", "attr", "names", "name", "dir", "evaluate", "parse", "dispose", "child", "evalMemo", "expr", "fn", "compile", "e", "err", "s", "use", "frag", "tpl", "content", "attributes", "ref", "childNodes", "a", "ulive_es_exports", "__export", "batch", "computed", "effect", "signal", "untracked", "current", "batched", "v", "s", "obs", "val", "sub", "fn", "teardown", "fx", "deps", "prev", "dep", "c", "e", "fxs", "_prevIf", "directive", "el", "evaluate", "state", "next", "holder", "curEl", "ifEl", "elseEl", "frag", "memo", "effect", "newEl", "sprae", "directive", "tpl", "itemVar", "idxVar", "evaluate", "state", "holder", "cur", "keys", "prevl", "items", "computed", "_", "i", "update", "untracked", "_a", "_b", "newItems", "newl", "_change", "s", "_signals", "idx", "scope", "store", "el", "frag", "sprae", "planned", "effect", "expr", "leftSide", "itemsExpr", "parse", "directive", "el", "expr", "state", "directive", "el", "evaluate", "rootState", "state", "effect", "values", "sprae", "store", "directive", "el", "evaluate", "state", "tpl", "content", "sprae", "directive", "el", "evaluate", "state", "frag", "effect", "value", "directive", "el", "evaluate", "state", "cur", "effect", "v", "clsx", "cls", "k", "directive", "el", "evaluate", "state", "initStyle", "effect", "v", "k", "directive", "target", "evaluate", "state", "name", "effect", "value", "attr", "key", "dashcase", "ctxs", "e", "ctx", "match", "mod", "param", "mods", "addListener", "startFn", "nextFn", "off", "idx", "nextListener", "fn", "evt", "test", "defer", "stop", "prevent", "immediate", "opts", "cb", "error", "err", "limit", "throttle", "wait", "debounce", "_", "keys", "p", "el", "v", "pause", "planned", "block", "timeout", "str", "directive", "el", "getValue", "setValue", "state", "update", "value", "from", "to", "attr", "option", "handleChange", "e", "effect", "expr", "evaluate", "parse", "directive", "el", "evaluate", "state", "effect", "sprae", "ulive_es_exports", "expr", "sprae_default"]
7
+ }
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "sprae",
3
3
  "description": "DOM microhydration.",
4
- "version": "10.8.2",
4
+ "version": "10.9.1",
5
5
  "main": "./sprae.js",
6
6
  "module": "./sprae.js",
7
+ "unpkg": "dist/sprae.umd.js",
7
8
  "type": "module",
8
9
  "files": [
9
10
  "core.js",
@@ -21,21 +22,19 @@
21
22
  "@webreflection/signal": "^2.0.0",
22
23
  "es-module-shims": "^1.6.2",
23
24
  "esbuild": "^0.15.14",
25
+ "esbuild-plugin-umd-wrapper": "^2.0.0",
24
26
  "hyperf": "^1.6.2",
25
27
  "jsdom": "^21.1.0",
26
28
  "signal-polyfill": "^0.1.1",
27
29
  "subscript": "^8.3.5",
28
- "terser": "^5.15.1",
29
30
  "tst": "^7.1.1",
30
31
  "usignal": "^0.9.0",
31
32
  "wait-please": "^3.1.0"
32
33
  },
33
34
  "scripts": {
34
35
  "test": "node -r ./test/register.cjs test/test.js",
35
- "build": "npm run bundle && npm run min",
36
- "bundle": "esbuild --bundle ./sprae.js --outdir=dist --format=esm",
37
- "watch": "esbuild --bundle --watch ./sprae.js --outdir=dist --format=esm",
38
- "min": "terser ./dist/sprae.js -o ./dist/sprae.min.js --module -c passes=3 -m"
36
+ "build": "node .esbuild.js",
37
+ "watch": "esbuild --bundle --watch ./sprae.js --outdir=dist --format=esm"
39
38
  },
40
39
  "repository": {
41
40
  "type": "git",
package/readme.md CHANGED
@@ -1,10 +1,10 @@
1
- # ∴ spræ [![tests](https://github.com/dy/sprae/actions/workflows/node.js.yml/badge.svg)](https://github.com/dy/sprae/actions/workflows/node.js.yml) [![npm bundle size](https://img.shields.io/bundlephobia/minzip/sprae)](https://bundlephobia.com/package/sprae@10.8.1) [![npm](https://img.shields.io/npm/v/sprae?color=orange)](https://npmjs.org/sprae)
1
+ # ∴ spræ [![tests](https://github.com/dy/sprae/actions/workflows/node.js.yml/badge.svg)](https://github.com/dy/sprae/actions/workflows/node.js.yml) [![npm bundle size](https://img.shields.io/bundlephobia/minzip/sprae)](https://bundlephobia.com/package/sprae) [![npm](https://img.shields.io/npm/v/sprae?color=orange)](https://npmjs.org/sprae)
2
2
 
3
3
  > DOM tree microhydration
4
4
 
5
5
  _Sprae_ is open & minimalistic progressive enhancement framework.<br/>
6
6
  Perfect for small-scale websites, static pages, landings, prototypes, or lightweight UI.<br/>
7
- A light, fast and sweet alternative to alpine, petit-vue etc.
7
+ A light alternative to alpine, petite-vue etc.
8
8
 
9
9
  ## Usage
10
10
 
@@ -26,6 +26,25 @@ A light, fast and sweet alternative to alpine, petit-vue etc.
26
26
 
27
27
  Sprae evaluates `:`-directives and evaporates them, returning reactive state for updates.
28
28
 
29
+ ### As standalone
30
+
31
+ ```html
32
+ <script src="https://cdn.jsdelivr.net/npm/sprae/dist/sprae.umd.js" init></script>
33
+ <script>
34
+ window.sprae(el); // global standalone
35
+ </script>
36
+ ```
37
+
38
+ `init` attribute autoinits sprae on document.
39
+
40
+ ### As CJS etc.
41
+
42
+ ```js
43
+ const sprae = require('sprae/dist/sprae.umd.js');
44
+ sprae(el);
45
+ ```
46
+
47
+
29
48
  ## Directives
30
49
 
31
50
  #### `:if="condition"`, `:else`
@@ -101,7 +120,7 @@ Set style value.
101
120
 
102
121
  #### `:value="value"`
103
122
 
104
- Set value of an input, textarea or select.
123
+ Set value to/from an input, textarea or select (like alpinejs `x-model`).
105
124
 
106
125
  ```html
107
126
  <input :value="value" />
@@ -113,7 +132,7 @@ Set value of an input, textarea or select.
113
132
  </select>
114
133
 
115
134
  <!-- handles checked attr -->
116
- <input type="checkbox" :value="checked" />
135
+ <input type="checkbox" :value="item.done" />
117
136
  ```
118
137
 
119
138
  #### `:<prop>="value"`, `:="values"`
package/sprae.js CHANGED
@@ -19,6 +19,6 @@ import './directive/default.js'
19
19
  sprae.use(signals)
20
20
 
21
21
  // default compiler (indirect new Function to avoid detector)
22
- sprae.use({ compile: expr => sprae.constructor(`__scope`, `with (__scope) { return ${expr} };`) })
22
+ sprae.use({ compile: expr => sprae.constructor(`with (arguments[0]) { return ${expr} };`) })
23
23
 
24
24
  export default sprae