sprae 9.1.1 → 10.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core.js +66 -83
- package/directive/aria.js +2 -1
- package/directive/class.js +6 -5
- package/directive/data.js +4 -3
- package/directive/default.js +14 -16
- package/directive/each.js +84 -47
- package/directive/fx.js +2 -1
- package/directive/if.js +10 -8
- package/directive/ref.js +7 -7
- package/directive/style.js +4 -3
- package/directive/text.js +4 -3
- package/directive/value.js +2 -1
- package/directive/with.js +16 -0
- package/dist/sprae.js +326 -180
- package/dist/sprae.min.js +1 -1
- package/package.json +5 -4
- package/readme.md +67 -97
- package/signal.js +9 -42
- package/sprae.js +2 -3
- package/store.js +156 -0
- package/directive/scope.js +0 -10
package/dist/sprae.js
CHANGED
|
@@ -4,75 +4,189 @@ var __export = (target, all) => {
|
|
|
4
4
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
//
|
|
8
|
-
var _dispose = Symbol.dispose ||= Symbol("dispose");
|
|
9
|
-
var SPRAE = `\u2234`;
|
|
7
|
+
// signal.js
|
|
10
8
|
var signal;
|
|
11
9
|
var effect;
|
|
10
|
+
var untracked;
|
|
12
11
|
var batch;
|
|
13
12
|
var computed;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
function use(s) {
|
|
14
|
+
signal = s.signal;
|
|
15
|
+
effect = s.effect;
|
|
16
|
+
computed = s.computed;
|
|
17
|
+
batch = s.batch || ((fn) => fn());
|
|
18
|
+
untracked = s.untracked || batch;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// store.js
|
|
22
|
+
var _signals = Symbol("signals");
|
|
23
|
+
var _change = Symbol("length");
|
|
24
|
+
function store(values, signals) {
|
|
25
|
+
if (!values)
|
|
26
|
+
return values;
|
|
27
|
+
if (values[_signals] && !signals)
|
|
28
|
+
return values;
|
|
29
|
+
if (Array.isArray(values))
|
|
30
|
+
return list(values);
|
|
31
|
+
if (values.constructor !== Object)
|
|
32
|
+
return values;
|
|
33
|
+
let _len = signal(Object.values(values).length);
|
|
34
|
+
signals ||= {};
|
|
35
|
+
const state = new Proxy(signals, {
|
|
36
|
+
get: (_, key) => key === _change ? _len : key === _signals ? signals : signals[key]?.valueOf(),
|
|
37
|
+
set: (_, key, v, s) => (s = signals[key], set(signals, key, v), s || ++_len.value),
|
|
38
|
+
deleteProperty: (_, key) => del(signals, key) && _len.value--,
|
|
39
|
+
ownKeys() {
|
|
40
|
+
_len.value;
|
|
41
|
+
return Reflect.ownKeys(signals);
|
|
24
42
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
});
|
|
44
|
+
if (values[_signals])
|
|
45
|
+
for (let key in values)
|
|
46
|
+
signals[key] = values[_signals][key];
|
|
47
|
+
else
|
|
48
|
+
for (let key in values) {
|
|
49
|
+
const desc = Object.getOwnPropertyDescriptor(values, key);
|
|
50
|
+
if (desc?.get) {
|
|
51
|
+
(signals[key] = computed(desc.get.bind(state)))._set = desc.set?.bind(state);
|
|
52
|
+
} else {
|
|
53
|
+
signals[key] = null;
|
|
54
|
+
set(signals, key, values[key]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return state;
|
|
58
|
+
}
|
|
59
|
+
function list(values) {
|
|
60
|
+
let lastProp;
|
|
61
|
+
if (values[_signals])
|
|
62
|
+
return values;
|
|
63
|
+
let _len = signal(values.length), signals = Array(values.length).fill(null);
|
|
64
|
+
const state = new Proxy(signals, {
|
|
65
|
+
get(_, key) {
|
|
66
|
+
if (key === _change)
|
|
67
|
+
return _len;
|
|
68
|
+
if (key === _signals)
|
|
69
|
+
return signals;
|
|
70
|
+
if (key === "length")
|
|
71
|
+
return Array.prototype[lastProp] ? _len.peek() : _len.value;
|
|
72
|
+
lastProp = key;
|
|
73
|
+
if (signals[key])
|
|
74
|
+
return signals[key].valueOf();
|
|
75
|
+
if (key < signals.length)
|
|
76
|
+
return (signals[key] = signal(store(values[key]))).value;
|
|
77
|
+
},
|
|
78
|
+
set(_, key, v) {
|
|
79
|
+
if (key === "length") {
|
|
80
|
+
for (let i = v, l = signals.length; i < l; i++)
|
|
81
|
+
delete state[i];
|
|
82
|
+
_len.value = signals.length = v;
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
set(signals, key, v);
|
|
86
|
+
if (key >= _len.peek())
|
|
87
|
+
_len.value = signals.length = Number(key) + 1;
|
|
88
|
+
return true;
|
|
89
|
+
},
|
|
90
|
+
deleteProperty: (_, key) => (del(signals, key), true)
|
|
91
|
+
});
|
|
92
|
+
return state;
|
|
93
|
+
}
|
|
94
|
+
function set(signals, key, v) {
|
|
95
|
+
let s = signals[key];
|
|
96
|
+
if (!s) {
|
|
97
|
+
signals[key] = s = v?.peek ? v : signal(store(v));
|
|
98
|
+
} else if (v === s.peek())
|
|
99
|
+
;
|
|
100
|
+
else if (s._set)
|
|
101
|
+
s._set(v);
|
|
102
|
+
else if (Array.isArray(v) && Array.isArray(s.peek())) {
|
|
103
|
+
const cur = s.peek();
|
|
104
|
+
if (cur[_change])
|
|
105
|
+
untracked(() => {
|
|
106
|
+
batch(() => {
|
|
107
|
+
let i = 0, l = v.length;
|
|
108
|
+
for (; i < l; i++)
|
|
109
|
+
cur[i] = v[i];
|
|
110
|
+
cur.length = l;
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
else {
|
|
114
|
+
s.value = v;
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
s.value = store(v);
|
|
29
118
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
119
|
+
}
|
|
120
|
+
function del(signals, key) {
|
|
121
|
+
const s = signals[key];
|
|
122
|
+
if (s) {
|
|
123
|
+
const del2 = s[Symbol.dispose];
|
|
124
|
+
if (del2)
|
|
125
|
+
delete s[Symbol.dispose];
|
|
126
|
+
delete signals[key];
|
|
127
|
+
del2?.();
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// core.js
|
|
133
|
+
var _dispose = Symbol.dispose ||= Symbol("dispose");
|
|
134
|
+
var SPRAE = `\u2234`;
|
|
135
|
+
var directive = {};
|
|
136
|
+
var memo = /* @__PURE__ */ new WeakMap();
|
|
137
|
+
function sprae(els, values) {
|
|
138
|
+
let state;
|
|
139
|
+
if (!els?.[Symbol.iterator])
|
|
140
|
+
els = [els];
|
|
141
|
+
for (let el of els) {
|
|
142
|
+
if (el?.children) {
|
|
143
|
+
if (memo.has(el)) {
|
|
144
|
+
Object.assign(memo.get(el), values);
|
|
145
|
+
} else {
|
|
146
|
+
state ||= store(values || {});
|
|
147
|
+
init(el, state);
|
|
148
|
+
if (!memo.has(el))
|
|
149
|
+
memo.set(el, state);
|
|
54
150
|
}
|
|
55
151
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
152
|
+
}
|
|
153
|
+
;
|
|
154
|
+
return state;
|
|
155
|
+
}
|
|
156
|
+
function init(el, state, parent = el.parentNode, effects = []) {
|
|
157
|
+
if (el.attributes) {
|
|
158
|
+
for (let i = 0; i < el.attributes.length; ) {
|
|
159
|
+
let attr2 = el.attributes[i];
|
|
160
|
+
if (attr2.name[0] === ":") {
|
|
161
|
+
el.removeAttribute(attr2.name);
|
|
162
|
+
let names = attr2.name.slice(1).split(":");
|
|
163
|
+
for (let name of names) {
|
|
164
|
+
let dir = directive[name] || directive.default;
|
|
165
|
+
let evaluate = (dir.parse || parse)(attr2.value, parse);
|
|
166
|
+
let dispose = dir(el, evaluate, state, name);
|
|
167
|
+
if (dispose)
|
|
168
|
+
effects.push(dispose);
|
|
169
|
+
}
|
|
170
|
+
if (memo.has(el))
|
|
171
|
+
return;
|
|
172
|
+
if (el.parentNode !== parent)
|
|
173
|
+
return;
|
|
174
|
+
} else
|
|
175
|
+
i++;
|
|
59
176
|
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
container.classList?.add(SPRAE);
|
|
66
|
-
container[_dispose] = () => {
|
|
177
|
+
}
|
|
178
|
+
for (let child of [...el.children])
|
|
179
|
+
init(child, state, el);
|
|
180
|
+
el.classList?.add(SPRAE);
|
|
181
|
+
el[_dispose] = () => {
|
|
67
182
|
while (effects.length)
|
|
68
|
-
effects.pop()
|
|
69
|
-
|
|
70
|
-
memo.delete(
|
|
71
|
-
let els =
|
|
183
|
+
effects.pop()();
|
|
184
|
+
el.classList.remove(SPRAE);
|
|
185
|
+
memo.delete(el);
|
|
186
|
+
let els = el.getElementsByClassName(SPRAE);
|
|
72
187
|
while (els.length)
|
|
73
188
|
els[0][_dispose]?.();
|
|
74
189
|
};
|
|
75
|
-
return state;
|
|
76
190
|
}
|
|
77
191
|
var evalMemo = {};
|
|
78
192
|
var parse = (expr, dir, fn) => {
|
|
@@ -87,20 +201,17 @@ ${dir}${expr ? `="${expr}"
|
|
|
87
201
|
|
|
88
202
|
` : ""}`, expr });
|
|
89
203
|
}
|
|
90
|
-
fn.expr = expr;
|
|
91
204
|
return evalMemo[expr] = fn;
|
|
92
205
|
};
|
|
93
206
|
var compile;
|
|
94
|
-
var swap;
|
|
95
207
|
sprae.use = (s) => {
|
|
96
|
-
s.signal && (
|
|
97
|
-
s.swap && (swap = s.swap);
|
|
208
|
+
s.signal && use(s);
|
|
98
209
|
s.compile && (compile = s.compile);
|
|
99
210
|
};
|
|
100
211
|
|
|
101
|
-
//
|
|
102
|
-
var
|
|
103
|
-
__export(
|
|
212
|
+
// node_modules/ulive/dist/ulive.es.js
|
|
213
|
+
var ulive_es_exports = {};
|
|
214
|
+
__export(ulive_es_exports, {
|
|
104
215
|
batch: () => batch2,
|
|
105
216
|
computed: () => computed2,
|
|
106
217
|
effect: () => effect2,
|
|
@@ -108,6 +219,7 @@ __export(signal_exports, {
|
|
|
108
219
|
untracked: () => untracked2
|
|
109
220
|
});
|
|
110
221
|
var current;
|
|
222
|
+
var batched;
|
|
111
223
|
var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
|
|
112
224
|
get value() {
|
|
113
225
|
current?.deps.push(obs.add(current));
|
|
@@ -118,24 +230,24 @@ var signal2 = (v, s, obs = /* @__PURE__ */ new Set()) => (s = {
|
|
|
118
230
|
return;
|
|
119
231
|
v = val;
|
|
120
232
|
for (let sub of obs)
|
|
121
|
-
sub(
|
|
233
|
+
batched ? batched.add(sub) : sub();
|
|
122
234
|
},
|
|
123
235
|
peek() {
|
|
124
236
|
return v;
|
|
125
237
|
}
|
|
126
238
|
}, s.toJSON = s.then = s.toString = s.valueOf = () => s.value, s);
|
|
127
|
-
var effect2 = (fn, teardown,
|
|
239
|
+
var effect2 = (fn, teardown, fx, deps) => (fx = (prev) => {
|
|
128
240
|
teardown?.call?.();
|
|
129
|
-
prev = current, current =
|
|
241
|
+
prev = current, current = fx;
|
|
130
242
|
try {
|
|
131
243
|
teardown = fn();
|
|
132
244
|
} finally {
|
|
133
245
|
current = prev;
|
|
134
246
|
}
|
|
135
|
-
}, deps =
|
|
247
|
+
}, deps = fx.deps = [], fx(), (dep) => {
|
|
136
248
|
teardown?.call?.();
|
|
137
249
|
while (dep = deps.pop())
|
|
138
|
-
dep.delete(
|
|
250
|
+
dep.delete(fx);
|
|
139
251
|
});
|
|
140
252
|
var computed2 = (fn, s = signal2(), c, e) => (c = {
|
|
141
253
|
get value() {
|
|
@@ -144,11 +256,25 @@ var computed2 = (fn, s = signal2(), c, e) => (c = {
|
|
|
144
256
|
},
|
|
145
257
|
peek: s.peek
|
|
146
258
|
}, c.toJSON = c.then = c.toString = c.valueOf = () => c.value, c);
|
|
147
|
-
var batch2 = (fn) =>
|
|
259
|
+
var batch2 = (fn) => {
|
|
260
|
+
let fxs = batched;
|
|
261
|
+
if (!fxs)
|
|
262
|
+
batched = /* @__PURE__ */ new Set();
|
|
263
|
+
try {
|
|
264
|
+
fn();
|
|
265
|
+
} finally {
|
|
266
|
+
if (!fxs) {
|
|
267
|
+
fxs = batched;
|
|
268
|
+
batched = null;
|
|
269
|
+
for (const fx of fxs)
|
|
270
|
+
fx();
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
};
|
|
148
274
|
var untracked2 = (fn, prev, v) => (prev = current, current = null, v = fn(), current = prev, v);
|
|
149
275
|
|
|
150
276
|
// node_modules/swapdom/deflate.js
|
|
151
|
-
var
|
|
277
|
+
var swap = (parent, a, b, end = null, { remove, insert } = swap) => {
|
|
152
278
|
let i = 0, cur, next, bi, bidx = new Set(b);
|
|
153
279
|
while (bi = a[i++])
|
|
154
280
|
!bidx.has(bi) ? remove(bi, parent) : cur = cur || bi;
|
|
@@ -165,51 +291,75 @@ var swap2 = (parent, a, b, end = null, { remove, insert } = swap2) => {
|
|
|
165
291
|
}
|
|
166
292
|
return b;
|
|
167
293
|
};
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
var deflate_default =
|
|
294
|
+
swap.insert = (a, b, parent) => parent.insertBefore(a, b);
|
|
295
|
+
swap.remove = (a, parent) => parent.removeChild(a);
|
|
296
|
+
var deflate_default = swap;
|
|
171
297
|
|
|
172
298
|
// directive/each.js
|
|
173
299
|
var _each = Symbol(":each");
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
(directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
|
|
177
|
-
const holder = tpl[_each] = document.createTextNode(""), parent = tpl.parentNode;
|
|
300
|
+
directive.each = (tpl, [itemVar, idxVar, evaluate], state) => {
|
|
301
|
+
const holder = tpl[_each] = document.createTextNode("");
|
|
178
302
|
tpl.replaceWith(holder);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (
|
|
199
|
-
|
|
200
|
-
else
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
303
|
+
let cur, keys2, prevl = 0;
|
|
304
|
+
const items = computed(() => {
|
|
305
|
+
keys2 = null;
|
|
306
|
+
let items2 = evaluate(state);
|
|
307
|
+
if (typeof items2 === "number")
|
|
308
|
+
items2 = Array.from({ length: items2 }, (_, i) => i + 1);
|
|
309
|
+
if (items2?.constructor === Object)
|
|
310
|
+
keys2 = Object.keys(items2), items2 = Object.values(items2);
|
|
311
|
+
return items2 || [];
|
|
312
|
+
});
|
|
313
|
+
const update = () => {
|
|
314
|
+
untracked(() => {
|
|
315
|
+
let i = 0, newItems = items.value, newl = newItems.length;
|
|
316
|
+
if (cur && !cur[_change]) {
|
|
317
|
+
for (let s of cur[_signals] || []) {
|
|
318
|
+
s[Symbol.dispose]();
|
|
319
|
+
}
|
|
320
|
+
cur = null, prevl = 0;
|
|
321
|
+
}
|
|
322
|
+
if (newl < prevl) {
|
|
323
|
+
cur.length = newl;
|
|
324
|
+
} else {
|
|
325
|
+
if (!cur) {
|
|
326
|
+
cur = newItems;
|
|
327
|
+
} else {
|
|
328
|
+
for (; i < prevl; i++) {
|
|
329
|
+
cur[i] = newItems[i];
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
for (; i < newl; i++) {
|
|
333
|
+
cur[i] = newItems[i];
|
|
334
|
+
let idx = i, scope = Object.create(state, {
|
|
335
|
+
[itemVar]: { get() {
|
|
336
|
+
return cur[idx];
|
|
337
|
+
} },
|
|
338
|
+
[idxVar]: { value: keys2 ? keys2[idx] : idx }
|
|
339
|
+
}), el = (tpl.content || tpl).cloneNode(true), els = tpl.content ? [...el.childNodes] : [el];
|
|
340
|
+
holder.before(el);
|
|
341
|
+
sprae(els, scope);
|
|
342
|
+
((cur[_signals] ||= [])[i] ||= {})[Symbol.dispose] = () => {
|
|
343
|
+
for (let el2 of els)
|
|
344
|
+
el2[Symbol.dispose](), el2.remove();
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
prevl = newl;
|
|
349
|
+
});
|
|
211
350
|
};
|
|
212
|
-
|
|
351
|
+
let planned = 0;
|
|
352
|
+
return effect(() => {
|
|
353
|
+
if (!cur)
|
|
354
|
+
items.value[_change]?.value;
|
|
355
|
+
if (!planned) {
|
|
356
|
+
update();
|
|
357
|
+
queueMicrotask(() => (planned && update(), planned = 0));
|
|
358
|
+
} else
|
|
359
|
+
planned++;
|
|
360
|
+
});
|
|
361
|
+
};
|
|
362
|
+
directive.each.parse = (expr, parse2) => {
|
|
213
363
|
let [leftSide, itemsExpr] = expr.split(/\s+in\s+/);
|
|
214
364
|
let [itemVar, idxVar = "$"] = leftSide.split(/\s*,\s*/);
|
|
215
365
|
return [itemVar, idxVar, parse2(itemsExpr)];
|
|
@@ -232,35 +382,35 @@ directive.if = (ifEl, evaluate, state) => {
|
|
|
232
382
|
next.remove(), elses = next.content ? [...next.content.childNodes] : [next];
|
|
233
383
|
} else
|
|
234
384
|
elses = none;
|
|
235
|
-
return () => {
|
|
236
|
-
const newEls = evaluate(state)
|
|
385
|
+
return effect(() => {
|
|
386
|
+
const newEls = evaluate(state) ? ifs : ifEl[_prevIf] ? none : elses;
|
|
237
387
|
if (next)
|
|
238
388
|
next[_prevIf] = newEls === ifs;
|
|
239
389
|
if (cur != newEls) {
|
|
240
390
|
if (cur[0]?.[_each])
|
|
241
391
|
cur = [cur[0][_each]];
|
|
242
|
-
swap(parent, cur, cur = newEls, holder);
|
|
243
392
|
for (let el of cur)
|
|
244
|
-
|
|
393
|
+
el.remove();
|
|
394
|
+
cur = newEls;
|
|
395
|
+
for (let el of cur)
|
|
396
|
+
parent.insertBefore(el, holder), sprae(el, state);
|
|
245
397
|
}
|
|
246
|
-
};
|
|
398
|
+
});
|
|
247
399
|
};
|
|
248
400
|
|
|
249
401
|
// directive/default.js
|
|
250
402
|
directive.default = (el, evaluate, state, name) => {
|
|
251
|
-
let evt = name.startsWith("on") && name.slice(2);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
attr(el, dashcase(key), ipol(value[key], state));
|
|
263
|
-
};
|
|
403
|
+
let evt = name.startsWith("on") && name.slice(2), off;
|
|
404
|
+
return effect(
|
|
405
|
+
evt ? () => (off?.(), off = on(el, evt, evaluate(state))) : () => {
|
|
406
|
+
let value = evaluate(state);
|
|
407
|
+
if (name)
|
|
408
|
+
attr(el, name, ipol(value, state));
|
|
409
|
+
else
|
|
410
|
+
for (let key in value)
|
|
411
|
+
attr(el, dashcase(key), ipol(value[key], state));
|
|
412
|
+
}
|
|
413
|
+
);
|
|
264
414
|
};
|
|
265
415
|
var on = (el, e, fn = () => {
|
|
266
416
|
}) => {
|
|
@@ -315,22 +465,22 @@ var mods = {
|
|
|
315
465
|
return true;
|
|
316
466
|
},
|
|
317
467
|
self: (ctx) => (e) => e.target === ctx.target,
|
|
318
|
-
ctrl: (_, ...param) => (e) =>
|
|
319
|
-
shift: (_, ...param) => (e) =>
|
|
320
|
-
alt: (_, ...param) => (e) =>
|
|
321
|
-
meta: (_, ...param) => (e) =>
|
|
322
|
-
arrow: () =>
|
|
323
|
-
enter: () =>
|
|
324
|
-
escape: () =>
|
|
325
|
-
tab: () =>
|
|
326
|
-
space: () =>
|
|
327
|
-
backspace: () =>
|
|
328
|
-
delete: () =>
|
|
329
|
-
digit: () =>
|
|
330
|
-
letter: () =>
|
|
331
|
-
character: () =>
|
|
468
|
+
ctrl: (_, ...param) => (e) => keys.ctrl(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
469
|
+
shift: (_, ...param) => (e) => keys.shift(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
470
|
+
alt: (_, ...param) => (e) => keys.alt(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
471
|
+
meta: (_, ...param) => (e) => keys.meta(e) && param.every((p) => keys[p] ? keys[p](e) : e.key === p),
|
|
472
|
+
arrow: () => keys.arrow,
|
|
473
|
+
enter: () => keys.enter,
|
|
474
|
+
escape: () => keys.escape,
|
|
475
|
+
tab: () => keys.tab,
|
|
476
|
+
space: () => keys.space,
|
|
477
|
+
backspace: () => keys.backspace,
|
|
478
|
+
delete: () => keys.delete,
|
|
479
|
+
digit: () => keys.digit,
|
|
480
|
+
letter: () => keys.letter,
|
|
481
|
+
character: () => keys.character
|
|
332
482
|
};
|
|
333
|
-
var
|
|
483
|
+
var keys = {
|
|
334
484
|
ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
|
|
335
485
|
shift: (e) => e.shiftKey || e.key === "Shift",
|
|
336
486
|
alt: (e) => e.altKey || e.key === "Alt",
|
|
@@ -382,24 +532,28 @@ var dashcase = (str) => {
|
|
|
382
532
|
return str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match) => "-" + match.toLowerCase());
|
|
383
533
|
};
|
|
384
534
|
var ipol = (v, state) => {
|
|
385
|
-
return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field]
|
|
535
|
+
return v?.replace ? v.replace(/\$<([^>]+)>/g, (match, field) => state[field] ?? "") : v;
|
|
386
536
|
};
|
|
387
537
|
|
|
388
538
|
// directive/ref.js
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
delete state[prev];
|
|
394
|
-
state[prev = ipol(expr, state)] = el;
|
|
395
|
-
};
|
|
396
|
-
}).parse = (expr) => expr;
|
|
539
|
+
directive.ref = (el, expr, state) => {
|
|
540
|
+
Object.defineProperty(state, ipol(expr, state), { value: el });
|
|
541
|
+
};
|
|
542
|
+
directive.ref.parse = (expr) => expr;
|
|
397
543
|
|
|
398
|
-
// directive/
|
|
399
|
-
directive.
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
544
|
+
// directive/with.js
|
|
545
|
+
directive.with = (el, evaluate, rootState) => {
|
|
546
|
+
let state, values;
|
|
547
|
+
return effect(() => {
|
|
548
|
+
values = evaluate(rootState);
|
|
549
|
+
Object.assign(state ||= sprae(
|
|
550
|
+
el,
|
|
551
|
+
store(
|
|
552
|
+
values,
|
|
553
|
+
Object.create(rootState[_signals])
|
|
554
|
+
)
|
|
555
|
+
), values);
|
|
556
|
+
});
|
|
403
557
|
};
|
|
404
558
|
|
|
405
559
|
// directive/html.js
|
|
@@ -416,25 +570,25 @@ directive.html = (el, evaluate, state) => {
|
|
|
416
570
|
directive.text = (el, evaluate, state) => {
|
|
417
571
|
if (el.content)
|
|
418
572
|
el.replaceWith(el = document.createTextNode(""));
|
|
419
|
-
return () => {
|
|
420
|
-
let value = evaluate(state)
|
|
573
|
+
return effect(() => {
|
|
574
|
+
let value = evaluate(state);
|
|
421
575
|
el.textContent = value == null ? "" : value;
|
|
422
|
-
};
|
|
576
|
+
});
|
|
423
577
|
};
|
|
424
578
|
|
|
425
579
|
// directive/class.js
|
|
426
580
|
directive.class = (el, evaluate, state) => {
|
|
427
581
|
let cur = /* @__PURE__ */ new Set();
|
|
428
|
-
return () => {
|
|
582
|
+
return effect(() => {
|
|
429
583
|
let v = evaluate(state);
|
|
430
584
|
let clsx = /* @__PURE__ */ new Set();
|
|
431
585
|
if (v) {
|
|
432
586
|
if (typeof v === "string")
|
|
433
|
-
ipol(v
|
|
587
|
+
ipol(v, state).split(" ").map((cls) => clsx.add(cls));
|
|
434
588
|
else if (Array.isArray(v))
|
|
435
|
-
v.map((v2) => (v2 = ipol(v2
|
|
589
|
+
v.map((v2) => (v2 = ipol(v2, state)) && clsx.add(v2));
|
|
436
590
|
else
|
|
437
|
-
Object.entries(v).map(([k, v2]) => v2
|
|
591
|
+
Object.entries(v).map(([k, v2]) => v2 && clsx.add(k));
|
|
438
592
|
}
|
|
439
593
|
for (let cls of cur)
|
|
440
594
|
if (clsx.has(cls))
|
|
@@ -443,7 +597,7 @@ directive.class = (el, evaluate, state) => {
|
|
|
443
597
|
el.classList.remove(cls);
|
|
444
598
|
for (let cls of cur = clsx)
|
|
445
599
|
el.classList.add(cls);
|
|
446
|
-
};
|
|
600
|
+
});
|
|
447
601
|
};
|
|
448
602
|
|
|
449
603
|
// directive/style.js
|
|
@@ -451,8 +605,8 @@ directive.style = (el, evaluate, state) => {
|
|
|
451
605
|
let initStyle = el.getAttribute("style") || "";
|
|
452
606
|
if (!initStyle.endsWith(";"))
|
|
453
607
|
initStyle += "; ";
|
|
454
|
-
return () => {
|
|
455
|
-
let v = evaluate(state)
|
|
608
|
+
return effect(() => {
|
|
609
|
+
let v = evaluate(state);
|
|
456
610
|
if (typeof v === "string")
|
|
457
611
|
el.setAttribute("style", initStyle + ipol(v, state));
|
|
458
612
|
else {
|
|
@@ -460,7 +614,7 @@ directive.style = (el, evaluate, state) => {
|
|
|
460
614
|
for (let k in v)
|
|
461
615
|
el.style.setProperty(k, ipol(v[k], state));
|
|
462
616
|
}
|
|
463
|
-
};
|
|
617
|
+
});
|
|
464
618
|
};
|
|
465
619
|
|
|
466
620
|
// directive/value.js
|
|
@@ -472,27 +626,19 @@ directive.value = (el, evaluate, state) => {
|
|
|
472
626
|
el.value = value;
|
|
473
627
|
el.selectedOptions[0]?.setAttribute("selected", "");
|
|
474
628
|
} : (value) => el.value = value;
|
|
475
|
-
return () => update(evaluate(state)
|
|
629
|
+
return effect(() => update(evaluate(state)));
|
|
476
630
|
};
|
|
477
631
|
|
|
478
632
|
// directive/fx.js
|
|
479
633
|
directive.fx = (el, evaluate, state) => {
|
|
480
|
-
return () => evaluate(state);
|
|
634
|
+
return effect(() => evaluate(state));
|
|
481
635
|
};
|
|
482
636
|
|
|
483
637
|
// sprae.js
|
|
484
|
-
sprae.use(
|
|
638
|
+
sprae.use(ulive_es_exports);
|
|
485
639
|
sprae.use({ compile: (expr) => sprae.constructor(`__scope`, `with (__scope) { return ${expr} };`) });
|
|
486
640
|
sprae.use({ swap: deflate_default });
|
|
487
641
|
var sprae_default = sprae;
|
|
488
642
|
export {
|
|
489
|
-
|
|
490
|
-
compile,
|
|
491
|
-
computed,
|
|
492
|
-
sprae_default as default,
|
|
493
|
-
directive,
|
|
494
|
-
effect,
|
|
495
|
-
signal,
|
|
496
|
-
swap,
|
|
497
|
-
untracked
|
|
643
|
+
sprae_default as default
|
|
498
644
|
};
|