@manyducks.co/dolla 2.0.0-alpha.1 → 2.0.0-alpha.10

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.
Files changed (42) hide show
  1. package/README.md +196 -473
  2. package/dist/index.d.ts +10 -33
  3. package/dist/index.js +792 -675
  4. package/dist/index.js.map +1 -1
  5. package/dist/jsx-dev-runtime.d.ts +1 -1
  6. package/dist/jsx-dev-runtime.js +2 -2
  7. package/dist/jsx-dev-runtime.js.map +1 -1
  8. package/dist/jsx-runtime.d.ts +1 -1
  9. package/dist/jsx-runtime.js +2 -2
  10. package/dist/jsx-runtime.js.map +1 -1
  11. package/dist/markup.d.ts +37 -23
  12. package/dist/modules/dolla.d.ts +41 -17
  13. package/dist/modules/i18n.d.ts +83 -0
  14. package/dist/modules/router.d.ts +9 -10
  15. package/dist/nodes/cond.d.ts +9 -10
  16. package/dist/nodes/html.d.ts +14 -10
  17. package/dist/nodes/observer.d.ts +9 -10
  18. package/dist/nodes/outlet.d.ts +10 -11
  19. package/dist/nodes/portal.d.ts +6 -7
  20. package/dist/nodes/repeat.d.ts +15 -16
  21. package/dist/nodes/text.d.ts +8 -9
  22. package/dist/passthrough-9kwwjgWk.js +1279 -0
  23. package/dist/passthrough-9kwwjgWk.js.map +1 -0
  24. package/dist/state.d.ts +101 -0
  25. package/dist/types.d.ts +12 -12
  26. package/dist/view.d.ts +28 -7
  27. package/dist/views/default-crash-view.d.ts +18 -0
  28. package/dist/views/passthrough.d.ts +5 -0
  29. package/notes/context-vars.md +21 -0
  30. package/notes/readme-scratch.md +222 -0
  31. package/notes/route-middleware.md +42 -0
  32. package/notes/scratch.md +42 -5
  33. package/package.json +8 -12
  34. package/tests/{signals.test.js → state.test.js} +6 -6
  35. package/vite.config.js +1 -0
  36. package/dist/fragment-DHJiX0-a.js +0 -1241
  37. package/dist/fragment-DHJiX0-a.js.map +0 -1
  38. package/dist/modules/language.d.ts +0 -41
  39. package/dist/signals.d.ts +0 -101
  40. package/dist/views/default-crash-page.d.ts +0 -8
  41. package/dist/views/default-view.d.ts +0 -2
  42. package/dist/views/fragment.d.ts +0 -2
