@tanstack/react-router 0.0.1-beta.9 → 1.0.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.
Files changed (229) hide show
  1. package/LICENSE +21 -0
  2. package/build/cjs/CatchBoundary.js +128 -0
  3. package/build/cjs/CatchBoundary.js.map +1 -0
  4. package/build/cjs/Matches.js +233 -0
  5. package/build/cjs/Matches.js.map +1 -0
  6. package/build/cjs/RouterProvider.js +170 -0
  7. package/build/cjs/RouterProvider.js.map +1 -0
  8. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js +2 -22
  9. package/build/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -1
  10. package/build/cjs/_virtual/with-selector.development.js +16 -0
  11. package/build/cjs/_virtual/with-selector.development.js.map +1 -0
  12. package/build/cjs/_virtual/with-selector.js +16 -0
  13. package/build/cjs/_virtual/with-selector.js.map +1 -0
  14. package/build/cjs/_virtual/with-selector.production.min.js +16 -0
  15. package/build/cjs/_virtual/with-selector.production.min.js.map +1 -0
  16. package/build/cjs/awaited.js +43 -0
  17. package/build/cjs/awaited.js.map +1 -0
  18. package/build/cjs/build/esm/index.js +79 -0
  19. package/build/cjs/build/esm/index.js.map +1 -0
  20. package/build/cjs/defer.js +37 -0
  21. package/build/cjs/defer.js.map +1 -0
  22. package/build/cjs/fileRoute.js +27 -0
  23. package/build/cjs/fileRoute.js.map +1 -0
  24. package/build/cjs/index.js +130 -0
  25. package/build/cjs/index.js.map +1 -0
  26. package/build/cjs/lazyRouteComponent.js +54 -0
  27. package/build/cjs/lazyRouteComponent.js.map +1 -0
  28. package/build/cjs/link.js +223 -0
  29. package/build/cjs/link.js.map +1 -0
  30. package/build/cjs/node_modules/.pnpm/@tanstack_react-store@0.2.1_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/modern/index.js +47 -0
  31. package/build/cjs/node_modules/.pnpm/@tanstack_react-store@0.2.1_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/modern/index.js.map +1 -0
  32. package/build/cjs/node_modules/.pnpm/@tanstack_store@0.1.3/node_modules/@tanstack/store/build/modern/index.js +70 -0
  33. package/build/cjs/node_modules/.pnpm/@tanstack_store@0.1.3/node_modules/@tanstack/store/build/modern/index.js.map +1 -0
  34. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +188 -0
  35. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -0
  36. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +39 -0
  37. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -0
  38. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/with-selector.js +26 -0
  39. package/build/cjs/node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -0
  40. package/build/cjs/packages/react-router/src/CatchBoundary.js +123 -0
  41. package/build/cjs/packages/react-router/src/CatchBoundary.js.map +1 -0
  42. package/build/cjs/packages/react-router/src/Matches.js +235 -0
  43. package/build/cjs/packages/react-router/src/Matches.js.map +1 -0
  44. package/build/cjs/packages/react-router/src/RouterProvider.js +144 -0
  45. package/build/cjs/packages/react-router/src/RouterProvider.js.map +1 -0
  46. package/build/cjs/packages/react-router/src/awaited.js +43 -0
  47. package/build/cjs/packages/react-router/src/awaited.js.map +1 -0
  48. package/build/cjs/packages/react-router/src/defer.js +37 -0
  49. package/build/cjs/packages/react-router/src/defer.js.map +1 -0
  50. package/build/cjs/packages/react-router/src/fileRoute.js +27 -0
  51. package/build/cjs/packages/react-router/src/fileRoute.js.map +1 -0
  52. package/build/cjs/packages/react-router/src/index.js +61 -0
  53. package/build/cjs/packages/react-router/src/index.js.map +1 -0
  54. package/build/cjs/packages/react-router/src/lazyRouteComponent.js +54 -0
  55. package/build/cjs/packages/react-router/src/lazyRouteComponent.js.map +1 -0
  56. package/build/cjs/packages/react-router/src/link.js +148 -0
  57. package/build/cjs/packages/react-router/src/link.js.map +1 -0
  58. package/build/cjs/packages/react-router/src/path.js +209 -0
  59. package/build/cjs/packages/react-router/src/path.js.map +1 -0
  60. package/build/cjs/packages/react-router/src/qss.js +63 -0
  61. package/build/cjs/packages/react-router/src/qss.js.map +1 -0
  62. package/build/cjs/packages/react-router/src/react.js +634 -0
  63. package/build/cjs/packages/react-router/src/react.js.map +1 -0
  64. package/build/cjs/packages/react-router/src/redirects.js +25 -0
  65. package/build/cjs/packages/react-router/src/redirects.js.map +1 -0
  66. package/build/cjs/packages/react-router/src/route.js +134 -0
  67. package/build/cjs/packages/react-router/src/route.js.map +1 -0
  68. package/build/cjs/packages/react-router/src/router.js +1111 -0
  69. package/build/cjs/packages/react-router/src/router.js.map +1 -0
  70. package/build/cjs/packages/react-router/src/scroll-restoration.js +53 -0
  71. package/build/cjs/packages/react-router/src/scroll-restoration.js.map +1 -0
  72. package/build/cjs/packages/react-router/src/searchParams.js +81 -0
  73. package/build/cjs/packages/react-router/src/searchParams.js.map +1 -0
  74. package/build/cjs/packages/react-router/src/useBlocker.js +61 -0
  75. package/build/cjs/packages/react-router/src/useBlocker.js.map +1 -0
  76. package/build/cjs/packages/react-router/src/useNavigate.js +75 -0
  77. package/build/cjs/packages/react-router/src/useNavigate.js.map +1 -0
  78. package/build/cjs/packages/react-router/src/useParams.js +26 -0
  79. package/build/cjs/packages/react-router/src/useParams.js.map +1 -0
  80. package/build/cjs/packages/react-router/src/useSearch.js +25 -0
  81. package/build/cjs/packages/react-router/src/useSearch.js.map +1 -0
  82. package/build/cjs/packages/react-router/src/utils.js +239 -0
  83. package/build/cjs/packages/react-router/src/utils.js.map +1 -0
  84. package/build/cjs/path.js +214 -0
  85. package/build/cjs/path.js.map +1 -0
  86. package/build/cjs/qss.js +63 -0
  87. package/build/cjs/qss.js.map +1 -0
  88. package/build/cjs/react/CatchBoundary.js +123 -0
  89. package/build/cjs/react/CatchBoundary.js.map +1 -0
  90. package/build/cjs/react/awaited.js +43 -0
  91. package/build/cjs/react/awaited.js.map +1 -0
  92. package/build/cjs/react/defer.js +37 -0
  93. package/build/cjs/react/defer.js.map +1 -0
  94. package/build/cjs/react.js +650 -0
  95. package/build/cjs/react.js.map +1 -0
  96. package/build/cjs/redirects.js +28 -0
  97. package/build/cjs/redirects.js.map +1 -0
  98. package/build/cjs/route.js +191 -0
  99. package/build/cjs/route.js.map +1 -0
  100. package/build/cjs/router.js +1085 -0
  101. package/build/cjs/router.js.map +1 -0
  102. package/build/cjs/routerConfig.js +209 -0
  103. package/build/cjs/routerConfig.js.map +1 -0
  104. package/build/cjs/scroll-restoration.js +202 -0
  105. package/build/cjs/scroll-restoration.js.map +1 -0
  106. package/build/cjs/searchParams.js +81 -0
  107. package/build/cjs/searchParams.js.map +1 -0
  108. package/build/cjs/src/CatchBoundary.js +126 -0
  109. package/build/cjs/src/CatchBoundary.js.map +1 -0
  110. package/build/cjs/src/Matches.js +235 -0
  111. package/build/cjs/src/Matches.js.map +1 -0
  112. package/build/cjs/src/RouterProvider.js +1051 -0
  113. package/build/cjs/src/RouterProvider.js.map +1 -0
  114. package/build/cjs/src/awaited.js +45 -0
  115. package/build/cjs/src/awaited.js.map +1 -0
  116. package/build/cjs/src/defer.js +39 -0
  117. package/build/cjs/src/defer.js.map +1 -0
  118. package/build/cjs/src/fileRoute.js +29 -0
  119. package/build/cjs/src/fileRoute.js.map +1 -0
  120. package/build/cjs/src/index.js +134 -0
  121. package/build/cjs/src/index.js.map +1 -0
  122. package/build/cjs/src/lazyRouteComponent.js +57 -0
  123. package/build/cjs/src/lazyRouteComponent.js.map +1 -0
  124. package/build/cjs/src/link.js +151 -0
  125. package/build/cjs/src/link.js.map +1 -0
  126. package/build/cjs/src/path.js +211 -0
  127. package/build/cjs/src/path.js.map +1 -0
  128. package/build/cjs/src/qss.js +65 -0
  129. package/build/cjs/src/qss.js.map +1 -0
  130. package/build/cjs/src/redirects.js +27 -0
  131. package/build/cjs/src/redirects.js.map +1 -0
  132. package/build/cjs/src/route.js +139 -0
  133. package/build/cjs/src/route.js.map +1 -0
  134. package/build/cjs/src/router.js +203 -0
  135. package/build/cjs/src/router.js.map +1 -0
  136. package/build/cjs/src/scroll-restoration.js +186 -0
  137. package/build/cjs/src/scroll-restoration.js.map +1 -0
  138. package/build/cjs/src/searchParams.js +83 -0
  139. package/build/cjs/src/searchParams.js.map +1 -0
  140. package/build/cjs/src/useBlocker.js +64 -0
  141. package/build/cjs/src/useBlocker.js.map +1 -0
  142. package/build/cjs/src/useNavigate.js +78 -0
  143. package/build/cjs/src/useNavigate.js.map +1 -0
  144. package/build/cjs/src/useParams.js +28 -0
  145. package/build/cjs/src/useParams.js.map +1 -0
  146. package/build/cjs/src/useSearch.js +27 -0
  147. package/build/cjs/src/useSearch.js.map +1 -0
  148. package/build/cjs/src/utils.js +230 -0
  149. package/build/cjs/src/utils.js.map +1 -0
  150. package/build/cjs/useBlocker.js +55 -0
  151. package/build/cjs/useBlocker.js.map +1 -0
  152. package/build/cjs/useNavigate.js +86 -0
  153. package/build/cjs/useNavigate.js.map +1 -0
  154. package/build/cjs/useParams.js +26 -0
  155. package/build/cjs/useParams.js.map +1 -0
  156. package/build/cjs/useSearch.js +25 -0
  157. package/build/cjs/useSearch.js.map +1 -0
  158. package/build/cjs/useStore.js +99 -0
  159. package/build/cjs/useStore.js.map +1 -0
  160. package/build/cjs/utils.js +241 -0
  161. package/build/cjs/utils.js.map +1 -0
  162. package/build/esm/index.js +2300 -2534
  163. package/build/esm/index.js.map +1 -1
  164. package/build/stats-html.html +3498 -2694
  165. package/build/stats-react.json +1204 -44
  166. package/build/types/CatchBoundary.d.ts +36 -0
  167. package/build/types/Matches.d.ts +64 -0
  168. package/build/types/RouteMatch.d.ts +23 -0
  169. package/build/types/RouterProvider.d.ts +35 -0
  170. package/build/types/awaited.d.ts +9 -0
  171. package/build/types/defer.d.ts +19 -0
  172. package/build/types/fileRoute.d.ts +38 -0
  173. package/build/types/history.d.ts +7 -0
  174. package/build/types/index.d.ts +919 -58
  175. package/build/types/injectHtml.d.ts +0 -0
  176. package/build/types/lazyRouteComponent.d.ts +2 -0
  177. package/build/types/link.d.ts +93 -0
  178. package/build/types/location.d.ts +12 -0
  179. package/build/types/path.d.ts +17 -0
  180. package/build/types/qss.d.ts +2 -0
  181. package/build/types/react/CatchBoundary.d.ts +33 -0
  182. package/build/types/react/awaited.d.ts +9 -0
  183. package/build/types/react/defer.d.ts +19 -0
  184. package/build/types/react.d.ts +141 -0
  185. package/build/types/redirects.d.ts +11 -0
  186. package/build/types/route.d.ts +283 -0
  187. package/build/types/routeInfo.d.ts +31 -0
  188. package/build/types/router.d.ts +186 -0
  189. package/build/types/scroll-restoration.d.ts +18 -0
  190. package/build/types/searchParams.d.ts +7 -0
  191. package/build/types/useBlocker.d.ts +9 -0
  192. package/build/types/useNavigate.d.ts +19 -0
  193. package/build/types/useParams.d.ts +7 -0
  194. package/build/types/useSearch.d.ts +7 -0
  195. package/build/types/useStore.d.ts +12 -0
  196. package/build/types/utils.d.ts +69 -0
  197. package/build/umd/index.development.js +2897 -2493
  198. package/build/umd/index.development.js.map +1 -1
  199. package/build/umd/index.production.js +4 -4
  200. package/build/umd/index.production.js.map +1 -1
  201. package/package.json +12 -10
  202. package/src/CatchBoundary.tsx +101 -0
  203. package/src/Matches.tsx +423 -0
  204. package/src/RouterProvider.tsx +252 -0
  205. package/src/awaited.tsx +40 -0
  206. package/src/defer.ts +55 -0
  207. package/src/fileRoute.ts +152 -0
  208. package/src/history.ts +8 -0
  209. package/src/index.tsx +28 -619
  210. package/src/lazyRouteComponent.tsx +33 -0
  211. package/src/link.tsx +603 -0
  212. package/src/location.ts +13 -0
  213. package/src/path.ts +261 -0
  214. package/src/qss.ts +53 -0
  215. package/src/redirects.ts +39 -0
  216. package/src/route.ts +882 -0
  217. package/src/routeInfo.ts +84 -0
  218. package/src/router.ts +1671 -0
  219. package/src/scroll-restoration.tsx +230 -0
  220. package/src/searchParams.ts +79 -0
  221. package/src/useBlocker.tsx +27 -0
  222. package/src/useNavigate.tsx +111 -0
  223. package/src/useParams.tsx +25 -0
  224. package/src/useSearch.tsx +25 -0
  225. package/src/utils.ts +360 -0
  226. package/build/cjs/react-router/src/index.js +0 -458
  227. package/build/cjs/react-router/src/index.js.map +0 -1
  228. package/build/cjs/router-core/build/esm/index.js +0 -2524
  229. package/build/cjs/router-core/build/esm/index.js.map +0 -1
