@tanstack/vue-router 1.141.6 → 1.141.8
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/README.md +1 -1
- package/dist/esm/link.d.ts +16 -22
- package/dist/esm/link.js +3 -2
- package/dist/esm/link.js.map +1 -1
- package/dist/esm/ssr/renderRouterToStream.js +1 -1
- package/dist/esm/ssr/renderRouterToStream.js.map +1 -1
- package/dist/source/link.d.ts +16 -22
- package/dist/source/link.jsx +3 -2
- package/dist/source/link.jsx.map +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx +1 -1
- package/dist/source/ssr/renderRouterToStream.jsx.map +1 -1
- package/package.json +3 -2
- package/src/link.tsx +67 -59
- package/src/ssr/renderRouterToStream.tsx +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# TanStack Vue Router
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
🤖 Type-safe router w/ built-in caching & URL state management for Vue!
|
|
8
8
|
|
package/dist/esm/link.d.ts
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
import { AnyRouter, Constrain, LinkOptions, RegisteredRouter, RoutePaths } from '@tanstack/router-core';
|
|
2
|
+
import { AnchorHTMLAttributes, ReservedProps } from '@vue/runtime-dom';
|
|
2
3
|
import { ValidateLinkOptions, ValidateLinkOptionsArray } from './typePrimitives.js';
|
|
3
4
|
import * as Vue from 'vue';
|
|
4
5
|
type EventHandler<TEvent = Event> = (e: TEvent) => void;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
onFocus?: EventHandler<FocusEvent>;
|
|
10
|
-
onMouseenter?: EventHandler<MouseEvent>;
|
|
11
|
-
onMouseleave?: EventHandler<MouseEvent>;
|
|
12
|
-
onMouseover?: EventHandler<MouseEvent>;
|
|
13
|
-
onMouseout?: EventHandler<MouseEvent>;
|
|
14
|
-
onTouchstart?: EventHandler<TouchEvent>;
|
|
6
|
+
type DataAttributes = {
|
|
7
|
+
[K in `data-${string}`]?: unknown;
|
|
8
|
+
};
|
|
9
|
+
type LinkHTMLAttributes = AnchorHTMLAttributes & ReservedProps & DataAttributes & {
|
|
15
10
|
onMouseEnter?: EventHandler<MouseEvent>;
|
|
16
11
|
onMouseLeave?: EventHandler<MouseEvent>;
|
|
17
12
|
onMouseOver?: EventHandler<MouseEvent>;
|
|
18
13
|
onMouseOut?: EventHandler<MouseEvent>;
|
|
19
14
|
onTouchStart?: EventHandler<TouchEvent>;
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
};
|
|
17
|
+
type PropsOfComponent<TComp> = TComp extends (props: infer P, ...args: Array<unknown>) => any ? P : TComp extends Vue.Component<infer P> ? P : Record<string, unknown>;
|
|
18
|
+
export declare function useLinkProps<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TTo extends string = '', TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = ''>(options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): LinkHTMLAttributes;
|
|
19
|
+
export type UseLinkPropsOptions<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TTo extends string | undefined = '.', TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = '.'> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkHTMLAttributes;
|
|
24
20
|
export type ActiveLinkOptions<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & ActiveLinkOptionProps<TComp>;
|
|
25
|
-
type ActiveLinkProps<TComp> = Partial<
|
|
21
|
+
type ActiveLinkProps<TComp> = Partial<(TComp extends keyof HTMLElementTagNameMap ? LinkHTMLAttributes : PropsOfComponent<TComp>) & {
|
|
26
22
|
[key: `data-${string}`]: unknown;
|
|
27
23
|
}>;
|
|
28
24
|
export interface ActiveLinkOptionProps<TComp = 'a'> {
|
|
@@ -39,15 +35,15 @@ export interface ActiveLinkOptionProps<TComp = 'a'> {
|
|
|
39
35
|
}
|
|
40
36
|
export type LinkProps<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkPropsChildren;
|
|
41
37
|
export interface LinkPropsChildren {
|
|
42
|
-
children?: Vue.
|
|
38
|
+
children?: Vue.VNodeChild | ((state: {
|
|
43
39
|
isActive: boolean;
|
|
44
40
|
isTransitioning: boolean;
|
|
45
|
-
}) => Vue.
|
|
41
|
+
}) => Vue.VNodeChild);
|
|
46
42
|
}
|
|
47
|
-
type LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap ? Omit<
|
|
43
|
+
type LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap ? Omit<LinkHTMLAttributes, keyof CreateLinkProps> : Omit<PropsOfComponent<TComp>, keyof CreateLinkProps>;
|
|
48
44
|
export type LinkComponentProps<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkComponentVueProps<TComp> & LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>;
|
|
49
45
|
export type CreateLinkProps = LinkProps<any, any, string, string, string, string>;
|
|
50
|
-
export type LinkComponent<TComp> = <TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string =
|
|
46
|
+
export type LinkComponent<in out TComp, in out TDefaultFrom extends string = string> = <TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = TDefaultFrom, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Vue.VNode;
|
|
51
47
|
export interface LinkComponentRoute<in out TDefaultFrom extends string = string> {
|
|
52
48
|
defaultFrom: TDefaultFrom;
|
|
53
49
|
<TRouter extends AnyRouter = RegisteredRouter, const TTo extends string | undefined = undefined, const TMaskTo extends string = ''>(props: LinkComponentProps<'a', TRouter, this['defaultFrom'], TTo, this['defaultFrom'], TMaskTo>): Vue.VNode;
|
|
@@ -56,9 +52,7 @@ export declare function createLink<const TComp>(Comp: Constrain<TComp, any, (pro
|
|
|
56
52
|
/**
|
|
57
53
|
* Link component with proper TypeScript generics support
|
|
58
54
|
*/
|
|
59
|
-
export declare const Link:
|
|
60
|
-
<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter["routeTree"]> | string = string, TTo extends string | undefined = ".", TMaskFrom extends RoutePaths<TRouter["routeTree"]> | string = TFrom, TMaskTo extends string = ".">(props: LinkComponentProps<"a", TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): Vue.VNode;
|
|
61
|
-
};
|
|
55
|
+
export declare const Link: Vue.Component<unknown> & Vue.Component<CreateLinkProps> & LinkComponent<"a">;
|
|
62
56
|
export type LinkOptionsFnOptions<TOptions, TComp, TRouter extends AnyRouter = RegisteredRouter> = TOptions extends ReadonlyArray<any> ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp> : ValidateLinkOptions<TRouter, TOptions, string, TComp>;
|
|
63
57
|
export type LinkOptionsFn<TComp> = <const TOptions, TRouter extends AnyRouter = RegisteredRouter>(options: LinkOptionsFnOptions<TOptions, TComp, TRouter>) => TOptions;
|
|
64
58
|
export declare const linkOptions: LinkOptionsFn<'a'>;
|
package/dist/esm/link.js
CHANGED
|
@@ -98,9 +98,10 @@ function useLinkProps(options) {
|
|
|
98
98
|
});
|
|
99
99
|
const getPropsSafeToSpread = () => {
|
|
100
100
|
const result = {};
|
|
101
|
+
const optionRecord = options;
|
|
101
102
|
for (const key in options) {
|
|
102
103
|
if (!["activeProps", "inactiveProps", "activeOptions", "to", "preload", "preloadDelay", "hashScrollIntoView", "replace", "startTransition", "resetScroll", "viewTransition", "children", "target", "disabled", "style", "class", "onClick", "onFocus", "onMouseEnter", "onMouseLeave", "onMouseOver", "onMouseOut", "onTouchStart", "ignoreBlocker", "params", "search", "hash", "state", "mask", "reloadDocument", "_asChild", "from", "additionalProps"].includes(key)) {
|
|
103
|
-
result[key] =
|
|
104
|
+
result[key] = optionRecord[key];
|
|
104
105
|
}
|
|
105
106
|
}
|
|
106
107
|
return result;
|
|
@@ -306,7 +307,7 @@ function createLink(Comp) {
|
|
|
306
307
|
attrs,
|
|
307
308
|
slots
|
|
308
309
|
}) {
|
|
309
|
-
return () => Vue.h(
|
|
310
|
+
return () => Vue.h(LinkImpl, {
|
|
310
311
|
...attrs,
|
|
311
312
|
_asChild: Comp
|
|
312
313
|
}, slots);
|
package/dist/esm/link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport {\n deepEqual,\n exactPathTest,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { useIntersectionObserver } from './utils'\nimport { useMatches } from './Matches'\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\n// Type definitions to replace missing Vue JSX types\ntype EventHandler<TEvent = Event> = (e: TEvent) => void\ninterface HTMLAttributes {\n class?: string\n style?: Record<string, string | number>\n onClick?: EventHandler<MouseEvent>\n onFocus?: EventHandler<FocusEvent>\n // Vue 3's h() function expects lowercase event names after 'on' prefix\n onMouseenter?: EventHandler<MouseEvent>\n onMouseleave?: EventHandler<MouseEvent>\n onMouseover?: EventHandler<MouseEvent>\n onMouseout?: EventHandler<MouseEvent>\n onTouchstart?: EventHandler<TouchEvent>\n // Also accept the camelCase versions for external API compatibility\n onMouseEnter?: EventHandler<MouseEvent>\n onMouseLeave?: EventHandler<MouseEvent>\n onMouseOver?: EventHandler<MouseEvent>\n onMouseOut?: EventHandler<MouseEvent>\n onTouchStart?: EventHandler<TouchEvent>\n [key: string]: any\n}\n\ninterface StyledProps {\n class?: string\n style?: Record<string, string | number>\n [key: string]: any\n}\n\nexport function useLinkProps<\n TRouter extends AnyRouter = RegisteredRouter,\n TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n TTo extends string = '',\n TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n TMaskTo extends string = '',\n>(\n options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n): HTMLAttributes {\n const router = useRouter()\n const isTransitioning = Vue.ref(false)\n let hasRenderFetched = false\n\n // Ensure router is defined before proceeding\n if (!router) {\n console.warn('useRouter must be used inside a <RouterProvider> component!')\n return {}\n }\n\n // Determine if the link is external or internal\n const type = Vue.computed(() => {\n try {\n new URL(`${options.to}`)\n return 'external'\n } catch {\n return 'internal'\n }\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // when `from` is not supplied, use the leaf route of the current matches as the `from` location\n const from = useMatches({\n select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,\n })\n\n const _options = Vue.computed(() => ({\n ...options,\n from: from.value,\n }))\n\n const next = Vue.computed(() => {\n // Depend on search to rebuild when search changes\n currentSearch.value\n return router.buildLocation(_options.value as any)\n })\n\n const preload = Vue.computed(() => {\n if (_options.value.reloadDocument) {\n return false\n }\n return options.preload ?? router.options.defaultPreload\n })\n\n const preloadDelay = Vue.computed(\n () => options.preloadDelay ?? router.options.defaultPreloadDelay ?? 0,\n )\n\n const isActive = useRouterState({\n select: (s) => {\n const activeOptions = options.activeOptions\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next.value.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.value?.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 (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(s.location.search, next.value.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n return s.location.hash === next.value.hash\n }\n return true\n },\n })\n\n const doPreload = () =>\n router.preloadRoute(_options.value 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 = Vue.ref<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: () => !!options.disabled || !(preload.value === 'viewport') },\n )\n\n Vue.effect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!options.disabled && preload.value === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n // Create safe props that can be spread\n const getPropsSafeToSpread = () => {\n const result: Record<string, any> = {}\n for (const key in options) {\n if (\n ![\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n '_asChild',\n 'from',\n 'additionalProps',\n ].includes(key)\n ) {\n result[key] = options[key]\n }\n }\n return result\n }\n\n if (type.value === 'external') {\n // External links just have simple props\n const externalProps: HTMLAttributes = {\n ...getPropsSafeToSpread(),\n ref,\n href: options.to,\n target: options.target,\n disabled: options.disabled,\n style: options.style,\n class: options.class,\n onClick: options.onClick,\n onFocus: options.onFocus,\n onMouseEnter: options.onMouseEnter,\n onMouseLeave: options.onMouseLeave,\n onMouseOver: options.onMouseOver,\n onMouseOut: options.onMouseOut,\n onTouchStart: options.onTouchStart,\n }\n\n // Remove undefined values\n Object.keys(externalProps).forEach((key) => {\n if (externalProps[key] === undefined) {\n delete externalProps[key]\n }\n })\n\n return externalProps\n }\n\n // The click handler\n const handleClick = (e: MouseEvent): void => {\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 options.target !== undefined ? options.target : elementTarget\n\n if (\n !options.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n // Don't prevent default or handle navigation if reloadDocument is true\n if (_options.value.reloadDocument) {\n return\n }\n\n e.preventDefault()\n\n isTransitioning.value = true\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n isTransitioning.value = false\n })\n\n // All is well? Navigate!\n router.navigate({\n ..._options.value,\n replace: options.replace,\n resetScroll: options.resetScroll,\n hashScrollIntoView: options.hashScrollIntoView,\n startTransition: options.startTransition,\n viewTransition: options.viewTransition,\n ignoreBlocker: options.ignoreBlocker,\n } as any)\n }\n }\n\n // The focus handler\n const handleFocus = (_: FocusEvent) => {\n if (options.disabled) return\n if (preload.value) {\n doPreload()\n }\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (options.disabled) return\n if (preload.value) {\n doPreload()\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n if (options.disabled) return\n // Use currentTarget (the element with the handler) instead of target (which may be a child)\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (preload.value) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay.value)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (options.disabled) return\n // Use currentTarget (the element with the handler) instead of target (which may be a child)\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n clearTimeout(eventTarget.preloadTimeout)\n eventTarget.preloadTimeout = null\n }\n }\n\n // Helper to compose event handlers - with explicit return type and better type handling\n function composeEventHandlers<T extends Event>(\n handlers: Array<EventHandler<T> | undefined>,\n ): (e: T) => void {\n return (event: T) => {\n for (const handler of handlers) {\n if (handler) {\n handler(event)\n }\n }\n }\n }\n\n // Get the active and inactive props\n const resolvedActiveProps = Vue.computed<StyledProps>(() => {\n const activeProps = options.activeProps || (() => ({ class: 'active' }))\n const props = isActive.value\n ? typeof activeProps === 'function'\n ? activeProps()\n : activeProps\n : {}\n\n return props || { class: undefined, style: undefined }\n })\n\n const resolvedInactiveProps = Vue.computed<StyledProps>(() => {\n const inactiveProps = options.inactiveProps || (() => ({}))\n const props = isActive.value\n ? {}\n : typeof inactiveProps === 'function'\n ? inactiveProps()\n : inactiveProps\n\n return props || { class: undefined, style: undefined }\n })\n\n const resolvedClassName = Vue.computed(() => {\n const classes = [\n options.class,\n resolvedActiveProps.value?.class,\n resolvedInactiveProps.value?.class,\n ].filter(Boolean)\n return classes.length ? classes.join(' ') : undefined\n })\n\n const resolvedStyle = Vue.computed(() => {\n const result: Record<string, string | number> = {}\n\n // Merge styles from all sources\n if (options.style) {\n Object.assign(result, options.style)\n }\n\n if (resolvedActiveProps.value?.style) {\n Object.assign(result, resolvedActiveProps.value.style)\n }\n\n if (resolvedInactiveProps.value?.style) {\n Object.assign(result, resolvedInactiveProps.value.style)\n }\n\n return Object.keys(result).length > 0 ? result : undefined\n })\n\n const href = Vue.computed(() => {\n if (options.disabled) {\n return undefined\n }\n const nextLocation = next.value\n const maskedLocation = nextLocation?.maskedLocation\n\n let hrefValue: string\n if (maskedLocation) {\n hrefValue = maskedLocation.url.href\n } else {\n hrefValue = nextLocation?.url.href\n }\n\n // Handle origin stripping like Solid does\n if (router.origin && hrefValue?.startsWith(router.origin)) {\n hrefValue = router.history.createHref(\n hrefValue.replace(router.origin, ''),\n )\n }\n\n return hrefValue\n })\n\n // Create static event handlers that don't change between renders\n const staticEventHandlers = {\n onClick: composeEventHandlers<MouseEvent>([\n options.onClick,\n handleClick,\n ]) as any,\n onFocus: composeEventHandlers<FocusEvent>([\n options.onFocus,\n handleFocus,\n ]) as any,\n onMouseenter: composeEventHandlers<MouseEvent>([\n options.onMouseEnter,\n handleEnter,\n ]) as any,\n onMouseover: composeEventHandlers<MouseEvent>([\n options.onMouseOver,\n handleEnter,\n ]) as any,\n onMouseleave: composeEventHandlers<MouseEvent>([\n options.onMouseLeave,\n handleLeave,\n ]) as any,\n onMouseout: composeEventHandlers<MouseEvent>([\n options.onMouseOut,\n handleLeave,\n ]) as any,\n onTouchstart: composeEventHandlers<TouchEvent>([\n options.onTouchStart,\n handleTouchStart,\n ]) as any,\n }\n\n // Compute all props synchronously to avoid hydration mismatches\n // Using Vue.computed ensures props are calculated at render time, not after\n const computedProps = Vue.computed<HTMLAttributes>(() => {\n const result: HTMLAttributes = {\n ...getPropsSafeToSpread(),\n href: href.value,\n ref,\n ...staticEventHandlers,\n disabled: !!options.disabled,\n target: options.target,\n }\n\n // Add style if present\n if (resolvedStyle.value) {\n result.style = resolvedStyle.value\n }\n\n // Add class if present\n if (resolvedClassName.value) {\n result.class = resolvedClassName.value\n }\n\n // Add disabled props\n if (options.disabled) {\n result.role = 'link'\n result['aria-disabled'] = true\n }\n\n // Add active status\n if (isActive.value) {\n result['data-status'] = 'active'\n result['aria-current'] = 'page'\n }\n\n // Add transitioning status\n if (isTransitioning.value) {\n result['data-transitioning'] = 'transitioning'\n }\n\n // Merge active/inactive props (excluding class and style which are handled above)\n const activeP = resolvedActiveProps.value\n const inactiveP = resolvedInactiveProps.value\n\n for (const key of Object.keys(activeP)) {\n if (key !== 'class' && key !== 'style') {\n result[key] = activeP[key]\n }\n }\n for (const key of Object.keys(inactiveP)) {\n if (key !== 'class' && key !== 'style') {\n result[key] = inactiveP[key]\n }\n }\n\n return result\n })\n\n // Return the computed ref itself - callers should access .value\n return computedProps as unknown as HTMLAttributes\n}\n\n// Type definitions\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 HTMLAttributes\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 HTMLAttributes & {\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 | Vue.VNode\n | ((state: { isActive: boolean; isTransitioning: boolean }) => Vue.VNode)\n}\n\ntype LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap\n ? Omit<HTMLAttributes, keyof CreateLinkProps>\n : TComp extends Vue.Component\n ? Record<string, any>\n : Record<string, any>\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> = LinkComponentVueProps<TComp> &\n LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n any,\n any,\n string,\n string,\n string,\n string\n>\n\nexport type LinkComponent<TComp> = <\n TRouter extends AnyRouter = RegisteredRouter,\n const TFrom extends string = string,\n const TTo extends string | undefined = undefined,\n const TMaskFrom extends string = TFrom,\n const TMaskTo extends string = '',\n>(\n props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Vue.VNode\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 ): Vue.VNode\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Vue.VNode>,\n): LinkComponent<TComp> {\n return Vue.defineComponent({\n name: 'CreatedLink',\n inheritAttrs: false,\n setup(_, { attrs, slots }) {\n return () => Vue.h(Link, { ...attrs, _asChild: Comp }, slots)\n },\n }) as any\n}\n\nconst LinkImpl = Vue.defineComponent({\n name: 'Link',\n inheritAttrs: false,\n props: [\n '_asChild',\n 'to',\n 'preload',\n 'preloadDelay',\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'from',\n 'search',\n 'params',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'disabled',\n 'additionalProps',\n 'viewTransition',\n 'resetScroll',\n 'startTransition',\n 'hashScrollIntoView',\n 'replace',\n 'ignoreBlocker',\n 'target',\n ],\n setup(props, { attrs, slots }) {\n // Call useLinkProps ONCE during setup with combined props and attrs\n // The returned object is a computed ref that updates reactively\n const allProps = { ...props, ...attrs }\n const linkPropsComputed = useLinkProps(\n allProps as any,\n ) as unknown as Vue.ComputedRef<HTMLAttributes>\n\n return () => {\n const Component = props._asChild || 'a'\n\n // Access the computed value to get fresh props each render\n const linkProps = linkPropsComputed.value\n\n const isActive = linkProps['data-status'] === 'active'\n const isTransitioning =\n linkProps['data-transitioning'] === 'transitioning'\n\n // Create the slot content or empty array if no default slot\n const slotContent = slots.default\n ? slots.default({\n isActive,\n isTransitioning,\n })\n : []\n\n // Special handling for SVG links - wrap an <a> inside the SVG\n if (Component === 'svg') {\n // Create props without class for svg link\n const svgLinkProps = { ...linkProps }\n delete (svgLinkProps as any).class\n return Vue.h('svg', {}, [Vue.h('a', svgLinkProps, slotContent)])\n }\n\n // For custom functional components (non-string), pass children as a prop\n // since they may expect children as a prop like in Solid\n if (typeof Component !== 'string') {\n return Vue.h(\n Component,\n { ...linkProps, children: slotContent },\n slotContent,\n )\n }\n\n // Return the component with props and children\n return Vue.h(Component, linkProps, slotContent)\n }\n },\n})\n\n/**\n * Link component with proper TypeScript generics support\n */\nexport const Link = LinkImpl as unknown as {\n <\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 >(\n props: LinkComponentProps<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n ): Vue.VNode\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","Vue","ref","hasRenderFetched","console","warn","type","computed","URL","to","currentSearch","useRouterState","select","s","location","searchStr","from","useMatches","matches","length","fullPath","_options","value","next","buildLocation","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","useIntersectionObserver","rootMargin","disabled","effect","getPropsSafeToSpread","result","key","includes","externalProps","href","target","style","class","onClick","onFocus","onMouseEnter","onMouseLeave","onMouseOver","onMouseOut","onTouchStart","Object","keys","forEach","undefined","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","_","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeEventHandlers","handlers","event","handler","resolvedActiveProps","activeProps","props","resolvedInactiveProps","inactiveProps","resolvedClassName","classes","filter","Boolean","join","resolvedStyle","assign","nextLocation","maskedLocation","hrefValue","url","origin","startsWith","history","createHref","staticEventHandlers","onMouseenter","onMouseover","onMouseleave","onMouseout","onTouchstart","computedProps","role","activeP","inactiveP","createLink","Comp","defineComponent","name","inheritAttrs","setup","attrs","slots","h","Link","_asChild","LinkImpl","allProps","linkPropsComputed","Component","linkProps","slotContent","default","svgLinkProps","children","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../src/link.tsx"],"sourcesContent":["import * as Vue from 'vue'\nimport {\n deepEqual,\n exactPathTest,\n preloadWarning,\n removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { useRouterState } from './useRouterState'\nimport { useRouter } from './useRouter'\nimport { useIntersectionObserver } from './utils'\nimport { useMatches } from './Matches'\n\nimport type {\n AnyRouter,\n Constrain,\n LinkCurrentTargetElement,\n LinkOptions,\n RegisteredRouter,\n RoutePaths,\n} from '@tanstack/router-core'\nimport type { AnchorHTMLAttributes, ReservedProps } from '@vue/runtime-dom'\nimport type {\n ValidateLinkOptions,\n ValidateLinkOptionsArray,\n} from './typePrimitives'\n\ntype EventHandler<TEvent = Event> = (e: TEvent) => void\n\ntype DataAttributes = {\n [K in `data-${string}`]?: unknown\n}\n\ntype LinkHTMLAttributes = AnchorHTMLAttributes &\n ReservedProps &\n DataAttributes & {\n // Vue's runtime-dom types use lowercase event names.\n // Also accept camelCase versions for external API compatibility.\n onMouseEnter?: EventHandler<MouseEvent>\n onMouseLeave?: EventHandler<MouseEvent>\n onMouseOver?: EventHandler<MouseEvent>\n onMouseOut?: EventHandler<MouseEvent>\n onTouchStart?: EventHandler<TouchEvent>\n\n // `disabled` is not a valid <a> attribute, but is useful when using `asChild`.\n disabled?: boolean\n }\n\ninterface StyledProps {\n class?: LinkHTMLAttributes['class']\n style?: LinkHTMLAttributes['style']\n [key: string]: unknown\n}\n\ntype PropsOfComponent<TComp> =\n // Functional components\n TComp extends (props: infer P, ...args: Array<unknown>) => any\n ? P\n : // Vue components (defineComponent, class components, etc)\n TComp extends Vue.Component<infer P>\n ? P\n : Record<string, unknown>\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): LinkHTMLAttributes {\n const router = useRouter()\n const isTransitioning = Vue.ref(false)\n let hasRenderFetched = false\n\n // Ensure router is defined before proceeding\n if (!router) {\n console.warn('useRouter must be used inside a <RouterProvider> component!')\n return {}\n }\n\n // Determine if the link is external or internal\n const type = Vue.computed(() => {\n try {\n new URL(`${options.to}`)\n return 'external'\n } catch {\n return 'internal'\n }\n })\n\n const currentSearch = useRouterState({\n select: (s) => s.location.searchStr,\n })\n\n // when `from` is not supplied, use the leaf route of the current matches as the `from` location\n const from = useMatches({\n select: (matches) => options.from ?? matches[matches.length - 1]?.fullPath,\n })\n\n const _options = Vue.computed(() => ({\n ...options,\n from: from.value,\n }))\n\n const next = Vue.computed(() => {\n // Depend on search to rebuild when search changes\n currentSearch.value\n return router.buildLocation(_options.value as any)\n })\n\n const preload = Vue.computed(() => {\n if (_options.value.reloadDocument) {\n return false\n }\n return options.preload ?? router.options.defaultPreload\n })\n\n const preloadDelay = Vue.computed(\n () => options.preloadDelay ?? router.options.defaultPreloadDelay ?? 0,\n )\n\n const isActive = useRouterState({\n select: (s) => {\n const activeOptions = options.activeOptions\n if (activeOptions?.exact) {\n const testExact = exactPathTest(\n s.location.pathname,\n next.value.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.value?.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 (activeOptions?.includeSearch ?? true) {\n const searchTest = deepEqual(s.location.search, next.value.search, {\n partial: !activeOptions?.exact,\n ignoreUndefined: !activeOptions?.explicitUndefined,\n })\n if (!searchTest) {\n return false\n }\n }\n\n if (activeOptions?.includeHash) {\n return s.location.hash === next.value.hash\n }\n return true\n },\n })\n\n const doPreload = () =>\n router.preloadRoute(_options.value 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 = Vue.ref<Element | null>(null)\n\n useIntersectionObserver(\n ref,\n preloadViewportIoCallback,\n { rootMargin: '100px' },\n { disabled: () => !!options.disabled || !(preload.value === 'viewport') },\n )\n\n Vue.effect(() => {\n if (hasRenderFetched) {\n return\n }\n if (!options.disabled && preload.value === 'render') {\n doPreload()\n hasRenderFetched = true\n }\n })\n\n // Create safe props that can be spread\n const getPropsSafeToSpread = () => {\n const result: Record<string, any> = {}\n const optionRecord = options as unknown as Record<string, unknown>\n for (const key in options) {\n if (\n ![\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'to',\n 'preload',\n 'preloadDelay',\n 'hashScrollIntoView',\n 'replace',\n 'startTransition',\n 'resetScroll',\n 'viewTransition',\n 'children',\n 'target',\n 'disabled',\n 'style',\n 'class',\n 'onClick',\n 'onFocus',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseOver',\n 'onMouseOut',\n 'onTouchStart',\n 'ignoreBlocker',\n 'params',\n 'search',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n '_asChild',\n 'from',\n 'additionalProps',\n ].includes(key)\n ) {\n result[key] = optionRecord[key]\n }\n }\n return result\n }\n\n if (type.value === 'external') {\n // External links just have simple props\n const externalProps: Record<string, unknown> = {\n ...getPropsSafeToSpread(),\n ref,\n href: options.to,\n target: options.target,\n disabled: options.disabled,\n style: options.style,\n class: options.class,\n onClick: options.onClick,\n onFocus: options.onFocus,\n onMouseEnter: options.onMouseEnter,\n onMouseLeave: options.onMouseLeave,\n onMouseOver: options.onMouseOver,\n onMouseOut: options.onMouseOut,\n onTouchStart: options.onTouchStart,\n }\n\n // Remove undefined values\n Object.keys(externalProps).forEach((key) => {\n if (externalProps[key] === undefined) {\n delete externalProps[key]\n }\n })\n\n return externalProps as LinkHTMLAttributes\n }\n\n // The click handler\n const handleClick = (e: PointerEvent): void => {\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 options.target !== undefined ? options.target : elementTarget\n\n if (\n !options.disabled &&\n !isCtrlEvent(e) &&\n !e.defaultPrevented &&\n (!effectiveTarget || effectiveTarget === '_self') &&\n e.button === 0\n ) {\n // Don't prevent default or handle navigation if reloadDocument is true\n if (_options.value.reloadDocument) {\n return\n }\n\n e.preventDefault()\n\n isTransitioning.value = true\n\n const unsub = router.subscribe('onResolved', () => {\n unsub()\n isTransitioning.value = false\n })\n\n // All is well? Navigate!\n router.navigate({\n ..._options.value,\n replace: options.replace,\n resetScroll: options.resetScroll,\n hashScrollIntoView: options.hashScrollIntoView,\n startTransition: options.startTransition,\n viewTransition: options.viewTransition,\n ignoreBlocker: options.ignoreBlocker,\n })\n }\n }\n\n // The focus handler\n const handleFocus = (_: FocusEvent) => {\n if (options.disabled) return\n if (preload.value) {\n doPreload()\n }\n }\n\n const handleTouchStart = (_: TouchEvent) => {\n if (options.disabled) return\n if (preload.value) {\n doPreload()\n }\n }\n\n const handleEnter = (e: MouseEvent) => {\n if (options.disabled) return\n // Use currentTarget (the element with the handler) instead of target (which may be a child)\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (preload.value) {\n if (eventTarget.preloadTimeout) {\n return\n }\n\n eventTarget.preloadTimeout = setTimeout(() => {\n eventTarget.preloadTimeout = null\n doPreload()\n }, preloadDelay.value)\n }\n }\n\n const handleLeave = (e: MouseEvent) => {\n if (options.disabled) return\n // Use currentTarget (the element with the handler) instead of target (which may be a child)\n const eventTarget = (e.currentTarget ||\n e.target ||\n {}) as LinkCurrentTargetElement\n\n if (eventTarget.preloadTimeout) {\n clearTimeout(eventTarget.preloadTimeout)\n eventTarget.preloadTimeout = null\n }\n }\n\n // Helper to compose event handlers - with explicit return type and better type handling\n function composeEventHandlers<T extends Event>(\n handlers: Array<EventHandler<T> | undefined>,\n ): (e: T) => void {\n return (event: T) => {\n for (const handler of handlers) {\n if (handler) {\n handler(event)\n }\n }\n }\n }\n\n // Get the active and inactive props\n const resolvedActiveProps = Vue.computed<StyledProps>(() => {\n const activeProps = options.activeProps || (() => ({ class: 'active' }))\n const props = isActive.value\n ? typeof activeProps === 'function'\n ? activeProps()\n : activeProps\n : {}\n\n return props || { class: undefined, style: undefined }\n })\n\n const resolvedInactiveProps = Vue.computed<StyledProps>(() => {\n const inactiveProps = options.inactiveProps || (() => ({}))\n const props = isActive.value\n ? {}\n : typeof inactiveProps === 'function'\n ? inactiveProps()\n : inactiveProps\n\n return props || { class: undefined, style: undefined }\n })\n\n const resolvedClassName = Vue.computed(() => {\n const classes = [\n options.class,\n resolvedActiveProps.value?.class,\n resolvedInactiveProps.value?.class,\n ].filter(Boolean)\n return classes.length ? classes.join(' ') : undefined\n })\n\n const resolvedStyle = Vue.computed(() => {\n const result: Record<string, string | number> = {}\n\n // Merge styles from all sources\n if (options.style) {\n Object.assign(result, options.style)\n }\n\n if (resolvedActiveProps.value?.style) {\n Object.assign(result, resolvedActiveProps.value.style)\n }\n\n if (resolvedInactiveProps.value?.style) {\n Object.assign(result, resolvedInactiveProps.value.style)\n }\n\n return Object.keys(result).length > 0 ? result : undefined\n })\n\n const href = Vue.computed(() => {\n if (options.disabled) {\n return undefined\n }\n const nextLocation = next.value\n const maskedLocation = nextLocation?.maskedLocation\n\n let hrefValue: string\n if (maskedLocation) {\n hrefValue = maskedLocation.url.href\n } else {\n hrefValue = nextLocation?.url.href\n }\n\n // Handle origin stripping like Solid does\n if (router.origin && hrefValue?.startsWith(router.origin)) {\n hrefValue = router.history.createHref(\n hrefValue.replace(router.origin, ''),\n )\n }\n\n return hrefValue\n })\n\n // Create static event handlers that don't change between renders\n const staticEventHandlers = {\n onClick: composeEventHandlers<PointerEvent>([\n options.onClick,\n handleClick,\n ]) as any,\n onFocus: composeEventHandlers<FocusEvent>([\n options.onFocus,\n handleFocus,\n ]) as any,\n onMouseenter: composeEventHandlers<MouseEvent>([\n options.onMouseEnter,\n handleEnter,\n ]) as any,\n onMouseover: composeEventHandlers<MouseEvent>([\n options.onMouseOver,\n handleEnter,\n ]) as any,\n onMouseleave: composeEventHandlers<MouseEvent>([\n options.onMouseLeave,\n handleLeave,\n ]) as any,\n onMouseout: composeEventHandlers<MouseEvent>([\n options.onMouseOut,\n handleLeave,\n ]) as any,\n onTouchstart: composeEventHandlers<TouchEvent>([\n options.onTouchStart,\n handleTouchStart,\n ]) as any,\n }\n\n // Compute all props synchronously to avoid hydration mismatches\n // Using Vue.computed ensures props are calculated at render time, not after\n const computedProps = Vue.computed<LinkHTMLAttributes>(() => {\n const result: Record<string, unknown> = {\n ...getPropsSafeToSpread(),\n href: href.value,\n ref,\n ...staticEventHandlers,\n disabled: !!options.disabled,\n target: options.target,\n }\n\n // Add style if present\n if (resolvedStyle.value) {\n result.style = resolvedStyle.value\n }\n\n // Add class if present\n if (resolvedClassName.value) {\n result.class = resolvedClassName.value\n }\n\n // Add disabled props\n if (options.disabled) {\n result.role = 'link'\n result['aria-disabled'] = true\n }\n\n // Add active status\n if (isActive.value) {\n result['data-status'] = 'active'\n result['aria-current'] = 'page'\n }\n\n // Add transitioning status\n if (isTransitioning.value) {\n result['data-transitioning'] = 'transitioning'\n }\n\n // Merge active/inactive props (excluding class and style which are handled above)\n const activeP = resolvedActiveProps.value\n const inactiveP = resolvedInactiveProps.value\n\n for (const key of Object.keys(activeP)) {\n if (key !== 'class' && key !== 'style') {\n result[key] = (activeP as any)[key]\n }\n }\n for (const key of Object.keys(inactiveP)) {\n if (key !== 'class' && key !== 'style') {\n result[key] = (inactiveP as any)[key]\n }\n }\n\n return result as LinkHTMLAttributes\n })\n\n // Return the computed ref itself - callers should access .value\n return computedProps as unknown as LinkHTMLAttributes\n}\n\n// Type definitions\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 LinkHTMLAttributes\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 (TComp extends keyof HTMLElementTagNameMap\n ? LinkHTMLAttributes\n : PropsOfComponent<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 | Vue.VNodeChild\n | ((state: {\n isActive: boolean\n isTransitioning: boolean\n }) => Vue.VNodeChild)\n}\n\ntype LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap\n ? Omit<LinkHTMLAttributes, keyof CreateLinkProps>\n : Omit<PropsOfComponent<TComp>, keyof CreateLinkProps>\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> = LinkComponentVueProps<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) => Vue.VNode\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 ): Vue.VNode\n}\n\nexport function createLink<const TComp>(\n Comp: Constrain<TComp, any, (props: CreateLinkProps) => Vue.VNode>,\n): LinkComponent<TComp> {\n return Vue.defineComponent({\n name: 'CreatedLink',\n inheritAttrs: false,\n setup(_, { attrs, slots }) {\n return () => Vue.h(LinkImpl as any, { ...attrs, _asChild: Comp }, slots)\n },\n }) as any\n}\n\nconst LinkImpl = Vue.defineComponent({\n name: 'Link',\n inheritAttrs: false,\n props: [\n '_asChild',\n 'to',\n 'preload',\n 'preloadDelay',\n 'activeProps',\n 'inactiveProps',\n 'activeOptions',\n 'from',\n 'search',\n 'params',\n 'hash',\n 'state',\n 'mask',\n 'reloadDocument',\n 'disabled',\n 'additionalProps',\n 'viewTransition',\n 'resetScroll',\n 'startTransition',\n 'hashScrollIntoView',\n 'replace',\n 'ignoreBlocker',\n 'target',\n ],\n setup(props, { attrs, slots }) {\n // Call useLinkProps ONCE during setup with combined props and attrs\n // The returned object is a computed ref that updates reactively\n const allProps = { ...props, ...attrs }\n const linkPropsComputed = useLinkProps(\n allProps as any,\n ) as unknown as Vue.ComputedRef<LinkHTMLAttributes>\n\n return () => {\n const Component = props._asChild || 'a'\n\n // Access the computed value to get fresh props each render\n const linkProps = linkPropsComputed.value\n\n const isActive = linkProps['data-status'] === 'active'\n const isTransitioning =\n linkProps['data-transitioning'] === 'transitioning'\n\n // Create the slot content or empty array if no default slot\n const slotContent = slots.default\n ? slots.default({\n isActive,\n isTransitioning,\n })\n : []\n\n // Special handling for SVG links - wrap an <a> inside the SVG\n if (Component === 'svg') {\n // Create props without class for svg link\n const svgLinkProps = { ...linkProps }\n delete svgLinkProps.class\n return Vue.h('svg', {}, [Vue.h('a', svgLinkProps, slotContent)])\n }\n\n // For custom functional components (non-string), pass children as a prop\n // since they may expect children as a prop like in Solid\n if (typeof Component !== 'string') {\n return Vue.h(\n Component,\n { ...linkProps, children: slotContent },\n slotContent,\n )\n }\n\n // Return the component with props and children\n return Vue.h(Component, linkProps, slotContent)\n }\n },\n})\n\n/**\n * Link component with proper TypeScript generics support\n */\nexport const Link = LinkImpl as unknown as Vue.Component<unknown> &\n Vue.Component<CreateLinkProps> &\n LinkComponent<'a'>\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","Vue","ref","hasRenderFetched","console","warn","type","computed","URL","to","currentSearch","useRouterState","select","s","location","searchStr","from","useMatches","matches","length","fullPath","_options","value","next","buildLocation","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","isActive","activeOptions","exact","testExact","exactPathTest","pathname","basepath","currentPathSplit","removeTrailingSlash","split","nextPathSplit","pathIsFuzzyEqual","every","d","i","includeSearch","searchTest","deepEqual","search","partial","ignoreUndefined","explicitUndefined","includeHash","hash","doPreload","preloadRoute","catch","err","preloadWarning","preloadViewportIoCallback","entry","isIntersecting","useIntersectionObserver","rootMargin","disabled","effect","getPropsSafeToSpread","result","optionRecord","key","includes","externalProps","href","target","style","class","onClick","onFocus","onMouseEnter","onMouseLeave","onMouseOver","onMouseOut","onTouchStart","Object","keys","forEach","undefined","handleClick","e","elementTarget","currentTarget","getAttribute","effectiveTarget","isCtrlEvent","defaultPrevented","button","preventDefault","unsub","subscribe","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleFocus","_","handleTouchStart","handleEnter","eventTarget","preloadTimeout","setTimeout","handleLeave","clearTimeout","composeEventHandlers","handlers","event","handler","resolvedActiveProps","activeProps","props","resolvedInactiveProps","inactiveProps","resolvedClassName","classes","filter","Boolean","join","resolvedStyle","assign","nextLocation","maskedLocation","hrefValue","url","origin","startsWith","history","createHref","staticEventHandlers","onMouseenter","onMouseover","onMouseleave","onMouseout","onTouchstart","computedProps","role","activeP","inactiveP","createLink","Comp","defineComponent","name","inheritAttrs","setup","attrs","slots","h","LinkImpl","_asChild","allProps","linkPropsComputed","Component","linkProps","slotContent","default","svgLinkProps","children","Link","metaKey","altKey","ctrlKey","shiftKey","linkOptions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToStream.js","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import { ReadableStream as NodeReadableStream } from 'node:stream/web'\nimport * as Vue from 'vue'\nimport { pipeToWebWritable, renderToString } from 'vue/server-renderer'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { Component } from 'vue'\nimport type { ReadableStream } from 'node:stream/web'\n\nfunction prependDoctype(\n readable: globalThis.ReadableStream,\n): NodeReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let sentDoctype = false\n\n return new NodeReadableStream<Uint8Array>({\n
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.js","sources":["../../../src/ssr/renderRouterToStream.tsx"],"sourcesContent":["import { ReadableStream as NodeReadableStream } from 'node:stream/web'\nimport * as Vue from 'vue'\nimport { pipeToWebWritable, renderToString } from 'vue/server-renderer'\nimport { isbot } from 'isbot'\nimport { transformReadableStreamWithRouter } from '@tanstack/router-core/ssr/server'\nimport type { AnyRouter } from '@tanstack/router-core'\nimport type { Component } from 'vue'\nimport type { ReadableStream } from 'node:stream/web'\n\nfunction prependDoctype(\n readable: globalThis.ReadableStream,\n): NodeReadableStream<Uint8Array> {\n const encoder = new TextEncoder()\n let sentDoctype = false\n\n return new NodeReadableStream<Uint8Array>({\n start(controller) {\n const reader = readable.getReader()\n\n async function pump(): Promise<void> {\n const { done, value } = await reader.read()\n if (done) {\n controller.close()\n return\n }\n\n if (!sentDoctype) {\n sentDoctype = true\n controller.enqueue(encoder.encode('<!DOCTYPE html>'))\n }\n controller.enqueue(value)\n return pump()\n }\n\n pump().catch((err) => controller.error(err))\n },\n })\n}\n\nexport const renderRouterToStream = async ({\n request,\n router,\n responseHeaders,\n App,\n}: {\n request: Request\n router: AnyRouter\n responseHeaders: Headers\n App: Component\n}) => {\n const app = Vue.createSSRApp(App, { router })\n\n if (isbot(request.headers.get('User-Agent'))) {\n let fullHtml = await renderToString(app)\n\n const htmlOpenIndex = fullHtml.indexOf('<html')\n const htmlCloseIndex = fullHtml.indexOf('</html>')\n\n if (htmlOpenIndex !== -1 && htmlCloseIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex, htmlCloseIndex + 7)\n } else if (htmlOpenIndex !== -1) {\n fullHtml = fullHtml.slice(htmlOpenIndex)\n }\n\n return new Response(`<!DOCTYPE html>${fullHtml}`, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n }\n\n const { writable, readable } = new TransformStream()\n\n pipeToWebWritable(app, {}, writable)\n\n const doctypedStream = prependDoctype(readable)\n const responseStream = transformReadableStreamWithRouter(\n router,\n doctypedStream as unknown as ReadableStream,\n )\n\n return new Response(responseStream as any, {\n status: router.state.statusCode,\n headers: responseHeaders,\n })\n}\n"],"names":["prependDoctype","readable","encoder","TextEncoder","sentDoctype","NodeReadableStream","start","controller","reader","getReader","pump","done","value","read","close","enqueue","encode","catch","err","error","renderRouterToStream","request","router","responseHeaders","App","app","Vue","createSSRApp","isbot","headers","get","fullHtml","renderToString","htmlOpenIndex","indexOf","htmlCloseIndex","slice","Response","status","state","statusCode","writable","TransformStream","pipeToWebWritable","doctypedStream","responseStream","transformReadableStreamWithRouter"],"mappings":";;;;;AASA,SAASA,eACPC,UACgC;AAChC,QAAMC,UAAU,IAAIC,YAAW;AAC/B,MAAIC,cAAc;AAElB,SAAO,IAAIC,eAA+B;AAAA,IACxCC,MAAMC,YAAY;AAChB,YAAMC,SAASP,SAASQ,UAAS;AAEjC,qBAAeC,OAAsB;AACnC,cAAM;AAAA,UAAEC;AAAAA,UAAMC;AAAAA,QAAM,IAAI,MAAMJ,OAAOK,KAAI;AACzC,YAAIF,MAAM;AACRJ,qBAAWO,MAAK;AAChB;AAAA,QACF;AAEA,YAAI,CAACV,aAAa;AAChBA,wBAAc;AACdG,qBAAWQ,QAAQb,QAAQc,OAAO,iBAAiB,CAAC;AAAA,QACtD;AACAT,mBAAWQ,QAAQH,KAAK;AACxB,eAAOF,KAAI;AAAA,MACb;AAEAA,WAAI,EAAGO,MAAOC,SAAQX,WAAWY,MAAMD,GAAG,CAAC;AAAA,IAC7C;AAAA,EACF,CAAC;AACH;AAEO,MAAME,uBAAuB,OAAO;AAAA,EACzCC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAMF,MAAM;AACJ,QAAMC,MAAMC,IAAIC,aAAaH,KAAK;AAAA,IAAEF;AAAAA,EAAO,CAAC;AAE5C,MAAIM,MAAMP,QAAQQ,QAAQC,IAAI,YAAY,CAAC,GAAG;AAC5C,QAAIC,WAAW,MAAMC,eAAeP,GAAG;AAEvC,UAAMQ,gBAAgBF,SAASG,QAAQ,OAAO;AAC9C,UAAMC,iBAAiBJ,SAASG,QAAQ,SAAS;AAEjD,QAAID,kBAAkB,MAAME,mBAAmB,IAAI;AACjDJ,iBAAWA,SAASK,MAAMH,eAAeE,iBAAiB,CAAC;AAAA,IAC7D,WAAWF,kBAAkB,IAAI;AAC/BF,iBAAWA,SAASK,MAAMH,aAAa;AAAA,IACzC;AAEA,WAAO,IAAII,SAAS,kBAAkBN,QAAQ,IAAI;AAAA,MAChDO,QAAQhB,OAAOiB,MAAMC;AAAAA,MACrBX,SAASN;AAAAA,IACX,CAAC;AAAA,EACH;AAEA,QAAM;AAAA,IAAEkB;AAAAA,IAAUxC;AAAAA,EAAS,IAAI,IAAIyC,gBAAe;AAElDC,oBAAkBlB,KAAK,CAAA,GAAIgB,QAAQ;AAEnC,QAAMG,iBAAiB5C,eAAeC,QAAQ;AAC9C,QAAM4C,iBAAiBC,kCACrBxB,QACAsB,cACF;AAEA,SAAO,IAAIP,SAASQ,gBAAuB;AAAA,IACzCP,QAAQhB,OAAOiB,MAAMC;AAAAA,IACrBX,SAASN;AAAAA,EACX,CAAC;AACH;"}
|
package/dist/source/link.d.ts
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
import * as Vue from 'vue';
|
|
2
2
|
import type { AnyRouter, Constrain, LinkOptions, RegisteredRouter, RoutePaths } from '@tanstack/router-core';
|
|
3
|
+
import type { AnchorHTMLAttributes, ReservedProps } from '@vue/runtime-dom';
|
|
3
4
|
import type { ValidateLinkOptions, ValidateLinkOptionsArray } from './typePrimitives';
|
|
4
5
|
type EventHandler<TEvent = Event> = (e: TEvent) => void;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
onFocus?: EventHandler<FocusEvent>;
|
|
10
|
-
onMouseenter?: EventHandler<MouseEvent>;
|
|
11
|
-
onMouseleave?: EventHandler<MouseEvent>;
|
|
12
|
-
onMouseover?: EventHandler<MouseEvent>;
|
|
13
|
-
onMouseout?: EventHandler<MouseEvent>;
|
|
14
|
-
onTouchstart?: EventHandler<TouchEvent>;
|
|
6
|
+
type DataAttributes = {
|
|
7
|
+
[K in `data-${string}`]?: unknown;
|
|
8
|
+
};
|
|
9
|
+
type LinkHTMLAttributes = AnchorHTMLAttributes & ReservedProps & DataAttributes & {
|
|
15
10
|
onMouseEnter?: EventHandler<MouseEvent>;
|
|
16
11
|
onMouseLeave?: EventHandler<MouseEvent>;
|
|
17
12
|
onMouseOver?: EventHandler<MouseEvent>;
|
|
18
13
|
onMouseOut?: EventHandler<MouseEvent>;
|
|
19
14
|
onTouchStart?: EventHandler<TouchEvent>;
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
};
|
|
17
|
+
type PropsOfComponent<TComp> = TComp extends (props: infer P, ...args: Array<unknown>) => any ? P : TComp extends Vue.Component<infer P> ? P : Record<string, unknown>;
|
|
18
|
+
export declare function useLinkProps<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TTo extends string = '', TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = ''>(options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): LinkHTMLAttributes;
|
|
19
|
+
export type UseLinkPropsOptions<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter['routeTree']> | string = string, TTo extends string | undefined = '.', TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom, TMaskTo extends string = '.'> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkHTMLAttributes;
|
|
24
20
|
export type ActiveLinkOptions<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & ActiveLinkOptionProps<TComp>;
|
|
25
|
-
type ActiveLinkProps<TComp> = Partial<
|
|
21
|
+
type ActiveLinkProps<TComp> = Partial<(TComp extends keyof HTMLElementTagNameMap ? LinkHTMLAttributes : PropsOfComponent<TComp>) & {
|
|
26
22
|
[key: `data-${string}`]: unknown;
|
|
27
23
|
}>;
|
|
28
24
|
export interface ActiveLinkOptionProps<TComp = 'a'> {
|
|
@@ -39,15 +35,15 @@ export interface ActiveLinkOptionProps<TComp = 'a'> {
|
|
|
39
35
|
}
|
|
40
36
|
export type LinkProps<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & LinkPropsChildren;
|
|
41
37
|
export interface LinkPropsChildren {
|
|
42
|
-
children?: Vue.
|
|
38
|
+
children?: Vue.VNodeChild | ((state: {
|
|
43
39
|
isActive: boolean;
|
|
44
40
|
isTransitioning: boolean;
|
|
45
|
-
}) => Vue.
|
|
41
|
+
}) => Vue.VNodeChild);
|
|
46
42
|
}
|
|
47
|
-
type LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap ? Omit<
|
|
43
|
+
type LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap ? Omit<LinkHTMLAttributes, keyof CreateLinkProps> : Omit<PropsOfComponent<TComp>, keyof CreateLinkProps>;
|
|
48
44
|
export type LinkComponentProps<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkComponentVueProps<TComp> & LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>;
|
|
49
45
|
export type CreateLinkProps = LinkProps<any, any, string, string, string, string>;
|
|
50
|
-
export type LinkComponent<TComp> = <TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string =
|
|
46
|
+
export type LinkComponent<in out TComp, in out TDefaultFrom extends string = string> = <TRouter extends AnyRouter = RegisteredRouter, const TFrom extends string = TDefaultFrom, const TTo extends string | undefined = undefined, const TMaskFrom extends string = TFrom, const TMaskTo extends string = ''>(props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>) => Vue.VNode;
|
|
51
47
|
export interface LinkComponentRoute<in out TDefaultFrom extends string = string> {
|
|
52
48
|
defaultFrom: TDefaultFrom;
|
|
53
49
|
<TRouter extends AnyRouter = RegisteredRouter, const TTo extends string | undefined = undefined, const TMaskTo extends string = ''>(props: LinkComponentProps<'a', TRouter, this['defaultFrom'], TTo, this['defaultFrom'], TMaskTo>): Vue.VNode;
|
|
@@ -56,9 +52,7 @@ export declare function createLink<const TComp>(Comp: Constrain<TComp, any, (pro
|
|
|
56
52
|
/**
|
|
57
53
|
* Link component with proper TypeScript generics support
|
|
58
54
|
*/
|
|
59
|
-
export declare const Link:
|
|
60
|
-
<TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths<TRouter["routeTree"]> | string = string, TTo extends string | undefined = ".", TMaskFrom extends RoutePaths<TRouter["routeTree"]> | string = TFrom, TMaskTo extends string = ".">(props: LinkComponentProps<"a", TRouter, TFrom, TTo, TMaskFrom, TMaskTo>): Vue.VNode;
|
|
61
|
-
};
|
|
55
|
+
export declare const Link: Vue.Component<unknown> & Vue.Component<CreateLinkProps> & LinkComponent<"a">;
|
|
62
56
|
export type LinkOptionsFnOptions<TOptions, TComp, TRouter extends AnyRouter = RegisteredRouter> = TOptions extends ReadonlyArray<any> ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp> : ValidateLinkOptions<TRouter, TOptions, string, TComp>;
|
|
63
57
|
export type LinkOptionsFn<TComp> = <const TOptions, TRouter extends AnyRouter = RegisteredRouter>(options: LinkOptionsFnOptions<TOptions, TComp, TRouter>) => TOptions;
|
|
64
58
|
export declare const linkOptions: LinkOptionsFn<'a'>;
|
package/dist/source/link.jsx
CHANGED
|
@@ -101,6 +101,7 @@ export function useLinkProps(options) {
|
|
|
101
101
|
// Create safe props that can be spread
|
|
102
102
|
const getPropsSafeToSpread = () => {
|
|
103
103
|
const result = {};
|
|
104
|
+
const optionRecord = options;
|
|
104
105
|
for (const key in options) {
|
|
105
106
|
if (![
|
|
106
107
|
'activeProps',
|
|
@@ -137,7 +138,7 @@ export function useLinkProps(options) {
|
|
|
137
138
|
'from',
|
|
138
139
|
'additionalProps',
|
|
139
140
|
].includes(key)) {
|
|
140
|
-
result[key] =
|
|
141
|
+
result[key] = optionRecord[key];
|
|
141
142
|
}
|
|
142
143
|
}
|
|
143
144
|
return result;
|
|
@@ -401,7 +402,7 @@ export function createLink(Comp) {
|
|
|
401
402
|
name: 'CreatedLink',
|
|
402
403
|
inheritAttrs: false,
|
|
403
404
|
setup(_, { attrs, slots }) {
|
|
404
|
-
return () => Vue.h(
|
|
405
|
+
return () => Vue.h(LinkImpl, { ...attrs, _asChild: Comp }, slots);
|
|
405
406
|
},
|
|
406
407
|
});
|
|
407
408
|
}
|
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":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EACL,SAAS,EACT,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAoDtC,MAAM,UAAU,YAAY,CAO1B,OAAqE;IAErE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,gBAAgB,GAAG,KAAK,CAAA;IAE5B,6CAA6C;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;QAC3E,OAAO,EAAE,CAAA;IACX,CAAC;IAED,gDAAgD;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;YACxB,OAAO,UAAU,CAAA;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,UAAU,CAAA;QACnB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,cAAc,CAAC;QACnC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS;KACpC,CAAC,CAAA;IAEF,gGAAgG;IAChG,MAAM,IAAI,GAAG,UAAU,CAAC;QACtB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,QAAQ;KAC3E,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,GAAG,OAAO;QACV,IAAI,EAAE,IAAI,CAAC,KAAK;KACjB,CAAC,CAAC,CAAA;IAEH,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC7B,kDAAkD;QAClD,aAAa,CAAC,KAAK,CAAA;QACnB,OAAO,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAY,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAClC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAC/B,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CACtE,CAAA;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;YAC3C,IAAI,aAAa,EAAE,KAAK,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,aAAa,CAC7B,CAAC,CAAC,QAAQ,CAAC,QAAQ,EACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,MAAM,CAAC,QAAQ,CAChB,CAAA;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,gBAAgB,GAAG,mBAAmB,CAC1C,CAAC,CAAC,QAAQ,CAAC,QAAQ,EACnB,MAAM,CAAC,QAAQ,CAChB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACZ,MAAM,aAAa,GAAG,mBAAmB,CACvC,IAAI,CAAC,KAAK,EAAE,QAAQ,EACpB,MAAM,CAAC,QAAQ,CAChB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;gBAEb,MAAM,gBAAgB,GAAG,aAAa,EAAE,KAAK,CAC3C,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,CACpC,CAAA;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,IAAI,aAAa,EAAE,aAAa,IAAI,IAAI,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;oBACjE,OAAO,EAAE,CAAC,aAAa,EAAE,KAAK;oBAC9B,eAAe,EAAE,CAAC,aAAa,EAAE,iBAAiB;iBACnD,CAAC,CAAA;gBACF,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,KAAK,CAAA;gBACd,CAAC;YACH,CAAC;YAED,IAAI,aAAa,EAAE,WAAW,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;YAC5C,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE,CACrB,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAY,CAAC,CAAC,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;QAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEJ,MAAM,yBAAyB,GAAG,CAChC,KAA4C,EAC5C,EAAE;QACF,IAAI,KAAK,EAAE,cAAc,EAAE,CAAC;YAC1B,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAiB,IAAI,CAAC,CAAA;IAEzC,uBAAuB,CACrB,GAAG,EACH,yBAAyB,EACzB,EAAE,UAAU,EAAE,OAAO,EAAE,EACvB,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,EAAE,CAC1E,CAAA;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QACd,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACpD,SAAS,EAAE,CAAA;YACX,gBAAgB,GAAG,IAAI,CAAA;QACzB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,uCAAuC;IACvC,MAAM,oBAAoB,GAAG,GAAG,EAAE;QAChC,MAAM,MAAM,GAAwB,EAAE,CAAA;QACtC,MAAM,YAAY,GAAG,OAA6C,CAAA;QAClE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IACE,CAAC;gBACC,aAAa;gBACb,eAAe;gBACf,eAAe;gBACf,IAAI;gBACJ,SAAS;gBACT,cAAc;gBACd,oBAAoB;gBACpB,SAAS;gBACT,iBAAiB;gBACjB,aAAa;gBACb,gBAAgB;gBAChB,UAAU;gBACV,QAAQ;gBACR,UAAU;gBACV,OAAO;gBACP,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,cAAc;gBACd,cAAc;gBACd,aAAa;gBACb,YAAY;gBACZ,cAAc;gBACd,eAAe;gBACf,QAAQ;gBACR,QAAQ;gBACR,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,gBAAgB;gBAChB,UAAU;gBACV,MAAM;gBACN,iBAAiB;aAClB,CAAC,QAAQ,CAAC,GAAG,CAAC,EACf,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9B,wCAAwC;QACxC,MAAM,aAAa,GAA4B;YAC7C,GAAG,oBAAoB,EAAE;YACzB,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,EAAE;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAA;QAED,0BAA0B;QAC1B,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,aAAmC,CAAA;IAC5C,CAAC;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,CAAC,CAAe,EAAQ,EAAE;QAC5C,sDAAsD;QACtD,MAAM,aAAa,GACjB,CAAC,CAAC,aACH,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;QACzB,MAAM,eAAe,GACnB,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;QAE/D,IACE,CAAC,OAAO,CAAC,QAAQ;YACjB,CAAC,WAAW,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,CAAC,gBAAgB;YACnB,CAAC,CAAC,eAAe,IAAI,eAAe,KAAK,OAAO,CAAC;YACjD,CAAC,CAAC,MAAM,KAAK,CAAC,EACd,CAAC;YACD,uEAAuE;YACvE,IAAI,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAClC,OAAM;YACR,CAAC;YAED,CAAC,CAAC,cAAc,EAAE,CAAA;YAElB,eAAe,CAAC,KAAK,GAAG,IAAI,CAAA;YAE5B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE;gBAChD,KAAK,EAAE,CAAA;gBACP,eAAe,CAAC,KAAK,GAAG,KAAK,CAAA;YAC/B,CAAC,CAAC,CAAA;YAEF,yBAAyB;YACzB,MAAM,CAAC,QAAQ,CAAC;gBACd,GAAG,QAAQ,CAAC,KAAK;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;gBAC9C,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAA;IAED,oBAAoB;IACpB,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAM;QAC5B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,CAAa,EAAE,EAAE;QACzC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAM;QAC5B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,SAAS,EAAE,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAM;QAC5B,4FAA4F;QAC5F,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,aAAa;YAClC,CAAC,CAAC,MAAM;YACR,EAAE,CAA6B,CAAA;QAEjC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;gBAC/B,OAAM;YACR,CAAC;YAED,WAAW,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3C,WAAW,CAAC,cAAc,GAAG,IAAI,CAAA;gBACjC,SAAS,EAAE,CAAA;YACb,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAM;QAC5B,4FAA4F;QAC5F,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,aAAa;YAClC,CAAC,CAAC,MAAM;YACR,EAAE,CAA6B,CAAA;QAEjC,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;YACxC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAA;QACnC,CAAC;IACH,CAAC,CAAA;IAED,wFAAwF;IACxF,SAAS,oBAAoB,CAC3B,QAA4C;QAE5C,OAAO,CAAC,KAAQ,EAAE,EAAE;YAClB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,KAAK,CAAC,CAAA;gBAChB,CAAC;YACH,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,mBAAmB,GAAG,GAAG,CAAC,QAAQ,CAAc,GAAG,EAAE;QACzD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;YAC1B,CAAC,CAAC,OAAO,WAAW,KAAK,UAAU;gBACjC,CAAC,CAAC,WAAW,EAAE;gBACf,CAAC,CAAC,WAAW;YACf,CAAC,CAAC,EAAE,CAAA;QAEN,OAAO,KAAK,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,MAAM,qBAAqB,GAAG,GAAG,CAAC,QAAQ,CAAc,GAAG,EAAE;QAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;YAC1B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,OAAO,aAAa,KAAK,UAAU;gBACnC,CAAC,CAAC,aAAa,EAAE;gBACjB,CAAC,CAAC,aAAa,CAAA;QAEnB,OAAO,KAAK,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,MAAM,iBAAiB,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG;YACd,OAAO,CAAC,KAAK;YACb,mBAAmB,CAAC,KAAK,EAAE,KAAK;YAChC,qBAAqB,CAAC,KAAK,EAAE,KAAK;SACnC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACjB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QACtC,MAAM,MAAM,GAAoC,EAAE,CAAA;QAElD,gCAAgC;QAChC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAA;QAC/B,MAAM,cAAc,GAAG,YAAY,EAAE,cAAc,CAAA;QAEnD,IAAI,SAAiB,CAAA;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,YAAY,EAAE,GAAG,CAAC,IAAI,CAAA;QACpC,CAAC;QAED,0CAA0C;QAC1C,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CACnC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CACrC,CAAA;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAA;IAEF,iEAAiE;IACjE,MAAM,mBAAmB,GAAG;QAC1B,OAAO,EAAE,oBAAoB,CAAe;YAC1C,OAAO,CAAC,OAAO;YACf,WAAW;SACZ,CAAQ;QACT,OAAO,EAAE,oBAAoB,CAAa;YACxC,OAAO,CAAC,OAAO;YACf,WAAW;SACZ,CAAQ;QACT,YAAY,EAAE,oBAAoB,CAAa;YAC7C,OAAO,CAAC,YAAY;YACpB,WAAW;SACZ,CAAQ;QACT,WAAW,EAAE,oBAAoB,CAAa;YAC5C,OAAO,CAAC,WAAW;YACnB,WAAW;SACZ,CAAQ;QACT,YAAY,EAAE,oBAAoB,CAAa;YAC7C,OAAO,CAAC,YAAY;YACpB,WAAW;SACZ,CAAQ;QACT,UAAU,EAAE,oBAAoB,CAAa;YAC3C,OAAO,CAAC,UAAU;YAClB,WAAW;SACZ,CAAQ;QACT,YAAY,EAAE,oBAAoB,CAAa;YAC7C,OAAO,CAAC,YAAY;YACpB,gBAAgB;SACjB,CAAQ;KACV,CAAA;IAED,gEAAgE;IAChE,4EAA4E;IAC5E,MAAM,aAAa,GAAG,GAAG,CAAC,QAAQ,CAAqB,GAAG,EAAE;QAC1D,MAAM,MAAM,GAA4B;YACtC,GAAG,oBAAoB,EAAE;YACzB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,GAAG;YACH,GAAG,mBAAmB;YACtB,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAA;QAED,uBAAuB;QACvB,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAA;QACpC,CAAC;QAED,uBAAuB;QACvB,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAA;QACxC,CAAC;QAED,qBAAqB;QACrB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,GAAG,MAAM,CAAA;YACpB,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI,CAAA;QAChC,CAAC;QAED,oBAAoB;QACpB,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAA;YAChC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAA;QACjC,CAAC;QAED,2BAA2B;QAC3B,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,oBAAoB,CAAC,GAAG,eAAe,CAAA;QAChD,CAAC;QAED,kFAAkF;QAClF,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAA;QACzC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAA;QAE7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,CAAC,GAAI,OAAe,CAAC,GAAG,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,CAAC,GAAI,SAAiB,CAAC,GAAG,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;QAED,OAAO,MAA4B,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,gEAAgE;IAChE,OAAO,aAA8C,CAAA;AACvD,CAAC;AAuHD,MAAM,UAAU,UAAU,CACxB,IAAkE;IAElE,OAAO,GAAG,CAAC,eAAe,CAAC;QACzB,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;YACvB,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAe,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;QAC1E,CAAC;KACF,CAAQ,CAAA;AACX,CAAC;AAED,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC;IACnC,IAAI,EAAE,MAAM;IACZ,YAAY,EAAE,KAAK;IACnB,KAAK,EAAE;QACL,UAAU;QACV,IAAI;QACJ,SAAS;QACT,cAAc;QACd,aAAa;QACb,eAAe;QACf,eAAe;QACf,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,gBAAgB;QAChB,UAAU;QACV,iBAAiB;QACjB,gBAAgB;QAChB,aAAa;QACb,iBAAiB;QACjB,oBAAoB;QACpB,SAAS;QACT,eAAe;QACf,QAAQ;KACT;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;QAC3B,oEAAoE;QACpE,gEAAgE;QAChE,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAA;QACvC,MAAM,iBAAiB,GAAG,YAAY,CACpC,QAAe,CACkC,CAAA;QAEnD,OAAO,GAAG,EAAE;YACV,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAA;YAEvC,2DAA2D;YAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAA;YAEzC,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAA;YACtD,MAAM,eAAe,GACnB,SAAS,CAAC,oBAAoB,CAAC,KAAK,eAAe,CAAA;YAErD,4DAA4D;YAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO;gBAC/B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;oBACZ,QAAQ;oBACR,eAAe;iBAChB,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAA;YAEN,8DAA8D;YAC9D,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,0CAA0C;gBAC1C,MAAM,YAAY,GAAG,EAAE,GAAG,SAAS,EAAE,CAAA;gBACrC,OAAO,YAAY,CAAC,KAAK,CAAA;gBACzB,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;YAClE,CAAC;YAED,yEAAyE;YACzE,yDAAyD;YACzD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,OAAO,GAAG,CAAC,CAAC,CACV,SAAS,EACT,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EACvC,WAAW,CACZ,CAAA;YACH,CAAC;YAED,+CAA+C;YAC/C,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QACjD,CAAC,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,QAEA,CAAA;AAEpB,SAAS,WAAW,CAAC,CAAa;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7D,CAAC;AAkBD,MAAM,CAAC,MAAM,WAAW,GAAuB,CAAC,OAAO,EAAE,EAAE;IACzD,OAAO,OAAc,CAAA;AACvB,CAAC,CAAA"}
|
|
@@ -7,7 +7,7 @@ function prependDoctype(readable) {
|
|
|
7
7
|
const encoder = new TextEncoder();
|
|
8
8
|
let sentDoctype = false;
|
|
9
9
|
return new NodeReadableStream({
|
|
10
|
-
|
|
10
|
+
start(controller) {
|
|
11
11
|
const reader = readable.getReader();
|
|
12
12
|
async function pump() {
|
|
13
13
|
const { done, value } = await reader.read();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderRouterToStream.jsx","sourceRoot":"","sources":["../../../src/ssr/renderRouterToStream.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,GAAG,MAAM,KAAK,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAA;AAKpF,SAAS,cAAc,CACrB,QAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,OAAO,IAAI,kBAAkB,CAAa;QACxC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"renderRouterToStream.jsx","sourceRoot":"","sources":["../../../src/ssr/renderRouterToStream.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/vue-router",
|
|
3
|
-
"version": "1.141.
|
|
3
|
+
"version": "1.141.8",
|
|
4
4
|
"description": "Modern and scalable routing for Vue applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -57,12 +57,13 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@tanstack/vue-store": "^0.8.0",
|
|
60
|
+
"@vue/runtime-dom": "^3.5.25",
|
|
60
61
|
"isbot": "^5.1.22",
|
|
61
62
|
"jsesc": "^3.0.2",
|
|
62
63
|
"tiny-invariant": "^1.3.3",
|
|
63
64
|
"tiny-warning": "^1.0.3",
|
|
64
65
|
"@tanstack/history": "1.141.0",
|
|
65
|
-
"@tanstack/router-core": "1.141.
|
|
66
|
+
"@tanstack/router-core": "1.141.8"
|
|
66
67
|
},
|
|
67
68
|
"devDependencies": {
|
|
68
69
|
"@testing-library/jest-dom": "^6.6.3",
|
package/src/link.tsx
CHANGED
|
@@ -19,39 +19,48 @@ import type {
|
|
|
19
19
|
RegisteredRouter,
|
|
20
20
|
RoutePaths,
|
|
21
21
|
} from '@tanstack/router-core'
|
|
22
|
+
import type { AnchorHTMLAttributes, ReservedProps } from '@vue/runtime-dom'
|
|
22
23
|
import type {
|
|
23
24
|
ValidateLinkOptions,
|
|
24
25
|
ValidateLinkOptionsArray,
|
|
25
26
|
} from './typePrimitives'
|
|
26
27
|
|
|
27
|
-
// Type definitions to replace missing Vue JSX types
|
|
28
28
|
type EventHandler<TEvent = Event> = (e: TEvent) => void
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
onClick?: EventHandler<MouseEvent>
|
|
33
|
-
onFocus?: EventHandler<FocusEvent>
|
|
34
|
-
// Vue 3's h() function expects lowercase event names after 'on' prefix
|
|
35
|
-
onMouseenter?: EventHandler<MouseEvent>
|
|
36
|
-
onMouseleave?: EventHandler<MouseEvent>
|
|
37
|
-
onMouseover?: EventHandler<MouseEvent>
|
|
38
|
-
onMouseout?: EventHandler<MouseEvent>
|
|
39
|
-
onTouchstart?: EventHandler<TouchEvent>
|
|
40
|
-
// Also accept the camelCase versions for external API compatibility
|
|
41
|
-
onMouseEnter?: EventHandler<MouseEvent>
|
|
42
|
-
onMouseLeave?: EventHandler<MouseEvent>
|
|
43
|
-
onMouseOver?: EventHandler<MouseEvent>
|
|
44
|
-
onMouseOut?: EventHandler<MouseEvent>
|
|
45
|
-
onTouchStart?: EventHandler<TouchEvent>
|
|
46
|
-
[key: string]: any
|
|
29
|
+
|
|
30
|
+
type DataAttributes = {
|
|
31
|
+
[K in `data-${string}`]?: unknown
|
|
47
32
|
}
|
|
48
33
|
|
|
34
|
+
type LinkHTMLAttributes = AnchorHTMLAttributes &
|
|
35
|
+
ReservedProps &
|
|
36
|
+
DataAttributes & {
|
|
37
|
+
// Vue's runtime-dom types use lowercase event names.
|
|
38
|
+
// Also accept camelCase versions for external API compatibility.
|
|
39
|
+
onMouseEnter?: EventHandler<MouseEvent>
|
|
40
|
+
onMouseLeave?: EventHandler<MouseEvent>
|
|
41
|
+
onMouseOver?: EventHandler<MouseEvent>
|
|
42
|
+
onMouseOut?: EventHandler<MouseEvent>
|
|
43
|
+
onTouchStart?: EventHandler<TouchEvent>
|
|
44
|
+
|
|
45
|
+
// `disabled` is not a valid <a> attribute, but is useful when using `asChild`.
|
|
46
|
+
disabled?: boolean
|
|
47
|
+
}
|
|
48
|
+
|
|
49
49
|
interface StyledProps {
|
|
50
|
-
class?:
|
|
51
|
-
style?:
|
|
52
|
-
[key: string]:
|
|
50
|
+
class?: LinkHTMLAttributes['class']
|
|
51
|
+
style?: LinkHTMLAttributes['style']
|
|
52
|
+
[key: string]: unknown
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
type PropsOfComponent<TComp> =
|
|
56
|
+
// Functional components
|
|
57
|
+
TComp extends (props: infer P, ...args: Array<unknown>) => any
|
|
58
|
+
? P
|
|
59
|
+
: // Vue components (defineComponent, class components, etc)
|
|
60
|
+
TComp extends Vue.Component<infer P>
|
|
61
|
+
? P
|
|
62
|
+
: Record<string, unknown>
|
|
63
|
+
|
|
55
64
|
export function useLinkProps<
|
|
56
65
|
TRouter extends AnyRouter = RegisteredRouter,
|
|
57
66
|
TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
|
|
@@ -60,7 +69,7 @@ export function useLinkProps<
|
|
|
60
69
|
TMaskTo extends string = '',
|
|
61
70
|
>(
|
|
62
71
|
options: UseLinkPropsOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
63
|
-
):
|
|
72
|
+
): LinkHTMLAttributes {
|
|
64
73
|
const router = useRouter()
|
|
65
74
|
const isTransitioning = Vue.ref(false)
|
|
66
75
|
let hasRenderFetched = false
|
|
@@ -195,6 +204,7 @@ export function useLinkProps<
|
|
|
195
204
|
// Create safe props that can be spread
|
|
196
205
|
const getPropsSafeToSpread = () => {
|
|
197
206
|
const result: Record<string, any> = {}
|
|
207
|
+
const optionRecord = options as unknown as Record<string, unknown>
|
|
198
208
|
for (const key in options) {
|
|
199
209
|
if (
|
|
200
210
|
![
|
|
@@ -233,7 +243,7 @@ export function useLinkProps<
|
|
|
233
243
|
'additionalProps',
|
|
234
244
|
].includes(key)
|
|
235
245
|
) {
|
|
236
|
-
result[key] =
|
|
246
|
+
result[key] = optionRecord[key]
|
|
237
247
|
}
|
|
238
248
|
}
|
|
239
249
|
return result
|
|
@@ -241,7 +251,7 @@ export function useLinkProps<
|
|
|
241
251
|
|
|
242
252
|
if (type.value === 'external') {
|
|
243
253
|
// External links just have simple props
|
|
244
|
-
const externalProps:
|
|
254
|
+
const externalProps: Record<string, unknown> = {
|
|
245
255
|
...getPropsSafeToSpread(),
|
|
246
256
|
ref,
|
|
247
257
|
href: options.to,
|
|
@@ -265,11 +275,11 @@ export function useLinkProps<
|
|
|
265
275
|
}
|
|
266
276
|
})
|
|
267
277
|
|
|
268
|
-
return externalProps
|
|
278
|
+
return externalProps as LinkHTMLAttributes
|
|
269
279
|
}
|
|
270
280
|
|
|
271
281
|
// The click handler
|
|
272
|
-
const handleClick = (e:
|
|
282
|
+
const handleClick = (e: PointerEvent): void => {
|
|
273
283
|
// Check actual element's target attribute as fallback
|
|
274
284
|
const elementTarget = (
|
|
275
285
|
e.currentTarget as HTMLAnchorElement | SVGAElement
|
|
@@ -307,7 +317,7 @@ export function useLinkProps<
|
|
|
307
317
|
startTransition: options.startTransition,
|
|
308
318
|
viewTransition: options.viewTransition,
|
|
309
319
|
ignoreBlocker: options.ignoreBlocker,
|
|
310
|
-
}
|
|
320
|
+
})
|
|
311
321
|
}
|
|
312
322
|
}
|
|
313
323
|
|
|
@@ -448,7 +458,7 @@ export function useLinkProps<
|
|
|
448
458
|
|
|
449
459
|
// Create static event handlers that don't change between renders
|
|
450
460
|
const staticEventHandlers = {
|
|
451
|
-
onClick: composeEventHandlers<
|
|
461
|
+
onClick: composeEventHandlers<PointerEvent>([
|
|
452
462
|
options.onClick,
|
|
453
463
|
handleClick,
|
|
454
464
|
]) as any,
|
|
@@ -480,8 +490,8 @@ export function useLinkProps<
|
|
|
480
490
|
|
|
481
491
|
// Compute all props synchronously to avoid hydration mismatches
|
|
482
492
|
// Using Vue.computed ensures props are calculated at render time, not after
|
|
483
|
-
const computedProps = Vue.computed<
|
|
484
|
-
const result:
|
|
493
|
+
const computedProps = Vue.computed<LinkHTMLAttributes>(() => {
|
|
494
|
+
const result: Record<string, unknown> = {
|
|
485
495
|
...getPropsSafeToSpread(),
|
|
486
496
|
href: href.value,
|
|
487
497
|
ref,
|
|
@@ -523,20 +533,20 @@ export function useLinkProps<
|
|
|
523
533
|
|
|
524
534
|
for (const key of Object.keys(activeP)) {
|
|
525
535
|
if (key !== 'class' && key !== 'style') {
|
|
526
|
-
result[key] = activeP[key]
|
|
536
|
+
result[key] = (activeP as any)[key]
|
|
527
537
|
}
|
|
528
538
|
}
|
|
529
539
|
for (const key of Object.keys(inactiveP)) {
|
|
530
540
|
if (key !== 'class' && key !== 'style') {
|
|
531
|
-
result[key] = inactiveP[key]
|
|
541
|
+
result[key] = (inactiveP as any)[key]
|
|
532
542
|
}
|
|
533
543
|
}
|
|
534
544
|
|
|
535
|
-
return result
|
|
545
|
+
return result as LinkHTMLAttributes
|
|
536
546
|
})
|
|
537
547
|
|
|
538
548
|
// Return the computed ref itself - callers should access .value
|
|
539
|
-
return computedProps as unknown as
|
|
549
|
+
return computedProps as unknown as LinkHTMLAttributes
|
|
540
550
|
}
|
|
541
551
|
|
|
542
552
|
// Type definitions
|
|
@@ -547,7 +557,7 @@ export type UseLinkPropsOptions<
|
|
|
547
557
|
TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
|
|
548
558
|
TMaskTo extends string = '.',
|
|
549
559
|
> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &
|
|
550
|
-
|
|
560
|
+
LinkHTMLAttributes
|
|
551
561
|
|
|
552
562
|
export type ActiveLinkOptions<
|
|
553
563
|
TComp = 'a',
|
|
@@ -560,7 +570,9 @@ export type ActiveLinkOptions<
|
|
|
560
570
|
ActiveLinkOptionProps<TComp>
|
|
561
571
|
|
|
562
572
|
type ActiveLinkProps<TComp> = Partial<
|
|
563
|
-
|
|
573
|
+
(TComp extends keyof HTMLElementTagNameMap
|
|
574
|
+
? LinkHTMLAttributes
|
|
575
|
+
: PropsOfComponent<TComp>) & {
|
|
564
576
|
[key: `data-${string}`]: unknown
|
|
565
577
|
}
|
|
566
578
|
>
|
|
@@ -591,15 +603,16 @@ export type LinkProps<
|
|
|
591
603
|
export interface LinkPropsChildren {
|
|
592
604
|
// 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
|
|
593
605
|
children?:
|
|
594
|
-
| Vue.
|
|
595
|
-
| ((state: {
|
|
606
|
+
| Vue.VNodeChild
|
|
607
|
+
| ((state: {
|
|
608
|
+
isActive: boolean
|
|
609
|
+
isTransitioning: boolean
|
|
610
|
+
}) => Vue.VNodeChild)
|
|
596
611
|
}
|
|
597
612
|
|
|
598
613
|
type LinkComponentVueProps<TComp> = TComp extends keyof HTMLElementTagNameMap
|
|
599
|
-
? Omit<
|
|
600
|
-
: TComp
|
|
601
|
-
? Record<string, any>
|
|
602
|
-
: Record<string, any>
|
|
614
|
+
? Omit<LinkHTMLAttributes, keyof CreateLinkProps>
|
|
615
|
+
: Omit<PropsOfComponent<TComp>, keyof CreateLinkProps>
|
|
603
616
|
|
|
604
617
|
export type LinkComponentProps<
|
|
605
618
|
TComp = 'a',
|
|
@@ -620,9 +633,12 @@ export type CreateLinkProps = LinkProps<
|
|
|
620
633
|
string
|
|
621
634
|
>
|
|
622
635
|
|
|
623
|
-
export type LinkComponent<
|
|
636
|
+
export type LinkComponent<
|
|
637
|
+
in out TComp,
|
|
638
|
+
in out TDefaultFrom extends string = string,
|
|
639
|
+
> = <
|
|
624
640
|
TRouter extends AnyRouter = RegisteredRouter,
|
|
625
|
-
const TFrom extends string =
|
|
641
|
+
const TFrom extends string = TDefaultFrom,
|
|
626
642
|
const TTo extends string | undefined = undefined,
|
|
627
643
|
const TMaskFrom extends string = TFrom,
|
|
628
644
|
const TMaskTo extends string = '',
|
|
@@ -657,7 +673,7 @@ export function createLink<const TComp>(
|
|
|
657
673
|
name: 'CreatedLink',
|
|
658
674
|
inheritAttrs: false,
|
|
659
675
|
setup(_, { attrs, slots }) {
|
|
660
|
-
return () => Vue.h(
|
|
676
|
+
return () => Vue.h(LinkImpl as any, { ...attrs, _asChild: Comp }, slots)
|
|
661
677
|
},
|
|
662
678
|
}) as any
|
|
663
679
|
}
|
|
@@ -696,7 +712,7 @@ const LinkImpl = Vue.defineComponent({
|
|
|
696
712
|
const allProps = { ...props, ...attrs }
|
|
697
713
|
const linkPropsComputed = useLinkProps(
|
|
698
714
|
allProps as any,
|
|
699
|
-
) as unknown as Vue.ComputedRef<
|
|
715
|
+
) as unknown as Vue.ComputedRef<LinkHTMLAttributes>
|
|
700
716
|
|
|
701
717
|
return () => {
|
|
702
718
|
const Component = props._asChild || 'a'
|
|
@@ -720,7 +736,7 @@ const LinkImpl = Vue.defineComponent({
|
|
|
720
736
|
if (Component === 'svg') {
|
|
721
737
|
// Create props without class for svg link
|
|
722
738
|
const svgLinkProps = { ...linkProps }
|
|
723
|
-
delete
|
|
739
|
+
delete svgLinkProps.class
|
|
724
740
|
return Vue.h('svg', {}, [Vue.h('a', svgLinkProps, slotContent)])
|
|
725
741
|
}
|
|
726
742
|
|
|
@@ -743,17 +759,9 @@ const LinkImpl = Vue.defineComponent({
|
|
|
743
759
|
/**
|
|
744
760
|
* Link component with proper TypeScript generics support
|
|
745
761
|
*/
|
|
746
|
-
export const Link = LinkImpl as unknown as
|
|
747
|
-
<
|
|
748
|
-
|
|
749
|
-
TFrom extends RoutePaths<TRouter['routeTree']> | string = string,
|
|
750
|
-
TTo extends string | undefined = '.',
|
|
751
|
-
TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,
|
|
752
|
-
TMaskTo extends string = '.',
|
|
753
|
-
>(
|
|
754
|
-
props: LinkComponentProps<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,
|
|
755
|
-
): Vue.VNode
|
|
756
|
-
}
|
|
762
|
+
export const Link = LinkImpl as unknown as Vue.Component<unknown> &
|
|
763
|
+
Vue.Component<CreateLinkProps> &
|
|
764
|
+
LinkComponent<'a'>
|
|
757
765
|
|
|
758
766
|
function isCtrlEvent(e: MouseEvent) {
|
|
759
767
|
return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)
|