| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 var __create = Object.create; 2 var __defProp = Object.defineProperty; 3 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4 var __getOwnPropNames = Object.getOwnPropertyNames; 5 var __getProtoOf = Object.getPrototypeOf; 6 var __hasOwnProp = Object.prototype.hasOwnProperty; 7 var __commonJS = (cb, mod) => function __require() { 8 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 9 }; 10 var __copyProps = (to, from, except, desc) => { 11 if (from && typeof from === "object" || typeof from === "function") { 12 for (let key of __getOwnPropNames(from)) 13 if (!__hasOwnProp.call(to, key) && key !== except) 14 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 15 } 16 return to; 17 }; 18 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 19 // If the importer is in node compatibility mode or this is not an ESM 20 // file that has been converted to a CommonJS file using a Babel- 21 // compatible transform (i.e. "__esModule" has not been set), then set 22 // "default" to the CommonJS "module.exports" for node compatibility. 23 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 24 mod 25 )); 26 27 // vendor-external:react/jsx-runtime 28 var require_jsx_runtime = __commonJS({ 29 "vendor-external:react/jsx-runtime"(exports, module) { 30 module.exports = window.ReactJSXRuntime; 31 } 32 }); 33 34 // vendor-external:react 35 var require_react = __commonJS({ 36 "vendor-external:react"(exports, module) { 37 module.exports = window.React; 38 } 39 }); 40 41 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js 42 var require_use_sync_external_store_shim_development = __commonJS({ 43 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { 44 "use strict"; 45 (function() { 46 function is(x, y) { 47 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 48 } 49 function useSyncExternalStore$2(subscribe2, getSnapshot) { 50 didWarnOld18Alpha || void 0 === React12.startTransition || (didWarnOld18Alpha = true, console.error( 51 "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release." 52 )); 53 var value = getSnapshot(); 54 if (!didWarnUncachedGetSnapshot) { 55 var cachedValue = getSnapshot(); 56 objectIs(value, cachedValue) || (console.error( 57 "The result of getSnapshot should be cached to avoid an infinite loop" 58 ), didWarnUncachedGetSnapshot = true); 59 } 60 cachedValue = useState4({ 61 inst: { value, getSnapshot } 62 }); 63 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; 64 useLayoutEffect3( 65 function() { 66 inst.value = value; 67 inst.getSnapshot = getSnapshot; 68 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 69 }, 70 [subscribe2, value, getSnapshot] 71 ); 72 useEffect5( 73 function() { 74 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 75 return subscribe2(function() { 76 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 77 }); 78 }, 79 [subscribe2] 80 ); 81 useDebugValue(value); 82 return value; 83 } 84 function checkIfSnapshotChanged(inst) { 85 var latestGetSnapshot = inst.getSnapshot; 86 inst = inst.value; 87 try { 88 var nextValue = latestGetSnapshot(); 89 return !objectIs(inst, nextValue); 90 } catch (error) { 91 return true; 92 } 93 } 94 function useSyncExternalStore$1(subscribe2, getSnapshot) { 95 return getSnapshot(); 96 } 97 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 98 var React12 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState4 = React12.useState, useEffect5 = React12.useEffect, useLayoutEffect3 = React12.useLayoutEffect, useDebugValue = React12.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; 99 exports.useSyncExternalStore = void 0 !== React12.useSyncExternalStore ? React12.useSyncExternalStore : shim; 100 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 101 })(); 102 } 103 }); 104 105 // node_modules/use-sync-external-store/shim/index.js 106 var require_shim = __commonJS({ 107 "node_modules/use-sync-external-store/shim/index.js"(exports, module) { 108 "use strict"; 109 if (false) { 110 module.exports = null; 111 } else { 112 module.exports = require_use_sync_external_store_shim_development(); 113 } 114 } 115 }); 116 117 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js 118 var require_with_selector_development = __commonJS({ 119 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { 120 "use strict"; 121 (function() { 122 function is(x, y) { 123 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 124 } 125 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 126 var React12 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore = shim.useSyncExternalStore, useRef7 = React12.useRef, useEffect5 = React12.useEffect, useMemo3 = React12.useMemo, useDebugValue = React12.useDebugValue; 127 exports.useSyncExternalStoreWithSelector = function(subscribe2, getSnapshot, getServerSnapshot, selector, isEqual) { 128 var instRef = useRef7(null); 129 if (null === instRef.current) { 130 var inst = { hasValue: false, value: null }; 131 instRef.current = inst; 132 } else inst = instRef.current; 133 instRef = useMemo3( 134 function() { 135 function memoizedSelector(nextSnapshot) { 136 if (!hasMemo) { 137 hasMemo = true; 138 memoizedSnapshot = nextSnapshot; 139 nextSnapshot = selector(nextSnapshot); 140 if (void 0 !== isEqual && inst.hasValue) { 141 var currentSelection = inst.value; 142 if (isEqual(currentSelection, nextSnapshot)) 143 return memoizedSelection = currentSelection; 144 } 145 return memoizedSelection = nextSnapshot; 146 } 147 currentSelection = memoizedSelection; 148 if (objectIs(memoizedSnapshot, nextSnapshot)) 149 return currentSelection; 150 var nextSelection = selector(nextSnapshot); 151 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) 152 return memoizedSnapshot = nextSnapshot, currentSelection; 153 memoizedSnapshot = nextSnapshot; 154 return memoizedSelection = nextSelection; 155 } 156 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; 157 return [ 158 function() { 159 return memoizedSelector(getSnapshot()); 160 }, 161 null === maybeGetServerSnapshot ? void 0 : function() { 162 return memoizedSelector(maybeGetServerSnapshot()); 163 } 164 ]; 165 }, 166 [getSnapshot, getServerSnapshot, selector, isEqual] 167 ); 168 var value = useSyncExternalStore(subscribe2, instRef[0], instRef[1]); 169 useEffect5( 170 function() { 171 inst.hasValue = true; 172 inst.value = value; 173 }, 174 [value] 175 ); 176 useDebugValue(value); 177 return value; 178 }; 179 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 180 })(); 181 } 182 }); 183 184 // node_modules/use-sync-external-store/shim/with-selector.js 185 var require_with_selector = __commonJS({ 186 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { 187 "use strict"; 188 if (false) { 189 module.exports = null; 190 } else { 191 module.exports = require_with_selector_development(); 192 } 193 } 194 }); 195 196 // vendor-external:react-dom 197 var require_react_dom = __commonJS({ 198 "vendor-external:react-dom"(exports, module) { 199 module.exports = window.ReactDOM; 200 } 201 }); 202 203 // package-external:@wordpress/private-apis 204 var require_private_apis = __commonJS({ 205 "package-external:@wordpress/private-apis"(exports, module) { 206 module.exports = window.wp.privateApis; 207 } 208 }); 209 210 // node_modules/@tanstack/store/dist/esm/scheduler.js 211 var __storeToDerived = /* @__PURE__ */ new WeakMap(); 212 var __derivedToStore = /* @__PURE__ */ new WeakMap(); 213 var __depsThatHaveWrittenThisTick = { 214 current: [] 215 }; 216 var __isFlushing = false; 217 var __batchDepth = 0; 218 var __pendingUpdates = /* @__PURE__ */ new Set(); 219 var __initialBatchValues = /* @__PURE__ */ new Map(); 220 function __flush_internals(relatedVals) { 221 for (const derived of relatedVals) { 222 if (__depsThatHaveWrittenThisTick.current.includes(derived)) { 223 continue; 224 } 225 __depsThatHaveWrittenThisTick.current.push(derived); 226 derived.recompute(); 227 const stores = __derivedToStore.get(derived); 228 if (stores) { 229 for (const store of stores) { 230 const relatedLinkedDerivedVals = __storeToDerived.get(store); 231 if (!(relatedLinkedDerivedVals == null ? void 0 : relatedLinkedDerivedVals.length)) continue; 232 __flush_internals(relatedLinkedDerivedVals); 233 } 234 } 235 } 236 } 237 function __notifyListeners(store) { 238 const value = { 239 prevVal: store.prevState, 240 currentVal: store.state 241 }; 242 for (const listener of store.listeners) { 243 listener(value); 244 } 245 } 246 function __notifyDerivedListeners(derived) { 247 const value = { 248 prevVal: derived.prevState, 249 currentVal: derived.state 250 }; 251 for (const listener of derived.listeners) { 252 listener(value); 253 } 254 } 255 function __flush(store) { 256 if (__batchDepth > 0 && !__initialBatchValues.has(store)) { 257 __initialBatchValues.set(store, store.prevState); 258 } 259 __pendingUpdates.add(store); 260 if (__batchDepth > 0) return; 261 if (__isFlushing) return; 262 try { 263 __isFlushing = true; 264 while (__pendingUpdates.size > 0) { 265 const stores = Array.from(__pendingUpdates); 266 __pendingUpdates.clear(); 267 for (const store2 of stores) { 268 const prevState = __initialBatchValues.get(store2) ?? store2.prevState; 269 store2.prevState = prevState; 270 __notifyListeners(store2); 271 } 272 for (const store2 of stores) { 273 const derivedVals = __storeToDerived.get(store2); 274 if (!derivedVals) continue; 275 __depsThatHaveWrittenThisTick.current.push(store2); 276 __flush_internals(derivedVals); 277 } 278 for (const store2 of stores) { 279 const derivedVals = __storeToDerived.get(store2); 280 if (!derivedVals) continue; 281 for (const derived of derivedVals) { 282 __notifyDerivedListeners(derived); 283 } 284 } 285 } 286 } finally { 287 __isFlushing = false; 288 __depsThatHaveWrittenThisTick.current = []; 289 __initialBatchValues.clear(); 290 } 291 } 292 function batch(fn) { 293 __batchDepth++; 294 try { 295 fn(); 296 } finally { 297 __batchDepth--; 298 if (__batchDepth === 0) { 299 const pendingUpdateToFlush = __pendingUpdates.values().next().value; 300 if (pendingUpdateToFlush) { 301 __flush(pendingUpdateToFlush); 302 } 303 } 304 } 305 } 306 307 // node_modules/@tanstack/store/dist/esm/types.js 308 function isUpdaterFunction(updater) { 309 return typeof updater === "function"; 310 } 311 312 // node_modules/@tanstack/store/dist/esm/store.js 313 var Store = class { 314 constructor(initialState, options) { 315 this.listeners = /* @__PURE__ */ new Set(); 316 this.subscribe = (listener) => { 317 var _a, _b; 318 this.listeners.add(listener); 319 const unsub = (_b = (_a = this.options) == null ? void 0 : _a.onSubscribe) == null ? void 0 : _b.call(_a, listener, this); 320 return () => { 321 this.listeners.delete(listener); 322 unsub == null ? void 0 : unsub(); 323 }; 324 }; 325 this.prevState = initialState; 326 this.state = initialState; 327 this.options = options; 328 } 329 setState(updater) { 330 var _a, _b, _c; 331 this.prevState = this.state; 332 if ((_a = this.options) == null ? void 0 : _a.updateFn) { 333 this.state = this.options.updateFn(this.prevState)(updater); 334 } else { 335 if (isUpdaterFunction(updater)) { 336 this.state = updater(this.prevState); 337 } else { 338 this.state = updater; 339 } 340 } 341 (_c = (_b = this.options) == null ? void 0 : _b.onUpdate) == null ? void 0 : _c.call(_b); 342 __flush(this); 343 } 344 }; 345 346 // node_modules/@tanstack/history/dist/esm/index.js 347 var stateIndexKey = "__TSR_index"; 348 var popStateEvent = "popstate"; 349 var beforeUnloadEvent = "beforeunload"; 350 function createHistory(opts) { 351 let location = opts.getLocation(); 352 const subscribers = /* @__PURE__ */ new Set(); 353 const notify = (action) => { 354 location = opts.getLocation(); 355 subscribers.forEach((subscriber) => subscriber({ location, action })); 356 }; 357 const handleIndexChange = (action) => { 358 if (opts.notifyOnIndexChange ?? true) notify(action); 359 else location = opts.getLocation(); 360 }; 361 const tryNavigation = async ({ 362 task, 363 navigateOpts, 364 ...actionInfo 365 }) => { 366 const ignoreBlocker = navigateOpts?.ignoreBlocker ?? false; 367 if (ignoreBlocker) { 368 task(); 369 return; 370 } 371 const blockers = opts.getBlockers?.() ?? []; 372 const isPushOrReplace = actionInfo.type === "PUSH" || actionInfo.type === "REPLACE"; 373 if (typeof document !== "undefined" && blockers.length && isPushOrReplace) { 374 for (const blocker of blockers) { 375 const nextLocation = parseHref(actionInfo.path, actionInfo.state); 376 const isBlocked = await blocker.blockerFn({ 377 currentLocation: location, 378 nextLocation, 379 action: actionInfo.type 380 }); 381 if (isBlocked) { 382 opts.onBlocked?.(); 383 return; 384 } 385 } 386 } 387 task(); 388 }; 389 return { 390 get location() { 391 return location; 392 }, 393 get length() { 394 return opts.getLength(); 395 }, 396 subscribers, 397 subscribe: (cb) => { 398 subscribers.add(cb); 399 return () => { 400 subscribers.delete(cb); 401 }; 402 }, 403 push: (path, state, navigateOpts) => { 404 const currentIndex = location.state[stateIndexKey]; 405 state = assignKeyAndIndex(currentIndex + 1, state); 406 tryNavigation({ 407 task: () => { 408 opts.pushState(path, state); 409 notify({ type: "PUSH" }); 410 }, 411 navigateOpts, 412 type: "PUSH", 413 path, 414 state 415 }); 416 }, 417 replace: (path, state, navigateOpts) => { 418 const currentIndex = location.state[stateIndexKey]; 419 state = assignKeyAndIndex(currentIndex, state); 420 tryNavigation({ 421 task: () => { 422 opts.replaceState(path, state); 423 notify({ type: "REPLACE" }); 424 }, 425 navigateOpts, 426 type: "REPLACE", 427 path, 428 state 429 }); 430 }, 431 go: (index, navigateOpts) => { 432 tryNavigation({ 433 task: () => { 434 opts.go(index); 435 handleIndexChange({ type: "GO", index }); 436 }, 437 navigateOpts, 438 type: "GO" 439 }); 440 }, 441 back: (navigateOpts) => { 442 tryNavigation({ 443 task: () => { 444 opts.back(navigateOpts?.ignoreBlocker ?? false); 445 handleIndexChange({ type: "BACK" }); 446 }, 447 navigateOpts, 448 type: "BACK" 449 }); 450 }, 451 forward: (navigateOpts) => { 452 tryNavigation({ 453 task: () => { 454 opts.forward(navigateOpts?.ignoreBlocker ?? false); 455 handleIndexChange({ type: "FORWARD" }); 456 }, 457 navigateOpts, 458 type: "FORWARD" 459 }); 460 }, 461 canGoBack: () => location.state[stateIndexKey] !== 0, 462 createHref: (str) => opts.createHref(str), 463 block: (blocker) => { 464 if (!opts.setBlockers) return () => { 465 }; 466 const blockers = opts.getBlockers?.() ?? []; 467 opts.setBlockers([...blockers, blocker]); 468 return () => { 469 const blockers2 = opts.getBlockers?.() ?? []; 470 opts.setBlockers?.(blockers2.filter((b) => b !== blocker)); 471 }; 472 }, 473 flush: () => opts.flush?.(), 474 destroy: () => opts.destroy?.(), 475 notify 476 }; 477 } 478 function assignKeyAndIndex(index, state) { 479 if (!state) { 480 state = {}; 481 } 482 const key = createRandomKey(); 483 return { 484 ...state, 485 key, 486 // TODO: Remove in v2 - use __TSR_key instead 487 __TSR_key: key, 488 [stateIndexKey]: index 489 }; 490 } 491 function createBrowserHistory(opts) { 492 const win = opts?.window ?? (typeof document !== "undefined" ? window : void 0); 493 const originalPushState = win.history.pushState; 494 const originalReplaceState = win.history.replaceState; 495 let blockers = []; 496 const _getBlockers = () => blockers; 497 const _setBlockers = (newBlockers) => blockers = newBlockers; 498 const createHref = opts?.createHref ?? ((path) => path); 499 const parseLocation = opts?.parseLocation ?? (() => parseHref( 500 `$win.location.pathname}$win.location.search}$win.location.hash}`, 501 win.history.state 502 )); 503 if (!win.history.state?.__TSR_key && !win.history.state?.key) { 504 const addedKey = createRandomKey(); 505 win.history.replaceState( 506 { 507 [stateIndexKey]: 0, 508 key: addedKey, 509 // TODO: Remove in v2 - use __TSR_key instead 510 __TSR_key: addedKey 511 }, 512 "" 513 ); 514 } 515 let currentLocation = parseLocation(); 516 let rollbackLocation; 517 let nextPopIsGo = false; 518 let ignoreNextPop = false; 519 let skipBlockerNextPop = false; 520 let ignoreNextBeforeUnload = false; 521 const getLocation = () => currentLocation; 522 let next; 523 let scheduled; 524 const flush = () => { 525 if (!next) { 526 return; 527 } 528 history._ignoreSubscribers = true; 529 (next.isPush ? win.history.pushState : win.history.replaceState)( 530 next.state, 531 "", 532 next.href 533 ); 534 history._ignoreSubscribers = false; 535 next = void 0; 536 scheduled = void 0; 537 rollbackLocation = void 0; 538 }; 539 const queueHistoryAction = (type, destHref, state) => { 540 const href = createHref(destHref); 541 if (!scheduled) { 542 rollbackLocation = currentLocation; 543 } 544 currentLocation = parseHref(destHref, state); 545 next = { 546 href, 547 state, 548 isPush: next?.isPush || type === "push" 549 }; 550 if (!scheduled) { 551 scheduled = Promise.resolve().then(() => flush()); 552 } 553 }; 554 const onPushPop = (type) => { 555 currentLocation = parseLocation(); 556 history.notify({ type }); 557 }; 558 const onPushPopEvent = async () => { 559 if (ignoreNextPop) { 560 ignoreNextPop = false; 561 return; 562 } 563 const nextLocation = parseLocation(); 564 const delta = nextLocation.state[stateIndexKey] - currentLocation.state[stateIndexKey]; 565 const isForward = delta === 1; 566 const isBack = delta === -1; 567 const isGo = !isForward && !isBack || nextPopIsGo; 568 nextPopIsGo = false; 569 const action = isGo ? "GO" : isBack ? "BACK" : "FORWARD"; 570 const notify = isGo ? { 571 type: "GO", 572 index: delta 573 } : { 574 type: isBack ? "BACK" : "FORWARD" 575 }; 576 if (skipBlockerNextPop) { 577 skipBlockerNextPop = false; 578 } else { 579 const blockers2 = _getBlockers(); 580 if (typeof document !== "undefined" && blockers2.length) { 581 for (const blocker of blockers2) { 582 const isBlocked = await blocker.blockerFn({ 583 currentLocation, 584 nextLocation, 585 action 586 }); 587 if (isBlocked) { 588 ignoreNextPop = true; 589 win.history.go(1); 590 history.notify(notify); 591 return; 592 } 593 } 594 } 595 } 596 currentLocation = parseLocation(); 597 history.notify(notify); 598 }; 599 const onBeforeUnload = (e) => { 600 if (ignoreNextBeforeUnload) { 601 ignoreNextBeforeUnload = false; 602 return; 603 } 604 let shouldBlock = false; 605 const blockers2 = _getBlockers(); 606 if (typeof document !== "undefined" && blockers2.length) { 607 for (const blocker of blockers2) { 608 const shouldHaveBeforeUnload = blocker.enableBeforeUnload ?? true; 609 if (shouldHaveBeforeUnload === true) { 610 shouldBlock = true; 611 break; 612 } 613 if (typeof shouldHaveBeforeUnload === "function" && shouldHaveBeforeUnload() === true) { 614 shouldBlock = true; 615 break; 616 } 617 } 618 } 619 if (shouldBlock) { 620 e.preventDefault(); 621 return e.returnValue = ""; 622 } 623 return; 624 }; 625 const history = createHistory({ 626 getLocation, 627 getLength: () => win.history.length, 628 pushState: (href, state) => queueHistoryAction("push", href, state), 629 replaceState: (href, state) => queueHistoryAction("replace", href, state), 630 back: (ignoreBlocker) => { 631 if (ignoreBlocker) skipBlockerNextPop = true; 632 ignoreNextBeforeUnload = true; 633 return win.history.back(); 634 }, 635 forward: (ignoreBlocker) => { 636 if (ignoreBlocker) skipBlockerNextPop = true; 637 ignoreNextBeforeUnload = true; 638 win.history.forward(); 639 }, 640 go: (n) => { 641 nextPopIsGo = true; 642 win.history.go(n); 643 }, 644 createHref: (href) => createHref(href), 645 flush, 646 destroy: () => { 647 win.history.pushState = originalPushState; 648 win.history.replaceState = originalReplaceState; 649 win.removeEventListener(beforeUnloadEvent, onBeforeUnload, { 650 capture: true 651 }); 652 win.removeEventListener(popStateEvent, onPushPopEvent); 653 }, 654 onBlocked: () => { 655 if (rollbackLocation && currentLocation !== rollbackLocation) { 656 currentLocation = rollbackLocation; 657 } 658 }, 659 getBlockers: _getBlockers, 660 setBlockers: _setBlockers, 661 notifyOnIndexChange: false 662 }); 663 win.addEventListener(beforeUnloadEvent, onBeforeUnload, { capture: true }); 664 win.addEventListener(popStateEvent, onPushPopEvent); 665 win.history.pushState = function(...args) { 666 const res = originalPushState.apply(win.history, args); 667 if (!history._ignoreSubscribers) onPushPop("PUSH"); 668 return res; 669 }; 670 win.history.replaceState = function(...args) { 671 const res = originalReplaceState.apply(win.history, args); 672 if (!history._ignoreSubscribers) onPushPop("REPLACE"); 673 return res; 674 }; 675 return history; 676 } 677 function parseHref(href, state) { 678 const hashIndex = href.indexOf("#"); 679 const searchIndex = href.indexOf("?"); 680 const addedKey = createRandomKey(); 681 return { 682 href, 683 pathname: href.substring( 684 0, 685 hashIndex > 0 ? searchIndex > 0 ? Math.min(hashIndex, searchIndex) : hashIndex : searchIndex > 0 ? searchIndex : href.length 686 ), 687 hash: hashIndex > -1 ? href.substring(hashIndex) : "", 688 search: searchIndex > -1 ? href.slice(searchIndex, hashIndex === -1 ? void 0 : hashIndex) : "", 689 state: state || { [stateIndexKey]: 0, key: addedKey, __TSR_key: addedKey } 690 }; 691 } 692 function createRandomKey() { 693 return (Math.random() + 1).toString(36).substring(7); 694 } 695 696 // node_modules/@tanstack/router-core/dist/esm/utils.js 697 function last(arr) { 698 return arr[arr.length - 1]; 699 } 700 function isFunction(d) { 701 return typeof d === "function"; 702 } 703 function functionalUpdate(updater, previous) { 704 if (isFunction(updater)) { 705 return updater(previous); 706 } 707 return updater; 708 } 709 var hasOwn = Object.prototype.hasOwnProperty; 710 function replaceEqualDeep(prev, _next) { 711 if (prev === _next) { 712 return prev; 713 } 714 const next = _next; 715 const array = isPlainArray(prev) && isPlainArray(next); 716 if (!array && !(isPlainObject(prev) && isPlainObject(next))) return next; 717 const prevItems = array ? prev : getEnumerableOwnKeys(prev); 718 if (!prevItems) return next; 719 const nextItems = array ? next : getEnumerableOwnKeys(next); 720 if (!nextItems) return next; 721 const prevSize = prevItems.length; 722 const nextSize = nextItems.length; 723 const copy = array ? new Array(nextSize) : {}; 724 let equalItems = 0; 725 for (let i = 0; i < nextSize; i++) { 726 const key = array ? i : nextItems[i]; 727 const p = prev[key]; 728 const n = next[key]; 729 if (p === n) { 730 copy[key] = p; 731 if (array ? i < prevSize : hasOwn.call(prev, key)) equalItems++; 732 continue; 733 } 734 if (p === null || n === null || typeof p !== "object" || typeof n !== "object") { 735 copy[key] = n; 736 continue; 737 } 738 const v = replaceEqualDeep(p, n); 739 copy[key] = v; 740 if (v === p) equalItems++; 741 } 742 return prevSize === nextSize && equalItems === prevSize ? prev : copy; 743 } 744 function getEnumerableOwnKeys(o) { 745 const keys = []; 746 const names = Object.getOwnPropertyNames(o); 747 for (const name of names) { 748 if (!Object.prototype.propertyIsEnumerable.call(o, name)) return false; 749 keys.push(name); 750 } 751 const symbols = Object.getOwnPropertySymbols(o); 752 for (const symbol of symbols) { 753 if (!Object.prototype.propertyIsEnumerable.call(o, symbol)) return false; 754 keys.push(symbol); 755 } 756 return keys; 757 } 758 function isPlainObject(o) { 759 if (!hasObjectPrototype(o)) { 760 return false; 761 } 762 const ctor = o.constructor; 763 if (typeof ctor === "undefined") { 764 return true; 765 } 766 const prot = ctor.prototype; 767 if (!hasObjectPrototype(prot)) { 768 return false; 769 } 770 if (!prot.hasOwnProperty("isPrototypeOf")) { 771 return false; 772 } 773 return true; 774 } 775 function hasObjectPrototype(o) { 776 return Object.prototype.toString.call(o) === "[object Object]"; 777 } 778 function isPlainArray(value) { 779 return Array.isArray(value) && value.length === Object.keys(value).length; 780 } 781 function deepEqual(a, b, opts) { 782 if (a === b) { 783 return true; 784 } 785 if (typeof a !== typeof b) { 786 return false; 787 } 788 if (Array.isArray(a) && Array.isArray(b)) { 789 if (a.length !== b.length) return false; 790 for (let i = 0, l = a.length; i < l; i++) { 791 if (!deepEqual(a[i], b[i], opts)) return false; 792 } 793 return true; 794 } 795 if (isPlainObject(a) && isPlainObject(b)) { 796 const ignoreUndefined = opts?.ignoreUndefined ?? true; 797 if (opts?.partial) { 798 for (const k in b) { 799 if (!ignoreUndefined || b[k] !== void 0) { 800 if (!deepEqual(a[k], b[k], opts)) return false; 801 } 802 } 803 return true; 804 } 805 let aCount = 0; 806 if (!ignoreUndefined) { 807 aCount = Object.keys(a).length; 808 } else { 809 for (const k in a) { 810 if (a[k] !== void 0) aCount++; 811 } 812 } 813 let bCount = 0; 814 for (const k in b) { 815 if (!ignoreUndefined || b[k] !== void 0) { 816 bCount++; 817 if (bCount > aCount || !deepEqual(a[k], b[k], opts)) return false; 818 } 819 } 820 return aCount === bCount; 821 } 822 return false; 823 } 824 function createControlledPromise(onResolve) { 825 let resolveLoadPromise; 826 let rejectLoadPromise; 827 const controlledPromise = new Promise((resolve, reject) => { 828 resolveLoadPromise = resolve; 829 rejectLoadPromise = reject; 830 }); 831 controlledPromise.status = "pending"; 832 controlledPromise.resolve = (value) => { 833 controlledPromise.status = "resolved"; 834 controlledPromise.value = value; 835 resolveLoadPromise(value); 836 onResolve?.(value); 837 }; 838 controlledPromise.reject = (e) => { 839 controlledPromise.status = "rejected"; 840 rejectLoadPromise(e); 841 }; 842 return controlledPromise; 843 } 844 function isPromise(value) { 845 return Boolean( 846 value && typeof value === "object" && typeof value.then === "function" 847 ); 848 } 849 function findLast(array, predicate) { 850 for (let i = array.length - 1; i >= 0; i--) { 851 const item = array[i]; 852 if (predicate(item)) return item; 853 } 854 return void 0; 855 } 856 var DECODE_IGNORE_LIST = Array.from( 857 (/* @__PURE__ */ new Map([ 858 ["%", "%25"], 859 ["\\", "%5C"], 860 ["/", "%2F"], 861 [";", "%3B"], 862 [":", "%3A"], 863 ["@", "%40"], 864 ["&", "%26"], 865 ["=", "%3D"], 866 ["+", "%2B"], 867 ["$", "%24"], 868 [",", "%2C"] 869 ])).values() 870 ); 871 function decodePathSegment(part, decodeIgnore = DECODE_IGNORE_LIST, startIndex = 0) { 872 function decode2(part2) { 873 try { 874 return decodeURIComponent(part2); 875 } catch { 876 return part2.replaceAll(/%[0-9A-Fa-f]{2}/g, (match) => { 877 try { 878 return decodeURIComponent(match); 879 } catch { 880 return match; 881 } 882 }); 883 } 884 } 885 if (part === "" || !part.match(/%[0-9A-Fa-f]{2}/g)) return part; 886 for (let i = startIndex; i < decodeIgnore.length; i++) { 887 const char = decodeIgnore[i]; 888 if (char && part.includes(char)) { 889 const partsToDecode = part.split(char); 890 const partsToJoin = []; 891 for (const partToDecode of partsToDecode) { 892 partsToJoin.push(decodePathSegment(partToDecode, decodeIgnore, i + 1)); 893 } 894 return partsToJoin.join(char); 895 } 896 } 897 return decode2(part); 898 } 899 900 // node_modules/tiny-invariant/dist/esm/tiny-invariant.js 901 var isProduction = false; 902 var prefix = "Invariant failed"; 903 function invariant(condition, message) { 904 if (condition) { 905 return; 906 } 907 if (isProduction) { 908 throw new Error(prefix); 909 } 910 var provided = typeof message === "function" ? message() : message; 911 var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix; 912 throw new Error(value); 913 } 914 915 // node_modules/@tanstack/router-core/dist/esm/path.js 916 var SEGMENT_TYPE_PATHNAME = 0; 917 var SEGMENT_TYPE_PARAM = 1; 918 var SEGMENT_TYPE_WILDCARD = 2; 919 var SEGMENT_TYPE_OPTIONAL_PARAM = 3; 920 function joinPaths(paths) { 921 return cleanPath( 922 paths.filter((val) => { 923 return val !== void 0; 924 }).join("/") 925 ); 926 } 927 function cleanPath(path) { 928 return path.replace(/\/{2,}/g, "/"); 929 } 930 function trimPathLeft(path) { 931 return path === "/" ? path : path.replace(/^\/{1,}/, ""); 932 } 933 function trimPathRight(path) { 934 return path === "/" ? path : path.replace(/\/{1,}$/, ""); 935 } 936 function trimPath(path) { 937 return trimPathRight(trimPathLeft(path)); 938 } 939 function removeTrailingSlash(value, basepath) { 940 if (value?.endsWith("/") && value !== "/" && value !== `$basepath}/`) { 941 return value.slice(0, -1); 942 } 943 return value; 944 } 945 function exactPathTest(pathName1, pathName2, basepath) { 946 return removeTrailingSlash(pathName1, basepath) === removeTrailingSlash(pathName2, basepath); 947 } 948 function segmentToString(segment) { 949 const { type, value } = segment; 950 if (type === SEGMENT_TYPE_PATHNAME) { 951 return value; 952 } 953 const { prefixSegment, suffixSegment } = segment; 954 if (type === SEGMENT_TYPE_PARAM) { 955 const param = value.substring(1); 956 if (prefixSegment && suffixSegment) { 957 return `$prefixSegment}{$$param}}$suffixSegment}`; 958 } else if (prefixSegment) { 959 return `$prefixSegment}{$$param}}`; 960 } else if (suffixSegment) { 961 return `{$$param}}$suffixSegment}`; 962 } 963 } 964 if (type === SEGMENT_TYPE_OPTIONAL_PARAM) { 965 const param = value.substring(1); 966 if (prefixSegment && suffixSegment) { 967 return `$prefixSegment}{-$$param}}$suffixSegment}`; 968 } else if (prefixSegment) { 969 return `$prefixSegment}{-$$param}}`; 970 } else if (suffixSegment) { 971 return `{-$$param}}$suffixSegment}`; 972 } 973 return `{-$$param}}`; 974 } 975 if (type === SEGMENT_TYPE_WILDCARD) { 976 if (prefixSegment && suffixSegment) { 977 return `$prefixSegment}{$}$suffixSegment}`; 978 } else if (prefixSegment) { 979 return `$prefixSegment}{$}`; 980 } else if (suffixSegment) { 981 return `{$}$suffixSegment}`; 982 } 983 } 984 return value; 985 } 986 function resolvePath({ 987 base, 988 to, 989 trailingSlash = "never", 990 parseCache 991 }) { 992 let baseSegments = parsePathname(base, parseCache).slice(); 993 const toSegments = parsePathname(to, parseCache); 994 if (baseSegments.length > 1 && last(baseSegments)?.value === "/") { 995 baseSegments.pop(); 996 } 997 for (let index = 0, length = toSegments.length; index < length; index++) { 998 const toSegment = toSegments[index]; 999 const value = toSegment.value; 1000 if (value === "/") { 1001 if (!index) { 1002 baseSegments = [toSegment]; 1003 } else if (index === length - 1) { 1004 baseSegments.push(toSegment); 1005 } else ; 1006 } else if (value === "..") { 1007 baseSegments.pop(); 1008 } else if (value === ".") ; 1009 else { 1010 baseSegments.push(toSegment); 1011 } 1012 } 1013 if (baseSegments.length > 1) { 1014 if (last(baseSegments).value === "/") { 1015 if (trailingSlash === "never") { 1016 baseSegments.pop(); 1017 } 1018 } else if (trailingSlash === "always") { 1019 baseSegments.push({ type: SEGMENT_TYPE_PATHNAME, value: "/" }); 1020 } 1021 } 1022 const segmentValues = baseSegments.map(segmentToString); 1023 const joined = joinPaths(segmentValues); 1024 return joined; 1025 } 1026 var parsePathname = (pathname, cache) => { 1027 if (!pathname) return []; 1028 const cached = cache?.get(pathname); 1029 if (cached) return cached; 1030 const parsed = baseParsePathname(pathname); 1031 cache?.set(pathname, parsed); 1032 return parsed; 1033 }; 1034 var PARAM_RE = /^\$.{1,}$/; 1035 var PARAM_W_CURLY_BRACES_RE = /^(.*?)\{(\$[a-zA-Z_$][a-zA-Z0-9_$]*)\}(.*)$/; 1036 var OPTIONAL_PARAM_W_CURLY_BRACES_RE = /^(.*?)\{-(\$[a-zA-Z_$][a-zA-Z0-9_$]*)\}(.*)$/; 1037 var WILDCARD_RE = /^\$$/; 1038 var WILDCARD_W_CURLY_BRACES_RE = /^(.*?)\{\$\}(.*)$/; 1039 function baseParsePathname(pathname) { 1040 pathname = cleanPath(pathname); 1041 const segments = []; 1042 if (pathname.slice(0, 1) === "/") { 1043 pathname = pathname.substring(1); 1044 segments.push({ 1045 type: SEGMENT_TYPE_PATHNAME, 1046 value: "/" 1047 }); 1048 } 1049 if (!pathname) { 1050 return segments; 1051 } 1052 const split = pathname.split("/").filter(Boolean); 1053 segments.push( 1054 ...split.map((part) => { 1055 const wildcardBracesMatch = part.match(WILDCARD_W_CURLY_BRACES_RE); 1056 if (wildcardBracesMatch) { 1057 const prefix2 = wildcardBracesMatch[1]; 1058 const suffix = wildcardBracesMatch[2]; 1059 return { 1060 type: SEGMENT_TYPE_WILDCARD, 1061 value: "$", 1062 prefixSegment: prefix2 || void 0, 1063 suffixSegment: suffix || void 0 1064 }; 1065 } 1066 const optionalParamBracesMatch = part.match( 1067 OPTIONAL_PARAM_W_CURLY_BRACES_RE 1068 ); 1069 if (optionalParamBracesMatch) { 1070 const prefix2 = optionalParamBracesMatch[1]; 1071 const paramName = optionalParamBracesMatch[2]; 1072 const suffix = optionalParamBracesMatch[3]; 1073 return { 1074 type: SEGMENT_TYPE_OPTIONAL_PARAM, 1075 value: paramName, 1076 // Now just $paramName (no prefix) 1077 prefixSegment: prefix2 || void 0, 1078 suffixSegment: suffix || void 0 1079 }; 1080 } 1081 const paramBracesMatch = part.match(PARAM_W_CURLY_BRACES_RE); 1082 if (paramBracesMatch) { 1083 const prefix2 = paramBracesMatch[1]; 1084 const paramName = paramBracesMatch[2]; 1085 const suffix = paramBracesMatch[3]; 1086 return { 1087 type: SEGMENT_TYPE_PARAM, 1088 value: "" + paramName, 1089 prefixSegment: prefix2 || void 0, 1090 suffixSegment: suffix || void 0 1091 }; 1092 } 1093 if (PARAM_RE.test(part)) { 1094 const paramName = part.substring(1); 1095 return { 1096 type: SEGMENT_TYPE_PARAM, 1097 value: "$" + paramName, 1098 prefixSegment: void 0, 1099 suffixSegment: void 0 1100 }; 1101 } 1102 if (WILDCARD_RE.test(part)) { 1103 return { 1104 type: SEGMENT_TYPE_WILDCARD, 1105 value: "$", 1106 prefixSegment: void 0, 1107 suffixSegment: void 0 1108 }; 1109 } 1110 return { 1111 type: SEGMENT_TYPE_PATHNAME, 1112 value: decodePathSegment(part) 1113 }; 1114 }) 1115 ); 1116 if (pathname.slice(-1) === "/") { 1117 pathname = pathname.substring(1); 1118 segments.push({ 1119 type: SEGMENT_TYPE_PATHNAME, 1120 value: "/" 1121 }); 1122 } 1123 return segments; 1124 } 1125 function interpolatePath({ 1126 path, 1127 params, 1128 leaveWildcards, 1129 leaveParams, 1130 decodeCharMap, 1131 parseCache 1132 }) { 1133 const interpolatedPathSegments = parsePathname(path, parseCache); 1134 function encodeParam(key) { 1135 const value = params[key]; 1136 const isValueString = typeof value === "string"; 1137 if (key === "*" || key === "_splat") { 1138 return isValueString ? encodeURI(value) : value; 1139 } else { 1140 return isValueString ? encodePathParam(value, decodeCharMap) : value; 1141 } 1142 } 1143 let isMissingParams = false; 1144 const usedParams = {}; 1145 const interpolatedPath = joinPaths( 1146 interpolatedPathSegments.map((segment) => { 1147 if (segment.type === SEGMENT_TYPE_PATHNAME) { 1148 return segment.value; 1149 } 1150 if (segment.type === SEGMENT_TYPE_WILDCARD) { 1151 usedParams._splat = params._splat; 1152 usedParams["*"] = params._splat; 1153 const segmentPrefix = segment.prefixSegment || ""; 1154 const segmentSuffix = segment.suffixSegment || ""; 1155 if (!params._splat) { 1156 isMissingParams = true; 1157 if (leaveWildcards) { 1158 return `$segmentPrefix}$segment.value}$segmentSuffix}`; 1159 } 1160 if (segmentPrefix || segmentSuffix) { 1161 return `$segmentPrefix}$segmentSuffix}`; 1162 } 1163 return void 0; 1164 } 1165 const value = encodeParam("_splat"); 1166 if (leaveWildcards) { 1167 return `$segmentPrefix}$segment.value}$value ?? ""}$segmentSuffix}`; 1168 } 1169 return `$segmentPrefix}$value}$segmentSuffix}`; 1170 } 1171 if (segment.type === SEGMENT_TYPE_PARAM) { 1172 const key = segment.value.substring(1); 1173 if (!isMissingParams && !(key in params)) { 1174 isMissingParams = true; 1175 } 1176 usedParams[key] = params[key]; 1177 const segmentPrefix = segment.prefixSegment || ""; 1178 const segmentSuffix = segment.suffixSegment || ""; 1179 if (leaveParams) { 1180 const value = encodeParam(segment.value); 1181 return `$segmentPrefix}$segment.value}$value ?? ""}$segmentSuffix}`; 1182 } 1183 return `$segmentPrefix}$encodeParam(key) ?? "undefined"}$segmentSuffix}`; 1184 } 1185 if (segment.type === SEGMENT_TYPE_OPTIONAL_PARAM) { 1186 const key = segment.value.substring(1); 1187 const segmentPrefix = segment.prefixSegment || ""; 1188 const segmentSuffix = segment.suffixSegment || ""; 1189 if (!(key in params) || params[key] == null) { 1190 if (leaveWildcards) { 1191 return `$segmentPrefix}$key}$segmentSuffix}`; 1192 } 1193 if (segmentPrefix || segmentSuffix) { 1194 return `$segmentPrefix}$segmentSuffix}`; 1195 } 1196 return void 0; 1197 } 1198 usedParams[key] = params[key]; 1199 if (leaveParams) { 1200 const value = encodeParam(segment.value); 1201 return `$segmentPrefix}$segment.value}$value ?? ""}$segmentSuffix}`; 1202 } 1203 if (leaveWildcards) { 1204 return `$segmentPrefix}$key}$encodeParam(key) ?? ""}$segmentSuffix}`; 1205 } 1206 return `$segmentPrefix}$encodeParam(key) ?? ""}$segmentSuffix}`; 1207 } 1208 return segment.value; 1209 }) 1210 ); 1211 return { usedParams, interpolatedPath, isMissingParams }; 1212 } 1213 function encodePathParam(value, decodeCharMap) { 1214 let encoded = encodeURIComponent(value); 1215 if (decodeCharMap) { 1216 for (const [encodedChar, char] of decodeCharMap) { 1217 encoded = encoded.replaceAll(encodedChar, char); 1218 } 1219 } 1220 return encoded; 1221 } 1222 function matchPathname(currentPathname, matchLocation, parseCache) { 1223 const pathParams = matchByPath(currentPathname, matchLocation, parseCache); 1224 if (matchLocation.to && !pathParams) { 1225 return; 1226 } 1227 return pathParams ?? {}; 1228 } 1229 function matchByPath(from, { 1230 to, 1231 fuzzy, 1232 caseSensitive 1233 }, parseCache) { 1234 const stringTo = to; 1235 const baseSegments = parsePathname( 1236 from.startsWith("/") ? from : `/$from}`, 1237 parseCache 1238 ); 1239 const routeSegments = parsePathname( 1240 stringTo.startsWith("/") ? stringTo : `/$stringTo}`, 1241 parseCache 1242 ); 1243 const params = {}; 1244 const result = isMatch( 1245 baseSegments, 1246 routeSegments, 1247 params, 1248 fuzzy, 1249 caseSensitive 1250 ); 1251 return result ? params : void 0; 1252 } 1253 function isMatch(baseSegments, routeSegments, params, fuzzy, caseSensitive) { 1254 let baseIndex = 0; 1255 let routeIndex = 0; 1256 while (baseIndex < baseSegments.length || routeIndex < routeSegments.length) { 1257 const baseSegment = baseSegments[baseIndex]; 1258 const routeSegment = routeSegments[routeIndex]; 1259 if (routeSegment) { 1260 if (routeSegment.type === SEGMENT_TYPE_WILDCARD) { 1261 const remainingBaseSegments = baseSegments.slice(baseIndex); 1262 let _splat; 1263 if (routeSegment.prefixSegment || routeSegment.suffixSegment) { 1264 if (!baseSegment) return false; 1265 const prefix2 = routeSegment.prefixSegment || ""; 1266 const suffix = routeSegment.suffixSegment || ""; 1267 const baseValue = baseSegment.value; 1268 if ("prefixSegment" in routeSegment) { 1269 if (!baseValue.startsWith(prefix2)) { 1270 return false; 1271 } 1272 } 1273 if ("suffixSegment" in routeSegment) { 1274 if (!baseSegments[baseSegments.length - 1]?.value.endsWith(suffix)) { 1275 return false; 1276 } 1277 } 1278 let rejoinedSplat = decodeURI( 1279 joinPaths(remainingBaseSegments.map((d) => d.value)) 1280 ); 1281 if (prefix2 && rejoinedSplat.startsWith(prefix2)) { 1282 rejoinedSplat = rejoinedSplat.slice(prefix2.length); 1283 } 1284 if (suffix && rejoinedSplat.endsWith(suffix)) { 1285 rejoinedSplat = rejoinedSplat.slice( 1286 0, 1287 rejoinedSplat.length - suffix.length 1288 ); 1289 } 1290 _splat = rejoinedSplat; 1291 } else { 1292 _splat = decodeURI( 1293 joinPaths(remainingBaseSegments.map((d) => d.value)) 1294 ); 1295 } 1296 params["*"] = _splat; 1297 params["_splat"] = _splat; 1298 return true; 1299 } 1300 if (routeSegment.type === SEGMENT_TYPE_PATHNAME) { 1301 if (routeSegment.value === "/" && !baseSegment?.value) { 1302 routeIndex++; 1303 continue; 1304 } 1305 if (baseSegment) { 1306 if (caseSensitive) { 1307 if (routeSegment.value !== baseSegment.value) { 1308 return false; 1309 } 1310 } else if (routeSegment.value.toLowerCase() !== baseSegment.value.toLowerCase()) { 1311 return false; 1312 } 1313 baseIndex++; 1314 routeIndex++; 1315 continue; 1316 } else { 1317 return false; 1318 } 1319 } 1320 if (routeSegment.type === SEGMENT_TYPE_PARAM) { 1321 if (!baseSegment) { 1322 return false; 1323 } 1324 if (baseSegment.value === "/") { 1325 return false; 1326 } 1327 let _paramValue = ""; 1328 let matched = false; 1329 if (routeSegment.prefixSegment || routeSegment.suffixSegment) { 1330 const prefix2 = routeSegment.prefixSegment || ""; 1331 const suffix = routeSegment.suffixSegment || ""; 1332 const baseValue = baseSegment.value; 1333 if (prefix2 && !baseValue.startsWith(prefix2)) { 1334 return false; 1335 } 1336 if (suffix && !baseValue.endsWith(suffix)) { 1337 return false; 1338 } 1339 let paramValue = baseValue; 1340 if (prefix2 && paramValue.startsWith(prefix2)) { 1341 paramValue = paramValue.slice(prefix2.length); 1342 } 1343 if (suffix && paramValue.endsWith(suffix)) { 1344 paramValue = paramValue.slice(0, paramValue.length - suffix.length); 1345 } 1346 _paramValue = decodeURIComponent(paramValue); 1347 matched = true; 1348 } else { 1349 _paramValue = decodeURIComponent(baseSegment.value); 1350 matched = true; 1351 } 1352 if (matched) { 1353 params[routeSegment.value.substring(1)] = _paramValue; 1354 baseIndex++; 1355 } 1356 routeIndex++; 1357 continue; 1358 } 1359 if (routeSegment.type === SEGMENT_TYPE_OPTIONAL_PARAM) { 1360 if (!baseSegment) { 1361 routeIndex++; 1362 continue; 1363 } 1364 if (baseSegment.value === "/") { 1365 routeIndex++; 1366 continue; 1367 } 1368 let _paramValue = ""; 1369 let matched = false; 1370 if (routeSegment.prefixSegment || routeSegment.suffixSegment) { 1371 const prefix2 = routeSegment.prefixSegment || ""; 1372 const suffix = routeSegment.suffixSegment || ""; 1373 const baseValue = baseSegment.value; 1374 if ((!prefix2 || baseValue.startsWith(prefix2)) && (!suffix || baseValue.endsWith(suffix))) { 1375 let paramValue = baseValue; 1376 if (prefix2 && paramValue.startsWith(prefix2)) { 1377 paramValue = paramValue.slice(prefix2.length); 1378 } 1379 if (suffix && paramValue.endsWith(suffix)) { 1380 paramValue = paramValue.slice( 1381 0, 1382 paramValue.length - suffix.length 1383 ); 1384 } 1385 _paramValue = decodeURIComponent(paramValue); 1386 matched = true; 1387 } 1388 } else { 1389 let shouldMatchOptional = true; 1390 for (let lookAhead = routeIndex + 1; lookAhead < routeSegments.length; lookAhead++) { 1391 const futureRouteSegment = routeSegments[lookAhead]; 1392 if (futureRouteSegment?.type === SEGMENT_TYPE_PATHNAME && futureRouteSegment.value === baseSegment.value) { 1393 shouldMatchOptional = false; 1394 break; 1395 } 1396 if (futureRouteSegment?.type === SEGMENT_TYPE_PARAM || futureRouteSegment?.type === SEGMENT_TYPE_WILDCARD) { 1397 if (baseSegments.length < routeSegments.length) { 1398 shouldMatchOptional = false; 1399 } 1400 break; 1401 } 1402 } 1403 if (shouldMatchOptional) { 1404 _paramValue = decodeURIComponent(baseSegment.value); 1405 matched = true; 1406 } 1407 } 1408 if (matched) { 1409 params[routeSegment.value.substring(1)] = _paramValue; 1410 baseIndex++; 1411 } 1412 routeIndex++; 1413 continue; 1414 } 1415 } 1416 if (baseIndex < baseSegments.length && routeIndex >= routeSegments.length) { 1417 params["**"] = joinPaths( 1418 baseSegments.slice(baseIndex).map((d) => d.value) 1419 ); 1420 return !!fuzzy && routeSegments[routeSegments.length - 1]?.value !== "/"; 1421 } 1422 if (routeIndex < routeSegments.length && baseIndex >= baseSegments.length) { 1423 for (let i = routeIndex; i < routeSegments.length; i++) { 1424 if (routeSegments[i]?.type !== SEGMENT_TYPE_OPTIONAL_PARAM) { 1425 return false; 1426 } 1427 } 1428 break; 1429 } 1430 break; 1431 } 1432 return true; 1433 } 1434 1435 // node_modules/@tanstack/router-core/dist/esm/process-route-tree.js 1436 var SLASH_SCORE = 0.75; 1437 var STATIC_SEGMENT_SCORE = 1; 1438 var REQUIRED_PARAM_BASE_SCORE = 0.5; 1439 var OPTIONAL_PARAM_BASE_SCORE = 0.4; 1440 var WILDCARD_PARAM_BASE_SCORE = 0.25; 1441 var STATIC_AFTER_DYNAMIC_BONUS_SCORE = 0.2; 1442 var BOTH_PRESENCE_BASE_SCORE = 0.05; 1443 var PREFIX_PRESENCE_BASE_SCORE = 0.02; 1444 var SUFFIX_PRESENCE_BASE_SCORE = 0.01; 1445 var PREFIX_LENGTH_SCORE_MULTIPLIER = 2e-4; 1446 var SUFFIX_LENGTH_SCORE_MULTIPLIER = 1e-4; 1447 function handleParam(segment, baseScore) { 1448 if (segment.prefixSegment && segment.suffixSegment) { 1449 return baseScore + BOTH_PRESENCE_BASE_SCORE + PREFIX_LENGTH_SCORE_MULTIPLIER * segment.prefixSegment.length + SUFFIX_LENGTH_SCORE_MULTIPLIER * segment.suffixSegment.length; 1450 } 1451 if (segment.prefixSegment) { 1452 return baseScore + PREFIX_PRESENCE_BASE_SCORE + PREFIX_LENGTH_SCORE_MULTIPLIER * segment.prefixSegment.length; 1453 } 1454 if (segment.suffixSegment) { 1455 return baseScore + SUFFIX_PRESENCE_BASE_SCORE + SUFFIX_LENGTH_SCORE_MULTIPLIER * segment.suffixSegment.length; 1456 } 1457 return baseScore; 1458 } 1459 function sortRoutes(routes) { 1460 const scoredRoutes = []; 1461 routes.forEach((d, i) => { 1462 if (d.isRoot || !d.path) { 1463 return; 1464 } 1465 const trimmed = trimPathLeft(d.fullPath); 1466 let parsed = parsePathname(trimmed); 1467 let skip = 0; 1468 while (parsed.length > skip + 1 && parsed[skip]?.value === "/") { 1469 skip++; 1470 } 1471 if (skip > 0) parsed = parsed.slice(skip); 1472 let optionalParamCount = 0; 1473 let hasStaticAfter = false; 1474 const scores = parsed.map((segment, index) => { 1475 if (segment.value === "/") { 1476 return SLASH_SCORE; 1477 } 1478 if (segment.type === SEGMENT_TYPE_PATHNAME) { 1479 return STATIC_SEGMENT_SCORE; 1480 } 1481 let baseScore = void 0; 1482 if (segment.type === SEGMENT_TYPE_PARAM) { 1483 baseScore = REQUIRED_PARAM_BASE_SCORE; 1484 } else if (segment.type === SEGMENT_TYPE_OPTIONAL_PARAM) { 1485 baseScore = OPTIONAL_PARAM_BASE_SCORE; 1486 optionalParamCount++; 1487 } else { 1488 baseScore = WILDCARD_PARAM_BASE_SCORE; 1489 } 1490 for (let i2 = index + 1; i2 < parsed.length; i2++) { 1491 const nextSegment = parsed[i2]; 1492 if (nextSegment.type === SEGMENT_TYPE_PATHNAME && nextSegment.value !== "/") { 1493 hasStaticAfter = true; 1494 return handleParam( 1495 segment, 1496 baseScore + STATIC_AFTER_DYNAMIC_BONUS_SCORE 1497 ); 1498 } 1499 } 1500 return handleParam(segment, baseScore); 1501 }); 1502 scoredRoutes.push({ 1503 child: d, 1504 trimmed, 1505 parsed, 1506 index: i, 1507 scores, 1508 optionalParamCount, 1509 hasStaticAfter 1510 }); 1511 }); 1512 const flatRoutes = scoredRoutes.sort((a, b) => { 1513 const minLength = Math.min(a.scores.length, b.scores.length); 1514 for (let i = 0; i < minLength; i++) { 1515 if (a.scores[i] !== b.scores[i]) { 1516 return b.scores[i] - a.scores[i]; 1517 } 1518 } 1519 if (a.scores.length !== b.scores.length) { 1520 if (a.optionalParamCount !== b.optionalParamCount) { 1521 if (a.hasStaticAfter === b.hasStaticAfter) { 1522 return a.optionalParamCount - b.optionalParamCount; 1523 } else if (a.hasStaticAfter && !b.hasStaticAfter) { 1524 return -1; 1525 } else if (!a.hasStaticAfter && b.hasStaticAfter) { 1526 return 1; 1527 } 1528 } 1529 return b.scores.length - a.scores.length; 1530 } 1531 for (let i = 0; i < minLength; i++) { 1532 if (a.parsed[i].value !== b.parsed[i].value) { 1533 return a.parsed[i].value > b.parsed[i].value ? 1 : -1; 1534 } 1535 } 1536 return a.index - b.index; 1537 }).map((d, i) => { 1538 d.child.rank = i; 1539 return d.child; 1540 }); 1541 return flatRoutes; 1542 } 1543 function processRouteTree({ 1544 routeTree, 1545 initRoute 1546 }) { 1547 const routesById = {}; 1548 const routesByPath = {}; 1549 const recurseRoutes = (childRoutes) => { 1550 childRoutes.forEach((childRoute, i) => { 1551 initRoute?.(childRoute, i); 1552 const existingRoute = routesById[childRoute.id]; 1553 invariant( 1554 !existingRoute, 1555 `Duplicate routes found with id: $String(childRoute.id)}` 1556 ); 1557 routesById[childRoute.id] = childRoute; 1558 if (!childRoute.isRoot && childRoute.path) { 1559 const trimmedFullPath = trimPathRight(childRoute.fullPath); 1560 if (!routesByPath[trimmedFullPath] || childRoute.fullPath.endsWith("/")) { 1561 routesByPath[trimmedFullPath] = childRoute; 1562 } 1563 } 1564 const children = childRoute.children; 1565 if (children?.length) { 1566 recurseRoutes(children); 1567 } 1568 }); 1569 }; 1570 recurseRoutes([routeTree]); 1571 const flatRoutes = sortRoutes(Object.values(routesById)); 1572 return { routesById, routesByPath, flatRoutes }; 1573 } 1574 1575 // node_modules/@tanstack/router-core/dist/esm/not-found.js 1576 function notFound(options = {}) { 1577 options.isNotFound = true; 1578 if (options.throw) throw options; 1579 return options; 1580 } 1581 function isNotFound(obj) { 1582 return !!obj?.isNotFound; 1583 } 1584 1585 // node_modules/@tanstack/router-core/dist/esm/scroll-restoration.js 1586 function getSafeSessionStorage() { 1587 try { 1588 if (typeof window !== "undefined" && typeof window.sessionStorage === "object") { 1589 return window.sessionStorage; 1590 } 1591 } catch { 1592 } 1593 return void 0; 1594 } 1595 var storageKey = "tsr-scroll-restoration-v1_3"; 1596 var throttle = (fn, wait) => { 1597 let timeout; 1598 return (...args) => { 1599 if (!timeout) { 1600 timeout = setTimeout(() => { 1601 fn(...args); 1602 timeout = null; 1603 }, wait); 1604 } 1605 }; 1606 }; 1607 function createScrollRestorationCache() { 1608 const safeSessionStorage = getSafeSessionStorage(); 1609 if (!safeSessionStorage) { 1610 return null; 1611 } 1612 const persistedState = safeSessionStorage.getItem(storageKey); 1613 let state = persistedState ? JSON.parse(persistedState) : {}; 1614 return { 1615 state, 1616 // This setter is simply to make sure that we set the sessionStorage right 1617 // after the state is updated. It doesn't necessarily need to be a functional 1618 // update. 1619 set: (updater) => (state = functionalUpdate(updater, state) || state, safeSessionStorage.setItem(storageKey, JSON.stringify(state))) 1620 }; 1621 } 1622 var scrollRestorationCache = createScrollRestorationCache(); 1623 var defaultGetScrollRestorationKey = (location) => { 1624 return location.state.__TSR_key || location.href; 1625 }; 1626 function getCssSelector(el) { 1627 const path = []; 1628 let parent; 1629 while (parent = el.parentNode) { 1630 path.push( 1631 `$el.tagName}:nth-child($Array.prototype.indexOf.call(parent.children, el) + 1})` 1632 ); 1633 el = parent; 1634 } 1635 return `$path.reverse().join(" > ")}`.toLowerCase(); 1636 } 1637 var ignoreScroll = false; 1638 function restoreScroll({ 1639 storageKey: storageKey2, 1640 key, 1641 behavior, 1642 shouldScrollRestoration, 1643 scrollToTopSelectors, 1644 location 1645 }) { 1646 let byKey; 1647 try { 1648 byKey = JSON.parse(sessionStorage.getItem(storageKey2) || "{}"); 1649 } catch (error) { 1650 console.error(error); 1651 return; 1652 } 1653 const resolvedKey = key || window.history.state?.__TSR_key; 1654 const elementEntries = byKey[resolvedKey]; 1655 ignoreScroll = true; 1656 scroll: { 1657 if (shouldScrollRestoration && elementEntries && Object.keys(elementEntries).length > 0) { 1658 for (const elementSelector in elementEntries) { 1659 const entry = elementEntries[elementSelector]; 1660 if (elementSelector === "window") { 1661 window.scrollTo({ 1662 top: entry.scrollY, 1663 left: entry.scrollX, 1664 behavior 1665 }); 1666 } else if (elementSelector) { 1667 const element = document.querySelector(elementSelector); 1668 if (element) { 1669 element.scrollLeft = entry.scrollX; 1670 element.scrollTop = entry.scrollY; 1671 } 1672 } 1673 } 1674 break scroll; 1675 } 1676 const hash = (location ?? window.location).hash.split("#", 2)[1]; 1677 if (hash) { 1678 const hashScrollIntoViewOptions = window.history.state?.__hashScrollIntoViewOptions ?? true; 1679 if (hashScrollIntoViewOptions) { 1680 const el = document.getElementById(hash); 1681 if (el) { 1682 el.scrollIntoView(hashScrollIntoViewOptions); 1683 } 1684 } 1685 break scroll; 1686 } 1687 const scrollOptions = { top: 0, left: 0, behavior }; 1688 window.scrollTo(scrollOptions); 1689 if (scrollToTopSelectors) { 1690 for (const selector of scrollToTopSelectors) { 1691 if (selector === "window") continue; 1692 const element = typeof selector === "function" ? selector() : document.querySelector(selector); 1693 if (element) element.scrollTo(scrollOptions); 1694 } 1695 } 1696 } 1697 ignoreScroll = false; 1698 } 1699 function setupScrollRestoration(router, force) { 1700 if (!scrollRestorationCache && !router.isServer) { 1701 return; 1702 } 1703 const shouldScrollRestoration = force ?? router.options.scrollRestoration ?? false; 1704 if (shouldScrollRestoration) { 1705 router.isScrollRestoring = true; 1706 } 1707 if (router.isServer || router.isScrollRestorationSetup || !scrollRestorationCache) { 1708 return; 1709 } 1710 router.isScrollRestorationSetup = true; 1711 ignoreScroll = false; 1712 const getKey = router.options.getScrollRestorationKey || defaultGetScrollRestorationKey; 1713 window.history.scrollRestoration = "manual"; 1714 const onScroll = (event) => { 1715 if (ignoreScroll || !router.isScrollRestoring) { 1716 return; 1717 } 1718 let elementSelector = ""; 1719 if (event.target === document || event.target === window) { 1720 elementSelector = "window"; 1721 } else { 1722 const attrId = event.target.getAttribute( 1723 "data-scroll-restoration-id" 1724 ); 1725 if (attrId) { 1726 elementSelector = `[data-scroll-restoration-id="$attrId}"]`; 1727 } else { 1728 elementSelector = getCssSelector(event.target); 1729 } 1730 } 1731 const restoreKey = getKey(router.state.location); 1732 scrollRestorationCache.set((state) => { 1733 const keyEntry = state[restoreKey] ||= {}; 1734 const elementEntry = keyEntry[elementSelector] ||= {}; 1735 if (elementSelector === "window") { 1736 elementEntry.scrollX = window.scrollX || 0; 1737 elementEntry.scrollY = window.scrollY || 0; 1738 } else if (elementSelector) { 1739 const element = document.querySelector(elementSelector); 1740 if (element) { 1741 elementEntry.scrollX = element.scrollLeft || 0; 1742 elementEntry.scrollY = element.scrollTop || 0; 1743 } 1744 } 1745 return state; 1746 }); 1747 }; 1748 if (typeof document !== "undefined") { 1749 document.addEventListener("scroll", throttle(onScroll, 100), true); 1750 } 1751 router.subscribe("onRendered", (event) => { 1752 const cacheKey = getKey(event.toLocation); 1753 if (!router.resetNextScroll) { 1754 router.resetNextScroll = true; 1755 return; 1756 } 1757 if (typeof router.options.scrollRestoration === "function") { 1758 const shouldRestore = router.options.scrollRestoration({ 1759 location: router.latestLocation 1760 }); 1761 if (!shouldRestore) { 1762 return; 1763 } 1764 } 1765 restoreScroll({ 1766 storageKey, 1767 key: cacheKey, 1768 behavior: router.options.scrollRestorationBehavior, 1769 shouldScrollRestoration: router.isScrollRestoring, 1770 scrollToTopSelectors: router.options.scrollToTopSelectors, 1771 location: router.history.location 1772 }); 1773 if (router.isScrollRestoring) { 1774 scrollRestorationCache.set((state) => { 1775 state[cacheKey] ||= {}; 1776 return state; 1777 }); 1778 } 1779 }); 1780 } 1781 function handleHashScroll(router) { 1782 if (typeof document !== "undefined" && document.querySelector) { 1783 const hashScrollIntoViewOptions = router.state.location.state.__hashScrollIntoViewOptions ?? true; 1784 if (hashScrollIntoViewOptions && router.state.location.hash !== "") { 1785 const el = document.getElementById(router.state.location.hash); 1786 if (el) { 1787 el.scrollIntoView(hashScrollIntoViewOptions); 1788 } 1789 } 1790 } 1791 } 1792 1793 // node_modules/@tanstack/router-core/dist/esm/qss.js 1794 function encode(obj, stringify = String) { 1795 const result = new URLSearchParams(); 1796 for (const key in obj) { 1797 const val = obj[key]; 1798 if (val !== void 0) { 1799 result.set(key, stringify(val)); 1800 } 1801 } 1802 return result.toString(); 1803 } 1804 function toValue(str) { 1805 if (!str) return ""; 1806 if (str === "false") return false; 1807 if (str === "true") return true; 1808 return +str * 0 === 0 && +str + "" === str ? +str : str; 1809 } 1810 function decode(str) { 1811 const searchParams = new URLSearchParams(str); 1812 const result = {}; 1813 for (const [key, value] of searchParams.entries()) { 1814 const previousValue = result[key]; 1815 if (previousValue == null) { 1816 result[key] = toValue(value); 1817 } else if (Array.isArray(previousValue)) { 1818 previousValue.push(toValue(value)); 1819 } else { 1820 result[key] = [previousValue, toValue(value)]; 1821 } 1822 } 1823 return result; 1824 } 1825 1826 // node_modules/@tanstack/router-core/dist/esm/searchParams.js 1827 var defaultParseSearch = parseSearchWith(JSON.parse); 1828 var defaultStringifySearch = stringifySearchWith( 1829 JSON.stringify, 1830 JSON.parse 1831 ); 1832 function parseSearchWith(parser) { 1833 return (searchStr) => { 1834 if (searchStr[0] === "?") { 1835 searchStr = searchStr.substring(1); 1836 } 1837 const query = decode(searchStr); 1838 for (const key in query) { 1839 const value = query[key]; 1840 if (typeof value === "string") { 1841 try { 1842 query[key] = parser(value); 1843 } catch (_err) { 1844 } 1845 } 1846 } 1847 return query; 1848 }; 1849 } 1850 function stringifySearchWith(stringify, parser) { 1851 const hasParser = typeof parser === "function"; 1852 function stringifyValue(val) { 1853 if (typeof val === "object" && val !== null) { 1854 try { 1855 return stringify(val); 1856 } catch (_err) { 1857 } 1858 } else if (hasParser && typeof val === "string") { 1859 try { 1860 parser(val); 1861 return stringify(val); 1862 } catch (_err) { 1863 } 1864 } 1865 return val; 1866 } 1867 return (search) => { 1868 const searchStr = encode(search, stringifyValue); 1869 return searchStr ? `?$searchStr}` : ""; 1870 }; 1871 } 1872 1873 // node_modules/@tanstack/router-core/dist/esm/root.js 1874 var rootRouteId = "__root__"; 1875 1876 // node_modules/@tanstack/router-core/dist/esm/redirect.js 1877 function redirect(opts) { 1878 opts.statusCode = opts.statusCode || opts.code || 307; 1879 if (!opts.reloadDocument && typeof opts.href === "string") { 1880 try { 1881 new URL(opts.href); 1882 opts.reloadDocument = true; 1883 } catch { 1884 } 1885 } 1886 const headers = new Headers(opts.headers); 1887 if (opts.href && headers.get("Location") === null) { 1888 headers.set("Location", opts.href); 1889 } 1890 const response = new Response(null, { 1891 status: opts.statusCode, 1892 headers 1893 }); 1894 response.options = opts; 1895 if (opts.throw) { 1896 throw response; 1897 } 1898 return response; 1899 } 1900 function isRedirect(obj) { 1901 return obj instanceof Response && !!obj.options; 1902 } 1903 1904 // node_modules/@tanstack/router-core/dist/esm/lru-cache.js 1905 function createLRUCache(max) { 1906 const cache = /* @__PURE__ */ new Map(); 1907 let oldest; 1908 let newest; 1909 const touch = (entry) => { 1910 if (!entry.next) return; 1911 if (!entry.prev) { 1912 entry.next.prev = void 0; 1913 oldest = entry.next; 1914 entry.next = void 0; 1915 if (newest) { 1916 entry.prev = newest; 1917 newest.next = entry; 1918 } 1919 } else { 1920 entry.prev.next = entry.next; 1921 entry.next.prev = entry.prev; 1922 entry.next = void 0; 1923 if (newest) { 1924 newest.next = entry; 1925 entry.prev = newest; 1926 } 1927 } 1928 newest = entry; 1929 }; 1930 return { 1931 get(key) { 1932 const entry = cache.get(key); 1933 if (!entry) return void 0; 1934 touch(entry); 1935 return entry.value; 1936 }, 1937 set(key, value) { 1938 if (cache.size >= max && oldest) { 1939 const toDelete = oldest; 1940 cache.delete(toDelete.key); 1941 if (toDelete.next) { 1942 oldest = toDelete.next; 1943 toDelete.next.prev = void 0; 1944 } 1945 if (toDelete === newest) { 1946 newest = void 0; 1947 } 1948 } 1949 const existing = cache.get(key); 1950 if (existing) { 1951 existing.value = value; 1952 touch(existing); 1953 } else { 1954 const entry = { key, value, prev: newest }; 1955 if (newest) newest.next = entry; 1956 newest = entry; 1957 if (!oldest) oldest = entry; 1958 cache.set(key, entry); 1959 } 1960 } 1961 }; 1962 } 1963 1964 // node_modules/@tanstack/router-core/dist/esm/load-matches.js 1965 var triggerOnReady = (inner) => { 1966 if (!inner.rendered) { 1967 inner.rendered = true; 1968 return inner.onReady?.(); 1969 } 1970 }; 1971 var resolvePreload = (inner, matchId) => { 1972 return !!(inner.preload && !inner.router.state.matches.some((d) => d.id === matchId)); 1973 }; 1974 var _handleNotFound = (inner, err) => { 1975 const routeCursor = inner.router.routesById[err.routeId ?? ""] ?? inner.router.routeTree; 1976 if (!routeCursor.options.notFoundComponent && inner.router.options?.defaultNotFoundComponent) { 1977 routeCursor.options.notFoundComponent = inner.router.options.defaultNotFoundComponent; 1978 } 1979 invariant( 1980 routeCursor.options.notFoundComponent, 1981 "No notFoundComponent found. Please set a notFoundComponent on your route or provide a defaultNotFoundComponent to the router." 1982 ); 1983 const matchForRoute = inner.matches.find((m) => m.routeId === routeCursor.id); 1984 invariant(matchForRoute, "Could not find match for route: " + routeCursor.id); 1985 inner.updateMatch(matchForRoute.id, (prev) => ({ 1986 ...prev, 1987 status: "notFound", 1988 error: err, 1989 isFetching: false 1990 })); 1991 if (err.routerCode === "BEFORE_LOAD" && routeCursor.parentRoute) { 1992 err.routeId = routeCursor.parentRoute.id; 1993 _handleNotFound(inner, err); 1994 } 1995 }; 1996 var handleRedirectAndNotFound = (inner, match, err) => { 1997 if (!isRedirect(err) && !isNotFound(err)) return; 1998 if (isRedirect(err) && err.redirectHandled && !err.options.reloadDocument) { 1999 throw err; 2000 } 2001 if (match) { 2002 match._nonReactive.beforeLoadPromise?.resolve(); 2003 match._nonReactive.loaderPromise?.resolve(); 2004 match._nonReactive.beforeLoadPromise = void 0; 2005 match._nonReactive.loaderPromise = void 0; 2006 const status = isRedirect(err) ? "redirected" : "notFound"; 2007 inner.updateMatch(match.id, (prev) => ({ 2008 ...prev, 2009 status, 2010 isFetching: false, 2011 error: err 2012 })); 2013 if (isNotFound(err) && !err.routeId) { 2014 err.routeId = match.routeId; 2015 } 2016 match._nonReactive.loadPromise?.resolve(); 2017 } 2018 if (isRedirect(err)) { 2019 inner.rendered = true; 2020 err.options._fromLocation = inner.location; 2021 err.redirectHandled = true; 2022 err = inner.router.resolveRedirect(err); 2023 throw err; 2024 } else { 2025 _handleNotFound(inner, err); 2026 throw err; 2027 } 2028 }; 2029 var shouldSkipLoader = (inner, matchId) => { 2030 const match = inner.router.getMatch(matchId); 2031 if (!inner.router.isServer && match._nonReactive.dehydrated) { 2032 return true; 2033 } 2034 if (inner.router.isServer && match.ssr === false) { 2035 return true; 2036 } 2037 return false; 2038 }; 2039 var handleSerialError = (inner, index, err, routerCode) => { 2040 const { id: matchId, routeId } = inner.matches[index]; 2041 const route = inner.router.looseRoutesById[routeId]; 2042 if (err instanceof Promise) { 2043 throw err; 2044 } 2045 err.routerCode = routerCode; 2046 inner.firstBadMatchIndex ??= index; 2047 handleRedirectAndNotFound(inner, inner.router.getMatch(matchId), err); 2048 try { 2049 route.options.onError?.(err); 2050 } catch (errorHandlerErr) { 2051 err = errorHandlerErr; 2052 handleRedirectAndNotFound(inner, inner.router.getMatch(matchId), err); 2053 } 2054 inner.updateMatch(matchId, (prev) => { 2055 prev._nonReactive.beforeLoadPromise?.resolve(); 2056 prev._nonReactive.beforeLoadPromise = void 0; 2057 prev._nonReactive.loadPromise?.resolve(); 2058 return { 2059 ...prev, 2060 error: err, 2061 status: "error", 2062 isFetching: false, 2063 updatedAt: Date.now(), 2064 abortController: new AbortController() 2065 }; 2066 }); 2067 }; 2068 var isBeforeLoadSsr = (inner, matchId, index, route) => { 2069 const existingMatch = inner.router.getMatch(matchId); 2070 const parentMatchId = inner.matches[index - 1]?.id; 2071 const parentMatch = parentMatchId ? inner.router.getMatch(parentMatchId) : void 0; 2072 if (inner.router.isShell()) { 2073 existingMatch.ssr = matchId === rootRouteId; 2074 return; 2075 } 2076 if (parentMatch?.ssr === false) { 2077 existingMatch.ssr = false; 2078 return; 2079 } 2080 const parentOverride = (tempSsr2) => { 2081 if (tempSsr2 === true && parentMatch?.ssr === "data-only") { 2082 return "data-only"; 2083 } 2084 return tempSsr2; 2085 }; 2086 const defaultSsr = inner.router.options.defaultSsr ?? true; 2087 if (route.options.ssr === void 0) { 2088 existingMatch.ssr = parentOverride(defaultSsr); 2089 return; 2090 } 2091 if (typeof route.options.ssr !== "function") { 2092 existingMatch.ssr = parentOverride(route.options.ssr); 2093 return; 2094 } 2095 const { search, params } = existingMatch; 2096 const ssrFnContext = { 2097 search: makeMaybe(search, existingMatch.searchError), 2098 params: makeMaybe(params, existingMatch.paramsError), 2099 location: inner.location, 2100 matches: inner.matches.map((match) => ({ 2101 index: match.index, 2102 pathname: match.pathname, 2103 fullPath: match.fullPath, 2104 staticData: match.staticData, 2105 id: match.id, 2106 routeId: match.routeId, 2107 search: makeMaybe(match.search, match.searchError), 2108 params: makeMaybe(match.params, match.paramsError), 2109 ssr: match.ssr 2110 })) 2111 }; 2112 const tempSsr = route.options.ssr(ssrFnContext); 2113 if (isPromise(tempSsr)) { 2114 return tempSsr.then((ssr) => { 2115 existingMatch.ssr = parentOverride(ssr ?? defaultSsr); 2116 }); 2117 } 2118 existingMatch.ssr = parentOverride(tempSsr ?? defaultSsr); 2119 return; 2120 }; 2121 var setupPendingTimeout = (inner, matchId, route, match) => { 2122 if (match._nonReactive.pendingTimeout !== void 0) return; 2123 const pendingMs = route.options.pendingMs ?? inner.router.options.defaultPendingMs; 2124 const shouldPending = !!(inner.onReady && !inner.router.isServer && !resolvePreload(inner, matchId) && (route.options.loader || route.options.beforeLoad || routeNeedsPreload(route)) && typeof pendingMs === "number" && pendingMs !== Infinity && (route.options.pendingComponent ?? inner.router.options?.defaultPendingComponent)); 2125 if (shouldPending) { 2126 const pendingTimeout = setTimeout(() => { 2127 triggerOnReady(inner); 2128 }, pendingMs); 2129 match._nonReactive.pendingTimeout = pendingTimeout; 2130 } 2131 }; 2132 var preBeforeLoadSetup = (inner, matchId, route) => { 2133 const existingMatch = inner.router.getMatch(matchId); 2134 if (!existingMatch._nonReactive.beforeLoadPromise && !existingMatch._nonReactive.loaderPromise) 2135 return; 2136 setupPendingTimeout(inner, matchId, route, existingMatch); 2137 const then = () => { 2138 const match = inner.router.getMatch(matchId); 2139 if (match.preload && (match.status === "redirected" || match.status === "notFound")) { 2140 handleRedirectAndNotFound(inner, match, match.error); 2141 } 2142 }; 2143 return existingMatch._nonReactive.beforeLoadPromise ? existingMatch._nonReactive.beforeLoadPromise.then(then) : then(); 2144 }; 2145 var executeBeforeLoad = (inner, matchId, index, route) => { 2146 const match = inner.router.getMatch(matchId); 2147 const prevLoadPromise = match._nonReactive.loadPromise; 2148 match._nonReactive.loadPromise = createControlledPromise(() => { 2149 prevLoadPromise?.resolve(); 2150 }); 2151 const { paramsError, searchError } = match; 2152 if (paramsError) { 2153 handleSerialError(inner, index, paramsError, "PARSE_PARAMS"); 2154 } 2155 if (searchError) { 2156 handleSerialError(inner, index, searchError, "VALIDATE_SEARCH"); 2157 } 2158 setupPendingTimeout(inner, matchId, route, match); 2159 const abortController = new AbortController(); 2160 const parentMatchId = inner.matches[index - 1]?.id; 2161 const parentMatch = parentMatchId ? inner.router.getMatch(parentMatchId) : void 0; 2162 const parentMatchContext = parentMatch?.context ?? inner.router.options.context ?? void 0; 2163 const context = { ...parentMatchContext, ...match.__routeContext }; 2164 let isPending = false; 2165 const pending = () => { 2166 if (isPending) return; 2167 isPending = true; 2168 inner.updateMatch(matchId, (prev) => ({ 2169 ...prev, 2170 isFetching: "beforeLoad", 2171 fetchCount: prev.fetchCount + 1, 2172 abortController, 2173 context 2174 })); 2175 }; 2176 const resolve = () => { 2177 match._nonReactive.beforeLoadPromise?.resolve(); 2178 match._nonReactive.beforeLoadPromise = void 0; 2179 inner.updateMatch(matchId, (prev) => ({ 2180 ...prev, 2181 isFetching: false 2182 })); 2183 }; 2184 if (!route.options.beforeLoad) { 2185 batch(() => { 2186 pending(); 2187 resolve(); 2188 }); 2189 return; 2190 } 2191 match._nonReactive.beforeLoadPromise = createControlledPromise(); 2192 const { search, params, cause } = match; 2193 const preload = resolvePreload(inner, matchId); 2194 const beforeLoadFnContext = { 2195 search, 2196 abortController, 2197 params, 2198 preload, 2199 context, 2200 location: inner.location, 2201 navigate: (opts) => inner.router.navigate({ 2202 ...opts, 2203 _fromLocation: inner.location 2204 }), 2205 buildLocation: inner.router.buildLocation, 2206 cause: preload ? "preload" : cause, 2207 matches: inner.matches, 2208 ...inner.router.options.additionalContext 2209 }; 2210 const updateContext = (beforeLoadContext2) => { 2211 if (beforeLoadContext2 === void 0) { 2212 batch(() => { 2213 pending(); 2214 resolve(); 2215 }); 2216 return; 2217 } 2218 if (isRedirect(beforeLoadContext2) || isNotFound(beforeLoadContext2)) { 2219 pending(); 2220 handleSerialError(inner, index, beforeLoadContext2, "BEFORE_LOAD"); 2221 } 2222 batch(() => { 2223 pending(); 2224 inner.updateMatch(matchId, (prev) => ({ 2225 ...prev, 2226 __beforeLoadContext: beforeLoadContext2, 2227 context: { 2228 ...prev.context, 2229 ...beforeLoadContext2 2230 } 2231 })); 2232 resolve(); 2233 }); 2234 }; 2235 let beforeLoadContext; 2236 try { 2237 beforeLoadContext = route.options.beforeLoad(beforeLoadFnContext); 2238 if (isPromise(beforeLoadContext)) { 2239 pending(); 2240 return beforeLoadContext.catch((err) => { 2241 handleSerialError(inner, index, err, "BEFORE_LOAD"); 2242 }).then(updateContext); 2243 } 2244 } catch (err) { 2245 pending(); 2246 handleSerialError(inner, index, err, "BEFORE_LOAD"); 2247 } 2248 updateContext(beforeLoadContext); 2249 return; 2250 }; 2251 var handleBeforeLoad = (inner, index) => { 2252 const { id: matchId, routeId } = inner.matches[index]; 2253 const route = inner.router.looseRoutesById[routeId]; 2254 const serverSsr = () => { 2255 if (inner.router.isServer) { 2256 const maybePromise = isBeforeLoadSsr(inner, matchId, index, route); 2257 if (isPromise(maybePromise)) return maybePromise.then(queueExecution); 2258 } 2259 return queueExecution(); 2260 }; 2261 const execute = () => executeBeforeLoad(inner, matchId, index, route); 2262 const queueExecution = () => { 2263 if (shouldSkipLoader(inner, matchId)) return; 2264 const result = preBeforeLoadSetup(inner, matchId, route); 2265 return isPromise(result) ? result.then(execute) : execute(); 2266 }; 2267 return serverSsr(); 2268 }; 2269 var executeHead = (inner, matchId, route) => { 2270 const match = inner.router.getMatch(matchId); 2271 if (!match) { 2272 return; 2273 } 2274 if (!route.options.head && !route.options.scripts && !route.options.headers) { 2275 return; 2276 } 2277 const assetContext = { 2278 matches: inner.matches, 2279 match, 2280 params: match.params, 2281 loaderData: match.loaderData 2282 }; 2283 return Promise.all([ 2284 route.options.head?.(assetContext), 2285 route.options.scripts?.(assetContext), 2286 route.options.headers?.(assetContext) 2287 ]).then(([headFnContent, scripts, headers]) => { 2288 const meta = headFnContent?.meta; 2289 const links = headFnContent?.links; 2290 const headScripts = headFnContent?.scripts; 2291 const styles = headFnContent?.styles; 2292 return { 2293 meta, 2294 links, 2295 headScripts, 2296 headers, 2297 scripts, 2298 styles 2299 }; 2300 }); 2301 }; 2302 var getLoaderContext = (inner, matchId, index, route) => { 2303 const parentMatchPromise = inner.matchPromises[index - 1]; 2304 const { params, loaderDeps, abortController, context, cause } = inner.router.getMatch(matchId); 2305 const preload = resolvePreload(inner, matchId); 2306 return { 2307 params, 2308 deps: loaderDeps, 2309 preload: !!preload, 2310 parentMatchPromise, 2311 abortController, 2312 context, 2313 location: inner.location, 2314 navigate: (opts) => inner.router.navigate({ 2315 ...opts, 2316 _fromLocation: inner.location 2317 }), 2318 cause: preload ? "preload" : cause, 2319 route, 2320 ...inner.router.options.additionalContext 2321 }; 2322 }; 2323 var runLoader = async (inner, matchId, index, route) => { 2324 try { 2325 const match = inner.router.getMatch(matchId); 2326 try { 2327 if (!inner.router.isServer || match.ssr === true) { 2328 loadRouteChunk(route); 2329 } 2330 const loaderResult = route.options.loader?.( 2331 getLoaderContext(inner, matchId, index, route) 2332 ); 2333 const loaderResultIsPromise = route.options.loader && isPromise(loaderResult); 2334 const willLoadSomething = !!(loaderResultIsPromise || route._lazyPromise || route._componentsPromise || route.options.head || route.options.scripts || route.options.headers || match._nonReactive.minPendingPromise); 2335 if (willLoadSomething) { 2336 inner.updateMatch(matchId, (prev) => ({ 2337 ...prev, 2338 isFetching: "loader" 2339 })); 2340 } 2341 if (route.options.loader) { 2342 const loaderData = loaderResultIsPromise ? await loaderResult : loaderResult; 2343 handleRedirectAndNotFound( 2344 inner, 2345 inner.router.getMatch(matchId), 2346 loaderData 2347 ); 2348 if (loaderData !== void 0) { 2349 inner.updateMatch(matchId, (prev) => ({ 2350 ...prev, 2351 loaderData 2352 })); 2353 } 2354 } 2355 if (route._lazyPromise) await route._lazyPromise; 2356 const headResult = executeHead(inner, matchId, route); 2357 const head = headResult ? await headResult : void 0; 2358 const pendingPromise = match._nonReactive.minPendingPromise; 2359 if (pendingPromise) await pendingPromise; 2360 if (route._componentsPromise) await route._componentsPromise; 2361 inner.updateMatch(matchId, (prev) => ({ 2362 ...prev, 2363 error: void 0, 2364 status: "success", 2365 isFetching: false, 2366 updatedAt: Date.now(), 2367 ...head 2368 })); 2369 } catch (e) { 2370 let error = e; 2371 const pendingPromise = match._nonReactive.minPendingPromise; 2372 if (pendingPromise) await pendingPromise; 2373 if (isNotFound(e)) { 2374 await route.options.notFoundComponent?.preload?.(); 2375 } 2376 handleRedirectAndNotFound(inner, inner.router.getMatch(matchId), e); 2377 try { 2378 route.options.onError?.(e); 2379 } catch (onErrorError) { 2380 error = onErrorError; 2381 handleRedirectAndNotFound( 2382 inner, 2383 inner.router.getMatch(matchId), 2384 onErrorError 2385 ); 2386 } 2387 const headResult = executeHead(inner, matchId, route); 2388 const head = headResult ? await headResult : void 0; 2389 inner.updateMatch(matchId, (prev) => ({ 2390 ...prev, 2391 error, 2392 status: "error", 2393 isFetching: false, 2394 ...head 2395 })); 2396 } 2397 } catch (err) { 2398 const match = inner.router.getMatch(matchId); 2399 if (match) { 2400 const headResult = executeHead(inner, matchId, route); 2401 if (headResult) { 2402 const head = await headResult; 2403 inner.updateMatch(matchId, (prev) => ({ 2404 ...prev, 2405 ...head 2406 })); 2407 } 2408 match._nonReactive.loaderPromise = void 0; 2409 } 2410 handleRedirectAndNotFound(inner, match, err); 2411 } 2412 }; 2413 var loadRouteMatch = async (inner, index) => { 2414 const { id: matchId, routeId } = inner.matches[index]; 2415 let loaderShouldRunAsync = false; 2416 let loaderIsRunningAsync = false; 2417 const route = inner.router.looseRoutesById[routeId]; 2418 if (shouldSkipLoader(inner, matchId)) { 2419 if (inner.router.isServer) { 2420 const headResult = executeHead(inner, matchId, route); 2421 if (headResult) { 2422 const head = await headResult; 2423 inner.updateMatch(matchId, (prev) => ({ 2424 ...prev, 2425 ...head 2426 })); 2427 } 2428 return inner.router.getMatch(matchId); 2429 } 2430 } else { 2431 const prevMatch = inner.router.getMatch(matchId); 2432 if (prevMatch._nonReactive.loaderPromise) { 2433 if (prevMatch.status === "success" && !inner.sync && !prevMatch.preload) { 2434 return prevMatch; 2435 } 2436 await prevMatch._nonReactive.loaderPromise; 2437 const match2 = inner.router.getMatch(matchId); 2438 if (match2.error) { 2439 handleRedirectAndNotFound(inner, match2, match2.error); 2440 } 2441 } else { 2442 const age = Date.now() - prevMatch.updatedAt; 2443 const preload = resolvePreload(inner, matchId); 2444 const staleAge = preload ? route.options.preloadStaleTime ?? inner.router.options.defaultPreloadStaleTime ?? 3e4 : route.options.staleTime ?? inner.router.options.defaultStaleTime ?? 0; 2445 const shouldReloadOption = route.options.shouldReload; 2446 const shouldReload = typeof shouldReloadOption === "function" ? shouldReloadOption(getLoaderContext(inner, matchId, index, route)) : shouldReloadOption; 2447 const nextPreload = !!preload && !inner.router.state.matches.some((d) => d.id === matchId); 2448 const match2 = inner.router.getMatch(matchId); 2449 match2._nonReactive.loaderPromise = createControlledPromise(); 2450 if (nextPreload !== match2.preload) { 2451 inner.updateMatch(matchId, (prev) => ({ 2452 ...prev, 2453 preload: nextPreload 2454 })); 2455 } 2456 const { status, invalid } = match2; 2457 loaderShouldRunAsync = status === "success" && (invalid || (shouldReload ?? age > staleAge)); 2458 if (preload && route.options.preload === false) ; 2459 else if (loaderShouldRunAsync && !inner.sync) { 2460 loaderIsRunningAsync = true; 2461 (async () => { 2462 try { 2463 await runLoader(inner, matchId, index, route); 2464 const match3 = inner.router.getMatch(matchId); 2465 match3._nonReactive.loaderPromise?.resolve(); 2466 match3._nonReactive.loadPromise?.resolve(); 2467 match3._nonReactive.loaderPromise = void 0; 2468 } catch (err) { 2469 if (isRedirect(err)) { 2470 await inner.router.navigate(err.options); 2471 } 2472 } 2473 })(); 2474 } else if (status !== "success" || loaderShouldRunAsync && inner.sync) { 2475 await runLoader(inner, matchId, index, route); 2476 } else { 2477 const headResult = executeHead(inner, matchId, route); 2478 if (headResult) { 2479 const head = await headResult; 2480 inner.updateMatch(matchId, (prev) => ({ 2481 ...prev, 2482 ...head 2483 })); 2484 } 2485 } 2486 } 2487 } 2488 const match = inner.router.getMatch(matchId); 2489 if (!loaderIsRunningAsync) { 2490 match._nonReactive.loaderPromise?.resolve(); 2491 match._nonReactive.loadPromise?.resolve(); 2492 } 2493 clearTimeout(match._nonReactive.pendingTimeout); 2494 match._nonReactive.pendingTimeout = void 0; 2495 if (!loaderIsRunningAsync) match._nonReactive.loaderPromise = void 0; 2496 match._nonReactive.dehydrated = void 0; 2497 const nextIsFetching = loaderIsRunningAsync ? match.isFetching : false; 2498 if (nextIsFetching !== match.isFetching || match.invalid !== false) { 2499 inner.updateMatch(matchId, (prev) => ({ 2500 ...prev, 2501 isFetching: nextIsFetching, 2502 invalid: false 2503 })); 2504 return inner.router.getMatch(matchId); 2505 } else { 2506 return match; 2507 } 2508 }; 2509 async function loadMatches(arg) { 2510 const inner = Object.assign(arg, { 2511 matchPromises: [] 2512 }); 2513 if (!inner.router.isServer && inner.router.state.matches.some((d) => d._forcePending)) { 2514 triggerOnReady(inner); 2515 } 2516 try { 2517 for (let i = 0; i < inner.matches.length; i++) { 2518 const beforeLoad = handleBeforeLoad(inner, i); 2519 if (isPromise(beforeLoad)) await beforeLoad; 2520 } 2521 const max = inner.firstBadMatchIndex ?? inner.matches.length; 2522 for (let i = 0; i < max; i++) { 2523 inner.matchPromises.push(loadRouteMatch(inner, i)); 2524 } 2525 await Promise.all(inner.matchPromises); 2526 const readyPromise = triggerOnReady(inner); 2527 if (isPromise(readyPromise)) await readyPromise; 2528 } catch (err) { 2529 if (isNotFound(err) && !inner.preload) { 2530 const readyPromise = triggerOnReady(inner); 2531 if (isPromise(readyPromise)) await readyPromise; 2532 throw err; 2533 } 2534 if (isRedirect(err)) { 2535 throw err; 2536 } 2537 } 2538 return inner.matches; 2539 } 2540 async function loadRouteChunk(route) { 2541 if (!route._lazyLoaded && route._lazyPromise === void 0) { 2542 if (route.lazyFn) { 2543 route._lazyPromise = route.lazyFn().then((lazyRoute) => { 2544 const { id: _id, ...options } = lazyRoute.options; 2545 Object.assign(route.options, options); 2546 route._lazyLoaded = true; 2547 route._lazyPromise = void 0; 2548 }); 2549 } else { 2550 route._lazyLoaded = true; 2551 } 2552 } 2553 if (!route._componentsLoaded && route._componentsPromise === void 0) { 2554 const loadComponents = () => { 2555 const preloads = []; 2556 for (const type of componentTypes) { 2557 const preload = route.options[type]?.preload; 2558 if (preload) preloads.push(preload()); 2559 } 2560 if (preloads.length) 2561 return Promise.all(preloads).then(() => { 2562 route._componentsLoaded = true; 2563 route._componentsPromise = void 0; 2564 }); 2565 route._componentsLoaded = true; 2566 route._componentsPromise = void 0; 2567 return; 2568 }; 2569 route._componentsPromise = route._lazyPromise ? route._lazyPromise.then(loadComponents) : loadComponents(); 2570 } 2571 return route._componentsPromise; 2572 } 2573 function makeMaybe(value, error) { 2574 if (error) { 2575 return { status: "error", error }; 2576 } 2577 return { status: "success", value }; 2578 } 2579 function routeNeedsPreload(route) { 2580 for (const componentType of componentTypes) { 2581 if (route.options[componentType]?.preload) { 2582 return true; 2583 } 2584 } 2585 return false; 2586 } 2587 var componentTypes = [ 2588 "component", 2589 "errorComponent", 2590 "pendingComponent", 2591 "notFoundComponent" 2592 ]; 2593 2594 // node_modules/@tanstack/router-core/dist/esm/rewrite.js 2595 function composeRewrites(rewrites) { 2596 return { 2597 input: ({ url }) => { 2598 for (const rewrite of rewrites) { 2599 url = executeRewriteInput(rewrite, url); 2600 } 2601 return url; 2602 }, 2603 output: ({ url }) => { 2604 for (let i = rewrites.length - 1; i >= 0; i--) { 2605 url = executeRewriteOutput(rewrites[i], url); 2606 } 2607 return url; 2608 } 2609 }; 2610 } 2611 function rewriteBasepath(opts) { 2612 const trimmedBasepath = trimPath(opts.basepath); 2613 const normalizedBasepath = `/$trimmedBasepath}`; 2614 const normalizedBasepathWithSlash = `$normalizedBasepath}/`; 2615 const checkBasepath = opts.caseSensitive ? normalizedBasepath : normalizedBasepath.toLowerCase(); 2616 const checkBasepathWithSlash = opts.caseSensitive ? normalizedBasepathWithSlash : normalizedBasepathWithSlash.toLowerCase(); 2617 return { 2618 input: ({ url }) => { 2619 const pathname = opts.caseSensitive ? url.pathname : url.pathname.toLowerCase(); 2620 if (pathname === checkBasepath) { 2621 url.pathname = "/"; 2622 } else if (pathname.startsWith(checkBasepathWithSlash)) { 2623 url.pathname = url.pathname.slice(normalizedBasepath.length); 2624 } 2625 return url; 2626 }, 2627 output: ({ url }) => { 2628 url.pathname = joinPaths(["/", trimmedBasepath, url.pathname]); 2629 return url; 2630 } 2631 }; 2632 } 2633 function executeRewriteInput(rewrite, url) { 2634 const res = rewrite?.input?.({ url }); 2635 if (res) { 2636 if (typeof res === "string") { 2637 return new URL(res); 2638 } else if (res instanceof URL) { 2639 return res; 2640 } 2641 } 2642 return url; 2643 } 2644 function executeRewriteOutput(rewrite, url) { 2645 const res = rewrite?.output?.({ url }); 2646 if (res) { 2647 if (typeof res === "string") { 2648 return new URL(res); 2649 } else if (res instanceof URL) { 2650 return res; 2651 } 2652 } 2653 return url; 2654 } 2655 2656 // node_modules/@tanstack/router-core/dist/esm/router.js 2657 function getLocationChangeInfo(routerState) { 2658 const fromLocation = routerState.resolvedLocation; 2659 const toLocation = routerState.location; 2660 const pathChanged = fromLocation?.pathname !== toLocation.pathname; 2661 const hrefChanged = fromLocation?.href !== toLocation.href; 2662 const hashChanged = fromLocation?.hash !== toLocation.hash; 2663 return { fromLocation, toLocation, pathChanged, hrefChanged, hashChanged }; 2664 } 2665 var RouterCore = class { 2666 /** 2667 * @deprecated Use the `createRouter` function instead 2668 */ 2669 constructor(options) { 2670 this.tempLocationKey = `$Math.round( 2671 Math.random() * 1e7 2672 )}`; 2673 this.resetNextScroll = true; 2674 this.shouldViewTransition = void 0; 2675 this.isViewTransitionTypesSupported = void 0; 2676 this.subscribers = /* @__PURE__ */ new Set(); 2677 this.isScrollRestoring = false; 2678 this.isScrollRestorationSetup = false; 2679 this.startTransition = (fn) => fn(); 2680 this.update = (newOptions) => { 2681 if (newOptions.notFoundRoute) { 2682 console.warn( 2683 "The notFoundRoute API is deprecated and will be removed in the next major version. See https://tanstack.com/router/v1/docs/framework/react/guide/not-found-errors#migrating-from-notfoundroute for more info." 2684 ); 2685 } 2686 const prevOptions = this.options; 2687 const prevBasepath = this.basepath ?? prevOptions?.basepath ?? "/"; 2688 const basepathWasUnset = this.basepath === void 0; 2689 const prevRewriteOption = prevOptions?.rewrite; 2690 this.options = { 2691 ...prevOptions, 2692 ...newOptions 2693 }; 2694 this.isServer = this.options.isServer ?? typeof document === "undefined"; 2695 this.pathParamsDecodeCharMap = this.options.pathParamsAllowedCharacters ? new Map( 2696 this.options.pathParamsAllowedCharacters.map((char) => [ 2697 encodeURIComponent(char), 2698 char 2699 ]) 2700 ) : void 0; 2701 if (!this.history || this.options.history && this.options.history !== this.history) { 2702 if (!this.options.history) { 2703 if (!this.isServer) { 2704 this.history = createBrowserHistory(); 2705 } 2706 } else { 2707 this.history = this.options.history; 2708 } 2709 } 2710 this.origin = this.options.origin; 2711 if (!this.origin) { 2712 if (!this.isServer && window?.origin && window.origin !== "null") { 2713 this.origin = window.origin; 2714 } else { 2715 this.origin = "http://localhost"; 2716 } 2717 } 2718 if (this.history) { 2719 this.updateLatestLocation(); 2720 } 2721 if (this.options.routeTree !== this.routeTree) { 2722 this.routeTree = this.options.routeTree; 2723 this.buildRouteTree(); 2724 } 2725 if (!this.__store && this.latestLocation) { 2726 this.__store = new Store(getInitialRouterState(this.latestLocation), { 2727 onUpdate: () => { 2728 this.__store.state = { 2729 ...this.state, 2730 cachedMatches: this.state.cachedMatches.filter( 2731 (d) => !["redirected"].includes(d.status) 2732 ) 2733 }; 2734 } 2735 }); 2736 setupScrollRestoration(this); 2737 } 2738 let needsLocationUpdate = false; 2739 const nextBasepath = this.options.basepath ?? "/"; 2740 const nextRewriteOption = this.options.rewrite; 2741 const basepathChanged = basepathWasUnset || prevBasepath !== nextBasepath; 2742 const rewriteChanged = prevRewriteOption !== nextRewriteOption; 2743 if (basepathChanged || rewriteChanged) { 2744 this.basepath = nextBasepath; 2745 const rewrites = []; 2746 if (trimPath(nextBasepath) !== "") { 2747 rewrites.push( 2748 rewriteBasepath({ 2749 basepath: nextBasepath 2750 }) 2751 ); 2752 } 2753 if (nextRewriteOption) { 2754 rewrites.push(nextRewriteOption); 2755 } 2756 this.rewrite = rewrites.length === 0 ? void 0 : rewrites.length === 1 ? rewrites[0] : composeRewrites(rewrites); 2757 if (this.history) { 2758 this.updateLatestLocation(); 2759 } 2760 needsLocationUpdate = true; 2761 } 2762 if (needsLocationUpdate && this.__store) { 2763 this.__store.state = { 2764 ...this.state, 2765 location: this.latestLocation 2766 }; 2767 } 2768 if (typeof window !== "undefined" && "CSS" in window && typeof window.CSS?.supports === "function") { 2769 this.isViewTransitionTypesSupported = window.CSS.supports( 2770 "selector(:active-view-transition-type(a)" 2771 ); 2772 } 2773 }; 2774 this.updateLatestLocation = () => { 2775 this.latestLocation = this.parseLocation( 2776 this.history.location, 2777 this.latestLocation 2778 ); 2779 }; 2780 this.buildRouteTree = () => { 2781 const { routesById, routesByPath, flatRoutes } = processRouteTree({ 2782 routeTree: this.routeTree, 2783 initRoute: (route, i) => { 2784 route.init({ 2785 originalIndex: i 2786 }); 2787 } 2788 }); 2789 this.routesById = routesById; 2790 this.routesByPath = routesByPath; 2791 this.flatRoutes = flatRoutes; 2792 const notFoundRoute = this.options.notFoundRoute; 2793 if (notFoundRoute) { 2794 notFoundRoute.init({ 2795 originalIndex: 99999999999 2796 }); 2797 this.routesById[notFoundRoute.id] = notFoundRoute; 2798 } 2799 }; 2800 this.subscribe = (eventType, fn) => { 2801 const listener = { 2802 eventType, 2803 fn 2804 }; 2805 this.subscribers.add(listener); 2806 return () => { 2807 this.subscribers.delete(listener); 2808 }; 2809 }; 2810 this.emit = (routerEvent) => { 2811 this.subscribers.forEach((listener) => { 2812 if (listener.eventType === routerEvent.type) { 2813 listener.fn(routerEvent); 2814 } 2815 }); 2816 }; 2817 this.parseLocation = (locationToParse, previousLocation) => { 2818 const parse = ({ 2819 href, 2820 state 2821 }) => { 2822 const fullUrl = new URL(href, this.origin); 2823 const url = executeRewriteInput(this.rewrite, fullUrl); 2824 const parsedSearch = this.options.parseSearch(url.search); 2825 const searchStr = this.options.stringifySearch(parsedSearch); 2826 url.search = searchStr; 2827 const fullPath = url.href.replace(url.origin, ""); 2828 const { pathname, hash } = url; 2829 return { 2830 href: fullPath, 2831 publicHref: href, 2832 url: url.href, 2833 pathname, 2834 searchStr, 2835 search: replaceEqualDeep(previousLocation?.search, parsedSearch), 2836 hash: hash.split("#").reverse()[0] ?? "", 2837 state: replaceEqualDeep(previousLocation?.state, state) 2838 }; 2839 }; 2840 const location = parse(locationToParse); 2841 const { __tempLocation, __tempKey } = location.state; 2842 if (__tempLocation && (!__tempKey || __tempKey === this.tempLocationKey)) { 2843 const parsedTempLocation = parse(__tempLocation); 2844 parsedTempLocation.state.key = location.state.key; 2845 parsedTempLocation.state.__TSR_key = location.state.__TSR_key; 2846 delete parsedTempLocation.state.__tempLocation; 2847 return { 2848 ...parsedTempLocation, 2849 maskedLocation: location 2850 }; 2851 } 2852 return location; 2853 }; 2854 this.resolvePathWithBase = (from, path) => { 2855 const resolvedPath = resolvePath({ 2856 base: from, 2857 to: cleanPath(path), 2858 trailingSlash: this.options.trailingSlash, 2859 parseCache: this.parsePathnameCache 2860 }); 2861 return resolvedPath; 2862 }; 2863 this.matchRoutes = (pathnameOrNext, locationSearchOrOpts, opts) => { 2864 if (typeof pathnameOrNext === "string") { 2865 return this.matchRoutesInternal( 2866 { 2867 pathname: pathnameOrNext, 2868 search: locationSearchOrOpts 2869 }, 2870 opts 2871 ); 2872 } 2873 return this.matchRoutesInternal(pathnameOrNext, locationSearchOrOpts); 2874 }; 2875 this.parsePathnameCache = createLRUCache(1e3); 2876 this.getMatchedRoutes = (pathname, routePathname) => { 2877 return getMatchedRoutes({ 2878 pathname, 2879 routePathname, 2880 caseSensitive: this.options.caseSensitive, 2881 routesByPath: this.routesByPath, 2882 routesById: this.routesById, 2883 flatRoutes: this.flatRoutes, 2884 parseCache: this.parsePathnameCache 2885 }); 2886 }; 2887 this.cancelMatch = (id) => { 2888 const match = this.getMatch(id); 2889 if (!match) return; 2890 match.abortController.abort(); 2891 clearTimeout(match._nonReactive.pendingTimeout); 2892 match._nonReactive.pendingTimeout = void 0; 2893 }; 2894 this.cancelMatches = () => { 2895 this.state.pendingMatches?.forEach((match) => { 2896 this.cancelMatch(match.id); 2897 }); 2898 }; 2899 this.buildLocation = (opts) => { 2900 const build = (dest = {}) => { 2901 const currentLocation = dest._fromLocation || this.latestLocation; 2902 const allCurrentLocationMatches = this.matchRoutes(currentLocation, { 2903 _buildLocation: true 2904 }); 2905 const lastMatch = last(allCurrentLocationMatches); 2906 if (dest.from && true && dest._isNavigate) { 2907 const allFromMatches = this.getMatchedRoutes( 2908 dest.from, 2909 void 0 2910 ).matchedRoutes; 2911 const matchedFrom = findLast(allCurrentLocationMatches, (d) => { 2912 return comparePaths(d.fullPath, dest.from); 2913 }); 2914 const matchedCurrent = findLast(allFromMatches, (d) => { 2915 return comparePaths(d.fullPath, lastMatch.fullPath); 2916 }); 2917 if (!matchedFrom && !matchedCurrent) { 2918 console.warn(`Could not find match for from: $dest.from}`); 2919 } 2920 } 2921 const defaultedFromPath = dest.unsafeRelative === "path" ? currentLocation.pathname : dest.from ?? lastMatch.fullPath; 2922 const fromPath = this.resolvePathWithBase(defaultedFromPath, "."); 2923 const fromSearch = lastMatch.search; 2924 const fromParams = { ...lastMatch.params }; 2925 const nextTo = dest.to ? this.resolvePathWithBase(fromPath, `$dest.to}`) : this.resolvePathWithBase(fromPath, "."); 2926 const nextParams = dest.params === false || dest.params === null ? {} : (dest.params ?? true) === true ? fromParams : Object.assign( 2927 fromParams, 2928 functionalUpdate(dest.params, fromParams) 2929 ); 2930 const interpolatedNextTo = interpolatePath({ 2931 path: nextTo, 2932 params: nextParams, 2933 parseCache: this.parsePathnameCache 2934 }).interpolatedPath; 2935 const destRoutes = this.matchRoutes(interpolatedNextTo, void 0, { 2936 _buildLocation: true 2937 }).map((d) => this.looseRoutesById[d.routeId]); 2938 if (Object.keys(nextParams).length > 0) { 2939 for (const route of destRoutes) { 2940 const fn = route.options.params?.stringify ?? route.options.stringifyParams; 2941 if (fn) { 2942 Object.assign(nextParams, fn(nextParams)); 2943 } 2944 } 2945 } 2946 const nextPathname = decodePathSegment( 2947 interpolatePath({ 2948 // Use the original template path for interpolation 2949 // This preserves the original parameter syntax including optional parameters 2950 path: nextTo, 2951 params: nextParams, 2952 leaveWildcards: false, 2953 leaveParams: opts.leaveParams, 2954 decodeCharMap: this.pathParamsDecodeCharMap, 2955 parseCache: this.parsePathnameCache 2956 }).interpolatedPath 2957 ); 2958 let nextSearch = fromSearch; 2959 if (opts._includeValidateSearch && this.options.search?.strict) { 2960 const validatedSearch = {}; 2961 destRoutes.forEach((route) => { 2962 if (route.options.validateSearch) { 2963 try { 2964 Object.assign( 2965 validatedSearch, 2966 validateSearch(route.options.validateSearch, { 2967 ...validatedSearch, 2968 ...nextSearch 2969 }) 2970 ); 2971 } catch { 2972 } 2973 } 2974 }); 2975 nextSearch = validatedSearch; 2976 } 2977 nextSearch = applySearchMiddleware({ 2978 search: nextSearch, 2979 dest, 2980 destRoutes, 2981 _includeValidateSearch: opts._includeValidateSearch 2982 }); 2983 nextSearch = replaceEqualDeep(fromSearch, nextSearch); 2984 const searchStr = this.options.stringifySearch(nextSearch); 2985 const hash = dest.hash === true ? currentLocation.hash : dest.hash ? functionalUpdate(dest.hash, currentLocation.hash) : void 0; 2986 const hashStr = hash ? `#$hash}` : ""; 2987 let nextState = dest.state === true ? currentLocation.state : dest.state ? functionalUpdate(dest.state, currentLocation.state) : {}; 2988 nextState = replaceEqualDeep(currentLocation.state, nextState); 2989 const fullPath = `$nextPathname}$searchStr}$hashStr}`; 2990 const url = new URL(fullPath, this.origin); 2991 const rewrittenUrl = executeRewriteOutput(this.rewrite, url); 2992 return { 2993 publicHref: rewrittenUrl.pathname + rewrittenUrl.search + rewrittenUrl.hash, 2994 href: fullPath, 2995 url: rewrittenUrl.href, 2996 pathname: nextPathname, 2997 search: nextSearch, 2998 searchStr, 2999 state: nextState, 3000 hash: hash ?? "", 3001 unmaskOnReload: dest.unmaskOnReload 3002 }; 3003 }; 3004 const buildWithMatches = (dest = {}, maskedDest) => { 3005 const next = build(dest); 3006 let maskedNext = maskedDest ? build(maskedDest) : void 0; 3007 if (!maskedNext) { 3008 let params = {}; 3009 const foundMask = this.options.routeMasks?.find((d) => { 3010 const match = matchPathname( 3011 next.pathname, 3012 { 3013 to: d.from, 3014 caseSensitive: false, 3015 fuzzy: false 3016 }, 3017 this.parsePathnameCache 3018 ); 3019 if (match) { 3020 params = match; 3021 return true; 3022 } 3023 return false; 3024 }); 3025 if (foundMask) { 3026 const { from: _from, ...maskProps } = foundMask; 3027 maskedDest = { 3028 from: opts.from, 3029 ...maskProps, 3030 params 3031 }; 3032 maskedNext = build(maskedDest); 3033 } 3034 } 3035 if (maskedNext) { 3036 next.maskedLocation = maskedNext; 3037 } 3038 return next; 3039 }; 3040 if (opts.mask) { 3041 return buildWithMatches(opts, { 3042 from: opts.from, 3043 ...opts.mask 3044 }); 3045 } 3046 return buildWithMatches(opts); 3047 }; 3048 this.commitLocation = ({ 3049 viewTransition, 3050 ignoreBlocker, 3051 ...next 3052 }) => { 3053 const isSameState = () => { 3054 const ignoredProps = [ 3055 "key", 3056 // TODO: Remove in v2 - use __TSR_key instead 3057 "__TSR_key", 3058 "__TSR_index", 3059 "__hashScrollIntoViewOptions" 3060 ]; 3061 ignoredProps.forEach((prop) => { 3062 next.state[prop] = this.latestLocation.state[prop]; 3063 }); 3064 const isEqual = deepEqual(next.state, this.latestLocation.state); 3065 ignoredProps.forEach((prop) => { 3066 delete next.state[prop]; 3067 }); 3068 return isEqual; 3069 }; 3070 const isSameUrl = trimPathRight(this.latestLocation.href) === trimPathRight(next.href); 3071 const previousCommitPromise = this.commitLocationPromise; 3072 this.commitLocationPromise = createControlledPromise(() => { 3073 previousCommitPromise?.resolve(); 3074 }); 3075 if (isSameUrl && isSameState()) { 3076 this.load(); 3077 } else { 3078 let { maskedLocation, hashScrollIntoView, ...nextHistory } = next; 3079 if (maskedLocation) { 3080 nextHistory = { 3081 ...maskedLocation, 3082 state: { 3083 ...maskedLocation.state, 3084 __tempKey: void 0, 3085 __tempLocation: { 3086 ...nextHistory, 3087 search: nextHistory.searchStr, 3088 state: { 3089 ...nextHistory.state, 3090 __tempKey: void 0, 3091 __tempLocation: void 0, 3092 __TSR_key: void 0, 3093 key: void 0 3094 // TODO: Remove in v2 - use __TSR_key instead 3095 } 3096 } 3097 } 3098 }; 3099 if (nextHistory.unmaskOnReload ?? this.options.unmaskOnReload ?? false) { 3100 nextHistory.state.__tempKey = this.tempLocationKey; 3101 } 3102 } 3103 nextHistory.state.__hashScrollIntoViewOptions = hashScrollIntoView ?? this.options.defaultHashScrollIntoView ?? true; 3104 this.shouldViewTransition = viewTransition; 3105 this.history[next.replace ? "replace" : "push"]( 3106 nextHistory.publicHref, 3107 nextHistory.state, 3108 { ignoreBlocker } 3109 ); 3110 } 3111 this.resetNextScroll = next.resetScroll ?? true; 3112 if (!this.history.subscribers.size) { 3113 this.load(); 3114 } 3115 return this.commitLocationPromise; 3116 }; 3117 this.buildAndCommitLocation = ({ 3118 replace, 3119 resetScroll, 3120 hashScrollIntoView, 3121 viewTransition, 3122 ignoreBlocker, 3123 href, 3124 ...rest 3125 } = {}) => { 3126 if (href) { 3127 const currentIndex = this.history.location.state.__TSR_index; 3128 const parsed = parseHref(href, { 3129 __TSR_index: replace ? currentIndex : currentIndex + 1 3130 }); 3131 rest.to = parsed.pathname; 3132 rest.search = this.options.parseSearch(parsed.search); 3133 rest.hash = parsed.hash.slice(1); 3134 } 3135 const location = this.buildLocation({ 3136 ...rest, 3137 _includeValidateSearch: true 3138 }); 3139 return this.commitLocation({ 3140 ...location, 3141 viewTransition, 3142 replace, 3143 resetScroll, 3144 hashScrollIntoView, 3145 ignoreBlocker 3146 }); 3147 }; 3148 this.navigate = ({ to, reloadDocument, href, ...rest }) => { 3149 if (!reloadDocument && href) { 3150 try { 3151 new URL(`$href}`); 3152 reloadDocument = true; 3153 } catch { 3154 } 3155 } 3156 if (reloadDocument) { 3157 if (!href) { 3158 const location = this.buildLocation({ to, ...rest }); 3159 href = location.url; 3160 } 3161 if (rest.replace) { 3162 window.location.replace(href); 3163 } else { 3164 window.location.href = href; 3165 } 3166 return Promise.resolve(); 3167 } 3168 return this.buildAndCommitLocation({ 3169 ...rest, 3170 href, 3171 to, 3172 _isNavigate: true 3173 }); 3174 }; 3175 this.beforeLoad = () => { 3176 this.cancelMatches(); 3177 this.updateLatestLocation(); 3178 if (this.isServer) { 3179 const nextLocation = this.buildLocation({ 3180 to: this.latestLocation.pathname, 3181 search: true, 3182 params: true, 3183 hash: true, 3184 state: true, 3185 _includeValidateSearch: true 3186 }); 3187 const normalizeUrl = (url) => { 3188 try { 3189 return encodeURI(decodeURI(url)); 3190 } catch { 3191 return url; 3192 } 3193 }; 3194 if (trimPath(normalizeUrl(this.latestLocation.href)) !== trimPath(normalizeUrl(nextLocation.href))) { 3195 let href = nextLocation.url; 3196 if (this.origin && href.startsWith(this.origin)) { 3197 href = href.replace(this.origin, "") || "/"; 3198 } 3199 throw redirect({ href }); 3200 } 3201 } 3202 const pendingMatches = this.matchRoutes(this.latestLocation); 3203 this.__store.setState((s) => ({ 3204 ...s, 3205 status: "pending", 3206 statusCode: 200, 3207 isLoading: true, 3208 location: this.latestLocation, 3209 pendingMatches, 3210 // If a cached moved to pendingMatches, remove it from cachedMatches 3211 cachedMatches: s.cachedMatches.filter( 3212 (d) => !pendingMatches.some((e) => e.id === d.id) 3213 ) 3214 })); 3215 }; 3216 this.load = async (opts) => { 3217 let redirect2; 3218 let notFound2; 3219 let loadPromise; 3220 loadPromise = new Promise((resolve) => { 3221 this.startTransition(async () => { 3222 try { 3223 this.beforeLoad(); 3224 const next = this.latestLocation; 3225 const prevLocation = this.state.resolvedLocation; 3226 if (!this.state.redirect) { 3227 this.emit({ 3228 type: "onBeforeNavigate", 3229 ...getLocationChangeInfo({ 3230 resolvedLocation: prevLocation, 3231 location: next 3232 }) 3233 }); 3234 } 3235 this.emit({ 3236 type: "onBeforeLoad", 3237 ...getLocationChangeInfo({ 3238 resolvedLocation: prevLocation, 3239 location: next 3240 }) 3241 }); 3242 await loadMatches({ 3243 router: this, 3244 sync: opts?.sync, 3245 matches: this.state.pendingMatches, 3246 location: next, 3247 updateMatch: this.updateMatch, 3248 // eslint-disable-next-line @typescript-eslint/require-await 3249 onReady: async () => { 3250 this.startViewTransition(async () => { 3251 let exitingMatches; 3252 let enteringMatches; 3253 let stayingMatches; 3254 batch(() => { 3255 this.__store.setState((s) => { 3256 const previousMatches = s.matches; 3257 const newMatches = s.pendingMatches || s.matches; 3258 exitingMatches = previousMatches.filter( 3259 (match) => !newMatches.some((d) => d.id === match.id) 3260 ); 3261 enteringMatches = newMatches.filter( 3262 (match) => !previousMatches.some((d) => d.id === match.id) 3263 ); 3264 stayingMatches = previousMatches.filter( 3265 (match) => newMatches.some((d) => d.id === match.id) 3266 ); 3267 return { 3268 ...s, 3269 isLoading: false, 3270 loadedAt: Date.now(), 3271 matches: newMatches, 3272 pendingMatches: void 0, 3273 cachedMatches: [ 3274 ...s.cachedMatches, 3275 ...exitingMatches.filter((d) => d.status !== "error") 3276 ] 3277 }; 3278 }); 3279 this.clearExpiredCache(); 3280 }); 3281 [ 3282 [exitingMatches, "onLeave"], 3283 [enteringMatches, "onEnter"], 3284 [stayingMatches, "onStay"] 3285 ].forEach(([matches, hook]) => { 3286 matches.forEach((match) => { 3287 this.looseRoutesById[match.routeId].options[hook]?.(match); 3288 }); 3289 }); 3290 }); 3291 } 3292 }); 3293 } catch (err) { 3294 if (isRedirect(err)) { 3295 redirect2 = err; 3296 if (!this.isServer) { 3297 this.navigate({ 3298 ...redirect2.options, 3299 replace: true, 3300 ignoreBlocker: true 3301 }); 3302 } 3303 } else if (isNotFound(err)) { 3304 notFound2 = err; 3305 } 3306 this.__store.setState((s) => ({ 3307 ...s, 3308 statusCode: redirect2 ? redirect2.status : notFound2 ? 404 : s.matches.some((d) => d.status === "error") ? 500 : 200, 3309 redirect: redirect2 3310 })); 3311 } 3312 if (this.latestLoadPromise === loadPromise) { 3313 this.commitLocationPromise?.resolve(); 3314 this.latestLoadPromise = void 0; 3315 this.commitLocationPromise = void 0; 3316 } 3317 resolve(); 3318 }); 3319 }); 3320 this.latestLoadPromise = loadPromise; 3321 await loadPromise; 3322 while (this.latestLoadPromise && loadPromise !== this.latestLoadPromise) { 3323 await this.latestLoadPromise; 3324 } 3325 let newStatusCode = void 0; 3326 if (this.hasNotFoundMatch()) { 3327 newStatusCode = 404; 3328 } else if (this.__store.state.matches.some((d) => d.status === "error")) { 3329 newStatusCode = 500; 3330 } 3331 if (newStatusCode !== void 0) { 3332 this.__store.setState((s) => ({ 3333 ...s, 3334 statusCode: newStatusCode 3335 })); 3336 } 3337 }; 3338 this.startViewTransition = (fn) => { 3339 const shouldViewTransition = this.shouldViewTransition ?? this.options.defaultViewTransition; 3340 delete this.shouldViewTransition; 3341 if (shouldViewTransition && typeof document !== "undefined" && "startViewTransition" in document && typeof document.startViewTransition === "function") { 3342 let startViewTransitionParams; 3343 if (typeof shouldViewTransition === "object" && this.isViewTransitionTypesSupported) { 3344 const next = this.latestLocation; 3345 const prevLocation = this.state.resolvedLocation; 3346 const resolvedViewTransitionTypes = typeof shouldViewTransition.types === "function" ? shouldViewTransition.types( 3347 getLocationChangeInfo({ 3348 resolvedLocation: prevLocation, 3349 location: next 3350 }) 3351 ) : shouldViewTransition.types; 3352 if (resolvedViewTransitionTypes === false) { 3353 fn(); 3354 return; 3355 } 3356 startViewTransitionParams = { 3357 update: fn, 3358 types: resolvedViewTransitionTypes 3359 }; 3360 } else { 3361 startViewTransitionParams = fn; 3362 } 3363 document.startViewTransition(startViewTransitionParams); 3364 } else { 3365 fn(); 3366 } 3367 }; 3368 this.updateMatch = (id, updater) => { 3369 const matchesKey = this.state.pendingMatches?.some((d) => d.id === id) ? "pendingMatches" : this.state.matches.some((d) => d.id === id) ? "matches" : this.state.cachedMatches.some((d) => d.id === id) ? "cachedMatches" : ""; 3370 if (matchesKey) { 3371 this.__store.setState((s) => ({ 3372 ...s, 3373 [matchesKey]: s[matchesKey]?.map((d) => d.id === id ? updater(d) : d) 3374 })); 3375 } 3376 }; 3377 this.getMatch = (matchId) => { 3378 const findFn = (d) => d.id === matchId; 3379 return this.state.cachedMatches.find(findFn) ?? this.state.pendingMatches?.find(findFn) ?? this.state.matches.find(findFn); 3380 }; 3381 this.invalidate = (opts) => { 3382 const invalidate = (d) => { 3383 if (opts?.filter?.(d) ?? true) { 3384 return { 3385 ...d, 3386 invalid: true, 3387 ...opts?.forcePending || d.status === "error" ? { status: "pending", error: void 0 } : void 0 3388 }; 3389 } 3390 return d; 3391 }; 3392 this.__store.setState((s) => ({ 3393 ...s, 3394 matches: s.matches.map(invalidate), 3395 cachedMatches: s.cachedMatches.map(invalidate), 3396 pendingMatches: s.pendingMatches?.map(invalidate) 3397 })); 3398 this.shouldViewTransition = false; 3399 return this.load({ sync: opts?.sync }); 3400 }; 3401 this.resolveRedirect = (redirect2) => { 3402 if (!redirect2.options.href) { 3403 const location = this.buildLocation(redirect2.options); 3404 let href = location.url; 3405 if (this.origin && href.startsWith(this.origin)) { 3406 href = href.replace(this.origin, "") || "/"; 3407 } 3408 redirect2.options.href = location.href; 3409 redirect2.headers.set("Location", href); 3410 } 3411 if (!redirect2.headers.get("Location")) { 3412 redirect2.headers.set("Location", redirect2.options.href); 3413 } 3414 return redirect2; 3415 }; 3416 this.clearCache = (opts) => { 3417 const filter = opts?.filter; 3418 if (filter !== void 0) { 3419 this.__store.setState((s) => { 3420 return { 3421 ...s, 3422 cachedMatches: s.cachedMatches.filter( 3423 (m) => !filter(m) 3424 ) 3425 }; 3426 }); 3427 } else { 3428 this.__store.setState((s) => { 3429 return { 3430 ...s, 3431 cachedMatches: [] 3432 }; 3433 }); 3434 } 3435 }; 3436 this.clearExpiredCache = () => { 3437 const filter = (d) => { 3438 const route = this.looseRoutesById[d.routeId]; 3439 if (!route.options.loader) { 3440 return true; 3441 } 3442 const gcTime = (d.preload ? route.options.preloadGcTime ?? this.options.defaultPreloadGcTime : route.options.gcTime ?? this.options.defaultGcTime) ?? 5 * 60 * 1e3; 3443 const isError = d.status === "error"; 3444 if (isError) return true; 3445 const gcEligible = Date.now() - d.updatedAt >= gcTime; 3446 return gcEligible; 3447 }; 3448 this.clearCache({ filter }); 3449 }; 3450 this.loadRouteChunk = loadRouteChunk; 3451 this.preloadRoute = async (opts) => { 3452 const next = this.buildLocation(opts); 3453 let matches = this.matchRoutes(next, { 3454 throwOnError: true, 3455 preload: true, 3456 dest: opts 3457 }); 3458 const activeMatchIds = new Set( 3459 [...this.state.matches, ...this.state.pendingMatches ?? []].map( 3460 (d) => d.id 3461 ) 3462 ); 3463 const loadedMatchIds = /* @__PURE__ */ new Set([ 3464 ...activeMatchIds, 3465 ...this.state.cachedMatches.map((d) => d.id) 3466 ]); 3467 batch(() => { 3468 matches.forEach((match) => { 3469 if (!loadedMatchIds.has(match.id)) { 3470 this.__store.setState((s) => ({ 3471 ...s, 3472 cachedMatches: [...s.cachedMatches, match] 3473 })); 3474 } 3475 }); 3476 }); 3477 try { 3478 matches = await loadMatches({ 3479 router: this, 3480 matches, 3481 location: next, 3482 preload: true, 3483 updateMatch: (id, updater) => { 3484 if (activeMatchIds.has(id)) { 3485 matches = matches.map((d) => d.id === id ? updater(d) : d); 3486 } else { 3487 this.updateMatch(id, updater); 3488 } 3489 } 3490 }); 3491 return matches; 3492 } catch (err) { 3493 if (isRedirect(err)) { 3494 if (err.options.reloadDocument) { 3495 return void 0; 3496 } 3497 return await this.preloadRoute({ 3498 ...err.options, 3499 _fromLocation: next 3500 }); 3501 } 3502 if (!isNotFound(err)) { 3503 console.error(err); 3504 } 3505 return void 0; 3506 } 3507 }; 3508 this.matchRoute = (location, opts) => { 3509 const matchLocation = { 3510 ...location, 3511 to: location.to ? this.resolvePathWithBase( 3512 location.from || "", 3513 location.to 3514 ) : void 0, 3515 params: location.params || {}, 3516 leaveParams: true 3517 }; 3518 const next = this.buildLocation(matchLocation); 3519 if (opts?.pending && this.state.status !== "pending") { 3520 return false; 3521 } 3522 const pending = opts?.pending === void 0 ? !this.state.isLoading : opts.pending; 3523 const baseLocation = pending ? this.latestLocation : this.state.resolvedLocation || this.state.location; 3524 const match = matchPathname( 3525 baseLocation.pathname, 3526 { 3527 ...opts, 3528 to: next.pathname 3529 }, 3530 this.parsePathnameCache 3531 ); 3532 if (!match) { 3533 return false; 3534 } 3535 if (location.params) { 3536 if (!deepEqual(match, location.params, { partial: true })) { 3537 return false; 3538 } 3539 } 3540 if (match && (opts?.includeSearch ?? true)) { 3541 return deepEqual(baseLocation.search, next.search, { partial: true }) ? match : false; 3542 } 3543 return match; 3544 }; 3545 this.hasNotFoundMatch = () => { 3546 return this.__store.state.matches.some( 3547 (d) => d.status === "notFound" || d.globalNotFound 3548 ); 3549 }; 3550 this.update({ 3551 defaultPreloadDelay: 50, 3552 defaultPendingMs: 1e3, 3553 defaultPendingMinMs: 500, 3554 context: void 0, 3555 ...options, 3556 caseSensitive: options.caseSensitive ?? false, 3557 notFoundMode: options.notFoundMode ?? "fuzzy", 3558 stringifySearch: options.stringifySearch ?? defaultStringifySearch, 3559 parseSearch: options.parseSearch ?? defaultParseSearch 3560 }); 3561 if (typeof document !== "undefined") { 3562 self.__TSR_ROUTER__ = this; 3563 } 3564 } 3565 isShell() { 3566 return !!this.options.isShell; 3567 } 3568 isPrerendering() { 3569 return !!this.options.isPrerendering; 3570 } 3571 get state() { 3572 return this.__store.state; 3573 } 3574 get looseRoutesById() { 3575 return this.routesById; 3576 } 3577 matchRoutesInternal(next, opts) { 3578 const { foundRoute, matchedRoutes, routeParams } = this.getMatchedRoutes( 3579 next.pathname, 3580 opts?.dest?.to 3581 ); 3582 let isGlobalNotFound = false; 3583 if ( 3584 // If we found a route, and it's not an index route and we have left over path 3585 foundRoute ? foundRoute.path !== "/" && routeParams["**"] : ( 3586 // Or if we didn't find a route and we have left over path 3587 trimPathRight(next.pathname) 3588 ) 3589 ) { 3590 if (this.options.notFoundRoute) { 3591 matchedRoutes.push(this.options.notFoundRoute); 3592 } else { 3593 isGlobalNotFound = true; 3594 } 3595 } 3596 const globalNotFoundRouteId = (() => { 3597 if (!isGlobalNotFound) { 3598 return void 0; 3599 } 3600 if (this.options.notFoundMode !== "root") { 3601 for (let i = matchedRoutes.length - 1; i >= 0; i--) { 3602 const route = matchedRoutes[i]; 3603 if (route.children) { 3604 return route.id; 3605 } 3606 } 3607 } 3608 return rootRouteId; 3609 })(); 3610 const matches = []; 3611 const getParentContext = (parentMatch) => { 3612 const parentMatchId = parentMatch?.id; 3613 const parentContext = !parentMatchId ? this.options.context ?? void 0 : parentMatch.context ?? this.options.context ?? void 0; 3614 return parentContext; 3615 }; 3616 matchedRoutes.forEach((route, index) => { 3617 const parentMatch = matches[index - 1]; 3618 const [preMatchSearch, strictMatchSearch, searchError] = (() => { 3619 const parentSearch = parentMatch?.search ?? next.search; 3620 const parentStrictSearch = parentMatch?._strictSearch ?? void 0; 3621 try { 3622 const strictSearch = validateSearch(route.options.validateSearch, { ...parentSearch }) ?? void 0; 3623 return [ 3624 { 3625 ...parentSearch, 3626 ...strictSearch 3627 }, 3628 { ...parentStrictSearch, ...strictSearch }, 3629 void 0 3630 ]; 3631 } catch (err) { 3632 let searchParamError = err; 3633 if (!(err instanceof SearchParamError)) { 3634 searchParamError = new SearchParamError(err.message, { 3635 cause: err 3636 }); 3637 } 3638 if (opts?.throwOnError) { 3639 throw searchParamError; 3640 } 3641 return [parentSearch, {}, searchParamError]; 3642 } 3643 })(); 3644 const loaderDeps = route.options.loaderDeps?.({ 3645 search: preMatchSearch 3646 }) ?? ""; 3647 const loaderDepsHash = loaderDeps ? JSON.stringify(loaderDeps) : ""; 3648 const { interpolatedPath, usedParams } = interpolatePath({ 3649 path: route.fullPath, 3650 params: routeParams, 3651 decodeCharMap: this.pathParamsDecodeCharMap 3652 }); 3653 const matchId = interpolatePath({ 3654 path: route.id, 3655 params: routeParams, 3656 leaveWildcards: true, 3657 decodeCharMap: this.pathParamsDecodeCharMap, 3658 parseCache: this.parsePathnameCache 3659 }).interpolatedPath + loaderDepsHash; 3660 const existingMatch = this.getMatch(matchId); 3661 const previousMatch = this.state.matches.find( 3662 (d) => d.routeId === route.id 3663 ); 3664 const strictParams = existingMatch?._strictParams ?? usedParams; 3665 let paramsError = void 0; 3666 if (!existingMatch) { 3667 const strictParseParams = route.options.params?.parse ?? route.options.parseParams; 3668 if (strictParseParams) { 3669 try { 3670 Object.assign( 3671 strictParams, 3672 strictParseParams(strictParams) 3673 ); 3674 } catch (err) { 3675 paramsError = new PathParamError(err.message, { 3676 cause: err 3677 }); 3678 if (opts?.throwOnError) { 3679 throw paramsError; 3680 } 3681 } 3682 } 3683 } 3684 Object.assign(routeParams, strictParams); 3685 const cause = previousMatch ? "stay" : "enter"; 3686 let match; 3687 if (existingMatch) { 3688 match = { 3689 ...existingMatch, 3690 cause, 3691 params: previousMatch ? replaceEqualDeep(previousMatch.params, routeParams) : routeParams, 3692 _strictParams: strictParams, 3693 search: previousMatch ? replaceEqualDeep(previousMatch.search, preMatchSearch) : replaceEqualDeep(existingMatch.search, preMatchSearch), 3694 _strictSearch: strictMatchSearch 3695 }; 3696 } else { 3697 const status = route.options.loader || route.options.beforeLoad || route.lazyFn || routeNeedsPreload(route) ? "pending" : "success"; 3698 match = { 3699 id: matchId, 3700 index, 3701 routeId: route.id, 3702 params: previousMatch ? replaceEqualDeep(previousMatch.params, routeParams) : routeParams, 3703 _strictParams: strictParams, 3704 pathname: interpolatedPath, 3705 updatedAt: Date.now(), 3706 search: previousMatch ? replaceEqualDeep(previousMatch.search, preMatchSearch) : preMatchSearch, 3707 _strictSearch: strictMatchSearch, 3708 searchError: void 0, 3709 status, 3710 isFetching: false, 3711 error: void 0, 3712 paramsError, 3713 __routeContext: void 0, 3714 _nonReactive: { 3715 loadPromise: createControlledPromise() 3716 }, 3717 __beforeLoadContext: void 0, 3718 context: {}, 3719 abortController: new AbortController(), 3720 fetchCount: 0, 3721 cause, 3722 loaderDeps: previousMatch ? replaceEqualDeep(previousMatch.loaderDeps, loaderDeps) : loaderDeps, 3723 invalid: false, 3724 preload: false, 3725 links: void 0, 3726 scripts: void 0, 3727 headScripts: void 0, 3728 meta: void 0, 3729 staticData: route.options.staticData || {}, 3730 fullPath: route.fullPath 3731 }; 3732 } 3733 if (!opts?.preload) { 3734 match.globalNotFound = globalNotFoundRouteId === route.id; 3735 } 3736 match.searchError = searchError; 3737 const parentContext = getParentContext(parentMatch); 3738 match.context = { 3739 ...parentContext, 3740 ...match.__routeContext, 3741 ...match.__beforeLoadContext 3742 }; 3743 matches.push(match); 3744 }); 3745 matches.forEach((match, index) => { 3746 const route = this.looseRoutesById[match.routeId]; 3747 const existingMatch = this.getMatch(match.id); 3748 if (!existingMatch && opts?._buildLocation !== true) { 3749 const parentMatch = matches[index - 1]; 3750 const parentContext = getParentContext(parentMatch); 3751 if (route.options.context) { 3752 const contextFnContext = { 3753 deps: match.loaderDeps, 3754 params: match.params, 3755 context: parentContext ?? {}, 3756 location: next, 3757 navigate: (opts2) => this.navigate({ ...opts2, _fromLocation: next }), 3758 buildLocation: this.buildLocation, 3759 cause: match.cause, 3760 abortController: match.abortController, 3761 preload: !!match.preload, 3762 matches 3763 }; 3764 match.__routeContext = route.options.context(contextFnContext) ?? void 0; 3765 } 3766 match.context = { 3767 ...parentContext, 3768 ...match.__routeContext, 3769 ...match.__beforeLoadContext 3770 }; 3771 } 3772 }); 3773 return matches; 3774 } 3775 }; 3776 var SearchParamError = class extends Error { 3777 }; 3778 var PathParamError = class extends Error { 3779 }; 3780 var normalize = (str) => str.endsWith("/") && str.length > 1 ? str.slice(0, -1) : str; 3781 function comparePaths(a, b) { 3782 return normalize(a) === normalize(b); 3783 } 3784 function getInitialRouterState(location) { 3785 return { 3786 loadedAt: 0, 3787 isLoading: false, 3788 isTransitioning: false, 3789 status: "idle", 3790 resolvedLocation: void 0, 3791 location, 3792 matches: [], 3793 pendingMatches: [], 3794 cachedMatches: [], 3795 statusCode: 200 3796 }; 3797 } 3798 function validateSearch(validateSearch2, input) { 3799 if (validateSearch2 == null) return {}; 3800 if ("~standard" in validateSearch2) { 3801 const result = validateSearch2["~standard"].validate(input); 3802 if (result instanceof Promise) 3803 throw new SearchParamError("Async validation not supported"); 3804 if (result.issues) 3805 throw new SearchParamError(JSON.stringify(result.issues, void 0, 2), { 3806 cause: result 3807 }); 3808 return result.value; 3809 } 3810 if ("parse" in validateSearch2) { 3811 return validateSearch2.parse(input); 3812 } 3813 if (typeof validateSearch2 === "function") { 3814 return validateSearch2(input); 3815 } 3816 return {}; 3817 } 3818 function getMatchedRoutes({ 3819 pathname, 3820 routePathname, 3821 caseSensitive, 3822 routesByPath, 3823 routesById, 3824 flatRoutes, 3825 parseCache 3826 }) { 3827 let routeParams = {}; 3828 const trimmedPath = trimPathRight(pathname); 3829 const getMatchedParams = (route) => { 3830 const result = matchPathname( 3831 trimmedPath, 3832 { 3833 to: route.fullPath, 3834 caseSensitive: route.options?.caseSensitive ?? caseSensitive, 3835 // we need fuzzy matching for `notFoundMode: 'fuzzy'` 3836 fuzzy: true 3837 }, 3838 parseCache 3839 ); 3840 return result; 3841 }; 3842 let foundRoute = routePathname !== void 0 ? routesByPath[routePathname] : void 0; 3843 if (foundRoute) { 3844 routeParams = getMatchedParams(foundRoute); 3845 } else { 3846 let fuzzyMatch = void 0; 3847 for (const route of flatRoutes) { 3848 const matchedParams = getMatchedParams(route); 3849 if (matchedParams) { 3850 if (route.path !== "/" && matchedParams["**"]) { 3851 if (!fuzzyMatch) { 3852 fuzzyMatch = { foundRoute: route, routeParams: matchedParams }; 3853 } 3854 } else { 3855 foundRoute = route; 3856 routeParams = matchedParams; 3857 break; 3858 } 3859 } 3860 } 3861 if (!foundRoute && fuzzyMatch) { 3862 foundRoute = fuzzyMatch.foundRoute; 3863 routeParams = fuzzyMatch.routeParams; 3864 } 3865 } 3866 let routeCursor = foundRoute || routesById[rootRouteId]; 3867 const matchedRoutes = [routeCursor]; 3868 while (routeCursor.parentRoute) { 3869 routeCursor = routeCursor.parentRoute; 3870 matchedRoutes.push(routeCursor); 3871 } 3872 matchedRoutes.reverse(); 3873 return { matchedRoutes, routeParams, foundRoute }; 3874 } 3875 function applySearchMiddleware({ 3876 search, 3877 dest, 3878 destRoutes, 3879 _includeValidateSearch 3880 }) { 3881 const allMiddlewares = destRoutes.reduce( 3882 (acc, route) => { 3883 const middlewares = []; 3884 if ("search" in route.options) { 3885 if (route.options.search?.middlewares) { 3886 middlewares.push(...route.options.search.middlewares); 3887 } 3888 } else if (route.options.preSearchFilters || route.options.postSearchFilters) { 3889 const legacyMiddleware = ({ 3890 search: search2, 3891 next 3892 }) => { 3893 let nextSearch = search2; 3894 if ("preSearchFilters" in route.options && route.options.preSearchFilters) { 3895 nextSearch = route.options.preSearchFilters.reduce( 3896 (prev, next2) => next2(prev), 3897 search2 3898 ); 3899 } 3900 const result = next(nextSearch); 3901 if ("postSearchFilters" in route.options && route.options.postSearchFilters) { 3902 return route.options.postSearchFilters.reduce( 3903 (prev, next2) => next2(prev), 3904 result 3905 ); 3906 } 3907 return result; 3908 }; 3909 middlewares.push(legacyMiddleware); 3910 } 3911 if (_includeValidateSearch && route.options.validateSearch) { 3912 const validate = ({ search: search2, next }) => { 3913 const result = next(search2); 3914 try { 3915 const validatedSearch = { 3916 ...result, 3917 ...validateSearch(route.options.validateSearch, result) ?? void 0 3918 }; 3919 return validatedSearch; 3920 } catch { 3921 return result; 3922 } 3923 }; 3924 middlewares.push(validate); 3925 } 3926 return acc.concat(middlewares); 3927 }, 3928 [] 3929 ) ?? []; 3930 const final = ({ search: search2 }) => { 3931 if (!dest.search) { 3932 return {}; 3933 } 3934 if (dest.search === true) { 3935 return search2; 3936 } 3937 return functionalUpdate(dest.search, search2); 3938 }; 3939 allMiddlewares.push(final); 3940 const applyNext = (index, currentSearch) => { 3941 if (index >= allMiddlewares.length) { 3942 return currentSearch; 3943 } 3944 const middleware = allMiddlewares[index]; 3945 const next = (newSearch) => { 3946 return applyNext(index + 1, newSearch); 3947 }; 3948 return middleware({ search: currentSearch, next }); 3949 }; 3950 return applyNext(0, search); 3951 } 3952 3953 // node_modules/@tanstack/router-core/dist/esm/link.js 3954 var preloadWarning = "Error preloading route! \u261D\uFE0F"; 3955 3956 // node_modules/@tanstack/router-core/dist/esm/route.js 3957 var BaseRoute = class { 3958 constructor(options) { 3959 this.init = (opts) => { 3960 this.originalIndex = opts.originalIndex; 3961 const options2 = this.options; 3962 const isRoot = !options2?.path && !options2?.id; 3963 this.parentRoute = this.options.getParentRoute?.(); 3964 if (isRoot) { 3965 this._path = rootRouteId; 3966 } else if (!this.parentRoute) { 3967 invariant( 3968 false, 3969 `Child Route instances must pass a 'getParentRoute: () => ParentRoute' option that returns a Route instance.` 3970 ); 3971 } 3972 let path = isRoot ? rootRouteId : options2?.path; 3973 if (path && path !== "/") { 3974 path = trimPathLeft(path); 3975 } 3976 const customId = options2?.id || path; 3977 let id = isRoot ? rootRouteId : joinPaths([ 3978 this.parentRoute.id === rootRouteId ? "" : this.parentRoute.id, 3979 customId 3980 ]); 3981 if (path === rootRouteId) { 3982 path = "/"; 3983 } 3984 if (id !== rootRouteId) { 3985 id = joinPaths(["/", id]); 3986 } 3987 const fullPath = id === rootRouteId ? "/" : joinPaths([this.parentRoute.fullPath, path]); 3988 this._path = path; 3989 this._id = id; 3990 this._fullPath = fullPath; 3991 this._to = fullPath; 3992 }; 3993 this.clone = (other) => { 3994 this._path = other._path; 3995 this._id = other._id; 3996 this._fullPath = other._fullPath; 3997 this._to = other._to; 3998 this.options.getParentRoute = other.options.getParentRoute; 3999 this.children = other.children; 4000 }; 4001 this.addChildren = (children) => { 4002 return this._addFileChildren(children); 4003 }; 4004 this._addFileChildren = (children) => { 4005 if (Array.isArray(children)) { 4006 this.children = children; 4007 } 4008 if (typeof children === "object" && children !== null) { 4009 this.children = Object.values(children); 4010 } 4011 return this; 4012 }; 4013 this._addFileTypes = () => { 4014 return this; 4015 }; 4016 this.updateLoader = (options2) => { 4017 Object.assign(this.options, options2); 4018 return this; 4019 }; 4020 this.update = (options2) => { 4021 Object.assign(this.options, options2); 4022 return this; 4023 }; 4024 this.lazy = (lazyFn2) => { 4025 this.lazyFn = lazyFn2; 4026 return this; 4027 }; 4028 this.options = options || {}; 4029 this.isRoot = !options?.getParentRoute; 4030 if (options?.id && options?.path) { 4031 throw new Error(`Route cannot have both an 'id' and a 'path' option.`); 4032 } 4033 } 4034 get to() { 4035 return this._to; 4036 } 4037 get id() { 4038 return this._id; 4039 } 4040 get path() { 4041 return this._path; 4042 } 4043 get fullPath() { 4044 return this._fullPath; 4045 } 4046 }; 4047 var BaseRootRoute = class extends BaseRoute { 4048 constructor(options) { 4049 super(options); 4050 } 4051 }; 4052 4053 // node_modules/@tanstack/react-router/dist/esm/CatchBoundary.js 4054 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 4055 var React = __toESM(require_react(), 1); 4056 function CatchBoundary(props) { 4057 const errorComponent = props.errorComponent ?? ErrorComponent; 4058 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 4059 CatchBoundaryImpl, 4060 { 4061 getResetKey: props.getResetKey, 4062 onCatch: props.onCatch, 4063 children: ({ error, reset }) => { 4064 if (error) { 4065 return React.createElement(errorComponent, { 4066 error, 4067 reset 4068 }); 4069 } 4070 return props.children; 4071 } 4072 } 4073 ); 4074 } 4075 var CatchBoundaryImpl = class extends React.Component { 4076 constructor() { 4077 super(...arguments); 4078 this.state = { error: null }; 4079 } 4080 static getDerivedStateFromProps(props) { 4081 return { resetKey: props.getResetKey() }; 4082 } 4083 static getDerivedStateFromError(error) { 4084 return { error }; 4085 } 4086 reset() { 4087 this.setState({ error: null }); 4088 } 4089 componentDidUpdate(prevProps, prevState) { 4090 if (prevState.error && prevState.resetKey !== this.state.resetKey) { 4091 this.reset(); 4092 } 4093 } 4094 componentDidCatch(error, errorInfo) { 4095 if (this.props.onCatch) { 4096 this.props.onCatch(error, errorInfo); 4097 } 4098 } 4099 render() { 4100 return this.props.children({ 4101 error: this.state.resetKey !== this.props.getResetKey() ? null : this.state.error, 4102 reset: () => { 4103 this.reset(); 4104 } 4105 }); 4106 } 4107 }; 4108 function ErrorComponent({ error }) { 4109 const [show, setShow] = React.useState(true); 4110 return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { padding: ".5rem", maxWidth: "100%" }, children: [ 4111 /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: ".5rem" }, children: [ 4112 /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { style: { fontSize: "1rem" }, children: "Something went wrong!" }), 4113 /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 4114 "button", 4115 { 4116 style: { 4117 appearance: "none", 4118 fontSize: ".6em", 4119 border: "1px solid currentColor", 4120 padding: ".1rem .2rem", 4121 fontWeight: "bold", 4122 borderRadius: ".25rem" 4123 }, 4124 onClick: () => setShow((d) => !d), 4125 children: show ? "Hide Error" : "Show Error" 4126 } 4127 ) 4128 ] }), 4129 /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { height: ".25rem" } }), 4130 show ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 4131 "pre", 4132 { 4133 style: { 4134 fontSize: ".7em", 4135 border: "1px solid red", 4136 borderRadius: ".25rem", 4137 padding: ".3rem", 4138 color: "red", 4139 overflow: "auto" 4140 }, 4141 children: error.message ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", { children: error.message }) : null 4142 } 4143 ) }) : null 4144 ] }); 4145 } 4146 4147 // node_modules/@tanstack/react-router/dist/esm/ClientOnly.js 4148 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 4149 var import_react = __toESM(require_react(), 1); 4150 function ClientOnly({ children, fallback = null }) { 4151 return useHydrated() ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.default.Fragment, { children }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.default.Fragment, { children: fallback }); 4152 } 4153 function useHydrated() { 4154 return import_react.default.useSyncExternalStore( 4155 subscribe, 4156 () => true, 4157 () => false 4158 ); 4159 } 4160 function subscribe() { 4161 return () => { 4162 }; 4163 } 4164 4165 // node_modules/tiny-warning/dist/tiny-warning.esm.js 4166 var isProduction2 = false; 4167 function warning(condition, message) { 4168 if (!isProduction2) { 4169 if (condition) { 4170 return; 4171 } 4172 var text = "Warning: " + message; 4173 if (typeof console !== "undefined") { 4174 console.warn(text); 4175 } 4176 try { 4177 throw Error(text); 4178 } catch (x) { 4179 } 4180 } 4181 } 4182 var tiny_warning_esm_default = warning; 4183 4184 // node_modules/@tanstack/react-router/dist/esm/route.js 4185 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 4186 var import_react3 = __toESM(require_react(), 1); 4187 4188 // node_modules/@tanstack/react-router/dist/esm/useMatch.js 4189 var React5 = __toESM(require_react(), 1); 4190 4191 // node_modules/@tanstack/react-store/dist/esm/index.js 4192 var import_with_selector = __toESM(require_with_selector(), 1); 4193 function useStore(store, selector = (d) => d, options = {}) { 4194 const equal = options.equal ?? shallow; 4195 const slice = (0, import_with_selector.useSyncExternalStoreWithSelector)( 4196 store.subscribe, 4197 () => store.state, 4198 () => store.state, 4199 selector, 4200 equal 4201 ); 4202 return slice; 4203 } 4204 function shallow(objA, objB) { 4205 if (Object.is(objA, objB)) { 4206 return true; 4207 } 4208 if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { 4209 return false; 4210 } 4211 if (objA instanceof Map && objB instanceof Map) { 4212 if (objA.size !== objB.size) return false; 4213 for (const [k, v] of objA) { 4214 if (!objB.has(k) || !Object.is(v, objB.get(k))) return false; 4215 } 4216 return true; 4217 } 4218 if (objA instanceof Set && objB instanceof Set) { 4219 if (objA.size !== objB.size) return false; 4220 for (const v of objA) { 4221 if (!objB.has(v)) return false; 4222 } 4223 return true; 4224 } 4225 if (objA instanceof Date && objB instanceof Date) { 4226 if (objA.getTime() !== objB.getTime()) return false; 4227 return true; 4228 } 4229 const keysA = getOwnKeys(objA); 4230 if (keysA.length !== getOwnKeys(objB).length) { 4231 return false; 4232 } 4233 for (let i = 0; i < keysA.length; i++) { 4234 if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) { 4235 return false; 4236 } 4237 } 4238 return true; 4239 } 4240 function getOwnKeys(obj) { 4241 return Object.keys(obj).concat( 4242 Object.getOwnPropertySymbols(obj) 4243 ); 4244 } 4245 4246 // node_modules/@tanstack/react-router/dist/esm/useRouterState.js 4247 var import_react2 = __toESM(require_react(), 1); 4248 4249 // node_modules/@tanstack/react-router/dist/esm/useRouter.js 4250 var React3 = __toESM(require_react(), 1); 4251 4252 // node_modules/@tanstack/react-router/dist/esm/routerContext.js 4253 var React2 = __toESM(require_react(), 1); 4254 var routerContext = React2.createContext(null); 4255 function getRouterContext() { 4256 if (typeof document === "undefined") { 4257 return routerContext; 4258 } 4259 if (window.__TSR_ROUTER_CONTEXT__) { 4260 return window.__TSR_ROUTER_CONTEXT__; 4261 } 4262 window.__TSR_ROUTER_CONTEXT__ = routerContext; 4263 return routerContext; 4264 } 4265 4266 // node_modules/@tanstack/react-router/dist/esm/useRouter.js 4267 function useRouter(opts) { 4268 const value = React3.useContext(getRouterContext()); 4269 tiny_warning_esm_default( 4270 !((opts?.warn ?? true) && !value), 4271 "useRouter must be used inside a <RouterProvider> component!" 4272 ); 4273 return value; 4274 } 4275 4276 // node_modules/@tanstack/react-router/dist/esm/useRouterState.js 4277 function useRouterState(opts) { 4278 const contextRouter = useRouter({ 4279 warn: opts?.router === void 0 4280 }); 4281 const router = opts?.router || contextRouter; 4282 const previousResult = (0, import_react2.useRef)(void 0); 4283 return useStore(router.__store, (state) => { 4284 if (opts?.select) { 4285 if (opts.structuralSharing ?? router.options.defaultStructuralSharing) { 4286 const newSlice = replaceEqualDeep( 4287 previousResult.current, 4288 opts.select(state) 4289 ); 4290 previousResult.current = newSlice; 4291 return newSlice; 4292 } 4293 return opts.select(state); 4294 } 4295 return state; 4296 }); 4297 } 4298 4299 // node_modules/@tanstack/react-router/dist/esm/matchContext.js 4300 var React4 = __toESM(require_react(), 1); 4301 var matchContext = React4.createContext(void 0); 4302 var dummyMatchContext = React4.createContext( 4303 void 0 4304 ); 4305 4306 // node_modules/@tanstack/react-router/dist/esm/useMatch.js 4307 function useMatch(opts) { 4308 const nearestMatchId = React5.useContext( 4309 opts.from ? dummyMatchContext : matchContext 4310 ); 4311 const matchSelection = useRouterState({ 4312 select: (state) => { 4313 const match = state.matches.find( 4314 (d) => opts.from ? opts.from === d.routeId : d.id === nearestMatchId 4315 ); 4316 invariant( 4317 !((opts.shouldThrow ?? true) && !match), 4318 `Could not find $opts.from ? `an active match from "$opts.from}"` : "a nearest match!"}` 4319 ); 4320 if (match === void 0) { 4321 return void 0; 4322 } 4323 return opts.select ? opts.select(match) : match; 4324 }, 4325 structuralSharing: opts.structuralSharing 4326 }); 4327 return matchSelection; 4328 } 4329 4330 // node_modules/@tanstack/react-router/dist/esm/useLoaderData.js 4331 function useLoaderData(opts) { 4332 return useMatch({ 4333 from: opts.from, 4334 strict: opts.strict, 4335 structuralSharing: opts.structuralSharing, 4336 select: (s) => { 4337 return opts.select ? opts.select(s.loaderData) : s.loaderData; 4338 } 4339 }); 4340 } 4341 4342 // node_modules/@tanstack/react-router/dist/esm/useLoaderDeps.js 4343 function useLoaderDeps(opts) { 4344 const { select, ...rest } = opts; 4345 return useMatch({ 4346 ...rest, 4347 select: (s) => { 4348 return select ? select(s.loaderDeps) : s.loaderDeps; 4349 } 4350 }); 4351 } 4352 4353 // node_modules/@tanstack/react-router/dist/esm/useParams.js 4354 function useParams(opts) { 4355 return useMatch({ 4356 from: opts.from, 4357 shouldThrow: opts.shouldThrow, 4358 structuralSharing: opts.structuralSharing, 4359 strict: opts.strict, 4360 select: (match) => { 4361 const params = opts.strict === false ? match.params : match._strictParams; 4362 return opts.select ? opts.select(params) : params; 4363 } 4364 }); 4365 } 4366 4367 // node_modules/@tanstack/react-router/dist/esm/useSearch.js 4368 function useSearch(opts) { 4369 return useMatch({ 4370 from: opts.from, 4371 strict: opts.strict, 4372 shouldThrow: opts.shouldThrow, 4373 structuralSharing: opts.structuralSharing, 4374 select: (match) => { 4375 return opts.select ? opts.select(match.search) : match.search; 4376 } 4377 }); 4378 } 4379 4380 // node_modules/@tanstack/react-router/dist/esm/useNavigate.js 4381 var React6 = __toESM(require_react(), 1); 4382 function useNavigate(_defaultOpts) { 4383 const router = useRouter(); 4384 return React6.useCallback( 4385 (options) => { 4386 return router.navigate({ 4387 ...options, 4388 from: options.from ?? _defaultOpts?.from 4389 }); 4390 }, 4391 [_defaultOpts?.from, router] 4392 ); 4393 } 4394 4395 // node_modules/@tanstack/react-router/dist/esm/link.js 4396 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 4397 var React8 = __toESM(require_react(), 1); 4398 var import_react_dom = __toESM(require_react_dom(), 1); 4399 4400 // node_modules/@tanstack/react-router/dist/esm/utils.js 4401 var React7 = __toESM(require_react(), 1); 4402 var useLayoutEffect2 = typeof window !== "undefined" ? React7.useLayoutEffect : React7.useEffect; 4403 function usePrevious(value) { 4404 const ref = React7.useRef({ 4405 value, 4406 prev: null 4407 }); 4408 const current = ref.current.value; 4409 if (value !== current) { 4410 ref.current = { 4411 value, 4412 prev: current 4413 }; 4414 } 4415 return ref.current.prev; 4416 } 4417 function useIntersectionObserver(ref, callback, intersectionObserverOptions2 = {}, options = {}) { 4418 React7.useEffect(() => { 4419 if (!ref.current || options.disabled || typeof IntersectionObserver !== "function") { 4420 return; 4421 } 4422 const observer = new IntersectionObserver(([entry]) => { 4423 callback(entry); 4424 }, intersectionObserverOptions2); 4425 observer.observe(ref.current); 4426 return () => { 4427 observer.disconnect(); 4428 }; 4429 }, [callback, intersectionObserverOptions2, options.disabled, ref]); 4430 } 4431 function useForwardedRef(ref) { 4432 const innerRef = React7.useRef(null); 4433 React7.useImperativeHandle(ref, () => innerRef.current, []); 4434 return innerRef; 4435 } 4436 4437 // node_modules/@tanstack/react-router/dist/esm/link.js 4438 function useLinkProps(options, forwardedRef) { 4439 const router = useRouter(); 4440 const [isTransitioning, setIsTransitioning] = React8.useState(false); 4441 const hasRenderFetched = React8.useRef(false); 4442 const innerRef = useForwardedRef(forwardedRef); 4443 const { 4444 // custom props 4445 activeProps, 4446 inactiveProps, 4447 activeOptions, 4448 to, 4449 preload: userPreload, 4450 preloadDelay: userPreloadDelay, 4451 hashScrollIntoView, 4452 replace, 4453 startTransition: startTransition2, 4454 resetScroll, 4455 viewTransition, 4456 // element props 4457 children, 4458 target, 4459 disabled, 4460 style, 4461 className, 4462 onClick, 4463 onFocus, 4464 onMouseEnter, 4465 onMouseLeave, 4466 onTouchStart, 4467 ignoreBlocker, 4468 // prevent these from being returned 4469 params: _params, 4470 search: _search, 4471 hash: _hash, 4472 state: _state, 4473 mask: _mask, 4474 reloadDocument: _reloadDocument, 4475 unsafeRelative: _unsafeRelative, 4476 from: _from, 4477 _fromLocation, 4478 ...propsSafeToSpread 4479 } = options; 4480 const currentSearch = useRouterState({ 4481 select: (s) => s.location.search, 4482 structuralSharing: true 4483 }); 4484 const from = options.from; 4485 const _options = React8.useMemo( 4486 () => { 4487 return { ...options, from }; 4488 }, 4489 // eslint-disable-next-line react-hooks/exhaustive-deps 4490 [ 4491 router, 4492 currentSearch, 4493 from, 4494 options._fromLocation, 4495 options.hash, 4496 options.to, 4497 options.search, 4498 options.params, 4499 options.state, 4500 options.mask, 4501 options.unsafeRelative 4502 ] 4503 ); 4504 const next = React8.useMemo( 4505 () => router.buildLocation({ ..._options }), 4506 [router, _options] 4507 ); 4508 const hrefOption = React8.useMemo(() => { 4509 if (disabled) { 4510 return void 0; 4511 } 4512 let href = next.maskedLocation ? next.maskedLocation.url : next.url; 4513 let external = false; 4514 if (router.origin) { 4515 if (href.startsWith(router.origin)) { 4516 href = router.history.createHref(href.replace(router.origin, "")) || "/"; 4517 } else { 4518 external = true; 4519 } 4520 } 4521 return { href, external }; 4522 }, [disabled, next.maskedLocation, next.url, router.origin, router.history]); 4523 const externalLink = React8.useMemo(() => { 4524 if (hrefOption?.external) { 4525 return hrefOption.href; 4526 } 4527 try { 4528 new URL(to); 4529 return to; 4530 } catch { 4531 } 4532 return void 0; 4533 }, [to, hrefOption]); 4534 const preload = options.reloadDocument || externalLink ? false : userPreload ?? router.options.defaultPreload; 4535 const preloadDelay = userPreloadDelay ?? router.options.defaultPreloadDelay ?? 0; 4536 const isActive = useRouterState({ 4537 select: (s) => { 4538 if (externalLink) return false; 4539 if (activeOptions?.exact) { 4540 const testExact = exactPathTest( 4541 s.location.pathname, 4542 next.pathname, 4543 router.basepath 4544 ); 4545 if (!testExact) { 4546 return false; 4547 } 4548 } else { 4549 const currentPathSplit = removeTrailingSlash( 4550 s.location.pathname, 4551 router.basepath 4552 ); 4553 const nextPathSplit = removeTrailingSlash( 4554 next.pathname, 4555 router.basepath 4556 ); 4557 const pathIsFuzzyEqual = currentPathSplit.startsWith(nextPathSplit) && (currentPathSplit.length === nextPathSplit.length || currentPathSplit[nextPathSplit.length] === "/"); 4558 if (!pathIsFuzzyEqual) { 4559 return false; 4560 } 4561 } 4562 if (activeOptions?.includeSearch ?? true) { 4563 const searchTest = deepEqual(s.location.search, next.search, { 4564 partial: !activeOptions?.exact, 4565 ignoreUndefined: !activeOptions?.explicitUndefined 4566 }); 4567 if (!searchTest) { 4568 return false; 4569 } 4570 } 4571 if (activeOptions?.includeHash) { 4572 return s.location.hash === next.hash; 4573 } 4574 return true; 4575 } 4576 }); 4577 const doPreload = React8.useCallback(() => { 4578 router.preloadRoute({ ..._options }).catch((err) => { 4579 console.warn(err); 4580 console.warn(preloadWarning); 4581 }); 4582 }, [router, _options]); 4583 const preloadViewportIoCallback = React8.useCallback( 4584 (entry) => { 4585 if (entry?.isIntersecting) { 4586 doPreload(); 4587 } 4588 }, 4589 [doPreload] 4590 ); 4591 useIntersectionObserver( 4592 innerRef, 4593 preloadViewportIoCallback, 4594 intersectionObserverOptions, 4595 { disabled: !!disabled || !(preload === "viewport") } 4596 ); 4597 React8.useEffect(() => { 4598 if (hasRenderFetched.current) { 4599 return; 4600 } 4601 if (!disabled && preload === "render") { 4602 doPreload(); 4603 hasRenderFetched.current = true; 4604 } 4605 }, [disabled, doPreload, preload]); 4606 const handleClick = (e) => { 4607 const elementTarget = e.currentTarget.getAttribute("target"); 4608 const effectiveTarget = target !== void 0 ? target : elementTarget; 4609 if (!disabled && !isCtrlEvent(e) && !e.defaultPrevented && (!effectiveTarget || effectiveTarget === "_self") && e.button === 0) { 4610 e.preventDefault(); 4611 (0, import_react_dom.flushSync)(() => { 4612 setIsTransitioning(true); 4613 }); 4614 const unsub = router.subscribe("onResolved", () => { 4615 unsub(); 4616 setIsTransitioning(false); 4617 }); 4618 router.navigate({ 4619 ..._options, 4620 replace, 4621 resetScroll, 4622 hashScrollIntoView, 4623 startTransition: startTransition2, 4624 viewTransition, 4625 ignoreBlocker 4626 }); 4627 } 4628 }; 4629 if (externalLink) { 4630 return { 4631 ...propsSafeToSpread, 4632 ref: innerRef, 4633 href: externalLink, 4634 ...children && { children }, 4635 ...target && { target }, 4636 ...disabled && { disabled }, 4637 ...style && { style }, 4638 ...className && { className }, 4639 ...onClick && { onClick }, 4640 ...onFocus && { onFocus }, 4641 ...onMouseEnter && { onMouseEnter }, 4642 ...onMouseLeave && { onMouseLeave }, 4643 ...onTouchStart && { onTouchStart } 4644 }; 4645 } 4646 const handleFocus = (_) => { 4647 if (disabled) return; 4648 if (preload) { 4649 doPreload(); 4650 } 4651 }; 4652 const handleTouchStart = handleFocus; 4653 const handleEnter = (e) => { 4654 if (disabled || !preload) return; 4655 if (!preloadDelay) { 4656 doPreload(); 4657 } else { 4658 const eventTarget = e.target; 4659 if (timeoutMap.has(eventTarget)) { 4660 return; 4661 } 4662 const id = setTimeout(() => { 4663 timeoutMap.delete(eventTarget); 4664 doPreload(); 4665 }, preloadDelay); 4666 timeoutMap.set(eventTarget, id); 4667 } 4668 }; 4669 const handleLeave = (e) => { 4670 if (disabled || !preload || !preloadDelay) return; 4671 const eventTarget = e.target; 4672 const id = timeoutMap.get(eventTarget); 4673 if (id) { 4674 clearTimeout(id); 4675 timeoutMap.delete(eventTarget); 4676 } 4677 }; 4678 const resolvedActiveProps = isActive ? functionalUpdate(activeProps, {}) ?? STATIC_ACTIVE_OBJECT : STATIC_EMPTY_OBJECT; 4679 const resolvedInactiveProps = isActive ? STATIC_EMPTY_OBJECT : functionalUpdate(inactiveProps, {}) ?? STATIC_EMPTY_OBJECT; 4680 const resolvedClassName = [ 4681 className, 4682 resolvedActiveProps.className, 4683 resolvedInactiveProps.className 4684 ].filter(Boolean).join(" "); 4685 const resolvedStyle = (style || resolvedActiveProps.style || resolvedInactiveProps.style) && { 4686 ...style, 4687 ...resolvedActiveProps.style, 4688 ...resolvedInactiveProps.style 4689 }; 4690 return { 4691 ...propsSafeToSpread, 4692 ...resolvedActiveProps, 4693 ...resolvedInactiveProps, 4694 href: hrefOption?.href, 4695 ref: innerRef, 4696 onClick: composeHandlers([onClick, handleClick]), 4697 onFocus: composeHandlers([onFocus, handleFocus]), 4698 onMouseEnter: composeHandlers([onMouseEnter, handleEnter]), 4699 onMouseLeave: composeHandlers([onMouseLeave, handleLeave]), 4700 onTouchStart: composeHandlers([onTouchStart, handleTouchStart]), 4701 disabled: !!disabled, 4702 target, 4703 ...resolvedStyle && { style: resolvedStyle }, 4704 ...resolvedClassName && { className: resolvedClassName }, 4705 ...disabled && STATIC_DISABLED_PROPS, 4706 ...isActive && STATIC_ACTIVE_PROPS, 4707 ...isTransitioning && STATIC_TRANSITIONING_PROPS 4708 }; 4709 } 4710 var STATIC_EMPTY_OBJECT = {}; 4711 var STATIC_ACTIVE_OBJECT = { className: "active" }; 4712 var STATIC_DISABLED_PROPS = { role: "link", "aria-disabled": true }; 4713 var STATIC_ACTIVE_PROPS = { "data-status": "active", "aria-current": "page" }; 4714 var STATIC_TRANSITIONING_PROPS = { "data-transitioning": "transitioning" }; 4715 var timeoutMap = /* @__PURE__ */ new WeakMap(); 4716 var intersectionObserverOptions = { 4717 rootMargin: "100px" 4718 }; 4719 var composeHandlers = (handlers) => (e) => { 4720 for (const handler of handlers) { 4721 if (!handler) continue; 4722 if (e.defaultPrevented) return; 4723 handler(e); 4724 } 4725 }; 4726 function createLink(Comp) { 4727 return React8.forwardRef(function CreatedLink(props, ref) { 4728 return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Link, { ...props, _asChild: Comp, ref }); 4729 }); 4730 } 4731 var Link = React8.forwardRef( 4732 (props, ref) => { 4733 const { _asChild, ...rest } = props; 4734 const { 4735 type: _type, 4736 ref: innerRef, 4737 ...linkProps 4738 } = useLinkProps(rest, ref); 4739 const children = typeof rest.children === "function" ? rest.children({ 4740 isActive: linkProps["data-status"] === "active" 4741 }) : rest.children; 4742 if (_asChild === void 0) { 4743 delete linkProps.disabled; 4744 } 4745 return React8.createElement( 4746 _asChild ? _asChild : "a", 4747 { 4748 ...linkProps, 4749 ref: innerRef 4750 }, 4751 children 4752 ); 4753 } 4754 ); 4755 function isCtrlEvent(e) { 4756 return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey); 4757 } 4758 4759 // node_modules/@tanstack/react-router/dist/esm/route.js 4760 var Route = class extends BaseRoute { 4761 /** 4762 * @deprecated Use the `createRoute` function instead. 4763 */ 4764 constructor(options) { 4765 super(options); 4766 this.useMatch = (opts) => { 4767 return useMatch({ 4768 select: opts?.select, 4769 from: this.id, 4770 structuralSharing: opts?.structuralSharing 4771 }); 4772 }; 4773 this.useRouteContext = (opts) => { 4774 return useMatch({ 4775 ...opts, 4776 from: this.id, 4777 select: (d) => opts?.select ? opts.select(d.context) : d.context 4778 }); 4779 }; 4780 this.useSearch = (opts) => { 4781 return useSearch({ 4782 select: opts?.select, 4783 structuralSharing: opts?.structuralSharing, 4784 from: this.id 4785 }); 4786 }; 4787 this.useParams = (opts) => { 4788 return useParams({ 4789 select: opts?.select, 4790 structuralSharing: opts?.structuralSharing, 4791 from: this.id 4792 }); 4793 }; 4794 this.useLoaderDeps = (opts) => { 4795 return useLoaderDeps({ ...opts, from: this.id }); 4796 }; 4797 this.useLoaderData = (opts) => { 4798 return useLoaderData({ ...opts, from: this.id }); 4799 }; 4800 this.useNavigate = () => { 4801 return useNavigate({ from: this.fullPath }); 4802 }; 4803 this.Link = import_react3.default.forwardRef( 4804 (props, ref) => { 4805 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Link, { ref, from: this.fullPath, ...props }); 4806 } 4807 ); 4808 this.$$typeof = /* @__PURE__ */ Symbol.for("react.memo"); 4809 } 4810 }; 4811 function createRoute(options) { 4812 return new Route( 4813 // TODO: Help us TypeChris, you're our only hope! 4814 options 4815 ); 4816 } 4817 var RootRoute = class extends BaseRootRoute { 4818 /** 4819 * @deprecated `RootRoute` is now an internal implementation detail. Use `createRootRoute()` instead. 4820 */ 4821 constructor(options) { 4822 super(options); 4823 this.useMatch = (opts) => { 4824 return useMatch({ 4825 select: opts?.select, 4826 from: this.id, 4827 structuralSharing: opts?.structuralSharing 4828 }); 4829 }; 4830 this.useRouteContext = (opts) => { 4831 return useMatch({ 4832 ...opts, 4833 from: this.id, 4834 select: (d) => opts?.select ? opts.select(d.context) : d.context 4835 }); 4836 }; 4837 this.useSearch = (opts) => { 4838 return useSearch({ 4839 select: opts?.select, 4840 structuralSharing: opts?.structuralSharing, 4841 from: this.id 4842 }); 4843 }; 4844 this.useParams = (opts) => { 4845 return useParams({ 4846 select: opts?.select, 4847 structuralSharing: opts?.structuralSharing, 4848 from: this.id 4849 }); 4850 }; 4851 this.useLoaderDeps = (opts) => { 4852 return useLoaderDeps({ ...opts, from: this.id }); 4853 }; 4854 this.useLoaderData = (opts) => { 4855 return useLoaderData({ ...opts, from: this.id }); 4856 }; 4857 this.useNavigate = () => { 4858 return useNavigate({ from: this.fullPath }); 4859 }; 4860 this.Link = import_react3.default.forwardRef( 4861 (props, ref) => { 4862 return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Link, { ref, from: this.fullPath, ...props }); 4863 } 4864 ); 4865 this.$$typeof = /* @__PURE__ */ Symbol.for("react.memo"); 4866 } 4867 }; 4868 function createRootRoute(options) { 4869 return new RootRoute(options); 4870 } 4871 4872 // node_modules/@tanstack/react-router/dist/esm/fileRoute.js 4873 function createFileRoute(path) { 4874 if (typeof path === "object") { 4875 return new FileRoute(path, { 4876 silent: true 4877 }).createRoute(path); 4878 } 4879 return new FileRoute(path, { 4880 silent: true 4881 }).createRoute; 4882 } 4883 var FileRoute = class { 4884 constructor(path, _opts) { 4885 this.path = path; 4886 this.createRoute = (options) => { 4887 tiny_warning_esm_default( 4888 this.silent, 4889 "FileRoute is deprecated and will be removed in the next major version. Use the createFileRoute(path)(options) function instead." 4890 ); 4891 const route = createRoute(options); 4892 route.isRoot = false; 4893 return route; 4894 }; 4895 this.silent = _opts?.silent; 4896 } 4897 }; 4898 var LazyRoute = class { 4899 constructor(opts) { 4900 this.useMatch = (opts2) => { 4901 return useMatch({ 4902 select: opts2?.select, 4903 from: this.options.id, 4904 structuralSharing: opts2?.structuralSharing 4905 }); 4906 }; 4907 this.useRouteContext = (opts2) => { 4908 return useMatch({ 4909 from: this.options.id, 4910 select: (d) => opts2?.select ? opts2.select(d.context) : d.context 4911 }); 4912 }; 4913 this.useSearch = (opts2) => { 4914 return useSearch({ 4915 select: opts2?.select, 4916 structuralSharing: opts2?.structuralSharing, 4917 from: this.options.id 4918 }); 4919 }; 4920 this.useParams = (opts2) => { 4921 return useParams({ 4922 select: opts2?.select, 4923 structuralSharing: opts2?.structuralSharing, 4924 from: this.options.id 4925 }); 4926 }; 4927 this.useLoaderDeps = (opts2) => { 4928 return useLoaderDeps({ ...opts2, from: this.options.id }); 4929 }; 4930 this.useLoaderData = (opts2) => { 4931 return useLoaderData({ ...opts2, from: this.options.id }); 4932 }; 4933 this.useNavigate = () => { 4934 const router = useRouter(); 4935 return useNavigate({ from: router.routesById[this.options.id].fullPath }); 4936 }; 4937 this.options = opts; 4938 this.$$typeof = /* @__PURE__ */ Symbol.for("react.memo"); 4939 } 4940 }; 4941 function createLazyRoute(id) { 4942 return (opts) => { 4943 return new LazyRoute({ 4944 id, 4945 ...opts 4946 }); 4947 }; 4948 } 4949 function createLazyFileRoute(id) { 4950 if (typeof id === "object") { 4951 return new LazyRoute(id); 4952 } 4953 return (opts) => new LazyRoute({ id, ...opts }); 4954 } 4955 4956 // node_modules/@tanstack/react-router/dist/esm/Matches.js 4957 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 4958 var React11 = __toESM(require_react(), 1); 4959 4960 // node_modules/@tanstack/react-router/dist/esm/Transitioner.js 4961 var React9 = __toESM(require_react(), 1); 4962 function Transitioner() { 4963 const router = useRouter(); 4964 const mountLoadForRouter = React9.useRef({ router, mounted: false }); 4965 const [isTransitioning, setIsTransitioning] = React9.useState(false); 4966 const { hasPendingMatches, isLoading } = useRouterState({ 4967 select: (s) => ({ 4968 isLoading: s.isLoading, 4969 hasPendingMatches: s.matches.some((d) => d.status === "pending") 4970 }), 4971 structuralSharing: true 4972 }); 4973 const previousIsLoading = usePrevious(isLoading); 4974 const isAnyPending = isLoading || isTransitioning || hasPendingMatches; 4975 const previousIsAnyPending = usePrevious(isAnyPending); 4976 const isPagePending = isLoading || hasPendingMatches; 4977 const previousIsPagePending = usePrevious(isPagePending); 4978 router.startTransition = (fn) => { 4979 setIsTransitioning(true); 4980 React9.startTransition(() => { 4981 fn(); 4982 setIsTransitioning(false); 4983 }); 4984 }; 4985 React9.useEffect(() => { 4986 const unsub = router.history.subscribe(router.load); 4987 const nextLocation = router.buildLocation({ 4988 to: router.latestLocation.pathname, 4989 search: true, 4990 params: true, 4991 hash: true, 4992 state: true, 4993 _includeValidateSearch: true 4994 }); 4995 if (trimPathRight(router.latestLocation.href) !== trimPathRight(nextLocation.href)) { 4996 router.commitLocation({ ...nextLocation, replace: true }); 4997 } 4998 return () => { 4999 unsub(); 5000 }; 5001 }, [router, router.history]); 5002 useLayoutEffect2(() => { 5003 if ( 5004 // if we are hydrating from SSR, loading is triggered in ssr-client 5005 typeof window !== "undefined" && router.ssr || mountLoadForRouter.current.router === router && mountLoadForRouter.current.mounted 5006 ) { 5007 return; 5008 } 5009 mountLoadForRouter.current = { router, mounted: true }; 5010 const tryLoad = async () => { 5011 try { 5012 await router.load(); 5013 } catch (err) { 5014 console.error(err); 5015 } 5016 }; 5017 tryLoad(); 5018 }, [router]); 5019 useLayoutEffect2(() => { 5020 if (previousIsLoading && !isLoading) { 5021 router.emit({ 5022 type: "onLoad", 5023 // When the new URL has committed, when the new matches have been loaded into state.matches 5024 ...getLocationChangeInfo(router.state) 5025 }); 5026 } 5027 }, [previousIsLoading, router, isLoading]); 5028 useLayoutEffect2(() => { 5029 if (previousIsPagePending && !isPagePending) { 5030 router.emit({ 5031 type: "onBeforeRouteMount", 5032 ...getLocationChangeInfo(router.state) 5033 }); 5034 } 5035 }, [isPagePending, previousIsPagePending, router]); 5036 useLayoutEffect2(() => { 5037 if (previousIsAnyPending && !isAnyPending) { 5038 router.emit({ 5039 type: "onResolved", 5040 ...getLocationChangeInfo(router.state) 5041 }); 5042 router.__store.setState((s) => ({ 5043 ...s, 5044 status: "idle", 5045 resolvedLocation: s.location 5046 })); 5047 handleHashScroll(router); 5048 } 5049 }, [isAnyPending, previousIsAnyPending, router]); 5050 return null; 5051 } 5052 5053 // node_modules/@tanstack/react-router/dist/esm/Match.js 5054 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 5055 var React10 = __toESM(require_react(), 1); 5056 5057 // node_modules/@tanstack/react-router/dist/esm/not-found.js 5058 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 5059 function CatchNotFound(props) { 5060 const resetKey = useRouterState({ 5061 select: (s) => `not-found-$s.location.pathname}-$s.status}` 5062 }); 5063 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)( 5064 CatchBoundary, 5065 { 5066 getResetKey: () => resetKey, 5067 onCatch: (error, errorInfo) => { 5068 if (isNotFound(error)) { 5069 props.onCatch?.(error, errorInfo); 5070 } else { 5071 throw error; 5072 } 5073 }, 5074 errorComponent: ({ error }) => { 5075 if (isNotFound(error)) { 5076 return props.fallback?.(error); 5077 } else { 5078 throw error; 5079 } 5080 }, 5081 children: props.children 5082 } 5083 ); 5084 } 5085 function DefaultGlobalNotFound() { 5086 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: "Not Found" }); 5087 } 5088 5089 // node_modules/@tanstack/react-router/dist/esm/SafeFragment.js 5090 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 5091 function SafeFragment(props) { 5092 return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: props.children }); 5093 } 5094 5095 // node_modules/@tanstack/react-router/dist/esm/renderRouteNotFound.js 5096 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 5097 function renderRouteNotFound(router, route, data) { 5098 if (!route.options.notFoundComponent) { 5099 if (router.options.defaultNotFoundComponent) { 5100 return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(router.options.defaultNotFoundComponent, { data }); 5101 } 5102 if (true) { 5103 tiny_warning_esm_default( 5104 route.options.notFoundComponent, 5105 `A notFoundError was encountered on the route with ID "$route.id}", but a notFoundComponent option was not configured, nor was a router level defaultNotFoundComponent configured. Consider configuring at least one of these to avoid TanStack Router's overly generic defaultNotFoundComponent (<div>Not Found<div>)` 5106 ); 5107 } 5108 return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DefaultGlobalNotFound, {}); 5109 } 5110 return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(route.options.notFoundComponent, { data }); 5111 } 5112 5113 // node_modules/@tanstack/react-router/dist/esm/scroll-restoration.js 5114 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 5115 5116 // node_modules/@tanstack/react-router/dist/esm/ScriptOnce.js 5117 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 5118 function ScriptOnce({ children }) { 5119 const router = useRouter(); 5120 if (!router.isServer) { 5121 return null; 5122 } 5123 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)( 5124 "script", 5125 { 5126 nonce: router.options.ssr?.nonce, 5127 className: "$tsr", 5128 dangerouslySetInnerHTML: { 5129 __html: [children].filter(Boolean).join("\n") + ";$_TSR.c()" 5130 } 5131 } 5132 ); 5133 } 5134 5135 // node_modules/@tanstack/react-router/dist/esm/scroll-restoration.js 5136 function ScrollRestoration() { 5137 const router = useRouter(); 5138 if (!router.isScrollRestoring || !router.isServer) { 5139 return null; 5140 } 5141 if (typeof router.options.scrollRestoration === "function") { 5142 const shouldRestore = router.options.scrollRestoration({ 5143 location: router.latestLocation 5144 }); 5145 if (!shouldRestore) { 5146 return null; 5147 } 5148 } 5149 const getKey = router.options.getScrollRestorationKey || defaultGetScrollRestorationKey; 5150 const userKey = getKey(router.latestLocation); 5151 const resolvedKey = userKey !== defaultGetScrollRestorationKey(router.latestLocation) ? userKey : void 0; 5152 const restoreScrollOptions = { 5153 storageKey, 5154 shouldScrollRestoration: true 5155 }; 5156 if (resolvedKey) { 5157 restoreScrollOptions.key = resolvedKey; 5158 } 5159 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)( 5160 ScriptOnce, 5161 { 5162 children: `($restoreScroll.toString()})($JSON.stringify(restoreScrollOptions)})` 5163 } 5164 ); 5165 } 5166 5167 // node_modules/@tanstack/react-router/dist/esm/Match.js 5168 var Match = React10.memo(function MatchImpl({ 5169 matchId 5170 }) { 5171 const router = useRouter(); 5172 const matchState = useRouterState({ 5173 select: (s) => { 5174 const match = s.matches.find((d) => d.id === matchId); 5175 invariant( 5176 match, 5177 `Could not find match for matchId "$matchId}". Please file an issue!` 5178 ); 5179 return { 5180 routeId: match.routeId, 5181 ssr: match.ssr, 5182 _displayPending: match._displayPending 5183 }; 5184 }, 5185 structuralSharing: true 5186 }); 5187 const route = router.routesById[matchState.routeId]; 5188 const PendingComponent = route.options.pendingComponent ?? router.options.defaultPendingComponent; 5189 const pendingElement = PendingComponent ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PendingComponent, {}) : null; 5190 const routeErrorComponent = route.options.errorComponent ?? router.options.defaultErrorComponent; 5191 const routeOnCatch = route.options.onCatch ?? router.options.defaultOnCatch; 5192 const routeNotFoundComponent = route.isRoot ? ( 5193 // If it's the root route, use the globalNotFound option, with fallback to the notFoundRoute's component 5194 route.options.notFoundComponent ?? router.options.notFoundRoute?.options.component 5195 ) : route.options.notFoundComponent; 5196 const resolvedNoSsr = matchState.ssr === false || matchState.ssr === "data-only"; 5197 const ResolvedSuspenseBoundary = ( 5198 // If we're on the root route, allow forcefully wrapping in suspense 5199 (!route.isRoot || route.options.wrapInSuspense || resolvedNoSsr) && (route.options.wrapInSuspense ?? PendingComponent ?? (route.options.errorComponent?.preload || resolvedNoSsr)) ? React10.Suspense : SafeFragment 5200 ); 5201 const ResolvedCatchBoundary = routeErrorComponent ? CatchBoundary : SafeFragment; 5202 const ResolvedNotFoundBoundary = routeNotFoundComponent ? CatchNotFound : SafeFragment; 5203 const resetKey = useRouterState({ 5204 select: (s) => s.loadedAt 5205 }); 5206 const parentRouteId = useRouterState({ 5207 select: (s) => { 5208 const index = s.matches.findIndex((d) => d.id === matchId); 5209 return s.matches[index - 1]?.routeId; 5210 } 5211 }); 5212 const ShellComponent = route.isRoot ? route.options.shellComponent ?? SafeFragment : SafeFragment; 5213 return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(ShellComponent, { children: [ 5214 /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(matchContext.Provider, { value: matchId, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ResolvedSuspenseBoundary, { fallback: pendingElement, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 5215 ResolvedCatchBoundary, 5216 { 5217 getResetKey: () => resetKey, 5218 errorComponent: routeErrorComponent || ErrorComponent, 5219 onCatch: (error, errorInfo) => { 5220 if (isNotFound(error)) throw error; 5221 tiny_warning_esm_default(false, `Error in route match: $matchId}`); 5222 routeOnCatch?.(error, errorInfo); 5223 }, 5224 children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 5225 ResolvedNotFoundBoundary, 5226 { 5227 fallback: (error) => { 5228 if (!routeNotFoundComponent || error.routeId && error.routeId !== matchState.routeId || !error.routeId && !route.isRoot) 5229 throw error; 5230 return React10.createElement(routeNotFoundComponent, error); 5231 }, 5232 children: resolvedNoSsr || matchState._displayPending ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ClientOnly, { fallback: pendingElement, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MatchInner, { matchId }) }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(MatchInner, { matchId }) 5233 } 5234 ) 5235 } 5236 ) }) }), 5237 parentRouteId === rootRouteId && router.options.scrollRestoration ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [ 5238 /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(OnRendered, {}), 5239 /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ScrollRestoration, {}) 5240 ] }) : null 5241 ] }); 5242 }); 5243 function OnRendered() { 5244 const router = useRouter(); 5245 const prevLocationRef = React10.useRef( 5246 void 0 5247 ); 5248 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 5249 "script", 5250 { 5251 suppressHydrationWarning: true, 5252 ref: (el) => { 5253 if (el && (prevLocationRef.current === void 0 || prevLocationRef.current.href !== router.latestLocation.href)) { 5254 router.emit({ 5255 type: "onRendered", 5256 ...getLocationChangeInfo(router.state) 5257 }); 5258 prevLocationRef.current = router.latestLocation; 5259 } 5260 } 5261 }, 5262 router.latestLocation.state.__TSR_key 5263 ); 5264 } 5265 var MatchInner = React10.memo(function MatchInnerImpl({ 5266 matchId 5267 }) { 5268 const router = useRouter(); 5269 const { match, key, routeId } = useRouterState({ 5270 select: (s) => { 5271 const match2 = s.matches.find((d) => d.id === matchId); 5272 const routeId2 = match2.routeId; 5273 const remountFn = router.routesById[routeId2].options.remountDeps ?? router.options.defaultRemountDeps; 5274 const remountDeps = remountFn?.({ 5275 routeId: routeId2, 5276 loaderDeps: match2.loaderDeps, 5277 params: match2._strictParams, 5278 search: match2._strictSearch 5279 }); 5280 const key2 = remountDeps ? JSON.stringify(remountDeps) : void 0; 5281 return { 5282 key: key2, 5283 routeId: routeId2, 5284 match: { 5285 id: match2.id, 5286 status: match2.status, 5287 error: match2.error, 5288 _forcePending: match2._forcePending, 5289 _displayPending: match2._displayPending 5290 } 5291 }; 5292 }, 5293 structuralSharing: true 5294 }); 5295 const route = router.routesById[routeId]; 5296 const out = React10.useMemo(() => { 5297 const Comp = route.options.component ?? router.options.defaultComponent; 5298 if (Comp) { 5299 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Comp, {}, key); 5300 } 5301 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Outlet, {}); 5302 }, [key, route.options.component, router.options.defaultComponent]); 5303 if (match._displayPending) { 5304 throw router.getMatch(match.id)?._nonReactive.displayPendingPromise; 5305 } 5306 if (match._forcePending) { 5307 throw router.getMatch(match.id)?._nonReactive.minPendingPromise; 5308 } 5309 if (match.status === "pending") { 5310 const pendingMinMs = route.options.pendingMinMs ?? router.options.defaultPendingMinMs; 5311 if (pendingMinMs) { 5312 const routerMatch = router.getMatch(match.id); 5313 if (routerMatch && !routerMatch._nonReactive.minPendingPromise) { 5314 if (!router.isServer) { 5315 const minPendingPromise = createControlledPromise(); 5316 routerMatch._nonReactive.minPendingPromise = minPendingPromise; 5317 setTimeout(() => { 5318 minPendingPromise.resolve(); 5319 routerMatch._nonReactive.minPendingPromise = void 0; 5320 }, pendingMinMs); 5321 } 5322 } 5323 } 5324 throw router.getMatch(match.id)?._nonReactive.loadPromise; 5325 } 5326 if (match.status === "notFound") { 5327 invariant(isNotFound(match.error), "Expected a notFound error"); 5328 return renderRouteNotFound(router, route, match.error); 5329 } 5330 if (match.status === "redirected") { 5331 invariant(isRedirect(match.error), "Expected a redirect error"); 5332 throw router.getMatch(match.id)?._nonReactive.loadPromise; 5333 } 5334 if (match.status === "error") { 5335 if (router.isServer) { 5336 const RouteErrorComponent = (route.options.errorComponent ?? router.options.defaultErrorComponent) || ErrorComponent; 5337 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)( 5338 RouteErrorComponent, 5339 { 5340 error: match.error, 5341 reset: void 0, 5342 info: { 5343 componentStack: "" 5344 } 5345 } 5346 ); 5347 } 5348 throw match.error; 5349 } 5350 return out; 5351 }); 5352 var Outlet = React10.memo(function OutletImpl() { 5353 const router = useRouter(); 5354 const matchId = React10.useContext(matchContext); 5355 const routeId = useRouterState({ 5356 select: (s) => s.matches.find((d) => d.id === matchId)?.routeId 5357 }); 5358 const route = router.routesById[routeId]; 5359 const parentGlobalNotFound = useRouterState({ 5360 select: (s) => { 5361 const matches = s.matches; 5362 const parentMatch = matches.find((d) => d.id === matchId); 5363 invariant( 5364 parentMatch, 5365 `Could not find parent match for matchId "$matchId}"` 5366 ); 5367 return parentMatch.globalNotFound; 5368 } 5369 }); 5370 const childMatchId = useRouterState({ 5371 select: (s) => { 5372 const matches = s.matches; 5373 const index = matches.findIndex((d) => d.id === matchId); 5374 return matches[index + 1]?.id; 5375 } 5376 }); 5377 const pendingElement = router.options.defaultPendingComponent ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(router.options.defaultPendingComponent, {}) : null; 5378 if (parentGlobalNotFound) { 5379 return renderRouteNotFound(router, route, void 0); 5380 } 5381 if (!childMatchId) { 5382 return null; 5383 } 5384 const nextMatch = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Match, { matchId: childMatchId }); 5385 if (matchId === rootRouteId) { 5386 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(React10.Suspense, { fallback: pendingElement, children: nextMatch }); 5387 } 5388 return nextMatch; 5389 }); 5390 5391 // node_modules/@tanstack/react-router/dist/esm/Matches.js 5392 function Matches() { 5393 const router = useRouter(); 5394 const rootRoute = router.routesById[rootRouteId]; 5395 const PendingComponent = rootRoute.options.pendingComponent ?? router.options.defaultPendingComponent; 5396 const pendingElement = PendingComponent ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PendingComponent, {}) : null; 5397 const ResolvedSuspense = router.isServer || typeof document !== "undefined" && router.ssr ? SafeFragment : React11.Suspense; 5398 const inner = /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(ResolvedSuspense, { fallback: pendingElement, children: [ 5399 !router.isServer && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Transitioner, {}), 5400 /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(MatchesInner, {}) 5401 ] }); 5402 return router.options.InnerWrap ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(router.options.InnerWrap, { children: inner }) : inner; 5403 } 5404 function MatchesInner() { 5405 const router = useRouter(); 5406 const matchId = useRouterState({ 5407 select: (s) => { 5408 return s.matches[0]?.id; 5409 } 5410 }); 5411 const resetKey = useRouterState({ 5412 select: (s) => s.loadedAt 5413 }); 5414 const matchComponent = matchId ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Match, { matchId }) : null; 5415 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(matchContext.Provider, { value: matchId, children: router.options.disableGlobalCatchBoundary ? matchComponent : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)( 5416 CatchBoundary, 5417 { 5418 getResetKey: () => resetKey, 5419 errorComponent: ErrorComponent, 5420 onCatch: (error) => { 5421 tiny_warning_esm_default( 5422 false, 5423 `The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!` 5424 ); 5425 tiny_warning_esm_default(false, error.message || error.toString()); 5426 }, 5427 children: matchComponent 5428 } 5429 ) }); 5430 } 5431 function useMatches(opts) { 5432 return useRouterState({ 5433 select: (state) => { 5434 const matches = state.matches; 5435 return opts?.select ? opts.select(matches) : matches; 5436 }, 5437 structuralSharing: opts?.structuralSharing 5438 }); 5439 } 5440 5441 // node_modules/@tanstack/react-router/dist/esm/router.js 5442 var createRouter = (options) => { 5443 return new Router(options); 5444 }; 5445 var Router = class extends RouterCore { 5446 constructor(options) { 5447 super(options); 5448 } 5449 }; 5450 if (typeof globalThis !== "undefined") { 5451 globalThis.createFileRoute = createFileRoute; 5452 globalThis.createLazyFileRoute = createLazyFileRoute; 5453 } else if (typeof window !== "undefined") { 5454 window.createFileRoute = createFileRoute; 5455 window.createLazyFileRoute = createLazyFileRoute; 5456 } 5457 5458 // node_modules/@tanstack/react-router/dist/esm/RouterProvider.js 5459 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 5460 function RouterContextProvider({ 5461 router, 5462 children, 5463 ...rest 5464 }) { 5465 if (Object.keys(rest).length > 0) { 5466 router.update({ 5467 ...router.options, 5468 ...rest, 5469 context: { 5470 ...router.options.context, 5471 ...rest.context 5472 } 5473 }); 5474 } 5475 const routerContext2 = getRouterContext(); 5476 const provider = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(routerContext2.Provider, { value: router, children }); 5477 if (router.options.Wrap) { 5478 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(router.options.Wrap, { children: provider }); 5479 } 5480 return provider; 5481 } 5482 function RouterProvider({ router, ...rest }) { 5483 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RouterContextProvider, { router, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Matches, {}) }); 5484 } 5485 5486 // node_modules/@tanstack/react-router/dist/esm/useLocation.js 5487 function useLocation(opts) { 5488 return useRouterState({ 5489 select: (state) => opts?.select ? opts.select(state.location) : state.location 5490 }); 5491 } 5492 5493 // node_modules/@tanstack/react-router/dist/esm/useCanGoBack.js 5494 function useCanGoBack() { 5495 return useRouterState({ select: (s) => s.location.state.__TSR_index !== 0 }); 5496 } 5497 5498 // packages/route/build-module/lock-unlock.mjs 5499 var import_private_apis = __toESM(require_private_apis(), 1); 5500 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 5501 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 5502 "@wordpress/route" 5503 ); 5504 5505 // packages/route/build-module/private-apis.mjs 5506 var privateApis = {}; 5507 lock(privateApis, { 5508 // Router creation and setup 5509 createBrowserHistory, 5510 createLazyRoute, 5511 createRouter, 5512 createRootRoute, 5513 createRoute, 5514 Outlet, 5515 RouterProvider, 5516 // Internal routing utilities 5517 redirect, 5518 createLink, 5519 useCanGoBack, 5520 useLoaderData, 5521 useLocation, 5522 useMatches, 5523 useRouter, 5524 useRouterState, 5525 // History utilities 5526 parseHref 5527 }); 5528 5529 // packages/route/build-module/index.mjs 5530 function useInvalidate() { 5531 const router = useRouter(); 5532 return () => router.invalidate(); 5533 } 5534 export { 5535 Link, 5536 notFound, 5537 privateApis, 5538 redirect, 5539 useInvalidate, 5540 useLinkProps, 5541 useNavigate, 5542 useParams, 5543 useSearch 5544 }; 5545 /*! Bundled license information: 5546 5547 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 5548 (** 5549 * @license React 5550 * use-sync-external-store-shim.development.js 5551 * 5552 * Copyright (c) Meta Platforms, Inc. and affiliates. 5553 * 5554 * This source code is licensed under the MIT license found in the 5555 * LICENSE file in the root directory of this source tree. 5556 *) 5557 5558 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 5559 (** 5560 * @license React 5561 * use-sync-external-store-shim/with-selector.development.js 5562 * 5563 * Copyright (c) Meta Platforms, Inc. and affiliates. 5564 * 5565 * This source code is licensed under the MIT license found in the 5566 * LICENSE file in the root directory of this source tree. 5567 *) 5568 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Sun Jun 14 08:20:09 2026 | Cross-referenced by PHPXref |