@tanstack/solid-router 1.167.1 → 1.167.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/cjs/Asset.cjs +84 -127
  2. package/dist/cjs/Asset.cjs.map +1 -1
  3. package/dist/cjs/CatchBoundary.cjs +50 -68
  4. package/dist/cjs/CatchBoundary.cjs.map +1 -1
  5. package/dist/cjs/ClientOnly.cjs +61 -39
  6. package/dist/cjs/ClientOnly.cjs.map +1 -1
  7. package/dist/cjs/HeadContent.cjs +25 -19
  8. package/dist/cjs/HeadContent.cjs.map +1 -1
  9. package/dist/cjs/HeadContent.dev.cjs +38 -33
  10. package/dist/cjs/HeadContent.dev.cjs.map +1 -1
  11. package/dist/cjs/Match.cjs +330 -398
  12. package/dist/cjs/Match.cjs.map +1 -1
  13. package/dist/cjs/Matches.cjs +109 -151
  14. package/dist/cjs/Matches.cjs.map +1 -1
  15. package/dist/cjs/RouterProvider.cjs +28 -40
  16. package/dist/cjs/RouterProvider.cjs.map +1 -1
  17. package/dist/cjs/SafeFragment.cjs +7 -5
  18. package/dist/cjs/SafeFragment.cjs.map +1 -1
  19. package/dist/cjs/ScriptOnce.cjs +18 -20
  20. package/dist/cjs/ScriptOnce.cjs.map +1 -1
  21. package/dist/cjs/Scripts.cjs +41 -54
  22. package/dist/cjs/Scripts.cjs.map +1 -1
  23. package/dist/cjs/ScrollRestoration.cjs +26 -28
  24. package/dist/cjs/ScrollRestoration.cjs.map +1 -1
  25. package/dist/cjs/Transitioner.cjs +94 -129
  26. package/dist/cjs/Transitioner.cjs.map +1 -1
  27. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  28. package/dist/cjs/awaited.cjs +24 -51
  29. package/dist/cjs/awaited.cjs.map +1 -1
  30. package/dist/cjs/fileRoute.cjs +96 -91
  31. package/dist/cjs/fileRoute.cjs.map +1 -1
  32. package/dist/cjs/headContentUtils.cjs +132 -170
  33. package/dist/cjs/headContentUtils.cjs.map +1 -1
  34. package/dist/cjs/index.cjs +245 -176
  35. package/dist/cjs/index.dev.cjs +245 -176
  36. package/dist/cjs/lazyRouteComponent.cjs +48 -54
  37. package/dist/cjs/lazyRouteComponent.cjs.map +1 -1
  38. package/dist/cjs/link.cjs +304 -331
  39. package/dist/cjs/link.cjs.map +1 -1
  40. package/dist/cjs/matchContext.cjs +9 -23
  41. package/dist/cjs/matchContext.cjs.map +1 -1
  42. package/dist/cjs/not-found.cjs +26 -34
  43. package/dist/cjs/not-found.cjs.map +1 -1
  44. package/dist/cjs/renderRouteNotFound.cjs +23 -16
  45. package/dist/cjs/renderRouteNotFound.cjs.map +1 -1
  46. package/dist/cjs/route.cjs +200 -215
  47. package/dist/cjs/route.cjs.map +1 -1
  48. package/dist/cjs/router.cjs +18 -16
  49. package/dist/cjs/router.cjs.map +1 -1
  50. package/dist/cjs/routerContext.cjs +8 -22
  51. package/dist/cjs/routerContext.cjs.map +1 -1
  52. package/dist/cjs/scroll-restoration.cjs +25 -35
  53. package/dist/cjs/scroll-restoration.cjs.map +1 -1
  54. package/dist/cjs/ssr/RouterClient.cjs +31 -42
  55. package/dist/cjs/ssr/RouterClient.cjs.map +1 -1
  56. package/dist/cjs/ssr/RouterServer.cjs +44 -51
  57. package/dist/cjs/ssr/RouterServer.cjs.map +1 -1
  58. package/dist/cjs/ssr/client.cjs +2 -4
  59. package/dist/cjs/ssr/defaultRenderHandler.cjs +12 -16
  60. package/dist/cjs/ssr/defaultRenderHandler.cjs.map +1 -1
  61. package/dist/cjs/ssr/defaultStreamHandler.cjs +13 -18
  62. package/dist/cjs/ssr/defaultStreamHandler.cjs.map +1 -1
  63. package/dist/cjs/ssr/renderRouterToStream.cjs +27 -55
  64. package/dist/cjs/ssr/renderRouterToStream.cjs.map +1 -1
  65. package/dist/cjs/ssr/renderRouterToString.cjs +33 -57
  66. package/dist/cjs/ssr/renderRouterToString.cjs.map +1 -1
  67. package/dist/cjs/ssr/server.cjs +18 -18
  68. package/dist/cjs/useBlocker.cjs +138 -173
  69. package/dist/cjs/useBlocker.cjs.map +1 -1
  70. package/dist/cjs/useBlocker.d.cts +8 -5
  71. package/dist/cjs/useCanGoBack.cjs +6 -5
  72. package/dist/cjs/useCanGoBack.cjs.map +1 -1
  73. package/dist/cjs/useLoaderData.cjs +12 -11
  74. package/dist/cjs/useLoaderData.cjs.map +1 -1
  75. package/dist/cjs/useLoaderDeps.cjs +12 -14
  76. package/dist/cjs/useLoaderDeps.cjs.map +1 -1
  77. package/dist/cjs/useLocation.cjs +6 -7
  78. package/dist/cjs/useLocation.cjs.map +1 -1
  79. package/dist/cjs/useMatch.cjs +27 -49
  80. package/dist/cjs/useMatch.cjs.map +1 -1
  81. package/dist/cjs/useNavigate.cjs +20 -38
  82. package/dist/cjs/useNavigate.cjs.map +1 -1
  83. package/dist/cjs/useParams.cjs +14 -13
  84. package/dist/cjs/useParams.cjs.map +1 -1
  85. package/dist/cjs/useRouteContext.cjs +9 -8
  86. package/dist/cjs/useRouteContext.cjs.map +1 -1
  87. package/dist/cjs/useRouter.cjs +13 -26
  88. package/dist/cjs/useRouter.cjs.map +1 -1
  89. package/dist/cjs/useRouterState.cjs +29 -37
  90. package/dist/cjs/useRouterState.cjs.map +1 -1
  91. package/dist/cjs/useSearch.cjs +13 -12
  92. package/dist/cjs/useSearch.cjs.map +1 -1
  93. package/dist/cjs/utils.cjs +58 -51
  94. package/dist/cjs/utils.cjs.map +1 -1
  95. package/dist/esm/Asset.js +82 -126
  96. package/dist/esm/Asset.js.map +1 -1
  97. package/dist/esm/CatchBoundary.js +46 -50
  98. package/dist/esm/CatchBoundary.js.map +1 -1
  99. package/dist/esm/ClientOnly.js +58 -22
  100. package/dist/esm/ClientOnly.js.map +1 -1
  101. package/dist/esm/HeadContent.dev.js +36 -32
  102. package/dist/esm/HeadContent.dev.js.map +1 -1
  103. package/dist/esm/HeadContent.js +23 -18
  104. package/dist/esm/HeadContent.js.map +1 -1
  105. package/dist/esm/Match.js +322 -378
  106. package/dist/esm/Match.js.map +1 -1
  107. package/dist/esm/Matches.js +102 -135
  108. package/dist/esm/Matches.js.map +1 -1
  109. package/dist/esm/RouterProvider.js +25 -39
  110. package/dist/esm/RouterProvider.js.map +1 -1
  111. package/dist/esm/SafeFragment.js +6 -5
  112. package/dist/esm/SafeFragment.js.map +1 -1
  113. package/dist/esm/ScriptOnce.js +16 -19
  114. package/dist/esm/ScriptOnce.js.map +1 -1
  115. package/dist/esm/Scripts.js +40 -54
  116. package/dist/esm/Scripts.js.map +1 -1
  117. package/dist/esm/ScrollRestoration.js +25 -29
  118. package/dist/esm/ScrollRestoration.js.map +1 -1
  119. package/dist/esm/Transitioner.js +90 -110
  120. package/dist/esm/Transitioner.js.map +1 -1
  121. package/dist/esm/awaited.js +21 -34
  122. package/dist/esm/awaited.js.map +1 -1
  123. package/dist/esm/fileRoute.js +90 -92
  124. package/dist/esm/fileRoute.js.map +1 -1
  125. package/dist/esm/headContentUtils.js +129 -152
  126. package/dist/esm/headContentUtils.js.map +1 -1
  127. package/dist/esm/index.dev.js +15 -115
  128. package/dist/esm/index.js +17 -116
  129. package/dist/esm/lazyRouteComponent.js +47 -54
  130. package/dist/esm/lazyRouteComponent.js.map +1 -1
  131. package/dist/esm/link.js +299 -314
  132. package/dist/esm/link.js.map +1 -1
  133. package/dist/esm/matchContext.js +7 -7
  134. package/dist/esm/matchContext.js.map +1 -1
  135. package/dist/esm/not-found.js +23 -33
  136. package/dist/esm/not-found.js.map +1 -1
  137. package/dist/esm/renderRouteNotFound.js +20 -15
  138. package/dist/esm/renderRouteNotFound.js.map +1 -1
  139. package/dist/esm/route.js +193 -218
  140. package/dist/esm/route.js.map +1 -1
  141. package/dist/esm/router.js +17 -17
  142. package/dist/esm/router.js.map +1 -1
  143. package/dist/esm/routerContext.js +6 -5
  144. package/dist/esm/routerContext.js.map +1 -1
  145. package/dist/esm/scroll-restoration.js +23 -34
  146. package/dist/esm/scroll-restoration.js.map +1 -1
  147. package/dist/esm/ssr/RouterClient.js +29 -41
  148. package/dist/esm/ssr/RouterClient.js.map +1 -1
  149. package/dist/esm/ssr/RouterServer.js +40 -48
  150. package/dist/esm/ssr/RouterServer.js.map +1 -1
  151. package/dist/esm/ssr/client.js +1 -4
  152. package/dist/esm/ssr/defaultRenderHandler.js +11 -15
  153. package/dist/esm/ssr/defaultRenderHandler.js.map +1 -1
  154. package/dist/esm/ssr/defaultStreamHandler.js +12 -17
  155. package/dist/esm/ssr/defaultStreamHandler.js.map +1 -1
  156. package/dist/esm/ssr/renderRouterToStream.js +24 -37
  157. package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
  158. package/dist/esm/ssr/renderRouterToString.js +31 -40
  159. package/dist/esm/ssr/renderRouterToString.js.map +1 -1
  160. package/dist/esm/ssr/server.js +3 -10
  161. package/dist/esm/useBlocker.d.ts +8 -5
  162. package/dist/esm/useBlocker.js +134 -155
  163. package/dist/esm/useBlocker.js.map +1 -1
  164. package/dist/esm/useCanGoBack.js +6 -5
  165. package/dist/esm/useCanGoBack.js.map +1 -1
  166. package/dist/esm/useLoaderData.js +12 -11
  167. package/dist/esm/useLoaderData.js.map +1 -1
  168. package/dist/esm/useLoaderDeps.js +12 -14
  169. package/dist/esm/useLoaderDeps.js.map +1 -1
  170. package/dist/esm/useLocation.js +6 -7
  171. package/dist/esm/useLocation.js.map +1 -1
  172. package/dist/esm/useMatch.js +23 -31
  173. package/dist/esm/useMatch.js.map +1 -1
  174. package/dist/esm/useNavigate.js +18 -22
  175. package/dist/esm/useNavigate.js.map +1 -1
  176. package/dist/esm/useParams.js +14 -13
  177. package/dist/esm/useParams.js.map +1 -1
  178. package/dist/esm/useRouteContext.js +9 -8
  179. package/dist/esm/useRouteContext.js.map +1 -1
  180. package/dist/esm/useRouter.js +9 -8
  181. package/dist/esm/useRouter.js.map +1 -1
  182. package/dist/esm/useRouterState.js +28 -37
  183. package/dist/esm/useRouterState.js.map +1 -1
  184. package/dist/esm/useSearch.js +13 -12
  185. package/dist/esm/useSearch.js.map +1 -1
  186. package/dist/esm/utils.js +56 -35
  187. package/dist/esm/utils.js.map +1 -1
  188. package/dist/source/useBlocker.d.ts +8 -5
  189. package/dist/source/useBlocker.jsx +2 -2
  190. package/dist/source/useBlocker.jsx.map +1 -1
  191. package/package.json +3 -3
  192. package/src/useBlocker.tsx +15 -10
  193. package/dist/cjs/index.cjs.map +0 -1
  194. package/dist/cjs/index.dev.cjs.map +0 -1
  195. package/dist/cjs/ssr/client.cjs.map +0 -1
  196. package/dist/cjs/ssr/server.cjs.map +0 -1
  197. package/dist/esm/index.dev.js.map +0 -1
  198. package/dist/esm/index.js.map +0 -1
  199. package/dist/esm/ssr/client.js.map +0 -1
  200. package/dist/esm/ssr/server.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const buildLocationKey = useRouterState({\n select: (s) => {\n const leaf = s.matches[s.matches.length - 1]\n return {\n search: leaf?.search,\n hash: s.location.hash,\n path: leaf?.pathname, // path + params\n }\n },\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n buildLocationKey()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["timeoutMap","WeakMap","useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","buildLocationKey","leaf","matches","length","search","hash","path","pathname","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","has","set","setTimeout","delete","handleTouchStart","handleLeave","id","get","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
1
+ {"version":3,"file":"link.js","names":["Solid","mergeRefs","deepEqual","exactPathTest","functionalUpdate","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouterState","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","EventTarget","ReturnType","setTimeout","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","isTransitioning","setIsTransitioning","createSignal","shouldHydrateHash","ssr","hasHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","select","s","location","buildLocationKey","leaf","matches","length","search","hash","path","pathname","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","basepath","currentPathSplit","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","doPreload","preloadRoute","catch","err","preloadViewportIoCallback","entry","IntersectionObserverEntry","isIntersecting","ref","setRef","Element","rootMargin","createEffect","handleClick","e","MouseEvent","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","FocusEvent","eventTarget","has","set","delete","handleTouchStart","TouchEvent","handleLeave","id","get","clearTimeout","callHandler","Event","event","TEvent","T","handler","JSX","EventHandlerUnion","composeEventHandlers","handlers","Array","resolvedActiveProps","Omit","style","CSSProperties","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","c","role","ActiveLinkOptions","ActiveLinkOptionProps","TComp","ActiveLinkProps","Partial","LinkComponentSolidProps","key","LinkProps","LinkPropsChildren","children","state","ValidComponent","CreateLinkProps","LinkComponentProps","LinkComponent","TDefaultFrom","props","LinkComponentRoute","defaultFrom","createLink","Comp","_$createComponent","Link","_$mergeProps","_asChild","linkProps","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","LinkOptionsFnOptions","TOptions","ReadonlyArray","LinkOptionsFn","linkOptions"],"sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const buildLocationKey = useRouterState({\n select: (s) => {\n const leaf = s.matches[s.matches.length - 1]\n return {\n search: leaf?.search,\n hash: s.location.hash,\n path: leaf?.pathname, // path + params\n }\n },\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n buildLocationKey()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import * as Solid from "solid-js";
2
- const matchContext = Solid.createContext(() => void 0);
3
- const dummyMatchContext = Solid.createContext(() => void 0);
4
- export {
5
- dummyMatchContext,
6
- matchContext
7
- };
8
- //# sourceMappingURL=matchContext.js.map
2
+ //#region src/matchContext.tsx
3
+ var matchContext = Solid.createContext(() => void 0);
4
+ var dummyMatchContext = Solid.createContext(() => void 0);
5
+ //#endregion
6
+ export { dummyMatchContext, matchContext };
7
+
8
+ //# sourceMappingURL=matchContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchContext.js","sources":["../../src/matchContext.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const matchContext = Solid.createContext<\n Solid.Accessor<string | undefined>\n>(() => undefined)\n\n// N.B. this only exists so we can conditionally call useContext on it when we are not interested in the nearest match\nexport const dummyMatchContext = Solid.createContext<\n Solid.Accessor<string | undefined>\n>(() => undefined)\n"],"names":["matchContext","Solid","createContext","undefined","dummyMatchContext"],"mappings":";AAEO,MAAMA,eAAeC,MAAMC,cAEhC,MAAMC,MAAS;AAGV,MAAMC,oBAAoBH,MAAMC,cAErC,MAAMC,MAAS;"}
1
+ {"version":3,"file":"matchContext.js","names":["Solid","matchContext","createContext","Accessor","undefined","dummyMatchContext"],"sources":["../../src/matchContext.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nexport const matchContext = Solid.createContext<\n Solid.Accessor<string | undefined>\n>(() => undefined)\n\n// N.B. this only exists so we can conditionally call useContext on it when we are not interested in the nearest match\nexport const dummyMatchContext = Solid.createContext<\n Solid.Accessor<string | undefined>\n>(() => undefined)\n"],"mappings":";;AAEA,IAAaC,eAAeD,MAAME,oBAE1BE,KAAAA,EAAU;AAGlB,IAAaC,oBAAoBL,MAAME,oBAE/BE,KAAAA,EAAU"}
@@ -1,40 +1,30 @@
1
- import { createComponent, template } from "solid-js/web";
2
- import { isNotFound } from "@tanstack/router-core";
3
1
  import { CatchBoundary } from "./CatchBoundary.js";
4
2
  import { useRouterState } from "./useRouterState.js";
3
+ import { isNotFound } from "@tanstack/router-core";
4
+ import { createComponent, template } from "solid-js/web";
5
+ //#region src/not-found.tsx
5
6
  var _tmpl$ = /* @__PURE__ */ template(`<p>Not Found`);
6
7
  function CatchNotFound(props) {
7
- const resetKey = useRouterState({
8
- select: (s) => `not-found-${s.location.pathname}-${s.status}`
9
- });
10
- return createComponent(CatchBoundary, {
11
- getResetKey: () => resetKey(),
12
- onCatch: (error) => {
13
- if (isNotFound(error)) {
14
- props.onCatch?.(error);
15
- } else {
16
- throw error;
17
- }
18
- },
19
- errorComponent: ({
20
- error
21
- }) => {
22
- if (isNotFound(error)) {
23
- return props.fallback?.(error);
24
- } else {
25
- throw error;
26
- }
27
- },
28
- get children() {
29
- return props.children;
30
- }
31
- });
8
+ const resetKey = useRouterState({ select: (s) => `not-found-${s.location.pathname}-${s.status}` });
9
+ return createComponent(CatchBoundary, {
10
+ getResetKey: () => resetKey(),
11
+ onCatch: (error) => {
12
+ if (isNotFound(error)) props.onCatch?.(error);
13
+ else throw error;
14
+ },
15
+ errorComponent: ({ error }) => {
16
+ if (isNotFound(error)) return props.fallback?.(error);
17
+ else throw error;
18
+ },
19
+ get children() {
20
+ return props.children;
21
+ }
22
+ });
32
23
  }
33
24
  function DefaultGlobalNotFound() {
34
- return _tmpl$();
25
+ return _tmpl$();
35
26
  }
36
- export {
37
- CatchNotFound,
38
- DefaultGlobalNotFound
39
- };
40
- //# sourceMappingURL=not-found.js.map
27
+ //#endregion
28
+ export { CatchNotFound, DefaultGlobalNotFound };
29
+
30
+ //# sourceMappingURL=not-found.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"not-found.js","sources":["../../src/not-found.tsx"],"sourcesContent":["import { isNotFound } from '@tanstack/router-core'\nimport { CatchBoundary } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport type * as Solid from 'solid-js'\nimport type { NotFoundError } from '@tanstack/router-core'\n\nexport function CatchNotFound(props: {\n fallback?: (error: NotFoundError) => Solid.JSX.Element\n onCatch?: (error: Error) => void\n children: Solid.JSX.Element\n}) {\n // TODO: Some way for the user to programmatically reset the not-found boundary?\n const resetKey = useRouterState({\n select: (s) => `not-found-${s.location.pathname}-${s.status}`,\n })\n\n return (\n <CatchBoundary\n getResetKey={() => resetKey()}\n onCatch={(error) => {\n if (isNotFound(error)) {\n props.onCatch?.(error)\n } else {\n throw error\n }\n }}\n errorComponent={({ error }) => {\n if (isNotFound(error)) {\n return props.fallback?.(error)\n } else {\n throw error\n }\n }}\n >\n {props.children}\n </CatchBoundary>\n )\n}\n\nexport function DefaultGlobalNotFound() {\n return <p>Not Found</p>\n}\n"],"names":["CatchNotFound","props","resetKey","useRouterState","select","s","location","pathname","status","_$createComponent","CatchBoundary","getResetKey","onCatch","error","isNotFound","errorComponent","fallback","children","DefaultGlobalNotFound","_tmpl$"],"mappings":";;;;;AAMO,SAASA,cAAcC,OAI3B;AAED,QAAMC,WAAWC,eAAe;AAAA,IAC9BC,QAASC,OAAM,aAAaA,EAAEC,SAASC,QAAQ,IAAIF,EAAEG,MAAM;AAAA,EAAA,CAC5D;AAED,SAAAC,gBACGC,eAAa;AAAA,IACZC,aAAaA,MAAMT,SAAAA;AAAAA,IACnBU,SAAUC,CAAAA,UAAU;AAClB,UAAIC,WAAWD,KAAK,GAAG;AACrBZ,cAAMW,UAAUC,KAAK;AAAA,MACvB,OAAO;AACL,cAAMA;AAAAA,MACR;AAAA,IACF;AAAA,IACAE,gBAAgBA,CAAC;AAAA,MAAEF;AAAAA,IAAAA,MAAY;AAC7B,UAAIC,WAAWD,KAAK,GAAG;AACrB,eAAOZ,MAAMe,WAAWH,KAAK;AAAA,MAC/B,OAAO;AACL,cAAMA;AAAAA,MACR;AAAA,IACF;AAAA,IAAC,IAAAI,WAAA;AAAA,aAEAhB,MAAMgB;AAAAA,IAAQ;AAAA,EAAA,CAAA;AAGrB;AAEO,SAASC,wBAAwB;AACtC,SAAAC,OAAAA;AACF;"}
1
+ {"version":3,"file":"not-found.js","names":["isNotFound","CatchBoundary","useRouterState","Solid","NotFoundError","CatchNotFound","props","fallback","error","JSX","Element","onCatch","Error","children","resetKey","select","s","location","pathname","status","_$createComponent","getResetKey","errorComponent","DefaultGlobalNotFound","_tmpl$"],"sources":["../../src/not-found.tsx"],"sourcesContent":["import { isNotFound } from '@tanstack/router-core'\nimport { CatchBoundary } from './CatchBoundary'\nimport { useRouterState } from './useRouterState'\nimport type * as Solid from 'solid-js'\nimport type { NotFoundError } from '@tanstack/router-core'\n\nexport function CatchNotFound(props: {\n fallback?: (error: NotFoundError) => Solid.JSX.Element\n onCatch?: (error: Error) => void\n children: Solid.JSX.Element\n}) {\n // TODO: Some way for the user to programmatically reset the not-found boundary?\n const resetKey = useRouterState({\n select: (s) => `not-found-${s.location.pathname}-${s.status}`,\n })\n\n return (\n <CatchBoundary\n getResetKey={() => resetKey()}\n onCatch={(error) => {\n if (isNotFound(error)) {\n props.onCatch?.(error)\n } else {\n throw error\n }\n }}\n errorComponent={({ error }) => {\n if (isNotFound(error)) {\n return props.fallback?.(error)\n } else {\n throw error\n }\n }}\n >\n {props.children}\n </CatchBoundary>\n )\n}\n\nexport function DefaultGlobalNotFound() {\n return <p>Not Found</p>\n}\n"],"mappings":";;;;;;AAMA,SAAgBK,cAAcC,OAI3B;CAED,MAAMQ,WAAWZ,eAAe,EAC9Ba,SAASC,MAAM,aAAaA,EAAEC,SAASC,SAAQ,GAAIF,EAAEG,UACtD,CAAC;AAEF,QAAAC,gBACGnB,eAAa;EACZoB,mBAAmBP,UAAU;EAC7BH,UAAUH,UAAU;AAClB,OAAIR,WAAWQ,MAAM,CACnBF,OAAMK,UAAUH,MAAM;OAEtB,OAAMA;;EAGVc,iBAAiB,EAAEd,YAAY;AAC7B,OAAIR,WAAWQ,MAAM,CACnB,QAAOF,MAAMC,WAAWC,MAAM;OAE9B,OAAMA;;EAET,IAAAK,WAAA;AAAA,UAEAP,MAAMO;;EAAQ,CAAA;;AAKrB,SAAgBU,wBAAwB;AACtC,QAAAC,QAAA"}
@@ -1,19 +1,24 @@
1
+ import { DefaultGlobalNotFound } from "./not-found.js";
1
2
  import { createComponent } from "solid-js/web";
2
3
  import warning from "tiny-warning";
3
- import { DefaultGlobalNotFound } from "./not-found.js";
4
+ //#region src/renderRouteNotFound.tsx
5
+ /**
6
+ * Renders a not found component for a route when no matching route is found.
7
+ *
8
+ * @param router - The router instance containing the route configuration
9
+ * @param route - The route that triggered the not found state
10
+ * @param data - Additional data to pass to the not found component
11
+ * @returns The rendered not found component or a default fallback component
12
+ */
4
13
  function renderRouteNotFound(router, route, data) {
5
- if (!route.options.notFoundComponent) {
6
- if (router.options.defaultNotFoundComponent) {
7
- return createComponent(router.options.defaultNotFoundComponent, data);
8
- }
9
- if (process.env.NODE_ENV === "development") {
10
- warning(route.options.notFoundComponent, `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 (<p>Not Found</p>)`);
11
- }
12
- return createComponent(DefaultGlobalNotFound, {});
13
- }
14
- return createComponent(route.options.notFoundComponent, data);
14
+ if (!route.options.notFoundComponent) {
15
+ if (router.options.defaultNotFoundComponent) return createComponent(router.options.defaultNotFoundComponent, data);
16
+ if (process.env.NODE_ENV === "development") warning(route.options.notFoundComponent, `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 (<p>Not Found</p>)`);
17
+ return createComponent(DefaultGlobalNotFound, {});
18
+ }
19
+ return createComponent(route.options.notFoundComponent, data);
15
20
  }
16
- export {
17
- renderRouteNotFound
18
- };
19
- //# sourceMappingURL=renderRouteNotFound.js.map
21
+ //#endregion
22
+ export { renderRouteNotFound };
23
+
24
+ //# sourceMappingURL=renderRouteNotFound.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderRouteNotFound.js","sources":["../../src/renderRouteNotFound.tsx"],"sourcesContent":["import warning from 'tiny-warning'\nimport { DefaultGlobalNotFound } from './not-found'\nimport type { AnyRoute, AnyRouter } from '@tanstack/router-core'\n\n/**\n * Renders a not found component for a route when no matching route is found.\n *\n * @param router - The router instance containing the route configuration\n * @param route - The route that triggered the not found state\n * @param data - Additional data to pass to the not found component\n * @returns The rendered not found component or a default fallback component\n */\nexport function renderRouteNotFound(\n router: AnyRouter,\n route: AnyRoute,\n data: any,\n) {\n if (!route.options.notFoundComponent) {\n if (router.options.defaultNotFoundComponent) {\n return <router.options.defaultNotFoundComponent {...data} />\n }\n\n if (process.env.NODE_ENV === 'development') {\n warning(\n route.options.notFoundComponent,\n `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 (<p>Not Found</p>)`,\n )\n }\n\n return <DefaultGlobalNotFound />\n }\n\n return <route.options.notFoundComponent {...data} />\n}\n"],"names":["renderRouteNotFound","router","route","data","options","notFoundComponent","defaultNotFoundComponent","_$createComponent","process","env","NODE_ENV","warning","id","DefaultGlobalNotFound"],"mappings":";;;AAYO,SAASA,oBACdC,QACAC,OACAC,MACA;AACA,MAAI,CAACD,MAAME,QAAQC,mBAAmB;AACpC,QAAIJ,OAAOG,QAAQE,0BAA0B;AAC3C,aAAAC,gBAAQN,OAAOG,QAAQE,0BAA6BH,IAAI;AAAA,IAC1D;AAEA,QAAIK,QAAQC,IAAIC,aAAa,eAAe;AAC1CC,cACET,MAAME,QAAQC,mBACd,yDAAyDH,MAAMU,EAAE,oPACnE;AAAA,IACF;AAEA,WAAAL,gBAAQM,uBAAqB,EAAA;AAAA,EAC/B;AAEA,SAAAN,gBAAQL,MAAME,QAAQC,mBAAsBF,IAAI;AAClD;"}
1
+ {"version":3,"file":"renderRouteNotFound.js","names":["warning","DefaultGlobalNotFound","AnyRoute","AnyRouter","renderRouteNotFound","router","route","data","options","notFoundComponent","defaultNotFoundComponent","_$createComponent","process","env","NODE_ENV","id"],"sources":["../../src/renderRouteNotFound.tsx"],"sourcesContent":["import warning from 'tiny-warning'\nimport { DefaultGlobalNotFound } from './not-found'\nimport type { AnyRoute, AnyRouter } from '@tanstack/router-core'\n\n/**\n * Renders a not found component for a route when no matching route is found.\n *\n * @param router - The router instance containing the route configuration\n * @param route - The route that triggered the not found state\n * @param data - Additional data to pass to the not found component\n * @returns The rendered not found component or a default fallback component\n */\nexport function renderRouteNotFound(\n router: AnyRouter,\n route: AnyRoute,\n data: any,\n) {\n if (!route.options.notFoundComponent) {\n if (router.options.defaultNotFoundComponent) {\n return <router.options.defaultNotFoundComponent {...data} />\n }\n\n if (process.env.NODE_ENV === 'development') {\n warning(\n route.options.notFoundComponent,\n `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 (<p>Not Found</p>)`,\n )\n }\n\n return <DefaultGlobalNotFound />\n }\n\n return <route.options.notFoundComponent {...data} />\n}\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgBI,oBACdC,QACAC,OACAC,MACA;AACA,KAAI,CAACD,MAAME,QAAQC,mBAAmB;AACpC,MAAIJ,OAAOG,QAAQE,yBACjB,QAAAC,gBAAQN,OAAOG,QAAQE,0BAA6BH,KAAI;AAG1D,MAAA,QAAA,IAAA,aAA6B,cAC3BP,SACEM,MAAME,QAAQC,mBACd,yDAAyDH,MAAMS,GAAE,oPAClE;AAGH,SAAAJ,gBAAQV,uBAAqB,EAAA,CAAA;;AAG/B,QAAAU,gBAAQL,MAAME,QAAQC,mBAAsBF,KAAI"}