@oxyhq/services 6.9.5 → 6.9.7

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 (243) hide show
  1. package/lib/commonjs/ui/components/BottomSheet.js +5 -3
  2. package/lib/commonjs/ui/components/BottomSheet.js.map +1 -1
  3. package/lib/commonjs/ui/components/FontLoader.js +1 -1
  4. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  5. package/lib/commonjs/ui/components/Header.js.map +1 -1
  6. package/lib/commonjs/ui/components/HelperText.js +1 -1
  7. package/lib/commonjs/ui/components/HelperText.js.map +1 -1
  8. package/lib/commonjs/ui/components/Icon.js +6 -2
  9. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  10. package/lib/commonjs/ui/components/OxyProvider.js +7 -1
  11. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  12. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  13. package/lib/commonjs/ui/components/SignInModal.js +5 -4
  14. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  15. package/lib/commonjs/ui/components/StepBasedScreen.js +7 -2
  16. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
  17. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +1 -1
  18. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  19. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +1 -1
  20. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  21. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -20
  22. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  23. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +9 -5
  24. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  25. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +19 -13
  26. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  27. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +9 -5
  28. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  29. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +14 -10
  30. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/useAssets.js +4 -4
  32. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  33. package/lib/commonjs/ui/hooks/useAsyncAction.js +2 -2
  34. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  35. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  36. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  37. package/lib/commonjs/ui/hooks/useSettingToggle.js +2 -2
  38. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +3 -3
  40. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
  42. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/FeedbackScreen.js +2 -2
  44. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +2 -2
  46. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  48. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/OxyAuthScreen.js +2 -2
  50. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -2
  52. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/UserLinksScreen.js +11 -3
  54. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +1 -1
  56. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  58. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
  60. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  61. package/lib/commonjs/ui/stores/followStore.js +2 -2
  62. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  63. package/lib/commonjs/ui/utils/errorHandlers.js +2 -2
  64. package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
  65. package/lib/commonjs/ui/utils/fileManagement.js +8 -3
  66. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  67. package/lib/commonjs/ui/utils/sessionHelpers.js +3 -2
  68. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  69. package/lib/commonjs/ui/utils/storageHelpers.js +1 -1
  70. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  71. package/lib/commonjs/utils/hookUtils.js +4 -0
  72. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  73. package/lib/module/ui/components/BottomSheet.js +5 -3
  74. package/lib/module/ui/components/BottomSheet.js.map +1 -1
  75. package/lib/module/ui/components/FontLoader.js +1 -1
  76. package/lib/module/ui/components/FontLoader.js.map +1 -1
  77. package/lib/module/ui/components/Header.js.map +1 -1
  78. package/lib/module/ui/components/HelperText.js +1 -1
  79. package/lib/module/ui/components/HelperText.js.map +1 -1
  80. package/lib/module/ui/components/Icon.js +6 -2
  81. package/lib/module/ui/components/Icon.js.map +1 -1
  82. package/lib/module/ui/components/OxyProvider.js +7 -1
  83. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  84. package/lib/module/ui/components/QuickActions.js.map +1 -1
  85. package/lib/module/ui/components/SignInModal.js +5 -4
  86. package/lib/module/ui/components/SignInModal.js.map +1 -1
  87. package/lib/module/ui/components/StepBasedScreen.js +7 -2
  88. package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
  89. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +1 -1
  90. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  91. package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
  92. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  93. package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -20
  94. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  95. package/lib/module/ui/components/payment/PaymentMethodStep.js +9 -5
  96. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  97. package/lib/module/ui/components/payment/PaymentReviewStep.js +19 -13
  98. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  99. package/lib/module/ui/components/payment/PaymentSuccessStep.js +9 -5
  100. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  101. package/lib/module/ui/components/payment/PaymentSummaryStep.js +14 -10
  102. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  103. package/lib/module/ui/hooks/useAssets.js +4 -4
  104. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  105. package/lib/module/ui/hooks/useAsyncAction.js +2 -2
  106. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  107. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  108. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  109. package/lib/module/ui/hooks/useSettingToggle.js +2 -2
  110. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  111. package/lib/module/ui/screens/AccountOverviewScreen.js +3 -3
  112. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  113. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  114. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  115. package/lib/module/ui/screens/FeedbackScreen.js +2 -2
  116. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  117. package/lib/module/ui/screens/LanguageSelectorScreen.js +2 -2
  118. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  119. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  120. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  121. package/lib/module/ui/screens/OxyAuthScreen.js +2 -2
  122. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  123. package/lib/module/ui/screens/PaymentGatewayScreen.js +6 -2
  124. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  125. package/lib/module/ui/screens/UserLinksScreen.js +11 -3
  126. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  127. package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
  128. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  129. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  130. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  131. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  132. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  133. package/lib/module/ui/stores/followStore.js +2 -2
  134. package/lib/module/ui/stores/followStore.js.map +1 -1
  135. package/lib/module/ui/utils/errorHandlers.js +2 -2
  136. package/lib/module/ui/utils/errorHandlers.js.map +1 -1
  137. package/lib/module/ui/utils/fileManagement.js +8 -3
  138. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  139. package/lib/module/ui/utils/sessionHelpers.js +3 -2
  140. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  141. package/lib/module/ui/utils/storageHelpers.js +1 -1
  142. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  143. package/lib/module/utils/hookUtils.js +4 -0
  144. package/lib/module/utils/hookUtils.js.map +1 -1
  145. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +1 -1
  146. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts +5 -5
  150. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts +1 -1
  152. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts +9 -9
  154. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  157. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
  167. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  168. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
  169. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  170. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +2 -1
  171. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
  172. package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
  173. package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +1 -1
  174. package/lib/typescript/module/ui/components/Icon.d.ts.map +1 -1
  175. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  176. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  177. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts +5 -5
  178. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts.map +1 -1
  179. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts +1 -1
  180. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/components/TextField/types.d.ts +9 -9
  182. package/lib/typescript/module/ui/components/TextField/types.d.ts.map +1 -1
  183. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  184. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  185. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  186. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  187. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  188. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  189. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  190. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  191. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  192. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  193. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  194. package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
  195. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  196. package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
  197. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  198. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +2 -1
  199. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
  200. package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
  201. package/package.json +1 -1
  202. package/src/ui/components/BottomSheet.tsx +4 -3
  203. package/src/ui/components/FontLoader.tsx +1 -1
  204. package/src/ui/components/Header.tsx +2 -2
  205. package/src/ui/components/HelperText.tsx +1 -1
  206. package/src/ui/components/Icon.tsx +2 -0
  207. package/src/ui/components/OxyProvider.tsx +6 -0
  208. package/src/ui/components/QuickActions.tsx +1 -1
  209. package/src/ui/components/SignInModal.tsx +6 -5
  210. package/src/ui/components/StepBasedScreen.tsx +29 -19
  211. package/src/ui/components/TextField/Adornment/types.tsx +1 -1
  212. package/src/ui/components/TextField/types.tsx +14 -9
  213. package/src/ui/components/TouchableRipple/Pressable.tsx +1 -0
  214. package/src/ui/components/fileManagement/AnimatedButton.tsx +2 -2
  215. package/src/ui/components/modals/DeleteAccountModal.tsx +2 -2
  216. package/src/ui/components/payment/PaymentDetailsStep.tsx +24 -22
  217. package/src/ui/components/payment/PaymentMethodStep.tsx +7 -5
  218. package/src/ui/components/payment/PaymentReviewStep.tsx +15 -13
  219. package/src/ui/components/payment/PaymentSuccessStep.tsx +7 -5
  220. package/src/ui/components/payment/PaymentSummaryStep.tsx +12 -10
  221. package/src/ui/hooks/useAssets.ts +8 -8
  222. package/src/ui/hooks/useAsyncAction.ts +4 -4
  223. package/src/ui/hooks/useFollow.ts +1 -1
  224. package/src/ui/hooks/useProfileEditing.ts +1 -1
  225. package/src/ui/hooks/useSettingToggle.ts +4 -4
  226. package/src/ui/screens/AccountOverviewScreen.tsx +6 -6
  227. package/src/ui/screens/AccountVerificationScreen.tsx +2 -2
  228. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  229. package/src/ui/screens/LanguageSelectorScreen.tsx +3 -3
  230. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +22 -19
  231. package/src/ui/screens/OxyAuthScreen.tsx +3 -3
  232. package/src/ui/screens/PaymentGatewayScreen.tsx +4 -2
  233. package/src/ui/screens/UserLinksScreen.tsx +5 -3
  234. package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
  235. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +1 -1
  236. package/src/ui/screens/karma/KarmaRulesScreen.tsx +1 -1
  237. package/src/ui/stores/followStore.ts +4 -4
  238. package/src/ui/types/navigation.ts +2 -0
  239. package/src/ui/utils/errorHandlers.ts +2 -2
  240. package/src/ui/utils/fileManagement.ts +13 -8
  241. package/src/ui/utils/sessionHelpers.ts +3 -2
  242. package/src/ui/utils/storageHelpers.ts +1 -1
  243. package/src/utils/hookUtils.ts +4 -2
