{"version":3,"file":"useTabTrigger.js","names":[],"sources":["esm/ui/useTabTrigger.js"],"sourcesContent":["import {\n  use,\n  useCallback\n} from \"react\";\nimport { appendBaseUrl } from \"../fork/getPathFromState-mods\";\nimport { router } from \"../router/imperative-api\";\nimport { stripGroupSegmentsFromPath } from \"../router/matchers\";\nimport { useNavigatorContext } from \"../views/Navigator\";\nimport { TabTriggerMapContext } from \"./TabContext\";\nfunction shouldHandleMouseEvent(event) {\n  if (!event) return true;\n  if (\"button\" in event) {\n    return !event.metaKey && !event.altKey && !event.ctrlKey && !event.shiftKey && (event.button == null || event.button === 0) && [void 0, null, \"\", \"self\"].includes(event.currentTarget.target);\n  }\n  return true;\n}\nfunction useTabTrigger(options) {\n  const { state, navigation } = useNavigatorContext();\n  const { name, resetOnFocus, onPress, onLongPress } = options;\n  const triggerMap = use(TabTriggerMapContext);\n  const getTrigger = useCallback(\n    (name2) => {\n      const config = triggerMap[name2];\n      if (!config) return;\n      return {\n        isFocused: state.index === config.index,\n        route: state.routes[config.index],\n        resolvedHref: stripGroupSegmentsFromPath(appendBaseUrl(config.href)),\n        ...config\n      };\n    },\n    [triggerMap, state]\n  );\n  const trigger = name !== void 0 ? getTrigger(name) : void 0;\n  const switchTab = useCallback(\n    (name2, options2) => {\n      const config = triggerMap[name2];\n      if (config) {\n        if (config.type === \"external\") {\n          return router.navigate(config.href);\n        }\n        return navigation?.dispatch({\n          ...config.action,\n          type: \"JUMP_TO\",\n          payload: {\n            ...config.action.payload,\n            ...options2\n          }\n        });\n      }\n      return navigation?.dispatch({\n        type: \"JUMP_TO\",\n        payload: { name: name2 }\n      });\n    },\n    [navigation, triggerMap]\n  );\n  const handleOnPress = useCallback(\n    (event) => {\n      onPress?.(event);\n      if (!trigger || event?.isDefaultPrevented()) return;\n      navigation?.emit({\n        type: \"tabPress\",\n        target: trigger.type === \"internal\" ? trigger.route.key : trigger.href,\n        canPreventDefault: true\n      });\n      if (!shouldHandleMouseEvent(event) || trigger.isFocused) return;\n      switchTab(name, { resetOnFocus });\n    },\n    [onPress, name, resetOnFocus, trigger, navigation, switchTab]\n  );\n  const handleOnLongPress = useCallback(\n    (event) => {\n      onLongPress?.(event);\n      if (!trigger || event?.isDefaultPrevented()) return;\n      navigation?.emit({\n        type: \"tabLongPress\",\n        target: trigger.type === \"internal\" ? trigger.route.key : trigger.href\n      });\n      if (!shouldHandleMouseEvent(event)) return;\n      switchTab(name, { resetOnFocus });\n    },\n    [onLongPress, name, resetOnFocus, trigger, navigation, switchTab]\n  );\n  return {\n    switchTab,\n    getTrigger,\n    trigger,\n    triggerProps: {\n      isFocused: Boolean(trigger?.isFocused),\n      onPress: handleOnPress,\n      onLongPress: handleOnLongPress\n    }\n  };\n}\nexport {\n  shouldHandleMouseEvent,\n  useTabTrigger\n};\n//# sourceMappingURL=useTabTrigger.js.map\n"],"mappings":";;;;;;;;AASA,SAAS,uBAAuB,OAAO;CACrC,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,YAAY,OAAO;EACrB,OAAO,CAAC,MAAM,WAAW,CAAC,MAAM,UAAU,CAAC,MAAM,WAAW,CAAC,MAAM,aAAa,MAAM,UAAU,QAAQ,MAAM,WAAW,MAAM;GAAC,KAAK;GAAG;GAAM;GAAI;EAAM,CAAC,CAAC,SAAS,MAAM,cAAc,MAAM;CAC/L;CACA,OAAO;AACT;AACA,SAAS,cAAc,SAAS;CAC9B,MAAM,EAAE,OAAO,eAAe,oBAAoB;CAClD,MAAM,EAAE,MAAM,cAAc,SAAS,gBAAgB;CACrD,MAAM,aAAa,IAAI,oBAAoB;CAC3C,MAAM,aAAa,aAChB,UAAU;EACT,MAAM,SAAS,WAAW;EAC1B,IAAI,CAAC,QAAQ;EACb,OAAO;GACL,WAAW,MAAM,UAAU,OAAO;GAClC,OAAO,MAAM,OAAO,OAAO;GAC3B,cAAc,2BAA2B,cAAc,OAAO,IAAI,CAAC;GACnE,GAAG;EACL;CACF,GACA,CAAC,YAAY,KAAK,CACpB;CACA,MAAM,UAAU,SAAS,KAAK,IAAI,WAAW,IAAI,IAAI,KAAK;CAC1D,MAAM,YAAY,aACf,OAAO,aAAa;EACnB,MAAM,SAAS,WAAW;EAC1B,IAAI,QAAQ;GACV,IAAI,OAAO,SAAS,YAAY;IAC9B,OAAO,OAAO,SAAS,OAAO,IAAI;GACpC;GACA,OAAO,YAAY,SAAS;IAC1B,GAAG,OAAO;IACV,MAAM;IACN,SAAS;KACP,GAAG,OAAO,OAAO;KACjB,GAAG;IACL;GACF,CAAC;EACH;EACA,OAAO,YAAY,SAAS;GAC1B,MAAM;GACN,SAAS,EAAE,MAAM,MAAM;EACzB,CAAC;CACH,GACA,CAAC,YAAY,UAAU,CACzB;CACA,MAAM,gBAAgB,aACnB,UAAU;EACT,UAAU,KAAK;EACf,IAAI,CAAC,WAAW,OAAO,mBAAmB,GAAG;EAC7C,YAAY,KAAK;GACf,MAAM;GACN,QAAQ,QAAQ,SAAS,aAAa,QAAQ,MAAM,MAAM,QAAQ;GAClE,mBAAmB;EACrB,CAAC;EACD,IAAI,CAAC,uBAAuB,KAAK,KAAK,QAAQ,WAAW;EACzD,UAAU,MAAM,EAAE,aAAa,CAAC;CAClC,GACA;EAAC;EAAS;EAAM;EAAc;EAAS;EAAY;CAAS,CAC9D;CACA,MAAM,oBAAoB,aACvB,UAAU;EACT,cAAc,KAAK;EACnB,IAAI,CAAC,WAAW,OAAO,mBAAmB,GAAG;EAC7C,YAAY,KAAK;GACf,MAAM;GACN,QAAQ,QAAQ,SAAS,aAAa,QAAQ,MAAM,MAAM,QAAQ;EACpE,CAAC;EACD,IAAI,CAAC,uBAAuB,KAAK,GAAG;EACpC,UAAU,MAAM,EAAE,aAAa,CAAC;CAClC,GACA;EAAC;EAAa;EAAM;EAAc;EAAS;EAAY;CAAS,CAClE;CACA,OAAO;EACL;EACA;EACA;EACA,cAAc;GACZ,WAAW,QAAQ,SAAS,SAAS;GACrC,SAAS;GACT,aAAa;EACf;CACF;AACF"}