{"ast":null,"code":"import * as React from 'react';\nimport View from \"react-native-web/dist/exports/View\";\nvar CSSTransitions = {\n  WebkitTransition: 'webkitTransitionEnd',\n  Transition: 'transitionEnd',\n  MozTransition: 'transitionend',\n  MSTransition: 'msTransitionEnd',\n  OTransition: 'oTransitionEnd'\n};\nexport default function NativeSafeAreaView(_ref) {\n  var children = _ref.children,\n      style = _ref.style,\n      onInsetsChange = _ref.onInsetsChange;\n  React.useEffect(function () {\n    if (typeof document === 'undefined') {\n      return;\n    }\n\n    var element = createContextElement();\n    document.body.appendChild(element);\n\n    var onEnd = function onEnd() {\n      var _window$getComputedSt = window.getComputedStyle(element),\n          paddingTop = _window$getComputedSt.paddingTop,\n          paddingBottom = _window$getComputedSt.paddingBottom,\n          paddingLeft = _window$getComputedSt.paddingLeft,\n          paddingRight = _window$getComputedSt.paddingRight;\n\n      var insets = {\n        top: paddingTop ? parseInt(paddingTop, 10) : 0,\n        bottom: paddingBottom ? parseInt(paddingBottom, 10) : 0,\n        left: paddingLeft ? parseInt(paddingLeft, 10) : 0,\n        right: paddingRight ? parseInt(paddingRight, 10) : 0\n      };\n      var frame = {\n        x: 0,\n        y: 0,\n        width: document.documentElement.offsetWidth,\n        height: document.documentElement.offsetHeight\n      };\n      onInsetsChange({\n        nativeEvent: {\n          insets: insets,\n          frame: frame\n        }\n      });\n    };\n\n    element.addEventListener(getSupportedTransitionEvent(), onEnd);\n    onEnd();\n    return function () {\n      document.body.removeChild(element);\n      element.removeEventListener(getSupportedTransitionEvent(), onEnd);\n    };\n  }, [onInsetsChange]);\n  return React.createElement(View, {\n    style: style\n  }, children);\n}\nvar _supportedTransitionEvent = null;\n\nfunction getSupportedTransitionEvent() {\n  if (_supportedTransitionEvent !== null) {\n    return _supportedTransitionEvent;\n  }\n\n  var element = document.createElement('invalidtype');\n  _supportedTransitionEvent = CSSTransitions.Transition;\n\n  for (var key in CSSTransitions) {\n    if (element.style[key] !== undefined) {\n      _supportedTransitionEvent = CSSTransitions[key];\n      break;\n    }\n  }\n\n  return _supportedTransitionEvent;\n}\n\nvar _supportedEnv = null;\n\nfunction getSupportedEnv() {\n  if (_supportedEnv !== null) {\n    return _supportedEnv;\n  }\n\n  var _window = window,\n      CSS = _window.CSS;\n\n  if (CSS && CSS.supports && CSS.supports('top: constant(safe-area-inset-top)')) {\n    _supportedEnv = 'constant';\n  } else {\n    _supportedEnv = 'env';\n  }\n\n  return _supportedEnv;\n}\n\nfunction getInset(side) {\n  return \"\".concat(getSupportedEnv(), \"(safe-area-inset-\").concat(side, \")\");\n}\n\nfunction createContextElement() {\n  var element = document.createElement('div');\n  var style = element.style;\n  style.position = 'fixed';\n  style.left = '0';\n  style.top = '0';\n  style.width = '0';\n  style.height = '0';\n  style.zIndex = '-1';\n  style.overflow = 'hidden';\n  style.visibility = 'hidden';\n  style.transitionDuration = '0.05s';\n  style.transitionProperty = 'padding';\n  style.transitionDelay = '0s';\n  style.paddingTop = getInset('top');\n  style.paddingBottom = getInset('bottom');\n  style.paddingLeft = getInset('left');\n  style.paddingRight = getInset('right');\n  return element;\n}","map":{"version":3,"sources":["NativeSafeAreaProvider.tsx"],"names":["CSSTransitions","WebkitTransition","Transition","MozTransition","MSTransition","OTransition","onInsetsChange","React","element","createContextElement","document","onEnd","paddingRight","window","insets","top","paddingTop","parseInt","bottom","paddingBottom","left","paddingLeft","right","frame","x","y","width","height","offsetHeight","nativeEvent","getSupportedTransitionEvent","style","_supportedTransitionEvent","_supportedEnv","CSS","getSupportedEnv","getInset"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { View } from 'react-native';\nimport { NativeSafeAreaProviderProps } from './SafeArea.types';\n\n/**\n * TODO:\n * Currently insets and frame are based on the window and are not\n * relative to the provider view. This is inconsistent with iOS and Android.\n * However in most cases if the provider view covers the screen this is not\n * an issue.\n */\n\nconst CSSTransitions: Record<string, string> = {\n  WebkitTransition: 'webkitTransitionEnd',\n  Transition: 'transitionEnd',\n  MozTransition: 'transitionend',\n  MSTransition: 'msTransitionEnd',\n  OTransition: 'oTransitionEnd',\n};\n\nexport default function NativeSafeAreaView({\n  children,\n  style,\n  onInsetsChange,\n}: NativeSafeAreaProviderProps) {\n  React.useEffect(() => {\n    // Skip for SSR.\n    if (typeof document === 'undefined') {\n      return;\n    }\n\n    const element = createContextElement();\n    document.body.appendChild(element);\n    const onEnd = () => {\n      const {\n        paddingTop,\n        paddingBottom,\n        paddingLeft,\n        paddingRight,\n      } = window.getComputedStyle(element);\n\n      const insets = {\n        top: paddingTop ? parseInt(paddingTop, 10) : 0,\n        bottom: paddingBottom ? parseInt(paddingBottom, 10) : 0,\n        left: paddingLeft ? parseInt(paddingLeft, 10) : 0,\n        right: paddingRight ? parseInt(paddingRight, 10) : 0,\n      };\n      const frame = {\n        x: 0,\n        y: 0,\n        width: document.documentElement.offsetWidth,\n        height: document.documentElement.offsetHeight,\n      };\n      // @ts-ignore: missing properties\n      onInsetsChange({ nativeEvent: { insets, frame } });\n    };\n    element.addEventListener(getSupportedTransitionEvent(), onEnd);\n    onEnd();\n    return () => {\n      document.body.removeChild(element);\n      element.removeEventListener(getSupportedTransitionEvent(), onEnd);\n    };\n  }, [onInsetsChange]);\n\n  return <View style={style}>{children}</View>;\n}\n\nlet _supportedTransitionEvent: string | null = null;\nfunction getSupportedTransitionEvent(): string {\n  if (_supportedTransitionEvent !== null) {\n    return _supportedTransitionEvent;\n  }\n  const element = document.createElement('invalidtype');\n\n  _supportedTransitionEvent = CSSTransitions.Transition;\n  for (const key in CSSTransitions) {\n    if (element.style[key as keyof CSSStyleDeclaration] !== undefined) {\n      _supportedTransitionEvent = CSSTransitions[key];\n      break;\n    }\n  }\n  return _supportedTransitionEvent;\n}\n\ntype CssEnv = 'constant' | 'env';\n\nlet _supportedEnv: CssEnv | null = null;\nfunction getSupportedEnv(): CssEnv {\n  if (_supportedEnv !== null) {\n    return _supportedEnv;\n  }\n  const { CSS } = window;\n  if (\n    CSS &&\n    CSS.supports &&\n    CSS.supports('top: constant(safe-area-inset-top)')\n  ) {\n    _supportedEnv = 'constant';\n  } else {\n    _supportedEnv = 'env';\n  }\n  return _supportedEnv;\n}\n\nfunction getInset(side: string): string {\n  return `${getSupportedEnv()}(safe-area-inset-${side})`;\n}\n\nfunction createContextElement(): HTMLElement {\n  const element = document.createElement('div');\n  const { style } = element;\n  style.position = 'fixed';\n  style.left = '0';\n  style.top = '0';\n  style.width = '0';\n  style.height = '0';\n  style.zIndex = '-1';\n  style.overflow = 'hidden';\n  style.visibility = 'hidden';\n  // Bacon: Anything faster than this and the callback will be invoked too early with the wrong insets\n  style.transitionDuration = '0.05s';\n  style.transitionProperty = 'padding';\n  style.transitionDelay = '0s';\n  style.paddingTop = getInset('top');\n  style.paddingBottom = getInset('bottom');\n  style.paddingLeft = getInset('left');\n  style.paddingRight = getInset('right');\n  return element;\n}\n"]},"metadata":{},"sourceType":"module"}