@oxyhq/services 6.9.4 → 6.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/lib/commonjs/ui/client.js +0 -7
  2. package/lib/commonjs/ui/client.js.map +1 -1
  3. package/lib/commonjs/ui/components/BottomSheet.js +5 -3
  4. package/lib/commonjs/ui/components/BottomSheet.js.map +1 -1
  5. package/lib/commonjs/ui/components/FontLoader.js +1 -1
  6. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  7. package/lib/commonjs/ui/components/Header.js.map +1 -1
  8. package/lib/commonjs/ui/components/HelperText.js +1 -1
  9. package/lib/commonjs/ui/components/HelperText.js.map +1 -1
  10. package/lib/commonjs/ui/components/Icon.js +6 -2
  11. package/lib/commonjs/ui/components/Icon.js.map +1 -1
  12. package/lib/commonjs/ui/components/OxyProvider.js +9 -1
  13. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  14. package/lib/commonjs/ui/components/QuickActions.js.map +1 -1
  15. package/lib/commonjs/ui/components/SignInModal.js +5 -4
  16. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  17. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +1 -1
  18. package/lib/commonjs/ui/components/feedback/FormInput.js.map +1 -1
  19. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  20. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -1
  21. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +1 -1
  22. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  23. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -20
  24. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  25. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +9 -5
  26. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  27. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +19 -13
  28. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  29. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +9 -5
  30. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  31. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +14 -10
  32. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  33. package/lib/commonjs/ui/components/types.js +4 -0
  34. package/lib/commonjs/ui/hooks/useAssets.js +4 -4
  35. package/lib/commonjs/ui/hooks/useAssets.js.map +1 -1
  36. package/lib/commonjs/ui/hooks/useAsyncAction.js +2 -2
  37. package/lib/commonjs/ui/hooks/useAsyncAction.js.map +1 -1
  38. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  39. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  40. package/lib/commonjs/ui/hooks/useSettingToggle.js +2 -2
  41. package/lib/commonjs/ui/hooks/useSettingToggle.js.map +1 -1
  42. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +3 -3
  43. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  44. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
  45. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js +66 -60
  47. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  48. package/lib/commonjs/ui/screens/FeedbackScreen.js +2 -2
  49. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/FileManagementScreen.js +139 -79
  51. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +2 -2
  53. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  55. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  56. package/lib/commonjs/ui/screens/OxyAuthScreen.js +2 -2
  57. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -2
  59. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  60. package/lib/commonjs/ui/screens/SessionManagementScreen.js +39 -29
  61. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  62. package/lib/commonjs/ui/screens/UserLinksScreen.js +11 -3
  63. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +1 -1
  65. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  67. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
  69. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  70. package/lib/commonjs/ui/stores/followStore.js +2 -2
  71. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  72. package/lib/commonjs/ui/utils/errorHandlers.js +2 -2
  73. package/lib/commonjs/ui/utils/errorHandlers.js.map +1 -1
  74. package/lib/commonjs/ui/utils/fileManagement.js +8 -3
  75. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  76. package/lib/commonjs/ui/utils/sessionHelpers.js +3 -2
  77. package/lib/commonjs/ui/utils/sessionHelpers.js.map +1 -1
  78. package/lib/commonjs/ui/utils/storageHelpers.js +1 -1
  79. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  80. package/lib/commonjs/utils/hookUtils.js +4 -0
  81. package/lib/commonjs/utils/hookUtils.js.map +1 -1
  82. package/lib/module/ui/client.js +0 -1
  83. package/lib/module/ui/client.js.map +1 -1
  84. package/lib/module/ui/components/BottomSheet.js +5 -3
  85. package/lib/module/ui/components/BottomSheet.js.map +1 -1
  86. package/lib/module/ui/components/FontLoader.js +1 -1
  87. package/lib/module/ui/components/FontLoader.js.map +1 -1
  88. package/lib/module/ui/components/Header.js.map +1 -1
  89. package/lib/module/ui/components/HelperText.js +1 -1
  90. package/lib/module/ui/components/HelperText.js.map +1 -1
  91. package/lib/module/ui/components/Icon.js +6 -2
  92. package/lib/module/ui/components/Icon.js.map +1 -1
  93. package/lib/module/ui/components/OxyProvider.js +9 -1
  94. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  95. package/lib/module/ui/components/QuickActions.js.map +1 -1
  96. package/lib/module/ui/components/SignInModal.js +5 -4
  97. package/lib/module/ui/components/SignInModal.js.map +1 -1
  98. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +1 -1
  99. package/lib/module/ui/components/feedback/FormInput.js.map +1 -1
  100. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +1 -1
  101. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -1
  102. package/lib/module/ui/components/modals/DeleteAccountModal.js +1 -1
  103. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  104. package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -20
  105. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  106. package/lib/module/ui/components/payment/PaymentMethodStep.js +9 -5
  107. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  108. package/lib/module/ui/components/payment/PaymentReviewStep.js +19 -13
  109. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  110. package/lib/module/ui/components/payment/PaymentSuccessStep.js +9 -5
  111. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  112. package/lib/module/ui/components/payment/PaymentSummaryStep.js +14 -10
  113. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  114. package/lib/module/ui/components/types.js +2 -0
  115. package/lib/module/ui/hooks/useAssets.js +4 -4
  116. package/lib/module/ui/hooks/useAssets.js.map +1 -1
  117. package/lib/module/ui/hooks/useAsyncAction.js +2 -2
  118. package/lib/module/ui/hooks/useAsyncAction.js.map +1 -1
  119. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  120. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  121. package/lib/module/ui/hooks/useSettingToggle.js +2 -2
  122. package/lib/module/ui/hooks/useSettingToggle.js.map +1 -1
  123. package/lib/module/ui/screens/AccountOverviewScreen.js +3 -3
  124. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  125. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  126. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  127. package/lib/module/ui/screens/AppInfoScreen.js +66 -60
  128. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  129. package/lib/module/ui/screens/FeedbackScreen.js +2 -2
  130. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  131. package/lib/module/ui/screens/FileManagementScreen.js +139 -79
  132. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  133. package/lib/module/ui/screens/LanguageSelectorScreen.js +2 -2
  134. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  135. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +22 -17
  136. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  137. package/lib/module/ui/screens/OxyAuthScreen.js +2 -2
  138. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  139. package/lib/module/ui/screens/PaymentGatewayScreen.js +6 -2
  140. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  141. package/lib/module/ui/screens/SessionManagementScreen.js +39 -29
  142. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  143. package/lib/module/ui/screens/UserLinksScreen.js +11 -3
  144. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  145. package/lib/module/ui/screens/WelcomeNewUserScreen.js +1 -1
  146. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  147. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +1 -1
  148. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  149. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  150. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  151. package/lib/module/ui/stores/followStore.js +2 -2
  152. package/lib/module/ui/stores/followStore.js.map +1 -1
  153. package/lib/module/ui/utils/errorHandlers.js +2 -2
  154. package/lib/module/ui/utils/errorHandlers.js.map +1 -1
  155. package/lib/module/ui/utils/fileManagement.js +8 -3
  156. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  157. package/lib/module/ui/utils/sessionHelpers.js +3 -2
  158. package/lib/module/ui/utils/sessionHelpers.js.map +1 -1
  159. package/lib/module/ui/utils/storageHelpers.js +1 -1
  160. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  161. package/lib/module/utils/hookUtils.js +4 -0
  162. package/lib/module/utils/hookUtils.js.map +1 -1
  163. package/lib/typescript/commonjs/ui/client.d.ts +0 -1
  164. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  168. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts +1 -1
  170. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  172. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  173. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  176. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  178. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/ui/components/types.d.ts +18 -17
  180. package/lib/typescript/commonjs/ui/components/types.d.ts.map +1 -1
  181. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  182. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  185. package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  186. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
  188. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +1 -1
  190. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts +2 -1
  192. package/lib/typescript/commonjs/ui/utils/sessionHelpers.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/utils/hookUtils.d.ts.map +1 -1
  194. package/lib/typescript/module/ui/client.d.ts +0 -1
  195. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  196. package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +1 -1
  197. package/lib/typescript/module/ui/components/Icon.d.ts.map +1 -1
  198. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  199. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  200. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts +1 -1
  201. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +1 -1
  202. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +1 -1
  203. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +1 -1
  204. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +1 -1
  205. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  206. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  207. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  208. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  209. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  210. package/lib/typescript/module/ui/components/types.d.ts +18 -17
  211. package/lib/typescript/module/ui/components/types.d.ts.map +1 -1
  212. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  213. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  214. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  215. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  216. package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  217. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  218. package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
  219. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  220. package/lib/typescript/module/ui/utils/fileManagement.d.ts +1 -1
  221. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts +2 -1
  223. package/lib/typescript/module/ui/utils/sessionHelpers.d.ts.map +1 -1
  224. package/lib/typescript/module/utils/hookUtils.d.ts.map +1 -1
  225. package/package.json +1 -1
  226. package/src/ui/client.ts +0 -1
  227. package/src/ui/components/BottomSheet.tsx +4 -3
  228. package/src/ui/components/FontLoader.tsx +1 -1
  229. package/src/ui/components/Header.tsx +2 -2
  230. package/src/ui/components/HelperText.tsx +1 -1
  231. package/src/ui/components/Icon.tsx +2 -0
  232. package/src/ui/components/OxyProvider.tsx +6 -0
  233. package/src/ui/components/QuickActions.tsx +1 -1
  234. package/src/ui/components/SignInModal.tsx +6 -5
  235. package/src/ui/components/TextField/Adornment/types.tsx +1 -1
  236. package/src/ui/components/TouchableRipple/Pressable.tsx +1 -0
  237. package/src/ui/components/feedback/FormInput.tsx +1 -1
  238. package/src/ui/components/fileManagement/AnimatedButton.tsx +2 -2
  239. package/src/ui/components/icon/OxyIcon.tsx +1 -1
  240. package/src/ui/components/modals/DeleteAccountModal.tsx +2 -2
  241. package/src/ui/components/payment/PaymentDetailsStep.tsx +24 -22
  242. package/src/ui/components/payment/PaymentMethodStep.tsx +7 -5
  243. package/src/ui/components/payment/PaymentReviewStep.tsx +15 -13
  244. package/src/ui/components/payment/PaymentSuccessStep.tsx +7 -5
  245. package/src/ui/components/payment/PaymentSummaryStep.tsx +12 -10
  246. package/src/ui/components/types.tsx +19 -17
  247. package/src/ui/hooks/useAssets.ts +8 -8
  248. package/src/ui/hooks/useAsyncAction.ts +4 -4
  249. package/src/ui/hooks/useFollow.ts +1 -1
  250. package/src/ui/hooks/useProfileEditing.ts +1 -1
  251. package/src/ui/hooks/useSettingToggle.ts +4 -4
  252. package/src/ui/screens/AccountOverviewScreen.tsx +6 -6
  253. package/src/ui/screens/AccountVerificationScreen.tsx +2 -2
  254. package/src/ui/screens/AppInfoScreen.tsx +63 -61
  255. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  256. package/src/ui/screens/FileManagementScreen.tsx +130 -121
  257. package/src/ui/screens/LanguageSelectorScreen.tsx +3 -3
  258. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +22 -19
  259. package/src/ui/screens/OxyAuthScreen.tsx +3 -3
  260. package/src/ui/screens/PaymentGatewayScreen.tsx +4 -2
  261. package/src/ui/screens/SessionManagementScreen.tsx +30 -28
  262. package/src/ui/screens/UserLinksScreen.tsx +5 -3
  263. package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -2
  264. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +1 -1
  265. package/src/ui/screens/karma/KarmaRulesScreen.tsx +1 -1
  266. package/src/ui/stores/followStore.ts +4 -4
  267. package/src/ui/types/navigation.ts +2 -0
  268. package/src/ui/utils/errorHandlers.ts +2 -2
  269. package/src/ui/utils/fileManagement.ts +13 -8
  270. package/src/ui/utils/sessionHelpers.ts +3 -2
  271. package/src/ui/utils/storageHelpers.ts +1 -1
  272. package/src/utils/hookUtils.ts +4 -2
  273. package/lib/commonjs/ui/components/AnimationExample.js +0 -213
  274. package/lib/commonjs/ui/components/AnimationExample.js.map +0 -1
  275. package/lib/commonjs/ui/components/ErrorBoundary.js +0 -145
  276. package/lib/commonjs/ui/components/ErrorBoundary.js.map +0 -1
  277. package/lib/commonjs/ui/components/WebOxyProvider.js +0 -106
  278. package/lib/commonjs/ui/components/WebOxyProvider.js.map +0 -1
  279. package/lib/module/ui/components/AnimationExample.js +0 -209
  280. package/lib/module/ui/components/AnimationExample.js.map +0 -1
  281. package/lib/module/ui/components/ErrorBoundary.js +0 -139
  282. package/lib/module/ui/components/ErrorBoundary.js.map +0 -1
  283. package/lib/module/ui/components/WebOxyProvider.js +0 -102
  284. package/lib/module/ui/components/WebOxyProvider.js.map +0 -1
  285. package/lib/typescript/commonjs/ui/components/AnimationExample.d.ts +0 -4
  286. package/lib/typescript/commonjs/ui/components/AnimationExample.d.ts.map +0 -1
  287. package/lib/typescript/commonjs/ui/components/ErrorBoundary.d.ts +0 -31
  288. package/lib/typescript/commonjs/ui/components/ErrorBoundary.d.ts.map +0 -1
  289. package/lib/typescript/commonjs/ui/components/WebOxyProvider.d.ts +0 -52
  290. package/lib/typescript/commonjs/ui/components/WebOxyProvider.d.ts.map +0 -1
  291. package/lib/typescript/module/ui/components/AnimationExample.d.ts +0 -4
  292. package/lib/typescript/module/ui/components/AnimationExample.d.ts.map +0 -1
  293. package/lib/typescript/module/ui/components/ErrorBoundary.d.ts +0 -31
  294. package/lib/typescript/module/ui/components/ErrorBoundary.d.ts.map +0 -1
  295. package/lib/typescript/module/ui/components/WebOxyProvider.d.ts +0 -52
  296. package/lib/typescript/module/ui/components/WebOxyProvider.d.ts.map +0 -1
  297. package/src/ui/components/AnimationExample.tsx +0 -195
  298. package/src/ui/components/ErrorBoundary.tsx +0 -154
  299. package/src/ui/components/WebOxyProvider.tsx +0 -117
