@iyulab/router 0.11.0 → 0.11.2

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.
@@ -0,0 +1,1167 @@
1
+ import { LitElement, css, html, render } from "lit";
2
+ import { customElement, property } from "lit/decorators.js";
3
+ import { ifDefined } from "lit/directives/if-defined.js";
4
+ //#region src/components/UOutlet.ts
5
+ /**
6
+ * LitElement 또는 React 컴포넌트를 렌더링해주는 웹컴포넌트 입니다.
7
+ */
8
+ var UOutlet = class extends HTMLElement {
9
+ /**
10
+ * 주어진 렌더링 옵션에 따라 컨텐츠를 렌더링합니다.
11
+ */
12
+ async render(value, options) {
13
+ if (this.routeId === options?.id && options?.force === false) return;
14
+ this.routeId = options?.id;
15
+ this.reset();
16
+ if (value === null) throw new Error("Content is null and cannot be rendered.");
17
+ if (typeof value !== "object") throw new Error("Content is not a valid renderable object.");
18
+ if (value instanceof HTMLElement) {
19
+ this.replaceChildren(value);
20
+ this.root = void 0;
21
+ } else if ("_$litType$" in value) this.root = render(value, this);
22
+ else if ("$$typeof" in value) {
23
+ const { createRoot } = await import("react-dom/client");
24
+ this.root = createRoot(this);
25
+ this.root.render(value);
26
+ } else throw new Error("not supported content type for Outlet rendering.");
27
+ }
28
+ /**
29
+ * 기존 DOM을 삭제하여, 초기 상태로 되돌립니다.
30
+ */
31
+ reset() {
32
+ if (this.root && "_$litPart$" in this) delete this._$litPart$;
33
+ if (this.root && "unmount" in this.root) this.root.unmount();
34
+ this.root = void 0;
35
+ this.innerHTML = "";
36
+ }
37
+ };
38
+ customElements.define("u-outlet", UOutlet);
39
+ //#endregion
40
+ //#region node_modules/urlpattern-polyfill/dist/urlpattern.js
41
+ var Pe = Object.defineProperty;
42
+ var a = (e, t) => Pe(e, "name", {
43
+ value: t,
44
+ configurable: !0
45
+ });
46
+ var P = class {
47
+ type = 3;
48
+ name = "";
49
+ prefix = "";
50
+ value = "";
51
+ suffix = "";
52
+ modifier = 3;
53
+ constructor(t, r, n, c, l, f) {
54
+ this.type = t, this.name = r, this.prefix = n, this.value = c, this.suffix = l, this.modifier = f;
55
+ }
56
+ hasCustomName() {
57
+ return this.name !== "" && typeof this.name != "number";
58
+ }
59
+ };
60
+ a(P, "Part");
61
+ var Re = /[$_\p{ID_Start}]/u;
62
+ var Ee = /[$_\u200C\u200D\p{ID_Continue}]/u;
63
+ var v = ".*";
64
+ function Oe(e, t) {
65
+ return (t ? /^[\x00-\xFF]*$/ : /^[\x00-\x7F]*$/).test(e);
66
+ }
67
+ a(Oe, "isASCII");
68
+ function D(e, t = !1) {
69
+ let r = [], n = 0;
70
+ for (; n < e.length;) {
71
+ let c = e[n], l = a(function(f) {
72
+ if (!t) throw new TypeError(f);
73
+ r.push({
74
+ type: "INVALID_CHAR",
75
+ index: n,
76
+ value: e[n++]
77
+ });
78
+ }, "ErrorOrInvalid");
79
+ if (c === "*") {
80
+ r.push({
81
+ type: "ASTERISK",
82
+ index: n,
83
+ value: e[n++]
84
+ });
85
+ continue;
86
+ }
87
+ if (c === "+" || c === "?") {
88
+ r.push({
89
+ type: "OTHER_MODIFIER",
90
+ index: n,
91
+ value: e[n++]
92
+ });
93
+ continue;
94
+ }
95
+ if (c === "\\") {
96
+ r.push({
97
+ type: "ESCAPED_CHAR",
98
+ index: n++,
99
+ value: e[n++]
100
+ });
101
+ continue;
102
+ }
103
+ if (c === "{") {
104
+ r.push({
105
+ type: "OPEN",
106
+ index: n,
107
+ value: e[n++]
108
+ });
109
+ continue;
110
+ }
111
+ if (c === "}") {
112
+ r.push({
113
+ type: "CLOSE",
114
+ index: n,
115
+ value: e[n++]
116
+ });
117
+ continue;
118
+ }
119
+ if (c === ":") {
120
+ let f = "", s = n + 1;
121
+ for (; s < e.length;) {
122
+ let i = e.substr(s, 1);
123
+ if (s === n + 1 && Re.test(i) || s !== n + 1 && Ee.test(i)) {
124
+ f += e[s++];
125
+ continue;
126
+ }
127
+ break;
128
+ }
129
+ if (!f) {
130
+ l(`Missing parameter name at ${n}`);
131
+ continue;
132
+ }
133
+ r.push({
134
+ type: "NAME",
135
+ index: n,
136
+ value: f
137
+ }), n = s;
138
+ continue;
139
+ }
140
+ if (c === "(") {
141
+ let f = 1, s = "", i = n + 1, o = !1;
142
+ if (e[i] === "?") {
143
+ l(`Pattern cannot start with "?" at ${i}`);
144
+ continue;
145
+ }
146
+ for (; i < e.length;) {
147
+ if (!Oe(e[i], !1)) {
148
+ l(`Invalid character '${e[i]}' at ${i}.`), o = !0;
149
+ break;
150
+ }
151
+ if (e[i] === "\\") {
152
+ s += e[i++] + e[i++];
153
+ continue;
154
+ }
155
+ if (e[i] === ")") {
156
+ if (f--, f === 0) {
157
+ i++;
158
+ break;
159
+ }
160
+ } else if (e[i] === "(" && (f++, e[i + 1] !== "?")) {
161
+ l(`Capturing groups are not allowed at ${i}`), o = !0;
162
+ break;
163
+ }
164
+ s += e[i++];
165
+ }
166
+ if (o) continue;
167
+ if (f) {
168
+ l(`Unbalanced pattern at ${n}`);
169
+ continue;
170
+ }
171
+ if (!s) {
172
+ l(`Missing pattern at ${n}`);
173
+ continue;
174
+ }
175
+ r.push({
176
+ type: "REGEX",
177
+ index: n,
178
+ value: s
179
+ }), n = i;
180
+ continue;
181
+ }
182
+ r.push({
183
+ type: "CHAR",
184
+ index: n,
185
+ value: e[n++]
186
+ });
187
+ }
188
+ return r.push({
189
+ type: "END",
190
+ index: n,
191
+ value: ""
192
+ }), r;
193
+ }
194
+ a(D, "lexer");
195
+ function F(e, t = {}) {
196
+ let r = D(e);
197
+ t.delimiter ??= "/#?", t.prefixes ??= "./";
198
+ let n = `[^${x(t.delimiter)}]+?`, c = [], l = 0, f = 0, i = /* @__PURE__ */ new Set(), o = a((u) => {
199
+ if (f < r.length && r[f].type === u) return r[f++].value;
200
+ }, "tryConsume"), h = a(() => o("OTHER_MODIFIER") ?? o("ASTERISK"), "tryConsumeModifier"), p = a((u) => {
201
+ let d = o(u);
202
+ if (d !== void 0) return d;
203
+ let { type: g, index: y } = r[f];
204
+ throw new TypeError(`Unexpected ${g} at ${y}, expected ${u}`);
205
+ }, "mustConsume"), A = a(() => {
206
+ let u = "", d;
207
+ for (; d = o("CHAR") ?? o("ESCAPED_CHAR");) u += d;
208
+ return u;
209
+ }, "consumeText"), xe = a((u) => u, "DefaultEncodePart"), N = t.encodePart || xe, H = "", $ = a((u) => {
210
+ H += u;
211
+ }, "appendToPendingFixedValue"), M = a(() => {
212
+ H.length && (c.push(new P(3, "", "", N(H), "", 3)), H = "");
213
+ }, "maybeAddPartFromPendingFixedValue"), X = a((u, d, g, y, Z) => {
214
+ let m = 3;
215
+ switch (Z) {
216
+ case "?":
217
+ m = 1;
218
+ break;
219
+ case "*":
220
+ m = 0;
221
+ break;
222
+ case "+": m = 2;
223
+ }
224
+ if (!d && !g && m === 3) {
225
+ $(u);
226
+ return;
227
+ }
228
+ if (M(), !d && !g) {
229
+ if (!u) return;
230
+ c.push(new P(3, "", "", N(u), "", m));
231
+ return;
232
+ }
233
+ let S;
234
+ g ? g === "*" ? S = v : S = g : S = n;
235
+ let k = 2;
236
+ S === n ? (k = 1, S = "") : S === v && (k = 0, S = "");
237
+ let E;
238
+ if (d ? E = d : g && (E = l++), i.has(E)) throw new TypeError(`Duplicate name '${E}'.`);
239
+ i.add(E), c.push(new P(k, E, N(u), S, N(y), m));
240
+ }, "addPart");
241
+ for (; f < r.length;) {
242
+ let u = o("CHAR"), d = o("NAME"), g = o("REGEX");
243
+ if (!d && !g && (g = o("ASTERISK")), d || g) {
244
+ let m = u ?? "";
245
+ t.prefixes.indexOf(m) === -1 && ($(m), m = ""), M();
246
+ let S = h();
247
+ X(m, d, g, "", S);
248
+ continue;
249
+ }
250
+ let y = u ?? o("ESCAPED_CHAR");
251
+ if (y) {
252
+ $(y);
253
+ continue;
254
+ }
255
+ if (o("OPEN")) {
256
+ let m = A(), S = o("NAME"), k = o("REGEX");
257
+ !S && !k && (k = o("ASTERISK"));
258
+ let E = A();
259
+ p("CLOSE");
260
+ let be = h();
261
+ X(m, S, k, E, be);
262
+ continue;
263
+ }
264
+ M(), p("END");
265
+ }
266
+ return c;
267
+ }
268
+ a(F, "parse");
269
+ function x(e) {
270
+ return e.replace(/([.+*?^${}()[\]|/\\])/g, "\\$1");
271
+ }
272
+ a(x, "escapeString");
273
+ function B(e) {
274
+ return e && e.ignoreCase ? "ui" : "u";
275
+ }
276
+ a(B, "flags");
277
+ function q(e, t, r) {
278
+ return W(F(e, r), t, r);
279
+ }
280
+ a(q, "stringToRegexp");
281
+ function T(e) {
282
+ switch (e) {
283
+ case 0: return "*";
284
+ case 1: return "?";
285
+ case 2: return "+";
286
+ case 3: return "";
287
+ }
288
+ }
289
+ a(T, "modifierToString");
290
+ function W(e, t, r = {}) {
291
+ r.delimiter ??= "/#?", r.prefixes ??= "./", r.sensitive ??= !1, r.strict ??= !1, r.end ??= !0, r.start ??= !0, r.endsWith = "";
292
+ let n = r.start ? "^" : "";
293
+ for (let s of e) {
294
+ if (s.type === 3) {
295
+ s.modifier === 3 ? n += x(s.value) : n += `(?:${x(s.value)})${T(s.modifier)}`;
296
+ continue;
297
+ }
298
+ t && t.push(s.name);
299
+ let i = `[^${x(r.delimiter)}]+?`, o = s.value;
300
+ if (s.type === 1 ? o = i : s.type === 0 && (o = v), !s.prefix.length && !s.suffix.length) {
301
+ s.modifier === 3 || s.modifier === 1 ? n += `(${o})${T(s.modifier)}` : n += `((?:${o})${T(s.modifier)})`;
302
+ continue;
303
+ }
304
+ if (s.modifier === 3 || s.modifier === 1) {
305
+ n += `(?:${x(s.prefix)}(${o})${x(s.suffix)})`, n += T(s.modifier);
306
+ continue;
307
+ }
308
+ n += `(?:${x(s.prefix)}`, n += `((?:${o})(?:`, n += x(s.suffix), n += x(s.prefix), n += `(?:${o}))*)${x(s.suffix)})`, s.modifier === 0 && (n += "?");
309
+ }
310
+ let c = `[${x(r.endsWith)}]|$`, l = `[${x(r.delimiter)}]`;
311
+ if (r.end) return r.strict || (n += `${l}?`), r.endsWith.length ? n += `(?=${c})` : n += "$", new RegExp(n, B(r));
312
+ r.strict || (n += `(?:${l}(?=${c}))?`);
313
+ let f = !1;
314
+ if (e.length) {
315
+ let s = e[e.length - 1];
316
+ s.type === 3 && s.modifier === 3 && (f = r.delimiter.indexOf(s) > -1);
317
+ }
318
+ return f || (n += `(?=${l}|${c})`), new RegExp(n, B(r));
319
+ }
320
+ a(W, "partsToRegexp");
321
+ var b = {
322
+ delimiter: "",
323
+ prefixes: "",
324
+ sensitive: !0,
325
+ strict: !0
326
+ };
327
+ var J = {
328
+ delimiter: ".",
329
+ prefixes: "",
330
+ sensitive: !0,
331
+ strict: !0
332
+ };
333
+ var Q = {
334
+ delimiter: "/",
335
+ prefixes: "/",
336
+ sensitive: !0,
337
+ strict: !0
338
+ };
339
+ function ee(e, t) {
340
+ return e.length ? e[0] === "/" ? !0 : !t || e.length < 2 ? !1 : (e[0] == "\\" || e[0] == "{") && e[1] == "/" : !1;
341
+ }
342
+ a(ee, "isAbsolutePathname");
343
+ function te(e, t) {
344
+ return e.startsWith(t) ? e.substring(t.length, e.length) : e;
345
+ }
346
+ a(te, "maybeStripPrefix");
347
+ function ke(e, t) {
348
+ return e.endsWith(t) ? e.substr(0, e.length - t.length) : e;
349
+ }
350
+ a(ke, "maybeStripSuffix");
351
+ function _(e) {
352
+ return !e || e.length < 2 ? !1 : e[0] === "[" || (e[0] === "\\" || e[0] === "{") && e[1] === "[";
353
+ }
354
+ a(_, "treatAsIPv6Hostname");
355
+ var re = [
356
+ "ftp",
357
+ "file",
358
+ "http",
359
+ "https",
360
+ "ws",
361
+ "wss"
362
+ ];
363
+ function U(e) {
364
+ if (!e) return !0;
365
+ for (let t of re) if (e.test(t)) return !0;
366
+ return !1;
367
+ }
368
+ a(U, "isSpecialScheme");
369
+ function ne(e, t) {
370
+ if (e = te(e, "#"), t || e === "") return e;
371
+ let r = new URL("https://example.com");
372
+ return r.hash = e, r.hash ? r.hash.substring(1, r.hash.length) : "";
373
+ }
374
+ a(ne, "canonicalizeHash");
375
+ function se(e, t) {
376
+ if (e = te(e, "?"), t || e === "") return e;
377
+ let r = new URL("https://example.com");
378
+ return r.search = e, r.search ? r.search.substring(1, r.search.length) : "";
379
+ }
380
+ a(se, "canonicalizeSearch");
381
+ function ie(e, t) {
382
+ return t || e === "" ? e : _(e) ? K(e) : j(e);
383
+ }
384
+ a(ie, "canonicalizeHostname");
385
+ function ae(e, t) {
386
+ if (t || e === "") return e;
387
+ let r = new URL("https://example.com");
388
+ return r.password = e, r.password;
389
+ }
390
+ a(ae, "canonicalizePassword");
391
+ function oe(e, t) {
392
+ if (t || e === "") return e;
393
+ let r = new URL("https://example.com");
394
+ return r.username = e, r.username;
395
+ }
396
+ a(oe, "canonicalizeUsername");
397
+ function ce(e, t, r) {
398
+ if (r || e === "") return e;
399
+ if (t && !re.includes(t)) return new URL(`${t}:${e}`).pathname;
400
+ let n = e[0] == "/";
401
+ return e = new URL(n ? e : "/-" + e, "https://example.com").pathname, n || (e = e.substring(2, e.length)), e;
402
+ }
403
+ a(ce, "canonicalizePathname");
404
+ function le(e, t, r) {
405
+ return z(t) === e && (e = ""), r || e === "" ? e : G(e);
406
+ }
407
+ a(le, "canonicalizePort");
408
+ function fe(e, t) {
409
+ return e = ke(e, ":"), t || e === "" ? e : w(e);
410
+ }
411
+ a(fe, "canonicalizeProtocol");
412
+ function z(e) {
413
+ switch (e) {
414
+ case "ws":
415
+ case "http": return "80";
416
+ case "wws":
417
+ case "https": return "443";
418
+ case "ftp": return "21";
419
+ default: return "";
420
+ }
421
+ }
422
+ a(z, "defaultPortForProtocol");
423
+ function w(e) {
424
+ if (e === "") return e;
425
+ if (/^[-+.A-Za-z0-9]*$/.test(e)) return e.toLowerCase();
426
+ throw new TypeError(`Invalid protocol '${e}'.`);
427
+ }
428
+ a(w, "protocolEncodeCallback");
429
+ function he(e) {
430
+ if (e === "") return e;
431
+ let t = new URL("https://example.com");
432
+ return t.username = e, t.username;
433
+ }
434
+ a(he, "usernameEncodeCallback");
435
+ function ue(e) {
436
+ if (e === "") return e;
437
+ let t = new URL("https://example.com");
438
+ return t.password = e, t.password;
439
+ }
440
+ a(ue, "passwordEncodeCallback");
441
+ function j(e) {
442
+ if (e === "") return e;
443
+ if (/[\t\n\r #%/:<>?@[\]^\\|]/g.test(e)) throw new TypeError(`Invalid hostname '${e}'`);
444
+ let t = new URL("https://example.com");
445
+ return t.hostname = e, t.hostname;
446
+ }
447
+ a(j, "hostnameEncodeCallback");
448
+ function K(e) {
449
+ if (e === "") return e;
450
+ if (/[^0-9a-fA-F[\]:]/g.test(e)) throw new TypeError(`Invalid IPv6 hostname '${e}'`);
451
+ return e.toLowerCase();
452
+ }
453
+ a(K, "ipv6HostnameEncodeCallback");
454
+ function G(e) {
455
+ if (e === "" || /^[0-9]*$/.test(e) && parseInt(e) <= 65535) return e;
456
+ throw new TypeError(`Invalid port '${e}'.`);
457
+ }
458
+ a(G, "portEncodeCallback");
459
+ function de(e) {
460
+ if (e === "") return e;
461
+ let t = new URL("https://example.com");
462
+ return t.pathname = e[0] !== "/" ? "/-" + e : e, e[0] !== "/" ? t.pathname.substring(2, t.pathname.length) : t.pathname;
463
+ }
464
+ a(de, "standardURLPathnameEncodeCallback");
465
+ function pe(e) {
466
+ return e === "" ? e : new URL(`data:${e}`).pathname;
467
+ }
468
+ a(pe, "pathURLPathnameEncodeCallback");
469
+ function ge(e) {
470
+ if (e === "") return e;
471
+ let t = new URL("https://example.com");
472
+ return t.search = e, t.search.substring(1, t.search.length);
473
+ }
474
+ a(ge, "searchEncodeCallback");
475
+ function me(e) {
476
+ if (e === "") return e;
477
+ let t = new URL("https://example.com");
478
+ return t.hash = e, t.hash.substring(1, t.hash.length);
479
+ }
480
+ a(me, "hashEncodeCallback");
481
+ var C = class {
482
+ #i;
483
+ #n = [];
484
+ #t = {};
485
+ #e = 0;
486
+ #s = 1;
487
+ #l = 0;
488
+ #o = 0;
489
+ #d = 0;
490
+ #p = 0;
491
+ #g = !1;
492
+ constructor(t) {
493
+ this.#i = t;
494
+ }
495
+ get result() {
496
+ return this.#t;
497
+ }
498
+ parse() {
499
+ for (this.#n = D(this.#i, !0); this.#e < this.#n.length; this.#e += this.#s) {
500
+ if (this.#s = 1, this.#n[this.#e].type === "END") {
501
+ if (this.#o === 0) {
502
+ this.#b(), this.#f() ? this.#r(9, 1) : this.#h() ? this.#r(8, 1) : this.#r(7, 0);
503
+ continue;
504
+ } else if (this.#o === 2) {
505
+ this.#u(5);
506
+ continue;
507
+ }
508
+ this.#r(10, 0);
509
+ break;
510
+ }
511
+ if (this.#d > 0) if (this.#A()) this.#d -= 1;
512
+ else continue;
513
+ if (this.#T()) {
514
+ this.#d += 1;
515
+ continue;
516
+ }
517
+ switch (this.#o) {
518
+ case 0:
519
+ this.#P() && this.#u(1);
520
+ break;
521
+ case 1:
522
+ if (this.#P()) {
523
+ this.#C();
524
+ let t = 7, r = 1;
525
+ this.#E() ? (t = 2, r = 3) : this.#g && (t = 2), this.#r(t, r);
526
+ }
527
+ break;
528
+ case 2:
529
+ this.#S() ? this.#u(3) : (this.#x() || this.#h() || this.#f()) && this.#u(5);
530
+ break;
531
+ case 3:
532
+ this.#O() ? this.#r(4, 1) : this.#S() && this.#r(5, 1);
533
+ break;
534
+ case 4:
535
+ this.#S() && this.#r(5, 1);
536
+ break;
537
+ case 5:
538
+ this.#y() ? this.#p += 1 : this.#w() && (this.#p -= 1), this.#k() && !this.#p ? this.#r(6, 1) : this.#x() ? this.#r(7, 0) : this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);
539
+ break;
540
+ case 6:
541
+ this.#x() ? this.#r(7, 0) : this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);
542
+ break;
543
+ case 7:
544
+ this.#h() ? this.#r(8, 1) : this.#f() && this.#r(9, 1);
545
+ break;
546
+ case 8: this.#f() && this.#r(9, 1);
547
+ }
548
+ }
549
+ this.#t.hostname !== void 0 && this.#t.port === void 0 && (this.#t.port = "");
550
+ }
551
+ #r(t, r) {
552
+ switch (this.#o) {
553
+ case 0: break;
554
+ case 1:
555
+ this.#t.protocol = this.#c();
556
+ break;
557
+ case 2: break;
558
+ case 3:
559
+ this.#t.username = this.#c();
560
+ break;
561
+ case 4:
562
+ this.#t.password = this.#c();
563
+ break;
564
+ case 5:
565
+ this.#t.hostname = this.#c();
566
+ break;
567
+ case 6:
568
+ this.#t.port = this.#c();
569
+ break;
570
+ case 7:
571
+ this.#t.pathname = this.#c();
572
+ break;
573
+ case 8:
574
+ this.#t.search = this.#c();
575
+ break;
576
+ case 9: this.#t.hash = this.#c();
577
+ }
578
+ this.#o !== 0 && t !== 10 && ([
579
+ 1,
580
+ 2,
581
+ 3,
582
+ 4
583
+ ].includes(this.#o) && [
584
+ 6,
585
+ 7,
586
+ 8,
587
+ 9
588
+ ].includes(t) && (this.#t.hostname ??= ""), [
589
+ 1,
590
+ 2,
591
+ 3,
592
+ 4,
593
+ 5,
594
+ 6
595
+ ].includes(this.#o) && [8, 9].includes(t) && (this.#t.pathname ??= this.#g ? "/" : ""), [
596
+ 1,
597
+ 2,
598
+ 3,
599
+ 4,
600
+ 5,
601
+ 6,
602
+ 7
603
+ ].includes(this.#o) && t === 9 && (this.#t.search ??= "")), this.#R(t, r);
604
+ }
605
+ #R(t, r) {
606
+ this.#o = t, this.#l = this.#e + r, this.#e += r, this.#s = 0;
607
+ }
608
+ #b() {
609
+ this.#e = this.#l, this.#s = 0;
610
+ }
611
+ #u(t) {
612
+ this.#b(), this.#o = t;
613
+ }
614
+ #m(t) {
615
+ return t < 0 && (t = this.#n.length - t), t < this.#n.length ? this.#n[t] : this.#n[this.#n.length - 1];
616
+ }
617
+ #a(t, r) {
618
+ let n = this.#m(t);
619
+ return n.value === r && (n.type === "CHAR" || n.type === "ESCAPED_CHAR" || n.type === "INVALID_CHAR");
620
+ }
621
+ #P() {
622
+ return this.#a(this.#e, ":");
623
+ }
624
+ #E() {
625
+ return this.#a(this.#e + 1, "/") && this.#a(this.#e + 2, "/");
626
+ }
627
+ #S() {
628
+ return this.#a(this.#e, "@");
629
+ }
630
+ #O() {
631
+ return this.#a(this.#e, ":");
632
+ }
633
+ #k() {
634
+ return this.#a(this.#e, ":");
635
+ }
636
+ #x() {
637
+ return this.#a(this.#e, "/");
638
+ }
639
+ #h() {
640
+ if (this.#a(this.#e, "?")) return !0;
641
+ if (this.#n[this.#e].value !== "?") return !1;
642
+ let t = this.#m(this.#e - 1);
643
+ return t.type !== "NAME" && t.type !== "REGEX" && t.type !== "CLOSE" && t.type !== "ASTERISK";
644
+ }
645
+ #f() {
646
+ return this.#a(this.#e, "#");
647
+ }
648
+ #T() {
649
+ return this.#n[this.#e].type == "OPEN";
650
+ }
651
+ #A() {
652
+ return this.#n[this.#e].type == "CLOSE";
653
+ }
654
+ #y() {
655
+ return this.#a(this.#e, "[");
656
+ }
657
+ #w() {
658
+ return this.#a(this.#e, "]");
659
+ }
660
+ #c() {
661
+ let t = this.#n[this.#e], r = this.#m(this.#l).index;
662
+ return this.#i.substring(r, t.index);
663
+ }
664
+ #C() {
665
+ let t = {};
666
+ Object.assign(t, b), t.encodePart = w;
667
+ let r = q(this.#c(), void 0, t);
668
+ this.#g = U(r);
669
+ }
670
+ };
671
+ a(C, "Parser");
672
+ var V = [
673
+ "protocol",
674
+ "username",
675
+ "password",
676
+ "hostname",
677
+ "port",
678
+ "pathname",
679
+ "search",
680
+ "hash"
681
+ ];
682
+ var O = "*";
683
+ function Se(e, t) {
684
+ if (typeof e != "string") throw new TypeError("parameter 1 is not of type 'string'.");
685
+ let r = new URL(e, t);
686
+ return {
687
+ protocol: r.protocol.substring(0, r.protocol.length - 1),
688
+ username: r.username,
689
+ password: r.password,
690
+ hostname: r.hostname,
691
+ port: r.port,
692
+ pathname: r.pathname,
693
+ search: r.search !== "" ? r.search.substring(1, r.search.length) : void 0,
694
+ hash: r.hash !== "" ? r.hash.substring(1, r.hash.length) : void 0
695
+ };
696
+ }
697
+ a(Se, "extractValues");
698
+ function R(e, t) {
699
+ return t ? I(e) : e;
700
+ }
701
+ a(R, "processBaseURLString");
702
+ function L(e, t, r) {
703
+ let n;
704
+ if (typeof t.baseURL == "string") try {
705
+ n = new URL(t.baseURL), t.protocol === void 0 && (e.protocol = R(n.protocol.substring(0, n.protocol.length - 1), r)), !r && t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.username === void 0 && (e.username = R(n.username, r)), !r && t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.username === void 0 && t.password === void 0 && (e.password = R(n.password, r)), t.protocol === void 0 && t.hostname === void 0 && (e.hostname = R(n.hostname, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && (e.port = R(n.port, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && (e.pathname = R(n.pathname, r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && t.search === void 0 && (e.search = R(n.search.substring(1, n.search.length), r)), t.protocol === void 0 && t.hostname === void 0 && t.port === void 0 && t.pathname === void 0 && t.search === void 0 && t.hash === void 0 && (e.hash = R(n.hash.substring(1, n.hash.length), r));
706
+ } catch {
707
+ throw new TypeError(`invalid baseURL '${t.baseURL}'.`);
708
+ }
709
+ if (typeof t.protocol == "string" && (e.protocol = fe(t.protocol, r)), typeof t.username == "string" && (e.username = oe(t.username, r)), typeof t.password == "string" && (e.password = ae(t.password, r)), typeof t.hostname == "string" && (e.hostname = ie(t.hostname, r)), typeof t.port == "string" && (e.port = le(t.port, e.protocol, r)), typeof t.pathname == "string") {
710
+ if (e.pathname = t.pathname, n && !ee(e.pathname, r)) {
711
+ let c = n.pathname.lastIndexOf("/");
712
+ c >= 0 && (e.pathname = R(n.pathname.substring(0, c + 1), r) + e.pathname);
713
+ }
714
+ e.pathname = ce(e.pathname, e.protocol, r);
715
+ }
716
+ return typeof t.search == "string" && (e.search = se(t.search, r)), typeof t.hash == "string" && (e.hash = ne(t.hash, r)), e;
717
+ }
718
+ a(L, "applyInit");
719
+ function I(e) {
720
+ return e.replace(/([+*?:{}()\\])/g, "\\$1");
721
+ }
722
+ a(I, "escapePatternString");
723
+ function Te(e) {
724
+ return e.replace(/([.+*?^${}()[\]|/\\])/g, "\\$1");
725
+ }
726
+ a(Te, "escapeRegexpString");
727
+ function Ae(e, t) {
728
+ t.delimiter ??= "/#?", t.prefixes ??= "./", t.sensitive ??= !1, t.strict ??= !1, t.end ??= !0, t.start ??= !0, t.endsWith = "";
729
+ let r = ".*", n = `[^${Te(t.delimiter)}]+?`, c = /[$_\u200C\u200D\p{ID_Continue}]/u, l = "";
730
+ for (let f = 0; f < e.length; ++f) {
731
+ let s = e[f];
732
+ if (s.type === 3) {
733
+ if (s.modifier === 3) {
734
+ l += I(s.value);
735
+ continue;
736
+ }
737
+ l += `{${I(s.value)}}${T(s.modifier)}`;
738
+ continue;
739
+ }
740
+ let i = s.hasCustomName(), o = !!s.suffix.length || !!s.prefix.length && (s.prefix.length !== 1 || !t.prefixes.includes(s.prefix)), h = f > 0 ? e[f - 1] : null, p = f < e.length - 1 ? e[f + 1] : null;
741
+ if (!o && i && s.type === 1 && s.modifier === 3 && p && !p.prefix.length && !p.suffix.length) if (p.type === 3) {
742
+ let A = p.value.length > 0 ? p.value[0] : "";
743
+ o = c.test(A);
744
+ } else o = !p.hasCustomName();
745
+ if (!o && !s.prefix.length && h && h.type === 3) {
746
+ let A = h.value[h.value.length - 1];
747
+ o = t.prefixes.includes(A);
748
+ }
749
+ o && (l += "{"), l += I(s.prefix), i && (l += `:${s.name}`), s.type === 2 ? l += `(${s.value})` : s.type === 1 ? i || (l += `(${n})`) : s.type === 0 && (!i && (!h || h.type === 3 || h.modifier !== 3 || o || s.prefix !== "") ? l += "*" : l += `(${r})`), s.type === 1 && i && s.suffix.length && c.test(s.suffix[0]) && (l += "\\"), l += I(s.suffix), o && (l += "}"), s.modifier !== 3 && (l += T(s.modifier));
750
+ }
751
+ return l;
752
+ }
753
+ a(Ae, "partsToPattern");
754
+ var Y = class {
755
+ #i;
756
+ #n = {};
757
+ #t = {};
758
+ #e = {};
759
+ #s = {};
760
+ #l = !1;
761
+ constructor(t = {}, r, n) {
762
+ try {
763
+ let c;
764
+ if (typeof r == "string" ? c = r : n = r, typeof t == "string") {
765
+ let i = new C(t);
766
+ if (i.parse(), t = i.result, c === void 0 && typeof t.protocol != "string") throw new TypeError("A base URL must be provided for a relative constructor string.");
767
+ t.baseURL = c;
768
+ } else {
769
+ if (!t || typeof t != "object") throw new TypeError("parameter 1 is not of type 'string' and cannot convert to dictionary.");
770
+ if (c) throw new TypeError("parameter 1 is not of type 'string'.");
771
+ }
772
+ typeof n > "u" && (n = { ignoreCase: !1 });
773
+ let l = { ignoreCase: n.ignoreCase === !0 }, f = {
774
+ pathname: O,
775
+ protocol: O,
776
+ username: O,
777
+ password: O,
778
+ hostname: O,
779
+ port: O,
780
+ search: O,
781
+ hash: O
782
+ };
783
+ this.#i = L(f, t, !0), z(this.#i.protocol) === this.#i.port && (this.#i.port = "");
784
+ let s;
785
+ for (s of V) {
786
+ if (!(s in this.#i)) continue;
787
+ let i = {}, o = this.#i[s];
788
+ switch (this.#t[s] = [], s) {
789
+ case "protocol":
790
+ Object.assign(i, b), i.encodePart = w;
791
+ break;
792
+ case "username":
793
+ Object.assign(i, b), i.encodePart = he;
794
+ break;
795
+ case "password":
796
+ Object.assign(i, b), i.encodePart = ue;
797
+ break;
798
+ case "hostname":
799
+ Object.assign(i, J), _(o) ? i.encodePart = K : i.encodePart = j;
800
+ break;
801
+ case "port":
802
+ Object.assign(i, b), i.encodePart = G;
803
+ break;
804
+ case "pathname":
805
+ U(this.#n.protocol) ? (Object.assign(i, Q, l), i.encodePart = de) : (Object.assign(i, b, l), i.encodePart = pe);
806
+ break;
807
+ case "search":
808
+ Object.assign(i, b, l), i.encodePart = ge;
809
+ break;
810
+ case "hash": Object.assign(i, b, l), i.encodePart = me;
811
+ }
812
+ try {
813
+ this.#s[s] = F(o, i), this.#n[s] = W(this.#s[s], this.#t[s], i), this.#e[s] = Ae(this.#s[s], i), this.#l = this.#l || this.#s[s].some((h) => h.type === 2);
814
+ } catch {
815
+ throw new TypeError(`invalid ${s} pattern '${this.#i[s]}'.`);
816
+ }
817
+ }
818
+ } catch (c) {
819
+ throw new TypeError(`Failed to construct 'URLPattern': ${c.message}`);
820
+ }
821
+ }
822
+ get [Symbol.toStringTag]() {
823
+ return "URLPattern";
824
+ }
825
+ test(t = {}, r) {
826
+ let n = {
827
+ pathname: "",
828
+ protocol: "",
829
+ username: "",
830
+ password: "",
831
+ hostname: "",
832
+ port: "",
833
+ search: "",
834
+ hash: ""
835
+ };
836
+ if (typeof t != "string" && r) throw new TypeError("parameter 1 is not of type 'string'.");
837
+ if (typeof t > "u") return !1;
838
+ try {
839
+ typeof t == "object" ? n = L(n, t, !1) : n = L(n, Se(t, r), !1);
840
+ } catch {
841
+ return !1;
842
+ }
843
+ let c;
844
+ for (c of V) if (!this.#n[c].exec(n[c])) return !1;
845
+ return !0;
846
+ }
847
+ exec(t = {}, r) {
848
+ let n = {
849
+ pathname: "",
850
+ protocol: "",
851
+ username: "",
852
+ password: "",
853
+ hostname: "",
854
+ port: "",
855
+ search: "",
856
+ hash: ""
857
+ };
858
+ if (typeof t != "string" && r) throw new TypeError("parameter 1 is not of type 'string'.");
859
+ if (typeof t > "u") return;
860
+ try {
861
+ typeof t == "object" ? n = L(n, t, !1) : n = L(n, Se(t, r), !1);
862
+ } catch {
863
+ return null;
864
+ }
865
+ let c = {};
866
+ r ? c.inputs = [t, r] : c.inputs = [t];
867
+ let l;
868
+ for (l of V) {
869
+ let f = this.#n[l].exec(n[l]);
870
+ if (!f) return null;
871
+ let s = {};
872
+ for (let [i, o] of this.#t[l].entries()) if (typeof o == "string" || typeof o == "number") s[o] = f[i + 1];
873
+ c[l] = {
874
+ input: n[l] ?? "",
875
+ groups: s
876
+ };
877
+ }
878
+ return c;
879
+ }
880
+ static compareComponent(t, r, n) {
881
+ let c = a((i, o) => {
882
+ for (let h of [
883
+ "type",
884
+ "modifier",
885
+ "prefix",
886
+ "value",
887
+ "suffix"
888
+ ]) {
889
+ if (i[h] < o[h]) return -1;
890
+ if (i[h] === o[h]) continue;
891
+ return 1;
892
+ }
893
+ return 0;
894
+ }, "comparePart"), l = new P(3, "", "", "", "", 3), f = new P(0, "", "", "", "", 3), s = a((i, o) => {
895
+ let h = 0;
896
+ for (; h < Math.min(i.length, o.length); ++h) {
897
+ let p = c(i[h], o[h]);
898
+ if (p) return p;
899
+ }
900
+ return i.length === o.length ? 0 : c(i[h] ?? l, o[h] ?? l);
901
+ }, "comparePartList");
902
+ return !r.#e[t] && !n.#e[t] ? 0 : r.#e[t] && !n.#e[t] ? s(r.#s[t], [f]) : !r.#e[t] && n.#e[t] ? s([f], n.#s[t]) : s(r.#s[t], n.#s[t]);
903
+ }
904
+ get protocol() {
905
+ return this.#e.protocol;
906
+ }
907
+ get username() {
908
+ return this.#e.username;
909
+ }
910
+ get password() {
911
+ return this.#e.password;
912
+ }
913
+ get hostname() {
914
+ return this.#e.hostname;
915
+ }
916
+ get port() {
917
+ return this.#e.port;
918
+ }
919
+ get pathname() {
920
+ return this.#e.pathname;
921
+ }
922
+ get search() {
923
+ return this.#e.search;
924
+ }
925
+ get hash() {
926
+ return this.#e.hash;
927
+ }
928
+ get hasRegExpGroups() {
929
+ return this.#l;
930
+ }
931
+ };
932
+ a(Y, "URLPattern");
933
+ //#endregion
934
+ //#region node_modules/urlpattern-polyfill/index.js
935
+ if (!globalThis.URLPattern) globalThis.URLPattern = Y;
936
+ //#endregion
937
+ //#region src/internals/url-helpers.ts
938
+ /**
939
+ * 주어진 URL이 외부 링크인지 확인합니다.
940
+ *
941
+ * @param url 확인할 URL 문자열
942
+ * @return 외부 링크인 경우 true, 내부 링크인 경우 false
943
+ */
944
+ function isExternalUrl(url) {
945
+ if (!url) return false;
946
+ url = url.trim();
947
+ if (/^(?:mailto:|tel:|javascript:)/i.test(url)) return true;
948
+ if (url.startsWith("//")) return true;
949
+ try {
950
+ const base = typeof window !== "undefined" ? window.location.origin : "http://localhost";
951
+ const parsed = new URL(url, base);
952
+ if (/^(?:ftp:|ftps:|ws:|wss:)/i.test(parsed.protocol)) return true;
953
+ return parsed.origin !== new URL(base).origin;
954
+ } catch {
955
+ return false;
956
+ }
957
+ }
958
+ /**
959
+ * URL 문자열을 파싱하여 RouteContext 객체로 반환합니다.
960
+ * - http(s)로 시작하는 절대 URL은 외부 링크로 간주됩니다.
961
+ * - 절대경로(/...)는 그대로 사용됩니다.
962
+ * - 상대경로는 basepath를 기준으로 절대경로로 변환됩니다.
963
+ * - 쿼리스트링(?)로 시작하는 쿼리는 현재 경로와 추가됩니다.
964
+ * - 해시(#)로 시작하는 해시는 현재 경로와 추가됩니다.
965
+ *
966
+ * @param url 파싱할 URL 문자열
967
+ * @param basepath 기준이 되는 basepath 문자열
968
+ * @returns 파싱된 RouteContext 객체
969
+ */
970
+ function parseUrl(url, basepath) {
971
+ let urlObj;
972
+ basepath = catchBasepath(basepath);
973
+ if (url.startsWith("http")) urlObj = new URL(url);
974
+ else if (url.startsWith("/")) urlObj = new URL(url, window.location.origin);
975
+ else if (url.startsWith("?")) urlObj = new URL(window.location.pathname + url, window.location.origin);
976
+ else if (url.startsWith("#")) urlObj = new URL(window.location.pathname + window.location.search + url, window.location.origin);
977
+ else urlObj = new URL(absolutePath(basepath, url), window.location.origin);
978
+ return {
979
+ href: urlObj.href,
980
+ origin: urlObj.origin,
981
+ basepath,
982
+ path: urlObj.href.replace(urlObj.origin, ""),
983
+ pathname: urlObj.pathname,
984
+ query: new URLSearchParams(urlObj.search),
985
+ hash: urlObj.hash,
986
+ params: {},
987
+ progress: () => {},
988
+ metadata: {}
989
+ };
990
+ }
991
+ /**
992
+ * pathname 경로를 조합하여 절대경로를 반환합니다.
993
+ *
994
+ * @param paths 조합할 경로 문자열들
995
+ * @returns 조합된 절대경로 문자열
996
+ */
997
+ function absolutePath(...paths) {
998
+ paths = paths.map((p) => p.replace(/^\/|\/$/g, "")).filter((p) => p.length > 0);
999
+ if (paths.length === 0) return "/";
1000
+ return "/" + paths.join("/");
1001
+ }
1002
+ /**
1003
+ * basepath가 동적 패턴일 경우(RouteConfig에서 basepath가 :id 등으로 정의된 경우),
1004
+ * 현재 경로에서 해당되는 패턴의 basepath를 추출하여 반환합니다.
1005
+ *
1006
+ * @param basepath 동적 패턴이 포함된 basepath 문자열
1007
+ * @return 현재 경로에 매칭되는 basepath 문자열
1008
+ * @example
1009
+ * catchBasePath('/app/:id') => '/app/123'
1010
+ */
1011
+ function catchBasepath(basepath) {
1012
+ if (basepath === "/") return basepath;
1013
+ let pattern = new URLPattern({ pathname: basepath + "/*" });
1014
+ let match = pattern.exec({ pathname: window.location.pathname });
1015
+ if (match) {
1016
+ const rawPath = match.pathname.input;
1017
+ const restPath = match.pathname.groups?.["0"];
1018
+ return restPath !== void 0 && restPath !== "" ? rawPath.replace("/" + restPath, "") : rawPath.replace(/\/$/, "");
1019
+ }
1020
+ pattern = new URLPattern({ pathname: `${basepath}{/}?` });
1021
+ match = pattern.exec({ pathname: window.location.pathname });
1022
+ if (match) return match.pathname.input;
1023
+ return basepath;
1024
+ }
1025
+ //#endregion
1026
+ //#region \0@oxc-project+runtime@0.146.0/helpers/esm/decorateMetadata.js
1027
+ function __decorateMetadata(k, v) {
1028
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1029
+ }
1030
+ //#endregion
1031
+ //#region \0@oxc-project+runtime@0.146.0/helpers/esm/decorate.js
1032
+ function __decorate(decorators, target, key, desc) {
1033
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1034
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1035
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1036
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1037
+ }
1038
+ //#endregion
1039
+ //#region src/components/ULink.ts
1040
+ var ULink = class ULink extends LitElement {
1041
+ constructor(..._args) {
1042
+ super(..._args);
1043
+ this.isExternal = false;
1044
+ this.handleClick = (event) => {
1045
+ if (event.defaultPrevented) return;
1046
+ if (event.button !== 0) return;
1047
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
1048
+ if (this.target && this.target.toLowerCase() !== "_self") return;
1049
+ if (this.navigate === "document") return;
1050
+ const basepath = this.getBasepath();
1051
+ if (!this.href) {
1052
+ event.preventDefault();
1053
+ this.dispatchPopstate(basepath, basepath);
1054
+ return;
1055
+ }
1056
+ if (this.isExternal) return;
1057
+ if (this.href.startsWith("#")) return;
1058
+ event.preventDefault();
1059
+ if (this.href.startsWith("?")) {
1060
+ const url = window.location.pathname + this.href;
1061
+ this.dispatchPopstate(basepath, url);
1062
+ return;
1063
+ }
1064
+ if (this.href.startsWith("/")) {
1065
+ if (!this.href.startsWith(basepath)) {
1066
+ window.location.assign(this.href);
1067
+ return;
1068
+ }
1069
+ this.dispatchPopstate(basepath, this.href);
1070
+ return;
1071
+ }
1072
+ const url = absolutePath(basepath, this.href);
1073
+ this.dispatchPopstate(basepath, url);
1074
+ };
1075
+ }
1076
+ connectedCallback() {
1077
+ super.connectedCallback();
1078
+ this.addEventListener("click", this.handleClick);
1079
+ }
1080
+ disconnectedCallback() {
1081
+ this.removeEventListener("click", this.handleClick);
1082
+ super.disconnectedCallback();
1083
+ }
1084
+ /**
1085
+ * 호스트에 세팅된 `aria-current`/`aria-label`은 실제 접근 가능한(포커스 대상)
1086
+ * 엘리먼트가 아니라 — 그 안쪽 shadow DOM 의 네이티브 `<a>`다. 섀도우 경계를
1087
+ * 넘지 않으므로 접근성 트리에 자동 반영되지 않는다(docket #45 실측 — 속성은
1088
+ * 붙어 있는데 접근성 트리의 `aria-current`는 계속 비어 있음). `render()`가 이
1089
+ * 값을 읽어 내부 `<a>`에 직접 옮긴다.
1090
+ *
1091
+ * 둘 다 Lit 리액티브 프로퍼티로 선언돼 있지 않아 `observedAttributes`에 없다 —
1092
+ * 그 목록에 없는 속성은 `attributeChangedCallback` 자체가 호출되지 않는다
1093
+ * (커스텀 엘리먼트 표준 동작). 초기 렌더는 되지만 연결 후 동적 변경은 반영되지
1094
+ * 않았다 — 목록에 명시적으로 추가해야 한다.
1095
+ */
1096
+ static get observedAttributes() {
1097
+ return [
1098
+ ...super.observedAttributes,
1099
+ "aria-current",
1100
+ "aria-label"
1101
+ ];
1102
+ }
1103
+ attributeChangedCallback(name, old, value) {
1104
+ super.attributeChangedCallback(name, old, value);
1105
+ if (name === "aria-current" || name === "aria-label") this.requestUpdate();
1106
+ }
1107
+ willUpdate(changedProperties) {
1108
+ super.willUpdate(changedProperties);
1109
+ if (changedProperties.has("href")) this.isExternal = isExternalUrl(this.href || "");
1110
+ }
1111
+ render() {
1112
+ return html`
1113
+ <a
1114
+ href=${this.compute(this.href)}
1115
+ target=${ifDefined(this.target)}
1116
+ rel=${ifDefined(this.rel)}
1117
+ data-navigate=${ifDefined(this.navigate)}
1118
+ aria-current=${ifDefined(this.getAttribute("aria-current") ?? void 0)}
1119
+ aria-label=${ifDefined(this.getAttribute("aria-label") ?? void 0)}
1120
+ >
1121
+ <slot></slot>
1122
+ </a>
1123
+ `;
1124
+ }
1125
+ /** a 태그에 주입할 href 값을 계산합니다. */
1126
+ compute(href) {
1127
+ const basepath = this.getBasepath();
1128
+ if (!href) return window.location.origin + basepath;
1129
+ if (this.isExternal) return href;
1130
+ if (href.startsWith("/")) return href;
1131
+ if (href.startsWith("#") || href.startsWith("?")) return href;
1132
+ return absolutePath(basepath, href);
1133
+ }
1134
+ /** 클라이언트 라우팅을 위해 popstate 이벤트를 발생시킵니다. */
1135
+ dispatchPopstate(basepath, url) {
1136
+ window.history.pushState({ basepath }, "", url);
1137
+ window.dispatchEvent(new PopStateEvent("popstate"));
1138
+ }
1139
+ /** basepath를 state에서 꺼내는 헬퍼 */
1140
+ getBasepath() {
1141
+ return window.history.state?.basepath || "/";
1142
+ }
1143
+ static {
1144
+ this.styles = css`
1145
+ :host {
1146
+ cursor: pointer;
1147
+ }
1148
+
1149
+ a {
1150
+ text-decoration: none;
1151
+
1152
+ font-size: inherit;
1153
+ font-weight: inherit;
1154
+ font-family: inherit;
1155
+ color: inherit;
1156
+ cursor: inherit;
1157
+ }
1158
+ `;
1159
+ }
1160
+ };
1161
+ __decorate([property({ type: String }), __decorateMetadata("design:type", String)], ULink.prototype, "target", void 0);
1162
+ __decorate([property({ type: String }), __decorateMetadata("design:type", String)], ULink.prototype, "rel", void 0);
1163
+ __decorate([property({ type: String }), __decorateMetadata("design:type", String)], ULink.prototype, "href", void 0);
1164
+ __decorate([property({ type: String }), __decorateMetadata("design:type", String)], ULink.prototype, "navigate", void 0);
1165
+ ULink = __decorate([customElement("u-link")], ULink);
1166
+ //#endregion
1167
+ export { isExternalUrl as a, absolutePath as i, __decorate as n, parseUrl as o, __decorateMetadata as r, UOutlet as s, ULink as t };