@amazon-devices/react-native-safe-area-context 2.0.1758683737
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +315 -0
- package/SystemBundles/e3c0cdeab56b8b622d4f0fd5a80812eafe199fa2287d0e3a09c5e573a1035350.bundle +11031 -0
- package/SystemBundles/e3c0cdeab56b8b622d4f0fd5a80812eafe199fa2287d0e3a09c5e573a1035350.map +1 -0
- package/SystemModules/amzn__react-native-safe-area-context-2.modules.txt +55 -0
- package/SystemModules/amzn__react-native-safe-area-context-2.private.modules.txt +91 -0
- package/SystemModules/keplerscript-system-bundle-config.json +7 -0
- package/THIRD_PARTY_NOTICES.txt +24 -0
- package/android/build.gradle +46 -0
- package/android/src/main/AndroidManifest.xml +6 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/EdgeInsets.java +22 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.java +33 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/Rect.java +22 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextPackage.java +31 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProvider.java +66 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProviderManager.java +94 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.java +82 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.java +159 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewEdges.java +8 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewLocalData.java +27 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.java +72 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewMode.java +6 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewShadowNode.java +201 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SerializationUtils.java +52 -0
- package/ios/SafeAreaView/RCTView+SafeAreaCompat.h +16 -0
- package/ios/SafeAreaView/RCTView+SafeAreaCompat.m +57 -0
- package/ios/SafeAreaView/RNCSafeAreaProvider.h +13 -0
- package/ios/SafeAreaView/RNCSafeAreaProvider.m +65 -0
- package/ios/SafeAreaView/RNCSafeAreaProviderManager.h +9 -0
- package/ios/SafeAreaView/RNCSafeAreaProviderManager.m +61 -0
- package/ios/SafeAreaView/RNCSafeAreaShadowView.h +9 -0
- package/ios/SafeAreaView/RNCSafeAreaShadowView.m +180 -0
- package/ios/SafeAreaView/RNCSafeAreaView.h +21 -0
- package/ios/SafeAreaView/RNCSafeAreaView.m +118 -0
- package/ios/SafeAreaView/RNCSafeAreaViewEdges.h +9 -0
- package/ios/SafeAreaView/RNCSafeAreaViewEdges.m +13 -0
- package/ios/SafeAreaView/RNCSafeAreaViewLocalData.h +18 -0
- package/ios/SafeAreaView/RNCSafeAreaViewLocalData.m +16 -0
- package/ios/SafeAreaView/RNCSafeAreaViewManager.h +9 -0
- package/ios/SafeAreaView/RNCSafeAreaViewManager.m +25 -0
- package/ios/SafeAreaView/RNCSafeAreaViewMode.h +7 -0
- package/ios/SafeAreaView/RNCSafeAreaViewMode.m +11 -0
- package/ios/SafeAreaView.xcodeproj/project.pbxproj +338 -0
- package/kepler-compatibility.json +8 -0
- package/kepler-transformed-package-info.json +3 -0
- package/lib/commonjs/CompatNativeSafeAreaProvider.js +44 -0
- package/lib/commonjs/CompatNativeSafeAreaProvider.js.map +1 -0
- package/lib/commonjs/InitialWindow.js +13 -0
- package/lib/commonjs/InitialWindow.js.map +1 -0
- package/lib/commonjs/InitialWindow.kepler.js +15 -0
- package/lib/commonjs/InitialWindow.kepler.js.map +1 -0
- package/lib/commonjs/InitialWindow.native.js +15 -0
- package/lib/commonjs/InitialWindow.native.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.js +132 -0
- package/lib/commonjs/NativeSafeAreaProvider.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.kepler.js +9 -0
- package/lib/commonjs/NativeSafeAreaProvider.kepler.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.macos.js +9 -0
- package/lib/commonjs/NativeSafeAreaProvider.macos.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.native.js +9 -0
- package/lib/commonjs/NativeSafeAreaProvider.native.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.windows.js +9 -0
- package/lib/commonjs/NativeSafeAreaProvider.windows.js.map +1 -0
- package/lib/commonjs/SafeArea.types.js +6 -0
- package/lib/commonjs/SafeArea.types.js.map +1 -0
- package/lib/commonjs/SafeAreaContext.js +113 -0
- package/lib/commonjs/SafeAreaContext.js.map +1 -0
- package/lib/commonjs/SafeAreaView.js +82 -0
- package/lib/commonjs/SafeAreaView.js.map +1 -0
- package/lib/commonjs/SafeAreaView.kepler.js +9 -0
- package/lib/commonjs/SafeAreaView.kepler.js.map +1 -0
- package/lib/commonjs/SafeAreaView.macos.js +9 -0
- package/lib/commonjs/SafeAreaView.macos.js.map +1 -0
- package/lib/commonjs/SafeAreaView.native.js +9 -0
- package/lib/commonjs/SafeAreaView.native.js.map +1 -0
- package/lib/commonjs/SafeAreaView.windows.js +9 -0
- package/lib/commonjs/SafeAreaView.windows.js.map +1 -0
- package/lib/commonjs/index.js +50 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/useWindowDimensions.js +32 -0
- package/lib/commonjs/useWindowDimensions.js.map +1 -0
- package/lib/module/CompatNativeSafeAreaProvider.js +35 -0
- package/lib/module/CompatNativeSafeAreaProvider.js.map +1 -0
- package/lib/module/InitialWindow.js +7 -0
- package/lib/module/InitialWindow.js.map +1 -0
- package/lib/module/InitialWindow.kepler.js +9 -0
- package/lib/module/InitialWindow.kepler.js.map +1 -0
- package/lib/module/InitialWindow.native.js +9 -0
- package/lib/module/InitialWindow.native.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.js +124 -0
- package/lib/module/NativeSafeAreaProvider.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.kepler.js +3 -0
- package/lib/module/NativeSafeAreaProvider.kepler.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.macos.js +3 -0
- package/lib/module/NativeSafeAreaProvider.macos.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.native.js +3 -0
- package/lib/module/NativeSafeAreaProvider.native.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.windows.js +3 -0
- package/lib/module/NativeSafeAreaProvider.windows.js.map +1 -0
- package/lib/module/SafeArea.types.js +2 -0
- package/lib/module/SafeArea.types.js.map +1 -0
- package/lib/module/SafeAreaContext.js +99 -0
- package/lib/module/SafeAreaContext.js.map +1 -0
- package/lib/module/SafeAreaView.js +74 -0
- package/lib/module/SafeAreaView.js.map +1 -0
- package/lib/module/SafeAreaView.kepler.js +3 -0
- package/lib/module/SafeAreaView.kepler.js.map +1 -0
- package/lib/module/SafeAreaView.macos.js +3 -0
- package/lib/module/SafeAreaView.macos.js.map +1 -0
- package/lib/module/SafeAreaView.native.js +3 -0
- package/lib/module/SafeAreaView.native.js.map +1 -0
- package/lib/module/SafeAreaView.windows.js +3 -0
- package/lib/module/SafeAreaView.windows.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/useWindowDimensions.js +26 -0
- package/lib/module/useWindowDimensions.js.map +1 -0
- package/lib/typescript/src/CompatNativeSafeAreaProvider.d.ts +2 -0
- package/lib/typescript/src/InitialWindow.d.ts +6 -0
- package/lib/typescript/src/InitialWindow.kepler.d.ts +6 -0
- package/lib/typescript/src/InitialWindow.native.d.ts +6 -0
- package/lib/typescript/src/NativeSafeAreaProvider.d.ts +2 -0
- package/lib/typescript/src/NativeSafeAreaProvider.kepler.d.ts +2 -0
- package/lib/typescript/src/NativeSafeAreaProvider.macos.d.ts +2 -0
- package/lib/typescript/src/NativeSafeAreaProvider.native.d.ts +3 -0
- package/lib/typescript/src/NativeSafeAreaProvider.windows.d.ts +2 -0
- package/lib/typescript/src/SafeArea.types.d.ts +31 -0
- package/lib/typescript/src/SafeAreaContext.d.ts +30 -0
- package/lib/typescript/src/SafeAreaView.d.ts +2 -0
- package/lib/typescript/src/SafeAreaView.kepler.d.ts +2 -0
- package/lib/typescript/src/SafeAreaView.macos.d.ts +2 -0
- package/lib/typescript/src/SafeAreaView.native.d.ts +2 -0
- package/lib/typescript/src/SafeAreaView.windows.d.ts +2 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/useWindowDimensions.d.ts +8 -0
- package/package.json +1 -0
- package/react-native-safe-area-context.podspec +19 -0
- package/react-native.config.js +8 -0
- package/src/CompatNativeSafeAreaProvider.tsx +29 -0
- package/src/InitialWindow.kepler.ts +10 -0
- package/src/InitialWindow.native.ts +16 -0
- package/src/InitialWindow.ts +8 -0
- package/src/NativeSafeAreaProvider.kepler.tsx +3 -0
- package/src/NativeSafeAreaProvider.macos.tsx +3 -0
- package/src/NativeSafeAreaProvider.native.tsx +6 -0
- package/src/NativeSafeAreaProvider.tsx +129 -0
- package/src/NativeSafeAreaProvider.windows.tsx +3 -0
- package/src/SafeArea.types.ts +43 -0
- package/src/SafeAreaContext.tsx +148 -0
- package/src/SafeAreaView.kepler.tsx +3 -0
- package/src/SafeAreaView.macos.tsx +3 -0
- package/src/SafeAreaView.native.tsx +6 -0
- package/src/SafeAreaView.tsx +85 -0
- package/src/SafeAreaView.windows.tsx +3 -0
- package/src/index.tsx +4 -0
- package/src/useWindowDimensions.tsx +35 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
/**
|
|
4
|
+
* TODO:
|
|
5
|
+
* Currently insets and frame are based on the window and are not
|
|
6
|
+
* relative to the provider view. This is inconsistent with iOS and Android.
|
|
7
|
+
* However in most cases if the provider view covers the screen this is not
|
|
8
|
+
* an issue.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const CSSTransitions = {
|
|
12
|
+
WebkitTransition: 'webkitTransitionEnd',
|
|
13
|
+
Transition: 'transitionEnd',
|
|
14
|
+
MozTransition: 'transitionend',
|
|
15
|
+
MSTransition: 'msTransitionEnd',
|
|
16
|
+
OTransition: 'oTransitionEnd'
|
|
17
|
+
};
|
|
18
|
+
export default function NativeSafeAreaView({
|
|
19
|
+
children,
|
|
20
|
+
style,
|
|
21
|
+
onInsetsChange
|
|
22
|
+
}) {
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
// Skip for SSR.
|
|
25
|
+
if (typeof document === 'undefined') {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const element = createContextElement();
|
|
29
|
+
document.body.appendChild(element);
|
|
30
|
+
const onEnd = () => {
|
|
31
|
+
const {
|
|
32
|
+
paddingTop,
|
|
33
|
+
paddingBottom,
|
|
34
|
+
paddingLeft,
|
|
35
|
+
paddingRight
|
|
36
|
+
} = window.getComputedStyle(element);
|
|
37
|
+
const insets = {
|
|
38
|
+
top: paddingTop ? parseInt(paddingTop, 10) : 0,
|
|
39
|
+
bottom: paddingBottom ? parseInt(paddingBottom, 10) : 0,
|
|
40
|
+
left: paddingLeft ? parseInt(paddingLeft, 10) : 0,
|
|
41
|
+
right: paddingRight ? parseInt(paddingRight, 10) : 0
|
|
42
|
+
};
|
|
43
|
+
const frame = {
|
|
44
|
+
x: 0,
|
|
45
|
+
y: 0,
|
|
46
|
+
width: document.documentElement.offsetWidth,
|
|
47
|
+
height: document.documentElement.offsetHeight
|
|
48
|
+
};
|
|
49
|
+
// @ts-ignore: missing properties
|
|
50
|
+
onInsetsChange({
|
|
51
|
+
nativeEvent: {
|
|
52
|
+
insets,
|
|
53
|
+
frame
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
element.addEventListener(getSupportedTransitionEvent(), onEnd);
|
|
58
|
+
onEnd();
|
|
59
|
+
return () => {
|
|
60
|
+
document.body.removeChild(element);
|
|
61
|
+
element.removeEventListener(getSupportedTransitionEvent(), onEnd);
|
|
62
|
+
};
|
|
63
|
+
}, [onInsetsChange]);
|
|
64
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
65
|
+
style: style
|
|
66
|
+
}, children);
|
|
67
|
+
}
|
|
68
|
+
let _supportedTransitionEvent = null;
|
|
69
|
+
function getSupportedTransitionEvent() {
|
|
70
|
+
if (_supportedTransitionEvent !== null) {
|
|
71
|
+
return _supportedTransitionEvent;
|
|
72
|
+
}
|
|
73
|
+
const element = document.createElement('invalidtype');
|
|
74
|
+
_supportedTransitionEvent = CSSTransitions.Transition;
|
|
75
|
+
for (const key in CSSTransitions) {
|
|
76
|
+
if (element.style[key] !== undefined) {
|
|
77
|
+
_supportedTransitionEvent = CSSTransitions[key];
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return _supportedTransitionEvent;
|
|
82
|
+
}
|
|
83
|
+
let _supportedEnv = null;
|
|
84
|
+
function getSupportedEnv() {
|
|
85
|
+
if (_supportedEnv !== null) {
|
|
86
|
+
return _supportedEnv;
|
|
87
|
+
}
|
|
88
|
+
const {
|
|
89
|
+
CSS
|
|
90
|
+
} = window;
|
|
91
|
+
if (CSS && CSS.supports && CSS.supports('top: constant(safe-area-inset-top)')) {
|
|
92
|
+
_supportedEnv = 'constant';
|
|
93
|
+
} else {
|
|
94
|
+
_supportedEnv = 'env';
|
|
95
|
+
}
|
|
96
|
+
return _supportedEnv;
|
|
97
|
+
}
|
|
98
|
+
function getInset(side) {
|
|
99
|
+
return `${getSupportedEnv()}(safe-area-inset-${side})`;
|
|
100
|
+
}
|
|
101
|
+
function createContextElement() {
|
|
102
|
+
const element = document.createElement('div');
|
|
103
|
+
const {
|
|
104
|
+
style
|
|
105
|
+
} = element;
|
|
106
|
+
style.position = 'fixed';
|
|
107
|
+
style.left = '0';
|
|
108
|
+
style.top = '0';
|
|
109
|
+
style.width = '0';
|
|
110
|
+
style.height = '0';
|
|
111
|
+
style.zIndex = '-1';
|
|
112
|
+
style.overflow = 'hidden';
|
|
113
|
+
style.visibility = 'hidden';
|
|
114
|
+
// Bacon: Anything faster than this and the callback will be invoked too early with the wrong insets
|
|
115
|
+
style.transitionDuration = '0.05s';
|
|
116
|
+
style.transitionProperty = 'padding';
|
|
117
|
+
style.transitionDelay = '0s';
|
|
118
|
+
style.paddingTop = getInset('top');
|
|
119
|
+
style.paddingBottom = getInset('bottom');
|
|
120
|
+
style.paddingLeft = getInset('left');
|
|
121
|
+
style.paddingRight = getInset('right');
|
|
122
|
+
return element;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=NativeSafeAreaProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","CSSTransitions","WebkitTransition","Transition","MozTransition","MSTransition","OTransition","NativeSafeAreaView","children","style","onInsetsChange","useEffect","document","element","createContextElement","body","appendChild","onEnd","paddingTop","paddingBottom","paddingLeft","paddingRight","window","getComputedStyle","insets","top","parseInt","bottom","left","right","frame","x","y","width","documentElement","offsetWidth","height","offsetHeight","nativeEvent","addEventListener","getSupportedTransitionEvent","removeChild","removeEventListener","createElement","_supportedTransitionEvent","key","undefined","_supportedEnv","getSupportedEnv","CSS","supports","getInset","side","position","zIndex","overflow","visibility","transitionDuration","transitionProperty","transitionDelay"],"sources":["NativeSafeAreaProvider.tsx"],"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}"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CompatNativeSafeAreaProvider"],"sources":["NativeSafeAreaProvider.kepler.tsx"],"sourcesContent":["import { CompatNativeSafeAreaProvider } from './CompatNativeSafeAreaProvider';\n\nexport default CompatNativeSafeAreaProvider;"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,gCAAgC;AAE7E,eAAeA,4BAA4B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CompatNativeSafeAreaProvider"],"sources":["NativeSafeAreaProvider.macos.tsx"],"sourcesContent":["import { CompatNativeSafeAreaProvider } from './CompatNativeSafeAreaProvider';\n\nexport default CompatNativeSafeAreaProvider;\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,gCAAgC;AAE7E,eAAeA,4BAA4B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requireNativeComponent"],"sources":["NativeSafeAreaProvider.native.tsx"],"sourcesContent":["import { requireNativeComponent } from 'react-native';\nimport { NativeSafeAreaProviderProps } from './SafeArea.types';\n\nexport default requireNativeComponent<NativeSafeAreaProviderProps>(\n 'RNCSafeAreaProvider',\n);"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,cAAc;AAGrD,eAAeA,sBAAsB,CACjC,qBACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["CompatNativeSafeAreaProvider"],"sources":["NativeSafeAreaProvider.windows.tsx"],"sourcesContent":["import { CompatNativeSafeAreaProvider } from './CompatNativeSafeAreaProvider';\n\nexport default CompatNativeSafeAreaProvider;\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,gCAAgC;AAE7E,eAAeA,4BAA4B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["SafeArea.types.ts"],"sourcesContent":["import {\n NativeSyntheticEvent,\n StyleProp,\n ViewProps,\n ViewStyle,\n} from 'react-native';\n\nexport type Edge = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface EdgeInsets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface Metrics {\n insets: EdgeInsets;\n frame: Rect;\n}\n\nexport type InsetChangedEvent = NativeSyntheticEvent<Metrics>;\n\nexport type InsetChangeNativeCallback = (event: InsetChangedEvent) => void;\n\nexport interface NativeSafeAreaProviderProps {\n children?: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n onInsetsChange: InsetChangeNativeCallback;\n}\n\nexport type NativeSafeAreaViewProps = ViewProps & {\n children?: React.ReactNode;\n mode?: 'padding' | 'margin';\n edges?: ReadonlyArray<Edge>;\n};\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Dimensions, StyleSheet } from 'react-native';
|
|
4
|
+
import NativeSafeAreaProvider from './NativeSafeAreaProvider';
|
|
5
|
+
export const SafeAreaInsetsContext = /*#__PURE__*/React.createContext(null);
|
|
6
|
+
SafeAreaInsetsContext.displayName = 'SafeAreaInsetsContext';
|
|
7
|
+
export const SafeAreaFrameContext = /*#__PURE__*/React.createContext(null);
|
|
8
|
+
SafeAreaFrameContext.displayName = 'SafeAreaFrameContext';
|
|
9
|
+
export function SafeAreaProvider({
|
|
10
|
+
children,
|
|
11
|
+
initialMetrics,
|
|
12
|
+
initialSafeAreaInsets,
|
|
13
|
+
style
|
|
14
|
+
}) {
|
|
15
|
+
var _ref, _ref2, _initialMetrics$inset, _ref3, _initialMetrics$frame;
|
|
16
|
+
const parentInsets = useParentSafeAreaInsets();
|
|
17
|
+
const parentFrame = useParentSafeAreaFrame();
|
|
18
|
+
const [insets, setInsets] = 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);
|
|
19
|
+
const [frame, setFrame] = 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 : {
|
|
20
|
+
// Backwards compat so we render anyway if we don't have frame.
|
|
21
|
+
x: 0,
|
|
22
|
+
y: 0,
|
|
23
|
+
width: Dimensions.get('window').width,
|
|
24
|
+
height: Dimensions.get('window').height
|
|
25
|
+
});
|
|
26
|
+
const onInsetsChange = React.useCallback(event => {
|
|
27
|
+
const {
|
|
28
|
+
nativeEvent: {
|
|
29
|
+
frame: nextFrame,
|
|
30
|
+
insets: nextInsets
|
|
31
|
+
}
|
|
32
|
+
} = event;
|
|
33
|
+
if (
|
|
34
|
+
// Backwards compat with old native code that won't send frame.
|
|
35
|
+
nextFrame && (nextFrame.height !== frame.height || nextFrame.width !== frame.width || nextFrame.x !== frame.x || nextFrame.y !== frame.y)) {
|
|
36
|
+
setFrame(nextFrame);
|
|
37
|
+
}
|
|
38
|
+
if (!insets || nextInsets.bottom !== insets.bottom || nextInsets.left !== insets.left || nextInsets.right !== insets.right || nextInsets.top !== insets.top) {
|
|
39
|
+
setInsets(nextInsets);
|
|
40
|
+
}
|
|
41
|
+
}, [frame, insets]);
|
|
42
|
+
return /*#__PURE__*/React.createElement(NativeSafeAreaProvider, {
|
|
43
|
+
style: [styles.fill, style],
|
|
44
|
+
onInsetsChange: onInsetsChange
|
|
45
|
+
}, insets != null ? /*#__PURE__*/React.createElement(SafeAreaFrameContext.Provider, {
|
|
46
|
+
value: frame
|
|
47
|
+
}, /*#__PURE__*/React.createElement(SafeAreaInsetsContext.Provider, {
|
|
48
|
+
value: insets
|
|
49
|
+
}, children)) : null);
|
|
50
|
+
}
|
|
51
|
+
const styles = StyleSheet.create({
|
|
52
|
+
fill: {
|
|
53
|
+
flex: 1
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
function useParentSafeAreaInsets() {
|
|
57
|
+
return React.useContext(SafeAreaInsetsContext);
|
|
58
|
+
}
|
|
59
|
+
function useParentSafeAreaFrame() {
|
|
60
|
+
return React.useContext(SafeAreaFrameContext);
|
|
61
|
+
}
|
|
62
|
+
export function useSafeAreaInsets() {
|
|
63
|
+
const safeArea = React.useContext(SafeAreaInsetsContext);
|
|
64
|
+
if (safeArea == null) {
|
|
65
|
+
throw new Error('No safe area insets value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.');
|
|
66
|
+
}
|
|
67
|
+
return safeArea;
|
|
68
|
+
}
|
|
69
|
+
export function useSafeAreaFrame() {
|
|
70
|
+
const frame = React.useContext(SafeAreaFrameContext);
|
|
71
|
+
if (frame == null) {
|
|
72
|
+
throw new Error('No safe area frame value available. Make sure you are rendering `<SafeAreaProvider>` at the top of your app.');
|
|
73
|
+
}
|
|
74
|
+
return frame;
|
|
75
|
+
}
|
|
76
|
+
export function withSafeAreaInsets(WrappedComponent) {
|
|
77
|
+
return /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SafeAreaConsumer, null, insets => /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
|
|
78
|
+
insets: insets,
|
|
79
|
+
ref: ref
|
|
80
|
+
}))));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @deprecated
|
|
85
|
+
*/
|
|
86
|
+
export function useSafeArea() {
|
|
87
|
+
return useSafeAreaInsets();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated
|
|
92
|
+
*/
|
|
93
|
+
export const SafeAreaConsumer = SafeAreaInsetsContext.Consumer;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @deprecated
|
|
97
|
+
*/
|
|
98
|
+
export const SafeAreaContext = SafeAreaInsetsContext;
|
|
99
|
+
//# sourceMappingURL=SafeAreaContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Dimensions","StyleSheet","NativeSafeAreaProvider","SafeAreaInsetsContext","createContext","displayName","SafeAreaFrameContext","SafeAreaProvider","children","initialMetrics","initialSafeAreaInsets","style","_ref","_ref2","_initialMetrics$inset","_ref3","_initialMetrics$frame","parentInsets","useParentSafeAreaInsets","parentFrame","useParentSafeAreaFrame","insets","setInsets","useState","frame","setFrame","x","y","width","get","height","onInsetsChange","useCallback","event","nativeEvent","nextFrame","nextInsets","bottom","left","right","top","createElement","styles","fill","Provider","value","create","flex","useContext","useSafeAreaInsets","safeArea","Error","useSafeAreaFrame","withSafeAreaInsets","WrappedComponent","forwardRef","props","ref","SafeAreaConsumer","_extends","useSafeArea","Consumer","SafeAreaContext"],"sources":["SafeAreaContext.tsx"],"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);\nSafeAreaInsetsContext.displayName = 'SafeAreaInsetsContext';\n\nexport const SafeAreaFrameContext = React.createContext<Rect | null>(null);\nSafeAreaFrameContext.displayName = 'SafeAreaFrameContext';\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { View, StyleSheet } from 'react-native';
|
|
4
|
+
import { useSafeAreaInsets } from './SafeAreaContext';
|
|
5
|
+
// prettier-ignore
|
|
6
|
+
const TOP = 0b1000,
|
|
7
|
+
RIGHT = 0b0100,
|
|
8
|
+
BOTTOM = 0b0010,
|
|
9
|
+
LEFT = 0b0001,
|
|
10
|
+
ALL = 0b1111;
|
|
11
|
+
|
|
12
|
+
/* eslint-disable no-bitwise */
|
|
13
|
+
|
|
14
|
+
const edgeBitmaskMap = {
|
|
15
|
+
top: TOP,
|
|
16
|
+
right: RIGHT,
|
|
17
|
+
bottom: BOTTOM,
|
|
18
|
+
left: LEFT
|
|
19
|
+
};
|
|
20
|
+
export function SafeAreaView({
|
|
21
|
+
style = {},
|
|
22
|
+
mode,
|
|
23
|
+
edges,
|
|
24
|
+
...rest
|
|
25
|
+
}) {
|
|
26
|
+
const insets = useSafeAreaInsets();
|
|
27
|
+
const edgeBitmask = edges != null ? edges.reduce((accum, edge) => accum | edgeBitmaskMap[edge], 0) : ALL;
|
|
28
|
+
const appliedStyle = React.useMemo(() => {
|
|
29
|
+
const insetTop = edgeBitmask & TOP ? insets.top : 0;
|
|
30
|
+
const insetRight = edgeBitmask & RIGHT ? insets.right : 0;
|
|
31
|
+
const insetBottom = edgeBitmask & BOTTOM ? insets.bottom : 0;
|
|
32
|
+
const insetLeft = edgeBitmask & LEFT ? insets.left : 0;
|
|
33
|
+
const flatStyle = StyleSheet.flatten(style);
|
|
34
|
+
if (mode === 'margin') {
|
|
35
|
+
const {
|
|
36
|
+
margin = 0,
|
|
37
|
+
marginVertical = margin,
|
|
38
|
+
marginHorizontal = margin,
|
|
39
|
+
marginTop = marginVertical,
|
|
40
|
+
marginRight = marginHorizontal,
|
|
41
|
+
marginBottom = marginVertical,
|
|
42
|
+
marginLeft = marginHorizontal
|
|
43
|
+
} = flatStyle;
|
|
44
|
+
const marginStyle = {
|
|
45
|
+
marginTop: marginTop + insetTop,
|
|
46
|
+
marginRight: marginRight + insetRight,
|
|
47
|
+
marginBottom: marginBottom + insetBottom,
|
|
48
|
+
marginLeft: marginLeft + insetLeft
|
|
49
|
+
};
|
|
50
|
+
return [style, marginStyle];
|
|
51
|
+
} else {
|
|
52
|
+
const {
|
|
53
|
+
padding = 0,
|
|
54
|
+
paddingVertical = padding,
|
|
55
|
+
paddingHorizontal = padding,
|
|
56
|
+
paddingTop = paddingVertical,
|
|
57
|
+
paddingRight = paddingHorizontal,
|
|
58
|
+
paddingBottom = paddingVertical,
|
|
59
|
+
paddingLeft = paddingHorizontal
|
|
60
|
+
} = flatStyle;
|
|
61
|
+
const paddingStyle = {
|
|
62
|
+
paddingTop: paddingTop + insetTop,
|
|
63
|
+
paddingRight: paddingRight + insetRight,
|
|
64
|
+
paddingBottom: paddingBottom + insetBottom,
|
|
65
|
+
paddingLeft: paddingLeft + insetLeft
|
|
66
|
+
};
|
|
67
|
+
return [style, paddingStyle];
|
|
68
|
+
}
|
|
69
|
+
}, [style, insets, mode, edgeBitmask]);
|
|
70
|
+
return /*#__PURE__*/React.createElement(View, _extends({
|
|
71
|
+
style: appliedStyle
|
|
72
|
+
}, rest));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=SafeAreaView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","StyleSheet","useSafeAreaInsets","TOP","RIGHT","BOTTOM","LEFT","ALL","edgeBitmaskMap","top","right","bottom","left","SafeAreaView","style","mode","edges","rest","insets","edgeBitmask","reduce","accum","edge","appliedStyle","useMemo","insetTop","insetRight","insetBottom","insetLeft","flatStyle","flatten","margin","marginVertical","marginHorizontal","marginTop","marginRight","marginBottom","marginLeft","marginStyle","padding","paddingVertical","paddingHorizontal","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingStyle","createElement","_extends"],"sources":["SafeAreaView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { View, StyleSheet } from 'react-native';\nimport { useSafeAreaInsets } from './SafeAreaContext';\nimport { Edge, NativeSafeAreaViewProps } from './SafeArea.types';\n\n// prettier-ignore\nconst TOP = 0b1000,\n RIGHT = 0b0100,\n BOTTOM = 0b0010,\n LEFT = 0b0001,\n ALL = 0b1111;\n\n/* eslint-disable no-bitwise */\n\nconst edgeBitmaskMap: Record<Edge, number> = {\n top: TOP,\n right: RIGHT,\n bottom: BOTTOM,\n left: LEFT,\n};\n\nexport function SafeAreaView({\n style = {},\n mode,\n edges,\n ...rest\n }: NativeSafeAreaViewProps) {\n const insets = useSafeAreaInsets();\n\n const edgeBitmask =\n edges != null\n ? edges.reduce((accum, edge) => accum | edgeBitmaskMap[edge], 0)\n : ALL;\n\n const appliedStyle = React.useMemo(() => {\n const insetTop = edgeBitmask & TOP ? insets.top : 0;\n const insetRight = edgeBitmask & RIGHT ? insets.right : 0;\n const insetBottom = edgeBitmask & BOTTOM ? insets.bottom : 0;\n const insetLeft = edgeBitmask & LEFT ? insets.left : 0;\n\n const flatStyle = StyleSheet.flatten(style) as Record<string, number>;\n\n if (mode === 'margin') {\n const {\n margin = 0,\n marginVertical = margin,\n marginHorizontal = margin,\n marginTop = marginVertical,\n marginRight = marginHorizontal,\n marginBottom = marginVertical,\n marginLeft = marginHorizontal,\n } = flatStyle;\n\n const marginStyle = {\n marginTop: marginTop + insetTop,\n marginRight: marginRight + insetRight,\n marginBottom: marginBottom + insetBottom,\n marginLeft: marginLeft + insetLeft,\n };\n\n return [style, marginStyle];\n } else {\n const {\n padding = 0,\n paddingVertical = padding,\n paddingHorizontal = padding,\n paddingTop = paddingVertical,\n paddingRight = paddingHorizontal,\n paddingBottom = paddingVertical,\n paddingLeft = paddingHorizontal,\n } = flatStyle;\n\n const paddingStyle = {\n paddingTop: paddingTop + insetTop,\n paddingRight: paddingRight + insetRight,\n paddingBottom: paddingBottom + insetBottom,\n paddingLeft: paddingLeft + insetLeft,\n };\n\n return [style, paddingStyle];\n }\n }, [style, insets, mode, edgeBitmask]);\n\n return <View style={appliedStyle} {...rest} />;\n}"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","SafeAreaView"],"sources":["SafeAreaView.kepler.tsx"],"sourcesContent":["import { View } from 'react-native';\n\nexport const SafeAreaView = View;"],"mappings":"AAAA,SAASA,IAAI,QAAQ,cAAc;AAEnC,OAAO,MAAMC,YAAY,GAAGD,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","SafeAreaView"],"sources":["SafeAreaView.macos.tsx"],"sourcesContent":["import { View } from 'react-native';\n\nexport const SafeAreaView = View;\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,cAAc;AAEnC,OAAO,MAAMC,YAAY,GAAGD,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requireNativeComponent","SafeAreaView"],"sources":["SafeAreaView.native.tsx"],"sourcesContent":["import { requireNativeComponent } from 'react-native';\nimport { NativeSafeAreaViewProps } from './SafeArea.types';\n\nexport const SafeAreaView = requireNativeComponent<NativeSafeAreaViewProps>(\n 'RNCSafeAreaView',\n);"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,cAAc;AAGrD,OAAO,MAAMC,YAAY,GAAGD,sBAAsB,CAC9C,iBACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","SafeAreaView"],"sources":["SafeAreaView.windows.tsx"],"sourcesContent":["import { View } from 'react-native';\n\nexport const SafeAreaView = View;\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,cAAc;AAEnC,OAAO,MAAMC,YAAY,GAAGD,IAAI","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["index.tsx"],"sourcesContent":["export * from './SafeAreaContext';\nexport * from './SafeAreaView';\nexport * from './InitialWindow';\nexport * from './SafeArea.types';\n"],"mappings":"AAAA,cAAc,mBAAmB;AACjC,cAAc,gBAAgB;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Dimensions } from 'react-native';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
// Copied from https://github.com/facebook/react-native/blob/8d57691a/Libraries/Utilities/useWindowDimensions.js
|
|
4
|
+
// for compatibility with React Native < 0.61.
|
|
5
|
+
export default function useWindowDimensions() {
|
|
6
|
+
const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
function handleChange({
|
|
9
|
+
window
|
|
10
|
+
}) {
|
|
11
|
+
if (dimensions.width !== window.width || dimensions.height !== window.height || dimensions.scale !== window.scale || dimensions.fontScale !== window.fontScale) {
|
|
12
|
+
setDimensions(window);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const subscription = Dimensions.addEventListener('change', handleChange);
|
|
16
|
+
// We might have missed an update between calling `get` in render and
|
|
17
|
+
// `addEventListener` in this handler, so we set it here. If there was
|
|
18
|
+
// no change, React will filter out this update as a no-op.
|
|
19
|
+
handleChange({
|
|
20
|
+
window: Dimensions.get('window')
|
|
21
|
+
});
|
|
22
|
+
return () => subscription.remove();
|
|
23
|
+
}, [dimensions]);
|
|
24
|
+
return dimensions;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=useWindowDimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Dimensions","useEffect","useState","useWindowDimensions","dimensions","setDimensions","get","handleChange","window","width","height","scale","fontScale","subscription","addEventListener","remove"],"sources":["useWindowDimensions.tsx"],"sourcesContent":["import { Dimensions } from 'react-native';\nimport { useEffect, useState } from 'react';\n\ntype DisplayMetrics = {\n width: number;\n height: number;\n scale: number;\n fontScale: number;\n};\n\n// Copied from https://github.com/facebook/react-native/blob/8d57691a/Libraries/Utilities/useWindowDimensions.js\n// for compatibility with React Native < 0.61.\nexport default function useWindowDimensions(): DisplayMetrics {\n const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));\n useEffect(() => {\n function handleChange({ window }: { window: DisplayMetrics }) {\n if (\n dimensions.width !== window.width ||\n dimensions.height !== window.height ||\n dimensions.scale !== window.scale ||\n dimensions.fontScale !== window.fontScale\n ) {\n setDimensions(window);\n }\n }\n const subscription = Dimensions.addEventListener('change', handleChange);\n // We might have missed an update between calling `get` in render and\n // `addEventListener` in this handler, so we set it here. If there was\n // no change, React will filter out this update as a no-op.\n handleChange({ window: Dimensions.get('window') });\n\n return () => subscription.remove();\n }, [dimensions]);\n return dimensions;\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AACzC,SAASC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAS3C;AACA;AACA,eAAe,SAASC,mBAAmBA,CAAA,EAAmB;EAC5D,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGH,QAAQ,CAAC,MAAMF,UAAU,CAACM,GAAG,CAAC,QAAQ,CAAC,CAAC;EAC5EL,SAAS,CAAC,MAAM;IACd,SAASM,YAAYA,CAAC;MAAEC;IAAmC,CAAC,EAAE;MAC5D,IACEJ,UAAU,CAACK,KAAK,KAAKD,MAAM,CAACC,KAAK,IACjCL,UAAU,CAACM,MAAM,KAAKF,MAAM,CAACE,MAAM,IACnCN,UAAU,CAACO,KAAK,KAAKH,MAAM,CAACG,KAAK,IACjCP,UAAU,CAACQ,SAAS,KAAKJ,MAAM,CAACI,SAAS,EACzC;QACAP,aAAa,CAACG,MAAM,CAAC;MACvB;IACF;IACA,MAAMK,YAAY,GAAGb,UAAU,CAACc,gBAAgB,CAAC,QAAQ,EAAEP,YAAY,CAAC;IACxE;IACA;IACA;IACAA,YAAY,CAAC;MAAEC,MAAM,EAAER,UAAU,CAACM,GAAG,CAAC,QAAQ;IAAE,CAAC,CAAC;IAElD,OAAO,MAAMO,YAAY,CAACE,MAAM,CAAC,CAAC;EACpC,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;EAChB,OAAOA,UAAU;AACnB","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { NativeSyntheticEvent, StyleProp, ViewProps, ViewStyle } from 'react-native';
|
|
3
|
+
export type Edge = 'top' | 'right' | 'bottom' | 'left';
|
|
4
|
+
export interface EdgeInsets {
|
|
5
|
+
top: number;
|
|
6
|
+
right: number;
|
|
7
|
+
bottom: number;
|
|
8
|
+
left: number;
|
|
9
|
+
}
|
|
10
|
+
export interface Rect {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Metrics {
|
|
17
|
+
insets: EdgeInsets;
|
|
18
|
+
frame: Rect;
|
|
19
|
+
}
|
|
20
|
+
export type InsetChangedEvent = NativeSyntheticEvent<Metrics>;
|
|
21
|
+
export type InsetChangeNativeCallback = (event: InsetChangedEvent) => void;
|
|
22
|
+
export interface NativeSafeAreaProviderProps {
|
|
23
|
+
children?: React.ReactNode;
|
|
24
|
+
style?: StyleProp<ViewStyle>;
|
|
25
|
+
onInsetsChange: InsetChangeNativeCallback;
|
|
26
|
+
}
|
|
27
|
+
export type NativeSafeAreaViewProps = ViewProps & {
|
|
28
|
+
children?: React.ReactNode;
|
|
29
|
+
mode?: 'padding' | 'margin';
|
|
30
|
+
edges?: ReadonlyArray<Edge>;
|
|
31
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { EdgeInsets, Metrics, Rect } from './SafeArea.types';
|
|
4
|
+
export declare const SafeAreaInsetsContext: React.Context<EdgeInsets | null>;
|
|
5
|
+
export declare const SafeAreaFrameContext: React.Context<Rect | null>;
|
|
6
|
+
export interface SafeAreaViewProps {
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
initialMetrics?: Metrics | null;
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated
|
|
11
|
+
*/
|
|
12
|
+
initialSafeAreaInsets?: EdgeInsets | null;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
}
|
|
15
|
+
export declare function SafeAreaProvider({ children, initialMetrics, initialSafeAreaInsets, style, }: SafeAreaViewProps): JSX.Element;
|
|
16
|
+
export declare function useSafeAreaInsets(): EdgeInsets;
|
|
17
|
+
export declare function useSafeAreaFrame(): Rect;
|
|
18
|
+
export declare function withSafeAreaInsets<T>(WrappedComponent: React.ComponentType<T>): React.ForwardRefExoticComponent<React.PropsWithoutRef<T> & React.RefAttributes<T>>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated
|
|
21
|
+
*/
|
|
22
|
+
export declare function useSafeArea(): EdgeInsets;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated
|
|
25
|
+
*/
|
|
26
|
+
export declare const SafeAreaConsumer: React.Consumer<EdgeInsets | null>;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated
|
|
29
|
+
*/
|
|
30
|
+
export declare const SafeAreaContext: React.Context<EdgeInsets | null>;
|