react-native-unit-components
Version:
Unit React Native components
53 lines (51 loc) • 1.94 kB
JavaScript
;
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