UNPKG

@tanstack/solid-router

Version:

Modern and scalable routing for Solid applications

45 lines (44 loc) 4.56 kB
import * as Solid from 'solid-js'; import type { AnyRouter, Constrain, LinkOptions, RegisteredRouter, RoutePaths } from '@tanstack/router-core'; import type { ValidateLinkOptions, ValidateLinkOptionsArray } from './typePrimitives'; 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>): Solid.ComponentProps<'a'>; 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> & Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties; }; 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>; type ActiveLinkProps<TComp> = Partial<LinkComponentSolidProps<TComp> & { [key: `data-${string}`]: unknown; }>; export interface ActiveLinkOptionProps<TComp = 'a'> { /** * A function that returns additional props for the `active` state of this link. * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated) */ activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>); /** * A function that returns additional props for the `inactive` state of this link. * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated) */ inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>); } 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; export interface LinkPropsChildren { children?: Solid.JSX.Element | ((state: { isActive: boolean; isTransitioning: boolean; }) => Solid.JSX.Element); } type LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps> : never; export type LinkComponentProps<TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.'> = LinkComponentSolidProps<TComp> & LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>; export type CreateLinkProps = LinkProps<any, any, string, string, string, string>; 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>) => Solid.JSX.Element; export interface LinkComponentRoute<in out TDefaultFrom extends string = string> { defaultFrom: TDefaultFrom; <TRouter extends AnyRouter = RegisteredRouter, const TTo extends string | undefined = undefined, const TMaskTo extends string = ''>(props: LinkComponentProps<'a', TRouter, this['defaultFrom'], TTo, this['defaultFrom'], TMaskTo>): Solid.JSX.Element; } export declare function createLink<const TComp>(Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>): LinkComponent<TComp>; export declare const Link: LinkComponent<'a'>; export type LinkOptionsFnOptions<TOptions, TComp, TRouter extends AnyRouter = RegisteredRouter> = TOptions extends ReadonlyArray<any> ? ValidateLinkOptionsArray<TRouter, TOptions, string, TComp> : ValidateLinkOptions<TRouter, TOptions, string, TComp>; export type LinkOptionsFn<TComp> = <const TOptions, TRouter extends AnyRouter = RegisteredRouter>(options: LinkOptionsFnOptions<TOptions, TComp, TRouter>) => TOptions; export declare const linkOptions: LinkOptionsFn<'a'>; export {};