sprae 11.2.3 → 11.2.4

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/dist/sprae.umd.js CHANGED
@@ -72,9 +72,8 @@ var init_store = __esm({
72
72
  _change = Symbol("change");
73
73
  store = (values, parent) => {
74
74
  if (!values) return values;
75
- if (values[_signals]) return values;
76
- if (Array.isArray(values)) return list(values);
77
- if (values.constructor !== Object || values[Symbol.toStringTag]) return values;
75
+ if (values[_signals] || values[Symbol.toStringTag]) return values;
76
+ if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
78
77
  let signals = { ...parent?.[_signals] }, _len = signal(Object.values(values).length), state = new Proxy(signals, {
79
78
  get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
80
79
  set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s ?? ++_len.value, 1),
@@ -92,10 +91,7 @@ var init_store = __esm({
92
91
  return state;
93
92
  };
94
93
  list = (values) => {
95
- let lastProp;
96
- if (values[_signals]) return values;
97
- let _len = signal(values.length), signals = Array(values.length).fill();
98
- const state = new Proxy(signals, {
94
+ let lastProp, _len = signal(values.length), signals = Array(values.length).fill(), state = new Proxy(signals, {
99
95
  get(_, key) {
100
96
  if (typeof key === "symbol") return key === _change ? _len : key === _signals ? signals : signals[key];
101
97
  if (key === "length") return mut.includes(lastProp) ? _len.peek() : _len.value;
@@ -107,11 +103,11 @@ var init_store = __esm({
107
103
  if (key === "length") {
108
104
  for (let i = v; i < signals.length; i++) delete state[i];
109
105
  _len.value = signals.length = v;
110
- return true;
106
+ } else {
107
+ set(signals, key, v);
108
+ if (key >= _len.peek()) _len.value = signals.length = +key + 1;
111
109
  }
112
- set(signals, key, v);
113
- if (key >= _len.peek()) _len.value = signals.length = +key + 1;
114
- return true;
110
+ return 1;
115
111
  },
116
112
  deleteProperty: (_, key) => (signals[key]?.[Symbol.dispose]?.(), delete signals[key], 1)
117
113
  });
@@ -119,13 +115,12 @@ var init_store = __esm({
119
115
  };
120
116
  mut = ["push", "pop", "shift", "unshift", "splice"];
121
117
  set = (signals, key, v) => {
122
- let s = signals[key];
118
+ let s = signals[key], cur;
123
119
  if (key[0] === "_") signals[key] = v;
124
120
  else if (!s) signals[key] = s = v?.peek ? v : signal(store(v));
125
- else if (v === s.peek()) ;
121
+ else if (v === (cur = s.peek())) ;
126
122
  else if (s._set) s._set(v);
127
- else if (Array.isArray(v) && Array.isArray(s.peek())) {
128
- const cur = s.peek();
123
+ else if (Array.isArray(v) && Array.isArray(cur)) {
129
124
  if (cur[_change]) batch(() => {
130
125
  for (let i = 0; i < v.length; i++) cur[i] = v[i];
131
126
  cur.length = v.length;
@@ -138,35 +133,7 @@ var init_store = __esm({
138
133
  });
139
134
 
140
135
  // core.js
141
- function sprae(el, values) {
142
- if (el[_state]) return Object.assign(el[_state], values);
143
- const state = store(values || {}), offs = [], fx = [];
144
- const init = (el2, attrs = el2.attributes) => {
145
- if (attrs) for (let i = 0; i < attrs.length; ) {
146
- let { name, value } = attrs[i], pfx, update, dir2;
147
- if (pfx = name[0] === ":" ? 1 : name[0] === "s" && name[1] === "-" ? 2 : 0) {
148
- el2.removeAttribute(name);
149
- for (dir2 of name.slice(pfx).split(":")) {
150
- update = (directive[dir2] || directive.default)(el2, value, state, dir2);
151
- fx.push(update), offs.push(effect(update));
152
- if (el2[_state] === null) return;
153
- }
154
- } else i++;
155
- }
156
- for (let child of el2.childNodes) child.nodeType == 1 && init(child);
157
- };
158
- init(el);
159
- if (!(_state in el)) {
160
- el[_state] = state;
161
- el[_off] = () => {
162
- while (offs.length) offs.pop()();
163
- };
164
- el[_on] = () => offs.push(...fx.map((f) => effect(f)));
165
- el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null);
166
- }
167
- return state;
168
- }
169
- var _dispose, _state, _on, _off, directive, dir, parse, memo, err, compile, frag;
136
+ var _dispose, _state, _on, _off, directive, dir, sprae, parse, memo, err, compile, frag, core_default;
170
137
  var init_core = __esm({
171
138
  "core.js"() {
172
139
  init_signal();
@@ -177,6 +144,35 @@ var init_core = __esm({
177
144
  _off = Symbol("off");
178
145
  directive = {};
179
146
  dir = (name, create, p = parse) => directive[name] = (el, expr, state, name2, update, evaluate) => (evaluate = p(expr), update = create(el, state, expr, name2, evaluate), () => update(evaluate(state)));
147
+ sprae = (el, values) => {
148
+ if (el[_state]) return Object.assign(el[_state], values);
149
+ let state = store(values || {}), offs = [], fx = [], init = (el2, attrs = el2.attributes) => {
150
+ if (attrs) for (let i = 0; i < attrs.length; ) {
151
+ let { name, value } = attrs[i], pfx, update, dir2;
152
+ if (pfx = name[0] === ":" ? 1 : name[0] === "s" && name[1] === "-" ? 2 : 0) {
153
+ el2.removeAttribute(name);
154
+ for (dir2 of name.slice(pfx).split(":")) {
155
+ update = (directive[dir2] || directive.default)(el2, value, state, dir2);
156
+ fx.push(update), offs.push(effect(update));
157
+ if (el2[_state] === null) return;
158
+ }
159
+ } else i++;
160
+ }
161
+ for (let child of el2.childNodes) child.nodeType == 1 && init(child);
162
+ };
163
+ init(el);
164
+ if (!(_state in el)) {
165
+ el[_state] = state;
166
+ el[_off] = () => (offs.map((off) => off()), offs = []);
167
+ el[_on] = () => offs = fx.map((f) => effect(f));
168
+ el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null);
169
+ }
170
+ return state;
171
+ };
172
+ sprae.use = (s) => {
173
+ s.signal && use(s);
174
+ s.compile && (compile = s.compile);
175
+ };
180
176
  parse = (expr, dir2, fn) => {
181
177
  if (fn = memo[expr = expr.trim()]) return fn;
182
178
  try {
@@ -194,10 +190,6 @@ ${dir2}${expr ? `="${expr}"
194
190
 
195
191
  ` : ""}`, expr });
196
192
  };
197
- sprae.use = (s) => {
198
- s.signal && use(s);
199
- s.compile && (compile = s.compile);
200
- };
201
193
  frag = (tpl) => {
202
194
  if (!tpl.nodeType) return tpl;
203
195
  let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
@@ -218,6 +210,7 @@ ${dir2}${expr ? `="${expr}"
218
210
  // setAttributeNode() { }
219
211
  };
220
212
  };
213
+ core_default = sprae;
221
214
  }
222
215
  });
223
216
 
@@ -228,7 +221,7 @@ var init_if = __esm({
228
221
  init_core();
229
222
  _prevIf = Symbol("if");
230
223
  dir("if", (el, state) => {
231
- const holder = document.createTextNode("");
224
+ let holder = document.createTextNode("");
232
225
  let next = el.nextElementSibling, curEl, ifEl, elseEl;
233
226
  el.replaceWith(holder);
234
227
  ifEl = el.content ? frag(el) : el;
@@ -237,14 +230,13 @@ var init_if = __esm({
237
230
  next.removeAttribute(":else");
238
231
  if (!next.hasAttribute(":if")) next.remove(), elseEl = next.content ? frag(next) : next, elseEl[_state] = null;
239
232
  }
240
- return (value) => {
241
- const newEl = value ? ifEl : el[_prevIf] ? null : elseEl;
233
+ return (value, newEl = value ? ifEl : el[_prevIf] ? null : elseEl) => {
242
234
  if (next) next[_prevIf] = newEl === ifEl;
243
235
  if (curEl != newEl) {
244
236
  if (curEl) curEl.remove(), curEl[_off]?.();
245
237
  if (curEl = newEl) {
246
238
  holder.before(curEl.content || curEl);
247
- curEl[_state] === null ? (delete curEl[_state], sprae(curEl, state)) : curEl[_on]();
239
+ curEl[_state] === null ? (delete curEl[_state], core_default(curEl, state)) : curEl[_on]();
248
240
  }
249
241
  }
250
242
  };
@@ -261,12 +253,10 @@ var init_each = __esm({
261
253
  dir(
262
254
  "each",
263
255
  (tpl, state, expr) => {
264
- const [itemVar, idxVar = "$"] = expr.split(/\s+in\s+/)[0].split(/\s*,\s*/);
265
- const holder = document.createTextNode("");
266
- tpl.replaceWith(holder);
267
- tpl[_state] = null;
256
+ let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().split(/\s*,\s*/);
257
+ let holder = document.createTextNode("");
268
258
  let cur, keys2, items, prevl = 0;
269
- const update = () => {
259
+ let update = () => {
270
260
  var _a, _b;
271
261
  let i = 0, newItems = items, newl = newItems.length;
272
262
  if (cur && !cur[_change]) {
@@ -284,7 +274,7 @@ var init_each = __esm({
284
274
  [idxVar]: keys2 ? keys2[idx] : idx
285
275
  }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
286
276
  holder.before(el.content || el);
287
- sprae(el, scope);
277
+ core_default(el, scope);
288
278
  ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose] = () => {
289
279
  el[Symbol.dispose]?.(), el.remove();
290
280
  };
@@ -292,6 +282,8 @@ var init_each = __esm({
292
282
  }
293
283
  prevl = newl;
294
284
  };
285
+ tpl.replaceWith(holder);
286
+ tpl[_state] = null;
295
287
  return (value) => {
296
288
  keys2 = null;
297
289
  if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
@@ -305,7 +297,7 @@ var init_each = __esm({
305
297
  };
306
298
  },
307
299
  // redefine evaluator to take second part of expression
308
- (expr) => parse(expr.split(/\s+in\s+/)[1])
300
+ (expr) => parse(expr.split(/\bin\b/)[1])
309
301
  );
310
302
  }
311
303
  });
@@ -320,7 +312,7 @@ var init_default = __esm({
320
312
  return name ? (value) => attr(target, name, value) : (value) => {
321
313
  for (let key in value) attr(target, dashcase(key), value[key]);
322
314
  };
323
- const ctxs = name.split("..").map((e) => {
315
+ let ctxs = name.split("..").map((e) => {
324
316
  let ctx = { evt: "", target, test: () => true };
325
317
  ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
326
318
  /\.(\w+)?-?([-\w]+)?/g,
@@ -328,9 +320,9 @@ var init_default = __esm({
328
320
  );
329
321
  return ctx;
330
322
  });
331
- const addListener = (fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }) => {
323
+ let addListener = (fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }, cb) => {
332
324
  if (defer) fn = defer(fn);
333
- const cb = (e) => {
325
+ cb = (e) => {
334
326
  try {
335
327
  test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e));
336
328
  } catch (error) {
@@ -342,7 +334,7 @@ var init_default = __esm({
342
334
  };
343
335
  if (ctxs.length == 1) return (v) => addListener(v, ctxs[0]);
344
336
  let startFn, nextFn, off, idx = 0;
345
- const nextListener = (fn) => {
337
+ let nextListener = (fn) => {
346
338
  off = addListener((e) => (off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : startFn && nextListener(startFn)), ctxs[idx]);
347
339
  };
348
340
  return (value) => (startFn = value, !off && nextListener(startFn), () => startFn = null);
@@ -484,7 +476,7 @@ var init_value = __esm({
484
476
  el.oninput = el.onchange = handleChange;
485
477
  if (el.type?.startsWith("select")) {
486
478
  new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
487
- sprae(el, state);
479
+ core_default(el, state);
488
480
  }
489
481
  } catch {
490
482
  }
@@ -515,7 +507,7 @@ var init_with = __esm({
515
507
  "directive/with.js"() {
516
508
  init_core();
517
509
  init_store();
518
- dir("with", (el, rootState, state) => (state = null, (values) => sprae(el, state ? values : state = store_default(values, rootState))));
510
+ dir("with", (el, rootState, state) => (state = null, (values) => core_default(el, state ? values : state = store_default(values, rootState))));
519
511
  }
520
512
  });
521
513
 
@@ -618,8 +610,8 @@ var init_sprae = __esm({
618
610
  init_default();
619
611
  init_aria();
620
612
  init_data();
621
- sprae.use({ compile: (expr) => sprae.constructor(`with (arguments[0]) { return ${expr} };`) });
622
- sprae_default = sprae;
613
+ core_default.use({ compile: (expr) => core_default.constructor(`with (arguments[0]) { return ${expr} };`) });
614
+ sprae_default = core_default;
623
615
  }
624
616
  });
625
617
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../signal.js", "../store.js", "../core.js", "../directive/if.js", "../directive/each.js", "../directive/default.js", "../directive/value.js", "../directive/ref.js", "../directive/with.js", "../directive/text.js", "../directive/class.js", "../directive/style.js", "../directive/fx.js", "../directive/aria.js", "../directive/data.js", "../sprae.js", "../sprae.umd.cjs"],
4
- "sourcesContent": ["// ulive copy, stable minimal implementation\nlet current;\n\nexport let signal = (v, s, obs = new Set) => (\n s = {\n get value() {\n current?.deps.push(obs.add(current));\n return v\n },\n set value(val) {\n if (val === v) return\n v = val;\n for (let sub of obs) sub(); // notify effects\n },\n peek() { return v },\n },\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\n s\n),\n effect = (fn, teardown, fx, deps) => (\n fx = (prev) => {\n teardown?.call?.();\n prev = current, current = fx;\n try { teardown = fn(); } finally { current = prev; }\n },\n deps = fx.deps = [],\n\n fx(),\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\n ),\n computed = (fn, s = signal(), c, e) => (\n c = {\n get value() {\n e ||= effect(() => s.value = fn());\n return s.value\n },\n peek: s.peek\n },\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\n c\n ),\n batch = fn => fn(),\n untracked = batch,\n\n // signals adapter - allows switching signals implementation and not depend on core\n use = (s) => (\n signal = s.signal,\n effect = s.effect,\n computed = s.computed,\n batch = s.batch || batch,\n untracked = s.untracked || untracked\n )\n", "// signals-based proxy\nimport { signal, computed, batch } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('change'),\n\n // object store is not lazy\n 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 or custom objects\n if (values.constructor !== Object || values[Symbol.toStringTag]) 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 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] && (signals[key][Symbol.dispose]?.(), delete signals[key], _len.value--), 1),\n // subscribe to length when object is spread\n ownKeys: () => (_len.value, Reflect.ownKeys(signals)),\n }),\n\n // init signals for values\n descs = Object.getOwnPropertyDescriptors(values), desc\n\n for (let key in values) {\n // getter turns into computed\n if ((desc = descs[key])?.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] = null, set(signals, key, values[key]);\n }\n\n return state\n },\n\n // array store - signals are lazy since arrays can be very large & expensive\n list = values => {\n // track last accessed property to find out if .length was directly accessed from expression or via .push/etc method\n let lastProp\n\n // 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 // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut.includes(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 // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v; i < signals.length; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n 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 = +key + 1\n\n return true\n },\n\n deleteProperty: (_, key) => (signals[key]?.[Symbol.dispose]?.(), delete signals[key], 1),\n })\n\n return state\n }\n\n// length changing methods\nconst mut = ['push', 'pop', 'shift', 'unshift', 'splice']\n\n// set/update signal value\nconst set = (signals, key, v) => {\n let s = signals[key]\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property. preserve signal value as is\n else if (!s) signals[key] = s = v?.peek ? v : signal(store(v))\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === 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]) batch(() => {\n for (let i = 0; i < v.length; i++) cur[i] = v[i]\n cur.length = v.length // forces deleting tail signals\n })\n else s.value = v\n }\n // .x = y\n else s.value = store(v)\n}\n\nexport default store\n", "import { use, effect } from \"./signal.js\";\nimport { store, _signals } from './store.js';\n\n// polyfill\nconst _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\nexport const _state = Symbol(\"state\"), _on = Symbol('on'), _off = Symbol('off')\n\n// registered directives\nconst directive = {}\n\n/**\n * Register a directive with a parsed expression and evaluator.\n * @param {string} name - The name of the directive.\n * @param {(el: Element, state: Object, attrValue: string, attrName: string) => (value: any) => void} create - A function to create the directive.\n * @param {(expr: string) => (state: Object) => any} [p=parse] - Create evaluator from expression string.\n */\nexport const dir = (name, create, p = parse) => directive[name] = (el, expr, state, name, update, evaluate) => (\n evaluate = p(expr),\n update = create(el, state, expr, name, evaluate),\n () => update(evaluate(state))\n)\n\n/**\n * Applies directives to an HTML element and manages its reactive state.\n *\n * @param {Element} el - The target HTML element to apply directives to.\n * @param {Object} [values] - Initial values to populate the element's reactive state.\n * @returns {Object} The reactive state object associated with the element.\n */\nexport default function sprae(el, values) {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (el[_state]) return Object.assign(el[_state], values)\n\n // take over existing state instead of creating a clone\n const state = store(values || {}), offs = [], fx = []\n\n const init = (el, attrs=el.attributes) => {\n // we iterate live collection (subsprae can init args)\n if (attrs) for (let i = 0; i < attrs.length;) {\n let {name, value} = attrs[i], pfx, update, dir\n\n // if we have parts meaning there's attr needs to be spraed\n // :id:name -> [,id,name]; s-text:id -> [,text,id]; ab-cd -> [ab-cd]\n if (pfx = name[0] === ':' ? 1 : (name[0]==='s' && name[1]==='-') ? 2 : 0) {\n el.removeAttribute(name);\n\n // multiple attributes like :id:for=\"\"\n for (dir of name.slice(pfx).split(':')) {\n update = (directive[dir] || directive.default)(el, value, state, dir)\n\n // save & start effect\n fx.push(update), offs.push(effect(update))\n\n // stop after :each, :if, :with etc.\n if (el[_state]===null) return\n }\n } else i++\n }\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n for (let child of el.childNodes) child.nodeType==1 && init(child)\n };\n\n init(el);\n\n // if element was spraed by inline :with instruction (meaning it has extended state) - skip, otherwise save _state\n if (!(_state in el)) {\n el[_state] = state\n\n // on/off all effects\n el[_off] = () => { while (offs.length) offs.pop()() }\n el[_on] = () => offs.push(...fx.map(f => effect(f)))\n\n // destroy\n el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null)\n }\n\n return state;\n}\n\n/**\n * Parses an expression into an evaluator function, caching the result for reuse.\n *\n * @param {string} expr - The expression to parse and compile into a function.\n * @param {string} dir - The directive associated with the expression (used for error reporting).\n * @returns {Function} The compiled evaluator function for the expression.\n */\nexport const parse = (expr, dir, fn) => {\n if (fn = memo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n return memo[expr] = fn\n}\nconst memo = {};\n\n/**\n * Branded sprae error with context about the directive and expression\n *\n * @param {Error} e - The original error object to enhance.\n * @param {string} dir - The directive where the error occurred.\n * @param {string} [expr=''] - The expression associated with the error, if any.\n * @throws {Error} The enhanced error object with a formatted message.\n */\nexport const err = (e, dir='', expr='') => {\n throw Object.assign(e, { message: `\u2234 ${e.message}\\n\\n${dir}${expr ? `=\"${expr}\"\\n\\n` : \"\"}`, expr })\n}\n\n/**\n * Compiles an expression into an evaluator function.\n *\n * @type {(expr: string) => Function}\n */\nexport let compile\n\n// 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 // get parentNode() { return childNodes[0].parentNode },\n childNodes,\n content,\n remove: () => content.append(...childNodes),\n replaceWith(el) {\n if (el === ref) return\n ref.before(el)\n content.append(...childNodes)\n },\n attributes,\n removeAttribute(name) { attributes.splice(attributes.findIndex(a => a.name === name), 1) },\n // setAttributeNode() { }\n }\n}\n", "import sprae, { dir, _state, _on, _off, frag } from \"../core.js\";\n\n// :if is interchangeable with :each depending on order, :if :each or :each :if have different meanings\n// as for :if :with - :if must init first, since it is lazy, to avoid initializing component ahead of time by :with\n// we consider :with={x} :if={x} case insignificant\nconst _prevIf = Symbol(\"if\");\n\ndir('if', (el, state) => {\n const holder = document.createTextNode('')\n\n let next = el.nextElementSibling,\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n ifEl[_state] = null // mark el as fake-spraed to holdon init, since we sprae rest when branch matches\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, elseEl[_state] = null\n }\n\n return (value) => {\n const newEl = value ? ifEl : el[_prevIf] ? null : elseEl;\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n // disable effects on child elements when element is not matched\n if (curEl) curEl.remove(), curEl[_off]?.();\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n // remove fake memo to sprae as new\n curEl[_state] === null ? (delete curEl[_state], sprae(curEl, state))\n // enable effects if branch is matched\n : curEl[_on]()\n }\n }\n };\n})\n", "import sprae, { _state, dir, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect } from '../signal.js';\n\n\ndir('each', (tpl, state, expr) => {\n const [itemVar, idxVar = \"$\"] = expr.split(/\\s+in\\s+/)[0].split(/\\s*,\\s*/);\n\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 tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n const update = () => {\n let i = 0, newItems = items, newl = newItems.length\n\n // plain array update, not store (signal with array) - updates full list\n if (cur && !cur[_change]) {\n for (let s of cur[_signals] || []) s[Symbol.dispose]()\n cur = null, prevl = 0\n }\n\n // delete\n if (newl < prevl) cur.length = newl\n\n // update, append, init\n else {\n // init\n if (!cur) cur = newItems\n // update\n else while (i < prevl) cur[i] = newItems[i++]\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n 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 return value => {\n keys = null\n if (typeof value === \"number\") items = Array.from({ length: value }, (_, i) => i + 1)\n else if (value?.constructor === Object) keys = Object.keys(value), items = Object.values(value)\n else items = value || []\n\n // whenever list changes, we rebind internal change effect\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned++) update(), queueMicrotask(() => (planned > 1 && update(), planned = 0));\n })\n }\n },\n\n // redefine evaluator to take second part of expression\n expr => parse(expr.split(/\\s+in\\s+/)[1])\n)\n", "// generic property directive\nimport { dir, err } from \"../core.js\";\n\ndir('default', (target, state, expr, name) => {\n // simple prop\n if (!name.startsWith('on'))\n return name ?\n value => attr(target, name, value) :\n value => { for (let key in value) attr(target, dashcase(key), value[key]) };\n\n // bind event to a target\n // NOTE: if you decide to remove chain of events, thing again - that's unique feature of sprae, don't diminish your own value.\n // ona..onb\n 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 (_, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // add listener with the context\n const 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?.call(state, e))\n } catch (error) { err(error, `:on${evt}`, fn) }\n };\n\n target.addEventListener(evt, cb, opts)\n return () => target.removeEventListener(evt, cb, opts)\n };\n\n // single event\n if (ctxs.length == 1) return v => addListener(v, ctxs[0])\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n 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 value => (\n startFn = value,\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n )\n})\n\n// event modifiers\nconst mods = {\n // actions\n prevent(ctx) { ctx.prevent = true; },\n stop(ctx) { ctx.stop = true; },\n immediate(ctx) { ctx.immediate = true; },\n\n // options\n once(ctx) { ctx.once = true; },\n passive(ctx) { ctx.passive = true; },\n capture(ctx) { ctx.capture = true; },\n\n // target\n window(ctx) { ctx.target = window; },\n document(ctx) { ctx.target = document; },\n parent(ctx) { ctx.target = ctx.target.parentNode; },\n\n throttle(ctx, limit) { 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// create delayed fns\nconst throttle = (fn, limit) => {\n let pause, planned,\n block = (e) => {\n pause = true;\n setTimeout(() => {\n pause = false;\n // if event happened during blocked time, it schedules call by the end\n if (planned) return (planned = false), block(e), fn(e);\n }, limit);\n };\n return (e) => {\n if (pause) return (planned = true);\n block(e);\n return fn(e);\n };\n};\n\nconst debounce = (fn, wait) => {\n let timeout;\n return (e) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n timeout = null;\n fn(e);\n }, wait);\n };\n};\n\n// set attr\nexport const attr = (el, name, v) => {\n if (v == null || v === false) el.removeAttribute(name);\n else el.setAttribute(name, v === true ? \"\" : typeof v === \"number\" || typeof v === \"string\" ? v : \"\");\n}\n\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n}\n", "import sprae from \"../core.js\";\nimport { dir, parse } from \"../core.js\";\nimport { attr } from './default.js';\n\n\ndir('value', (el, state, expr) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ?\n (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)) :\n (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ?\n (value, from, to) => (\n // we retain selection in input\n (from = el.selectionStart),\n (to = el.selectionEnd),\n el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)),\n from && el.setSelectionRange(from, to)\n ) :\n (el.type === \"checkbox\") ?\n (value) => (el.checked = value, attr(el, \"checked\", value)) :\n (el.type === \"select-one\") ?\n (value) => {\n for (let o of el.options)\n o.value == value ? o.setAttribute(\"selected\", '') : o.removeAttribute(\"selected\");\n el.value = value;\n } :\n (el.type === 'select-multiple') ? (value) => {\n for (let o of el.options) o.removeAttribute('selected')\n for (let v of value) el.querySelector(`[value=\"${v}\"]`).setAttribute('selected', '')\n } :\n (value) => (el.value = value);\n\n // make sure value exists in state\n ensure(state, expr)\n\n // bind back to value, but some values can be not bindable, eg. `:value=\"7\"`\n try {\n const set = setter(expr)\n const handleChange = el.type === 'checkbox' ? () => set(state, el.checked) :\n el.type === 'select-multiple' ? () => set(state, [...el.selectedOptions].map(o => o.value)) :\n () => set(state, el.selectedIndex < 0 ? null : el.value)\n\n el.oninput = el.onchange = handleChange; // hope user doesn't redefine these manually via `.oninput = somethingElse` - it saves 5 loc vs addEventListener\n\n if (el.type?.startsWith('select')) {\n // select element also must observe any added/removed options or changed values (outside of sprae)\n new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });\n\n // select options must be initialized before calling an update\n sprae(el, state)\n }\n } catch {}\n\n return update\n})\n\n// create expression setter, reflecting value back to state\nexport const setter = (expr, set = parse(`${expr}=__`)) => (\n // FIXME: if there's a simpler way to set value in justin?\n (state, value) => (\n state.__ = value,\n set(state, value),\n delete state.__\n )\n)\n\n// make sure state contains first element of path, eg. `a` from `a.b[c]`\nexport const ensure = (state, expr, name = expr.match(/^\\w+(?=\\s*(?:\\.|\\[|$))/)) => name && (state[name[0]] ??= null)\n", "import { dir, parse } from \"../core.js\";\nimport { setter, ensure } from \"./value.js\";\n\ndir('ref', (el, state, expr, _, ev) => (\n ensure(state, expr),\n ev(state) == null ?\n (setter(expr)(state, el), _ => _) :\n v => v.call(null, el)\n))\n", "import sprae, { dir } from \"../core.js\";\nimport store, { _signals } from '../store.js';\n\ndir('with', (el, rootState, state) => (state=null, values => sprae(el, state ? values : state = store(values, rootState))))\n", "import { dir, frag } from \"../core.js\";\n\ndir('text', el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n value => el.textContent = value == null ? \"\" : value\n))\n", "import { dir } from \"../core.js\";\n\ndir('class', (el, cur) => (\n cur = new Set,\n v => {\n let clsx = new Set;\n if (v) {\n if (typeof v === \"string\") v.split(' ').map(cls => clsx.add(cls));\n else if (Array.isArray(v)) v.map(v => v && clsx.add(v));\n else Object.entries(v).map(([k, v]) => v && clsx.add(k));\n }\n for (let cls of cur) if (clsx.has(cls)) clsx.delete(cls); else el.classList.remove(cls);\n for (let cls of cur = clsx) el.classList.add(cls)\n })\n)\n", "import { dir } from \"../core.js\";\n\ndir('style', (el, initStyle) => (\n initStyle = el.getAttribute(\"style\"),\n v => {\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + (initStyle.endsWith(';') ? '' : '; ') + v);\n else {\n if (initStyle) el.setAttribute(\"style\", initStyle);\n for (let k in v) k[0] == '-' ? (el.style.setProperty(k, v[k])) : el.style[k] = v[k]\n }\n })\n)\n", "import { dir } from \"../core.js\";\n\ndir('fx', _ => _ => _)\n", "import { dir } from \"../core.js\";\nimport { attr, dashcase } from './default.js'\n\ndir('aria', (el) => value => {\n for (let key in value) attr(el, 'aria-' + dashcase(key), value[key] == null ? null : value[key] + '')\n})\n", "import { dir } from \"../core.js\";\n\ndir('data', el => value => {for (let key in value) el.dataset[key] = value[key];})\n", "import sprae from './core.js'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/text.js'\nimport './directive/class.js'\nimport './directive/style.js'\nimport './directive/value.js'\nimport './directive/fx.js'\nimport './directive/default.js'\nimport './directive/aria.js'\nimport './directive/data.js'\n\n// default compiler (indirect new Function to avoid detector)\nsprae.use({ compile: expr => sprae.constructor(`with (arguments[0]) { return ${expr} };`) })\n\nexport default sprae\n", "// autonomous standalone sprae version - expected to run via CDN, CJS or AMD\n\nconst { default: sprae } = require(\"./sprae.js\");\n\n// expose global\nmodule.exports = sprae\n\n// autoinit if wanted\nif (document.currentScript?.hasAttribute('init')) {\n const props = JSON.parse(document.currentScript?.getAttribute('init') || '{}')\n const init = () => { sprae(document.documentElement, props) };\n\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n else init();\n}\n"],
5
- "mappings": "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",
6
- "names": ["el", "dir", "name", "keys", "target", "set", "_", "v", "_", "sprae"]
4
+ "sourcesContent": ["// ulive copy, stable minimal implementation\nlet current;\n\nexport let signal = (v, s, obs = new Set) => (\n s = {\n get value() {\n current?.deps.push(obs.add(current));\n return v\n },\n set value(val) {\n if (val === v) return\n v = val;\n for (let sub of obs) sub(); // notify effects\n },\n peek() { return v },\n },\n s.toJSON = s.then = s.toString = s.valueOf = () => s.value,\n s\n),\n effect = (fn, teardown, fx, deps) => (\n fx = (prev) => {\n teardown?.call?.();\n prev = current, current = fx;\n try { teardown = fn(); } finally { current = prev; }\n },\n deps = fx.deps = [],\n\n fx(),\n (dep) => { teardown?.call?.(); while (dep = deps.pop()) dep.delete(fx); }\n ),\n computed = (fn, s = signal(), c, e) => (\n c = {\n get value() {\n e ||= effect(() => s.value = fn());\n return s.value\n },\n peek: s.peek\n },\n c.toJSON = c.then = c.toString = c.valueOf = () => c.value,\n c\n ),\n batch = fn => fn(),\n untracked = batch,\n\n // signals adapter - allows switching signals implementation and not depend on core\n use = (s) => (\n signal = s.signal,\n effect = s.effect,\n computed = s.computed,\n batch = s.batch || batch,\n untracked = s.untracked || untracked\n )\n", "// signals-based proxy\nimport { signal, computed, batch } from './signal.js'\n\nexport const _signals = Symbol('signals'), _change = Symbol('change'),\n\n // object store is not lazy\n store = (values, parent) => {\n if (!values) return values\n\n // ignore existing state as argument or globals\n if (values[_signals] || values[Symbol.toStringTag]) return values;\n\n // non-objects: for array redirect to list\n if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values\n\n // 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 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] && (signals[key][Symbol.dispose]?.(), delete signals[key], _len.value--), 1),\n // subscribe to length when object is spread\n ownKeys: () => (_len.value, Reflect.ownKeys(signals)),\n }),\n\n // init signals for values\n descs = Object.getOwnPropertyDescriptors(values),\n desc\n\n for (let key in values) {\n // getter turns into computed\n if ((desc = descs[key])?.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] = null, set(signals, key, values[key]);\n }\n\n return state\n },\n\n // array store - signals are lazy since arrays can be very large & expensive\n list = values => {\n // track last accessed property to find out if .length was directly accessed from expression or via .push/etc method\n let lastProp,\n\n // .length signal is stored separately, since it cannot be replaced on array\n _len = signal(values.length),\n\n // gotta fill with null since proto methods like .reduce may fail\n signals = Array(values.length).fill(),\n\n // proxy conducts prop access to signals\n state = new Proxy(signals, {\n get(_, key) {\n // covers Symbol.isConcatSpreadable etc.\n if (typeof key === 'symbol') return key === _change ? _len : key === _signals ? signals : signals[key]\n\n // if .length is read within .push/etc - peek signal to avoid recursive subscription\n if (key === 'length') return mut.includes(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 // .length\n if (key === 'length') {\n // force cleaning up tail\n for (let i = v; i < signals.length; i++) delete state[i]\n // .length = N directly\n _len.value = signals.length = v;\n }\n else {\n set(signals, 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 = +key + 1\n }\n\n return 1\n },\n\n deleteProperty: (_, key) => (signals[key]?.[Symbol.dispose]?.(), delete signals[key], 1),\n })\n\n return state\n }\n\n// length changing methods\nconst mut = ['push', 'pop', 'shift', 'unshift', 'splice']\n\n// set/update signal value\nconst set = (signals, key, v) => {\n let s = signals[key], cur\n\n // untracked\n if (key[0] === '_') signals[key] = v\n // new property. preserve signal value as is\n else if (!s) signals[key] = s = v?.peek ? v : signal(store(v))\n // skip unchanged (although can be handled by last condition - we skip a few checks this way)\n else if (v === (cur = s.peek()));\n // stashed _set for value with getter/setter\n else if (s._set) s._set(v)\n // patch array\n else if (Array.isArray(v) && Array.isArray(cur)) {\n // if we update plain array (stored in signal) - take over value instead\n if (cur[_change]) batch(() => {\n for (let i = 0; i < v.length; i++) cur[i] = v[i]\n cur.length = v.length // forces deleting tail signals\n })\n else s.value = v\n }\n // .x = y\n else s.value = store(v)\n}\n\nexport default store\n", "import { use, effect } from \"./signal.js\";\nimport { store, _signals } from './store.js';\n\n// polyfill\nexport const _dispose = (Symbol.dispose ||= Symbol(\"dispose\"));\n\nexport const _state = Symbol(\"state\"), _on = Symbol('on'), _off = Symbol('off')\n\n// registered directives\nexport const directive = {}\n\n/**\n * Register a directive with a parsed expression and evaluator.\n * @param {string} name - The name of the directive.\n * @param {(el: Element, state: Object, attrValue: string, attrName: string) => (value: any) => void} create - A function to create the directive.\n * @param {(expr: string) => (state: Object) => any} [p=parse] - Create evaluator from expression string.\n */\nexport const dir = (name, create, p = parse) => directive[name] = (el, expr, state, name, update, evaluate) => (\n evaluate = p(expr),\n update = create(el, state, expr, name, evaluate),\n () => update(evaluate(state))\n)\n\n/**\n * Applies directives to an HTML element and manages its reactive state.\n *\n * @param {Element} el - The target HTML element to apply directives to.\n * @param {Object} [values] - Initial values to populate the element's reactive state.\n * @returns {Object} The reactive state object associated with the element.\n */\nexport const sprae = (el, values) => {\n // repeated call can be caused by eg. :each with new objects with old keys\n if (el[_state]) return Object.assign(el[_state], values)\n\n // take over existing state instead of creating a clone\n let state = store(values || {}), offs = [], fx = [],\n\n init = (el, attrs = el.attributes) => {\n // we iterate live collection (subsprae can init args)\n if (attrs) for (let i = 0; i < attrs.length;) {\n let { name, value } = attrs[i], pfx, update, dir\n\n // if we have parts meaning there's attr needs to be spraed\n // :id:name -> [,id,name]; s-text:id -> [,text,id]; ab-cd -> [ab-cd]\n if (pfx = name[0] === ':' ? 1 : (name[0] === 's' && name[1] === '-') ? 2 : 0) {\n el.removeAttribute(name);\n\n // multiple attributes like :id:for=\"\"\n for (dir of name.slice(pfx).split(':')) {\n update = (directive[dir] || directive.default)(el, value, state, dir)\n\n // save & start effect\n fx.push(update), offs.push(effect(update))\n\n // stop after :each, :if, :with etc.\n if (el[_state] === null) return\n }\n } else i++\n }\n\n // :if and :each replace element with text node, which tweaks .children length, but .childNodes length persists\n for (let child of el.childNodes) child.nodeType == 1 && init(child)\n };\n\n init(el);\n\n // if element was spraed by inline :with instruction (meaning it has extended state) - skip, otherwise save _state\n if (!(_state in el)) {\n el[_state] = state\n\n // on/off all effects\n el[_off] = () => (offs.map(off => off()), offs = [])\n el[_on] = () => offs = fx.map(f => effect(f))\n\n // destroy\n el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null)\n }\n\n return state;\n}\n\n// configure signals/compile\n// it's more compact than using sprae.signal = signal etc.\nsprae.use = s => {\n s.signal && use(s);\n s.compile && (compile = s.compile);\n}\n\n/**\n * Parses an expression into an evaluator function, caching the result for reuse.\n *\n * @param {string} expr - The expression to parse and compile into a function.\n * @param {string} dir - The directive associated with the expression (used for error reporting).\n * @returns {Function} The compiled evaluator function for the expression.\n */\nexport const parse = (expr, dir, fn) => {\n if (fn = memo[expr = expr.trim()]) return fn\n\n // static-time errors\n try { fn = compile(expr) }\n catch (e) { err(e, dir, expr) }\n\n return memo[expr] = fn\n}\nconst memo = {};\n\n/**\n * Branded sprae error with context about the directive and expression\n *\n * @param {Error} e - The original error object to enhance.\n * @param {string} dir - The directive where the error occurred.\n * @param {string} [expr=''] - The expression associated with the error, if any.\n * @throws {Error} The enhanced error object with a formatted message.\n */\nexport const err = (e, dir = '', expr = '') => {\n throw Object.assign(e, { message: `\u2234 ${e.message}\\n\\n${dir}${expr ? `=\"${expr}\"\\n\\n` : \"\"}`, expr })\n}\n\n/**\n * Compiles an expression into an evaluator function.\n *\n * @type {(expr: string) => Function}\n */\nexport let compile\n\n// 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 // get parentNode() { return childNodes[0].parentNode },\n childNodes,\n content,\n remove: () => content.append(...childNodes),\n replaceWith(el) {\n if (el === ref) return\n ref.before(el)\n content.append(...childNodes)\n },\n attributes,\n removeAttribute(name) { attributes.splice(attributes.findIndex(a => a.name === name), 1) },\n // setAttributeNode() { }\n }\n}\n\nexport default sprae\n", "import sprae, { dir, _state, _on, _off, frag } from \"../core.js\";\n\n// :if is interchangeable with :each depending on order, :if :each or :each :if have different meanings\n// as for :if :with - :if must init first, since it is lazy, to avoid initializing component ahead of time by :with\n// we consider :with={x} :if={x} case insignificant\nconst _prevIf = Symbol(\"if\");\n\ndir('if', (el, state) => {\n let holder = document.createTextNode('')\n\n let next = el.nextElementSibling,\n curEl, ifEl, elseEl;\n\n el.replaceWith(holder)\n\n ifEl = el.content ? frag(el) : el\n ifEl[_state] = null // mark el as fake-spraed to holdon init, since we sprae rest when branch matches\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, elseEl[_state] = null\n }\n\n return (value, newEl = value ? ifEl : el[_prevIf] ? null : elseEl) => {\n if (next) next[_prevIf] = newEl === ifEl\n if (curEl != newEl) {\n // disable effects on child elements when element is not matched\n if (curEl) curEl.remove(), curEl[_off]?.();\n if (curEl = newEl) {\n holder.before(curEl.content || curEl)\n // remove fake memo to sprae as new\n curEl[_state] === null ? (delete curEl[_state], sprae(curEl, state))\n // enable effects if branch is matched\n : curEl[_on]()\n }\n }\n };\n})\n", "import sprae, { _state, dir, frag, parse } from \"../core.js\";\nimport store, { _change, _signals } from \"../store.js\";\nimport { effect } from '../signal.js';\n\n\ndir('each', (tpl, state, expr) => {\n let [itemVar, idxVar = \"$\"] = expr.split(/\\bin\\b/)[0].trim().split(/\\s*,\\s*/);\n\n // we need :if to be able to replace holder instead of tpl for :if :each case\n let holder = document.createTextNode(\"\");\n\n // we re-create items any time new items are produced\n let cur, keys, items, prevl = 0\n\n let update = () => {\n let i = 0, newItems = items, newl = newItems.length\n\n // plain array update, not store (signal with array) - updates full list\n if (cur && !cur[_change]) {\n for (let s of cur[_signals] || []) s[Symbol.dispose]()\n cur = null, prevl = 0\n }\n\n // delete\n if (newl < prevl) cur.length = newl\n\n // update, append, init\n else {\n // init\n if (!cur) cur = newItems\n // update\n else while (i < prevl) cur[i] = newItems[i++]\n\n // append\n for (; i < newl; i++) {\n cur[i] = newItems[i]\n let idx = i,\n 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 tpl.replaceWith(holder);\n tpl[_state] = null // mark as fake-spraed, to preserve :-attribs for template\n\n return value => {\n // obtain new items\n keys = null\n if (typeof value === \"number\") items = Array.from({ length: value }, (_, i) => i + 1)\n else if (value?.constructor === Object) keys = Object.keys(value), items = Object.values(value)\n else items = value || []\n\n // whenever list changes, we rebind internal change effect\n let planned = 0\n return effect(() => {\n // subscribe to items change (.length) - we do it every time (not just in update) since preact unsubscribes unused signals\n items[_change]?.value\n\n // make first render immediately, debounce subsequent renders\n if (!planned++) update(), queueMicrotask(() => (planned > 1 && update(), planned = 0));\n })\n }\n },\n\n // redefine evaluator to take second part of expression\n expr => parse(expr.split(/\\bin\\b/)[1])\n)\n", "// generic property directive\nimport { dir, err } from \"../core.js\";\n\ndir('default', (target, state, expr, name) => {\n // simple prop\n if (!name.startsWith('on'))\n return name ?\n value => attr(target, name, value) :\n value => { for (let key in value) attr(target, dashcase(key), value[key]) };\n\n // bind event to a target\n // NOTE: if you decide to remove chain of events, thing again - that's unique feature of sprae, don't diminish your own value.\n // ona..onb\n let ctxs = name.split('..').map(e => {\n let ctx = { evt: '', target, test: () => true };\n ctx.evt = (e.startsWith('on') ? e.slice(2) : e).replace(/\\.(\\w+)?-?([-\\w]+)?/g,\n (_, mod, param = '') => (ctx.test = mods[mod]?.(ctx, ...param.split('-')) || ctx.test, '')\n );\n return ctx;\n });\n\n // add listener with the context\n let addListener = (fn, { evt, target, test, defer, stop, prevent, immediate, ...opts }, cb) => {\n if (defer) fn = defer(fn)\n\n cb = (e) => {\n try {\n test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e))\n } catch (error) { err(error, `:on${evt}`, fn) }\n };\n\n target.addEventListener(evt, cb, opts)\n return () => target.removeEventListener(evt, cb, opts)\n };\n\n // single event\n if (ctxs.length == 1) return v => addListener(v, ctxs[0])\n\n // events cycler\n let startFn, nextFn, off, idx = 0\n let nextListener = (fn) => {\n off = addListener((e) => (\n off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : (startFn && nextListener(startFn))\n ), ctxs[idx]);\n }\n\n return value => (\n startFn = value,\n !off && nextListener(startFn),\n () => startFn = null // nil startFn to autodispose chain\n )\n})\n\n// event modifiers\nconst mods = {\n // actions\n prevent(ctx) { ctx.prevent = true; },\n stop(ctx) { ctx.stop = true; },\n immediate(ctx) { ctx.immediate = true; },\n\n // options\n once(ctx) { ctx.once = true; },\n passive(ctx) { ctx.passive = true; },\n capture(ctx) { ctx.capture = true; },\n\n // target\n window(ctx) { ctx.target = window; },\n document(ctx) { ctx.target = document; },\n parent(ctx) { ctx.target = ctx.target.parentNode; },\n\n throttle(ctx, limit) { 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// create delayed fns\nconst throttle = (fn, limit) => {\n let pause, planned,\n block = (e) => {\n pause = true;\n setTimeout(() => {\n pause = false;\n // if event happened during blocked time, it schedules call by the end\n if (planned) return (planned = false), block(e), fn(e);\n }, limit);\n };\n return (e) => {\n if (pause) return (planned = true);\n block(e);\n return fn(e);\n };\n};\n\nconst debounce = (fn, wait) => {\n let timeout;\n return (e) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n timeout = null;\n fn(e);\n }, wait);\n };\n};\n\n// set attr\nexport const attr = (el, name, v) => {\n if (v == null || v === false) el.removeAttribute(name);\n else el.setAttribute(name, v === true ? \"\" : typeof v === \"number\" || typeof v === \"string\" ? v : \"\");\n}\n\nexport const dashcase = (str) => {\n return str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match, i) => (i ? '-' : '') + match.toLowerCase());\n}\n", "import sprae from \"../core.js\";\nimport { dir, parse } from \"../core.js\";\nimport { attr } from './default.js';\n\n\ndir('value', (el, state, expr) => {\n const update =\n (el.type === \"text\" || el.type === \"\") ?\n (value) => el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)) :\n (el.tagName === \"TEXTAREA\" || el.type === \"text\" || el.type === \"\") ?\n (value, from, to) => (\n // we retain selection in input\n (from = el.selectionStart),\n (to = el.selectionEnd),\n el.setAttribute(\"value\", (el.value = value == null ? \"\" : value)),\n from && el.setSelectionRange(from, to)\n ) :\n (el.type === \"checkbox\") ?\n (value) => (el.checked = value, attr(el, \"checked\", value)) :\n (el.type === \"select-one\") ?\n (value) => {\n for (let o of el.options)\n o.value == value ? o.setAttribute(\"selected\", '') : o.removeAttribute(\"selected\");\n el.value = value;\n } :\n (el.type === 'select-multiple') ? (value) => {\n for (let o of el.options) o.removeAttribute('selected')\n for (let v of value) el.querySelector(`[value=\"${v}\"]`).setAttribute('selected', '')\n } :\n (value) => (el.value = value);\n\n // make sure value exists in state\n ensure(state, expr)\n\n // bind back to value, but some values can be not bindable, eg. `:value=\"7\"`\n try {\n const set = setter(expr)\n const handleChange = el.type === 'checkbox' ? () => set(state, el.checked) :\n el.type === 'select-multiple' ? () => set(state, [...el.selectedOptions].map(o => o.value)) :\n () => set(state, el.selectedIndex < 0 ? null : el.value)\n\n el.oninput = el.onchange = handleChange; // hope user doesn't redefine these manually via `.oninput = somethingElse` - it saves 5 loc vs addEventListener\n\n if (el.type?.startsWith('select')) {\n // select element also must observe any added/removed options or changed values (outside of sprae)\n new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });\n\n // select options must be initialized before calling an update\n sprae(el, state)\n }\n } catch {}\n\n return update\n})\n\n// create expression setter, reflecting value back to state\nexport const setter = (expr, set = parse(`${expr}=__`)) => (\n // FIXME: if there's a simpler way to set value in justin?\n (state, value) => (\n state.__ = value,\n set(state, value),\n delete state.__\n )\n)\n\n// make sure state contains first element of path, eg. `a` from `a.b[c]`\nexport const ensure = (state, expr, name = expr.match(/^\\w+(?=\\s*(?:\\.|\\[|$))/)) => name && (state[name[0]] ??= null)\n", "import { dir, parse } from \"../core.js\";\nimport { setter, ensure } from \"./value.js\";\n\ndir('ref', (el, state, expr, _, ev) => (\n ensure(state, expr),\n ev(state) == null ?\n (setter(expr)(state, el), _ => _) :\n v => v.call(null, el)\n))\n", "import sprae, { dir } from \"../core.js\";\nimport store, { _signals } from '../store.js';\n\ndir('with', (el, rootState, state) => (state=null, values => sprae(el, state ? values : state = store(values, rootState))))\n", "import { dir, frag } from \"../core.js\";\n\ndir('text', el => (\n // <template :text=\"a\"/> or previously initialized template\n el.content && el.replaceWith(el = frag(el).childNodes[0]),\n value => el.textContent = value == null ? \"\" : value\n))\n", "import { dir } from \"../core.js\";\n\ndir('class', (el, cur) => (\n cur = new Set,\n v => {\n let clsx = new Set;\n if (v) {\n if (typeof v === \"string\") v.split(' ').map(cls => clsx.add(cls));\n else if (Array.isArray(v)) v.map(v => v && clsx.add(v));\n else Object.entries(v).map(([k, v]) => v && clsx.add(k));\n }\n for (let cls of cur) if (clsx.has(cls)) clsx.delete(cls); else el.classList.remove(cls);\n for (let cls of cur = clsx) el.classList.add(cls)\n })\n)\n", "import { dir } from \"../core.js\";\n\ndir('style', (el, initStyle) => (\n initStyle = el.getAttribute(\"style\"),\n v => {\n if (typeof v === \"string\") el.setAttribute(\"style\", initStyle + (initStyle.endsWith(';') ? '' : '; ') + v);\n else {\n if (initStyle) el.setAttribute(\"style\", initStyle);\n for (let k in v) k[0] == '-' ? (el.style.setProperty(k, v[k])) : el.style[k] = v[k]\n }\n })\n)\n", "import { dir } from \"../core.js\";\n\ndir('fx', _ => _ => _)\n", "import { dir } from \"../core.js\";\nimport { attr, dashcase } from './default.js'\n\ndir('aria', (el) => value => {\n for (let key in value) attr(el, 'aria-' + dashcase(key), value[key] == null ? null : value[key] + '')\n})\n", "import { dir } from \"../core.js\";\n\ndir('data', el => value => {for (let key in value) el.dataset[key] = value[key];})\n", "import sprae from './core.js'\n\n// default directives\nimport './directive/if.js'\nimport './directive/each.js'\nimport './directive/ref.js'\nimport './directive/with.js'\nimport './directive/text.js'\nimport './directive/class.js'\nimport './directive/style.js'\nimport './directive/value.js'\nimport './directive/fx.js'\nimport './directive/default.js'\nimport './directive/aria.js'\nimport './directive/data.js'\n\n// default compiler (indirect new Function to avoid detector)\nsprae.use({ compile: expr => sprae.constructor(`with (arguments[0]) { return ${expr} };`) })\n\nexport default sprae\n", "// autonomous standalone sprae version - expected to run via CDN, CJS or AMD\n\nconst { default: sprae } = require(\"./sprae.js\");\n\n// expose global\nmodule.exports = sprae\n\n// autoinit if wanted\nif (document.currentScript?.hasAttribute('init')) {\n const props = JSON.parse(document.currentScript?.getAttribute('init') || '{}')\n const init = () => { sprae(document.documentElement, props) };\n\n if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init);\n else init();\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["name", "el", "dir", "keys", "target", "set", "_", "v", "_", "sprae"]
7
7
  }
@@ -1,5 +1,5 @@
1
- (function(E,_){typeof exports=="object"&&typeof module=="object"?module.exports=_():typeof define=="function"&&define.amd?define("sprae",[],_):typeof exports=="object"?exports.sprae=_():E.sprae=_()})(typeof self<"u"?self:typeof globalThis<"u"?globalThis:void 0,()=>{var E={},_={exports:E},R=Object.defineProperty,be=Object.getOwnPropertyDescriptor,re=Object.getOwnPropertyNames,me=Object.prototype.hasOwnProperty,p=(e,r)=>function(){return e&&(r=(0,e[re(e)[0]])(e=0)),r},ge=(e,r)=>{for(var t in r)R(e,t,{get:r[t],enumerable:!0})},_e=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of re(r))!me.call(e,n)&&n!==t&&R(e,n,{get:()=>r[n],enumerable:!(i=be(r,n))||i.enumerable});return e},ve=e=>_e(R({},"__esModule",{value:!0}),e),T,S,k,q,$,F,ie,V=p({"signal.js"(){S=(e,r,t=new Set)=>(r={get value(){return T?.deps.push(t.add(T)),e},set value(i){if(i!==e){e=i;for(let n of t)n()}},peek(){return e}},r.toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),k=(e,r,t,i)=>(t=n=>{r?.call?.(),n=T,T=t;try{r=e()}finally{T=n}},i=t.deps=[],t(),n=>{for(r?.call?.();n=i.pop();)n.delete(t)}),q=(e,r=S(),t,i)=>(t={get value(){return i||(i=k(()=>r.value=e())),r.value},peek:r.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),$=e=>e(),F=$,ie=e=>(S=e.signal,k=e.effect,q=e.computed,$=e.batch||$,F=e.untracked||F)}}),j,P,N,ne,se,K,B,H=p({"store.js"(){V(),j=Symbol("signals"),P=Symbol("change"),N=(e,r)=>{if(!e||e[j])return e;if(Array.isArray(e))return ne(e);if(e.constructor!==Object||e[Symbol.toStringTag])return e;let t={...r?.[j]},i=S(Object.values(e).length),n=new Proxy(t,{get:(c,a)=>a===P?i:a===j?t:t[a]?.valueOf(),set:(c,a,y,g)=>(g=t[a],K(t,a,y),g??++i.value,1),deleteProperty:(c,a)=>(t[a]&&(t[a][Symbol.dispose]?.(),delete t[a],i.value--),1),ownKeys:()=>(i.value,Reflect.ownKeys(t))}),o=Object.getOwnPropertyDescriptors(e),s;for(let c in e)(s=o[c])?.get?(t[c]=q(s.get.bind(n)))._set=s.set?.bind(n):(t[c]=null,K(t,c,e[c]));return n},ne=e=>{let r;if(e[j])return e;let t=S(e.length),i=Array(e.length).fill();const n=new Proxy(i,{get(o,s){if(typeof s=="symbol")return s===P?t:s===j?i:i[s];if(s==="length")return se.includes(r)?t.peek():t.value;if(r=s,i[s])return i[s].valueOf();if(s<i.length)return(i[s]=S(N(e[s]))).value},set(o,s,c){if(s==="length"){for(let a=c;a<i.length;a++)delete n[a];return t.value=i.length=c,!0}return K(i,s,c),s>=t.peek()&&(t.value=i.length=+s+1),!0},deleteProperty:(o,s)=>(i[s]?.[Symbol.dispose]?.(),delete i[s],1)});return n},se=["push","pop","shift","unshift","splice"],K=(e,r,t)=>{let i=e[r];if(r[0]==="_")e[r]=t;else if(!i)e[r]=i=t?.peek?t:S(N(t));else if(t!==i.peek())if(i._set)i._set(t);else if(Array.isArray(t)&&Array.isArray(i.peek())){const n=i.peek();n[P]?$(()=>{for(let o=0;o<t.length;o++)n[o]=t[o];n.length=t.length}):i.value=t}else i.value=N(t)},B=N}});function O(e,r){if(e[m])return Object.assign(e[m],r);const t=N(r||{}),i=[],n=[],o=(s,c=s.attributes)=>{if(c)for(let a=0;a<c.length;){let{name:y,value:g}=c[a],l,u,d;if(l=y[0]===":"?1:y[0]==="s"&&y[1]==="-"?2:0){s.removeAttribute(y);for(d of y.slice(l).split(":"))if(u=(M[d]||M.default)(s,g,t,d),n.push(u),i.push(k(u)),s[m]===null)return}else a++}for(let a of s.childNodes)a.nodeType==1&&o(a)};return o(e),m in e||(e[m]=t,e[L]=()=>{for(;i.length;)i.pop()()},e[I]=()=>i.push(...n.map(s=>k(s))),e[X]=()=>(e[L](),e[L]=e[I]=e[X]=e[m]=null)),t}var X,m,I,L,M,b,J,Z,z,oe,W,h=p({"core.js"(){V(),H(),X=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),m=Symbol("state"),I=Symbol("on"),L=Symbol("off"),M={},b=(e,r,t=J)=>M[e]=(i,n,o,s,c,a)=>(a=t(n),c=r(i,o,n,s,a),()=>c(a(o))),J=(e,r,t)=>{if(t=Z[e=e.trim()])return t;try{t=oe(e)}catch(i){z(i,r,e)}return Z[e]=t},Z={},z=(e,r="",t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
1
+ (function(T,_){typeof exports=="object"&&typeof module=="object"?module.exports=_():typeof define=="function"&&define.amd?define("sprae",[],_):typeof exports=="object"?exports.sprae=_():T.sprae=_()})(typeof self<"u"?self:typeof globalThis<"u"?globalThis:void 0,()=>{var T={},_={exports:T},R=Object.defineProperty,me=Object.getOwnPropertyDescriptor,ne=Object.getOwnPropertyNames,ge=Object.prototype.hasOwnProperty,p=(e,r)=>function(){return e&&(r=(0,e[ne(e)[0]])(e=0)),r},_e=(e,r)=>{for(var t in r)R(e,t,{get:r[t],enumerable:!0})},ve=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of ne(r))!ge.call(e,n)&&n!==t&&R(e,n,{get:()=>r[n],enumerable:!(i=me(r,n))||i.enumerable});return e},je=e=>ve(R({},"__esModule",{value:!0}),e),$,S,k,q,E,F,se,V=p({"signal.js"(){S=(e,r,t=new Set)=>(r={get value(){return $?.deps.push(t.add($)),e},set value(i){if(i!==e){e=i;for(let n of t)n()}},peek(){return e}},r.toJSON=r.then=r.toString=r.valueOf=()=>r.value,r),k=(e,r,t,i)=>(t=n=>{r?.call?.(),n=$,$=t;try{r=e()}finally{$=n}},i=t.deps=[],t(),n=>{for(r?.call?.();n=i.pop();)n.delete(t)}),q=(e,r=S(),t,i)=>(t={get value(){return i||(i=k(()=>r.value=e())),r.value},peek:r.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),E=e=>e(),F=E,se=e=>(S=e.signal,k=e.effect,q=e.computed,E=e.batch||E,F=e.untracked||F)}}),O,P,N,oe,ae,K,B,H=p({"store.js"(){V(),O=Symbol("signals"),P=Symbol("change"),N=(e,r)=>{if(!e||e[O]||e[Symbol.toStringTag])return e;if(e.constructor!==Object)return Array.isArray(e)?oe(e):e;let t={...r?.[O]},i=S(Object.values(e).length),n=new Proxy(t,{get:(u,a)=>a===P?i:a===O?t:t[a]?.valueOf(),set:(u,a,y,g)=>(g=t[a],K(t,a,y),g??++i.value,1),deleteProperty:(u,a)=>(t[a]&&(t[a][Symbol.dispose]?.(),delete t[a],i.value--),1),ownKeys:()=>(i.value,Reflect.ownKeys(t))}),o=Object.getOwnPropertyDescriptors(e),s;for(let u in e)(s=o[u])?.get?(t[u]=q(s.get.bind(n)))._set=s.set?.bind(n):(t[u]=null,K(t,u,e[u]));return n},oe=e=>{let r,t=S(e.length),i=Array(e.length).fill(),n=new Proxy(i,{get(o,s){if(typeof s=="symbol")return s===P?t:s===O?i:i[s];if(s==="length")return ae.includes(r)?t.peek():t.value;if(r=s,i[s])return i[s].valueOf();if(s<i.length)return(i[s]=S(N(e[s]))).value},set(o,s,u){if(s==="length"){for(let a=u;a<i.length;a++)delete n[a];t.value=i.length=u}else K(i,s,u),s>=t.peek()&&(t.value=i.length=+s+1);return 1},deleteProperty:(o,s)=>(i[s]?.[Symbol.dispose]?.(),delete i[s],1)});return n},ae=["push","pop","shift","unshift","splice"],K=(e,r,t)=>{let i=e[r],n;r[0]==="_"?e[r]=t:i?t===(n=i.peek())||(i._set?i._set(t):Array.isArray(t)&&Array.isArray(n)?n[P]?E(()=>{for(let o=0;o<t.length;o++)n[o]=t[o];n.length=t.length}):i.value=t:i.value=N(t)):e[r]=i=t?.peek?t:S(N(t))},B=N}}),X,m,I,L,M,h,Z,J,z,G,le,W,w,b=p({"core.js"(){V(),H(),X=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),m=Symbol("state"),I=Symbol("on"),L=Symbol("off"),M={},h=(e,r,t=J)=>M[e]=(i,n,o,s,u,a)=>(a=t(n),u=r(i,o,n,s,a),()=>u(a(o))),Z=(e,r)=>{if(e[m])return Object.assign(e[m],r);let t=N(r||{}),i=[],n=[],o=(s,u=s.attributes)=>{if(u)for(let a=0;a<u.length;){let{name:y,value:g}=u[a],l,c,d;if(l=y[0]===":"?1:y[0]==="s"&&y[1]==="-"?2:0){s.removeAttribute(y);for(d of y.slice(l).split(":"))if(c=(M[d]||M.default)(s,g,t,d),n.push(c),i.push(k(c)),s[m]===null)return}else a++}for(let a of s.childNodes)a.nodeType==1&&o(a)};return o(e),m in e||(e[m]=t,e[L]=()=>(i.map(s=>s()),i=[]),e[I]=()=>i=n.map(s=>k(s)),e[X]=()=>(e[L](),e[L]=e[I]=e[X]=e[m]=null)),t},Z.use=e=>{e.signal&&se(e),e.compile&&(le=e.compile)},J=(e,r,t)=>{if(t=z[e=e.trim()])return t;try{t=le(e)}catch(i){G(i,r,e)}return z[e]=t},z={},G=(e,r="",t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
2
2
 
3
3
  ${r}${t?`="${t}"
4
4
 
5
- `:""}`,expr:t})},O.use=e=>{e.signal&&ie(e),e.compile&&(oe=e.compile)},W=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],i=document.createTextNode(""),n=(r.append(i),[...r.childNodes]);return{childNodes:n,content:r,remove:()=>r.append(...n),replaceWith(o){o!==i&&(i.before(o),r.append(...n))},attributes:t,removeAttribute(o){t.splice(t.findIndex(s=>s.name===o),1)}}}}}),G,je=p({"directive/if.js"(){h(),G=Symbol("if"),b("if",(e,r)=>{const t=document.createTextNode("");let i=e.nextElementSibling,n,o,s;return e.replaceWith(t),o=e.content?W(e):e,o[m]=null,i?.hasAttribute(":else")&&(i.removeAttribute(":else"),i.hasAttribute(":if")||(i.remove(),s=i.content?W(i):i,s[m]=null)),c=>{const a=c?o:e[G]?null:s;i&&(i[G]=a===o),n!=a&&(n&&(n.remove(),n[L]?.()),(n=a)&&(t.before(n.content||n),n[m]===null?(delete n[m],O(n,r)):n[I]()))}})}}),we=p({"directive/each.js"(){h(),H(),V(),b("each",(e,r,t)=>{const[i,n="$"]=t.split(/\s+in\s+/)[0].split(/\s*,\s*/),o=document.createTextNode("");e.replaceWith(o),e[m]=null;let s,c,a,y=0;const g=()=>{var l,u;let d=0,v=a,w=v.length;if(s&&!s[P]){for(let A of s[j]||[])A[Symbol.dispose]();s=null,y=0}if(w<y)s.length=w;else{if(!s)s=v;else for(;d<y;)s[d]=v[d++];for(;d<w;d++){s[d]=v[d];let A=d,te=B({[i]:s[j]?.[A]||s[A],[n]:c?c[A]:A},r),x=e.content?W(e):e.cloneNode(!0);o.before(x.content||x),O(x,te),((u=s[l=j]||(s[l]=[]))[d]||(u[d]={}))[Symbol.dispose]=()=>{x[Symbol.dispose]?.(),x.remove()}}}y=w};return l=>{c=null,typeof l=="number"?a=Array.from({length:l},(d,v)=>v+1):l?.constructor===Object?(c=Object.keys(l),a=Object.values(l)):a=l||[];let u=0;return k(()=>{a[P]?.value,u++||(g(),queueMicrotask(()=>(u>1&&g(),u=0)))})}},e=>J(e.split(/\s+in\s+/)[1]))}}),ae,f,le,ce,C,Q,U=p({"directive/default.js"(){h(),b("default",(e,r,t,i)=>{if(!i.startsWith("on"))return i?l=>C(e,i,l):l=>{for(let u in l)C(e,Q(u),l[u])};const n=i.split("..").map(l=>{let u={evt:"",target:e,test:()=>!0};return u.evt=(l.startsWith("on")?l.slice(2):l).replace(/\.(\w+)?-?([-\w]+)?/g,(d,v,w="")=>(u.test=ae[v]?.(u,...w.split("-"))||u.test,"")),u}),o=(l,{evt:u,target:d,test:v,defer:w,stop:A,prevent:te,immediate:x,...ye})=>{w&&(l=w(l));const he=D=>{try{v(D)&&(A&&(x?D.stopImmediatePropagation():D.stopPropagation()),te&&D.preventDefault(),l?.call(r,D))}catch(Le){z(Le,`:on${u}`,l)}};return d.addEventListener(u,he,ye),()=>d.removeEventListener(u,he,ye)};if(n.length==1)return l=>o(l,n[0]);let s,c,a,y=0;const g=l=>{a=o(u=>(a(),c=l?.(u),(y=++y%n.length)?g(c):s&&g(s)),n[y])};return l=>(s=l,!a&&g(s),()=>s=null)}),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},parent(e){e.target=e.target.parentNode},throttle(e,r){e.defer=t=>le(t,r?Number(r)||0:108)},debounce(e,r){e.defer=t=>ce(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=>f.ctrl(t)&&r.every(i=>f[i]?f[i](t):t.key===i),shift:(e,...r)=>t=>f.shift(t)&&r.every(i=>f[i]?f[i](t):t.key===i),alt:(e,...r)=>t=>f.alt(t)&&r.every(i=>f[i]?f[i](t):t.key===i),meta:(e,...r)=>t=>f.meta(t)&&r.every(i=>f[i]?f[i](t):t.key===i),arrow:()=>f.arrow,enter:()=>f.enter,esc:()=>f.esc,tab:()=>f.tab,space:()=>f.space,delete:()=>f.delete,digit:()=>f.digit,letter:()=>f.letter,char:()=>f.char},f={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)},le=(e,r)=>{let t,i,n=o=>{t=!0,setTimeout(()=>{if(t=!1,i)return i=!1,n(o),e(o)},r)};return o=>t?i=!0:(n(o),e(o))},ce=(e,r)=>{let t;return i=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(i)},r)}},C=(e,r,t)=>{t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},Q=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(r,t)=>(t?"-":"")+r.toLowerCase())}}),Y,ee,ue=p({"directive/value.js"(){h(),h(),U(),b("value",(e,r,t)=>{const i=e.type==="text"||e.type===""?n=>e.setAttribute("value",e.value=n??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(n,o,s)=>(o=e.selectionStart,s=e.selectionEnd,e.setAttribute("value",e.value=n??""),o&&e.setSelectionRange(o,s)):e.type==="checkbox"?n=>(e.checked=n,C(e,"checked",n)):e.type==="select-one"?n=>{for(let o of e.options)o.value==n?o.setAttribute("selected",""):o.removeAttribute("selected");e.value=n}:e.type==="select-multiple"?n=>{for(let o of e.options)o.removeAttribute("selected");for(let o of n)e.querySelector(`[value="${o}"]`).setAttribute("selected","")}:n=>e.value=n;ee(r,t);try{const n=Y(t),o=e.type==="checkbox"?()=>n(r,e.checked):e.type==="select-multiple"?()=>n(r,[...e.selectedOptions].map(s=>s.value)):()=>n(r,e.selectedIndex<0?null:e.value);e.oninput=e.onchange=o,e.type?.startsWith("select")&&(new MutationObserver(o).observe(e,{childList:!0,subtree:!0,attributes:!0}),O(e,r))}catch{}return i}),Y=(e,r=J(`${e}=__`))=>(t,i)=>(t.__=i,r(t,i),delete t.__),ee=(e,r,t=r.match(/^\w+(?=\s*(?:\.|\[|$))/))=>{var i;return t&&(e[i=t[0]]??(e[i]=null))}}}),Oe=p({"directive/ref.js"(){h(),ue(),b("ref",(e,r,t,i,n)=>(ee(r,t),n(r)==null?(Y(t)(r,e),o=>o):o=>o.call(null,e)))}}),Ae=p({"directive/with.js"(){h(),H(),b("with",(e,r,t)=>(t=null,i=>O(e,t?i:t=B(i,r))))}}),Se=p({"directive/text.js"(){h(),b("text",e=>(e.content&&e.replaceWith(e=W(e).childNodes[0]),r=>e.textContent=r??""))}}),xe=p({"directive/class.js"(){h(),b("class",(e,r)=>(r=new Set,t=>{let i=new Set;t&&(typeof t=="string"?t.split(" ").map(n=>i.add(n)):Array.isArray(t)?t.map(n=>n&&i.add(n)):Object.entries(t).map(([n,o])=>o&&i.add(n)));for(let n of r)i.has(n)?i.delete(n):e.classList.remove(n);for(let n of r=i)e.classList.add(n)}))}}),ke=p({"directive/style.js"(){h(),b("style",(e,r)=>(r=e.getAttribute("style"),t=>{if(typeof t=="string")e.setAttribute("style",r+(r.endsWith(";")?"":"; ")+t);else{r&&e.setAttribute("style",r);for(let i in t)i[0]=="-"?e.style.setProperty(i,t[i]):e.style[i]=t[i]}}))}}),Pe=p({"directive/fx.js"(){h(),b("fx",e=>r=>r)}}),Ne=p({"directive/aria.js"(){h(),U(),b("aria",e=>r=>{for(let t in r)C(e,"aria-"+Q(t),r[t]==null?null:r[t]+"")})}}),Ee=p({"directive/data.js"(){h(),b("data",e=>r=>{for(let t in r)e.dataset[t]=r[t]})}}),fe={};ge(fe,{default:()=>de});var de,Te=p({"sprae.js"(){h(),je(),we(),Oe(),Ae(),Se(),xe(),ke(),ue(),Pe(),U(),Ne(),Ee(),O.use({compile:e=>O.constructor(`with (arguments[0]) { return ${e} };`)}),de=O}}),{default:pe}=(Te(),ve(fe));if(_.exports=pe,document.currentScript?.hasAttribute("init")){const e=JSON.parse(document.currentScript?.getAttribute("init")||"{}"),r=()=>{pe(document.documentElement,e)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r()}if(typeof _.exports=="object"&&typeof E=="object"){var $e=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Object.getOwnPropertyNames(r))!Object.prototype.hasOwnProperty.call(e,n)&&n!==t&&Object.defineProperty(e,n,{get:()=>r[n],enumerable:!(i=Object.getOwnPropertyDescriptor(r,n))||i.enumerable});return e};_.exports=$e(_.exports,E)}return _.exports});
5
+ `:""}`,expr:t})},W=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],i=document.createTextNode(""),n=(r.append(i),[...r.childNodes]);return{childNodes:n,content:r,remove:()=>r.append(...n),replaceWith(o){o!==i&&(i.before(o),r.append(...n))},attributes:t,removeAttribute(o){t.splice(t.findIndex(s=>s.name===o),1)}}},w=Z}}),Q,Oe=p({"directive/if.js"(){b(),Q=Symbol("if"),h("if",(e,r)=>{let t=document.createTextNode(""),i=e.nextElementSibling,n,o,s;return e.replaceWith(t),o=e.content?W(e):e,o[m]=null,i?.hasAttribute(":else")&&(i.removeAttribute(":else"),i.hasAttribute(":if")||(i.remove(),s=i.content?W(i):i,s[m]=null)),(u,a=u?o:e[Q]?null:s)=>{i&&(i[Q]=a===o),n!=a&&(n&&(n.remove(),n[L]?.()),(n=a)&&(t.before(n.content||n),n[m]===null?(delete n[m],w(n,r)):n[I]()))}})}}),we=p({"directive/each.js"(){b(),H(),V(),h("each",(e,r,t)=>{let[i,n="$"]=t.split(/\bin\b/)[0].trim().split(/\s*,\s*/),o=document.createTextNode(""),s,u,a,y=0,g=()=>{var l,c;let d=0,v=a,j=v.length;if(s&&!s[P]){for(let A of s[O]||[])A[Symbol.dispose]();s=null,y=0}if(j<y)s.length=j;else{if(!s)s=v;else for(;d<y;)s[d]=v[d++];for(;d<j;d++){s[d]=v[d];let A=d,re=B({[i]:s[O]?.[A]||s[A],[n]:u?u[A]:A},r),x=e.content?W(e):e.cloneNode(!0);o.before(x.content||x),w(x,re),((c=s[l=O]||(s[l]=[]))[d]||(c[d]={}))[Symbol.dispose]=()=>{x[Symbol.dispose]?.(),x.remove()}}}y=j};return e.replaceWith(o),e[m]=null,l=>{u=null,typeof l=="number"?a=Array.from({length:l},(d,v)=>v+1):l?.constructor===Object?(u=Object.keys(l),a=Object.values(l)):a=l||[];let c=0;return k(()=>{a[P]?.value,c++||(g(),queueMicrotask(()=>(c>1&&g(),c=0)))})}},e=>J(e.split(/\bin\b/)[1]))}}),ue,f,ce,fe,C,U,Y=p({"directive/default.js"(){b(),h("default",(e,r,t,i)=>{if(!i.startsWith("on"))return i?l=>C(e,i,l):l=>{for(let c in l)C(e,U(c),l[c])};let n=i.split("..").map(l=>{let c={evt:"",target:e,test:()=>!0};return c.evt=(l.startsWith("on")?l.slice(2):l).replace(/\.(\w+)?-?([-\w]+)?/g,(d,v,j="")=>(c.test=ue[v]?.(c,...j.split("-"))||c.test,"")),c}),o=(l,{evt:c,target:d,test:v,defer:j,stop:A,prevent:re,immediate:x,...he},ie)=>(j&&(l=j(l)),ie=D=>{try{v(D)&&(A&&(x?D.stopImmediatePropagation():D.stopPropagation()),re&&D.preventDefault(),l?.call(r,D))}catch(We){G(We,`:on${c}`,l)}},d.addEventListener(c,ie,he),()=>d.removeEventListener(c,ie,he));if(n.length==1)return l=>o(l,n[0]);let s,u,a,y=0,g=l=>{a=o(c=>(a(),u=l?.(c),(y=++y%n.length)?g(u):s&&g(s)),n[y])};return l=>(s=l,!a&&g(s),()=>s=null)}),ue={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},parent(e){e.target=e.target.parentNode},throttle(e,r){e.defer=t=>ce(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=>f.ctrl(t)&&r.every(i=>f[i]?f[i](t):t.key===i),shift:(e,...r)=>t=>f.shift(t)&&r.every(i=>f[i]?f[i](t):t.key===i),alt:(e,...r)=>t=>f.alt(t)&&r.every(i=>f[i]?f[i](t):t.key===i),meta:(e,...r)=>t=>f.meta(t)&&r.every(i=>f[i]?f[i](t):t.key===i),arrow:()=>f.arrow,enter:()=>f.enter,esc:()=>f.esc,tab:()=>f.tab,space:()=>f.space,delete:()=>f.delete,digit:()=>f.digit,letter:()=>f.letter,char:()=>f.char},f={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)},ce=(e,r)=>{let t,i,n=o=>{t=!0,setTimeout(()=>{if(t=!1,i)return i=!1,n(o),e(o)},r)};return o=>t?i=!0:(n(o),e(o))},fe=(e,r)=>{let t;return i=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(i)},r)}},C=(e,r,t)=>{t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},U=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(r,t)=>(t?"-":"")+r.toLowerCase())}}),ee,te,de=p({"directive/value.js"(){b(),b(),Y(),h("value",(e,r,t)=>{const i=e.type==="text"||e.type===""?n=>e.setAttribute("value",e.value=n??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(n,o,s)=>(o=e.selectionStart,s=e.selectionEnd,e.setAttribute("value",e.value=n??""),o&&e.setSelectionRange(o,s)):e.type==="checkbox"?n=>(e.checked=n,C(e,"checked",n)):e.type==="select-one"?n=>{for(let o of e.options)o.value==n?o.setAttribute("selected",""):o.removeAttribute("selected");e.value=n}:e.type==="select-multiple"?n=>{for(let o of e.options)o.removeAttribute("selected");for(let o of n)e.querySelector(`[value="${o}"]`).setAttribute("selected","")}:n=>e.value=n;te(r,t);try{const n=ee(t),o=e.type==="checkbox"?()=>n(r,e.checked):e.type==="select-multiple"?()=>n(r,[...e.selectedOptions].map(s=>s.value)):()=>n(r,e.selectedIndex<0?null:e.value);e.oninput=e.onchange=o,e.type?.startsWith("select")&&(new MutationObserver(o).observe(e,{childList:!0,subtree:!0,attributes:!0}),w(e,r))}catch{}return i}),ee=(e,r=J(`${e}=__`))=>(t,i)=>(t.__=i,r(t,i),delete t.__),te=(e,r,t=r.match(/^\w+(?=\s*(?:\.|\[|$))/))=>{var i;return t&&(e[i=t[0]]??(e[i]=null))}}}),Ae=p({"directive/ref.js"(){b(),de(),h("ref",(e,r,t,i,n)=>(te(r,t),n(r)==null?(ee(t)(r,e),o=>o):o=>o.call(null,e)))}}),Se=p({"directive/with.js"(){b(),H(),h("with",(e,r,t)=>(t=null,i=>w(e,t?i:t=B(i,r))))}}),xe=p({"directive/text.js"(){b(),h("text",e=>(e.content&&e.replaceWith(e=W(e).childNodes[0]),r=>e.textContent=r??""))}}),ke=p({"directive/class.js"(){b(),h("class",(e,r)=>(r=new Set,t=>{let i=new Set;t&&(typeof t=="string"?t.split(" ").map(n=>i.add(n)):Array.isArray(t)?t.map(n=>n&&i.add(n)):Object.entries(t).map(([n,o])=>o&&i.add(n)));for(let n of r)i.has(n)?i.delete(n):e.classList.remove(n);for(let n of r=i)e.classList.add(n)}))}}),Pe=p({"directive/style.js"(){b(),h("style",(e,r)=>(r=e.getAttribute("style"),t=>{if(typeof t=="string")e.setAttribute("style",r+(r.endsWith(";")?"":"; ")+t);else{r&&e.setAttribute("style",r);for(let i in t)i[0]=="-"?e.style.setProperty(i,t[i]):e.style[i]=t[i]}}))}}),Ne=p({"directive/fx.js"(){b(),h("fx",e=>r=>r)}}),Te=p({"directive/aria.js"(){b(),Y(),h("aria",e=>r=>{for(let t in r)C(e,"aria-"+U(t),r[t]==null?null:r[t]+"")})}}),$e=p({"directive/data.js"(){b(),h("data",e=>r=>{for(let t in r)e.dataset[t]=r[t]})}}),pe={};_e(pe,{default:()=>ye});var ye,Ee=p({"sprae.js"(){b(),Oe(),we(),Ae(),Se(),xe(),ke(),Pe(),de(),Ne(),Y(),Te(),$e(),w.use({compile:e=>w.constructor(`with (arguments[0]) { return ${e} };`)}),ye=w}}),{default:be}=(Ee(),je(pe));if(_.exports=be,document.currentScript?.hasAttribute("init")){const e=JSON.parse(document.currentScript?.getAttribute("init")||"{}"),r=()=>{be(document.documentElement,e)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",r):r()}if(typeof _.exports=="object"&&typeof T=="object"){var Le=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Object.getOwnPropertyNames(r))!Object.prototype.hasOwnProperty.call(e,n)&&n!==t&&Object.defineProperty(e,n,{get:()=>r[n],enumerable:!(i=Object.getOwnPropertyDescriptor(r,n))||i.enumerable});return e};_.exports=Le(_.exports,T)}return _.exports});