@react-navigation/elements 1.1.1

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.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/lib/commonjs/Background.js +34 -0
  4. package/lib/commonjs/Background.js.map +1 -0
  5. package/lib/commonjs/Header/Header.js +250 -0
  6. package/lib/commonjs/Header/Header.js.map +1 -0
  7. package/lib/commonjs/Header/HeaderBackButton.js +222 -0
  8. package/lib/commonjs/Header/HeaderBackButton.js.map +1 -0
  9. package/lib/commonjs/Header/HeaderBackContext.js +15 -0
  10. package/lib/commonjs/Header/HeaderBackContext.js.map +1 -0
  11. package/lib/commonjs/Header/HeaderBackground.js +57 -0
  12. package/lib/commonjs/Header/HeaderBackground.js.map +1 -0
  13. package/lib/commonjs/Header/HeaderHeightContext.js +15 -0
  14. package/lib/commonjs/Header/HeaderHeightContext.js.map +1 -0
  15. package/lib/commonjs/Header/HeaderShownContext.js +15 -0
  16. package/lib/commonjs/Header/HeaderShownContext.js.map +1 -0
  17. package/lib/commonjs/Header/HeaderTitle.js +56 -0
  18. package/lib/commonjs/Header/HeaderTitle.js.map +1 -0
  19. package/lib/commonjs/Header/getDefaultHeaderHeight.js +40 -0
  20. package/lib/commonjs/Header/getDefaultHeaderHeight.js.map +1 -0
  21. package/lib/commonjs/Header/getHeaderTitle.js +11 -0
  22. package/lib/commonjs/Header/getHeaderTitle.js.map +1 -0
  23. package/lib/commonjs/Header/useHeaderHeight.js +27 -0
  24. package/lib/commonjs/Header/useHeaderHeight.js.map +1 -0
  25. package/lib/commonjs/MaskedView.android.js +16 -0
  26. package/lib/commonjs/MaskedView.android.js.map +1 -0
  27. package/lib/commonjs/MaskedView.ios.js +16 -0
  28. package/lib/commonjs/MaskedView.ios.js.map +1 -0
  29. package/lib/commonjs/MaskedView.js +16 -0
  30. package/lib/commonjs/MaskedView.js.map +1 -0
  31. package/lib/commonjs/MaskedViewNative.js +40 -0
  32. package/lib/commonjs/MaskedViewNative.js.map +1 -0
  33. package/lib/commonjs/MissingIcon.js +34 -0
  34. package/lib/commonjs/MissingIcon.js.map +1 -0
  35. package/lib/commonjs/PlatformPressable.js +77 -0
  36. package/lib/commonjs/PlatformPressable.js.map +1 -0
  37. package/lib/commonjs/ResourceSavingView.js +64 -0
  38. package/lib/commonjs/ResourceSavingView.js.map +1 -0
  39. package/lib/commonjs/SafeAreaProviderCompat.js +69 -0
  40. package/lib/commonjs/SafeAreaProviderCompat.js.map +1 -0
  41. package/lib/commonjs/Screen.js +89 -0
  42. package/lib/commonjs/Screen.js.map +1 -0
  43. package/lib/commonjs/assets/back-icon-mask.png +0 -0
  44. package/lib/commonjs/assets/back-icon.png +0 -0
  45. package/lib/commonjs/assets/back-icon@1.5x.android.png +0 -0
  46. package/lib/commonjs/assets/back-icon@1.5x.ios.png +0 -0
  47. package/lib/commonjs/assets/back-icon@1x.android.png +0 -0
  48. package/lib/commonjs/assets/back-icon@1x.ios.png +0 -0
  49. package/lib/commonjs/assets/back-icon@2x.android.png +0 -0
  50. package/lib/commonjs/assets/back-icon@2x.ios.png +0 -0
  51. package/lib/commonjs/assets/back-icon@3x.android.png +0 -0
  52. package/lib/commonjs/assets/back-icon@3x.ios.png +0 -0
  53. package/lib/commonjs/assets/back-icon@4x.android.png +0 -0
  54. package/lib/commonjs/assets/back-icon@4x.ios.png +0 -0
  55. package/lib/commonjs/getNamedContext.js +32 -0
  56. package/lib/commonjs/getNamedContext.js.map +1 -0
  57. package/lib/commonjs/index.js +175 -0
  58. package/lib/commonjs/index.js.map +1 -0
  59. package/lib/commonjs/types.js +6 -0
  60. package/lib/commonjs/types.js.map +1 -0
  61. package/lib/module/Background.js +20 -0
  62. package/lib/module/Background.js.map +1 -0
  63. package/lib/module/Header/Header.js +229 -0
  64. package/lib/module/Header/Header.js.map +1 -0
  65. package/lib/module/Header/HeaderBackButton.js +203 -0
  66. package/lib/module/Header/HeaderBackButton.js.map +1 -0
  67. package/lib/module/Header/HeaderBackContext.js +4 -0
  68. package/lib/module/Header/HeaderBackContext.js.map +1 -0
  69. package/lib/module/Header/HeaderBackground.js +42 -0
  70. package/lib/module/Header/HeaderBackground.js.map +1 -0
  71. package/lib/module/Header/HeaderHeightContext.js +4 -0
  72. package/lib/module/Header/HeaderHeightContext.js.map +1 -0
  73. package/lib/module/Header/HeaderShownContext.js +4 -0
  74. package/lib/module/Header/HeaderShownContext.js.map +1 -0
  75. package/lib/module/Header/HeaderTitle.js +41 -0
  76. package/lib/module/Header/HeaderTitle.js.map +1 -0
  77. package/lib/module/Header/getDefaultHeaderHeight.js +32 -0
  78. package/lib/module/Header/getDefaultHeaderHeight.js.map +1 -0
  79. package/lib/module/Header/getHeaderTitle.js +4 -0
  80. package/lib/module/Header/getHeaderTitle.js.map +1 -0
  81. package/lib/module/Header/useHeaderHeight.js +12 -0
  82. package/lib/module/Header/useHeaderHeight.js.map +1 -0
  83. package/lib/module/MaskedView.android.js +2 -0
  84. package/lib/module/MaskedView.android.js.map +1 -0
  85. package/lib/module/MaskedView.ios.js +2 -0
  86. package/lib/module/MaskedView.ios.js.map +1 -0
  87. package/lib/module/MaskedView.js +9 -0
  88. package/lib/module/MaskedView.js.map +1 -0
  89. package/lib/module/MaskedViewNative.js +26 -0
  90. package/lib/module/MaskedViewNative.js.map +1 -0
  91. package/lib/module/MissingIcon.js +20 -0
  92. package/lib/module/MissingIcon.js.map +1 -0
  93. package/lib/module/PlatformPressable.js +62 -0
  94. package/lib/module/PlatformPressable.js.map +1 -0
  95. package/lib/module/ResourceSavingView.js +50 -0
  96. package/lib/module/ResourceSavingView.js.map +1 -0
  97. package/lib/module/SafeAreaProviderCompat.js +51 -0
  98. package/lib/module/SafeAreaProviderCompat.js.map +1 -0
  99. package/lib/module/Screen.js +67 -0
  100. package/lib/module/Screen.js.map +1 -0
  101. package/lib/module/assets/back-icon-mask.png +0 -0
  102. package/lib/module/assets/back-icon.png +0 -0
  103. package/lib/module/assets/back-icon@1.5x.android.png +0 -0
  104. package/lib/module/assets/back-icon@1.5x.ios.png +0 -0
  105. package/lib/module/assets/back-icon@1x.android.png +0 -0
  106. package/lib/module/assets/back-icon@1x.ios.png +0 -0
  107. package/lib/module/assets/back-icon@2x.android.png +0 -0
  108. package/lib/module/assets/back-icon@2x.ios.png +0 -0
  109. package/lib/module/assets/back-icon@3x.android.png +0 -0
  110. package/lib/module/assets/back-icon@3x.ios.png +0 -0
  111. package/lib/module/assets/back-icon@4x.android.png +0 -0
  112. package/lib/module/assets/back-icon@4x.ios.png +0 -0
  113. package/lib/module/getNamedContext.js +19 -0
  114. package/lib/module/getNamedContext.js.map +1 -0
  115. package/lib/module/index.js +21 -0
  116. package/lib/module/index.js.map +1 -0
  117. package/lib/module/types.js +2 -0
  118. package/lib/module/types.js.map +1 -0
  119. package/lib/typescript/src/Background.d.ts +7 -0
  120. package/lib/typescript/src/Header/Header.d.ts +18 -0
  121. package/lib/typescript/src/Header/HeaderBackButton.d.ts +3 -0
  122. package/lib/typescript/src/Header/HeaderBackContext.d.ts +5 -0
  123. package/lib/typescript/src/Header/HeaderBackground.d.ts +8 -0
  124. package/lib/typescript/src/Header/HeaderHeightContext.d.ts +3 -0
  125. package/lib/typescript/src/Header/HeaderShownContext.d.ts +3 -0
  126. package/lib/typescript/src/Header/HeaderTitle.d.ts +9 -0
  127. package/lib/typescript/src/Header/getDefaultHeaderHeight.d.ts +2 -0
  128. package/lib/typescript/src/Header/getHeaderTitle.d.ts +5 -0
  129. package/lib/typescript/src/Header/useHeaderHeight.d.ts +1 -0
  130. package/lib/typescript/src/MaskedView.android.d.ts +1 -0
  131. package/lib/typescript/src/MaskedView.d.ts +10 -0
  132. package/lib/typescript/src/MaskedView.ios.d.ts +1 -0
  133. package/lib/typescript/src/MaskedViewNative.d.ts +10 -0
  134. package/lib/typescript/src/MissingIcon.d.ts +9 -0
  135. package/lib/typescript/src/PlatformPressable.d.ts +12 -0
  136. package/lib/typescript/src/ResourceSavingView.d.ts +9 -0
  137. package/lib/typescript/src/SafeAreaProviderCompat.d.ts +11 -0
  138. package/lib/typescript/src/Screen.d.ts +17 -0
  139. package/lib/typescript/src/getNamedContext.d.ts +5 -0
  140. package/lib/typescript/src/index.d.ts +18 -0
  141. package/lib/typescript/src/types.d.ts +202 -0
  142. package/package.json +72 -0
  143. package/src/Background.tsx +18 -0
  144. package/src/Header/Header.tsx +306 -0
  145. package/src/Header/HeaderBackButton.tsx +240 -0
  146. package/src/Header/HeaderBackContext.tsx +8 -0
  147. package/src/Header/HeaderBackground.tsx +56 -0
  148. package/src/Header/HeaderHeightContext.tsx +8 -0
  149. package/src/Header/HeaderShownContext.tsx +5 -0
  150. package/src/Header/HeaderTitle.tsx +52 -0
  151. package/src/Header/getDefaultHeaderHeight.tsx +39 -0
  152. package/src/Header/getHeaderTitle.tsx +12 -0
  153. package/src/Header/useHeaderHeight.tsx +15 -0
  154. package/src/MaskedView.android.tsx +1 -0
  155. package/src/MaskedView.ios.tsx +1 -0
  156. package/src/MaskedView.tsx +13 -0
  157. package/src/MaskedViewNative.tsx +33 -0
  158. package/src/MissingIcon.tsx +18 -0
  159. package/src/PlatformPressable.tsx +86 -0
  160. package/src/ResourceSavingView.tsx +70 -0
  161. package/src/SafeAreaProviderCompat.tsx +61 -0
  162. package/src/Screen.tsx +109 -0
  163. package/src/assets/back-icon-mask.png +0 -0
  164. package/src/assets/back-icon.png +0 -0
  165. package/src/assets/back-icon@1.5x.android.png +0 -0
  166. package/src/assets/back-icon@1.5x.ios.png +0 -0
  167. package/src/assets/back-icon@1x.android.png +0 -0
  168. package/src/assets/back-icon@1x.ios.png +0 -0
  169. package/src/assets/back-icon@2x.android.png +0 -0
  170. package/src/assets/back-icon@2x.ios.png +0 -0
  171. package/src/assets/back-icon@3x.android.png +0 -0
  172. package/src/assets/back-icon@3x.ios.png +0 -0
  173. package/src/assets/back-icon@4x.android.png +0 -0
  174. package/src/assets/back-icon@4x.ios.png +0 -0
  175. package/src/getNamedContext.tsx +28 -0
  176. package/src/index.tsx +25 -0
  177. package/src/types.tsx +208 -0