@@ -0,0 +1,202 @@
1
+ /**
2
+ * @tanstack/react-router/src/index.tsx
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ var React = require('react');
14
+ var RouterProvider = require('./RouterProvider.js');
15
+ var utils = require('./utils.js');
16
+
17
+ function _interopNamespaceDefault(e) {
18
+ var n = Object.create(null);
19
+ if (e) {
20
+ Object.keys(e).forEach(function (k) {
21
+ if (k !== 'default') {
22
+ var d = Object.getOwnPropertyDescriptor(e, k);
23
+ Object.defineProperty(n, k, d.get ? d : {
24
+ enumerable: true,
25
+ get: function () { return e[k]; }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n.default = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
35
+
36
+ const useLayoutEffect = typeof window !== 'undefined' ? React__namespace.useLayoutEffect : React__namespace.useEffect;
37
+ const windowKey = 'window';
38
+ const delimiter = '___';
39
+ let weakScrolledElements = new WeakSet();
40
+ const sessionsStorage = typeof window !== 'undefined' && window.sessionStorage;
41
+ let cache = sessionsStorage ? (() => {
42
+ const storageKey = 'tsr-scroll-restoration-v2';
43
+ const state = JSON.parse(window.sessionStorage.getItem(storageKey) || 'null') || {
44
+ cached: {},
45
+ next: {}
46
+ };
47
+ return {
48
+ state,
49
+ set: updater => {
50
+ cache.state = utils.functionalUpdate(updater, cache.state);
51
+ window.sessionStorage.setItem(storageKey, JSON.stringify(cache.state));
52
+ }
53
+ };
54
+ })() : undefined;
55
+ const defaultGetKey = location => location.state.key;
56
+ function useScrollRestoration(options) {
57
+ const router = RouterProvider.useRouter();
58
+ useLayoutEffect(() => {
59
+ const getKey = options?.getKey || defaultGetKey;
60
+ const {
61
+ history
62
+ } = window;
63
+ if (history.scrollRestoration) {
64
+ history.scrollRestoration = 'manual';
65
+ }
66
+ const onScroll = event => {
67
+ if (weakScrolledElements.has(event.target)) return;
68
+ weakScrolledElements.add(event.target);
69
+ let elementSelector = '';
70
+ if (event.target === document || event.target === window) {
71
+ elementSelector = windowKey;
72
+ } else {
73
+ const attrId = event.target.getAttribute('data-scroll-restoration-id');
74
+ if (attrId) {
75
+ elementSelector = `[data-scroll-restoration-id="${attrId}"]`;
76
+ } else {
77
+ elementSelector = getCssSelector(event.target);
78
+ }
79
+ }
80
+ if (!cache.state.next[elementSelector]) {
81
+ cache.set(c => ({
82
+ ...c,
83
+ next: {
84
+ ...c.next,
85
+ [elementSelector]: {
86
+ scrollX: NaN,
87
+ scrollY: NaN
88
+ }
89
+ }
90
+ }));
91
+ }
92
+ };
93
+ if (typeof document !== 'undefined') {
94
+ document.addEventListener('scroll', onScroll, true);
95
+ }
96
+ const unsubOnBeforeLoad = router.subscribe('onBeforeLoad', event => {
97
+ if (event.pathChanged) {
98
+ const restoreKey = getKey(event.fromLocation);
99
+ for (const elementSelector in cache.state.next) {
100
+ const entry = cache.state.next[elementSelector];
101
+ if (elementSelector === windowKey) {
102
+ entry.scrollX = window.scrollX || 0;
103
+ entry.scrollY = window.scrollY || 0;
104
+ } else if (elementSelector) {
105
+ const element = document.querySelector(elementSelector);
106
+ entry.scrollX = element?.scrollLeft || 0;
107
+ entry.scrollY = element?.scrollTop || 0;
108
+ }
109
+ cache.set(c => {
110
+ const next = {
111
+ ...c.next
112
+ };
113
+ delete next[elementSelector];
114
+ return {
115
+ ...c,
116
+ next,
117
+ cached: {
118
+ ...c.cached,
119
+ [[restoreKey, elementSelector].join(delimiter)]: entry
120
+ }
121
+ };
122
+ });
123
+ }
124
+ }
125
+ });
126
+ const unsubOnResolved = router.subscribe('onResolved', event => {
127
+ if (event.pathChanged) {
128
+ if (!router.resetNextScroll) {
129
+ return;
130
+ }
131
+ router.resetNextScroll = true;
132
+ const getKey = options?.getKey || defaultGetKey;
133
+ const restoreKey = getKey(event.toLocation);
134
+ let windowRestored = false;
135
+ for (const cacheKey in cache.state.cached) {
136
+ const entry = cache.state.cached[cacheKey];
137
+ const [key, elementSelector] = cacheKey.split(delimiter);
138
+ if (key === restoreKey) {
139
+ if (elementSelector === windowKey) {
140
+ windowRestored = true;
141
+ window.scrollTo(entry.scrollX, entry.scrollY);
142
+ } else if (elementSelector) {
143
+ const element = document.querySelector(elementSelector);
144
+ if (element) {
145
+ element.scrollLeft = entry.scrollX;
146
+ element.scrollTop = entry.scrollY;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ if (!windowRestored) {
152
+ window.scrollTo(0, 0);
153
+ }
154
+ cache.set(c => ({
155
+ ...c,
156
+ next: {}
157
+ }));
158
+ weakScrolledElements = new WeakSet();
159
+ }
160
+ });
161
+ return () => {
162
+ document.removeEventListener('scroll', onScroll);
163
+ unsubOnBeforeLoad();
164
+ unsubOnResolved();
165
+ };
166
+ }, []);
167
+ }
168
+ function ScrollRestoration(props) {
169
+ useScrollRestoration(props);
170
+ return null;
171
+ }
172
+ function useElementScrollRestoration(options) {
173
+ const router = RouterProvider.useRouter();
174
+ const getKey = options?.getKey || defaultGetKey;
175
+ let elementSelector = '';
176
+ if (options.id) {
177
+ elementSelector = `[data-scroll-restoration-id="${options.id}"]`;
178
+ } else {
179
+ const element = options.getElement?.();
180
+ if (!element) {
181
+ return;
182
+ }
183
+ elementSelector = getCssSelector(element);
184
+ }
185
+ const restoreKey = getKey(router.latestLocation);
186
+ const cacheKey = [restoreKey, elementSelector].join(delimiter);
187
+ return cache.state.cached[cacheKey];
188
+ }
189
+ function getCssSelector(el) {
190
+ let path = [],
191
+ parent;
192
+ while (parent = el.parentNode) {
193
+ path.unshift(`${el.tagName}:nth-child(${[].indexOf.call(parent.children, el) + 1})`);
194
+ el = parent;
195
+ }
196
+ return `${path.join(' > ')}`.toLowerCase();
197
+ }
198
+
199
+ exports.ScrollRestoration = ScrollRestoration;
200
+ exports.useElementScrollRestoration = useElementScrollRestoration;
201
+ exports.useScrollRestoration = useScrollRestoration;
202
+ //# sourceMappingURL=scroll-restoration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll-restoration.js","sources":["../../src/scroll-restoration.tsx"],"sourcesContent":["import * as React from 'react'\n\nconst useLayoutEffect =\n typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect\n\nimport { ParsedLocation } from './location'\nimport { useRouter } from './RouterProvider'\nimport { NonNullableUpdater, functionalUpdate } from './utils'\n\nconst windowKey = 'window'\nconst delimiter = '___'\n\nlet weakScrolledElements = new WeakSet<any>()\n\ntype CacheValue = Record<string, { scrollX: number; scrollY: number }>\ntype CacheState = {\n cached: CacheValue\n next: CacheValue\n}\n\ntype Cache = {\n state: CacheState\n set: (updater: NonNullableUpdater<CacheState>) => void\n}\n\nconst sessionsStorage = typeof window !== 'undefined' && window.sessionStorage\n\nlet cache: Cache = sessionsStorage\n ? (() => {\n const storageKey = 'tsr-scroll-restoration-v2'\n\n const state: CacheState = JSON.parse(\n window.sessionStorage.getItem(storageKey) || 'null',\n ) || { cached: {}, next: {} }\n\n return {\n state,\n set: (updater) => {\n cache.state = functionalUpdate(updater, cache.state)\n window.sessionStorage.setItem(storageKey, JSON.stringify(cache.state))\n },\n }\n })()\n : (undefined as any)\n\nexport type ScrollRestorationOptions = {\n getKey?: (location: ParsedLocation) => string\n}\n\nconst defaultGetKey = (location: ParsedLocation) => location.state.key!\n\nexport function useScrollRestoration(options?: ScrollRestorationOptions) {\n const router = useRouter()\n\n useLayoutEffect(() => {\n const getKey = options?.getKey || defaultGetKey\n\n const { history } = window\n if (history.scrollRestoration) {\n history.scrollRestoration = 'manual'\n }\n\n const onScroll = (event: Event) => {\n if (weakScrolledElements.has(event.target)) return\n weakScrolledElements.add(event.target)\n\n let elementSelector = ''\n\n if (event.target === document || event.target === window) {\n elementSelector = windowKey\n } else {\n const attrId = (event.target as Element).getAttribute(\n 'data-scroll-restoration-id',\n )\n\n if (attrId) {\n elementSelector = `[data-scroll-restoration-id=\"${attrId}\"]`\n } else {\n elementSelector = getCssSelector(event.target)\n }\n }\n\n if (!cache.state.next[elementSelector]) {\n cache.set((c) => ({\n ...c,\n next: {\n ...c.next,\n [elementSelector]: {\n scrollX: NaN,\n scrollY: NaN,\n },\n },\n }))\n }\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', onScroll, true)\n }\n\n const unsubOnBeforeLoad = router.subscribe('onBeforeLoad', (event) => {\n if (event.pathChanged) {\n const restoreKey = getKey(event.fromLocation)\n for (const elementSelector in cache.state.next) {\n const entry = cache.state.next[elementSelector]!\n if (elementSelector === windowKey) {\n entry.scrollX = window.scrollX || 0\n entry.scrollY = window.scrollY || 0\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n entry.scrollX = element?.scrollLeft || 0\n entry.scrollY = element?.scrollTop || 0\n }\n\n cache.set((c) => {\n const next = { ...c.next }\n delete next[elementSelector]\n\n return {\n ...c,\n next,\n cached: {\n ...c.cached,\n [[restoreKey, elementSelector].join(delimiter)]: entry,\n },\n }\n })\n }\n }\n })\n\n const unsubOnResolved = router.subscribe('onResolved', (event) => {\n if (event.pathChanged) {\n if (!router.resetNextScroll) {\n return\n }\n\n router.resetNextScroll = true\n\n const getKey = options?.getKey || defaultGetKey\n\n const restoreKey = getKey(event.toLocation)\n let windowRestored = false\n\n for (const cacheKey in cache.state.cached) {\n const entry = cache.state.cached[cacheKey]!\n const [key, elementSelector] = cacheKey.split(delimiter)\n if (key === restoreKey) {\n if (elementSelector === windowKey) {\n windowRestored = true\n window.scrollTo(entry.scrollX, entry.scrollY)\n } else if (elementSelector) {\n const element = document.querySelector(elementSelector)\n if (element) {\n element.scrollLeft = entry.scrollX\n element.scrollTop = entry.scrollY\n }\n }\n }\n }\n\n if (!windowRestored) {\n window.scrollTo(0, 0)\n }\n\n cache.set((c) => ({ ...c, next: {} }))\n weakScrolledElements = new WeakSet<any>()\n }\n })\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n unsubOnBeforeLoad()\n unsubOnResolved()\n }\n }, [])\n}\n\nexport function ScrollRestoration(props: ScrollRestorationOptions) {\n useScrollRestoration(props)\n return null\n}\n\nexport function useElementScrollRestoration(\n options: (\n | {\n id: string\n getElement?: () => Element | undefined | null\n }\n | {\n id?: string\n getElement: () => Element | undefined | null\n }\n ) & {\n getKey?: (location: ParsedLocation) => string\n },\n) {\n const router = useRouter()\n const getKey = options?.getKey || defaultGetKey\n\n let elementSelector = ''\n\n if (options.id) {\n elementSelector = `[data-scroll-restoration-id=\"${options.id}\"]`\n } else {\n const element = options.getElement?.()\n if (!element) {\n return\n }\n elementSelector = getCssSelector(element)\n }\n\n const restoreKey = getKey(router.latestLocation)\n const cacheKey = [restoreKey, elementSelector].join(delimiter)\n return cache.state.cached[cacheKey]\n}\n\nfunction getCssSelector(el: any): string {\n let path = [],\n parent\n while ((parent = el.parentNode)) {\n path.unshift(\n `${el.tagName}:nth-child(${\n ([].indexOf as any).call(parent.children, el) + 1\n })`,\n )\n el = parent\n }\n return `${path.join(' > ')}`.toLowerCase()\n}\n"],"names":["useLayoutEffect","window","React","useEffect","windowKey","delimiter","weakScrolledElements","WeakSet","sessionsStorage","sessionStorage","cache","storageKey","state","JSON","parse","getItem","cached","next","set","updater","functionalUpdate","setItem","stringify","undefined","defaultGetKey","location","key","useScrollRestoration","options","router","useRouter","getKey","history","scrollRestoration","onScroll","event","has","target","add","elementSelector","document","attrId","getAttribute","getCssSelector","c","scrollX","NaN","scrollY","addEventListener","unsubOnBeforeLoad","subscribe","pathChanged","restoreKey","fromLocation","entry","element","querySelector","scrollLeft","scrollTop","join","unsubOnResolved","resetNextScroll","toLocation","windowRestored","cacheKey","split","scrollTo","removeEventListener","ScrollRestoration","props","useElementScrollRestoration","id","getElement","latestLocation","el","path","parent","parentNode","unshift","tagName","indexOf","call","children","toLowerCase"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @tanstack/react-router/src/index.tsx
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ var qss = require('./qss.js');
14
+
15
+ const defaultParseSearch = parseSearchWith(JSON.parse);
16
+ const defaultStringifySearch = stringifySearchWith(JSON.stringify, JSON.parse);
17
+ function parseSearchWith(parser) {
18
+ return searchStr => {
19
+ if (searchStr.substring(0, 1) === '?') {
20
+ searchStr = searchStr.substring(1);
21
+ }
22
+ let query = qss.decode(searchStr);
23
+
24
+ // Try to parse any query params that might be json
25
+ for (let key in query) {
26
+ const value = query[key];
27
+ if (typeof value === 'string') {
28
+ try {
29
+ query[key] = parser(value);
30
+ } catch (err) {
31
+ //
32
+ }
33
+ }
34
+ }
35
+ return query;
36
+ };
37
+ }
38
+ function stringifySearchWith(stringify, parser) {
39
+ function stringifyValue(val) {
40
+ if (typeof val === 'object' && val !== null) {
41
+ try {
42
+ return stringify(val);
43
+ } catch (err) {
44
+ // silent
45
+ }
46
+ } else if (typeof val === 'string' && typeof parser === 'function') {
47
+ try {
48
+ // Check if it's a valid parseable string.
49
+ // If it is, then stringify it again.
50
+ parser(val);
51
+ return stringify(val);
52
+ } catch (err) {
53
+ // silent
54
+ }
55
+ }
56
+ return val;
57
+ }
58
+ return search => {
59
+ search = {
60
+ ...search
61
+ };
62
+ if (search) {
63
+ Object.keys(search).forEach(key => {
64
+ const val = search[key];
65
+ if (typeof val === 'undefined' || val === undefined) {
66
+ delete search[key];
67
+ } else {
68
+ search[key] = stringifyValue(val);
69
+ }
70
+ });
71
+ }
72
+ const searchStr = qss.encode(search).toString();
73
+ return searchStr ? `?${searchStr}` : '';
74
+ };
75
+ }
76
+
77
+ exports.defaultParseSearch = defaultParseSearch;
78
+ exports.defaultStringifySearch = defaultStringifySearch;
79
+ exports.parseSearchWith = parseSearchWith;
80
+ exports.stringifySearchWith = stringifySearchWith;
81
+ //# sourceMappingURL=searchParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchParams.js","sources":["../../src/searchParams.ts"],"sourcesContent":["import { decode, encode } from './qss'\nimport { AnySearchSchema } from './route'\n\nexport const defaultParseSearch = parseSearchWith(JSON.parse)\nexport const defaultStringifySearch = stringifySearchWith(\n JSON.stringify,\n JSON.parse,\n)\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): AnySearchSchema => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n let query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (let key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n }\n }\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any,\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n\nexport type SearchSerializer = (searchObj: Record<string, any>) => string\nexport type SearchParser = (searchStr: string) => Record<string, any>\n"],"names":["defaultParseSearch","parseSearchWith","JSON","parse","defaultStringifySearch","stringifySearchWith","stringify","parser","searchStr","substring","query","decode","key","value","err","stringifyValue","val","search","Object","keys","forEach","undefined","encode","toString"],"mappings":";;;;;;;;;;;;;;AAGO,MAAMA,kBAAkB,GAAGC,eAAe,CAACC,IAAI,CAACC,KAAK,EAAC;AAChDC,MAAAA,sBAAsB,GAAGC,mBAAmB,CACvDH,IAAI,CAACI,SAAS,EACdJ,IAAI,CAACC,KACP,EAAC;AAEM,SAASF,eAAeA,CAACM,MAA4B,EAAE;AAC5D,EAAA,OAAQC,SAAiB,IAAsB;IAC7C,IAAIA,SAAS,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;AACrCD,MAAAA,SAAS,GAAGA,SAAS,CAACC,SAAS,CAAC,CAAC,CAAC,CAAA;AACpC,KAAA;AAEA,IAAA,IAAIC,KAA8B,GAAGC,UAAM,CAACH,SAAS,CAAC,CAAA;;AAEtD;AACA,IAAA,KAAK,IAAII,GAAG,IAAIF,KAAK,EAAE;AACrB,MAAA,MAAMG,KAAK,GAAGH,KAAK,CAACE,GAAG,CAAC,CAAA;AACxB,MAAA,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI;AACFH,UAAAA,KAAK,CAACE,GAAG,CAAC,GAAGL,MAAM,CAACM,KAAK,CAAC,CAAA;SAC3B,CAAC,OAAOC,GAAG,EAAE;AACZ;AAAA,SAAA;AAEJ,OAAA;AACF,KAAA;AAEA,IAAA,OAAOJ,KAAK,CAAA;GACb,CAAA;AACH,CAAA;AAEO,SAASL,mBAAmBA,CACjCC,SAAkC,EAClCC,MAA6B,EAC7B;EACA,SAASQ,cAAcA,CAACC,GAAQ,EAAE;IAChC,IAAI,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,EAAE;MAC3C,IAAI;QACF,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;KAEH,MAAM,IAAI,OAAOE,GAAG,KAAK,QAAQ,IAAI,OAAOT,MAAM,KAAK,UAAU,EAAE;MAClE,IAAI;AACF;AACA;QACAA,MAAM,CAACS,GAAG,CAAC,CAAA;QACX,OAAOV,SAAS,CAACU,GAAG,CAAC,CAAA;OACtB,CAAC,OAAOF,GAAG,EAAE;AACZ;AAAA,OAAA;AAEJ,KAAA;AACA,IAAA,OAAOE,GAAG,CAAA;AACZ,GAAA;AAEA,EAAA,OAAQC,MAA2B,IAAK;AACtCA,IAAAA,MAAM,GAAG;MAAE,GAAGA,MAAAA;KAAQ,CAAA;AAEtB,IAAA,IAAIA,MAAM,EAAE;MACVC,MAAM,CAACC,IAAI,CAACF,MAAM,CAAC,CAACG,OAAO,CAAER,GAAG,IAAK;AACnC,QAAA,MAAMI,GAAG,GAAGC,MAAM,CAACL,GAAG,CAAC,CAAA;QACvB,IAAI,OAAOI,GAAG,KAAK,WAAW,IAAIA,GAAG,KAAKK,SAAS,EAAE;UACnD,OAAOJ,MAAM,CAACL,GAAG,CAAC,CAAA;AACpB,SAAC,MAAM;AACLK,UAAAA,MAAM,CAACL,GAAG,CAAC,GAAGG,cAAc,CAACC,GAAG,CAAC,CAAA;AACnC,SAAA;AACF,OAAC,CAAC,CAAA;AACJ,KAAA;IAEA,MAAMR,SAAS,GAAGc,UAAM,CAACL,MAAgC,CAAC,CAACM,QAAQ,EAAE,CAAA;AAErE,IAAA,OAAOf,SAAS,GAAI,CAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,GAAG,EAAE,CAAA;GACxC,CAAA;AACH;;;;;;;"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @tanstack/react-router/src/index.tsx
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ Object.defineProperty(exports, '__esModule', { value: true });
14
+
15
+ var React = require('react');
16
+
17
+ function _interopNamespace(e) {
18
+ if (e && e.__esModule) return e;
19
+ var n = Object.create(null);
20
+ if (e) {
21
+ Object.keys(e).forEach(function (k) {
22
+ if (k !== 'default') {
23
+ var d = Object.getOwnPropertyDescriptor(e, k);
24
+ Object.defineProperty(n, k, d.get ? d : {
25
+ enumerable: true,
26
+ get: function () { return e[k]; }
27
+ });
28
+ }
29
+ });
30
+ }
31
+ n["default"] = e;
32
+ return Object.freeze(n);
33
+ }
34
+
35
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
36
+
37
+ function CatchBoundary(props) {
38
+ const errorComponent = props.errorComponent ?? ErrorComponent;
39
+ return /*#__PURE__*/React__namespace.createElement(CatchBoundaryImpl, {
40
+ resetKey: props.resetKey,
41
+ onCatch: props.onCatch,
42
+ children: ({
43
+ error
44
+ }) => {
45
+ if (error) {
46
+ return /*#__PURE__*/React__namespace.createElement(errorComponent, {
47
+ error
48
+ });
49
+ }
50
+ return props.children;
51
+ }
52
+ });
53
+ }
54
+ class CatchBoundaryImpl extends React__namespace.Component {
55
+ state = {
56
+ error: null
57
+ };
58
+ static getDerivedStateFromError(error) {
59
+ return {
60
+ error
61
+ };
62
+ }
63
+ componentDidUpdate(prevProps, prevState) {
64
+ if (prevState.error && prevProps.resetKey !== this.props.resetKey) {
65
+ this.setState({
66
+ error: null
67
+ });
68
+ }
69
+ }
70
+ componentDidCatch(error) {
71
+ console.error(error);
72
+ this.props.onCatch?.(error);
73
+ }
74
+ render() {
75
+ return this.props.children(this.state);
76
+ }
77
+ }
78
+ function ErrorComponent({
79
+ error
80
+ }) {
81
+ const [show, setShow] = React__namespace.useState(process.env.NODE_ENV !== 'production');
82
+ return /*#__PURE__*/React__namespace.createElement("div", {
83
+ style: {
84
+ padding: '.5rem',
85
+ maxWidth: '100%'
86
+ }
87
+ }, /*#__PURE__*/React__namespace.createElement("div", {
88
+ style: {
89
+ display: 'flex',
90
+ alignItems: 'center',
91
+ gap: '.5rem'
92
+ }
93
+ }, /*#__PURE__*/React__namespace.createElement("strong", {
94
+ style: {
95
+ fontSize: '1rem'
96
+ }
97
+ }, "Something went wrong!"), /*#__PURE__*/React__namespace.createElement("button", {
98
+ style: {
99
+ appearance: 'none',
100
+ fontSize: '.6em',
101
+ border: '1px solid currentColor',
102
+ padding: '.1rem .2rem',
103
+ fontWeight: 'bold',
104
+ borderRadius: '.25rem'
105
+ },
106
+ onClick: () => setShow(d => !d)
107
+ }, show ? 'Hide Error' : 'Show Error')), /*#__PURE__*/React__namespace.createElement("div", {
108
+ style: {
109
+ height: '.25rem'
110
+ }
111
+ }), show ? /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement("pre", {
112
+ style: {
113
+ fontSize: '.7em',
114
+ border: '1px solid red',
115
+ borderRadius: '.25rem',
116
+ padding: '.3rem',
117
+ color: 'red',
118
+ overflow: 'auto'
119
+ }
120
+ }, error.message ? /*#__PURE__*/React__namespace.createElement("code", null, error.message) : null)) : null);
121
+ }
122
+
123
+ exports.CatchBoundary = CatchBoundary;
124
+ exports.CatchBoundaryImpl = CatchBoundaryImpl;
125
+ exports.ErrorComponent = ErrorComponent;
126
+ //# sourceMappingURL=CatchBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CatchBoundary.js","sources":["../../../src/CatchBoundary.tsx"],"sourcesContent":["import * as React from 'react'\n\nexport function CatchBoundary(props: {\n resetKey: string\n children: any\n errorComponent?: any\n onCatch: (error: any) => void\n}) {\n const errorComponent = props.errorComponent ?? ErrorComponent\n\n return (\n <CatchBoundaryImpl\n resetKey={props.resetKey}\n onCatch={props.onCatch}\n children={({ error }) => {\n if (error) {\n return React.createElement(errorComponent, {\n error,\n })\n }\n\n return props.children\n }}\n />\n )\n}\n\nexport class CatchBoundaryImpl extends React.Component<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: (error: any) => void\n}> {\n state = { error: null } as any\n static getDerivedStateFromError(error: any) {\n return { error }\n }\n componentDidUpdate(\n prevProps: Readonly<{\n resetKey: string\n children: (props: { error: any; reset: () => void }) => any\n onCatch?: ((error: any, info: any) => void) | undefined\n }>,\n prevState: any,\n ): void {\n if (prevState.error && prevProps.resetKey !== this.props.resetKey) {\n this.setState({ error: null })\n }\n }\n componentDidCatch(error: any) {\n console.error(error)\n this.props.onCatch?.(error)\n }\n render() {\n return this.props.children(this.state)\n }\n}\n\nexport function ErrorComponent({ error }: { error: any }) {\n const [show, setShow] = React.useState(process.env.NODE_ENV !== 'production')\n\n return (\n <div style={{ padding: '.5rem', maxWidth: '100%' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '.5rem' }}>\n <strong style={{ fontSize: '1rem' }}>Something went wrong!</strong>\n <button\n style={{\n appearance: 'none',\n fontSize: '.6em',\n border: '1px solid currentColor',\n padding: '.1rem .2rem',\n fontWeight: 'bold',\n borderRadius: '.25rem',\n }}\n onClick={() => setShow((d) => !d)}\n >\n {show ? 'Hide Error' : 'Show Error'}\n </button>\n </div>\n <div style={{ height: '.25rem' }} />\n {show ? (\n <div>\n <pre\n style={{\n fontSize: '.7em',\n border: '1px solid red',\n borderRadius: '.25rem',\n padding: '.3rem',\n color: 'red',\n overflow: 'auto',\n }}\n >\n {error.message ? <code>{error.message}</code> : null}\n </pre>\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["CatchBoundary","props","errorComponent","ErrorComponent","React","createElement","CatchBoundaryImpl","resetKey","onCatch","children","error","Component","state","getDerivedStateFromError","componentDidUpdate","prevProps","prevState","setState","componentDidCatch","console","render","show","setShow","useState","process","env","NODE_ENV","style","padding","maxWidth","display","alignItems","gap","fontSize","appearance","border","fontWeight","borderRadius","onClick","d","height","color","overflow","message"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,SAASA,aAAaA,CAACC,KAK7B,EAAE;AACD,EAAA,MAAMC,cAAc,GAAGD,KAAK,CAACC,cAAc,IAAIC,cAAc,CAAA;AAE7D,EAAA,oBACEC,gBAAA,CAAAC,aAAA,CAACC,iBAAiB,EAAA;IAChBC,QAAQ,EAAEN,KAAK,CAACM,QAAS;IACzBC,OAAO,EAAEP,KAAK,CAACO,OAAQ;AACvBC,IAAAA,QAAQ,EAAEA,CAAC;AAAEC,MAAAA,KAAAA;AAAM,KAAC,KAAK;AACvB,MAAA,IAAIA,KAAK,EAAE;AACT,QAAA,oBAAON,gBAAK,CAACC,aAAa,CAACH,cAAc,EAAE;AACzCQ,UAAAA,KAAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAA;MAEA,OAAOT,KAAK,CAACQ,QAAQ,CAAA;AACvB,KAAA;AAAE,GACH,CAAC,CAAA;AAEN,CAAA;AAEO,MAAMH,iBAAiB,SAASF,gBAAK,CAACO,SAAS,CAInD;AACDC,EAAAA,KAAK,GAAG;AAAEF,IAAAA,KAAK,EAAE,IAAA;GAAM,CAAA;EACvB,OAAOG,wBAAwBA,CAACH,KAAU,EAAE;IAC1C,OAAO;AAAEA,MAAAA,KAAAA;KAAO,CAAA;AAClB,GAAA;AACAI,EAAAA,kBAAkBA,CAChBC,SAIE,EACFC,SAAc,EACR;AACN,IAAA,IAAIA,SAAS,CAACN,KAAK,IAAIK,SAAS,CAACR,QAAQ,KAAK,IAAI,CAACN,KAAK,CAACM,QAAQ,EAAE;MACjE,IAAI,CAACU,QAAQ,CAAC;AAAEP,QAAAA,KAAK,EAAE,IAAA;AAAK,OAAC,CAAC,CAAA;AAChC,KAAA;AACF,GAAA;EACAQ,iBAAiBA,CAACR,KAAU,EAAE;AAC5BS,IAAAA,OAAO,CAACT,KAAK,CAACA,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,CAACT,KAAK,CAACO,OAAO,GAAGE,KAAK,CAAC,CAAA;AAC7B,GAAA;AACAU,EAAAA,MAAMA,GAAG;IACP,OAAO,IAAI,CAACnB,KAAK,CAACQ,QAAQ,CAAC,IAAI,CAACG,KAAK,CAAC,CAAA;AACxC,GAAA;AACF,CAAA;AAEO,SAAST,cAAcA,CAAC;AAAEO,EAAAA,KAAAA;AAAsB,CAAC,EAAE;AACxD,EAAA,MAAM,CAACW,IAAI,EAAEC,OAAO,CAAC,GAAGlB,gBAAK,CAACmB,QAAQ,CAACC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,CAAC,CAAA;EAE7E,oBACEtB,gBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKsB,IAAAA,KAAK,EAAE;AAAEC,MAAAA,OAAO,EAAE,OAAO;AAAEC,MAAAA,QAAQ,EAAE,MAAA;AAAO,KAAA;GAC/CzB,eAAAA,gBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKsB,IAAAA,KAAK,EAAE;AAAEG,MAAAA,OAAO,EAAE,MAAM;AAAEC,MAAAA,UAAU,EAAE,QAAQ;AAAEC,MAAAA,GAAG,EAAE,OAAA;AAAQ,KAAA;GAChE5B,eAAAA,gBAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQsB,IAAAA,KAAK,EAAE;AAAEM,MAAAA,QAAQ,EAAE,MAAA;AAAO,KAAA;AAAE,GAAA,EAAC,uBAA6B,CAAC,eACnE7B,gBAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEsB,IAAAA,KAAK,EAAE;AACLO,MAAAA,UAAU,EAAE,MAAM;AAClBD,MAAAA,QAAQ,EAAE,MAAM;AAChBE,MAAAA,MAAM,EAAE,wBAAwB;AAChCP,MAAAA,OAAO,EAAE,aAAa;AACtBQ,MAAAA,UAAU,EAAE,MAAM;AAClBC,MAAAA,YAAY,EAAE,QAAA;KACd;IACFC,OAAO,EAAEA,MAAMhB,OAAO,CAAEiB,CAAC,IAAK,CAACA,CAAC,CAAA;GAE/BlB,EAAAA,IAAI,GAAG,YAAY,GAAG,YACjB,CACL,CAAC,eACNjB,gBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKsB,IAAAA,KAAK,EAAE;AAAEa,MAAAA,MAAM,EAAE,QAAA;AAAS,KAAA;GAAI,CAAC,EACnCnB,IAAI,gBACHjB,gBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA,IAAA,eACED,gBAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEsB,IAAAA,KAAK,EAAE;AACLM,MAAAA,QAAQ,EAAE,MAAM;AAChBE,MAAAA,MAAM,EAAE,eAAe;AACvBE,MAAAA,YAAY,EAAE,QAAQ;AACtBT,MAAAA,OAAO,EAAE,OAAO;AAChBa,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,QAAQ,EAAE,MAAA;AACZ,KAAA;AAAE,GAAA,EAEDhC,KAAK,CAACiC,OAAO,gBAAGvC,gBAAA,CAAAC,aAAA,CAAOK,MAAAA,EAAAA,IAAAA,EAAAA,KAAK,CAACiC,OAAc,CAAC,GAAG,IAC7C,CACF,CAAC,GACJ,IACD,CAAC,CAAA;AAEV;;;;;;"}