@tanstack/solid-router 1.162.8 → 1.162.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/link.cjs CHANGED
@@ -27,6 +27,7 @@ function _interopNamespaceDefault(e) {
27
27
  }
28
28
  const Solid__namespace = /* @__PURE__ */ _interopNamespaceDefault(Solid);
29
29
  var _tmpl$ = /* @__PURE__ */ Solid$1.template(`<svg><a>`);
30
+ const timeoutMap = /* @__PURE__ */ new WeakMap();
30
31
  function useLinkProps(options) {
31
32
  const router = useRouter.useRouter();
32
33
  const [isTransitioning, setIsTransitioning] = Solid__namespace.createSignal(false);
@@ -190,28 +191,29 @@ function useLinkProps(options) {
190
191
  }
191
192
  };
192
193
  const enqueueIntentPreload = (e) => {
193
- if (local.disabled || !preload()) return;
194
- const eventTarget = e.currentTarget || e.target || {};
195
- if (eventTarget.preloadTimeout) {
194
+ if (local.disabled || preload() !== "intent") return;
195
+ if (!preloadDelay()) {
196
+ doPreload();
196
197
  return;
197
198
  }
198
- eventTarget.preloadTimeout = setTimeout(() => {
199
- eventTarget.preloadTimeout = null;
199
+ const eventTarget = e.currentTarget || e.target;
200
+ if (!eventTarget || timeoutMap.has(eventTarget)) return;
201
+ timeoutMap.set(eventTarget, setTimeout(() => {
202
+ timeoutMap.delete(eventTarget);
200
203
  doPreload();
201
- }, preloadDelay());
204
+ }, preloadDelay()));
202
205
  };
203
206
  const handleTouchStart = (_2) => {
204
- if (local.disabled) return;
205
- if (preload()) {
206
- doPreload();
207
- }
207
+ if (local.disabled || preload() !== "intent") return;
208
+ doPreload();
208
209
  };
209
210
  const handleLeave = (e) => {
210
211
  if (local.disabled) return;
211
- const eventTarget = e.currentTarget || e.target || {};
212
- if (eventTarget.preloadTimeout) {
213
- clearTimeout(eventTarget.preloadTimeout);
214
- eventTarget.preloadTimeout = null;
212
+ const eventTarget = e.currentTarget || e.target;
213
+ if (eventTarget) {
214
+ const id = timeoutMap.get(eventTarget);
215
+ clearTimeout(id);
216
+ timeoutMap.delete(eventTarget);
215
217
  }
216
218
  };
217
219
  function callHandler(event, handler) {
@@ -1 +1 @@
1
- {"version":3,"file":"link.cjs","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkCurrentTargetElement,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || !preload()) return\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n clearTimeout(eventTarget.preloadTimeout)\n eventTarget.preloadTimeout = null\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","currentSearch","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","preloadTimeout","setTimeout","handleTouchStart","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,SAASA,aAOdC,SAC2B;AAC3B,QAAMC,SAASC,UAAAA,UAAAA;AACf,QAAM,CAACC,iBAAiBC,kBAAkB,IAAIC,iBAAMC,aAAa,KAAK;AACtE,QAAMC,oBAAoB,CAACC,SAAAA,YAAY,CAAC,CAACP,OAAOD,QAAQS;AACxD,QAAMC,cAAcC,WAAAA,YAAAA;AAEpB,MAAIC,mBAAmB;AAEvB,QAAM,CAACC,OAAOC,IAAI,IAAIT,iBAAMU,WAC1BV,iBAAMW,WACJ;AAAA,IACEC,aAAaA,OAAO;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,IAC7BC,eAAeA,OAAO,CAAA;AAAA,EAAC,GAEzBnB,OACF,GACA,CACE,eACA,iBACA,iBACA,MACA,WACA,gBACA,sBACA,WACA,mBACA,eACA,kBACA,UACA,YACA,SACA,SACA,WACA,UACA,WACA,gBACA,gBACA,eACA,cACA,gBACA,eAAe,CAEnB;AA8BA,QAAM,CAACoB,GAAGC,iBAAiB,IAAIhB,iBAAMU,WAAWD,MAAM,CACpD,UACA,UACA,QACA,SACA,QACA,kBACA,gBAAgB,CACjB;AAED,QAAMQ,kBAAkBC,eAAAA,eAAe;AAAA,IACrCC,QAASC,OAAMA,EAAEC;AAAAA,EAAAA,CAClB;AAED,QAAMC,gBAAgBJ,eAAAA,eAAe;AAAA,IACnCC,QAASC,CAAAA,MAAMA,EAAEC,SAASE;AAAAA,EAAAA,CAC3B;AAED,QAAMC,OAAO7B,QAAQ6B;AAErB,QAAMC,WAAWA,MAAM;AACrB,WAAO;AAAA,MACL,GAAG9B;AAAAA,MACH6B;AAAAA,IAAAA;AAAAA,EAEJ;AAEA,QAAME,OAAO1B,iBAAM2B,WAAW,MAAM;AAClCL,kBAAAA;AACA,WAAO1B,OAAOgC,cAAcH,UAAiB;AAAA,EAC/C,CAAC;AAED,QAAMI,aAAa7B,iBAAM2B,WAAW,MAAM;AACxC,QAAIF,SAAAA,EAAWK,SAAU,QAAOC;AAKhC,UAAMV,WAAWK,OAAOM,kBAAkBN,KAAAA;AAC1C,UAAMO,aAAaZ,SAASY;AAC5B,UAAMC,WAAWb,SAASa;AAE1B,QAAIA,UAAU;AACZ,aAAO;AAAA,QAAEC,MAAMF;AAAAA,QAAYC,UAAU;AAAA,MAAA;AAAA,IACvC;AAEA,WAAO;AAAA,MACLC,MAAMvC,OAAOwC,QAAQC,WAAWJ,UAAU,KAAK;AAAA,MAC/CC,UAAU;AAAA,IAAA;AAAA,EAEd,CAAC;AAED,QAAMI,eAAetC,iBAAM2B,WAAW,MAAM;AAC1C,UAAMY,QAAQV,WAAAA;AACd,QAAIU,OAAOL,UAAU;AAEnB,UAAIM,WAAAA,oBAAoBD,MAAMJ,MAAMvC,OAAO6C,iBAAiB,GAAG;AAC7D,YAAIC,QAAQC,IAAIC,aAAa,cAAc;AACzCC,kBAAQC,KAAK,yCAAyCP,MAAMJ,IAAI,EAAE;AAAA,QACpE;AACA,eAAOJ;AAAAA,MACT;AACA,aAAOQ,MAAMJ;AAAAA,IACf;AACA,UAAMY,KAAKtB,WAAWsB;AACtB,UAAMC,iBACJ,OAAOD,OAAO,YACdA,GAAGE,WAAW,CAAC,MAAM;AAAA,IACrBF,GAAGE,WAAW,CAAC,MAAM;AACvB,QAAID,eAAgB,QAAOjB;AAC3B,QAAI;AACF,UAAImB,IAAIH,EAAS;AAEjB,UAAIP,+BAAoBO,IAAcnD,OAAO6C,iBAAiB,GAAG;AAC/D,YAAIC,QAAQC,IAAIC,aAAa,cAAc;AACzCC,kBAAQC,KAAK,yCAAyCC,EAAE,EAAE;AAAA,QAC5D;AACA,eAAOhB;AAAAA,MACT;AACA,aAAOgB;AAAAA,IACT,QAAQ;AAAA,IAAC;AACT,WAAOhB;AAAAA,EACT,CAAC;AAED,QAAMoB,UAAUnD,iBAAM2B,WAAW,MAAM;AACrC,QAAIF,SAAAA,EAAW2B,kBAAkBd,gBAAgB;AAC/C,aAAO;AAAA,IACT;AACA,WAAO9B,MAAM2C,WAAWvD,OAAOD,QAAQ0D;AAAAA,EACzC,CAAC;AACD,QAAMC,eAAeA,MACnB9C,MAAM8C,gBAAgB1D,OAAOD,QAAQ4D,uBAAuB;AAE9D,QAAMC,WAAWxD,iBAAM2B,WAAW,MAAM;AACtC,QAAIW,aAAAA,EAAgB,QAAO;AAC3B,QAAI9B,MAAMiD,eAAeC,OAAO;AAC9B,YAAMC,YAAYC,yBAChB3C,kBAAkB4C,UAClBnC,OAAOmC,UACPjE,OAAOkE,QACT;AACA,UAAI,CAACH,WAAW;AACd,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,YAAMI,mBAAmBC,+BACvB/C,kBAAkB4C,UAClBjE,OAAOkE,QACT,EAAEG,MAAM,GAAG;AACX,YAAMC,gBAAgBF,+BACpBtC,QAAQmC,UACRjE,OAAOkE,QACT,GAAGG,MAAM,GAAG;AAEZ,YAAME,mBAAmBD,eAAeE,MACtC,CAACC,GAAGC,MAAMD,MAAMN,iBAAiBO,CAAC,CACpC;AACA,UAAI,CAACH,kBAAkB;AACrB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI3D,MAAMiD,eAAec,iBAAiB,MAAM;AAC9C,YAAMC,aAAaC,WAAAA,UAAUxD,gBAAAA,EAAkByD,QAAQhD,KAAAA,EAAOgD,QAAQ;AAAA,QACpEC,SAAS,CAACnE,MAAMiD,eAAeC;AAAAA,QAC/BkB,iBAAiB,CAACpE,MAAMiD,eAAeoB;AAAAA,MAAAA,CACxC;AACD,UAAI,CAACL,YAAY;AACf,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAIhE,MAAMiD,eAAeqB,aAAa;AACpC,YAAMC,cACJ7E,qBAAqB,CAACG,gBAAgB,KAAKY,kBAAkB+D;AAC/D,aAAOD,gBAAgBrD,OAAOsD;AAAAA,IAChC;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAMC,YAAYA,MAChBrF,OAAOsF,aAAazD,UAAiB,EAAE0D,MAAM,CAACC,QAAa;AACzDvC,YAAQC,KAAKsC,GAAG;AAChBvC,YAAQC,KAAKuC,yBAAc;AAAA,EAC7B,CAAC;AAEH,QAAMC,4BAA4BA,CAChCC,UACG;AACH,QAAIA,OAAOC,gBAAgB;AACzBP,gBAAAA;AAAAA,IACF;AAAA,EACF;AAEA,QAAM,CAACQ,KAAKC,MAAM,IAAI1F,iBAAMC,aAA6B,IAAI;AAE7D0F,QAAAA,wBACEF,KACAH,2BACA;AAAA,IAAEM,YAAY;AAAA,EAAA,GACd;AAAA,IAAE9D,UAAU,CAAC,CAACtB,MAAMsB,YAAY,EAAEqB,cAAc;AAAA,EAAA,CAClD;AAEAnD,mBAAM6F,aAAa,MAAM;AACvB,QAAItF,kBAAkB;AACpB;AAAA,IACF;AACA,QAAI,CAACC,MAAMsB,YAAYqB,QAAAA,MAAc,UAAU;AAC7C8B,gBAAAA;AACA1E,yBAAmB;AAAA,IACrB;AAAA,EACF,CAAC;AAED,MAAI+B,gBAAgB;AAClB,WAAOtC,iBAAMW,WACXK,mBACA;AAAA,MACEyE,KAAKK,KAAAA,UAAUJ,QAAQjE,SAAAA,EAAWgE,GAAG;AAAA,MACrCtD,MAAMG,aAAAA;AAAAA,IAAa,GAErBtC,iBAAMU,WAAWF,OAAO,CACtB,UACA,YACA,SACA,SACA,WACA,UACA,WACA,gBACA,gBACA,cACA,eACA,cAAc,CACf,EAAE,CAAC,CACN;AAAA,EACF;AAGA,QAAMuF,cAAcA,CAACC,MAAkB;AAErC,UAAMC,gBACJD,EAAEE,cACFC,aAAa,QAAQ;AACvB,UAAMC,kBACJ5F,MAAM6F,WAAWtE,SAAYvB,MAAM6F,SAASJ;AAE9C,QACE,CAACzF,MAAMsB,YACP,CAACwE,YAAYN,CAAC,KACd,CAACA,EAAEO,qBACF,CAACH,mBAAmBA,oBAAoB,YACzCJ,EAAEQ,WAAW,GACb;AACAR,QAAES,eAAAA;AAEF1G,yBAAmB,IAAI;AAEvB,YAAM2G,QAAQ9G,OAAO+G,UAAU,cAAc,MAAM;AACjDD,cAAAA;AACA3G,2BAAmB,KAAK;AAAA,MAC1B,CAAC;AAIDH,aAAOgH,SAAS;AAAA,QACd,GAAGnF,SAAAA;AAAAA,QACHoF,SAASrG,MAAMqG;AAAAA,QACfC,aAAatG,MAAMsG;AAAAA,QACnBC,oBAAoBvG,MAAMuG;AAAAA,QAC1BC,iBAAiBxG,MAAMwG;AAAAA,QACvBC,gBAAgBzG,MAAMyG;AAAAA,QACtBC,eAAe1G,MAAM0G;AAAAA,MAAAA,CACtB;AAAA,IACH;AAAA,EACF;AAEA,QAAMC,uBAAuBA,CAACnB,MAA+B;AAC3D,QAAIxF,MAAMsB,YAAY,CAACqB,UAAW;AAClC,UAAMiE,cAAepB,EAAEE,iBACrBF,EAAEK,UACF,CAAA;AAEF,QAAIe,YAAYC,gBAAgB;AAC9B;AAAA,IACF;AAEAD,gBAAYC,iBAAiBC,WAAW,MAAM;AAC5CF,kBAAYC,iBAAiB;AAC7BpC,gBAAAA;AAAAA,IACF,GAAG3B,cAAc;AAAA,EACnB;AAEA,QAAMiE,mBAAmBA,CAACxG,OAAkB;AAC1C,QAAIP,MAAMsB,SAAU;AACpB,QAAIqB,WAAW;AACb8B,gBAAAA;AAAAA,IACF;AAAA,EACF;AAEA,QAAMuC,cAAcA,CAACxB,MAA+B;AAClD,QAAIxF,MAAMsB,SAAU;AACpB,UAAMsF,cAAepB,EAAEE,iBACrBF,EAAEK,UACF,CAAA;AAEF,QAAIe,YAAYC,gBAAgB;AAC9BI,mBAAaL,YAAYC,cAAc;AACvCD,kBAAYC,iBAAiB;AAAA,IAC/B;AAAA,EACF;AAGA,WAASK,YACPC,OACAC,SACA;AACA,QAAIA,SAAS;AACX,UAAI,OAAOA,YAAY,YAAY;AACjCA,gBAAQD,KAAK;AAAA,MACf,OAAO;AACLC,gBAAQ,CAAC,EAAEA,QAAQ,CAAC,GAAGD,KAAK;AAAA,MAC9B;AAAA,IACF;AAEA,WAAOA,MAAMpB;AAAAA,EACf;AAEA,WAASsB,qBACPC,UACA;AACA,WAAO,CAACH,UAAe;AACrB,iBAAWC,WAAWE,UAAU;AAC9BJ,oBAAYC,OAAOC,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAGA,QAAMG,sBAEFA,MACFvE,SAAAA,IAAcwE,WAAAA,iBAAiBxH,MAAMI,aAAoB,CAAA,CAAE,KAAK,CAAA,IAAM,CAAA;AAGxE,QAAMqH,wBAGoCA,MACxCzE,aAAa,CAAA,IAAKwE,WAAAA,iBAAiBxH,MAAMM,eAAe,EAAE;AAE5D,QAAMoH,oBAAoBA,MACxB,CAAC1H,MAAMK,OAAOkH,sBAAsBlH,OAAOoH,sBAAAA,EAAwBpH,KAAK,EACrEsH,OAAOC,OAAO,EACdC,KAAK,GAAG;AAEb,QAAMC,gBAAgBA,OAAO;AAAA,IAC3B,GAAG9H,MAAM+H;AAAAA,IACT,GAAGR,sBAAsBQ;AAAAA,IACzB,GAAGN,wBAAwBM;AAAAA,EAAAA;AAG7B,SAAOvI,iBAAMW,WACXK,mBACA+G,qBACAE,uBACA,MAAM;AACJ,WAAO;AAAA,MACL9F,MAAMN,cAAcM;AAAAA,MACpBsD,KAAKK,KAAAA,UAAUJ,QAAQjE,SAAAA,EAAWgE,GAAG;AAAA,MACrC+C,SAASX,qBAAqB,CAACrH,MAAMgI,SAASzC,WAAW,CAAC;AAAA,MAC1D0C,QAAQZ,qBAAqB,CAACrH,MAAMiI,QAAQjB,WAAW,CAAC;AAAA,MACxDkB,SAASb,qBAAqB,CAACrH,MAAMkI,SAASvB,oBAAoB,CAAC;AAAA,MACnEwB,cAAcd,qBAAqB,CACjCrH,MAAMmI,cACNxB,oBAAoB,CACrB;AAAA,MACDyB,aAAaf,qBAAqB,CAChCrH,MAAMoI,aACNzB,oBAAoB,CACrB;AAAA,MACD0B,cAAchB,qBAAqB,CAACrH,MAAMqI,cAAcrB,WAAW,CAAC;AAAA,MACpEsB,YAAYjB,qBAAqB,CAACrH,MAAMsI,YAAYtB,WAAW,CAAC;AAAA,MAChEuB,cAAclB,qBAAqB,CACjCrH,MAAMuI,cACNxB,gBAAgB,CACjB;AAAA,MACDzF,UAAU,CAAC,CAACtB,MAAMsB;AAAAA,MAClBuE,QAAQ7F,MAAM6F;AAAAA,MACd,IAAI,MAAM;AACR,cAAMjF,IAAIkH,cAAAA;AACV,eAAOU,OAAOC,KAAK7H,CAAC,EAAE8H,SAAS;AAAA,UAAEX,OAAOnH;AAAAA,QAAAA,IAAM,CAAA;AAAA,MAChD,GAAA;AAAA,MACA,IAAI,MAAM;AACR,cAAM+H,IAAIjB,kBAAAA;AACV,eAAOiB,IAAI;AAAA,UAAEtI,OAAOsI;AAAAA,QAAAA,IAAM,CAAA;AAAA,MAC5B,GAAA;AAAA,MACA,GAAI3I,MAAMsB,YAAY;AAAA,QACpBsH,MAAM;AAAA,QACN,iBAAiB;AAAA,MAAA;AAAA,MAEnB,GAAI5F,cAAc;AAAA,QAAE,eAAe;AAAA,QAAU,gBAAgB;AAAA,MAAA;AAAA,MAC7D,GAAI1D,qBAAqB;AAAA,QAAE,sBAAsB;AAAA,MAAA;AAAA,IAAgB;AAAA,EAErE,CACF;AACF;AAoHO,SAASuJ,WACdC,MACsB;AACtB,SAAQC,CAAAA,UAAKC,QAAAA,gBAAMC,MAAIC,QAAAA,WAAKH,OAAK;AAAA,IAAEI,UAAUL;AAAAA,EAAAA,CAAI,CAAA;AACnD;AAEO,MAAMG,OAA4BF,CAAAA,UAAU;AACjD,QAAM,CAAC/I,OAAOC,IAAI,IAAIT,iBAAMU,WAC1B6I,OACA,CAAC,YAAY,UAAU,CACzB;AAEA,QAAM,CAACxI,GAAG6I,SAAS,IAAI5J,iBAAMU,WAC3BhB,aAAae,IAAsB,GACnC,CAAC,MAAM,CACT;AAEA,QAAMoJ,WAAW7J,iBAAM2B,WAAW,MAAM;AACtC,UAAMmI,KAAKtJ,MAAMqJ;AACjB,QAAI,OAAOC,OAAO,YAAY;AAC5B,aAAOA,GAAG;AAAA,QACR,IAAItG,WAAW;AACb,iBAAQoG,UAAkB,aAAa,MAAM;AAAA,QAC/C;AAAA,QACA,IAAI9J,kBAAkB;AACpB,iBAAQ8J,UAAkB,oBAAoB,MAAM;AAAA,QACtD;AAAA,MAAA,CACD;AAAA,IACH;AAEA,WAAOE;AAAAA,EACT,CAAC;AAED,MAAItJ,MAAMmJ,aAAa,OAAO;AAC5B,UAAM,CAAC5I,IAAGgJ,YAAY,IAAI/J,iBAAMU,WAAWkJ,WAAW,CAAC,OAAO,CAAC;AAC/D,YAAA,MAAA;AAAA,UAAAI,OAAAC,OAAAA,GAAAC,QAAAF,KAAAG;AAAAC,cAAAA,OAAAF,OAEWH,cAAY,OAAA,IAAA;AAAAM,cAAAA,OAAAH,OAAGL,QAAQ;AAAA,aAAAG;AAAAA,IAAA,GAAA;AAAA,EAGpC;AAEA,SAAAR,QAAAA,gBACGc,QAAAA,SAAOZ,mBAAA;AAAA,IAAA,IAACa,YAAS;AAAA,aAAEC,QAAAA,KAAA,MAAA,CAAA,CAAAhK,MAAMmJ,QAAQ,MAAGnJ,MAAMmJ,WAAW;AAAA,IAAG;AAAA,EAAA,GAAMC,WAAS;AAAA,IAAA,IAAAC,WAAA;AAAA,aACrEA,SAAAA;AAAAA,IAAU;AAAA,EAAA,CAAA,CAAA;AAGjB;AAEA,SAASvD,YAAYN,GAAe;AAClC,SAAO,CAAC,EAAEA,EAAEyE,WAAWzE,EAAE0E,UAAU1E,EAAE2E,WAAW3E,EAAE4E;AACpD;AAkBO,MAAMC,cAAmClL,CAAAA,YAAY;AAC1D,SAAOA;AACT;;;;;"}
1
+ {"version":3,"file":"link.cjs","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["timeoutMap","WeakMap","useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","currentSearch","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","has","set","setTimeout","delete","handleTouchStart","handleLeave","id","get","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
package/dist/esm/link.js CHANGED
@@ -8,6 +8,7 @@ import { useRouter } from "./useRouter.js";
8
8
  import { useIntersectionObserver } from "./utils.js";
9
9
  import { useHydrated } from "./ClientOnly.js";
10
10
  var _tmpl$ = /* @__PURE__ */ template(`<svg><a>`);
11
+ const timeoutMap = /* @__PURE__ */ new WeakMap();
11
12
  function useLinkProps(options) {
12
13
  const router = useRouter();
13
14
  const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
@@ -171,28 +172,29 @@ function useLinkProps(options) {
171
172
  }
172
173
  };
173
174
  const enqueueIntentPreload = (e) => {
174
- if (local.disabled || !preload()) return;
175
- const eventTarget = e.currentTarget || e.target || {};
176
- if (eventTarget.preloadTimeout) {
175
+ if (local.disabled || preload() !== "intent") return;
176
+ if (!preloadDelay()) {
177
+ doPreload();
177
178
  return;
178
179
  }
179
- eventTarget.preloadTimeout = setTimeout(() => {
180
- eventTarget.preloadTimeout = null;
180
+ const eventTarget = e.currentTarget || e.target;
181
+ if (!eventTarget || timeoutMap.has(eventTarget)) return;
182
+ timeoutMap.set(eventTarget, setTimeout(() => {
183
+ timeoutMap.delete(eventTarget);
181
184
  doPreload();
182
- }, preloadDelay());
185
+ }, preloadDelay()));
183
186
  };
184
187
  const handleTouchStart = (_2) => {
185
- if (local.disabled) return;
186
- if (preload()) {
187
- doPreload();
188
- }
188
+ if (local.disabled || preload() !== "intent") return;
189
+ doPreload();
189
190
  };
190
191
  const handleLeave = (e) => {
191
192
  if (local.disabled) return;
192
- const eventTarget = e.currentTarget || e.target || {};
193
- if (eventTarget.preloadTimeout) {
194
- clearTimeout(eventTarget.preloadTimeout);
195
- eventTarget.preloadTimeout = null;
193
+ const eventTarget = e.currentTarget || e.target;
194
+ if (eventTarget) {
195
+ const id = timeoutMap.get(eventTarget);
196
+ clearTimeout(id);
197
+ timeoutMap.delete(eventTarget);
196
198
  }
197
199
  };
198
200
  function callHandler(event, handler) {
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkCurrentTargetElement,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || !preload()) return\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n clearTimeout(eventTarget.preloadTimeout)\n eventTarget.preloadTimeout = null\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","currentSearch","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","preloadTimeout","setTimeout","handleTouchStart","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n deepEqual,\n exactPathTest,\n functionalUpdate,\n isDangerousProtocol,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n AnyRouter,\n Constrain,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): Solid.ComponentProps<'a'> {\n const router = useRouter()\n const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)\n const shouldHydrateHash = !isServer && !!router.options.ssr\n const hasHydrated = useHydrated()\n\n let hasRenderFetched = false\n\n const [local, rest] = Solid.splitProps(\n Solid.mergeProps(\n {\n activeProps: () => ({ class: 'active' }),\n inactiveProps: () => ({}),\n },\n options,\n ),\n [\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n ],\n )\n\n // const {\n // // custom props\n // activeProps = () => ({ class: 'active' }),\n // inactiveProps = () => ({}),\n // activeOptions,\n // to,\n // preload: userPreload,\n // preloadDelay: userPreloadDelay,\n // hashScrollIntoView,\n // replace,\n // startTransition,\n // resetScroll,\n // viewTransition,\n // // element props\n // children,\n // target,\n // disabled,\n // style,\n // class,\n // onClick,\n // onFocus,\n // onMouseEnter,\n // onMouseLeave,\n // onTouchStart,\n // ignoreBlocker,\n // ...rest\n // } = options\n\n const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'unsafeRelative',\n ])\n\n const currentLocation = useRouterState({\n select: (s) => s.location,\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n const from = options.from\n\n const _options = () => {\n return {\n ...options,\n from,\n }\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const hrefOption = Solid.createMemo(() => {\n if (_options().disabled) return undefined\n // Use publicHref - it contains the correct href for display\n // When a rewrite changes the origin, publicHref is the full URL\n // Otherwise it's the origin-stripped path\n // This avoids constructing URL objects in the hot path\n const location = next().maskedLocation ?? next()\n const publicHref = location.publicHref\n const external = location.external\n\n if (external) {\n return { href: publicHref, external: true }\n }\n\n return {\n href: router.history.createHref(publicHref) || '/',\n external: false,\n }\n })\n\n const externalLink = Solid.createMemo(() => {\n const _href = hrefOption()\n if (_href?.external) {\n // Block dangerous protocols for external links\n if (isDangerousProtocol(_href.href, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${_href.href}`)\n }\n return undefined\n }\n return _href.href\n }\n const to = _options().to\n const isSafeInternal =\n typeof to === 'string' &&\n to.charCodeAt(0) === 47 && // '/'\n to.charCodeAt(1) !== 47 // but not '//'\n if (isSafeInternal) return undefined\n try {\n new URL(to as any)\n // Block dangerous protocols like javascript:, blob:, data:\n if (isDangerousProtocol(to as string, router.protocolAllowlist)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Blocked Link with dangerous protocol: ${to}`)\n }\n return undefined\n }\n return to\n } catch {}\n return undefined\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument || externalLink()) {\n return false\n }\n return local.preload ?? router.options.defaultPreload\n })\n const preloadDelay = () =>\n local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n const isActive = Solid.createMemo(() => {\n if (externalLink()) return false\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n currentLocation().pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n currentLocation().pathname,\n router.basepath,\n ).split('/')\n const nextPathSplit = removeTrailingSlash(\n next()?.pathname,\n router.basepath,\n )?.split('/')\n\n const pathIsFuzzyEqual = nextPathSplit?.every(\n (d, i) => d === currentPathSplit[i],\n )\n if (!pathIsFuzzyEqual) {\n return false\n }\n }\n\n if (local.activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(currentLocation().search, next().search, {\n partial: !local.activeOptions?.exact,\n ignoreUndefined: !local.activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (local.activeOptions?.includeHash) {\n const currentHash =\n shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash\n return currentHash === next().hash\n }\n return true\n })\n\n const doPreload = () =>\n router.preloadRoute(_options() as any).catch((err: any) => {\n console.warn(err)\n console.warn(preloadWarning)\n })\n\n const preloadViewportIoCallback = (\n entry: IntersectionObserverEntry | undefined,\n ) => {\n if (entry?.isIntersecting) {\n doPreload()\n }\n }\n\n const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: !!local.disabled || !(preload() === 'viewport') },\n )\n\n Solid.createEffect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!local.disabled && preload() === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n if (externalLink()) {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref: mergeRefs(setRef, _options().ref),\n href: externalLink(),\n },\n Solid.splitProps(local, [\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onBlur',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOut',\n 'onMouseOver',\n 'onTouchStart',\n ])[0],\n ) as any\n }\n\n // The click handler\n const handleClick = (e: MouseEvent) => {\n // Check actual element's target attribute as fallback\n const elementTarget = (\n e.currentTarget as HTMLAnchorElement | SVGAElement\n ).getAttribute('target')\n const effectiveTarget =\n local.target !== undefined ? local.target : elementTarget\n\n if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n e.preventDefault()\n\n setIsTransitioning(true)\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n setIsTransitioning(false)\n })\n\n // All is well? Navigate!\n // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n router.navigate({\n ..._options(),\n replace: local.replace,\n resetScroll: local.resetScroll,\n hashScrollIntoView: local.hashScrollIntoView,\n startTransition: local.startTransition,\n viewTransition: local.viewTransition,\n ignoreBlocker: local.ignoreBlocker,\n })\n }\n }\n\n const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {\n if (local.disabled || preload() !== 'intent') return\n\n if (!preloadDelay()) {\n doPreload()\n return\n }\n\n const eventTarget = e.currentTarget || e.target\n\n if (!eventTarget || timeoutMap.has(eventTarget)) return\n\n timeoutMap.set(\n eventTarget,\n setTimeout(() => {\n timeoutMap.delete(eventTarget)\n doPreload()\n }, preloadDelay()),\n )\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (local.disabled || preload() !== 'intent') return\n doPreload()\n }\n\n const handleLeave = (e: MouseEvent | FocusEvent) => {\n if (local.disabled) return\n const eventTarget = e.currentTarget || e.target\n\n if (eventTarget) {\n const id = timeoutMap.get(eventTarget)\n clearTimeout(id)\n timeoutMap.delete(eventTarget)\n }\n }\n\n /** Call a JSX.EventHandlerUnion with the event. */\n function callHandler<T, TEvent extends Event>(\n event: TEvent & { currentTarget: T; target: Element },\n handler: Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n ) {\n if (handler) {\n if (typeof handler === 'function') {\n handler(event)\n } else {\n handler[0](handler[1], event)\n }\n }\n\n return event.defaultPrevented\n }\n\n function composeEventHandlers<T>(\n handlers: Array<Solid.JSX.EventHandlerUnion<T, any> | undefined>,\n ) {\n return (event: any) => {\n for (const handler of handlers) {\n callHandler(event, handler)\n }\n }\n }\n\n // Get the active props\n const resolvedActiveProps: () => Omit<Solid.ComponentProps<'a'>, 'style'> & {\n style?: Solid.JSX.CSSProperties\n } = () =>\n isActive() ? (functionalUpdate(local.activeProps as any, {}) ?? {}) : {}\n\n // Get the inactive props\n const resolvedInactiveProps: () => Omit<\n Solid.ComponentProps<'a'>,\n 'style'\n > & { style?: Solid.JSX.CSSProperties } = () =>\n isActive() ? {} : functionalUpdate(local.inactiveProps, {})\n\n const resolvedClassName = () =>\n [local.class, resolvedActiveProps().class, resolvedInactiveProps().class]\n .filter(Boolean)\n .join(' ')\n\n const resolvedStyle = () => ({\n ...local.style,\n ...resolvedActiveProps().style,\n ...resolvedInactiveProps().style,\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: hrefOption()?.href,\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onBlur: composeEventHandlers([local.onBlur, handleLeave]),\n onFocus: composeEventHandlers([local.onFocus, enqueueIntentPreload]),\n onMouseEnter: composeEventHandlers([\n local.onMouseEnter,\n enqueueIntentPreload,\n ]),\n onMouseOver: composeEventHandlers([\n local.onMouseOver,\n enqueueIntentPreload,\n ]),\n onMouseLeave: composeEventHandlers([local.onMouseLeave, handleLeave]),\n onMouseOut: composeEventHandlers([local.onMouseOut, handleLeave]),\n onTouchStart: composeEventHandlers([\n local.onTouchStart,\n handleTouchStart,\n ]),\n disabled: !!local.disabled,\n target: local.target,\n ...(() => {\n const s = resolvedStyle()\n return Object.keys(s).length ? { style: s } : {}\n })(),\n ...(() => {\n const c = resolvedClassName()\n return c ? { class: c } : {}\n })(),\n ...(local.disabled && {\n role: 'link',\n 'aria-disabled': true,\n }),\n ...(isActive() && { 'data-status': 'active', 'aria-current': 'page' }),\n ...(isTransitioning() && { 'data-transitioning': 'transitioning' }),\n }\n },\n ) as any\n}\n\nexport type UseLinkPropsOptions<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n LinkComponentSolidProps<TComp> & {\n [key: `data-${string}`]: unknown\n }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n /**\n * A function that returns additional props for the `active` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n /**\n * A function that returns additional props for the `inactive` state of this link.\n * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n */\n inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n LinkPropsChildren\n\nexport interface LinkPropsChildren {\n // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n children?:\n | Solid.JSX.Element\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n : never\n\nexport type LinkComponentProps<\n TComp = 'a',\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends string = string,\n TTo extends string | undefined = '.',\n TMaskFrom extends string = TFrom,\n TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<\n in out TComp,\n in out TDefaultFrom extends string = string,\n> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = TDefaultFrom,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n in out TDefaultFrom extends string = string,\n> {\n defaultFrom: TDefaultFrom;\n <\n TRouter extends AnyRouter = RegisteredRouter,\n const TTo extends string | undefined = undefined,\n const TMaskTo extends string = '',\n >(\n props: LinkComponentProps<\n 'a',\n TRouter,\n this['defaultFrom'],\n TTo,\n this['defaultFrom'],\n TMaskTo\n >,\n ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n const [local, rest] = Solid.splitProps(\n props as typeof props & { _asChild: any },\n ['_asChild', 'children'],\n )\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type'],\n )\n\n const children = Solid.createMemo(() => {\n const ch = local.children\n if (typeof ch === 'function') {\n return ch({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n get isTransitioning() {\n return (linkProps as any)['data-transitioning'] === 'transitioning'\n },\n })\n }\n\n return ch satisfies Solid.JSX.Element\n })\n\n if (local._asChild === 'svg') {\n const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n return (\n <svg>\n <a {...svgLinkProps}>{children()}</a>\n </svg>\n )\n }\n\n return (\n <Dynamic component={local._asChild ? local._asChild : 'a'} {...linkProps}>\n {children()}\n </Dynamic>\n )\n}\n\nfunction isCtrlEvent(e: MouseEvent) {\n return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n}\n\nexport type LinkOptionsFnOptions<\n TOptions,\n TComp,\n TRouter extends AnyRouter = RegisteredRouter,\n> =\n TOptions extends ReadonlyArray<any>\n ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp>\n : ValidateLinkOptions<TRouter, TOptions, string, TComp>\n\nexport type LinkOptionsFn<TComp> = <\n const TOptions,\n TRouter extends AnyRouter = RegisteredRouter,\n>(\n options: LinkOptionsFnOptions<TOptions, TComp, TRouter>,\n) => TOptions\n\nexport const linkOptions: LinkOptionsFn<'a'> = (options) => {\n return options as any\n}\n"],"names":["timeoutMap","WeakMap","useLinkProps","options","router","useRouter","isTransitioning","setIsTransitioning","Solid","createSignal","shouldHydrateHash","isServer","ssr","hasHydrated","useHydrated","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentLocation","useRouterState","select","s","location","currentSearch","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","protocolAllowlist","process","env","NODE_ENV","console","warn","to","isSafeInternal","charCodeAt","URL","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","createEffect","mergeRefs","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","target","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","enqueueIntentPreload","eventTarget","has","set","setTimeout","delete","handleTouchStart","handleLeave","id","get","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","onBlur","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","c","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","Dynamic","component","_$memo","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
@@ -7,6 +7,7 @@ import { useRouterState } from './useRouterState';
7
7
  import { useRouter } from './useRouter';
8
8
  import { useIntersectionObserver } from './utils';
9
9
  import { useHydrated } from './ClientOnly';
10
+ const timeoutMap = new WeakMap();
10
11
  export function useLinkProps(options) {
11
12
  const router = useRouter();
12
13
  const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
@@ -253,35 +254,33 @@ export function useLinkProps(options) {
253
254
  }
254
255
  };
255
256
  const enqueueIntentPreload = (e) => {
256
- if (local.disabled || !preload())
257
+ if (local.disabled || preload() !== 'intent')
257
258
  return;
258
- const eventTarget = (e.currentTarget ||
259
- e.target ||
260
- {});
261
- if (eventTarget.preloadTimeout) {
259
+ if (!preloadDelay()) {
260
+ doPreload();
262
261
  return;
263
262
  }
264
- eventTarget.preloadTimeout = setTimeout(() => {
265
- eventTarget.preloadTimeout = null;
263
+ const eventTarget = e.currentTarget || e.target;
264
+ if (!eventTarget || timeoutMap.has(eventTarget))
265
+ return;
266
+ timeoutMap.set(eventTarget, setTimeout(() => {
267
+ timeoutMap.delete(eventTarget);
266
268
  doPreload();
267
- }, preloadDelay());
269
+ }, preloadDelay()));
268
270
  };
269
271
  const handleTouchStart = (_) => {
270
- if (local.disabled)
272
+ if (local.disabled || preload() !== 'intent')
271
273
  return;
272
- if (preload()) {
273
- doPreload();
274
- }
274
+ doPreload();
275
275
  };
276
276
  const handleLeave = (e) => {
277
277
  if (local.disabled)
278
278
  return;
279
- const eventTarget = (e.currentTarget ||
280
- e.target ||
281
- {});
282
- if (eventTarget.preloadTimeout) {
283
- clearTimeout(eventTarget.preloadTimeout);
284
- eventTarget.preloadTimeout = null;
279
+ const eventTarget = e.currentTarget || e.target;
280
+ if (eventTarget) {
281
+ const id = timeoutMap.get(eventTarget);
282
+ clearTimeout(id);
283
+ timeoutMap.delete(eventTarget);
285
284
  }
286
285
  };
287
286
  /** Call a JSX.EventHandlerUnion with the event. */
@@ -1 +1 @@
1
- {"version":3,"file":"link.jsx","sourceRoot":"","sources":["../../src/link.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.jsx","sourceRoot":"","sources":["../../src/link.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-router",
3
- "version": "1.162.8",
3
+ "version": "1.162.9",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -92,7 +92,7 @@
92
92
  "tiny-invariant": "^1.3.3",
93
93
  "tiny-warning": "^1.0.3",
94
94
  "@tanstack/history": "1.161.4",
95
- "@tanstack/router-core": "1.162.6"
95
+ "@tanstack/router-core": "1.162.9"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@solidjs/testing-library": "^0.8.10",
package/src/link.tsx CHANGED
@@ -22,7 +22,6 @@ import { useHydrated } from './ClientOnly'
22
22
  import type {
23
23
  AnyRouter,
24
24
  Constrain,
25
- LinkCurrentTargetElement,
26
25
  LinkOptions,
27
26
  RegisteredRouter,
28
27
  RoutePaths,
@@ -32,6 +31,8 @@ import type {
32
31
  ValidateLinkOptionsArray,
33
32
  } from './typePrimitives'
34
33
 
34
+ const timeoutMap = new WeakMap<EventTarget, ReturnType<typeof setTimeout>>()
35
+
35
36
  export function useLinkProps<
36
37
  TRouter extends AnyRouter = RegisteredRouter,
37
38
  TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
@@ -349,37 +350,39 @@ export function useLinkProps<
349
350
  }
350
351
 
351
352
  const enqueueIntentPreload = (e: MouseEvent | FocusEvent) => {
352
- if (local.disabled || !preload()) return
353
- const eventTarget = (e.currentTarget ||
354
- e.target ||
355
- {}) as LinkCurrentTargetElement
353
+ if (local.disabled || preload() !== 'intent') return
356
354
 
357
- if (eventTarget.preloadTimeout) {
355
+ if (!preloadDelay()) {
356
+ doPreload()
358
357
  return
359
358
  }
360
359
 
361
- eventTarget.preloadTimeout = setTimeout(() => {
362
- eventTarget.preloadTimeout = null
363
- doPreload()
364
- }, preloadDelay())
360
+ const eventTarget = e.currentTarget || e.target
361
+
362
+ if (!eventTarget || timeoutMap.has(eventTarget)) return
363
+
364
+ timeoutMap.set(
365
+ eventTarget,
366
+ setTimeout(() => {
367
+ timeoutMap.delete(eventTarget)
368
+ doPreload()
369
+ }, preloadDelay()),
370
+ )
365
371
  }
366
372
 
367
373
  const handleTouchStart = (_: TouchEvent) => {
368
- if (local.disabled) return
369
- if (preload()) {
370
- doPreload()
371
- }
374
+ if (local.disabled || preload() !== 'intent') return
375
+ doPreload()
372
376
  }
373
377
 
374
378
  const handleLeave = (e: MouseEvent | FocusEvent) => {
375
379
  if (local.disabled) return
376
- const eventTarget = (e.currentTarget ||
377
- e.target ||
378
- {}) as LinkCurrentTargetElement
380
+ const eventTarget = e.currentTarget || e.target
379
381
 
380
- if (eventTarget.preloadTimeout) {
381
- clearTimeout(eventTarget.preloadTimeout)
382
- eventTarget.preloadTimeout = null
382
+ if (eventTarget) {
383
+ const id = timeoutMap.get(eventTarget)
384
+ clearTimeout(id)
385
+ timeoutMap.delete(eventTarget)
383
386
  }
384
387
  }
385
388