use-navigation-api 0.2.0 → 0.4.0

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,6 @@
1
+ export * from './navigationProvider';
2
+ export * from './useNavigate';
3
+ export * from './location/useQueryParam';
4
+ export * from './location/useQueryParams';
5
+ export * from './location/useLocation';
6
+ export * from './location/useLocationWithParam';
@@ -0,0 +1,15 @@
1
+ export type Location = string;
2
+ export declare function resolveLocation(location: string, base: string): string;
3
+ /**
4
+ * Returns the current location for the navigation context.
5
+ */
6
+ export declare function useLocation(): Location;
7
+ /**
8
+ * Resolves a URL string relative to the current location and returns its parts.
9
+ */
10
+ export declare function useLocation(url: string, base?: string): Location;
11
+ /**
12
+ * Returns a location based on the returned url if present, or the modified input argument.
13
+ * For instance, `useLocation(url => url.searchParams.set("parameter", "value"))` returns the current location with only a single parameter updated.
14
+ */
15
+ export declare function useLocation(url: (current: URL) => URL | void, base?: string): Location;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * returns The current location with the specified parameter set to the provided value or removed if the value === null.
3
+ * @param param name of the query parameter to set
4
+ * @param value value to set the parameter to, or `null` to remove any existing value of that parameter
5
+ * @param base If provided, uses this value instead of the current location.
6
+ */
7
+ export declare function useLocationWithParam(param: string, value: string | null, base?: string): string;
8
+ /**
9
+ * returns The current location with the specified parameter set to the provided value or removed if the value === null.
10
+ * @param params map of parameters to update. null or empty entries will be removed.
11
+ * @param base If provided, uses this value instead of the current location.
12
+ */
13
+ export declare function useLocationWithParams(params: Record<string, string | string[] | null>, base?: string): string;
@@ -0,0 +1,9 @@
1
+ export declare function parseSearchParams(location?: string): URLSearchParams;
2
+ /**
3
+ * Returns the first value for a query parameter, or null if it is missing.
4
+ */
5
+ export declare function useQueryParam(param: string, all?: false): string | null;
6
+ /**
7
+ * Returns all values for a query parameter when it appears multiple times.
8
+ */
9
+ export declare function useQueryParam(param: string, all: true): string[];
@@ -0,0 +1,15 @@
1
+ export type ParamsMapper<T> = (params: URLSearchParams) => T;
2
+ export declare function mapQueryParams(params: URLSearchParams, keys?: string[], arrayKeys?: string[]): Record<string, string | string[] | null>;
3
+ /**
4
+ * Returns the first value of each query parameter found in the url.
5
+ */
6
+ export declare function useQueryParams(): Record<string, string>;
7
+ /**
8
+ * Returns the first value of each query parameter found in keys, and all values of each parameter found in arrayKeys.
9
+ * Note that typescript types of K and M should not overlap - manual typing or casting variables to `as const` may be required.
10
+ */
11
+ export declare function useQueryParams<K extends string, M extends string>(keys: K[], arrayKeys?: M[]): Record<K, string | null> & Record<M, string[]>;
12
+ /**
13
+ * Maps SearchParams to a custom type using the provided mapper function.
14
+ */
15
+ export declare function useQueryParams<T>(mapper: ParamsMapper<T>): T;
@@ -0,0 +1,18 @@
1
+ import { Dispatch, FC, ReactNode, SetStateAction } from 'react';
2
+ export type NavigationContextState = {
3
+ url: string;
4
+ store: "url" | "hash" | "memory";
5
+ };
6
+ type NavigationContextValue = NavigationContextState & {
7
+ setState?: Dispatch<SetStateAction<NavigationContextState>>;
8
+ };
9
+ export declare const NavigationContext: import('react').Context<NavigationContextValue>;
10
+ declare function defaultShouldHandle(event: NavigateEvent): boolean;
11
+ type ShouldHandle = typeof defaultShouldHandle;
12
+ export declare const NavigationProvider: FC<{
13
+ children: ReactNode;
14
+ store?: "url" | "hash" | "memory";
15
+ scoped?: boolean;
16
+ shouldHandle?: ShouldHandle;
17
+ }>;
18
+ export {};
@@ -0,0 +1,651 @@
1
+ import { createContext, createElement, useContext, useEffect, useMemo, useState } from "react";
2
+ var __create = Object.create, __defProp = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __getOwnPropNames = Object.getOwnPropertyNames, __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty, __commonJSMin = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), __copyProps = (e, t, n, r) => {
3
+ if (t && typeof t == "object" || typeof t == "function") for (var i = __getOwnPropNames(t), a = 0, o = i.length, u; a < o; a++) u = i[a], !__hasOwnProp.call(e, u) && u !== n && __defProp(e, u, {
4
+ get: ((e) => t[e]).bind(null, u),
5
+ enumerable: !(r = __getOwnPropDesc(t, u)) || r.enumerable
6
+ });
7
+ return e;
8
+ }, __toESM = (e, t, n) => (n = e == null ? {} : __create(__getProtoOf(e)), __copyProps(t || !e || !e.__esModule ? __defProp(n, "default", {
9
+ value: e,
10
+ enumerable: !0
11
+ }) : n, e)), require_uri_all = /* @__PURE__ */ __commonJSMin(((e, t) => {
12
+ /** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */
13
+ (function(n, r) {
14
+ typeof e == "object" && t !== void 0 ? r(e) : typeof define == "function" && define.amd ? define(["exports"], r) : r(n.URI = n.URI || {});
15
+ })(e, (function(e) {
16
+ function t() {
17
+ var e = [...arguments];
18
+ if (e.length > 1) {
19
+ e[0] = e[0].slice(0, -1);
20
+ for (var t = e.length - 1, n = 1; n < t; ++n) e[n] = e[n].slice(1, -1);
21
+ return e[t] = e[t].slice(1), e.join("");
22
+ } else return e[0];
23
+ }
24
+ function n(e) {
25
+ return "(?:" + e + ")";
26
+ }
27
+ function r(e) {
28
+ return e === void 0 ? "undefined" : e === null ? "null" : Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase();
29
+ }
30
+ function i(e) {
31
+ return e.toUpperCase();
32
+ }
33
+ function a(e) {
34
+ return e == null ? [] : e instanceof Array ? e : typeof e.length != "number" || e.split || e.setInterval || e.call ? [e] : Array.prototype.slice.call(e);
35
+ }
36
+ function o(e, t) {
37
+ var n = e;
38
+ if (t) for (var r in t) n[r] = t[r];
39
+ return n;
40
+ }
41
+ function s(e) {
42
+ var r = "[A-Za-z]", i = "[0-9]", a = t(i, "[A-Fa-f]"), o = n(n("%[EFef]" + a + "%" + a + a + "%" + a + a) + "|" + n("%[89A-Fa-f]" + a + "%" + a + a) + "|" + n("%" + a + a)), s = "[\\:\\/\\?\\#\\[\\]\\@]", c = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", l = t(s, c), u = e ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", d = e ? "[\\uE000-\\uF8FF]" : "[]", f = t(r, i, "[\\-\\.\\_\\~]", u), p = n(r + t(r, i, "[\\+\\-\\.]") + "*"), m = n(n(o + "|" + t(f, c, "[\\:]")) + "*");
43
+ n(n("25[0-5]") + "|" + n("2[0-4]" + i) + "|" + n("1" + i + i) + "|" + n("[1-9]" + i) + "|" + i);
44
+ var h = n(n("25[0-5]") + "|" + n("2[0-4]" + i) + "|" + n("1" + i + i) + "|" + n("0?[1-9]" + i) + "|0?0?" + i), g = n(h + "\\." + h + "\\." + h + "\\." + h), _ = n(a + "{1,4}"), v = n(n(_ + "\\:" + _) + "|" + g), y = n([
45
+ n(n(_ + "\\:") + "{6}" + v),
46
+ n("\\:\\:" + n(_ + "\\:") + "{5}" + v),
47
+ n(n(_) + "?\\:\\:" + n(_ + "\\:") + "{4}" + v),
48
+ n(n(n(_ + "\\:") + "{0,1}" + _) + "?\\:\\:" + n(_ + "\\:") + "{3}" + v),
49
+ n(n(n(_ + "\\:") + "{0,2}" + _) + "?\\:\\:" + n(_ + "\\:") + "{2}" + v),
50
+ n(n(n(_ + "\\:") + "{0,3}" + _) + "?\\:\\:" + _ + "\\:" + v),
51
+ n(n(n(_ + "\\:") + "{0,4}" + _) + "?\\:\\:" + v),
52
+ n(n(n(_ + "\\:") + "{0,5}" + _) + "?\\:\\:" + _),
53
+ n(n(n(_ + "\\:") + "{0,6}" + _) + "?\\:\\:")
54
+ ].join("|")), b = n(n(f + "|" + o) + "+");
55
+ n(y + "\\%25" + b);
56
+ var x = n(y + n("\\%25|\\%(?!" + a + "{2})") + b), S = n("[vV]" + a + "+\\." + t(f, c, "[\\:]") + "+"), C = n("\\[" + n(x + "|" + y + "|" + S) + "\\]"), w = n(n(o + "|" + t(f, c)) + "*"), T = n(C + "|" + g + "(?!" + w + ")|" + w), E = n(i + "*"), D = n(n(m + "@") + "?" + T + n("\\:" + E) + "?"), O = n(o + "|" + t(f, c, "[\\:\\@]")), k = n(O + "*"), A = n(O + "+"), ee = n(n(o + "|" + t(f, c, "[\\@]")) + "+"), j = n(n("\\/" + k) + "*"), M = n("\\/" + n(A + j) + "?"), N = n(ee + j), P = n(A + j), F = "(?!" + O + ")";
57
+ n(j + "|" + M + "|" + N + "|" + P + "|" + F);
58
+ var I = n(n(O + "|" + t("[\\/\\?]", d)) + "*"), L = n(n(O + "|[\\/\\?]") + "*"), R = n(n("\\/\\/" + D + j) + "|" + M + "|" + P + "|" + F), z = n(p + "\\:" + R + n("\\?" + I) + "?" + n("\\#" + L) + "?"), B = n(n(n("\\/\\/" + D + j) + "|" + M + "|" + N + "|" + F) + n("\\?" + I) + "?" + n("\\#" + L) + "?");
59
+ return n(z + "|" + B), n(p + "\\:" + R + n("\\?" + I) + "?"), "" + p + n(n("\\/\\/(" + n("(" + m + ")@") + "?(" + T + ")" + n("\\:(" + E + ")") + "?)") + "?(" + j + "|" + M + "|" + P + "|" + F + ")") + n("\\?(" + I + ")") + n("\\#(" + L + ")"), "" + n(n("\\/\\/(" + n("(" + m + ")@") + "?(" + T + ")" + n("\\:(" + E + ")") + "?)") + "?(" + j + "|" + M + "|" + N + "|" + F + ")") + n("\\?(" + I + ")") + n("\\#(" + L + ")"), "" + p + n(n("\\/\\/(" + n("(" + m + ")@") + "?(" + T + ")" + n("\\:(" + E + ")") + "?)") + "?(" + j + "|" + M + "|" + P + "|" + F + ")") + n("\\?(" + I + ")"), "" + n("\\#(" + L + ")"), "" + n("(" + m + ")@") + T + n("\\:(" + E + ")"), {
60
+ NOT_SCHEME: new RegExp(t("[^]", r, i, "[\\+\\-\\.]"), "g"),
61
+ NOT_USERINFO: new RegExp(t("[^\\%\\:]", f, c), "g"),
62
+ NOT_HOST: new RegExp(t("[^\\%\\[\\]\\:]", f, c), "g"),
63
+ NOT_PATH: new RegExp(t("[^\\%\\/\\:\\@]", f, c), "g"),
64
+ NOT_PATH_NOSCHEME: new RegExp(t("[^\\%\\/\\@]", f, c), "g"),
65
+ NOT_QUERY: new RegExp(t("[^\\%]", f, c, "[\\:\\@\\/\\?]", d), "g"),
66
+ NOT_FRAGMENT: new RegExp(t("[^\\%]", f, c, "[\\:\\@\\/\\?]"), "g"),
67
+ ESCAPE: new RegExp(t("[^]", f, c), "g"),
68
+ UNRESERVED: new RegExp(f, "g"),
69
+ OTHER_CHARS: new RegExp(t("[^\\%]", f, l), "g"),
70
+ PCT_ENCODED: new RegExp(o, "g"),
71
+ IPV4ADDRESS: /* @__PURE__ */ RegExp("^(" + g + ")$"),
72
+ IPV6ADDRESS: /* @__PURE__ */ RegExp("^\\[?(" + y + ")" + n(n("\\%25|\\%(?!" + a + "{2})") + "(" + b + ")") + "?\\]?$")
73
+ };
74
+ }
75
+ var c = s(!1), l = s(!0), u = function() {
76
+ function e(e, t) {
77
+ var n = [], r = !0, i = !1, a = void 0;
78
+ try {
79
+ for (var o = e[Symbol.iterator](), s; !(r = (s = o.next()).done) && (n.push(s.value), !(t && n.length === t)); r = !0);
80
+ } catch (e) {
81
+ i = !0, a = e;
82
+ } finally {
83
+ try {
84
+ !r && o.return && o.return();
85
+ } finally {
86
+ if (i) throw a;
87
+ }
88
+ }
89
+ return n;
90
+ }
91
+ return function(t, n) {
92
+ if (Array.isArray(t)) return t;
93
+ if (Symbol.iterator in Object(t)) return e(t, n);
94
+ throw TypeError("Invalid attempt to destructure non-iterable instance");
95
+ };
96
+ }(), d = function(e) {
97
+ if (Array.isArray(e)) {
98
+ for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t];
99
+ return n;
100
+ } else return Array.from(e);
101
+ }, f = 2147483647, p = 36, m = 1, h = 26, g = 38, _ = 700, v = 72, y = 128, b = "-", x = /^xn--/, S = /[^\0-\x7E]/, C = /[\x2E\u3002\uFF0E\uFF61]/g, w = {
102
+ overflow: "Overflow: input needs wider integers to process",
103
+ "not-basic": "Illegal input >= 0x80 (not a basic code point)",
104
+ "invalid-input": "Invalid input"
105
+ }, T = p - m, E = Math.floor, D = String.fromCharCode;
106
+ function O(e) {
107
+ throw RangeError(w[e]);
108
+ }
109
+ function k(e, t) {
110
+ for (var n = [], r = e.length; r--;) n[r] = t(e[r]);
111
+ return n;
112
+ }
113
+ function A(e, t) {
114
+ var n = e.split("@"), r = "";
115
+ n.length > 1 && (r = n[0] + "@", e = n[1]), e = e.replace(C, ".");
116
+ var i = k(e.split("."), t).join(".");
117
+ return r + i;
118
+ }
119
+ function ee(e) {
120
+ for (var t = [], n = 0, r = e.length; n < r;) {
121
+ var i = e.charCodeAt(n++);
122
+ if (i >= 55296 && i <= 56319 && n < r) {
123
+ var a = e.charCodeAt(n++);
124
+ (a & 64512) == 56320 ? t.push(((i & 1023) << 10) + (a & 1023) + 65536) : (t.push(i), n--);
125
+ } else t.push(i);
126
+ }
127
+ return t;
128
+ }
129
+ var j = function(e) {
130
+ return String.fromCodePoint.apply(String, d(e));
131
+ }, M = function(e) {
132
+ return e - 48 < 10 ? e - 22 : e - 65 < 26 ? e - 65 : e - 97 < 26 ? e - 97 : p;
133
+ }, N = function(e, t) {
134
+ return e + 22 + 75 * (e < 26) - ((t != 0) << 5);
135
+ }, P = function(e, t, n) {
136
+ var r = 0;
137
+ for (e = n ? E(e / _) : e >> 1, e += E(e / t); e > T * h >> 1; r += p) e = E(e / T);
138
+ return E(r + (T + 1) * e / (e + g));
139
+ }, F = function(e) {
140
+ var t = [], n = e.length, r = 0, i = y, a = v, o = e.lastIndexOf(b);
141
+ o < 0 && (o = 0);
142
+ for (var s = 0; s < o; ++s) e.charCodeAt(s) >= 128 && O("not-basic"), t.push(e.charCodeAt(s));
143
+ for (var c = o > 0 ? o + 1 : 0; c < n;) {
144
+ for (var l = r, u = 1, d = p;; d += p) {
145
+ c >= n && O("invalid-input");
146
+ var g = M(e.charCodeAt(c++));
147
+ (g >= p || g > E((f - r) / u)) && O("overflow"), r += g * u;
148
+ var _ = d <= a ? m : d >= a + h ? h : d - a;
149
+ if (g < _) break;
150
+ var x = p - _;
151
+ u > E(f / x) && O("overflow"), u *= x;
152
+ }
153
+ var S = t.length + 1;
154
+ a = P(r - l, S, l == 0), E(r / S) > f - i && O("overflow"), i += E(r / S), r %= S, t.splice(r++, 0, i);
155
+ }
156
+ return String.fromCodePoint.apply(String, t);
157
+ }, I = function(e) {
158
+ var t = [];
159
+ e = ee(e);
160
+ var n = e.length, r = y, i = 0, a = v, o = !0, s = !1, c = void 0;
161
+ try {
162
+ for (var l = e[Symbol.iterator](), u; !(o = (u = l.next()).done); o = !0) {
163
+ var d = u.value;
164
+ d < 128 && t.push(D(d));
165
+ }
166
+ } catch (e) {
167
+ s = !0, c = e;
168
+ } finally {
169
+ try {
170
+ !o && l.return && l.return();
171
+ } finally {
172
+ if (s) throw c;
173
+ }
174
+ }
175
+ var g = t.length, _ = g;
176
+ for (g && t.push(b); _ < n;) {
177
+ var x = f, S = !0, C = !1, w = void 0;
178
+ try {
179
+ for (var T = e[Symbol.iterator](), k; !(S = (k = T.next()).done); S = !0) {
180
+ var A = k.value;
181
+ A >= r && A < x && (x = A);
182
+ }
183
+ } catch (e) {
184
+ C = !0, w = e;
185
+ } finally {
186
+ try {
187
+ !S && T.return && T.return();
188
+ } finally {
189
+ if (C) throw w;
190
+ }
191
+ }
192
+ var j = _ + 1;
193
+ x - r > E((f - i) / j) && O("overflow"), i += (x - r) * j, r = x;
194
+ var M = !0, F = !1, I = void 0;
195
+ try {
196
+ for (var L = e[Symbol.iterator](), R; !(M = (R = L.next()).done); M = !0) {
197
+ var z = R.value;
198
+ if (z < r && ++i > f && O("overflow"), z == r) {
199
+ for (var B = i, V = p;; V += p) {
200
+ var H = V <= a ? m : V >= a + h ? h : V - a;
201
+ if (B < H) break;
202
+ var U = B - H, W = p - H;
203
+ t.push(D(N(H + U % W, 0))), B = E(U / W);
204
+ }
205
+ t.push(D(N(B, 0))), a = P(i, j, _ == g), i = 0, ++_;
206
+ }
207
+ }
208
+ } catch (e) {
209
+ F = !0, I = e;
210
+ } finally {
211
+ try {
212
+ !M && L.return && L.return();
213
+ } finally {
214
+ if (F) throw I;
215
+ }
216
+ }
217
+ ++i, ++r;
218
+ }
219
+ return t.join("");
220
+ }, L = {
221
+ version: "2.1.0",
222
+ ucs2: {
223
+ decode: ee,
224
+ encode: j
225
+ },
226
+ decode: F,
227
+ encode: I,
228
+ toASCII: function(e) {
229
+ return A(e, function(e) {
230
+ return S.test(e) ? "xn--" + I(e) : e;
231
+ });
232
+ },
233
+ toUnicode: function(e) {
234
+ return A(e, function(e) {
235
+ return x.test(e) ? F(e.slice(4).toLowerCase()) : e;
236
+ });
237
+ }
238
+ }, R = {};
239
+ function z(e) {
240
+ var t = e.charCodeAt(0), n = void 0;
241
+ return n = t < 16 ? "%0" + t.toString(16).toUpperCase() : t < 128 ? "%" + t.toString(16).toUpperCase() : t < 2048 ? "%" + (t >> 6 | 192).toString(16).toUpperCase() + "%" + (t & 63 | 128).toString(16).toUpperCase() : "%" + (t >> 12 | 224).toString(16).toUpperCase() + "%" + (t >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (t & 63 | 128).toString(16).toUpperCase(), n;
242
+ }
243
+ function B(e) {
244
+ for (var t = "", n = 0, r = e.length; n < r;) {
245
+ var i = parseInt(e.substr(n + 1, 2), 16);
246
+ if (i < 128) t += String.fromCharCode(i), n += 3;
247
+ else if (i >= 194 && i < 224) {
248
+ if (r - n >= 6) {
249
+ var a = parseInt(e.substr(n + 4, 2), 16);
250
+ t += String.fromCharCode((i & 31) << 6 | a & 63);
251
+ } else t += e.substr(n, 6);
252
+ n += 6;
253
+ } else if (i >= 224) {
254
+ if (r - n >= 9) {
255
+ var o = parseInt(e.substr(n + 4, 2), 16), s = parseInt(e.substr(n + 7, 2), 16);
256
+ t += String.fromCharCode((i & 15) << 12 | (o & 63) << 6 | s & 63);
257
+ } else t += e.substr(n, 9);
258
+ n += 9;
259
+ } else t += e.substr(n, 3), n += 3;
260
+ }
261
+ return t;
262
+ }
263
+ function V(e, t) {
264
+ function n(e) {
265
+ var n = B(e);
266
+ return n.match(t.UNRESERVED) ? n : e;
267
+ }
268
+ return e.scheme &&= String(e.scheme).replace(t.PCT_ENCODED, n).toLowerCase().replace(t.NOT_SCHEME, ""), e.userinfo !== void 0 && (e.userinfo = String(e.userinfo).replace(t.PCT_ENCODED, n).replace(t.NOT_USERINFO, z).replace(t.PCT_ENCODED, i)), e.host !== void 0 && (e.host = String(e.host).replace(t.PCT_ENCODED, n).toLowerCase().replace(t.NOT_HOST, z).replace(t.PCT_ENCODED, i)), e.path !== void 0 && (e.path = String(e.path).replace(t.PCT_ENCODED, n).replace(e.scheme ? t.NOT_PATH : t.NOT_PATH_NOSCHEME, z).replace(t.PCT_ENCODED, i)), e.query !== void 0 && (e.query = String(e.query).replace(t.PCT_ENCODED, n).replace(t.NOT_QUERY, z).replace(t.PCT_ENCODED, i)), e.fragment !== void 0 && (e.fragment = String(e.fragment).replace(t.PCT_ENCODED, n).replace(t.NOT_FRAGMENT, z).replace(t.PCT_ENCODED, i)), e;
269
+ }
270
+ function H(e) {
271
+ return e.replace(/^0*(.*)/, "$1") || "0";
272
+ }
273
+ function U(e, t) {
274
+ var n = u(e.match(t.IPV4ADDRESS) || [], 2)[1];
275
+ return n ? n.split(".").map(H).join(".") : e;
276
+ }
277
+ function W(e, t) {
278
+ var n = u(e.match(t.IPV6ADDRESS) || [], 3), r = n[1], i = n[2];
279
+ if (r) {
280
+ for (var a = u(r.toLowerCase().split("::").reverse(), 2), o = a[0], s = a[1], c = s ? s.split(":").map(H) : [], l = o.split(":").map(H), d = t.IPV4ADDRESS.test(l[l.length - 1]), f = d ? 7 : 8, p = l.length - f, m = Array(f), h = 0; h < f; ++h) m[h] = c[h] || l[p + h] || "";
281
+ d && (m[f - 1] = U(m[f - 1], t));
282
+ var g = m.reduce(function(e, t, n) {
283
+ if (!t || t === "0") {
284
+ var r = e[e.length - 1];
285
+ r && r.index + r.length === n ? r.length++ : e.push({
286
+ index: n,
287
+ length: 1
288
+ });
289
+ }
290
+ return e;
291
+ }, []).sort(function(e, t) {
292
+ return t.length - e.length;
293
+ })[0], _ = void 0;
294
+ if (g && g.length > 1) {
295
+ var v = m.slice(0, g.index), y = m.slice(g.index + g.length);
296
+ _ = v.join(":") + "::" + y.join(":");
297
+ } else _ = m.join(":");
298
+ return i && (_ += "%" + i), _;
299
+ } else return e;
300
+ }
301
+ var te = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i, ne = "".match(/(){0}/)[1] === void 0;
302
+ function G(e) {
303
+ var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = {}, r = t.iri === !1 ? c : l;
304
+ t.reference === "suffix" && (e = (t.scheme ? t.scheme + ":" : "") + "//" + e);
305
+ var i = e.match(te);
306
+ if (i) {
307
+ ne ? (n.scheme = i[1], n.userinfo = i[3], n.host = i[4], n.port = parseInt(i[5], 10), n.path = i[6] || "", n.query = i[7], n.fragment = i[8], isNaN(n.port) && (n.port = i[5])) : (n.scheme = i[1] || void 0, n.userinfo = e.indexOf("@") === -1 ? void 0 : i[3], n.host = e.indexOf("//") === -1 ? void 0 : i[4], n.port = parseInt(i[5], 10), n.path = i[6] || "", n.query = e.indexOf("?") === -1 ? void 0 : i[7], n.fragment = e.indexOf("#") === -1 ? void 0 : i[8], isNaN(n.port) && (n.port = e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? i[4] : void 0)), n.host &&= W(U(n.host, r), r), n.scheme === void 0 && n.userinfo === void 0 && n.host === void 0 && n.port === void 0 && !n.path && n.query === void 0 ? n.reference = "same-document" : n.scheme === void 0 ? n.reference = "relative" : n.fragment === void 0 ? n.reference = "absolute" : n.reference = "uri", t.reference && t.reference !== "suffix" && t.reference !== n.reference && (n.error = n.error || "URI is not a " + t.reference + " reference.");
308
+ var a = R[(t.scheme || n.scheme || "").toLowerCase()];
309
+ if (!t.unicodeSupport && (!a || !a.unicodeSupport)) {
310
+ if (n.host && (t.domainHost || a && a.domainHost)) try {
311
+ n.host = L.toASCII(n.host.replace(r.PCT_ENCODED, B).toLowerCase());
312
+ } catch (e) {
313
+ n.error = n.error || "Host's domain name can not be converted to ASCII via punycode: " + e;
314
+ }
315
+ V(n, c);
316
+ } else V(n, r);
317
+ a && a.parse && a.parse(n, t);
318
+ } else n.error = n.error || "URI can not be parsed.";
319
+ return n;
320
+ }
321
+ function re(e, t) {
322
+ var n = t.iri === !1 ? c : l, r = [];
323
+ return e.userinfo !== void 0 && (r.push(e.userinfo), r.push("@")), e.host !== void 0 && r.push(W(U(String(e.host), n), n).replace(n.IPV6ADDRESS, function(e, t, n) {
324
+ return "[" + t + (n ? "%25" + n : "") + "]";
325
+ })), (typeof e.port == "number" || typeof e.port == "string") && (r.push(":"), r.push(String(e.port))), r.length ? r.join("") : void 0;
326
+ }
327
+ var ie = /^\.\.?\//, ae = /^\/\.(\/|$)/, oe = /^\/\.\.(\/|$)/, se = /^\/?(?:.|\n)*?(?=\/|$)/;
328
+ function K(e) {
329
+ for (var t = []; e.length;) if (e.match(ie)) e = e.replace(ie, "");
330
+ else if (e.match(ae)) e = e.replace(ae, "/");
331
+ else if (e.match(oe)) e = e.replace(oe, "/"), t.pop();
332
+ else if (e === "." || e === "..") e = "";
333
+ else {
334
+ var n = e.match(se);
335
+ if (n) {
336
+ var r = n[0];
337
+ e = e.slice(r.length), t.push(r);
338
+ } else throw Error("Unexpected dot segment condition");
339
+ }
340
+ return t.join("");
341
+ }
342
+ function q(e) {
343
+ var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = t.iri ? l : c, r = [], i = R[(t.scheme || e.scheme || "").toLowerCase()];
344
+ if (i && i.serialize && i.serialize(e, t), e.host && !n.IPV6ADDRESS.test(e.host) && (t.domainHost || i && i.domainHost)) try {
345
+ e.host = t.iri ? L.toUnicode(e.host) : L.toASCII(e.host.replace(n.PCT_ENCODED, B).toLowerCase());
346
+ } catch (n) {
347
+ e.error = e.error || "Host's domain name can not be converted to " + (t.iri ? "Unicode" : "ASCII") + " via punycode: " + n;
348
+ }
349
+ V(e, n), t.reference !== "suffix" && e.scheme && (r.push(e.scheme), r.push(":"));
350
+ var a = re(e, t);
351
+ if (a !== void 0 && (t.reference !== "suffix" && r.push("//"), r.push(a), e.path && e.path.charAt(0) !== "/" && r.push("/")), e.path !== void 0) {
352
+ var o = e.path;
353
+ !t.absolutePath && (!i || !i.absolutePath) && (o = K(o)), a === void 0 && (o = o.replace(/^\/\//, "/%2F")), r.push(o);
354
+ }
355
+ return e.query !== void 0 && (r.push("?"), r.push(e.query)), e.fragment !== void 0 && (r.push("#"), r.push(e.fragment)), r.join("");
356
+ }
357
+ function ce(e, t) {
358
+ var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = arguments[3], i = {};
359
+ return r || (e = G(q(e, n), n), t = G(q(t, n), n)), n ||= {}, !n.tolerant && t.scheme ? (i.scheme = t.scheme, i.userinfo = t.userinfo, i.host = t.host, i.port = t.port, i.path = K(t.path || ""), i.query = t.query) : (t.userinfo !== void 0 || t.host !== void 0 || t.port !== void 0 ? (i.userinfo = t.userinfo, i.host = t.host, i.port = t.port, i.path = K(t.path || ""), i.query = t.query) : (t.path ? (t.path.charAt(0) === "/" ? i.path = K(t.path) : ((e.userinfo !== void 0 || e.host !== void 0 || e.port !== void 0) && !e.path ? i.path = "/" + t.path : e.path ? i.path = e.path.slice(0, e.path.lastIndexOf("/") + 1) + t.path : i.path = t.path, i.path = K(i.path)), i.query = t.query) : (i.path = e.path, t.query === void 0 ? i.query = e.query : i.query = t.query), i.userinfo = e.userinfo, i.host = e.host, i.port = e.port), i.scheme = e.scheme), i.fragment = t.fragment, i;
360
+ }
361
+ function le(e, t, n) {
362
+ var r = o({ scheme: "null" }, n);
363
+ return q(ce(G(e, r), G(t, r), r, !0), r);
364
+ }
365
+ function ue(e, t) {
366
+ return typeof e == "string" ? e = q(G(e, t), t) : r(e) === "object" && (e = G(q(e, t), t)), e;
367
+ }
368
+ function de(e, t, n) {
369
+ return typeof e == "string" ? e = q(G(e, n), n) : r(e) === "object" && (e = q(e, n)), typeof t == "string" ? t = q(G(t, n), n) : r(t) === "object" && (t = q(t, n)), e === t;
370
+ }
371
+ function fe(e, t) {
372
+ return e && e.toString().replace(!t || !t.iri ? c.ESCAPE : l.ESCAPE, z);
373
+ }
374
+ function J(e, t) {
375
+ return e && e.toString().replace(!t || !t.iri ? c.PCT_ENCODED : l.PCT_ENCODED, B);
376
+ }
377
+ var Y = {
378
+ scheme: "http",
379
+ domainHost: !0,
380
+ parse: function(e, t) {
381
+ return e.host || (e.error = e.error || "HTTP URIs must have a host."), e;
382
+ },
383
+ serialize: function(e, t) {
384
+ var n = String(e.scheme).toLowerCase() === "https";
385
+ return (e.port === (n ? 443 : 80) || e.port === "") && (e.port = void 0), e.path ||= "/", e;
386
+ }
387
+ }, pe = {
388
+ scheme: "https",
389
+ domainHost: Y.domainHost,
390
+ parse: Y.parse,
391
+ serialize: Y.serialize
392
+ };
393
+ function me(e) {
394
+ return typeof e.secure == "boolean" ? e.secure : String(e.scheme).toLowerCase() === "wss";
395
+ }
396
+ var X = {
397
+ scheme: "ws",
398
+ domainHost: !0,
399
+ parse: function(e, t) {
400
+ var n = e;
401
+ return n.secure = me(n), n.resourceName = (n.path || "/") + (n.query ? "?" + n.query : ""), n.path = void 0, n.query = void 0, n;
402
+ },
403
+ serialize: function(e, t) {
404
+ if ((e.port === (me(e) ? 443 : 80) || e.port === "") && (e.port = void 0), typeof e.secure == "boolean" && (e.scheme = e.secure ? "wss" : "ws", e.secure = void 0), e.resourceName) {
405
+ var n = u(e.resourceName.split("?"), 2), r = n[0], i = n[1];
406
+ e.path = r && r !== "/" ? r : void 0, e.query = i, e.resourceName = void 0;
407
+ }
408
+ return e.fragment = void 0, e;
409
+ }
410
+ }, he = {
411
+ scheme: "wss",
412
+ domainHost: X.domainHost,
413
+ parse: X.parse,
414
+ serialize: X.serialize
415
+ }, ge = {}, _e = "[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]", Z = "[0-9A-Fa-f]", ve = n(n("%[EFef]" + Z + "%" + Z + Z + "%" + Z + Z) + "|" + n("%[89A-Fa-f]" + Z + "%" + Z + Z) + "|" + n("%" + Z + Z)), ye = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]", be = t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]", "[\\\"\\\\]"), xe = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]", Se = new RegExp(_e, "g"), Q = new RegExp(ve, "g"), Ce = new RegExp(t("[^]", ye, "[\\.]", "[\\\"]", be), "g"), we = new RegExp(t("[^]", _e, xe), "g"), Te = we;
416
+ function $(e) {
417
+ var t = B(e);
418
+ return t.match(Se) ? t : e;
419
+ }
420
+ var Ee = {
421
+ scheme: "mailto",
422
+ parse: function(e, t) {
423
+ var n = e, r = n.to = n.path ? n.path.split(",") : [];
424
+ if (n.path = void 0, n.query) {
425
+ for (var i = !1, a = {}, o = n.query.split("&"), s = 0, c = o.length; s < c; ++s) {
426
+ var l = o[s].split("=");
427
+ switch (l[0]) {
428
+ case "to":
429
+ for (var u = l[1].split(","), d = 0, f = u.length; d < f; ++d) r.push(u[d]);
430
+ break;
431
+ case "subject":
432
+ n.subject = J(l[1], t);
433
+ break;
434
+ case "body":
435
+ n.body = J(l[1], t);
436
+ break;
437
+ default:
438
+ i = !0, a[J(l[0], t)] = J(l[1], t);
439
+ break;
440
+ }
441
+ }
442
+ i && (n.headers = a);
443
+ }
444
+ n.query = void 0;
445
+ for (var p = 0, m = r.length; p < m; ++p) {
446
+ var h = r[p].split("@");
447
+ if (h[0] = J(h[0]), t.unicodeSupport) h[1] = J(h[1], t).toLowerCase();
448
+ else try {
449
+ h[1] = L.toASCII(J(h[1], t).toLowerCase());
450
+ } catch (e) {
451
+ n.error = n.error || "Email address's domain name can not be converted to ASCII via punycode: " + e;
452
+ }
453
+ r[p] = h.join("@");
454
+ }
455
+ return n;
456
+ },
457
+ serialize: function(e, t) {
458
+ var n = e, r = a(e.to);
459
+ if (r) {
460
+ for (var o = 0, s = r.length; o < s; ++o) {
461
+ var c = String(r[o]), l = c.lastIndexOf("@"), u = c.slice(0, l).replace(Q, $).replace(Q, i).replace(Ce, z), d = c.slice(l + 1);
462
+ try {
463
+ d = t.iri ? L.toUnicode(d) : L.toASCII(J(d, t).toLowerCase());
464
+ } catch (e) {
465
+ n.error = n.error || "Email address's domain name can not be converted to " + (t.iri ? "Unicode" : "ASCII") + " via punycode: " + e;
466
+ }
467
+ r[o] = u + "@" + d;
468
+ }
469
+ n.path = r.join(",");
470
+ }
471
+ var f = e.headers = e.headers || {};
472
+ e.subject && (f.subject = e.subject), e.body && (f.body = e.body);
473
+ var p = [];
474
+ for (var m in f) f[m] !== ge[m] && p.push(m.replace(Q, $).replace(Q, i).replace(we, z) + "=" + f[m].replace(Q, $).replace(Q, i).replace(Te, z));
475
+ return p.length && (n.query = p.join("&")), n;
476
+ }
477
+ }, De = /^([^\:]+)\:(.*)/, Oe = {
478
+ scheme: "urn",
479
+ parse: function(e, t) {
480
+ var n = e.path && e.path.match(De), r = e;
481
+ if (n) {
482
+ var i = t.scheme || r.scheme || "urn", a = n[1].toLowerCase(), o = n[2], s = R[i + ":" + (t.nid || a)];
483
+ r.nid = a, r.nss = o, r.path = void 0, s && (r = s.parse(r, t));
484
+ } else r.error = r.error || "URN can not be parsed.";
485
+ return r;
486
+ },
487
+ serialize: function(e, t) {
488
+ var n = t.scheme || e.scheme || "urn", r = e.nid, i = R[n + ":" + (t.nid || r)];
489
+ i && (e = i.serialize(e, t));
490
+ var a = e, o = e.nss;
491
+ return a.path = (r || t.nid) + ":" + o, a;
492
+ }
493
+ }, ke = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/, Ae = {
494
+ scheme: "urn:uuid",
495
+ parse: function(e, t) {
496
+ var n = e;
497
+ return n.uuid = n.nss, n.nss = void 0, !t.tolerant && (!n.uuid || !n.uuid.match(ke)) && (n.error = n.error || "UUID is not valid."), n;
498
+ },
499
+ serialize: function(e, t) {
500
+ var n = e;
501
+ return n.nss = (e.uuid || "").toLowerCase(), n;
502
+ }
503
+ };
504
+ R[Y.scheme] = Y, R[pe.scheme] = pe, R[X.scheme] = X, R[he.scheme] = he, R[Ee.scheme] = Ee, R[Oe.scheme] = Oe, R[Ae.scheme] = Ae, e.SCHEMES = R, e.pctEncChar = z, e.pctDecChars = B, e.parse = G, e.removeDotSegments = K, e.serialize = q, e.resolveComponents = ce, e.resolve = le, e.normalize = ue, e.equal = de, e.escapeComponent = fe, e.unescapeComponent = J, Object.defineProperty(e, "__esModule", { value: !0 });
505
+ }));
506
+ })), import_uri_all$3 = /* @__PURE__ */ __toESM(require_uri_all(), 1);
507
+ const NavigationContext = createContext({
508
+ url: "/",
509
+ store: "url"
510
+ });
511
+ function defaultShouldHandle(e) {
512
+ return e.canIntercept && !e.downloadRequest;
513
+ }
514
+ const NavigationProvider = ({ children: e, store: n = "url", scoped: o, shouldHandle: s = defaultShouldHandle }) => {
515
+ let [c, l] = useState(null), [u, d] = useState(() => ({
516
+ store: n,
517
+ url: window.location.href
518
+ })), f = useMemo(() => (e) => {
519
+ let t = e.sourceElement;
520
+ return c && t && !c.contains(t) ? !0 : !s(e);
521
+ }, [s, c]);
522
+ useEffect(() => {
523
+ let e = (e) => {
524
+ if (f(e)) return;
525
+ let t = e.destination.url;
526
+ n === "memory" ? (e.preventDefault(), d((r) => {
527
+ if (e.sourceElement instanceof HTMLAnchorElement && e.navigationType === "push") {
528
+ let n = e.sourceElement.getAttribute("href");
529
+ n && !n.startsWith("/") && !/^[a-z]+:\/\//i.test(n) && (t = import_uri_all$3.default.resolve(r.url, n));
530
+ }
531
+ return {
532
+ ...r,
533
+ url: t,
534
+ store: n
535
+ };
536
+ })) : e.intercept({ async handler() {
537
+ d({
538
+ url: t,
539
+ store: n
540
+ });
541
+ } });
542
+ };
543
+ return navigation?.addEventListener("navigate", e), () => navigation?.removeEventListener("navigate", e);
544
+ }, [
545
+ f,
546
+ o,
547
+ n
548
+ ]);
549
+ let p = useMemo(() => ({
550
+ ...u,
551
+ setState: d
552
+ }), [u]);
553
+ return createElement(NavigationContext.Provider, { value: p }, o ? createElement("div", { ref: l }, e) : e);
554
+ };
555
+ function future(e) {
556
+ let t = {}, n = new Promise((e, n) => {
557
+ t.resolve = e, t.reject = n;
558
+ });
559
+ return n.resolve = t.resolve, n.reject = t.reject, e && n.catch(() => {}), n;
560
+ }
561
+ var import_uri_all$2 = /* @__PURE__ */ __toESM(require_uri_all(), 1);
562
+ function useNavigate() {
563
+ let { setState: e } = useContext(NavigationContext);
564
+ return useMemo(() => {
565
+ if (!e || !navigation) return navigation;
566
+ let t = (t, n) => {
567
+ let r = {
568
+ committed: future(!0),
569
+ finished: future(!0)
570
+ }, i = ({ committed: e, finished: t }) => {
571
+ e.then(r.committed.resolve, r.committed.reject), t.then(r.finished.resolve, r.finished.reject);
572
+ };
573
+ return e((e) => (Promise.resolve().then(() => {
574
+ try {
575
+ i(navigation.navigate(import_uri_all$2.default.resolve(e.url, t), n));
576
+ } catch {
577
+ i(navigation.navigate(t, n));
578
+ }
579
+ }), e)), r;
580
+ };
581
+ return new Proxy(navigation, { get(e, n, r) {
582
+ if (n === "navigate") return t;
583
+ let i = Reflect.get(e, n, r);
584
+ return typeof i == "function" ? i.bind(e) : i;
585
+ } });
586
+ }, [e]);
587
+ }
588
+ var import_uri_all$1 = /* @__PURE__ */ __toESM(require_uri_all(), 1), DUMMY_BASE = "fakeprotodonotuse://";
589
+ function resolveLocation(e, t) {
590
+ let n = import_uri_all$1.default.parse(import_uri_all$1.default.resolve(t, e));
591
+ return n.scheme = void 0, n.host = void 0, n.port = void 0, import_uri_all$1.default.serialize(n);
592
+ }
593
+ function useLocation(e, t) {
594
+ let r = useContext(NavigationContext), a = t ?? r.url;
595
+ return useMemo(() => {
596
+ if (typeof e == "string") return resolveLocation(e, a);
597
+ if (typeof e == "function") {
598
+ let t = new URL(a, DUMMY_BASE);
599
+ return resolveLocation((e(t) || t).href, a);
600
+ }
601
+ return resolveLocation("", a);
602
+ }, [e, a]);
603
+ }
604
+ var import_uri_all = /* @__PURE__ */ __toESM(require_uri_all(), 1);
605
+ function parseSearchParams(e) {
606
+ return new URLSearchParams(import_uri_all.default.parse(e || "").query);
607
+ }
608
+ function useQueryParam(e, t = !1) {
609
+ let n = useLocation();
610
+ return useMemo(() => {
611
+ try {
612
+ let r = parseSearchParams(n);
613
+ return t ? r.getAll(e) || [] : r.get(e);
614
+ } catch {
615
+ return null;
616
+ }
617
+ }, [
618
+ n,
619
+ t,
620
+ e
621
+ ]);
622
+ }
623
+ function mapQueryParams(e, t, n) {
624
+ let r = Object.fromEntries((t || []).map((e) => [e, null]).concat((n || []).map((e) => [e, []])));
625
+ return e.forEach((e, i) => {
626
+ if (!(t && !(t.includes(i) || n?.includes(i)))) if (!r[i]) r[i] = e;
627
+ else if (t?.includes(i)) return;
628
+ else Array.isArray(r[i]) ? r[i].push(e) : r[i] = [r[i], e];
629
+ }), r;
630
+ }
631
+ function useQueryParams(e, t) {
632
+ let n = useLocation();
633
+ return useMemo(() => {
634
+ let r = parseSearchParams(n);
635
+ return Array.isArray(e) ? mapQueryParams(r, e, t) : (e || mapQueryParams)(r);
636
+ }, [
637
+ n,
638
+ e,
639
+ t
640
+ ]);
641
+ }
642
+ function useLocationWithParam(e, t, n) {
643
+ return useLocation((n) => t === null ? n.searchParams.delete(e) : n.searchParams.set(e, t), n);
644
+ }
645
+ function useLocationWithParams(e, t) {
646
+ return useLocation((t) => {
647
+ for (let [n, r] of Object.entries(e)) r === null ? t.searchParams.delete(n) : Array.isArray(r) ? (t.searchParams.delete(n), r.forEach((e) => t.searchParams.append(n, e))) : t.searchParams.set(n, r);
648
+ return t;
649
+ }, t);
650
+ }
651
+ export { NavigationContext, NavigationProvider, mapQueryParams, parseSearchParams, resolveLocation, useLocation, useLocationWithParam, useLocationWithParams, useNavigate, useQueryParam, useQueryParams };
@@ -0,0 +1 @@
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`react`)):typeof define==`function`&&define.amd?define([`exports`,`react`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.useNavigationAPI={},e.React))})(this,function(e,t){var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,c=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),l=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=a(t),l=0,u=c.length,d;l<u;l++)d=c[l],!s.call(e,d)&&d!==n&&r(e,d,{get:(e=>t[e]).bind(null,d),enumerable:!(o=i(t,d))||o.enumerable});return e},u=(e,t,i)=>(i=e==null?{}:n(o(e)),l(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),d=c(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?r(e):typeof define==`function`&&define.amd?define([`exports`],r):r(n.URI=n.URI||{})})(e,(function(e){function t(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];if(t.length>1){t[0]=t[0].slice(0,-1);for(var r=t.length-1,i=1;i<r;++i)t[i]=t[i].slice(1,-1);return t[r]=t[r].slice(1),t.join(``)}else return t[0]}function n(e){return`(?:`+e+`)`}function r(e){return e===void 0?`undefined`:e===null?`null`:Object.prototype.toString.call(e).split(` `).pop().split(`]`).shift().toLowerCase()}function i(e){return e.toUpperCase()}function a(e){return e==null?[]:e instanceof Array?e:typeof e.length!=`number`||e.split||e.setInterval||e.call?[e]:Array.prototype.slice.call(e)}function o(e,t){var n=e;if(t)for(var r in t)n[r]=t[r];return n}function s(e){var r=`[A-Za-z]`,i=`[0-9]`,a=t(i,`[A-Fa-f]`),o=n(n(`%[EFef]`+a+`%`+a+a+`%`+a+a)+`|`+n(`%[89A-Fa-f]`+a+`%`+a+a)+`|`+n(`%`+a+a)),s=`[\\:\\/\\?\\#\\[\\]\\@]`,c=`[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]`,l=t(s,c),u=e?`[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]`:`[]`,d=e?`[\\uE000-\\uF8FF]`:`[]`,f=t(r,i,`[\\-\\.\\_\\~]`,u),p=n(r+t(r,i,`[\\+\\-\\.]`)+`*`),m=n(n(o+`|`+t(f,c,`[\\:]`))+`*`);n(n(`25[0-5]`)+`|`+n(`2[0-4]`+i)+`|`+n(`1`+i+i)+`|`+n(`[1-9]`+i)+`|`+i);var h=n(n(`25[0-5]`)+`|`+n(`2[0-4]`+i)+`|`+n(`1`+i+i)+`|`+n(`0?[1-9]`+i)+`|0?0?`+i),g=n(h+`\\.`+h+`\\.`+h+`\\.`+h),_=n(a+`{1,4}`),v=n(n(_+`\\:`+_)+`|`+g),y=n([n(n(_+`\\:`)+`{6}`+v),n(`\\:\\:`+n(_+`\\:`)+`{5}`+v),n(n(_)+`?\\:\\:`+n(_+`\\:`)+`{4}`+v),n(n(n(_+`\\:`)+`{0,1}`+_)+`?\\:\\:`+n(_+`\\:`)+`{3}`+v),n(n(n(_+`\\:`)+`{0,2}`+_)+`?\\:\\:`+n(_+`\\:`)+`{2}`+v),n(n(n(_+`\\:`)+`{0,3}`+_)+`?\\:\\:`+_+`\\:`+v),n(n(n(_+`\\:`)+`{0,4}`+_)+`?\\:\\:`+v),n(n(n(_+`\\:`)+`{0,5}`+_)+`?\\:\\:`+_),n(n(n(_+`\\:`)+`{0,6}`+_)+`?\\:\\:`)].join(`|`)),b=n(n(f+`|`+o)+`+`);n(y+`\\%25`+b);var x=n(y+n(`\\%25|\\%(?!`+a+`{2})`)+b),S=n(`[vV]`+a+`+\\.`+t(f,c,`[\\:]`)+`+`),C=n(`\\[`+n(x+`|`+y+`|`+S)+`\\]`),w=n(n(o+`|`+t(f,c))+`*`),T=n(C+`|`+g+`(?!`+w+`)|`+w),E=n(i+`*`),D=n(n(m+`@`)+`?`+T+n(`\\:`+E)+`?`),O=n(o+`|`+t(f,c,`[\\:\\@]`)),k=n(O+`*`),A=n(O+`+`),j=n(n(o+`|`+t(f,c,`[\\@]`))+`+`),M=n(n(`\\/`+k)+`*`),N=n(`\\/`+n(A+M)+`?`),P=n(j+M),F=n(A+M),I=`(?!`+O+`)`;n(M+`|`+N+`|`+P+`|`+F+`|`+I);var L=n(n(O+`|`+t(`[\\/\\?]`,d))+`*`),R=n(n(O+`|[\\/\\?]`)+`*`),z=n(n(`\\/\\/`+D+M)+`|`+N+`|`+F+`|`+I),B=n(p+`\\:`+z+n(`\\?`+L)+`?`+n(`\\#`+R)+`?`),V=n(n(n(`\\/\\/`+D+M)+`|`+N+`|`+P+`|`+I)+n(`\\?`+L)+`?`+n(`\\#`+R)+`?`);return n(B+`|`+V),n(p+`\\:`+z+n(`\\?`+L)+`?`),``+p+n(n(`\\/\\/(`+n(`(`+m+`)@`)+`?(`+T+`)`+n(`\\:(`+E+`)`)+`?)`)+`?(`+M+`|`+N+`|`+F+`|`+I+`)`)+n(`\\?(`+L+`)`)+n(`\\#(`+R+`)`),``+n(n(`\\/\\/(`+n(`(`+m+`)@`)+`?(`+T+`)`+n(`\\:(`+E+`)`)+`?)`)+`?(`+M+`|`+N+`|`+P+`|`+I+`)`)+n(`\\?(`+L+`)`)+n(`\\#(`+R+`)`),``+p+n(n(`\\/\\/(`+n(`(`+m+`)@`)+`?(`+T+`)`+n(`\\:(`+E+`)`)+`?)`)+`?(`+M+`|`+N+`|`+F+`|`+I+`)`)+n(`\\?(`+L+`)`),``+n(`\\#(`+R+`)`),``+n(`(`+m+`)@`)+T+n(`\\:(`+E+`)`),{NOT_SCHEME:new RegExp(t(`[^]`,r,i,`[\\+\\-\\.]`),`g`),NOT_USERINFO:new RegExp(t(`[^\\%\\:]`,f,c),`g`),NOT_HOST:new RegExp(t(`[^\\%\\[\\]\\:]`,f,c),`g`),NOT_PATH:new RegExp(t(`[^\\%\\/\\:\\@]`,f,c),`g`),NOT_PATH_NOSCHEME:new RegExp(t(`[^\\%\\/\\@]`,f,c),`g`),NOT_QUERY:new RegExp(t(`[^\\%]`,f,c,`[\\:\\@\\/\\?]`,d),`g`),NOT_FRAGMENT:new RegExp(t(`[^\\%]`,f,c,`[\\:\\@\\/\\?]`),`g`),ESCAPE:new RegExp(t(`[^]`,f,c),`g`),UNRESERVED:new RegExp(f,`g`),OTHER_CHARS:new RegExp(t(`[^\\%]`,f,l),`g`),PCT_ENCODED:new RegExp(o,`g`),IPV4ADDRESS:RegExp(`^(`+g+`)$`),IPV6ADDRESS:RegExp(`^\\[?(`+y+`)`+n(n(`\\%25|\\%(?!`+a+`{2})`)+`(`+b+`)`)+`?\\]?$`)}}var c=s(!1),l=s(!0),u=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o=e[Symbol.iterator](),s;!(r=(s=o.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(e){i=!0,a=e}finally{try{!r&&o.return&&o.return()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw TypeError(`Invalid attempt to destructure non-iterable instance`)}}(),d=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}else return Array.from(e)},f=2147483647,p=36,m=1,h=26,g=38,_=700,v=72,y=128,b=`-`,x=/^xn--/,S=/[^\0-\x7E]/,C=/[\x2E\u3002\uFF0E\uFF61]/g,w={overflow:`Overflow: input needs wider integers to process`,"not-basic":`Illegal input >= 0x80 (not a basic code point)`,"invalid-input":`Invalid input`},T=p-m,E=Math.floor,D=String.fromCharCode;function O(e){throw RangeError(w[e])}function k(e,t){for(var n=[],r=e.length;r--;)n[r]=t(e[r]);return n}function A(e,t){var n=e.split(`@`),r=``;n.length>1&&(r=n[0]+`@`,e=n[1]),e=e.replace(C,`.`);var i=k(e.split(`.`),t).join(`.`);return r+i}function j(e){for(var t=[],n=0,r=e.length;n<r;){var i=e.charCodeAt(n++);if(i>=55296&&i<=56319&&n<r){var a=e.charCodeAt(n++);(a&64512)==56320?t.push(((i&1023)<<10)+(a&1023)+65536):(t.push(i),n--)}else t.push(i)}return t}var M=function(e){return String.fromCodePoint.apply(String,d(e))},N=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:p},P=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},F=function(e,t,n){var r=0;for(e=n?E(e/_):e>>1,e+=E(e/t);e>T*h>>1;r+=p)e=E(e/T);return E(r+(T+1)*e/(e+g))},I=function(e){var t=[],n=e.length,r=0,i=y,a=v,o=e.lastIndexOf(b);o<0&&(o=0);for(var s=0;s<o;++s)e.charCodeAt(s)>=128&&O(`not-basic`),t.push(e.charCodeAt(s));for(var c=o>0?o+1:0;c<n;){for(var l=r,u=1,d=p;;d+=p){c>=n&&O(`invalid-input`);var g=N(e.charCodeAt(c++));(g>=p||g>E((f-r)/u))&&O(`overflow`),r+=g*u;var _=d<=a?m:d>=a+h?h:d-a;if(g<_)break;var x=p-_;u>E(f/x)&&O(`overflow`),u*=x}var S=t.length+1;a=F(r-l,S,l==0),E(r/S)>f-i&&O(`overflow`),i+=E(r/S),r%=S,t.splice(r++,0,i)}return String.fromCodePoint.apply(String,t)},L=function(e){var t=[];e=j(e);var n=e.length,r=y,i=0,a=v,o=!0,s=!1,c=void 0;try{for(var l=e[Symbol.iterator](),u;!(o=(u=l.next()).done);o=!0){var d=u.value;d<128&&t.push(D(d))}}catch(e){s=!0,c=e}finally{try{!o&&l.return&&l.return()}finally{if(s)throw c}}var g=t.length,_=g;for(g&&t.push(b);_<n;){var x=f,S=!0,C=!1,w=void 0;try{for(var T=e[Symbol.iterator](),k;!(S=(k=T.next()).done);S=!0){var A=k.value;A>=r&&A<x&&(x=A)}}catch(e){C=!0,w=e}finally{try{!S&&T.return&&T.return()}finally{if(C)throw w}}var M=_+1;x-r>E((f-i)/M)&&O(`overflow`),i+=(x-r)*M,r=x;var N=!0,I=!1,L=void 0;try{for(var R=e[Symbol.iterator](),z;!(N=(z=R.next()).done);N=!0){var B=z.value;if(B<r&&++i>f&&O(`overflow`),B==r){for(var V=i,H=p;;H+=p){var U=H<=a?m:H>=a+h?h:H-a;if(V<U)break;var W=V-U,G=p-U;t.push(D(P(U+W%G,0))),V=E(W/G)}t.push(D(P(V,0))),a=F(i,M,_==g),i=0,++_}}}catch(e){I=!0,L=e}finally{try{!N&&R.return&&R.return()}finally{if(I)throw L}}++i,++r}return t.join(``)},R={version:`2.1.0`,ucs2:{decode:j,encode:M},decode:I,encode:L,toASCII:function(e){return A(e,function(e){return S.test(e)?`xn--`+L(e):e})},toUnicode:function(e){return A(e,function(e){return x.test(e)?I(e.slice(4).toLowerCase()):e})}},z={};function B(e){var t=e.charCodeAt(0),n=void 0;return n=t<16?`%0`+t.toString(16).toUpperCase():t<128?`%`+t.toString(16).toUpperCase():t<2048?`%`+(t>>6|192).toString(16).toUpperCase()+`%`+(t&63|128).toString(16).toUpperCase():`%`+(t>>12|224).toString(16).toUpperCase()+`%`+(t>>6&63|128).toString(16).toUpperCase()+`%`+(t&63|128).toString(16).toUpperCase(),n}function V(e){for(var t=``,n=0,r=e.length;n<r;){var i=parseInt(e.substr(n+1,2),16);if(i<128)t+=String.fromCharCode(i),n+=3;else if(i>=194&&i<224){if(r-n>=6){var a=parseInt(e.substr(n+4,2),16);t+=String.fromCharCode((i&31)<<6|a&63)}else t+=e.substr(n,6);n+=6}else if(i>=224){if(r-n>=9){var o=parseInt(e.substr(n+4,2),16),s=parseInt(e.substr(n+7,2),16);t+=String.fromCharCode((i&15)<<12|(o&63)<<6|s&63)}else t+=e.substr(n,9);n+=9}else t+=e.substr(n,3),n+=3}return t}function H(e,t){function n(e){var n=V(e);return n.match(t.UNRESERVED)?n:e}return e.scheme&&=String(e.scheme).replace(t.PCT_ENCODED,n).toLowerCase().replace(t.NOT_SCHEME,``),e.userinfo!==void 0&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,n).replace(t.NOT_USERINFO,B).replace(t.PCT_ENCODED,i)),e.host!==void 0&&(e.host=String(e.host).replace(t.PCT_ENCODED,n).toLowerCase().replace(t.NOT_HOST,B).replace(t.PCT_ENCODED,i)),e.path!==void 0&&(e.path=String(e.path).replace(t.PCT_ENCODED,n).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,B).replace(t.PCT_ENCODED,i)),e.query!==void 0&&(e.query=String(e.query).replace(t.PCT_ENCODED,n).replace(t.NOT_QUERY,B).replace(t.PCT_ENCODED,i)),e.fragment!==void 0&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,n).replace(t.NOT_FRAGMENT,B).replace(t.PCT_ENCODED,i)),e}function U(e){return e.replace(/^0*(.*)/,`$1`)||`0`}function W(e,t){var n=u(e.match(t.IPV4ADDRESS)||[],2)[1];return n?n.split(`.`).map(U).join(`.`):e}function G(e,t){var n=u(e.match(t.IPV6ADDRESS)||[],3),r=n[1],i=n[2];if(r){for(var a=u(r.toLowerCase().split(`::`).reverse(),2),o=a[0],s=a[1],c=s?s.split(`:`).map(U):[],l=o.split(`:`).map(U),d=t.IPV4ADDRESS.test(l[l.length-1]),f=d?7:8,p=l.length-f,m=Array(f),h=0;h<f;++h)m[h]=c[h]||l[p+h]||``;d&&(m[f-1]=W(m[f-1],t));var g=m.reduce(function(e,t,n){if(!t||t===`0`){var r=e[e.length-1];r&&r.index+r.length===n?r.length++:e.push({index:n,length:1})}return e},[]).sort(function(e,t){return t.length-e.length})[0],_=void 0;if(g&&g.length>1){var v=m.slice(0,g.index),y=m.slice(g.index+g.length);_=v.join(`:`)+`::`+y.join(`:`)}else _=m.join(`:`);return i&&(_+=`%`+i),_}else return e}var ee=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,te=``.match(/(){0}/)[1]===void 0;function K(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n={},r=t.iri===!1?c:l;t.reference===`suffix`&&(e=(t.scheme?t.scheme+`:`:``)+`//`+e);var i=e.match(ee);if(i){te?(n.scheme=i[1],n.userinfo=i[3],n.host=i[4],n.port=parseInt(i[5],10),n.path=i[6]||``,n.query=i[7],n.fragment=i[8],isNaN(n.port)&&(n.port=i[5])):(n.scheme=i[1]||void 0,n.userinfo=e.indexOf(`@`)===-1?void 0:i[3],n.host=e.indexOf(`//`)===-1?void 0:i[4],n.port=parseInt(i[5],10),n.path=i[6]||``,n.query=e.indexOf(`?`)===-1?void 0:i[7],n.fragment=e.indexOf(`#`)===-1?void 0:i[8],isNaN(n.port)&&(n.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?i[4]:void 0)),n.host&&=G(W(n.host,r),r),n.scheme===void 0&&n.userinfo===void 0&&n.host===void 0&&n.port===void 0&&!n.path&&n.query===void 0?n.reference=`same-document`:n.scheme===void 0?n.reference=`relative`:n.fragment===void 0?n.reference=`absolute`:n.reference=`uri`,t.reference&&t.reference!==`suffix`&&t.reference!==n.reference&&(n.error=n.error||`URI is not a `+t.reference+` reference.`);var a=z[(t.scheme||n.scheme||``).toLowerCase()];if(!t.unicodeSupport&&(!a||!a.unicodeSupport)){if(n.host&&(t.domainHost||a&&a.domainHost))try{n.host=R.toASCII(n.host.replace(r.PCT_ENCODED,V).toLowerCase())}catch(e){n.error=n.error||`Host's domain name can not be converted to ASCII via punycode: `+e}H(n,c)}else H(n,r);a&&a.parse&&a.parse(n,t)}else n.error=n.error||`URI can not be parsed.`;return n}function ne(e,t){var n=t.iri===!1?c:l,r=[];return e.userinfo!==void 0&&(r.push(e.userinfo),r.push(`@`)),e.host!==void 0&&r.push(G(W(String(e.host),n),n).replace(n.IPV6ADDRESS,function(e,t,n){return`[`+t+(n?`%25`+n:``)+`]`})),(typeof e.port==`number`||typeof e.port==`string`)&&(r.push(`:`),r.push(String(e.port))),r.length?r.join(``):void 0}var re=/^\.\.?\//,ie=/^\/\.(\/|$)/,ae=/^\/\.\.(\/|$)/,oe=/^\/?(?:.|\n)*?(?=\/|$)/;function q(e){for(var t=[];e.length;)if(e.match(re))e=e.replace(re,``);else if(e.match(ie))e=e.replace(ie,`/`);else if(e.match(ae))e=e.replace(ae,`/`),t.pop();else if(e===`.`||e===`..`)e=``;else{var n=e.match(oe);if(n){var r=n[0];e=e.slice(r.length),t.push(r)}else throw Error(`Unexpected dot segment condition`)}return t.join(``)}function J(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.iri?l:c,r=[],i=z[(t.scheme||e.scheme||``).toLowerCase()];if(i&&i.serialize&&i.serialize(e,t),e.host&&!n.IPV6ADDRESS.test(e.host)&&(t.domainHost||i&&i.domainHost))try{e.host=t.iri?R.toUnicode(e.host):R.toASCII(e.host.replace(n.PCT_ENCODED,V).toLowerCase())}catch(n){e.error=e.error||`Host's domain name can not be converted to `+(t.iri?`Unicode`:`ASCII`)+` via punycode: `+n}H(e,n),t.reference!==`suffix`&&e.scheme&&(r.push(e.scheme),r.push(`:`));var a=ne(e,t);if(a!==void 0&&(t.reference!==`suffix`&&r.push(`//`),r.push(a),e.path&&e.path.charAt(0)!==`/`&&r.push(`/`)),e.path!==void 0){var o=e.path;!t.absolutePath&&(!i||!i.absolutePath)&&(o=q(o)),a===void 0&&(o=o.replace(/^\/\//,`/%2F`)),r.push(o)}return e.query!==void 0&&(r.push(`?`),r.push(e.query)),e.fragment!==void 0&&(r.push(`#`),r.push(e.fragment)),r.join(``)}function se(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=arguments[3],i={};return r||(e=K(J(e,n),n),t=K(J(t,n),n)),n||={},!n.tolerant&&t.scheme?(i.scheme=t.scheme,i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=q(t.path||``),i.query=t.query):(t.userinfo!==void 0||t.host!==void 0||t.port!==void 0?(i.userinfo=t.userinfo,i.host=t.host,i.port=t.port,i.path=q(t.path||``),i.query=t.query):(t.path?(t.path.charAt(0)===`/`?i.path=q(t.path):((e.userinfo!==void 0||e.host!==void 0||e.port!==void 0)&&!e.path?i.path=`/`+t.path:e.path?i.path=e.path.slice(0,e.path.lastIndexOf(`/`)+1)+t.path:i.path=t.path,i.path=q(i.path)),i.query=t.query):(i.path=e.path,t.query===void 0?i.query=e.query:i.query=t.query),i.userinfo=e.userinfo,i.host=e.host,i.port=e.port),i.scheme=e.scheme),i.fragment=t.fragment,i}function ce(e,t,n){var r=o({scheme:`null`},n);return J(se(K(e,r),K(t,r),r,!0),r)}function le(e,t){return typeof e==`string`?e=J(K(e,t),t):r(e)===`object`&&(e=K(J(e,t),t)),e}function ue(e,t,n){return typeof e==`string`?e=J(K(e,n),n):r(e)===`object`&&(e=J(e,n)),typeof t==`string`?t=J(K(t,n),n):r(t)===`object`&&(t=J(t,n)),e===t}function de(e,t){return e&&e.toString().replace(!t||!t.iri?c.ESCAPE:l.ESCAPE,B)}function Y(e,t){return e&&e.toString().replace(!t||!t.iri?c.PCT_ENCODED:l.PCT_ENCODED,V)}var X={scheme:`http`,domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||`HTTP URIs must have a host.`),e},serialize:function(e,t){var n=String(e.scheme).toLowerCase()===`https`;return(e.port===(n?443:80)||e.port===``)&&(e.port=void 0),e.path||=`/`,e}},fe={scheme:`https`,domainHost:X.domainHost,parse:X.parse,serialize:X.serialize};function pe(e){return typeof e.secure==`boolean`?e.secure:String(e.scheme).toLowerCase()===`wss`}var Z={scheme:`ws`,domainHost:!0,parse:function(e,t){var n=e;return n.secure=pe(n),n.resourceName=(n.path||`/`)+(n.query?`?`+n.query:``),n.path=void 0,n.query=void 0,n},serialize:function(e,t){if((e.port===(pe(e)?443:80)||e.port===``)&&(e.port=void 0),typeof e.secure==`boolean`&&(e.scheme=e.secure?`wss`:`ws`,e.secure=void 0),e.resourceName){var n=u(e.resourceName.split(`?`),2),r=n[0],i=n[1];e.path=r&&r!==`/`?r:void 0,e.query=i,e.resourceName=void 0}return e.fragment=void 0,e}},me={scheme:`wss`,domainHost:Z.domainHost,parse:Z.parse,serialize:Z.serialize},he={},ge=`[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]`,Q=`[0-9A-Fa-f]`,_e=n(n(`%[EFef]`+Q+`%`+Q+Q+`%`+Q+Q)+`|`+n(`%[89A-Fa-f]`+Q+`%`+Q+Q)+`|`+n(`%`+Q+Q)),ve="[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]",ye=t(`[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]`,`[\\"\\\\]`),be=`[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]`,xe=new RegExp(ge,`g`),$=new RegExp(_e,`g`),Se=new RegExp(t(`[^]`,ve,`[\\.]`,`[\\"]`,ye),`g`),Ce=new RegExp(t(`[^]`,ge,be),`g`),we=Ce;function Te(e){var t=V(e);return t.match(xe)?t:e}var Ee={scheme:`mailto`,parse:function(e,t){var n=e,r=n.to=n.path?n.path.split(`,`):[];if(n.path=void 0,n.query){for(var i=!1,a={},o=n.query.split(`&`),s=0,c=o.length;s<c;++s){var l=o[s].split(`=`);switch(l[0]){case`to`:for(var u=l[1].split(`,`),d=0,f=u.length;d<f;++d)r.push(u[d]);break;case`subject`:n.subject=Y(l[1],t);break;case`body`:n.body=Y(l[1],t);break;default:i=!0,a[Y(l[0],t)]=Y(l[1],t);break}}i&&(n.headers=a)}n.query=void 0;for(var p=0,m=r.length;p<m;++p){var h=r[p].split(`@`);if(h[0]=Y(h[0]),t.unicodeSupport)h[1]=Y(h[1],t).toLowerCase();else try{h[1]=R.toASCII(Y(h[1],t).toLowerCase())}catch(e){n.error=n.error||`Email address's domain name can not be converted to ASCII via punycode: `+e}r[p]=h.join(`@`)}return n},serialize:function(e,t){var n=e,r=a(e.to);if(r){for(var o=0,s=r.length;o<s;++o){var c=String(r[o]),l=c.lastIndexOf(`@`),u=c.slice(0,l).replace($,Te).replace($,i).replace(Se,B),d=c.slice(l+1);try{d=t.iri?R.toUnicode(d):R.toASCII(Y(d,t).toLowerCase())}catch(e){n.error=n.error||`Email address's domain name can not be converted to `+(t.iri?`Unicode`:`ASCII`)+` via punycode: `+e}r[o]=u+`@`+d}n.path=r.join(`,`)}var f=e.headers=e.headers||{};e.subject&&(f.subject=e.subject),e.body&&(f.body=e.body);var p=[];for(var m in f)f[m]!==he[m]&&p.push(m.replace($,Te).replace($,i).replace(Ce,B)+`=`+f[m].replace($,Te).replace($,i).replace(we,B));return p.length&&(n.query=p.join(`&`)),n}},De=/^([^\:]+)\:(.*)/,Oe={scheme:`urn`,parse:function(e,t){var n=e.path&&e.path.match(De),r=e;if(n){var i=t.scheme||r.scheme||`urn`,a=n[1].toLowerCase(),o=n[2],s=z[i+`:`+(t.nid||a)];r.nid=a,r.nss=o,r.path=void 0,s&&(r=s.parse(r,t))}else r.error=r.error||`URN can not be parsed.`;return r},serialize:function(e,t){var n=t.scheme||e.scheme||`urn`,r=e.nid,i=z[n+`:`+(t.nid||r)];i&&(e=i.serialize(e,t));var a=e,o=e.nss;return a.path=(r||t.nid)+`:`+o,a}},ke=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,Ae={scheme:`urn:uuid`,parse:function(e,t){var n=e;return n.uuid=n.nss,n.nss=void 0,!t.tolerant&&(!n.uuid||!n.uuid.match(ke))&&(n.error=n.error||`UUID is not valid.`),n},serialize:function(e,t){var n=e;return n.nss=(e.uuid||``).toLowerCase(),n}};z[X.scheme]=X,z[fe.scheme]=fe,z[Z.scheme]=Z,z[me.scheme]=me,z[Ee.scheme]=Ee,z[Oe.scheme]=Oe,z[Ae.scheme]=Ae,e.SCHEMES=z,e.pctEncChar=B,e.pctDecChars=V,e.parse=K,e.removeDotSegments=q,e.serialize=J,e.resolveComponents=se,e.resolve=ce,e.normalize=le,e.equal=ue,e.escapeComponent=de,e.unescapeComponent=Y,Object.defineProperty(e,`__esModule`,{value:!0})}))})),f=u(d(),1);let p=(0,t.createContext)({url:`/`,store:`url`});function m(e){return e.canIntercept&&!e.downloadRequest}let h=({children:e,store:n=`url`,scoped:r,shouldHandle:i=m})=>{let[a,o]=(0,t.useState)(null),[s,c]=(0,t.useState)(()=>({store:n,url:window.location.href})),l=(0,t.useMemo)(()=>e=>{let t=e.sourceElement;return a&&t&&!a.contains(t)?!0:!i(e)},[i,a]);(0,t.useEffect)(()=>{let e=e=>{if(l(e))return;let t=e.destination.url;n===`memory`?(e.preventDefault(),c(r=>{if(e.sourceElement instanceof HTMLAnchorElement&&e.navigationType===`push`){let n=e.sourceElement.getAttribute(`href`);n&&!n.startsWith(`/`)&&!/^[a-z]+:\/\//i.test(n)&&(t=f.default.resolve(r.url,n))}return{...r,url:t,store:n}})):e.intercept({async handler(){c({url:t,store:n})}})};return navigation?.addEventListener(`navigate`,e),()=>navigation?.removeEventListener(`navigate`,e)},[l,r,n]);let u=(0,t.useMemo)(()=>({...s,setState:c}),[s]);return(0,t.createElement)(p.Provider,{value:u},r?(0,t.createElement)(`div`,{ref:o},e):e)};function g(e){let t={},n=new Promise((e,n)=>{t.resolve=e,t.reject=n});return n.resolve=t.resolve,n.reject=t.reject,e&&n.catch(()=>{}),n}var _=u(d(),1);function v(){let{setState:e}=(0,t.useContext)(p);return(0,t.useMemo)(()=>{if(!e||!navigation)return navigation;let t=(t,n)=>{let r={committed:g(!0),finished:g(!0)},i=({committed:e,finished:t})=>{e.then(r.committed.resolve,r.committed.reject),t.then(r.finished.resolve,r.finished.reject)};return e(e=>(Promise.resolve().then(()=>{try{i(navigation.navigate(_.default.resolve(e.url,t),n))}catch{i(navigation.navigate(t,n))}}),e)),r};return new Proxy(navigation,{get(e,n,r){if(n===`navigate`)return t;let i=Reflect.get(e,n,r);return typeof i==`function`?i.bind(e):i}})},[e])}var y=u(d(),1),b=`fakeprotodonotuse://`;function x(e,t){let n=y.default.parse(y.default.resolve(t,e));return n.scheme=void 0,n.host=void 0,n.port=void 0,y.default.serialize(n)}function S(e,n){let r=(0,t.useContext)(p),i=n??r.url;return(0,t.useMemo)(()=>{if(typeof e==`string`)return x(e,i);if(typeof e==`function`){let t=new URL(i,b);return x((e(t)||t).href,i)}return x(``,i)},[e,i])}var C=u(d(),1);function w(e){return new URLSearchParams(C.default.parse(e||``).query)}function T(e,n=!1){let r=S();return(0,t.useMemo)(()=>{try{let t=w(r);return n?t.getAll(e)||[]:t.get(e)}catch{return null}},[r,n,e])}function E(e,t,n){let r=Object.fromEntries((t||[]).map(e=>[e,null]).concat((n||[]).map(e=>[e,[]])));return e.forEach((e,i)=>{if(!(t&&!(t.includes(i)||n?.includes(i))))if(!r[i])r[i]=e;else if(t?.includes(i))return;else Array.isArray(r[i])?r[i].push(e):r[i]=[r[i],e]}),r}function D(e,n){let r=S();return(0,t.useMemo)(()=>{let t=w(r);return Array.isArray(e)?E(t,e,n):(e||E)(t)},[r,e,n])}function O(e,t,n){return S(n=>t===null?n.searchParams.delete(e):n.searchParams.set(e,t),n)}function k(e,t){return S(t=>{for(let[n,r]of Object.entries(e))r===null?t.searchParams.delete(n):Array.isArray(r)?(t.searchParams.delete(n),r.forEach(e=>t.searchParams.append(n,e))):t.searchParams.set(n,r);return t},t)}e.NavigationContext=p,e.NavigationProvider=h,e.mapQueryParams=E,e.parseSearchParams=w,e.resolveLocation=x,e.useLocation=S,e.useLocationWithParam=O,e.useLocationWithParams=k,e.useNavigate=v,e.useQueryParam=T,e.useQueryParams=D});
@@ -0,0 +1 @@
1
+ export declare function useNavigate(): Navigation | undefined;
@@ -0,0 +1,11 @@
1
+ type Resolution<T> = {
2
+ resolve: (value: T) => void;
3
+ reject: (reason?: unknown) => void;
4
+ };
5
+ type Future<T> = Promise<T> & Resolution<T>;
6
+ /**
7
+ * Returns a Promise that can be resolved or rejected from outside.
8
+ * @param suppressUncaught If true, adds a dummy catch handler to bypass browsers' uncaught error logging.
9
+ */
10
+ export declare function future<T>(suppressUncaught?: boolean): Future<T>;
11
+ export {};
package/package.json CHANGED
@@ -19,9 +19,16 @@
19
19
  "types": "./dist/index.d.ts",
