@react-native-ohos/elements 2.3.9-rc.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 (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.OpenSource +11 -0
  3. package/README.md +9 -0
  4. package/lib/module/Background.js +22 -0
  5. package/lib/module/Background.js.map +1 -0
  6. package/lib/module/Button.js +106 -0
  7. package/lib/module/Button.js.map +1 -0
  8. package/lib/module/Header/Header.js +338 -0
  9. package/lib/module/Header/Header.js.map +1 -0
  10. package/lib/module/Header/HeaderBackButton.js +188 -0
  11. package/lib/module/Header/HeaderBackButton.js.map +1 -0
  12. package/lib/module/Header/HeaderBackContext.js +5 -0
  13. package/lib/module/Header/HeaderBackContext.js.map +1 -0
  14. package/lib/module/Header/HeaderBackground.js +47 -0
  15. package/lib/module/Header/HeaderBackground.js.map +1 -0
  16. package/lib/module/Header/HeaderButton.js +56 -0
  17. package/lib/module/Header/HeaderButton.js.map +1 -0
  18. package/lib/module/Header/HeaderHeightContext.js +5 -0
  19. package/lib/module/Header/HeaderHeightContext.js.map +1 -0
  20. package/lib/module/Header/HeaderIcon.js +38 -0
  21. package/lib/module/Header/HeaderIcon.js.map +1 -0
  22. package/lib/module/Header/HeaderSearchBar.js +288 -0
  23. package/lib/module/Header/HeaderSearchBar.js.map +1 -0
  24. package/lib/module/Header/HeaderShownContext.js +5 -0
  25. package/lib/module/Header/HeaderShownContext.js.map +1 -0
  26. package/lib/module/Header/HeaderTitle.js +41 -0
  27. package/lib/module/Header/HeaderTitle.js.map +1 -0
  28. package/lib/module/Header/getDefaultHeaderHeight.js +45 -0
  29. package/lib/module/Header/getDefaultHeaderHeight.js.map +1 -0
  30. package/lib/module/Header/getHeaderTitle.js +6 -0
  31. package/lib/module/Header/getHeaderTitle.js.map +1 -0
  32. package/lib/module/Header/useHeaderHeight.js +12 -0
  33. package/lib/module/Header/useHeaderHeight.js.map +1 -0
  34. package/lib/module/Label/Label.js +25 -0
  35. package/lib/module/Label/Label.js.map +1 -0
  36. package/lib/module/Label/getLabel.js +6 -0
  37. package/lib/module/Label/getLabel.js.map +1 -0
  38. package/lib/module/MaskedView.android.js +4 -0
  39. package/lib/module/MaskedView.android.js.map +1 -0
  40. package/lib/module/MaskedView.ios.js +4 -0
  41. package/lib/module/MaskedView.ios.js.map +1 -0
  42. package/lib/module/MaskedView.js +12 -0
  43. package/lib/module/MaskedView.js.map +1 -0
  44. package/lib/module/MaskedViewNative.js +30 -0
  45. package/lib/module/MaskedViewNative.js.map +1 -0
  46. package/lib/module/MissingIcon.js +24 -0
  47. package/lib/module/MissingIcon.js.map +1 -0
  48. package/lib/module/PlatformPressable.js +141 -0
  49. package/lib/module/PlatformPressable.js.map +1 -0
  50. package/lib/module/ResourceSavingView.js +57 -0
  51. package/lib/module/ResourceSavingView.js.map +1 -0
  52. package/lib/module/SafeAreaProviderCompat.js +58 -0
  53. package/lib/module/SafeAreaProviderCompat.js.map +1 -0
  54. package/lib/module/Screen.js +83 -0
  55. package/lib/module/Screen.js.map +1 -0
  56. package/lib/module/Text.js +22 -0
  57. package/lib/module/Text.js.map +1 -0
  58. package/lib/module/assets/back-icon-mask.png +0 -0
  59. package/lib/module/assets/back-icon.png +0 -0
  60. package/lib/module/assets/back-icon@1x.android.png +0 -0
  61. package/lib/module/assets/back-icon@1x.ios.png +0 -0
  62. package/lib/module/assets/back-icon@2x.android.png +0 -0
  63. package/lib/module/assets/back-icon@2x.ios.png +0 -0
  64. package/lib/module/assets/back-icon@3x.android.png +0 -0
  65. package/lib/module/assets/back-icon@3x.ios.png +0 -0
  66. package/lib/module/assets/back-icon@4x.android.png +0 -0
  67. package/lib/module/assets/back-icon@4x.ios.png +0 -0
  68. package/lib/module/assets/clear-icon.png +0 -0
  69. package/lib/module/assets/clear-icon@1x.png +0 -0
  70. package/lib/module/assets/clear-icon@2x.png +0 -0
  71. package/lib/module/assets/clear-icon@3x.png +0 -0
  72. package/lib/module/assets/clear-icon@4x.png +0 -0
  73. package/lib/module/assets/close-icon.png +0 -0
  74. package/lib/module/assets/close-icon@1x.png +0 -0
  75. package/lib/module/assets/close-icon@2x.png +0 -0
  76. package/lib/module/assets/close-icon@3x.png +0 -0
  77. package/lib/module/assets/close-icon@4x.png +0 -0
  78. package/lib/module/assets/search-icon.png +0 -0
  79. package/lib/module/assets/search-icon@1x.android.png +0 -0
  80. package/lib/module/assets/search-icon@1x.ios.png +0 -0
  81. package/lib/module/assets/search-icon@2x.android.png +0 -0
  82. package/lib/module/assets/search-icon@2x.ios.png +0 -0
  83. package/lib/module/assets/search-icon@3x.android.png +0 -0
  84. package/lib/module/assets/search-icon@3x.ios.png +0 -0
  85. package/lib/module/assets/search-icon@4x.android.png +0 -0
  86. package/lib/module/assets/search-icon@4x.ios.png +0 -0
  87. package/lib/module/getDefaultSidebarWidth.js +18 -0
  88. package/lib/module/getDefaultSidebarWidth.js.map +1 -0
  89. package/lib/module/getNamedContext.js +17 -0
  90. package/lib/module/getNamedContext.js.map +1 -0
  91. package/lib/module/index.js +32 -0
  92. package/lib/module/index.js.map +1 -0
  93. package/lib/module/package.json +1 -0
  94. package/lib/module/types.js +4 -0
  95. package/lib/module/types.js.map +1 -0
  96. package/lib/typescript/package.json +1 -0
  97. package/lib/typescript/src/Background.d.ts +9 -0
  98. package/lib/typescript/src/Background.d.ts.map +1 -0
  99. package/lib/typescript/src/Button.d.ts +13 -0
  100. package/lib/typescript/src/Button.d.ts.map +1 -0
  101. package/lib/typescript/src/Header/Header.d.ts +31 -0
  102. package/lib/typescript/src/Header/Header.d.ts.map +1 -0
  103. package/lib/typescript/src/Header/HeaderBackButton.d.ts +3 -0
  104. package/lib/typescript/src/Header/HeaderBackButton.d.ts.map +1 -0
  105. package/lib/typescript/src/Header/HeaderBackContext.d.ts +5 -0
  106. package/lib/typescript/src/Header/HeaderBackContext.d.ts.map +1 -0
  107. package/lib/typescript/src/Header/HeaderBackground.d.ts +9 -0
  108. package/lib/typescript/src/Header/HeaderBackground.d.ts.map +1 -0
  109. package/lib/typescript/src/Header/HeaderButton.d.ts +3 -0
  110. package/lib/typescript/src/Header/HeaderButton.d.ts.map +1 -0
  111. package/lib/typescript/src/Header/HeaderHeightContext.d.ts +2 -0
  112. package/lib/typescript/src/Header/HeaderHeightContext.d.ts.map +1 -0
  113. package/lib/typescript/src/Header/HeaderIcon.d.ts +5 -0
  114. package/lib/typescript/src/Header/HeaderIcon.d.ts.map +1 -0
  115. package/lib/typescript/src/Header/HeaderSearchBar.d.ts +10 -0
  116. package/lib/typescript/src/Header/HeaderSearchBar.d.ts.map +1 -0
  117. package/lib/typescript/src/Header/HeaderShownContext.d.ts +2 -0
  118. package/lib/typescript/src/Header/HeaderShownContext.d.ts.map +1 -0
  119. package/lib/typescript/src/Header/HeaderTitle.d.ts +9 -0
  120. package/lib/typescript/src/Header/HeaderTitle.d.ts.map +1 -0
  121. package/lib/typescript/src/Header/getDefaultHeaderHeight.d.ts +3 -0
  122. package/lib/typescript/src/Header/getDefaultHeaderHeight.d.ts.map +1 -0
  123. package/lib/typescript/src/Header/getHeaderTitle.d.ts +6 -0
  124. package/lib/typescript/src/Header/getHeaderTitle.d.ts.map +1 -0
  125. package/lib/typescript/src/Header/useHeaderHeight.d.ts +2 -0
  126. package/lib/typescript/src/Header/useHeaderHeight.d.ts.map +1 -0
  127. package/lib/typescript/src/Label/Label.d.ts +9 -0
  128. package/lib/typescript/src/Label/Label.d.ts.map +1 -0
  129. package/lib/typescript/src/Label/getLabel.d.ts +5 -0
  130. package/lib/typescript/src/Label/getLabel.d.ts.map +1 -0
  131. package/lib/typescript/src/MaskedView.android.d.ts +2 -0
  132. package/lib/typescript/src/MaskedView.android.d.ts.map +1 -0
  133. package/lib/typescript/src/MaskedView.d.ts +11 -0
  134. package/lib/typescript/src/MaskedView.d.ts.map +1 -0
  135. package/lib/typescript/src/MaskedView.ios.d.ts +2 -0
  136. package/lib/typescript/src/MaskedView.ios.d.ts.map +1 -0
  137. package/lib/typescript/src/MaskedViewNative.d.ts +11 -0
  138. package/lib/typescript/src/MaskedViewNative.d.ts.map +1 -0
  139. package/lib/typescript/src/MissingIcon.d.ts +9 -0
  140. package/lib/typescript/src/MissingIcon.d.ts.map +1 -0
  141. package/lib/typescript/src/PlatformPressable.d.ts +21 -0
  142. package/lib/typescript/src/PlatformPressable.d.ts.map +1 -0
  143. package/lib/typescript/src/ResourceSavingView.d.ts +10 -0
  144. package/lib/typescript/src/ResourceSavingView.d.ts.map +1 -0
  145. package/lib/typescript/src/SafeAreaProviderCompat.d.ts +12 -0
  146. package/lib/typescript/src/SafeAreaProviderCompat.d.ts.map +1 -0
  147. package/lib/typescript/src/Screen.d.ts +18 -0
  148. package/lib/typescript/src/Screen.d.ts.map +1 -0
  149. package/lib/typescript/src/Text.d.ts +3 -0
  150. package/lib/typescript/src/Text.d.ts.map +1 -0
  151. package/lib/typescript/src/__tests__/PlatformPressable.test.d.ts +2 -0
  152. package/lib/typescript/src/__tests__/PlatformPressable.test.d.ts.map +1 -0
  153. package/lib/typescript/src/getDefaultSidebarWidth.d.ts +4 -0
  154. package/lib/typescript/src/getDefaultSidebarWidth.d.ts.map +1 -0
  155. package/lib/typescript/src/getNamedContext.d.ts +6 -0
  156. package/lib/typescript/src/getNamedContext.d.ts.map +1 -0
  157. package/lib/typescript/src/index.d.ts +25 -0
  158. package/lib/typescript/src/index.d.ts.map +1 -0
  159. package/lib/typescript/src/types.d.ts +325 -0
  160. package/lib/typescript/src/types.d.ts.map +1 -0
  161. package/package.json +83 -0
  162. package/src/Background.tsx +24 -0
  163. package/src/Button.tsx +120 -0
  164. package/src/Header/Header.tsx +450 -0
  165. package/src/Header/HeaderBackButton.tsx +249 -0
  166. package/src/Header/HeaderBackContext.tsx +5 -0
  167. package/src/Header/HeaderBackground.tsx +60 -0
  168. package/src/Header/HeaderButton.tsx +55 -0
  169. package/src/Header/HeaderHeightContext.tsx +6 -0
  170. package/src/Header/HeaderIcon.tsx +32 -0
  171. package/src/Header/HeaderSearchBar.tsx +323 -0
  172. package/src/Header/HeaderShownContext.tsx +3 -0
  173. package/src/Header/HeaderTitle.tsx +48 -0
  174. package/src/Header/getDefaultHeaderHeight.tsx +54 -0
  175. package/src/Header/getHeaderTitle.tsx +12 -0
  176. package/src/Header/useHeaderHeight.tsx +15 -0
  177. package/src/Label/Label.tsx +31 -0
  178. package/src/Label/getLabel.tsx +10 -0
  179. package/src/MaskedView.android.tsx +1 -0
  180. package/src/MaskedView.ios.tsx +1 -0
  181. package/src/MaskedView.tsx +13 -0
  182. package/src/MaskedViewNative.tsx +33 -0
  183. package/src/MissingIcon.tsx +19 -0
  184. package/src/PlatformPressable.tsx +196 -0
  185. package/src/ResourceSavingView.tsx +76 -0
  186. package/src/SafeAreaProviderCompat.tsx +61 -0
  187. package/src/Screen.tsx +123 -0
  188. package/src/Text.tsx +14 -0
  189. package/src/__tests__/PlatformPressable.test.tsx +81 -0
  190. package/src/assets/back-icon-mask.png +0 -0
  191. package/src/assets/back-icon.png +0 -0
  192. package/src/assets/back-icon@1x.android.png +0 -0
  193. package/src/assets/back-icon@1x.ios.png +0 -0
  194. package/src/assets/back-icon@2x.android.png +0 -0
  195. package/src/assets/back-icon@2x.ios.png +0 -0
  196. package/src/assets/back-icon@3x.android.png +0 -0
  197. package/src/assets/back-icon@3x.ios.png +0 -0
  198. package/src/assets/back-icon@4x.android.png +0 -0
  199. package/src/assets/back-icon@4x.ios.png +0 -0
  200. package/src/assets/clear-icon.png +0 -0
  201. package/src/assets/clear-icon@1x.png +0 -0
  202. package/src/assets/clear-icon@2x.png +0 -0
  203. package/src/assets/clear-icon@3x.png +0 -0
  204. package/src/assets/clear-icon@4x.png +0 -0
  205. package/src/assets/close-icon.png +0 -0
  206. package/src/assets/close-icon@1x.png +0 -0
  207. package/src/assets/close-icon@2x.png +0 -0
  208. package/src/assets/close-icon@3x.png +0 -0
  209. package/src/assets/close-icon@4x.png +0 -0
  210. package/src/assets/search-icon.png +0 -0
  211. package/src/assets/search-icon@1x.android.png +0 -0
  212. package/src/assets/search-icon@1x.ios.png +0 -0
  213. package/src/assets/search-icon@2x.android.png +0 -0
  214. package/src/assets/search-icon@2x.ios.png +0 -0
  215. package/src/assets/search-icon@3x.android.png +0 -0
  216. package/src/assets/search-icon@3x.ios.png +0 -0
  217. package/src/assets/search-icon@4x.android.png +0 -0
  218. package/src/assets/search-icon@4x.ios.png +0 -0
  219. package/src/getDefaultSidebarWidth.tsx +15 -0
  220. package/src/getNamedContext.tsx +30 -0
  221. package/src/index.tsx +38 -0
  222. package/src/types.tsx +338 -0
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ import { useLocale, useTheme } from '@react-navigation/native';
4
+ import * as React from 'react';
5
+ import { Animated, Image, Platform, StyleSheet, View } from 'react-native';
6
+ import backIcon from '../assets/back-icon.png';
7
+ import backIconMask from '../assets/back-icon-mask.png';
8
+ import { MaskedView } from '../MaskedView';
9
+ import { HeaderButton } from "./HeaderButton.js";
10
+ import { HeaderIcon, ICON_MARGIN } from "./HeaderIcon.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ export function HeaderBackButton({
13
+ disabled,
14
+ allowFontScaling,
15
+ backImage,
16
+ label,
17
+ labelStyle,
18
+ displayMode = Platform.OS === 'ios' ? 'default' : 'minimal',
19
+ onLabelLayout,
20
+ onPress,
21
+ pressColor,
22
+ pressOpacity,
23
+ screenLayout,
24
+ tintColor,
25
+ titleLayout,
26
+ truncatedLabel = 'Back',
27
+ accessibilityLabel = label && label !== 'Back' ? `${label}, back` : 'Go back',
28
+ testID,
29
+ style,
30
+ href
31
+ }) {
32
+ const {
33
+ colors,
34
+ fonts
35
+ } = useTheme();
36
+ const {
37
+ direction
38
+ } = useLocale();
39
+ const [labelWidth, setLabelWidth] = React.useState(null);
40
+ const [truncatedLabelWidth, setTruncatedLabelWidth] = React.useState(null);
41
+ const renderBackImage = () => {
42
+ if (backImage) {
43
+ return backImage({
44
+ tintColor: tintColor ?? colors.text
45
+ });
46
+ } else {
47
+ return /*#__PURE__*/_jsx(HeaderIcon, {
48
+ source: backIcon,
49
+ tintColor: tintColor,
50
+ style: [styles.icon, displayMode !== 'minimal' && styles.iconWithLabel]
51
+ });
52
+ }
53
+ };
54
+ const renderLabel = () => {
55
+ if (displayMode === 'minimal') {
56
+ return null;
57
+ }
58
+ const availableSpace = titleLayout && screenLayout ? (screenLayout.width - titleLayout.width) / 2 - (ICON_WIDTH + ICON_MARGIN) : null;
59
+ const potentialLabelText = displayMode === 'default' ? label : truncatedLabel;
60
+ const finalLabelText = availableSpace && labelWidth && truncatedLabelWidth ? availableSpace > labelWidth ? potentialLabelText : availableSpace > truncatedLabelWidth ? truncatedLabel : null : potentialLabelText;
61
+ const commonStyle = [fonts.regular, styles.label, labelStyle];
62
+ const hiddenStyle = [commonStyle, {
63
+ position: 'absolute',
64
+ top: 0,
65
+ left: 0,
66
+ opacity: 0
67
+ }];
68
+ const labelElement = /*#__PURE__*/_jsxs(View, {
69
+ style: styles.labelWrapper,
70
+ children: [label && displayMode === 'default' ? /*#__PURE__*/_jsx(Animated.Text, {
71
+ style: hiddenStyle,
72
+ numberOfLines: 1,
73
+ onLayout: e => setLabelWidth(e.nativeEvent.layout.width),
74
+ children: label
75
+ }) : null, truncatedLabel ? /*#__PURE__*/_jsx(Animated.Text, {
76
+ style: hiddenStyle,
77
+ numberOfLines: 1,
78
+ onLayout: e => setTruncatedLabelWidth(e.nativeEvent.layout.width),
79
+ children: truncatedLabel
80
+ }) : null, finalLabelText ? /*#__PURE__*/_jsx(Animated.Text, {
81
+ accessible: false,
82
+ onLayout: onLabelLayout,
83
+ style: [tintColor ? {
84
+ color: tintColor
85
+ } : null, commonStyle],
86
+ numberOfLines: 1,
87
+ allowFontScaling: !!allowFontScaling,
88
+ children: finalLabelText
89
+ }) : null]
90
+ });
91
+ if (backImage || Platform.OS !== 'ios') {
92
+ // When a custom backimage is specified, we can't mask the label
93
+ // Otherwise there might be weird effect due to our mask not being the same as the image
94
+ return labelElement;
95
+ }
96
+ return /*#__PURE__*/_jsx(MaskedView, {
97
+ maskElement: /*#__PURE__*/_jsxs(View, {
98
+ style: [styles.iconMaskContainer,
99
+ // Extend the mask to the center of the screen so that label isn't clipped during animation
100
+ screenLayout ? {
101
+ minWidth: screenLayout.width / 2 - 27
102
+ } : null],
103
+ children: [/*#__PURE__*/_jsx(Image, {
104
+ source: backIconMask,
105
+ resizeMode: "contain",
106
+ style: [styles.iconMask, direction === 'rtl' && styles.flip]
107
+ }), /*#__PURE__*/_jsx(View, {
108
+ style: styles.iconMaskFillerRect
109
+ })]
110
+ }),
111
+ children: labelElement
112
+ });
113
+ };
114
+ const handlePress = () => {
115
+ if (onPress) {
116
+ requestAnimationFrame(() => onPress());
117
+ }
118
+ };
119
+ return /*#__PURE__*/_jsx(HeaderButton, {
120
+ disabled: disabled,
121
+ href: href,
122
+ accessibilityLabel: accessibilityLabel,
123
+ testID: testID,
124
+ onPress: handlePress,
125
+ pressColor: pressColor,
126
+ pressOpacity: pressOpacity,
127
+ style: [styles.container, style],
128
+ children: /*#__PURE__*/_jsxs(React.Fragment, {
129
+ children: [renderBackImage(), renderLabel()]
130
+ })
131
+ });
132
+ }
133
+ const ICON_WIDTH = Platform.OS === 'ios' ? 13 : 24;
134
+ const ICON_MARGIN_END = Platform.OS === 'ios' ? 22 : 3;
135
+ const styles = StyleSheet.create({
136
+ container: {
137
+ paddingHorizontal: 0,
138
+ minWidth: StyleSheet.hairlineWidth,
139
+ // Avoid collapsing when title is long
140
+ ...Platform.select({
141
+ ios: null,
142
+ default: {
143
+ marginVertical: 3,
144
+ marginHorizontal: 11
145
+ }
146
+ })
147
+ },
148
+ label: {
149
+ fontSize: 17,
150
+ // Title and back label are a bit different width due to title being bold
151
+ // Adjusting the letterSpacing makes them coincide better
152
+ letterSpacing: 0.35
153
+ },
154
+ labelWrapper: {
155
+ // These styles will make sure that the label doesn't fill the available space
156
+ // Otherwise it messes with the measurement of the label
157
+ flexDirection: 'row',
158
+ alignItems: 'flex-start',
159
+ marginEnd: ICON_MARGIN
160
+ },
161
+ icon: {
162
+ width: ICON_WIDTH,
163
+ marginEnd: ICON_MARGIN_END
164
+ },
165
+ iconWithLabel: Platform.OS === 'ios' ? {
166
+ marginEnd: 6
167
+ } : {},
168
+ iconMaskContainer: {
169
+ flex: 1,
170
+ flexDirection: 'row',
171
+ justifyContent: 'center'
172
+ },
173
+ iconMaskFillerRect: {
174
+ flex: 1,
175
+ backgroundColor: '#000'
176
+ },
177
+ iconMask: {
178
+ height: 21,
179
+ width: 13,
180
+ marginStart: -14.5,
181
+ marginVertical: 12,
182
+ alignSelf: 'center'
183
+ },
184
+ flip: {
185
+ transform: 'scaleX(-1)'
186
+ }
187
+ });
188
+ //# sourceMappingURL=HeaderBackButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useLocale","useTheme","React","Animated","Image","Platform","StyleSheet","View","backIcon","backIconMask","MaskedView","HeaderButton","HeaderIcon","ICON_MARGIN","jsx","_jsx","jsxs","_jsxs","HeaderBackButton","disabled","allowFontScaling","backImage","label","labelStyle","displayMode","OS","onLabelLayout","onPress","pressColor","pressOpacity","screenLayout","tintColor","titleLayout","truncatedLabel","accessibilityLabel","testID","style","href","colors","fonts","direction","labelWidth","setLabelWidth","useState","truncatedLabelWidth","setTruncatedLabelWidth","renderBackImage","text","source","styles","icon","iconWithLabel","renderLabel","availableSpace","width","ICON_WIDTH","potentialLabelText","finalLabelText","commonStyle","regular","hiddenStyle","position","top","left","opacity","labelElement","labelWrapper","children","Text","numberOfLines","onLayout","e","nativeEvent","layout","accessible","color","maskElement","iconMaskContainer","minWidth","resizeMode","iconMask","flip","iconMaskFillerRect","handlePress","requestAnimationFrame","container","Fragment","ICON_MARGIN_END","create","paddingHorizontal","hairlineWidth","select","ios","default","marginVertical","marginHorizontal","fontSize","letterSpacing","flexDirection","alignItems","marginEnd","flex","justifyContent","backgroundColor","height","marginStart","alignSelf","transform"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderBackButton.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { getNamedContext } from "../getNamedContext.js";
4
+ export const HeaderBackContext = getNamedContext('HeaderBackContext', undefined);
5
+ //# sourceMappingURL=HeaderBackContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getNamedContext","HeaderBackContext","undefined"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderBackContext.tsx"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,uBAAoB;AAEpD,OAAO,MAAMC,iBAAiB,GAAGD,eAAe,CAE9C,mBAAmB,EAAEE,SAAS,CAAC","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ import { useTheme } from '@react-navigation/native';
4
+ import * as React from 'react';
5
+ import { Animated, Platform, StyleSheet } from 'react-native';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function HeaderBackground({
8
+ style,
9
+ ...rest
10
+ }) {
11
+ const {
12
+ colors,
13
+ dark
14
+ } = useTheme();
15
+ return /*#__PURE__*/_jsx(Animated.View, {
16
+ style: [styles.container, {
17
+ backgroundColor: colors.card,
18
+ borderBottomColor: colors.border,
19
+ ...(Platform.OS === 'ios' && {
20
+ shadowColor: dark ? 'rgba(255, 255, 255, 0.45)' : 'rgba(0, 0, 0, 1)'
21
+ })
22
+ }, style],
23
+ ...rest
24
+ });
25
+ }
26
+ const styles = StyleSheet.create({
27
+ container: {
28
+ flex: 1,
29
+ ...Platform.select({
30
+ android: {
31
+ elevation: 4
32
+ },
33
+ ios: {
34
+ shadowOpacity: 0.3,
35
+ shadowRadius: 0,
36
+ shadowOffset: {
37
+ width: 0,
38
+ height: StyleSheet.hairlineWidth
39
+ }
40
+ },
41
+ default: {
42
+ borderBottomWidth: StyleSheet.hairlineWidth
43
+ }
44
+ })
45
+ }
46
+ });
47
+ //# sourceMappingURL=HeaderBackground.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useTheme","React","Animated","Platform","StyleSheet","jsx","_jsx","HeaderBackground","style","rest","colors","dark","View","styles","container","backgroundColor","card","borderBottomColor","border","OS","shadowColor","create","flex","select","android","elevation","ios","shadowOpacity","shadowRadius","shadowOffset","width","height","hairlineWidth","default","borderBottomWidth"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderBackground.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,0BAA0B;AACnD,OAAO,KAAKC,KAAK,MAAM,OAAO;AAC9B,SACEC,QAAQ,EACRC,QAAQ,EAERC,UAAU,QAGL,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOtB,OAAO,SAASC,gBAAgBA,CAAC;EAAEC,KAAK;EAAE,GAAGC;AAAY,CAAC,EAAE;EAC1D,MAAM;IAAEC,MAAM;IAAEC;EAAK,CAAC,GAAGX,QAAQ,CAAC,CAAC;EAEnC,oBACEM,IAAA,CAACJ,QAAQ,CAACU,IAAI;IACZJ,KAAK,EAAE,CACLK,MAAM,CAACC,SAAS,EAChB;MACEC,eAAe,EAAEL,MAAM,CAACM,IAAI;MAC5BC,iBAAiB,EAAEP,MAAM,CAACQ,MAAM;MAChC,IAAIf,QAAQ,CAACgB,EAAE,KAAK,KAAK,IAAI;QAC3BC,WAAW,EAAET,IAAI,GACb,2BAA2B,GAC3B;MACN,CAAC;IACH,CAAC,EACDH,KAAK,CACL;IAAA,GACEC;EAAI,CACT,CAAC;AAEN;AAEA,MAAMI,MAAM,GAAGT,UAAU,CAACiB,MAAM,CAAC;EAC/BP,SAAS,EAAE;IACTQ,IAAI,EAAE,CAAC;IACP,GAAGnB,QAAQ,CAACoB,MAAM,CAAC;MACjBC,OAAO,EAAE;QACPC,SAAS,EAAE;MACb,CAAC;MACDC,GAAG,EAAE;QACHC,aAAa,EAAE,GAAG;QAClBC,YAAY,EAAE,CAAC;QACfC,YAAY,EAAE;UACZC,KAAK,EAAE,CAAC;UACRC,MAAM,EAAE3B,UAAU,CAAC4B;QACrB;MACF,CAAC;MACDC,OAAO,EAAE;QACPC,iBAAiB,EAAE9B,UAAU,CAAC4B;MAChC;IACF,CAAC;EACH;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ import { Platform, StyleSheet } from 'react-native';
4
+ import { PlatformPressable } from "../PlatformPressable.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export function HeaderButton({
7
+ disabled,
8
+ onPress,
9
+ pressColor,
10
+ pressOpacity,
11
+ accessibilityLabel,
12
+ testID,
13
+ style,
14
+ href,
15
+ children
16
+ }) {
17
+ return /*#__PURE__*/_jsx(PlatformPressable, {
18
+ disabled: disabled,
19
+ href: href,
20
+ accessibilityLabel: accessibilityLabel,
21
+ testID: testID,
22
+ onPress: onPress,
23
+ pressColor: pressColor,
24
+ pressOpacity: pressOpacity,
25
+ android_ripple: androidRipple,
26
+ style: [styles.container, disabled && styles.disabled, style],
27
+ hitSlop: Platform.select({
28
+ ios: undefined,
29
+ default: {
30
+ top: 16,
31
+ right: 16,
32
+ bottom: 16,
33
+ left: 16
34
+ }
35
+ }),
36
+ children: children
37
+ });
38
+ }
39
+ const androidRipple = {
40
+ borderless: true,
41
+ foreground: Platform.OS === 'android' && Platform.Version >= 23,
42
+ radius: 20
43
+ };
44
+ const styles = StyleSheet.create({
45
+ container: {
46
+ flexDirection: 'row',
47
+ alignItems: 'center',
48
+ paddingHorizontal: 8,
49
+ // Roundness for iPad hover effect
50
+ borderRadius: 10
51
+ },
52
+ disabled: {
53
+ opacity: 0.5
54
+ }
55
+ });
56
+ //# sourceMappingURL=HeaderButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","StyleSheet","PlatformPressable","jsx","_jsx","HeaderButton","disabled","onPress","pressColor","pressOpacity","accessibilityLabel","testID","style","href","children","android_ripple","androidRipple","styles","container","hitSlop","select","ios","undefined","default","top","right","bottom","left","borderless","foreground","OS","Version","radius","create","flexDirection","alignItems","paddingHorizontal","borderRadius","opacity"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderButton.tsx"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AAEnD,SAASC,iBAAiB,QAAQ,yBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGzD,OAAO,SAASC,YAAYA,CAAC;EAC3BC,QAAQ;EACRC,OAAO;EACPC,UAAU;EACVC,YAAY;EACZC,kBAAkB;EAClBC,MAAM;EACNC,KAAK;EACLC,IAAI;EACJC;AACiB,CAAC,EAAE;EACpB,oBACEV,IAAA,CAACF,iBAAiB;IAChBI,QAAQ,EAAEA,QAAS;IACnBO,IAAI,EAAEA,IAAK;IACXH,kBAAkB,EAAEA,kBAAmB;IACvCC,MAAM,EAAEA,MAAO;IACfJ,OAAO,EAAEA,OAAQ;IACjBC,UAAU,EAAEA,UAAW;IACvBC,YAAY,EAAEA,YAAa;IAC3BM,cAAc,EAAEC,aAAc;IAC9BJ,KAAK,EAAE,CAACK,MAAM,CAACC,SAAS,EAAEZ,QAAQ,IAAIW,MAAM,CAACX,QAAQ,EAAEM,KAAK,CAAE;IAC9DO,OAAO,EAAEnB,QAAQ,CAACoB,MAAM,CAAC;MACvBC,GAAG,EAAEC,SAAS;MACdC,OAAO,EAAE;QAAEC,GAAG,EAAE,EAAE;QAAEC,KAAK,EAAE,EAAE;QAAEC,MAAM,EAAE,EAAE;QAAEC,IAAI,EAAE;MAAG;IACtD,CAAC,CAAE;IAAAb,QAAA,EAEFA;EAAQ,CACQ,CAAC;AAExB;AAEA,MAAME,aAAa,GAAG;EACpBY,UAAU,EAAE,IAAI;EAChBC,UAAU,EAAE7B,QAAQ,CAAC8B,EAAE,KAAK,SAAS,IAAI9B,QAAQ,CAAC+B,OAAO,IAAI,EAAE;EAC/DC,MAAM,EAAE;AACV,CAAC;AAED,MAAMf,MAAM,GAAGhB,UAAU,CAACgC,MAAM,CAAC;EAC/Bf,SAAS,EAAE;IACTgB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,iBAAiB,EAAE,CAAC;IACpB;IACAC,YAAY,EAAE;EAChB,CAAC;EACD/B,QAAQ,EAAE;IACRgC,OAAO,EAAE;EACX;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ import { getNamedContext } from "../getNamedContext.js";
4
+ export const HeaderHeightContext = getNamedContext('HeaderHeightContext', undefined);
5
+ //# sourceMappingURL=HeaderHeightContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getNamedContext","HeaderHeightContext","undefined"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderHeightContext.tsx"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,uBAAoB;AAEpD,OAAO,MAAMC,mBAAmB,GAAGD,eAAe,CAChD,qBAAqB,EACrBE,SACF,CAAC","ignoreList":[]}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ import { useLocale, useTheme } from '@react-navigation/native';
4
+ import { Image, Platform, StyleSheet } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export function HeaderIcon({
7
+ source,
8
+ style,
9
+ ...rest
10
+ }) {
11
+ const {
12
+ colors
13
+ } = useTheme();
14
+ const {
15
+ direction
16
+ } = useLocale();
17
+ return /*#__PURE__*/_jsx(Image, {
18
+ source: source,
19
+ resizeMode: "contain",
20
+ fadeDuration: 0,
21
+ tintColor: colors.text,
22
+ style: [styles.icon, direction === 'rtl' && styles.flip, style],
23
+ ...rest
24
+ });
25
+ }
26
+ export const ICON_SIZE = Platform.OS === 'ios' ? 21 : 24;
27
+ export const ICON_MARGIN = Platform.OS === 'ios' ? 8 : 3;
28
+ const styles = StyleSheet.create({
29
+ icon: {
30
+ width: ICON_SIZE,
31
+ height: ICON_SIZE,
32
+ margin: ICON_MARGIN
33
+ },
34
+ flip: {
35
+ transform: 'scaleX(-1)'
36
+ }
37
+ });
38
+ //# sourceMappingURL=HeaderIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useLocale","useTheme","Image","Platform","StyleSheet","jsx","_jsx","HeaderIcon","source","style","rest","colors","direction","resizeMode","fadeDuration","tintColor","text","styles","icon","flip","ICON_SIZE","OS","ICON_MARGIN","create","width","height","margin","transform"],"sourceRoot":"..\\..\\..\\src","sources":["Header/HeaderIcon.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,0BAA0B;AAC9D,SAASC,KAAK,EAAmBC,QAAQ,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE5E,OAAO,SAASC,UAAUA,CAAC;EAAEC,MAAM;EAAEC,KAAK;EAAE,GAAGC;AAAiB,CAAC,EAAE;EACjE,MAAM;IAAEC;EAAO,CAAC,GAAGV,QAAQ,CAAC,CAAC;EAC7B,MAAM;IAAEW;EAAU,CAAC,GAAGZ,SAAS,CAAC,CAAC;EAEjC,oBACEM,IAAA,CAACJ,KAAK;IACJM,MAAM,EAAEA,MAAO;IACfK,UAAU,EAAC,SAAS;IACpBC,YAAY,EAAE,CAAE;IAChBC,SAAS,EAAEJ,MAAM,CAACK,IAAK;IACvBP,KAAK,EAAE,CAACQ,MAAM,CAACC,IAAI,EAAEN,SAAS,KAAK,KAAK,IAAIK,MAAM,CAACE,IAAI,EAAEV,KAAK,CAAE;IAAA,GAC5DC;EAAI,CACT,CAAC;AAEN;AAEA,OAAO,MAAMU,SAAS,GAAGjB,QAAQ,CAACkB,EAAE,KAAK,KAAK,GAAG,EAAE,GAAG,EAAE;AACxD,OAAO,MAAMC,WAAW,GAAGnB,QAAQ,CAACkB,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC;AAExD,MAAMJ,MAAM,GAAGb,UAAU,CAACmB,MAAM,CAAC;EAC/BL,IAAI,EAAE;IACJM,KAAK,EAAEJ,SAAS;IAChBK,MAAM,EAAEL,SAAS;IACjBM,MAAM,EAAEJ;EACV,CAAC;EACDH,IAAI,EAAE;IACJQ,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,288 @@
1
+ "use strict";
2
+
3
+ import { useNavigation, useTheme } from '@react-navigation/native';
4
+ import Color from 'color';
5
+ import * as React from 'react';
6
+ import { Animated, Image, Platform, StyleSheet, TextInput, View } from 'react-native';
7
+ import clearIcon from '../assets/clear-icon.png';
8
+ import closeIcon from '../assets/close-icon.png';
9
+ import searchIcon from '../assets/search-icon.png';
10
+ import { PlatformPressable } from "../PlatformPressable.js";
11
+ import { Text } from "../Text.js";
12
+ import { HeaderButton } from "./HeaderButton.js";
13
+ import { HeaderIcon } from "./HeaderIcon.js";
14
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
+ const INPUT_TYPE_TO_MODE = {
16
+ text: 'text',
17
+ number: 'numeric',
18
+ phone: 'tel',
19
+ email: 'email'
20
+ };
21
+ const useNativeDriver = Platform.OS !== 'web';
22
+ function HeaderSearchBarInternal({
23
+ visible,
24
+ inputType,
25
+ autoFocus = true,
26
+ placeholder = 'Search',
27
+ cancelButtonText = 'Cancel',
28
+ enterKeyHint = 'search',
29
+ onChangeText,
30
+ onClose,
31
+ tintColor,
32
+ style,
33
+ ...rest
34
+ }, ref) {
35
+ const navigation = useNavigation();
36
+ const {
37
+ dark,
38
+ colors,
39
+ fonts
40
+ } = useTheme();
41
+ const [value, setValue] = React.useState('');
42
+ const [rendered, setRendered] = React.useState(visible);
43
+ const [visibleAnim] = React.useState(() => new Animated.Value(visible ? 1 : 0));
44
+ const [clearVisibleAnim] = React.useState(() => new Animated.Value(0));
45
+ const visibleValueRef = React.useRef(visible);
46
+ const clearVisibleValueRef = React.useRef(false);
47
+ const inputRef = React.useRef(null);
48
+ React.useEffect(() => {
49
+ // Avoid act warning in tests just by rendering header
50
+ if (visible === visibleValueRef.current) {
51
+ return;
52
+ }
53
+ Animated.timing(visibleAnim, {
54
+ toValue: visible ? 1 : 0,
55
+ duration: 100,
56
+ useNativeDriver
57
+ }).start(({
58
+ finished
59
+ }) => {
60
+ if (finished) {
61
+ setRendered(visible);
62
+ visibleValueRef.current = visible;
63
+ }
64
+ });
65
+ return () => {
66
+ visibleAnim.stopAnimation();
67
+ };
68
+ }, [visible, visibleAnim]);
69
+ const hasText = value !== '';
70
+ React.useEffect(() => {
71
+ if (clearVisibleValueRef.current === hasText) {
72
+ return;
73
+ }
74
+ Animated.timing(clearVisibleAnim, {
75
+ toValue: hasText ? 1 : 0,
76
+ duration: 100,
77
+ useNativeDriver
78
+ }).start(({
79
+ finished
80
+ }) => {
81
+ if (finished) {
82
+ clearVisibleValueRef.current = hasText;
83
+ }
84
+ });
85
+ }, [clearVisibleAnim, hasText]);
86
+ const clearText = React.useCallback(() => {
87
+ inputRef.current?.clear();
88
+ inputRef.current?.focus();
89
+ setValue('');
90
+ }, []);
91
+ const onClear = React.useCallback(() => {
92
+ clearText();
93
+ // FIXME: figure out how to create a SyntheticEvent
94
+ // @ts-expect-error: we don't have the native event here
95
+ onChangeText?.({
96
+ nativeEvent: {
97
+ text: ''
98
+ }
99
+ });
100
+ }, [clearText, onChangeText]);
101
+ const cancelSearch = React.useCallback(() => {
102
+ onClear();
103
+ onClose();
104
+ }, [onClear, onClose]);
105
+ React.useEffect(() => navigation?.addListener('blur', cancelSearch), [cancelSearch, navigation]);
106
+ React.useImperativeHandle(ref, () => ({
107
+ focus: () => {
108
+ inputRef.current?.focus();
109
+ },
110
+ blur: () => {
111
+ inputRef.current?.blur();
112
+ },
113
+ setText: text => {
114
+ inputRef.current?.setNativeProps({
115
+ text
116
+ });
117
+ setValue(text);
118
+ },
119
+ clearText,
120
+ cancelSearch
121
+ }), [cancelSearch, clearText]);
122
+ if (!visible && !rendered) {
123
+ return null;
124
+ }
125
+ const textColor = tintColor ?? colors.text;
126
+ return /*#__PURE__*/_jsxs(Animated.View, {
127
+ pointerEvents: visible ? 'auto' : 'none',
128
+ accessibilityLiveRegion: "polite",
129
+ accessibilityElementsHidden: !visible,
130
+ importantForAccessibility: visible ? 'auto' : 'no-hide-descendants',
131
+ style: [styles.container, {
132
+ opacity: visibleAnim
133
+ }, style],
134
+ children: [/*#__PURE__*/_jsxs(View, {
135
+ style: styles.searchbarContainer,
136
+ children: [/*#__PURE__*/_jsx(HeaderIcon, {
137
+ source: searchIcon,
138
+ tintColor: textColor,
139
+ style: styles.inputSearchIcon
140
+ }), /*#__PURE__*/_jsx(TextInput, {
141
+ ...rest,
142
+ ref: inputRef,
143
+ onChange: onChangeText,
144
+ onChangeText: setValue,
145
+ autoFocus: autoFocus,
146
+ inputMode: INPUT_TYPE_TO_MODE[inputType ?? 'text'],
147
+ enterKeyHint: enterKeyHint,
148
+ placeholder: placeholder,
149
+ placeholderTextColor: Color(textColor).alpha(0.5).string(),
150
+ cursorColor: colors.primary,
151
+ selectionHandleColor: colors.primary,
152
+ selectionColor: Color(colors.primary).alpha(0.3).string(),
153
+ style: [fonts.regular, styles.searchbar, {
154
+ backgroundColor: Platform.select({
155
+ ios: dark ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)',
156
+ default: 'transparent'
157
+ }),
158
+ color: textColor,
159
+ borderBottomColor: Color(textColor).alpha(0.2).string()
160
+ }]
161
+ }), Platform.OS === 'ios' ||
162
+ // @ts-ignore
163
+ Platform.OS === 'harmony' ? /*#__PURE__*/_jsx(PlatformPressable, {
164
+ onPress: onClear,
165
+ style: [{
166
+ opacity: clearVisibleAnim,
167
+ transform: [{
168
+ scale: clearVisibleAnim
169
+ }]
170
+ }, styles.clearButton],
171
+ children: /*#__PURE__*/_jsx(Image, {
172
+ source: clearIcon,
173
+ resizeMode: "contain",
174
+ tintColor: textColor,
175
+ style: styles.clearIcon
176
+ })
177
+ }) : null]
178
+ }), Platform.OS !== 'ios' &&
179
+ // @ts-ignore
180
+ Platform.OS !== 'harmony' ? /*#__PURE__*/_jsx(HeaderButton, {
181
+ onPress: () => {
182
+ if (value) {
183
+ onClear();
184
+ } else {
185
+ onClose();
186
+ }
187
+ },
188
+ style: styles.closeButton,
189
+ children: /*#__PURE__*/_jsx(HeaderIcon, {
190
+ source: closeIcon,
191
+ tintColor: textColor
192
+ })
193
+ }) : null, Platform.OS === 'ios' ? /*#__PURE__*/_jsx(PlatformPressable, {
194
+ onPress: cancelSearch,
195
+ style: styles.cancelButton,
196
+ children: /*#__PURE__*/_jsx(Text, {
197
+ style: [fonts.regular, {
198
+ color: tintColor ?? colors.primary
199
+ }, styles.cancelText],
200
+ children: cancelButtonText
201
+ })
202
+ }) : null]
203
+ });
204
+ }
205
+ const styles = StyleSheet.create({
206
+ container: {
207
+ flex: 1,
208
+ flexDirection: 'row',
209
+ alignItems: 'stretch'
210
+ },
211
+ inputSearchIcon: {
212
+ position: 'absolute',
213
+ opacity: 0.5,
214
+ left: Platform.select({
215
+ ios: 16,
216
+ default: 4
217
+ }),
218
+ top: Platform.select({
219
+ ios: -1,
220
+ default: 17
221
+ }),
222
+ ...Platform.select({
223
+ ios: {
224
+ height: 18,
225
+ width: 18
226
+ },
227
+ default: {}
228
+ })
229
+ },
230
+ closeButton: {
231
+ position: 'absolute',
232
+ opacity: 0.5,
233
+ right: Platform.select({
234
+ ios: 0,
235
+ default: 8
236
+ }),
237
+ top: Platform.select({
238
+ ios: -2,
239
+ default: 17
240
+ })
241
+ },
242
+ clearButton: {
243
+ position: 'absolute',
244
+ right: 0,
245
+ top: -7,
246
+ bottom: 0,
247
+ justifyContent: 'center',
248
+ padding: 8
249
+ },
250
+ clearIcon: {
251
+ height: 16,
252
+ width: 16,
253
+ opacity: 0.5
254
+ },
255
+ cancelButton: {
256
+ alignSelf: 'center',
257
+ top: -4
258
+ },
259
+ cancelText: {
260
+ fontSize: 17,
261
+ marginHorizontal: 12
262
+ },
263
+ searchbarContainer: {
264
+ flex: 1
265
+ },
266
+ searchbar: Platform.select({
267
+ ios: {
268
+ flex: 1,
269
+ fontSize: 17,
270
+ paddingHorizontal: 32,
271
+ marginLeft: 16,
272
+ marginTop: -1,
273
+ marginBottom: 4,
274
+ borderRadius: 8
275
+ },
276
+ default: {
277
+ flex: 1,
278
+ fontSize: 18,
279
+ paddingHorizontal: 36,
280
+ marginRight: 8,
281
+ marginTop: 8,
282
+ marginBottom: 8,
283
+ borderBottomWidth: 1
284
+ }
285
+ })
286
+ });
287
+ export const HeaderSearchBar = /*#__PURE__*/React.forwardRef(HeaderSearchBarInternal);
288
+ //# sourceMappingURL=HeaderSearchBar.js.map