{"version":3,"file":"link.cjs","names":["Solid","mergeRefs","deepEqual","functionalUpdate","getUrlScheme","hasKeys","isDangerousProtocol","preloadWarning","removeTrailingSlash","isServer","Dynamic","useRouter","useIntersectionObserver","useHydrated","AnyRouter","Constrain","LinkOptions","RegisteredRouter","RoutePaths","ValidateLinkOptions","ValidateLinkOptionsArray","timeoutMap","WeakMap","ReturnType","setTimeout","cancelPreload","eventTarget","clearTimeout","get","delete","useLinkProps","TRouter","TFrom","options","UseLinkPropsOptions","TTo","TMaskFrom","TMaskTo","ComponentProps","router","local","rest","splitProps","mergeProps","activeProps","STATIC_ACTIVE_PROPS_GET","inactiveProps","STATIC_INACTIVE_PROPS_GET","_","propsSafeToSpread","currentLocation","createMemo","stores","location","undefined","equals","prev","next","href","_fromLocation","nextOptions","untrack","buildLocation","hrefOption","disabled","maskedLocation","publicHref","external","history","createHref","protocolAllowlist","process","env","NODE_ENV","console","warn","externalLink","to","scheme","has","_href","shouldHydrateHash","ssr","hasHydrated","isActive","activeOptions","current","nextLocation","currentPath","pathname","basepath","nextPath","exact","startsWith","length","includeSearch","searchTest","search","partial","ignoreUndefined","explicitUndefined","includeHash","currentHash","hash","simpleStyling","class","style","ResolvedLinkStateProps","Omit","JSX","CSSProperties","resolveLinkStateProps","base","active","STATIC_DEFAULT_ACTIVE_ATTRIBUTES","stateProps","EMPTY_OBJECT","className","filter","Boolean","join","STATIC_ACTIVE_ATTRIBUTES","props","onClick","onBlur","onFocus","onMouseEnter","onMouseLeave","onMouseOut","onMouseOver","onTouchStart","ref","target","STATIC_DISABLED_PROPS","key","STATIC_EVENT_PROPS","hasRenderFetched","preload","reloadDocument","defaultPreload","preloadDelay","defaultPreloadDelay","doPreload","preloadRoute","Parameters","catch","err","setRef","createSignal","Element","enqueuePreload","e","MouseEvent","FocusEvent","IntersectionObserverEntry","isIntersecting","set","createEffect","handleClick","elementTarget","currentTarget","HTMLAnchorElement","SVGAElement","getAttribute","effectiveTarget","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","preventDefault","navigate","replace","resetScroll","hashScrollIntoView","startTransition","viewTransition","ignoreBlocker","handleTouchStart","handleLeave","createComposedHandler","resolvedProps","const","STATIC_ACTIVE_PROPS","role","callHandler","Event","event","TEvent","T","handler","EventHandlerUnion","getHandler","fallback","ActiveLinkOptions","ActiveLinkOptionProps","TComp","ActiveLinkProps","Partial","LinkComponentSolidProps","LinkProps","LinkPropsChildren","children","state","ValidComponent","CreateLinkProps","LinkComponentProps","LinkComponent","TDefaultFrom","LinkComponentRoute","defaultFrom","createLink","Comp","_$createComponent","Link","_$mergeProps","_asChild","linkProps","ch","svgLinkProps","_el$","_tmpl$","_el$2","firstChild","_$spread","_$insert","_el$3","_tmpl$2","component","LinkOptionsFnOptions","TOptions","ReadonlyArray","LinkOptionsFn","linkOptions"],"sources":["../../src/link.tsx"],"sourcesContent":["import * as Solid from 'solid-js'\n\nimport { mergeRefs } from '@solid-primitives/refs'\n\nimport {\n  deepEqual,\n  functionalUpdate,\n  getUrlScheme,\n  hasKeys,\n  isDangerousProtocol,\n  preloadWarning,\n  removeTrailingSlash,\n} from '@tanstack/router-core'\n\nimport { isServer } from '@tanstack/router-core/isServer'\nimport { Dynamic } from 'solid-js/web'\nimport { useRouter } from './useRouter'\n\nimport { useIntersectionObserver } from './utils'\n\nimport { useHydrated } from './ClientOnly'\nimport type {\n  AnyRouter,\n  Constrain,\n  LinkOptions,\n  RegisteredRouter,\n  RoutePaths,\n} from '@tanstack/router-core'\nimport type {\n  ValidateLinkOptions,\n  ValidateLinkOptionsArray,\n} from './typePrimitives'\n\nconst timeoutMap = new WeakMap<object, ReturnType<typeof setTimeout>>()\nconst cancelPreload = (eventTarget: object) => {\n  clearTimeout(timeoutMap.get(eventTarget))\n  timeoutMap.delete(eventTarget)\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): Solid.ComponentProps<'a'> {\n  const router = useRouter()\n  const [local, rest] = Solid.splitProps(\n    Solid.mergeProps(\n      {\n        activeProps: STATIC_ACTIVE_PROPS_GET,\n        inactiveProps: STATIC_INACTIVE_PROPS_GET,\n      },\n      options,\n    ),\n    [\n      'activeProps',\n      'inactiveProps',\n      'activeOptions',\n      'to',\n      'preload',\n      'preloadDelay',\n      'preloadIntentProximity',\n      'hashScrollIntoView',\n      'replace',\n      'startTransition',\n      'resetScroll',\n      'viewTransition',\n      'target',\n      'disabled',\n      'style',\n      'class',\n      'onClick',\n      'onBlur',\n      'onFocus',\n      'onMouseEnter',\n      'onMouseLeave',\n      'onMouseOver',\n      'onMouseOut',\n      'onTouchStart',\n      'ignoreBlocker',\n    ],\n  )\n\n  // const {\n  //   // custom props\n  //   activeProps = () => ({ class: 'active' }),\n  //   inactiveProps = () => ({}),\n  //   activeOptions,\n  //   to,\n  //   preload: userPreload,\n  //   preloadDelay: userPreloadDelay,\n  //   hashScrollIntoView,\n  //   replace,\n  //   startTransition,\n  //   resetScroll,\n  //   viewTransition,\n  //   // element props\n  //   children,\n  //   target,\n  //   disabled,\n  //   style,\n  //   class,\n  //   onClick,\n  //   onFocus,\n  //   onMouseEnter,\n  //   onMouseLeave,\n  //   onTouchStart,\n  //   ignoreBlocker,\n  //   ...rest\n  // } = options\n\n  const [_, propsSafeToSpread] = Solid.splitProps(rest, [\n    'params',\n    'search',\n    'hash',\n    'state',\n    'mask',\n    'reloadDocument',\n    'unsafeRelative',\n    'from',\n    'href',\n  ])\n\n  const currentLocation = Solid.createMemo(\n    () => router.stores.location.get(),\n    undefined,\n    { equals: (prev, next) => prev.href === next.href },\n  )\n\n  const next = Solid.createMemo(() => {\n    // Rebuild when inherited search/hash or the current route context changes.\n    const _fromLocation = currentLocation()\n    const nextOptions = { _fromLocation, ...options } as any\n    // untrack because router-core will also access stores, which are signals in solid\n    return Solid.untrack(() => router.buildLocation(nextOptions))\n  })\n\n  const hrefOption = Solid.createMemo(() => {\n    if (options.disabled) return undefined\n    // Use publicHref - it contains the correct href for display\n    // When a rewrite changes the origin, publicHref is the full URL\n    // Otherwise it's the origin-stripped path\n    // This avoids constructing URL objects in the hot path\n    const location = next().maskedLocation ?? next()\n    const publicHref = location.publicHref\n    const external = location.external\n\n    const href = external\n      ? publicHref\n      : router.history.createHref(publicHref) || '/'\n    if (\n      (external || href !== publicHref) &&\n      isDangerousProtocol(href, router.protocolAllowlist)\n    ) {\n      if (process.env.NODE_ENV !== 'production') {\n        console.warn(`Blocked Link with dangerous protocol: ${href}`)\n      }\n      return undefined\n    }\n\n    return href\n  })\n\n  const externalLink = Solid.createMemo(() => {\n    const to = options.to\n    const scheme = typeof to === 'string' && getUrlScheme(to)\n    if (scheme) {\n      if (!router.protocolAllowlist.has(scheme)) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.warn(`Blocked Link with dangerous protocol: ${to}`)\n        }\n        return null\n      }\n      return to\n    }\n\n    const _href = hrefOption()\n    if (!_href && !options.disabled) {\n      return null\n    }\n    return _href && getUrlScheme(_href) ? _href : undefined\n  })\n\n  const shouldHydrateHash = !isServer && !!router.options.ssr\n  const hasHydrated = (isServer ?? router.isServer) ? undefined : useHydrated()\n\n  const isActive = Solid.createMemo(() => {\n    if (externalLink() !== undefined) {\n      return false\n    }\n    const activeOptions = local.activeOptions\n    const current = currentLocation()\n    const nextLocation = next()\n\n    const currentPath = removeTrailingSlash(current.pathname, router.basepath)\n    const nextPath = removeTrailingSlash(nextLocation.pathname, router.basepath)\n\n    // Both modes compare normalized paths; fuzzy matches need a segment boundary.\n    if (\n      activeOptions?.exact\n        ? currentPath !== nextPath\n        : !(\n            currentPath.startsWith(nextPath) &&\n            (currentPath.length === nextPath.length ||\n              currentPath[nextPath.length] === '/')\n          )\n    ) {\n      return false\n    }\n\n    if (activeOptions?.includeSearch ?? true) {\n      const searchTest = deepEqual(current.search, nextLocation.search, {\n        partial: !activeOptions?.exact,\n        ignoreUndefined: !activeOptions?.explicitUndefined,\n      })\n      if (!searchTest) {\n        return false\n      }\n    }\n\n    if (activeOptions?.includeHash) {\n      const currentHash =\n        shouldHydrateHash && !hasHydrated?.() ? '' : current.hash\n      return currentHash === nextLocation.hash\n    }\n    return true\n  })\n\n  const simpleStyling = Solid.createMemo(\n    () =>\n      local.activeProps === STATIC_ACTIVE_PROPS_GET &&\n      local.inactiveProps === STATIC_INACTIVE_PROPS_GET &&\n      local.class === undefined &&\n      local.style === undefined,\n  )\n\n  type ResolvedLinkStateProps = Omit<Solid.ComponentProps<'a'>, 'style'> & {\n    style?: Solid.JSX.CSSProperties\n  }\n\n  const resolveLinkStateProps = (\n    base: Solid.ComponentProps<'a'> & { disabled?: boolean },\n  ) => {\n    const active = isActive()\n\n    if (simpleStyling()) {\n      return {\n        ...base,\n        ...(active && STATIC_DEFAULT_ACTIVE_ATTRIBUTES),\n      }\n    }\n\n    // Active and inactive props are mutually exclusive.\n    const stateProps: ResolvedLinkStateProps = active\n      ? (functionalUpdate(local.activeProps as any, {}) ?? EMPTY_OBJECT)\n      : functionalUpdate(local.inactiveProps, {})\n    const style = {\n      ...local.style,\n      ...stateProps.style,\n    }\n    const className = [local.class, stateProps.class].filter(Boolean).join(' ')\n\n    return {\n      ...stateProps,\n      ...base,\n      ...(hasKeys(style) ? { style } : undefined),\n      ...(className ? { class: className } : undefined),\n      ...(active && STATIC_ACTIVE_ATTRIBUTES),\n    } as ResolvedLinkStateProps\n  }\n\n  // Keep the guard inline so browser builds can drop the server return.\n  if (isServer ?? router.isServer) {\n    const external = externalLink()\n    const disabled = local.disabled || external === null\n    const props = resolveLinkStateProps({\n      onClick: local.onClick,\n      onBlur: local.onBlur,\n      onFocus: local.onFocus,\n      onMouseEnter: local.onMouseEnter,\n      onMouseLeave: local.onMouseLeave,\n      onMouseOut: local.onMouseOut,\n      onMouseOver: local.onMouseOver,\n      onTouchStart: local.onTouchStart,\n      href: external === null ? undefined : external || hrefOption(),\n      ref: options.ref,\n      disabled,\n      target: local.target,\n      ...(disabled && STATIC_DISABLED_PROPS),\n    })\n    // Avoid creating merged-prop getters for absent server event handlers.\n    for (const key of STATIC_EVENT_PROPS) {\n      if (props[key] === undefined) {\n        delete props[key]\n      }\n    }\n    return Solid.mergeProps(propsSafeToSpread, props) as any\n  }\n\n  let hasRenderFetched = false\n\n  const preload = Solid.createMemo(() => {\n    if (\n      options.reloadDocument ||\n      externalLink() !== undefined ||\n      local.disabled\n    ) {\n      return false\n    }\n    return local.preload ?? router.options.defaultPreload\n  })\n  const preloadDelay = () =>\n    local.preloadDelay ?? router.options.defaultPreloadDelay ?? 0\n\n  const doPreload = () =>\n    router\n      .preloadRoute(options as Parameters<typeof router.preloadRoute>[0])\n      .catch((err: any) => {\n        console.warn(err)\n        console.warn(preloadWarning)\n      })\n\n  const [ref, setRef] = Solid.createSignal<Element | null>(null)\n\n  const enqueuePreload = (\n    e?: MouseEvent | FocusEvent | IntersectionObserverEntry,\n  ) => {\n    if (!e) {\n      cancelPreload(ref)\n      return\n    }\n\n    if (\n      !(\n        (e as IntersectionObserverEntry).isIntersecting ??\n        preload() === 'intent'\n      )\n    ) {\n      if ((e as IntersectionObserverEntry).isIntersecting === false) {\n        cancelPreload(ref)\n      }\n      return\n    }\n\n    if (!preloadDelay()) {\n      doPreload()\n      return\n    }\n\n    if (!timeoutMap.has(ref)) {\n      timeoutMap.set(\n        ref,\n        setTimeout(() => {\n          timeoutMap.delete(ref)\n          doPreload()\n        }, preloadDelay()),\n      )\n    }\n  }\n\n  useIntersectionObserver(ref, enqueuePreload, () => preload() !== 'viewport')\n\n  Solid.createEffect(() => {\n    if (hasRenderFetched) {\n      return\n    }\n    if (preload() === 'render') {\n      doPreload()\n      hasRenderFetched = true\n    }\n  })\n\n  // The click handler\n  const handleClick = (e: MouseEvent) => {\n    // Check actual element's target attribute as fallback\n    const elementTarget = (\n      e.currentTarget as HTMLAnchorElement | SVGAElement\n    ).getAttribute('target')\n    const effectiveTarget =\n      local.target !== undefined ? local.target : elementTarget\n\n    if (\n      !local.disabled &&\n      externalLink() === undefined &&\n      !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) &&\n      !e.defaultPrevented &&\n      (!effectiveTarget || effectiveTarget === '_self') &&\n      e.button === 0\n    ) {\n      e.preventDefault()\n\n      // All is well? Navigate!\n      // N.B. we don't call `router.commitLocation(next) here because we want to run `validateSearch` before committing\n      router.navigate({\n        ...options,\n        replace: local.replace,\n        resetScroll: local.resetScroll,\n        hashScrollIntoView: local.hashScrollIntoView,\n        startTransition: local.startTransition,\n        viewTransition: local.viewTransition,\n        ignoreBlocker: local.ignoreBlocker,\n      })\n    }\n  }\n\n  const handleTouchStart = () => {\n    if (preload() !== 'intent') return\n    doPreload()\n  }\n\n  const handleLeave = () => {\n    if (preload() === 'intent') {\n      cancelPreload(ref)\n    }\n  }\n\n  const onClick = createComposedHandler(() => local.onClick, handleClick)\n  const onBlur = createComposedHandler(() => local.onBlur, handleLeave)\n  const onFocus = createComposedHandler(() => local.onFocus, enqueuePreload)\n  const onMouseEnter = createComposedHandler(\n    () => local.onMouseEnter,\n    enqueuePreload,\n  )\n  const onMouseOver = createComposedHandler(\n    () => local.onMouseOver,\n    enqueuePreload,\n  )\n  const onMouseLeave = createComposedHandler(\n    () => local.onMouseLeave,\n    handleLeave,\n  )\n  const onMouseOut = createComposedHandler(() => local.onMouseOut, handleLeave)\n  const onTouchStart = createComposedHandler(\n    () => local.onTouchStart,\n    handleTouchStart,\n  )\n\n  const resolvedProps = Solid.createMemo(() => {\n    const external = externalLink()\n    const disabled = local.disabled || external === null\n\n    const base = {\n      href: external === null ? undefined : external || hrefOption(),\n      ref: mergeRefs(setRef, options.ref),\n      onClick,\n      onBlur,\n      onFocus,\n      onMouseEnter,\n      onMouseOver,\n      onMouseLeave,\n      onMouseOut,\n      onTouchStart,\n      disabled,\n      target: local.target,\n      ...(disabled && STATIC_DISABLED_PROPS),\n    }\n\n    return resolveLinkStateProps(base)\n  })\n\n  return Solid.mergeProps(propsSafeToSpread, resolvedProps) as any\n}\n\nconst STATIC_EVENT_PROPS = [\n  'onClick',\n  'onBlur',\n  'onFocus',\n  'onMouseEnter',\n  'onMouseLeave',\n  'onMouseOut',\n  'onMouseOver',\n  'onTouchStart',\n] as const\nconst STATIC_ACTIVE_PROPS = { class: 'active' }\nconst STATIC_ACTIVE_PROPS_GET = () => STATIC_ACTIVE_PROPS\nconst EMPTY_OBJECT = {}\nconst STATIC_INACTIVE_PROPS_GET = () => EMPTY_OBJECT\nconst STATIC_DEFAULT_ACTIVE_ATTRIBUTES = {\n  class: 'active',\n  'data-status': 'active',\n  'aria-current': 'page',\n}\nconst STATIC_DISABLED_PROPS = {\n  role: 'link' as const,\n  'aria-disabled': true,\n}\nconst STATIC_ACTIVE_ATTRIBUTES = {\n  'data-status': 'active',\n  'aria-current': 'page',\n}\n\n/** Call a JSX.EventHandlerUnion with the event. */\nfunction callHandler<T, TEvent extends Event>(\n  event: TEvent & { currentTarget: T; target: Element },\n  handler: Solid.JSX.EventHandlerUnion<T, TEvent>,\n) {\n  if (typeof handler === 'function') {\n    handler(event)\n  } else {\n    handler[0](handler[1], event)\n  }\n  return event.defaultPrevented\n}\n\nfunction createComposedHandler<T, TEvent extends Event>(\n  getHandler: () => Solid.JSX.EventHandlerUnion<T, TEvent> | undefined,\n  fallback: (event: TEvent) => void,\n) {\n  return (event: TEvent & { currentTarget: T; target: Element }) => {\n    const handler = getHandler()\n    if (!handler || !callHandler(event, handler)) fallback(event)\n  }\n}\n\nexport type UseLinkPropsOptions<\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends RoutePaths<TRouter['routeTree']> | string = string,\n  TTo extends string | undefined = '.',\n  TMaskFrom extends RoutePaths<TRouter['routeTree']> | string = TFrom,\n  TMaskTo extends string = '.',\n> = ActiveLinkOptions<'a', TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n  Omit<Solid.ComponentProps<'a'>, 'style'> & { style?: Solid.JSX.CSSProperties }\n\nexport type ActiveLinkOptions<\n  TComp = 'a',\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends string = string,\n  TTo extends string | undefined = '.',\n  TMaskFrom extends string = TFrom,\n  TMaskTo extends string = '.',\n> = LinkOptions<TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n  ActiveLinkOptionProps<TComp>\n\ntype ActiveLinkProps<TComp> = Partial<\n  LinkComponentSolidProps<TComp> & {\n    [key: `data-${string}`]: unknown\n  }\n>\n\nexport interface ActiveLinkOptionProps<TComp = 'a'> {\n  /**\n   * A function that returns additional props for the `active` state of this link.\n   * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n   */\n  activeProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n  /**\n   * A function that returns additional props for the `inactive` state of this link.\n   * These props override other props passed to the link (`style`'s are merged, `class`'s are concatenated)\n   */\n  inactiveProps?: ActiveLinkProps<TComp> | (() => ActiveLinkProps<TComp>)\n}\n\nexport type LinkProps<\n  TComp = 'a',\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends string = string,\n  TTo extends string | undefined = '.',\n  TMaskFrom extends string = TFrom,\n  TMaskTo extends string = '.',\n> = ActiveLinkOptions<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo> &\n  LinkPropsChildren\n\nexport interface LinkPropsChildren {\n  // If a function is passed as a child, it will be given the `isActive` boolean to aid in further styling on the element it returns\n  children?:\n    | Solid.JSX.Element\n    | ((state: { isActive: boolean }) => Solid.JSX.Element)\n}\n\ntype LinkComponentSolidProps<TComp> = TComp extends Solid.ValidComponent\n  ? Omit<Solid.ComponentProps<TComp>, keyof CreateLinkProps>\n  : never\n\nexport type LinkComponentProps<\n  TComp = 'a',\n  TRouter extends AnyRouter = RegisteredRouter,\n  TFrom extends string = string,\n  TTo extends string | undefined = '.',\n  TMaskFrom extends string = TFrom,\n  TMaskTo extends string = '.',\n> = LinkComponentSolidProps<TComp> &\n  LinkProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>\n\nexport type CreateLinkProps = LinkProps<\n  any,\n  any,\n  string,\n  string,\n  string,\n  string\n>\n\nexport type LinkComponent<\n  in out TComp,\n  in out TDefaultFrom extends string = string,\n> = <\n  TRouter extends AnyRouter = RegisteredRouter,\n  const TFrom extends string = TDefaultFrom,\n  const TTo extends string | undefined = undefined,\n  const TMaskFrom extends string = TFrom,\n  const TMaskTo extends string = '',\n>(\n  props: LinkComponentProps<TComp, TRouter, TFrom, TTo, TMaskFrom, TMaskTo>,\n) => Solid.JSX.Element\n\nexport interface LinkComponentRoute<\n  in out TDefaultFrom extends string = string,\n> {\n  defaultFrom: TDefaultFrom;\n  <\n    TRouter extends AnyRouter = RegisteredRouter,\n    const TTo extends string | undefined = undefined,\n    const TMaskTo extends string = '',\n  >(\n    props: LinkComponentProps<\n      'a',\n      TRouter,\n      this['defaultFrom'],\n      TTo,\n      this['defaultFrom'],\n      TMaskTo\n    >,\n  ): Solid.JSX.Element\n}\n\nexport function createLink<const TComp>(\n  Comp: Constrain<TComp, any, (props: CreateLinkProps) => Solid.JSX.Element>,\n): LinkComponent<TComp> {\n  return (props) => <Link {...props} _asChild={Comp} />\n}\n\nexport const Link: LinkComponent<'a'> = (props) => {\n  const [local, rest] = Solid.splitProps(\n    props as typeof props & { _asChild: any },\n    ['_asChild', 'children'],\n  )\n\n  const [_, linkProps] = Solid.splitProps(\n    useLinkProps(rest as unknown as any),\n    ['type'],\n  )\n\n  const children = Solid.createMemo(() => {\n    const ch = local.children\n    if (typeof ch === 'function') {\n      return ch({\n        get isActive() {\n          return (linkProps as any)['data-status'] === 'active'\n        },\n      })\n    }\n\n    return ch satisfies Solid.JSX.Element\n  })\n\n  if (local._asChild === 'svg') {\n    const [_, svgLinkProps] = Solid.splitProps(linkProps, ['class'])\n    return (\n      <svg>\n        <a {...svgLinkProps}>{children()}</a>\n      </svg>\n    )\n  }\n\n  if (!local._asChild) {\n    return <a {...linkProps}>{children()}</a>\n  }\n\n  return (\n    <Dynamic component={local._asChild as Solid.ValidComponent} {...linkProps}>\n      {children()}\n    </Dynamic>\n  )\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"],"mappings":"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"}