UNPKG

react-native-unit-components

Version:

Unit React Native components

53 lines (51 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useSafeAreaDimensions = void 0; var _reactNative = require("react-native"); var _reactNativeSafeAreaContext = require("react-native-safe-area-context"); const isAndroid = _reactNative.Platform.OS === 'android'; const isAndroid10To14 = isAndroid && _reactNative.Platform.Version >= 29 && _reactNative.Platform.Version < 35; const isAndroid15AndAbove = isAndroid && _reactNative.Platform.Version >= 35; const insets = _reactNativeSafeAreaContext.initialWindowMetrics?.insets ?? { top: 0, bottom: 0, left: 0, right: 0 }; const windowHeight = _reactNative.Dimensions.get('window').height; const screenHeight = _reactNative.Dimensions.get('screen').height; // Detect edge-to-edge by comparing window to screen height // Edge-to-edge ON: windowHeight ≈ screenHeight | OFF: windowHeight < screenHeight const heightDifference = Math.abs(screenHeight - windowHeight); const isEdgeToEdgeActive = isAndroid15AndAbove && heightDifference < 10; const effectiveBottomInset = isEdgeToEdgeActive ? insets.bottom : 0; const calculateFullScreenHeight = () => { if (isAndroid15AndAbove) { return isEdgeToEdgeActive ? screenHeight : windowHeight; } else if (isAndroid10To14) { return windowHeight + insets.top; } return windowHeight; }; const fullScreenHeight = calculateFullScreenHeight(); const calculateContentHeight = () => { if (isAndroid15AndAbove && !isEdgeToEdgeActive) { return windowHeight; } return fullScreenHeight - insets.top; }; const contentHeight = calculateContentHeight(); const useSafeAreaDimensions = () => { return { insets, fullScreenHeight, contentHeight, isAndroid10AndAbove: isAndroid && _reactNative.Platform.Version >= 29, isEdgeToEdgeActive, effectiveBottomInset }; }; exports.useSafeAreaDimensions = useSafeAreaDimensions; //# sourceMappingURL=useSafeAreaDimensions.js.map