@@ -36,8 +36,8 @@ type TextInputProps = React.ComponentPropsWithRef<typeof NativeTextInput> & {
36
36
  dense?: boolean;
37
37
  multiline?: boolean;
38
38
  numberOfLines?: number;
39
- onFocus?: (args: any) => void;
40
- onBlur?: (args: any) => void;
39
+ onFocus?: (args: NativeSyntheticEvent<unknown>) => void;
40
+ onBlur?: (args: NativeSyntheticEvent<unknown>) => void;
41
41
  render?: (props: RenderProps) => React.ReactNode;
42
42
  value?: string;
43
43
  style?: StyleProp<TextStyle>;
@@ -57,10 +57,11 @@ export type RenderProps = {
57
57
  editable?: boolean;
58
58
  selectionColor?: string;
59
59
  cursorColor?: string;
60
- onFocus?: (args: any) => void;
61
- onBlur?: (args: any) => void;
60
+ onFocus?: (args: NativeSyntheticEvent<unknown>) => void;
61
+ onBlur?: (args: NativeSyntheticEvent<unknown>) => void;
62
62
  underlineColorAndroid?: string;
63
- onLayout?: (args: any) => void;
63
+ onLayout?: (args: LayoutChangeEvent) => void;
64
+ // biome-ignore lint/suspicious/noExplicitAny: style prop is passed through to native TextInput with platform-specific properties
64
65
  style: any;
65
66
  multiline?: boolean;
66
67
  numberOfLines?: number;
@@ -85,12 +86,12 @@ export type State = {
85
86
  export type ChildTextInputProps = {
86
87
  parentState: State;
87
88
  innerRef: (ref?: NativeTextInput | null) => void;
88
- onFocus?: (args: any) => void;
89
- onBlur?: (args: any) => void;
89
+ onFocus?: (args: NativeSyntheticEvent<unknown>) => void;
90
+ onBlur?: (args: NativeSyntheticEvent<unknown>) => void;
90
91
  forceFocus: () => void;
91
92
  onChangeText?: (value: string) => void;
92
93
  onInputLayout: (event: LayoutChangeEvent) => void;
93
- onLayoutAnimatedText: (args: any) => void;
94
+ onLayoutAnimatedText: (args: LayoutChangeEvent) => void;
94
95
  onLabelTextLayout: (event: NativeSyntheticEvent<TextLayoutEventData>) => void;
95
96
  onLeftAffixLayoutChange: (event: LayoutChangeEvent) => void;
96
97
  onRightAffixLayoutChange: (event: LayoutChangeEvent) => void;
@@ -98,6 +99,7 @@ export type ChildTextInputProps = {
98
99
 
99
100
  export type LabelProps = {
100
101
  mode?: 'flat' | 'outlined';
102
+ // biome-ignore lint/suspicious/noExplicitAny: style object accessed with direct property reads in downstream label components
101
103
  placeholderStyle: any;
102
104
  placeholderOpacity:
103
105
  | number
@@ -110,6 +112,7 @@ export type LabelProps = {
110
112
  fontSize: number;
111
113
  lineHeight?: number | undefined;
112
114
  fontWeight: TextStyle['fontWeight'];
115
+ // biome-ignore lint/suspicious/noExplicitAny: font object shape varies across platforms and RN versions
113
116
  font: any;
114
117
  topPosition: number;
115
118
  paddingLeft?: number;
@@ -122,7 +125,7 @@ export type LabelProps = {
122
125
  activeColor: string;
123
126
  errorColor?: string;
124
127
  labelError?: boolean | null;
125
- onLayoutAnimatedText: (args: any) => void;
128
+ onLayoutAnimatedText: (args: LayoutChangeEvent) => void;
126
129
  onLabelTextLayout: (event: NativeSyntheticEvent<TextLayoutEventData>) => void;
127
130
  roundness: number;
128
131
  maxFontSizeMultiplier?: number | undefined | null;
@@ -140,6 +143,7 @@ export type InputLabelProps = {
140
143
  labelLayoutWidth: number;
141
144
  labelLayoutHeight: number;
142
145
  inputContainerLayout: { width: number };
146
+ // biome-ignore lint/suspicious/noExplicitAny: labelBackground is a render function or React element with varying signatures
143
147
  labelBackground?: any;
144
148
  maxFontSizeMultiplier?: number | undefined | null;
145
149
  isV3?: boolean;
@@ -147,6 +151,7 @@ export type InputLabelProps = {
147
151
  } & LabelProps;
148
152
 
149
153
  export type LabelBackgroundProps = {
154
+ // biome-ignore lint/suspicious/noExplicitAny: style object accessed with direct property reads for transform/padding
150
155
  labelStyle: any;
151
156
  labeled: Animated.Value;
152
157
  labelLayoutWidth: number;
@@ -38,4 +38,5 @@ export type PressableProps = Omit<
38
38
 
39
39
  export const Pressable: React.ForwardRefExoticComponent<
40
40
  PressableProps & React.RefAttributes<View>
41
+ // biome-ignore lint/suspicious/noExplicitAny: PressableNative type must be widened to support web-specific hover/focus state callback types
41
42
  > = PressableNative as any;
@@ -10,7 +10,7 @@ interface AnimatedButtonProps {
10
10
  icon: string;
11
11
  primaryColor: string;
12
12
  textColor: string;
13
- style: any;
13
+ style: Record<string, unknown>;
14
14
  }
15
15
 
16
16
  /**
@@ -46,7 +46,7 @@ export const AnimatedButton: React.FC<AnimatedButtonProps> = ({
46
46
  <Animated.View style={[style, { backgroundColor }]}>
47
47
  <Animated.View>
48
48
  <MaterialCommunityIcons
49
- name={icon as any}
49
+ name={icon as React.ComponentProps<typeof MaterialCommunityIcons>['name']}
50
50
  size={16}
51
51
  color={isSelected ? '#FFFFFF' : textColor}
52
52
  />
@@ -54,8 +54,8 @@ const DeleteAccountModal: React.FC<DeleteAccountModalProps> = ({
54
54
  try {
55
55
  await onDelete(password);
56
56
  // Modal will be closed by parent on success
57
- } catch (err: any) {
58
- setError(err?.message || t('deleteAccount.error') || 'Failed to delete account');
57
+ } catch (err: unknown) {
58
+ setError((err instanceof Error ? err.message : null) || t('deleteAccount.error') || 'Failed to delete account');
59
59
  } finally {
60
60
  setIsDeleting(false);
61
61
  }
@@ -8,6 +8,7 @@ import { FAIRWalletIcon } from '../icon';
8
8
  import { createPaymentStyles } from './paymentStyles';
9
9
  import { toast } from '../../../lib/sonner';
10
10
  import type { CardDetails, PaymentColors, PaymentStepAnimations } from './types';
11
+ import { useI18n } from '../../hooks/useI18n';
11
12
 
12
13
  interface PaymentDetailsStepProps {
13
14
  paymentMethod: string;
@@ -37,11 +38,12 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
37
38
  QRCodeComponent,
38
39
  }) => {
39
40
  const styles = useMemo(() => createPaymentStyles(colors), [colors]);
41
+ const { t } = useI18n();
40
42
  const { fadeAnim, slideAnim, scaleAnim } = animations;
41
43
 
42
44
  const handleCopyAddress = () => {
43
45
  Clipboard.setString(faircoinAddress);
44
- toast('Address copied to clipboard!');
46
+ toast(t('payment.details.addressCopied'));
45
47
  };
46
48
 
47
49
  const handleOpenFairWallet = () => {
@@ -68,22 +70,22 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
68
70
  >
69
71
  <View style={styles.section}>
70
72
  <Text style={styles.sectionTitle}>
71
- {paymentMethod === 'card' ? 'Card Details' :
72
- paymentMethod === 'oxy' ? 'Oxy Pay' :
73
- paymentMethod === 'faircoin' ? 'FairCoin Payment' : 'Payment Details'}
73
+ {paymentMethod === 'card' ? t('payment.details.cardDetails') :
74
+ paymentMethod === 'oxy' ? t('payment.details.oxyPay') :
75
+ paymentMethod === 'faircoin' ? t('payment.details.faircoinPayment') : t('payment.details.paymentDetails')}
74
76
  </Text>
75
77
 
76
78
  {paymentMethod === 'card' && (
77
79
  <View style={styles.cardPaymentCard}>
78
80
  <View style={styles.cardPaymentContent}>
79
81
  <Ionicons name="card-outline" size={64} color={colors.primary} style={styles.cardPaymentIcon} />
80
- <Text style={styles.cardPaymentMainTitle}>Credit Card</Text>
81
- <Text style={styles.cardPaymentSubtitle}>Enter your card details securely</Text>
82
+ <Text style={styles.cardPaymentMainTitle}>{t('payment.details.creditCard')}</Text>
83
+ <Text style={styles.cardPaymentSubtitle}>{t('payment.details.enterCardSecurely')}</Text>
82
84
 
83
85
  <View style={styles.cardPaymentFields}>
84
86
  <View style={styles.cardRowInfo}>
85
87
  <Ionicons name="card-outline" size={24} color={colors.primary} style={styles.cardRowIcon} />
86
- <Text style={styles.cardRowText}>We accept Visa, Mastercard, and more</Text>
88
+ <Text style={styles.cardRowText}>{t('payment.details.acceptedCards')}</Text>
87
89
  </View>
88
90
  <TextField
89
91
  value={cardDetails.number}
@@ -131,7 +133,7 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
131
133
  </View>
132
134
 
133
135
  <View style={{ height: 18 }} />
134
- <Text style={styles.cardPaymentWaiting}>Ready to process payment...</Text>
136
+ <Text style={styles.cardPaymentWaiting}>{t('payment.details.readyToProcess')}</Text>
135
137
  </View>
136
138
  </View>
137
139
  )}
@@ -140,13 +142,13 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
140
142
  <View style={styles.oxyPayCard}>
141
143
  <View style={styles.oxyPayContent}>
142
144
  <Ionicons name="wallet-outline" size={64} color={colors.primary} style={styles.oxyPayIcon} />
143
- <Text style={styles.oxyPayMainTitle}>Oxy Pay</Text>
144
- <Text style={styles.oxyPaySubtitle}>Pay with your in-app wallet</Text>
145
+ <Text style={styles.oxyPayMainTitle}>{t('payment.details.oxyPay')}</Text>
146
+ <Text style={styles.oxyPaySubtitle}>{t('payment.details.payWithWallet')}</Text>
145
147
  <View style={styles.oxyPayBalanceBox}>
146
- <Text style={styles.oxyPayBalanceText}>Balance: ⊜ 123.45</Text>
148
+ <Text style={styles.oxyPayBalanceText}>{t('payment.details.balance', { balance: '⊜ 123.45' })}</Text>
147
149
  </View>
148
150
  <View style={{ height: 18 }} />
149
- <Text style={styles.oxyPayWaiting}>Ready to process payment...</Text>
151
+ <Text style={styles.oxyPayWaiting}>{t('payment.details.readyToProcess')}</Text>
150
152
  </View>
151
153
  </View>
152
154
  )}
@@ -156,10 +158,10 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
156
158
  <View style={styles.faircoinContent}>
157
159
  <FAIRWalletIcon size={64} style={styles.faircoinIcon} />
158
160
  <Text style={styles.faircoinMainTitle}>FAIRWallet</Text>
159
- <Text style={styles.faircoinSubtitle}>Pay with FairCoin</Text>
161
+ <Text style={styles.faircoinSubtitle}>{t('payment.details.payWithFairCoin')}</Text>
160
162
  {!isMobile && QRCodeComponent ? (
161
163
  <>
162
- <Text style={styles.faircoinScanText}>Scan to Pay</Text>
164
+ <Text style={styles.faircoinScanText}>{t('payment.details.scanToPay')}</Text>
163
165
  <View style={styles.faircoinQRCard}>
164
166
  <QRCodeComponent value={faircoinAddress} size={qrSize - 32} />
165
167
  <View style={styles.faircoinQRBadge}>
@@ -169,30 +171,30 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
169
171
  </>
170
172
  ) : (
171
173
  <>
172
- <Text style={styles.faircoinTitle}>Use the options below to pay with FAIRWallet</Text>
174
+ <Text style={styles.faircoinTitle}>{t('payment.details.fairWalletInstructions')}</Text>
173
175
  <Text style={styles.faircoinAddress}>{faircoinAddress}</Text>
174
176
  <TouchableOpacity
175
177
  style={[styles.faircoinButton, { backgroundColor: '#9ffb50', borderRadius: 18, marginTop: 12, width: '90%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }]}
176
178
  onPress={handleOpenFairWallet}
177
179
  accessibilityRole="button"
178
- accessibilityLabel="Open in FAIRWallet"
180
+ accessibilityLabel={t('payment.details.openInFairWallet')}
179
181
  >
180
182
  <FAIRWalletIcon size={20} style={{ marginRight: 8 }} />
181
- <Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>Open in FAIRWallet</Text>
183
+ <Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>{t('payment.details.openInFairWallet')}</Text>
182
184
  </TouchableOpacity>
183
185
  <TouchableOpacity
184
186
  style={[styles.faircoinButton, { backgroundColor: '#9ffb50', borderRadius: 18, marginTop: 10, width: '90%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }]}
185
187
  onPress={handleCopyAddress}
186
188
  accessibilityRole="button"
187
- accessibilityLabel="Copy FairCoin address"
189
+ accessibilityLabel={t('payment.details.copyAddress')}
188
190
  >
189
191
  <FAIRWalletIcon size={20} style={{ marginRight: 8 }} />
190
- <Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>Copy Address</Text>
192
+ <Text style={[styles.faircoinButtonText, { color: '#1b1f0a', fontWeight: 'bold', fontSize: 16 }]}>{t('payment.details.copyAddress')}</Text>
191
193
  </TouchableOpacity>
192
194
  </>
193
195
  )}
194
196
  <View style={{ height: 18 }} />
195
- <Text style={styles.faircoinWaiting}>Waiting for payment...</Text>
197
+ <Text style={styles.faircoinWaiting}>{t('payment.details.waitingForPayment')}</Text>
196
198
  </View>
197
199
  </View>
198
200
  )}
@@ -201,13 +203,13 @@ const PaymentDetailsStep: React.FC<PaymentDetailsStepProps> = ({
201
203
  <GroupedPillButtons
202
204
  buttons={[
203
205
  {
204
- text: 'Back',
206
+ text: t('payment.actions.back'),
205
207
  onPress: onBack,
206
208
  icon: 'arrow-back',
207
209
  variant: 'transparent',
208
210
  },
209
211
  {
210
- text: 'Continue',
212
+ text: t('payment.actions.continue'),
211
213
  onPress: onNext,
212
214
  icon: 'arrow-forward',
213
215
  variant: 'primary',
@@ -6,6 +6,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
6
6
  import { FAIRWalletIcon } from '../icon';
7
7
  import { createPaymentStyles } from './paymentStyles';
8
8
  import type { PaymentMethod, PaymentColors, PaymentStepAnimations } from './types';
9
+ import { useI18n } from '../../hooks/useI18n';
9
10
 
10
11
  interface PaymentMethodStepProps {
11
12
  availablePaymentMethods: PaymentMethod[];
@@ -27,6 +28,7 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
27
28
  onNext,
28
29
  }) => {
29
30
  const styles = useMemo(() => createPaymentStyles(colors), [colors]);
31
+ const { t } = useI18n();
30
32
  const { fadeAnim, slideAnim, scaleAnim } = animations;
31
33
 
32
34
  return (
@@ -45,7 +47,7 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
45
47
  accessibilityLabel="Choose payment method step"
46
48
  >
47
49
  <View style={styles.section}>
48
- <Text style={styles.sectionTitle}>Choose Payment Method</Text>
50
+ <Text style={styles.sectionTitle}>{t('payment.method.title')}</Text>
49
51
 
50
52
  <GroupedSection
51
53
  items={availablePaymentMethods.map(method => ({
@@ -54,8 +56,8 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
54
56
  iconColor: method.key === 'card' ? '#007AFF' :
55
57
  method.key === 'oxy' ? '#32D74B' :
56
58
  method.key === 'faircoin' ? '#9ffb50' : colors.primary,
57
- title: method.label,
58
- subtitle: method.description,
59
+ title: t(`payment.methods.${method.key}.label`),
60
+ subtitle: t(`payment.methods.${method.key}.description`),
59
61
  onPress: () => onSelectMethod(method.key),
60
62
  selected: selectedMethod === method.key,
61
63
  showChevron: false,
@@ -69,13 +71,13 @@ const PaymentMethodStep: React.FC<PaymentMethodStepProps> = ({
69
71
  <GroupedPillButtons
70
72
  buttons={[
71
73
  {
72
- text: 'Back',
74
+ text: t('payment.actions.back'),
73
75
  onPress: onBack,
74
76
  icon: 'arrow-back',
75
77
  variant: 'transparent',
76
78
  },
77
79
  {
78
- text: 'Continue',
80
+ text: t('payment.actions.continue'),
79
81
  onPress: onNext,
80
82
  icon: 'arrow-forward',
81
83
  variant: 'primary',
@@ -6,6 +6,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
6
6
  import { createPaymentStyles } from './paymentStyles';
7
7
  import { PAYMENT_METHODS, getCurrencySymbol } from './constants';
8
8
  import type { CardDetails, PaymentColors, PaymentStepAnimations } from './types';
9
+ import { useI18n } from '../../hooks/useI18n';
9
10
 
10
11
  interface PaymentReviewStepProps {
11
12
  amount: string | number;
@@ -31,6 +32,7 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
31
32
  onPay,
32
33
  }) => {
33
34
  const styles = useMemo(() => createPaymentStyles(colors), [colors]);
35
+ const { t } = useI18n();
34
36
  const currencySymbol = getCurrencySymbol(currency);
35
37
  const { fadeAnim, slideAnim, scaleAnim } = animations;
36
38
 
@@ -52,7 +54,7 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
52
54
  accessibilityLabel="Review payment step"
53
55
  >
54
56
  <View style={styles.section}>
55
- <Text style={styles.sectionTitle}>Review Payment</Text>
57
+ <Text style={styles.sectionTitle}>{t('payment.review.title')}</Text>
56
58
 
57
59
  <GroupedSection
58
60
  items={[
@@ -60,43 +62,43 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
60
62
  id: 'secure-payment',
61
63
  icon: 'shield-check',
62
64
  iconColor: colors.success || '#4BB543',
63
- title: 'Secure payment',
64
- subtitle: 'Your payment is protected by industry-standard encryption',
65
+ title: t('payment.review.securePayment'),
66
+ subtitle: t('payment.review.securePaymentDesc'),
65
67
  },
66
68
  {
67
69
  id: 'amount',
68
70
  icon: 'cash',
69
71
  iconColor: colors.primary,
70
- title: 'Amount',
72
+ title: t('payment.review.amount'),
71
73
  subtitle: `${currencySymbol} ${amount}`,
72
74
  },
73
75
  {
74
76
  id: 'payment-method',
75
77
  icon: selectedMethod?.icon as any,
76
78
  iconColor: colors.primary,
77
- title: 'Payment Method',
78
- subtitle: selectedMethod?.label,
79
+ title: t('payment.review.paymentMethod'),
80
+ subtitle: selectedMethod ? t(`payment.methods.${selectedMethod.key}.label`) : undefined,
79
81
  },
80
82
  ...(paymentMethod === 'card' ? [{
81
83
  id: 'card-details',
82
84
  icon: 'card' as const,
83
85
  iconColor: colors.primary,
84
- title: 'Card',
86
+ title: t('payment.review.card'),
85
87
  subtitle: cardDetails.number.replace(/.(?=.{4})/g, '*'),
86
88
  }] : []),
87
89
  ...(paymentMethod === 'oxy' ? [{
88
90
  id: 'oxy-balance',
89
91
  icon: 'wallet' as const,
90
92
  iconColor: colors.primary,
91
- title: 'Oxy Pay Account',
92
- subtitle: 'Balance: ⊜ 123.45',
93
+ title: t('payment.review.oxyPayAccount'),
94
+ subtitle: t('payment.details.balance', { balance: '⊜ 123.45' }),
93
95
  }] : []),
94
96
  ...(paymentMethod === 'faircoin' ? [{
95
97
  id: 'faircoin-wallet',
96
98
  icon: 'qr-code' as const,
97
99
  iconColor: colors.primary,
98
- title: 'FairCoin Wallet',
99
- subtitle: 'Paid via QR',
100
+ title: t('payment.review.faircoinWallet'),
101
+ subtitle: t('payment.review.paidViaQR'),
100
102
  }] : []),
101
103
  ]}
102
104
  />
@@ -105,13 +107,13 @@ const PaymentReviewStep: React.FC<PaymentReviewStepProps> = ({
105
107
  <GroupedPillButtons
106
108
  buttons={[
107
109
  {
108
- text: 'Back',
110
+ text: t('payment.actions.back'),
109
111
  onPress: onBack,
110
112
  icon: 'arrow-back',
111
113
  variant: 'transparent',
112
114
  },
113
115
  {
114
- text: isPaying ? 'Processing...' : 'Pay Now',
116
+ text: isPaying ? t('payment.review.processing') : t('payment.review.payNow'),
115
117
  onPress: onPay,
116
118
  icon: 'checkmark',
117
119
  variant: 'primary',
@@ -5,6 +5,7 @@ import { Ionicons } from '@expo/vector-icons';
5
5
  import GroupedPillButtons from '../internal/GroupedPillButtons';
6
6
  import { createPaymentStyles } from './paymentStyles';
7
7
  import type { PaymentColors, PaymentStepAnimations } from './types';
8
+ import { useI18n } from '../../hooks/useI18n';
8
9
 
9
10
  interface PaymentSuccessStepProps {
10
11
  colors: PaymentColors;
@@ -18,6 +19,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
18
19
  onDone,
19
20
  }) => {
20
21
  const styles = useMemo(() => createPaymentStyles(colors), [colors]);
22
+ const { t } = useI18n();
21
23
  const { fadeAnim, slideAnim, scaleAnim } = animations;
22
24
 
23
25
  return (
@@ -36,7 +38,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
36
38
  accessibilityLabel="Payment complete"
37
39
  >
38
40
  <View style={styles.section}>
39
- <Text style={styles.sectionTitle}>Payment Complete</Text>
41
+ <Text style={styles.sectionTitle}>{t('payment.success.title')}</Text>
40
42
 
41
43
  <View style={styles.successCard}>
42
44
  <View style={styles.successContent}>
@@ -46,10 +48,10 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
46
48
  color={colors.success || '#4BB543'}
47
49
  style={styles.successIcon}
48
50
  />
49
- <Text style={styles.successMainTitle}>Payment Successful!</Text>
50
- <Text style={styles.successSubtitle}>Thank you for your payment.</Text>
51
+ <Text style={styles.successMainTitle}>{t('payment.success.heading')}</Text>
52
+ <Text style={styles.successSubtitle}>{t('payment.success.thanks')}</Text>
51
53
  <View style={{ height: 18 }} />
52
- <Text style={styles.successMessage}>Your transaction has been processed successfully.</Text>
54
+ <Text style={styles.successMessage}>{t('payment.success.processed')}</Text>
53
55
  </View>
54
56
  </View>
55
57
  </View>
@@ -57,7 +59,7 @@ const PaymentSuccessStep: React.FC<PaymentSuccessStepProps> = ({
57
59
  <GroupedPillButtons
58
60
  buttons={[
59
61
  {
60
- text: 'Done',
62
+ text: t('payment.actions.done'),
61
63
  onPress: onDone,
62
64
  icon: 'checkmark',
63
65
  variant: 'primary',
@@ -7,6 +7,7 @@ import GroupedPillButtons from '../internal/GroupedPillButtons';
7
7
  import { createPaymentStyles } from './paymentStyles';
8
8
  import { getCurrencySymbol, CURRENCY_SYMBOLS } from './constants';
9
9
  import type { PaymentItem, PaymentColors, PaymentStepAnimations } from './types';
10
+ import { useI18n } from '../../hooks/useI18n';
10
11
 
11
12
  interface PaymentSummaryStepProps {
12
13
  paymentItems: PaymentItem[];
@@ -40,6 +41,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
40
41
  onNext,
41
42
  }) => {
42
43
  const styles = useMemo(() => createPaymentStyles(colors), [colors]);
44
+ const { t } = useI18n();
43
45
  const currencySymbol = getCurrencySymbol(currency);
44
46
  const { fadeAnim, slideAnim, scaleAnim } = animations;
45
47
 
@@ -59,7 +61,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
59
61
  accessibilityLabel="Payment summary step"
60
62
  >
61
63
  <View style={styles.section}>
62
- <Text style={styles.sectionTitle}>Payment Summary</Text>
64
+ <Text style={styles.sectionTitle}>{t('payment.summary.title')}</Text>
63
65
 
64
66
  <View style={styles.summaryCard}>
65
67
  <View style={styles.summaryCardContent}>
@@ -70,10 +72,10 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
70
72
  style={styles.summaryCardIcon}
71
73
  />
72
74
  <Text style={styles.summaryCardMainTitle}>
73
- {paymentItems.length > 0 ? 'Order Summary' : 'Payment'}
75
+ {paymentItems.length > 0 ? t('payment.summary.orderSummary') : t('payment.summary.payment')}
74
76
  </Text>
75
77
  <Text style={styles.summaryCardSubtitle}>
76
- {paymentItems.length > 0 ? 'Review your payment details' : 'Complete your payment'}
78
+ {paymentItems.length > 0 ? t('payment.summary.reviewDetails') : t('payment.summary.completePayment')}
77
79
  </Text>
78
80
 
79
81
  {paymentItems.length > 0 ? (
@@ -99,15 +101,15 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
99
101
 
100
102
  <View style={styles.summaryCardTotalSection}>
101
103
  <View style={styles.summaryCardTotalRow}>
102
- <Text style={styles.summaryCardTotalLabel}>Subtotal</Text>
104
+ <Text style={styles.summaryCardTotalLabel}>{t('payment.summary.subtotal')}</Text>
103
105
  <Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
104
106
  </View>
105
107
  <View style={styles.summaryCardTotalRow}>
106
- <Text style={styles.summaryCardTotalLabel}>Tax</Text>
108
+ <Text style={styles.summaryCardTotalLabel}>{t('payment.summary.tax')}</Text>
107
109
  <Text style={styles.summaryCardTotalValue}>{currencySymbol} 0.00</Text>
108
110
  </View>
109
111
  <View style={styles.summaryCardTotalRow}>
110
- <Text style={styles.summaryCardTotalLabel}>Total</Text>
112
+ <Text style={styles.summaryCardTotalLabel}>{t('payment.summary.total')}</Text>
111
113
  <Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
112
114
  </View>
113
115
  </View>
@@ -115,7 +117,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
115
117
  ) : (
116
118
  <>
117
119
  <View style={styles.summaryCardAmount}>
118
- <Text style={styles.summaryCardAmountLabel}>Amount to Pay</Text>
120
+ <Text style={styles.summaryCardAmountLabel}>{t('payment.summary.amountToPay')}</Text>
119
121
  <Text style={styles.summaryCardAmountValue}>{currencySymbol} {amount}</Text>
120
122
  {description && (
121
123
  <Text style={styles.summaryCardAmountDescription}>{description}</Text>
@@ -126,7 +128,7 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
126
128
 
127
129
  <View style={styles.summaryCardTotalSection}>
128
130
  <View style={styles.summaryCardTotalRow}>
129
- <Text style={styles.summaryCardTotalLabel}>Total</Text>
131
+ <Text style={styles.summaryCardTotalLabel}>{t('payment.summary.total')}</Text>
130
132
  <Text style={styles.summaryCardTotalValue}>{currencySymbol} {amount}</Text>
131
133
  </View>
132
134
  </View>
@@ -139,13 +141,13 @@ const PaymentSummaryStep: React.FC<PaymentSummaryStepProps> = ({
139
141
  <GroupedPillButtons
140
142
  buttons={[
141
143
  {
142
- text: 'Close',
144
+ text: t('payment.actions.close'),
143
145
  onPress: onClose,
144
146
  icon: 'close',
145
147
  variant: 'transparent',
146
148
  },
147
149
  {
148
- text: 'Continue',
150
+ text: t('payment.actions.continue'),
149
151
  onPress: onNext,
150
152
  icon: 'arrow-forward',
151
153
  variant: 'primary',
@@ -84,8 +84,8 @@ export const useAssets = () => {
84
84
  }
85
85
 
86
86
  return null;
87
- } catch (error: any) {
88
- setUploadError(error.message || 'Upload failed');
87
+ } catch (error: unknown) {
88
+ setUploadError((error instanceof Error ? error.message : null) || 'Upload failed');
89
89
  throw error;
90
90
  } finally {
91
91
  setUploading(false);
@@ -133,8 +133,8 @@ export const useAssets = () => {
133
133
  createdAt: new Date().toISOString()
134
134
  });
135
135
  }
136
- } catch (error: any) {
137
- setLinkError(error.message || 'Link failed');
136
+ } catch (error: unknown) {
137
+ setLinkError((error instanceof Error ? error.message : null) || 'Link failed');
138
138
  throw error;
139
139
  } finally {
140
140
  setLinking(false);
@@ -164,8 +164,8 @@ export const useAssets = () => {
164
164
  // Update store optimistically
165
165
  removeLink(assetId, app, entityType, entityId);
166
166
  }
167
- } catch (error: any) {
168
- setLinkError(error.message || 'Unlink failed');
167
+ } catch (error: unknown) {
168
+ setLinkError((error instanceof Error ? error.message : null) || 'Unlink failed');
169
169
  throw error;
170
170
  } finally {
171
171
  setLinking(false);
@@ -213,8 +213,8 @@ export const useAssets = () => {
213
213
 
214
214
  await oxyInstance.assetDelete(assetId, force);
215
215
  removeAsset(assetId);
216
- } catch (error: any) {
217
- setDeleteError(error.message || 'Delete failed');
216
+ } catch (error: unknown) {
217
+ setDeleteError((error instanceof Error ? error.message : null) || 'Delete failed');
218
218
  throw error;
219
219
  } finally {
220
220
  setDeleting(false);
@@ -75,10 +75,10 @@ export function useAsyncAction<T = void>(
75
75
 
76
76
  onSuccess?.(result);
77
77
  return result;
78
- } catch (err: any) {
78
+ } catch (err: unknown) {
79
79
  const message = typeof errorMessage === 'function'
80
80
  ? errorMessage(err)
81
- : errorMessage || err?.message || 'An error occurred';
81
+ : errorMessage || (err instanceof Error ? err.message : null) || 'An error occurred';
82
82
 
83
83
  toast.error(message);
84
84
  setError(err instanceof Error ? err : new Error(message));
@@ -120,8 +120,8 @@ export async function executeWithToast<T>(
120
120
  toast.success(successMessage);
121
121
  }
122
122
  return result;
123
- } catch (err: any) {
124
- toast.error(errorMessage || err?.message || 'An error occurred');
123
+ } catch (err: unknown) {
124
+ toast.error(errorMessage || (err instanceof Error ? err.message : null) || 'An error occurred');
125
125
  return undefined;
126
126
  }
127
127
  }
@@ -61,7 +61,7 @@ export const useFollow = (userId?: string | string[]) => {
61
61
 
62
62
  // If either count is not set and we're not already loading counts, trigger a fetch.
63
63
  if ((followerCount === null || followingCount === null) && !isLoadingCounts) {
64
- fetchUserCounts().catch((err: any) => console.warn('useFollow: fetchUserCounts failed', err));
64
+ fetchUserCounts().catch((err: unknown) => console.warn('useFollow: fetchUserCounts failed', err));
65
65
  }
66
66
  }, [isSingleUser, userId, followerCount, followingCount, isLoadingCounts, fetchUserCounts]);
67
67
 
@@ -82,7 +82,7 @@ export const useProfileEditing = () => {
82
82
  try {
83
83
  await updateProfileMutation.mutateAsync(updateData);
84
84
  return true;
85
- } catch (error: any) {
85
+ } catch (error: unknown) {
86
86
  // Error toast is handled by the mutation
87
87
  return false;
88
88
  }