{"ast":null,"code":"\"use strict\";\n\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';\nimport { useClientLayoutEffect } from \"./useClientLayoutEffect.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function useNavigationState(selector) {\n  var stateListener = React.useContext(NavigationStateListenerContext);\n  if (stateListener == null) {\n    throw new Error(\"Couldn't get the navigation state. Is your component inside a navigator?\");\n  }\n  var value = useSyncExternalStoreWithSelector(stateListener.subscribe, stateListener.getState, stateListener.getState, selector);\n  return value;\n}\nexport function NavigationStateListenerProvider(_ref) {\n  var state = _ref.state,\n    children = _ref.children;\n  var listeners = React.useRef([]);\n  var getState = useLatestCallback(function () {\n    return state;\n  });\n  var subscribe = useLatestCallback(function (callback) {\n    listeners.current.push(callback);\n    return function () {\n      listeners.current = listeners.current.filter(function (cb) {\n        return cb !== callback;\n      });\n    };\n  });\n  useClientLayoutEffect(function () {\n    listeners.current.forEach(function (callback) {\n      return callback();\n    });\n  }, [state]);\n  var context = React.useMemo(function () {\n    return {\n      getState: getState,\n      subscribe: subscribe\n    };\n  }, [getState, subscribe]);\n  return _jsx(NavigationStateListenerContext.Provider, {\n    value: context,\n    children: children\n  });\n}\nvar NavigationStateListenerContext = React.createContext(undefined);","map":{"version":3,"names":["React","useLatestCallback","useSyncExternalStoreWithSelector","useClientLayoutEffect","jsx","_jsx","useNavigationState","selector","stateListener","useContext","NavigationStateListenerContext","Error","value","subscribe","getState","NavigationStateListenerProvider","_ref","state","children","listeners","useRef","callback","current","push","filter","cb","forEach","context","useMemo","Provider","createContext","undefined"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/@react-navigation/core/src/useNavigationState.tsx"],"sourcesContent":["import type { NavigationState, ParamListBase } from '@react-navigation/routers';\nimport * as React from 'react';\nimport useLatestCallback from 'use-latest-callback';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';\n\nimport { useClientLayoutEffect } from './useClientLayoutEffect';\n\ntype Selector<ParamList extends ParamListBase, T> = (\n  state: NavigationState<ParamList>\n) => T;\n\n/**\n * Hook to get a value from the current navigation state using a selector.\n *\n * @param selector Selector function to get a value from the state.\n */\nexport function useNavigationState<ParamList extends ParamListBase, T>(\n  selector: Selector<ParamList, T>\n): T {\n  const stateListener = React.useContext(NavigationStateListenerContext);\n\n  if (stateListener == null) {\n    throw new Error(\n      \"Couldn't get the navigation state. Is your component inside a navigator?\"\n    );\n  }\n\n  const value = useSyncExternalStoreWithSelector(\n    stateListener.subscribe,\n    // @ts-expect-error: this is unsafe, but needed to make the generic work\n    stateListener.getState,\n    stateListener.getState,\n    selector\n  );\n\n  return value;\n}\n\nexport function NavigationStateListenerProvider({\n  state,\n  children,\n}: {\n  state: NavigationState<ParamListBase>;\n  children: React.ReactNode;\n}) {\n  const listeners = React.useRef<(() => void)[]>([]);\n\n  const getState = useLatestCallback(() => state);\n\n  const subscribe = useLatestCallback((callback: () => void) => {\n    listeners.current.push(callback);\n\n    return () => {\n      listeners.current = listeners.current.filter((cb) => cb !== callback);\n    };\n  });\n\n  useClientLayoutEffect(() => {\n    listeners.current.forEach((callback) => callback());\n  }, [state]);\n\n  const context = React.useMemo(\n    () => ({\n      getState,\n      subscribe,\n    }),\n    [getState, subscribe]\n  );\n\n  return (\n    <NavigationStateListenerContext.Provider value={context}>\n      {children}\n    </NavigationStateListenerContext.Provider>\n  );\n}\n\nconst NavigationStateListenerContext = React.createContext<\n  | {\n      getState: () => NavigationState<ParamListBase>;\n      subscribe: (callback: () => void) => () => void;\n    }\n  | undefined\n>(undefined);\n"],"mappings":";;AACA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,iBAAiB,MAAM,qBAAqB;AACnD,SAASC,gCAAgC,QAAQ,uCAAuC;AAExF,SAASC,qBAAqB;AAAkC,SAAAC,GAAA,IAAAC,IAAA;AAWhE,OAAO,SAASC,kBAAkBA,CAChCC,QAAgC,EAC7B;EACH,IAAMC,aAAa,GAAGR,KAAK,CAACS,UAAU,CAACC,8BAA8B,CAAC;EAEtE,IAAIF,aAAa,IAAI,IAAI,EAAE;IACzB,MAAM,IAAIG,KAAK,CACb,0EACF,CAAC;EACH;EAEA,IAAMC,KAAK,GAAGV,gCAAgC,CAC5CM,aAAa,CAACK,SAAS,EAEvBL,aAAa,CAACM,QAAQ,EACtBN,aAAa,CAACM,QAAQ,EACtBP,QACF,CAAC;EAED,OAAOK,KAAK;AACd;AAEA,OAAO,SAASG,+BAA+BA,CAAAC,IAAA,EAM5C;EAAA,IALDC,KAAK,GAAAD,IAAA,CAALC,KAAK;IACLC,QAAA,GAAAF,IAAA,CAAAE,QAAA;EAKA,IAAMC,SAAS,GAAGnB,KAAK,CAACoB,MAAM,CAAiB,EAAE,CAAC;EAElD,IAAMN,QAAQ,GAAGb,iBAAiB,CAAC;IAAA,OAAMgB,KAAK;EAAA,EAAC;EAE/C,IAAMJ,SAAS,GAAGZ,iBAAiB,CAAE,UAAAoB,QAAoB,EAAK;IAC5DF,SAAS,CAACG,OAAO,CAACC,IAAI,CAACF,QAAQ,CAAC;IAEhC,OAAO,YAAM;MACXF,SAAS,CAACG,OAAO,GAAGH,SAAS,CAACG,OAAO,CAACE,MAAM,CAAE,UAAAC,EAAE;QAAA,OAAKA,EAAE,KAAKJ,QAAQ;MAAA,EAAC;IACvE,CAAC;EACH,CAAC,CAAC;EAEFlB,qBAAqB,CAAC,YAAM;IAC1BgB,SAAS,CAACG,OAAO,CAACI,OAAO,CAAE,UAAAL,QAAQ;MAAA,OAAKA,QAAQ,CAAC,CAAC;IAAA,EAAC;EACrD,CAAC,EAAE,CAACJ,KAAK,CAAC,CAAC;EAEX,IAAMU,OAAO,GAAG3B,KAAK,CAAC4B,OAAO,CAC3B;IAAA,OAAO;MACLd,QAAQ,EAARA,QAAQ;MACRD,SAAA,EAAAA;IACF,CAAC;EAAA,CAAC,EACF,CAACC,QAAQ,EAAED,SAAS,CACtB,CAAC;EAED,OACER,IAAA,CAACK,8BAA8B,CAACmB,QAAQ;IAACjB,KAAK,EAAEe,OAAQ;IAAAT,QAAA,EACrDA;EAAQ,CAC8B,CAAC;AAE9C;AAEA,IAAMR,8BAA8B,GAAGV,KAAK,CAAC8B,aAAa,CAMxDC,SAAS,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}