{"ast":null,"code":"\"use strict\";\n\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport * as React from 'react';\nimport Platform from \"react-native-web/dist/exports/Platform\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport { useSafeAreaFrame } from 'react-native-safe-area-context';\nimport useLatestCallback from 'use-latest-callback';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';\nimport { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nvar SafeAreaListener = require('react-native-safe-area-context').SafeAreaListener;\nvar FrameContext = React.createContext(undefined);\nexport function useFrameSize(selector, throttle) {\n  var context = React.useContext(FrameContext);\n  if (context == null) {\n    throw new Error('useFrameSize must be used within a FrameSizeProvider');\n  }\n  var value = useSyncExternalStoreWithSelector(throttle ? context.subscribeThrottled : context.subscribe, context.getCurrent, context.getCurrent, selector);\n  return value;\n}\nexport function FrameSizeProvider(_ref) {\n  var initialFrame = _ref.initialFrame,\n    children = _ref.children;\n  var context = React.useContext(FrameContext);\n  if (context != null) {\n    return children;\n  }\n  return _jsx(FrameSizeProviderInner, {\n    initialFrame: initialFrame,\n    children: children\n  });\n}\nfunction FrameSizeProviderInner(_ref2) {\n  var initialFrame = _ref2.initialFrame,\n    children = _ref2.children;\n  var frameRef = React.useRef({\n    width: initialFrame.width,\n    height: initialFrame.height\n  });\n  var listeners = React.useRef(new Set());\n  var getCurrent = useLatestCallback(function () {\n    return frameRef.current;\n  });\n  var subscribe = useLatestCallback(function (listener) {\n    listeners.current.add(listener);\n    return function () {\n      listeners.current.delete(listener);\n    };\n  });\n  var subscribeThrottled = useLatestCallback(function (listener) {\n    var delay = 100;\n    var timer;\n    var updated = false;\n    var waiting = false;\n    var throttledListener = function throttledListener() {\n      clearTimeout(timer);\n      updated = true;\n      if (waiting) {\n        timer = setTimeout(function () {\n          if (updated) {\n            updated = false;\n            listener();\n          }\n        }, delay);\n      } else {\n        waiting = true;\n        setTimeout(function () {\n          waiting = false;\n        }, delay);\n        updated = false;\n        listener();\n      }\n    };\n    var unsubscribe = subscribe(throttledListener);\n    return function () {\n      unsubscribe();\n      clearTimeout(timer);\n    };\n  });\n  var context = React.useMemo(function () {\n    return {\n      getCurrent: getCurrent,\n      subscribe: subscribe,\n      subscribeThrottled: subscribeThrottled\n    };\n  }, [subscribe, subscribeThrottled, getCurrent]);\n  var _onChange = useLatestCallback(function (frame) {\n    if (frameRef.current.height === frame.height && frameRef.current.width === frame.width) {\n      return;\n    }\n    frameRef.current = {\n      width: frame.width,\n      height: frame.height\n    };\n    listeners.current.forEach(function (listener) {\n      return listener();\n    });\n  });\n  return _jsxs(_Fragment, {\n    children: [Platform.OS === 'web' ? _jsx(FrameSizeListenerWeb, {\n      onChange: _onChange\n    }) : typeof SafeAreaListener === 'undefined' ? _jsx(FrameSizeListenerNativeFallback, {\n      onChange: _onChange\n    }) : _jsx(SafeAreaListener, {\n      onChange: function onChange(_ref3) {\n        var frame = _ref3.frame;\n        return _onChange(frame);\n      },\n      style: StyleSheet.absoluteFill\n    }), _jsx(FrameContext.Provider, {\n      value: context,\n      children: children\n    })]\n  });\n}\nfunction FrameSizeListenerNativeFallback(_ref4) {\n  var onChange = _ref4.onChange;\n  var frame = useSafeAreaFrame();\n  React.useLayoutEffect(function () {\n    onChange(frame);\n  }, [frame, onChange]);\n  return null;\n}\nfunction FrameSizeListenerWeb(_ref5) {\n  var onChange = _ref5.onChange;\n  var elementRef = React.useRef(null);\n  React.useEffect(function () {\n    if (elementRef.current == null) {\n      return;\n    }\n    var rect = elementRef.current.getBoundingClientRect();\n    onChange({\n      width: rect.width,\n      height: rect.height\n    });\n    var observer = new ResizeObserver(function (entries) {\n      var entry = entries[0];\n      if (entry) {\n        var _entry$contentRect = entry.contentRect,\n          width = _entry$contentRect.width,\n          height = _entry$contentRect.height;\n        onChange({\n          width: width,\n          height: height\n        });\n      }\n    });\n    observer.observe(elementRef.current);\n    return function () {\n      observer.disconnect();\n    };\n  }, [onChange]);\n  return _jsx(\"div\", {\n    ref: elementRef,\n    style: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n      pointerEvents: 'none',\n      visibility: 'hidden'\n    })\n  });\n}","map":{"version":3,"names":["React","Platform","StyleSheet","useSafeAreaFrame","useLatestCallback","useSyncExternalStoreWithSelector","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SafeAreaListener","require","FrameContext","createContext","undefined","useFrameSize","selector","throttle","context","useContext","Error","value","subscribeThrottled","subscribe","getCurrent","FrameSizeProvider","_ref","initialFrame","children","FrameSizeProviderInner","_ref2","frameRef","useRef","width","height","listeners","Set","current","listener","add","delete","delay","timer","updated","waiting","throttledListener","clearTimeout","setTimeout","unsubscribe","useMemo","onChange","frame","forEach","OS","FrameSizeListenerWeb","FrameSizeListenerNativeFallback","_ref3","style","absoluteFill","Provider","_ref4","useLayoutEffect","_ref5","elementRef","useEffect","rect","getBoundingClientRect","observer","ResizeObserver","entries","entry","_entry$contentRect","contentRect","observe","disconnect","ref","_objectSpread","absoluteFillObject","pointerEvents","visibility"],"sources":["/Users/pmouli/Documents/GitHub.nosync/boots-strapper/mobile/node_modules/@react-navigation/elements/src/useFrameSize.tsx"],"sourcesContent":["import * as React from 'react';\nimport {\n  Platform,\n  type StyleProp,\n  StyleSheet,\n  type ViewStyle,\n} from 'react-native';\nimport {\n  // eslint-disable-next-line no-restricted-imports\n  useSafeAreaFrame,\n} from 'react-native-safe-area-context';\nimport useLatestCallback from 'use-latest-callback';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector';\n\n// Load with require to avoid error from webpack due to missing export in older versions\n// eslint-disable-next-line import-x/no-commonjs\nconst SafeAreaListener = require('react-native-safe-area-context')\n  .SafeAreaListener as\n  | typeof import('react-native-safe-area-context').SafeAreaListener\n  | undefined;\n\ntype Frame = {\n  width: number;\n  height: number;\n};\n\ntype Listener = () => void;\n\ntype RemoveListener = () => void;\n\ntype FrameContextType = {\n  getCurrent: () => Frame;\n  subscribe: (listener: Listener) => RemoveListener;\n  subscribeThrottled: (listener: Listener) => RemoveListener;\n};\n\nconst FrameContext = React.createContext<FrameContextType | undefined>(\n  undefined\n);\n\nexport function useFrameSize<T>(\n  selector: (frame: Frame) => T,\n  throttle?: boolean\n): T {\n  const context = React.useContext(FrameContext);\n\n  if (context == null) {\n    throw new Error('useFrameSize must be used within a FrameSizeProvider');\n  }\n\n  const value = useSyncExternalStoreWithSelector(\n    throttle ? context.subscribeThrottled : context.subscribe,\n    context.getCurrent,\n    context.getCurrent,\n    selector\n  );\n\n  return value;\n}\n\ntype FrameSizeProviderProps = {\n  initialFrame: Frame;\n  children: React.ReactNode;\n  style?: StyleProp<ViewStyle>;\n};\n\nexport function FrameSizeProvider({\n  initialFrame,\n  children,\n}: FrameSizeProviderProps) {\n  const context = React.useContext(FrameContext);\n\n  if (context != null) {\n    // If the context is already present, don't wrap again\n    return children;\n  }\n\n  return (\n    <FrameSizeProviderInner initialFrame={initialFrame}>\n      {children}\n    </FrameSizeProviderInner>\n  );\n}\n\nfunction FrameSizeProviderInner({\n  initialFrame,\n  children,\n}: FrameSizeProviderProps) {\n  const frameRef = React.useRef<Frame>({\n    width: initialFrame.width,\n    height: initialFrame.height,\n  });\n\n  const listeners = React.useRef<Set<Listener>>(new Set());\n\n  const getCurrent = useLatestCallback(() => frameRef.current);\n\n  const subscribe = useLatestCallback((listener: Listener): RemoveListener => {\n    listeners.current.add(listener);\n\n    return () => {\n      listeners.current.delete(listener);\n    };\n  });\n\n  const subscribeThrottled = useLatestCallback(\n    (listener: Listener): RemoveListener => {\n      const delay = 100; // Throttle delay in milliseconds\n\n      let timer: ReturnType<typeof setTimeout>;\n      let updated = false;\n      let waiting = false;\n\n      const throttledListener = () => {\n        clearTimeout(timer);\n\n        updated = true;\n\n        if (waiting) {\n          // Schedule a timer to call the listener at the end\n          timer = setTimeout(() => {\n            if (updated) {\n              updated = false;\n              listener();\n            }\n          }, delay);\n        } else {\n          waiting = true;\n          setTimeout(function () {\n            waiting = false;\n          }, delay);\n\n          // Call the listener immediately at start\n          updated = false;\n          listener();\n        }\n      };\n\n      const unsubscribe = subscribe(throttledListener);\n\n      return () => {\n        unsubscribe();\n        clearTimeout(timer);\n      };\n    }\n  );\n\n  const context = React.useMemo<FrameContextType>(\n    () => ({\n      getCurrent,\n      subscribe,\n      subscribeThrottled,\n    }),\n    [subscribe, subscribeThrottled, getCurrent]\n  );\n\n  const onChange = useLatestCallback((frame: Frame) => {\n    if (\n      frameRef.current.height === frame.height &&\n      frameRef.current.width === frame.width\n    ) {\n      return;\n    }\n\n    frameRef.current = { width: frame.width, height: frame.height };\n    listeners.current.forEach((listener) => listener());\n  });\n\n  return (\n    <>\n      {Platform.OS === 'web' ? (\n        <FrameSizeListenerWeb onChange={onChange} />\n      ) : typeof SafeAreaListener === 'undefined' ? (\n        <FrameSizeListenerNativeFallback onChange={onChange} />\n      ) : (\n        <SafeAreaListener\n          onChange={({ frame }) => onChange(frame)}\n          style={StyleSheet.absoluteFill}\n        />\n      )}\n      <FrameContext.Provider value={context}>{children}</FrameContext.Provider>\n    </>\n  );\n}\n\n// SafeAreaListener is available only on newer versions\n// Fallback to an effect-based shim for older versions\nfunction FrameSizeListenerNativeFallback({\n  onChange,\n}: {\n  onChange: (frame: Frame) => void;\n}) {\n  const frame = useSafeAreaFrame();\n\n  React.useLayoutEffect(() => {\n    onChange(frame);\n  }, [frame, onChange]);\n\n  return null;\n}\n\n// FIXME: On the Web, the safe area frame value doesn't update on resize\n// So we workaround this by measuring the frame on resize\nfunction FrameSizeListenerWeb({\n  onChange,\n}: {\n  onChange: (frame: Frame) => void;\n}) {\n  const elementRef = React.useRef<HTMLDivElement>(null);\n\n  React.useEffect(() => {\n    if (elementRef.current == null) {\n      return;\n    }\n\n    const rect = elementRef.current.getBoundingClientRect();\n\n    onChange({\n      width: rect.width,\n      height: rect.height,\n    });\n\n    const observer = new ResizeObserver((entries) => {\n      const entry = entries[0];\n\n      if (entry) {\n        const { width, height } = entry.contentRect;\n\n        onChange({ width, height });\n      }\n    });\n\n    observer.observe(elementRef.current);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [onChange]);\n\n  return (\n    <div\n      ref={elementRef}\n      style={{\n        ...StyleSheet.absoluteFillObject,\n        pointerEvents: 'none',\n        visibility: 'hidden',\n      }}\n    />\n  );\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}