Sign In

@tanstack/solid-router

Package Overview
Dependencies
Maintainers
3
Versions
480
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tanstack/solid-router - npm Package Compare versions

Comparing version
1.170.27
to
1.170.28
+1
-4
dist/cjs/link.cjs

@@ -131,6 +131,3 @@ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");

});
const doPreload = () => router.preloadRoute({
...options,
_builtLocation: next()
}).catch((err) => {
const doPreload = () => router.preloadRoute(options, next()).catch((err) => {
console.warn(err);

@@ -137,0 +134,0 @@ console.warn(_tanstack_router_core.preloadWarning);

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"link.cjs","names":["Solid","mergeRefs","deepEqual","exactPathTest","functionalUpdate","hasKeys","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","ReturnType","setTimeout","cancelPreload","eventTarget","clearTimeout","get","delete","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","shouldHydrateHash","ssr","hasHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","STATIC_ACTIVE_PROPS_GET","inactiveProps","STATIC_INACTIVE_PROPS_GET","_","propsSafeToSpread","currentLocation","createMemo","stores","location","undefined","equals","prev","next","href","_fromLocation","nextOptions","untrack","buildLocation","hrefOption","disabled","maskedLocation","publicHref","external","history","createHref","externalLink","_href","protocolAllowlist","process","env","NODE_ENV","console","warn","to","safeInternal","isSafeInternal","indexOf","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","current","nextLocation","exact","testExact","pathname","basepath","currentPath","nextPath","pathIsFuzzyEqual","startsWith","length","includeSearch","searchTest","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","_builtLocation","catch","err","ref","setRef","createSignal","Element","enqueuePreload","e","MouseEvent","FocusEvent","IntersectionObserverEntry","isIntersecting","has","set","createEffect","handleClick","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","target","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleTouchStart","handleLeave","simpleStyling","class","style","onClick","createComposedHandler","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","ResolvedLinkStateProps","Omit","JSX","CSSProperties","resolvedProps","active","base","STATIC_DISABLED_PROPS","STATIC_DEFAULT_ACTIVE_ATTRIBUTES","EMPTY_OBJECT","className","filter","Boolean","join","STATIC_ACTIVE_ATTRIBUTES","STATIC_ACTIVE_PROPS","role","callHandler","Event","event","TEvent","T","handler","EventHandlerUnion","getHandler","fallback","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","_el$3","_tmpl$2","component","zero","charCodeAt","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 hasKeys,\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 { 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<object, ReturnType<typeof setTimeout>>()\nconst cancelPreload = (eventTarget: object) => {\n clearTimeout(timeoutMap.get(eventTarget))\n timeoutMap.delete(eventTarget)\n}\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 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: STATIC_ACTIVE_PROPS_GET,\n inactiveProps: STATIC_INACTIVE_PROPS_GET,\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'preloadIntentProximity',\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 'from',\n ])\n\n const currentLocation = Solid.createMemo(\n () => router.stores.location.get(),\n undefined,\n { equals: (prev, next) => prev.href === next.href },\n )\n\n const next = Solid.createMemo(() => {\n // Rebuild when inherited search/hash or the current route context changes.\n const _fromLocation = currentLocation()\n const nextOptions = { _fromLocation, ...options } as any\n // untrack because router-core will also access stores, which are signals in solid\n return Solid.untrack(() => router.buildLocation(nextOptions))\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 safeInternal = isSafeInternal(to)\n if (safeInternal) return undefined\n if (typeof to !== 'string' || to.indexOf(':') === -1) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to, 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() || local.disabled) {\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 const activeOptions = local.activeOptions\n const current = currentLocation()\n const nextLocation = next()\n\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n current.pathname,\n nextLocation.pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPath = removeTrailingSlash(current.pathname, router.basepath)\n const nextPath = removeTrailingSlash(\n nextLocation.pathname,\n router.basepath,\n )\n\n const pathIsFuzzyEqual =\n currentPath.startsWith(nextPath) &&\n (currentPath.length === nextPath.length ||\n currentPath[nextPath.length] === '/')\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(current.search, nextLocation.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : current.hash\n return currentHash === nextLocation.hash\n }\n return true\n })\n\n const doPreload = () =>\n router\n .preloadRoute({ ...options, _builtLocation: next() } as any)\n .catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n const enqueuePreload = (\n e?: MouseEvent | FocusEvent | IntersectionObserverEntry,\n ) => {\n if (!e) {\n cancelPreload(ref)\n return\n }\n\n if (\n !(\n (e as IntersectionObserverEntry).isIntersecting ??\n preload() === 'intent'\n )\n ) {\n if ((e as IntersectionObserverEntry).isIntersecting === false) {\n cancelPreload(ref)\n }\n return\n }\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n if (!timeoutMap.has(ref)) {\n timeoutMap.set(\n ref,\n setTimeout(() => {\n timeoutMap.delete(ref)\n doPreload()\n }, preloadDelay()),\n )\n }\n }\n\n useIntersectionObserver(ref, enqueuePreload, () => preload() !== 'viewport')\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (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 !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\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 handleTouchStart = () => {\n if (preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = () => {\n if (preload() === 'intent') {\n cancelPreload(ref)\n }\n }\n\n const simpleStyling = Solid.createMemo(\n () =>\n local.activeProps === STATIC_ACTIVE_PROPS_GET &&\n local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&\n local.class === undefined &&\n local.style === undefined,\n )\n\n const onClick = createComposedHandler(() => local.onClick, handleClick)\n const onBlur = createComposedHandler(() => local.onBlur, handleLeave)\n const onFocus = createComposedHandler(() => local.onFocus, enqueuePreload)\n const onMouseEnter = createComposedHandler(\n () => local.onMouseEnter,\n enqueuePreload,\n )\n const onMouseOver = createComposedHandler(\n () => local.onMouseOver,\n enqueuePreload,\n )\n const onMouseLeave = createComposedHandler(\n () => local.onMouseLeave,\n handleLeave,\n )\n const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave)\n const onTouchStart = createComposedHandler(\n () => local.onTouchStart,\n handleTouchStart,\n )\n\n type ResolvedLinkStateProps = Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n }\n\n const resolvedProps = Solid.createMemo(() => {\n const active = isActive()\n\n const base = {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, options.ref),\n onClick,\n onBlur,\n onFocus,\n onMouseEnter,\n onMouseOver,\n onMouseLeave,\n onMouseOut,\n onTouchStart,\n disabled: !!local.disabled,\n target: local.target,\n ...(local.disabled && STATIC_DISABLED_PROPS),\n }\n\n if (simpleStyling()) {\n return {\n ...base,\n ...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),\n }\n }\n\n const activeProps: ResolvedLinkStateProps = active\n ? (functionalUpdate(local.activeProps as any, {}) ?? EMPTY_OBJECT)\n : EMPTY_OBJECT\n const inactiveProps: ResolvedLinkStateProps = active\n ? EMPTY_OBJECT\n : functionalUpdate(local.inactiveProps, {})\n const style = {\n ...local.style,\n ...activeProps.style,\n ...inactiveProps.style,\n }\n const className = [local.class, activeProps.class, inactiveProps.class]\n .filter(Boolean)\n .join(' ')\n\n return {\n ...activeProps,\n ...inactiveProps,\n ...base,\n ...(hasKeys(style) ? { style } : undefined),\n ...(className ? { class: className } : undefined),\n ...(active && STATIC_ACTIVE_ATTRIBUTES),\n } as ResolvedLinkStateProps\n })\n\n return Solid.mergeProps(propsSafeToSpread, resolvedProps) as any\n}\n\nconst STATIC_ACTIVE_PROPS = { class: 'active' }\nconst STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS\nconst EMPTY_OBJECT = {}\nconst STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT\nconst STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {\n class: 'active',\n 'data-status': 'active',\n 'aria-current': 'page',\n}\nconst STATIC_DISABLED_PROPS = {\n role: 'link',\n 'aria-disabled': true,\n}\nconst STATIC_ACTIVE_ATTRIBUTES = {\n 'data-status': 'active',\n 'aria-current': 'page',\n}\n\n/** Call a JSX.EventHandlerUnion with the event. */\nfunction callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent>,\n) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n return event.defaultPrevented\n}\n\nfunction createComposedHandler<T, TEvent extends Event>(\n getHandler: () => Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n fallback: (event: TEvent) => void,\n) {\n return (event: TEvent & { currentTarget: T; target: Element }) => {\n const handler = getHandler()\n if (!handler || !callHandler(event, handler)) fallback(event)\n }\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: { isActive: boolean }) => 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 })\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 if (!local._asChild) {\n return <a {...linkProps}>{children()}</a>\n }\n\n return (\n <Dynamic component={local._asChild as Solid.ValidComponent} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isSafeInternal(to: unknown) {\n if (typeof to !== 'string') return false\n const zero = to.charCodeAt(0)\n if (zero === 47) return to.charCodeAt(1) !== 47 // '/' but not '//'\n return zero === 46 // '.', '..', './', '../'\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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"}
{"version":3,"file":"link.cjs","names":["Solid","mergeRefs","deepEqual","exactPathTest","functionalUpdate","hasKeys","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","ReturnType","setTimeout","cancelPreload","eventTarget","clearTimeout","get","delete","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","shouldHydrateHash","ssr","hasHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","STATIC_ACTIVE_PROPS_GET","inactiveProps","STATIC_INACTIVE_PROPS_GET","_","propsSafeToSpread","currentLocation","createMemo","stores","location","undefined","equals","prev","next","href","_fromLocation","nextOptions","untrack","buildLocation","hrefOption","disabled","maskedLocation","publicHref","external","history","createHref","externalLink","_href","protocolAllowlist","process","env","NODE_ENV","console","warn","to","safeInternal","isSafeInternal","indexOf","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","current","nextLocation","exact","testExact","pathname","basepath","currentPath","nextPath","pathIsFuzzyEqual","startsWith","length","includeSearch","searchTest","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","opts","builtLocation","catch","err","ref","setRef","createSignal","Element","enqueuePreload","e","MouseEvent","FocusEvent","IntersectionObserverEntry","isIntersecting","has","set","createEffect","handleClick","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","target","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleTouchStart","handleLeave","simpleStyling","class","style","onClick","createComposedHandler","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","ResolvedLinkStateProps","Omit","JSX","CSSProperties","resolvedProps","active","base","STATIC_DISABLED_PROPS","STATIC_DEFAULT_ACTIVE_ATTRIBUTES","EMPTY_OBJECT","className","filter","Boolean","join","STATIC_ACTIVE_ATTRIBUTES","STATIC_ACTIVE_PROPS","role","callHandler","Event","event","TEvent","T","handler","EventHandlerUnion","getHandler","fallback","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","_el$3","_tmpl$2","component","zero","charCodeAt","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 hasKeys,\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 { 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<object, ReturnType<typeof setTimeout>>()\nconst cancelPreload = (eventTarget: object) => {\n clearTimeout(timeoutMap.get(eventTarget))\n timeoutMap.delete(eventTarget)\n}\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 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: STATIC_ACTIVE_PROPS_GET,\n inactiveProps: STATIC_INACTIVE_PROPS_GET,\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'preloadIntentProximity',\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 'from',\n ])\n\n const currentLocation = Solid.createMemo(\n () => router.stores.location.get(),\n undefined,\n { equals: (prev, next) => prev.href === next.href },\n )\n\n const next = Solid.createMemo(() => {\n // Rebuild when inherited search/hash or the current route context changes.\n const _fromLocation = currentLocation()\n const nextOptions = { _fromLocation, ...options } as any\n // untrack because router-core will also access stores, which are signals in solid\n return Solid.untrack(() => router.buildLocation(nextOptions))\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 safeInternal = isSafeInternal(to)\n if (safeInternal) return undefined\n if (typeof to !== 'string' || to.indexOf(':') === -1) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to, 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() || local.disabled) {\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 const activeOptions = local.activeOptions\n const current = currentLocation()\n const nextLocation = next()\n\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n current.pathname,\n nextLocation.pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPath = removeTrailingSlash(current.pathname, router.basepath)\n const nextPath = removeTrailingSlash(\n nextLocation.pathname,\n router.basepath,\n )\n\n const pathIsFuzzyEqual =\n currentPath.startsWith(nextPath) &&\n (currentPath.length === nextPath.length ||\n currentPath[nextPath.length] === '/')\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(current.search, nextLocation.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : current.hash\n return currentHash === nextLocation.hash\n }\n return true\n })\n\n const doPreload = () =>\n (\n router.preloadRoute as (\n opts: typeof options,\n builtLocation: ReturnType<typeof router.buildLocation>,\n ) => ReturnType<typeof router.preloadRoute>\n )(options, next()).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n const enqueuePreload = (\n e?: MouseEvent | FocusEvent | IntersectionObserverEntry,\n ) => {\n if (!e) {\n cancelPreload(ref)\n return\n }\n\n if (\n !(\n (e as IntersectionObserverEntry).isIntersecting ??\n preload() === 'intent'\n )\n ) {\n if ((e as IntersectionObserverEntry).isIntersecting === false) {\n cancelPreload(ref)\n }\n return\n }\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n if (!timeoutMap.has(ref)) {\n timeoutMap.set(\n ref,\n setTimeout(() => {\n timeoutMap.delete(ref)\n doPreload()\n }, preloadDelay()),\n )\n }\n }\n\n useIntersectionObserver(ref, enqueuePreload, () => preload() !== 'viewport')\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (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 !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\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 handleTouchStart = () => {\n if (preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = () => {\n if (preload() === 'intent') {\n cancelPreload(ref)\n }\n }\n\n const simpleStyling = Solid.createMemo(\n () =>\n local.activeProps === STATIC_ACTIVE_PROPS_GET &&\n local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&\n local.class === undefined &&\n local.style === undefined,\n )\n\n const onClick = createComposedHandler(() => local.onClick, handleClick)\n const onBlur = createComposedHandler(() => local.onBlur, handleLeave)\n const onFocus = createComposedHandler(() => local.onFocus, enqueuePreload)\n const onMouseEnter = createComposedHandler(\n () => local.onMouseEnter,\n enqueuePreload,\n )\n const onMouseOver = createComposedHandler(\n () => local.onMouseOver,\n enqueuePreload,\n )\n const onMouseLeave = createComposedHandler(\n () => local.onMouseLeave,\n handleLeave,\n )\n const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave)\n const onTouchStart = createComposedHandler(\n () => local.onTouchStart,\n handleTouchStart,\n )\n\n type ResolvedLinkStateProps = Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n }\n\n const resolvedProps = Solid.createMemo(() => {\n const active = isActive()\n\n const base = {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, options.ref),\n onClick,\n onBlur,\n onFocus,\n onMouseEnter,\n onMouseOver,\n onMouseLeave,\n onMouseOut,\n onTouchStart,\n disabled: !!local.disabled,\n target: local.target,\n ...(local.disabled && STATIC_DISABLED_PROPS),\n }\n\n if (simpleStyling()) {\n return {\n ...base,\n ...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),\n }\n }\n\n const activeProps: ResolvedLinkStateProps = active\n ? (functionalUpdate(local.activeProps as any, {}) ?? EMPTY_OBJECT)\n : EMPTY_OBJECT\n const inactiveProps: ResolvedLinkStateProps = active\n ? EMPTY_OBJECT\n : functionalUpdate(local.inactiveProps, {})\n const style = {\n ...local.style,\n ...activeProps.style,\n ...inactiveProps.style,\n }\n const className = [local.class, activeProps.class, inactiveProps.class]\n .filter(Boolean)\n .join(' ')\n\n return {\n ...activeProps,\n ...inactiveProps,\n ...base,\n ...(hasKeys(style) ? { style } : undefined),\n ...(className ? { class: className } : undefined),\n ...(active && STATIC_ACTIVE_ATTRIBUTES),\n } as ResolvedLinkStateProps\n })\n\n return Solid.mergeProps(propsSafeToSpread, resolvedProps) as any\n}\n\nconst STATIC_ACTIVE_PROPS = { class: 'active' }\nconst STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS\nconst EMPTY_OBJECT = {}\nconst STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT\nconst STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {\n class: 'active',\n 'data-status': 'active',\n 'aria-current': 'page',\n}\nconst STATIC_DISABLED_PROPS = {\n role: 'link',\n 'aria-disabled': true,\n}\nconst STATIC_ACTIVE_ATTRIBUTES = {\n 'data-status': 'active',\n 'aria-current': 'page',\n}\n\n/** Call a JSX.EventHandlerUnion with the event. */\nfunction callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent>,\n) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n return event.defaultPrevented\n}\n\nfunction createComposedHandler<T, TEvent extends Event>(\n getHandler: () => Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n fallback: (event: TEvent) => void,\n) {\n return (event: TEvent & { currentTarget: T; target: Element }) => {\n const handler = getHandler()\n if (!handler || !callHandler(event, handler)) fallback(event)\n }\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: { isActive: boolean }) => 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 })\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 if (!local._asChild) {\n return <a {...linkProps}>{children()}</a>\n }\n\n return (\n <Dynamic component={local._asChild as Solid.ValidComponent} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isSafeInternal(to: unknown) {\n if (typeof to !== 'string') return false\n const zero = to.charCodeAt(0)\n if (zero === 47) return to.charCodeAt(1) !== 47 // '/' but not '//'\n return zero === 46 // '.', '..', './', '../'\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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"}

@@ -15,8 +15,29 @@ const require_runtime = require("./_virtual/_rolldown/runtime.cjs");

if (_tanstack_router_core_isServer.isServer ?? router.isServer) return null;
let transitionOwner;
router.startTransition = async (fn, expected) => {
transitionOwner = expected;
await solid_js.startTransition(fn);
return transitionOwner === expected;
let settleCurrent;
router.startTransition = (fn) => {
settleCurrent?.(false);
return new Promise((resolve, reject) => {
const settle = (rendered) => {
if (settleCurrent !== settle) return;
settleCurrent = void 0;
resolve(rendered);
};
const fail = (cause) => {
if (settleCurrent !== settle) return;
settleCurrent = void 0;
reject(cause);
};
settleCurrent = settle;
solid_js.startTransition(() => {
if (settleCurrent === settle) try {
fn();
} catch (cause) {
fail(cause);
}
}).then(() => settle(true), fail);
});
};
solid_js.onCleanup(() => {
settleCurrent?.(false);
});
solid_js.onMount(() => {

@@ -23,0 +44,0 @@ solid_js.onCleanup(router.history.subscribe(router.load));

@@ -1,1 +0,1 @@

{"version":3,"file":"Transitioner.cjs","names":["Solid","getLocationChangeInfo","trimPathRight","isServer","useRouter","AnyRouteMatch","getResolvedLocation","router","ReturnType","resolvedLocation","stores","get","href","latestLocation","state","__TSR_key","Transitioner","transitionOwner","Array","startTransition","fn","expected","onMount","onCleanup","history","subscribe","load","nextLocation","buildLocation","to","pathname","search","params","hash","_includeValidateSearch","publicHref","commitLocation","replace","ignoreBlocker","_tx","catch","console","error","Rendered","emit","type"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { AnyRouteMatch } from '@tanstack/router-core'\n\nfunction getResolvedLocation(router: ReturnType<typeof useRouter>) {\n const resolvedLocation = router.stores.resolvedLocation.get()\n if (\n resolvedLocation?.href === router.latestLocation.href &&\n resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key\n ) {\n return resolvedLocation\n }\n return\n}\n\nexport function Transitioner() {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n return null\n }\n\n let transitionOwner: Array<AnyRouteMatch> | undefined\n router.startTransition = async (fn, expected) => {\n transitionOwner = expected\n await Solid.startTransition(fn)\n return transitionOwner === expected\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n Solid.onCleanup(router.history.subscribe(router.load))\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) consistently with server\n // canonicalization.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({\n ...nextLocation,\n replace: true,\n ignoreBlocker: true,\n })\n return\n }\n\n if (!getResolvedLocation(router) && !router._tx) {\n router.load().catch(console.error)\n }\n })\n\n return null\n}\n\nexport function Rendered() {\n const router = useRouter()\n Solid.onMount(() => {\n const resolvedLocation = getResolvedLocation(router)\n if (resolvedLocation) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(resolvedLocation, resolvedLocation),\n })\n }\n })\n return null\n}\n"],"mappings":";;;;;;;AAMA,SAASM,oBAAoBC,QAAsC;CACjE,MAAME,mBAAmBF,OAAOG,OAAOD,iBAAiBE,IAAI;CAC5D,IACEF,kBAAkBG,SAASL,OAAOM,eAAeD,QACjDH,iBAAiBK,MAAMC,cAAcR,OAAOM,eAAeC,MAAMC,WAEjE,OAAON;AAGX;AAEA,SAAgBO,eAAe;CAC7B,MAAMT,SAASH,kBAAAA,UAAU;CAEzB,IAAID,+BAAAA,YAAYI,OAAOJ,UACrB,OAAO;CAGT,IAAIc;CACJV,OAAOY,kBAAkB,OAAOC,IAAIC,aAAa;EAC/CJ,kBAAkBI;EAClB,MAAMrB,SAAMmB,gBAAgBC,EAAE;EAC9B,OAAOH,oBAAoBI;CAC7B;CAIArB,SAAMsB,cAAc;EAClBtB,SAAMuB,UAAUhB,OAAOiB,QAAQC,UAAUlB,OAAOmB,IAAI,CAAC;EAErD,MAAMC,eAAepB,OAAOqB,cAAc;GACxCC,IAAItB,OAAOM,eAAeiB;GAC1BC,QAAQ;GACRC,QAAQ;GACRC,MAAM;GACNnB,OAAO;GACPoB,wBAAwB;EAC1B,CAAC;EAKD,KAAA,GAAA,sBAAA,eACgB3B,OAAOM,eAAesB,UAAU,OAAA,GAAA,sBAAA,eAChCR,aAAaQ,UAAU,GACrC;GACA5B,OAAO6B,eAAe;IACpB,GAAGT;IACHU,SAAS;IACTC,eAAe;GACjB,CAAC;GACD;EACF;EAEA,IAAI,CAAChC,oBAAoBC,MAAM,KAAK,CAACA,OAAOgC,KAC1ChC,OAAOmB,KAAK,EAAEc,MAAMC,QAAQC,KAAK;CAErC,CAAC;CAED,OAAO;AACT;AAEA,SAAgBC,WAAW;CACzB,MAAMpC,SAASH,kBAAAA,UAAU;CACzBJ,SAAMsB,cAAc;EAClB,MAAMb,mBAAmBH,oBAAoBC,MAAM;EACnD,IAAIE,kBACFF,OAAOqC,KAAK;GACVC,MAAM;GACN,IAAA,GAAA,sBAAA,uBAAyBpC,kBAAkBA,gBAAgB;EAC7D,CAAC;CAEL,CAAC;CACD,OAAO;AACT"}
{"version":3,"file":"Transitioner.cjs","names":["Solid","getLocationChangeInfo","trimPathRight","isServer","useRouter","getResolvedLocation","router","ReturnType","resolvedLocation","stores","get","href","latestLocation","state","__TSR_key","Transitioner","settleCurrent","rendered","startTransition","fn","Promise","resolve","reject","settle","undefined","fail","cause","then","onCleanup","onMount","history","subscribe","load","nextLocation","buildLocation","to","pathname","search","params","hash","_includeValidateSearch","publicHref","commitLocation","replace","ignoreBlocker","_tx","catch","console","error","Rendered","emit","type"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\n\nfunction getResolvedLocation(router: ReturnType<typeof useRouter>) {\n const resolvedLocation = router.stores.resolvedLocation.get()\n if (\n resolvedLocation?.href === router.latestLocation.href &&\n resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key\n ) {\n return resolvedLocation\n }\n return\n}\n\nexport function Transitioner() {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n return null\n }\n\n let settleCurrent: ((rendered: boolean) => void) | undefined\n router.startTransition = (fn) => {\n settleCurrent?.(false)\n\n return new Promise((resolve, reject) => {\n const settle = (rendered: boolean) => {\n if (settleCurrent !== settle) {\n return\n }\n settleCurrent = undefined\n resolve(rendered)\n }\n const fail = (cause: unknown) => {\n if (settleCurrent !== settle) {\n return\n }\n settleCurrent = undefined\n reject(cause)\n }\n settleCurrent = settle\n\n void Solid.startTransition(() => {\n // A newer publication may supersede this deferred callback.\n if (settleCurrent === settle) {\n try {\n fn()\n } catch (cause) {\n fail(cause)\n }\n }\n }).then(() => settle(true), fail)\n })\n }\n\n Solid.onCleanup(() => {\n settleCurrent?.(false)\n })\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n Solid.onCleanup(router.history.subscribe(router.load))\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) consistently with server\n // canonicalization.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({\n ...nextLocation,\n replace: true,\n ignoreBlocker: true,\n })\n return\n }\n\n if (!getResolvedLocation(router) && !router._tx) {\n router.load().catch(console.error)\n }\n })\n\n return null\n}\n\nexport function Rendered() {\n const router = useRouter()\n Solid.onMount(() => {\n const resolvedLocation = getResolvedLocation(router)\n if (resolvedLocation) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(resolvedLocation, resolvedLocation),\n })\n }\n })\n return null\n}\n"],"mappings":";;;;;;;AAKA,SAASK,oBAAoBC,QAAsC;CACjE,MAAME,mBAAmBF,OAAOG,OAAOD,iBAAiBE,IAAI;CAC5D,IACEF,kBAAkBG,SAASL,OAAOM,eAAeD,QACjDH,iBAAiBK,MAAMC,cAAcR,OAAOM,eAAeC,MAAMC,WAEjE,OAAON;AAGX;AAEA,SAAgBO,eAAe;CAC7B,MAAMT,SAASF,kBAAAA,UAAU;CAEzB,IAAID,+BAAAA,YAAYG,OAAOH,UACrB,OAAO;CAGT,IAAIa;CACJV,OAAOY,mBAAmBC,OAAO;EAC/BH,gBAAgB,KAAK;EAErB,OAAO,IAAII,SAASC,SAASC,WAAW;GACtC,MAAMC,UAAUN,aAAsB;IACpC,IAAID,kBAAkBO,QACpB;IAEFP,gBAAgBQ,KAAAA;IAChBH,QAAQJ,QAAQ;GAClB;GACA,MAAMQ,QAAQC,UAAmB;IAC/B,IAAIV,kBAAkBO,QACpB;IAEFP,gBAAgBQ,KAAAA;IAChBF,OAAOI,KAAK;GACd;GACAV,gBAAgBO;GAEhB,SAAWL,sBAAsB;IAE/B,IAAIF,kBAAkBO,QACpB,IAAI;KACFJ,GAAG;IACL,SAASO,OAAO;KACdD,KAAKC,KAAK;IACZ;GAEJ,CAAC,EAAEC,WAAWJ,OAAO,IAAI,GAAGE,IAAI;EAClC,CAAC;CACH;CAEAzB,SAAM4B,gBAAgB;EACpBZ,gBAAgB,KAAK;CACvB,CAAC;CAIDhB,SAAM6B,cAAc;EAClB7B,SAAM4B,UAAUtB,OAAOwB,QAAQC,UAAUzB,OAAO0B,IAAI,CAAC;EAErD,MAAMC,eAAe3B,OAAO4B,cAAc;GACxCC,IAAI7B,OAAOM,eAAewB;GAC1BC,QAAQ;GACRC,QAAQ;GACRC,MAAM;GACN1B,OAAO;GACP2B,wBAAwB;EAC1B,CAAC;EAKD,KAAA,GAAA,sBAAA,eACgBlC,OAAOM,eAAe6B,UAAU,OAAA,GAAA,sBAAA,eAChCR,aAAaQ,UAAU,GACrC;GACAnC,OAAOoC,eAAe;IACpB,GAAGT;IACHU,SAAS;IACTC,eAAe;GACjB,CAAC;GACD;EACF;EAEA,IAAI,CAACvC,oBAAoBC,MAAM,KAAK,CAACA,OAAOuC,KAC1CvC,OAAO0B,KAAK,EAAEc,MAAMC,QAAQC,KAAK;CAErC,CAAC;CAED,OAAO;AACT;AAEA,SAAgBC,WAAW;CACzB,MAAM3C,SAASF,kBAAAA,UAAU;CACzBJ,SAAM6B,cAAc;EAClB,MAAMrB,mBAAmBH,oBAAoBC,MAAM;EACnD,IAAIE,kBACFF,OAAO4C,KAAK;GACVC,MAAM;GACN,IAAA,GAAA,sBAAA,uBAAyB3C,kBAAkBA,gBAAgB;EAC7D,CAAC;CAEL,CAAC;CACD,OAAO;AACT"}

@@ -129,6 +129,3 @@ import { useHydrated } from "./ClientOnly.js";

});
const doPreload = () => router.preloadRoute({
...options,
_builtLocation: next()
}).catch((err) => {
const doPreload = () => router.preloadRoute(options, next()).catch((err) => {
console.warn(err);

@@ -135,0 +132,0 @@ console.warn(preloadWarning);

@@ -1,1 +0,1 @@

{"version":3,"file":"link.js","names":["Solid","mergeRefs","deepEqual","exactPathTest","functionalUpdate","hasKeys","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","ReturnType","setTimeout","cancelPreload","eventTarget","clearTimeout","get","delete","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","shouldHydrateHash","ssr","hasHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","STATIC_ACTIVE_PROPS_GET","inactiveProps","STATIC_INACTIVE_PROPS_GET","_","propsSafeToSpread","currentLocation","createMemo","stores","location","undefined","equals","prev","next","href","_fromLocation","nextOptions","untrack","buildLocation","hrefOption","disabled","maskedLocation","publicHref","external","history","createHref","externalLink","_href","protocolAllowlist","process","env","NODE_ENV","console","warn","to","safeInternal","isSafeInternal","indexOf","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","current","nextLocation","exact","testExact","pathname","basepath","currentPath","nextPath","pathIsFuzzyEqual","startsWith","length","includeSearch","searchTest","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","_builtLocation","catch","err","ref","setRef","createSignal","Element","enqueuePreload","e","MouseEvent","FocusEvent","IntersectionObserverEntry","isIntersecting","has","set","createEffect","handleClick","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","target","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleTouchStart","handleLeave","simpleStyling","class","style","onClick","createComposedHandler","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","ResolvedLinkStateProps","Omit","JSX","CSSProperties","resolvedProps","active","base","STATIC_DISABLED_PROPS","STATIC_DEFAULT_ACTIVE_ATTRIBUTES","EMPTY_OBJECT","className","filter","Boolean","join","STATIC_ACTIVE_ATTRIBUTES","STATIC_ACTIVE_PROPS","role","callHandler","Event","event","TEvent","T","handler","EventHandlerUnion","getHandler","fallback","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","_el$3","_tmpl$2","component","zero","charCodeAt","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 hasKeys,\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 { 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<object, ReturnType<typeof setTimeout>>()\nconst cancelPreload = (eventTarget: object) => {\n clearTimeout(timeoutMap.get(eventTarget))\n timeoutMap.delete(eventTarget)\n}\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 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: STATIC_ACTIVE_PROPS_GET,\n inactiveProps: STATIC_INACTIVE_PROPS_GET,\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'preloadIntentProximity',\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 'from',\n ])\n\n const currentLocation = Solid.createMemo(\n () => router.stores.location.get(),\n undefined,\n { equals: (prev, next) => prev.href === next.href },\n )\n\n const next = Solid.createMemo(() => {\n // Rebuild when inherited search/hash or the current route context changes.\n const _fromLocation = currentLocation()\n const nextOptions = { _fromLocation, ...options } as any\n // untrack because router-core will also access stores, which are signals in solid\n return Solid.untrack(() => router.buildLocation(nextOptions))\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 safeInternal = isSafeInternal(to)\n if (safeInternal) return undefined\n if (typeof to !== 'string' || to.indexOf(':') === -1) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to, 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() || local.disabled) {\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 const activeOptions = local.activeOptions\n const current = currentLocation()\n const nextLocation = next()\n\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n current.pathname,\n nextLocation.pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPath = removeTrailingSlash(current.pathname, router.basepath)\n const nextPath = removeTrailingSlash(\n nextLocation.pathname,\n router.basepath,\n )\n\n const pathIsFuzzyEqual =\n currentPath.startsWith(nextPath) &&\n (currentPath.length === nextPath.length ||\n currentPath[nextPath.length] === '/')\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(current.search, nextLocation.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : current.hash\n return currentHash === nextLocation.hash\n }\n return true\n })\n\n const doPreload = () =>\n router\n .preloadRoute({ ...options, _builtLocation: next() } as any)\n .catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n const enqueuePreload = (\n e?: MouseEvent | FocusEvent | IntersectionObserverEntry,\n ) => {\n if (!e) {\n cancelPreload(ref)\n return\n }\n\n if (\n !(\n (e as IntersectionObserverEntry).isIntersecting ??\n preload() === 'intent'\n )\n ) {\n if ((e as IntersectionObserverEntry).isIntersecting === false) {\n cancelPreload(ref)\n }\n return\n }\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n if (!timeoutMap.has(ref)) {\n timeoutMap.set(\n ref,\n setTimeout(() => {\n timeoutMap.delete(ref)\n doPreload()\n }, preloadDelay()),\n )\n }\n }\n\n useIntersectionObserver(ref, enqueuePreload, () => preload() !== 'viewport')\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (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 !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\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 handleTouchStart = () => {\n if (preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = () => {\n if (preload() === 'intent') {\n cancelPreload(ref)\n }\n }\n\n const simpleStyling = Solid.createMemo(\n () =>\n local.activeProps === STATIC_ACTIVE_PROPS_GET &&\n local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&\n local.class === undefined &&\n local.style === undefined,\n )\n\n const onClick = createComposedHandler(() => local.onClick, handleClick)\n const onBlur = createComposedHandler(() => local.onBlur, handleLeave)\n const onFocus = createComposedHandler(() => local.onFocus, enqueuePreload)\n const onMouseEnter = createComposedHandler(\n () => local.onMouseEnter,\n enqueuePreload,\n )\n const onMouseOver = createComposedHandler(\n () => local.onMouseOver,\n enqueuePreload,\n )\n const onMouseLeave = createComposedHandler(\n () => local.onMouseLeave,\n handleLeave,\n )\n const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave)\n const onTouchStart = createComposedHandler(\n () => local.onTouchStart,\n handleTouchStart,\n )\n\n type ResolvedLinkStateProps = Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n }\n\n const resolvedProps = Solid.createMemo(() => {\n const active = isActive()\n\n const base = {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, options.ref),\n onClick,\n onBlur,\n onFocus,\n onMouseEnter,\n onMouseOver,\n onMouseLeave,\n onMouseOut,\n onTouchStart,\n disabled: !!local.disabled,\n target: local.target,\n ...(local.disabled && STATIC_DISABLED_PROPS),\n }\n\n if (simpleStyling()) {\n return {\n ...base,\n ...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),\n }\n }\n\n const activeProps: ResolvedLinkStateProps = active\n ? (functionalUpdate(local.activeProps as any, {}) ?? EMPTY_OBJECT)\n : EMPTY_OBJECT\n const inactiveProps: ResolvedLinkStateProps = active\n ? EMPTY_OBJECT\n : functionalUpdate(local.inactiveProps, {})\n const style = {\n ...local.style,\n ...activeProps.style,\n ...inactiveProps.style,\n }\n const className = [local.class, activeProps.class, inactiveProps.class]\n .filter(Boolean)\n .join(' ')\n\n return {\n ...activeProps,\n ...inactiveProps,\n ...base,\n ...(hasKeys(style) ? { style } : undefined),\n ...(className ? { class: className } : undefined),\n ...(active && STATIC_ACTIVE_ATTRIBUTES),\n } as ResolvedLinkStateProps\n })\n\n return Solid.mergeProps(propsSafeToSpread, resolvedProps) as any\n}\n\nconst STATIC_ACTIVE_PROPS = { class: 'active' }\nconst STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS\nconst EMPTY_OBJECT = {}\nconst STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT\nconst STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {\n class: 'active',\n 'data-status': 'active',\n 'aria-current': 'page',\n}\nconst STATIC_DISABLED_PROPS = {\n role: 'link',\n 'aria-disabled': true,\n}\nconst STATIC_ACTIVE_ATTRIBUTES = {\n 'data-status': 'active',\n 'aria-current': 'page',\n}\n\n/** Call a JSX.EventHandlerUnion with the event. */\nfunction callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent>,\n) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n return event.defaultPrevented\n}\n\nfunction createComposedHandler<T, TEvent extends Event>(\n getHandler: () => Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n fallback: (event: TEvent) => void,\n) {\n return (event: TEvent & { currentTarget: T; target: Element }) => {\n const handler = getHandler()\n if (!handler || !callHandler(event, handler)) fallback(event)\n }\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: { isActive: boolean }) => 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 })\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 if (!local._asChild) {\n return <a {...linkProps}>{children()}</a>\n }\n\n return (\n <Dynamic component={local._asChild as Solid.ValidComponent} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isSafeInternal(to: unknown) {\n if (typeof to !== 'string') return false\n const zero = to.charCodeAt(0)\n if (zero === 47) return to.charCodeAt(1) !== 47 // '/' but not '//'\n return zero === 46 // '.', '..', './', '../'\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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"}
{"version":3,"file":"link.js","names":["Solid","mergeRefs","deepEqual","exactPathTest","functionalUpdate","hasKeys","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","ReturnType","setTimeout","cancelPreload","eventTarget","clearTimeout","get","delete","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","shouldHydrateHash","ssr","hasHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","STATIC_ACTIVE_PROPS_GET","inactiveProps","STATIC_INACTIVE_PROPS_GET","_","propsSafeToSpread","currentLocation","createMemo","stores","location","undefined","equals","prev","next","href","_fromLocation","nextOptions","untrack","buildLocation","hrefOption","disabled","maskedLocation","publicHref","external","history","createHref","externalLink","_href","protocolAllowlist","process","env","NODE_ENV","console","warn","to","safeInternal","isSafeInternal","indexOf","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","current","nextLocation","exact","testExact","pathname","basepath","currentPath","nextPath","pathIsFuzzyEqual","startsWith","length","includeSearch","searchTest","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","opts","builtLocation","catch","err","ref","setRef","createSignal","Element","enqueuePreload","e","MouseEvent","FocusEvent","IntersectionObserverEntry","isIntersecting","has","set","createEffect","handleClick","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","target","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleTouchStart","handleLeave","simpleStyling","class","style","onClick","createComposedHandler","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","ResolvedLinkStateProps","Omit","JSX","CSSProperties","resolvedProps","active","base","STATIC_DISABLED_PROPS","STATIC_DEFAULT_ACTIVE_ATTRIBUTES","EMPTY_OBJECT","className","filter","Boolean","join","STATIC_ACTIVE_ATTRIBUTES","STATIC_ACTIVE_PROPS","role","callHandler","Event","event","TEvent","T","handler","EventHandlerUnion","getHandler","fallback","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","_el$3","_tmpl$2","component","zero","charCodeAt","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 hasKeys,\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 { 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<object, ReturnType<typeof setTimeout>>()\nconst cancelPreload = (eventTarget: object) => {\n clearTimeout(timeoutMap.get(eventTarget))\n timeoutMap.delete(eventTarget)\n}\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 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: STATIC_ACTIVE_PROPS_GET,\n inactiveProps: STATIC_INACTIVE_PROPS_GET,\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'preloadIntentProximity',\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 'from',\n ])\n\n const currentLocation = Solid.createMemo(\n () => router.stores.location.get(),\n undefined,\n { equals: (prev, next) => prev.href === next.href },\n )\n\n const next = Solid.createMemo(() => {\n // Rebuild when inherited search/hash or the current route context changes.\n const _fromLocation = currentLocation()\n const nextOptions = { _fromLocation, ...options } as any\n // untrack because router-core will also access stores, which are signals in solid\n return Solid.untrack(() => router.buildLocation(nextOptions))\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 safeInternal = isSafeInternal(to)\n if (safeInternal) return undefined\n if (typeof to !== 'string' || to.indexOf(':') === -1) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to, 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() || local.disabled) {\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 const activeOptions = local.activeOptions\n const current = currentLocation()\n const nextLocation = next()\n\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n current.pathname,\n nextLocation.pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPath = removeTrailingSlash(current.pathname, router.basepath)\n const nextPath = removeTrailingSlash(\n nextLocation.pathname,\n router.basepath,\n )\n\n const pathIsFuzzyEqual =\n currentPath.startsWith(nextPath) &&\n (currentPath.length === nextPath.length ||\n currentPath[nextPath.length] === '/')\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(current.search, nextLocation.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : current.hash\n return currentHash === nextLocation.hash\n }\n return true\n })\n\n const doPreload = () =>\n (\n router.preloadRoute as (\n opts: typeof options,\n builtLocation: ReturnType<typeof router.buildLocation>,\n ) => ReturnType<typeof router.preloadRoute>\n )(options, next()).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n const enqueuePreload = (\n e?: MouseEvent | FocusEvent | IntersectionObserverEntry,\n ) => {\n if (!e) {\n cancelPreload(ref)\n return\n }\n\n if (\n !(\n (e as IntersectionObserverEntry).isIntersecting ??\n preload() === 'intent'\n )\n ) {\n if ((e as IntersectionObserverEntry).isIntersecting === false) {\n cancelPreload(ref)\n }\n return\n }\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n if (!timeoutMap.has(ref)) {\n timeoutMap.set(\n ref,\n setTimeout(() => {\n timeoutMap.delete(ref)\n doPreload()\n }, preloadDelay()),\n )\n }\n }\n\n useIntersectionObserver(ref, enqueuePreload, () => preload() !== 'viewport')\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (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 !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\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 handleTouchStart = () => {\n if (preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = () => {\n if (preload() === 'intent') {\n cancelPreload(ref)\n }\n }\n\n const simpleStyling = Solid.createMemo(\n () =>\n local.activeProps === STATIC_ACTIVE_PROPS_GET &&\n local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&\n local.class === undefined &&\n local.style === undefined,\n )\n\n const onClick = createComposedHandler(() => local.onClick, handleClick)\n const onBlur = createComposedHandler(() => local.onBlur, handleLeave)\n const onFocus = createComposedHandler(() => local.onFocus, enqueuePreload)\n const onMouseEnter = createComposedHandler(\n () => local.onMouseEnter,\n enqueuePreload,\n )\n const onMouseOver = createComposedHandler(\n () => local.onMouseOver,\n enqueuePreload,\n )\n const onMouseLeave = createComposedHandler(\n () => local.onMouseLeave,\n handleLeave,\n )\n const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave)\n const onTouchStart = createComposedHandler(\n () => local.onTouchStart,\n handleTouchStart,\n )\n\n type ResolvedLinkStateProps = Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n }\n\n const resolvedProps = Solid.createMemo(() => {\n const active = isActive()\n\n const base = {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, options.ref),\n onClick,\n onBlur,\n onFocus,\n onMouseEnter,\n onMouseOver,\n onMouseLeave,\n onMouseOut,\n onTouchStart,\n disabled: !!local.disabled,\n target: local.target,\n ...(local.disabled && STATIC_DISABLED_PROPS),\n }\n\n if (simpleStyling()) {\n return {\n ...base,\n ...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),\n }\n }\n\n const activeProps: ResolvedLinkStateProps = active\n ? (functionalUpdate(local.activeProps as any, {}) ?? EMPTY_OBJECT)\n : EMPTY_OBJECT\n const inactiveProps: ResolvedLinkStateProps = active\n ? EMPTY_OBJECT\n : functionalUpdate(local.inactiveProps, {})\n const style = {\n ...local.style,\n ...activeProps.style,\n ...inactiveProps.style,\n }\n const className = [local.class, activeProps.class, inactiveProps.class]\n .filter(Boolean)\n .join(' ')\n\n return {\n ...activeProps,\n ...inactiveProps,\n ...base,\n ...(hasKeys(style) ? { style } : undefined),\n ...(className ? { class: className } : undefined),\n ...(active && STATIC_ACTIVE_ATTRIBUTES),\n } as ResolvedLinkStateProps\n })\n\n return Solid.mergeProps(propsSafeToSpread, resolvedProps) as any\n}\n\nconst STATIC_ACTIVE_PROPS = { class: 'active' }\nconst STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS\nconst EMPTY_OBJECT = {}\nconst STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT\nconst STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {\n class: 'active',\n 'data-status': 'active',\n 'aria-current': 'page',\n}\nconst STATIC_DISABLED_PROPS = {\n role: 'link',\n 'aria-disabled': true,\n}\nconst STATIC_ACTIVE_ATTRIBUTES = {\n 'data-status': 'active',\n 'aria-current': 'page',\n}\n\n/** Call a JSX.EventHandlerUnion with the event. */\nfunction callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent>,\n) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n return event.defaultPrevented\n}\n\nfunction createComposedHandler<T, TEvent extends Event>(\n getHandler: () => Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n fallback: (event: TEvent) => void,\n) {\n return (event: TEvent & { currentTarget: T; target: Element }) => {\n const handler = getHandler()\n if (!handler || !callHandler(event, handler)) fallback(event)\n }\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: { isActive: boolean }) => 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 })\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 if (!local._asChild) {\n return <a {...linkProps}>{children()}</a>\n }\n\n return (\n <Dynamic component={local._asChild as Solid.ValidComponent} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isSafeInternal(to: unknown) {\n if (typeof to !== 'string') return false\n const zero = to.charCodeAt(0)\n if (zero === 47) return to.charCodeAt(1) !== 47 // '/' but not '//'\n return zero === 46 // '.', '..', './', '../'\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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"}

@@ -13,8 +13,29 @@ import { useRouter } from "./useRouter.js";

if (isServer ?? router.isServer) return null;
let transitionOwner;
router.startTransition = async (fn, expected) => {
transitionOwner = expected;
await Solid.startTransition(fn);
return transitionOwner === expected;
let settleCurrent;
router.startTransition = (fn) => {
settleCurrent?.(false);
return new Promise((resolve, reject) => {
const settle = (rendered) => {
if (settleCurrent !== settle) return;
settleCurrent = void 0;
resolve(rendered);
};
const fail = (cause) => {
if (settleCurrent !== settle) return;
settleCurrent = void 0;
reject(cause);
};
settleCurrent = settle;
Solid.startTransition(() => {
if (settleCurrent === settle) try {
fn();
} catch (cause) {
fail(cause);
}
}).then(() => settle(true), fail);
});
};
Solid.onCleanup(() => {
settleCurrent?.(false);
});
Solid.onMount(() => {

@@ -21,0 +42,0 @@ Solid.onCleanup(router.history.subscribe(router.load));

@@ -1,1 +0,1 @@

{"version":3,"file":"Transitioner.js","names":["Solid","getLocationChangeInfo","trimPathRight","isServer","useRouter","AnyRouteMatch","getResolvedLocation","router","ReturnType","resolvedLocation","stores","get","href","latestLocation","state","__TSR_key","Transitioner","transitionOwner","Array","startTransition","fn","expected","onMount","onCleanup","history","subscribe","load","nextLocation","buildLocation","to","pathname","search","params","hash","_includeValidateSearch","publicHref","commitLocation","replace","ignoreBlocker","_tx","catch","console","error","Rendered","emit","type"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\nimport type { AnyRouteMatch } from '@tanstack/router-core'\n\nfunction getResolvedLocation(router: ReturnType<typeof useRouter>) {\n const resolvedLocation = router.stores.resolvedLocation.get()\n if (\n resolvedLocation?.href === router.latestLocation.href &&\n resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key\n ) {\n return resolvedLocation\n }\n return\n}\n\nexport function Transitioner() {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n return null\n }\n\n let transitionOwner: Array<AnyRouteMatch> | undefined\n router.startTransition = async (fn, expected) => {\n transitionOwner = expected\n await Solid.startTransition(fn)\n return transitionOwner === expected\n }\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n Solid.onCleanup(router.history.subscribe(router.load))\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) consistently with server\n // canonicalization.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({\n ...nextLocation,\n replace: true,\n ignoreBlocker: true,\n })\n return\n }\n\n if (!getResolvedLocation(router) && !router._tx) {\n router.load().catch(console.error)\n }\n })\n\n return null\n}\n\nexport function Rendered() {\n const router = useRouter()\n Solid.onMount(() => {\n const resolvedLocation = getResolvedLocation(router)\n if (resolvedLocation) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(resolvedLocation, resolvedLocation),\n })\n }\n })\n return null\n}\n"],"mappings":";;;;;AAMA,SAASM,oBAAoBC,QAAsC;CACjE,MAAME,mBAAmBF,OAAOG,OAAOD,iBAAiBE,IAAI;CAC5D,IACEF,kBAAkBG,SAASL,OAAOM,eAAeD,QACjDH,iBAAiBK,MAAMC,cAAcR,OAAOM,eAAeC,MAAMC,WAEjE,OAAON;AAGX;AAEA,SAAgBO,eAAe;CAC7B,MAAMT,SAASH,UAAU;CAEzB,IAAID,YAAYI,OAAOJ,UACrB,OAAO;CAGT,IAAIc;CACJV,OAAOY,kBAAkB,OAAOC,IAAIC,aAAa;EAC/CJ,kBAAkBI;EAClB,MAAMrB,MAAMmB,gBAAgBC,EAAE;EAC9B,OAAOH,oBAAoBI;CAC7B;CAIArB,MAAMsB,cAAc;EAClBtB,MAAMuB,UAAUhB,OAAOiB,QAAQC,UAAUlB,OAAOmB,IAAI,CAAC;EAErD,MAAMC,eAAepB,OAAOqB,cAAc;GACxCC,IAAItB,OAAOM,eAAeiB;GAC1BC,QAAQ;GACRC,QAAQ;GACRC,MAAM;GACNnB,OAAO;GACPoB,wBAAwB;EAC1B,CAAC;EAKD,IACEhC,cAAcK,OAAOM,eAAesB,UAAU,MAC9CjC,cAAcyB,aAAaQ,UAAU,GACrC;GACA5B,OAAO6B,eAAe;IACpB,GAAGT;IACHU,SAAS;IACTC,eAAe;GACjB,CAAC;GACD;EACF;EAEA,IAAI,CAAChC,oBAAoBC,MAAM,KAAK,CAACA,OAAOgC,KAC1ChC,OAAOmB,KAAK,EAAEc,MAAMC,QAAQC,KAAK;CAErC,CAAC;CAED,OAAO;AACT;AAEA,SAAgBC,WAAW;CACzB,MAAMpC,SAASH,UAAU;CACzBJ,MAAMsB,cAAc;EAClB,MAAMb,mBAAmBH,oBAAoBC,MAAM;EACnD,IAAIE,kBACFF,OAAOqC,KAAK;GACVC,MAAM;GACN,GAAG5C,sBAAsBQ,kBAAkBA,gBAAgB;EAC7D,CAAC;CAEL,CAAC;CACD,OAAO;AACT"}
{"version":3,"file":"Transitioner.js","names":["Solid","getLocationChangeInfo","trimPathRight","isServer","useRouter","getResolvedLocation","router","ReturnType","resolvedLocation","stores","get","href","latestLocation","state","__TSR_key","Transitioner","settleCurrent","rendered","startTransition","fn","Promise","resolve","reject","settle","undefined","fail","cause","then","onCleanup","onMount","history","subscribe","load","nextLocation","buildLocation","to","pathname","search","params","hash","_includeValidateSearch","publicHref","commitLocation","replace","ignoreBlocker","_tx","catch","console","error","Rendered","emit","type"],"sources":["../../src/Transitioner.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\nimport { getLocationChangeInfo, trimPathRight } from '@tanstack/router-core'\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { useRouter } from './useRouter'\n\nfunction getResolvedLocation(router: ReturnType<typeof useRouter>) {\n const resolvedLocation = router.stores.resolvedLocation.get()\n if (\n resolvedLocation?.href === router.latestLocation.href &&\n resolvedLocation.state.__TSR_key === router.latestLocation.state.__TSR_key\n ) {\n return resolvedLocation\n }\n return\n}\n\nexport function Transitioner() {\n const router = useRouter()\n\n if (isServer ?? router.isServer) {\n return null\n }\n\n let settleCurrent: ((rendered: boolean) => void) | undefined\n router.startTransition = (fn) => {\n settleCurrent?.(false)\n\n return new Promise((resolve, reject) => {\n const settle = (rendered: boolean) => {\n if (settleCurrent !== settle) {\n return\n }\n settleCurrent = undefined\n resolve(rendered)\n }\n const fail = (cause: unknown) => {\n if (settleCurrent !== settle) {\n return\n }\n settleCurrent = undefined\n reject(cause)\n }\n settleCurrent = settle\n\n void Solid.startTransition(() => {\n // A newer publication may supersede this deferred callback.\n if (settleCurrent === settle) {\n try {\n fn()\n } catch (cause) {\n fail(cause)\n }\n }\n }).then(() => settle(true), fail)\n })\n }\n\n Solid.onCleanup(() => {\n settleCurrent?.(false)\n })\n\n // Subscribe to location changes\n // and try to load the new location\n Solid.onMount(() => {\n Solid.onCleanup(router.history.subscribe(router.load))\n\n const nextLocation = router.buildLocation({\n to: router.latestLocation.pathname,\n search: true,\n params: true,\n hash: true,\n state: true,\n _includeValidateSearch: true,\n })\n\n // Check if the current URL matches the canonical form.\n // Compare publicHref (browser-facing URL) consistently with server\n // canonicalization.\n if (\n trimPathRight(router.latestLocation.publicHref) !==\n trimPathRight(nextLocation.publicHref)\n ) {\n router.commitLocation({\n ...nextLocation,\n replace: true,\n ignoreBlocker: true,\n })\n return\n }\n\n if (!getResolvedLocation(router) && !router._tx) {\n router.load().catch(console.error)\n }\n })\n\n return null\n}\n\nexport function Rendered() {\n const router = useRouter()\n Solid.onMount(() => {\n const resolvedLocation = getResolvedLocation(router)\n if (resolvedLocation) {\n router.emit({\n type: 'onRendered',\n ...getLocationChangeInfo(resolvedLocation, resolvedLocation),\n })\n }\n })\n return null\n}\n"],"mappings":";;;;;AAKA,SAASK,oBAAoBC,QAAsC;CACjE,MAAME,mBAAmBF,OAAOG,OAAOD,iBAAiBE,IAAI;CAC5D,IACEF,kBAAkBG,SAASL,OAAOM,eAAeD,QACjDH,iBAAiBK,MAAMC,cAAcR,OAAOM,eAAeC,MAAMC,WAEjE,OAAON;AAGX;AAEA,SAAgBO,eAAe;CAC7B,MAAMT,SAASF,UAAU;CAEzB,IAAID,YAAYG,OAAOH,UACrB,OAAO;CAGT,IAAIa;CACJV,OAAOY,mBAAmBC,OAAO;EAC/BH,gBAAgB,KAAK;EAErB,OAAO,IAAII,SAASC,SAASC,WAAW;GACtC,MAAMC,UAAUN,aAAsB;IACpC,IAAID,kBAAkBO,QACpB;IAEFP,gBAAgBQ,KAAAA;IAChBH,QAAQJ,QAAQ;GAClB;GACA,MAAMQ,QAAQC,UAAmB;IAC/B,IAAIV,kBAAkBO,QACpB;IAEFP,gBAAgBQ,KAAAA;IAChBF,OAAOI,KAAK;GACd;GACAV,gBAAgBO;GAEhB,MAAWL,sBAAsB;IAE/B,IAAIF,kBAAkBO,QACpB,IAAI;KACFJ,GAAG;IACL,SAASO,OAAO;KACdD,KAAKC,KAAK;IACZ;GAEJ,CAAC,EAAEC,WAAWJ,OAAO,IAAI,GAAGE,IAAI;EAClC,CAAC;CACH;CAEAzB,MAAM4B,gBAAgB;EACpBZ,gBAAgB,KAAK;CACvB,CAAC;CAIDhB,MAAM6B,cAAc;EAClB7B,MAAM4B,UAAUtB,OAAOwB,QAAQC,UAAUzB,OAAO0B,IAAI,CAAC;EAErD,MAAMC,eAAe3B,OAAO4B,cAAc;GACxCC,IAAI7B,OAAOM,eAAewB;GAC1BC,QAAQ;GACRC,QAAQ;GACRC,MAAM;GACN1B,OAAO;GACP2B,wBAAwB;EAC1B,CAAC;EAKD,IACEtC,cAAcI,OAAOM,eAAe6B,UAAU,MAC9CvC,cAAc+B,aAAaQ,UAAU,GACrC;GACAnC,OAAOoC,eAAe;IACpB,GAAGT;IACHU,SAAS;IACTC,eAAe;GACjB,CAAC;GACD;EACF;EAEA,IAAI,CAACvC,oBAAoBC,MAAM,KAAK,CAACA,OAAOuC,KAC1CvC,OAAO0B,KAAK,EAAEc,MAAMC,QAAQC,KAAK;CAErC,CAAC;CAED,OAAO;AACT;AAEA,SAAgBC,WAAW;CACzB,MAAM3C,SAASF,UAAU;CACzBJ,MAAM6B,cAAc;EAClB,MAAMrB,mBAAmBH,oBAAoBC,MAAM;EACnD,IAAIE,kBACFF,OAAO4C,KAAK;GACVC,MAAM;GACN,GAAGlD,sBAAsBO,kBAAkBA,gBAAgB;EAC7D,CAAC;CAEL,CAAC;CACD,OAAO;AACT"}

@@ -188,5 +188,3 @@ import * as Solid from 'solid-js';

});
const doPreload = () => router
.preloadRoute({ ...options, _builtLocation: next() })
.catch((err) => {
const doPreload = () => router.preloadRoute(options, next()).catch((err) => {
console.warn(err);

@@ -193,0 +191,0 @@ console.warn(preloadWarning);

@@ -1,1 +0,1 @@

{"version":3,"file":"link.jsx","sourceRoot":"","sources":["../../src/link.tsx"],"names":[],"mappings":"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"}
{"version":3,"file":"link.jsx","sourceRoot":"","sources":["../../src/link.tsx"],"names":[],"mappings":"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"}

@@ -18,8 +18,37 @@ import * as Solid from 'solid-js';

}
let transitionOwner;
router.startTransition = async (fn, expected) => {
transitionOwner = expected;
await Solid.startTransition(fn);
return transitionOwner === expected;
let settleCurrent;
router.startTransition = (fn) => {
settleCurrent?.(false);
return new Promise((resolve, reject) => {
const settle = (rendered) => {
if (settleCurrent !== settle) {
return;
}
settleCurrent = undefined;
resolve(rendered);
};
const fail = (cause) => {
if (settleCurrent !== settle) {
return;
}
settleCurrent = undefined;
reject(cause);
};
settleCurrent = settle;
void Solid.startTransition(() => {
// A newer publication may supersede this deferred callback.
if (settleCurrent === settle) {
try {
fn();
}
catch (cause) {
fail(cause);
}
}
}).then(() => settle(true), fail);
});
};
Solid.onCleanup(() => {
settleCurrent?.(false);
});
// Subscribe to location changes

@@ -26,0 +55,0 @@ // and try to load the new location

@@ -1,1 +0,1 @@

{"version":3,"file":"Transitioner.jsx","sourceRoot":"","sources":["../../src/Transitioner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAGvC,SAAS,mBAAmB,CAAC,MAAoC;IAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAA;IAC7D,IACE,gBAAgB,EAAE,IAAI,KAAK,MAAM,CAAC,cAAc,CAAC,IAAI;QACrD,gBAAgB,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAC1E,CAAC;QACD,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACD,OAAM;AACR,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,eAAiD,CAAA;IACrD,MAAM,CAAC,eAAe,GAAG,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9C,eAAe,GAAG,QAAQ,CAAA;QAC1B,MAAM,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,eAAe,KAAK,QAAQ,CAAA;IACrC,CAAC,CAAA;IAED,gCAAgC;IAChC,mCAAmC;IACnC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QAEtD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YACxC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;YAClC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;YACX,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAA;QAEF,uDAAuD;QACvD,mEAAmE;QACnE,oBAAoB;QACpB,IACE,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;YAC/C,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EACtC,CAAC;YACD,MAAM,CAAC,cAAc,CAAC;gBACpB,GAAG,YAAY;gBACf,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;aAC7D,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC"}
{"version":3,"file":"Transitioner.jsx","sourceRoot":"","sources":["../../src/Transitioner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,SAAS,mBAAmB,CAAC,MAAoC;IAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAA;IAC7D,IACE,gBAAgB,EAAE,IAAI,KAAK,MAAM,CAAC,cAAc,CAAC,IAAI;QACrD,gBAAgB,CAAC,KAAK,CAAC,SAAS,KAAK,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAC1E,CAAC;QACD,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACD,OAAM;AACR,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,aAAwD,CAAA;IAC5D,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE;QAC9B,aAAa,EAAE,CAAC,KAAK,CAAC,CAAA;QAEtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,CAAC,QAAiB,EAAE,EAAE;gBACnC,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;oBAC7B,OAAM;gBACR,CAAC;gBACD,aAAa,GAAG,SAAS,CAAA;gBACzB,OAAO,CAAC,QAAQ,CAAC,CAAA;YACnB,CAAC,CAAA;YACD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;gBAC9B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;oBAC7B,OAAM;gBACR,CAAC;gBACD,aAAa,GAAG,SAAS,CAAA;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,CAAA;YACD,aAAa,GAAG,MAAM,CAAA;YAEtB,KAAK,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;gBAC9B,4DAA4D;gBAC5D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,EAAE,EAAE,CAAA;oBACN,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,KAAK,CAAC,CAAA;oBACb,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,aAAa,EAAE,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IAEF,gCAAgC;IAChC,mCAAmC;IACnC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QAEtD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,CAAC;YACxC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ;YAClC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI;YACX,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAA;QAEF,uDAAuD;QACvD,mEAAmE;QACnE,oBAAoB;QACpB,IACE,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC;YAC/C,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EACtC,CAAC;YACD,MAAM,CAAC,cAAc,CAAC;gBACpB,GAAG,YAAY;gBACf,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACpD,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;aAC7D,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC"}
{
"name": "@tanstack/solid-router",
"version": "1.170.27",
"version": "1.170.28",
"description": "Modern and scalable routing for Solid applications",

@@ -94,3 +94,3 @@ "author": "Tanner Linsley",

"@tanstack/history": "1.162.1",
"@tanstack/router-core": "1.171.24"
"@tanstack/router-core": "1.171.25"
},

@@ -105,3 +105,9 @@ "devDependencies": {

"vite-plugin-solid": "^2.11.10",
"zod": "^4.4.3"
"zod": "^4.4.3",
"@tanstack/vite-config": "0.5.2",
"vitest": "^4.1.4",
"jsdom": "^25.0.1",
"@arethetypeswrong/cli": "^0.18.4",
"publint": "^0.3.16",
"rimraf": "^6.1.2"
},

@@ -108,0 +114,0 @@ "peerDependencies": {

@@ -254,8 +254,11 @@ import * as Solid from 'solid-js'

const doPreload = () =>
router
.preloadRoute({ ...options, _builtLocation: next() } as any)
.catch((err: any) => {
console.warn(err)
console.warn(preloadWarning)
})
(
router.preloadRoute as (
opts: typeof options,
builtLocation: ReturnType<typeof router.buildLocation>,
) => ReturnType<typeof router.preloadRoute>
)(options, next()).catch((err: any) => {
console.warn(err)
console.warn(preloadWarning)
})

@@ -262,0 +265,0 @@ const [ref, setRef] = Solid.createSignal<Element | null>(null)

@@ -5,3 +5,2 @@ import * as Solid from 'solid-js'

import { useRouter } from './useRouter'
import type { AnyRouteMatch } from '@tanstack/router-core'

@@ -26,9 +25,40 @@ function getResolvedLocation(router: ReturnType<typeof useRouter>) {

let transitionOwner: Array<AnyRouteMatch> | undefined
router.startTransition = async (fn, expected) => {
transitionOwner = expected
await Solid.startTransition(fn)
return transitionOwner === expected
let settleCurrent: ((rendered: boolean) => void) | undefined
router.startTransition = (fn) => {
settleCurrent?.(false)
return new Promise((resolve, reject) => {
const settle = (rendered: boolean) => {
if (settleCurrent !== settle) {
return
}
settleCurrent = undefined
resolve(rendered)
}
const fail = (cause: unknown) => {
if (settleCurrent !== settle) {
return
}
settleCurrent = undefined
reject(cause)
}
settleCurrent = settle
void Solid.startTransition(() => {
// A newer publication may supersede this deferred callback.
if (settleCurrent === settle) {
try {
fn()
} catch (cause) {
fail(cause)
}
}
}).then(() => settle(true), fail)
})
}
Solid.onCleanup(() => {
settleCurrent?.(false)
})
// Subscribe to location changes

@@ -35,0 +65,0 @@ // and try to load the new location