{"version":3,"file":"common.js","names":[],"sources":["esm/ui/common.js"],"sourcesContent":["import { resolveHref } from \"../link/href\";\nimport { getReactNavigationRouteName } from \"../getReactNavigationConfig\";\nimport { sortRoutesWithInitial } from \"../router/sortRoutes\";\nimport {\n  createGetIdForRoute,\n  getQualifiedRouteComponent,\n  Screen\n} from \"../router/useScreens\";\nimport { Slot } from \"./Slot\";\nimport { jsx } from \"react/jsx-runtime\";\nconst ViewSlot = Slot;\nfunction resolveHrefWithSegments(href, routeInfo, segmentsWithoutGroups) {\n  if (href.startsWith(\"./\") || href.startsWith(\"../\")) {\n    const basePath = \"/\" + segmentsWithoutGroups.join(\"/\");\n    const baseDir = basePath.replace(/\\/[^/]*$/, \"\") || \"/\";\n    const parts = (baseDir + \"/\" + href).split(\"/\");\n    const resolved = [];\n    for (const part of parts) {\n      if (part === \".\" || part === \"\") continue;\n      if (part === \"..\") {\n        resolved.pop();\n      } else {\n        resolved.push(part);\n      }\n    }\n    return \"/\" + resolved.join(\"/\");\n  }\n  return href;\n}\nfunction triggersToScreens(triggers, layoutRouteNode, linking, initialRouteName, parentTriggerMap, routeInfo, contextKey) {\n  const configs = [];\n  for (const trigger of triggers) {\n    if (trigger.name in parentTriggerMap) {\n      const parentTrigger = parentTriggerMap[trigger.name];\n      throw new Error(\n        `Trigger ${JSON.stringify({\n          name: trigger.name,\n          href: trigger.href\n        })} has the same name as parent trigger ${JSON.stringify({\n          name: parentTrigger.name,\n          href: parentTrigger.href\n        })}. Triggers must have unique names.`\n      );\n    }\n    if (trigger.type === \"external\") {\n      configs.push(trigger);\n      continue;\n    }\n    let resolvedHref = resolveHref(trigger.href);\n    if (resolvedHref.startsWith(\"../\")) {\n      throw new Error(\"Trigger href cannot link to a parent directory\");\n    }\n    const segmentsWithoutGroups = contextKey.split(\"/\").filter((segment) => {\n      return !(segment.startsWith(\"(\") && segment.endsWith(\")\"));\n    });\n    resolvedHref = resolveHrefWithSegments(resolvedHref, routeInfo, segmentsWithoutGroups);\n    let state = linking.getStateFromPath?.(resolvedHref, linking.config)?.routes[0];\n    if (!state) {\n      console.warn(\n        `Unable to find screen for trigger ${JSON.stringify(trigger)}. Does this point to a valid screen?`\n      );\n      continue;\n    }\n    let routeState = state;\n    if (routeState.name === \"+not-found\") {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.warn(\n          `Tab trigger '${trigger.name}' has the href '${trigger.href}' which points to a +not-found route.`\n        );\n      }\n      continue;\n    }\n    const targetStateName = getReactNavigationRouteName(layoutRouteNode) || \"__root\";\n    while (state?.state) {\n      if (state.name === targetStateName) break;\n      state = state.state.routes[state.state.index ?? state.state.routes.length - 1];\n    }\n    routeState = state.state?.routes[state.state.index ?? state.state.routes.length - 1] || state;\n    const routeNode = layoutRouteNode.children.find(\n      (child) => child.route === routeState?.name\n    );\n    if (!routeNode) {\n      console.warn(\n        `Unable to find routeNode for trigger ${JSON.stringify(trigger)}. This might be a bug in One router`\n      );\n      continue;\n    }\n    const duplicateTrigger = trigger.type === \"internal\" && configs.find((config) => {\n      if (config.type === \"external\") {\n        return false;\n      }\n      return config.routeNode.route === routeNode.route;\n    });\n    if (duplicateTrigger) {\n      const duplicateTriggerText = `${JSON.stringify({ name: duplicateTrigger.name, href: duplicateTrigger.href })} and ${JSON.stringify({ name: trigger.name, href: trigger.href })}`;\n      throw new Error(\n        `A navigator cannot contain multiple trigger components that map to the same sub-segment. Consider adding a shared group and assigning a group to each trigger. Conflicting triggers:\n\t${duplicateTriggerText}.\nBoth triggers map to route ${routeNode.route}.`\n      );\n    }\n    configs.push({\n      ...trigger,\n      href: resolvedHref,\n      routeNode,\n      action: stateToAction(state, layoutRouteNode.route)\n    });\n  }\n  const sortFn = sortRoutesWithInitial(initialRouteName);\n  const sortedConfigs = configs.sort((a, b) => {\n    if (a.type === \"external\" && b.type === \"external\") {\n      return 0;\n    } else if (a.type === \"external\") {\n      return 1;\n    } else if (b.type === \"external\") {\n      return -1;\n    }\n    return sortFn(a.routeNode, b.routeNode);\n  });\n  const children = [];\n  const triggerMap = { ...parentTriggerMap };\n  for (const [index, config] of sortedConfigs.entries()) {\n    triggerMap[config.name] = { ...config, index };\n    if (config.type === \"internal\") {\n      const route = config.routeNode;\n      children.push(\n        /* @__PURE__ */ jsx(\n          Screen,\n          {\n            getId: createGetIdForRoute(route),\n            name: getReactNavigationRouteName(route),\n            options: (args) => {\n              const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n              const staticResult = typeof staticOptions === \"function\" ? staticOptions(args) : staticOptions;\n              const output = {\n                ...staticResult\n              };\n              if (route.generated) {\n                output.tabBarButton = () => null;\n                output.drawerItemStyle = { height: 0, display: \"none\" };\n              }\n              return output;\n            },\n            getComponent: () => getQualifiedRouteComponent(route)\n          },\n          getReactNavigationRouteName(route)\n        )\n      );\n    }\n  }\n  return {\n    children,\n    triggerMap\n  };\n}\nfunction stateToAction(state, startAtRoute) {\n  const rootPayload = {};\n  let payload = rootPayload;\n  startAtRoute = startAtRoute === \"\" ? \"__root\" : startAtRoute;\n  let foundStartingPoint = startAtRoute === void 0 || !state?.state;\n  while (state) {\n    if (foundStartingPoint) {\n      if (payload === rootPayload) {\n        payload.name = state.name;\n      } else {\n        payload.screen = state.name;\n      }\n      payload.params = state.params ? { ...state.params } : {};\n      state = state.state?.routes[state.state.index ?? state.state.routes.length - 1];\n      if (state) {\n        payload.params ??= {};\n        payload = payload.params;\n      }\n    } else {\n      if (state.name === startAtRoute) {\n        foundStartingPoint = true;\n      }\n      const nextState = state.state?.routes[state.state.index ?? state.state.routes.length - 1];\n      if (nextState) {\n        state = nextState;\n      }\n    }\n  }\n  return {\n    type: \"JUMP_TO\",\n    payload: rootPayload\n  };\n}\nexport {\n  ViewSlot,\n  stateToAction,\n  triggersToScreens\n};\n//# sourceMappingURL=common.js.map\n"],"mappings":"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"}