{"version":3,"file":"Matches.cjs","names":["Solid","replaceEqualDeep","rootRouteId","isServer","CatchBoundary","ErrorComponent","useRouter","Rendered","Transitioner","nearestMatchContext","SafeFragment","Match","renderInNonRouteComponentContext","AnyRoute","AnyRouter","DeepPartial","Expand","MakeOptionalPathParams","MakeOptionalSearchParams","MakeRouteMatchUnion","MaskOptions","MatchRouteOptions","RegisteredRouter","ResolveRoute","ToSubOptionsProps","RouteMatchExtensions","meta","Array","JSX","IntrinsicElements","links","scripts","styles","headScripts","Matches","router","ResolvedSuspense","document","ssr","Suspense","rootRoute","routesById","PendingComponent","options","pendingComponent","defaultPendingComponent","OptionalWrapper","InnerWrap","_$createComponent","children","fallback","process","env","NODE_ENV","MatchesInner","routeId","stores","ids","get","match","byRoute","undefined","nearestMatch","const","matchComponent","Show","when","Provider","value","_$memo","disableGlobalCatchBoundary","getResetKey","errorComponent","onCatch","error","console","warn","message","toString","UseMatchRouteOptions","TFrom","TRouter","TTo","TMaskFrom","TMaskTo","useMatchRoute","opts","Accessor","createMemo","pending","caseSensitive","fuzzy","includeSearch","rest","location","resolvedLocation","status","matchRoute","MakeMatchRouteOptions","params","Element","MatchRoute","props","renderedChild","matchedParams","child","UseMatchesBaseOptions","select","matches","TSelected","UseMatchesResult","useMatches","prev","res","useParentMatches","contextRouteId","useContext","slice","findIndex","d","useChildMatches"],"sources":["../../src/Matches.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { replaceEqualDeep, rootRouteId } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { CatchBoundary, ErrorComponent } from './CatchBoundary'\nimport { useRouter } from './useRouter'\nimport { Rendered, Transitioner } from './Transitioner'\nimport { nearestMatchContext } from './matchContext'\nimport { SafeFragment } from './SafeFragment'\nimport { Match } from './Match'\nimport { renderInNonRouteComponentContext } from './nonRouteComponentContext'\nimport type {\n  AnyRoute,\n  AnyRouter,\n  DeepPartial,\n  Expand,\n  MakeOptionalPathParams,\n  MakeOptionalSearchParams,\n  MakeRouteMatchUnion,\n  MaskOptions,\n  MatchRouteOptions,\n  RegisteredRouter,\n  ResolveRoute,\n  ToSubOptionsProps,\n} from '@tanstack/router-core'\n\ndeclare module '@tanstack/router-core' {\n  export interface RouteMatchExtensions {\n    meta?: Array<Solid.JSX.IntrinsicElements['meta'] | undefined>\n    links?: Array<Solid.JSX.IntrinsicElements['link'] | undefined>\n    scripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n    styles?: Array<Solid.JSX.IntrinsicElements['style'] | undefined>\n    headScripts?: Array<Solid.JSX.IntrinsicElements['script'] | undefined>\n  }\n}\n\nexport function Matches() {\n  const router = useRouter()\n\n  const ResolvedSuspense =\n    (isServer ?? router.isServer) ||\n    (typeof document !== 'undefined' && router.ssr)\n      ? SafeFragment\n      : Solid.Suspense\n\n  const rootRoute: () => AnyRoute = () => router.routesById[rootRouteId]\n  const PendingComponent =\n    rootRoute().options.pendingComponent ??\n    router.options.defaultPendingComponent\n\n  const OptionalWrapper = router.options.InnerWrap || SafeFragment\n\n  return (\n    <OptionalWrapper>\n      <ResolvedSuspense\n        fallback={\n          PendingComponent\n            ? (() => {\n                if (process.env.NODE_ENV !== 'production') {\n                  return renderInNonRouteComponentContext(\n                    () => <PendingComponent />,\n                    'pendingComponent',\n                  )\n                }\n                return <PendingComponent />\n              })()\n            : null\n        }\n      >\n        <Transitioner />\n        <MatchesInner />\n        <Rendered />\n      </ResolvedSuspense>\n    </OptionalWrapper>\n  )\n}\n\nfunction MatchesInner() {\n  const router = useRouter()\n  const routeId = () => router.stores.ids.get()[0]\n  const match = () =>\n    routeId() ? router.stores.byRoute.get(routeId()!)?.get() : undefined\n  const nearestMatch = [routeId, match] as const\n\n  const matchComponent = () => {\n    return (\n      <Solid.Show when={routeId()}>\n        <Match routeId={routeId()!} />\n      </Solid.Show>\n    )\n  }\n\n  return (\n    <nearestMatchContext.Provider value={nearestMatch}>\n      {router.options.disableGlobalCatchBoundary ? (\n        matchComponent()\n      ) : (\n        <CatchBoundary\n          getResetKey={match}\n          errorComponent={ErrorComponent}\n          onCatch={\n            process.env.NODE_ENV !== 'production'\n              ? (error) => {\n                  console.warn(\n                    `Warning: The following error wasn't caught by any route! At the very least, consider setting an 'errorComponent' in your RootRoute!`,\n                  )\n                  console.warn(`Warning: ${error.message || error.toString()}`)\n                }\n              : undefined\n          }\n        >\n          {matchComponent()}\n        </CatchBoundary>\n      )}\n    </nearestMatchContext.Provider>\n  )\n}\n\nexport type UseMatchRouteOptions<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends string = string,\n  TTo extends string | undefined = undefined,\n  TMaskFrom extends string = TFrom,\n  TMaskTo extends string = '',\n> = ToSubOptionsProps<TRouter, TFrom, TTo> &\n  DeepPartial<MakeOptionalSearchParams<TRouter, TFrom, TTo>> &\n  DeepPartial<MakeOptionalPathParams<TRouter, TFrom, TTo>> &\n  MaskOptions<TRouter, TMaskFrom, TMaskTo> &\n  MatchRouteOptions\n\nexport function useMatchRoute<TRouter extends AnyRouter = RegisteredRouter>() {\n  const router = useRouter()\n\n  return <\n    const TFrom extends string = string,\n    const TTo extends string | undefined = undefined,\n    const TMaskFrom extends string = TFrom,\n    const TMaskTo extends string = '',\n  >(\n    opts: UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n  ): Solid.Accessor<\n    false | Expand<ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']>\n  > => {\n    return Solid.createMemo(() => {\n      const { pending, caseSensitive, fuzzy, includeSearch, ...rest } = opts\n\n      router.stores.location.get()\n      router.stores.resolvedLocation.get()\n      router.stores.status.get()\n      return router.matchRoute(rest as any, {\n        pending,\n        caseSensitive,\n        fuzzy,\n        includeSearch,\n      })\n    })\n  }\n}\n\nexport type MakeMatchRouteOptions<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends string = string,\n  TTo extends string | undefined = undefined,\n  TMaskFrom extends string = TFrom,\n  TMaskTo extends string = '',\n> = UseMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & {\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    | ((\n        params?: Expand<\n          ResolveRoute<TRouter, TFrom, TTo>['types']['allParams']\n        >,\n      ) => Solid.JSX.Element)\n    | Solid.JSX.Element\n}\n\nexport function MatchRoute<\n  TRouter extends AnyRouter = RegisteredRouter,\n  const TFrom extends string = string,\n  const TTo extends string | undefined = undefined,\n  const TMaskFrom extends string = TFrom,\n  const TMaskTo extends string = '',\n>(props: MakeMatchRouteOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): any {\n  const matchRoute = useMatchRoute()\n  const params = matchRoute(props as any)\n\n  const renderedChild = Solid.createMemo(() => {\n    const matchedParams = params()\n    const child = props.children\n\n    if (typeof child === 'function') {\n      return (child as any)(matchedParams)\n    }\n\n    return matchedParams ? child : null\n  })\n\n  return <>{renderedChild()}</>\n}\n\nexport interface UseMatchesBaseOptions<TRouter extends AnyRouter, TSelected> {\n  select?: (matches: Array<MakeRouteMatchUnion<TRouter>>) => TSelected\n}\n\nexport type UseMatchesResult<\n  TRouter extends AnyRouter,\n  TSelected,\n> = unknown extends TSelected ? Array<MakeRouteMatchUnion<TRouter>> : TSelected\n\nexport function useMatches<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TSelected = unknown,\n>(\n  opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n  const router = useRouter<TRouter>()\n  return Solid.createMemo((prev: TSelected | undefined) => {\n    const matches = router.stores.matches.get() as Array<\n      MakeRouteMatchUnion<TRouter>\n    >\n    const res = opts?.select ? opts.select(matches) : matches\n    if (prev === undefined) return res\n    return replaceEqualDeep(prev, res) as any\n  }) as Solid.Accessor<UseMatchesResult<TRouter, TSelected>>\n}\n\nexport function useParentMatches<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TSelected = unknown,\n>(\n  opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n  const contextRouteId = Solid.useContext(nearestMatchContext)[0 /* route id */]\n\n  return useMatches({\n    select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n      matches = matches.slice(\n        0,\n        matches.findIndex((d) => d.routeId === contextRouteId()),\n      )\n      return opts?.select ? opts.select(matches) : matches\n    },\n  } as any)\n}\n\nexport function useChildMatches<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TSelected = unknown,\n>(\n  opts?: UseMatchesBaseOptions<TRouter, TSelected>,\n): Solid.Accessor<UseMatchesResult<TRouter, TSelected>> {\n  const contextRouteId = Solid.useContext(nearestMatchContext)[0 /* route id */]\n\n  return useMatches({\n    select: (matches: Array<MakeRouteMatchUnion<TRouter>>) => {\n      matches = matches.slice(\n        matches.findIndex((d) => d.routeId === contextRouteId()) + 1,\n      )\n      return opts?.select ? opts.select(matches) : matches\n    },\n  } as any)\n}\n"],"mappings":"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"}