olova-router 1.0.17 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +13 -409
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,381 +1,7 @@
|
|
|
1
|
+
import { state, effect } from 'olova/core';
|
|
1
2
|
import { defineComponent, hasContext, getContext, setContext } from 'olova/runtime';
|
|
2
3
|
|
|
3
|
-
//
|
|
4
|
-
var i = /* @__PURE__ */ Symbol.for("preact-signals");
|
|
5
|
-
function t() {
|
|
6
|
-
if (e > 1) {
|
|
7
|
-
e--;
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
let i2, t2 = false;
|
|
11
|
-
!(function() {
|
|
12
|
-
let i3 = r;
|
|
13
|
-
r = void 0;
|
|
14
|
-
while (void 0 !== i3) {
|
|
15
|
-
if (i3.S.v === i3.v) i3.S.i = i3.i;
|
|
16
|
-
i3 = i3.o;
|
|
17
|
-
}
|
|
18
|
-
})();
|
|
19
|
-
while (void 0 !== s) {
|
|
20
|
-
let n = s;
|
|
21
|
-
s = void 0;
|
|
22
|
-
u++;
|
|
23
|
-
while (void 0 !== n) {
|
|
24
|
-
const o2 = n.u;
|
|
25
|
-
n.u = void 0;
|
|
26
|
-
n.f &= -3;
|
|
27
|
-
if (!(8 & n.f) && w(n)) try {
|
|
28
|
-
n.c();
|
|
29
|
-
} catch (n2) {
|
|
30
|
-
if (!t2) {
|
|
31
|
-
i2 = n2;
|
|
32
|
-
t2 = true;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
n = o2;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
u = 0;
|
|
39
|
-
e--;
|
|
40
|
-
if (t2) throw i2;
|
|
41
|
-
}
|
|
42
|
-
var o;
|
|
43
|
-
var s;
|
|
44
|
-
function h(i2) {
|
|
45
|
-
const t2 = o;
|
|
46
|
-
o = void 0;
|
|
47
|
-
try {
|
|
48
|
-
return i2();
|
|
49
|
-
} finally {
|
|
50
|
-
o = t2;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
var r;
|
|
54
|
-
var e = 0;
|
|
55
|
-
var u = 0;
|
|
56
|
-
var v = 0;
|
|
57
|
-
var d = 0;
|
|
58
|
-
function l(i2) {
|
|
59
|
-
if (void 0 === o) return;
|
|
60
|
-
let t2 = i2.n;
|
|
61
|
-
if (void 0 === t2 || t2.t !== o) {
|
|
62
|
-
t2 = { i: 0, S: i2, p: o.s, n: void 0, t: o, e: void 0, x: void 0, r: t2 };
|
|
63
|
-
if (void 0 !== o.s) o.s.n = t2;
|
|
64
|
-
o.s = t2;
|
|
65
|
-
i2.n = t2;
|
|
66
|
-
if (32 & o.f) i2.S(t2);
|
|
67
|
-
return t2;
|
|
68
|
-
} else if (-1 === t2.i) {
|
|
69
|
-
t2.i = 0;
|
|
70
|
-
if (void 0 !== t2.n) {
|
|
71
|
-
t2.n.p = t2.p;
|
|
72
|
-
if (void 0 !== t2.p) t2.p.n = t2.n;
|
|
73
|
-
t2.p = o.s;
|
|
74
|
-
t2.n = void 0;
|
|
75
|
-
o.s.n = t2;
|
|
76
|
-
o.s = t2;
|
|
77
|
-
}
|
|
78
|
-
return t2;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function y(i2, t2) {
|
|
82
|
-
this.v = i2;
|
|
83
|
-
this.i = 0;
|
|
84
|
-
this.n = void 0;
|
|
85
|
-
this.t = void 0;
|
|
86
|
-
this.l = 0;
|
|
87
|
-
this.W = null == t2 ? void 0 : t2.watched;
|
|
88
|
-
this.Z = null == t2 ? void 0 : t2.unwatched;
|
|
89
|
-
this.name = null == t2 ? void 0 : t2.name;
|
|
90
|
-
}
|
|
91
|
-
y.prototype.brand = i;
|
|
92
|
-
y.prototype.h = function() {
|
|
93
|
-
return true;
|
|
94
|
-
};
|
|
95
|
-
y.prototype.S = function(i2) {
|
|
96
|
-
const t2 = this.t;
|
|
97
|
-
if (t2 !== i2 && void 0 === i2.e) {
|
|
98
|
-
i2.x = t2;
|
|
99
|
-
this.t = i2;
|
|
100
|
-
if (void 0 !== t2) t2.e = i2;
|
|
101
|
-
else h(() => {
|
|
102
|
-
var i3;
|
|
103
|
-
null == (i3 = this.W) || i3.call(this);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
y.prototype.U = function(i2) {
|
|
108
|
-
if (void 0 !== this.t) {
|
|
109
|
-
const t2 = i2.e, n = i2.x;
|
|
110
|
-
if (void 0 !== t2) {
|
|
111
|
-
t2.x = n;
|
|
112
|
-
i2.e = void 0;
|
|
113
|
-
}
|
|
114
|
-
if (void 0 !== n) {
|
|
115
|
-
n.e = t2;
|
|
116
|
-
i2.x = void 0;
|
|
117
|
-
}
|
|
118
|
-
if (i2 === this.t) {
|
|
119
|
-
this.t = n;
|
|
120
|
-
if (void 0 === n) h(() => {
|
|
121
|
-
var i3;
|
|
122
|
-
null == (i3 = this.Z) || i3.call(this);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
y.prototype.subscribe = function(i2) {
|
|
128
|
-
return C(() => {
|
|
129
|
-
const t2 = this.value, n = o;
|
|
130
|
-
o = void 0;
|
|
131
|
-
try {
|
|
132
|
-
i2(t2);
|
|
133
|
-
} finally {
|
|
134
|
-
o = n;
|
|
135
|
-
}
|
|
136
|
-
}, { name: "sub" });
|
|
137
|
-
};
|
|
138
|
-
y.prototype.valueOf = function() {
|
|
139
|
-
return this.value;
|
|
140
|
-
};
|
|
141
|
-
y.prototype.toString = function() {
|
|
142
|
-
return this.value + "";
|
|
143
|
-
};
|
|
144
|
-
y.prototype.toJSON = function() {
|
|
145
|
-
return this.value;
|
|
146
|
-
};
|
|
147
|
-
y.prototype.peek = function() {
|
|
148
|
-
const i2 = o;
|
|
149
|
-
o = void 0;
|
|
150
|
-
try {
|
|
151
|
-
return this.value;
|
|
152
|
-
} finally {
|
|
153
|
-
o = i2;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
Object.defineProperty(y.prototype, "value", { get() {
|
|
157
|
-
const i2 = l(this);
|
|
158
|
-
if (void 0 !== i2) i2.i = this.i;
|
|
159
|
-
return this.v;
|
|
160
|
-
}, set(i2) {
|
|
161
|
-
if (i2 !== this.v) {
|
|
162
|
-
if (u > 100) throw new Error("Cycle detected");
|
|
163
|
-
!(function(i3) {
|
|
164
|
-
if (0 !== e && 0 === u) {
|
|
165
|
-
if (i3.l !== v) {
|
|
166
|
-
i3.l = v;
|
|
167
|
-
r = { S: i3, v: i3.v, i: i3.i, o: r };
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
})(this);
|
|
171
|
-
this.v = i2;
|
|
172
|
-
this.i++;
|
|
173
|
-
d++;
|
|
174
|
-
e++;
|
|
175
|
-
try {
|
|
176
|
-
for (let i3 = this.t; void 0 !== i3; i3 = i3.x) i3.t.N();
|
|
177
|
-
} finally {
|
|
178
|
-
t();
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
} });
|
|
182
|
-
function a(i2, t2) {
|
|
183
|
-
return new y(i2, t2);
|
|
184
|
-
}
|
|
185
|
-
function w(i2) {
|
|
186
|
-
for (let t2 = i2.s; void 0 !== t2; t2 = t2.n) if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i) return true;
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
function _(i2) {
|
|
190
|
-
for (let t2 = i2.s; void 0 !== t2; t2 = t2.n) {
|
|
191
|
-
const n = t2.S.n;
|
|
192
|
-
if (void 0 !== n) t2.r = n;
|
|
193
|
-
t2.S.n = t2;
|
|
194
|
-
t2.i = -1;
|
|
195
|
-
if (void 0 === t2.n) {
|
|
196
|
-
i2.s = t2;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
function b(i2) {
|
|
202
|
-
let t2, n = i2.s;
|
|
203
|
-
while (void 0 !== n) {
|
|
204
|
-
const i3 = n.p;
|
|
205
|
-
if (-1 === n.i) {
|
|
206
|
-
n.S.U(n);
|
|
207
|
-
if (void 0 !== i3) i3.n = n.n;
|
|
208
|
-
if (void 0 !== n.n) n.n.p = i3;
|
|
209
|
-
} else t2 = n;
|
|
210
|
-
n.S.n = n.r;
|
|
211
|
-
if (void 0 !== n.r) n.r = void 0;
|
|
212
|
-
n = i3;
|
|
213
|
-
}
|
|
214
|
-
i2.s = t2;
|
|
215
|
-
}
|
|
216
|
-
function p(i2, t2) {
|
|
217
|
-
y.call(this, void 0);
|
|
218
|
-
this.x = i2;
|
|
219
|
-
this.s = void 0;
|
|
220
|
-
this.g = d - 1;
|
|
221
|
-
this.f = 4;
|
|
222
|
-
this.W = null == t2 ? void 0 : t2.watched;
|
|
223
|
-
this.Z = null == t2 ? void 0 : t2.unwatched;
|
|
224
|
-
this.name = null == t2 ? void 0 : t2.name;
|
|
225
|
-
}
|
|
226
|
-
p.prototype = new y();
|
|
227
|
-
p.prototype.h = function() {
|
|
228
|
-
this.f &= -3;
|
|
229
|
-
if (1 & this.f) return false;
|
|
230
|
-
if (32 == (36 & this.f)) return true;
|
|
231
|
-
this.f &= -5;
|
|
232
|
-
if (this.g === d) return true;
|
|
233
|
-
this.g = d;
|
|
234
|
-
this.f |= 1;
|
|
235
|
-
if (this.i > 0 && !w(this)) {
|
|
236
|
-
this.f &= -2;
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
const i2 = o;
|
|
240
|
-
try {
|
|
241
|
-
_(this);
|
|
242
|
-
o = this;
|
|
243
|
-
const i3 = this.x();
|
|
244
|
-
if (16 & this.f || this.v !== i3 || 0 === this.i) {
|
|
245
|
-
this.v = i3;
|
|
246
|
-
this.f &= -17;
|
|
247
|
-
this.i++;
|
|
248
|
-
}
|
|
249
|
-
} catch (i3) {
|
|
250
|
-
this.v = i3;
|
|
251
|
-
this.f |= 16;
|
|
252
|
-
this.i++;
|
|
253
|
-
}
|
|
254
|
-
o = i2;
|
|
255
|
-
b(this);
|
|
256
|
-
this.f &= -2;
|
|
257
|
-
return true;
|
|
258
|
-
};
|
|
259
|
-
p.prototype.S = function(i2) {
|
|
260
|
-
if (void 0 === this.t) {
|
|
261
|
-
this.f |= 36;
|
|
262
|
-
for (let i3 = this.s; void 0 !== i3; i3 = i3.n) i3.S.S(i3);
|
|
263
|
-
}
|
|
264
|
-
y.prototype.S.call(this, i2);
|
|
265
|
-
};
|
|
266
|
-
p.prototype.U = function(i2) {
|
|
267
|
-
if (void 0 !== this.t) {
|
|
268
|
-
y.prototype.U.call(this, i2);
|
|
269
|
-
if (void 0 === this.t) {
|
|
270
|
-
this.f &= -33;
|
|
271
|
-
for (let i3 = this.s; void 0 !== i3; i3 = i3.n) i3.S.U(i3);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
};
|
|
275
|
-
p.prototype.N = function() {
|
|
276
|
-
if (!(2 & this.f)) {
|
|
277
|
-
this.f |= 6;
|
|
278
|
-
for (let i2 = this.t; void 0 !== i2; i2 = i2.x) i2.t.N();
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
Object.defineProperty(p.prototype, "value", { get() {
|
|
282
|
-
if (1 & this.f) throw new Error("Cycle detected");
|
|
283
|
-
const i2 = l(this);
|
|
284
|
-
this.h();
|
|
285
|
-
if (void 0 !== i2) i2.i = this.i;
|
|
286
|
-
if (16 & this.f) throw this.v;
|
|
287
|
-
return this.v;
|
|
288
|
-
} });
|
|
289
|
-
function S(i2) {
|
|
290
|
-
const n = i2.m;
|
|
291
|
-
i2.m = void 0;
|
|
292
|
-
if ("function" == typeof n) {
|
|
293
|
-
e++;
|
|
294
|
-
const s2 = o;
|
|
295
|
-
o = void 0;
|
|
296
|
-
try {
|
|
297
|
-
n();
|
|
298
|
-
} catch (t2) {
|
|
299
|
-
i2.f &= -2;
|
|
300
|
-
i2.f |= 8;
|
|
301
|
-
m(i2);
|
|
302
|
-
throw t2;
|
|
303
|
-
} finally {
|
|
304
|
-
o = s2;
|
|
305
|
-
t();
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
function m(i2) {
|
|
310
|
-
for (let t2 = i2.s; void 0 !== t2; t2 = t2.n) t2.S.U(t2);
|
|
311
|
-
i2.x = void 0;
|
|
312
|
-
i2.s = void 0;
|
|
313
|
-
S(i2);
|
|
314
|
-
}
|
|
315
|
-
function x(i2) {
|
|
316
|
-
if (o !== this) throw new Error("Out-of-order effect");
|
|
317
|
-
b(this);
|
|
318
|
-
o = i2;
|
|
319
|
-
this.f &= -2;
|
|
320
|
-
if (8 & this.f) m(this);
|
|
321
|
-
t();
|
|
322
|
-
}
|
|
323
|
-
function E(i2, t2) {
|
|
324
|
-
this.x = i2;
|
|
325
|
-
this.m = void 0;
|
|
326
|
-
this.s = void 0;
|
|
327
|
-
this.u = void 0;
|
|
328
|
-
this.f = 32;
|
|
329
|
-
this.name = null == t2 ? void 0 : t2.name;
|
|
330
|
-
}
|
|
331
|
-
E.prototype.c = function() {
|
|
332
|
-
const i2 = this.S();
|
|
333
|
-
try {
|
|
334
|
-
if (8 & this.f) return;
|
|
335
|
-
if (void 0 === this.x) return;
|
|
336
|
-
const t2 = this.x();
|
|
337
|
-
if ("function" == typeof t2) this.m = t2;
|
|
338
|
-
} finally {
|
|
339
|
-
i2();
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
E.prototype.S = function() {
|
|
343
|
-
if (1 & this.f) throw new Error("Cycle detected");
|
|
344
|
-
this.f |= 1;
|
|
345
|
-
this.f &= -9;
|
|
346
|
-
S(this);
|
|
347
|
-
_(this);
|
|
348
|
-
e++;
|
|
349
|
-
const i2 = o;
|
|
350
|
-
o = this;
|
|
351
|
-
return x.bind(this, i2);
|
|
352
|
-
};
|
|
353
|
-
E.prototype.N = function() {
|
|
354
|
-
if (!(2 & this.f)) {
|
|
355
|
-
this.f |= 2;
|
|
356
|
-
this.u = s;
|
|
357
|
-
s = this;
|
|
358
|
-
}
|
|
359
|
-
};
|
|
360
|
-
E.prototype.d = function() {
|
|
361
|
-
this.f |= 8;
|
|
362
|
-
if (!(1 & this.f)) m(this);
|
|
363
|
-
};
|
|
364
|
-
E.prototype.dispose = function() {
|
|
365
|
-
this.d();
|
|
366
|
-
};
|
|
367
|
-
function C(i2, t2) {
|
|
368
|
-
const n = new E(i2, t2);
|
|
369
|
-
try {
|
|
370
|
-
n.c();
|
|
371
|
-
} catch (i3) {
|
|
372
|
-
n.d();
|
|
373
|
-
throw i3;
|
|
374
|
-
}
|
|
375
|
-
const o2 = n.d.bind(n);
|
|
376
|
-
o2[Symbol.dispose] = o2;
|
|
377
|
-
return o2;
|
|
378
|
-
}
|
|
4
|
+
// src/index.ts
|
|
379
5
|
function toBoolean(value, fallback = false) {
|
|
380
6
|
return typeof value === "boolean" ? value : fallback;
|
|
381
7
|
}
|
|
@@ -387,13 +13,8 @@ var Link = defineComponent((incomingProps) => {
|
|
|
387
13
|
const destination = () => props.to || (props.name ? { name: props.name, params: props.params, query: props.query, hash: props.hash } : { path: props.href ?? "/", params: props.params, query: props.query, hash: props.hash });
|
|
388
14
|
const isActive = () => isActiveHref(destination(), { exact: toBoolean(props.exact) });
|
|
389
15
|
const linkClass = () => [toStringValue(props.class), isActive() ? toStringValue(props.activeClass) : toStringValue(props.inactiveClass)].filter(Boolean).join(" ");
|
|
390
|
-
const handleClick = (event) => {
|
|
391
|
-
link(event, {
|
|
392
|
-
replace: toBoolean(props.replace),
|
|
393
|
-
scroll: typeof props.scroll === "boolean" ? props.scroll : void 0
|
|
394
|
-
});
|
|
395
|
-
};
|
|
396
16
|
return {
|
|
17
|
+
template: '<a href="__O_ATTR_href__" class="__O_ATTR_class__" id="__O_ATTR_id__" title="__O_ATTR_title__" target="__O_ATTR_target__" rel="__O_ATTR_rel__" aria-current="__O_ATTR_current__">__O_SLOT_slot__</a>',
|
|
397
18
|
textBindings: [],
|
|
398
19
|
htmlBindings: [],
|
|
399
20
|
attrBindings: [
|
|
@@ -405,30 +26,9 @@ var Link = defineComponent((incomingProps) => {
|
|
|
405
26
|
{ id: "rel", attr: "rel", get: () => props.rel ?? null },
|
|
406
27
|
{ id: "current", attr: "aria-current", get: () => isActive() ? "page" : null }
|
|
407
28
|
],
|
|
408
|
-
eventBindings: [
|
|
29
|
+
eventBindings: [],
|
|
409
30
|
slotBindings: [{ id: "slot", name: "default" }],
|
|
410
|
-
componentBindings: []
|
|
411
|
-
build: () => {
|
|
412
|
-
const fragment = document.createDocumentFragment();
|
|
413
|
-
const anchor = document.createElement("a");
|
|
414
|
-
const slotMarker = document.createTextNode("");
|
|
415
|
-
anchor.appendChild(slotMarker);
|
|
416
|
-
fragment.appendChild(anchor);
|
|
417
|
-
return {
|
|
418
|
-
fragment,
|
|
419
|
-
nodes: {
|
|
420
|
-
href: anchor,
|
|
421
|
-
class: anchor,
|
|
422
|
-
id: anchor,
|
|
423
|
-
title: anchor,
|
|
424
|
-
target: anchor,
|
|
425
|
-
rel: anchor,
|
|
426
|
-
current: anchor,
|
|
427
|
-
click: anchor,
|
|
428
|
-
slot: slotMarker
|
|
429
|
-
}
|
|
430
|
-
};
|
|
431
|
-
}
|
|
31
|
+
componentBindings: []
|
|
432
32
|
};
|
|
433
33
|
});
|
|
434
34
|
var Link_default = Link;
|
|
@@ -952,10 +552,14 @@ function shouldIgnoreClick(event, anchor) {
|
|
|
952
552
|
}
|
|
953
553
|
function resolveAnchor(event) {
|
|
954
554
|
const target = event.target;
|
|
955
|
-
if (!(target instanceof
|
|
555
|
+
if (!(target instanceof Node)) {
|
|
556
|
+
return null;
|
|
557
|
+
}
|
|
558
|
+
const element = target instanceof Element ? target : target.parentElement;
|
|
559
|
+
if (!element) {
|
|
956
560
|
return null;
|
|
957
561
|
}
|
|
958
|
-
return
|
|
562
|
+
return element.closest("a[href]");
|
|
959
563
|
}
|
|
960
564
|
function runNavigation(to, options = {}) {
|
|
961
565
|
if (!activeRouter || typeof window === "undefined") {
|
|
@@ -1054,7 +658,7 @@ var Router = defineComponent((incomingProps) => {
|
|
|
1054
658
|
const props = incomingProps;
|
|
1055
659
|
const base = normalizeBase(props.base);
|
|
1056
660
|
const config = buildRouteConfig(props.routes ?? {});
|
|
1057
|
-
const currentVersion =
|
|
661
|
+
const currentVersion = state(0);
|
|
1058
662
|
let currentRoute = {
|
|
1059
663
|
mode: "history",
|
|
1060
664
|
location: EMPTY_LOCATION,
|
|
@@ -1161,7 +765,7 @@ var Router = defineComponent((incomingProps) => {
|
|
|
1161
765
|
activeRouter = api;
|
|
1162
766
|
if (typeof window !== "undefined") {
|
|
1163
767
|
syncFromWindow(false);
|
|
1164
|
-
|
|
768
|
+
effect(() => {
|
|
1165
769
|
const handleChange = () => syncFromWindow(false);
|
|
1166
770
|
const handleClick = (event) => {
|
|
1167
771
|
if (!(event instanceof MouseEvent)) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/@preact/signals-core/src/index.ts","../src/Link.ts","../src/index.ts"],"names":["BRAND_SYMBOL","Symbol","for","endBatch","batchDepth","error","hasError","snapshots","batchSnapshots","_source","_value","_version","_next","reconcileBatchSnapshots","batchedEffect","effect","batchIteration","next","_nextBatchedEffect","_flags","needsToRecompute","_callback","err","evalContext","untracked","fn","prevContext","currentBatchSnapshotVersion","globalVersion","addDependency","signal","node","_node","_target","_prevSource","_sources","_nextSource","_prevTarget","_nextTarget","_rollbackNode","_subscribe","Signal","value","options","this","_targets","_batchSnapshotVersion","_watched","watched","_unwatched","unwatched","name","prototype","brand","_refresh","targets","_this$_watched","call","_unsubscribe","prev","_this$_unwatched","subscribe","valueOf","toString","toJSON","peek","Object","defineProperty","get","set","Error","source","_notify","target","prepareSources","rollbackNode","cleanupSources","head","Computed","undefined","_fn","_globalVersion","OUTDATED","cleanupEffect","cleanup","_cleanup","disposeEffect","endEffect","Effect","finish","_start","bind","_dispose","dispose","defineComponent","event"],"mappings":"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","file":"index.js","sourcesContent":["// An named symbol/brand for detecting Signal instances even when they weren't\n// created using the same signals library version.\nconst BRAND_SYMBOL = Symbol.for(\"preact-signals\");\n\n// Flags for Computed and Effect.\nconst RUNNING = 1 << 0;\nconst NOTIFIED = 1 << 1;\nconst OUTDATED = 1 << 2;\nconst DISPOSED = 1 << 3;\nconst HAS_ERROR = 1 << 4;\nconst TRACKING = 1 << 5;\n\n// A linked list node used to track dependencies (sources) and dependents (targets).\n// Also used to remember the source's last version number that the target saw.\ntype Node = {\n\t// A source whose value the target depends on.\n\t_source: Signal;\n\t_prevSource?: Node;\n\t_nextSource?: Node;\n\n\t// A target that depends on the source and should be notified when the source changes.\n\t_target: Computed | Effect;\n\t_prevTarget?: Node;\n\t_nextTarget?: Node;\n\n\t// The version number of the source that target has last seen. We use version numbers\n\t// instead of storing the source value, because source values can take arbitrary amount\n\t// of memory, and computeds could hang on to them forever because they're lazily evaluated.\n\t// Use the special value -1 to mark potentially unused but recyclable nodes.\n\t_version: number;\n\n\t// Used to remember & roll back the source's previous `._node` value when entering &\n\t// exiting a new evaluation context.\n\t_rollbackNode?: Node;\n};\n\nfunction startBatch() {\n\tbatchDepth++;\n}\n\nfunction endBatch() {\n\tif (batchDepth > 1) {\n\t\tbatchDepth--;\n\t\treturn;\n\t}\n\n\tlet error: unknown;\n\tlet hasError = false;\n\treconcileBatchSnapshots();\n\n\twhile (batchedEffect !== undefined) {\n\t\tlet effect: Effect | undefined = batchedEffect;\n\t\tbatchedEffect = undefined;\n\n\t\tbatchIteration++;\n\n\t\twhile (effect !== undefined) {\n\t\t\tconst next: Effect | undefined = effect._nextBatchedEffect;\n\t\t\teffect._nextBatchedEffect = undefined;\n\t\t\teffect._flags &= ~NOTIFIED;\n\n\t\t\tif (!(effect._flags & DISPOSED) && needsToRecompute(effect)) {\n\t\t\t\ttry {\n\t\t\t\t\teffect._callback();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!hasError) {\n\t\t\t\t\t\terror = err;\n\t\t\t\t\t\thasError = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\teffect = next;\n\t\t}\n\t}\n\tbatchIteration = 0;\n\tbatchDepth--;\n\n\tif (hasError) {\n\t\tthrow error;\n\t}\n}\n\n/**\n * Combine multiple value updates into one \"commit\" at the end of the provided callback.\n *\n * Batches can be nested and changes are only flushed once the outermost batch callback\n * completes.\n *\n * Accessing a signal that has been modified within a batch will reflect its updated\n * value.\n *\n * @param fn The callback function.\n * @returns The value returned by the callback.\n */\nfunction batch<T>(fn: () => T): T {\n\tif (batchDepth > 0) {\n\t\treturn fn();\n\t}\n\tcurrentBatchSnapshotVersion = ++batchSnapshotVersion;\n\t/*@__INLINE__**/ startBatch();\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tendBatch();\n\t}\n}\n\n// Currently evaluated computed or effect.\nlet evalContext: Computed | Effect | undefined = undefined;\n\n/**\n * Run a callback function that can access signal values without\n * subscribing to the signal updates.\n *\n * @param fn The callback function.\n * @returns The value returned by the callback.\n */\nfunction untracked<T>(fn: () => T): T {\n\tconst prevContext = evalContext;\n\tevalContext = undefined;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tevalContext = prevContext;\n\t}\n}\n\n// Effects collected into a batch.\nlet batchedEffect: Effect | undefined = undefined;\nlet batchDepth = 0;\nlet batchIteration = 0;\n\ntype BatchSnapshot = {\n\t_source: Signal;\n\t_value: unknown;\n\t_version: number;\n\t_next?: BatchSnapshot;\n};\n\nlet batchSnapshotVersion = 0;\nlet currentBatchSnapshotVersion = 0;\nlet batchSnapshots: BatchSnapshot | undefined = undefined;\n\n// A global version number for signals, used for fast-pathing repeated\n// computed.peek()/computed.value calls when nothing has changed globally.\nlet globalVersion = 0;\n\nfunction recordBatchSnapshot(source: Signal) {\n\t// Only capture writes during the user-visible batch callback, not during effect flush.\n\tif (batchDepth === 0 || batchIteration !== 0) {\n\t\treturn;\n\t}\n\n\tif (source._batchSnapshotVersion !== currentBatchSnapshotVersion) {\n\t\tsource._batchSnapshotVersion = currentBatchSnapshotVersion;\n\t\tbatchSnapshots = {\n\t\t\t_source: source,\n\t\t\t_value: source._value,\n\t\t\t_version: source._version,\n\t\t\t_next: batchSnapshots,\n\t\t};\n\t}\n}\n\nfunction reconcileBatchSnapshots() {\n\tlet snapshots = batchSnapshots;\n\tbatchSnapshots = undefined;\n\n\twhile (snapshots !== undefined) {\n\t\tif (snapshots._source._value === snapshots._value) {\n\t\t\tsnapshots._source._version = snapshots._version;\n\t\t}\n\t\tsnapshots = snapshots._next;\n\t}\n}\n\nfunction addDependency(signal: Signal): Node | undefined {\n\tif (evalContext === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet node = signal._node;\n\tif (node === undefined || node._target !== evalContext) {\n\t\t/**\n\t\t * `signal` is a new dependency. Create a new dependency node, and set it\n\t\t * as the tail of the current context's dependency list. e.g:\n\t\t *\n\t\t * { A <-> B }\n\t\t * ↑ ↑\n\t\t * tail node (new)\n\t\t * ↓\n\t\t * { A <-> B <-> C }\n\t\t * ↑\n\t\t * tail (evalContext._sources)\n\t\t */\n\t\tnode = {\n\t\t\t_version: 0,\n\t\t\t_source: signal,\n\t\t\t_prevSource: evalContext._sources,\n\t\t\t_nextSource: undefined,\n\t\t\t_target: evalContext,\n\t\t\t_prevTarget: undefined,\n\t\t\t_nextTarget: undefined,\n\t\t\t_rollbackNode: node,\n\t\t};\n\n\t\tif (evalContext._sources !== undefined) {\n\t\t\tevalContext._sources._nextSource = node;\n\t\t}\n\t\tevalContext._sources = node;\n\t\tsignal._node = node;\n\n\t\t// Subscribe to change notifications from this dependency if we're in an effect\n\t\t// OR evaluating a computed signal that in turn has subscribers.\n\t\tif (evalContext._flags & TRACKING) {\n\t\t\tsignal._subscribe(node);\n\t\t}\n\t\treturn node;\n\t} else if (node._version === -1) {\n\t\t// `signal` is an existing dependency from a previous evaluation. Reuse it.\n\t\tnode._version = 0;\n\n\t\t/**\n\t\t * If `node` is not already the current tail of the dependency list (i.e.\n\t\t * there is a next node in the list), then make the `node` the new tail. e.g:\n\t\t *\n\t\t * { A <-> B <-> C <-> D }\n\t\t * ↑ ↑\n\t\t * node ┌─── tail (evalContext._sources)\n\t\t * └─────│─────┐\n\t\t * ↓ ↓\n\t\t * { A <-> C <-> D <-> B }\n\t\t * ↑\n\t\t * tail (evalContext._sources)\n\t\t */\n\t\tif (node._nextSource !== undefined) {\n\t\t\tnode._nextSource._prevSource = node._prevSource;\n\n\t\t\tif (node._prevSource !== undefined) {\n\t\t\t\tnode._prevSource._nextSource = node._nextSource;\n\t\t\t}\n\n\t\t\tnode._prevSource = evalContext._sources;\n\t\t\tnode._nextSource = undefined;\n\n\t\t\tevalContext._sources!._nextSource = node;\n\t\t\tevalContext._sources = node;\n\t\t}\n\n\t\t// We can assume that the currently evaluated effect / computed signal is already\n\t\t// subscribed to change notifications from `signal` if needed.\n\t\treturn node;\n\t}\n\treturn undefined;\n}\n\n//#region Signal\n\n/**\n * The base class for plain and computed signals.\n */\n//\n// A function with the same name is defined later, so we need to ignore TypeScript's\n// warning about a redeclared variable.\n//\n// The class is declared here, but later implemented with ES5-style prototypes.\n// This enables better control of the transpiled output size.\n// @ts-ignore: \"Cannot redeclare exported variable 'Signal'.\"\ndeclare class Signal<T = any> {\n\t/** @internal */\n\t_value: unknown;\n\n\t/**\n\t * @internal\n\t * Version numbers should always be >= 0, because the special value -1 is used\n\t * by Nodes to signify potentially unused but recyclable nodes.\n\t */\n\t_version: number;\n\n\t/** @internal */\n\t_node?: Node;\n\n\t/** @internal */\n\t_targets?: Node;\n\n\t/** @internal */\n\t_batchSnapshotVersion: number;\n\n\tconstructor(value?: T, options?: SignalOptions<T>);\n\n\t/** @internal */\n\t_refresh(): boolean;\n\n\t/** @internal */\n\t_subscribe(node: Node): void;\n\n\t/** @internal */\n\t_unsubscribe(node: Node): void;\n\n\t/** @internal */\n\t_watched?(this: Signal<T>): void;\n\n\t/** @internal */\n\t_unwatched?(this: Signal<T>): void;\n\n\tsubscribe(fn: (value: T) => void): () => void;\n\n\tname?: string;\n\n\tvalueOf(): T;\n\n\ttoString(): string;\n\n\ttoJSON(): T;\n\n\tpeek(): T;\n\n\tbrand: typeof BRAND_SYMBOL;\n\n\tget value(): T;\n\tset value(value: T);\n}\n\nexport interface SignalOptions<T = any> {\n\twatched?: (this: Signal<T>) => void;\n\tunwatched?: (this: Signal<T>) => void;\n\tname?: string;\n}\n\n/** @internal */\n// A class with the same name has already been declared, so we need to ignore\n// TypeScript's warning about a redeclared variable.\n//\n// The previously declared class is implemented here with ES5-style prototypes.\n// This enables better control of the transpiled output size.\n// @ts-ignore: \"Cannot redeclare exported variable 'Signal'.\"\nfunction Signal(this: Signal, value?: unknown, options?: SignalOptions) {\n\tthis._value = value;\n\tthis._version = 0;\n\tthis._node = undefined;\n\tthis._targets = undefined;\n\tthis._batchSnapshotVersion = 0;\n\tthis._watched = options?.watched;\n\tthis._unwatched = options?.unwatched;\n\tthis.name = options?.name;\n}\n\nSignal.prototype.brand = BRAND_SYMBOL;\n\nSignal.prototype._refresh = function () {\n\treturn true;\n};\n\nSignal.prototype._subscribe = function (node) {\n\tconst targets = this._targets;\n\tif (targets !== node && node._prevTarget === undefined) {\n\t\tnode._nextTarget = targets;\n\t\tthis._targets = node;\n\n\t\tif (targets !== undefined) {\n\t\t\ttargets._prevTarget = node;\n\t\t} else {\n\t\t\tuntracked(() => {\n\t\t\t\tthis._watched?.call(this);\n\t\t\t});\n\t\t}\n\t}\n};\n\nSignal.prototype._unsubscribe = function (node) {\n\t// Only run the unsubscribe step if the signal has any subscribers to begin with.\n\tif (this._targets !== undefined) {\n\t\tconst prev = node._prevTarget;\n\t\tconst next = node._nextTarget;\n\t\tif (prev !== undefined) {\n\t\t\tprev._nextTarget = next;\n\t\t\tnode._prevTarget = undefined;\n\t\t}\n\n\t\tif (next !== undefined) {\n\t\t\tnext._prevTarget = prev;\n\t\t\tnode._nextTarget = undefined;\n\t\t}\n\n\t\tif (node === this._targets) {\n\t\t\tthis._targets = next;\n\t\t\tif (next === undefined) {\n\t\t\t\tuntracked(() => {\n\t\t\t\t\tthis._unwatched?.call(this);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n};\n\nSignal.prototype.subscribe = function (fn) {\n\treturn effect(\n\t\t() => {\n\t\t\tconst value = this.value;\n\t\t\tconst prevContext = evalContext;\n\t\t\tevalContext = undefined;\n\t\t\ttry {\n\t\t\t\tfn(value);\n\t\t\t} finally {\n\t\t\t\tevalContext = prevContext;\n\t\t\t}\n\t\t},\n\t\t{ name: \"sub\" }\n\t);\n};\n\nSignal.prototype.valueOf = function () {\n\treturn this.value;\n};\n\nSignal.prototype.toString = function () {\n\treturn this.value + \"\";\n};\n\nSignal.prototype.toJSON = function () {\n\treturn this.value;\n};\n\nSignal.prototype.peek = function () {\n\tconst prevContext = evalContext;\n\tevalContext = undefined;\n\ttry {\n\t\treturn this.value;\n\t} finally {\n\t\tevalContext = prevContext;\n\t}\n};\n\nObject.defineProperty(Signal.prototype, \"value\", {\n\tget(this: Signal) {\n\t\tconst node = addDependency(this);\n\t\tif (node !== undefined) {\n\t\t\tnode._version = this._version;\n\t\t}\n\t\treturn this._value;\n\t},\n\tset(this: Signal, value) {\n\t\tif (value !== this._value) {\n\t\t\tif (batchIteration > 100) {\n\t\t\t\tthrow new Error(\"Cycle detected\");\n\t\t\t}\n\n\t\t\trecordBatchSnapshot(this);\n\t\t\tthis._value = value;\n\t\t\tthis._version++;\n\t\t\tglobalVersion++;\n\n\t\t\t/**@__INLINE__*/ startBatch();\n\t\t\ttry {\n\t\t\t\tfor (\n\t\t\t\t\tlet node = this._targets;\n\t\t\t\t\tnode !== undefined;\n\t\t\t\t\tnode = node._nextTarget\n\t\t\t\t) {\n\t\t\t\t\tnode._target._notify();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tendBatch();\n\t\t\t}\n\t\t}\n\t},\n});\n\n/**\n * Create a new plain signal.\n *\n * @param value The initial value for the signal.\n * @returns A new signal.\n */\nexport function signal<T>(value: T, options?: SignalOptions<T>): Signal<T>;\nexport function signal<T = undefined>(): Signal<T | undefined>;\nexport function signal<T>(value?: T, options?: SignalOptions<T>): Signal<T> {\n\treturn new Signal(value, options);\n}\n\n//#endregion Signal\n\n//#region Computed\n\nfunction needsToRecompute(target: Computed | Effect): boolean {\n\t// Check the dependencies for changed values. The dependency list is already\n\t// in order of use. Therefore if multiple dependencies have changed values, only\n\t// the first used dependency is re-evaluated at this point.\n\tfor (\n\t\tlet node = target._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\tif (\n\t\t\t// If the dependency has definitely been updated since its version number\n\t\t\t// was observed, then we need to recompute. This first check is not strictly\n\t\t\t// necessary for correctness, but allows us to skip the refresh call if the\n\t\t\t// dependency has already been updated.\n\t\t\tnode._source._version !== node._version ||\n\t\t\t// Refresh the dependency. If there's something blocking the refresh (e.g. a\n\t\t\t// dependency cycle), then we need to recompute.\n\t\t\t!node._source._refresh() ||\n\t\t\t// If the dependency got a new version after the refresh, then we need to recompute.\n\t\t\tnode._source._version !== node._version\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\t// If none of the dependencies have changed values since last recompute then\n\t// there's no need to recompute.\n\treturn false;\n}\n\nfunction prepareSources(target: Computed | Effect) {\n\t/**\n\t * 1. Mark all current sources as re-usable nodes (version: -1)\n\t * 2. Set a rollback node if the current node is being used in a different context\n\t * 3. Point 'target._sources' to the tail of the doubly-linked list, e.g:\n\t *\n\t * { undefined <- A <-> B <-> C -> undefined }\n\t * ↑ ↑\n\t * │ └──────┐\n\t * target._sources = A; (node is head) │\n\t * ↓ │\n\t * target._sources = C; (node is tail) ─┘\n\t */\n\tfor (\n\t\tlet node = target._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\tconst rollbackNode = node._source._node;\n\t\tif (rollbackNode !== undefined) {\n\t\t\tnode._rollbackNode = rollbackNode;\n\t\t}\n\t\tnode._source._node = node;\n\t\tnode._version = -1;\n\n\t\tif (node._nextSource === undefined) {\n\t\t\ttarget._sources = node;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction cleanupSources(target: Computed | Effect) {\n\tlet node = target._sources;\n\tlet head: Node | undefined = undefined;\n\n\t/**\n\t * At this point 'target._sources' points to the tail of the doubly-linked list.\n\t * It contains all existing sources + new sources in order of use.\n\t * Iterate backwards until we find the head node while dropping old dependencies.\n\t */\n\twhile (node !== undefined) {\n\t\tconst prev = node._prevSource;\n\n\t\t/**\n\t\t * The node was not re-used, unsubscribe from its change notifications and remove itself\n\t\t * from the doubly-linked list. e.g:\n\t\t *\n\t\t * { A <-> B <-> C }\n\t\t * ↓\n\t\t * { A <-> C }\n\t\t */\n\t\tif (node._version === -1) {\n\t\t\tnode._source._unsubscribe(node);\n\n\t\t\tif (prev !== undefined) {\n\t\t\t\tprev._nextSource = node._nextSource;\n\t\t\t}\n\t\t\tif (node._nextSource !== undefined) {\n\t\t\t\tnode._nextSource._prevSource = prev;\n\t\t\t}\n\t\t} else {\n\t\t\t/**\n\t\t\t * The new head is the last node seen which wasn't removed/unsubscribed\n\t\t\t * from the doubly-linked list. e.g:\n\t\t\t *\n\t\t\t * { A <-> B <-> C }\n\t\t\t * ↑ ↑ ↑\n\t\t\t * │ │ └ head = node\n\t\t\t * │ └ head = node\n\t\t\t * └ head = node\n\t\t\t */\n\t\t\thead = node;\n\t\t}\n\n\t\tnode._source._node = node._rollbackNode;\n\t\tif (node._rollbackNode !== undefined) {\n\t\t\tnode._rollbackNode = undefined;\n\t\t}\n\n\t\tnode = prev;\n\t}\n\n\ttarget._sources = head;\n}\n\n/**\n * The base class for computed signals.\n */\ndeclare class Computed<T = any> extends Signal<T> {\n\t_fn: () => T;\n\t_sources?: Node;\n\t_globalVersion: number;\n\t_flags: number;\n\n\tconstructor(fn: () => T, options?: SignalOptions<T>);\n\n\t_notify(): void;\n\tget value(): T;\n}\n\n/** @internal */\nfunction Computed(this: Computed, fn: () => unknown, options?: SignalOptions) {\n\tSignal.call(this, undefined);\n\n\tthis._fn = fn;\n\tthis._sources = undefined;\n\tthis._globalVersion = globalVersion - 1;\n\tthis._flags = OUTDATED;\n\tthis._watched = options?.watched;\n\tthis._unwatched = options?.unwatched;\n\tthis.name = options?.name;\n}\n\nComputed.prototype = new Signal() as Computed;\n\nComputed.prototype._refresh = function () {\n\tthis._flags &= ~NOTIFIED;\n\n\tif (this._flags & RUNNING) {\n\t\treturn false;\n\t}\n\n\t// If this computed signal has subscribed to updates from its dependencies\n\t// (TRACKING flag set) and none of them have notified about changes (OUTDATED\n\t// flag not set), then the computed value can't have changed.\n\tif ((this._flags & (OUTDATED | TRACKING)) === TRACKING) {\n\t\treturn true;\n\t}\n\tthis._flags &= ~OUTDATED;\n\n\tif (this._globalVersion === globalVersion) {\n\t\treturn true;\n\t}\n\tthis._globalVersion = globalVersion;\n\n\t// Mark this computed signal running before checking the dependencies for value\n\t// changes, so that the RUNNING flag can be used to notice cyclical dependencies.\n\tthis._flags |= RUNNING;\n\tif (this._version > 0 && !needsToRecompute(this)) {\n\t\tthis._flags &= ~RUNNING;\n\t\treturn true;\n\t}\n\n\tconst prevContext = evalContext;\n\ttry {\n\t\tprepareSources(this);\n\t\tevalContext = this;\n\t\tconst value = this._fn();\n\t\tif (\n\t\t\tthis._flags & HAS_ERROR ||\n\t\t\tthis._value !== value ||\n\t\t\tthis._version === 0\n\t\t) {\n\t\t\tthis._value = value;\n\t\t\tthis._flags &= ~HAS_ERROR;\n\t\t\tthis._version++;\n\t\t}\n\t} catch (err) {\n\t\tthis._value = err;\n\t\tthis._flags |= HAS_ERROR;\n\t\tthis._version++;\n\t}\n\tevalContext = prevContext;\n\tcleanupSources(this);\n\tthis._flags &= ~RUNNING;\n\treturn true;\n};\n\nComputed.prototype._subscribe = function (node) {\n\tif (this._targets === undefined) {\n\t\tthis._flags |= OUTDATED | TRACKING;\n\n\t\t// A computed signal subscribes lazily to its dependencies when it\n\t\t// gets its first subscriber.\n\t\tfor (\n\t\t\tlet node = this._sources;\n\t\t\tnode !== undefined;\n\t\t\tnode = node._nextSource\n\t\t) {\n\t\t\tnode._source._subscribe(node);\n\t\t}\n\t}\n\tSignal.prototype._subscribe.call(this, node);\n};\n\nComputed.prototype._unsubscribe = function (node) {\n\t// Only run the unsubscribe step if the computed signal has any subscribers.\n\tif (this._targets !== undefined) {\n\t\tSignal.prototype._unsubscribe.call(this, node);\n\n\t\t// Computed signal unsubscribes from its dependencies when it loses its last subscriber.\n\t\t// This makes it possible for unreferences subgraphs of computed signals to get garbage collected.\n\t\tif (this._targets === undefined) {\n\t\t\tthis._flags &= ~TRACKING;\n\n\t\t\tfor (\n\t\t\t\tlet node = this._sources;\n\t\t\t\tnode !== undefined;\n\t\t\t\tnode = node._nextSource\n\t\t\t) {\n\t\t\t\tnode._source._unsubscribe(node);\n\t\t\t}\n\t\t}\n\t}\n};\n\nComputed.prototype._notify = function () {\n\tif (!(this._flags & NOTIFIED)) {\n\t\tthis._flags |= OUTDATED | NOTIFIED;\n\n\t\tfor (\n\t\t\tlet node = this._targets;\n\t\t\tnode !== undefined;\n\t\t\tnode = node._nextTarget\n\t\t) {\n\t\t\tnode._target._notify();\n\t\t}\n\t}\n};\n\nObject.defineProperty(Computed.prototype, \"value\", {\n\tget(this: Computed) {\n\t\tif (this._flags & RUNNING) {\n\t\t\tthrow new Error(\"Cycle detected\");\n\t\t}\n\t\tconst node = addDependency(this);\n\t\tthis._refresh();\n\t\tif (node !== undefined) {\n\t\t\tnode._version = this._version;\n\t\t}\n\t\tif (this._flags & HAS_ERROR) {\n\t\t\tthrow this._value;\n\t\t}\n\t\treturn this._value;\n\t},\n});\n\n/**\n * An interface for read-only signals.\n */\ninterface ReadonlySignal<T = any> {\n\treadonly value: T;\n\tpeek(): T;\n\n\tsubscribe(fn: (value: T) => void): () => void;\n\tvalueOf(): T;\n\ttoString(): string;\n\ttoJSON(): T;\n\tbrand: typeof BRAND_SYMBOL;\n}\n\n/**\n * Create a new signal that is computed based on the values of other signals.\n *\n * The returned computed signal is read-only, and its value is automatically\n * updated when any signals accessed from within the callback function change.\n *\n * @param fn The effect callback.\n * @returns A new read-only signal.\n */\nfunction computed<T>(\n\tfn: () => T,\n\toptions?: SignalOptions<T>\n): ReadonlySignal<T> {\n\treturn new Computed(fn, options);\n}\n\n//#endregion Computed\n\n//#region Effect\n\nfunction cleanupEffect(effect: Effect) {\n\tconst cleanup = effect._cleanup;\n\teffect._cleanup = undefined;\n\n\tif (typeof cleanup === \"function\") {\n\t\t/*@__INLINE__**/ startBatch();\n\n\t\t// Run cleanup functions always outside of any context.\n\t\tconst prevContext = evalContext;\n\t\tevalContext = undefined;\n\t\ttry {\n\t\t\tcleanup();\n\t\t} catch (err) {\n\t\t\teffect._flags &= ~RUNNING;\n\t\t\teffect._flags |= DISPOSED;\n\t\t\tdisposeEffect(effect);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tevalContext = prevContext;\n\t\t\tendBatch();\n\t\t}\n\t}\n}\n\nfunction disposeEffect(effect: Effect) {\n\tfor (\n\t\tlet node = effect._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\tnode._source._unsubscribe(node);\n\t}\n\teffect._fn = undefined;\n\teffect._sources = undefined;\n\n\tcleanupEffect(effect);\n}\n\nfunction endEffect(this: Effect, prevContext?: Computed | Effect) {\n\tif (evalContext !== this) {\n\t\tthrow new Error(\"Out-of-order effect\");\n\t}\n\tcleanupSources(this);\n\tevalContext = prevContext;\n\n\tthis._flags &= ~RUNNING;\n\tif (this._flags & DISPOSED) {\n\t\tdisposeEffect(this);\n\t}\n\tendBatch();\n}\n\ntype EffectFn =\n\t| ((this: { dispose: () => void }) => void | (() => void))\n\t| (() => void | (() => void));\n\n/**\n * The base class for reactive effects.\n */\ndeclare class Effect {\n\t_fn?: EffectFn;\n\t_cleanup?: () => void;\n\t_sources?: Node;\n\t_nextBatchedEffect?: Effect;\n\t_flags: number;\n\t_debugCallback?: () => void;\n\tname?: string;\n\n\tconstructor(fn: EffectFn, options?: EffectOptions);\n\n\t_callback(): void;\n\t_start(): () => void;\n\t_notify(): void;\n\t_dispose(): void;\n\tdispose(): void;\n}\n\nexport interface EffectOptions {\n\tname?: string;\n}\n\nlet capturedEffects: Effect[] | undefined;\n\n/** @internal */\nfunction Effect(this: Effect, fn: EffectFn, options?: EffectOptions) {\n\tthis._fn = fn;\n\tthis._cleanup = undefined;\n\tthis._sources = undefined;\n\tthis._nextBatchedEffect = undefined;\n\tthis._flags = TRACKING;\n\tthis.name = options?.name;\n\n\tif (capturedEffects) {\n\t\tcapturedEffects.push(this);\n\t}\n}\n\nEffect.prototype._callback = function () {\n\tconst finish = this._start();\n\ttry {\n\t\tif (this._flags & DISPOSED) return;\n\t\tif (this._fn === undefined) return;\n\n\t\tconst cleanup = this._fn();\n\t\tif (typeof cleanup === \"function\") {\n\t\t\tthis._cleanup = cleanup;\n\t\t}\n\t} finally {\n\t\tfinish();\n\t}\n};\n\nEffect.prototype._start = function () {\n\tif (this._flags & RUNNING) {\n\t\tthrow new Error(\"Cycle detected\");\n\t}\n\tthis._flags |= RUNNING;\n\tthis._flags &= ~DISPOSED;\n\tcleanupEffect(this);\n\tprepareSources(this);\n\n\t/*@__INLINE__**/ startBatch();\n\tconst prevContext = evalContext;\n\tevalContext = this;\n\treturn endEffect.bind(this, prevContext);\n};\n\nEffect.prototype._notify = function () {\n\tif (!(this._flags & NOTIFIED)) {\n\t\tthis._flags |= NOTIFIED;\n\t\tthis._nextBatchedEffect = batchedEffect;\n\t\tbatchedEffect = this;\n\t}\n};\n\nEffect.prototype._dispose = function () {\n\tthis._flags |= DISPOSED;\n\n\tif (!(this._flags & RUNNING)) {\n\t\tdisposeEffect(this);\n\t}\n};\n\nEffect.prototype.dispose = function () {\n\tthis._dispose();\n};\n/**\n * Create an effect to run arbitrary code in response to signal changes.\n *\n * An effect tracks which signals are accessed within the given callback\n * function `fn`, and re-runs the callback when those signals change.\n *\n * The callback may return a cleanup function. The cleanup function gets\n * run once, either when the callback is next called or when the effect\n * gets disposed, whichever happens first.\n *\n * @param fn The effect callback.\n * @returns A function for disposing the effect.\n */\nfunction effect(fn: EffectFn, options?: EffectOptions): () => void {\n\tconst effect = new Effect(fn, options);\n\ttry {\n\t\teffect._callback();\n\t} catch (err) {\n\t\teffect._dispose();\n\t\tthrow err;\n\t}\n\t// Return a bound function instead of a wrapper like `() => effect._dispose()`,\n\t// because bound functions seem to be just as fast and take up a lot less memory.\n\tconst dispose = effect._dispose.bind(effect);\n\t(dispose as any)[Symbol.dispose] = dispose;\n\treturn dispose as any;\n}\n\n//#endregion Effect\n\n//#region Action\n\nfunction action<TArgs extends unknown[], TReturn>(\n\tfn: (...args: TArgs) => TReturn\n): (...args: TArgs) => TReturn {\n\treturn function actionWrapper(this: unknown, ...args: TArgs) {\n\t\treturn batch(() => untracked(() => fn.apply(this, args)));\n\t};\n}\n\n//#endregion Action\n\n//#region createModel\n\n/** Models should only contain signals, actions, and nested objects containing only signals and actions. */\ntype ValidateModel<TModel> = {\n\t[Key in keyof TModel]: TModel[Key] extends ReadonlySignal<unknown>\n\t\t? TModel[Key]\n\t\t: TModel[Key] extends (...args: any[]) => any\n\t\t\t? TModel[Key]\n\t\t\t: TModel[Key] extends object\n\t\t\t\t? ValidateModel<TModel[Key]>\n\t\t\t\t: `Property ${Key extends string ? `'${Key}' ` : \"\"}is not a Signal, Action, or an object that contains only Signals and Actions.`;\n};\n\nexport type Model<TModel> = ValidateModel<TModel> & Disposable;\n\nexport type ModelFactory<TModel, TFactoryArgs extends any[] = []> = (\n\t...args: TFactoryArgs\n) => ValidateModel<TModel>;\nexport type ModelConstructor<TModel, TFactoryArgs extends any[] = []> = new (\n\t...args: TFactoryArgs\n) => Model<TModel>;\n\n/**\n * The public types for ModelConstructor require using `new` to help\n * disambiguate the function passed into `createModel` and the returned\n * constructor function. It is easier to say that `createModel` accepts\n * a factory and returns a class, then to say it accepts a factory and\n * returns a factory. In other words, this example:\n *\n * ```ts\n * const PersonModel = createModel((name: string) => ({ ... }));\n * const person = new PersonModel(\"John\");\n * ```\n *\n * is easier to understand than this example:\n *\n * ```ts\n * const createPerson = createModel((name: string) => ({ ... }));\n * const person = createPerson(\"John\");\n * ```\n *\n * However, internally we implement `createModel` to return a function\n * that can be called without `new` for simplicity. To bridge the gap\n * between the public types and the internal implementation, we define\n * this internal interface that extends the public interface but also\n * allows calling without `new`.\n *\n * This pattern is used by the Preact & React adapters to make instantiating\n * a model or a function that returns a model easier.\n *\n * @internal\n */\ninterface InternalModelConstructor<\n\tTModel,\n\tTFactoryArgs extends any[],\n> extends ModelConstructor<TModel, TFactoryArgs> {\n\t(...args: TFactoryArgs): Model<TModel>;\n}\n\nfunction startCapturingEffects(): () => Effect[] | undefined {\n\tlet prevCapturedEffects = capturedEffects;\n\tcapturedEffects = [];\n\n\treturn function stopCapturingEffects() {\n\t\tlet modelEffects = capturedEffects;\n\t\tif (capturedEffects && prevCapturedEffects) {\n\t\t\tprevCapturedEffects = prevCapturedEffects.concat(capturedEffects);\n\t\t}\n\n\t\tcapturedEffects = prevCapturedEffects;\n\n\t\treturn modelEffects;\n\t};\n}\n\nfunction createModel<TModel, TFactoryArgs extends any[] = []>(\n\tmodelFactory: ModelFactory<TModel, TFactoryArgs>\n): ModelConstructor<TModel, TFactoryArgs> {\n\treturn function SignalModel(...args: TFactoryArgs): Model<TModel> {\n\t\tlet modelEffects: Effect[] | undefined;\n\t\tlet model: Model<TModel>;\n\n\t\tconst stopCapturingEffects = startCapturingEffects();\n\t\ttry {\n\t\t\tmodel = modelFactory(...args) as Model<TModel>;\n\t\t} catch (err) {\n\t\t\t// Drop any captured effects on error. Errors from nested models will bubble\n\t\t\t// up here and recursively reset `capturedEffects` to `undefined` preventing\n\t\t\t// any captured effects from leaking\n\t\t\tcapturedEffects = undefined;\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tmodelEffects = stopCapturingEffects();\n\t\t}\n\n\t\tfor (const key in model) {\n\t\t\t// @ts-expect-error TypeScript can't infer that model[key] is a valid here\n\t\t\tif (typeof model[key] === \"function\") {\n\t\t\t\t// @ts-expect-error TypeScript can't infer that model[key] is a valid function\n\t\t\t\t// to pass to action here\n\t\t\t\tmodel[key] = action(model[key]);\n\t\t\t}\n\t\t}\n\n\t\tmodel[Symbol.dispose] = action(function disposeModel() {\n\t\t\tif (modelEffects) {\n\t\t\t\tfor (let i = 0; i < modelEffects.length; i++) {\n\t\t\t\t\tmodelEffects[i].dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmodelEffects = undefined;\n\t\t});\n\n\t\treturn model;\n\t} as InternalModelConstructor<TModel, TFactoryArgs>;\n}\n\n//#endregion createModel\n\nexport {\n\tcomputed,\n\teffect,\n\tbatch,\n\tuntracked,\n\taction,\n\tcreateModel,\n\tSignal,\n\tReadonlySignal,\n\tEffect,\n\tComputed,\n};\n","import { defineComponent, type OlovaComponent, type OlovaProps } from \"olova/runtime\";\nimport { isActiveHref, link, resolveHref, type MatchOptions } from \"./index\";\n\ntype LinkProps = OlovaProps & {\n to?: unknown;\n name?: unknown;\n href?: unknown;\n params?: unknown;\n query?: unknown;\n hash?: unknown;\n class?: unknown;\n activeClass?: unknown;\n inactiveClass?: unknown;\n exact?: unknown;\n id?: unknown;\n title?: unknown;\n target?: unknown;\n rel?: unknown;\n replace?: unknown;\n scroll?: unknown;\n};\n\nfunction toBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toStringValue(value: unknown, fallback = \"\"): string {\n return value == null ? fallback : String(value);\n}\n\nconst Link = defineComponent((incomingProps) => {\n const props = incomingProps as LinkProps;\n const destination = () =>\n props.to || (props.name ? { name: props.name as string, params: props.params, query: props.query, hash: props.hash } : { path: props.href ?? \"/\", params: props.params, query: props.query, hash: props.hash });\n const isActive = () => isActiveHref(destination(), { exact: toBoolean(props.exact) } as MatchOptions);\n const linkClass = () =>\n [toStringValue(props.class), isActive() ? toStringValue(props.activeClass) : toStringValue(props.inactiveClass)]\n .filter(Boolean)\n .join(\" \");\n const handleClick = (event: Event) => {\n link(event, {\n replace: toBoolean(props.replace),\n scroll: typeof props.scroll === \"boolean\" ? props.scroll : undefined,\n });\n };\n\n return {\n textBindings: [],\n htmlBindings: [],\n attrBindings: [\n { id: \"href\", attr: \"href\", get: () => resolveHref(destination()) },\n { id: \"class\", attr: \"class\", get: linkClass },\n { id: \"id\", attr: \"id\", get: () => props.id ?? null },\n { id: \"title\", attr: \"title\", get: () => props.title ?? null },\n { id: \"target\", attr: \"target\", get: () => props.target ?? null },\n { id: \"rel\", attr: \"rel\", get: () => props.rel ?? null },\n { id: \"current\", attr: \"aria-current\", get: () => (isActive() ? \"page\" : null) },\n ],\n eventBindings: [{ id: \"click\", event: \"click\", get: () => handleClick }],\n slotBindings: [{ id: \"slot\", name: \"default\" }],\n componentBindings: [],\n build: () => {\n const fragment = document.createDocumentFragment();\n const anchor = document.createElement(\"a\");\n const slotMarker = document.createTextNode(\"\");\n anchor.appendChild(slotMarker);\n fragment.appendChild(anchor);\n\n return {\n fragment,\n nodes: {\n href: anchor,\n class: anchor,\n id: anchor,\n title: anchor,\n target: anchor,\n rel: anchor,\n current: anchor,\n click: anchor,\n slot: slotMarker,\n },\n };\n },\n };\n});\n\nexport default Link as OlovaComponent;\n","import { effect, signal } from \"@preact/signals-core\";\nimport {\n defineComponent,\n getContext,\n hasContext,\n setContext,\n type OlovaComponent,\n type OlovaProps,\n} from \"olova/runtime\";\nimport Link from \"./Link\";\n\ntype RouterMode = \"auto\" | \"history\" | \"hash\";\ntype ResolvedMode = \"history\" | \"hash\";\ntype Primitive = string | number | boolean;\ntype RouteParams = Record<string, string>;\ntype RouteQueryValue = string | string[];\ntype RouteQuery = Record<string, RouteQueryValue>;\ntype RouteQueryInputValue = Primitive | Primitive[] | null | undefined;\ntype RouteQueryInput = Record<string, RouteQueryInputValue>;\ntype RouteTarget =\n | string\n | {\n name?: string;\n path?: string;\n params?: Record<string, Primitive>;\n query?: RouteQueryInput;\n hash?: string;\n };\ntype NavigateOptions = {\n replace?: boolean;\n scroll?: boolean;\n};\ntype MatchOptions = {\n exact?: boolean;\n};\ntype RouteMatchInfo = {\n name?: string;\n path: string;\n meta?: unknown;\n};\ntype RouteLocation = {\n name?: string;\n path: string;\n fullPath: string;\n href: string;\n params: RouteParams;\n query: RouteQuery;\n hash: string;\n meta?: unknown;\n matchedPath: string;\n matches: RouteMatchInfo[];\n};\ntype RouteGuardContext = {\n to: RouteLocation;\n from: RouteLocation | null;\n params: RouteParams;\n query: RouteQuery;\n};\ntype RouteGuardResult = boolean | string | RouteTarget | void;\ntype RouteGuard = (context: RouteGuardContext) => RouteGuardResult;\ntype RouteRedirect =\n | RouteTarget\n | ((context: RouteGuardContext) => RouteTarget | null | undefined);\ntype RoutePropsFactory = OlovaProps | ((context: RouteGuardContext) => OlovaProps);\ntype RouteObject = {\n path?: string;\n index?: boolean;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n name?: string;\n meta?: unknown;\n children?: RouteObject[];\n};\ntype RouteDefinition =\n | OlovaComponent\n | (Omit<RouteObject, \"path\" | \"index\"> & {\n children?: RouteObject[];\n });\ntype RouterRoutes = Record<string, RouteDefinition> | RouteObject[];\ntype RouterProps = {\n routes: RouterRoutes;\n mode?: RouterMode;\n base?: string;\n scroll?: boolean;\n};\n\ntype NormalizedRouteRecord = {\n name?: string;\n fullPath: string;\n pathTemplate: string;\n meta?: unknown;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n};\n\ntype RouteBranch = {\n records: NormalizedRouteRecord[];\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n fullPath: string;\n};\n\ntype NormalizedRouteConfig = {\n branches: RouteBranch[];\n named: Map<string, NormalizedRouteRecord>;\n};\n\ntype RouteMatch = {\n record: NormalizedRouteRecord;\n props: OlovaProps;\n};\n\ntype ParsedTarget = {\n mode: ResolvedMode;\n path: string;\n search: string;\n hash: string;\n};\n\ntype RouteResolution = {\n mode: ResolvedMode;\n location: RouteLocation;\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype OutletState = {\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype RouterApi = {\n current: () => RouteResolution;\n readonly mode: ResolvedMode;\n readonly location: RouteLocation;\n readonly path: string;\n readonly fullPath: string;\n readonly params: RouteParams;\n readonly query: RouteQuery;\n readonly hash: string;\n readonly matchedPath: string;\n readonly matches: RouteMatchInfo[];\n push: (to: RouteTarget, options?: NavigateOptions) => void;\n navigate: (to: RouteTarget, options?: NavigateOptions) => void;\n replace: (to: RouteTarget, options?: Omit<NavigateOptions, \"replace\">) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n resolve: (to: RouteTarget) => string;\n href: (to: RouteTarget) => string;\n isActive: (to: RouteTarget, options?: MatchOptions) => boolean;\n};\n\nexport type {\n MatchOptions,\n NavigateOptions,\n RouteDefinition,\n RouteGuardContext,\n RouteLocation,\n RouteMatchInfo,\n RouteObject,\n RouteParams,\n RouteQuery,\n RouteQueryInput,\n RouteTarget,\n RouterMode,\n RouterProps,\n RouterRoutes,\n};\n\nconst ROUTER_CONTEXT = Symbol.for(\"olova.router\");\nconst OUTLET_CONTEXT = Symbol.for(\"olova.router.outlet\");\nconst EMPTY_PROPS = Object.freeze({}) as OlovaProps;\nconst EMPTY_QUERY = Object.freeze({}) as RouteQuery;\nconst EMPTY_MATCHES = Object.freeze([]) as unknown as RouteMatchInfo[];\nconst EMPTY_LOCATION: RouteLocation = {\n path: \"/\",\n fullPath: \"/\",\n href: \"/\",\n params: {},\n query: EMPTY_QUERY,\n hash: \"\",\n matchedPath: \"*\",\n matches: EMPTY_MATCHES,\n};\nconst EMPTY_OUTLET: OutletState = {\n component: defineComponent(() => ({\n template: \"\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [],\n })),\n props: EMPTY_PROPS,\n};\n\nlet activeRouter: RouterApi | null = null;\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeBase(base = \"/\"): string {\n if (!base || base === \"/\") {\n return \"/\";\n }\n\n return `/${base.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction normalizePath(path = \"/\"): string {\n if (!path) {\n return \"/\";\n }\n\n const [pathname, suffix = \"\"] = path.split(/(?=[?#])/u, 2);\n const cleaned = pathname.replace(/\\/{2,}/g, \"/\").replace(/\\/+$/g, \"\") || \"/\";\n return cleaned.startsWith(\"/\") ? `${cleaned}${suffix}` : `/${cleaned}${suffix}`;\n}\n\nfunction joinPaths(parentPath: string, childPath: string | undefined, index = false): string {\n if (index) {\n return parentPath || \"/\";\n }\n\n if (!childPath || childPath === \"/\") {\n return parentPath || \"/\";\n }\n\n if (childPath.startsWith(\"/\")) {\n return normalizePath(childPath);\n }\n\n const parent = parentPath === \"/\" ? \"\" : parentPath;\n return normalizePath(`${parent}/${childPath}`);\n}\n\nfunction stripBase(pathname: string, base: string): string {\n if (base === \"/\") {\n return normalizePath(pathname);\n }\n\n if (pathname === base) {\n return \"/\";\n }\n\n if (pathname.startsWith(`${base}/`)) {\n return normalizePath(pathname.slice(base.length));\n }\n\n return normalizePath(pathname);\n}\n\nfunction splitRoutePath(path: string): string[] {\n return normalizePath(path).split(\"?\")[0].split(\"#\")[0].split(\"/\").filter(Boolean);\n}\n\nfunction compilePath(path: string): Pick<NormalizedRouteRecord, \"matcher\" | \"paramNames\" | \"score\"> {\n if (path === \"*\") {\n return {\n matcher: /^.*$/u,\n paramNames: [\"wild\"],\n score: -1000,\n };\n }\n\n const segments = splitRoutePath(path);\n if (segments.length === 0) {\n return {\n matcher: /^\\/?$/u,\n paramNames: [],\n score: 100,\n };\n }\n\n const paramNames: string[] = [];\n let pattern = \"^\";\n let score = 0;\n\n for (const segment of segments) {\n if (segment === \"*\") {\n paramNames.push(\"wild\");\n pattern += \"(?:/(.*))?\";\n score -= 20;\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const paramName = repeat ? rawName.slice(0, -1) : rawName;\n paramNames.push(paramName);\n pattern += repeat ? \"(?:/(.*))?\" : \"/([^/]+)\";\n score += repeat ? 4 : 8;\n continue;\n }\n\n pattern += `/${escapeRegex(segment)}`;\n score += 12;\n }\n\n pattern += \"/?$\";\n\n return {\n matcher: new RegExp(pattern, \"u\"),\n paramNames,\n score,\n };\n}\n\nfunction queryToSearch(query?: RouteQueryInput): string {\n if (!query) {\n return \"\";\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === undefined || rawValue === null) {\n continue;\n }\n\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, String(value));\n }\n continue;\n }\n\n searchParams.set(key, String(rawValue));\n }\n\n const serialized = searchParams.toString();\n return serialized ? `?${serialized}` : \"\";\n}\n\nfunction parseQuery(searchParams: URLSearchParams): RouteQuery {\n const query: RouteQuery = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n query[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n }\n\n return query;\n}\n\nfunction parseHashRoute(hash: string): { path: string; search: string } {\n const rawHash = hash.startsWith(\"#\") ? hash.slice(1) : hash;\n\n if (!rawHash) {\n return { path: \"/\", search: \"\" };\n }\n\n const normalized = rawHash.startsWith(\"/\") ? rawHash : `/${rawHash}`;\n const parsed = new URL(normalized, \"http://olova-router.local\");\n\n return {\n path: normalizePath(parsed.pathname),\n search: parsed.search,\n };\n}\n\nfunction normalizeRouteDefinition(definition: RouteDefinition): RouteObject {\n if (typeof definition === \"object\" && definition !== null && \"setup\" in definition === false) {\n return definition as RouteObject;\n }\n\n return {\n component: definition as OlovaComponent,\n };\n}\n\nfunction normalizeRouteObjects(routes: RouterRoutes): RouteObject[] {\n if (Array.isArray(routes)) {\n return routes;\n }\n\n return Object.entries(routes).map(([path, definition]) => ({\n path,\n ...normalizeRouteDefinition(definition),\n }));\n}\n\nfunction buildRouteConfig(routes: RouterRoutes): NormalizedRouteConfig {\n const named = new Map<string, NormalizedRouteRecord>();\n const branches: RouteBranch[] = [];\n let order = 0;\n\n const walk = (records: RouteObject[], parentPath: string, chain: NormalizedRouteRecord[]) => {\n for (const record of records) {\n const fullPath = joinPaths(parentPath, record.path, record.index === true);\n const compiled = compilePath(fullPath);\n const normalized: NormalizedRouteRecord = {\n name: record.name,\n fullPath,\n pathTemplate: fullPath,\n meta: record.meta,\n component: record.component,\n redirect: record.redirect,\n props: record.props,\n beforeEnter: record.beforeEnter,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score,\n order: order++,\n };\n\n if (normalized.name) {\n named.set(normalized.name, normalized);\n }\n\n const nextChain = [...chain, normalized];\n\n if (normalized.component || normalized.redirect) {\n branches.push({\n records: nextChain,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score + nextChain.length,\n order: normalized.order,\n fullPath,\n });\n }\n\n if (record.children?.length) {\n walk(record.children, fullPath, nextChain);\n }\n }\n };\n\n walk(normalizeRouteObjects(routes), \"/\", []);\n\n branches.sort((left, right) => right.score - left.score || left.order - right.order);\n\n return {\n branches,\n named,\n };\n}\n\nfunction buildPathFromTemplate(template: string, params?: Record<string, Primitive>): string {\n const resolvedParams = params ?? {};\n\n if (template === \"*\") {\n return String(resolvedParams.wild ?? \"/\");\n }\n\n const segments = splitRoutePath(template).map((segment) => {\n if (segment === \"*\") {\n return encodeURIComponent(String(resolvedParams.wild ?? \"\"));\n }\n\n if (!segment.startsWith(\":\")) {\n return segment;\n }\n\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const name = repeat ? rawName.slice(0, -1) : rawName;\n const value = resolvedParams[name];\n\n if (value === undefined || value === null) {\n throw new Error(`[olova-router] Missing route param \"${name}\" for \"${template}\".`);\n }\n\n if (repeat) {\n return String(value)\n .split(\"/\")\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n }\n\n return encodeURIComponent(String(value));\n });\n\n return normalizePath(`/${segments.join(\"/\")}`);\n}\n\nexport function matchPath(pattern: string, path: string): RouteParams | null {\n const compiled = compilePath(pattern);\n const matched = compiled.matcher.exec(normalizePath(path));\n\n if (!matched) {\n return null;\n }\n\n const params: RouteParams = {};\n compiled.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return params;\n}\n\nfunction resolveCurrentTarget(mode: RouterMode, base: string): ParsedTarget {\n const url = new URL(window.location.href);\n const resolvedMode: ResolvedMode =\n mode === \"auto\"\n ? (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\") ? \"hash\" : \"history\")\n : mode;\n\n if (resolvedMode === \"hash\") {\n const hashRoute = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: hashRoute.path,\n search: hashRoute.search,\n hash: \"\",\n };\n }\n\n return {\n mode: \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n}\n\nfunction resolveTarget(\n to: RouteTarget,\n mode: RouterMode,\n base: string,\n named: Map<string, NormalizedRouteRecord>,\n): ParsedTarget {\n if (typeof to === \"string\") {\n if (to.startsWith(\"#/\") || to.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(to);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n const url = new URL(to, window.location.href);\n\n if (url.origin !== window.location.origin) {\n window.location.assign(url.href);\n return resolveCurrentTarget(mode, base);\n }\n\n if (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n return {\n mode: mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n }\n\n const targetMode: ResolvedMode = mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\";\n const record = to.name ? named.get(to.name) : null;\n\n if (to.name && !record) {\n throw new Error(`[olova-router] Unknown route name \"${to.name}\".`);\n }\n\n const targetPath = record\n ? buildPathFromTemplate(record.pathTemplate, to.params)\n : buildPathFromTemplate(to.path ?? \"/\", to.params);\n\n return {\n mode: targetMode,\n path: targetPath,\n search: queryToSearch(to.query),\n hash: to.hash ? `#${String(to.hash).replace(/^#/, \"\")}` : \"\",\n };\n}\n\nfunction stringifyTarget(target: ParsedTarget, base: string): string {\n if (target.mode === \"hash\") {\n const root = base === \"/\" ? \"\" : base;\n return `${root}/#${target.path}${target.search}`;\n }\n\n const rootedPath = base === \"/\" ? target.path : `${base}${target.path === \"/\" ? \"\" : target.path}`;\n return `${rootedPath}${target.search}${target.hash}`;\n}\n\nfunction resolveProps(source: RoutePropsFactory | undefined, context: RouteGuardContext): OlovaProps {\n if (!source) {\n return EMPTY_PROPS;\n }\n\n return typeof source === \"function\" ? source(context) : source;\n}\n\nfunction matchBranch(path: string, branches: RouteBranch[]): { branch: RouteBranch | null; params: RouteParams } {\n for (const branch of branches) {\n const matched = branch.matcher.exec(path);\n if (!matched) {\n continue;\n }\n\n const params: RouteParams = {};\n branch.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return { branch, params };\n }\n\n return { branch: null, params: {} };\n}\n\nfunction buildLocation(branch: RouteBranch | null, parsed: ParsedTarget, params: RouteParams): RouteLocation {\n const searchParams = new URLSearchParams(parsed.search);\n const fullPath = `${parsed.path}${parsed.search}${parsed.hash}`;\n const matches = branch\n ? branch.records.map((record) => ({\n name: record.name,\n path: record.fullPath,\n meta: record.meta,\n }))\n : EMPTY_MATCHES;\n const leaf = branch?.records[branch.records.length - 1];\n\n return {\n name: leaf?.name,\n path: parsed.path,\n fullPath,\n href: fullPath || \"/\",\n params,\n query: parseQuery(searchParams),\n hash: parsed.hash.startsWith(\"#\") ? parsed.hash.slice(1) : parsed.hash,\n meta: leaf?.meta,\n matchedPath: leaf?.fullPath ?? \"*\",\n matches,\n };\n}\n\nfunction createMatchHost(match: RouteMatch, outlet: OutletState): OlovaComponent {\n return defineComponent(() => {\n setContext(OUTLET_CONTEXT, outlet);\n\n return {\n template: \"__O_COMP_nested_match__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"nested_match\",\n getComponent: () => match.record.component ?? EMPTY_OUTLET.component,\n getProps: () => match.props,\n },\n ],\n };\n });\n}\n\nfunction createComponentChain(matches: RouteMatch[]): OlovaComponent {\n if (matches.length === 0) {\n return EMPTY_OUTLET.component;\n }\n\n let outlet = EMPTY_OUTLET;\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n outlet = {\n component: createMatchHost(matches[index], outlet),\n props: EMPTY_PROPS,\n };\n }\n\n return outlet.component;\n}\n\nfunction resolveRoute(\n config: NormalizedRouteConfig,\n parsed: ParsedTarget,\n from: RouteLocation | null,\n base: string,\n depth = 0,\n): RouteResolution {\n if (depth > 10) {\n throw new Error(\"[olova-router] Too many redirects while resolving a route.\");\n }\n\n const found = matchBranch(parsed.path, config.branches);\n const location = buildLocation(found.branch, parsed, found.params);\n const context: RouteGuardContext = {\n to: location,\n from,\n params: location.params,\n query: location.query,\n };\n\n const leaf = found.branch?.records[found.branch.records.length - 1];\n const redirect = typeof leaf?.redirect === \"function\" ? leaf.redirect(context) : leaf?.redirect;\n\n if (redirect) {\n return resolveRoute(config, resolveTarget(redirect, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const guardResult = leaf?.beforeEnter?.(context);\n\n if (guardResult === false && from) {\n return {\n mode: parsed.mode,\n location: from,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n }\n\n if (guardResult && guardResult !== true) {\n return resolveRoute(config, resolveTarget(guardResult, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const matches: RouteMatch[] = (found.branch?.records ?? [])\n .filter((record) => !!record.component)\n .map((record) => ({\n record,\n props: {\n ...resolveProps(record.props, context),\n ...location.params,\n route: location,\n router: activeRouter,\n params: location.params,\n query: location.query,\n matches: location.matches,\n navigate,\n },\n }));\n\n return {\n mode: parsed.mode,\n location,\n component: createComponentChain(matches),\n props: EMPTY_PROPS,\n };\n}\n\nfunction scrollToTop(): void {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\n}\n\nfunction scrollToHash(hash: string): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const normalizedHash = hash.replace(/^#/, \"\");\n if (!normalizedHash) {\n return false;\n }\n\n const target = document.getElementById(decodeURIComponent(normalizedHash));\n if (!target) {\n return false;\n }\n\n target.scrollIntoView({ block: \"start\", inline: \"nearest\", behavior: \"auto\" });\n return true;\n}\n\nfunction applyScroll(hash: string, enabled: boolean): void {\n if (!enabled) {\n return;\n }\n\n if (hash) {\n requestAnimationFrame(() => {\n if (!scrollToHash(hash)) {\n scrollToTop();\n }\n });\n return;\n }\n\n scrollToTop();\n}\n\nfunction shouldIgnoreClick(event: MouseEvent, anchor: HTMLAnchorElement | null): boolean {\n if (!anchor) {\n return true;\n }\n\n if (event.defaultPrevented || event.button !== 0) {\n return true;\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return true;\n }\n\n if (anchor.target && anchor.target !== \"_self\") {\n return true;\n }\n\n if (anchor.hasAttribute(\"download\")) {\n return true;\n }\n\n const rel = anchor.getAttribute(\"rel\");\n if (rel && /\\bexternal\\b/u.test(rel)) {\n return true;\n }\n\n const href = anchor.getAttribute(\"href\");\n return !href || href.startsWith(\"mailto:\") || href.startsWith(\"tel:\");\n}\n\nfunction resolveAnchor(event: Event): HTMLAnchorElement | null {\n const target = event.target;\n\n if (!(target instanceof Element)) {\n return null;\n }\n\n return target.closest(\"a[href]\");\n}\n\nfunction runNavigation(to: RouteTarget, options: NavigateOptions = {}): void {\n if (!activeRouter || typeof window === \"undefined\") {\n if (typeof to === \"string\") {\n window.location.assign(to);\n }\n return;\n }\n\n activeRouter.navigate(to, options);\n}\n\nexport function navigate(to: RouteTarget, options?: NavigateOptions): void {\n runNavigation(to, options);\n}\n\nexport function link(toOrEvent?: RouteTarget | Event, options?: NavigateOptions): ((event?: Event) => void) | void {\n if (\n typeof toOrEvent === \"string\" ||\n (typeof toOrEvent === \"object\" &&\n toOrEvent !== null &&\n !(toOrEvent instanceof Event) &&\n \"target\" in toOrEvent === false)\n ) {\n return (event?: Event) => {\n event?.preventDefault();\n runNavigation(toOrEvent as RouteTarget, options);\n };\n }\n\n const event = toOrEvent as Event | undefined;\n\n if (!event) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n\n if (event instanceof MouseEvent && shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n runNavigation(href, options);\n}\n\nexport function useRouter(): RouterApi {\n if (!hasContext(ROUTER_CONTEXT)) {\n throw new Error(\"[olova-router] useRouter() must be used inside a routed component.\");\n }\n\n return getContext<RouterApi>(ROUTER_CONTEXT);\n}\n\nexport function useRoute(): RouteLocation {\n return useRouter().location;\n}\n\nexport function useParams(): RouteParams {\n return useRouter().params;\n}\n\nexport function useQuery(): RouteQuery {\n return useRouter().query;\n}\n\nexport function resolveHref(to: RouteTarget): string {\n return activeRouter?.resolve(to) ?? (typeof to === \"string\" ? to : to.path ?? \"/\");\n}\n\nexport function isActiveHref(to: RouteTarget, options?: MatchOptions): boolean {\n return activeRouter?.isActive(to, options) ?? false;\n}\n\nexport const Outlet = defineComponent(() => {\n const outlet = hasContext(OUTLET_CONTEXT) ? getContext<OutletState>(OUTLET_CONTEXT) : EMPTY_OUTLET;\n\n return {\n template: \"__O_COMP_outlet__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"outlet\",\n getComponent: () => outlet.component,\n getProps: () => outlet.props,\n },\n ],\n };\n});\n\nfunction createRouterVariant(mode: ResolvedMode): OlovaComponent {\n return defineComponent((incomingProps) => ({\n template: \"__O_COMP_router_variant__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_variant\",\n getComponent: () => Router,\n getProps: () => ({\n ...(incomingProps as RouterProps),\n mode,\n }),\n },\n ],\n }));\n}\n\nconst Router = defineComponent((incomingProps) => {\n const props = incomingProps as RouterProps;\n const base = normalizeBase(props.base);\n const config = buildRouteConfig(props.routes ?? {});\n const currentVersion = signal(0);\n let currentRoute: RouteResolution = {\n mode: \"history\",\n location: EMPTY_LOCATION,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n\n const setCurrentRoute = (next: RouteResolution) => {\n currentRoute = next;\n currentVersion.value = currentVersion.peek() + 1;\n };\n\n const readCurrentRoute = () => {\n currentVersion.value;\n return currentRoute;\n };\n\n const api: RouterApi = {\n current: () => readCurrentRoute(),\n get mode() {\n return readCurrentRoute().mode;\n },\n get location() {\n return readCurrentRoute().location;\n },\n get path() {\n return readCurrentRoute().location.path;\n },\n get fullPath() {\n return readCurrentRoute().location.fullPath;\n },\n get params() {\n return readCurrentRoute().location.params;\n },\n get query() {\n return readCurrentRoute().location.query;\n },\n get hash() {\n return readCurrentRoute().location.hash;\n },\n get matchedPath() {\n return readCurrentRoute().location.matchedPath;\n },\n get matches() {\n return readCurrentRoute().location.matches;\n },\n push(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const next = resolveRoute(config, parsed, currentRoute.location, base);\n const href = stringifyTarget(parsed, base);\n const method = options.replace ? \"replaceState\" : \"pushState\";\n\n if (parsed.mode === \"hash\") {\n const targetHash = href.includes(\"#\") ? href.slice(href.indexOf(\"#\")) : \"\";\n\n if (options.replace) {\n const nextUrl = `${window.location.pathname}${window.location.search}${targetHash}`;\n window.history.replaceState({}, \"\", nextUrl);\n } else {\n window.location.hash = targetHash.slice(1);\n }\n } else {\n window.history[method]({}, \"\", href);\n }\n\n setCurrentRoute(next);\n\n applyScroll(parsed.hash, options.scroll ?? props.scroll ?? true);\n },\n navigate(to, options = {}) {\n this.push(to, options);\n },\n replace(to, options = {}) {\n this.push(to, { ...options, replace: true });\n },\n back() {\n window.history.back();\n },\n forward() {\n window.history.forward();\n },\n refresh() {\n syncFromWindow(false);\n },\n resolve(to) {\n return stringifyTarget(resolveTarget(to, props.mode ?? \"auto\", base, config.named), base);\n },\n href(to) {\n return this.resolve(to);\n },\n isActive(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const current = readCurrentRoute().location.path;\n\n if (options.exact) {\n return current === parsed.path;\n }\n\n return current === parsed.path || current.startsWith(`${parsed.path}/`);\n },\n };\n\n const syncFromWindow = (replace = true) => {\n const target = resolveCurrentTarget(props.mode ?? \"auto\", base);\n const next = resolveRoute(config, target, currentRoute.location ?? null, base);\n setCurrentRoute(next);\n\n if (replace) {\n const href = stringifyTarget(target, base);\n window.history.replaceState({}, \"\", href);\n }\n\n applyScroll(target.hash, props.scroll ?? true);\n };\n\n setContext(ROUTER_CONTEXT, api);\n activeRouter = api;\n\n if (typeof window !== \"undefined\") {\n syncFromWindow(false);\n\n effect(() => {\n const handleChange = () => syncFromWindow(false);\n const handleClick = (event: Event) => {\n if (!(event instanceof MouseEvent)) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n if (shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n api.navigate(href);\n };\n\n window.addEventListener(\"popstate\", handleChange);\n window.addEventListener(\"hashchange\", handleChange);\n document.addEventListener(\"click\", handleClick, true);\n\n return () => {\n if (activeRouter === api) {\n activeRouter = null;\n }\n\n window.removeEventListener(\"popstate\", handleChange);\n window.removeEventListener(\"hashchange\", handleChange);\n document.removeEventListener(\"click\", handleClick, true);\n };\n });\n }\n\n return {\n template: \"__O_COMP_router_view__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_view\",\n getComponent: () => {\n currentVersion.value;\n return currentRoute.component;\n },\n getProps: () => currentRoute.props,\n },\n ],\n };\n});\n\nconst BrowserRouter = createRouterVariant(\"history\");\nconst HashRouter = createRouterVariant(\"hash\");\n\nexport default Router;\nexport { BrowserRouter, HashRouter, Link };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Link.ts","../src/index.ts"],"names":["defineComponent","event"],"mappings":";;;;AAsBA,SAAS,SAAA,CAAU,KAAA,EAAgB,QAAA,GAAW,KAAA,EAAgB;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,SAAA,GAAY,KAAA,GAAQ,QAAA;AAC9C;AAEA,SAAS,aAAA,CAAc,KAAA,EAAgB,QAAA,GAAW,EAAA,EAAY;AAC5D,EAAA,OAAO,KAAA,IAAS,IAAA,GAAO,QAAA,GAAW,MAAA,CAAO,KAAK,CAAA;AAChD;AAEA,IAAM,IAAA,GAAO,eAAA,CAAgB,CAAC,aAAA,KAAkB;AAC9C,EAAA,MAAM,KAAA,GAAQ,aAAA;AACd,EAAA,MAAM,WAAA,GAAc,MAClB,KAAA,CAAM,EAAA,KAAO,MAAM,IAAA,GAAO,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAgB,MAAA,EAAQ,KAAA,CAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,GAAI,EAAE,IAAA,EAAM,MAAM,IAAA,IAAQ,GAAA,EAAK,MAAA,EAAQ,KAAA,CAAM,QAAQ,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,EAAK,CAAA;AAC/M,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,WAAA,EAAY,EAAG,EAAE,KAAA,EAAO,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAmB,CAAA;AACpG,EAAA,MAAM,SAAA,GAAY,MAChB,CAAC,aAAA,CAAc,MAAM,KAAK,CAAA,EAAG,QAAA,EAAS,GAAI,aAAA,CAAc,KAAA,CAAM,WAAW,CAAA,GAAI,aAAA,CAAc,MAAM,aAAa,CAAC,EAC5G,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AACb,EAAA,OAAO;AAAA,IACL,QAAA,EACE,sMAAA;AAAA,IACF,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,YAAA,EAAc;AAAA,MACZ,EAAE,EAAA,EAAI,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,KAAK,MAAM,WAAA,CAAY,WAAA,EAAa,CAAA,EAAE;AAAA,MAClE,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAK,SAAA,EAAU;AAAA,MAC7C,EAAE,IAAI,IAAA,EAAM,IAAA,EAAM,MAAM,GAAA,EAAK,MAAM,KAAA,CAAM,EAAA,IAAM,IAAA,EAAK;AAAA,MACpD,EAAE,IAAI,OAAA,EAAS,IAAA,EAAM,SAAS,GAAA,EAAK,MAAM,KAAA,CAAM,KAAA,IAAS,IAAA,EAAK;AAAA,MAC7D,EAAE,IAAI,QAAA,EAAU,IAAA,EAAM,UAAU,GAAA,EAAK,MAAM,KAAA,CAAM,MAAA,IAAU,IAAA,EAAK;AAAA,MAChE,EAAE,IAAI,KAAA,EAAO,IAAA,EAAM,OAAO,GAAA,EAAK,MAAM,KAAA,CAAM,GAAA,IAAO,IAAA,EAAK;AAAA,MACvD,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,cAAA,EAAgB,KAAK,MAAO,QAAA,EAAS,GAAI,MAAA,GAAS,IAAA;AAAM,KACjF;AAAA,IACA,eAAe,EAAC;AAAA,IAChB,cAAc,CAAC,EAAE,IAAI,MAAA,EAAQ,IAAA,EAAM,WAAW,CAAA;AAAA,IAC9C,mBAAmB;AAAC,GACtB;AACF,CAAC,CAAA;AAED,IAAO,YAAA,GAAQ;;;ACyHf,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,cAAc,CAAA;AAChD,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,qBAAqB,CAAA;AACvD,IAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACpC,IAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACpC,IAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AACtC,IAAM,cAAA,GAAgC;AAAA,EACpC,IAAA,EAAM,GAAA;AAAA,EACN,QAAA,EAAU,GAAA;AAAA,EACV,IAAA,EAAM,GAAA;AAAA,EACN,QAAQ,EAAC;AAAA,EACT,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,WAAA,EAAa,GAAA;AAAA,EACb,OAAA,EAAS;AACX,CAAA;AACA,IAAM,YAAA,GAA4B;AAAA,EAChC,SAAA,EAAWA,gBAAgB,OAAO;AAAA,IAChC,QAAA,EAAU,EAAA;AAAA,IACV,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,eAAe,EAAC;AAAA,IAChB,cAAc,EAAC;AAAA,IACf,mBAAmB;AAAC,GACtB,CAAE,CAAA;AAAA,EACF,KAAA,EAAO;AACT,CAAA;AAEA,IAAI,YAAA,GAAiC,IAAA;AAErC,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;AAEA,SAAS,aAAA,CAAc,OAAO,GAAA,EAAa;AACzC,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,KAAS,GAAA,EAAK;AACzB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CAAA;AAC3C;AAEA,SAAS,aAAA,CAAc,OAAO,GAAA,EAAa;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,CAAC,UAAU,MAAA,GAAS,EAAE,IAAI,IAAA,CAAK,KAAA,CAAM,aAAa,CAAC,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,SAAS,OAAA,CAAQ,SAAA,EAAW,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAA,IAAK,GAAA;AACzE,EAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAAI,CAAA,EAAG,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA,GAAK,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA;AAC/E;AAEA,SAAS,SAAA,CAAU,UAAA,EAAoB,SAAA,EAA+B,KAAA,GAAQ,KAAA,EAAe;AAC3F,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,OAAO,UAAA,IAAc,GAAA;AAAA,EACvB;AAEA,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,KAAc,GAAA,EAAK;AACnC,IAAA,OAAO,UAAA,IAAc,GAAA;AAAA,EACvB;AAEA,EAAA,IAAI,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAG;AAC7B,IAAA,OAAO,cAAc,SAAS,CAAA;AAAA,EAChC;AAEA,EAAA,MAAM,MAAA,GAAS,UAAA,KAAe,GAAA,GAAM,EAAA,GAAK,UAAA;AACzC,EAAA,OAAO,aAAA,CAAc,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAC/C;AAEA,SAAS,SAAA,CAAU,UAAkB,IAAA,EAAsB;AACzD,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,OAAO,cAAc,QAAQ,CAAA;AAAA,EAC/B;AAEA,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,CAAA,EAAG,IAAI,GAAG,CAAA,EAAG;AACnC,IAAA,OAAO,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,cAAc,QAAQ,CAAA;AAC/B;AAEA,SAAS,eAAe,IAAA,EAAwB;AAC9C,EAAA,OAAO,cAAc,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAClF;AAEA,SAAS,YAAY,IAAA,EAA+E;AAClG,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAY,CAAC,MAAM,CAAA;AAAA,MACnB,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,eAAe,IAAI,CAAA;AACpC,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,QAAA;AAAA,MACT,YAAY,EAAC;AAAA,MACb,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,OAAA,GAAU,GAAA;AACd,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI,YAAY,GAAA,EAAK;AACnB,MAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AACtB,MAAA,OAAA,IAAW,YAAA;AACX,MAAA,KAAA,IAAS,EAAA;AACT,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,MAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC/B,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;AACnC,MAAA,MAAM,YAAY,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,OAAA;AAClD,MAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,MAAA,OAAA,IAAW,SAAS,YAAA,GAAe,UAAA;AACnC,MAAA,KAAA,IAAS,SAAS,CAAA,GAAI,CAAA;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,IAAW,CAAA,CAAA,EAAI,WAAA,CAAY,OAAO,CAAC,CAAA,CAAA;AACnC,IAAA,KAAA,IAAS,EAAA;AAAA,EACX;AAEA,EAAA,OAAA,IAAW,KAAA;AAEX,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,IAAI,MAAA,CAAO,OAAA,EAAS,GAAG,CAAA;AAAA,IAChC,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,cAAc,KAAA,EAAiC;AACtD,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAEzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACnD,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA,EAAM;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,MAAA,KAAA,MAAW,SAAS,QAAA,EAAU;AAC5B,QAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MACxC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EACxC;AAEA,EAAA,MAAM,UAAA,GAAa,aAAa,QAAA,EAAS;AACzC,EAAA,OAAO,UAAA,GAAa,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,GAAK,EAAA;AACzC;AAEA,SAAS,WAAW,YAAA,EAA2C;AAC7D,EAAA,MAAM,QAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,YAAA,CAAa,SAAQ,EAAG;AACjD,IAAA,MAAM,QAAA,GAAW,MAAM,GAAG,CAAA;AAE1B,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AACb,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAC,GAAG,QAAA,EAAU,KAAK,CAAA,GAAI,CAAC,UAAU,KAAK,CAAA;AAAA,EAChF;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAe,IAAA,EAAgD;AACtE,EAAA,MAAM,OAAA,GAAU,KAAK,UAAA,CAAW,GAAG,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAEvD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAG;AAAA,EACjC;AAEA,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,UAAA,EAAY,2BAA2B,CAAA;AAE9D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,aAAA,CAAc,MAAA,CAAO,QAAQ,CAAA;AAAA,IACnC,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF;AAEA,SAAS,yBAAyB,UAAA,EAA0C;AAC1E,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,eAAe,IAAA,IAAQ,OAAA,IAAW,eAAe,KAAA,EAAO;AAC5F,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW;AAAA,GACb;AACF;AAEA,SAAS,sBAAsB,MAAA,EAAqC;AAClE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAE,IAAI,CAAC,CAAC,IAAA,EAAM,UAAU,CAAA,MAAO;AAAA,IACzD,IAAA;AAAA,IACA,GAAG,yBAAyB,UAAU;AAAA,GACxC,CAAE,CAAA;AACJ;AAEA,SAAS,iBAAiB,MAAA,EAA6C;AACrE,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAmC;AACrD,EAAA,MAAM,WAA0B,EAAC;AACjC,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,EAAwB,UAAA,EAAoB,KAAA,KAAmC;AAC3F,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,WAAW,SAAA,CAAU,UAAA,EAAY,OAAO,IAAA,EAAM,MAAA,CAAO,UAAU,IAAI,CAAA;AACzE,MAAA,MAAM,QAAA,GAAW,YAAY,QAAQ,CAAA;AACrC,MAAA,MAAM,UAAA,GAAoC;AAAA,QACxC,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,QAAA;AAAA,QACA,YAAA,EAAc,QAAA;AAAA,QACd,MAAM,MAAA,CAAO,IAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,KAAA,EAAO,KAAA;AAAA,OACT;AAEA,MAAA,IAAI,WAAW,IAAA,EAAM;AACnB,QAAA,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,IAAA,EAAM,UAAU,CAAA;AAAA,MACvC;AAEA,MAAA,MAAM,SAAA,GAAY,CAAC,GAAG,KAAA,EAAO,UAAU,CAAA;AAEvC,MAAA,IAAI,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,QAAA,EAAU;AAC/C,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,OAAA,EAAS,SAAA;AAAA,UACT,SAAS,QAAA,CAAS,OAAA;AAAA,UAClB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAA,EAAO,QAAA,CAAS,KAAA,GAAQ,SAAA,CAAU,MAAA;AAAA,UAClC,OAAO,UAAA,CAAW,KAAA;AAAA,UAClB;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAQ;AAC3B,QAAA,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,QAAA,EAAU,SAAS,CAAA;AAAA,MAC3C;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,IAAA,CAAK,qBAAA,CAAsB,MAAM,CAAA,EAAG,GAAA,EAAK,EAAE,CAAA;AAE3C,EAAA,QAAA,CAAS,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,GAAQ,KAAA,CAAM,KAAK,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,qBAAA,CAAsB,UAAkB,MAAA,EAA4C;AAC3F,EAAA,MAAM,cAAA,GAAiB,UAAU,EAAC;AAElC,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,OAAO,MAAA,CAAO,cAAA,CAAe,IAAA,IAAQ,GAAG,CAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,WAAW,cAAA,CAAe,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,OAAA,KAAY;AACzD,IAAA,IAAI,YAAY,GAAA,EAAK;AACnB,MAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,cAAA,CAAe,IAAA,IAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC5B,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA;AACnC,IAAA,MAAM,OAAO,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,OAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,eAAe,IAAI,CAAA;AAEjC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAI,CAAA,OAAA,EAAU,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,MAAA,CAAO,KAAK,CAAA,CAChB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS,kBAAA,CAAmB,IAAI,CAAC,CAAA,CACtC,KAAK,GAAG,CAAA;AAAA,IACb;AAEA,IAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AAED,EAAA,OAAO,cAAc,CAAA,CAAA,EAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AAC/C;AAEO,SAAS,SAAA,CAAU,SAAiB,IAAA,EAAkC;AAC3E,EAAA,MAAM,QAAA,GAAW,YAAY,OAAO,CAAA;AACpC,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA;AAEzD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAsB,EAAC;AAC7B,EAAA,QAAA,CAAS,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAChD,IAAA,MAAA,CAAO,SAAS,CAAA,GAAI,kBAAA,CAAmB,QAAQ,KAAA,GAAQ,CAAC,KAAK,EAAE,CAAA;AAAA,EACjE,CAAC,CAAA;AAED,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAA,CAAqB,MAAkB,IAAA,EAA4B;AAC1E,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AACxC,EAAA,MAAM,YAAA,GACJ,IAAA,KAAS,MAAA,GACJ,GAAA,CAAI,KAAK,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,GAAI,SAAS,SAAA,GACpE,IAAA;AAEN,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AACzC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,QAAQ,SAAA,CAAU,MAAA;AAAA,MAClB,IAAA,EAAM;AAAA,KACR;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAAA,IAClC,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,MAAM,GAAA,CAAI;AAAA,GACZ;AACF;AAEA,SAAS,aAAA,CACP,EAAA,EACA,IAAA,EACA,IAAA,EACA,KAAA,EACc;AACd,EAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,GAAG,UAAA,CAAW,IAAI,KAAK,EAAA,CAAG,UAAA,CAAW,KAAK,CAAA,EAAG;AAC/C,MAAA,MAAM,UAAA,GAAa,eAAe,EAAE,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,EAAA,EAAI,MAAA,CAAO,SAAS,IAAI,CAAA;AAE5C,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ;AACzC,MAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC/B,MAAA,OAAO,oBAAA,CAAqB,MAAM,IAAI,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,GAAA,CAAI,KAAK,UAAA,CAAW,IAAI,KAAK,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG;AAC3D,MAAA,MAAM,UAAA,GAAa,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC1C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,IAAA,KAAS,SAAS,MAAA,GAAS,SAAA;AAAA,MAC/D,IAAA,EAAM,SAAA,CAAU,GAAA,CAAI,QAAA,EAAU,IAAI,CAAA;AAAA,MAClC,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,MAAM,GAAA,CAAI;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,MAAM,aAA2B,IAAA,KAAS,MAAA,GAAS,SAAA,GAAY,IAAA,KAAS,SAAS,MAAA,GAAS,SAAA;AAC1F,EAAA,MAAM,SAAS,EAAA,CAAG,IAAA,GAAO,MAAM,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,GAAI,IAAA;AAE9C,EAAA,IAAI,EAAA,CAAG,IAAA,IAAQ,CAAC,MAAA,EAAQ;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,EAAA,CAAG,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,EACnE;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,GACf,qBAAA,CAAsB,MAAA,CAAO,YAAA,EAAc,EAAA,CAAG,MAAM,CAAA,GACpD,qBAAA,CAAsB,EAAA,CAAG,IAAA,IAAQ,GAAA,EAAK,GAAG,MAAM,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ,aAAA,CAAc,EAAA,CAAG,KAAK,CAAA;AAAA,IAC9B,IAAA,EAAM,EAAA,CAAG,IAAA,GAAO,CAAA,CAAA,EAAI,MAAA,CAAO,EAAA,CAAG,IAAI,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,CAAA,GAAK;AAAA,GAC5D;AACF;AAEA,SAAS,eAAA,CAAgB,QAAsB,IAAA,EAAsB;AACnE,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAA,GAAO,IAAA,KAAS,GAAA,GAAM,EAAA,GAAK,IAAA;AACjC,IAAA,OAAO,GAAG,IAAI,CAAA,EAAA,EAAK,OAAO,IAAI,CAAA,EAAG,OAAO,MAAM,CAAA,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,UAAA,GAAa,IAAA,KAAS,GAAA,GAAM,MAAA,CAAO,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,KAAS,GAAA,GAAM,EAAA,GAAK,OAAO,IAAI,CAAA,CAAA;AAChG,EAAA,OAAO,GAAG,UAAU,CAAA,EAAG,OAAO,MAAM,CAAA,EAAG,OAAO,IAAI,CAAA,CAAA;AACpD;AAEA,SAAS,YAAA,CAAa,QAAuC,OAAA,EAAwC;AACnG,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAO,MAAA,KAAW,UAAA,GAAa,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AAC1D;AAEA,SAAS,WAAA,CAAY,MAAc,QAAA,EAA8E;AAC/G,EAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAsB,EAAC;AAC7B,IAAA,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAC9C,MAAA,MAAA,CAAO,SAAS,CAAA,GAAI,kBAAA,CAAmB,QAAQ,KAAA,GAAQ,CAAC,KAAK,EAAE,CAAA;AAAA,IACjE,CAAC,CAAA;AAED,IAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAAA,EAC1B;AAEA,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,EAAC,EAAE;AACpC;AAEA,SAAS,aAAA,CAAc,MAAA,EAA4B,MAAA,EAAsB,MAAA,EAAoC;AAC3G,EAAA,MAAM,YAAA,GAAe,IAAI,eAAA,CAAgB,MAAA,CAAO,MAAM,CAAA;AACtD,EAAA,MAAM,QAAA,GAAW,GAAG,MAAA,CAAO,IAAI,GAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA;AAC7D,EAAA,MAAM,UAAU,MAAA,GACZ,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IAC9B,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,MAAM,MAAA,CAAO,QAAA;AAAA,IACb,MAAM,MAAA,CAAO;AAAA,IACb,CAAA,GACF,aAAA;AACJ,EAAA,MAAM,OAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,EAAM,IAAA;AAAA,IACZ,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAA;AAAA,IACA,MAAM,QAAA,IAAY,GAAA;AAAA,IAClB,MAAA;AAAA,IACA,KAAA,EAAO,WAAW,YAAY,CAAA;AAAA,IAC9B,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,IAAA;AAAA,IAClE,MAAM,IAAA,EAAM,IAAA;AAAA,IACZ,WAAA,EAAa,MAAM,QAAA,IAAY,GAAA;AAAA,IAC/B;AAAA,GACF;AACF;AAEA,SAAS,eAAA,CAAgB,OAAmB,MAAA,EAAqC;AAC/E,EAAA,OAAOA,gBAAgB,MAAM;AAC3B,IAAA,UAAA,CAAW,gBAAgB,MAAM,CAAA;AAEjC,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,yBAAA;AAAA,MACV,cAAc,EAAC;AAAA,MACf,cAAc,EAAC;AAAA,MACf,cAAc,EAAC;AAAA,MACf,eAAe,EAAC;AAAA,MAChB,cAAc,EAAC;AAAA,MACf,iBAAA,EAAmB;AAAA,QACjB;AAAA,UACE,EAAA,EAAI,cAAA;AAAA,UACJ,YAAA,EAAc,MAAM,KAAA,CAAM,MAAA,CAAO,aAAa,YAAA,CAAa,SAAA;AAAA,UAC3D,QAAA,EAAU,MAAM,KAAA,CAAM;AAAA;AACxB;AACF,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,qBAAqB,OAAA,EAAuC;AACnE,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,YAAA,CAAa,SAAA;AAAA,EACtB;AAEA,EAAA,IAAI,MAAA,GAAS,YAAA;AAEb,EAAA,KAAA,IAAS,QAAQ,OAAA,CAAQ,MAAA,GAAS,GAAG,KAAA,IAAS,CAAA,EAAG,SAAS,CAAA,EAAG;AAC3D,IAAA,MAAA,GAAS;AAAA,MACP,SAAA,EAAW,eAAA,CAAgB,OAAA,CAAQ,KAAK,GAAG,MAAM,CAAA;AAAA,MACjD,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,SAAA;AAChB;AAEA,SAAS,aACP,MAAA,EACA,MAAA,EACA,IAAA,EACA,IAAA,EACA,QAAQ,CAAA,EACS;AACjB,EAAA,IAAI,QAAQ,EAAA,EAAI;AACd,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,EAC9E;AAEA,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,OAAO,QAAQ,CAAA;AACtD,EAAA,MAAM,WAAW,aAAA,CAAc,KAAA,CAAM,MAAA,EAAQ,MAAA,EAAQ,MAAM,MAAM,CAAA;AACjE,EAAA,MAAM,OAAA,GAA6B;AAAA,IACjC,EAAA,EAAI,QAAA;AAAA,IACJ,IAAA;AAAA,IACA,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,OAAO,QAAA,CAAS;AAAA,GAClB;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,EAAQ,OAAA,CAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAClE,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,EAAM,QAAA,KAAa,aAAa,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,GAAI,IAAA,EAAM,QAAA;AAEvF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,YAAA,CAAa,MAAA,EAAQ,aAAA,CAAc,QAAA,EAAU,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,EAC7G;AAEA,EAAA,MAAM,WAAA,GAAc,IAAA,EAAM,WAAA,GAAc,OAAO,CAAA;AAE/C,EAAA,IAAI,WAAA,KAAgB,SAAS,IAAA,EAAM;AACjC,IAAA,OAAO;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,WAAW,YAAA,CAAa,SAAA;AAAA,MACxB,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,IAAI,WAAA,IAAe,gBAAgB,IAAA,EAAM;AACvC,IAAA,OAAO,YAAA,CAAa,MAAA,EAAQ,aAAA,CAAc,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAC,CAAA;AAAA,EAChH;AAEA,EAAA,MAAM,WAAyB,KAAA,CAAM,MAAA,EAAQ,OAAA,IAAW,IACrD,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,CAAC,MAAA,CAAO,SAAS,CAAA,CACrC,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,IAChB,MAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAG,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAAA,MACrC,GAAG,QAAA,CAAS,MAAA;AAAA,MACZ,KAAA,EAAO,QAAA;AAAA,MACP,MAAA,EAAQ,YAAA;AAAA,MACR,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,SAAS,QAAA,CAAS,OAAA;AAAA,MAClB;AAAA;AACF,GACF,CAAE,CAAA;AAEJ,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,QAAA;AAAA,IACA,SAAA,EAAW,qBAAqB,OAAO,CAAA;AAAA,IACvC,KAAA,EAAO;AAAA,GACT;AACF;AAEA,SAAS,WAAA,GAAoB;AAC3B,EAAA,MAAA,CAAO,QAAA,CAAS,EAAE,GAAA,EAAK,CAAA,EAAG,MAAM,CAAA,EAAG,QAAA,EAAU,QAAQ,CAAA;AACvD;AAEA,SAAS,aAAa,IAAA,EAAuB;AAC3C,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA;AAC5C,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,cAAA,CAAe,kBAAA,CAAmB,cAAc,CAAC,CAAA;AACzE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAA,CAAO,cAAA,CAAe,EAAE,KAAA,EAAO,OAAA,EAAS,QAAQ,SAAA,EAAW,QAAA,EAAU,QAAQ,CAAA;AAC7E,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAA,CAAY,MAAc,OAAA,EAAwB;AACzD,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,qBAAA,CAAsB,MAAM;AAC1B,MAAA,IAAI,CAAC,YAAA,CAAa,IAAI,CAAA,EAAG;AACvB,QAAA,WAAA,EAAY;AAAA,MACd;AAAA,IACF,CAAC,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,WAAA,EAAY;AACd;AAEA,SAAS,iBAAA,CAAkB,OAAmB,MAAA,EAA2C;AACvF,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,gBAAA,IAAoB,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAChD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAM,OAAA,IAAW,KAAA,CAAM,WAAW,KAAA,CAAM,QAAA,IAAY,MAAM,MAAA,EAAQ;AACpE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,OAAA,EAAS;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,MAAA,CAAO,YAAA,CAAa,UAAU,CAAA,EAAG;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AACrC,EAAA,IAAI,GAAA,IAAO,eAAA,CAAgB,IAAA,CAAK,GAAG,CAAA,EAAG;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,YAAA,CAAa,MAAM,CAAA;AACvC,EAAA,OAAO,CAAC,QAAQ,IAAA,CAAK,UAAA,CAAW,SAAS,CAAA,IAAK,IAAA,CAAK,WAAW,MAAM,CAAA;AACtE;AAEA,SAAS,cAAc,KAAA,EAAwC;AAC7D,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,EAAA,IAAI,EAAE,kBAAkB,IAAA,CAAA,EAAO;AAC7B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,MAAA,YAAkB,OAAA,GAAU,MAAA,GAAS,MAAA,CAAO,aAAA;AAC5D,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA,CAAQ,QAAQ,SAAS,CAAA;AAClC;AAEA,SAAS,aAAA,CAAc,EAAA,EAAiB,OAAA,GAA2B,EAAC,EAAS;AAC3E,EAAA,IAAI,CAAC,YAAA,IAAgB,OAAO,MAAA,KAAW,WAAA,EAAa;AAClD,IAAA,IAAI,OAAO,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAA,CAAO,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,IAC3B;AACA,IAAA;AAAA,EACF;AAEA,EAAA,YAAA,CAAa,QAAA,CAAS,IAAI,OAAO,CAAA;AACnC;AAEO,SAAS,QAAA,CAAS,IAAiB,OAAA,EAAiC;AACzE,EAAA,aAAA,CAAc,IAAI,OAAO,CAAA;AAC3B;AAEO,SAAS,IAAA,CAAK,WAAiC,OAAA,EAA6D;AACjH,EAAA,IACE,OAAO,SAAA,KAAc,QAAA,IACpB,OAAO,SAAA,KAAc,QAAA,IACpB,SAAA,KAAc,IAAA,IACd,EAAE,SAAA,YAAqB,KAAA,CAAA,IACvB,QAAA,IAAY,cAAc,KAAA,EAC5B;AACA,IAAA,OAAO,CAACC,MAAAA,KAAkB;AACxB,MAAAA,QAAO,cAAA,EAAe;AACtB,MAAA,aAAA,CAAc,WAA0B,OAAO,CAAA;AAAA,IACjD,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAA;AAEd,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAElC,EAAA,IAAI,KAAA,YAAiB,UAAA,IAAc,iBAAA,CAAkB,KAAA,EAAO,MAAM,CAAA,EAAG;AACnE,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA;AACxC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,cAAA,EAAe;AACrB,EAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AAC7B;AAEO,SAAS,SAAA,GAAuB;AACrC,EAAA,IAAI,CAAC,UAAA,CAAW,cAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AAEA,EAAA,OAAO,WAAsB,cAAc,CAAA;AAC7C;AAEO,SAAS,QAAA,GAA0B;AACxC,EAAA,OAAO,WAAU,CAAE,QAAA;AACrB;AAEO,SAAS,SAAA,GAAyB;AACvC,EAAA,OAAO,WAAU,CAAE,MAAA;AACrB;AAEO,SAAS,QAAA,GAAuB;AACrC,EAAA,OAAO,WAAU,CAAE,KAAA;AACrB;AAEO,SAAS,YAAY,EAAA,EAAyB;AACnD,EAAA,OAAO,YAAA,EAAc,QAAQ,EAAE,CAAA,KAAM,OAAO,EAAA,KAAO,QAAA,GAAW,EAAA,GAAK,EAAA,CAAG,IAAA,IAAQ,GAAA,CAAA;AAChF;AAEO,SAAS,YAAA,CAAa,IAAiB,OAAA,EAAiC;AAC7E,EAAA,OAAO,YAAA,EAAc,QAAA,CAAS,EAAA,EAAI,OAAO,CAAA,IAAK,KAAA;AAChD;AAEO,IAAM,MAAA,GAASD,gBAAgB,MAAM;AAC1C,EAAA,MAAM,SAAS,UAAA,CAAW,cAAc,CAAA,GAAI,UAAA,CAAwB,cAAc,CAAA,GAAI,YAAA;AAEtF,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,mBAAA;AAAA,IACV,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,eAAe,EAAC;AAAA,IAChB,cAAc,EAAC;AAAA,IACf,iBAAA,EAAmB;AAAA,MACjB;AAAA,QACE,EAAA,EAAI,QAAA;AAAA,QACJ,YAAA,EAAc,MAAM,MAAA,CAAO,SAAA;AAAA,QAC3B,QAAA,EAAU,MAAM,MAAA,CAAO;AAAA;AACzB;AACF,GACF;AACF,CAAC;AAED,SAAS,oBAAoB,IAAA,EAAoC;AAC/D,EAAA,OAAOA,eAAAA,CAAgB,CAAC,aAAA,MAAmB;AAAA,IACzC,QAAA,EAAU,2BAAA;AAAA,IACV,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,eAAe,EAAC;AAAA,IAChB,cAAc,EAAC;AAAA,IACf,iBAAA,EAAmB;AAAA,MACjB;AAAA,QACE,EAAA,EAAI,gBAAA;AAAA,QACJ,cAAc,MAAM,MAAA;AAAA,QACpB,UAAU,OAAO;AAAA,UACf,GAAI,aAAA;AAAA,UACJ;AAAA,SACF;AAAA;AACF;AACF,GACF,CAAE,CAAA;AACJ;AAEA,IAAM,MAAA,GAASA,eAAAA,CAAgB,CAAC,aAAA,KAAkB;AAChD,EAAA,MAAM,KAAA,GAAQ,aAAA;AACd,EAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,IAAI,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA;AAClD,EAAA,MAAM,cAAA,GAAiB,MAAM,CAAC,CAAA;AAC9B,EAAA,IAAI,YAAA,GAAgC;AAAA,IAClC,IAAA,EAAM,SAAA;AAAA,IACN,QAAA,EAAU,cAAA;AAAA,IACV,WAAW,YAAA,CAAa,SAAA;AAAA,IACxB,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAA0B;AACjD,IAAA,YAAA,GAAe,IAAA;AACf,IAAA,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAe,IAAA,EAAK,GAAI,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,cAAA,CAAe,KAAA;AACf,IAAA,OAAO,YAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,GAAA,GAAiB;AAAA,IACrB,OAAA,EAAS,MAAM,gBAAA,EAAiB;AAAA,IAChC,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,kBAAiB,CAAE,IAAA;AAAA,IAC5B,CAAA;AAAA,IACA,IAAI,QAAA,GAAW;AACb,MAAA,OAAO,kBAAiB,CAAE,QAAA;AAAA,IAC5B,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,IAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,QAAA,GAAW;AACb,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,QAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,MAAA,GAAS;AACX,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,MAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,KAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,IAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,WAAA,GAAc;AAChB,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,WAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,gBAAA,GAAmB,QAAA,CAAS,OAAA;AAAA,IACrC,CAAA;AAAA,IACA,IAAA,CAAK,EAAA,EAAI,OAAA,GAAU,EAAC,EAAG;AACrB,MAAA,MAAM,MAAA,GAAS,cAAc,EAAA,EAAI,KAAA,CAAM,QAAQ,MAAA,EAAQ,IAAA,EAAM,OAAO,KAAK,CAAA;AACzE,MAAA,MAAM,OAAO,YAAA,CAAa,MAAA,EAAQ,MAAA,EAAQ,YAAA,CAAa,UAAU,IAAI,CAAA;AACrE,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAA,EAAQ,IAAI,CAAA;AACzC,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,GAAU,cAAA,GAAiB,WAAA;AAElD,MAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAI,EAAA;AAExE,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,MAAM,OAAA,GAAU,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,QAAQ,GAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,EAAG,UAAU,CAAA,CAAA;AACjF,UAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,EAAC,EAAG,IAAI,OAAO,CAAA;AAAA,QAC7C,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,QAAA,CAAS,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,QAAQ,MAAM,CAAA,CAAE,EAAC,EAAG,IAAI,IAAI,CAAA;AAAA,MACrC;AAEA,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,WAAA,CAAY,OAAO,IAAA,EAAM,OAAA,CAAQ,MAAA,IAAU,KAAA,CAAM,UAAU,IAAI,CAAA;AAAA,IACjE,CAAA;AAAA,IACA,QAAA,CAAS,EAAA,EAAI,OAAA,GAAU,EAAC,EAAG;AACzB,MAAA,IAAA,CAAK,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,OAAA,CAAQ,EAAA,EAAI,OAAA,GAAU,EAAC,EAAG;AACxB,MAAA,IAAA,CAAK,KAAK,EAAA,EAAI,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,MAAM,CAAA;AAAA,IAC7C,CAAA;AAAA,IACA,IAAA,GAAO;AACL,MAAA,MAAA,CAAO,QAAQ,IAAA,EAAK;AAAA,IACtB,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,MAAA,CAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,QAAQ,EAAA,EAAI;AACV,MAAA,OAAO,eAAA,CAAgB,aAAA,CAAc,EAAA,EAAI,KAAA,CAAM,IAAA,IAAQ,QAAQ,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,IAC1F,CAAA;AAAA,IACA,KAAK,EAAA,EAAI;AACP,MAAA,OAAO,IAAA,CAAK,QAAQ,EAAE,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,QAAA,CAAS,EAAA,EAAI,OAAA,GAAU,EAAC,EAAG;AACzB,MAAA,MAAM,MAAA,GAAS,cAAc,EAAA,EAAI,KAAA,CAAM,QAAQ,MAAA,EAAQ,IAAA,EAAM,OAAO,KAAK,CAAA;AACzE,MAAA,MAAM,OAAA,GAAU,gBAAA,EAAiB,CAAE,QAAA,CAAS,IAAA;AAE5C,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,OAAO,YAAY,MAAA,CAAO,IAAA;AAAA,MAC5B;AAEA,MAAA,OAAO,OAAA,KAAY,OAAO,IAAA,IAAQ,OAAA,CAAQ,WAAW,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACxE;AAAA,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,GAAU,IAAA,KAAS;AACzC,IAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,CAAM,IAAA,IAAQ,QAAQ,IAAI,CAAA;AAC9D,IAAA,MAAM,OAAO,YAAA,CAAa,MAAA,EAAQ,QAAQ,YAAA,CAAa,QAAA,IAAY,MAAM,IAAI,CAAA;AAC7E,IAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,MAAA,EAAQ,IAAI,CAAA;AACzC,MAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,EAAC,EAAG,IAAI,IAAI,CAAA;AAAA,IAC1C;AAEA,IAAA,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,MAAA,IAAU,IAAI,CAAA;AAAA,EAC/C,CAAA;AAEA,EAAA,UAAA,CAAW,gBAAgB,GAAG,CAAA;AAC9B,EAAA,YAAA,GAAe,GAAA;AAEf,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,cAAA,CAAe,KAAK,CAAA;AAEpB,IAAA,MAAA,CAAO,MAAM;AACX,MAAA,MAAM,YAAA,GAAe,MAAM,cAAA,CAAe,KAAK,CAAA;AAC/C,MAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAiB;AACpC,QAAA,IAAI,EAAE,iBAAiB,UAAA,CAAA,EAAa;AAClC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,cAAc,KAAK,CAAA;AAClC,QAAA,IAAI,iBAAA,CAAkB,KAAA,EAAO,MAAM,CAAA,EAAG;AACpC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,IAAA,GAAO,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA;AACxC,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA;AAAA,QACF;AAEA,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,GAAA,CAAI,SAAS,IAAI,CAAA;AAAA,MACnB,CAAA;AAEA,MAAA,MAAA,CAAO,gBAAA,CAAiB,YAAY,YAAY,CAAA;AAChD,MAAA,MAAA,CAAO,gBAAA,CAAiB,cAAc,YAAY,CAAA;AAClD,MAAA,QAAA,CAAS,gBAAA,CAAiB,OAAA,EAAS,WAAA,EAAa,IAAI,CAAA;AAEpD,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,iBAAiB,GAAA,EAAK;AACxB,UAAA,YAAA,GAAe,IAAA;AAAA,QACjB;AAEA,QAAA,MAAA,CAAO,mBAAA,CAAoB,YAAY,YAAY,CAAA;AACnD,QAAA,MAAA,CAAO,mBAAA,CAAoB,cAAc,YAAY,CAAA;AACrD,QAAA,QAAA,CAAS,mBAAA,CAAoB,OAAA,EAAS,WAAA,EAAa,IAAI,CAAA;AAAA,MACzD,CAAA;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,wBAAA;AAAA,IACV,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,cAAc,EAAC;AAAA,IACf,eAAe,EAAC;AAAA,IAChB,cAAc,EAAC;AAAA,IACf,iBAAA,EAAmB;AAAA,MACjB;AAAA,QACE,EAAA,EAAI,aAAA;AAAA,QACJ,cAAc,MAAM;AAClB,UAAA,cAAA,CAAe,KAAA;AACf,UAAA,OAAO,YAAA,CAAa,SAAA;AAAA,QACtB,CAAA;AAAA,QACA,QAAA,EAAU,MAAM,YAAA,CAAa;AAAA;AAC/B;AACF,GACF;AACF,CAAC,CAAA;AAED,IAAM,aAAA,GAAgB,oBAAoB,SAAS;AACnD,IAAM,UAAA,GAAa,oBAAoB,MAAM;AAE7C,IAAO,WAAA,GAAQ","file":"index.js","sourcesContent":["import { defineComponent, type OlovaComponent, type OlovaProps } from \"olova/runtime\";\nimport { isActiveHref, resolveHref, type MatchOptions } from \"./index\";\n\ntype LinkProps = OlovaProps & {\n to?: unknown;\n name?: unknown;\n href?: unknown;\n params?: unknown;\n query?: unknown;\n hash?: unknown;\n class?: unknown;\n activeClass?: unknown;\n inactiveClass?: unknown;\n exact?: unknown;\n id?: unknown;\n title?: unknown;\n target?: unknown;\n rel?: unknown;\n replace?: unknown;\n scroll?: unknown;\n};\n\nfunction toBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction toStringValue(value: unknown, fallback = \"\"): string {\n return value == null ? fallback : String(value);\n}\n\nconst Link = defineComponent((incomingProps) => {\n const props = incomingProps as LinkProps;\n const destination = () =>\n props.to || (props.name ? { name: props.name as string, params: props.params, query: props.query, hash: props.hash } : { path: props.href ?? \"/\", params: props.params, query: props.query, hash: props.hash });\n const isActive = () => isActiveHref(destination(), { exact: toBoolean(props.exact) } as MatchOptions);\n const linkClass = () =>\n [toStringValue(props.class), isActive() ? toStringValue(props.activeClass) : toStringValue(props.inactiveClass)]\n .filter(Boolean)\n .join(\" \");\n return {\n template:\n '<a href=\"__O_ATTR_href__\" class=\"__O_ATTR_class__\" id=\"__O_ATTR_id__\" title=\"__O_ATTR_title__\" target=\"__O_ATTR_target__\" rel=\"__O_ATTR_rel__\" aria-current=\"__O_ATTR_current__\">__O_SLOT_slot__</a>',\n textBindings: [],\n htmlBindings: [],\n attrBindings: [\n { id: \"href\", attr: \"href\", get: () => resolveHref(destination()) },\n { id: \"class\", attr: \"class\", get: linkClass },\n { id: \"id\", attr: \"id\", get: () => props.id ?? null },\n { id: \"title\", attr: \"title\", get: () => props.title ?? null },\n { id: \"target\", attr: \"target\", get: () => props.target ?? null },\n { id: \"rel\", attr: \"rel\", get: () => props.rel ?? null },\n { id: \"current\", attr: \"aria-current\", get: () => (isActive() ? \"page\" : null) },\n ],\n eventBindings: [],\n slotBindings: [{ id: \"slot\", name: \"default\" }],\n componentBindings: [],\n };\n});\n\nexport default Link as OlovaComponent;\n","import { effect, state } from \"olova/core\";\nimport {\n defineComponent,\n getContext,\n hasContext,\n setContext,\n type OlovaComponent,\n type OlovaProps,\n} from \"olova/runtime\";\nimport Link from \"./Link\";\n\ntype RouterMode = \"auto\" | \"history\" | \"hash\";\ntype ResolvedMode = \"history\" | \"hash\";\ntype Primitive = string | number | boolean;\ntype RouteParams = Record<string, string>;\ntype RouteQueryValue = string | string[];\ntype RouteQuery = Record<string, RouteQueryValue>;\ntype RouteQueryInputValue = Primitive | Primitive[] | null | undefined;\ntype RouteQueryInput = Record<string, RouteQueryInputValue>;\ntype RouteTarget =\n | string\n | {\n name?: string;\n path?: string;\n params?: Record<string, Primitive>;\n query?: RouteQueryInput;\n hash?: string;\n };\ntype NavigateOptions = {\n replace?: boolean;\n scroll?: boolean;\n};\ntype MatchOptions = {\n exact?: boolean;\n};\ntype RouteMatchInfo = {\n name?: string;\n path: string;\n meta?: unknown;\n};\ntype RouteLocation = {\n name?: string;\n path: string;\n fullPath: string;\n href: string;\n params: RouteParams;\n query: RouteQuery;\n hash: string;\n meta?: unknown;\n matchedPath: string;\n matches: RouteMatchInfo[];\n};\ntype RouteGuardContext = {\n to: RouteLocation;\n from: RouteLocation | null;\n params: RouteParams;\n query: RouteQuery;\n};\ntype RouteGuardResult = boolean | string | RouteTarget | void;\ntype RouteGuard = (context: RouteGuardContext) => RouteGuardResult;\ntype RouteRedirect =\n | RouteTarget\n | ((context: RouteGuardContext) => RouteTarget | null | undefined);\ntype RoutePropsFactory = OlovaProps | ((context: RouteGuardContext) => OlovaProps);\ntype RouteObject = {\n path?: string;\n index?: boolean;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n name?: string;\n meta?: unknown;\n children?: RouteObject[];\n};\ntype RouteDefinition =\n | OlovaComponent\n | (Omit<RouteObject, \"path\" | \"index\"> & {\n children?: RouteObject[];\n });\ntype RouterRoutes = Record<string, RouteDefinition> | RouteObject[];\ntype RouterProps = {\n routes: RouterRoutes;\n mode?: RouterMode;\n base?: string;\n scroll?: boolean;\n};\n\ntype NormalizedRouteRecord = {\n name?: string;\n fullPath: string;\n pathTemplate: string;\n meta?: unknown;\n component?: OlovaComponent;\n redirect?: RouteRedirect;\n props?: RoutePropsFactory;\n beforeEnter?: RouteGuard;\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n};\n\ntype RouteBranch = {\n records: NormalizedRouteRecord[];\n matcher: RegExp;\n paramNames: string[];\n score: number;\n order: number;\n fullPath: string;\n};\n\ntype NormalizedRouteConfig = {\n branches: RouteBranch[];\n named: Map<string, NormalizedRouteRecord>;\n};\n\ntype RouteMatch = {\n record: NormalizedRouteRecord;\n props: OlovaProps;\n};\n\ntype ParsedTarget = {\n mode: ResolvedMode;\n path: string;\n search: string;\n hash: string;\n};\n\ntype RouteResolution = {\n mode: ResolvedMode;\n location: RouteLocation;\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype OutletState = {\n component: OlovaComponent;\n props: OlovaProps;\n};\n\ntype RouterApi = {\n current: () => RouteResolution;\n readonly mode: ResolvedMode;\n readonly location: RouteLocation;\n readonly path: string;\n readonly fullPath: string;\n readonly params: RouteParams;\n readonly query: RouteQuery;\n readonly hash: string;\n readonly matchedPath: string;\n readonly matches: RouteMatchInfo[];\n push: (to: RouteTarget, options?: NavigateOptions) => void;\n navigate: (to: RouteTarget, options?: NavigateOptions) => void;\n replace: (to: RouteTarget, options?: Omit<NavigateOptions, \"replace\">) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n resolve: (to: RouteTarget) => string;\n href: (to: RouteTarget) => string;\n isActive: (to: RouteTarget, options?: MatchOptions) => boolean;\n};\n\nexport type {\n MatchOptions,\n NavigateOptions,\n RouteDefinition,\n RouteGuardContext,\n RouteLocation,\n RouteMatchInfo,\n RouteObject,\n RouteParams,\n RouteQuery,\n RouteQueryInput,\n RouteTarget,\n RouterMode,\n RouterProps,\n RouterRoutes,\n};\n\nconst ROUTER_CONTEXT = Symbol.for(\"olova.router\");\nconst OUTLET_CONTEXT = Symbol.for(\"olova.router.outlet\");\nconst EMPTY_PROPS = Object.freeze({}) as OlovaProps;\nconst EMPTY_QUERY = Object.freeze({}) as RouteQuery;\nconst EMPTY_MATCHES = Object.freeze([]) as unknown as RouteMatchInfo[];\nconst EMPTY_LOCATION: RouteLocation = {\n path: \"/\",\n fullPath: \"/\",\n href: \"/\",\n params: {},\n query: EMPTY_QUERY,\n hash: \"\",\n matchedPath: \"*\",\n matches: EMPTY_MATCHES,\n};\nconst EMPTY_OUTLET: OutletState = {\n component: defineComponent(() => ({\n template: \"\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [],\n })),\n props: EMPTY_PROPS,\n};\n\nlet activeRouter: RouterApi | null = null;\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction normalizeBase(base = \"/\"): string {\n if (!base || base === \"/\") {\n return \"/\";\n }\n\n return `/${base.replace(/^\\/+|\\/+$/g, \"\")}`;\n}\n\nfunction normalizePath(path = \"/\"): string {\n if (!path) {\n return \"/\";\n }\n\n const [pathname, suffix = \"\"] = path.split(/(?=[?#])/u, 2);\n const cleaned = pathname.replace(/\\/{2,}/g, \"/\").replace(/\\/+$/g, \"\") || \"/\";\n return cleaned.startsWith(\"/\") ? `${cleaned}${suffix}` : `/${cleaned}${suffix}`;\n}\n\nfunction joinPaths(parentPath: string, childPath: string | undefined, index = false): string {\n if (index) {\n return parentPath || \"/\";\n }\n\n if (!childPath || childPath === \"/\") {\n return parentPath || \"/\";\n }\n\n if (childPath.startsWith(\"/\")) {\n return normalizePath(childPath);\n }\n\n const parent = parentPath === \"/\" ? \"\" : parentPath;\n return normalizePath(`${parent}/${childPath}`);\n}\n\nfunction stripBase(pathname: string, base: string): string {\n if (base === \"/\") {\n return normalizePath(pathname);\n }\n\n if (pathname === base) {\n return \"/\";\n }\n\n if (pathname.startsWith(`${base}/`)) {\n return normalizePath(pathname.slice(base.length));\n }\n\n return normalizePath(pathname);\n}\n\nfunction splitRoutePath(path: string): string[] {\n return normalizePath(path).split(\"?\")[0].split(\"#\")[0].split(\"/\").filter(Boolean);\n}\n\nfunction compilePath(path: string): Pick<NormalizedRouteRecord, \"matcher\" | \"paramNames\" | \"score\"> {\n if (path === \"*\") {\n return {\n matcher: /^.*$/u,\n paramNames: [\"wild\"],\n score: -1000,\n };\n }\n\n const segments = splitRoutePath(path);\n if (segments.length === 0) {\n return {\n matcher: /^\\/?$/u,\n paramNames: [],\n score: 100,\n };\n }\n\n const paramNames: string[] = [];\n let pattern = \"^\";\n let score = 0;\n\n for (const segment of segments) {\n if (segment === \"*\") {\n paramNames.push(\"wild\");\n pattern += \"(?:/(.*))?\";\n score -= 20;\n continue;\n }\n\n if (segment.startsWith(\":\")) {\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const paramName = repeat ? rawName.slice(0, -1) : rawName;\n paramNames.push(paramName);\n pattern += repeat ? \"(?:/(.*))?\" : \"/([^/]+)\";\n score += repeat ? 4 : 8;\n continue;\n }\n\n pattern += `/${escapeRegex(segment)}`;\n score += 12;\n }\n\n pattern += \"/?$\";\n\n return {\n matcher: new RegExp(pattern, \"u\"),\n paramNames,\n score,\n };\n}\n\nfunction queryToSearch(query?: RouteQueryInput): string {\n if (!query) {\n return \"\";\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === undefined || rawValue === null) {\n continue;\n }\n\n if (Array.isArray(rawValue)) {\n for (const value of rawValue) {\n searchParams.append(key, String(value));\n }\n continue;\n }\n\n searchParams.set(key, String(rawValue));\n }\n\n const serialized = searchParams.toString();\n return serialized ? `?${serialized}` : \"\";\n}\n\nfunction parseQuery(searchParams: URLSearchParams): RouteQuery {\n const query: RouteQuery = {};\n\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key];\n\n if (existing === undefined) {\n query[key] = value;\n continue;\n }\n\n query[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];\n }\n\n return query;\n}\n\nfunction parseHashRoute(hash: string): { path: string; search: string } {\n const rawHash = hash.startsWith(\"#\") ? hash.slice(1) : hash;\n\n if (!rawHash) {\n return { path: \"/\", search: \"\" };\n }\n\n const normalized = rawHash.startsWith(\"/\") ? rawHash : `/${rawHash}`;\n const parsed = new URL(normalized, \"http://olova-router.local\");\n\n return {\n path: normalizePath(parsed.pathname),\n search: parsed.search,\n };\n}\n\nfunction normalizeRouteDefinition(definition: RouteDefinition): RouteObject {\n if (typeof definition === \"object\" && definition !== null && \"setup\" in definition === false) {\n return definition as RouteObject;\n }\n\n return {\n component: definition as OlovaComponent,\n };\n}\n\nfunction normalizeRouteObjects(routes: RouterRoutes): RouteObject[] {\n if (Array.isArray(routes)) {\n return routes;\n }\n\n return Object.entries(routes).map(([path, definition]) => ({\n path,\n ...normalizeRouteDefinition(definition),\n }));\n}\n\nfunction buildRouteConfig(routes: RouterRoutes): NormalizedRouteConfig {\n const named = new Map<string, NormalizedRouteRecord>();\n const branches: RouteBranch[] = [];\n let order = 0;\n\n const walk = (records: RouteObject[], parentPath: string, chain: NormalizedRouteRecord[]) => {\n for (const record of records) {\n const fullPath = joinPaths(parentPath, record.path, record.index === true);\n const compiled = compilePath(fullPath);\n const normalized: NormalizedRouteRecord = {\n name: record.name,\n fullPath,\n pathTemplate: fullPath,\n meta: record.meta,\n component: record.component,\n redirect: record.redirect,\n props: record.props,\n beforeEnter: record.beforeEnter,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score,\n order: order++,\n };\n\n if (normalized.name) {\n named.set(normalized.name, normalized);\n }\n\n const nextChain = [...chain, normalized];\n\n if (normalized.component || normalized.redirect) {\n branches.push({\n records: nextChain,\n matcher: compiled.matcher,\n paramNames: compiled.paramNames,\n score: compiled.score + nextChain.length,\n order: normalized.order,\n fullPath,\n });\n }\n\n if (record.children?.length) {\n walk(record.children, fullPath, nextChain);\n }\n }\n };\n\n walk(normalizeRouteObjects(routes), \"/\", []);\n\n branches.sort((left, right) => right.score - left.score || left.order - right.order);\n\n return {\n branches,\n named,\n };\n}\n\nfunction buildPathFromTemplate(template: string, params?: Record<string, Primitive>): string {\n const resolvedParams = params ?? {};\n\n if (template === \"*\") {\n return String(resolvedParams.wild ?? \"/\");\n }\n\n const segments = splitRoutePath(template).map((segment) => {\n if (segment === \"*\") {\n return encodeURIComponent(String(resolvedParams.wild ?? \"\"));\n }\n\n if (!segment.startsWith(\":\")) {\n return segment;\n }\n\n const rawName = segment.slice(1);\n const repeat = rawName.endsWith(\"*\");\n const name = repeat ? rawName.slice(0, -1) : rawName;\n const value = resolvedParams[name];\n\n if (value === undefined || value === null) {\n throw new Error(`[olova-router] Missing route param \"${name}\" for \"${template}\".`);\n }\n\n if (repeat) {\n return String(value)\n .split(\"/\")\n .map((part) => encodeURIComponent(part))\n .join(\"/\");\n }\n\n return encodeURIComponent(String(value));\n });\n\n return normalizePath(`/${segments.join(\"/\")}`);\n}\n\nexport function matchPath(pattern: string, path: string): RouteParams | null {\n const compiled = compilePath(pattern);\n const matched = compiled.matcher.exec(normalizePath(path));\n\n if (!matched) {\n return null;\n }\n\n const params: RouteParams = {};\n compiled.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return params;\n}\n\nfunction resolveCurrentTarget(mode: RouterMode, base: string): ParsedTarget {\n const url = new URL(window.location.href);\n const resolvedMode: ResolvedMode =\n mode === \"auto\"\n ? (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\") ? \"hash\" : \"history\")\n : mode;\n\n if (resolvedMode === \"hash\") {\n const hashRoute = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: hashRoute.path,\n search: hashRoute.search,\n hash: \"\",\n };\n }\n\n return {\n mode: \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n}\n\nfunction resolveTarget(\n to: RouteTarget,\n mode: RouterMode,\n base: string,\n named: Map<string, NormalizedRouteRecord>,\n): ParsedTarget {\n if (typeof to === \"string\") {\n if (to.startsWith(\"#/\") || to.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(to);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n const url = new URL(to, window.location.href);\n\n if (url.origin !== window.location.origin) {\n window.location.assign(url.href);\n return resolveCurrentTarget(mode, base);\n }\n\n if (url.hash.startsWith(\"#/\") || url.hash.startsWith(\"#!/\")) {\n const parsedHash = parseHashRoute(url.hash);\n return {\n mode: \"hash\",\n path: parsedHash.path,\n search: parsedHash.search,\n hash: \"\",\n };\n }\n\n return {\n mode: mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\",\n path: stripBase(url.pathname, base),\n search: url.search,\n hash: url.hash,\n };\n }\n\n const targetMode: ResolvedMode = mode === \"auto\" ? \"history\" : mode === \"hash\" ? \"hash\" : \"history\";\n const record = to.name ? named.get(to.name) : null;\n\n if (to.name && !record) {\n throw new Error(`[olova-router] Unknown route name \"${to.name}\".`);\n }\n\n const targetPath = record\n ? buildPathFromTemplate(record.pathTemplate, to.params)\n : buildPathFromTemplate(to.path ?? \"/\", to.params);\n\n return {\n mode: targetMode,\n path: targetPath,\n search: queryToSearch(to.query),\n hash: to.hash ? `#${String(to.hash).replace(/^#/, \"\")}` : \"\",\n };\n}\n\nfunction stringifyTarget(target: ParsedTarget, base: string): string {\n if (target.mode === \"hash\") {\n const root = base === \"/\" ? \"\" : base;\n return `${root}/#${target.path}${target.search}`;\n }\n\n const rootedPath = base === \"/\" ? target.path : `${base}${target.path === \"/\" ? \"\" : target.path}`;\n return `${rootedPath}${target.search}${target.hash}`;\n}\n\nfunction resolveProps(source: RoutePropsFactory | undefined, context: RouteGuardContext): OlovaProps {\n if (!source) {\n return EMPTY_PROPS;\n }\n\n return typeof source === \"function\" ? source(context) : source;\n}\n\nfunction matchBranch(path: string, branches: RouteBranch[]): { branch: RouteBranch | null; params: RouteParams } {\n for (const branch of branches) {\n const matched = branch.matcher.exec(path);\n if (!matched) {\n continue;\n }\n\n const params: RouteParams = {};\n branch.paramNames.forEach((paramName, index) => {\n params[paramName] = decodeURIComponent(matched[index + 1] ?? \"\");\n });\n\n return { branch, params };\n }\n\n return { branch: null, params: {} };\n}\n\nfunction buildLocation(branch: RouteBranch | null, parsed: ParsedTarget, params: RouteParams): RouteLocation {\n const searchParams = new URLSearchParams(parsed.search);\n const fullPath = `${parsed.path}${parsed.search}${parsed.hash}`;\n const matches = branch\n ? branch.records.map((record) => ({\n name: record.name,\n path: record.fullPath,\n meta: record.meta,\n }))\n : EMPTY_MATCHES;\n const leaf = branch?.records[branch.records.length - 1];\n\n return {\n name: leaf?.name,\n path: parsed.path,\n fullPath,\n href: fullPath || \"/\",\n params,\n query: parseQuery(searchParams),\n hash: parsed.hash.startsWith(\"#\") ? parsed.hash.slice(1) : parsed.hash,\n meta: leaf?.meta,\n matchedPath: leaf?.fullPath ?? \"*\",\n matches,\n };\n}\n\nfunction createMatchHost(match: RouteMatch, outlet: OutletState): OlovaComponent {\n return defineComponent(() => {\n setContext(OUTLET_CONTEXT, outlet);\n\n return {\n template: \"__O_COMP_nested_match__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"nested_match\",\n getComponent: () => match.record.component ?? EMPTY_OUTLET.component,\n getProps: () => match.props,\n },\n ],\n };\n });\n}\n\nfunction createComponentChain(matches: RouteMatch[]): OlovaComponent {\n if (matches.length === 0) {\n return EMPTY_OUTLET.component;\n }\n\n let outlet = EMPTY_OUTLET;\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n outlet = {\n component: createMatchHost(matches[index], outlet),\n props: EMPTY_PROPS,\n };\n }\n\n return outlet.component;\n}\n\nfunction resolveRoute(\n config: NormalizedRouteConfig,\n parsed: ParsedTarget,\n from: RouteLocation | null,\n base: string,\n depth = 0,\n): RouteResolution {\n if (depth > 10) {\n throw new Error(\"[olova-router] Too many redirects while resolving a route.\");\n }\n\n const found = matchBranch(parsed.path, config.branches);\n const location = buildLocation(found.branch, parsed, found.params);\n const context: RouteGuardContext = {\n to: location,\n from,\n params: location.params,\n query: location.query,\n };\n\n const leaf = found.branch?.records[found.branch.records.length - 1];\n const redirect = typeof leaf?.redirect === \"function\" ? leaf.redirect(context) : leaf?.redirect;\n\n if (redirect) {\n return resolveRoute(config, resolveTarget(redirect, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const guardResult = leaf?.beforeEnter?.(context);\n\n if (guardResult === false && from) {\n return {\n mode: parsed.mode,\n location: from,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n }\n\n if (guardResult && guardResult !== true) {\n return resolveRoute(config, resolveTarget(guardResult, parsed.mode, base, config.named), from, base, depth + 1);\n }\n\n const matches: RouteMatch[] = (found.branch?.records ?? [])\n .filter((record) => !!record.component)\n .map((record) => ({\n record,\n props: {\n ...resolveProps(record.props, context),\n ...location.params,\n route: location,\n router: activeRouter,\n params: location.params,\n query: location.query,\n matches: location.matches,\n navigate,\n },\n }));\n\n return {\n mode: parsed.mode,\n location,\n component: createComponentChain(matches),\n props: EMPTY_PROPS,\n };\n}\n\nfunction scrollToTop(): void {\n window.scrollTo({ top: 0, left: 0, behavior: \"auto\" });\n}\n\nfunction scrollToHash(hash: string): boolean {\n if (typeof document === \"undefined\") {\n return false;\n }\n\n const normalizedHash = hash.replace(/^#/, \"\");\n if (!normalizedHash) {\n return false;\n }\n\n const target = document.getElementById(decodeURIComponent(normalizedHash));\n if (!target) {\n return false;\n }\n\n target.scrollIntoView({ block: \"start\", inline: \"nearest\", behavior: \"auto\" });\n return true;\n}\n\nfunction applyScroll(hash: string, enabled: boolean): void {\n if (!enabled) {\n return;\n }\n\n if (hash) {\n requestAnimationFrame(() => {\n if (!scrollToHash(hash)) {\n scrollToTop();\n }\n });\n return;\n }\n\n scrollToTop();\n}\n\nfunction shouldIgnoreClick(event: MouseEvent, anchor: HTMLAnchorElement | null): boolean {\n if (!anchor) {\n return true;\n }\n\n if (event.defaultPrevented || event.button !== 0) {\n return true;\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return true;\n }\n\n if (anchor.target && anchor.target !== \"_self\") {\n return true;\n }\n\n if (anchor.hasAttribute(\"download\")) {\n return true;\n }\n\n const rel = anchor.getAttribute(\"rel\");\n if (rel && /\\bexternal\\b/u.test(rel)) {\n return true;\n }\n\n const href = anchor.getAttribute(\"href\");\n return !href || href.startsWith(\"mailto:\") || href.startsWith(\"tel:\");\n}\n\nfunction resolveAnchor(event: Event): HTMLAnchorElement | null {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return null;\n }\n\n const element = target instanceof Element ? target : target.parentElement;\n if (!element) {\n return null;\n }\n\n return element.closest(\"a[href]\");\n}\n\nfunction runNavigation(to: RouteTarget, options: NavigateOptions = {}): void {\n if (!activeRouter || typeof window === \"undefined\") {\n if (typeof to === \"string\") {\n window.location.assign(to);\n }\n return;\n }\n\n activeRouter.navigate(to, options);\n}\n\nexport function navigate(to: RouteTarget, options?: NavigateOptions): void {\n runNavigation(to, options);\n}\n\nexport function link(toOrEvent?: RouteTarget | Event, options?: NavigateOptions): ((event?: Event) => void) | void {\n if (\n typeof toOrEvent === \"string\" ||\n (typeof toOrEvent === \"object\" &&\n toOrEvent !== null &&\n !(toOrEvent instanceof Event) &&\n \"target\" in toOrEvent === false)\n ) {\n return (event?: Event) => {\n event?.preventDefault();\n runNavigation(toOrEvent as RouteTarget, options);\n };\n }\n\n const event = toOrEvent as Event | undefined;\n\n if (!event) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n\n if (event instanceof MouseEvent && shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n runNavigation(href, options);\n}\n\nexport function useRouter(): RouterApi {\n if (!hasContext(ROUTER_CONTEXT)) {\n throw new Error(\"[olova-router] useRouter() must be used inside a routed component.\");\n }\n\n return getContext<RouterApi>(ROUTER_CONTEXT);\n}\n\nexport function useRoute(): RouteLocation {\n return useRouter().location;\n}\n\nexport function useParams(): RouteParams {\n return useRouter().params;\n}\n\nexport function useQuery(): RouteQuery {\n return useRouter().query;\n}\n\nexport function resolveHref(to: RouteTarget): string {\n return activeRouter?.resolve(to) ?? (typeof to === \"string\" ? to : to.path ?? \"/\");\n}\n\nexport function isActiveHref(to: RouteTarget, options?: MatchOptions): boolean {\n return activeRouter?.isActive(to, options) ?? false;\n}\n\nexport const Outlet = defineComponent(() => {\n const outlet = hasContext(OUTLET_CONTEXT) ? getContext<OutletState>(OUTLET_CONTEXT) : EMPTY_OUTLET;\n\n return {\n template: \"__O_COMP_outlet__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"outlet\",\n getComponent: () => outlet.component,\n getProps: () => outlet.props,\n },\n ],\n };\n});\n\nfunction createRouterVariant(mode: ResolvedMode): OlovaComponent {\n return defineComponent((incomingProps) => ({\n template: \"__O_COMP_router_variant__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_variant\",\n getComponent: () => Router,\n getProps: () => ({\n ...(incomingProps as RouterProps),\n mode,\n }),\n },\n ],\n }));\n}\n\nconst Router = defineComponent((incomingProps) => {\n const props = incomingProps as RouterProps;\n const base = normalizeBase(props.base);\n const config = buildRouteConfig(props.routes ?? {});\n const currentVersion = state(0);\n let currentRoute: RouteResolution = {\n mode: \"history\",\n location: EMPTY_LOCATION,\n component: EMPTY_OUTLET.component,\n props: EMPTY_PROPS,\n };\n\n const setCurrentRoute = (next: RouteResolution) => {\n currentRoute = next;\n currentVersion.value = currentVersion.peek() + 1;\n };\n\n const readCurrentRoute = () => {\n currentVersion.value;\n return currentRoute;\n };\n\n const api: RouterApi = {\n current: () => readCurrentRoute(),\n get mode() {\n return readCurrentRoute().mode;\n },\n get location() {\n return readCurrentRoute().location;\n },\n get path() {\n return readCurrentRoute().location.path;\n },\n get fullPath() {\n return readCurrentRoute().location.fullPath;\n },\n get params() {\n return readCurrentRoute().location.params;\n },\n get query() {\n return readCurrentRoute().location.query;\n },\n get hash() {\n return readCurrentRoute().location.hash;\n },\n get matchedPath() {\n return readCurrentRoute().location.matchedPath;\n },\n get matches() {\n return readCurrentRoute().location.matches;\n },\n push(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const next = resolveRoute(config, parsed, currentRoute.location, base);\n const href = stringifyTarget(parsed, base);\n const method = options.replace ? \"replaceState\" : \"pushState\";\n\n if (parsed.mode === \"hash\") {\n const targetHash = href.includes(\"#\") ? href.slice(href.indexOf(\"#\")) : \"\";\n\n if (options.replace) {\n const nextUrl = `${window.location.pathname}${window.location.search}${targetHash}`;\n window.history.replaceState({}, \"\", nextUrl);\n } else {\n window.location.hash = targetHash.slice(1);\n }\n } else {\n window.history[method]({}, \"\", href);\n }\n\n setCurrentRoute(next);\n\n applyScroll(parsed.hash, options.scroll ?? props.scroll ?? true);\n },\n navigate(to, options = {}) {\n this.push(to, options);\n },\n replace(to, options = {}) {\n this.push(to, { ...options, replace: true });\n },\n back() {\n window.history.back();\n },\n forward() {\n window.history.forward();\n },\n refresh() {\n syncFromWindow(false);\n },\n resolve(to) {\n return stringifyTarget(resolveTarget(to, props.mode ?? \"auto\", base, config.named), base);\n },\n href(to) {\n return this.resolve(to);\n },\n isActive(to, options = {}) {\n const parsed = resolveTarget(to, props.mode ?? \"auto\", base, config.named);\n const current = readCurrentRoute().location.path;\n\n if (options.exact) {\n return current === parsed.path;\n }\n\n return current === parsed.path || current.startsWith(`${parsed.path}/`);\n },\n };\n\n const syncFromWindow = (replace = true) => {\n const target = resolveCurrentTarget(props.mode ?? \"auto\", base);\n const next = resolveRoute(config, target, currentRoute.location ?? null, base);\n setCurrentRoute(next);\n\n if (replace) {\n const href = stringifyTarget(target, base);\n window.history.replaceState({}, \"\", href);\n }\n\n applyScroll(target.hash, props.scroll ?? true);\n };\n\n setContext(ROUTER_CONTEXT, api);\n activeRouter = api;\n\n if (typeof window !== \"undefined\") {\n syncFromWindow(false);\n\n effect(() => {\n const handleChange = () => syncFromWindow(false);\n const handleClick = (event: Event) => {\n if (!(event instanceof MouseEvent)) {\n return;\n }\n\n const anchor = resolveAnchor(event);\n if (shouldIgnoreClick(event, anchor)) {\n return;\n }\n\n const href = anchor?.getAttribute(\"href\");\n if (!href) {\n return;\n }\n\n event.preventDefault();\n api.navigate(href);\n };\n\n window.addEventListener(\"popstate\", handleChange);\n window.addEventListener(\"hashchange\", handleChange);\n document.addEventListener(\"click\", handleClick, true);\n\n return () => {\n if (activeRouter === api) {\n activeRouter = null;\n }\n\n window.removeEventListener(\"popstate\", handleChange);\n window.removeEventListener(\"hashchange\", handleChange);\n document.removeEventListener(\"click\", handleClick, true);\n };\n });\n }\n\n return {\n template: \"__O_COMP_router_view__\",\n textBindings: [],\n htmlBindings: [],\n attrBindings: [],\n eventBindings: [],\n slotBindings: [],\n componentBindings: [\n {\n id: \"router_view\",\n getComponent: () => {\n currentVersion.value;\n return currentRoute.component;\n },\n getProps: () => currentRoute.props,\n },\n ],\n };\n});\n\nconst BrowserRouter = createRouterVariant(\"history\");\nconst HashRouter = createRouterVariant(\"hash\");\n\nexport default Router;\nexport { BrowserRouter, HashRouter, Link };\n"]}
|