@tanstack/solid-router 1.112.15 → 1.112.17
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 +16 -14
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/esm/link.js +16 -14
- package/dist/esm/link.js.map +1 -1
- package/dist/source/link.jsx +15 -14
- package/dist/source/link.jsx.map +1 -1
- package/package.json +3 -3
- package/src/link.tsx +15 -14
package/dist/cjs/link.cjs
CHANGED
|
@@ -7,7 +7,7 @@ const routerCore = require("@tanstack/router-core");
|
|
|
7
7
|
const useRouterState = require("./useRouterState.cjs");
|
|
8
8
|
const useRouter = require("./useRouter.cjs");
|
|
9
9
|
const utils = require("./utils.cjs");
|
|
10
|
-
const
|
|
10
|
+
const Matches = require("./Matches.cjs");
|
|
11
11
|
function _interopNamespaceDefault(e) {
|
|
12
12
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
13
13
|
if (e) {
|
|
@@ -47,20 +47,22 @@ function useLinkProps(options) {
|
|
|
47
47
|
const currentSearch = useRouterState.useRouterState({
|
|
48
48
|
select: (s) => s.location.searchStr
|
|
49
49
|
});
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const from = Matches.useMatches({
|
|
51
|
+
select: (matches) => {
|
|
52
|
+
var _a;
|
|
53
|
+
return options.from ?? ((_a = matches[matches.length - 1]) == null ? void 0 : _a.fullPath);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const _options = () => ({
|
|
57
|
+
...options,
|
|
58
|
+
from: from()
|
|
53
59
|
});
|
|
54
|
-
options = {
|
|
55
|
-
from: parentRouteId(),
|
|
56
|
-
...options
|
|
57
|
-
};
|
|
58
60
|
const next = Solid__namespace.createMemo(() => {
|
|
59
61
|
currentSearch();
|
|
60
|
-
return router.buildLocation(
|
|
62
|
+
return router.buildLocation(_options());
|
|
61
63
|
});
|
|
62
64
|
const preload = Solid__namespace.createMemo(() => {
|
|
63
|
-
if (
|
|
65
|
+
if (_options().reloadDocument) {
|
|
64
66
|
return false;
|
|
65
67
|
}
|
|
66
68
|
return local.preload ?? router.options.defaultPreload;
|
|
@@ -97,7 +99,7 @@ function useLinkProps(options) {
|
|
|
97
99
|
return true;
|
|
98
100
|
}
|
|
99
101
|
});
|
|
100
|
-
const doPreload = () => router.preloadRoute(
|
|
102
|
+
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
101
103
|
console.warn(err);
|
|
102
104
|
console.warn(routerCore.preloadWarning);
|
|
103
105
|
});
|
|
@@ -141,7 +143,7 @@ function useLinkProps(options) {
|
|
|
141
143
|
setIsTransitioning(false);
|
|
142
144
|
});
|
|
143
145
|
return router.navigate({
|
|
144
|
-
...
|
|
146
|
+
..._options(),
|
|
145
147
|
replace: local.replace,
|
|
146
148
|
resetScroll: local.resetScroll,
|
|
147
149
|
hashScrollIntoView: local.hashScrollIntoView,
|
|
@@ -207,12 +209,12 @@ function useLinkProps(options) {
|
|
|
207
209
|
const href = Solid__namespace.createMemo(() => {
|
|
208
210
|
const nextLocation = next();
|
|
209
211
|
const maskedLocation = nextLocation == null ? void 0 : nextLocation.maskedLocation;
|
|
210
|
-
return
|
|
212
|
+
return _options().disabled ? void 0 : maskedLocation ? router.history.createHref(maskedLocation.href) : router.history.createHref(nextLocation == null ? void 0 : nextLocation.href);
|
|
211
213
|
});
|
|
212
214
|
return Solid__namespace.mergeProps(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
|
|
213
215
|
return {
|
|
214
216
|
href: href(),
|
|
215
|
-
ref: refs.mergeRefs(setRef,
|
|
217
|
+
ref: refs.mergeRefs(setRef, _options().ref),
|
|
216
218
|
onClick: composeEventHandlers([local.onClick, handleClick]),
|
|
217
219
|
onFocus: composeEventHandlers([local.onFocus, handleFocus]),
|
|
218
220
|
onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),
|
package/dist/cjs/link.cjs.map
CHANGED
|
@@ -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 preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useMatch } from './useMatch'\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 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 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 ])\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const type: Solid.Accessor<'internal' | 'external'> = () => {\n try {\n new URL(`${local.to}`)\n return 'external'\n } catch {}\n return 'internal'\n }\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // In the rare event that the user bypasses type-safety and doesn't supply a `from`\n // we'll use the current route as the `from` location so relative routing works as expected\n const parentRouteId = useMatch({ strict: false, select: (s) => s.pathname })\n\n // Use it as the default `from` location\n options = {\n from: parentRouteId(),\n ...options,\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(options as any)\n })\n\n const preload = Solid.createMemo(() => {\n if (options.reloadDocument) {\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 = useRouterState({\n select: (s) => {\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n s.location.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(s.location.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 return s.location.hash === next().hash\n }\n return true\n },\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 (type() === 'external') {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref,\n get type() {\n return type()\n },\n get href() {\n return local.to\n },\n },\n Solid.splitProps(local, [\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!local.target || local.target === '_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 return 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 } as any)\n }\n }\n\n // The click handler\n const handleFocus = (_: MouseEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleTouchStart = handleFocus\n\n const handleEnter = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload()) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) 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 const href = Solid.createMemo(() => {\n const nextLocation = next()\n const maskedLocation = nextLocation?.maskedLocation\n\n return options.disabled\n ? undefined\n : maskedLocation\n ? router.history.createHref(maskedLocation.href)\n : router.history.createHref(nextLocation?.href)\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: href(),\n ref: mergeRefs(setRef, options.ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onFocus: composeEventHandlers([local.onFocus, handleFocus]),\n onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),\n onMouseOver: composeEventHandlers([local.onMouseOver, handleEnter]),\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 ...(Object.keys(resolvedStyle).length && { style: resolvedStyle }),\n ...(resolvedClassName() && { class: resolvedClassName() }),\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<TComp> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...(props as any)} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props: any) => {\n const [local, rest] = Solid.splitProps(props, ['_asChild'])\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type', 'children'],\n )\n\n const children = () =>\n typeof rest.children === 'function'\n ? rest.children({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n })\n : rest.children\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","type","URL","to","currentSearch","useRouterState","select","s","location","searchStr","parentRouteId","useMatch","strict","pathname","from","next","createMemo","buildLocation","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","hash","doPreload","preloadRoute","catch","err","console","warn","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","disabled","createEffect","href","handleClick","e","isCtrlEvent","defaultPrevented","target","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","nextLocation","maskedLocation","undefined","history","createHref","mergeRefs","onClick","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","Dynamic","component","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
|
|
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 preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useMatches } from './Matches'\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 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 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 ])\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const type: Solid.Accessor<'internal' | 'external'> = () => {\n try {\n new URL(`${local.to}`)\n return 'external'\n } catch {}\n return 'internal'\n }\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // when `from` is not supplied, use the leaf route of the current matches as the `from` location\n // so relative routing works as expected\n const from = useMatches({\n select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,\n })\n\n const _options = () => ({\n ...options,\n from: from(),\n })\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument) {\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 = useRouterState({\n select: (s) => {\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n s.location.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(s.location.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 return s.location.hash === next().hash\n }\n return true\n },\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 (type() === 'external') {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref,\n get type() {\n return type()\n },\n get href() {\n return local.to\n },\n },\n Solid.splitProps(local, [\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!local.target || local.target === '_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 return 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 } as any)\n }\n }\n\n // The click handler\n const handleFocus = (_: MouseEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleTouchStart = handleFocus\n\n const handleEnter = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload()) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) 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 const href = Solid.createMemo(() => {\n const nextLocation = next()\n const maskedLocation = nextLocation?.maskedLocation\n\n return _options().disabled\n ? undefined\n : maskedLocation\n ? router.history.createHref(maskedLocation.href)\n : router.history.createHref(nextLocation?.href)\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: href(),\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onFocus: composeEventHandlers([local.onFocus, handleFocus]),\n onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),\n onMouseOver: composeEventHandlers([local.onMouseOver, handleEnter]),\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 ...(Object.keys(resolvedStyle).length && { style: resolvedStyle }),\n ...(resolvedClassName() && { class: resolvedClassName() }),\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<TComp> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...(props as any)} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props: any) => {\n const [local, rest] = Solid.splitProps(props, ['_asChild'])\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type', 'children'],\n )\n\n const children = () =>\n typeof rest.children === 'function'\n ? rest.children({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n })\n : rest.children\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","type","URL","to","currentSearch","useRouterState","select","s","location","searchStr","from","useMatches","matches","length","fullPath","_options","next","createMemo","buildLocation","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","hash","doPreload","preloadRoute","catch","err","console","warn","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","disabled","createEffect","href","handleClick","e","isCtrlEvent","defaultPrevented","target","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","nextLocation","maskedLocation","undefined","history","createHref","mergeRefs","onClick","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","Dynamic","component","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
|
package/dist/esm/link.js
CHANGED
|
@@ -5,7 +5,7 @@ import { functionalUpdate, preloadWarning, exactPathTest, removeTrailingSlash, d
|
|
|
5
5
|
import { useRouterState } from "./useRouterState.js";
|
|
6
6
|
import { useRouter } from "./useRouter.js";
|
|
7
7
|
import { useIntersectionObserver } from "./utils.js";
|
|
8
|
-
import {
|
|
8
|
+
import { useMatches } from "./Matches.js";
|
|
9
9
|
function useLinkProps(options) {
|
|
10
10
|
const router = useRouter();
|
|
11
11
|
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
|
|
@@ -28,20 +28,22 @@ function useLinkProps(options) {
|
|
|
28
28
|
const currentSearch = useRouterState({
|
|
29
29
|
select: (s) => s.location.searchStr
|
|
30
30
|
});
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const from = useMatches({
|
|
32
|
+
select: (matches) => {
|
|
33
|
+
var _a;
|
|
34
|
+
return options.from ?? ((_a = matches[matches.length - 1]) == null ? void 0 : _a.fullPath);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
const _options = () => ({
|
|
38
|
+
...options,
|
|
39
|
+
from: from()
|
|
34
40
|
});
|
|
35
|
-
options = {
|
|
36
|
-
from: parentRouteId(),
|
|
37
|
-
...options
|
|
38
|
-
};
|
|
39
41
|
const next = Solid.createMemo(() => {
|
|
40
42
|
currentSearch();
|
|
41
|
-
return router.buildLocation(
|
|
43
|
+
return router.buildLocation(_options());
|
|
42
44
|
});
|
|
43
45
|
const preload = Solid.createMemo(() => {
|
|
44
|
-
if (
|
|
46
|
+
if (_options().reloadDocument) {
|
|
45
47
|
return false;
|
|
46
48
|
}
|
|
47
49
|
return local.preload ?? router.options.defaultPreload;
|
|
@@ -78,7 +80,7 @@ function useLinkProps(options) {
|
|
|
78
80
|
return true;
|
|
79
81
|
}
|
|
80
82
|
});
|
|
81
|
-
const doPreload = () => router.preloadRoute(
|
|
83
|
+
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
82
84
|
console.warn(err);
|
|
83
85
|
console.warn(preloadWarning);
|
|
84
86
|
});
|
|
@@ -122,7 +124,7 @@ function useLinkProps(options) {
|
|
|
122
124
|
setIsTransitioning(false);
|
|
123
125
|
});
|
|
124
126
|
return router.navigate({
|
|
125
|
-
...
|
|
127
|
+
..._options(),
|
|
126
128
|
replace: local.replace,
|
|
127
129
|
resetScroll: local.resetScroll,
|
|
128
130
|
hashScrollIntoView: local.hashScrollIntoView,
|
|
@@ -188,12 +190,12 @@ function useLinkProps(options) {
|
|
|
188
190
|
const href = Solid.createMemo(() => {
|
|
189
191
|
const nextLocation = next();
|
|
190
192
|
const maskedLocation = nextLocation == null ? void 0 : nextLocation.maskedLocation;
|
|
191
|
-
return
|
|
193
|
+
return _options().disabled ? void 0 : maskedLocation ? router.history.createHref(maskedLocation.href) : router.history.createHref(nextLocation == null ? void 0 : nextLocation.href);
|
|
192
194
|
});
|
|
193
195
|
return Solid.mergeProps(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
|
|
194
196
|
return {
|
|
195
197
|
href: href(),
|
|
196
|
-
ref: mergeRefs(setRef,
|
|
198
|
+
ref: mergeRefs(setRef, _options().ref),
|
|
197
199
|
onClick: composeEventHandlers([local.onClick, handleClick]),
|
|
198
200
|
onFocus: composeEventHandlers([local.onFocus, handleFocus]),
|
|
199
201
|
onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),
|
package/dist/esm/link.js.map
CHANGED
|
@@ -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 preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useMatch } from './useMatch'\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 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 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 ])\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const type: Solid.Accessor<'internal' | 'external'> = () => {\n try {\n new URL(`${local.to}`)\n return 'external'\n } catch {}\n return 'internal'\n }\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // In the rare event that the user bypasses type-safety and doesn't supply a `from`\n // we'll use the current route as the `from` location so relative routing works as expected\n const parentRouteId = useMatch({ strict: false, select: (s) => s.pathname })\n\n // Use it as the default `from` location\n options = {\n from: parentRouteId(),\n ...options,\n }\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(options as any)\n })\n\n const preload = Solid.createMemo(() => {\n if (options.reloadDocument) {\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 = useRouterState({\n select: (s) => {\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n s.location.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(s.location.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 return s.location.hash === next().hash\n }\n return true\n },\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 (type() === 'external') {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref,\n get type() {\n return type()\n },\n get href() {\n return local.to\n },\n },\n Solid.splitProps(local, [\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!local.target || local.target === '_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 return 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 } as any)\n }\n }\n\n // The click handler\n const handleFocus = (_: MouseEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleTouchStart = handleFocus\n\n const handleEnter = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload()) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) 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 const href = Solid.createMemo(() => {\n const nextLocation = next()\n const maskedLocation = nextLocation?.maskedLocation\n\n return options.disabled\n ? undefined\n : maskedLocation\n ? router.history.createHref(maskedLocation.href)\n : router.history.createHref(nextLocation?.href)\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: href(),\n ref: mergeRefs(setRef, options.ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onFocus: composeEventHandlers([local.onFocus, handleFocus]),\n onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),\n onMouseOver: composeEventHandlers([local.onMouseOver, handleEnter]),\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 ...(Object.keys(resolvedStyle).length && { style: resolvedStyle }),\n ...(resolvedClassName() && { class: resolvedClassName() }),\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<TComp> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...(props as any)} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props: any) => {\n const [local, rest] = Solid.splitProps(props, ['_asChild'])\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type', 'children'],\n )\n\n const children = () =>\n typeof rest.children === 'function'\n ? rest.children({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n })\n : rest.children\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","type","URL","to","currentSearch","useRouterState","select","s","location","searchStr","parentRouteId","useMatch","strict","pathname","from","next","createMemo","buildLocation","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","hash","doPreload","preloadRoute","catch","err","console","warn","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","disabled","createEffect","href","handleClick","e","isCtrlEvent","defaultPrevented","target","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","nextLocation","maskedLocation","undefined","history","createHref","mergeRefs","onClick","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","length","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","Dynamic","component","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":";;;;;;;;AA+BO,SAASA,aAOdC,SAC2B;AAC3B,QAAMC,SAASC,UAAU;AACzB,QAAM,CAACC,iBAAiBC,kBAAkB,IAAIC,MAAMC,aAAa,KAAK;AACtE,MAAIC,mBAAmB;AAEvB,QAAM,CAACC,OAAOC,IAAI,IAAIJ,MAAMK,WAC1BL,MAAMM,WACJ;AAAA,IACEC,aAAaA,OAAO;AAAA,MAAEC,OAAO;AAAA,IAAA;AAAA,IAC7BC,eAAeA,OAAO,CAAC;AAAA,EAEzBd,GAAAA,OACF,GACA,CACE,eACA,iBACA,iBACA,MACA,WACA,gBACA,sBACA,WACA,mBACA,eACA,kBACA,YACA,UACA,YACA,SACA,SACA,WACA,WACA,gBACA,gBACA,eACA,cACA,gBACA,eAAe,CAEnB;AA8BA,QAAM,CAACe,GAAGC,iBAAiB,IAAIX,MAAMK,WAAWD,MAAM,CACpD,UACA,UACA,QACA,SACA,QACA,gBAAgB,CACjB;AAQD,QAAMQ,OAAgDA,MAAM;AACtD,QAAA;AACF,UAAIC,IAAI,GAAGV,MAAMW,EAAE,EAAE;AACd,aAAA;AAAA,IAAA,QACD;AAAA,IAAA;AACD,WAAA;AAAA,EACT;AAEA,QAAMC,gBAAgBC,eAAe;AAAA,IACnCC,QAASC,CAAMA,MAAAA,EAAEC,SAASC;AAAAA,EAAAA,CAC3B;AAID,QAAMC,gBAAgBC,SAAS;AAAA,IAAEC,QAAQ;AAAA,IAAON,QAASC,OAAMA,EAAEM;AAAAA,EAAAA,CAAU;AAGjE,YAAA;AAAA,IACRC,MAAMJ,cAAc;AAAA,IACpB,GAAG1B;AAAAA,EACL;AAEM+B,QAAAA,OAAO1B,MAAM2B,WAAW,MAAM;AACpB,kBAAA;AACP/B,WAAAA,OAAOgC,cAAcjC,OAAc;AAAA,EAAA,CAC3C;AAEKkC,QAAAA,UAAU7B,MAAM2B,WAAW,MAAM;AACrC,QAAIhC,QAAQmC,gBAAgB;AACnB,aAAA;AAAA,IAAA;AAEF3B,WAAAA,MAAM0B,WAAWjC,OAAOD,QAAQoC;AAAAA,EAAAA,CACxC;AACD,QAAMC,eAAeA,MACnB7B,MAAM6B,gBAAgBpC,OAAOD,QAAQsC,uBAAuB;AAE9D,QAAMC,WAAWlB,eAAe;AAAA,IAC9BC,QAASC,CAAM,MAAA;;AACTf,WAAAA,WAAMgC,kBAANhC,mBAAqBiC,OAAO;AACxBC,cAAAA,YAAYC,cAChBpB,EAAEC,SAASK,UACXE,OAAOF,UACP5B,OAAO2C,QACT;AACA,YAAI,CAACF,WAAW;AACP,iBAAA;AAAA,QAAA;AAAA,MACT,OACK;AACCG,cAAAA,mBAAmBC,oBACvBvB,EAAEC,SAASK,UACX5B,OAAO2C,QACT,EAAEG,MAAM,GAAG;AACLC,cAAAA,iBAAgBF,0BACpBf,gBAAAA,mBAAQF,UACR5B,OAAO2C,QACT,MAHsBE,mBAGnBC,MAAM;AAEHE,cAAAA,mBAAmBD,+CAAeE,MACtC,CAACC,GAAGC,MAAMD,MAAMN,iBAAiBO,CAAC;AAEpC,YAAI,CAACH,kBAAkB;AACd,iBAAA;AAAA,QAAA;AAAA,MACT;AAGEzC,YAAAA,WAAMgC,kBAANhC,mBAAqB6C,kBAAiB,MAAM;AAC9C,cAAMC,aAAaC,UAAUhC,EAAEC,SAASgC,QAAQzB,OAAOyB,QAAQ;AAAA,UAC7DC,SAAS,GAACjD,WAAMgC,kBAANhC,mBAAqBiC;AAAAA,UAC/BiB,iBAAiB,GAAClD,WAAMgC,kBAANhC,mBAAqBmD;AAAAA,QAAAA,CACxC;AACD,YAAI,CAACL,YAAY;AACR,iBAAA;AAAA,QAAA;AAAA,MACT;AAGE9C,WAAAA,WAAMgC,kBAANhC,mBAAqBoD,aAAa;AACpC,eAAOrC,EAAEC,SAASqC,SAAS9B,KAAO8B,EAAAA;AAAAA,MAAAA;AAE7B,aAAA;AAAA,IAAA;AAAA,EACT,CACD;AAEKC,QAAAA,YAAYA,MAChB7D,OAAO8D,aAAa/D,OAAc,EAAEgE,MAAM,CAACC,QAAa;AACtDC,YAAQC,KAAKF,GAAG;AAChBC,YAAQC,KAAKC,cAAc;AAAA,EAAA,CAC5B;AAEGC,QAAAA,4BAA4BA,CAChCC,UACG;AACH,QAAIA,+BAAOC,gBAAgB;AACf,gBAAA;AAAA,IAAA;AAAA,EAEd;AAEA,QAAM,CAACC,KAAKC,MAAM,IAAIpE,MAAMC,aAA6B,IAAI;AAE7DoE,0BACEF,KACAH,2BACA;AAAA,IAAEM,YAAY;AAAA,EAAA,GACd;AAAA,IAAEC,UAAU,CAAC,CAACpE,MAAMoE,YAAY,EAAE1C,QAAc,MAAA;AAAA,EAAA,CAClD;AAEA7B,QAAMwE,aAAa,MAAM;AACvB,QAAItE,kBAAkB;AACpB;AAAA,IAAA;AAEF,QAAI,CAACC,MAAMoE,YAAY1C,QAAAA,MAAc,UAAU;AACnC,gBAAA;AACS,yBAAA;AAAA,IAAA;AAAA,EACrB,CACD;AAEGjB,MAAAA,WAAW,YAAY;AAClBZ,WAAAA,MAAMM,WACXK,mBACA;AAAA,MACEwD;AAAAA,MACA,IAAIvD,OAAO;AACT,eAAOA,KAAK;AAAA,MACd;AAAA,MACA,IAAI6D,OAAO;AACT,eAAOtE,MAAMW;AAAAA,MAAAA;AAAAA,IACf,GAEFd,MAAMK,WAAWF,OAAO,CACtB,YACA,UACA,YACA,SACA,SACA,WACA,WACA,gBACA,gBACA,cACA,eACA,cAAc,CACf,EAAE,CAAC,CACN;AAAA,EAAA;AAIIuE,QAAAA,cAAcA,CAACC,MAAkB;AACrC,QACE,CAACxE,MAAMoE,YACP,CAACK,YAAYD,CAAC,KACd,CAACA,EAAEE,qBACF,CAAC1E,MAAM2E,UAAU3E,MAAM2E,WAAW,YACnCH,EAAEI,WAAW,GACb;AACAJ,QAAEK,eAAe;AAEjBjF,yBAAmB,IAAI;AAEvB,YAAMkF,QAAQrF,OAAOsF,UAAU,cAAc,MAAM;AAC3C,cAAA;AACNnF,2BAAmB,KAAK;AAAA,MAAA,CACzB;AAID,aAAOH,OAAOuF,SAAS;AAAA,QACrB,GAAGxF;AAAAA,QACHyF,SAASjF,MAAMiF;AAAAA,QACfC,aAAalF,MAAMkF;AAAAA,QACnBC,oBAAoBnF,MAAMmF;AAAAA,QAC1BC,iBAAiBpF,MAAMoF;AAAAA,QACvBC,gBAAgBrF,MAAMqF;AAAAA,QACtBC,eAAetF,MAAMsF;AAAAA,MAAAA,CACf;AAAA,IAAA;AAAA,EAEZ;AAGMC,QAAAA,cAAcA,CAAChF,OAAkB;AACrC,QAAIP,MAAMoE,SAAU;AACpB,QAAI1C,WAAW;AACH,gBAAA;AAAA,IAAA;AAAA,EAEd;AAEA,QAAM8D,mBAAmBD;AAEnBE,QAAAA,cAAcA,CAACjB,MAAkB;AACrC,QAAIxE,MAAMoE,SAAU;AACdsB,UAAAA,cAAelB,EAAEG,UAAU,CAAC;AAElC,QAAIjD,WAAW;AACb,UAAIgE,YAAYC,gBAAgB;AAC9B;AAAA,MAAA;AAGUA,kBAAAA,iBAAiBC,WAAW,MAAM;AAC5CF,oBAAYC,iBAAiB;AACnB,kBAAA;AAAA,MACZ,GAAG9D,cAAc;AAAA,IAAA;AAAA,EAErB;AAEMgE,QAAAA,cAAcA,CAACrB,MAAkB;AACrC,QAAIxE,MAAMoE,SAAU;AACdsB,UAAAA,cAAelB,EAAEG,UAAU,CAAC;AAElC,QAAIe,YAAYC,gBAAgB;AAC9BG,mBAAaJ,YAAYC,cAAc;AACvCD,kBAAYC,iBAAiB;AAAA,IAAA;AAAA,EAEjC;AAGSI,WAAAA,YACPC,OACAC,SACA;AACA,QAAIA,SAAS;AACP,UAAA,OAAOA,YAAY,YAAY;AACjCA,gBAAQD,KAAK;AAAA,MAAA,OACR;AACLC,gBAAQ,CAAC,EAAEA,QAAQ,CAAC,GAAGD,KAAK;AAAA,MAAA;AAAA,IAC9B;AAGF,WAAOA,MAAMtB;AAAAA,EAAAA;AAGf,WAASwB,qBACPC,UACA;AACA,WAAO,CAACH,UAAe;AACrB,iBAAWC,WAAWE,UAAU;AAC9BJ,oBAAYC,OAAOC,OAAO;AAAA,MAAA;AAAA,IAE9B;AAAA,EAAA;AAIF,QAAMG,sBAEFA,MACFrE,SAAS,IAAKsE,iBAAiBrG,MAAMI,aAAoB,CAAA,CAAE,KAAK,CAAA,IAAM,CAAC;AAGnEkG,QAAAA,wBAGoCA,MACxCvE,aAAa,CAAA,IAAKsE,iBAAiBrG,MAAMM,eAAe,EAAE;AAE5D,QAAMiG,oBAAoBA,MACxB,CAACvG,MAAMK,OAAO+F,oBAAsB/F,EAAAA,OAAOiG,sBAAsB,EAAEjG,KAAK,EACrEmG,OAAOC,OAAO,EACdC,KAAK,GAAG;AAEb,QAAMC,gBAAgBA,OAAO;AAAA,IAC3B,GAAG3G,MAAM4G;AAAAA,IACT,GAAGR,oBAAsBQ,EAAAA;AAAAA,IACzB,GAAGN,wBAAwBM;AAAAA,EAAAA;AAGvBtC,QAAAA,OAAOzE,MAAM2B,WAAW,MAAM;AAClC,UAAMqF,eAAetF,KAAK;AAC1B,UAAMuF,iBAAiBD,6CAAcC;AAErC,WAAOtH,QAAQ4E,WACX2C,SACAD,iBACErH,OAAOuH,QAAQC,WAAWH,eAAexC,IAAI,IAC7C7E,OAAOuH,QAAQC,WAAWJ,6CAAcvC,IAAI;AAAA,EAAA,CACnD;AAED,SAAOzE,MAAMM,WACXK,mBACA4F,qBACAE,uBACA,MAAM;AACG,WAAA;AAAA,MACLhC,MAAMA,KAAK;AAAA,MACXN,KAAKkD,UAAUjD,QAAQzE,QAAQwE,GAAG;AAAA,MAClCmD,SAASjB,qBAAqB,CAAClG,MAAMmH,SAAS5C,WAAW,CAAC;AAAA,MAC1D6C,SAASlB,qBAAqB,CAAClG,MAAMoH,SAAS7B,WAAW,CAAC;AAAA,MAC1D8B,cAAcnB,qBAAqB,CAAClG,MAAMqH,cAAc5B,WAAW,CAAC;AAAA,MACpE6B,aAAapB,qBAAqB,CAAClG,MAAMsH,aAAa7B,WAAW,CAAC;AAAA,MAClE8B,cAAcrB,qBAAqB,CAAClG,MAAMuH,cAAc1B,WAAW,CAAC;AAAA,MACpE2B,YAAYtB,qBAAqB,CAAClG,MAAMwH,YAAY3B,WAAW,CAAC;AAAA,MAChE4B,cAAcvB,qBAAqB,CACjClG,MAAMyH,cACNjC,gBAAgB,CACjB;AAAA,MACDpB,UAAU,CAAC,CAACpE,MAAMoE;AAAAA,MAClBO,QAAQ3E,MAAM2E;AAAAA,MACd,GAAI+C,OAAOC,KAAKhB,aAAa,EAAEiB,UAAU;AAAA,QAAEhB,OAAOD;AAAAA,MAAc;AAAA,MAChE,GAAIJ,uBAAuB;AAAA,QAAElG,OAAOkG,kBAAkB;AAAA,MAAE;AAAA,MACxD,GAAIvG,MAAMoE,YAAY;AAAA,QACpByD,MAAM;AAAA,QACN,iBAAiB;AAAA,MACnB;AAAA,MACA,GAAI9F,cAAc;AAAA,QAAE,eAAe;AAAA,QAAU,gBAAgB;AAAA,MAAO;AAAA,MACpE,GAAIpC,qBAAqB;AAAA,QAAE,sBAAsB;AAAA,MAAA;AAAA,IACnD;AAAA,EAAA,CAEJ;AACF;AA6FO,SAASmI,WACdC,MACsB;AACtB,SAAQC,CAAKC,UAAAA,gBAAMC,MAAIC,WAAMH,OAAY;AAAA,IAAGI,UAAUL;AAAAA,EAAAA,CAAQ,CAAA;AAChE;AAEaG,MAAAA,OAA2BA,CAACF,UAAe;AAChD,QAAA,CAAChI,OAAOC,IAAI,IAAIJ,MAAMK,WAAW8H,OAAO,CAAC,UAAU,CAAC;AAE1D,QAAM,CAACzH,GAAG8H,SAAS,IAAIxI,MAAMK,WAC3BX,aAAaU,IAAsB,GACnC,CAAC,QAAQ,UAAU,CACrB;AAEA,QAAMqI,WAAWA,MACf,OAAOrI,KAAKqI,aAAa,aACrBrI,KAAKqI,SAAS;AAAA,IACZ,IAAIvG,WAAW;AACLsG,aAAAA,UAAkB,aAAa,MAAM;AAAA,IAAA;AAAA,EAC/C,CACD,IACDpI,KAAKqI;AAEXL,SAAAA,gBACGM,SAAOJ,WAAA;AAAA,IAAA,IAACK,YAAS;AAAExI,aAAAA,MAAMoI,WAAWpI,MAAMoI,WAAW;AAAA,IAAA;AAAA,KAASC,WAAS;AAAA,IAAAC;AAAAA,EAAAA,CAC7D,CAAA;AAGf;AAEA,SAAS7D,YAAYD,GAAe;AAC3B,SAAA,CAAC,EAAEA,EAAEiE,WAAWjE,EAAEkE,UAAUlE,EAAEmE,WAAWnE,EAAEoE;AACpD;AAkBO,MAAMC,cAAmCrJ,CAAY,YAAA;AACnDA,SAAAA;AACT;"}
|
|
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 preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useMatches } from './Matches'\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 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 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 ])\n\n // If this link simply reloads the current route,\n // make sure it has a new key so it will trigger a data refresh\n\n // If this `to` is a valid external URL, return\n // null for LinkUtils\n\n const type: Solid.Accessor<'internal' | 'external'> = () => {\n try {\n new URL(`${local.to}`)\n return 'external'\n } catch {}\n return 'internal'\n }\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // when `from` is not supplied, use the leaf route of the current matches as the `from` location\n // so relative routing works as expected\n const from = useMatches({\n select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,\n })\n\n const _options = () => ({\n ...options,\n from: from(),\n })\n\n const next = Solid.createMemo(() => {\n currentSearch()\n return router.buildLocation(_options() as any)\n })\n\n const preload = Solid.createMemo(() => {\n if (_options().reloadDocument) {\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 = useRouterState({\n select: (s) => {\n if (local.activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next().pathname,\n router.basepath,\n )\n if (!testExact) {\n return false\n }\n } else {\n const currentPathSplit = removeTrailingSlash(\n s.location.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(s.location.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 return s.location.hash === next().hash\n }\n return true\n },\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 (type() === 'external') {\n return Solid.mergeProps(\n propsSafeToSpread,\n {\n ref,\n get type() {\n return type()\n },\n get href() {\n return local.to\n },\n },\n Solid.splitProps(local, [\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\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 if (\n !local.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!local.target || local.target === '_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 return 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 } as any)\n }\n }\n\n // The click handler\n const handleFocus = (_: MouseEvent) => {\n if (local.disabled) return\n if (preload()) {\n doPreload()\n }\n }\n\n const handleTouchStart = handleFocus\n\n const handleEnter = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) as LinkCurrentTargetElement\n\n if (preload()) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay())\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (local.disabled) return\n const eventTarget = (e.target || {}) 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 const href = Solid.createMemo(() => {\n const nextLocation = next()\n const maskedLocation = nextLocation?.maskedLocation\n\n return _options().disabled\n ? undefined\n : maskedLocation\n ? router.history.createHref(maskedLocation.href)\n : router.history.createHref(nextLocation?.href)\n })\n\n return Solid.mergeProps(\n propsSafeToSpread,\n resolvedActiveProps,\n resolvedInactiveProps,\n () => {\n return {\n href: href(),\n ref: mergeRefs(setRef, _options().ref),\n onClick: composeEventHandlers([local.onClick, handleClick]),\n onFocus: composeEventHandlers([local.onFocus, handleFocus]),\n onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),\n onMouseOver: composeEventHandlers([local.onMouseOver, handleEnter]),\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 ...(Object.keys(resolvedStyle).length && { style: resolvedStyle }),\n ...(resolvedClassName() && { class: resolvedClassName() }),\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<TComp> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n return (props) => <Link {...(props as any)} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props: any) => {\n const [local, rest] = Solid.splitProps(props, ['_asChild'])\n\n const [_, linkProps] = Solid.splitProps(\n useLinkProps(rest as unknown as any),\n ['type', 'children'],\n )\n\n const children = () =>\n typeof rest.children === 'function'\n ? rest.children({\n get isActive() {\n return (linkProps as any)['data-status'] === 'active'\n },\n })\n : rest.children\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","type","URL","to","currentSearch","useRouterState","select","s","location","searchStr","from","useMatches","matches","length","fullPath","_options","next","createMemo","buildLocation","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","hash","doPreload","preloadRoute","catch","err","console","warn","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","ref","setRef","useIntersectionObserver","rootMargin","disabled","createEffect","href","handleClick","e","isCtrlEvent","defaultPrevented","target","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","nextLocation","maskedLocation","undefined","history","createHref","mergeRefs","onClick","onFocus","onMouseEnter","onMouseOver","onMouseLeave","onMouseOut","onTouchStart","Object","keys","role","createLink","Comp","props","_$createComponent","Link","_$mergeProps","_asChild","linkProps","children","Dynamic","component","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
|
package/dist/source/link.jsx
CHANGED
|
@@ -5,7 +5,7 @@ import { Dynamic } from 'solid-js/web';
|
|
|
5
5
|
import { useRouterState } from './useRouterState';
|
|
6
6
|
import { useRouter } from './useRouter';
|
|
7
7
|
import { useIntersectionObserver } from './utils';
|
|
8
|
-
import {
|
|
8
|
+
import { useMatches } from './Matches';
|
|
9
9
|
export function useLinkProps(options) {
|
|
10
10
|
const router = useRouter();
|
|
11
11
|
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
|
|
@@ -89,20 +89,21 @@ export function useLinkProps(options) {
|
|
|
89
89
|
const currentSearch = useRouterState({
|
|
90
90
|
select: (s) => s.location.searchStr,
|
|
91
91
|
});
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
92
|
+
// when `from` is not supplied, use the leaf route of the current matches as the `from` location
|
|
93
|
+
// so relative routing works as expected
|
|
94
|
+
const from = useMatches({
|
|
95
|
+
select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,
|
|
96
|
+
});
|
|
97
|
+
const _options = () => ({
|
|
98
98
|
...options,
|
|
99
|
-
|
|
99
|
+
from: from(),
|
|
100
|
+
});
|
|
100
101
|
const next = Solid.createMemo(() => {
|
|
101
102
|
currentSearch();
|
|
102
|
-
return router.buildLocation(
|
|
103
|
+
return router.buildLocation(_options());
|
|
103
104
|
});
|
|
104
105
|
const preload = Solid.createMemo(() => {
|
|
105
|
-
if (
|
|
106
|
+
if (_options().reloadDocument) {
|
|
106
107
|
return false;
|
|
107
108
|
}
|
|
108
109
|
return local.preload ?? router.options.defaultPreload;
|
|
@@ -139,7 +140,7 @@ export function useLinkProps(options) {
|
|
|
139
140
|
return true;
|
|
140
141
|
},
|
|
141
142
|
});
|
|
142
|
-
const doPreload = () => router.preloadRoute(
|
|
143
|
+
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
143
144
|
console.warn(err);
|
|
144
145
|
console.warn(preloadWarning);
|
|
145
146
|
});
|
|
@@ -199,7 +200,7 @@ export function useLinkProps(options) {
|
|
|
199
200
|
// All is well? Navigate!
|
|
200
201
|
// N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing
|
|
201
202
|
return router.navigate({
|
|
202
|
-
...
|
|
203
|
+
..._options(),
|
|
203
204
|
replace: local.replace,
|
|
204
205
|
resetScroll: local.resetScroll,
|
|
205
206
|
hashScrollIntoView: local.hashScrollIntoView,
|
|
@@ -275,7 +276,7 @@ export function useLinkProps(options) {
|
|
|
275
276
|
const href = Solid.createMemo(() => {
|
|
276
277
|
const nextLocation = next();
|
|
277
278
|
const maskedLocation = nextLocation?.maskedLocation;
|
|
278
|
-
return
|
|
279
|
+
return _options().disabled
|
|
279
280
|
? undefined
|
|
280
281
|
: maskedLocation
|
|
281
282
|
? router.history.createHref(maskedLocation.href)
|
|
@@ -284,7 +285,7 @@ export function useLinkProps(options) {
|
|
|
284
285
|
return Solid.mergeProps(propsSafeToSpread, resolvedActiveProps, resolvedInactiveProps, () => {
|
|
285
286
|
return {
|
|
286
287
|
href: href(),
|
|
287
|
-
ref: mergeRefs(setRef,
|
|
288
|
+
ref: mergeRefs(setRef, _options().ref),
|
|
288
289
|
onClick: composeEventHandlers([local.onClick, handleClick]),
|
|
289
290
|
onFocus: composeEventHandlers([local.onFocus, handleFocus]),
|
|
290
291
|
onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),
|
package/dist/source/link.jsx.map
CHANGED
|
@@ -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.112.
|
|
3
|
+
"version": "1.112.17",
|
|
4
4
|
"description": "Modern and scalable routing for Solid applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"jsesc": "^3.0.2",
|
|
61
61
|
"tiny-invariant": "^1.3.3",
|
|
62
62
|
"tiny-warning": "^1.0.3",
|
|
63
|
-
"@tanstack/
|
|
64
|
-
"@tanstack/
|
|
63
|
+
"@tanstack/router-core": "1.112.12",
|
|
64
|
+
"@tanstack/history": "1.112.8"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@solidjs/testing-library": "^0.8.10",
|
package/src/link.tsx
CHANGED
|
@@ -15,7 +15,7 @@ import { useRouter } from './useRouter'
|
|
|
15
15
|
|
|
16
16
|
import { useIntersectionObserver } from './utils'
|
|
17
17
|
|
|
18
|
-
import {
|
|
18
|
+
import { useMatches } from './Matches'
|
|
19
19
|
import type {
|
|
20
20
|
AnyRouter,
|
|
21
21
|
Constrain,
|
|
@@ -133,23 +133,24 @@ export function useLinkProps<
|
|
|
133
133
|
select: (s) => s.location.searchStr,
|
|
134
134
|
})
|
|
135
135
|
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
const
|
|
136
|
+
// when `from` is not supplied, use the leaf route of the current matches as the `from` location
|
|
137
|
+
// so relative routing works as expected
|
|
138
|
+
const from = useMatches({
|
|
139
|
+
select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,
|
|
140
|
+
})
|
|
139
141
|
|
|
140
|
-
|
|
141
|
-
options = {
|
|
142
|
-
from: parentRouteId(),
|
|
142
|
+
const _options = () => ({
|
|
143
143
|
...options,
|
|
144
|
-
|
|
144
|
+
from: from(),
|
|
145
|
+
})
|
|
145
146
|
|
|
146
147
|
const next = Solid.createMemo(() => {
|
|
147
148
|
currentSearch()
|
|
148
|
-
return router.buildLocation(
|
|
149
|
+
return router.buildLocation(_options() as any)
|
|
149
150
|
})
|
|
150
151
|
|
|
151
152
|
const preload = Solid.createMemo(() => {
|
|
152
|
-
if (
|
|
153
|
+
if (_options().reloadDocument) {
|
|
153
154
|
return false
|
|
154
155
|
}
|
|
155
156
|
return local.preload ?? router.options.defaultPreload
|
|
@@ -204,7 +205,7 @@ export function useLinkProps<
|
|
|
204
205
|
})
|
|
205
206
|
|
|
206
207
|
const doPreload = () =>
|
|
207
|
-
router.preloadRoute(
|
|
208
|
+
router.preloadRoute(_options() as any).catch((err: any) => {
|
|
208
209
|
console.warn(err)
|
|
209
210
|
console.warn(preloadWarning)
|
|
210
211
|
})
|
|
@@ -286,7 +287,7 @@ export function useLinkProps<
|
|
|
286
287
|
// All is well? Navigate!
|
|
287
288
|
// N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing
|
|
288
289
|
return router.navigate({
|
|
289
|
-
...
|
|
290
|
+
..._options(),
|
|
290
291
|
replace: local.replace,
|
|
291
292
|
resetScroll: local.resetScroll,
|
|
292
293
|
hashScrollIntoView: local.hashScrollIntoView,
|
|
@@ -387,7 +388,7 @@ export function useLinkProps<
|
|
|
387
388
|
const nextLocation = next()
|
|
388
389
|
const maskedLocation = nextLocation?.maskedLocation
|
|
389
390
|
|
|
390
|
-
return
|
|
391
|
+
return _options().disabled
|
|
391
392
|
? undefined
|
|
392
393
|
: maskedLocation
|
|
393
394
|
? router.history.createHref(maskedLocation.href)
|
|
@@ -401,7 +402,7 @@ export function useLinkProps<
|
|
|
401
402
|
() => {
|
|
402
403
|
return {
|
|
403
404
|
href: href(),
|
|
404
|
-
ref: mergeRefs(setRef,
|
|
405
|
+
ref: mergeRefs(setRef, _options().ref),
|
|
405
406
|
onClick: composeEventHandlers([local.onClick, handleClick]),
|
|
406
407
|
onFocus: composeEventHandlers([local.onFocus, handleFocus]),
|
|
407
408
|
onMouseEnter: composeEventHandlers([local.onMouseEnter, handleEnter]),
|