sprae 11.6.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,662 +0,0 @@
1
- (function (g, f) {if ("object" == typeof exports && "object" == typeof module) {module.exports = f();} else if ("function" == typeof define && define.amd) {define("sprae", [], f);} else if ("object" == typeof exports) {exports["sprae"] = f();} else {g["sprae"] = f();}}(typeof self !== 'undefined' ? self : typeof globalThis !== 'undefined' ? globalThis : this, () => {var exports = {};var module = { exports };
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __esm = (fn, res) => function __init() {
7
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
- };
9
- var __export = (target, all) => {
10
- for (var name in all)
11
- __defProp(target, name, { get: all[name], enumerable: true });
12
- };
13
- var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from))
16
- if (!__hasOwnProp.call(to, key) && key !== except)
17
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
- }
19
- return to;
20
- };
21
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
-
23
- // signal.js
24
- var current, signal, effect, computed, batch, untracked, use;
25
- var init_signal = __esm({
26
- "signal.js"() {
27
- signal = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
28
- get value() {
29
- current?.deps.push(obs.add(current));
30
- return v;
31
- },
32
- set value(val) {
33
- if (val === v) return;
34
- v = val;
35
- for (let sub of obs) sub();
36
- },
37
- peek() {
38
- return v;
39
- }
40
- }, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
41
- effect = (fn, teardown, fx, deps) => (fx = (prev) => {
42
- teardown?.call?.();
43
- prev = current, current = fx;
44
- try {
45
- teardown = fn();
46
- } finally {
47
- current = prev;
48
- }
49
- }, deps = fx.deps = [], fx(), (dep) => {
50
- teardown?.call?.();
51
- while (dep = deps.pop()) dep.delete(fx);
52
- });
53
- computed = (fn, s = signal(), c, e) => (c = {
54
- get value() {
55
- e || (e = effect(() => s.value = fn()));
56
- return s.value;
57
- },
58
- peek: s.peek
59
- }, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
60
- batch = (fn) => fn();
61
- untracked = batch;
62
- use = (s) => (signal = s.signal, effect = s.effect, computed = s.computed, batch = s.batch || batch, untracked = s.untracked || untracked);
63
- }
64
- });
65
-
66
- // store.js
67
- var store_exports = {};
68
- __export(store_exports, {
69
- _change: () => _change,
70
- _signals: () => _signals,
71
- _stash: () => _stash,
72
- default: () => store_default,
73
- list: () => list,
74
- setter: () => setter,
75
- store: () => store
76
- });
77
- var _signals, _change, _stash, store, list, mut, set, setter, store_default;
78
- var init_store = __esm({
79
- "store.js"() {
80
- init_signal();
81
- init_core();
82
- _signals = Symbol("signals");
83
- _change = Symbol("change");
84
- _stash = "__";
85
- store = (values, parent) => {
86
- if (!values) return values;
87
- if (values[_signals] || values[Symbol.toStringTag]) return values;
88
- if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
89
- let signals = Object.create(parent?.[_signals] || {}), _len = signal(Object.keys(values).length), stash;
90
- let state = new Proxy(signals, {
91
- get: (_, k) => k === _change ? _len : k === _signals ? signals : k === _stash ? stash : k in signals ? signals[k]?.valueOf() : globalThis[k],
92
- set: (_, k, v, s) => k === _stash ? (stash = v, 1) : (s = k in signals, set(signals, k, v), s || ++_len.value),
93
- // bump length for new signal
94
- deleteProperty: (_, k) => (signals[k] && (signals[k][Symbol.dispose]?.(), delete signals[k], _len.value--), 1),
95
- // subscribe to length when object is spread
96
- ownKeys: () => (_len.value, Reflect.ownKeys(signals)),
97
- has: (_) => true
98
- // sandbox prevents writing to global
99
- }), descs = Object.getOwnPropertyDescriptors(values);
100
- for (let k in values) {
101
- if (descs[k]?.get)
102
- (signals[k] = computed(descs[k].get.bind(state)))._set = descs[k].set?.bind(state);
103
- else
104
- signals[k] = null, set(signals, k, values[k]);
105
- }
106
- return state;
107
- };
108
- list = (values) => {
109
- let lastProp, _len = signal(values.length), signals = Array(values.length).fill(), state = new Proxy(signals, {
110
- get(_, k) {
111
- if (typeof k === "symbol") return k === _change ? _len : k === _signals ? signals : signals[k];
112
- if (k === "length") return mut.includes(lastProp) ? _len.peek() : _len.value;
113
- lastProp = k;
114
- return (signals[k] ?? (signals[k] = signal(store(values[k])))).valueOf();
115
- },
116
- set(_, k, v) {
117
- if (k === "length") {
118
- for (let i = v; i < signals.length; i++) delete state[i];
119
- _len.value = signals.length = v;
120
- } else {
121
- set(signals, k, v);
122
- if (k >= _len.peek()) _len.value = signals.length = +k + 1;
123
- }
124
- return 1;
125
- },
126
- deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1)
127
- });
128
- return state;
129
- };
130
- mut = ["push", "pop", "shift", "unshift", "splice"];
131
- set = (signals, k, v) => {
132
- let s = signals[k], cur;
133
- if (k[0] === "_") signals[k] = v;
134
- else if (!s) signals[k] = s = v?.peek ? v : signal(store(v));
135
- else if (v === (cur = s.peek())) ;
136
- else if (s._set) s._set(v);
137
- else if (Array.isArray(v) && Array.isArray(cur)) {
138
- if (cur[_change]) batch(() => {
139
- for (let i = 0; i < v.length; i++) cur[i] = v[i];
140
- cur.length = v.length;
141
- });
142
- else s.value = v;
143
- } else s.value = store(v);
144
- };
145
- setter = (expr, set2 = parse(`${expr}=${_stash}`)) => (state, value) => (state[_stash] = value, // save value to stash
146
- set2(state));
147
- store_default = store;
148
- }
149
- });
150
-
151
- // core.js
152
- var _dispose, _state, _on, _off, directive, dir, sprae, parse, memo, err, compile, prefix, frag, core_default;
153
- var init_core = __esm({
154
- "core.js"() {
155
- init_signal();
156
- init_store();
157
- _dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
158
- _state = Symbol("state");
159
- _on = Symbol("on");
160
- _off = Symbol("off");
161
- directive = {};
162
- dir = (name, create, p = parse) => directive[name] = (el, expr, state, name2, update, evaluate) => (update = create(el, state, expr, name2), evaluate = p(expr, ":" + name2), () => update(evaluate(state)));
163
- sprae = (el = document.body, values) => {
164
- if (el[_state]) return Object.assign(el[_state], values);
165
- let state = store(values || {}), offs = [], fx = [];
166
- let init = (el2, attrs = el2.attributes) => {
167
- if (attrs) for (let i = 0; i < attrs.length; ) {
168
- let { name, value } = attrs[i], update, dir2;
169
- if (name.startsWith(prefix)) {
170
- el2.removeAttribute(name);
171
- for (dir2 of name.slice(prefix.length).split(":")) {
172
- update = (directive[dir2] || directive.default)(el2, value, state, dir2);
173
- fx.push(update);
174
- offs.push(effect(update));
175
- if (el2[_state] === null) return;
176
- }
177
- } else i++;
178
- }
179
- for (let child of el2.childNodes) child.nodeType == 1 && init(child);
180
- };
181
- init(el);
182
- if (!(_state in el)) {
183
- el[_state] = state;
184
- el[_off] = () => (offs.map((off) => off()), offs = []);
185
- el[_on] = () => offs = fx.map((f) => effect(f));
186
- el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = null);
187
- }
188
- return state;
189
- };
190
- sprae.use = (s) => (s.signal && use(s), s.compile && (compile = s.compile), s.prefix && (prefix = s.prefix));
191
- parse = (expr, dir2, fn) => {
192
- if (fn = memo[expr = expr.trim()]) return fn;
193
- try {
194
- fn = compile(expr);
195
- } catch (e) {
196
- err(e, dir2, expr);
197
- }
198
- return memo[expr] = (s) => {
199
- try {
200
- return fn(s);
201
- } catch (e) {
202
- err(e, dir2, expr);
203
- }
204
- };
205
- };
206
- memo = {};
207
- err = (e, dir2 = "", expr = "") => {
208
- throw Object.assign(e, { message: `\u2234 ${e.message}
209
-
210
- ${dir2}${expr ? `="${expr}"
211
-
212
- ` : ""}`, expr });
213
- };
214
- prefix = ":";
215
- frag = (tpl) => {
216
- if (!tpl.nodeType) return tpl;
217
- let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
218
- return {
219
- // get parentNode() { return childNodes[0].parentNode },
220
- childNodes,
221
- content,
222
- remove: () => content.append(...childNodes),
223
- replaceWith(el) {
224
- if (el === ref) return;
225
- ref.before(el);
226
- content.append(...childNodes);
227
- },
228
- attributes,
229
- removeAttribute(name) {
230
- attributes.splice(attributes.findIndex((a) => a.name === name), 1);
231
- }
232
- // setAttributeNode() { }
233
- };
234
- };
235
- core_default = sprae;
236
- }
237
- });
238
-
239
- // directive/if.js
240
- var _prevIf;
241
- var init_if = __esm({
242
- "directive/if.js"() {
243
- init_core();
244
- _prevIf = Symbol("if");
245
- dir("if", (el, state) => {
246
- let holder = document.createTextNode("");
247
- let nextEl = el.nextElementSibling, curEl, ifEl, elseEl;
248
- el.replaceWith(holder);
249
- ifEl = el.content ? frag(el) : el;
250
- ifEl[_state] = null;
251
- if (nextEl?.hasAttribute(":else")) {
252
- nextEl.removeAttribute(":else");
253
- if (!nextEl.hasAttribute(":if")) nextEl.remove(), elseEl = nextEl.content ? frag(nextEl) : nextEl, elseEl[_state] = null;
254
- } else nextEl = null;
255
- return (value, newEl = el[_prevIf] ? null : value ? ifEl : elseEl) => {
256
- if (nextEl) nextEl[_prevIf] = el[_prevIf] || newEl == ifEl;
257
- if (curEl != newEl) {
258
- if (curEl) curEl.remove(), curEl[_off]?.();
259
- if (curEl = newEl) {
260
- holder.before(curEl.content || curEl);
261
- curEl[_state] === null ? (delete curEl[_state], core_default(curEl, state)) : curEl[_on]();
262
- }
263
- }
264
- };
265
- });
266
- }
267
- });
268
-
269
- // directive/each.js
270
- var init_each = __esm({
271
- "directive/each.js"() {
272
- init_core();
273
- init_store();
274
- init_signal();
275
- dir(
276
- "each",
277
- (tpl, state, expr) => {
278
- let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().split(/\s*,\s*/);
279
- let holder = document.createTextNode("");
280
- let cur, keys2, items, prevl = 0;
281
- let update = () => {
282
- var _a, _b;
283
- let i = 0, newItems = items, newl = newItems.length;
284
- if (cur && !cur[_change]) {
285
- for (let s of cur[_signals] || []) s[Symbol.dispose]();
286
- cur = null, prevl = 0;
287
- }
288
- if (newl < prevl) cur.length = newl;
289
- else {
290
- if (!cur) cur = newItems;
291
- else while (i < prevl) cur[i] = newItems[i++];
292
- for (; i < newl; i++) {
293
- cur[i] = newItems[i];
294
- let idx = i, scope = store_default({
295
- [itemVar]: cur[_signals]?.[idx] || cur[idx],
296
- [idxVar]: keys2 ? keys2[idx] : idx
297
- }, state), el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
298
- holder.before(el.content || el);
299
- core_default(el, scope);
300
- let _prev = ((_b = cur[_a = _signals] || (cur[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose];
301
- cur[_signals][i][Symbol.dispose] = () => {
302
- _prev?.(), el[Symbol.dispose]?.(), el.remove();
303
- };
304
- }
305
- }
306
- prevl = newl;
307
- };
308
- tpl.replaceWith(holder);
309
- tpl[_state] = null;
310
- return (value) => {
311
- keys2 = null;
312
- if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
313
- else if (value?.constructor === Object) keys2 = Object.keys(value), items = Object.values(value);
314
- else items = value || [];
315
- let planned = 0;
316
- return effect(() => {
317
- items[_change]?.value;
318
- if (!planned++) update(), queueMicrotask(() => (planned > 1 && update(), planned = 0));
319
- });
320
- };
321
- },
322
- // redefine evaluator to take second part of expression
323
- (expr) => parse(expr.split(/\bin\b/)[1])
324
- );
325
- }
326
- });
327
-
328
- // directive/ref.js
329
- var init_ref = __esm({
330
- "directive/ref.js"() {
331
- init_core();
332
- init_signal();
333
- init_store();
334
- dir("ref", (el, state, expr) => typeof parse(expr)(state) == "function" ? (v) => v.call(null, el) : (setter(expr)(state, el), (_) => _));
335
- }
336
- });
337
-
338
- // directive/with.js
339
- var init_with = __esm({
340
- "directive/with.js"() {
341
- init_core();
342
- init_signal();
343
- init_store();
344
- dir("with", (el, rootState, state) => (state = null, (values) => !state ? (
345
- // NOTE: we force untracked because internal directives can eval outside of effects (like ref etc) that would cause unwanted subscribe
346
- // FIXME: since this can be async effect, we should create & sprae it in advance.
347
- untracked(() => core_default(el, state = store_default(values, rootState)))
348
- ) : core_default(el, values)));
349
- }
350
- });
351
-
352
- // directive/text.js
353
- var init_text = __esm({
354
- "directive/text.js"() {
355
- init_core();
356
- dir("text", (el) => (
357
- // <template :text="a"/> or previously initialized template
358
- (el.content && el.replaceWith(el = frag(el).childNodes[0]), (value) => el.textContent = value == null ? "" : value)
359
- ));
360
- }
361
- });
362
-
363
- // directive/class.js
364
- var init_class = __esm({
365
- "directive/class.js"() {
366
- init_core();
367
- dir(
368
- "class",
369
- (el, cur) => (cur = /* @__PURE__ */ new Set(), (v) => {
370
- let clsx = /* @__PURE__ */ new Set();
371
- if (v) {
372
- if (typeof v === "string") v.split(" ").map((cls) => clsx.add(cls));
373
- else if (Array.isArray(v)) v.map((v2) => v2 && clsx.add(v2));
374
- else Object.entries(v).map(([k, v2]) => v2 && clsx.add(k));
375
- }
376
- for (let cls of cur) if (clsx.has(cls)) clsx.delete(cls);
377
- else el.classList.remove(cls);
378
- for (let cls of cur = clsx) el.classList.add(cls);
379
- })
380
- );
381
- }
382
- });
383
-
384
- // directive/style.js
385
- var init_style = __esm({
386
- "directive/style.js"() {
387
- init_core();
388
- dir(
389
- "style",
390
- (el, initStyle) => (initStyle = el.getAttribute("style"), (v) => {
391
- if (typeof v === "string") el.setAttribute("style", initStyle + (initStyle.endsWith(";") ? "" : "; ") + v);
392
- else {
393
- if (initStyle) el.setAttribute("style", initStyle);
394
- for (let k in v) k[0] == "-" ? el.style.setProperty(k, v[k]) : el.style[k] = v[k];
395
- }
396
- })
397
- );
398
- }
399
- });
400
-
401
- // directive/default.js
402
- var mods, keys, throttle, debounce, attr, dashcase;
403
- var init_default = __esm({
404
- "directive/default.js"() {
405
- init_core();
406
- dir("default", (target, state, expr, name) => {
407
- if (!name.startsWith("on"))
408
- return name ? (value) => attr(target, name, value) : (value) => {
409
- for (let key in value) attr(target, dashcase(key), value[key]);
410
- };
411
- let ctxs = name.split("..").map((e) => {
412
- let ctx = { evt: "", target, test: () => true };
413
- ctx.evt = (e.startsWith("on") ? e.slice(2) : e).replace(
414
- /\.(\w+)?-?([-\w]+)?/g,
415
- (_, mod, param = "") => (ctx.test = mods[mod]?.(ctx, ...param.split("-")) || ctx.test, "")
416
- );
417
- return ctx;
418
- });
419
- let addListener = (fn, { evt, target: target2, test, defer, stop, prevent, immediate, ...opts }, cb) => {
420
- if (defer) fn = defer(fn);
421
- cb = (e) => {
422
- try {
423
- test(e) && (stop && (immediate ? e.stopImmediatePropagation() : e.stopPropagation()), prevent && e.preventDefault(), fn?.call(state, e));
424
- } catch (error) {
425
- err(error, `:on${evt}`, fn);
426
- }
427
- };
428
- target2.addEventListener(evt, cb, opts);
429
- return () => target2.removeEventListener(evt, cb, opts);
430
- };
431
- if (ctxs.length == 1) return (v) => addListener(v, ctxs[0]);
432
- let startFn, nextFn, off, idx = 0;
433
- let nextListener = (fn) => {
434
- off = addListener((e) => (off(), nextFn = fn?.(e), (idx = ++idx % ctxs.length) ? nextListener(nextFn) : startFn && nextListener(startFn)), ctxs[idx]);
435
- };
436
- return (value) => (startFn = value, !off && nextListener(startFn), () => startFn = null);
437
- });
438
- mods = {
439
- // actions
440
- prevent(ctx) {
441
- ctx.prevent = true;
442
- },
443
- stop(ctx) {
444
- ctx.stop = true;
445
- },
446
- immediate(ctx) {
447
- ctx.immediate = true;
448
- },
449
- // options
450
- once(ctx) {
451
- ctx.once = true;
452
- },
453
- passive(ctx) {
454
- ctx.passive = true;
455
- },
456
- capture(ctx) {
457
- ctx.capture = true;
458
- },
459
- // target
460
- window(ctx) {
461
- ctx.target = window;
462
- },
463
- document(ctx) {
464
- ctx.target = document;
465
- },
466
- parent(ctx) {
467
- ctx.target = ctx.target.parentNode;
468
- },
469
- throttle(ctx, limit = 108) {
470
- ctx.defer = (fn) => throttle(fn, limit);
471
- },
472
- debounce(ctx, wait = 108) {
473
- ctx.defer = (fn) => debounce(fn, wait);
474
- },
475
- // test
476
- outside: (ctx) => (e) => {
477
- let target = ctx.target;
478
- if (target.contains(e.target)) return false;
479
- if (e.target.isConnected === false) return false;
480
- if (target.offsetWidth < 1 && target.offsetHeight < 1) return false;
481
- return true;
482
- },
483
- self: (ctx) => (e) => e.target === ctx.target,
484
- // keyboard
485
- ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
486
- shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
487
- alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
488
- meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
489
- // NOTE: we don't expose up/left/right/down as too verbose: can and better be handled/differentiated at once
490
- arrow: () => keys.arrow,
491
- enter: () => keys.enter,
492
- esc: () => keys.esc,
493
- tab: () => keys.tab,
494
- space: () => keys.space,
495
- delete: () => keys.delete,
496
- digit: () => keys.digit,
497
- letter: () => keys.letter,
498
- char: () => keys.char
499
- };
500
- keys = {
501
- ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
502
- shift: (e) => e.shiftKey || e.key === "Shift",
503
- alt: (e) => e.altKey || e.key === "Alt",
504
- meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
505
- arrow: (e) => e.key.startsWith("Arrow"),
506
- enter: (e) => e.key === "Enter",
507
- esc: (e) => e.key.startsWith("Esc"),
508
- tab: (e) => e.key === "Tab",
509
- space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
510
- delete: (e) => e.key === "Delete" || e.key === "Backspace",
511
- digit: (e) => /^\d$/.test(e.key),
512
- letter: (e) => /^\p{L}$/gu.test(e.key),
513
- char: (e) => /^\S$/.test(e.key)
514
- };
515
- throttle = (fn, limit) => {
516
- let pause, planned, block = (e) => {
517
- pause = true;
518
- setTimeout(() => {
519
- pause = false;
520
- if (planned) return planned = false, block(e), fn(e);
521
- }, limit);
522
- };
523
- return (e) => {
524
- if (pause) return planned = true;
525
- block(e);
526
- return fn(e);
527
- };
528
- };
529
- debounce = (fn, wait) => {
530
- let timeout;
531
- return (e) => {
532
- clearTimeout(timeout);
533
- timeout = setTimeout(() => {
534
- timeout = null;
535
- fn(e);
536
- }, wait);
537
- };
538
- };
539
- attr = (el, name, v) => {
540
- if (v == null || v === false) el.removeAttribute(name);
541
- else el.setAttribute(name, v === true ? "" : typeof v === "number" || typeof v === "string" ? v : "");
542
- };
543
- dashcase = (str) => {
544
- return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match, i) => (i ? "-" : "") + match.toLowerCase());
545
- };
546
- }
547
- });
548
-
549
- // directive/value.js
550
- var init_value = __esm({
551
- "directive/value.js"() {
552
- init_core();
553
- init_core();
554
- init_signal();
555
- init_store();
556
- init_default();
557
- dir("value", (el, state, expr) => {
558
- 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) => (
559
- // we retain selection in input
560
- (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to))
561
- ) : el.type === "checkbox" ? (value) => (el.checked = value, attr(el, "checked", value)) : el.type === "radio" ? (value) => el.value === value && (el.checked = value, attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
562
- for (let o of el.options)
563
- o.value == value ? o.setAttribute("selected", "") : o.removeAttribute("selected");
564
- el.value = value;
565
- } : el.type === "select-multiple" ? (value) => {
566
- for (let o of el.options) o.removeAttribute("selected");
567
- for (let v of value) el.querySelector(`[value="${v}"]`).setAttribute("selected", "");
568
- } : (value) => el.value = value;
569
- try {
570
- const set2 = setter(expr);
571
- const handleChange = el.type === "checkbox" ? () => set2(state, el.checked) : el.type === "select-multiple" ? () => set2(state, [...el.selectedOptions].map((o) => o.value)) : () => set2(state, el.selectedIndex < 0 ? null : el.value);
572
- el.oninput = el.onchange = handleChange;
573
- if (el.type?.startsWith("select")) {
574
- new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
575
- core_default(el, state);
576
- }
577
- parse(expr)(state) ?? handleChange();
578
- } catch {
579
- }
580
- return update;
581
- });
582
- }
583
- });
584
-
585
- // directive/fx.js
586
- var init_fx = __esm({
587
- "directive/fx.js"() {
588
- init_core();
589
- dir("fx", (_) => (_2) => _2);
590
- }
591
- });
592
-
593
- // directive/aria.js
594
- var init_aria = __esm({
595
- "directive/aria.js"() {
596
- init_core();
597
- init_default();
598
- dir("aria", (el) => (value) => {
599
- for (let key in value) attr(el, "aria-" + dashcase(key), value[key] == null ? null : value[key] + "");
600
- });
601
- }
602
- });
603
-
604
- // directive/data.js
605
- var init_data = __esm({
606
- "directive/data.js"() {
607
- init_core();
608
- dir("data", (el) => (value) => {
609
- for (let key in value) el.dataset[key] = value[key];
610
- });
611
- }
612
- });
613
-
614
- // sprae.js
615
- var sprae_exports = {};
616
- __export(sprae_exports, {
617
- default: () => sprae_default
618
- });
619
- var sprae_default;
620
- var init_sprae = __esm({
621
- "sprae.js"() {
622
- init_core();
623
- init_if();
624
- init_each();
625
- init_ref();
626
- init_with();
627
- init_text();
628
- init_class();
629
- init_style();
630
- init_value();
631
- init_fx();
632
- init_default();
633
- init_aria();
634
- init_data();
635
- core_default.use({ compile: (expr) => core_default.constructor(`with (arguments[0]) { return ${expr} };`) });
636
- sprae_default = core_default;
637
- }
638
- });
639
-
640
- // <stdin>
641
- var sprae2 = (init_sprae(), __toCommonJS(sprae_exports)).default;
642
- sprae2.store = (init_store(), __toCommonJS(store_exports)).default;
643
- sprae2.use({ prefix: document.currentScript.getAttribute("prefix") });
644
- document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", () => sprae2()) : sprae2();
645
- module.exports = sprae2;
646
- ;if (typeof module.exports == "object" && typeof exports == "object") {
647
- var __cp = (to, from, except, desc) => {
648
- if ((from && typeof from === "object") || typeof from === "function") {
649
- for (let key of Object.getOwnPropertyNames(from)) {
650
- if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
651
- Object.defineProperty(to, key, {
652
- get: () => from[key],
653
- enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
654
- });
655
- }
656
- }
657
- return to;
658
- };
659
- module.exports = __cp(module.exports, exports);
660
- }
661
- return module.exports;
662
- }))