{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nimport * as React from 'react';\nimport Dimensions from \"react-native-web/dist/exports/Dimensions\";\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport NativeSafeAreaProvider from \"./NativeSafeAreaProvider\";\nexport var SafeAreaInsetsContext = React.createContext(null);\nexport var SafeAreaFrameContext = React.createContext(null);\nexport function SafeAreaProvider(_ref4) {\n  var children = _ref4.children,\n      initialMetrics = _ref4.initialMetrics,\n      initialSafeAreaInsets = _ref4.initialSafeAreaInsets,\n      style = _ref4.style;\n\n  var _ref, _ref2, _initialMetrics$inset, _ref3, _initialMetrics$frame;\n\n  var parentInsets = useParentSafeAreaInsets();\n  var parentFrame = useParentSafeAreaFrame();\n\n  var _React$useState = React.useState((_ref = (_ref2 = (_initialMetrics$inset = initialMetrics === null || initialMetrics === void 0 ? void 0 : initialMetrics.insets) !== null && _initialMetrics$inset !== void 0 ? _initialMetrics$inset : initialSafeAreaInsets) !== null && _ref2 !== void 0 ? _ref2 : parentInsets) !== null && _ref !== void 0 ? _ref : null),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      insets = _React$useState2[0],\n      setInsets = _React$useState2[1];\n\n  var _React$useState3 = React.useState((_ref3 = (_initialMetrics$frame = initialMetrics === null || initialMetrics === void 0 ? void 0 : initialMetrics.frame) !== null && _initialMetrics$frame !== void 0 ? _initialMetrics$frame : parentFrame) !== null && _ref3 !== void 0 ? _ref3 : {\n    x: 0,\n    y: 0,\n    width: Dimensions.get('window').width,\n    height: Dimensions.get('window').height\n  }),\n      _React$useState4 = _slicedToArray(_React$useState3, 2),\n      frame = _React$useState4[0],\n      setFrame = _React$useState4[1];\n\n  var onInsetsChange = React.useCallback(function (event) {\n    var _event$nativeEvent = event.nativeEvent,\n        nextFrame = _event$nativeEvent.frame,\n        nextInsets = _event$nativeEvent.insets;\n\n    if (nextFrame && (nextFrame.height !== frame.height || nextFrame.width !== frame.width || nextFrame.x !== frame.x || nextFrame.y !== frame.y)) {\n      setFrame(nextFrame);\n    }\n\n    if (!insets || nextInsets.bottom !== insets.bottom || nextInsets.left !== insets.left || nextInsets.right !== insets.right || nextInsets.top !== insets.top) {\n      setInsets(nextInsets);\n    }\n  }, [frame, insets]);\n  return React.createElement(NativeSafeAreaProvider, {\n    style: [styles.fill, style],\n    onInsetsChange: onInsetsChange\n  }, insets != null ? React.createElement(SafeAreaFrameContext.Provider, {\n    value: frame\n  }, React.createElement(SafeAreaInsetsContext.Provider, {\n    value: insets\n  }, children)) : null);\n}\nvar styles = StyleSheet.create({\n  fill: {\n    flex: 1\n  }\n});\n\nfunction useParentSafeAreaInsets() {\n  return React.useContext(SafeAreaInsetsContext);\n}\n\nfunction useParentSafeAreaFrame() {\n  return React.useContext(SafeAreaFrameContext);\n}\n\nexport function useSafeAreaInsets() {\n  var safeArea = React.useContext(SafeAreaInsetsContext);\n\n  if (safeArea == null) {\n    throw new Error('No safe area insets value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.');\n  }\n\n  return safeArea;\n}\nexport function useSafeAreaFrame() {\n  var frame = React.useContext(SafeAreaFrameContext);\n\n  if (frame == null) {\n    throw new Error('No safe area frame value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.');\n  }\n\n  return frame;\n}\nexport function withSafeAreaInsets(WrappedComponent) {\n  return React.forwardRef(function (props, ref) {\n    return React.createElement(SafeAreaConsumer, null, function (insets) {\n      return React.createElement(WrappedComponent, _extends({}, props, {\n        insets: insets,\n        ref: ref\n      }));\n    });\n  });\n}\nexport function useSafeArea() {\n  return useSafeAreaInsets();\n}\nexport var SafeAreaConsumer = SafeAreaInsetsContext.Consumer;\nexport var SafeAreaContext = SafeAreaInsetsContext;","map":{"version":3,"sources":["SafeAreaContext.tsx"],"names":["SafeAreaInsetsContext","React","SafeAreaFrameContext","style","parentInsets","useParentSafeAreaInsets","parentFrame","useParentSafeAreaFrame","initialMetrics","x","y","width","Dimensions","height","onInsetsChange","event","nativeEvent","frame","insets","nextInsets","nextFrame","setFrame","setInsets","styles","fill","flex","safeArea","ref","useSafeAreaInsets","SafeAreaConsumer","SafeAreaContext"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Dimensions, StyleProp, StyleSheet, ViewStyle } from 'react-native';\nimport NativeSafeAreaProvider from './NativeSafeAreaProvider';\nimport { EdgeInsets, InsetChangedEvent, Metrics, Rect } from './SafeArea.types';\n\nexport const SafeAreaInsetsContext = React.createContext<EdgeInsets | null>(\n  null,\n);\n\nexport const SafeAreaFrameContext = React.createContext<Rect | null>(null);\n\nexport interface SafeAreaViewProps {\n  children?: React.ReactNode;\n  initialMetrics?: Metrics | null;\n  /**\n   * @deprecated\n   */\n  initialSafeAreaInsets?: EdgeInsets | null;\n  style?: StyleProp<ViewStyle>;\n}\n\nexport function SafeAreaProvider({\n  children,\n  initialMetrics,\n  initialSafeAreaInsets,\n  style,\n}: SafeAreaViewProps) {\n  const parentInsets = useParentSafeAreaInsets();\n  const parentFrame = useParentSafeAreaFrame();\n  const [insets, setInsets] = React.useState<EdgeInsets | null>(\n    initialMetrics?.insets ?? initialSafeAreaInsets ?? parentInsets ?? null,\n  );\n  const [frame, setFrame] = React.useState<Rect>(\n    initialMetrics?.frame ??\n      parentFrame ?? {\n        // Backwards compat so we render anyway if we don't have frame.\n        x: 0,\n        y: 0,\n        width: Dimensions.get('window').width,\n        height: Dimensions.get('window').height,\n      },\n  );\n  const onInsetsChange = React.useCallback(\n    (event: InsetChangedEvent) => {\n      const {\n        nativeEvent: { frame: nextFrame, insets: nextInsets },\n      } = event;\n\n      if (\n        // Backwards compat with old native code that won't send frame.\n        nextFrame &&\n        (nextFrame.height !== frame.height ||\n          nextFrame.width !== frame.width ||\n          nextFrame.x !== frame.x ||\n          nextFrame.y !== frame.y)\n      ) {\n        setFrame(nextFrame);\n      }\n\n      if (\n        !insets ||\n        nextInsets.bottom !== insets.bottom ||\n        nextInsets.left !== insets.left ||\n        nextInsets.right !== insets.right ||\n        nextInsets.top !== insets.top\n      ) {\n        setInsets(nextInsets);\n      }\n    },\n    [frame, insets],\n  );\n\n  return (\n    <NativeSafeAreaProvider\n      style={[styles.fill, style]}\n      onInsetsChange={onInsetsChange}\n    >\n      {insets != null ? (\n        <SafeAreaFrameContext.Provider value={frame}>\n          <SafeAreaInsetsContext.Provider value={insets}>\n            {children}\n          </SafeAreaInsetsContext.Provider>\n        </SafeAreaFrameContext.Provider>\n      ) : null}\n    </NativeSafeAreaProvider>\n  );\n}\n\nconst styles = StyleSheet.create({\n  fill: { flex: 1 },\n});\n\nfunction useParentSafeAreaInsets(): EdgeInsets | null {\n  return React.useContext(SafeAreaInsetsContext);\n}\n\nfunction useParentSafeAreaFrame(): Rect | null {\n  return React.useContext(SafeAreaFrameContext);\n}\n\nexport function useSafeAreaInsets(): EdgeInsets {\n  const safeArea = React.useContext(SafeAreaInsetsContext);\n  if (safeArea == null) {\n    throw new Error(\n      'No safe area insets value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.',\n    );\n  }\n  return safeArea;\n}\n\nexport function useSafeAreaFrame(): Rect {\n  const frame = React.useContext(SafeAreaFrameContext);\n  if (frame == null) {\n    throw new Error(\n      'No safe area frame value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.',\n    );\n  }\n  return frame;\n}\n\nexport function withSafeAreaInsets<T>(\n  WrappedComponent: React.ComponentType<T>,\n) {\n  return React.forwardRef((props: T, ref: React.Ref<T>) => (\n    <SafeAreaConsumer>\n      {(insets) => <WrappedComponent {...props} insets={insets} ref={ref} />}\n    </SafeAreaConsumer>\n  ));\n}\n\n/**\n * @deprecated\n */\nexport function useSafeArea(): EdgeInsets {\n  return useSafeAreaInsets();\n}\n\n/**\n * @deprecated\n */\nexport const SafeAreaConsumer = SafeAreaInsetsContext.Consumer;\n\n/**\n * @deprecated\n */\nexport const SafeAreaContext = SafeAreaInsetsContext;\n"]},"metadata":{},"sourceType":"module"}