sprae 12.2.2 → 12.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/directive/value.js +25 -27
- package/dist/sprae.js +2 -2
- package/dist/sprae.js.map +3 -3
- package/dist/sprae.umd.js +3 -817
- package/dist/sprae.umd.js.map +3 -3
- package/package.json +1 -1
- package/readme.md +1 -1
package/dist/sprae.umd.js
CHANGED
|
@@ -1,823 +1,9 @@
|
|
|
1
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
|
|
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);
|
|
2
|
+
var oe=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var d=(e,r)=>()=>(e&&(r=e(e=0)),r);var ot=(e,r)=>{for(var t in r)oe(e,t,{get:r[t],enumerable:!0})},st=(e,r,t,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of tt(r))!rt.call(e,s)&&s!==t&&oe(e,s,{get:()=>r[s],enumerable:!(o=et(r,s))||o.enumerable});return e};var it=e=>st(oe({},"__esModule",{value:!0}),e);var be,he=d(()=>{be={name:"sprae",description:"DOM microhydration",version:"12.2.3",main:"./sprae.js",module:"./sprae.js","umd:main":"dist/sprae.umd.js",unpkg:"dist/sprae.umd.js",types:"dist/sprae.d.ts",type:"module",files:["core.js","sprae.js","store.js","signal.js","micro.js","directive","dist"],devDependencies:{"@preact/signals":"^2.0.4","@preact/signals-core":"^1.8.0","@webreflection/signal":"^2.1.2","es-module-shims":"^1.10.0",esbuild:"^0.23.0","esbuild-plugin-umd-wrapper":"^2.0.3",hyperf:"^1.7.0",jsdom:"^27.0.0",requestidlecallback:"^0.3.0","signal-polyfill":"^0.1.1",subscript:"^9.1.0",tst:"^7.2.0",ulive:"^1.0.7",usignal:"^0.9.0","wait-please":"^3.1.0"},scripts:{test:"node -r ./test/register.cjs test/test.js",build:"node .esbuild.js"},repository:{type:"git",url:"git+https://github.com/dy/sprae.git"},keywords:["hydration","progressive","progressive enhancement","signals","directives","preact-signals","reactive","template-parts","petit-vue","alpinejs","templating"],author:"Dmitry Iv <df.creative@gmail.com>",license:"MIT",bugs:{url:"https://github.com/dy/sprae/issues"},homepage:"https://github.com/dy/sprae#readme"}});var Z,l,G,F,se,v,k,J,ne,Q,B,W,H,ie,ae,at,U,ue,Se,O,xe,z,D,m,Ae,A,ce,q,je,f,y=d(()=>{Y();he();Y();Z=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),l=Symbol("state"),G=Symbol("on"),F=Symbol("off"),se=Symbol("init"),v=":",Q=e=>e(),B=Q,W={},H={},ie=null,ae=(e=document.body,r)=>{if(e[l])return Object.assign(e[l],r);r=L(r||{});let t=[],o=[];e[G]=()=>!o&&(o=t.map(i=>i())),e[F]=()=>(o?.map(i=>i()),o=null),e[Z]||(e[Z]=()=>(e[F](),e[F]=e[G]=e[Z]=e[se]=e[l]=null));let s=e[se]=i=>{let n=i.attributes,a;if(n)for(let u=0;u<n.length;){let{name:p,value:h}=n[u];if(p.startsWith(v)){if(i.removeAttribute(p),(a=at(i,p,h,r))&&(t.push(a),o.push(a())),l in i)return}else u++}for(let u of[...i.childNodes])u.nodeType==1&&s(u)};return s(e),e[l]===void 0&&(e[l]=r),r};ae.version=be.version;at=(e,r,t,o)=>{let s,i,n=r.slice(v.length).split("..").map((a,u,{length:p})=>a.split(v).reduce((h,c)=>{let[g,...b]=c.split("."),C=O(t,W[ie=g]?.parse);if(g.startsWith("on")){let R=g.slice(2),V=xe(z(p==1?P=>C(o,re=>m(re,P)):P=>(s=(u?s:re=>m(C(o),re))(P),i(),i=n[(u+1)%p]()),{target:e}),b);return P=>(P=h?.(),V.target.addEventListener(R,V,V),()=>(P?.(),V.target.removeEventListener(R,V)))}let N,x,$,S;b.length?($=k(-1),S=-1,N=xe(z(q(()=>{++$.value||(x=J(()=>M&&($.value==S?N():(S=$.value,C(o,M)))))}),{target:e}),b)):N=z(()=>x=J(()=>C(o,M)),{target:e});let M=(W[g]||W["*"])(N.target,o,t,g);if(M)return e[l]&&(o=e[l]),R=>(R=h?.(),N(),()=>(R?.(),x?.(),$&&($.value=-1,S=x=null)))},null));return()=>i=n[0]?.()},U=e=>(e.compile&&(Se=e.compile),e.prefix&&(v=e.prefix),e.signal&&(k=e.signal),e.effect&&(J=e.effect),e.computed&&(ne=e.computed),e.batch&&(Q=e.batch),e.untracked&&(B=e.untracked)),ue=(e=document.body,r)=>{let t=L(r);return ae(e,t),new MutationObserver(s=>{for(let i of s)for(let n of i.addedNodes)n.nodeType===1&&n[l]===void 0&&e.contains(n)&&e[se](n)}).observe(e,{childList:!0,subtree:!0}),t},O=(e,r,t)=>{if(t=O.cache[e])return t;let o=e.trim()||"undefined";r&&(o=r(o)),/^(if|let|const)\b/.test(o)||/;(?![^{]*})/.test(o)||(o=`return ${o}`),/\bawait\s/.test(o)&&(o=`return (async()=>{ ${o} })()`);try{t=Se(o),Object.defineProperty(t,"name",{value:`\u2234 ${e}`})}catch(s){console.error(`\u2234 ${s}
|
|
22
3
|
|
|
23
|
-
|
|
24
|
-
var package_default;
|
|
25
|
-
var init_package = __esm({
|
|
26
|
-
"package.json"() {
|
|
27
|
-
package_default = {
|
|
28
|
-
name: "sprae",
|
|
29
|
-
description: "DOM microhydration",
|
|
30
|
-
version: "12.2.1",
|
|
31
|
-
main: "./sprae.js",
|
|
32
|
-
module: "./sprae.js",
|
|
33
|
-
"umd:main": "dist/sprae.umd.js",
|
|
34
|
-
unpkg: "dist/sprae.umd.js",
|
|
35
|
-
types: "dist/sprae.d.ts",
|
|
36
|
-
type: "module",
|
|
37
|
-
files: [
|
|
38
|
-
"core.js",
|
|
39
|
-
"sprae.js",
|
|
40
|
-
"store.js",
|
|
41
|
-
"signal.js",
|
|
42
|
-
"micro.js",
|
|
43
|
-
"directive",
|
|
44
|
-
"dist"
|
|
45
|
-
],
|
|
46
|
-
devDependencies: {
|
|
47
|
-
"@preact/signals": "^2.0.4",
|
|
48
|
-
"@preact/signals-core": "^1.8.0",
|
|
49
|
-
"@webreflection/signal": "^2.1.2",
|
|
50
|
-
"es-module-shims": "^1.10.0",
|
|
51
|
-
esbuild: "^0.23.0",
|
|
52
|
-
"esbuild-plugin-umd-wrapper": "^2.0.3",
|
|
53
|
-
hyperf: "^1.7.0",
|
|
54
|
-
jsdom: "^27.0.0",
|
|
55
|
-
requestidlecallback: "^0.3.0",
|
|
56
|
-
"signal-polyfill": "^0.1.1",
|
|
57
|
-
subscript: "^9.1.0",
|
|
58
|
-
tst: "^7.2.0",
|
|
59
|
-
ulive: "^1.0.7",
|
|
60
|
-
usignal: "^0.9.0",
|
|
61
|
-
"wait-please": "^3.1.0"
|
|
62
|
-
},
|
|
63
|
-
scripts: {
|
|
64
|
-
test: "node -r ./test/register.cjs test/test.js",
|
|
65
|
-
build: "node .esbuild.js"
|
|
66
|
-
},
|
|
67
|
-
repository: {
|
|
68
|
-
type: "git",
|
|
69
|
-
url: "git+https://github.com/dy/sprae.git"
|
|
70
|
-
},
|
|
71
|
-
keywords: [
|
|
72
|
-
"hydration",
|
|
73
|
-
"progressive",
|
|
74
|
-
"progressive enhancement",
|
|
75
|
-
"signals",
|
|
76
|
-
"directives",
|
|
77
|
-
"preact-signals",
|
|
78
|
-
"reactive",
|
|
79
|
-
"template-parts",
|
|
80
|
-
"petit-vue",
|
|
81
|
-
"alpinejs",
|
|
82
|
-
"templating"
|
|
83
|
-
],
|
|
84
|
-
author: "Dmitry Iv <df.creative@gmail.com>",
|
|
85
|
-
license: "MIT",
|
|
86
|
-
bugs: {
|
|
87
|
-
url: "https://github.com/dy/sprae/issues"
|
|
88
|
-
},
|
|
89
|
-
homepage: "https://github.com/dy/sprae#readme"
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
});
|
|
4
|
+
${v+ie}="${e}"`)}return O.cache[e]=(s,i,n)=>{try{let a=t?.(s);return i?(a?.then?a.then(u=>n=i(u)):n=i(a),()=>m(n)):a}catch(a){console.error(`\u2234 ${a}
|
|
93
5
|
|
|
94
|
-
|
|
95
|
-
var _dispose, _state, _on, _off, _add, prefix, signal, effect, computed, batch, untracked, directive, modifier, currentDir, sprae, initDirective, use, start, compile, parse, applyMods, sx, frag, call, dashcase, attr, clsx, throttle, debounce, core_default;
|
|
96
|
-
var init_core = __esm({
|
|
97
|
-
"core.js"() {
|
|
98
|
-
init_store();
|
|
99
|
-
init_package();
|
|
100
|
-
init_store();
|
|
101
|
-
_dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
|
|
102
|
-
_state = Symbol("state");
|
|
103
|
-
_on = Symbol("on");
|
|
104
|
-
_off = Symbol("off");
|
|
105
|
-
_add = Symbol("init");
|
|
106
|
-
prefix = ":";
|
|
107
|
-
batch = (fn) => fn();
|
|
108
|
-
untracked = batch;
|
|
109
|
-
directive = {};
|
|
110
|
-
modifier = {};
|
|
111
|
-
currentDir = null;
|
|
112
|
-
sprae = (el = document.body, state) => {
|
|
113
|
-
if (el[_state]) return Object.assign(el[_state], state);
|
|
114
|
-
state = store_default(state || {});
|
|
115
|
-
let fx = [], offs = [];
|
|
116
|
-
el[_on] = () => !offs && (offs = fx.map((fn) => fn()));
|
|
117
|
-
el[_off] = () => (offs?.map((off) => off()), offs = null);
|
|
118
|
-
el[_dispose] || (el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_add] = el[_state] = null));
|
|
119
|
-
const add = el[_add] = (el2) => {
|
|
120
|
-
let _attrs = el2.attributes, fn;
|
|
121
|
-
if (_attrs) for (let i = 0; i < _attrs.length; ) {
|
|
122
|
-
let { name, value } = _attrs[i];
|
|
123
|
-
if (name.startsWith(prefix)) {
|
|
124
|
-
el2.removeAttribute(name);
|
|
125
|
-
if (fn = initDirective(el2, name, value, state)) fx.push(fn), offs.push(fn());
|
|
126
|
-
if (_state in el2) return;
|
|
127
|
-
} else i++;
|
|
128
|
-
}
|
|
129
|
-
for (let child of [...el2.childNodes]) child.nodeType == 1 && add(child);
|
|
130
|
-
};
|
|
131
|
-
add(el);
|
|
132
|
-
if (el[_state] === void 0) el[_state] = state;
|
|
133
|
-
return state;
|
|
134
|
-
};
|
|
135
|
-
sprae.version = package_default.version;
|
|
136
|
-
initDirective = (el, dirName, expr, state) => {
|
|
137
|
-
let cur2, off;
|
|
138
|
-
let steps = dirName.slice(prefix.length).split("..").map((step, i, { length }) => (
|
|
139
|
-
// multiple attributes like :id:for=""
|
|
140
|
-
step.split(prefix).reduce((prev, str) => {
|
|
141
|
-
let [name, ...mods] = str.split(".");
|
|
142
|
-
let evaluate = parse(expr, directive[currentDir = name]?.parse);
|
|
143
|
-
if (name.startsWith("on")) {
|
|
144
|
-
let type = name.slice(2), fn2 = applyMods(
|
|
145
|
-
sx(
|
|
146
|
-
// single event vs chain
|
|
147
|
-
length == 1 ? (e) => evaluate(state, (fn3) => call(fn3, e)) : (e) => (cur2 = (!i ? (e2) => call(evaluate(state), e2) : cur2)(e), off(), off = steps[(i + 1) % length]()),
|
|
148
|
-
{ target: el }
|
|
149
|
-
),
|
|
150
|
-
mods
|
|
151
|
-
);
|
|
152
|
-
return (_poff) => (_poff = prev?.(), fn2.target.addEventListener(type, fn2, fn2), () => (_poff?.(), fn2.target.removeEventListener(type, fn2)));
|
|
153
|
-
}
|
|
154
|
-
let fn, dispose, change, count;
|
|
155
|
-
if (mods.length) {
|
|
156
|
-
change = signal(-1), // signal authorized to trigger effect: 0 = init; >0 = trigger
|
|
157
|
-
count = -1;
|
|
158
|
-
fn = applyMods(sx(throttle(() => {
|
|
159
|
-
if (++change.value) return;
|
|
160
|
-
dispose = effect(() => update && (change.value == count ? fn() : (
|
|
161
|
-
// plan update: separate tick (via throttle) makes sure planner effect call is finished before eval call
|
|
162
|
-
(count = change.value, evaluate(state, update))
|
|
163
|
-
)));
|
|
164
|
-
}), { target: el }), mods);
|
|
165
|
-
} else {
|
|
166
|
-
fn = sx(() => dispose = effect(() => evaluate(state, update)), { target: el });
|
|
167
|
-
}
|
|
168
|
-
let update = (directive[name] || directive["*"])(fn.target, state, expr, name);
|
|
169
|
-
if (!update) return;
|
|
170
|
-
if (el[_state]) state = el[_state];
|
|
171
|
-
return (_poff) => (_poff = prev?.(), // console.log('ON', name),
|
|
172
|
-
fn(), () => (
|
|
173
|
-
// console.log('OFF', name, el),
|
|
174
|
-
(_poff?.(), dispose?.(), change && (change.value = -1, count = dispose = null))
|
|
175
|
-
));
|
|
176
|
-
}, null)
|
|
177
|
-
));
|
|
178
|
-
return () => off = steps[0]?.();
|
|
179
|
-
};
|
|
180
|
-
use = (s) => (s.compile && (compile = s.compile), s.prefix && (prefix = s.prefix), s.signal && (signal = s.signal), s.effect && (effect = s.effect), s.computed && (computed = s.computed), s.batch && (batch = s.batch), s.untracked && (untracked = s.untracked));
|
|
181
|
-
start = (root = document.body, values) => {
|
|
182
|
-
const state = store_default(values);
|
|
183
|
-
sprae(root, state);
|
|
184
|
-
const mo = new MutationObserver((mutations) => {
|
|
185
|
-
for (const m of mutations) {
|
|
186
|
-
for (const el of m.addedNodes) {
|
|
187
|
-
if (el.nodeType === 1 && el[_state] === void 0 && root.contains(el)) {
|
|
188
|
-
root[_add](el);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
mo.observe(root, { childList: true, subtree: true });
|
|
194
|
-
return state;
|
|
195
|
-
};
|
|
196
|
-
parse = (expr, prepare, _fn) => {
|
|
197
|
-
if (_fn = parse.cache[expr]) return _fn;
|
|
198
|
-
let _expr = expr.trim() || "undefined";
|
|
199
|
-
if (prepare) _expr = prepare(_expr);
|
|
200
|
-
if (/^(if|let|const)\b/.test(_expr) || /;(?![^{]*})/.test(_expr)) ;
|
|
201
|
-
else _expr = `return ${_expr}`;
|
|
202
|
-
if (/\bawait\s/.test(_expr)) _expr = `return (async()=>{ ${_expr} })()`;
|
|
203
|
-
try {
|
|
204
|
-
_fn = compile(_expr);
|
|
205
|
-
Object.defineProperty(_fn, "name", { value: `\u2234 ${expr}` });
|
|
206
|
-
} catch (e) {
|
|
207
|
-
console.error(`\u2234 ${e}
|
|
208
|
-
|
|
209
|
-
${prefix + currentDir}="${expr}"`);
|
|
210
|
-
}
|
|
211
|
-
return parse.cache[expr] = (state, cb, _out) => {
|
|
212
|
-
try {
|
|
213
|
-
let result = _fn?.(state);
|
|
214
|
-
if (cb) return result?.then ? result.then((v) => _out = cb(v)) : _out = cb(result), () => call(_out);
|
|
215
|
-
else return result;
|
|
216
|
-
} catch (e) {
|
|
217
|
-
console.error(`\u2234 ${e}
|
|
218
|
-
|
|
219
|
-
${prefix + currentDir}="${expr}"`);
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
};
|
|
223
|
-
parse.cache = {};
|
|
224
|
-
applyMods = (fn, mods) => {
|
|
225
|
-
while (mods.length) {
|
|
226
|
-
let [name, ...params] = mods.pop().split("-");
|
|
227
|
-
fn = sx(modifier[name]?.(fn, ...params) ?? fn, fn);
|
|
228
|
-
}
|
|
229
|
-
return fn;
|
|
230
|
-
};
|
|
231
|
-
sx = (a, b) => {
|
|
232
|
-
if (a != b) for (let k in b) a[k] ?? (a[k] = b[k]);
|
|
233
|
-
return a;
|
|
234
|
-
};
|
|
235
|
-
frag = (tpl) => {
|
|
236
|
-
if (!tpl.nodeType) return tpl;
|
|
237
|
-
let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
|
|
238
|
-
return {
|
|
239
|
-
// get parentNode() { return childNodes[0].parentNode },
|
|
240
|
-
childNodes,
|
|
241
|
-
content,
|
|
242
|
-
remove: () => content.append(...childNodes),
|
|
243
|
-
replaceWith(el) {
|
|
244
|
-
if (el === ref) return;
|
|
245
|
-
ref.before(el);
|
|
246
|
-
content.append(...childNodes);
|
|
247
|
-
},
|
|
248
|
-
attributes,
|
|
249
|
-
removeAttribute(name) {
|
|
250
|
-
attributes.splice(attributes.findIndex((a) => a.name === name), 1);
|
|
251
|
-
}
|
|
252
|
-
// setAttributeNode() { }
|
|
253
|
-
};
|
|
254
|
-
};
|
|
255
|
-
call = (v, arg) => typeof v === "function" ? v(arg) : v;
|
|
256
|
-
dashcase = (str) => str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match, i) => (i ? "-" : "") + match.toLowerCase());
|
|
257
|
-
attr = (el, name, v) => v == null || v === false ? el.removeAttribute(name) : el.setAttribute(name, v === true ? "" : v);
|
|
258
|
-
clsx = (c, _out = []) => !c ? "" : typeof c === "string" ? c : (Array.isArray(c) ? c.map(clsx) : Object.entries(c).reduce((s, [k, v]) => !v ? s : [...s, k], [])).join(" ");
|
|
259
|
-
throttle = (fn, schedule = queueMicrotask) => {
|
|
260
|
-
let _planned = 0;
|
|
261
|
-
const throttled = (e) => {
|
|
262
|
-
if (!_planned++) fn(e), schedule((_dirty = _planned > 1) => (_planned = 0, _dirty && throttled(e)));
|
|
263
|
-
};
|
|
264
|
-
return throttled;
|
|
265
|
-
};
|
|
266
|
-
debounce = (fn, schedule = queueMicrotask, _count = 0) => (arg, _planned = ++_count) => schedule(() => _planned == _count && fn(arg));
|
|
267
|
-
core_default = sprae;
|
|
268
|
-
}
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
// store.js
|
|
272
|
-
var _signals, _change, _set, sandbox, store, list, create, set, store_default;
|
|
273
|
-
var init_store = __esm({
|
|
274
|
-
"store.js"() {
|
|
275
|
-
init_core();
|
|
276
|
-
_signals = Symbol("signals");
|
|
277
|
-
_change = Symbol("change");
|
|
278
|
-
_set = Symbol("set");
|
|
279
|
-
sandbox = true;
|
|
280
|
-
store = (values, parent) => {
|
|
281
|
-
if (!values) return values;
|
|
282
|
-
if (values[Symbol.toStringTag]) return values;
|
|
283
|
-
if (values[_signals]) return values;
|
|
284
|
-
if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
|
|
285
|
-
let keyCount = Object.keys(values).length, signals = {};
|
|
286
|
-
let state = new Proxy(Object.assign(signals, {
|
|
287
|
-
[_change]: signal(keyCount),
|
|
288
|
-
[_signals]: signals
|
|
289
|
-
}), {
|
|
290
|
-
get: (_, k) => {
|
|
291
|
-
if (k in signals) return signals[k] ? signals[k].valueOf() : signals[k];
|
|
292
|
-
return parent ? parent[k] : globalThis[k];
|
|
293
|
-
},
|
|
294
|
-
set: (_, k, v, _s) => {
|
|
295
|
-
if (k in signals) return set(signals, k, v), 1;
|
|
296
|
-
sandbox = false;
|
|
297
|
-
if (parent && k in parent) {
|
|
298
|
-
parent[k] = v;
|
|
299
|
-
} else {
|
|
300
|
-
create(signals, k, v);
|
|
301
|
-
signals[_change].value = ++keyCount;
|
|
302
|
-
}
|
|
303
|
-
sandbox = true;
|
|
304
|
-
return 1;
|
|
305
|
-
},
|
|
306
|
-
// FIXME: try to avild calling Symbol.dispose here. Maybe _delete method?
|
|
307
|
-
deleteProperty: (_, k) => {
|
|
308
|
-
k in signals && (k[0] != "_" && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount);
|
|
309
|
-
return 1;
|
|
310
|
-
},
|
|
311
|
-
// subscribe to length when spreading
|
|
312
|
-
ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),
|
|
313
|
-
// sandbox prevents writing to global
|
|
314
|
-
has: (_, k) => {
|
|
315
|
-
if (k in signals) return true;
|
|
316
|
-
if (parent) return k in parent;
|
|
317
|
-
return sandbox;
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
const descs = Object.getOwnPropertyDescriptors(values);
|
|
321
|
-
for (let k in values) {
|
|
322
|
-
if (descs[k]?.get)
|
|
323
|
-
(signals[k] = computed(descs[k].get.bind(state)))[_set] = descs[k].set?.bind(state);
|
|
324
|
-
else create(signals, k, values[k]);
|
|
325
|
-
}
|
|
326
|
-
return state;
|
|
327
|
-
};
|
|
328
|
-
list = (values, parent = globalThis) => {
|
|
329
|
-
let signals = Array(values.length).fill(null), isMut = false, mut = (fn) => function() {
|
|
330
|
-
isMut = true;
|
|
331
|
-
return fn.apply(this, arguments);
|
|
332
|
-
}, length = signal(values.length), state = new Proxy(
|
|
333
|
-
Object.assign(signals, {
|
|
334
|
-
[_change]: length,
|
|
335
|
-
[_signals]: signals,
|
|
336
|
-
// patch mutators
|
|
337
|
-
push: mut(signals.push),
|
|
338
|
-
pop: mut(signals.pop),
|
|
339
|
-
shift: mut(signals.shift),
|
|
340
|
-
unshift: mut(signals.unshift),
|
|
341
|
-
splice: mut(signals.splice)
|
|
342
|
-
}),
|
|
343
|
-
{
|
|
344
|
-
get(_, k) {
|
|
345
|
-
if (k === "length") return isMut ? (isMut = false, signals.length) : length.value;
|
|
346
|
-
if (typeof k === "symbol" || isNaN(k)) return signals[k]?.valueOf() ?? parent[k];
|
|
347
|
-
return (signals[k] ?? (signals[k] = signal(store(values[k])))).valueOf();
|
|
348
|
-
},
|
|
349
|
-
set(_, k, v) {
|
|
350
|
-
if (k === "length") {
|
|
351
|
-
for (let i = v; i < signals.length; i++) delete state[i];
|
|
352
|
-
length.value = signals.length = v;
|
|
353
|
-
} else if (k >= signals.length) create(signals, k, v), state.length = +k + 1;
|
|
354
|
-
else signals[k] ? set(signals, k, v) : create(signals, k, v);
|
|
355
|
-
return 1;
|
|
356
|
-
},
|
|
357
|
-
// dispose notifies any signal deps, like :each
|
|
358
|
-
deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1)
|
|
359
|
-
}
|
|
360
|
-
);
|
|
361
|
-
return state;
|
|
362
|
-
};
|
|
363
|
-
create = (signals, k, v) => signals[k] = k[0] == "_" || v?.peek ? v : signal(store(v));
|
|
364
|
-
set = (signals, k, v, _s, _v) => {
|
|
365
|
-
return k[0] === "_" ? signals[k] = v : v !== (_v = (_s = signals[k]).peek()) && // stashed _set for value with getter/setter
|
|
366
|
-
(_s[_set] ? _s[_set](v) : (
|
|
367
|
-
// patch array
|
|
368
|
-
Array.isArray(v) && Array.isArray(_v) ? (
|
|
369
|
-
// if we update plain array (stored in signal) - take over value instead
|
|
370
|
-
// since input value can be store, we have to make sure we don't subscribe to its length or values
|
|
371
|
-
// FIXME: generalize to objects
|
|
372
|
-
_change in _v ? untracked(() => batch(() => {
|
|
373
|
-
for (let i = 0; i < v.length; i++) _v[i] = v[i];
|
|
374
|
-
_v.length = v.length;
|
|
375
|
-
})) : _s.value = v
|
|
376
|
-
) : (
|
|
377
|
-
// .x = y
|
|
378
|
-
_s.value = store(v)
|
|
379
|
-
)
|
|
380
|
-
));
|
|
381
|
-
};
|
|
382
|
-
store_default = store;
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
// signal.js
|
|
387
|
-
var current, depth, batched, signal2, effect2, computed2, batch2, untracked2;
|
|
388
|
-
var init_signal = __esm({
|
|
389
|
-
"signal.js"() {
|
|
390
|
-
depth = 0;
|
|
391
|
-
signal2 = (v, _s, _obs = /* @__PURE__ */ new Set(), _v = () => _s.value) => _s = {
|
|
392
|
-
get value() {
|
|
393
|
-
current?.deps.push(_obs.add(current));
|
|
394
|
-
return v;
|
|
395
|
-
},
|
|
396
|
-
set value(val) {
|
|
397
|
-
if (val === v) return;
|
|
398
|
-
v = val;
|
|
399
|
-
for (let sub of _obs) batched ? batched.add(sub) : sub();
|
|
400
|
-
},
|
|
401
|
-
peek() {
|
|
402
|
-
return v;
|
|
403
|
-
},
|
|
404
|
-
toJSON: _v,
|
|
405
|
-
then: _v,
|
|
406
|
-
toString: _v,
|
|
407
|
-
valueOf: _v
|
|
408
|
-
};
|
|
409
|
-
effect2 = (fn, _teardown, _fx, _deps, __tmp) => (_fx = (prev) => {
|
|
410
|
-
__tmp = _teardown;
|
|
411
|
-
_teardown = null;
|
|
412
|
-
__tmp?.call?.();
|
|
413
|
-
prev = current, current = _fx;
|
|
414
|
-
if (depth++ > 10) throw "Cycle detected";
|
|
415
|
-
try {
|
|
416
|
-
_teardown = fn();
|
|
417
|
-
} finally {
|
|
418
|
-
current = prev;
|
|
419
|
-
depth--;
|
|
420
|
-
}
|
|
421
|
-
}, _deps = _fx.deps = [], _fx(), (dep) => {
|
|
422
|
-
_teardown?.call?.();
|
|
423
|
-
while (dep = _deps.pop()) dep.delete(_fx);
|
|
424
|
-
});
|
|
425
|
-
computed2 = (fn, _s = signal2(), _c, _e, _v = () => _c.value) => _c = {
|
|
426
|
-
get value() {
|
|
427
|
-
_e || (_e = effect2(() => _s.value = fn()));
|
|
428
|
-
return _s.value;
|
|
429
|
-
},
|
|
430
|
-
peek: _s.peek,
|
|
431
|
-
toJSON: _v,
|
|
432
|
-
then: _v,
|
|
433
|
-
toString: _v,
|
|
434
|
-
valueOf: _v
|
|
435
|
-
};
|
|
436
|
-
batch2 = (fn, _first = !batched) => {
|
|
437
|
-
batched ?? (batched = /* @__PURE__ */ new Set());
|
|
438
|
-
try {
|
|
439
|
-
fn();
|
|
440
|
-
} finally {
|
|
441
|
-
if (_first) {
|
|
442
|
-
for (const fx of batched) fx();
|
|
443
|
-
batched = null;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
};
|
|
447
|
-
untracked2 = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v);
|
|
448
|
-
}
|
|
449
|
-
});
|
|
450
|
-
|
|
451
|
-
// directive/if.js
|
|
452
|
-
var if_default;
|
|
453
|
-
var init_if = __esm({
|
|
454
|
-
"directive/if.js"() {
|
|
455
|
-
init_core();
|
|
456
|
-
if_default = (el, state, _holder, _el, _match) => {
|
|
457
|
-
var _a;
|
|
458
|
-
if (!el._holder) {
|
|
459
|
-
el[_a = _state] ?? (el[_a] = null);
|
|
460
|
-
_el = el.content ? frag(el) : el;
|
|
461
|
-
el.replaceWith(_holder = document.createTextNode(""));
|
|
462
|
-
_el._holder = _holder._holder = _holder;
|
|
463
|
-
_holder._clauses = [_el._clause = [_el, false]];
|
|
464
|
-
_holder.update = throttle(() => {
|
|
465
|
-
let match = _holder._clauses.find(([, s]) => s);
|
|
466
|
-
if (match != _match) {
|
|
467
|
-
_match?.[0].remove();
|
|
468
|
-
_match?.[0][_off]?.();
|
|
469
|
-
if (_match = match) {
|
|
470
|
-
_holder.before(_match[0].content || _match[0]);
|
|
471
|
-
!_match[0][_state] ? (delete _match[0][_state], core_default(_match[0], state)) : _match[0][_on]?.();
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
} else core_default(_el = el, state);
|
|
476
|
-
return (value) => {
|
|
477
|
-
_el._clause[1] = value;
|
|
478
|
-
_el._holder.update();
|
|
479
|
-
};
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
});
|
|
483
|
-
|
|
484
|
-
// directive/else.js
|
|
485
|
-
var else_default;
|
|
486
|
-
var init_else = __esm({
|
|
487
|
-
"directive/else.js"() {
|
|
488
|
-
init_core();
|
|
489
|
-
else_default = (el, state, _el, _, _prev = el) => {
|
|
490
|
-
_el = el.content ? frag(el) : el;
|
|
491
|
-
while (_prev && !(_el._holder = _prev._holder)) _prev = _prev.previousSibling;
|
|
492
|
-
el.remove();
|
|
493
|
-
el[_state] = null;
|
|
494
|
-
_el._holder._clauses.push(_el._clause = [_el, true]);
|
|
495
|
-
return _el._holder.update;
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
// directive/text.js
|
|
501
|
-
var text_default;
|
|
502
|
-
var init_text = __esm({
|
|
503
|
-
"directive/text.js"() {
|
|
504
|
-
init_core();
|
|
505
|
-
text_default = (el) => (
|
|
506
|
-
// <template :text="a"/> or previously initialized template
|
|
507
|
-
(el.content && el.replaceWith(el = frag(el).childNodes[0]), (v) => (v = call(v, el.textContent), el.textContent = v == null ? "" : v))
|
|
508
|
-
);
|
|
509
|
-
}
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
// directive/class.js
|
|
513
|
-
var class_default;
|
|
514
|
-
var init_class = __esm({
|
|
515
|
-
"directive/class.js"() {
|
|
516
|
-
init_core();
|
|
517
|
-
class_default = (el, _cur, _new) => (_cur = /* @__PURE__ */ new Set(), (v) => {
|
|
518
|
-
_new = /* @__PURE__ */ new Set();
|
|
519
|
-
if (v) clsx(call(v, el.className)).split(" ").map((c) => c && _new.add(c));
|
|
520
|
-
for (let c of _cur) if (_new.has(c)) _new.delete(c);
|
|
521
|
-
else el.classList.remove(c);
|
|
522
|
-
for (let c of _cur = _new) el.classList.add(c);
|
|
523
|
-
});
|
|
524
|
-
}
|
|
525
|
-
});
|
|
526
|
-
|
|
527
|
-
// directive/style.js
|
|
528
|
-
var style_default;
|
|
529
|
-
var init_style = __esm({
|
|
530
|
-
"directive/style.js"() {
|
|
531
|
-
init_core();
|
|
532
|
-
style_default = (el, _static) => (_static = el.getAttribute("style"), (v) => {
|
|
533
|
-
v = call(v, el.style);
|
|
534
|
-
if (typeof v === "string") attr(el, "style", _static + "; " + v);
|
|
535
|
-
else {
|
|
536
|
-
if (_static) attr(el, "style", _static);
|
|
537
|
-
for (let k in v) k[0] == "-" ? el.style.setProperty(k, v[k]) : k[0] > "A" && (el.style[k] = v[k]);
|
|
538
|
-
}
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
});
|
|
542
|
-
|
|
543
|
-
// directive/fx.js
|
|
544
|
-
var fx_default;
|
|
545
|
-
var init_fx = __esm({
|
|
546
|
-
"directive/fx.js"() {
|
|
547
|
-
init_core();
|
|
548
|
-
fx_default = () => call;
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
|
|
552
|
-
// directive/value.js
|
|
553
|
-
var setter, value_default;
|
|
554
|
-
var init_value = __esm({
|
|
555
|
-
"directive/value.js"() {
|
|
556
|
-
init_core();
|
|
557
|
-
setter = (expr, _set2 = parse(`${expr}=__`)) => (target, value) => {
|
|
558
|
-
target.__ = value;
|
|
559
|
-
_set2(target), delete target.__;
|
|
560
|
-
};
|
|
561
|
-
value_default = (el, state, expr, name) => {
|
|
562
|
-
try {
|
|
563
|
-
const set2 = setter(expr);
|
|
564
|
-
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);
|
|
565
|
-
el.oninput = el.onchange = handleChange;
|
|
566
|
-
if (el.type?.startsWith("select")) {
|
|
567
|
-
new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
|
|
568
|
-
core_default(el, state);
|
|
569
|
-
}
|
|
570
|
-
parse(expr)(state) ?? handleChange();
|
|
571
|
-
} catch {
|
|
572
|
-
}
|
|
573
|
-
return 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) => (
|
|
574
|
-
// we retain selection in input
|
|
575
|
-
(from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to))
|
|
576
|
-
) : 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) => {
|
|
577
|
-
for (let o of el.options)
|
|
578
|
-
o.value == value ? o.setAttribute("selected", "") : o.removeAttribute("selected");
|
|
579
|
-
el.value = value;
|
|
580
|
-
} : el.type === "select-multiple" ? (value) => {
|
|
581
|
-
for (let o of el.options) o.removeAttribute("selected");
|
|
582
|
-
for (let v of value) el.querySelector(`[value="${v}"]`).setAttribute("selected", "");
|
|
583
|
-
} : (value) => el.value = value;
|
|
584
|
-
};
|
|
585
|
-
}
|
|
586
|
-
});
|
|
587
|
-
|
|
588
|
-
// directive/ref.js
|
|
589
|
-
var ref_default;
|
|
590
|
-
var init_ref = __esm({
|
|
591
|
-
"directive/ref.js"() {
|
|
592
|
-
init_core();
|
|
593
|
-
ref_default = (el, state, expr, name, _prev, _set2) => {
|
|
594
|
-
if (typeof parse(expr)(state) == "function") return (v) => v(el);
|
|
595
|
-
Object.defineProperty(state, expr, { value: el, configurable: true });
|
|
596
|
-
};
|
|
597
|
-
}
|
|
598
|
-
});
|
|
599
|
-
|
|
600
|
-
// directive/scope.js
|
|
601
|
-
var scope_default;
|
|
602
|
-
var init_scope = __esm({
|
|
603
|
-
"directive/scope.js"() {
|
|
604
|
-
init_core();
|
|
605
|
-
scope_default = (el, rootState) => {
|
|
606
|
-
let subscope = el[_state] = store({}, rootState), init = false;
|
|
607
|
-
return (values) => {
|
|
608
|
-
values = call(values, subscope);
|
|
609
|
-
if (values !== subscope) {
|
|
610
|
-
for (let k in values) {
|
|
611
|
-
let v = typeof values[k] === "function" ? values[k].bind(subscope) : values[k];
|
|
612
|
-
if (k in subscope[_signals]) subscope[k] = v;
|
|
613
|
-
else subscope[_signals][k] = k[0] == "_" || v?.peek ? v : signal(store(v));
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
return !init && (init = true, delete el[_state], untracked(() => core_default(el, subscope)));
|
|
617
|
-
};
|
|
618
|
-
};
|
|
619
|
-
}
|
|
620
|
-
});
|
|
621
|
-
|
|
622
|
-
// directive/each.js
|
|
623
|
-
var each, each_default;
|
|
624
|
-
var init_each = __esm({
|
|
625
|
-
"directive/each.js"() {
|
|
626
|
-
init_core();
|
|
627
|
-
each = (tpl, state, expr) => {
|
|
628
|
-
let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().replace(/\(|\)/g, "").split(/\s*,\s*/);
|
|
629
|
-
let holder = document.createTextNode("");
|
|
630
|
-
let cur2, keys2, items, prevl = 0;
|
|
631
|
-
let update = throttle(() => {
|
|
632
|
-
var _a, _b;
|
|
633
|
-
let i = 0, newItems = items, newl = newItems.length;
|
|
634
|
-
if (cur2 && !cur2[_change]) {
|
|
635
|
-
for (let s of cur2[_signals] || []) s[Symbol.dispose]();
|
|
636
|
-
cur2 = null, prevl = 0;
|
|
637
|
-
}
|
|
638
|
-
if (newl < prevl) cur2.length = newl;
|
|
639
|
-
else {
|
|
640
|
-
if (!cur2) cur2 = newItems;
|
|
641
|
-
else while (i < prevl) cur2[i] = newItems[i++];
|
|
642
|
-
for (; i < newl; i++) {
|
|
643
|
-
cur2[i] = newItems[i];
|
|
644
|
-
let idx = i, subscope = Object.create(state, {
|
|
645
|
-
[itemVar]: { get: () => cur2[idx] },
|
|
646
|
-
[idxVar]: { value: keys2 ? keys2[idx] : idx }
|
|
647
|
-
});
|
|
648
|
-
let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
|
|
649
|
-
holder.before(el.content || el);
|
|
650
|
-
core_default(el, subscope);
|
|
651
|
-
let _prev = ((_b = cur2[_a = _signals] || (cur2[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose];
|
|
652
|
-
cur2[_signals][i][Symbol.dispose] = () => {
|
|
653
|
-
_prev?.(), el[Symbol.dispose]?.(), el.remove();
|
|
654
|
-
};
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
prevl = newl;
|
|
658
|
-
});
|
|
659
|
-
tpl.replaceWith(holder);
|
|
660
|
-
tpl[_state] = null;
|
|
661
|
-
return (value) => {
|
|
662
|
-
keys2 = null;
|
|
663
|
-
if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
|
|
664
|
-
else if (value?.constructor === Object) keys2 = Object.keys(value), items = Object.values(value);
|
|
665
|
-
else items = value || [];
|
|
666
|
-
return effect(() => {
|
|
667
|
-
items[_change]?.value;
|
|
668
|
-
update();
|
|
669
|
-
});
|
|
670
|
-
};
|
|
671
|
-
};
|
|
672
|
-
each.parse = (str) => str.split(/\bin\b/)[1].trim();
|
|
673
|
-
each_default = each;
|
|
674
|
-
}
|
|
675
|
-
});
|
|
676
|
-
|
|
677
|
-
// directive/default.js
|
|
678
|
-
var default_default;
|
|
679
|
-
var init_default = __esm({
|
|
680
|
-
"directive/default.js"() {
|
|
681
|
-
init_core();
|
|
682
|
-
default_default = (el, st, ex, name) => (v) => attr(el, name, call(v, el.getAttribute(name)));
|
|
683
|
-
}
|
|
684
|
-
});
|
|
685
|
-
|
|
686
|
-
// directive/spread.js
|
|
687
|
-
var spread_default;
|
|
688
|
-
var init_spread = __esm({
|
|
689
|
-
"directive/spread.js"() {
|
|
690
|
-
init_core();
|
|
691
|
-
spread_default = (target) => (value) => {
|
|
692
|
-
for (let key in value) attr(target, dashcase(key), value[key]);
|
|
693
|
-
};
|
|
694
|
-
}
|
|
695
|
-
});
|
|
696
|
-
|
|
697
|
-
// sprae.js
|
|
698
|
-
var sprae_exports = {};
|
|
699
|
-
__export(sprae_exports, {
|
|
700
|
-
batch: () => batch2,
|
|
701
|
-
computed: () => computed2,
|
|
702
|
-
default: () => sprae_default,
|
|
703
|
-
effect: () => effect2,
|
|
704
|
-
signal: () => signal2,
|
|
705
|
-
sprae: () => core_default,
|
|
706
|
-
start: () => start,
|
|
707
|
-
store: () => store_default,
|
|
708
|
-
untracked: () => untracked2,
|
|
709
|
-
use: () => use
|
|
710
|
-
});
|
|
711
|
-
var keys, sprae_default;
|
|
712
|
-
var init_sprae = __esm({
|
|
713
|
-
"sprae.js"() {
|
|
714
|
-
init_store();
|
|
715
|
-
init_signal();
|
|
716
|
-
init_core();
|
|
717
|
-
init_if();
|
|
718
|
-
init_else();
|
|
719
|
-
init_text();
|
|
720
|
-
init_class();
|
|
721
|
-
init_style();
|
|
722
|
-
init_fx();
|
|
723
|
-
init_value();
|
|
724
|
-
init_ref();
|
|
725
|
-
init_scope();
|
|
726
|
-
init_each();
|
|
727
|
-
init_default();
|
|
728
|
-
init_spread();
|
|
729
|
-
Object.assign(directive, {
|
|
730
|
-
// :x="x"
|
|
731
|
-
"*": default_default,
|
|
732
|
-
// FIXME
|
|
733
|
-
// 'on*': _on,
|
|
734
|
-
// :="{a,b,c}"
|
|
735
|
-
"": spread_default,
|
|
736
|
-
// :class="[a, b, c]"
|
|
737
|
-
class: class_default,
|
|
738
|
-
// :text="..."
|
|
739
|
-
text: text_default,
|
|
740
|
-
// :style="..."
|
|
741
|
-
style: style_default,
|
|
742
|
-
// :fx="..."
|
|
743
|
-
fx: fx_default,
|
|
744
|
-
// :value - 2 way binding like x-model
|
|
745
|
-
value: value_default,
|
|
746
|
-
// :ref="..."
|
|
747
|
-
ref: ref_default,
|
|
748
|
-
// :scope creates variables scope for a subtree
|
|
749
|
-
scope: scope_default,
|
|
750
|
-
if: if_default,
|
|
751
|
-
else: else_default,
|
|
752
|
-
// :each="v,k in src"
|
|
753
|
-
each: each_default
|
|
754
|
-
});
|
|
755
|
-
Object.assign(modifier, {
|
|
756
|
-
debounce: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : _how === "idle" ? requestIdleCallback : (fn2) => setTimeout(fn2, _how), _count = 0) => debounce(fn, _schedule),
|
|
757
|
-
throttle: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : (fn2) => setTimeout(fn2, _how)) => throttle(fn, _schedule),
|
|
758
|
-
once: (fn, _done, _fn) => Object.assign((e) => !_done && (_done = 1, fn(e)), { once: true }),
|
|
759
|
-
// event modifiers
|
|
760
|
-
// actions
|
|
761
|
-
prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),
|
|
762
|
-
stop: (fn) => (e) => (e?.stopPropagation(), fn(e)),
|
|
763
|
-
immediate: (fn) => (e) => (e?.stopImmediatePropagation(), fn(e)),
|
|
764
|
-
// options
|
|
765
|
-
passive: (fn) => (fn.passive = true, fn),
|
|
766
|
-
capture: (fn) => (fn.capture = true, fn),
|
|
767
|
-
// target
|
|
768
|
-
window: (fn) => (fn.target = fn.target.ownerDocument.defaultView, fn),
|
|
769
|
-
document: (fn) => (fn.target = fn.target.ownerDocument, fn),
|
|
770
|
-
root: (fn) => (fn.target = fn.target.ownerDocument.documentElement, fn),
|
|
771
|
-
body: (fn) => (fn.target = fn.target.ownerDocument.body, fn),
|
|
772
|
-
parent: (fn) => (fn.target = fn.target.parentNode, fn),
|
|
773
|
-
// testers
|
|
774
|
-
self: (fn) => (e) => e.target === fn.target && fn(e),
|
|
775
|
-
outside: (fn) => (e, _target) => (_target = fn.target, !_target.contains(e.target) && e.target.isConnected && (_target.offsetWidth || _target.offsetHeight))
|
|
776
|
-
});
|
|
777
|
-
keys = {
|
|
778
|
-
ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
|
|
779
|
-
shift: (e) => e.shiftKey || e.key === "Shift",
|
|
780
|
-
alt: (e) => e.altKey || e.key === "Alt",
|
|
781
|
-
meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
|
|
782
|
-
arrow: (e) => e.key.startsWith("Arrow"),
|
|
783
|
-
enter: (e) => e.key === "Enter",
|
|
784
|
-
esc: (e) => e.key.startsWith("Esc"),
|
|
785
|
-
tab: (e) => e.key === "Tab",
|
|
786
|
-
space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
|
|
787
|
-
delete: (e) => e.key === "Delete" || e.key === "Backspace",
|
|
788
|
-
digit: (e) => /^\d$/.test(e.key),
|
|
789
|
-
letter: (e) => /^\p{L}$/gu.test(e.key),
|
|
790
|
-
char: (e) => /^\S$/.test(e.key)
|
|
791
|
-
};
|
|
792
|
-
for (let k in keys) modifier[k] = (fn, ...params) => (e) => keys[k](e) && params.every((k2) => keys[k2]?.(e) ?? e.key === k2) && fn(e);
|
|
793
|
-
use({
|
|
794
|
-
compile: (expr) => {
|
|
795
|
-
return core_default.constructor(`with (arguments[0]) { ${expr} }`);
|
|
796
|
-
},
|
|
797
|
-
// signals
|
|
798
|
-
signal: signal2,
|
|
799
|
-
effect: effect2,
|
|
800
|
-
computed: computed2,
|
|
801
|
-
batch: batch2,
|
|
802
|
-
untracked: untracked2
|
|
803
|
-
});
|
|
804
|
-
core_default.use = use;
|
|
805
|
-
core_default.store = store_default;
|
|
806
|
-
core_default.directive = directive;
|
|
807
|
-
core_default.modifier = modifier;
|
|
808
|
-
core_default.start = start;
|
|
809
|
-
sprae_default = core_default;
|
|
810
|
-
}
|
|
811
|
-
});
|
|
812
|
-
|
|
813
|
-
// <stdin>
|
|
814
|
-
var sprae2 = (init_sprae(), __toCommonJS(sprae_exports)).default;
|
|
815
|
-
module.exports = sprae2;
|
|
816
|
-
var cur = document.currentScript;
|
|
817
|
-
var prefix2 = cur.getAttribute("prefix") ?? cur.dataset.prefix ?? cur.dataset.spraePrefix;
|
|
818
|
-
var start2 = cur.getAttribute("start") ?? cur.dataset.start ?? cur.dataset.spraeStart;
|
|
819
|
-
if (prefix2) sprae2.use({ prefix: prefix2 });
|
|
820
|
-
if (start2 != null && start2 !== "false") (start2 && start2 !== "true" ? document.querySelectorAll(start2) : [document.body || document.documentElement]).forEach((el) => sprae2.start(el));
|
|
6
|
+
${v+ie}="${e}"`)}}};O.cache={};xe=(e,r)=>{for(;r.length;){let[t,...o]=r.pop().split("-");e=z(H[t]?.(e,...o)??e,e)}return e},z=(e,r)=>{if(e!=r)for(let t in r)e[t]??(e[t]=r[t]);return e},D=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],o=document.createTextNode(""),s=(r.append(o),[...r.childNodes]);return{childNodes:s,content:r,remove:()=>r.append(...s),replaceWith(i){i!==o&&(o.before(i),r.append(...s))},attributes:t,removeAttribute(i){t.splice(t.findIndex(n=>n.name===i),1)}}},m=(e,r)=>typeof e=="function"?e(r):e,Ae=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(r,t)=>(t?"-":"")+r.toLowerCase()),A=(e,r,t)=>t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":t),ce=(e,r=[])=>e?typeof e=="string"?e:(Array.isArray(e)?e.map(ce):Object.entries(e).reduce((t,[o,s])=>s?[...t,o]:t,[])).join(" "):"",q=(e,r=queueMicrotask)=>{let t=0,o=s=>{t++||(e(s),r((i=t>1)=>(t=0,i&&o(s))))};return o},je=(e,r=queueMicrotask,t=0)=>(o,s=++t)=>r(()=>s==t&&e(o)),f=ae});var j,w,pe,le,E,ut,_,Oe,L,Y=d(()=>{y();j=Symbol("signals"),w=Symbol("change"),pe=Symbol("set"),le=!0,E=(e,r)=>{if(!e||e[Symbol.toStringTag]||e[j])return e;if(e.constructor!==Object)return Array.isArray(e)?ut(e):e;let t=Object.keys(e).length,o={},s=new Proxy(Object.assign(o,{[w]:k(t),[j]:o}),{get:(n,a)=>a in o?o[a]?o[a].valueOf():o[a]:r?r[a]:globalThis[a],set:(n,a,u,p)=>a in o?(Oe(o,a,u),1):(le=!1,r&&a in r?r[a]=u:(_(o,a,u),o[w].value=++t),le=!0,1),deleteProperty:(n,a)=>(a in o&&(a[0]!="_"&&o[a]?.[Symbol.dispose]?.(),delete o[a],o[w].value=--t),1),ownKeys:()=>(o[w].value,Reflect.ownKeys(o)),has:(n,a)=>a in o?!0:r?a in r:le}),i=Object.getOwnPropertyDescriptors(e);for(let n in e)i[n]?.get?(o[n]=ne(i[n].get.bind(s)))[pe]=i[n].set?.bind(s):_(o,n,e[n]);return s},ut=(e,r=globalThis)=>{let t=Array(e.length).fill(null),o=!1,s=a=>function(){return o=!0,a.apply(this,arguments)},i=k(e.length),n=new Proxy(Object.assign(t,{[w]:i,[j]:t,push:s(t.push),pop:s(t.pop),shift:s(t.shift),unshift:s(t.unshift),splice:s(t.splice)}),{get(a,u){return u==="length"?o?(o=!1,t.length):i.value:typeof u=="symbol"||isNaN(u)?t[u]?.valueOf()??r[u]:(t[u]??(t[u]=k(E(e[u])))).valueOf()},set(a,u,p){if(u==="length"){for(let h=p;h<t.length;h++)delete n[h];i.value=t.length=p}else u>=t.length?(_(t,u,p),n.length=+u+1):t[u]?Oe(t,u,p):_(t,u,p);return 1},deleteProperty:(a,u)=>(t[u]?.[Symbol.dispose]?.(),delete t[u],1)});return n},_=(e,r,t)=>e[r]=r[0]=="_"||t?.peek?t:k(E(t)),Oe=(e,r,t,o,s)=>r[0]==="_"?e[r]=t:t!==(s=(o=e[r]).peek())&&(o[pe]?o[pe](t):Array.isArray(t)&&Array.isArray(s)?w in s?B(()=>Q(()=>{for(let i=0;i<t.length;i++)s[i]=t[i];s.length=t.length})):o.value=t:o.value=E(t)),L=E});var T,ke,I,ee,te,fe,de,me,we=d(()=>{ke=0,ee=(e,r,t=new Set,o=()=>r.value)=>r={get value(){return T?.deps.push(t.add(T)),e},set value(s){if(s!==e){e=s;for(let i of t)I?I.add(i):i()}},peek(){return e},toJSON:o,then:o,toString:o,valueOf:o},te=(e,r,t,o,s)=>(t=i=>{if(s=r,r=null,s?.call?.(),i=T,T=t,ke++>10)throw"Cycle detected";try{r=e()}finally{T=i,ke--}},o=t.deps=[],t(),i=>{for(r?.call?.();i=o.pop();)i.delete(t)}),fe=(e,r=ee(),t,o,s=()=>t.value)=>t={get value(){return o||(o=te(()=>r.value=e())),r.value},peek:r.peek,toJSON:s,then:s,toString:s,valueOf:s},de=(e,r=!I)=>{I??(I=new Set);try{e()}finally{if(r){for(let t of I)t();I=null}}},me=(e,r,t)=>(r=T,T=null,t=e(),T=r,t)});var Ne,$e=d(()=>{y();Ne=(e,r,t,o,s)=>{var i;return e._holder?f(o=e,r):(e[i=l]??(e[i]=null),o=e.content?D(e):e,e.replaceWith(t=document.createTextNode("")),o._holder=t._holder=t,t._clauses=[o._clause=[o,!1]],t.update=q(()=>{let n=t._clauses.find(([,a])=>a);n!=s&&(s?.[0].remove(),s?.[0][F]?.(),(s=n)&&(t.before(s[0].content||s[0]),s[0][l]?s[0][G]?.():(delete s[0][l],f(s[0],r))))})),n=>{o._clause[1]=n,o._holder.update()}}});var De,Te=d(()=>{y();De=(e,r,t,o,s=e)=>{for(t=e.content?D(e):e;s&&!(t._holder=s._holder);)s=s.previousSibling;return e.remove(),e[l]=null,t._holder._clauses.push(t._clause=[t,!0]),t._holder.update}});var Ce,qe=d(()=>{y();Ce=e=>(e.content&&e.replaceWith(e=D(e).childNodes[0]),r=>(r=m(r,e.textContent),e.textContent=r??""))});var Ee,Me=d(()=>{y();Ee=(e,r,t)=>(r=new Set,o=>{t=new Set,o&&ce(m(o,e.className)).split(" ").map(s=>s&&t.add(s));for(let s of r)t.has(s)?t.delete(s):e.classList.remove(s);for(let s of r=t)e.classList.add(s)})});var Pe,We=d(()=>{y();Pe=(e,r)=>(r=e.getAttribute("style"),t=>{if(t=m(t,e.style),typeof t=="string")A(e,"style",r+"; "+t);else{r&&A(e,"style",r);for(let o in t)o[0]=="-"?e.style.setProperty(o,t[o]):o[0]>"A"&&(e.style[o]=t[o])}})});var ve,Le=d(()=>{y();ve=()=>m});var ct,Ie,Ke=d(()=>{y();ct=(e,r=O(`${e}=__`))=>(t,o)=>{t.__=o,r(t),delete t.__},Ie=(e,r,t,o)=>{try{let s=ct(t),i=e.type==="checkbox"?()=>s(r,e.checked):e.type==="select-multiple"?()=>s(r,[...e.selectedOptions].map(n=>n.value)):()=>s(r,e.selectedIndex<0?null:isNaN(e.valueAsNumber)?e.value:e.valueAsNumber);e.oninput=e.onchange=i,e.type?.startsWith("select")&&(new MutationObserver(i).observe(e,{childList:!0,subtree:!0,attributes:!0}),f(e,r)),O(t)(r)??i()}catch{}return e.type==="text"||e.type===""||e.tagName==="TEXTAREA"?(s,i,n)=>(i=e.selectionStart,n=e.selectionEnd,e.setAttribute("value",e.value=s??""),i&&e.setSelectionRange(i,n)):e.type==="checkbox"?s=>(e.checked=s,A(e,"checked",s)):e.type==="radio"?s=>e.value===s&&(e.checked=s,A(e,"checked",s)):e.type==="select-one"?s=>{for(let i of e.options)i.value==s?i.setAttribute("selected",""):i.removeAttribute("selected");e.value=s}:e.type==="select-multiple"?s=>{for(let i of e.options)i.removeAttribute("selected");for(let i of s)e.querySelector(`[value="${i}"]`).setAttribute("selected","")}:s=>e.value=s}});var Re,Ve=d(()=>{y();Re=(e,r,t,o,s,i)=>{if(typeof O(t)(r)=="function")return n=>n(e);Object.defineProperty(r,t,{value:e,configurable:!0})}});var Fe,Je=d(()=>{y();Fe=(e,r)=>{let t=e[l]=E({},r),o=!1;return s=>{if(s=m(s,t),s!==t)for(let i in s){let n=typeof s[i]=="function"?s[i].bind(t):s[i];i in t[j]?t[i]=n:t[j][i]=i[0]=="_"||n?.peek?n:k(E(n))}return!o&&(o=!0,delete e[l],B(()=>f(e,t)))}}});var Be,He,Xe=d(()=>{y();Be=(e,r,t)=>{let[o,s="$"]=t.split(/\bin\b/)[0].trim().replace(/\(|\)/g,"").split(/\s*,\s*/),i=document.createTextNode(""),n,a,u,p=0,h=q(()=>{var C,N;let c=0,g=u,b=g.length;if(n&&!n[w]){for(let x of n[j]||[])x[Symbol.dispose]();n=null,p=0}if(b<p)n.length=b;else{if(!n)n=g;else for(;c<p;)n[c]=g[c++];for(;c<b;c++){n[c]=g[c];let x=c,$=Object.create(r,{[o]:{get:()=>n[x]},[s]:{value:a?a[x]:x}}),S=e.content?D(e):e.cloneNode(!0);i.before(S.content||S),f(S,$);let M=((N=n[C=j]||(n[C]=[]))[c]||(N[c]={}))[Symbol.dispose];n[j][c][Symbol.dispose]=()=>{M?.(),S[Symbol.dispose]?.(),S.remove()}}}p=b});return e.replaceWith(i),e[l]=null,c=>(a=null,typeof c=="number"?u=Array.from({length:c},(g,b)=>b+1):c?.constructor===Object?(a=Object.keys(c),u=Object.values(c)):u=c||[],J(()=>{u[w]?.value,h()}))};Be.parse=e=>e.split(/\bin\b/)[1].trim();He=Be});var Ze,ze=d(()=>{y();Ze=(e,r,t,o)=>s=>A(e,o,m(s,e.getAttribute(o)))});var Ge,Qe=d(()=>{y();Ge=e=>r=>{for(let t in r)A(e,Ae(t),r[t])}});var Ue={};ot(Ue,{batch:()=>de,computed:()=>fe,default:()=>lt,effect:()=>te,signal:()=>ee,sprae:()=>f,start:()=>ue,store:()=>L,untracked:()=>me,use:()=>U});var ye,lt,Ye=d(()=>{Y();we();y();$e();Te();qe();Me();We();Le();Ke();Ve();Je();Xe();ze();Qe();Object.assign(W,{"*":Ze,"":Ge,class:Ee,text:Ce,style:Pe,fx:ve,value:Ie,ref:Re,scope:Fe,if:Ne,else:De,each:He});Object.assign(H,{debounce:(e,r=250,t=r==="tick"?queueMicrotask:r==="raf"?requestAnimationFrame:r==="idle"?requestIdleCallback:s=>setTimeout(s,r),o=0)=>je(e,t),throttle:(e,r=250,t=r==="tick"?queueMicrotask:r==="raf"?requestAnimationFrame:o=>setTimeout(o,r))=>q(e,t),once:(e,r,t)=>Object.assign(o=>!r&&(r=1,e(o)),{once:!0}),prevent:e=>r=>(r?.preventDefault(),e(r)),stop:e=>r=>(r?.stopPropagation(),e(r)),immediate:e=>r=>(r?.stopImmediatePropagation(),e(r)),passive:e=>(e.passive=!0,e),capture:e=>(e.capture=!0,e),window:e=>(e.target=e.target.ownerDocument.defaultView,e),document:e=>(e.target=e.target.ownerDocument,e),root:e=>(e.target=e.target.ownerDocument.documentElement,e),body:e=>(e.target=e.target.ownerDocument.body,e),parent:e=>(e.target=e.target.parentNode,e),self:e=>r=>r.target===e.target&&e(r),outside:e=>(r,t)=>(t=e.target,!t.contains(r.target)&&r.target.isConnected&&(t.offsetWidth||t.offsetHeight))});ye={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)};for(let e in ye)H[e]=(r,...t)=>o=>ye[e](o)&&t.every(s=>ye[s]?.(o)??o.key===s)&&r(o);U({compile:e=>f.constructor(`with (arguments[0]) { ${e} }`),signal:ee,effect:te,computed:fe,batch:de,untracked:me});f.use=U;f.store=L;f.directive=W;f.modifier=H;f.start=ue;lt=f});var ge=(Ye(),it(Ue)).default;module.exports=ge;var K=document.currentScript,_e=K.getAttribute("prefix")??K.dataset.prefix??K.dataset.spraePrefix,X=K.getAttribute("start")??K.dataset.start??K.dataset.spraeStart;_e&&ge.use({prefix:_e});X!=null&&X!=="false"&&(X&&X!=="true"?document.querySelectorAll(X):[document.body||document.documentElement]).forEach(e=>ge.start(e));
|
|
821
7
|
;if (typeof module.exports == "object" && typeof exports == "object") {
|
|
822
8
|
var __cp = (to, from, except, desc) => {
|
|
823
9
|
if ((from && typeof from === "object") || typeof from === "function") {
|