@tanstack/solid-router 1.158.4 → 1.159.1
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 +32 -26
- package/dist/cjs/link.cjs.map +1 -1
- package/dist/esm/link.js +33 -27
- package/dist/esm/link.js.map +1 -1
- package/dist/source/link.jsx +34 -28
- package/dist/source/link.jsx.map +1 -1
- package/package.json +3 -3
- package/src/link.tsx +51 -41
package/dist/cjs/link.cjs
CHANGED
|
@@ -4,9 +4,11 @@ const Solid$1 = require("solid-js/web");
|
|
|
4
4
|
const Solid = require("solid-js");
|
|
5
5
|
const refs = require("@solid-primitives/refs");
|
|
6
6
|
const routerCore = require("@tanstack/router-core");
|
|
7
|
+
const isServer = require("@tanstack/router-core/isServer");
|
|
7
8
|
const useRouterState = require("./useRouterState.cjs");
|
|
8
9
|
const useRouter = require("./useRouter.cjs");
|
|
9
10
|
const utils = require("./utils.cjs");
|
|
11
|
+
const ClientOnly = require("./ClientOnly.cjs");
|
|
10
12
|
function _interopNamespaceDefault(e) {
|
|
11
13
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
14
|
if (e) {
|
|
@@ -28,6 +30,8 @@ var _tmpl$ = /* @__PURE__ */ Solid$1.template(`<svg><a>`);
|
|
|
28
30
|
function useLinkProps(options) {
|
|
29
31
|
const router = useRouter.useRouter();
|
|
30
32
|
const [isTransitioning, setIsTransitioning] = Solid__namespace.createSignal(false);
|
|
33
|
+
const shouldHydrateHash = !isServer.isServer && !!router.options.ssr;
|
|
34
|
+
const hasHydrated = ClientOnly.useHydrated();
|
|
31
35
|
let hasRenderFetched = false;
|
|
32
36
|
const [local, rest] = Solid__namespace.splitProps(Solid__namespace.mergeProps({
|
|
33
37
|
activeProps: () => ({
|
|
@@ -36,6 +40,9 @@ function useLinkProps(options) {
|
|
|
36
40
|
inactiveProps: () => ({})
|
|
37
41
|
}, options), ["activeProps", "inactiveProps", "activeOptions", "to", "preload", "preloadDelay", "hashScrollIntoView", "replace", "startTransition", "resetScroll", "viewTransition", "target", "disabled", "style", "class", "onClick", "onFocus", "onMouseEnter", "onMouseLeave", "onMouseOver", "onMouseOut", "onTouchStart", "ignoreBlocker"]);
|
|
38
42
|
const [_, propsSafeToSpread] = Solid__namespace.splitProps(rest, ["params", "search", "hash", "state", "mask", "reloadDocument", "unsafeRelative"]);
|
|
43
|
+
const currentLocation = useRouterState.useRouterState({
|
|
44
|
+
select: (s) => s.location
|
|
45
|
+
});
|
|
39
46
|
const currentSearch = useRouterState.useRouterState({
|
|
40
47
|
select: (s) => s.location.searchStr
|
|
41
48
|
});
|
|
@@ -101,36 +108,35 @@ function useLinkProps(options) {
|
|
|
101
108
|
return local.preload ?? router.options.defaultPreload;
|
|
102
109
|
});
|
|
103
110
|
const preloadDelay = () => local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0;
|
|
104
|
-
const isActive =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
} else {
|
|
113
|
-
const currentPathSplit = routerCore.removeTrailingSlash(s.location.pathname, router.basepath).split("/");
|
|
114
|
-
const nextPathSplit = routerCore.removeTrailingSlash(next()?.pathname, router.basepath)?.split("/");
|
|
115
|
-
const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
|
|
116
|
-
if (!pathIsFuzzyEqual) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
111
|
+
const isActive = Solid__namespace.createMemo(() => {
|
|
112
|
+
if (externalLink()) return false;
|
|
113
|
+
if (local.activeOptions?.exact) {
|
|
114
|
+
const testExact = routerCore.exactPathTest(currentLocation().pathname, next().pathname, router.basepath);
|
|
115
|
+
if (!testExact) {
|
|
116
|
+
return false;
|
|
119
117
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
118
|
+
} else {
|
|
119
|
+
const currentPathSplit = routerCore.removeTrailingSlash(currentLocation().pathname, router.basepath).split("/");
|
|
120
|
+
const nextPathSplit = routerCore.removeTrailingSlash(next()?.pathname, router.basepath)?.split("/");
|
|
121
|
+
const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
|
|
122
|
+
if (!pathIsFuzzyEqual) {
|
|
123
|
+
return false;
|
|
128
124
|
}
|
|
129
|
-
|
|
130
|
-
|
|
125
|
+
}
|
|
126
|
+
if (local.activeOptions?.includeSearch ?? true) {
|
|
127
|
+
const searchTest = routerCore.deepEqual(currentLocation().search, next().search, {
|
|
128
|
+
partial: !local.activeOptions?.exact,
|
|
129
|
+
ignoreUndefined: !local.activeOptions?.explicitUndefined
|
|
130
|
+
});
|
|
131
|
+
if (!searchTest) {
|
|
132
|
+
return false;
|
|
131
133
|
}
|
|
132
|
-
return true;
|
|
133
134
|
}
|
|
135
|
+
if (local.activeOptions?.includeHash) {
|
|
136
|
+
const currentHash = shouldHydrateHash && !hasHydrated() ? "" : currentLocation().hash;
|
|
137
|
+
return currentHash === next().hash;
|
|
138
|
+
}
|
|
139
|
+
return true;
|
|
134
140
|
});
|
|
135
141
|
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
136
142
|
console.warn(err);
|
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 isDangerousProtocol,\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 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 '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 'unsafeRelative',\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)) {\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:, data:, vbscript:\n if (isDangerousProtocol(to as string)) {\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 = useRouterState({\n select: (s) => {\n if (externalLink()) return false\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 (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 '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 // 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.currentTarget || {}) 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.currentTarget || {}) 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 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 ...(() => {\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentSearch","useRouterState","select","s","location","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","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","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","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","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.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 '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)) {\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:, data:, vbscript:\n if (isDangerousProtocol(to as string)) {\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 '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 // 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.currentTarget || {}) 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.currentTarget || {}) 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 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 ...(() => {\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","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","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","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
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { createComponent, mergeProps, template, spread, insert, Dynamic, memo } from "solid-js/web";
|
|
2
2
|
import * as Solid from "solid-js";
|
|
3
3
|
import { mergeRefs } from "@solid-primitives/refs";
|
|
4
|
-
import { isDangerousProtocol,
|
|
4
|
+
import { isDangerousProtocol, exactPathTest, removeTrailingSlash, deepEqual, functionalUpdate, preloadWarning } from "@tanstack/router-core";
|
|
5
|
+
import { isServer } from "@tanstack/router-core/isServer";
|
|
5
6
|
import { useRouterState } from "./useRouterState.js";
|
|
6
7
|
import { useRouter } from "./useRouter.js";
|
|
7
8
|
import { useIntersectionObserver } from "./utils.js";
|
|
9
|
+
import { useHydrated } from "./ClientOnly.js";
|
|
8
10
|
var _tmpl$ = /* @__PURE__ */ template(`<svg><a>`);
|
|
9
11
|
function useLinkProps(options) {
|
|
10
12
|
const router = useRouter();
|
|
11
13
|
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
|
|
14
|
+
const shouldHydrateHash = !isServer && !!router.options.ssr;
|
|
15
|
+
const hasHydrated = useHydrated();
|
|
12
16
|
let hasRenderFetched = false;
|
|
13
17
|
const [local, rest] = Solid.splitProps(Solid.mergeProps({
|
|
14
18
|
activeProps: () => ({
|
|
@@ -17,6 +21,9 @@ function useLinkProps(options) {
|
|
|
17
21
|
inactiveProps: () => ({})
|
|
18
22
|
}, options), ["activeProps", "inactiveProps", "activeOptions", "to", "preload", "preloadDelay", "hashScrollIntoView", "replace", "startTransition", "resetScroll", "viewTransition", "target", "disabled", "style", "class", "onClick", "onFocus", "onMouseEnter", "onMouseLeave", "onMouseOver", "onMouseOut", "onTouchStart", "ignoreBlocker"]);
|
|
19
23
|
const [_, propsSafeToSpread] = Solid.splitProps(rest, ["params", "search", "hash", "state", "mask", "reloadDocument", "unsafeRelative"]);
|
|
24
|
+
const currentLocation = useRouterState({
|
|
25
|
+
select: (s) => s.location
|
|
26
|
+
});
|
|
20
27
|
const currentSearch = useRouterState({
|
|
21
28
|
select: (s) => s.location.searchStr
|
|
22
29
|
});
|
|
@@ -82,36 +89,35 @@ function useLinkProps(options) {
|
|
|
82
89
|
return local.preload ?? router.options.defaultPreload;
|
|
83
90
|
});
|
|
84
91
|
const preloadDelay = () => local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0;
|
|
85
|
-
const isActive =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
} else {
|
|
94
|
-
const currentPathSplit = removeTrailingSlash(s.location.pathname, router.basepath).split("/");
|
|
95
|
-
const nextPathSplit = removeTrailingSlash(next()?.pathname, router.basepath)?.split("/");
|
|
96
|
-
const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
|
|
97
|
-
if (!pathIsFuzzyEqual) {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
92
|
+
const isActive = Solid.createMemo(() => {
|
|
93
|
+
if (externalLink()) return false;
|
|
94
|
+
if (local.activeOptions?.exact) {
|
|
95
|
+
const testExact = exactPathTest(currentLocation().pathname, next().pathname, router.basepath);
|
|
96
|
+
if (!testExact) {
|
|
97
|
+
return false;
|
|
100
98
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return false;
|
|
108
|
-
}
|
|
99
|
+
} else {
|
|
100
|
+
const currentPathSplit = removeTrailingSlash(currentLocation().pathname, router.basepath).split("/");
|
|
101
|
+
const nextPathSplit = removeTrailingSlash(next()?.pathname, router.basepath)?.split("/");
|
|
102
|
+
const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
|
|
103
|
+
if (!pathIsFuzzyEqual) {
|
|
104
|
+
return false;
|
|
109
105
|
}
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
}
|
|
107
|
+
if (local.activeOptions?.includeSearch ?? true) {
|
|
108
|
+
const searchTest = deepEqual(currentLocation().search, next().search, {
|
|
109
|
+
partial: !local.activeOptions?.exact,
|
|
110
|
+
ignoreUndefined: !local.activeOptions?.explicitUndefined
|
|
111
|
+
});
|
|
112
|
+
if (!searchTest) {
|
|
113
|
+
return false;
|
|
112
114
|
}
|
|
113
|
-
return true;
|
|
114
115
|
}
|
|
116
|
+
if (local.activeOptions?.includeHash) {
|
|
117
|
+
const currentHash = shouldHydrateHash && !hasHydrated() ? "" : currentLocation().hash;
|
|
118
|
+
return currentHash === next().hash;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
115
121
|
});
|
|
116
122
|
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
117
123
|
console.warn(err);
|
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 isDangerousProtocol,\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 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 '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 'unsafeRelative',\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)) {\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:, data:, vbscript:\n if (isDangerousProtocol(to as string)) {\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 = useRouterState({\n select: (s) => {\n if (externalLink()) return false\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 (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 '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 // 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.currentTarget || {}) 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.currentTarget || {}) 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 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 ...(() => {\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","hasRenderFetched","local","rest","splitProps","mergeProps","activeProps","class","inactiveProps","_","propsSafeToSpread","currentSearch","useRouterState","select","s","location","searchStr","from","_options","next","createMemo","buildLocation","hrefOption","disabled","undefined","maskedLocation","publicHref","external","href","history","createHref","externalLink","_href","isDangerousProtocol","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","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","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","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 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 '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)) {\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:, data:, vbscript:\n if (isDangerousProtocol(to as string)) {\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 '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 // 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.currentTarget || {}) 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.currentTarget || {}) 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 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 ...(() => {\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","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","handleFocus","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","callHandler","event","handler","composeEventHandlers","handlers","resolvedActiveProps","functionalUpdate","resolvedInactiveProps","resolvedClassName","filter","Boolean","join","resolvedStyle","style","onClick","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/source/link.jsx
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import * as Solid from 'solid-js';
|
|
2
2
|
import { mergeRefs } from '@solid-primitives/refs';
|
|
3
3
|
import { deepEqual, exactPathTest, functionalUpdate, isDangerousProtocol, preloadWarning, removeTrailingSlash, } from '@tanstack/router-core';
|
|
4
|
+
import { isServer } from '@tanstack/router-core/isServer';
|
|
4
5
|
import { Dynamic } from 'solid-js/web';
|
|
5
6
|
import { useRouterState } from './useRouterState';
|
|
6
7
|
import { useRouter } from './useRouter';
|
|
7
8
|
import { useIntersectionObserver } from './utils';
|
|
9
|
+
import { useHydrated } from './ClientOnly';
|
|
8
10
|
export function useLinkProps(options) {
|
|
9
11
|
const router = useRouter();
|
|
10
12
|
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false);
|
|
13
|
+
const shouldHydrateHash = !isServer && !!router.options.ssr;
|
|
14
|
+
const hasHydrated = useHydrated();
|
|
11
15
|
let hasRenderFetched = false;
|
|
12
16
|
const [local, rest] = Solid.splitProps(Solid.mergeProps({
|
|
13
17
|
activeProps: () => ({ class: 'active' }),
|
|
@@ -73,6 +77,9 @@ export function useLinkProps(options) {
|
|
|
73
77
|
'reloadDocument',
|
|
74
78
|
'unsafeRelative',
|
|
75
79
|
]);
|
|
80
|
+
const currentLocation = useRouterState({
|
|
81
|
+
select: (s) => s.location,
|
|
82
|
+
});
|
|
76
83
|
const currentSearch = useRouterState({
|
|
77
84
|
select: (s) => s.location.searchStr,
|
|
78
85
|
});
|
|
@@ -144,38 +151,37 @@ export function useLinkProps(options) {
|
|
|
144
151
|
return local.preload ?? router.options.defaultPreload;
|
|
145
152
|
});
|
|
146
153
|
const preloadDelay = () => local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0;
|
|
147
|
-
const isActive =
|
|
148
|
-
|
|
149
|
-
|
|
154
|
+
const isActive = Solid.createMemo(() => {
|
|
155
|
+
if (externalLink())
|
|
156
|
+
return false;
|
|
157
|
+
if (local.activeOptions?.exact) {
|
|
158
|
+
const testExact = exactPathTest(currentLocation().pathname, next().pathname, router.basepath);
|
|
159
|
+
if (!testExact) {
|
|
150
160
|
return false;
|
|
151
|
-
if (local.activeOptions?.exact) {
|
|
152
|
-
const testExact = exactPathTest(s.location.pathname, next().pathname, router.basepath);
|
|
153
|
-
if (!testExact) {
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
161
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
if (local.activeOptions?.includeSearch ?? true) {
|
|
166
|
-
const searchTest = deepEqual(s.location.search, next().search, {
|
|
167
|
-
partial: !local.activeOptions?.exact,
|
|
168
|
-
ignoreUndefined: !local.activeOptions?.explicitUndefined,
|
|
169
|
-
});
|
|
170
|
-
if (!searchTest) {
|
|
171
|
-
return false;
|
|
172
|
-
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const currentPathSplit = removeTrailingSlash(currentLocation().pathname, router.basepath).split('/');
|
|
165
|
+
const nextPathSplit = removeTrailingSlash(next()?.pathname, router.basepath)?.split('/');
|
|
166
|
+
const pathIsFuzzyEqual = nextPathSplit?.every((d, i) => d === currentPathSplit[i]);
|
|
167
|
+
if (!pathIsFuzzyEqual) {
|
|
168
|
+
return false;
|
|
173
169
|
}
|
|
174
|
-
|
|
175
|
-
|
|
170
|
+
}
|
|
171
|
+
if (local.activeOptions?.includeSearch ?? true) {
|
|
172
|
+
const searchTest = deepEqual(currentLocation().search, next().search, {
|
|
173
|
+
partial: !local.activeOptions?.exact,
|
|
174
|
+
ignoreUndefined: !local.activeOptions?.explicitUndefined,
|
|
175
|
+
});
|
|
176
|
+
if (!searchTest) {
|
|
177
|
+
return false;
|
|
176
178
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
+
}
|
|
180
|
+
if (local.activeOptions?.includeHash) {
|
|
181
|
+
const currentHash = shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash;
|
|
182
|
+
return currentHash === next().hash;
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
179
185
|
});
|
|
180
186
|
const doPreload = () => router.preloadRoute(_options()).catch((err) => {
|
|
181
187
|
console.warn(err);
|
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.
|
|
3
|
+
"version": "1.159.1",
|
|
4
4
|
"description": "Modern and scalable routing for Solid applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -91,8 +91,8 @@
|
|
|
91
91
|
"isbot": "^5.1.22",
|
|
92
92
|
"tiny-invariant": "^1.3.3",
|
|
93
93
|
"tiny-warning": "^1.0.3",
|
|
94
|
-
"@tanstack/
|
|
95
|
-
"@tanstack/
|
|
94
|
+
"@tanstack/history": "1.154.14",
|
|
95
|
+
"@tanstack/router-core": "1.158.4"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
98
|
"@solidjs/testing-library": "^0.8.10",
|
package/src/link.tsx
CHANGED
|
@@ -10,12 +10,15 @@ import {
|
|
|
10
10
|
preloadWarning,
|
|
11
11
|
removeTrailingSlash,
|
|
12
12
|
} from '@tanstack/router-core'
|
|
13
|
+
|
|
14
|
+
import { isServer } from '@tanstack/router-core/isServer'
|
|
13
15
|
import { Dynamic } from 'solid-js/web'
|
|
14
16
|
import { useRouterState } from './useRouterState'
|
|
15
17
|
import { useRouter } from './useRouter'
|
|
16
18
|
|
|
17
19
|
import { useIntersectionObserver } from './utils'
|
|
18
20
|
|
|
21
|
+
import { useHydrated } from './ClientOnly'
|
|
19
22
|
import type {
|
|
20
23
|
AnyRouter,
|
|
21
24
|
Constrain,
|
|
@@ -40,6 +43,9 @@ export function useLinkProps<
|
|
|
40
43
|
): Solid.ComponentProps<'a'> {
|
|
41
44
|
const router = useRouter()
|
|
42
45
|
const [isTransitioning, setIsTransitioning] = Solid.createSignal(false)
|
|
46
|
+
const shouldHydrateHash = !isServer && !!router.options.ssr
|
|
47
|
+
const hasHydrated = useHydrated()
|
|
48
|
+
|
|
43
49
|
let hasRenderFetched = false
|
|
44
50
|
|
|
45
51
|
const [local, rest] = Solid.splitProps(
|
|
@@ -115,6 +121,10 @@ export function useLinkProps<
|
|
|
115
121
|
'unsafeRelative',
|
|
116
122
|
])
|
|
117
123
|
|
|
124
|
+
const currentLocation = useRouterState({
|
|
125
|
+
select: (s) => s.location,
|
|
126
|
+
})
|
|
127
|
+
|
|
118
128
|
const currentSearch = useRouterState({
|
|
119
129
|
select: (s) => s.location.searchStr,
|
|
120
130
|
})
|
|
@@ -194,51 +204,51 @@ export function useLinkProps<
|
|
|
194
204
|
const preloadDelay = () =>
|
|
195
205
|
local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0
|
|
196
206
|
|
|
197
|
-
const isActive =
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return false
|
|
208
|
-
}
|
|
209
|
-
} else {
|
|
210
|
-
const currentPathSplit = removeTrailingSlash(
|
|
211
|
-
s.location.pathname,
|
|
212
|
-
router.basepath,
|
|
213
|
-
).split('/')
|
|
214
|
-
const nextPathSplit = removeTrailingSlash(
|
|
215
|
-
next()?.pathname,
|
|
216
|
-
router.basepath,
|
|
217
|
-
)?.split('/')
|
|
218
|
-
|
|
219
|
-
const pathIsFuzzyEqual = nextPathSplit?.every(
|
|
220
|
-
(d, i) => d === currentPathSplit[i],
|
|
221
|
-
)
|
|
222
|
-
if (!pathIsFuzzyEqual) {
|
|
223
|
-
return false
|
|
224
|
-
}
|
|
207
|
+
const isActive = Solid.createMemo(() => {
|
|
208
|
+
if (externalLink()) return false
|
|
209
|
+
if (local.activeOptions?.exact) {
|
|
210
|
+
const testExact = exactPathTest(
|
|
211
|
+
currentLocation().pathname,
|
|
212
|
+
next().pathname,
|
|
213
|
+
router.basepath,
|
|
214
|
+
)
|
|
215
|
+
if (!testExact) {
|
|
216
|
+
return false
|
|
225
217
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
218
|
+
} else {
|
|
219
|
+
const currentPathSplit = removeTrailingSlash(
|
|
220
|
+
currentLocation().pathname,
|
|
221
|
+
router.basepath,
|
|
222
|
+
).split('/')
|
|
223
|
+
const nextPathSplit = removeTrailingSlash(
|
|
224
|
+
next()?.pathname,
|
|
225
|
+
router.basepath,
|
|
226
|
+
)?.split('/')
|
|
227
|
+
|
|
228
|
+
const pathIsFuzzyEqual = nextPathSplit?.every(
|
|
229
|
+
(d, i) => d === currentPathSplit[i],
|
|
230
|
+
)
|
|
231
|
+
if (!pathIsFuzzyEqual) {
|
|
232
|
+
return false
|
|
235
233
|
}
|
|
234
|
+
}
|
|
236
235
|
|
|
237
|
-
|
|
238
|
-
|
|
236
|
+
if (local.activeOptions?.includeSearch ?? true) {
|
|
237
|
+
const searchTest = deepEqual(currentLocation().search, next().search, {
|
|
238
|
+
partial: !local.activeOptions?.exact,
|
|
239
|
+
ignoreUndefined: !local.activeOptions?.explicitUndefined,
|
|
240
|
+
})
|
|
241
|
+
if (!searchTest) {
|
|
242
|
+
return false
|
|
239
243
|
}
|
|
240
|
-
|
|
241
|
-
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (local.activeOptions?.includeHash) {
|
|
247
|
+
const currentHash =
|
|
248
|
+
shouldHydrateHash && !hasHydrated() ? '' : currentLocation().hash
|
|
249
|
+
return currentHash === next().hash
|
|
250
|
+
}
|
|
251
|
+
return true
|
|
242
252
|
})
|
|
243
253
|
|
|
244
254
|
const doPreload = () =>
|