import type { ComponentBody, ElementDescriptor } from 'octane'; import type { Octane } from 'octane/jsx-runtime'; import type { AnyRouter, LinkOptions, RegisteredRouter, RoutePaths } from '@tanstack/router-core'; export type OctaneAnchorProps = Octane.JSX.IntrinsicElements['a']; export type OctaneRenderable = | ElementDescriptor | string | number | bigint | boolean | null | undefined | ReadonlyArray; type OctaneComponentProps = TComp extends keyof Octane.JSX.IntrinsicElements ? Octane.JSX.IntrinsicElements[TComp] : TComp extends ComponentBody ? TProps : never; export type UseLinkPropsOptions< TRouter extends AnyRouter = RegisteredRouter, TFrom extends RoutePaths | string = string, TTo extends string | undefined = '.', TMaskFrom extends RoutePaths | string = TFrom, TMaskTo extends string = '.', > = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> & OctaneAnchorProps; 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 & ActiveLinkOptionProps; type ActiveLinkProps = Partial< OctaneComponentProps & { [key: `data-${string}`]: unknown; } >; export interface ActiveLinkOptionProps { activeProps?: ActiveLinkProps | (() => ActiveLinkProps); inactiveProps?: ActiveLinkProps | (() => ActiveLinkProps); } 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 & LinkPropsChildren; export interface LinkPropsChildren { children?: OctaneRenderable | ((state: { isActive: boolean; isTransitioning: boolean }) => unknown); } export type CreateLinkProps = LinkProps; export type LinkComponentProps< TComp = 'a', TRouter extends AnyRouter = RegisteredRouter, TFrom extends string = string, TTo extends string | undefined = '.', TMaskFrom extends string = TFrom, TMaskTo extends string = '.', > = Omit, keyof CreateLinkProps> & LinkProps; export type LinkComponent = < 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, ) => void; export interface LinkComponentRoute { 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>, ): void; }