@@ -27,6 +27,7 @@ import { useThemeStyles } from "../hooks/useThemeStyles.js";
27
27
  import { useColorScheme } from "../hooks/useColorScheme.js";
28
28
  import { normalizeTheme } from "../utils/themeUtils.js";
29
29
  import { useOxy } from "../context/OxyContext.js";
30
+ import { useI18n } from "../hooks/useI18n.js";
30
31
  import { useUploadFile } from "../hooks/mutations/useAccountMutations.js";
31
32
  import { confirmAction, convertDocumentPickerAssetToFile, formatFileSize, getFileIcon, getSafeDownloadUrl } from "../utils/fileManagement.js";
32
33
  import { FileViewer } from "../components/fileManagement/FileViewer.js";
@@ -34,6 +35,9 @@ import { FileDetailsModal } from "../components/fileManagement/FileDetailsModal.
34
35
  import { UploadPreview } from "../components/fileManagement/UploadPreview.js";
35
36
  import { fileManagementStyles } from "../components/fileManagement/styles.js";
36
37
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
38
+ /** Extract error message from unknown error type */
39
+ const getErrorMessage = error => error instanceof Error ? getErrorMessage(error) : typeof error === 'string' ? error : undefined;
40
+
37
41
  // Animated button component for smooth transitions
