@react-navigation/elements 1.3.4 → 1.3.6
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/lib/commonjs/Header/HeaderBackButton.js +3 -3
- package/lib/commonjs/Header/HeaderBackButton.js.map +1 -1
- package/lib/module/Header/HeaderBackButton.js +3 -3
- package/lib/module/Header/HeaderBackButton.js.map +1 -1
- package/lib/typescript/src/Header/Header.d.ts +1 -0
- package/lib/typescript/src/Header/HeaderBackButton.d.ts +1 -0
- package/lib/typescript/src/Header/HeaderTitle.d.ts +1 -0
- package/lib/typescript/src/MissingIcon.d.ts +1 -0
- package/package.json +9 -9
- package/src/Header/HeaderBackButton.tsx +3 -3
|
@@ -183,7 +183,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
183
183
|
marginVertical: 12,
|
|
184
184
|
resizeMode: 'contain',
|
|
185
185
|
transform: [{
|
|
186
|
-
scaleX: _reactNative.I18nManager.isRTL ? -1 : 1
|
|
186
|
+
scaleX: _reactNative.I18nManager.getConstants().isRTL ? -1 : 1
|
|
187
187
|
}]
|
|
188
188
|
},
|
|
189
189
|
default: {
|
|
@@ -192,7 +192,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
192
192
|
margin: 3,
|
|
193
193
|
resizeMode: 'contain',
|
|
194
194
|
transform: [{
|
|
195
|
-
scaleX: _reactNative.I18nManager.isRTL ? -1 : 1
|
|
195
|
+
scaleX: _reactNative.I18nManager.getConstants().isRTL ? -1 : 1
|
|
196
196
|
}]
|
|
197
197
|
}
|
|
198
198
|
}),
|
|
@@ -216,7 +216,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
216
216
|
alignSelf: 'center',
|
|
217
217
|
resizeMode: 'contain',
|
|
218
218
|
transform: [{
|
|
219
|
-
scaleX: _reactNative.I18nManager.isRTL ? -1 : 1
|
|
219
|
+
scaleX: _reactNative.I18nManager.getConstants().isRTL ? -1 : 1
|
|
220
220
|
}]
|
|
221
221
|
}
|
|
222
222
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HeaderBackButton.tsx"],"names":["HeaderBackButton","disabled","allowFontScaling","backImage","label","labelStyle","labelVisible","onLabelLayout","onPress","pressColor","pressOpacity","screenLayout","tintColor","customTintColor","titleLayout","truncatedLabel","accessibilityLabel","testID","style","colors","initialLabelWidth","setInitialLabelWidth","React","useState","undefined","Platform","select","ios","primary","default","text","handleLabelLayout","e","nativeEvent","layout","x","width","shouldTruncateLabel","renderBackImage","styles","icon","Boolean","iconWithLabel","require","renderLabel","leftLabelText","labelElement","labelWrapper","minWidth","color","OS","iconMaskContainer","iconMask","iconMaskFillerRect","handlePress","requestAnimationFrame","borderless","container","top","right","bottom","left","StyleSheet","create","alignItems","flexDirection","hairlineWidth","marginVertical","marginHorizontal","opacity","fontSize","letterSpacing","height","marginLeft","marginRight","resizeMode","transform","scaleX","I18nManager","isRTL","margin","flex","justifyContent","backgroundColor","alignSelf"],"mappings":"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","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n I18nManager,\n Image,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport default function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible,\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n}: HeaderBackButtonProps) {\n const { colors } = useTheme();\n\n const [initialLabelWidth, setInitialLabelWidth] = React.useState<\n undefined | number\n >(undefined);\n\n const tintColor =\n customTintColor !== undefined\n ? customTintColor\n : Platform.select({\n ios: colors.primary,\n default: colors.text,\n });\n\n const handleLabelLayout = (e: LayoutChangeEvent) => {\n onLabelLayout?.(e);\n\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n\n const shouldTruncateLabel = () => {\n return (\n !label ||\n (initialLabelWidth &&\n titleLayout &&\n screenLayout &&\n (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26)\n );\n };\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor });\n } else {\n return (\n <Image\n style={[\n styles.icon,\n Boolean(labelVisible) && styles.iconWithLabel,\n Boolean(tintColor) && { tintColor },\n ]}\n source={require('../assets/back-icon.png')}\n fadeDuration={0}\n />\n );\n }\n };\n\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n\n const labelElement = (\n <View\n style={\n screenLayout\n ? // We make the button extend till the middle of the screen\n // Otherwise it appears to cut off when translating\n [styles.labelWrapper, { minWidth: screenLayout.width / 2 - 27 }]\n : null\n }\n >\n <Animated.Text\n accessible={false}\n onLayout={\n // This measurement is used to determine if we should truncate the label when it doesn't fit\n // Only measure it when label is not truncated because we want the measurement of full label\n leftLabelText === label ? handleLabelLayout : undefined\n }\n style={[\n styles.label,\n tintColor ? { color: tintColor } : null,\n labelStyle,\n ]}\n numberOfLines={1}\n allowFontScaling={!!allowFontScaling}\n >\n {leftLabelText}\n </Animated.Text>\n </View>\n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n <MaskedView\n maskElement={\n <View style={styles.iconMaskContainer}>\n <Image\n source={require('../assets/back-icon-mask.png')}\n style={styles.iconMask}\n />\n <View style={styles.iconMaskFillerRect} />\n </View>\n }\n >\n {labelElement}\n </MaskedView>\n );\n };\n\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n\n return (\n <PlatformPressable\n disabled={disabled}\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n testID={testID}\n onPress={disabled ? undefined : handlePress}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n android_ripple={{ borderless: true }}\n style={[styles.container, disabled && styles.disabled, style]}\n hitSlop={Platform.select({\n ios: undefined,\n default: { top: 16, right: 16, bottom: 16, left: 16 },\n })}\n >\n <React.Fragment>\n {renderBackImage()}\n {renderLabel()}\n </React.Fragment>\n </PlatformPressable>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n disabled: {\n opacity: 0.5,\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n }),\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginRight: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["HeaderBackButton.tsx"],"names":["HeaderBackButton","disabled","allowFontScaling","backImage","label","labelStyle","labelVisible","onLabelLayout","onPress","pressColor","pressOpacity","screenLayout","tintColor","customTintColor","titleLayout","truncatedLabel","accessibilityLabel","testID","style","colors","initialLabelWidth","setInitialLabelWidth","React","useState","undefined","Platform","select","ios","primary","default","text","handleLabelLayout","e","nativeEvent","layout","x","width","shouldTruncateLabel","renderBackImage","styles","icon","Boolean","iconWithLabel","require","renderLabel","leftLabelText","labelElement","labelWrapper","minWidth","color","OS","iconMaskContainer","iconMask","iconMaskFillerRect","handlePress","requestAnimationFrame","borderless","container","top","right","bottom","left","StyleSheet","create","alignItems","flexDirection","hairlineWidth","marginVertical","marginHorizontal","opacity","fontSize","letterSpacing","height","marginLeft","marginRight","resizeMode","transform","scaleX","I18nManager","getConstants","isRTL","margin","flex","justifyContent","backgroundColor","alignSelf"],"mappings":"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","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n I18nManager,\n Image,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport default function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible,\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n}: HeaderBackButtonProps) {\n const { colors } = useTheme();\n\n const [initialLabelWidth, setInitialLabelWidth] = React.useState<\n undefined | number\n >(undefined);\n\n const tintColor =\n customTintColor !== undefined\n ? customTintColor\n : Platform.select({\n ios: colors.primary,\n default: colors.text,\n });\n\n const handleLabelLayout = (e: LayoutChangeEvent) => {\n onLabelLayout?.(e);\n\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n\n const shouldTruncateLabel = () => {\n return (\n !label ||\n (initialLabelWidth &&\n titleLayout &&\n screenLayout &&\n (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26)\n );\n };\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor });\n } else {\n return (\n <Image\n style={[\n styles.icon,\n Boolean(labelVisible) && styles.iconWithLabel,\n Boolean(tintColor) && { tintColor },\n ]}\n source={require('../assets/back-icon.png')}\n fadeDuration={0}\n />\n );\n }\n };\n\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n\n const labelElement = (\n <View\n style={\n screenLayout\n ? // We make the button extend till the middle of the screen\n // Otherwise it appears to cut off when translating\n [styles.labelWrapper, { minWidth: screenLayout.width / 2 - 27 }]\n : null\n }\n >\n <Animated.Text\n accessible={false}\n onLayout={\n // This measurement is used to determine if we should truncate the label when it doesn't fit\n // Only measure it when label is not truncated because we want the measurement of full label\n leftLabelText === label ? handleLabelLayout : undefined\n }\n style={[\n styles.label,\n tintColor ? { color: tintColor } : null,\n labelStyle,\n ]}\n numberOfLines={1}\n allowFontScaling={!!allowFontScaling}\n >\n {leftLabelText}\n </Animated.Text>\n </View>\n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n <MaskedView\n maskElement={\n <View style={styles.iconMaskContainer}>\n <Image\n source={require('../assets/back-icon-mask.png')}\n style={styles.iconMask}\n />\n <View style={styles.iconMaskFillerRect} />\n </View>\n }\n >\n {labelElement}\n </MaskedView>\n );\n };\n\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n\n return (\n <PlatformPressable\n disabled={disabled}\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n testID={testID}\n onPress={disabled ? undefined : handlePress}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n android_ripple={{ borderless: true }}\n style={[styles.container, disabled && styles.disabled, style]}\n hitSlop={Platform.select({\n ios: undefined,\n default: { top: 16, right: 16, bottom: 16, left: 16 },\n })}\n >\n <React.Fragment>\n {renderBackImage()}\n {renderLabel()}\n </React.Fragment>\n </PlatformPressable>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n disabled: {\n opacity: 0.5,\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n }),\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginRight: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n});\n"]}
|
|
@@ -164,7 +164,7 @@ const styles = StyleSheet.create({
|
|
|
164
164
|
marginVertical: 12,
|
|
165
165
|
resizeMode: 'contain',
|
|
166
166
|
transform: [{
|
|
167
|
-
scaleX: I18nManager.isRTL ? -1 : 1
|
|
167
|
+
scaleX: I18nManager.getConstants().isRTL ? -1 : 1
|
|
168
168
|
}]
|
|
169
169
|
},
|
|
170
170
|
default: {
|
|
@@ -173,7 +173,7 @@ const styles = StyleSheet.create({
|
|
|
173
173
|
margin: 3,
|
|
174
174
|
resizeMode: 'contain',
|
|
175
175
|
transform: [{
|
|
176
|
-
scaleX: I18nManager.isRTL ? -1 : 1
|
|
176
|
+
scaleX: I18nManager.getConstants().isRTL ? -1 : 1
|
|
177
177
|
}]
|
|
178
178
|
}
|
|
179
179
|
}),
|
|
@@ -197,7 +197,7 @@ const styles = StyleSheet.create({
|
|
|
197
197
|
alignSelf: 'center',
|
|
198
198
|
resizeMode: 'contain',
|
|
199
199
|
transform: [{
|
|
200
|
-
scaleX: I18nManager.isRTL ? -1 : 1
|
|
200
|
+
scaleX: I18nManager.getConstants().isRTL ? -1 : 1
|
|
201
201
|
}]
|
|
202
202
|
}
|
|
203
203
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["HeaderBackButton.tsx"],"names":["useTheme","React","Animated","I18nManager","Image","Platform","StyleSheet","View","MaskedView","PlatformPressable","HeaderBackButton","disabled","allowFontScaling","backImage","label","labelStyle","labelVisible","onLabelLayout","onPress","pressColor","pressOpacity","screenLayout","tintColor","customTintColor","titleLayout","truncatedLabel","accessibilityLabel","testID","style","colors","initialLabelWidth","setInitialLabelWidth","useState","undefined","select","ios","primary","default","text","handleLabelLayout","e","nativeEvent","layout","x","width","shouldTruncateLabel","renderBackImage","styles","icon","Boolean","iconWithLabel","require","renderLabel","leftLabelText","labelElement","labelWrapper","minWidth","color","OS","iconMaskContainer","iconMask","iconMaskFillerRect","handlePress","requestAnimationFrame","borderless","container","top","right","bottom","left","create","alignItems","flexDirection","hairlineWidth","marginVertical","marginHorizontal","opacity","fontSize","letterSpacing","height","marginLeft","marginRight","resizeMode","transform","scaleX","isRTL","margin","flex","justifyContent","backgroundColor","alignSelf"],"mappings":"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","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n I18nManager,\n Image,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport default function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible,\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n}: HeaderBackButtonProps) {\n const { colors } = useTheme();\n\n const [initialLabelWidth, setInitialLabelWidth] = React.useState<\n undefined | number\n >(undefined);\n\n const tintColor =\n customTintColor !== undefined\n ? customTintColor\n : Platform.select({\n ios: colors.primary,\n default: colors.text,\n });\n\n const handleLabelLayout = (e: LayoutChangeEvent) => {\n onLabelLayout?.(e);\n\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n\n const shouldTruncateLabel = () => {\n return (\n !label ||\n (initialLabelWidth &&\n titleLayout &&\n screenLayout &&\n (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26)\n );\n };\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor });\n } else {\n return (\n <Image\n style={[\n styles.icon,\n Boolean(labelVisible) && styles.iconWithLabel,\n Boolean(tintColor) && { tintColor },\n ]}\n source={require('../assets/back-icon.png')}\n fadeDuration={0}\n />\n );\n }\n };\n\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n\n const labelElement = (\n <View\n style={\n screenLayout\n ? // We make the button extend till the middle of the screen\n // Otherwise it appears to cut off when translating\n [styles.labelWrapper, { minWidth: screenLayout.width / 2 - 27 }]\n : null\n }\n >\n <Animated.Text\n accessible={false}\n onLayout={\n // This measurement is used to determine if we should truncate the label when it doesn't fit\n // Only measure it when label is not truncated because we want the measurement of full label\n leftLabelText === label ? handleLabelLayout : undefined\n }\n style={[\n styles.label,\n tintColor ? { color: tintColor } : null,\n labelStyle,\n ]}\n numberOfLines={1}\n allowFontScaling={!!allowFontScaling}\n >\n {leftLabelText}\n </Animated.Text>\n </View>\n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n <MaskedView\n maskElement={\n <View style={styles.iconMaskContainer}>\n <Image\n source={require('../assets/back-icon-mask.png')}\n style={styles.iconMask}\n />\n <View style={styles.iconMaskFillerRect} />\n </View>\n }\n >\n {labelElement}\n </MaskedView>\n );\n };\n\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n\n return (\n <PlatformPressable\n disabled={disabled}\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n testID={testID}\n onPress={disabled ? undefined : handlePress}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n android_ripple={{ borderless: true }}\n style={[styles.container, disabled && styles.disabled, style]}\n hitSlop={Platform.select({\n ios: undefined,\n default: { top: 16, right: 16, bottom: 16, left: 16 },\n })}\n >\n <React.Fragment>\n {renderBackImage()}\n {renderLabel()}\n </React.Fragment>\n </PlatformPressable>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n disabled: {\n opacity: 0.5,\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n }),\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginRight: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["HeaderBackButton.tsx"],"names":["useTheme","React","Animated","I18nManager","Image","Platform","StyleSheet","View","MaskedView","PlatformPressable","HeaderBackButton","disabled","allowFontScaling","backImage","label","labelStyle","labelVisible","onLabelLayout","onPress","pressColor","pressOpacity","screenLayout","tintColor","customTintColor","titleLayout","truncatedLabel","accessibilityLabel","testID","style","colors","initialLabelWidth","setInitialLabelWidth","useState","undefined","select","ios","primary","default","text","handleLabelLayout","e","nativeEvent","layout","x","width","shouldTruncateLabel","renderBackImage","styles","icon","Boolean","iconWithLabel","require","renderLabel","leftLabelText","labelElement","labelWrapper","minWidth","color","OS","iconMaskContainer","iconMask","iconMaskFillerRect","handlePress","requestAnimationFrame","borderless","container","top","right","bottom","left","create","alignItems","flexDirection","hairlineWidth","marginVertical","marginHorizontal","opacity","fontSize","letterSpacing","height","marginLeft","marginRight","resizeMode","transform","scaleX","getConstants","isRTL","margin","flex","justifyContent","backgroundColor","alignSelf"],"mappings":"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","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n I18nManager,\n Image,\n LayoutChangeEvent,\n Platform,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport MaskedView from '../MaskedView';\nimport PlatformPressable from '../PlatformPressable';\nimport type { HeaderBackButtonProps } from '../types';\n\nexport default function HeaderBackButton({\n disabled,\n allowFontScaling,\n backImage,\n label,\n labelStyle,\n labelVisible,\n onLabelLayout,\n onPress,\n pressColor,\n pressOpacity,\n screenLayout,\n tintColor: customTintColor,\n titleLayout,\n truncatedLabel = 'Back',\n accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',\n testID,\n style,\n}: HeaderBackButtonProps) {\n const { colors } = useTheme();\n\n const [initialLabelWidth, setInitialLabelWidth] = React.useState<\n undefined | number\n >(undefined);\n\n const tintColor =\n customTintColor !== undefined\n ? customTintColor\n : Platform.select({\n ios: colors.primary,\n default: colors.text,\n });\n\n const handleLabelLayout = (e: LayoutChangeEvent) => {\n onLabelLayout?.(e);\n\n setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);\n };\n\n const shouldTruncateLabel = () => {\n return (\n !label ||\n (initialLabelWidth &&\n titleLayout &&\n screenLayout &&\n (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26)\n );\n };\n\n const renderBackImage = () => {\n if (backImage) {\n return backImage({ tintColor });\n } else {\n return (\n <Image\n style={[\n styles.icon,\n Boolean(labelVisible) && styles.iconWithLabel,\n Boolean(tintColor) && { tintColor },\n ]}\n source={require('../assets/back-icon.png')}\n fadeDuration={0}\n />\n );\n }\n };\n\n const renderLabel = () => {\n const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;\n\n if (!labelVisible || leftLabelText === undefined) {\n return null;\n }\n\n const labelElement = (\n <View\n style={\n screenLayout\n ? // We make the button extend till the middle of the screen\n // Otherwise it appears to cut off when translating\n [styles.labelWrapper, { minWidth: screenLayout.width / 2 - 27 }]\n : null\n }\n >\n <Animated.Text\n accessible={false}\n onLayout={\n // This measurement is used to determine if we should truncate the label when it doesn't fit\n // Only measure it when label is not truncated because we want the measurement of full label\n leftLabelText === label ? handleLabelLayout : undefined\n }\n style={[\n styles.label,\n tintColor ? { color: tintColor } : null,\n labelStyle,\n ]}\n numberOfLines={1}\n allowFontScaling={!!allowFontScaling}\n >\n {leftLabelText}\n </Animated.Text>\n </View>\n );\n\n if (backImage || Platform.OS !== 'ios') {\n // When a custom backimage is specified, we can't mask the label\n // Otherwise there might be weird effect due to our mask not being the same as the image\n return labelElement;\n }\n\n return (\n <MaskedView\n maskElement={\n <View style={styles.iconMaskContainer}>\n <Image\n source={require('../assets/back-icon-mask.png')}\n style={styles.iconMask}\n />\n <View style={styles.iconMaskFillerRect} />\n </View>\n }\n >\n {labelElement}\n </MaskedView>\n );\n };\n\n const handlePress = () => onPress && requestAnimationFrame(onPress);\n\n return (\n <PlatformPressable\n disabled={disabled}\n accessible\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n testID={testID}\n onPress={disabled ? undefined : handlePress}\n pressColor={pressColor}\n pressOpacity={pressOpacity}\n android_ripple={{ borderless: true }}\n style={[styles.container, disabled && styles.disabled, style]}\n hitSlop={Platform.select({\n ios: undefined,\n default: { top: 16, right: 16, bottom: 16, left: 16 },\n })}\n >\n <React.Fragment>\n {renderBackImage()}\n {renderLabel()}\n </React.Fragment>\n </PlatformPressable>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n flexDirection: 'row',\n minWidth: StyleSheet.hairlineWidth, // Avoid collapsing when title is long\n ...Platform.select({\n ios: null,\n default: {\n marginVertical: 3,\n marginHorizontal: 11,\n },\n }),\n },\n disabled: {\n opacity: 0.5,\n },\n label: {\n fontSize: 17,\n // Title and back label are a bit different width due to title being bold\n // Adjusting the letterSpacing makes them coincide better\n letterSpacing: 0.35,\n },\n labelWrapper: {\n // These styles will make sure that the label doesn't fill the available space\n // Otherwise it messes with the measurement of the label\n flexDirection: 'row',\n alignItems: 'flex-start',\n },\n icon: Platform.select({\n ios: {\n height: 21,\n width: 13,\n marginLeft: 8,\n marginRight: 22,\n marginVertical: 12,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n default: {\n height: 24,\n width: 24,\n margin: 3,\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n }),\n iconWithLabel:\n Platform.OS === 'ios'\n ? {\n marginRight: 6,\n }\n : {},\n iconMaskContainer: {\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'center',\n },\n iconMaskFillerRect: {\n flex: 1,\n backgroundColor: '#000',\n },\n iconMask: {\n height: 21,\n width: 13,\n marginLeft: -14.5,\n marginVertical: 12,\n alignSelf: 'center',\n resizeMode: 'contain',\n transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],\n },\n});\n"]}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
1
2
|
import type { HeaderBackButtonProps } from '../types';
|
|
2
3
|
export default function HeaderBackButton({ disabled, allowFontScaling, backImage, label, labelStyle, labelVisible, onLabelLayout, onPress, pressColor, pressOpacity, screenLayout, tintColor: customTintColor, titleLayout, truncatedLabel, accessibilityLabel, testID, style, }: HeaderBackButtonProps): JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-navigation/elements",
|
|
3
3
|
"description": "UI Components for React Navigation",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.6",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
7
7
|
"react-navigation",
|
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
|
-
"
|
|
36
|
+
"prepack": "bob build",
|
|
37
37
|
"clean": "del lib"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@react-native-masked-view/masked-view": "
|
|
41
|
-
"@react-navigation/native": "^6.0.
|
|
40
|
+
"@react-native-masked-view/masked-view": "0.2.7",
|
|
41
|
+
"@react-navigation/native": "^6.0.13",
|
|
42
42
|
"@testing-library/react-native": "^7.2.0",
|
|
43
|
-
"@types/react": "
|
|
44
|
-
"@types/react-native": "~0.
|
|
43
|
+
"@types/react": "~18.0.0",
|
|
44
|
+
"@types/react-native": "~0.69.1",
|
|
45
45
|
"del-cli": "^3.0.1",
|
|
46
|
-
"react": "
|
|
47
|
-
"react-native": "
|
|
46
|
+
"react": "18.0.0",
|
|
47
|
+
"react-native": "0.69.5",
|
|
48
48
|
"react-native-builder-bob": "^0.18.1",
|
|
49
49
|
"typescript": "^4.7.4"
|
|
50
50
|
},
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
]
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
|
-
"gitHead": "
|
|
71
|
+
"gitHead": "fc4c3a63ab156e17db7ba0cbd32ada319f78714e"
|
|
72
72
|
}
|
|
@@ -204,14 +204,14 @@ const styles = StyleSheet.create({
|
|
|
204
204
|
marginRight: 22,
|
|
205
205
|
marginVertical: 12,
|
|
206
206
|
resizeMode: 'contain',
|
|
207
|
-
transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],
|
|
207
|
+
transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],
|
|
208
208
|
},
|
|
209
209
|
default: {
|
|
210
210
|
height: 24,
|
|
211
211
|
width: 24,
|
|
212
212
|
margin: 3,
|
|
213
213
|
resizeMode: 'contain',
|
|
214
|
-
transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],
|
|
214
|
+
transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],
|
|
215
215
|
},
|
|
216
216
|
}),
|
|
217
217
|
iconWithLabel:
|
|
@@ -236,6 +236,6 @@ const styles = StyleSheet.create({
|
|
|
236
236
|
marginVertical: 12,
|
|
237
237
|
alignSelf: 'center',
|
|
238
238
|
resizeMode: 'contain',
|
|
239
|
-
transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],
|
|
239
|
+
transform: [{ scaleX: I18nManager.getConstants().isRTL ? -1 : 1 }],
|
|
240
240
|
},
|
|
241
241
|
});
|