20
20
  "import": "./dist/use-navigation-api.es.js",
21
21
  "require": "./dist/use-navigation-api.umd.js"
22
- }
22
+ },
23
+ "./src": "./src/index.ts",
24
+ "./src/*": "./src/*"
23
25
  },
24
- "version": "0.2.0",
26
+ "files": [
27
+ "dist",
28
+ "src",
29
+ "README.md"
30
+ ],
31
+ "version": "0.4.0",
25
32
  "type": "module",
26
33
  "scripts": {
27
34
  "build": "tsc -b && vite build",
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./navigationProvider";
2
2
  export * from "./useNavigate";
3
- export * from "./location/useLocation";
4
3
  export * from "./location/useQueryParam";
4
+ export * from "./location/useQueryParams";
5
+ export * from "./location/useLocation";
5
6
  export * from "./location/useLocationWithParam";
@@ -0,0 +1,54 @@
1
+ import { useLocation } from "src/location/useLocation.ts";
2
+ import { useMemo } from "react";
3
+ import { parseSearchParams } from "src/location/useQueryParam.ts";
4
+
5
+ export type ParamsMapper<T> = (params: URLSearchParams) => T;
6
+
7
+ export function mapQueryParams(
8
+ params: URLSearchParams,
9
+ keys?: string[],
10
+ arrayKeys?: string[],
11
+ ) {
12
+ const result: Record<string, string | string[] | null> = Object.fromEntries(
13
+ (keys || [])
14
+ .map((key) => [key, null as string | string[] | null])
15
+ .concat((arrayKeys || []).map((key) => [key, []])),
16
+ );
17
+ params.forEach((value, key) => {
18
+ if (keys && !(keys.includes(key) || arrayKeys?.includes(key))) return;
19
+ if (!result[key]) result[key] = value;
20
+ else if (keys?.includes(key)) return;
21
+ else if (Array.isArray(result[key])) result[key].push(value);
22
+ else result[key] = [result[key] as string, value];
23
+ });
24
+ return result;
25
+ }
26
+
27
+ /**
28
+ * Returns the first value of each query parameter found in the url.
29
+ */
30
+ export function useQueryParams(): Record<string, string>;
31
+ /**
32
+ * Returns the first value of each query parameter found in keys, and all values of each parameter found in arrayKeys.
33
+ * Note that typescript types of K and M should not overlap - manual typing or casting variables to `as const` may be required.
34
+ */
35
+ export function useQueryParams<K extends string, M extends string>(
36
+ keys: K[],
37
+ arrayKeys?: M[],
38
+ ): Record<K, string | null> & Record<M, string[]>;
39
+ /**
40
+ * Maps SearchParams to a custom type using the provided mapper function.
41
+ */
42
+ export function useQueryParams<T>(mapper: ParamsMapper<T>): T;
43
+ export function useQueryParams(
44
+ mapping?: string[] | ParamsMapper<unknown>,
45
+ arrayKeys?: string[],
46
+ ) {
47
+ const location = useLocation();
48
+ return useMemo(() => {
49
+ const params = parseSearchParams(location);
50
+ return Array.isArray(mapping)
51
+ ? mapQueryParams(params, mapping, arrayKeys)
52
+ : (mapping || mapQueryParams)(params);
53
+ }, [location, mapping, arrayKeys]);
54
+ }
package/eslint.config.js DELETED
@@ -1,22 +0,0 @@
1
- import js from "@eslint/js";
2
- import globals from "globals";
3
- import reactHooks from "eslint-plugin-react-hooks";
4
- import reactRefresh from "eslint-plugin-react-refresh";
5
- import tseslint from "typescript-eslint";
6
- import { defineConfig, globalIgnores } from "eslint/config";
7
-
8
- export default defineConfig([
9
- globalIgnores(["dist"]),
10
- {
11
- files: ["**/*.{ts,tsx}"],
12
- extends: [
13
- js.configs.recommended,
14
- tseslint.configs.recommended,
15
- reactHooks.configs.flat.recommended,
16
- ],
17
- languageOptions: {
18
- ecmaVersion: 2020,
19
- globals: globals.browser,
20
- },
21
- },
22
- ]);
package/tsconfig.app.json DELETED
@@ -1,30 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
- "target": "ES2022",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "types": ["vite/client"],
9
- "skipLibCheck": true,
10
-
11
- /* Bundler mode */
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "moduleDetection": "force",
16
- "noEmit": true,
17
- "jsx": "react-jsx",
18
-
19
- /* Linting */
20
- "strict": true,
21
- "noUnusedLocals": true,
22
- "noUnusedParameters": true,
23
- "erasableSyntaxOnly": true,
24
- "noFallthroughCasesInSwitch": true,
25
- "noUncheckedSideEffectImports": true,
26
-
27
- "baseUrl": "."
28
- },
29
- "include": ["src"]
30
- }
package/tsconfig.json DELETED
@@ -1,7 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [
4
- { "path": "./tsconfig.app.json" },
5
- { "path": "./tsconfig.node.json" }
6
- ]
7
- }
@@ -1,26 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
- "target": "ES2023",
5
- "lib": ["ES2023"],
6
- "module": "ESNext",
7
- "types": ["node"],
8
- "skipLibCheck": true,
9
-
10
- /* Bundler mode */
11
- "moduleResolution": "bundler",
12
- "allowImportingTsExtensions": true,
13
- "verbatimModuleSyntax": true,
14
- "moduleDetection": "force",
15
- "noEmit": true,
16
-
17
- /* Linting */
18
- "strict": true,
19
- "noUnusedLocals": true,
20
- "noUnusedParameters": true,
21
- "erasableSyntaxOnly": true,
22
- "noFallthroughCasesInSwitch": true,
23
- "noUncheckedSideEffectImports": true
24
- },
25
- "include": ["vite.config.ts"]
26
- }
package/vite.config.ts DELETED
@@ -1,28 +0,0 @@
1
- import { defineConfig } from "vite";
2
- import { resolve } from "path";
3
- import dts from "unplugin-dts/vite";
4
- import react from "@vitejs/plugin-react";
5
- import tsconfigPaths from "vite-tsconfig-paths";
6
-
7
- export default defineConfig({
8
- build: {
9
- lib: {
10
- entry: resolve(__dirname, "src/index.ts"),
11
- name: "useNavigationAPI",
12
- fileName: (format) => `use-navigation-api.${format}.js`,
13
- },
14
- rollupOptions: {
15
- external: ["react", "react-dom", "react/jsx-runtime"],
16
- output: {
17
- globals: {
18
- react: "React",
19
- },
20
- },
21
- },
22
- },
23
- plugins: [
24
- react(),
25
- dts({ tsconfigPath: "./tsconfig.app.json" }),
26
- tsconfigPaths(),
27
- ],
28
- });