38
42
  const AnimatedButton = ({
39
43
  isSelected,
@@ -102,6 +106,9 @@ const FileManagementScreen = ({
102
106
  user,
103
107
  oxyServices
104
108
  } = useOxy();
109
+ const {
110
+ t
111
+ } = useI18n();
105
112
  const uploadFileMutation = useUploadFile();
106
113
  const files = useFiles();
107
114
  // Ensure containerWidth is a number (TypeScript guard)
@@ -190,7 +197,7 @@ const FileManagementScreen = ({
190
197
  if (disabledMimeTypes.length) {
191
198
  const blocked = disabledMimeTypes.some(mt => file.contentType === mt || file.contentType.startsWith(mt.endsWith('/') ? mt : `${mt}/`));
192
199
  if (blocked) {
193
- toast.error('This file type cannot be selected');
200
+ toast.error(t('fileManagement.toasts.fileTypeBlocked'));
194
201
  return;
195
202
  }
196
203
  }
@@ -230,7 +237,9 @@ const FileManagementScreen = ({
230
237
  const already = next.has(file.id);
231
238
  if (!already) {
232
239
  if (maxSelection && next.size >= maxSelection) {
233
- toast.error(`You can select up to ${maxSelection}`);
240
+ toast.error(t('fileManagement.toasts.maxSelection', {
241
+ max: maxSelection
242
+ }));
234
243
  return prev;
235
244
  }
236
245
  next.add(file.id);
@@ -364,7 +373,7 @@ const FileManagementScreen = ({
364
373
  }));
365
374
  }
366
375
  } catch (error) {
367
- toast.error(error.message || 'Failed to load files');
376
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.loadFailed'));
368
377
  } finally {
369
378
  setLoading(false);
370
379
  setRefreshing(false);
@@ -466,7 +475,9 @@ const FileManagementScreen = ({
466
475
  const oversizedFiles = selectedFiles.filter(file => file.size > maxSize);
467
476
  if (oversizedFiles.length > 0) {
468
477
  const fileList = oversizedFiles.map(f => f.name).join(', ');
469
- toast.error(`The following files are too large (max 50MB): ${fileList}`);
478
+ toast.error(t('fileManagement.toasts.filesTooLarge', {
479
+ files: fileList
480
+ }));
470
481
  return [];
471
482
  }
472
483
  let successCount = 0;
@@ -555,7 +566,7 @@ const FileManagementScreen = ({
555
566
  }
556
567
  } catch (error) {
557
568
  failureCount++;
558
- const errorMessage = error.message || error.toString() || 'Upload failed';
569
+ const errorMessage = getErrorMessage(error) || String(error) || 'Upload failed';
559
570
  const fullError = `${fileName}: ${errorMessage}`;
560
571
  errors.push(fullError);
561
572
  if (__DEV__) {
@@ -564,7 +575,7 @@ const FileManagementScreen = ({
564
575
  fileSize: raw.size,
565
576
  fileType: raw.type,
566
577
  error: errorMessage,
567
- stack: error.stack
578
+ stack: error instanceof Error ? error.stack : undefined
568
579
  });
569
580
  }
570
581
 
@@ -575,24 +586,30 @@ const FileManagementScreen = ({
575
586
 
576
587
  // Show success/error messages
577
588
  if (successCount > 0) {
578
- toast.success(`${successCount} file(s) uploaded successfully`);
589
+ toast.success(t('fileManagement.toasts.uploadSuccess', {
590
+ count: successCount
591
+ }));
579
592
  }
580
593
  if (failureCount > 0) {
581
594
  // Show detailed error message with first few errors
582
595
  const errorDetails = errors.length > 0 ? `\n${errors.slice(0, 3).join('\n')}${errors.length > 3 ? `\n...and ${errors.length - 3} more` : ''}` : '';
583
- toast.error(`${failureCount} file(s) failed to upload${errorDetails}`);
596
+ toast.error(`${t('fileManagement.toasts.uploadFailed', {
597
+ count: failureCount
598
+ })}${errorDetails}`);
584
599
  }
585
600
  // Silent background refresh to ensure metadata/variants updated
586
601
  setTimeout(() => {
587
602
  loadFiles('silent');
588
603
  }, 1200);
589
604
  } catch (error) {
590
- toast.error(error.message || 'Failed to upload files');
605
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
591
606
  } finally {
592
607
  storeSetUploadProgress(null);
593
608
  }
594
609
  return uploadedFiles;
595
610
  };
611
+
612
+ // biome-ignore lint/suspicious/noExplicitAny: Files from document picker may have extra properties like uri
596
613
  const handleFileSelection = useCallback(async selectedFiles => {
597
614
  const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
598
615
  const processedFiles = [];
@@ -602,34 +619,41 @@ const FileManagementScreen = ({
602
619
  if (__DEV__) {
603
620
  console.error('Invalid file: file is null or undefined');
604
621
  }
605
- toast.error('Invalid file: file is missing');
622
+ toast.error(t('fileManagement.toasts.invalidFileMissing'));
606
623
  continue;
607
624
  }
608
625
  if (!file.name || typeof file.name !== 'string') {
609
626
  if (__DEV__) {
610
627
  console.error('Invalid file: missing or invalid name property', file);
611
628
  }
612
- toast.error('Invalid file: missing file name');
629
+ toast.error(t('fileManagement.toasts.invalidFileName'));
613
630
  continue;
614
631
  }
615
632
  if (file.size === undefined || file.size === null || Number.isNaN(file.size)) {
616
633
  if (__DEV__) {
617
634
  console.error('Invalid file: missing or invalid size property', file);
618
635
  }
619
- toast.error(`Invalid file "${file.name || 'unknown'}": missing file size`);
636
+ toast.error(t('fileManagement.toasts.invalidFileSize', {
637
+ name: file.name || 'unknown'
638
+ }));
620
639
  continue;
621
640
  }
622
641
  if (file.size <= 0) {
623
642
  if (__DEV__) {
624
643
  console.error('Invalid file: file size is zero or negative', file);
625
644
  }
626
- toast.error(`File "${file.name}" is empty`);
645
+ toast.error(t('fileManagement.toasts.fileEmpty', {
646
+ name: file.name
647
+ }));
627
648
  continue;
628
649
  }
629
650
 
630
651
  // Validate file size
631
652
  if (file.size > MAX_FILE_SIZE) {
632
- toast.error(`"${file.name}" is too large. Maximum file size is ${formatFileSize(MAX_FILE_SIZE)}`);
653
+ toast.error(t('fileManagement.toasts.fileTooLarge', {
654
+ name: file.name,
655
+ maxSize: formatFileSize(MAX_FILE_SIZE)
656
+ }));
633
657
  continue;
634
658
  }
635
659
 
@@ -666,7 +690,7 @@ const FileManagementScreen = ({
666
690
  });
667
691
  }
668
692
  if (processedFiles.length === 0) {
669
- toast.error('No valid files to upload');
693
+ toast.error(t('fileManagement.toasts.noValidFiles'));
670
694
  return;
671
695
  }
672
696
 
@@ -721,7 +745,7 @@ const FileManagementScreen = ({
721
745
  }
722
746
  endUpload();
723
747
  } catch (error) {
724
- toast.error(error.message || 'Failed to upload files');
748
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
725
749
  endUpload();
726
750
  }
727
751
  };
@@ -754,7 +778,7 @@ const FileManagementScreen = ({
754
778
  const handleFileUpload = async () => {
755
779
  // Prevent concurrent document picker calls
756
780
  if (isPickingDocument) {
757
- toast.error('Please wait for the current file selection to complete');
781
+ toast.error(t('fileManagement.toasts.waitForSelection'));
758
782
  return;
759
783
  }
760
784
  try {
@@ -776,7 +800,7 @@ const FileManagementScreen = ({
776
800
  }
777
801
  if (!result.assets || result.assets.length === 0) {
778
802
  setIsPickingDocument(false);
779
- toast.error('No files were selected');
803
+ toast.error(t('fileManagement.toasts.noFilesSelected'));
780
804
  return;
781
805
  }
782
806
 
@@ -803,7 +827,7 @@ const FileManagementScreen = ({
803
827
  }
804
828
  return null;
805
829
  }).catch(error => {
806
- errors.push(`File "${doc.name || 'file'}": ${error.message || 'Failed to process'}`);
830
+ errors.push(`File "${doc.name || 'file'}": ${getErrorMessage(error) || 'Failed to process'}`);
807
831
  return null;
808
832
  }));
809
833
  const convertedFiles = await Promise.all(conversionPromises);
@@ -818,7 +842,9 @@ const FileManagementScreen = ({
818
842
  // Show errors if any
819
843
  if (errors.length > 0) {
820
844
  const errorMessage = errors.slice(0, 3).join('\n') + (errors.length > 3 ? `\n...and ${errors.length - 3} more` : '');
821
- toast.error(`Failed to load some files:\n${errorMessage}`);
845
+ toast.error(t('fileManagement.toasts.loadSomeFailed', {
846
+ errors: errorMessage
847
+ }));
822
848
  }
823
849
 
824
850
  // Process successfully converted files
@@ -826,20 +852,20 @@ const FileManagementScreen = ({
826
852
  await handleFileSelection(files);
827
853
  } else {
828
854
  // Files were selected but none could be converted
829
- toast.error('No files could be processed. Please try selecting files again.');
855
+ toast.error(t('fileManagement.toasts.noFilesProcessed'));
830
856
  }
831
857
  } catch (error) {
832
858
  if (__DEV__) {
833
859
  console.error('File upload error:', error);
834
860
  }
835
- if (error.message?.includes('expo-document-picker') || error.message?.includes('Different document picking in progress')) {
836
- if (error.message?.includes('Different document picking in progress')) {
837
- toast.error('Please wait for the current file selection to complete');
861
+ if (getErrorMessage(error)?.includes('expo-document-picker') || getErrorMessage(error)?.includes('Different document picking in progress')) {
862
+ if (getErrorMessage(error)?.includes('Different document picking in progress')) {
863
+ toast.error(t('fileManagement.toasts.waitForSelection'));
838
864
  } else {
839
- toast.error('File picker not available. Please install expo-document-picker');
865
+ toast.error(t('fileManagement.toasts.filePickerNotAvailable'));
840
866
  }
841
867
  } else {
842
- toast.error(error.message || 'Failed to select files');
868
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.selectFilesFailed'));
843
869
  }
844
870
  } finally {
845
871
  // Always reset the picking state, even if there was an error
@@ -848,14 +874,16 @@ const FileManagementScreen = ({
848
874
  };
849
875
  const handleFileDelete = async (fileId, filename) => {
850
876
  // Use platform-aware confirmation dialog
851
- const confirmed = await confirmAction(`Are you sure you want to delete "${filename}"? This action cannot be undone.`, 'Delete File', 'Delete', 'Cancel');
877
+ const confirmed = await confirmAction(t('fileManagement.confirms.deleteFile', {
878
+ filename
879
+ }), t('fileManagement.deleteFile'), t('fileManagement.confirm'), t('common.cancel'));
852
880
  if (!confirmed) {
853
881
  return;
854
882
  }
855
883
  try {
856
884
  storeSetDeleting(fileId);
857
885
  await oxyServices.deleteFile(fileId);
858
- toast.success('File deleted successfully');
886
+ toast.success(t('fileManagement.toasts.deleteSuccess'));
859
887
 
860
888
  // Reload files after successful deletion
861
889
  // Optimistic remove
@@ -864,14 +892,14 @@ const FileManagementScreen = ({
864
892
  setTimeout(() => loadFiles('silent'), 800);
865
893
  } catch (error) {
866
894
  // Provide specific error messages
867
- if (error.message?.includes('File not found') || error.message?.includes('404')) {
868
- toast.error('File not found. It may have already been deleted.');
895
+ if (getErrorMessage(error)?.includes('File not found') || getErrorMessage(error)?.includes('404')) {
896
+ toast.error(t('fileManagement.toasts.fileNotFound'));
869
897
  // Still reload files to refresh the list
870
898
  setTimeout(() => loadFiles('silent'), 800);
871
- } else if (error.message?.includes('permission') || error.message?.includes('403')) {
872
- toast.error('You do not have permission to delete this file.');
899
+ } else if (getErrorMessage(error)?.includes('permission') || getErrorMessage(error)?.includes('403')) {
900
+ toast.error(t('fileManagement.toasts.noPermission'));
873
901
  } else {
874
- toast.error(error.message || 'Failed to delete file');
902
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.deleteFailed'));
875
903
  }
876
904
  } finally {
877
905
  storeSetDeleting(null);
@@ -884,7 +912,9 @@ const FileManagementScreen = ({
884
912
  fileMap[f.id] = f;
885
913
  });
886
914
  const selectedFiles = Array.from(selectedIds).map(id => fileMap[id]).filter(Boolean);
887
- const confirmed = await confirmAction(`Are you sure you want to delete ${selectedFiles.length} file(s)? This action cannot be undone.`, 'Delete Files', 'Delete', 'Cancel');
915
+ const confirmed = await confirmAction(t('fileManagement.confirms.deleteFiles', {
916
+ count: selectedFiles.length
917
+ }), t('fileManagement.deleteFiles'), t('fileManagement.confirm'), t('common.cancel'));
888
918
  if (!confirmed) return;
889
919
  try {
890
920
  const deletePromises = Array.from(selectedIds).map(async fileId => {
@@ -907,15 +937,19 @@ const FileManagementScreen = ({
907
937
  const successful = results.filter(r => r.status === 'fulfilled' && r.value.success).length;
908
938
  const failed = results.length - successful;
909
939
  if (successful > 0) {
910
- toast.success(`${successful} file(s) deleted successfully`);
940
+ toast.success(t('fileManagement.toasts.bulkDeleteSuccess', {
941
+ count: successful
942
+ }));
911
943
  }
912
944
  if (failed > 0) {
913
- toast.error(`${failed} file(s) failed to delete`);
945
+ toast.error(t('fileManagement.toasts.bulkDeleteFailed', {
946
+ count: failed
947
+ }));
914
948
  }
915
949
  setSelectedIds(new Set());
916
950
  setTimeout(() => loadFiles('silent'), 800);
917
951
  } catch (error) {
918
- toast.error(error.message || 'Failed to delete files');
952
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.bulkDeleteError'));
919
953
  }
920
954
  }, [selectedIds, files, oxyServices, loadFiles]);
921
955
  const handleBulkVisibilityChange = useCallback(async visibility => {
@@ -940,7 +974,10 @@ const FileManagementScreen = ({
940
974
  const successful = results.filter(r => r.status === 'fulfilled' && r.value.success).length;
941
975
  const failed = results.length - successful;
942
976
  if (successful > 0) {
943
- toast.success(`${successful} file(s) visibility updated to ${visibility}`);
977
+ toast.success(t('fileManagement.toasts.visibilitySuccess', {
978
+ count: successful,
979
+ visibility
980
+ }));
944
981
  // Update file metadata in store
945
982
  Array.from(selectedIds).forEach(fileId => {
946
983
  useFileStore.getState().updateFile(fileId, {
@@ -952,11 +989,13 @@ const FileManagementScreen = ({
952
989
  });
953
990
  }
954
991
  if (failed > 0) {
955
- toast.error(`${failed} file(s) failed to update visibility`);
992
+ toast.error(t('fileManagement.toasts.visibilityFailed', {
993
+ count: failed
994
+ }));
956
995
  }
957
996
  setTimeout(() => loadFiles('silent'), 800);
958
997
  } catch (error) {
959
- toast.error(error.message || 'Failed to update visibility');
998
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.visibilityError'));
960
999
  }
961
1000
  }, [selectedIds, oxyServices, files, loadFiles]);
962
1001
 
@@ -978,7 +1017,7 @@ const FileManagementScreen = ({
978
1017
  document.body.appendChild(link);
979
1018
  link.click();
980
1019
  document.body.removeChild(link);
981
- toast.success('File download started');
1020
+ toast.success(t('fileManagement.toasts.downloadStarted'));
982
1021
  } catch (linkError) {
983
1022
  // Fallback to authenticated download
984
1023
  const blob = await oxyServices.getFileContentAsBlob(fileId);
@@ -992,16 +1031,16 @@ const FileManagementScreen = ({
992
1031
 
993
1032
  // Clean up the blob URL
994
1033
  URL.revokeObjectURL(url);
995
- toast.success('File downloaded successfully');
1034
+ toast.success(t('fileManagement.toasts.downloadSuccess'));
996
1035
  }
997
1036
  } else {
998
1037
  // For mobile, open the URL (user can save from browser)
999
1038
  // Note: This is a simplified approach - for full mobile support,
1000
1039
  // consider using expo-file-system or react-native-fs
1001
- toast.info('Please use your browser to download the file');
1040
+ toast.info(t('fileManagement.toasts.downloadMobile'));
1002
1041
  }
1003
1042
  } catch (error) {
1004
- toast.error(error.message || 'Failed to download file');
1043
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.downloadFailed'));
1005
1044
  }
1006
1045
  };
1007
1046
  const handleFileOpen = async file => {
@@ -1026,10 +1065,10 @@ const FileManagementScreen = ({
1026
1065
  setFileContent(content);
1027
1066
  }
1028
1067
  } catch (error) {
1029
- if (error.message?.includes('404') || error.message?.includes('not found')) {
1030
- toast.error('File not found. It may have been deleted.');
1068
+ if (getErrorMessage(error)?.includes('404') || getErrorMessage(error)?.includes('not found')) {
1069
+ toast.error(t('fileManagement.toasts.fileNotFoundContent'));
1031
1070
  } else {
1032
- toast.error('Failed to load file content');
1071
+ toast.error(t('fileManagement.toasts.loadContentFailed'));
1033
1072
  }
1034
1073
  setFileContent(null);
1035
1074
  }
@@ -1038,7 +1077,7 @@ const FileManagementScreen = ({
1038
1077
  setFileContent(null);
1039
1078
  }
1040
1079
  } catch (error) {
1041
- toast.error(error.message || 'Failed to open file');
1080
+ toast.error(getErrorMessage(error) || t('fileManagement.toasts.openFailed'));
1042
1081
  } finally {
1043
1082
  setLoadingFileContent(false);
1044
1083
  }
@@ -1313,6 +1352,7 @@ const FileManagementScreen = ({
1313
1352
  };
1314
1353
 
1315
1354
  // GroupedSection-based file items (for 'all' view) replacing legacy flat list look
1355
+ // biome-ignore lint/suspicious/noExplicitAny: GroupedSection items have dynamic props
1316
1356
  const groupedFileItems = useMemo(() => {
1317
1357
  // filteredFiles is already sorted, so just use it directly
1318
1358
  const sortedFiles = filteredFiles;
@@ -1492,6 +1532,7 @@ const FileManagementScreen = ({
1492
1532
  numberOfLines: 2,
1493
1533
  children: file.metadata.description
1494
1534
  }) : undefined
1535
+ // biome-ignore lint/suspicious/noExplicitAny: GroupedSectionItem has dynamic properties
1495
1536
  };
1496
1537
  });
1497
1538
  }, [filteredFiles, theme, themeStyles, deleting, handleFileDownload, handleFileDelete, handleFileOpen, getSafeDownloadUrlCallback, selectMode, selectedIds]);
@@ -1628,12 +1669,12 @@ const FileManagementScreen = ({
1628
1669
  style: [fileManagementStyles.emptyStateTitle, {
1629
1670
  color: themeStyles.textColor
1630
1671
  }],
1631
- children: "No Photos Yet"
1672
+ children: t('fileManagement.emptyPhotos.title')
1632
1673
  }), /*#__PURE__*/_jsxs(Text, {
1633
1674
  style: [fileManagementStyles.emptyStateDescription, {
1634
1675
  color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1635
1676
  }],
1636
- children: [" ", user?.id === targetUserId ? "Upload photos to get started. You can select multiple photos at once." : "This user hasn't uploaded any photos yet", " "]
1677
+ children: [" ", user?.id === targetUserId ? t('fileManagement.emptyPhotos.ownDescription') : t('fileManagement.emptyPhotos.otherDescription'), " "]
1637
1678
  }), user?.id === targetUserId && /*#__PURE__*/_jsx(TouchableOpacity, {
1638
1679
  style: [fileManagementStyles.emptyStateButton, {
1639
1680
  backgroundColor: themeStyles.primaryColor
@@ -1653,7 +1694,7 @@ const FileManagementScreen = ({
1653
1694
  color: "#FFFFFF"
1654
1695
  }), /*#__PURE__*/_jsx(Text, {
1655
1696
  style: fileManagementStyles.emptyStateButtonText,
1656
- children: "Upload Photos"
1697
+ children: t('fileManagement.uploadPhotos')
1657
1698
  })]
1658
1699
  })
1659
1700
  })]
@@ -1692,7 +1733,7 @@ const FileManagementScreen = ({
1692
1733
  style: [fileManagementStyles.dimensionsLoadingText, {
1693
1734
  color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1694
1735
  }],
1695
- children: "Loading photo layout..."
1736
+ children: t('fileManagement.loadingPhotoLayout')
1696
1737
  })]
1697
1738
  }), /*#__PURE__*/_jsx(JustifiedPhotoGrid, {
1698
1739
  photos: photos,
@@ -1719,12 +1760,12 @@ const FileManagementScreen = ({
1719
1760
  style: [fileManagementStyles.emptyStateTitle, {
1720
1761
  color: themeStyles.textColor
1721
1762
  }],
1722
- children: "No Files Yet"
1763
+ children: t('fileManagement.emptyFiles.title')
1723
1764
  }), /*#__PURE__*/_jsx(Text, {
1724
1765
  style: [fileManagementStyles.emptyStateDescription, {
1725
1766
  color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1726
1767
  }],
1727
- children: user?.id === targetUserId ? "Upload files to get started. You can select multiple files at once." : "This user hasn't uploaded any files yet"
1768
+ children: user?.id === targetUserId ? t('fileManagement.emptyFiles.ownDescription') : t('fileManagement.emptyFiles.otherDescription')
1728
1769
  }), user?.id === targetUserId && /*#__PURE__*/_jsx(TouchableOpacity, {
1729
1770
  style: [fileManagementStyles.emptyStateButton, {
1730
1771
  backgroundColor: themeStyles.primaryColor
@@ -1744,7 +1785,7 @@ const FileManagementScreen = ({
1744
1785
  color: "#FFFFFF"
1745
1786
  }), /*#__PURE__*/_jsx(Text, {
1746
1787
  style: fileManagementStyles.emptyStateButtonText,
1747
- children: "Upload Files"
1788
+ children: t('fileManagement.uploadFiles')
1748
1789
  })]
1749
1790
  })
1750
1791
  })]
@@ -1990,8 +2031,10 @@ const FileManagementScreen = ({
1990
2031
  return /*#__PURE__*/_jsxs(View, {
1991
2032
  style: fileManagementStyles.container,
1992
2033
  children: [/*#__PURE__*/_jsx(Header, {
1993
- title: "Review Files",
1994
- subtitle: `${pendingFiles.length} file${pendingFiles.length !== 1 ? 's' : ''} ready to upload`,
2034
+ title: t('fileManagement.reviewFiles'),
2035
+ subtitle: t('fileManagement.readyToUpload', {
2036
+ count: pendingFiles.length
2037
+ }),
1995
2038
  onBack: handleCancelUpload,
1996
2039
  showBackButton: true,
1997
2040
  variant: "minimal",
@@ -2011,43 +2054,58 @@ const FileManagementScreen = ({
2011
2054
  return /*#__PURE__*/_jsxs(View, {
2012
2055
  style: fileManagementStyles.container,
2013
2056
  children: [/*#__PURE__*/_jsx(Header, {
2014
- title: selectMode ? multiSelect ? `${selectedIds.size}${maxSelection ? `/${maxSelection}` : ''} Selected` : 'Select a File' : viewMode === 'photos' ? 'Photos' : 'File Management',
2015
- subtitle: selectMode ? multiSelect ? `${filteredFiles.length} available` : 'Tap to select' : `${filteredFiles.length} ${filteredFiles.length === 1 ? 'item' : 'items'}`,
2057
+ title: selectMode ? multiSelect ? maxSelection ? t('fileManagement.selectedWithMax', {
2058
+ count: selectedIds.size,
2059
+ max: maxSelection
2060
+ }) : t('fileManagement.selected', {
2061
+ count: selectedIds.size
2062
+ }) : t('fileManagement.selectFile') : viewMode === 'photos' ? t('fileManagement.photos') : t('fileManagement.title'),
2063
+ subtitle: selectMode ? multiSelect ? t('fileManagement.available', {
2064
+ count: filteredFiles.length
2065
+ }) : t('fileManagement.tapToSelect') : filteredFiles.length === 1 ? t('fileManagement.itemCount', {
2066
+ count: filteredFiles.length
2067
+ }) : t('fileManagement.itemCount_plural', {
2068
+ count: filteredFiles.length
2069
+ }),
2016
2070
  rightActions: selectMode && multiSelect ? [{
2017
2071
  key: 'clear',
2018
- text: 'Clear',
2072
+ text: t('fileManagement.clear'),
2019
2073
  onPress: () => setSelectedIds(new Set()),
2020
2074
  disabled: selectedIds.size === 0
2021
2075
  }, {
2022
2076
  key: 'confirm',
2023
- text: 'Confirm',
2077
+ text: t('fileManagement.confirm'),
2024
2078
  onPress: confirmMultiSelection,
2025
2079
  disabled: selectedIds.size === 0
2026
2080
  }] : !selectMode && selectedIds.size > 0 ? [{
2027
2081
  key: 'clear',
2028
- text: 'Clear',
2082
+ text: t('fileManagement.clear'),
2029
2083
  onPress: () => setSelectedIds(new Set())
2030
2084
  }, {
2031
2085
  key: 'delete',
2032
- text: `Delete (${selectedIds.size})`,
2086
+ text: t('fileManagement.delete', {
2087
+ count: selectedIds.size
2088
+ }),
2033
2089
  onPress: handleBulkDelete,
2034
2090
  icon: 'delete'
2035
2091
  }, {
2036
2092
  key: 'visibility',
2037
- text: 'Visibility',
2093
+ text: t('fileManagement.visibility'),
2038
2094
  onPress: () => {
2039
2095
  // Show visibility options menu
2040
- Alert.alert('Change Visibility', `Change visibility for ${selectedIds.size} file(s)?`, [{
2041
- text: 'Cancel',
2096
+ Alert.alert(t('fileManagement.changeVisibility'), t('fileManagement.changeVisibilityConfirm', {
2097
+ count: selectedIds.size
2098
+ }), [{
2099
+ text: t('common.cancel'),
2042
2100
  style: 'cancel'
2043
2101
  }, {
2044
- text: 'Private',
2102
+ text: t('fileManagement.private'),
2045
2103
  onPress: () => handleBulkVisibilityChange('private')
2046
2104
  }, {
2047
- text: 'Public',
2105
+ text: t('fileManagement.public'),
2048
2106
  onPress: () => handleBulkVisibilityChange('public')
2049
2107
  }, {
2050
- text: 'Unlisted',
2108
+ text: t('fileManagement.unlisted'),
2051
2109
  onPress: () => handleBulkVisibilityChange('unlisted')
2052
2110
  }]);
2053
2111
  },
@@ -2165,7 +2223,7 @@ const FileManagementScreen = ({
2165
2223
  style: [fileManagementStyles.searchInput, {
2166
2224
  color: themeStyles.textColor
2167
2225
  }],
2168
- placeholder: viewMode === 'photos' ? 'Search photos...' : 'Search files...',
2226
+ placeholder: viewMode === 'photos' ? t('fileManagement.searchPhotos') : t('fileManagement.searchFiles'),
2169
2227
  placeholderTextColor: themeStyles.colors.secondaryText,
2170
2228
  value: searchQuery,
2171
2229
  onChangeText: setSearchQuery
@@ -2193,7 +2251,7 @@ const FileManagementScreen = ({
2193
2251
  style: [fileManagementStyles.statLabel, {
2194
2252
  color: themeStyles.colors.secondaryText
2195
2253
  }],
2196
- children: searchQuery.length > 0 ? 'Found' : filteredFiles.length === 1 ? viewMode === 'photos' ? 'Photo' : 'File' : viewMode === 'photos' ? 'Photos' : 'Files'
2254
+ children: searchQuery.length > 0 ? t('fileManagement.found') : filteredFiles.length === 1 ? viewMode === 'photos' ? t('fileManagement.photo') : t('fileManagement.file') : viewMode === 'photos' ? t('fileManagement.photos_stat') : t('fileManagement.files')
2197
2255
  })]
2198
2256
  }), /*#__PURE__*/_jsxs(View, {
2199
2257
  style: fileManagementStyles.statItem,
@@ -2206,7 +2264,7 @@ const FileManagementScreen = ({
2206
2264
  style: [fileManagementStyles.statLabel, {
2207
2265
  color: themeStyles.colors.secondaryText
2208
2266
  }],
2209
- children: searchQuery.length > 0 ? 'Size' : 'Total Size'
2267
+ children: searchQuery.length > 0 ? t('fileManagement.size') : t('fileManagement.totalSize')
2210
2268
  })]
2211
2269
  }), searchQuery.length > 0 && /*#__PURE__*/_jsxs(View, {
2212
2270
  style: fileManagementStyles.statItem,
@@ -2219,7 +2277,7 @@ const FileManagementScreen = ({
2219
2277
  style: [fileManagementStyles.statLabel, {
2220
2278
  color: themeStyles.colors.secondaryText
2221
2279
  }],
2222
- children: "Total"
2280
+ children: t('fileManagement.total')
2223
2281
  })]
2224
2282
  })]
2225
2283
  }), viewMode === 'photos' ? renderPhotoGrid() : /*#__PURE__*/_jsx(ScrollView, {
@@ -2255,12 +2313,14 @@ const FileManagementScreen = ({
2255
2313
  style: [fileManagementStyles.emptyStateTitle, {
2256
2314
  color: themeStyles.textColor
2257
2315
  }],
2258
- children: "No Results Found"
2259
- }), /*#__PURE__*/_jsxs(Text, {
2316
+ children: t('fileManagement.noResults.title')
2317
+ }), /*#__PURE__*/_jsx(Text, {
2260
2318
  style: [fileManagementStyles.emptyStateDescription, {
2261
2319
  color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
2262
2320
  }],
2263
- children: ["No files match your search for \"", searchQuery, "\""]
2321
+ children: t('fileManagement.noResults.description', {
2322
+ query: searchQuery
2323
+ })
2264
2324
  }), /*#__PURE__*/_jsxs(TouchableOpacity, {
2265
2325
  style: [fileManagementStyles.emptyStateButton, {
2266
2326
  backgroundColor: themeStyles.primaryColor
@@ -2272,7 +2332,7 @@ const FileManagementScreen = ({
2272
2332
  color: "#FFFFFF"
2273
2333
  }), /*#__PURE__*/_jsx(Text, {
2274
2334
  style: fileManagementStyles.emptyStateButtonText,
2275
- children: "Clear Search"
2335
+ children: t('fileManagement.clearSearch')
2276
2336
  })]
2277
2337
  })]
2278
2338
  }) : filteredFiles.length === 0 ? renderEmptyState() : /*#__PURE__*/_jsxs(_Fragment, {
@@ -2287,7 +2347,7 @@ const FileManagementScreen = ({
2287
2347
  style: [fileManagementStyles.loadingMoreText, {
2288
2348
  color: themeStyles.textColor
2289
2349
  }],
2290
- children: "Loading more..."
2350
+ children: t('fileManagement.loadingMore')
2291
2351
  })]
2292
2352
  })]
2293
2353
  })
@@ -2318,7 +2378,7 @@ const FileManagementScreen = ({
2318
2378
  style: [fileManagementStyles.uploadBannerText, {
2319
2379
  color: themeStyles.textColor
2320
2380
  }],
2321
- children: ["Uploading", uploadProgress ? ` ${uploadProgress.current}/${uploadProgress.total}` : '...']
2381
+ children: [t('fileManagement.uploading'), uploadProgress ? ` ${uploadProgress.current}/${uploadProgress.total}` : '...']
2322
2382
  }), uploadProgress && uploadProgress.total > 0 && /*#__PURE__*/_jsx(View, {
2323
2383
  style: [fileManagementStyles.uploadProgressBarContainer, {
2324
2384
  backgroundColor: themeStyles.isDarkTheme ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.1)'