@@ -0,0 +1,229 @@
1
+ import * as React from 'react';
2
+ import { Animated, Platform, StyleSheet, View } from 'react-native';
3
+ import { useSafeAreaFrame, useSafeAreaInsets } from 'react-native-safe-area-context';
4
+ import getDefaultHeaderHeight from './getDefaultHeaderHeight';
5
+ import HeaderBackground from './HeaderBackground';
6
+ import HeaderShownContext from './HeaderShownContext';
7
+ import HeaderTitle from './HeaderTitle';
8
+
9
+ const warnIfHeaderStylesDefined = styles => {
10
+ Object.keys(styles).forEach(styleProp => {
11
+ const value = styles[styleProp];
12
+
13
+ if (styleProp === 'position' && value === 'absolute') {
14
+ console.warn("position: 'absolute' is not supported on headerStyle. If you would like to render content under the header, use the 'headerTransparent' option.");
15
+ } else if (value !== undefined) {
16
+ console.warn(`${styleProp} was given a value of ${value}, this has no effect on headerStyle.`);
17
+ }
18
+ });
19
+ };
20
+
21
+ export default function Header(props) {
22
+ const insets = useSafeAreaInsets();
23
+ const frame = useSafeAreaFrame();
24
+ const isParentHeaderShown = React.useContext(HeaderShownContext);
25
+ const {
26
+ layout = frame,
27
+ modal = false,
28
+ title,
29
+ headerTitle: customTitle,
30
+ headerTitleAlign = Platform.select({
31
+ ios: 'center',
32
+ default: 'left'
33
+ }),
34
+ headerLeft,
35
+ headerLeftLabelVisible,
36
+ headerTransparent,
37
+ headerTintColor,
38
+ headerBackground,
39
+ headerRight,
40
+ headerTitleAllowFontScaling: titleAllowFontScaling,
41
+ headerTitleStyle: titleStyle,
42
+ headerLeftContainerStyle: leftContainerStyle,
43
+ headerRightContainerStyle: rightContainerStyle,
44
+ headerTitleContainerStyle: titleContainerStyle,
45
+ headerBackgroundContainerStyle: backgroundContainerStyle,
46
+ headerStyle: customHeaderStyle,
47
+ headerPressColor,
48
+ headerPressOpacity,
49
+ headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top
50
+ } = props;
51
+ const defaultHeight = getDefaultHeaderHeight(layout, modal, headerStatusBarHeight);
52
+ const {
53
+ height = defaultHeight,
54
+ minHeight,
55
+ maxHeight,
56
+ backgroundColor,
57
+ borderBottomColor,
58
+ borderBottomEndRadius,
59
+ borderBottomLeftRadius,
60
+ borderBottomRightRadius,
61
+ borderBottomStartRadius,
62
+ borderBottomWidth,
63
+ borderColor,
64
+ borderEndColor,
65
+ borderEndWidth,
66
+ borderLeftColor,
67
+ borderLeftWidth,
68
+ borderRadius,
69
+ borderRightColor,
70
+ borderRightWidth,
71
+ borderStartColor,
72
+ borderStartWidth,
73
+ borderStyle,
74
+ borderTopColor,
75
+ borderTopEndRadius,
76
+ borderTopLeftRadius,
77
+ borderTopRightRadius,
78
+ borderTopStartRadius,
79
+ borderTopWidth,
80
+ borderWidth,
81
+ // @ts-expect-error: web support for shadow
82
+ boxShadow,
83
+ elevation,
84
+ shadowColor,
85
+ shadowOffset,
86
+ shadowOpacity,
87
+ shadowRadius,
88
+ opacity,
89
+ transform,
90
+ ...unsafeStyles
91
+ } = StyleSheet.flatten(customHeaderStyle || {});
92
+
93
+ if (process.env.NODE_ENV !== 'production') {
94
+ warnIfHeaderStylesDefined(unsafeStyles);
95
+ }
96
+
97
+ const safeStyles = {
98
+ backgroundColor,
99
+ borderBottomColor,
100
+ borderBottomEndRadius,
101
+ borderBottomLeftRadius,
102
+ borderBottomRightRadius,
103
+ borderBottomStartRadius,
104
+ borderBottomWidth,
105
+ borderColor,
106
+ borderEndColor,
107
+ borderEndWidth,
108
+ borderLeftColor,
109
+ borderLeftWidth,
110
+ borderRadius,
111
+ borderRightColor,
112
+ borderRightWidth,
113
+ borderStartColor,
114
+ borderStartWidth,
115
+ borderStyle,
116
+ borderTopColor,
117
+ borderTopEndRadius,
118
+ borderTopLeftRadius,
119
+ borderTopRightRadius,
120
+ borderTopStartRadius,
121
+ borderTopWidth,
122
+ borderWidth,
123
+ // @ts-expect-error: boxShadow is only for Web
124
+ boxShadow,
125
+ elevation,
126
+ shadowColor,
127
+ shadowOffset,
128
+ shadowOpacity,
129
+ shadowRadius,
130
+ opacity,
131
+ transform
132
+ }; // Setting a property to undefined triggers default style
133
+ // So we need to filter them out
134
+ // Users can use `null` instead
135
+
136
+ for (const styleProp in safeStyles) {
137
+ // @ts-expect-error: typescript wrongly complains that styleProp cannot be used to index safeStyles
138
+ if (safeStyles[styleProp] === undefined) {
139
+ // @ts-expect-error
140
+ // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
141
+ delete safeStyles[styleProp];
142
+ }
143
+ }
144
+
145
+ const leftButton = headerLeft ? headerLeft({
146
+ tintColor: headerTintColor,
147
+ pressColor: headerPressColor,
148
+ pressOpacity: headerPressOpacity,
149
+ labelVisible: headerLeftLabelVisible
150
+ }) : null;
151
+ const rightButton = headerRight ? headerRight({
152
+ tintColor: headerTintColor,
153
+ pressColor: headerPressColor,
154
+ pressOpacity: headerPressOpacity
155
+ }) : null;
156
+ const headerTitle = typeof customTitle !== 'function' ? props => /*#__PURE__*/React.createElement(HeaderTitle, props) : customTitle;
157
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Animated.View, {
158
+ pointerEvents: "box-none",
159
+ style: [StyleSheet.absoluteFill, {
160
+ zIndex: 0
161
+ }, backgroundContainerStyle]
162
+ }, headerBackground ? headerBackground({
163
+ style: safeStyles
164
+ }) : headerTransparent ? null : /*#__PURE__*/React.createElement(HeaderBackground, {
165
+ style: safeStyles
166
+ })), /*#__PURE__*/React.createElement(Animated.View, {
167
+ pointerEvents: "box-none",
168
+ style: [{
169
+ height,
170
+ minHeight,
171
+ maxHeight,
172
+ opacity,
173
+ transform
174
+ }]
175
+ }, /*#__PURE__*/React.createElement(View, {
176
+ pointerEvents: "none",
177
+ style: {
178
+ height: headerStatusBarHeight
179
+ }
180
+ }), /*#__PURE__*/React.createElement(View, {
181
+ pointerEvents: "box-none",
182
+ style: styles.content
183
+ }, /*#__PURE__*/React.createElement(Animated.View, {
184
+ pointerEvents: "box-none",
185
+ style: [styles.left, headerTitleAlign === 'center' && styles.expand, {
186
+ marginStart: insets.left
187
+ }, leftContainerStyle]
188
+ }, leftButton), /*#__PURE__*/React.createElement(Animated.View, {
189
+ pointerEvents: "box-none",
190
+ style: [styles.title, {
191
+ // Avoid the title from going offscreen or overlapping buttons
192
+ maxWidth: headerTitleAlign === 'center' ? layout.width - ((leftButton ? headerLeftLabelVisible !== false ? 80 : 32 : 16) + Math.max(insets.left, insets.right)) * 2 : layout.width - ((leftButton ? 72 : 16) + (rightButton ? 72 : 16) + insets.left - insets.right)
193
+ }, titleContainerStyle]
194
+ }, headerTitle({
195
+ children: title,
196
+ allowFontScaling: titleAllowFontScaling,
197
+ tintColor: headerTintColor,
198
+ style: titleStyle
199
+ })), /*#__PURE__*/React.createElement(Animated.View, {
200
+ pointerEvents: "box-none",
201
+ style: [styles.right, styles.expand, {
202
+ marginEnd: insets.right
203
+ }, rightContainerStyle]
204
+ }, rightButton))));
205
+ }
206
+ const styles = StyleSheet.create({
207
+ content: {
208
+ flex: 1,
209
+ flexDirection: 'row',
210
+ alignItems: 'stretch'
211
+ },
212
+ title: {
213
+ marginHorizontal: 16,
214
+ justifyContent: 'center'
215
+ },
216
+ left: {
217
+ justifyContent: 'center',
218
+ alignItems: 'flex-start'
219
+ },
220
+ right: {
221
+ justifyContent: 'center',
222
+ alignItems: 'flex-end'
223
+ },
224
+ expand: {
225
+ flexGrow: 1,
226
+ flexBasis: 0
227
+ }
228
+ });
229
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Header.tsx"],"names":["React","Animated","Platform","StyleSheet","View","useSafeAreaFrame","useSafeAreaInsets","getDefaultHeaderHeight","HeaderBackground","HeaderShownContext","HeaderTitle","warnIfHeaderStylesDefined","styles","Object","keys","forEach","styleProp","value","console","warn","undefined","Header","props","insets","frame","isParentHeaderShown","useContext","layout","modal","title","headerTitle","customTitle","headerTitleAlign","select","ios","default","headerLeft","headerLeftLabelVisible","headerTransparent","headerTintColor","headerBackground","headerRight","headerTitleAllowFontScaling","titleAllowFontScaling","headerTitleStyle","titleStyle","headerLeftContainerStyle","leftContainerStyle","headerRightContainerStyle","rightContainerStyle","headerTitleContainerStyle","titleContainerStyle","headerBackgroundContainerStyle","backgroundContainerStyle","headerStyle","customHeaderStyle","headerPressColor","headerPressOpacity","headerStatusBarHeight","top","defaultHeight","height","minHeight","maxHeight","backgroundColor","borderBottomColor","borderBottomEndRadius","borderBottomLeftRadius","borderBottomRightRadius","borderBottomStartRadius","borderBottomWidth","borderColor","borderEndColor","borderEndWidth","borderLeftColor","borderLeftWidth","borderRadius","borderRightColor","borderRightWidth","borderStartColor","borderStartWidth","borderStyle","borderTopColor","borderTopEndRadius","borderTopLeftRadius","borderTopRightRadius","borderTopStartRadius","borderTopWidth","borderWidth","boxShadow","elevation","shadowColor","shadowOffset","shadowOpacity","shadowRadius","opacity","transform","unsafeStyles","flatten","process","env","NODE_ENV","safeStyles","leftButton","tintColor","pressColor","pressOpacity","labelVisible","rightButton","absoluteFill","zIndex","style","content","left","expand","marginStart","maxWidth","width","Math","max","right","children","allowFontScaling","marginEnd","create","flex","flexDirection","alignItems","marginHorizontal","justifyContent","flexGrow","flexBasis"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Animated, Platform, StyleSheet, View, ViewStyle } from 'react-native';\nimport {\n useSafeAreaFrame,\n useSafeAreaInsets,\n} from 'react-native-safe-area-context';\n\nimport type { HeaderOptions, Layout } from '../types';\nimport getDefaultHeaderHeight from './getDefaultHeaderHeight';\nimport HeaderBackground from './HeaderBackground';\nimport HeaderShownContext from './HeaderShownContext';\nimport HeaderTitle from './HeaderTitle';\n\ntype Props = HeaderOptions & {\n /**\n * Whether the header is in a modal\n */\n modal?: boolean;\n /**\n * Layout of the screen.\n */\n layout?: Layout;\n /**\n * Title text for the header.\n */\n title: string;\n};\n\nconst warnIfHeaderStylesDefined = (styles: Record<string, any>) => {\n Object.keys(styles).forEach((styleProp) => {\n const value = styles[styleProp];\n\n if (styleProp === 'position' && value === 'absolute') {\n console.warn(\n \"position: 'absolute' is not supported on headerStyle. If you would like to render content under the header, use the 'headerTransparent' option.\"\n );\n } else if (value !== undefined) {\n console.warn(\n `${styleProp} was given a value of ${value}, this has no effect on headerStyle.`\n );\n }\n });\n};\n\nexport default function Header(props: Props) {\n const insets = useSafeAreaInsets();\n const frame = useSafeAreaFrame();\n\n const isParentHeaderShown = React.useContext(HeaderShownContext);\n\n const {\n layout = frame,\n modal = false,\n title,\n headerTitle: customTitle,\n headerTitleAlign = Platform.select({\n ios: 'center',\n default: 'left',\n }),\n headerLeft,\n headerLeftLabelVisible,\n headerTransparent,\n headerTintColor,\n headerBackground,\n headerRight,\n headerTitleAllowFontScaling: titleAllowFontScaling,\n headerTitleStyle: titleStyle,\n headerLeftContainerStyle: leftContainerStyle,\n headerRightContainerStyle: rightContainerStyle,\n headerTitleContainerStyle: titleContainerStyle,\n headerBackgroundContainerStyle: backgroundContainerStyle,\n headerStyle: customHeaderStyle,\n headerPressColor,\n headerPressOpacity,\n headerStatusBarHeight = isParentHeaderShown ? 0 : insets.top,\n } = props;\n\n const defaultHeight = getDefaultHeaderHeight(\n layout,\n modal,\n headerStatusBarHeight\n );\n\n const {\n height = defaultHeight,\n minHeight,\n maxHeight,\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: web support for shadow\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform,\n ...unsafeStyles\n } = StyleSheet.flatten(customHeaderStyle || {}) as ViewStyle;\n\n if (process.env.NODE_ENV !== 'production') {\n warnIfHeaderStylesDefined(unsafeStyles);\n }\n\n const safeStyles: ViewStyle = {\n backgroundColor,\n borderBottomColor,\n borderBottomEndRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius,\n borderBottomStartRadius,\n borderBottomWidth,\n borderColor,\n borderEndColor,\n borderEndWidth,\n borderLeftColor,\n borderLeftWidth,\n borderRadius,\n borderRightColor,\n borderRightWidth,\n borderStartColor,\n borderStartWidth,\n borderStyle,\n borderTopColor,\n borderTopEndRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderTopStartRadius,\n borderTopWidth,\n borderWidth,\n // @ts-expect-error: boxShadow is only for Web\n boxShadow,\n elevation,\n shadowColor,\n shadowOffset,\n shadowOpacity,\n shadowRadius,\n opacity,\n transform,\n };\n\n // Setting a property to undefined triggers default style\n // So we need to filter them out\n // Users can use `null` instead\n for (const styleProp in safeStyles) {\n // @ts-expect-error: typescript wrongly complains that styleProp cannot be used to index safeStyles\n if (safeStyles[styleProp] === undefined) {\n // @ts-expect-error\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete safeStyles[styleProp];\n }\n }\n\n const leftButton = headerLeft\n ? headerLeft({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity,\n labelVisible: headerLeftLabelVisible,\n })\n : null;\n\n const rightButton = headerRight\n ? headerRight({\n tintColor: headerTintColor,\n pressColor: headerPressColor,\n pressOpacity: headerPressOpacity,\n })\n : null;\n\n const headerTitle =\n typeof customTitle !== 'function'\n ? (props: React.ComponentProps<typeof HeaderTitle>) => (\n <HeaderTitle {...props} />\n )\n : customTitle;\n\n return (\n <React.Fragment>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[\n StyleSheet.absoluteFill,\n { zIndex: 0 },\n backgroundContainerStyle,\n ]}\n >\n {headerBackground ? (\n headerBackground({ style: safeStyles })\n ) : headerTransparent ? null : (\n <HeaderBackground style={safeStyles} />\n )}\n </Animated.View>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[{ height, minHeight, maxHeight, opacity, transform }]}\n >\n <View pointerEvents=\"none\" style={{ height: headerStatusBarHeight }} />\n <View pointerEvents=\"box-none\" style={styles.content}>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[\n styles.left,\n headerTitleAlign === 'center' && styles.expand,\n { marginStart: insets.left },\n leftContainerStyle,\n ]}\n >\n {leftButton}\n </Animated.View>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[\n styles.title,\n {\n // Avoid the title from going offscreen or overlapping buttons\n maxWidth:\n headerTitleAlign === 'center'\n ? layout.width -\n ((leftButton\n ? headerLeftLabelVisible !== false\n ? 80\n : 32\n : 16) +\n Math.max(insets.left, insets.right)) *\n 2\n : layout.width -\n ((leftButton ? 72 : 16) +\n (rightButton ? 72 : 16) +\n insets.left -\n insets.right),\n },\n titleContainerStyle,\n ]}\n >\n {headerTitle({\n children: title,\n allowFontScaling: titleAllowFontScaling,\n tintColor: headerTintColor,\n style: titleStyle,\n })}\n </Animated.View>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[\n styles.right,\n styles.expand,\n { marginEnd: insets.right },\n rightContainerStyle,\n ]}\n >\n {rightButton}\n </Animated.View>\n </View>\n </Animated.View>\n </React.Fragment>\n );\n}\n\nconst styles = StyleSheet.create({\n content: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'stretch',\n },\n title: {\n marginHorizontal: 16,\n justifyContent: 'center',\n },\n left: {\n justifyContent: 'center',\n alignItems: 'flex-start',\n },\n right: {\n justifyContent: 'center',\n alignItems: 'flex-end',\n },\n expand: {\n flexGrow: 1,\n flexBasis: 0,\n },\n});\n"]}
@@ -0,0 +1,203 @@
1
+ import { useTheme } from '@react-navigation/native';
2
+ import * as React from 'react';
3
+ import { Animated, I18nManager, Image, Platform, StyleSheet, View } from 'react-native';
4
+ import MaskedView from '../MaskedView';
5
+ import PlatformPressable from '../PlatformPressable';
6
+ export default function HeaderBackButton({
7
+ disabled,
8
+ allowFontScaling,
9
+ backImage,
10
+ label,
11
+ labelStyle,
12
+ labelVisible,
13
+ onLabelLayout,
14
+ onPress,
15
+ pressColor,
16
+ pressOpacity,
17
+ screenLayout,
18
+ tintColor: customTintColor,
19
+ titleLayout,
20
+ truncatedLabel = 'Back',
21
+ accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',
22
+ testID,
23
+ style
24
+ }) {
25
+ const {
26
+ colors
27
+ } = useTheme();
28
+ const [initialLabelWidth, setInitialLabelWidth] = React.useState(undefined);
29
+ const tintColor = customTintColor !== undefined ? customTintColor : Platform.select({
30
+ ios: colors.primary,
31
+ default: colors.text
32
+ });
33
+
34
+ const handleLabelLayout = e => {
35
+ onLabelLayout === null || onLabelLayout === void 0 ? void 0 : onLabelLayout(e);
36
+ setInitialLabelWidth(e.nativeEvent.layout.x + e.nativeEvent.layout.width);
37
+ };
38
+
39
+ const shouldTruncateLabel = () => {
40
+ return !label || initialLabelWidth && titleLayout && screenLayout && (screenLayout.width - titleLayout.width) / 2 < initialLabelWidth + 26;
41
+ };
42
+
43
+ const renderBackImage = () => {
44
+ if (backImage) {
45
+ return backImage({
46
+ tintColor
47
+ });
48
+ } else {
49
+ return /*#__PURE__*/React.createElement(Image, {
50
+ style: [styles.icon, Boolean(labelVisible) && styles.iconWithLabel, Boolean(tintColor) && {
51
+ tintColor
52
+ }],
53
+ source: require('../assets/back-icon.png'),
54
+ fadeDuration: 0
55
+ });
56
+ }
57
+ };
58
+
59
+ const renderLabel = () => {
60
+ const leftLabelText = shouldTruncateLabel() ? truncatedLabel : label;
61
+
62
+ if (!labelVisible || leftLabelText === undefined) {
63
+ return null;
64
+ }
65
+
66
+ const labelElement = /*#__PURE__*/React.createElement(View, {
67
+ style: screenLayout ? // We make the button extend till the middle of the screen
68
+ // Otherwise it appears to cut off when translating
69
+ [styles.labelWrapper, {
70
+ minWidth: screenLayout.width / 2 - 27
71
+ }] : null
72
+ }, /*#__PURE__*/React.createElement(Animated.Text, {
73
+ accessible: false,
74
+ onLayout: // This measurement is used to determine if we should truncate the label when it doesn't fit
75
+ // Only measure it when label is not truncated because we want the measurement of full label
76
+ leftLabelText === label ? handleLabelLayout : undefined,
77
+ style: [styles.label, tintColor ? {
78
+ color: tintColor
79
+ } : null, labelStyle],
80
+ numberOfLines: 1,
81
+ allowFontScaling: !!allowFontScaling
82
+ }, leftLabelText));
83
+
84
+ if (backImage || Platform.OS !== 'ios') {
85
+ // When a custom backimage is specified, we can't mask the label
86
+ // Otherwise there might be weird effect due to our mask not being the same as the image
87
+ return labelElement;
88
+ }
89
+
90
+ return /*#__PURE__*/React.createElement(MaskedView, {
91
+ maskElement: /*#__PURE__*/React.createElement(View, {
92
+ style: styles.iconMaskContainer
93
+ }, /*#__PURE__*/React.createElement(Image, {
94
+ source: require('../assets/back-icon-mask.png'),
95
+ style: styles.iconMask
96
+ }), /*#__PURE__*/React.createElement(View, {
97
+ style: styles.iconMaskFillerRect
98
+ }))
99
+ }, labelElement);
100
+ };
101
+
102
+ const handlePress = () => onPress && requestAnimationFrame(onPress);
103
+
104
+ return /*#__PURE__*/React.createElement(PlatformPressable, {
105
+ disabled: disabled,
106
+ accessible: true,
107
+ accessibilityRole: "button",
108
+ accessibilityLabel: accessibilityLabel,
109
+ testID: testID,
110
+ onPress: disabled ? undefined : handlePress,
111
+ pressColor: pressColor,
112
+ pressOpacity: pressOpacity,
113
+ android_ripple: {
114
+ borderless: true
115
+ },
116
+ style: [styles.container, disabled && styles.disabled, style],
117
+ hitSlop: Platform.select({
118
+ ios: undefined,
119
+ default: {
120
+ top: 16,
121
+ right: 16,
122
+ bottom: 16,
123
+ left: 16
124
+ }
125
+ })
126
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, renderBackImage(), renderLabel()));
127
+ }
128
+ const styles = StyleSheet.create({
129
+ container: {
130
+ alignItems: 'center',
131
+ flexDirection: 'row',
132
+ minWidth: StyleSheet.hairlineWidth,
133
+ // Avoid collapsing when title is long
134
+ ...Platform.select({
135
+ ios: null,
136
+ default: {
137
+ marginVertical: 3,
138
+ marginHorizontal: 11
139
+ }
140
+ })
141
+ },
142
+ disabled: {
143
+ opacity: 0.5
144
+ },
145
+ label: {
146
+ fontSize: 17,
147
+ // Title and back label are a bit different width due to title being bold
148
+ // Adjusting the letterSpacing makes them coincide better
149
+ letterSpacing: 0.35
150
+ },
151
+ labelWrapper: {
152
+ // These styles will make sure that the label doesn't fill the available space
153
+ // Otherwise it messes with the measurement of the label
154
+ flexDirection: 'row',
155
+ alignItems: 'flex-start'
156
+ },
157
+ icon: Platform.select({
158
+ ios: {
159
+ height: 21,
160
+ width: 13,
161
+ marginLeft: 8,
162
+ marginRight: 22,
163
+ marginVertical: 12,
164
+ resizeMode: 'contain',
165
+ transform: [{
166
+ scaleX: I18nManager.isRTL ? -1 : 1
167
+ }]
168
+ },
169
+ default: {
170
+ height: 24,
171
+ width: 24,
172
+ margin: 3,
173
+ resizeMode: 'contain',
174
+ transform: [{
175
+ scaleX: I18nManager.isRTL ? -1 : 1
176
+ }]
177
+ }
178
+ }),
179
+ iconWithLabel: Platform.OS === 'ios' ? {
180
+ marginRight: 6
181
+ } : {},
182
+ iconMaskContainer: {
183
+ flex: 1,
184
+ flexDirection: 'row',
185
+ justifyContent: 'center'
186
+ },
187
+ iconMaskFillerRect: {
188
+ flex: 1,
189
+ backgroundColor: '#000'
190
+ },
191
+ iconMask: {
192
+ height: 21,
193
+ width: 13,
194
+ marginLeft: -14.5,
195
+ marginVertical: 12,
196
+ alignSelf: 'center',
197
+ resizeMode: 'contain',
198
+ transform: [{
199
+ scaleX: I18nManager.isRTL ? -1 : 1
200
+ }]
201
+ }
202
+ });
203
+ //# sourceMappingURL=HeaderBackButton.js.map
@@ -0,0 +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":"AAAA,SAASA,QAAT,QAAyB,0BAAzB;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SACEC,QADF,EAEEC,WAFF,EAGEC,KAHF,EAKEC,QALF,EAMEC,UANF,EAOEC,IAPF,QAQO,cARP;AAUA,OAAOC,UAAP,MAAuB,eAAvB;AACA,OAAOC,iBAAP,MAA8B,sBAA9B;AAGA,eAAe,SAASC,gBAAT,CAA0B;AACvCC,EAAAA,QADuC;AAEvCC,EAAAA,gBAFuC;AAGvCC,EAAAA,SAHuC;AAIvCC,EAAAA,KAJuC;AAKvCC,EAAAA,UALuC;AAMvCC,EAAAA,YANuC;AAOvCC,EAAAA,aAPuC;AAQvCC,EAAAA,OARuC;AASvCC,EAAAA,UATuC;AAUvCC,EAAAA,YAVuC;AAWvCC,EAAAA,YAXuC;AAYvCC,EAAAA,SAAS,EAAEC,eAZ4B;AAavCC,EAAAA,WAbuC;AAcvCC,EAAAA,cAAc,GAAG,MAdsB;AAevCC,EAAAA,kBAAkB,GAAGZ,KAAK,IAAIA,KAAK,KAAK,MAAnB,GAA6B,GAAEA,KAAM,QAArC,GAA+C,SAf7B;AAgBvCa,EAAAA,MAhBuC;AAiBvCC,EAAAA;AAjBuC,CAA1B,EAkBW;AACxB,QAAM;AAAEC,IAAAA;AAAF,MAAa7B,QAAQ,EAA3B;AAEA,QAAM,CAAC8B,iBAAD,EAAoBC,oBAApB,IACJ9B,KAAK,CAAC+B,QAAN,CAAmCC,SAAnC,CADF;AAGA,QAAMX,SAAS,GACbC,eAAe,KAAKU,SAApB,GACIV,eADJ,GAEIlB,QAAQ,CAAC6B,MAAT,CAAgB;AACdC,IAAAA,GAAG,EAAEN,MAAM,CAACO,OADE;AAEdC,IAAAA,OAAO,EAAER,MAAM,CAACS;AAFF,GAAhB,CAHN;;AAQA,QAAMC,iBAAiB,GAAIC,CAAD,IAA0B;AAClDvB,IAAAA,aAAa,SAAb,IAAAA,aAAa,WAAb,YAAAA,aAAa,CAAGuB,CAAH,CAAb;AAEAT,IAAAA,oBAAoB,CAACS,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBC,CAArB,GAAyBH,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBE,KAA/C,CAApB;AACD,GAJD;;AAMA,QAAMC,mBAAmB,GAAG,MAAM;AAChC,WACE,CAAC/B,KAAD,IACCgB,iBAAiB,IAChBN,WADD,IAECH,YAFD,IAGC,CAACA,YAAY,CAACuB,KAAb,GAAqBpB,WAAW,CAACoB,KAAlC,IAA2C,CAA3C,GAA+Cd,iBAAiB,GAAG,EALvE;AAOD,GARD;;AAUA,QAAMgB,eAAe,GAAG,MAAM;AAC5B,QAAIjC,SAAJ,EAAe;AACb,aAAOA,SAAS,CAAC;AAAES,QAAAA;AAAF,OAAD,CAAhB;AACD,KAFD,MAEO;AACL,0BACE,oBAAC,KAAD;AACE,QAAA,KAAK,EAAE,CACLyB,MAAM,CAACC,IADF,EAELC,OAAO,CAACjC,YAAD,CAAP,IAAyB+B,MAAM,CAACG,aAF3B,EAGLD,OAAO,CAAC3B,SAAD,CAAP,IAAsB;AAAEA,UAAAA;AAAF,SAHjB,CADT;AAME,QAAA,MAAM,EAAE6B,OAAO,CAAC,yBAAD,CANjB;AAOE,QAAA,YAAY,EAAE;AAPhB,QADF;AAWD;AACF,GAhBD;;AAkBA,QAAMC,WAAW,GAAG,MAAM;AACxB,UAAMC,aAAa,GAAGR,mBAAmB,KAAKpB,cAAL,GAAsBX,KAA/D;;AAEA,QAAI,CAACE,YAAD,IAAiBqC,aAAa,KAAKpB,SAAvC,EAAkD;AAChD,aAAO,IAAP;AACD;;AAED,UAAMqB,YAAY,gBAChB,oBAAC,IAAD;AACE,MAAA,KAAK,EACHjC,YAAY,GACR;AACA;AACA,OAAC0B,MAAM,CAACQ,YAAR,EAAsB;AAAEC,QAAAA,QAAQ,EAAEnC,YAAY,CAACuB,KAAb,GAAqB,CAArB,GAAyB;AAArC,OAAtB,CAHQ,GAIR;AANR,oBASE,oBAAC,QAAD,CAAU,IAAV;AACE,MAAA,UAAU,EAAE,KADd;AAEE,MAAA,QAAQ,EACN;AACA;AACAS,MAAAA,aAAa,KAAKvC,KAAlB,GAA0ByB,iBAA1B,GAA8CN,SALlD;AAOE,MAAA,KAAK,EAAE,CACLc,MAAM,CAACjC,KADF,EAELQ,SAAS,GAAG;AAAEmC,QAAAA,KAAK,EAAEnC;AAAT,OAAH,GAA0B,IAF9B,EAGLP,UAHK,CAPT;AAYE,MAAA,aAAa,EAAE,CAZjB;AAaE,MAAA,gBAAgB,EAAE,CAAC,CAACH;AAbtB,OAeGyC,aAfH,CATF,CADF;;AA8BA,QAAIxC,SAAS,IAAIR,QAAQ,CAACqD,EAAT,KAAgB,KAAjC,EAAwC;AACtC;AACA;AACA,aAAOJ,YAAP;AACD;;AAED,wBACE,oBAAC,UAAD;AACE,MAAA,WAAW,eACT,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAEP,MAAM,CAACY;AAApB,sBACE,oBAAC,KAAD;AACE,QAAA,MAAM,EAAER,OAAO,CAAC,8BAAD,CADjB;AAEE,QAAA,KAAK,EAAEJ,MAAM,CAACa;AAFhB,QADF,eAKE,oBAAC,IAAD;AAAM,QAAA,KAAK,EAAEb,MAAM,CAACc;AAApB,QALF;AAFJ,OAWGP,YAXH,CADF;AAeD,GA1DD;;AA4DA,QAAMQ,WAAW,GAAG,MAAM5C,OAAO,IAAI6C,qBAAqB,CAAC7C,OAAD,CAA1D;;AAEA,sBACE,oBAAC,iBAAD;AACE,IAAA,QAAQ,EAAEP,QADZ;AAEE,IAAA,UAAU,MAFZ;AAGE,IAAA,iBAAiB,EAAC,QAHpB;AAIE,IAAA,kBAAkB,EAAEe,kBAJtB;AAKE,IAAA,MAAM,EAAEC,MALV;AAME,IAAA,OAAO,EAAEhB,QAAQ,GAAGsB,SAAH,GAAe6B,WANlC;AAOE,IAAA,UAAU,EAAE3C,UAPd;AAQE,IAAA,YAAY,EAAEC,YARhB;AASE,IAAA,cAAc,EAAE;AAAE4C,MAAAA,UAAU,EAAE;AAAd,KATlB;AAUE,IAAA,KAAK,EAAE,CAACjB,MAAM,CAACkB,SAAR,EAAmBtD,QAAQ,IAAIoC,MAAM,CAACpC,QAAtC,EAAgDiB,KAAhD,CAVT;AAWE,IAAA,OAAO,EAAEvB,QAAQ,CAAC6B,MAAT,CAAgB;AACvBC,MAAAA,GAAG,EAAEF,SADkB;AAEvBI,MAAAA,OAAO,EAAE;AAAE6B,QAAAA,GAAG,EAAE,EAAP;AAAWC,QAAAA,KAAK,EAAE,EAAlB;AAAsBC,QAAAA,MAAM,EAAE,EAA9B;AAAkCC,QAAAA,IAAI,EAAE;AAAxC;AAFc,KAAhB;AAXX,kBAgBE,oBAAC,KAAD,CAAO,QAAP,QACGvB,eAAe,EADlB,EAEGM,WAAW,EAFd,CAhBF,CADF;AAuBD;AAED,MAAML,MAAM,GAAGzC,UAAU,CAACgE,MAAX,CAAkB;AAC/BL,EAAAA,SAAS,EAAE;AACTM,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,aAAa,EAAE,KAFN;AAGThB,IAAAA,QAAQ,EAAElD,UAAU,CAACmE,aAHZ;AAG2B;AACpC,OAAGpE,QAAQ,CAAC6B,MAAT,CAAgB;AACjBC,MAAAA,GAAG,EAAE,IADY;AAEjBE,MAAAA,OAAO,EAAE;AACPqC,QAAAA,cAAc,EAAE,CADT;AAEPC,QAAAA,gBAAgB,EAAE;AAFX;AAFQ,KAAhB;AAJM,GADoB;AAa/BhE,EAAAA,QAAQ,EAAE;AACRiE,IAAAA,OAAO,EAAE;AADD,GAbqB;AAgB/B9D,EAAAA,KAAK,EAAE;AACL+D,IAAAA,QAAQ,EAAE,EADL;AAEL;AACA;AACAC,IAAAA,aAAa,EAAE;AAJV,GAhBwB;AAsB/BvB,EAAAA,YAAY,EAAE;AACZ;AACA;AACAiB,IAAAA,aAAa,EAAE,KAHH;AAIZD,IAAAA,UAAU,EAAE;AAJA,GAtBiB;AA4B/BvB,EAAAA,IAAI,EAAE3C,QAAQ,CAAC6B,MAAT,CAAgB;AACpBC,IAAAA,GAAG,EAAE;AACH4C,MAAAA,MAAM,EAAE,EADL;AAEHnC,MAAAA,KAAK,EAAE,EAFJ;AAGHoC,MAAAA,UAAU,EAAE,CAHT;AAIHC,MAAAA,WAAW,EAAE,EAJV;AAKHP,MAAAA,cAAc,EAAE,EALb;AAMHQ,MAAAA,UAAU,EAAE,SANT;AAOHC,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,MAAM,EAAEjF,WAAW,CAACkF,KAAZ,GAAoB,CAAC,CAArB,GAAyB;AAAnC,OAAD;AAPR,KADe;AAUpBhD,IAAAA,OAAO,EAAE;AACP0C,MAAAA,MAAM,EAAE,EADD;AAEPnC,MAAAA,KAAK,EAAE,EAFA;AAGP0C,MAAAA,MAAM,EAAE,CAHD;AAIPJ,MAAAA,UAAU,EAAE,SAJL;AAKPC,MAAAA,SAAS,EAAE,CAAC;AAAEC,QAAAA,MAAM,EAAEjF,WAAW,CAACkF,KAAZ,GAAoB,CAAC,CAArB,GAAyB;AAAnC,OAAD;AALJ;AAVW,GAAhB,CA5ByB;AA8C/BnC,EAAAA,aAAa,EACX7C,QAAQ,CAACqD,EAAT,KAAgB,KAAhB,GACI;AACEuB,IAAAA,WAAW,EAAE;AADf,GADJ,GAII,EAnDyB;AAoD/BtB,EAAAA,iBAAiB,EAAE;AACjB4B,IAAAA,IAAI,EAAE,CADW;AAEjBf,IAAAA,aAAa,EAAE,KAFE;AAGjBgB,IAAAA,cAAc,EAAE;AAHC,GApDY;AAyD/B3B,EAAAA,kBAAkB,EAAE;AAClB0B,IAAAA,IAAI,EAAE,CADY;AAElBE,IAAAA,eAAe,EAAE;AAFC,GAzDW;AA6D/B7B,EAAAA,QAAQ,EAAE;AACRmB,IAAAA,MAAM,EAAE,EADA;AAERnC,IAAAA,KAAK,EAAE,EAFC;AAGRoC,IAAAA,UAAU,EAAE,CAAC,IAHL;AAIRN,IAAAA,cAAc,EAAE,EAJR;AAKRgB,IAAAA,SAAS,EAAE,QALH;AAMRR,IAAAA,UAAU,EAAE,SANJ;AAORC,IAAAA,SAAS,EAAE,CAAC;AAAEC,MAAAA,MAAM,EAAEjF,WAAW,CAACkF,KAAZ,GAAoB,CAAC,CAArB,GAAyB;AAAnC,KAAD;AAPH;AA7DqB,CAAlB,CAAf","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] =\n React.useState<undefined | number>(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"]}
@@ -0,0 +1,4 @@
1
+ import getNamedContext from '../getNamedContext';
2
+ const HeaderBackContext = getNamedContext('HeaderBackContext', undefined);
3
+ export default HeaderBackContext;
4
+ //# sourceMappingURL=HeaderBackContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["HeaderBackContext.tsx"],"names":["getNamedContext","HeaderBackContext","undefined"],"mappings":"AAAA,OAAOA,eAAP,MAA4B,oBAA5B;AAEA,MAAMC,iBAAiB,GAAGD,eAAe,CACvC,mBADuC,EAEvCE,SAFuC,CAAzC;AAKA,eAAeD,iBAAf","sourcesContent":["import getNamedContext from '../getNamedContext';\n\nconst HeaderBackContext = getNamedContext<{ title: string } | undefined>(\n 'HeaderBackContext',\n undefined\n);\n\nexport default HeaderBackContext;\n"]}
@@ -0,0 +1,42 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import { useTheme } from '@react-navigation/native';
4
+ import * as React from 'react';
5
+ import { Animated, Platform, StyleSheet } from 'react-native';
6
+ export default function HeaderBackground({
7
+ style,
8
+ ...rest
9
+ }) {
10
+ const {
11
+ colors
12
+ } = useTheme();
13
+ return /*#__PURE__*/React.createElement(Animated.View, _extends({
14
+ style: [styles.container, {
15
+ backgroundColor: colors.card,
16
+ borderBottomColor: colors.border,
17
+ shadowColor: colors.border
18
+ }, style]
19
+ }, rest));
20
+ }
21
+ const styles = StyleSheet.create({
22
+ container: {
23
+ flex: 1,
24
+ ...Platform.select({
25
+ android: {
26
+ elevation: 4
27
+ },
28
+ ios: {
29
+ shadowOpacity: 0.85,
30
+ shadowRadius: 0,
31
+ shadowOffset: {
32
+ width: 0,
33
+ height: StyleSheet.hairlineWidth
34
+ }
35
+ },
36
+ default: {
37
+ borderBottomWidth: StyleSheet.hairlineWidth
38
+ }
39
+ })
40
+ }
41
+ });
42
+ //# sourceMappingURL=HeaderBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["HeaderBackground.tsx"],"names":["useTheme","React","Animated","Platform","StyleSheet","HeaderBackground","style","rest","colors","styles","container","backgroundColor","card","borderBottomColor","border","shadowColor","create","flex","select","android","elevation","ios","shadowOpacity","shadowRadius","shadowOffset","width","height","hairlineWidth","default","borderBottomWidth"],"mappings":";;AAAA,SAASA,QAAT,QAAyB,0BAAzB;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SACEC,QADF,EAEEC,QAFF,EAIEC,UAJF,QAOO,cAPP;AAcA,eAAe,SAASC,gBAAT,CAA0B;AAAEC,EAAAA,KAAF;AAAS,KAAGC;AAAZ,CAA1B,EAAqD;AAClE,QAAM;AAAEC,IAAAA;AAAF,MAAaR,QAAQ,EAA3B;AAEA,sBACE,oBAAC,QAAD,CAAU,IAAV;AACE,IAAA,KAAK,EAAE,CACLS,MAAM,CAACC,SADF,EAEL;AACEC,MAAAA,eAAe,EAAEH,MAAM,CAACI,IAD1B;AAEEC,MAAAA,iBAAiB,EAAEL,MAAM,CAACM,MAF5B;AAGEC,MAAAA,WAAW,EAAEP,MAAM,CAACM;AAHtB,KAFK,EAOLR,KAPK;AADT,KAUMC,IAVN,EADF;AAcD;AAED,MAAME,MAAM,GAAGL,UAAU,CAACY,MAAX,CAAkB;AAC/BN,EAAAA,SAAS,EAAE;AACTO,IAAAA,IAAI,EAAE,CADG;AAET,OAAGd,QAAQ,CAACe,MAAT,CAAgB;AACjBC,MAAAA,OAAO,EAAE;AACPC,QAAAA,SAAS,EAAE;AADJ,OADQ;AAIjBC,MAAAA,GAAG,EAAE;AACHC,QAAAA,aAAa,EAAE,IADZ;AAEHC,QAAAA,YAAY,EAAE,CAFX;AAGHC,QAAAA,YAAY,EAAE;AACZC,UAAAA,KAAK,EAAE,CADK;AAEZC,UAAAA,MAAM,EAAEtB,UAAU,CAACuB;AAFP;AAHX,OAJY;AAYjBC,MAAAA,OAAO,EAAE;AACPC,QAAAA,iBAAiB,EAAEzB,UAAU,CAACuB;AADvB;AAZQ,KAAhB;AAFM;AADoB,CAAlB,CAAf","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n StyleSheet,\n ViewProps,\n ViewStyle,\n} from 'react-native';\n\ntype Props = ViewProps & {\n style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;\n children?: React.ReactNode;\n};\n\nexport default function HeaderBackground({ style, ...rest }: Props) {\n const { colors } = useTheme();\n\n return (\n <Animated.View\n style={[\n styles.container,\n {\n backgroundColor: colors.card,\n borderBottomColor: colors.border,\n shadowColor: colors.border,\n },\n style,\n ]}\n {...rest}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n ...Platform.select({\n android: {\n elevation: 4,\n },\n ios: {\n shadowOpacity: 0.85,\n shadowRadius: 0,\n shadowOffset: {\n width: 0,\n height: StyleSheet.hairlineWidth,\n },\n },\n default: {\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n }),\n },\n});\n"]}
@@ -0,0 +1,4 @@
1
+ import getNamedContext from '../getNamedContext';
2
+ const HeaderHeightContext = getNamedContext('HeaderHeightContext', undefined);
3
+ export default HeaderHeightContext;
4
+ //# sourceMappingURL=HeaderHeightContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["HeaderHeightContext.tsx"],"names":["getNamedContext","HeaderHeightContext","undefined"],"mappings":"AAAA,OAAOA,eAAP,MAA4B,oBAA5B;AAEA,MAAMC,mBAAmB,GAAGD,eAAe,CACzC,qBADyC,EAEzCE,SAFyC,CAA3C;AAKA,eAAeD,mBAAf","sourcesContent":["import getNamedContext from '../getNamedContext';\n\nconst HeaderHeightContext = getNamedContext<number | undefined>(\n 'HeaderHeightContext',\n undefined\n);\n\nexport default HeaderHeightContext;\n"]}
@@ -0,0 +1,4 @@
1
+ import getNamedContext from '../getNamedContext';
2
+ const HeaderShownContext = getNamedContext('HeaderShownContext', false);
3
+ export default HeaderShownContext;
4
+ //# sourceMappingURL=HeaderShownContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["HeaderShownContext.tsx"],"names":["getNamedContext","HeaderShownContext"],"mappings":"AAAA,OAAOA,eAAP,MAA4B,oBAA5B;AAEA,MAAMC,kBAAkB,GAAGD,eAAe,CAAC,oBAAD,EAAuB,KAAvB,CAA1C;AAEA,eAAeC,kBAAf","sourcesContent":["import getNamedContext from '../getNamedContext';\n\nconst HeaderShownContext = getNamedContext('HeaderShownContext', false);\n\nexport default HeaderShownContext;\n"]}
@@ -0,0 +1,41 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import { useTheme } from '@react-navigation/native';
4
+ import * as React from 'react';
5
+ import { Animated, Platform, StyleSheet } from 'react-native';
6
+ export default function HeaderTitle({
7
+ tintColor,
8
+ style,
9
+ ...rest
10
+ }) {
11
+ const {
12
+ colors
13
+ } = useTheme();
14
+ return /*#__PURE__*/React.createElement(Animated.Text, _extends({
15
+ accessibilityRole: "header",
16
+ "aria-level": "1",
17
+ numberOfLines: 1
18
+ }, rest, {
19
+ style: [styles.title, {
20
+ color: tintColor === undefined ? colors.text : tintColor
21
+ }, style]
22
+ }));
23
+ }
24
+ const styles = StyleSheet.create({
25
+ title: Platform.select({
26
+ ios: {
27
+ fontSize: 17,
28
+ fontWeight: '600'
29
+ },
30
+ android: {
31
+ fontSize: 20,
32
+ fontFamily: 'sans-serif-medium',
33
+ fontWeight: 'normal'
34
+ },
35
+ default: {
36
+ fontSize: 18,
37
+ fontWeight: '500'
38
+ }
39
+ })
40
+ });
41
+ //# sourceMappingURL=HeaderTitle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["HeaderTitle.tsx"],"names":["useTheme","React","Animated","Platform","StyleSheet","HeaderTitle","tintColor","style","rest","colors","styles","title","color","undefined","text","create","select","ios","fontSize","fontWeight","android","fontFamily","default"],"mappings":";;AAAA,SAASA,QAAT,QAAyB,0BAAzB;AACA,OAAO,KAAKC,KAAZ,MAAuB,OAAvB;AACA,SACEC,QADF,EAEEC,QAFF,EAIEC,UAJF,QAOO,cAPP;AAeA,eAAe,SAASC,WAAT,CAAqB;AAAEC,EAAAA,SAAF;AAAaC,EAAAA,KAAb;AAAoB,KAAGC;AAAvB,CAArB,EAA2D;AACxE,QAAM;AAAEC,IAAAA;AAAF,MAAaT,QAAQ,EAA3B;AAEA,sBACE,oBAAC,QAAD,CAAU,IAAV;AACE,IAAA,iBAAiB,EAAC,QADpB;AAEE,kBAAW,GAFb;AAGE,IAAA,aAAa,EAAE;AAHjB,KAIMQ,IAJN;AAKE,IAAA,KAAK,EAAE,CACLE,MAAM,CAACC,KADF,EAEL;AAAEC,MAAAA,KAAK,EAAEN,SAAS,KAAKO,SAAd,GAA0BJ,MAAM,CAACK,IAAjC,GAAwCR;AAAjD,KAFK,EAGLC,KAHK;AALT,KADF;AAaD;AAED,MAAMG,MAAM,GAAGN,UAAU,CAACW,MAAX,CAAkB;AAC/BJ,EAAAA,KAAK,EAAER,QAAQ,CAACa,MAAT,CAAgB;AACrBC,IAAAA,GAAG,EAAE;AACHC,MAAAA,QAAQ,EAAE,EADP;AAEHC,MAAAA,UAAU,EAAE;AAFT,KADgB;AAKrBC,IAAAA,OAAO,EAAE;AACPF,MAAAA,QAAQ,EAAE,EADH;AAEPG,MAAAA,UAAU,EAAE,mBAFL;AAGPF,MAAAA,UAAU,EAAE;AAHL,KALY;AAUrBG,IAAAA,OAAO,EAAE;AACPJ,MAAAA,QAAQ,EAAE,EADH;AAEPC,MAAAA,UAAU,EAAE;AAFL;AAVY,GAAhB;AADwB,CAAlB,CAAf","sourcesContent":["import { useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport {\n Animated,\n Platform,\n StyleProp,\n StyleSheet,\n TextProps,\n TextStyle,\n} from 'react-native';\n\ntype Props = Omit<TextProps, 'style'> & {\n tintColor?: string;\n children?: string;\n style?: Animated.WithAnimatedValue<StyleProp<TextStyle>>;\n};\n\nexport default function HeaderTitle({ tintColor, style, ...rest }: Props) {\n const { colors } = useTheme();\n\n return (\n <Animated.Text\n accessibilityRole=\"header\"\n aria-level=\"1\"\n numberOfLines={1}\n {...rest}\n style={[\n styles.title,\n { color: tintColor === undefined ? colors.text : tintColor },\n style,\n ]}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n title: Platform.select({\n ios: {\n fontSize: 17,\n fontWeight: '600',\n },\n android: {\n fontSize: 20,\n fontFamily: 'sans-serif-medium',\n fontWeight: 'normal',\n },\n default: {\n fontSize: 18,\n fontWeight: '500',\n },\n }),\n});\n"]}
@@ -0,0 +1,32 @@
1
+ import { Platform } from 'react-native';
2
+ export default function getDefaultHeaderHeight(layout, modalPresentation, statusBarHeight) {
3
+ let headerHeight;
4
+ const isLandscape = layout.width > layout.height;
5
+
6
+ if (Platform.OS === 'ios') {
7
+ if (Platform.isPad) {
8
+ if (modalPresentation) {
9
+ headerHeight = 56;
10
+ } else {
11
+ headerHeight = 50;
12
+ }
13
+ } else {
14
+ if (isLandscape) {
15
+ headerHeight = 32;
16
+ } else {
17
+ if (modalPresentation) {
18
+ headerHeight = 56;
19
+ } else {
20
+ headerHeight = 44;
21
+ }
22
+ }
23
+ }
24
+ } else if (Platform.OS === 'android') {
25
+ headerHeight = 56;
26
+ } else {
27
+ headerHeight = 64;
28
+ }
29
+
30
+ return headerHeight + statusBarHeight;
31
+ }
32
+ //# sourceMappingURL=getDefaultHeaderHeight.js.map