package/dist/index.js CHANGED
@@ -1,29 +1,73 @@
1
- var bt = Object.defineProperty;
2
- var et = (a) => {
1
+ var gt = Object.defineProperty;
2
+ var Ze = (a) => {
3
3
  throw TypeError(a);
4
4
  };
5
- var vt = (a, e, t) => e in a ? bt(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
6
- var k = (a, e, t) => vt(a, typeof e != "symbol" ? e + "" : e, t), ze = (a, e, t) => e.has(a) || et("Cannot " + t);
7
- var i = (a, e, t) => (ze(a, e, "read from private field"), t ? t.call(a) : e.get(a)), g = (a, e, t) => e.has(a) ? et("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(a) : e.set(a, t), w = (a, e, t, n) => (ze(a, e, "write to private field"), n ? n.call(a, t) : e.set(a, t), t), P = (a, e, t) => (ze(a, e, "access private method"), t);
8
- var tt = (a, e, t, n) => ({
9
- set _(o) {
10
- w(a, e, o, t);
5
+ var mt = (a, e, t) => e in a ? gt(a, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[e] = t;
6
+ var P = (a, e, t) => mt(a, typeof e != "symbol" ? e + "" : e, t), ze = (a, e, t) => e.has(a) || Ze("Cannot " + t);
7
+ var n = (a, e, t) => (ze(a, e, "read from private field"), t ? t.call(a) : e.get(a)), h = (a, e, t) => e.has(a) ? Ze("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(a) : e.set(a, t), g = (a, e, t, r) => (ze(a, e, "write to private field"), r ? r.call(a, t) : e.set(a, t), t), S = (a, e, t) => (ze(a, e, "access private method"), t);
8
+ var et = (a, e, t, r) => ({
9
+ set _(i) {
10
+ g(a, e, i, t);
11
11
  },
12
12
  get _() {
13
- return i(a, e, n);
13
+ return n(a, e, r);
14
14
  }
15
15
  });
16
- import { i as Ge, s as Be, a as $t, d as Qe, b as Et, c as Ze, e as H, f as Q, g as lt, h as Lt, w as ut, j as Ce, r as kt, k as St, l as nt, m as Pt, t as Mt, n as Rt, o as Ot, p as xt, q as rt, u as at, v as Nt, x as Ne, y as Te } from "./fragment-DHJiX0-a.js";
17
- import { F as yn, A as wn, z as bn, B as vn, C as $n } from "./fragment-DHJiX0-a.js";
18
- function ht(a, e) {
19
- return e.outlet();
16
+ import { h as tt, c as wt, i as Ge, t as Be, a as yt, d as ae, b as bt, e as Xe, f as U, g as K, j as lt, k as vt, w as ut, P as ht, l as rt, m as $t, n as Et, v as kt, o as Pt, p as St, q as nt, r as at, s as Lt, u as Te, x as Ae, y as Rt, z as xt, A as Ot } from "./passthrough-9kwwjgWk.js";
17
+ import { B as rr, C as nr, D as ar } from "./passthrough-9kwwjgWk.js";
18
+ function Nt(a) {
19
+ return tt`
20
+ <div
21
+ style=${{
22
+ backgroundColor: "#880000",
23
+ color: "#fff",
24
+ padding: "2rem",
25
+ position: "fixed",
26
+ inset: 0,
27
+ fontSize: "20px"
28
+ }}
29
+ >
30
+ <h1 style=${{ marginBottom: "0.5rem" }}>The app has crashed</h1>
31
+ <p style=${{ marginBottom: "0.25rem" }}>
32
+ <span style=${{ fontFamily: "monospace" }}>${a.loggerName}</span>
33
+ ${wt(a.uid, tt`<span style=${{ fontFamily: "monospace", opacity: 0.5 }}> [uid: ${a.uid}]</span>`)}
34
+ ${" "}says:
35
+ </p>
36
+ <blockquote
37
+ style=${{
38
+ backgroundColor: "#991111",
39
+ padding: "0.25em",
40
+ borderRadius: "6px",
41
+ fontFamily: "monospace",
42
+ marginBottom: "1rem"
43
+ }}
44
+ >
45
+ <span
46
+ style=${{
47
+ display: "inline-block",
48
+ backgroundColor: "red",
49
+ padding: "0.1em 0.4em",
50
+ marginRight: "0.5em",
51
+ borderRadius: "4px",
52
+ fontSize: "0.9em",
53
+ fontWeight: "bold"
54
+ }}
55
+ >
56
+ ${a.error.name}
57
+ </span>
58
+ ${a.error.message}
59
+ </blockquote>
60
+
61
+ <p>Please see the browser console for details.</p>
62
+ </div>
63
+ `;
20
64
  }
21
- var K, Fe, T, C;
22
- class Tt {
65
+ var J, Fe, M, C;
66
+ class Mt {
23
67
  constructor() {
24
- g(this, T);
25
- g(this, K, []);
26
- g(this, Fe, At());
68
+ h(this, M);
69
+ h(this, J, []);
70
+ h(this, Fe, Tt());
27
71
  }
28
72
  /**
29
73
  * Adds a new middleware that will apply to subsequent requests.
@@ -32,65 +76,65 @@ class Tt {
32
76
  * @param middleware - A middleware function that will intercept requests.
33
77
  */
34
78
  use(e) {
35
- return i(this, K).push(e), () => {
36
- i(this, K).splice(i(this, K).indexOf(e), 1);
79
+ return n(this, J).push(e), () => {
80
+ n(this, J).splice(n(this, J).indexOf(e), 1);
37
81
  };
38
82
  }
39
83
  async get(e, t) {
40
- return P(this, T, C).call(this, "get", e, t);
84
+ return S(this, M, C).call(this, "get", e, t);
41
85
  }
42
86
  async put(e, t) {
43
- return P(this, T, C).call(this, "put", e, t);
87
+ return S(this, M, C).call(this, "put", e, t);
44
88
  }
45
89
  async patch(e, t) {
46
- return P(this, T, C).call(this, "patch", e, t);
90
+ return S(this, M, C).call(this, "patch", e, t);
47
91
  }
48
92
  async post(e, t) {
49
- return P(this, T, C).call(this, "post", e, t);
93
+ return S(this, M, C).call(this, "post", e, t);
50
94
  }
51
95
  async delete(e, t) {
52
- return P(this, T, C).call(this, "delete", e, t);
96
+ return S(this, M, C).call(this, "delete", e, t);
53
97
  }
54
98
  async head(e, t) {
55
- return P(this, T, C).call(this, "head", e, t);
99
+ return S(this, M, C).call(this, "head", e, t);
56
100
  }
57
101
  async options(e, t) {
58
- return P(this, T, C).call(this, "options", e, t);
102
+ return S(this, M, C).call(this, "options", e, t);
59
103
  }
60
104
  async trace(e, t) {
61
- return P(this, T, C).call(this, "trace", e, t);
105
+ return S(this, M, C).call(this, "trace", e, t);
62
106
  }
63
107
  }
64
- K = new WeakMap(), Fe = new WeakMap(), T = new WeakSet(), C = async function(e, t, n) {
65
- return Ut({
66
- ...n,
108
+ J = new WeakMap(), Fe = new WeakMap(), M = new WeakSet(), C = async function(e, t, r) {
109
+ return jt({
110
+ ...r,
67
111
  method: e,
68
112
  uri: t,
69
- middleware: i(this, K),
70
- fetch: i(this, Fe)
113
+ middleware: n(this, J),
114
+ fetch: n(this, Fe)
71
115
  });
72
116
  };
73
- function At() {
117
+ function Tt() {
74
118
  if (typeof window < "u" && window.fetch)
75
119
  return window.fetch.bind(window);
76
120
  if (typeof global < "u" && global.fetch)
77
121
  return global.fetch.bind(global);
78
122
  throw new Error("Running in neither browser nor node. Please run this app in one of the supported environments.");
79
123
  }
80
- class jt extends Error {
124
+ class At extends Error {
81
125
  constructor(t) {
82
- const { status: n, statusText: o, method: r, uri: s } = t, h = `${n} ${o}: Request failed (${r.toUpperCase()} ${s})`;
83
- super(h);
84
- k(this, "response");
126
+ const { status: r, statusText: i, method: s, uri: o } = t, f = `${r} ${i}: Request failed (${s.toUpperCase()} ${o})`;
127
+ super(f);
128
+ P(this, "response");
85
129
  this.response = t;
86
130
  }
87
131
  }
88
- async function Ut(a) {
89
- const { headers: e, query: t, fetch: n, middleware: o } = a, r = {
132
+ async function jt(a) {
133
+ const { headers: e, query: t, fetch: r, middleware: i } = a, s = {
90
134
  method: a.method,
91
135
  uri: a.uri,
92
136
  get sameOrigin() {
93
- return !r.uri.startsWith("http");
137
+ return !s.uri.startsWith("http");
94
138
  },
95
139
  query: new URLSearchParams(),
96
140
  headers: new Headers(),
@@ -98,76 +142,76 @@ async function Ut(a) {
98
142
  };
99
143
  if (e)
100
144
  if (e instanceof Map || e instanceof Headers)
101
- e.forEach((c, u) => {
102
- r.headers.set(u, c);
145
+ e.forEach((c, w) => {
146
+ s.headers.set(w, c);
103
147
  });
104
148
  else if (e != null && typeof e == "object" && !Array.isArray(e))
105
149
  for (const c in e) {
106
- const u = e[c];
107
- u instanceof Date ? r.headers.set(c, u.toISOString()) : u != null && r.headers.set(c, String(u));
150
+ const w = e[c];
151
+ w instanceof Date ? s.headers.set(c, w.toISOString()) : w != null && s.headers.set(c, String(w));
108
152
  }
109
153
  else
110
154
  throw new TypeError(`Unknown headers type. Got: ${e}`);
111
155
  if (t)
112
156
  if (t instanceof Map || t instanceof URLSearchParams)
113
- t.forEach((c, u) => {
114
- r.query.set(u, c);
157
+ t.forEach((c, w) => {
158
+ s.query.set(w, c);
115
159
  });
116
160
  else if (t != null && typeof t == "object" && !Array.isArray(t))
117
161
  for (const c in t) {
118
- const u = t[c];
119
- u instanceof Date ? r.query.set(c, u.toISOString()) : u != null && r.query.set(c, String(u));
162
+ const w = t[c];
163
+ w instanceof Date ? s.query.set(c, w.toISOString()) : w != null && s.query.set(c, String(w));
120
164
  }
121
165
  else
122
166
  throw new TypeError(`Unknown query params type. Got: ${t}`);
123
- let s;
124
- const h = async () => {
125
- const c = r.query.toString(), u = c.length > 0 ? r.uri + "?" + c : r.uri;
126
- let p;
127
- !r.headers.has("content-type") && Ge(r.body) ? (r.headers.set("content-type", "application/json"), p = JSON.stringify(r.body)) : p = r.body;
128
- const b = await n(u, {
129
- method: r.method,
130
- headers: r.headers,
131
- body: p
132
- }), f = Object.fromEntries(b.headers.entries()), m = f["content-type"];
167
+ let o;
168
+ const f = async () => {
169
+ const c = s.query.toString(), w = c.length > 0 ? s.uri + "?" + c : s.uri;
170
+ let y;
171
+ !s.headers.has("content-type") && Ge(s.body) ? (s.headers.set("content-type", "application/json"), y = JSON.stringify(s.body)) : y = s.body;
172
+ const m = await r(w, {
173
+ method: s.method,
174
+ headers: s.headers,
175
+ body: y
176
+ }), d = Object.fromEntries(m.headers.entries()), b = d["content-type"];
133
177
  let $;
134
- m != null && m.includes("application/json") ? $ = await b.json() : m != null && m.includes("application/x-www-form-urlencoded") ? $ = await b.formData() : $ = await b.text(), s = {
135
- method: r.method,
136
- uri: r.uri,
137
- status: b.status,
138
- statusText: b.statusText,
139
- headers: f,
178
+ b != null && b.includes("application/json") ? $ = await m.json() : b != null && b.includes("application/x-www-form-urlencoded") ? $ = await m.formData() : $ = await m.text(), o = {
179
+ method: s.method,
180
+ uri: s.uri,
181
+ status: m.status,
182
+ statusText: m.statusText,
183
+ headers: d,
140
184
  body: $
141
185
  };
142
186
  };
143
- if (o.length > 0) {
144
- const c = (u = 0) => {
145
- const p = o[u], b = o[u + 1] ? c(u + 1) : h;
146
- return async () => p(r, async () => (await b(), s));
187
+ if (i.length > 0) {
188
+ const c = (w = 0) => {
189
+ const y = i[w], m = i[w + 1] ? c(w + 1) : f;
190
+ return async () => y(s, async () => (await m(), o));
147
191
  };
148
192
  await c()();
149
193
  } else
150
- await h();
151
- if (s.status < 200 || s.status >= 400)
152
- throw new jt(s);
153
- return s;
194
+ await f();
195
+ if (o.status < 200 || o.status >= 400)
196
+ throw new At(o);
197
+ return o;
154
198
  }
155
- class qt {
199
+ class Dt {
156
200
  constructor(e, t) {
157
- k(this, "dolla");
158
- k(this, "config");
159
- k(this, "strings");
201
+ P(this, "dolla");
202
+ P(this, "config");
203
+ P(this, "strings");
160
204
  this.config = e, this.dolla = t;
161
205
  }
162
206
  async load() {
163
207
  if (this.strings == null) {
164
- if (Ze(this.config.fetch)) {
208
+ if (Xe(this.config.fetch)) {
165
209
  const e = await this.config.fetch();
166
210
  if (Ge(e))
167
211
  this.strings = e;
168
212
  else
169
213
  throw new Error(`Fetch function did not return an object of language strings: ${e}`);
170
- } else if (H(this.config.path)) {
214
+ } else if (U(this.config.path)) {
171
215
  const e = await this.dolla.http.get(this.config.path);
172
216
  if (e.status >= 200 && e.status < 300)
173
217
  if (Ge(e.body))
@@ -185,144 +229,193 @@ class qt {
185
229
  return this.strings;
186
230
  }
187
231
  }
188
- var we, J, O, se, be, ve, oe, $e, We, ft;
232
+ var ye, Y, x, ie, be, ve, oe, $e, Ie, ft;
189
233
  class Ct {
190
234
  constructor(e) {
191
- g(this, We);
192
- g(this, we);
193
- g(this, J);
194
- g(this, O, /* @__PURE__ */ new Map());
195
- g(this, se, []);
196
- g(this, be, "auto");
197
- k(this, "$current");
198
- g(this, ve);
199
- g(this, oe);
200
- g(this, $e);
201
- w(this, we, e), w(this, J, e.createLogger("dolla/language"));
202
- const [t, n] = Q(), [o, r] = Q();
203
- this.$current = t, w(this, ve, n), w(this, oe, o), w(this, $e, r), e.beforeMount(async () => {
204
- i(this, O).size > 0 && await this.setLanguage(i(this, be));
235
+ h(this, Ie);
236
+ h(this, ye);
237
+ h(this, Y);
238
+ h(this, x, /* @__PURE__ */ new Map());
239
+ h(this, ie, []);
240
+ h(this, be, "auto");
241
+ P(this, "$locale");
242
+ h(this, ve);
243
+ h(this, oe);
244
+ h(this, $e);
245
+ g(this, ye, e), g(this, Y, e.createLogger("dolla/i18n"));
246
+ const [t, r] = K(), [i, s] = K();
247
+ this.$locale = t, g(this, ve, r), g(this, oe, i), g(this, $e, s), e.beforeMount(async () => {
248
+ n(this, x).size > 0 && await this.setLocale(n(this, be));
205
249
  });
206
250
  }
207
- get supportedLanguages() {
208
- return [...i(this, O).keys()];
251
+ get locales() {
252
+ return [...n(this, x).keys()];
209
253
  }
210
254
  setup(e) {
211
- if (e.languages.forEach((t) => {
212
- i(this, O).set(t.name, new qt(t, i(this, we)));
213
- }), e.initialLanguage && e.initialLanguage !== "auto") {
214
- if (!e.languages.some((n) => n.name === e.initialLanguage))
215
- throw new Error(`Initial language '${e.initialLanguage}' has no registered translation.`);
216
- w(this, be, e.initialLanguage);
255
+ if (e.translations.forEach((t) => {
256
+ n(this, x).set(t.locale, new Dt(t, n(this, ye)));
257
+ }), e.locale && e.locale !== "auto") {
258
+ if (!e.translations.some((r) => r.locale === e.locale))
259
+ throw new Error(`Initial locale '${e.locale}' is not registered in the locales array.`);
260
+ g(this, be, e.locale);
217
261
  }
218
- i(this, J).info(
219
- `${i(this, O).size} language${i(this, O).size === 1 ? "" : "s"} supported: '${[...i(this, O).keys()].join("', '")}'`
262
+ n(this, Y).info(
263
+ `${n(this, x).size} language${n(this, x).size === 1 ? "" : "s"} supported: '${[...n(this, x).keys()].join("', '")}'`
220
264
  );
221
265
  }
222
- async setLanguage(e) {
223
- var o;
266
+ async setLocale(e) {
267
+ var i;
224
268
  let t;
225
269
  if (e === "auto") {
226
- let r = [];
270
+ let s = [];
227
271
  if (typeof navigator == "object") {
228
- const s = navigator;
229
- ((o = s.languages) == null ? void 0 : o.length) > 0 ? r.push(...s.languages) : s.language ? r.push(s.language) : s.browserLanguage ? r.push(s.browserLanguage) : s.userLanguage && r.push(s.userLanguage);
272
+ const o = navigator;
273
+ ((i = o.languages) == null ? void 0 : i.length) > 0 ? s.push(...o.languages) : o.language ? s.push(o.language) : o.browserLanguage ? s.push(o.browserLanguage) : o.userLanguage && s.push(o.userLanguage);
230
274
  }
231
- for (const s of r)
232
- i(this, O).has(s) && (t = s);
275
+ for (const o of s)
276
+ n(this, x).has(o) && (t = o);
233
277
  } else
234
- i(this, O).has(e) && (t = e);
278
+ n(this, x).has(e) && (t = e);
235
279
  if (t == null) {
236
- const r = i(this, O).keys().next().value;
237
- r && (t = r);
280
+ const s = n(this, x).keys().next().value;
281
+ s && (t = s);
238
282
  }
239
- if (!t || !i(this, O).has(t))
283
+ if (!t || !n(this, x).has(t))
240
284
  throw new Error(`Language '${e}' is not configured for this app.`);
241
- const n = i(this, O).get(t);
285
+ const r = n(this, x).get(t);
242
286
  try {
243
- const r = await n.load();
244
- i(this, $e).call(this, r), i(this, ve).call(this, t), i(this, J).info("set language to " + t);
245
- } catch (r) {
246
- r instanceof Error && i(this, J).crash(r);
287
+ const s = await r.load();
288
+ n(this, $e).call(this, s), n(this, ve).call(this, t), n(this, Y).info("set language to " + t);
289
+ } catch (s) {
290
+ s instanceof Error && n(this, Y).crash(s);
247
291
  }
248
292
  }
249
293
  /**
250
- * Returns a Signal containing the value at `key`.
294
+ * Returns a State containing the value at `key`.
251
295
 
252
296
  * @param key - Key to the translated value.
253
297
  * @param values - A map of {{placeholder}} names and the values to replace them with.
298
+ *
299
+ * @example
300
+ * const $value = t("your.key.here");
254
301
  */
255
302
  t(e, t) {
256
303
  if (this === void 0)
257
304
  throw new Error(
258
305
  `The 't' function cannot be destructured. If you need a standalone version you can import it like so: 'import { t } from "@manyducks.co/dolla"'`
259
306
  );
260
- if (!this.$current.get())
261
- return _t;
262
- const n = P(this, We, ft).call(this, e, t);
263
- if (n)
264
- return n;
307
+ if (!this.$locale.get())
308
+ return qt;
309
+ const r = S(this, Ie, ft).call(this, e, t);
310
+ if (r)
311
+ return r;
265
312
  if (t) {
266
- const r = {};
267
- for (const [h, c] of Object.entries(t))
268
- $t(c) && (r[h] = c);
269
- const s = Object.entries(r);
270
- if (s.length > 0) {
271
- const h = s.map((u) => u[1]), c = Qe([i(this, oe), ...h], (u, ...p) => {
272
- const b = p.map(($, N) => s[N]), f = {
313
+ const s = {};
314
+ for (const [f, c] of Object.entries(t))
315
+ yt(c) && (s[f] = c);
316
+ const o = Object.entries(s);
317
+ if (o.length > 0) {
318
+ const f = o.map((w) => w[1]), c = ae([n(this, oe), ...f], (w, ...y) => {
319
+ const m = y.map(($, j) => o[j]), d = {
273
320
  ...t
274
321
  };
275
- for (let $ = 0; $ < b.length; $++) {
276
- const N = b[$][0];
277
- f[N] = p[$];
322
+ for (let $ = 0; $ < m.length; $++) {
323
+ const j = m[$][0];
324
+ d[j] = y[$];
278
325
  }
279
- const m = st(u, e) || `[NO TRANSLATION: ${e}]`;
280
- return it(m, f);
326
+ const b = it(w, e) || `[NO TRANSLATION: ${e}]`;
327
+ return st(b, d);
281
328
  });
282
- return i(this, se).push([e, t, c]), c;
329
+ return n(this, ie).push([e, t, c]), c;
283
330
  }
284
331
  }
285
- const o = Qe([i(this, oe)], (r) => {
286
- let s = st(r, e) || `[NO TRANSLATION: ${e}]`;
287
- return t && (s = it(s, t)), s;
332
+ const i = ae([n(this, oe)], (s) => {
333
+ let o = it(s, e) || `[NO TRANSLATION: ${e}]`;
334
+ return t && (o = st(o, t)), o;
288
335
  });
289
- return i(this, se).push([e, t, o]), o;
336
+ return n(this, ie).push([e, t, i]), i;
337
+ }
338
+ /**
339
+ * Creates a wrapped `Intl.Collator` configured for the current locale.
340
+ * NOTE: The Collator remains bound to the locale it was created with.
341
+ *
342
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator#options
343
+ */
344
+ collator(e) {
345
+ return new Intl.Collator(this.$locale.get(), e);
346
+ }
347
+ /**
348
+ * Returns a State containing the number formatted for the current locale. Uses `Intl.NumberFormat` under the hood.
349
+ *
350
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options
351
+ */
352
+ number(e, t) {
353
+ return ae([this.$locale, e], (r, i) => new Intl.NumberFormat(this.$locale.get(), t).format(i));
354
+ }
355
+ /**
356
+ * Returns a State containing the date formatted for the current locale. Uses `Intl.DateTimeFormat` under the hood.
357
+ *
358
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options
359
+ *
360
+ * @example
361
+ * const date = new Date();
362
+ * const $formatted = Dolla.i18n.dateTime(date, { dateFormat: "short" });
363
+ */
364
+ dateTime(e, t) {
365
+ return ae([this.$locale, e], (r, i) => new Intl.DateTimeFormat(this.$locale.get(), t).format(
366
+ typeof i == "string" ? new Date(i) : i
367
+ ));
368
+ }
369
+ /**
370
+ * Returns a State containing the date formatted for the current locale. Uses `Intl.DateTimeFormat` under the hood.
371
+ *
372
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#options
373
+ *
374
+ * @example
375
+ * const list = new Date();
376
+ * const $formatted = Dolla.i18n.list(list, { });
377
+ */
378
+ list(e, t) {
379
+ return ae([this.$locale, e], (r, i) => new Intl.ListFormat(this.$locale.get(), t).format(i));
290
380
  }
291
381
  }
292
- we = new WeakMap(), J = new WeakMap(), O = new WeakMap(), se = new WeakMap(), be = new WeakMap(), ve = new WeakMap(), oe = new WeakMap(), $e = new WeakMap(), We = new WeakSet(), ft = function(e, t) {
293
- for (const n of i(this, se))
294
- if (n[0] === e && Et(n[1], t))
295
- return n[2];
382
+ ye = new WeakMap(), Y = new WeakMap(), x = new WeakMap(), ie = new WeakMap(), be = new WeakMap(), ve = new WeakMap(), oe = new WeakMap(), $e = new WeakMap(), Ie = new WeakSet(), // relativeTime(): State<string> {
383
+ // }
384
+ ft = function(e, t) {
385
+ for (const r of n(this, ie))
386
+ if (r[0] === e && bt(r[1], t))
387
+ return r[2];
296
388
  };
297
- const _t = Be("[NO LANGUAGE SET]");
298
- function it(a, e) {
389
+ const qt = Be("[NO LANGUAGE SET]");
390
+ function st(a, e) {
299
391
  for (const t in e)
300
392
  a = a.replace(`{{${t}}}`, String(e[t]));
301
393
  return a;
302
394
  }
303
- function st(a, e) {
304
- const t = String(e).split(/[\.\[\]]/).filter((o) => o.trim() !== "");
305
- let n = a;
395
+ function it(a, e) {
396
+ const t = String(e).split(/[\.\[\]]/).filter((i) => i.trim() !== "");
397
+ let r = a;
306
398
  for (; t.length > 0; ) {
307
- const o = t.shift();
308
- n != null ? n = n[o] : n = void 0;
399
+ const i = t.shift();
400
+ r != null ? r = r[i] : r = void 0;
309
401
  }
310
- return n;
402
+ return r;
311
403
  }
312
- var Y, Ee, V, F, ce, _, le, Ae;
313
- class Dt {
404
+ var X, Ee, _, H, ce, q, le, je;
405
+ class Vt {
314
406
  constructor(e) {
315
- g(this, le);
316
- g(this, Y);
317
- g(this, Ee);
407
+ h(this, le);
408
+ h(this, X);
409
+ h(this, Ee);
318
410
  // Keyed updates ensure only the most recent callback queued with a certain key
319
411
  // will be called, keeping DOM operations to a minimum.
320
- g(this, V, /* @__PURE__ */ new Map());
412
+ h(this, _, /* @__PURE__ */ new Map());
321
413
  // All unkeyed updates are run on every batch.
322
- g(this, F, []);
323
- g(this, ce, []);
324
- g(this, _, !1);
325
- w(this, Y, e), w(this, Ee, e.createLogger("dolla/render"));
414
+ h(this, H, []);
415
+ // All read callbacks are run before updates on every batch.
416
+ h(this, ce, []);
417
+ h(this, q, !1);
418
+ g(this, X, e), g(this, Ee, e.createLogger("dolla/render"));
326
419
  }
327
420
  /**
328
421
  * Queues a callback to run in the next render batch.
@@ -330,12 +423,12 @@ class Dt {
330
423
  * Returns a Promise that resolves once the callback has run.
331
424
  */
332
425
  update(e, t) {
333
- return new Promise((n) => {
334
- t ? i(this, V).set(t, () => {
335
- e(), n();
336
- }) : i(this, F).push(() => {
337
- e(), n();
338
- }), !i(this, _) && i(this, Y).isMounted && (w(this, _, !0), P(this, le, Ae).call(this));
426
+ return new Promise((r) => {
427
+ t ? n(this, _).set(t, () => {
428
+ e(), r();
429
+ }) : n(this, H).push(() => {
430
+ e(), r();
431
+ }), !n(this, q) && n(this, X).isMounted && (g(this, q, !0), S(this, le, je).call(this));
339
432
  });
340
433
  }
341
434
  /**
@@ -343,52 +436,51 @@ class Dt {
343
436
  * ensuring all writes have been performed before reading.
344
437
  * Returns a Promise that resolves once the callback has run.
345
438
  */
346
- async read(e) {
439
+ read(e) {
347
440
  return new Promise((t) => {
348
- i(this, ce).push(() => {
441
+ n(this, ce).push(() => {
349
442
  e(), t();
350
- }), !i(this, _) && i(this, Y).isMounted && (w(this, _, !0), P(this, le, Ae).call(this));
443
+ }), !n(this, q) && n(this, X).isMounted && (g(this, q, !0), S(this, le, je).call(this));
351
444
  });
352
445
  }
353
446
  }
354
- Y = new WeakMap(), Ee = new WeakMap(), V = new WeakMap(), F = new WeakMap(), ce = new WeakMap(), _ = new WeakMap(), le = new WeakSet(), Ae = function() {
355
- const e = i(this, V).size + i(this, F).length;
356
- if ((!i(this, Y).isMounted || e === 0) && w(this, _, !1), !i(this, _)) {
357
- for (const t of i(this, ce))
447
+ X = new WeakMap(), Ee = new WeakMap(), _ = new WeakMap(), H = new WeakMap(), ce = new WeakMap(), q = new WeakMap(), le = new WeakSet(), je = function() {
448
+ const e = n(this, _).size + n(this, H).length;
449
+ if ((!n(this, X).isMounted || e === 0) && g(this, q, !1), !n(this, q)) {
450
+ for (const t of n(this, ce))
358
451
  t();
359
- w(this, ce, []);
452
+ g(this, ce, []);
360
453
  return;
361
454
  }
362
455
  requestAnimationFrame(() => {
363
- i(this, Ee).info(`Batching ${i(this, V).size + i(this, F).length} queued DOM update(s).`);
364
- for (const t of i(this, V).values())
456
+ n(this, Ee).info(`Batching ${n(this, _).size + n(this, H).length} queued DOM update(s).`);
457
+ for (const t of n(this, _).values())
365
458
  t();
366
- i(this, V).clear();
367
- for (const t of i(this, F))
459
+ n(this, _).clear();
460
+ for (const t of n(this, H))
368
461
  t();
369
- w(this, F, []), P(this, le, Ae).call(this);
462
+ g(this, H, []), S(this, le, je).call(this);
370
463
  });
371
464
  };
372
465
  function de() {
373
- return de = Object.assign || function(a) {
466
+ return de = Object.assign ? Object.assign.bind() : function(a) {
374
467
  for (var e = 1; e < arguments.length; e++) {
375
468
  var t = arguments[e];
376
- for (var n in t)
377
- Object.prototype.hasOwnProperty.call(t, n) && (a[n] = t[n]);
469
+ for (var r in t) ({}).hasOwnProperty.call(t, r) && (a[r] = t[r]);
378
470
  }
379
471
  return a;
380
- }, de.apply(this, arguments);
472
+ }, de.apply(null, arguments);
381
473
  }
382
- var U;
474
+ var A;
383
475
  (function(a) {
384
476
  a.Pop = "POP", a.Push = "PUSH", a.Replace = "REPLACE";
385
- })(U || (U = {}));
386
- var _e = process.env.NODE_ENV !== "production" ? function(a) {
477
+ })(A || (A = {}));
478
+ var Ve = process.env.NODE_ENV !== "production" ? function(a) {
387
479
  return Object.freeze(a);
388
480
  } : function(a) {
389
481
  return a;
390
482
  };
391
- function je(a, e) {
483
+ function De(a, e) {
392
484
  if (!a) {
393
485
  typeof console < "u" && console.warn(e);
394
486
  try {
@@ -397,38 +489,38 @@ function je(a, e) {
397
489
  }
398
490
  }
399
491
  }
400
- var De = "beforeunload", Ht = "hashchange", dt = "popstate";
401
- function Vt(a) {
492
+ var Ue = "beforeunload", Ut = "hashchange", dt = "popstate";
493
+ function _t(a) {
402
494
  a === void 0 && (a = {});
403
- var e = a, t = e.window, n = t === void 0 ? document.defaultView : t, o = n.history;
404
- function r() {
405
- var y = n.location, l = y.pathname, d = y.search, v = y.hash, E = o.state || {};
406
- return [E.idx, _e({
495
+ var e = a, t = e.window, r = t === void 0 ? document.defaultView : t, i = r.history;
496
+ function s() {
497
+ var p = r.location, l = p.pathname, u = p.search, v = p.hash, E = i.state || {};
498
+ return [E.idx, Ve({
407
499
  pathname: l,
408
- search: d,
500
+ search: u,
409
501
  hash: v,
410
502
  state: E.usr || null,
411
503
  key: E.key || "default"
412
504
  })];
413
505
  }
414
- var s = null;
415
- function h() {
416
- if (s)
417
- m.call(s), s = null;
506
+ var o = null;
507
+ function f() {
508
+ if (o)
509
+ b.call(o), o = null;
418
510
  else {
419
- var y = U.Pop, l = r(), d = l[0], v = l[1];
420
- if (m.length)
421
- if (d != null) {
422
- var E = p - d;
423
- E && (s = {
424
- action: y,
511
+ var p = A.Pop, l = s(), u = l[0], v = l[1];
512
+ if (b.length)
513
+ if (u != null) {
514
+ var E = y - u;
515
+ E && (o = {
516
+ action: p,
425
517
  location: v,
426
518
  retry: function() {
427
- D(E * -1);
519
+ V(E * -1);
428
520
  }
429
- }, D(E));
521
+ }, V(E));
430
522
  } else
431
- process.env.NODE_ENV !== "production" && je(
523
+ process.env.NODE_ENV !== "production" && De(
432
524
  !1,
433
525
  // TODO: Write up a doc that explains our blocking strategy in
434
526
  // detail and link to it here so people can understand better what
@@ -436,137 +528,137 @@ function Vt(a) {
436
528
  "You are trying to block a POP navigation to a location that was not created by the history library. The block will fail silently in production, but in general you should do all navigation with the history library (instead of using window.history.pushState directly) to avoid this situation."
437
529
  );
438
530
  else
439
- re(y);
531
+ re(p);
440
532
  }
441
533
  }
442
- n.addEventListener(dt, h);
443
- var c = U.Pop, u = r(), p = u[0], b = u[1], f = Ve(), m = Ve();
444
- p == null && (p = 0, o.replaceState(de({}, o.state, {
445
- idx: p
534
+ r.addEventListener(dt, f);
535
+ var c = A.Pop, w = s(), y = w[0], m = w[1], d = He(), b = He();
536
+ y == null && (y = 0, i.replaceState(de({}, i.state, {
537
+ idx: y
446
538
  }), ""));
447
- function $(y) {
448
- return typeof y == "string" ? y : Ue(y);
539
+ function $(p) {
540
+ return typeof p == "string" ? p : Ce(p);
449
541
  }
450
- function N(y, l) {
451
- return l === void 0 && (l = null), _e(de({
452
- pathname: b.pathname,
542
+ function j(p, l) {
543
+ return l === void 0 && (l = null), Ve(de({
544
+ pathname: m.pathname,
453
545
  hash: "",
454
546
  search: ""
455
- }, typeof y == "string" ? Ke(y) : y, {
547
+ }, typeof p == "string" ? Qe(p) : p, {
456
548
  state: l,
457
- key: gt()
549
+ key: pt()
458
550
  }));
459
551
  }
460
- function ge(y, l) {
552
+ function pe(p, l) {
461
553
  return [{
462
- usr: y.state,
463
- key: y.key,
554
+ usr: p.state,
555
+ key: p.key,
464
556
  idx: l
465
- }, $(y)];
557
+ }, $(p)];
466
558
  }
467
- function pe(y, l, d) {
468
- return !m.length || (m.call({
469
- action: y,
559
+ function ge(p, l, u) {
560
+ return !b.length || (b.call({
561
+ action: p,
470
562
  location: l,
471
- retry: d
563
+ retry: u
472
564
  }), !1);
473
565
  }
474
- function re(y) {
475
- c = y;
476
- var l = r();
477
- p = l[0], b = l[1], f.call({
566
+ function re(p) {
567
+ c = p;
568
+ var l = s();
569
+ y = l[0], m = l[1], d.call({
478
570
  action: c,
479
- location: b
571
+ location: m
480
572
  });
481
573
  }
482
- function ae(y, l) {
483
- var d = U.Push, v = N(y, l);
574
+ function ne(p, l) {
575
+ var u = A.Push, v = j(p, l);
484
576
  function E() {
485
- ae(y, l);
577
+ ne(p, l);
486
578
  }
487
- if (pe(d, v, E)) {
488
- var M = ge(v, p + 1), x = M[0], A = M[1];
579
+ if (ge(u, v, E)) {
580
+ var L = pe(v, y + 1), O = L[0], T = L[1];
489
581
  try {
490
- o.pushState(x, "", A);
582
+ i.pushState(O, "", T);
491
583
  } catch {
492
- n.location.assign(A);
584
+ r.location.assign(T);
493
585
  }
494
- re(d);
586
+ re(u);
495
587
  }
496
588
  }
497
- function me(y, l) {
498
- var d = U.Replace, v = N(y, l);
589
+ function me(p, l) {
590
+ var u = A.Replace, v = j(p, l);
499
591
  function E() {
500
- me(y, l);
592
+ me(p, l);
501
593
  }
502
- if (pe(d, v, E)) {
503
- var M = ge(v, p), x = M[0], A = M[1];
504
- o.replaceState(x, "", A), re(d);
594
+ if (ge(u, v, E)) {
595
+ var L = pe(v, y), O = L[0], T = L[1];
596
+ i.replaceState(O, "", T), re(u);
505
597
  }
506
598
  }
507
- function D(y) {
508
- o.go(y);
599
+ function V(p) {
600
+ i.go(p);
509
601
  }
510
- var B = {
602
+ var Q = {
511
603
  get action() {
512
604
  return c;
513
605
  },
514
606
  get location() {
515
- return b;
607
+ return m;
516
608
  },
517
609
  createHref: $,
518
- push: ae,
610
+ push: ne,
519
611
  replace: me,
520
- go: D,
612
+ go: V,
521
613
  back: function() {
522
- D(-1);
614
+ V(-1);
523
615
  },
524
616
  forward: function() {
525
- D(1);
617
+ V(1);
526
618
  },
527
619
  listen: function(l) {
528
- return f.push(l);
620
+ return d.push(l);
529
621
  },
530
622
  block: function(l) {
531
- var d = m.push(l);
532
- return m.length === 1 && n.addEventListener(De, He), function() {
533
- d(), m.length || n.removeEventListener(De, He);
623
+ var u = b.push(l);
624
+ return b.length === 1 && r.addEventListener(Ue, _e), function() {
625
+ u(), b.length || r.removeEventListener(Ue, _e);
534
626
  };
535
627
  }
536
628
  };
537
- return B;
629
+ return Q;
538
630
  }
539
- function Ft(a) {
631
+ function Ht(a) {
540
632
  a === void 0 && (a = {});
541
- var e = a, t = e.window, n = t === void 0 ? document.defaultView : t, o = n.history;
542
- function r() {
543
- var l = Ke(n.location.hash.substr(1)), d = l.pathname, v = d === void 0 ? "/" : d, E = l.search, M = E === void 0 ? "" : E, x = l.hash, A = x === void 0 ? "" : x, q = o.state || {};
544
- return [q.idx, _e({
633
+ var e = a, t = e.window, r = t === void 0 ? document.defaultView : t, i = r.history;
634
+ function s() {
635
+ var l = Qe(r.location.hash.substr(1)), u = l.pathname, v = u === void 0 ? "/" : u, E = l.search, L = E === void 0 ? "" : E, O = l.hash, T = O === void 0 ? "" : O, D = i.state || {};
636
+ return [D.idx, Ve({
545
637
  pathname: v,
546
- search: M,
547
- hash: A,
548
- state: q.usr || null,
549
- key: q.key || "default"
638
+ search: L,
639
+ hash: T,
640
+ state: D.usr || null,
641
+ key: D.key || "default"
550
642
  })];
551
643
  }
552
- var s = null;
553
- function h() {
554
- if (s)
555
- m.call(s), s = null;
644
+ var o = null;
645
+ function f() {
646
+ if (o)
647
+ b.call(o), o = null;
556
648
  else {
557
- var l = U.Pop, d = r(), v = d[0], E = d[1];
558
- if (m.length)
649
+ var l = A.Pop, u = s(), v = u[0], E = u[1];
650
+ if (b.length)
559
651
  if (v != null) {
560
- var M = p - v;
561
- M && (s = {
652
+ var L = y - v;
653
+ L && (o = {
562
654
  action: l,
563
655
  location: E,
564
656
  retry: function() {
565
- B(M * -1);
657
+ Q(L * -1);
566
658
  }
567
- }, B(M));
659
+ }, Q(L));
568
660
  } else
569
- process.env.NODE_ENV !== "production" && je(
661
+ process.env.NODE_ENV !== "production" && De(
570
662
  !1,
571
663
  // TODO: Write up a doc that explains our blocking strategy in
572
664
  // detail and link to it here so people can understand better
@@ -574,121 +666,121 @@ function Ft(a) {
574
666
  "You are trying to block a POP navigation to a location that was not created by the history library. The block will fail silently in production, but in general you should do all navigation with the history library (instead of using window.history.pushState directly) to avoid this situation."
575
667
  );
576
668
  else
577
- ae(l);
669
+ ne(l);
578
670
  }
579
671
  }
580
- n.addEventListener(dt, h), n.addEventListener(Ht, function() {
581
- var l = r(), d = l[1];
582
- Ue(d) !== Ue(b) && h();
672
+ r.addEventListener(dt, f), r.addEventListener(Ut, function() {
673
+ var l = s(), u = l[1];
674
+ Ce(u) !== Ce(m) && f();
583
675
  });
584
- var c = U.Pop, u = r(), p = u[0], b = u[1], f = Ve(), m = Ve();
585
- p == null && (p = 0, o.replaceState(de({}, o.state, {
586
- idx: p
676
+ var c = A.Pop, w = s(), y = w[0], m = w[1], d = He(), b = He();
677
+ y == null && (y = 0, i.replaceState(de({}, i.state, {
678
+ idx: y
587
679
  }), ""));
588
680
  function $() {
589
- var l = document.querySelector("base"), d = "";
681
+ var l = document.querySelector("base"), u = "";
590
682
  if (l && l.getAttribute("href")) {
591
- var v = n.location.href, E = v.indexOf("#");
592
- d = E === -1 ? v : v.slice(0, E);
683
+ var v = r.location.href, E = v.indexOf("#");
684
+ u = E === -1 ? v : v.slice(0, E);
593
685
  }
594
- return d;
686
+ return u;
595
687
  }
596
- function N(l) {
597
- return $() + "#" + (typeof l == "string" ? l : Ue(l));
688
+ function j(l) {
689
+ return $() + "#" + (typeof l == "string" ? l : Ce(l));
598
690
  }
599
- function ge(l, d) {
600
- return d === void 0 && (d = null), _e(de({
601
- pathname: b.pathname,
691
+ function pe(l, u) {
692
+ return u === void 0 && (u = null), Ve(de({
693
+ pathname: m.pathname,
602
694
  hash: "",
603
695
  search: ""
604
- }, typeof l == "string" ? Ke(l) : l, {
605
- state: d,
606
- key: gt()
696
+ }, typeof l == "string" ? Qe(l) : l, {
697
+ state: u,
698
+ key: pt()
607
699
  }));
608
700
  }
609
- function pe(l, d) {
701
+ function ge(l, u) {
610
702
  return [{
611
703
  usr: l.state,
612
704
  key: l.key,
613
- idx: d
614
- }, N(l)];
705
+ idx: u
706
+ }, j(l)];
615
707
  }
616
- function re(l, d, v) {
617
- return !m.length || (m.call({
708
+ function re(l, u, v) {
709
+ return !b.length || (b.call({
618
710
  action: l,
619
- location: d,
711
+ location: u,
620
712
  retry: v
621
713
  }), !1);
622
714
  }
623
- function ae(l) {
715
+ function ne(l) {
624
716
  c = l;
625
- var d = r();
626
- p = d[0], b = d[1], f.call({
717
+ var u = s();
718
+ y = u[0], m = u[1], d.call({
627
719
  action: c,
628
- location: b
720
+ location: m
629
721
  });
630
722
  }
631
- function me(l, d) {
632
- var v = U.Push, E = ge(l, d);
633
- function M() {
634
- me(l, d);
723
+ function me(l, u) {
724
+ var v = A.Push, E = pe(l, u);
725
+ function L() {
726
+ me(l, u);
635
727
  }
636
- if (process.env.NODE_ENV !== "production" && je(E.pathname.charAt(0) === "/", "Relative pathnames are not supported in hash history.push(" + JSON.stringify(l) + ")"), re(v, E, M)) {
637
- var x = pe(E, p + 1), A = x[0], q = x[1];
728
+ if (process.env.NODE_ENV !== "production" && De(E.pathname.charAt(0) === "/", "Relative pathnames are not supported in hash history.push(" + JSON.stringify(l) + ")"), re(v, E, L)) {
729
+ var O = ge(E, y + 1), T = O[0], D = O[1];
638
730
  try {
639
- o.pushState(A, "", q);
731
+ i.pushState(T, "", D);
640
732
  } catch {
641
- n.location.assign(q);
733
+ r.location.assign(D);
642
734
  }
643
- ae(v);
735
+ ne(v);
644
736
  }
645
737
  }
646
- function D(l, d) {
647
- var v = U.Replace, E = ge(l, d);
648
- function M() {
649
- D(l, d);
738
+ function V(l, u) {
739
+ var v = A.Replace, E = pe(l, u);
740
+ function L() {
741
+ V(l, u);
650
742
  }
651
- if (process.env.NODE_ENV !== "production" && je(E.pathname.charAt(0) === "/", "Relative pathnames are not supported in hash history.replace(" + JSON.stringify(l) + ")"), re(v, E, M)) {
652
- var x = pe(E, p), A = x[0], q = x[1];
653
- o.replaceState(A, "", q), ae(v);
743
+ if (process.env.NODE_ENV !== "production" && De(E.pathname.charAt(0) === "/", "Relative pathnames are not supported in hash history.replace(" + JSON.stringify(l) + ")"), re(v, E, L)) {
744
+ var O = ge(E, y), T = O[0], D = O[1];
745
+ i.replaceState(T, "", D), ne(v);
654
746
  }
655
747
  }
656
- function B(l) {
657
- o.go(l);
748
+ function Q(l) {
749
+ i.go(l);
658
750
  }
659
- var y = {
751
+ var p = {
660
752
  get action() {
661
753
  return c;
662
754
  },
663
755
  get location() {
664
- return b;
756
+ return m;
665
757
  },
666
- createHref: N,
758
+ createHref: j,
667
759
  push: me,
668
- replace: D,
669
- go: B,
760
+ replace: V,
761
+ go: Q,
670
762
  back: function() {
671
- B(-1);
763
+ Q(-1);
672
764
  },
673
765
  forward: function() {
674
- B(1);
766
+ Q(1);
675
767
  },
676
- listen: function(d) {
677
- return f.push(d);
768
+ listen: function(u) {
769
+ return d.push(u);
678
770
  },
679
- block: function(d) {
680
- var v = m.push(d);
681
- return m.length === 1 && n.addEventListener(De, He), function() {
682
- v(), m.length || n.removeEventListener(De, He);
771
+ block: function(u) {
772
+ var v = b.push(u);
773
+ return b.length === 1 && r.addEventListener(Ue, _e), function() {
774
+ v(), b.length || r.removeEventListener(Ue, _e);
683
775
  };
684
776
  }
685
777
  };
686
- return y;
778
+ return p;
687
779
  }
688
- function He(a) {
780
+ function _e(a) {
689
781
  a.preventDefault(), a.returnValue = "";
690
782
  }
691
- function Ve() {
783
+ function He() {
692
784
  var a = [];
693
785
  return {
694
786
  get length() {
@@ -696,49 +788,49 @@ function Ve() {
696
788
  },
697
789
  push: function(t) {
698
790
  return a.push(t), function() {
699
- a = a.filter(function(n) {
700
- return n !== t;
791
+ a = a.filter(function(r) {
792
+ return r !== t;
701
793
  });
702
794
  };
703
795
  },
704
796
  call: function(t) {
705
- a.forEach(function(n) {
706
- return n && n(t);
797
+ a.forEach(function(r) {
798
+ return r && r(t);
707
799
  });
708
800
  }
709
801
  };
710
802
  }
711
- function gt() {
803
+ function pt() {
712
804
  return Math.random().toString(36).substr(2, 8);
713
805
  }
714
- function Ue(a) {
715
- var e = a.pathname, t = e === void 0 ? "/" : e, n = a.search, o = n === void 0 ? "" : n, r = a.hash, s = r === void 0 ? "" : r;
716
- return o && o !== "?" && (t += o.charAt(0) === "?" ? o : "?" + o), s && s !== "#" && (t += s.charAt(0) === "#" ? s : "#" + s), t;
806
+ function Ce(a) {
807
+ var e = a.pathname, t = e === void 0 ? "/" : e, r = a.search, i = r === void 0 ? "" : r, s = a.hash, o = s === void 0 ? "" : s;
808
+ return i && i !== "?" && (t += i.charAt(0) === "?" ? i : "?" + i), o && o !== "#" && (t += o.charAt(0) === "#" ? o : "#" + o), t;
717
809
  }
718
- function Ke(a) {
810
+ function Qe(a) {
719
811
  var e = {};
720
812
  if (a) {
721
813
  var t = a.indexOf("#");
722
814
  t >= 0 && (e.hash = a.substr(t), a = a.substr(0, t));
723
- var n = a.indexOf("?");
724
- n >= 0 && (e.search = a.substr(n), a = a.substr(0, n)), a && (e.pathname = a);
815
+ var r = a.indexOf("?");
816
+ r >= 0 && (e.search = a.substr(r), a = a.substr(0, r)), a && (e.pathname = a);
725
817
  }
726
818
  return e;
727
819
  }
728
- function ye(a) {
820
+ function we(a) {
729
821
  return lt(a, "Expected `path` to be a string. Got type: %t, value: %v"), a.split("/").map((e) => e.trim()).filter((e) => e !== "");
730
822
  }
731
- function ie(a) {
823
+ function se(a) {
732
824
  var t;
733
- Lt(
734
- (n) => Ze(n == null ? void 0 : n.toString),
825
+ vt(
826
+ (r) => Xe(r == null ? void 0 : r.toString),
735
827
  a,
736
828
  "Expected `parts` to be an array of objects with a .toString() method. Got type: %t, value: %v"
737
- ), a = a.filter((n) => n).flatMap(String);
829
+ ), a = a.filter((r) => r).flatMap(String);
738
830
  let e = (t = a.shift()) == null ? void 0 : t.toString();
739
831
  if (e) {
740
- for (const n of a.map((o) => o.toString()))
741
- n.startsWith(".") ? e = qe(e, n) : e[e.length - 1] !== "/" ? n[0] !== "/" ? e += "/" + n : e += n : n[0] === "/" ? e += n.slice(1) : e += n;
832
+ for (const r of a.map((i) => i.toString()))
833
+ r.startsWith(".") ? e = qe(e, r) : e[e.length - 1] !== "/" ? r[0] !== "/" ? e += "/" + r : e += r : r[0] === "/" ? e += r.slice(1) : e += r;
742
834
  e && e !== "/" && e.endsWith("/") && (e = e.slice(0, e.length - 1));
743
835
  }
744
836
  return e ?? "";
@@ -749,186 +841,196 @@ function qe(a, e) {
749
841
  let t = a;
750
842
  for (; ; )
751
843
  if (e.startsWith("..")) {
752
- for (let n = t.length; n > 0; --n)
753
- if (t[n] === "/" || n === 0) {
754
- t = t.slice(0, n), e = e.replace(/^\.\.\/?/, "");
844
+ for (let r = t.length; r > 0; --r)
845
+ if (t[r] === "/" || r === 0) {
846
+ t = t.slice(0, r), e = e.replace(/^\.\.\/?/, "");
755
847
  break;
756
848
  }
757
849
  } else if (e.startsWith("."))
758
850
  e = e.replace(/^\.\/?/, "");
759
851
  else
760
852
  break;
761
- return ie([t, e]);
853
+ return se([t, e]);
762
854
  }
763
- function Je(a) {
855
+ function Ke(a) {
764
856
  if (!a) return {};
765
857
  a.startsWith("?") && (a = a.slice(1));
766
858
  const e = a.split("&").filter((t) => t.trim() !== "").map((t) => {
767
- const [n, o] = t.split("=").map((r) => r.trim());
768
- return o.toLowerCase() === "true" ? [n, !0] : o.toLowerCase() === "false" ? [n, !1] : isNaN(Number(o)) ? [n, o] : [n, Number(o)];
859
+ const [r, i] = t.split("=").map((s) => s.trim());
860
+ return i.toLowerCase() === "true" ? [r, !0] : i.toLowerCase() === "false" ? [r, !1] : isNaN(Number(i)) ? [r, i] : [r, Number(i)];
769
861
  });
770
862
  return Object.fromEntries(e);
771
863
  }
772
864
  function ot(a, e, t = {}) {
773
- var s;
774
- const [n, o] = e.split("?"), r = ye(n);
775
- e: for (const h of a) {
776
- const { fragments: c } = h;
777
- if (!(((s = c[c.length - 1]) == null ? void 0 : s.type) === 3) && c.length !== r.length || t.willMatch && !t.willMatch(h))
865
+ var o;
866
+ const [r, i] = e.split("?"), s = we(r);
867
+ e: for (const f of a) {
868
+ const { fragments: c } = f;
869
+ if (!(((o = c[c.length - 1]) == null ? void 0 : o.type) === 3) && c.length !== s.length || t.willMatch && !t.willMatch(f))
778
870
  continue e;
779
- const p = [];
780
- t: for (let f = 0; f < c.length; f++) {
781
- const m = r[f], $ = c[f];
782
- if (m == null && $.type !== 3)
871
+ const y = [];
872
+ t: for (let d = 0; d < c.length; d++) {
873
+ const b = s[d], $ = c[d];
874
+ if (b == null && $.type !== 3)
783
875
  continue e;
784
876
  switch ($.type) {
785
877
  case 1:
786
- if ($.name.toLowerCase() === m.toLowerCase()) {
787
- p.push($);
878
+ if ($.name.toLowerCase() === b.toLowerCase()) {
879
+ y.push($);
788
880
  break;
789
881
  } else
790
882
  continue e;
791
883
  case 2:
792
- p.push({ ...$, value: m });
884
+ y.push({ ...$, value: b });
793
885
  break;
794
886
  case 3:
795
- p.push({ ...$, value: r.slice(f).join("/") });
887
+ y.push({ ...$, value: s.slice(d).join("/") });
796
888
  break t;
797
889
  case 4:
798
- if (isNaN(Number(m)))
890
+ if (isNaN(Number(b)))
799
891
  continue e;
800
- p.push({ ...$, value: Number(m) });
892
+ y.push({ ...$, value: Number(b) });
801
893
  break;
802
894
  default:
803
895
  throw new Error(`Unknown fragment type: ${$.type}`);
804
896
  }
805
897
  }
806
- const b = /* @__PURE__ */ Object.create(null);
807
- for (const f of p)
808
- f.type === 2 && (b[f.name] = decodeURIComponent(f.value)), f.type === 4 && (b[f.name] = f.value), f.type === 3 && (b.wildcard = "/" + decodeURIComponent(f.value));
898
+ const m = /* @__PURE__ */ Object.create(null);
899
+ for (const d of y)
900
+ d.type === 2 && (m[d.name] = decodeURIComponent(d.value)), d.type === 4 && (m[d.name] = d.value), d.type === 3 && (m.wildcard = "/" + decodeURIComponent(d.value));
809
901
  return {
810
- path: "/" + p.map((f) => f.value).join("/"),
811
- pattern: "/" + c.map((f) => f.type === 2 ? `{${f.name}}` : f.type === 4 ? `{#${f.name}}` : f.name).join("/"),
812
- params: b,
813
- query: Je(o),
814
- meta: h.meta
902
+ path: "/" + y.map((d) => d.value).join("/"),
903
+ pattern: "/" + c.map((d) => d.type === 2 ? `{${d.name}}` : d.type === 4 ? `{#${d.name}}` : d.name).join("/"),
904
+ params: m,
905
+ query: Ke(i),
906
+ meta: f.meta
815
907
  };
816
908
  }
817
909
  }
818
- function Wt(a) {
819
- const e = [], t = [], n = [], o = [];
820
- for (const s of a) {
821
- const { fragments: h } = s;
822
- h.some(
910
+ function Ft(a) {
911
+ const e = [], t = [], r = [], i = [];
912
+ for (const o of a) {
913
+ const { fragments: f } = o;
914
+ f.some(
823
915
  (c) => c.type === 3
824
916
  /* Wildcard */
825
- ) ? o.push(s) : h.some(
917
+ ) ? i.push(o) : f.some(
826
918
  (c) => c.type === 4
827
919
  /* NumericParam */
828
- ) ? t.push(s) : h.some(
920
+ ) ? t.push(o) : f.some(
829
921
  (c) => c.type === 2
830
922
  /* Param */
831
- ) ? n.push(s) : e.push(s);
923
+ ) ? r.push(o) : e.push(o);
832
924
  }
833
- const r = (s, h) => s.fragments.length > h.fragments.length ? -1 : 1;
834
- return e.sort(r), t.sort(r), n.sort(r), o.sort(r), [...e, ...t, ...n, ...o];
925
+ const s = (o, f) => o.fragments.length > f.fragments.length ? -1 : 1;
926
+ return e.sort(s), t.sort(s), r.sort(s), i.sort(s), [...e, ...t, ...r, ...i];
835
927
  }
836
928
  function It(a) {
837
- const e = ye(a), t = [];
838
- for (let n = 0; n < e.length; n++) {
839
- const o = e[n];
840
- if (o === "*") {
841
- if (n !== e.length - 1)
929
+ const e = we(a), t = [];
930
+ for (let r = 0; r < e.length; r++) {
931
+ const i = e[r];
932
+ if (i === "*") {
933
+ if (r !== e.length - 1)
842
934
  throw new Error(`Wildcard must be at the end of a pattern. Received: ${a}`);
843
935
  t.push({
844
936
  type: 3,
845
937
  name: "*",
846
938
  value: null
847
939
  });
848
- } else o.at(0) === "{" && o.at(-1) === "}" ? t.push({
849
- type: o[1] === "#" ? 4 : 2,
850
- name: o[1] === "#" ? o.slice(2, -1) : o.slice(1, -1),
940
+ } else i.at(0) === "{" && i.at(-1) === "}" ? t.push({
941
+ type: i[1] === "#" ? 4 : 2,
942
+ name: i[1] === "#" ? i.slice(2, -1) : i.slice(1, -1),
851
943
  value: null
852
944
  }) : t.push({
853
945
  type: 1,
854
- name: o,
855
- value: o
946
+ name: i,
947
+ value: i
856
948
  });
857
949
  }
858
950
  return t;
859
951
  }
860
- var pt = /* @__PURE__ */ ((a) => (a.hash = "hash", a.path = "path", a))(pt || {}), Le, j, X, S, Ie, W, ke, Z, ee, ue, he, fe, Se, G, Ye, Xe;
861
- class mt {
952
+ var ke, N, Z, k, We, F, Pe, ee, I, ue, he, fe, Se, B, Je, Ye;
953
+ class Wt {
862
954
  constructor(e, t) {
863
- g(this, G);
864
- g(this, Le);
865
- g(this, j);
866
- g(this, X);
867
- g(this, S, Vt());
868
- g(this, Ie, 0);
869
- g(this, W, []);
870
- g(this, ke);
871
- g(this, Z, []);
872
- g(this, ee);
955
+ h(this, B);
956
+ h(this, ke);
957
+ h(this, N);
958
+ h(this, Z);
959
+ h(this, k);
960
+ h(this, We, 0);
961
+ h(this, F, []);
962
+ h(this, Pe);
963
+ h(this, ee, []);
964
+ // Callbacks that need to be called on unmount.
965
+ h(this, I, []);
873
966
  /**
874
967
  * The currently matched route pattern, if any.
875
968
  */
876
- k(this, "$pattern");
877
- g(this, ue);
969
+ P(this, "$pattern");
970
+ h(this, ue);
878
971
  /**
879
972
  * The current URL path.
880
973
  */
881
- k(this, "$path");
882
- g(this, he);
974
+ P(this, "$path");
975
+ h(this, he);
883
976
  /**
884
977
  * The current named path params.
885
978
  */
886
- k(this, "$params");
887
- g(this, fe);
979
+ P(this, "$params");
980
+ h(this, fe);
888
981
  /**
889
982
  * The current query params. Changes to this object will be reflected in the URL.
890
983
  */
891
- k(this, "$query");
892
- g(this, Se);
893
- w(this, Le, e), w(this, j, e.createLogger("dolla/router")), w(this, X, t);
894
- const [n, o] = Q(null), [r, s] = Q(""), [h, c] = Q({}), [u, p] = Q(Je(window.location.search));
895
- this.$pattern = n, w(this, ue, o), this.$path = r, w(this, he, s), this.$params = h, w(this, fe, c), this.$query = u, w(this, Se, p), e.beforeMount(() => {
896
- w(this, ee, ut([u], (f) => {
897
- const m = new URLSearchParams();
898
- for (const N in f)
899
- m.set(N, String(f[N]));
900
- const $ = "?" + m.toString();
901
- $ != i(this, S).location.search && i(this, S).replace({
902
- pathname: i(this, S).location.pathname,
903
- search: $
904
- });
905
- }));
906
- const b = (f) => {
907
- P(this, G, Xe).call(this, f);
908
- };
909
- i(this, S).listen(b), P(this, G, Xe).call(this, i(this, S)), i(this, j).info("Intercepting <a> clicks within root element:", i(this, X).rootElement), yt(i(this, X).rootElement, (f) => {
910
- let m = f.getAttribute("href");
911
- i(this, j).info("Intercepted link click", f, m), /^https?:\/\/|^\//.test(m) || (m = ie([i(this, S).location.pathname, m])), i(this, S).push(m);
912
- });
984
+ P(this, "$query");
985
+ h(this, Se);
986
+ g(this, ke, e), g(this, N, e.createLogger("dolla/router")), g(this, Z, t);
987
+ const [r, i] = K(null), [s, o] = K(""), [f, c] = K({}), [w, y] = K(
988
+ Ke(typeof window > "u" ? "" : window.location.search ?? "")
989
+ );
990
+ this.$pattern = r, g(this, ue, i), this.$path = s, g(this, he, o), this.$params = f, g(this, fe, c), this.$query = w, g(this, Se, y), e.beforeMount(() => {
991
+ n(this, k) != null && (n(this, I).push(
992
+ ut([w], (m) => {
993
+ const d = new URLSearchParams();
994
+ for (const $ in m)
995
+ d.set($, String(m[$]));
996
+ const b = "?" + d.toString();
997
+ b != n(this, k).location.search && n(this, k).replace({
998
+ pathname: n(this, k).location.pathname,
999
+ search: b
1000
+ });
1001
+ })
1002
+ ), n(this, I).push(n(this, k).listen(S(this, B, Ye).bind(this))), S(this, B, Ye).call(this, n(this, k)), n(this, I).push(
1003
+ Bt(n(this, Z).rootElement, (m) => {
1004
+ let d = m.getAttribute("href");
1005
+ n(this, N).info("Intercepted link click", m, d), /^https?:\/\/|^\//.test(d) || (d = se([n(this, k).location.pathname, d])), n(this, k).push(d);
1006
+ })
1007
+ ), n(this, N).info("Intercepting <a> clicks within root element:", n(this, Z).rootElement));
913
1008
  }), e.onUnmount(() => {
914
- i(this, ee) && (i(this, ee).call(this), w(this, ee, void 0));
1009
+ for (; n(this, I).length > 0; )
1010
+ n(this, I).pop()();
915
1011
  });
916
1012
  }
917
1013
  setup(e) {
918
- e.style === "hash" && w(this, S, Ft()), w(this, Z, Wt(
919
- e.routes.flatMap((t) => P(this, G, Ye).call(this, t)).map((t) => ({
1014
+ if (n(this, ke).isMounted) {
1015
+ n(this, N).crash(
1016
+ new Error("Dolla is already mounted. Router setup must be called before Dolla.mount is called.")
1017
+ );
1018
+ return;
1019
+ }
1020
+ e.style === "hash" ? g(this, k, Ht()) : g(this, k, _t()), g(this, ee, Ft(
1021
+ e.routes.flatMap((t) => S(this, B, Je).call(this, t)).map((t) => ({
920
1022
  pattern: t.pattern,
921
1023
  meta: t.meta,
922
1024
  fragments: It(t.pattern)
923
1025
  }))
924
1026
  ));
925
- for (const t of i(this, Z))
1027
+ for (const t of n(this, ee))
926
1028
  if (t.meta.redirect) {
927
- let n;
928
- if (!Ze(t.meta.redirect)) if (H(t.meta.redirect)) {
929
- if (n = t.meta.redirect, !ot(i(this, Z), n, {
930
- willMatch(r) {
931
- return r !== t;
1029
+ let r;
1030
+ if (!Xe(t.meta.redirect)) if (U(t.meta.redirect)) {
1031
+ if (r = t.meta.redirect, !ot(n(this, ee), r, {
1032
+ willMatch(s) {
1033
+ return s !== t;
932
1034
  }
933
1035
  }))
934
1036
  throw new Error(
@@ -942,33 +1044,57 @@ class mt {
942
1044
  * Navigates to another route.
943
1045
  *
944
1046
  * @example
945
- * navigate("/login"); // navigate to `/login`
946
- * navigate(["/users", 215], { replace: true }); // replace current history entry with `/users/215`
1047
+ * Dolla.router.go("/login"); // navigate to `/login`
1048
+ * Dolla.router.go["/users", 215], { replace: true }); // replace current history entry with `/users/215`
947
1049
  */
948
1050
  go(e, t = {}) {
949
- let n;
950
- Array.isArray(e) ? n = ie(e) : n = e.toString(), n = qe(i(this, S).location.pathname, n), t.preserveQuery && (n += i(this, S).location.search), t.replace ? i(this, S).replace(n) : i(this, S).push(n);
1051
+ if (n(this, k) == null) {
1052
+ n(this, N).crash(
1053
+ new Error(
1054
+ "Router.go was called, but the router was never configured! Run 'Dolla.router.setup' before 'Dolla.mount' to configure routes."
1055
+ )
1056
+ );
1057
+ return;
1058
+ }
1059
+ let r;
1060
+ Array.isArray(e) ? r = se(e) : r = e.toString(), r = qe(n(this, k).location.pathname, r), t.preserveQuery && (r += n(this, k).location.search), t.replace ? n(this, k).replace(r) : n(this, k).push(r);
951
1061
  }
952
1062
  /**
953
1063
  * Navigate backward. Pass a number of steps to hit the back button that many times.
954
1064
  */
955
1065
  back(e = 1) {
956
- i(this, S).go(-e);
1066
+ if (n(this, k) == null) {
1067
+ n(this, N).crash(
1068
+ new Error(
1069
+ "Router.back was called, but the router was never configured! Run 'Dolla.router.setup' before 'Dolla.mount' to configure routes."
1070
+ )
1071
+ );
1072
+ return;
1073
+ }
1074
+ n(this, k).go(-e);
957
1075
  }
958
1076
  /**
959
1077
  * Navigate forward. Pass a number of steps to hit the forward button that many times.
960
1078
  */
961
1079
  forward(e = 1) {
962
- i(this, S).go(e);
1080
+ if (n(this, k) == null) {
1081
+ n(this, N).crash(
1082
+ new Error(
1083
+ "Router.forward was called, but the router was never configured! Run 'Dolla.router.setup' before 'Dolla.mount' to configure routes."
1084
+ )
1085
+ );
1086
+ return;
1087
+ }
1088
+ n(this, k).go(e);
963
1089
  }
964
1090
  }
965
- Le = new WeakMap(), j = new WeakMap(), X = new WeakMap(), S = new WeakMap(), Ie = new WeakMap(), W = new WeakMap(), ke = new WeakMap(), Z = new WeakMap(), ee = new WeakMap(), ue = new WeakMap(), he = new WeakMap(), fe = new WeakMap(), Se = new WeakMap(), G = new WeakSet(), /**
1091
+ ke = new WeakMap(), N = new WeakMap(), Z = new WeakMap(), k = new WeakMap(), We = new WeakMap(), F = new WeakMap(), Pe = new WeakMap(), ee = new WeakMap(), I = new WeakMap(), ue = new WeakMap(), he = new WeakMap(), fe = new WeakMap(), Se = new WeakMap(), B = new WeakSet(), /**
966
1092
  * Parses a route definition object into a set of matchable routes.
967
1093
  *
968
1094
  * @param route - Route config object.
969
1095
  * @param layers - Array of parent layers. Passed when this function calls itself on nested routes.
970
1096
  */
971
- Ye = function(e, t = [], n = []) {
1097
+ Je = function(e, t = [], r = []) {
972
1098
  if (!(typeof e == "object" && !Array.isArray(e)) || typeof e.path != "string")
973
1099
  throw new TypeError(`Route configs must be objects with a 'path' string property. Got: ${e}`);
974
1100
  if (e.redirect && e.routes)
@@ -977,180 +1103,194 @@ Ye = function(e, t = [], n = []) {
977
1103
  throw new Error("Route cannot have both a 'redirect' and a 'view'.");
978
1104
  if (!e.view && !e.routes && !e.redirect)
979
1105
  throw new Error("Route must have a 'view', a 'redirect', or a set of nested 'routes'.");
980
- let o = [];
981
- for (const u of t)
982
- o.push(...ye(u.path));
983
- o.push(...ye(e.path)), o[o.length - 1] === "*" && o.pop();
984
- const r = [];
1106
+ let i = [];
1107
+ for (const c of t)
1108
+ i.push(...we(c.path));
1109
+ i.push(...we(e.path)), i[i.length - 1] === "*" && i.pop();
1110
+ const s = [];
985
1111
  if (e.redirect) {
986
- let u = e.redirect;
987
- return H(u) && (u = qe(ie(o), u), u.startsWith("/") || (u = "/" + u)), r.push({
988
- pattern: "/" + ie([...o, ...ye(e.path)]),
1112
+ let c = e.redirect;
1113
+ return U(c) && (c = qe(se(i), c), c.startsWith("/") || (c = "/" + c)), s.push({
1114
+ pattern: "/" + se([...i, ...we(e.path)]),
989
1115
  meta: {
990
- redirect: u
1116
+ redirect: c
991
1117
  }
992
- }), r;
1118
+ }), s;
993
1119
  }
994
- let s = ht;
1120
+ let o = ht;
995
1121
  if (typeof e.view == "function")
996
- s = e.view;
1122
+ o = e.view;
997
1123
  else if (e.view)
998
1124
  throw new TypeError(`Route '${e.path}' expected a view function or undefined. Got: ${e.view}`);
999
- const h = Ce(s), c = { id: tt(this, Ie)._++, markup: h };
1125
+ const f = { id: et(this, We)._++, view: o };
1000
1126
  if (e.routes)
1001
- for (const u of e.routes)
1002
- r.push(...P(this, G, Ye).call(this, u, [...t, e], [...n, c]));
1127
+ for (const c of e.routes)
1128
+ s.push(...S(this, B, Je).call(this, c, [...t, e], [...r, f]));
1003
1129
  else
1004
- r.push({
1005
- pattern: parent ? ie([...t.map((u) => u.path), e.path]) : e.path,
1130
+ s.push({
1131
+ pattern: parent ? se([...t.map((c) => c.path), e.path]) : e.path,
1006
1132
  meta: {
1007
1133
  pattern: e.path,
1008
- layers: [...n, c],
1134
+ layers: [...r, f],
1009
1135
  beforeMatch: e.beforeMatch
1010
1136
  }
1011
1137
  });
1012
- return r;
1013
- }, Xe = async function({ location: e }) {
1014
- e.search !== i(this, ke) && (w(this, ke, e.search), i(this, Se).call(this, Je(e.search)));
1015
- const t = ot(i(this, Z), e.pathname);
1138
+ return s;
1139
+ }, Ye = async function({ location: e }) {
1140
+ e.search !== n(this, Pe) && (g(this, Pe, e.search), n(this, Se).call(this, Ke(e.search)));
1141
+ const t = ot(n(this, ee), e.pathname);
1016
1142
  if (!t) {
1017
- i(this, ue).call(this, null), i(this, he).call(this, e.pathname), i(this, fe).call(this, {
1143
+ n(this, ue).call(this, null), n(this, he).call(this, e.pathname), n(this, fe).call(this, {
1018
1144
  wildcard: e.pathname
1019
1145
  });
1020
1146
  return;
1021
1147
  }
1022
1148
  if (t.meta.beforeMatch && await t.meta.beforeMatch({
1023
- redirect: (n) => {
1149
+ // TODO: Allow setting context variables from here.
1150
+ redirect: (r) => {
1024
1151
  throw new Error("Redirect not yet implemented.");
1025
1152
  }
1026
- }), i(this, j).info(`Matched route: '${t.pattern}' ('${t.path}')`), t.meta.redirect != null)
1153
+ }), t.meta.redirect != null)
1027
1154
  if (typeof t.meta.redirect == "string") {
1028
- const n = Bt(t.meta.redirect, t.params);
1029
- i(this, j).info(`Redirecting to: '${n}'`), i(this, S).replace(n);
1155
+ const r = Qt(t.meta.redirect, t.params);
1156
+ n(this, N).info(`↩️ redirecting from '${t.path}' to '${r}'`), n(this, k).replace(r);
1030
1157
  } else if (typeof t.meta.redirect == "function") {
1031
- const n = {
1158
+ const r = {
1032
1159
  path: t.path,
1033
1160
  pattern: t.pattern,
1034
1161
  params: t.params,
1035
1162
  query: t.query
1036
1163
  };
1037
- let o = await t.meta.redirect(n);
1038
- if (typeof o != "string")
1164
+ let i = await t.meta.redirect(r);
1165
+ if (typeof i != "string")
1039
1166
  throw new Error("Redirect function must return a path to redirect to.");
1040
- o.startsWith("/") || (o = qe(t.path, o)), i(this, j).info(`Redirecting to: '${o}'`), i(this, S).replace(o);
1167
+ i.startsWith("/") || (i = qe(t.path, i)), n(this, N).info(`Redirecting to: '${i}'`), n(this, k).replace(i);
1041
1168
  } else
1042
1169
  throw new TypeError("Redirect must either be a path string or a function.");
1043
- else if (i(this, he).call(this, t.path), i(this, fe).call(this, t.params), t.pattern !== this.$pattern.get()) {
1044
- i(this, ue).call(this, t.pattern);
1045
- const n = t.meta.layers;
1046
- for (let o = 0; o < n.length; o++) {
1047
- const r = n[o], s = i(this, W)[o];
1048
- if ((s == null ? void 0 : s.id) !== r.id) {
1049
- i(this, j).info(`Replacing layer @${o} (active ID: ${s == null ? void 0 : s.id}, matched ID: ${r.id})`), w(this, W, i(this, W).slice(0, o));
1050
- const h = i(this, W).at(-1), c = {
1051
- root: i(this, Le)
1052
- }, u = kt(r.markup, c), p = St(u);
1053
- s && s.handle.connected && s.handle.disconnect(), h ? h.handle.setChildren(u) : i(this, X).rootView.setChildren(u), i(this, W).push({ id: r.id, handle: p });
1170
+ else if (n(this, N).info(`📍 navigating to '${t.path}'`), n(this, he).call(this, t.path), n(this, fe).call(this, t.params), t.pattern !== this.$pattern.get()) {
1171
+ n(this, ue).call(this, t.pattern);
1172
+ const r = t.meta.layers;
1173
+ for (let i = 0; i < r.length; i++) {
1174
+ const s = r[i], o = n(this, F)[i];
1175
+ if ((o == null ? void 0 : o.id) !== s.id) {
1176
+ g(this, F, n(this, F).slice(0, i));
1177
+ const f = n(this, F).at(-1);
1178
+ o && o.node.isMounted && o.node.unmount();
1179
+ let c;
1180
+ f ? c = f.node.setChildView(s.view) : c = n(this, Z).rootView.setChildView(s.view), n(this, F).push({ id: s.id, node: c });
1054
1181
  }
1055
1182
  }
1056
1183
  }
1057
1184
  };
1058
1185
  const zt = /(noopener|noreferrer) (noopener|noreferrer)/, Gt = /^[\w-_]+:/;
1059
- function yt(a, e, t = window) {
1060
- function n(r) {
1061
- return !r || r === a ? null : r.localName !== "a" || r.href === void 0 ? n(r.parentNode) : r;
1186
+ function Bt(a, e, t = window) {
1187
+ function r(s) {
1188
+ return !s || s === a ? null : s.localName !== "a" || s.href === void 0 ? r(s.parentNode) : s;
1062
1189
  }
1063
- function o(r) {
1064
- if (r.button && r.button !== 0 || r.ctrlKey || r.metaKey || r.altKey || r.shiftKey || r.defaultPrevented)
1190
+ function i(s) {
1191
+ if (s.button && s.button !== 0 || s.ctrlKey || s.metaKey || s.altKey || s.shiftKey || s.defaultPrevented)
1065
1192
  return;
1066
- const s = n(r.target);
1067
- s && (t.location.protocol !== s.protocol || t.location.hostname !== s.hostname || t.location.port !== s.port || s.hasAttribute("data-router-ignore") || s.hasAttribute("download") || s.getAttribute("target") === "_blank" && zt.test(s.getAttribute("rel")) || Gt.test(s.getAttribute("href")) || (r.preventDefault(), e(s)));
1193
+ const o = r(s.target);
1194
+ o && (t.location.protocol !== o.protocol || t.location.hostname !== o.hostname || t.location.port !== o.port || o.hasAttribute("data-router-ignore") || o.hasAttribute("download") || o.getAttribute("target") === "_blank" && zt.test(o.getAttribute("rel")) || Gt.test(o.getAttribute("href")) || (s.preventDefault(), e(o)));
1068
1195
  }
1069
- return a.addEventListener("click", o), function() {
1070
- a.removeEventListener("click", o);
1196
+ return a.addEventListener("click", i), function() {
1197
+ a.removeEventListener("click", i);
1071
1198
  };
1072
1199
  }
1073
- function Bt(a, e) {
1200
+ function Qt(a, e) {
1074
1201
  for (const t in e) {
1075
- const n = e[t].toString();
1076
- a = a.replace(`{${t}}`, n).replace(`{#${t}}`, n);
1202
+ const r = e[t].toString();
1203
+ a = a.replace(`{${t}}`, r).replace(`{#${t}}`, r);
1077
1204
  }
1078
1205
  return a;
1079
1206
  }
1080
- const Zt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1081
- __proto__: null,
1082
- Router: mt,
1083
- RoutingStyle: pt,
1084
- catchLinks: yt
1085
- }, Symbol.toStringTag, { value: "Module" }));
1086
- var I, Pe, te, ne, Me, Re, Oe, xe, R, z;
1087
- class Qt {
1207
+ var W, Le, z, te, Re, xe, Oe, Ne, Me, R, G;
1208
+ class Kt {
1088
1209
  constructor() {
1089
- g(this, I, !1);
1090
- g(this, Pe, "production");
1091
- g(this, te);
1092
- g(this, ne);
1093
- k(this, "http");
1094
- k(this, "language");
1095
- k(this, "render");
1096
- k(this, "router");
1097
- g(this, Me, []);
1098
- g(this, Re, []);
1099
- g(this, Oe, []);
1100
- g(this, xe, []);
1101
- g(this, R, {
1210
+ P(this, "http");
1211
+ P(this, "i18n");
1212
+ P(this, "render");
1213
+ P(this, "router");
1214
+ h(this, W, !1);
1215
+ h(this, Le, "production");
1216
+ h(this, z);
1217
+ h(this, te);
1218
+ h(this, Re, Nt);
1219
+ h(this, xe, []);
1220
+ h(this, Oe, []);
1221
+ h(this, Ne, []);
1222
+ h(this, Me, []);
1223
+ h(this, R, {
1102
1224
  info: "development",
1103
1225
  log: "development",
1104
1226
  warn: "development",
1105
1227
  error: !0
1106
1228
  });
1107
- g(this, z, nt("*,-dolla/*"));
1108
- k(this, "createSignal", Q);
1109
- k(this, "createSettableSignal", Pt);
1110
- k(this, "toSettableSignal", Mt);
1111
- k(this, "signalify", Be);
1112
- k(this, "designalify", Rt);
1113
- k(this, "derive", Qe);
1114
- k(this, "watch", ut);
1115
- k(this, "createRef", Ot);
1116
- k(this, "isRef", xt);
1229
+ h(this, G, rt("*,-dolla/*"));
1230
+ P(this, "createState", K);
1231
+ P(this, "createSettableState", $t);
1232
+ P(this, "toSettableState", Et);
1233
+ P(this, "toState", Be);
1234
+ P(this, "valueOf", kt);
1235
+ P(this, "derive", ae);
1236
+ P(this, "watch", ut);
1237
+ P(this, "createRef", Pt);
1238
+ P(this, "isRef", St);
1117
1239
  const e = this;
1118
- this.http = new Tt(), this.language = new Ct(this), this.render = new Dt(this), this.router = new mt(this, {
1240
+ this.http = new Mt(), this.i18n = new Ct(this), this.render = new Vt(this), this.router = new Wt(this, {
1119
1241
  get rootElement() {
1120
- return i(e, te);
1242
+ return n(e, z);
1121
1243
  },
1122
1244
  get rootView() {
1123
- return i(e, ne);
1245
+ return n(e, te);
1124
1246
  }
1125
1247
  });
1126
1248
  }
1249
+ /**
1250
+ * True when the app is connected to a DOM node and displayed to the user.
1251
+ */
1127
1252
  get isMounted() {
1128
- return i(this, I);
1253
+ return n(this, W);
1129
1254
  }
1130
- get env() {
1131
- return i(this, Pe);
1255
+ /**
1256
+ * Get the current environment that this app is running in.
1257
+ * Environment affects which log messages will print and how much debugging info is included in the DOM.
1258
+ */
1259
+ getEnv() {
1260
+ return n(this, Le);
1132
1261
  }
1133
- set env(e) {
1134
- w(this, Pe, e);
1262
+ /**
1263
+ * Sets the environment that this app is running in.
1264
+ * Environment affects which log messages will print and how much debugging info is included in the DOM.
1265
+ */
1266
+ setEnv(e) {
1267
+ g(this, Le, e);
1268
+ }
1269
+ /**
1270
+ * Sets the view that will be shown when the `crash` method is called on any logger.
1271
+ * When a crash is reported the app will be unmounted and replaced with this crash page.
1272
+ */
1273
+ setCrashView(e) {
1274
+ g(this, Re, e);
1135
1275
  }
1136
1276
  async mount(e, t) {
1137
- if (i(this, I))
1277
+ if (n(this, W))
1138
1278
  throw new Error("Dolla is already mounted.");
1139
- if (H(e)) {
1140
- const o = document.querySelector(e);
1141
- rt(HTMLElement, o, `Selector '${e}' did not match any element.`), w(this, te, o);
1279
+ if (U(e)) {
1280
+ const i = document.querySelector(e);
1281
+ nt(HTMLElement, i, `Selector '${e}' did not match any element.`), g(this, z, i);
1142
1282
  } else
1143
- rt(HTMLElement, e, "Expected an HTML element or a selector string. Got type: %t, value: %v"), w(this, te, e);
1144
- let n;
1145
- t ? n = Ce(t) : n = Ce(ht), w(this, ne, at({ root: this }, n.type, n.props)), await Promise.all(i(this, Me).map((o) => o())), i(this, ne).connect(i(this, te)), w(this, I, !0);
1146
- for (const o of i(this, Re))
1147
- o();
1283
+ nt(HTMLElement, e, "Expected an HTML element or a selector string. Got type: %t, value: %v"), g(this, z, e);
1284
+ let r;
1285
+ t ? r = at(t) : r = at(ht), g(this, te, this.constructView(r.type, r.props)), await Promise.all(n(this, xe).map((i) => i())), n(this, te).mount(n(this, z)), g(this, W, !0);
1286
+ for (const i of n(this, Oe))
1287
+ i();
1148
1288
  }
1149
1289
  async unmount() {
1150
1290
  var e;
1151
- if (i(this, I)) {
1152
- await Promise.all(i(this, Oe).map((t) => t())), (e = i(this, ne)) == null || e.disconnect(), w(this, I, !1);
1153
- for (const t of i(this, xe))
1291
+ if (n(this, W)) {
1292
+ await Promise.all(n(this, Ne).map((t) => t())), (e = n(this, te)) == null || e.unmount(), g(this, W, !1);
1293
+ for (const t of n(this, Me))
1154
1294
  t();
1155
1295
  }
1156
1296
  }
@@ -1159,53 +1299,53 @@ class Qt {
1159
1299
  * it will be awaited before mounting finishes. Use this to perform initial setup before the app is displayed to the user.
1160
1300
  */
1161
1301
  beforeMount(e) {
1162
- i(this, Me).push(e);
1302
+ n(this, xe).push(e);
1163
1303
  }
1164
1304
  /**
1165
1305
  * Registers a `callback` to run after the app is mounted.
1166
1306
  */
1167
1307
  onMount(e) {
1168
- i(this, Re).push(e);
1308
+ n(this, Oe).push(e);
1169
1309
  }
1170
1310
  /**
1171
1311
  * Registers a `callback` to run after `Dolla.unmount` is called, before the app is unmounted. If `callback` returns a Promise,
1172
1312
  * it will be awaited before unmounting finishes. Use this to perform cleanup.
1173
1313
  */
1174
1314
  beforeUnmount(e) {
1175
- i(this, Oe).push(e);
1315
+ n(this, Ne).push(e);
1176
1316
  }
1177
1317
  /**
1178
1318
  * Registers a `callback` to run after the app is unmounted.
1179
1319
  */
1180
1320
  onUnmount(e) {
1181
- i(this, xe).push(e);
1321
+ n(this, Me).push(e);
1182
1322
  }
1183
1323
  /**
1184
1324
  * Update log type toggles. Values that are not passed will remain unchanged.
1185
1325
  */
1186
1326
  setLoggles(e) {
1187
1327
  for (const t in e) {
1188
- const n = e[t];
1189
- n && (i(this, R)[t] = n);
1328
+ const r = e[t];
1329
+ r && (n(this, R)[t] = r);
1190
1330
  }
1191
1331
  }
1192
1332
  setLogFilter(e) {
1193
- w(this, z, nt(e));
1333
+ g(this, G, rt(e));
1194
1334
  }
1195
1335
  createLogger(e, t) {
1196
- const n = Be(e), o = (t == null ? void 0 : t.console) ?? Nt(), r = this;
1336
+ const r = Be(e), i = (t == null ? void 0 : t.console) ?? Lt(), s = this;
1197
1337
  return {
1198
1338
  get info() {
1199
- var h;
1200
- const s = n.get();
1201
- if (i(r, R).info === !1 || H(i(r, R).info) && i(r, R).info !== r.env || !i(h = r, z).call(h, s))
1202
- return Ne;
1339
+ var f;
1340
+ const o = r.get();
1341
+ if (n(s, R).info === !1 || U(n(s, R).info) && n(s, R).info !== s.getEnv() || !n(f = s, G).call(f, o))
1342
+ return Te;
1203
1343
  {
1204
- let c = `%c${s}`;
1205
- return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", o.info.bind(
1206
- o,
1344
+ let c = `%c${o}`;
1345
+ return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", i.info.bind(
1346
+ i,
1207
1347
  c,
1208
- `color:${Te(c)};font-weight:bold`,
1348
+ `color:${Ae(c)};font-weight:bold`,
1209
1349
  "color:#777",
1210
1350
  "color:#aaa",
1211
1351
  "color:#777"
@@ -1213,16 +1353,16 @@ class Qt {
1213
1353
  }
1214
1354
  },
1215
1355
  get log() {
1216
- var h;
1217
- const s = n.get();
1218
- if (i(r, R).log === !1 || H(i(r, R).log) && i(r, R).log !== r.env || !i(h = r, z).call(h, s))
1219
- return Ne;
1356
+ var f;
1357
+ const o = r.get();
1358
+ if (n(s, R).log === !1 || U(n(s, R).log) && n(s, R).log !== s.getEnv() || !n(f = s, G).call(f, o))
1359
+ return Te;
1220
1360
  {
1221
- let c = `%c${s}`;
1222
- return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", o.log.bind(
1223
- o,
1361
+ let c = `%c${o}`;
1362
+ return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", i.log.bind(
1363
+ i,
1224
1364
  c,
1225
- `color:${Te(c)};font-weight:bold`,
1365
+ `color:${Ae(c)};font-weight:bold`,
1226
1366
  "color:#777",
1227
1367
  "color:#aaa",
1228
1368
  "color:#777"
@@ -1230,16 +1370,16 @@ class Qt {
1230
1370
  }
1231
1371
  },
1232
1372
  get warn() {
1233
- var h;
1234
- const s = n.get();
1235
- if (i(r, R).warn === !1 || H(i(r, R).warn) && i(r, R).warn !== r.env || !i(h = r, z).call(h, s))
1236
- return Ne;
1373
+ var f;
1374
+ const o = r.get();
1375
+ if (n(s, R).warn === !1 || U(n(s, R).warn) && n(s, R).warn !== s.getEnv() || !n(f = s, G).call(f, o))
1376
+ return Te;
1237
1377
  {
1238
- let c = `%c${s}`;
1239
- return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", o.warn.bind(
1240
- o,
1378
+ let c = `%c${o}`;
1379
+ return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", i.warn.bind(
1380
+ i,
1241
1381
  c,
1242
- `color:${Te(c)};font-weight:bold`,
1382
+ `color:${Ae(c)};font-weight:bold`,
1243
1383
  "color:#777",
1244
1384
  "color:#aaa",
1245
1385
  "color:#777"
@@ -1247,85 +1387,62 @@ class Qt {
1247
1387
  }
1248
1388
  },
1249
1389
  get error() {
1250
- var h;
1251
- const s = n.get();
1252
- if (i(r, R).error === !1 || H(i(r, R).error) && i(r, R).error !== r.env || !i(h = r, z).call(h, s))
1253
- return Ne;
1390
+ var f;
1391
+ const o = r.get();
1392
+ if (n(s, R).error === !1 || U(n(s, R).error) && n(s, R).error !== s.getEnv() || !n(f = s, G).call(f, o))
1393
+ return Te;
1254
1394
  {
1255
- let c = `%c${s}`;
1256
- return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", o.error.bind(
1257
- o,
1395
+ let c = `%c${o}`;
1396
+ return t != null && t.uid ? c += ` %c[uid: %c${t.uid}%c]` : c += "%c%c%c", i.error.bind(
1397
+ i,
1258
1398
  c,
1259
- `color:${Te(c)};font-weight:bold`,
1399
+ `color:${Ae(c)};font-weight:bold`,
1260
1400
  "color:#777",
1261
1401
  "color:#aaa",
1262
1402
  "color:#777"
1263
1403
  );
1264
1404
  }
1265
1405
  },
1266
- crash(s) {
1406
+ crash(o) {
1407
+ throw s.isMounted && (s.unmount(), s.constructView(n(s, Re), {
1408
+ error: o,
1409
+ loggerName: r.get(),
1410
+ uid: t == null ? void 0 : t.uid
1411
+ }).mount(n(s, z))), o;
1267
1412
  }
1268
1413
  };
1269
1414
  }
1270
- constructView(e, t, n = []) {
1271
- return at({ root: this }, e, t, n);
1415
+ /**
1416
+ *
1417
+ */
1418
+ constructView(e, t, r = []) {
1419
+ return Rt({ root: this, data: {} }, e, t, r);
1420
+ }
1421
+ /**
1422
+ *
1423
+ */
1424
+ constructMarkup(e) {
1425
+ return xt(Ot({ root: this, data: {} }, e));
1272
1426
  }
1273
1427
  }
1274
- I = new WeakMap(), Pe = new WeakMap(), te = new WeakMap(), ne = new WeakMap(), Me = new WeakMap(), Re = new WeakMap(), Oe = new WeakMap(), xe = new WeakMap(), R = new WeakMap(), z = new WeakMap();
1275
- var wt = function(a, e, t, n) {
1276
- var o;
1277
- e[0] = 0;
1278
- for (var r = 1; r < e.length; r++) {
1279
- var s = e[r++], h = e[r] ? (e[0] |= s ? 1 : 2, t[e[r++]]) : e[++r];
1280
- s === 3 ? n[0] = h : s === 4 ? n[1] = Object.assign(n[1] || {}, h) : s === 5 ? (n[1] = n[1] || {})[e[++r]] = h : s === 6 ? n[1][e[++r]] += h + "" : s ? (o = a.apply(h, wt(a, h, t, ["", null])), n.push(o), h[0] ? e[0] |= 2 : (e[r - 2] = 0, e[r] = o)) : n.push(h);
1281
- }
1282
- return n;
1283
- }, ct = /* @__PURE__ */ new Map();
1284
- function Kt(a) {
1285
- var e = ct.get(this);
1286
- return e || (e = /* @__PURE__ */ new Map(), ct.set(this, e)), (e = wt(this, e.get(a) || (e.set(a, e = function(t) {
1287
- for (var n, o, r = 1, s = "", h = "", c = [0], u = function(f) {
1288
- r === 1 && (f || (s = s.replace(/^\s*\n\s*|\s*\n\s*$/g, ""))) ? c.push(0, f, s) : r === 3 && (f || s) ? (c.push(3, f, s), r = 2) : r === 2 && s === "..." && f ? c.push(4, f, 0) : r === 2 && s && !f ? c.push(5, 0, !0, s) : r >= 5 && ((s || !f && r === 5) && (c.push(r, 0, s, o), r = 6), f && (c.push(r, f, 0, o), r = 6)), s = "";
1289
- }, p = 0; p < t.length; p++) {
1290
- p && (r === 1 && u(), u(p));
1291
- for (var b = 0; b < t[p].length; b++) n = t[p][b], r === 1 ? n === "<" ? (u(), c = [c], r = 3) : s += n : r === 4 ? s === "--" && n === ">" ? (r = 1, s = "") : s = n + s[0] : h ? n === h ? h = "" : s += n : n === '"' || n === "'" ? h = n : n === ">" ? (u(), r = 1) : r && (n === "=" ? (r = 5, o = s, s = "") : n === "/" && (r < 5 || t[p][b + 1] === ">") ? (u(), r === 3 && (c = c[0]), r = c, (c = c[0]).push(2, 0, r), r = 0) : n === " " || n === " " || n === `
1292
- ` || n === "\r" ? (u(), r = 2) : s += n), r === 3 && s === "!--" && (r = 4, c = c[0]);
1293
- }
1294
- return u(), c;
1295
- }(a)), e), arguments, [])).length > 1 ? e : e[0];
1296
- }
1297
- const L = new Qt(), en = L.beforeMount.bind(L), tn = L.onMount.bind(L), nn = L.beforeUnmount.bind(L), rn = L.onUnmount.bind(L), an = L.mount.bind(L), sn = L.unmount.bind(L), on = L.http, cn = L.render, ln = L.createLogger.bind(L), un = L.setLogFilter.bind(L), hn = L.setLoggles.bind(L), fn = L.language.t.bind(L.language), dn = Kt.bind(Ce), gn = L.constructView.bind(L);
1428
+ W = new WeakMap(), Le = new WeakMap(), z = new WeakMap(), te = new WeakMap(), Re = new WeakMap(), xe = new WeakMap(), Oe = new WeakMap(), Ne = new WeakMap(), Me = new WeakMap(), R = new WeakMap(), G = new WeakMap();
1429
+ const ct = new Kt(), Zt = ct.i18n.t.bind(ct.i18n);
1298
1430
  export {
1299
- yn as Fragment,
1300
- en as beforeMount,
1301
- nn as beforeUnmount,
1302
- wn as cond,
1303
- gn as constructView,
1304
- ln as createLogger,
1305
- Ce as createMarkup,
1306
- Ot as createRef,
1307
- Pt as createSettableSignal,
1308
- Q as createSignal,
1309
- bn as createSignalSetter,
1310
- L as default,
1311
- Qe as derive,
1312
- Rt as designalify,
1313
- dn as html,
1314
- on as http,
1315
- xt as isRef,
1316
- an as mount,
1317
- tn as onMount,
1318
- rn as onUnmount,
1319
- vn as portal,
1320
- cn as render,
1321
- $n as repeat,
1322
- Zt as router,
1323
- un as setLogFilter,
1324
- hn as setLogges,
1325
- Be as signalify,
1326
- fn as t,
1327
- Mt as toSettableSignal,
1328
- sn as unmount,
1329
- ut as watch
1431
+ wt as cond,
1432
+ at as createMarkup,
1433
+ Pt as createRef,
1434
+ $t as createSettableState,
1435
+ rr as createSetter,
1436
+ K as createState,
1437
+ ct as default,
1438
+ ae as derive,
1439
+ tt as html,
1440
+ St as isRef,
1441
+ nr as portal,
1442
+ ar as repeat,
1443
+ Zt as t,
1444
+ Et as toSettableState,
1445
+ Be as toState,
1446
+ kt as valueOf
1330
1447
  };
1331
1448
  //# sourceMappingURL=index.js.map