{"ast":null,"code":"\"use strict\";\n\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\";\nconst SafeAreaListener = require('react-native-safe-area-context').SafeAreaListener;\nconst FrameContext = React.createContext(undefined);\nexport function useFrameSize(selector, throttle) {\n  const context = React.useContext(FrameContext);\n  if (context == null) {\n    throw new Error('useFrameSize must be used within a FrameSizeProvider');\n  }\n  const value = useSyncExternalStoreWithSelector(throttle ? context.subscribeThrottled : context.subscribe, context.getCurrent, context.getCurrent, selector);\n  return value;\n}\nexport function FrameSizeProvider({\n  initialFrame,\n  children\n}) {\n  const 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({\n  initialFrame,\n  children\n}) {\n  const frameRef = React.useRef({\n    width: initialFrame.width,\n    height: initialFrame.height\n  });\n  const listeners = React.useRef(new Set());\n  const getCurrent = useLatestCallback(() => frameRef.current);\n  const subscribe = useLatestCallback(listener => {\n    listeners.current.add(listener);\n    return () => {\n      listeners.current.delete(listener);\n    };\n  });\n  const subscribeThrottled = useLatestCallback(listener => {\n    const delay = 100;\n    let timer;\n    let updated = false;\n    let waiting = false;\n    const throttledListener = () => {\n      clearTimeout(timer);\n      updated = true;\n      if (waiting) {\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        updated = false;\n        listener();\n      }\n    };\n    const unsubscribe = subscribe(throttledListener);\n    return () => {\n      unsubscribe();\n      clearTimeout(timer);\n    };\n  });\n  const context = React.useMemo(() => ({\n    getCurrent,\n    subscribe,\n    subscribeThrottled\n  }), [subscribe, subscribeThrottled, getCurrent]);\n  const onChange = useLatestCallback(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(listener => listener());\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: ({\n        frame\n      }) => onChange(frame),\n      style: StyleSheet.absoluteFill\n    }), _jsx(FrameContext.Provider, {\n      value: context,\n      children: children\n    })]\n  });\n}\nfunction FrameSizeListenerNativeFallback({\n  onChange\n}) {\n  const frame = useSafeAreaFrame();\n  React.useLayoutEffect(() => {\n    onChange(frame);\n  }, [frame, onChange]);\n  return null;\n}\nfunction FrameSizeListenerWeb({\n  onChange\n}) {\n  const elementRef = React.useRef(null);\n  React.useEffect(() => {\n    if (elementRef.current == null) {\n      return;\n    }\n    const rect = elementRef.current.getBoundingClientRect();\n    onChange({\n      width: rect.width,\n      height: rect.height\n    });\n    const observer = new ResizeObserver(entries => {\n      const entry = entries[0];\n      if (entry) {\n        const {\n          width,\n          height\n        } = entry.contentRect;\n        onChange({\n          width,\n          height\n        });\n      }\n    });\n    observer.observe(elementRef.current);\n    return () => {\n      observer.disconnect();\n    };\n  }, [onChange]);\n  return _jsx(\"div\", {\n    ref: elementRef,\n    style: Object.assign({}, 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","initialFrame","children","FrameSizeProviderInner","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","style","absoluteFill","Provider","useLayoutEffect","elementRef","useEffect","rect","getBoundingClientRect","observer","ResizeObserver","entries","entry","contentRect","observe","disconnect","ref","Object","assign","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":{"hasCjsExports":false},"sourceType":"module","externalDependencies":[]}