{"version":3,"names":["getStateFromParams","params","state","screen","routes","name","undefined","useLinkProps","to","action","root","React","useContext","NavigationContainerRefContext","navigation","NavigationHelpersContext","options","LinkingContext","linkTo","useLinkTo","onPress","e","shouldHandle","Platform","OS","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","button","includes","currentTarget","target","preventDefault","dispatch","Error","getPathFromStateHelper","getPathFromState","href","config","accessibilityRole"],"sources":["useLinkProps.tsx"],"sourcesContent":["import {\n  getPathFromState,\n  NavigationAction,\n  NavigationContainerRefContext,\n  NavigationHelpersContext,\n  NavigatorScreenParams,\n  ParamListBase,\n} from '@react-navigation/core';\nimport type { NavigationState, PartialState } from '@react-navigation/routers';\nimport * as React from 'react';\nimport { GestureResponderEvent, Platform } from 'react-native';\n\nimport LinkingContext from './LinkingContext';\nimport useLinkTo, { To } from './useLinkTo';\n\ntype Props<ParamList extends ReactNavigation.RootParamList> = {\n  to: To<ParamList>;\n  action?: NavigationAction;\n};\n\nconst getStateFromParams = (\n  params: NavigatorScreenParams<ParamListBase, NavigationState> | undefined\n): PartialState<NavigationState> | NavigationState | undefined => {\n  if (params?.state) {\n    return params.state;\n  }\n\n  if (params?.screen) {\n    return {\n      routes: [\n        {\n          name: params.screen,\n          params: params.params,\n          // @ts-expect-error\n          state: params.screen\n            ? getStateFromParams(\n                params.params as\n                  | NavigatorScreenParams<ParamListBase, NavigationState>\n                  | undefined\n              )\n            : undefined,\n        },\n      ],\n    };\n  }\n\n  return undefined;\n};\n\n/**\n * Hook to get props for an anchor tag so it can work with in page navigation.\n *\n * @param props.to Absolute path to screen (e.g. `/feeds/hot`).\n * @param props.action Optional action to use for in-page navigation. By default, the path is parsed to an action based on linking config.\n */\nexport default function useLinkProps<\n  ParamList extends ReactNavigation.RootParamList\n>({ to, action }: Props<ParamList>) {\n  const root = React.useContext(NavigationContainerRefContext);\n  const navigation = React.useContext(NavigationHelpersContext);\n  const { options } = React.useContext(LinkingContext);\n  const linkTo = useLinkTo<ParamList>();\n\n  const onPress = (\n    e?: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent\n  ) => {\n    let shouldHandle = false;\n\n    if (Platform.OS !== 'web' || !e) {\n      shouldHandle = e ? !e.defaultPrevented : true;\n    } else if (\n      !e.defaultPrevented && // onPress prevented default\n      // @ts-expect-error: these properties exist on web, but not in React Native\n      !(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) && // ignore clicks with modifier keys\n      // @ts-expect-error: these properties exist on web, but not in React Native\n      (e.button == null || e.button === 0) && // ignore everything but left clicks\n      // @ts-expect-error: these properties exist on web, but not in React Native\n      [undefined, null, '', 'self'].includes(e.currentTarget?.target) // let browser handle \"target=_blank\" etc.\n    ) {\n      e.preventDefault();\n      shouldHandle = true;\n    }\n\n    if (shouldHandle) {\n      if (action) {\n        if (navigation) {\n          navigation.dispatch(action);\n        } else if (root) {\n          root.dispatch(action);\n        } else {\n          throw new Error(\n            \"Couldn't find a navigation object. Is your component inside NavigationContainer?\"\n          );\n        }\n      } else {\n        linkTo(to);\n      }\n    }\n  };\n\n  const getPathFromStateHelper = options?.getPathFromState ?? getPathFromState;\n\n  const href =\n    typeof to === 'string'\n      ? to\n      : getPathFromStateHelper(\n          {\n            routes: [\n              {\n                name: to.screen,\n                // @ts-expect-error\n                params: to.params,\n                // @ts-expect-error\n                state: getStateFromParams(to.params),\n              },\n            ],\n          },\n          options?.config\n        );\n\n  return {\n    href,\n    accessibilityRole: 'link' as const,\n    onPress,\n  };\n}\n"],"mappings":"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"}