@oxyhq/services 19.0.1 → 19.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (918) hide show
  1. package/lib/commonjs/assets/assets/icons/OxyServices.tsx +5 -12
  2. package/lib/commonjs/assets/icons/OxyServices.js +7 -7
  3. package/lib/commonjs/assets/icons/OxyServices.js.map +1 -1
  4. package/lib/commonjs/index.js +56 -25
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/ui/boot/runProviderColdBoot.js +121 -0
  7. package/lib/commonjs/ui/boot/runProviderColdBoot.js.map +1 -0
  8. package/lib/commonjs/ui/client.js +10 -17
  9. package/lib/commonjs/ui/client.js.map +1 -1
  10. package/lib/commonjs/ui/components/FollowButton.js +28 -92
  11. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  12. package/lib/commonjs/ui/components/Header.js +127 -241
  13. package/lib/commonjs/ui/components/Header.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAccountDialog.js +22 -18
  15. package/lib/commonjs/ui/components/OxyAccountDialog.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyConsentScreen.js +4 -6
  17. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyOAuthCallback.js +45 -0
  19. package/lib/commonjs/ui/components/OxyOAuthCallback.js.map +1 -0
  20. package/lib/commonjs/ui/components/OxyPayButton.js +20 -71
  21. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  22. package/lib/commonjs/ui/components/OxyProvider.js +3 -3
  23. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  24. package/lib/commonjs/ui/components/OxySignInButton.js +30 -135
  25. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  26. package/lib/commonjs/ui/components/ProfileButton.js +4 -2
  27. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  28. package/lib/commonjs/ui/components/ProfileSummaryCard.js +99 -0
  29. package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -0
  30. package/lib/commonjs/ui/components/RequireOxyAuth.js +7 -10
  31. package/lib/commonjs/ui/components/RequireOxyAuth.js.map +1 -1
  32. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +9 -9
  33. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  34. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +20 -23
  35. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  36. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +6 -6
  37. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  38. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +14 -9
  39. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  40. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +55 -55
  41. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  42. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  43. package/lib/commonjs/ui/components/payment/paymentStyles.js +13 -13
  44. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
  45. package/lib/commonjs/ui/context/OxyContext.js +129 -260
  46. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  47. package/lib/commonjs/ui/context/oxyContextHelpers.js +64 -0
  48. package/lib/commonjs/ui/context/oxyContextHelpers.js.map +1 -0
  49. package/lib/commonjs/ui/{components/TextField/Adornment/types.js → context/oxyContextTypes.js} +1 -1
  50. package/lib/commonjs/ui/context/oxyContextTypes.js.map +1 -0
  51. package/lib/commonjs/ui/context/useOxyAccountGraph.js +91 -0
  52. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -0
  53. package/lib/commonjs/ui/hooks/queryClient.js +9 -18
  54. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  55. package/lib/commonjs/ui/hooks/useAuth.js +7 -5
  56. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  57. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  58. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  59. package/lib/commonjs/ui/index.js +10 -17
  60. package/lib/commonjs/ui/index.js.map +1 -1
  61. package/lib/commonjs/ui/navigation/accountDialogManager.js +5 -44
  62. package/lib/commonjs/ui/navigation/accountDialogManager.js.map +1 -1
  63. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +9 -8
  64. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  65. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +2 -3
  66. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  67. package/lib/commonjs/ui/screens/EditProfileScreen.js +8 -19
  68. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  69. package/lib/commonjs/ui/screens/FAQScreen.js +8 -8
  70. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  71. package/lib/commonjs/ui/screens/FeedbackScreen.js +0 -1
  72. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/FileManagementScreen.js +59 -1105
  74. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  75. package/lib/commonjs/ui/screens/HistoryViewScreen.js +9 -8
  76. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  77. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +0 -1
  78. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +5 -4
  80. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/ManageAccountScreen.js +9 -49
  82. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  83. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -9
  84. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  85. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +247 -224
  86. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  87. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +21 -20
  88. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  89. package/lib/commonjs/ui/screens/ProfileScreen.js +4 -4
  90. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  91. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +12 -11
  92. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  93. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +3 -2
  94. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  95. package/lib/commonjs/ui/screens/UserListScreen.js +3 -3
  96. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  97. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +7 -8
  98. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  99. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +114 -0
  100. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -0
  101. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +512 -0
  102. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -0
  103. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +59 -0
  104. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -0
  105. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +475 -0
  106. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -0
  107. package/lib/commonjs/ui/screens/fileManagement/shared.js +67 -0
  108. package/lib/commonjs/ui/screens/fileManagement/shared.js.map +1 -0
  109. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +3 -2
  110. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  111. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +4 -7
  112. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  113. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +3 -3
  114. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  115. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +3 -2
  116. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  117. package/lib/commonjs/ui/server.js +4 -5
  118. package/lib/commonjs/ui/server.js.map +1 -1
  119. package/lib/commonjs/ui/session/createSessionClient.js +2 -2
  120. package/lib/commonjs/ui/utils/crossOriginRestore.js +109 -0
  121. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -0
  122. package/lib/commonjs/ui/utils/deviceCredential.js +23 -0
  123. package/lib/commonjs/ui/utils/deviceCredential.js.map +1 -0
  124. package/lib/commonjs/ui/utils/oauthReturn.js +82 -0
  125. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -0
  126. package/lib/commonjs/ui/utils/storageHelpers.js +1 -2
  127. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  128. package/lib/module/assets/assets/icons/OxyServices.tsx +5 -12
  129. package/lib/module/assets/icons/OxyServices.js +7 -7
  130. package/lib/module/assets/icons/OxyServices.js.map +1 -1
  131. package/lib/module/index.js +10 -9
  132. package/lib/module/index.js.map +1 -1
  133. package/lib/module/ui/boot/runProviderColdBoot.js +116 -0
  134. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -0
  135. package/lib/module/ui/client.js +3 -4
  136. package/lib/module/ui/client.js.map +1 -1
  137. package/lib/module/ui/components/FollowButton.js +28 -92
  138. package/lib/module/ui/components/FollowButton.js.map +1 -1
  139. package/lib/module/ui/components/Header.js +127 -241
  140. package/lib/module/ui/components/Header.js.map +1 -1
  141. package/lib/module/ui/components/OxyAccountDialog.js +22 -18
  142. package/lib/module/ui/components/OxyAccountDialog.js.map +1 -1
  143. package/lib/module/ui/components/OxyConsentScreen.js +4 -5
  144. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  145. package/lib/module/ui/components/OxyOAuthCallback.js +41 -0
  146. package/lib/module/ui/components/OxyOAuthCallback.js.map +1 -0
  147. package/lib/module/ui/components/OxyPayButton.js +21 -71
  148. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  149. package/lib/module/ui/components/OxyProvider.js +3 -3
  150. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  151. package/lib/module/ui/components/OxySignInButton.js +34 -139
  152. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  153. package/lib/module/ui/components/ProfileButton.js +5 -3
  154. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  155. package/lib/module/ui/components/ProfileSummaryCard.js +95 -0
  156. package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -0
  157. package/lib/module/ui/components/RequireOxyAuth.js +7 -9
  158. package/lib/module/ui/components/RequireOxyAuth.js.map +1 -1
  159. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +9 -9
  160. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  161. package/lib/module/ui/components/fileManagement/FileViewer.js +20 -23
  162. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  163. package/lib/module/ui/components/fileManagement/UploadPreview.js +6 -6
  164. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  165. package/lib/module/ui/components/modals/DeleteAccountModal.js +14 -8
  166. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  167. package/lib/module/ui/components/payment/PaymentDetailsStep.js +54 -54
  168. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  169. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  170. package/lib/module/ui/components/payment/paymentStyles.js +13 -13
  171. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
  172. package/lib/module/ui/context/OxyContext.js +128 -259
  173. package/lib/module/ui/context/OxyContext.js.map +1 -1
  174. package/lib/module/ui/context/oxyContextHelpers.js +57 -0
  175. package/lib/module/ui/context/oxyContextHelpers.js.map +1 -0
  176. package/lib/module/ui/context/oxyContextTypes.js +4 -0
  177. package/lib/module/ui/context/oxyContextTypes.js.map +1 -0
  178. package/lib/module/ui/context/useOxyAccountGraph.js +87 -0
  179. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -0
  180. package/lib/module/ui/hooks/queryClient.js +8 -17
  181. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  182. package/lib/module/ui/hooks/useAuth.js +7 -5
  183. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  184. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  185. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  186. package/lib/module/ui/index.js +2 -3
  187. package/lib/module/ui/index.js.map +1 -1
  188. package/lib/module/ui/navigation/accountDialogManager.js +4 -41
  189. package/lib/module/ui/navigation/accountDialogManager.js.map +1 -1
  190. package/lib/module/ui/screens/ConnectedAppsScreen.js +8 -7
  191. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  192. package/lib/module/ui/screens/EditProfileFieldScreen.js +2 -3
  193. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  194. package/lib/module/ui/screens/EditProfileScreen.js +7 -18
  195. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  196. package/lib/module/ui/screens/FAQScreen.js +8 -8
  197. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  198. package/lib/module/ui/screens/FeedbackScreen.js +0 -1
  199. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  200. package/lib/module/ui/screens/FileManagementScreen.js +53 -1098
  201. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  202. package/lib/module/ui/screens/HistoryViewScreen.js +9 -8
  203. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  204. package/lib/module/ui/screens/LanguageSelectorScreen.js +0 -1
  205. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  206. package/lib/module/ui/screens/LegalDocumentsScreen.js +5 -4
  207. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  208. package/lib/module/ui/screens/ManageAccountScreen.js +11 -51
  209. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  210. package/lib/module/ui/screens/PaymentGatewayScreen.js +4 -7
  211. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  212. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +247 -224
  213. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  214. package/lib/module/ui/screens/PrivacySettingsScreen.js +19 -18
  215. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  216. package/lib/module/ui/screens/ProfileScreen.js +3 -3
  217. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  218. package/lib/module/ui/screens/SavesCollectionsScreen.js +12 -11
  219. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  220. package/lib/module/ui/screens/SearchSettingsScreen.js +3 -2
  221. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  222. package/lib/module/ui/screens/UserListScreen.js +2 -2
  223. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  224. package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -6
  225. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  226. package/lib/module/ui/screens/fileManagement/FileListSection.js +110 -0
  227. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -0
  228. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +509 -0
  229. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -0
  230. package/lib/module/ui/screens/fileManagement/UploadBar.js +55 -0
  231. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -0
  232. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +471 -0
  233. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -0
  234. package/lib/module/ui/screens/fileManagement/shared.js +58 -0
  235. package/lib/module/ui/screens/fileManagement/shared.js.map +1 -0
  236. package/lib/module/ui/screens/trust/TrustCenterScreen.js +3 -2
  237. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  238. package/lib/module/ui/screens/trust/TrustFAQScreen.js +4 -7
  239. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  240. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +2 -2
  241. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  242. package/lib/module/ui/screens/trust/TrustRulesScreen.js +3 -2
  243. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  244. package/lib/module/ui/server.js +2 -3
  245. package/lib/module/ui/server.js.map +1 -1
  246. package/lib/module/ui/session/createSessionClient.js +2 -2
  247. package/lib/module/ui/utils/crossOriginRestore.js +101 -0
  248. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -0
  249. package/lib/module/ui/utils/deviceCredential.js +18 -0
  250. package/lib/module/ui/utils/deviceCredential.js.map +1 -0
  251. package/lib/module/ui/utils/oauthReturn.js +78 -0
  252. package/lib/module/ui/utils/oauthReturn.js.map +1 -0
  253. package/lib/module/ui/utils/storageHelpers.js +1 -2
  254. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  255. package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts +0 -5
  256. package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/index.d.ts +11 -6
  258. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  259. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +29 -0
  260. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -0
  261. package/lib/typescript/commonjs/ui/client.d.ts +3 -4
  262. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/components/Header.d.ts +16 -21
  265. package/lib/typescript/commonjs/ui/components/Header.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts +3 -7
  267. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/components/OxyOAuthCallback.d.ts +11 -0
  269. package/lib/typescript/commonjs/ui/components/OxyOAuthCallback.d.ts.map +1 -0
  270. package/lib/typescript/commonjs/ui/components/OxyPayButton.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +0 -13
  272. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  273. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts +33 -0
  275. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -0
  276. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  280. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -10
  281. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  282. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +2 -185
  283. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  284. package/lib/typescript/commonjs/ui/context/oxyContextHelpers.d.ts +7 -0
  285. package/lib/typescript/commonjs/ui/context/oxyContextHelpers.d.ts.map +1 -0
  286. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +123 -0
  287. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -0
  288. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +26 -0
  289. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -0
  290. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts +2 -3
  291. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +7 -5
  293. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  294. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/ui/index.d.ts +2 -3
  296. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +4 -34
  298. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  306. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  312. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  313. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts +40 -0
  314. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts.map +1 -0
  315. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts +38 -0
  316. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -0
  317. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts +25 -0
  318. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +39 -0
  320. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts +34 -0
  322. package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts.map +1 -0
  323. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  324. package/lib/typescript/commonjs/ui/server.d.ts +2 -3
  325. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  326. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +2 -2
  327. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -18
  328. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  329. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts +24 -0
  330. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts +8 -0
  332. package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +25 -0
  334. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -0
  335. package/lib/typescript/commonjs/ui/utils/storageHelpers.d.ts +0 -11
  336. package/lib/typescript/commonjs/ui/utils/storageHelpers.d.ts.map +1 -1
  337. package/lib/typescript/module/assets/icons/OxyServices.d.ts +0 -5
  338. package/lib/typescript/module/assets/icons/OxyServices.d.ts.map +1 -1
  339. package/lib/typescript/module/index.d.ts +11 -6
  340. package/lib/typescript/module/index.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +29 -0
  342. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -0
  343. package/lib/typescript/module/ui/client.d.ts +3 -4
  344. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/components/Header.d.ts +16 -21
  347. package/lib/typescript/module/ui/components/Header.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts +3 -7
  349. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts.map +1 -1
  350. package/lib/typescript/module/ui/components/OxyOAuthCallback.d.ts +11 -0
  351. package/lib/typescript/module/ui/components/OxyOAuthCallback.d.ts.map +1 -0
  352. package/lib/typescript/module/ui/components/OxyPayButton.d.ts.map +1 -1
  353. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +0 -13
  354. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  355. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  356. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts +33 -0
  357. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -0
  358. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  359. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  360. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  361. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  362. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -10
  363. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  364. package/lib/typescript/module/ui/context/OxyContext.d.ts +2 -185
  365. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  366. package/lib/typescript/module/ui/context/oxyContextHelpers.d.ts +7 -0
  367. package/lib/typescript/module/ui/context/oxyContextHelpers.d.ts.map +1 -0
  368. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +123 -0
  369. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -0
  370. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +26 -0
  371. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -0
  372. package/lib/typescript/module/ui/hooks/queryClient.d.ts +2 -3
  373. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  374. package/lib/typescript/module/ui/hooks/useAuth.d.ts +7 -5
  375. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  376. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  377. package/lib/typescript/module/ui/index.d.ts +2 -3
  378. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  379. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +4 -34
  380. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
  381. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  382. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  383. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  384. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  385. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  386. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  387. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  388. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  389. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  390. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  391. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  392. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  393. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  394. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  395. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts +40 -0
  396. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts.map +1 -0
  397. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts +38 -0
  398. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -0
  399. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts +25 -0
  400. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts.map +1 -0
  401. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +39 -0
  402. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -0
  403. package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts +34 -0
  404. package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts.map +1 -0
  405. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  406. package/lib/typescript/module/ui/server.d.ts +2 -3
  407. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  408. package/lib/typescript/module/ui/session/createSessionClient.d.ts +2 -2
  409. package/lib/typescript/module/ui/types/navigation.d.ts +2 -18
  410. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  411. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts +24 -0
  412. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -0
  413. package/lib/typescript/module/ui/utils/deviceCredential.d.ts +8 -0
  414. package/lib/typescript/module/ui/utils/deviceCredential.d.ts.map +1 -0
  415. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +25 -0
  416. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -0
  417. package/lib/typescript/module/ui/utils/storageHelpers.d.ts +0 -11
  418. package/lib/typescript/module/ui/utils/storageHelpers.d.ts.map +1 -1
  419. package/package.json +29 -17
  420. package/src/assets/icons/OxyServices.tsx +5 -12
  421. package/src/index.ts +16 -10
  422. package/src/ui/boot/runProviderColdBoot.ts +150 -0
  423. package/src/ui/client.ts +3 -4
  424. package/src/ui/components/FollowButton.tsx +30 -95
  425. package/src/ui/components/Header.tsx +135 -405
  426. package/src/ui/components/OxyAccountDialog.tsx +18 -16
  427. package/src/ui/components/OxyConsentScreen.tsx +2 -2
  428. package/src/ui/components/OxyOAuthCallback.tsx +38 -0
  429. package/src/ui/components/OxyPayButton.tsx +11 -60
  430. package/src/ui/components/OxyProvider.tsx +3 -3
  431. package/src/ui/components/OxySignInButton.tsx +35 -134
  432. package/src/ui/components/ProfileButton.tsx +8 -3
  433. package/src/ui/components/ProfileSummaryCard.tsx +123 -0
  434. package/src/ui/components/RequireOxyAuth.tsx +3 -3
  435. package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +1 -3
  436. package/src/ui/components/fileManagement/FileDetailsModal.tsx +9 -9
  437. package/src/ui/components/fileManagement/FileViewer.tsx +20 -22
  438. package/src/ui/components/fileManagement/UploadPreview.tsx +6 -6
  439. package/src/ui/components/modals/DeleteAccountModal.tsx +7 -7
  440. package/src/ui/components/payment/PaymentDetailsStep.tsx +49 -39
  441. package/src/ui/components/payment/PaymentSummaryStep.tsx +4 -1
  442. package/src/ui/components/payment/paymentStyles.ts +14 -14
  443. package/src/ui/components/payment/types.ts +6 -10
  444. package/src/ui/context/OxyContext.tsx +136 -470
  445. package/src/ui/context/oxyContextHelpers.ts +58 -0
  446. package/src/ui/context/oxyContextTypes.ts +124 -0
  447. package/src/ui/context/useOxyAccountGraph.ts +114 -0
  448. package/src/ui/hooks/queryClient.ts +9 -20
  449. package/src/ui/hooks/useAuth.ts +7 -5
  450. package/src/ui/hooks/useSessionManagement.ts +2 -0
  451. package/src/ui/index.ts +2 -3
  452. package/src/ui/navigation/accountDialogManager.ts +4 -40
  453. package/src/ui/screens/ConnectedAppsScreen.tsx +8 -11
  454. package/src/ui/screens/EditProfileFieldScreen.tsx +2 -3
  455. package/src/ui/screens/EditProfileScreen.tsx +8 -14
  456. package/src/ui/screens/FAQScreen.tsx +7 -8
  457. package/src/ui/screens/FeedbackScreen.tsx +0 -1
  458. package/src/ui/screens/FileManagementScreen.tsx +54 -1158
  459. package/src/ui/screens/HistoryViewScreen.tsx +4 -4
  460. package/src/ui/screens/LanguageSelectorScreen.tsx +0 -1
  461. package/src/ui/screens/LegalDocumentsScreen.tsx +4 -3
  462. package/src/ui/screens/ManageAccountScreen.tsx +14 -47
  463. package/src/ui/screens/PaymentGatewayScreen.tsx +3 -7
  464. package/src/ui/screens/PremiumSubscriptionScreen.tsx +33 -31
  465. package/src/ui/screens/PrivacySettingsScreen.tsx +14 -16
  466. package/src/ui/screens/ProfileScreen.tsx +3 -3
  467. package/src/ui/screens/SavesCollectionsScreen.tsx +11 -12
  468. package/src/ui/screens/SearchSettingsScreen.tsx +2 -2
  469. package/src/ui/screens/UserListScreen.tsx +2 -2
  470. package/src/ui/screens/WelcomeNewUserScreen.tsx +6 -7
  471. package/src/ui/screens/fileManagement/FileListSection.tsx +126 -0
  472. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +611 -0
  473. package/src/ui/screens/fileManagement/UploadBar.tsx +48 -0
  474. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +497 -0
  475. package/src/ui/screens/fileManagement/shared.ts +65 -0
  476. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  477. package/src/ui/screens/trust/TrustFAQScreen.tsx +4 -10
  478. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +2 -2
  479. package/src/ui/screens/trust/TrustRulesScreen.tsx +2 -2
  480. package/src/ui/server.ts +2 -3
  481. package/src/ui/session/createSessionClient.ts +2 -2
  482. package/src/ui/types/navigation.ts +2 -18
  483. package/src/ui/utils/crossOriginRestore.ts +129 -0
  484. package/src/ui/utils/deviceCredential.ts +17 -0
  485. package/src/ui/utils/oauthReturn.ts +101 -0
  486. package/src/ui/utils/storageHelpers.ts +0 -12
  487. package/lib/commonjs/ui/components/ActivityIndicator.js +0 -203
  488. package/lib/commonjs/ui/components/ActivityIndicator.js.map +0 -1
  489. package/lib/commonjs/ui/components/AutoHeightScrollView.js +0 -46
  490. package/lib/commonjs/ui/components/AutoHeightScrollView.js.map +0 -1
  491. package/lib/commonjs/ui/components/Avatar.js +0 -181
  492. package/lib/commonjs/ui/components/Avatar.js.map +0 -1
  493. package/lib/commonjs/ui/components/CrossFadeIcon.js +0 -106
  494. package/lib/commonjs/ui/components/CrossFadeIcon.js.map +0 -1
  495. package/lib/commonjs/ui/components/EmptyState.js +0 -41
  496. package/lib/commonjs/ui/components/EmptyState.js.map +0 -1
  497. package/lib/commonjs/ui/components/HelperText.js +0 -95
  498. package/lib/commonjs/ui/components/HelperText.js.map +0 -1
  499. package/lib/commonjs/ui/components/Icon.js +0 -112
  500. package/lib/commonjs/ui/components/Icon.js.map +0 -1
  501. package/lib/commonjs/ui/components/IconButton/IconButton.js +0 -153
  502. package/lib/commonjs/ui/components/IconButton/IconButton.js.map +0 -1
  503. package/lib/commonjs/ui/components/IconButton/utils.js +0 -155
  504. package/lib/commonjs/ui/components/IconButton/utils.js.map +0 -1
  505. package/lib/commonjs/ui/components/LoadingState.js +0 -47
  506. package/lib/commonjs/ui/components/LoadingState.js.map +0 -1
  507. package/lib/commonjs/ui/components/OxyLogo.js +0 -110
  508. package/lib/commonjs/ui/components/OxyLogo.js.map +0 -1
  509. package/lib/commonjs/ui/components/ProfileCard.js +0 -134
  510. package/lib/commonjs/ui/components/ProfileCard.js.map +0 -1
  511. package/lib/commonjs/ui/components/QuickActions.js +0 -84
  512. package/lib/commonjs/ui/components/QuickActions.js.map +0 -1
  513. package/lib/commonjs/ui/components/StepBasedScreen.js +0 -423
  514. package/lib/commonjs/ui/components/StepBasedScreen.js.map +0 -1
  515. package/lib/commonjs/ui/components/Surface.js +0 -258
  516. package/lib/commonjs/ui/components/Surface.js.map +0 -1
  517. package/lib/commonjs/ui/components/TextField/Addons/Outline.js +0 -46
  518. package/lib/commonjs/ui/components/TextField/Addons/Outline.js.map +0 -1
  519. package/lib/commonjs/ui/components/TextField/Addons/Underline.js +0 -53
  520. package/lib/commonjs/ui/components/TextField/Addons/Underline.js.map +0 -1
  521. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js +0 -153
  522. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js.map +0 -1
  523. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js +0 -144
  524. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js.map +0 -1
  525. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js +0 -137
  526. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js.map +0 -1
  527. package/lib/commonjs/ui/components/TextField/Adornment/enums.js +0 -22
  528. package/lib/commonjs/ui/components/TextField/Adornment/enums.js.map +0 -1
  529. package/lib/commonjs/ui/components/TextField/Adornment/types.js.map +0 -1
  530. package/lib/commonjs/ui/components/TextField/Adornment/utils.js +0 -62
  531. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +0 -1
  532. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js +0 -176
  533. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js.map +0 -1
  534. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js +0 -84
  535. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js.map +0 -1
  536. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js +0 -381
  537. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js.map +0 -1
  538. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js +0 -365
  539. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js.map +0 -1
  540. package/lib/commonjs/ui/components/TextField/constants.js +0 -50
  541. package/lib/commonjs/ui/components/TextField/constants.js.map +0 -1
  542. package/lib/commonjs/ui/components/TextField/helpers.js +0 -489
  543. package/lib/commonjs/ui/components/TextField/helpers.js.map +0 -1
  544. package/lib/commonjs/ui/components/TextField/types.js +0 -6
  545. package/lib/commonjs/ui/components/TextField/types.js.map +0 -1
  546. package/lib/commonjs/ui/components/TextField.js +0 -335
  547. package/lib/commonjs/ui/components/TextField.js.map +0 -1
  548. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js +0 -12
  549. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +0 -1
  550. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js +0 -258
  551. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js.map +0 -1
  552. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js +0 -107
  553. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js.map +0 -1
  554. package/lib/commonjs/ui/components/TouchableRipple/utils.js +0 -56
  555. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +0 -1
  556. package/lib/commonjs/ui/components/Typography/AnimatedText.js +0 -59
  557. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +0 -1
  558. package/lib/commonjs/ui/components/Typography/types.js +0 -26
  559. package/lib/commonjs/ui/components/Typography/types.js.map +0 -1
  560. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +0 -33
  561. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +0 -1
  562. package/lib/commonjs/ui/components/icon/OxyIcon.js +0 -26
  563. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +0 -1
  564. package/lib/commonjs/ui/components/theming.js +0 -128
  565. package/lib/commonjs/ui/components/theming.js.map +0 -1
  566. package/lib/commonjs/ui/components/types.js +0 -6
  567. package/lib/commonjs/ui/components/types.js.map +0 -1
  568. package/lib/commonjs/ui/components/utils/forwardRef.js +0 -18
  569. package/lib/commonjs/ui/components/utils/forwardRef.js.map +0 -1
  570. package/lib/commonjs/ui/constants/iconColors.js +0 -84
  571. package/lib/commonjs/ui/constants/iconColors.js.map +0 -1
  572. package/lib/commonjs/ui/constants/theme.js +0 -124
  573. package/lib/commonjs/ui/constants/theme.js.map +0 -1
  574. package/lib/commonjs/ui/context/ThemeContext.js +0 -36
  575. package/lib/commonjs/ui/context/ThemeContext.js.map +0 -1
  576. package/lib/commonjs/ui/hooks/useColorScheme.js +0 -29
  577. package/lib/commonjs/ui/hooks/useColorScheme.js.map +0 -1
  578. package/lib/commonjs/ui/styles/authStyles.js +0 -334
  579. package/lib/commonjs/ui/styles/authStyles.js.map +0 -1
  580. package/lib/commonjs/ui/styles/theme.js +0 -153
  581. package/lib/commonjs/ui/styles/theme.js.map +0 -1
  582. package/lib/module/ui/components/ActivityIndicator.js +0 -198
  583. package/lib/module/ui/components/ActivityIndicator.js.map +0 -1
  584. package/lib/module/ui/components/AutoHeightScrollView.js +0 -41
  585. package/lib/module/ui/components/AutoHeightScrollView.js.map +0 -1
  586. package/lib/module/ui/components/Avatar.js +0 -177
  587. package/lib/module/ui/components/Avatar.js.map +0 -1
  588. package/lib/module/ui/components/CrossFadeIcon.js +0 -101
  589. package/lib/module/ui/components/CrossFadeIcon.js.map +0 -1
  590. package/lib/module/ui/components/EmptyState.js +0 -36
  591. package/lib/module/ui/components/EmptyState.js.map +0 -1
  592. package/lib/module/ui/components/HelperText.js +0 -90
  593. package/lib/module/ui/components/HelperText.js.map +0 -1
  594. package/lib/module/ui/components/Icon.js +0 -106
  595. package/lib/module/ui/components/Icon.js.map +0 -1
  596. package/lib/module/ui/components/IconButton/IconButton.js +0 -148
  597. package/lib/module/ui/components/IconButton/IconButton.js.map +0 -1
  598. package/lib/module/ui/components/IconButton/utils.js +0 -149
  599. package/lib/module/ui/components/IconButton/utils.js.map +0 -1
  600. package/lib/module/ui/components/LoadingState.js +0 -42
  601. package/lib/module/ui/components/LoadingState.js.map +0 -1
  602. package/lib/module/ui/components/OxyLogo.js +0 -104
  603. package/lib/module/ui/components/OxyLogo.js.map +0 -1
  604. package/lib/module/ui/components/ProfileCard.js +0 -129
  605. package/lib/module/ui/components/ProfileCard.js.map +0 -1
  606. package/lib/module/ui/components/QuickActions.js +0 -80
  607. package/lib/module/ui/components/QuickActions.js.map +0 -1
  608. package/lib/module/ui/components/StepBasedScreen.js +0 -418
  609. package/lib/module/ui/components/StepBasedScreen.js.map +0 -1
  610. package/lib/module/ui/components/Surface.js +0 -252
  611. package/lib/module/ui/components/Surface.js.map +0 -1
  612. package/lib/module/ui/components/TextField/Addons/Outline.js +0 -40
  613. package/lib/module/ui/components/TextField/Addons/Outline.js.map +0 -1
  614. package/lib/module/ui/components/TextField/Addons/Underline.js +0 -47
  615. package/lib/module/ui/components/TextField/Addons/Underline.js.map +0 -1
  616. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js +0 -146
  617. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js.map +0 -1
  618. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js +0 -141
  619. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js.map +0 -1
  620. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js +0 -135
  621. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js.map +0 -1
  622. package/lib/module/ui/components/TextField/Adornment/enums.js +0 -18
  623. package/lib/module/ui/components/TextField/Adornment/enums.js.map +0 -1
  624. package/lib/module/ui/components/TextField/Adornment/types.js +0 -4
  625. package/lib/module/ui/components/TextField/Adornment/types.js.map +0 -1
  626. package/lib/module/ui/components/TextField/Adornment/utils.js +0 -57
  627. package/lib/module/ui/components/TextField/Adornment/utils.js.map +0 -1
  628. package/lib/module/ui/components/TextField/Label/InputLabel.js +0 -171
  629. package/lib/module/ui/components/TextField/Label/InputLabel.js.map +0 -1
  630. package/lib/module/ui/components/TextField/Label/LabelBackground.js +0 -78
  631. package/lib/module/ui/components/TextField/Label/LabelBackground.js.map +0 -1
  632. package/lib/module/ui/components/TextField/TextFieldFlat.js +0 -376
  633. package/lib/module/ui/components/TextField/TextFieldFlat.js.map +0 -1
  634. package/lib/module/ui/components/TextField/TextFieldOutlined.js +0 -359
  635. package/lib/module/ui/components/TextField/TextFieldOutlined.js.map +0 -1
  636. package/lib/module/ui/components/TextField/constants.js +0 -46
  637. package/lib/module/ui/components/TextField/constants.js.map +0 -1
  638. package/lib/module/ui/components/TextField/helpers.js +0 -471
  639. package/lib/module/ui/components/TextField/helpers.js.map +0 -1
  640. package/lib/module/ui/components/TextField/types.js +0 -4
  641. package/lib/module/ui/components/TextField/types.js.map +0 -1
  642. package/lib/module/ui/components/TextField.js +0 -329
  643. package/lib/module/ui/components/TextField.js.map +0 -1
  644. package/lib/module/ui/components/TouchableRipple/Pressable.js +0 -9
  645. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +0 -1
  646. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js +0 -253
  647. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js.map +0 -1
  648. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js +0 -101
  649. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js.map +0 -1
  650. package/lib/module/ui/components/TouchableRipple/utils.js +0 -50
  651. package/lib/module/ui/components/TouchableRipple/utils.js.map +0 -1
  652. package/lib/module/ui/components/Typography/AnimatedText.js +0 -54
  653. package/lib/module/ui/components/Typography/AnimatedText.js.map +0 -1
  654. package/lib/module/ui/components/Typography/types.js +0 -22
  655. package/lib/module/ui/components/Typography/types.js.map +0 -1
  656. package/lib/module/ui/components/feedback/ProgressIndicator.js +0 -28
  657. package/lib/module/ui/components/feedback/ProgressIndicator.js.map +0 -1
  658. package/lib/module/ui/components/icon/OxyIcon.js +0 -22
  659. package/lib/module/ui/components/icon/OxyIcon.js.map +0 -1
  660. package/lib/module/ui/components/theming.js +0 -123
  661. package/lib/module/ui/components/theming.js.map +0 -1
  662. package/lib/module/ui/components/types.js +0 -4
  663. package/lib/module/ui/components/types.js.map +0 -1
  664. package/lib/module/ui/components/utils/forwardRef.js +0 -13
  665. package/lib/module/ui/components/utils/forwardRef.js.map +0 -1
  666. package/lib/module/ui/constants/iconColors.js +0 -78
  667. package/lib/module/ui/constants/iconColors.js.map +0 -1
  668. package/lib/module/ui/constants/theme.js +0 -120
  669. package/lib/module/ui/constants/theme.js.map +0 -1
  670. package/lib/module/ui/context/ThemeContext.js +0 -29
  671. package/lib/module/ui/context/ThemeContext.js.map +0 -1
  672. package/lib/module/ui/hooks/useColorScheme.js +0 -26
  673. package/lib/module/ui/hooks/useColorScheme.js.map +0 -1
  674. package/lib/module/ui/styles/authStyles.js +0 -329
  675. package/lib/module/ui/styles/authStyles.js.map +0 -1
  676. package/lib/module/ui/styles/theme.js +0 -147
  677. package/lib/module/ui/styles/theme.js.map +0 -1
  678. package/lib/typescript/commonjs/ui/components/ActivityIndicator.d.ts +0 -45
  679. package/lib/typescript/commonjs/ui/components/ActivityIndicator.d.ts.map +0 -1
  680. package/lib/typescript/commonjs/ui/components/AutoHeightScrollView.d.ts +0 -23
  681. package/lib/typescript/commonjs/ui/components/AutoHeightScrollView.d.ts.map +0 -1
  682. package/lib/typescript/commonjs/ui/components/Avatar.d.ts +0 -61
  683. package/lib/typescript/commonjs/ui/components/Avatar.d.ts.map +0 -1
  684. package/lib/typescript/commonjs/ui/components/CrossFadeIcon.d.ts +0 -28
  685. package/lib/typescript/commonjs/ui/components/CrossFadeIcon.d.ts.map +0 -1
  686. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts +0 -8
  687. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +0 -1
  688. package/lib/typescript/commonjs/ui/components/HelperText.d.ts +0 -47
  689. package/lib/typescript/commonjs/ui/components/HelperText.d.ts.map +0 -1
  690. package/lib/typescript/commonjs/ui/components/Icon.d.ts +0 -61
  691. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +0 -1
  692. package/lib/typescript/commonjs/ui/components/IconButton/IconButton.d.ts +0 -99
  693. package/lib/typescript/commonjs/ui/components/IconButton/IconButton.d.ts.map +0 -1
  694. package/lib/typescript/commonjs/ui/components/IconButton/utils.d.ts +0 -19
  695. package/lib/typescript/commonjs/ui/components/IconButton/utils.d.ts.map +0 -1
  696. package/lib/typescript/commonjs/ui/components/LoadingState.d.ts +0 -9
  697. package/lib/typescript/commonjs/ui/components/LoadingState.d.ts.map +0 -1
  698. package/lib/typescript/commonjs/ui/components/OxyLogo.d.ts +0 -16
  699. package/lib/typescript/commonjs/ui/components/OxyLogo.d.ts.map +0 -1
  700. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts +0 -21
  701. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts.map +0 -1
  702. package/lib/typescript/commonjs/ui/components/QuickActions.d.ts +0 -15
  703. package/lib/typescript/commonjs/ui/components/QuickActions.d.ts.map +0 -1
  704. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts +0 -28
  705. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts.map +0 -1
  706. package/lib/typescript/commonjs/ui/components/Surface.d.ts +0 -76
  707. package/lib/typescript/commonjs/ui/components/Surface.d.ts.map +0 -1
  708. package/lib/typescript/commonjs/ui/components/TextField/Addons/Outline.d.ts +0 -17
  709. package/lib/typescript/commonjs/ui/components/TextField/Addons/Outline.d.ts.map +0 -1
  710. package/lib/typescript/commonjs/ui/components/TextField/Addons/Underline.d.ts +0 -20
  711. package/lib/typescript/commonjs/ui/components/TextField/Addons/Underline.d.ts.map +0 -1
  712. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +0 -45
  713. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.d.ts.map +0 -1
  714. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAffix.d.ts +0 -73
  715. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAffix.d.ts.map +0 -1
  716. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldIcon.d.ts +0 -78
  717. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldIcon.d.ts.map +0 -1
  718. package/lib/typescript/commonjs/ui/components/TextField/Adornment/enums.d.ts +0 -13
  719. package/lib/typescript/commonjs/ui/components/TextField/Adornment/enums.d.ts.map +0 -1
  720. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts +0 -12
  721. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +0 -1
  722. package/lib/typescript/commonjs/ui/components/TextField/Adornment/utils.d.ts +0 -12
  723. package/lib/typescript/commonjs/ui/components/TextField/Adornment/utils.d.ts.map +0 -1
  724. package/lib/typescript/commonjs/ui/components/TextField/Label/InputLabel.d.ts +0 -5
  725. package/lib/typescript/commonjs/ui/components/TextField/Label/InputLabel.d.ts.map +0 -1
  726. package/lib/typescript/commonjs/ui/components/TextField/Label/LabelBackground.d.ts +0 -5
  727. package/lib/typescript/commonjs/ui/components/TextField/Label/LabelBackground.d.ts.map +0 -1
  728. package/lib/typescript/commonjs/ui/components/TextField/TextFieldFlat.d.ts +0 -5
  729. package/lib/typescript/commonjs/ui/components/TextField/TextFieldFlat.d.ts.map +0 -1
  730. package/lib/typescript/commonjs/ui/components/TextField/TextFieldOutlined.d.ts +0 -5
  731. package/lib/typescript/commonjs/ui/components/TextField/TextFieldOutlined.d.ts.map +0 -1
  732. package/lib/typescript/commonjs/ui/components/TextField/constants.d.ts +0 -32
  733. package/lib/typescript/commonjs/ui/components/TextField/constants.d.ts.map +0 -1
  734. package/lib/typescript/commonjs/ui/components/TextField/helpers.d.ts +0 -97
  735. package/lib/typescript/commonjs/ui/components/TextField/helpers.d.ts.map +0 -1
  736. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts +0 -155
  737. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts.map +0 -1
  738. package/lib/typescript/commonjs/ui/components/TextField.d.ts +0 -192
  739. package/lib/typescript/commonjs/ui/components/TextField.d.ts.map +0 -1
  740. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts +0 -13
  741. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +0 -1
  742. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.d.ts +0 -62
  743. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.d.ts.map +0 -1
  744. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +0 -25
  745. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +0 -1
  746. package/lib/typescript/commonjs/ui/components/TouchableRipple/utils.d.ts +0 -11
  747. package/lib/typescript/commonjs/ui/components/TouchableRipple/utils.d.ts.map +0 -1
  748. package/lib/typescript/commonjs/ui/components/Typography/AnimatedText.d.ts +0 -35
  749. package/lib/typescript/commonjs/ui/components/Typography/AnimatedText.d.ts.map +0 -1
  750. package/lib/typescript/commonjs/ui/components/Typography/types.d.ts +0 -19
  751. package/lib/typescript/commonjs/ui/components/Typography/types.d.ts.map +0 -1
  752. package/lib/typescript/commonjs/ui/components/feedback/ProgressIndicator.d.ts +0 -11
  753. package/lib/typescript/commonjs/ui/components/feedback/ProgressIndicator.d.ts.map +0 -1
  754. package/lib/typescript/commonjs/ui/components/icon/OxyIcon.d.ts +0 -10
  755. package/lib/typescript/commonjs/ui/components/icon/OxyIcon.d.ts.map +0 -1
  756. package/lib/typescript/commonjs/ui/components/theming.d.ts +0 -8
  757. package/lib/typescript/commonjs/ui/components/theming.d.ts.map +0 -1
  758. package/lib/typescript/commonjs/ui/components/types.d.ts +0 -81
  759. package/lib/typescript/commonjs/ui/components/types.d.ts.map +0 -1
  760. package/lib/typescript/commonjs/ui/components/utils/forwardRef.d.ts +0 -12
  761. package/lib/typescript/commonjs/ui/components/utils/forwardRef.d.ts.map +0 -1
  762. package/lib/typescript/commonjs/ui/constants/iconColors.d.ts +0 -130
  763. package/lib/typescript/commonjs/ui/constants/iconColors.d.ts.map +0 -1
  764. package/lib/typescript/commonjs/ui/constants/theme.d.ts +0 -98
  765. package/lib/typescript/commonjs/ui/constants/theme.d.ts.map +0 -1
  766. package/lib/typescript/commonjs/ui/context/ThemeContext.d.ts +0 -19
  767. package/lib/typescript/commonjs/ui/context/ThemeContext.d.ts.map +0 -1
  768. package/lib/typescript/commonjs/ui/hooks/useColorScheme.d.ts +0 -8
  769. package/lib/typescript/commonjs/ui/hooks/useColorScheme.d.ts.map +0 -1
  770. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts +0 -328
  771. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts.map +0 -1
  772. package/lib/typescript/commonjs/ui/styles/theme.d.ts +0 -75
  773. package/lib/typescript/commonjs/ui/styles/theme.d.ts.map +0 -1
  774. package/lib/typescript/module/ui/components/ActivityIndicator.d.ts +0 -45
  775. package/lib/typescript/module/ui/components/ActivityIndicator.d.ts.map +0 -1
  776. package/lib/typescript/module/ui/components/AutoHeightScrollView.d.ts +0 -23
  777. package/lib/typescript/module/ui/components/AutoHeightScrollView.d.ts.map +0 -1
  778. package/lib/typescript/module/ui/components/Avatar.d.ts +0 -61
  779. package/lib/typescript/module/ui/components/Avatar.d.ts.map +0 -1
  780. package/lib/typescript/module/ui/components/CrossFadeIcon.d.ts +0 -28
  781. package/lib/typescript/module/ui/components/CrossFadeIcon.d.ts.map +0 -1
  782. package/lib/typescript/module/ui/components/EmptyState.d.ts +0 -8
  783. package/lib/typescript/module/ui/components/EmptyState.d.ts.map +0 -1
  784. package/lib/typescript/module/ui/components/HelperText.d.ts +0 -47
  785. package/lib/typescript/module/ui/components/HelperText.d.ts.map +0 -1
  786. package/lib/typescript/module/ui/components/Icon.d.ts +0 -61
  787. package/lib/typescript/module/ui/components/Icon.d.ts.map +0 -1
  788. package/lib/typescript/module/ui/components/IconButton/IconButton.d.ts +0 -99
  789. package/lib/typescript/module/ui/components/IconButton/IconButton.d.ts.map +0 -1
  790. package/lib/typescript/module/ui/components/IconButton/utils.d.ts +0 -19
  791. package/lib/typescript/module/ui/components/IconButton/utils.d.ts.map +0 -1
  792. package/lib/typescript/module/ui/components/LoadingState.d.ts +0 -9
  793. package/lib/typescript/module/ui/components/LoadingState.d.ts.map +0 -1
  794. package/lib/typescript/module/ui/components/OxyLogo.d.ts +0 -16
  795. package/lib/typescript/module/ui/components/OxyLogo.d.ts.map +0 -1
  796. package/lib/typescript/module/ui/components/ProfileCard.d.ts +0 -21
  797. package/lib/typescript/module/ui/components/ProfileCard.d.ts.map +0 -1
  798. package/lib/typescript/module/ui/components/QuickActions.d.ts +0 -15
  799. package/lib/typescript/module/ui/components/QuickActions.d.ts.map +0 -1
  800. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts +0 -28
  801. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts.map +0 -1
  802. package/lib/typescript/module/ui/components/Surface.d.ts +0 -76
  803. package/lib/typescript/module/ui/components/Surface.d.ts.map +0 -1
  804. package/lib/typescript/module/ui/components/TextField/Addons/Outline.d.ts +0 -17
  805. package/lib/typescript/module/ui/components/TextField/Addons/Outline.d.ts.map +0 -1
  806. package/lib/typescript/module/ui/components/TextField/Addons/Underline.d.ts +0 -20
  807. package/lib/typescript/module/ui/components/TextField/Addons/Underline.d.ts.map +0 -1
  808. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +0 -45
  809. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAdornment.d.ts.map +0 -1
  810. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAffix.d.ts +0 -73
  811. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAffix.d.ts.map +0 -1
  812. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldIcon.d.ts +0 -78
  813. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldIcon.d.ts.map +0 -1
  814. package/lib/typescript/module/ui/components/TextField/Adornment/enums.d.ts +0 -13
  815. package/lib/typescript/module/ui/components/TextField/Adornment/enums.d.ts.map +0 -1
  816. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts +0 -12
  817. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +0 -1
  818. package/lib/typescript/module/ui/components/TextField/Adornment/utils.d.ts +0 -12
  819. package/lib/typescript/module/ui/components/TextField/Adornment/utils.d.ts.map +0 -1
  820. package/lib/typescript/module/ui/components/TextField/Label/InputLabel.d.ts +0 -5
  821. package/lib/typescript/module/ui/components/TextField/Label/InputLabel.d.ts.map +0 -1
  822. package/lib/typescript/module/ui/components/TextField/Label/LabelBackground.d.ts +0 -5
  823. package/lib/typescript/module/ui/components/TextField/Label/LabelBackground.d.ts.map +0 -1
  824. package/lib/typescript/module/ui/components/TextField/TextFieldFlat.d.ts +0 -5
  825. package/lib/typescript/module/ui/components/TextField/TextFieldFlat.d.ts.map +0 -1
  826. package/lib/typescript/module/ui/components/TextField/TextFieldOutlined.d.ts +0 -5
  827. package/lib/typescript/module/ui/components/TextField/TextFieldOutlined.d.ts.map +0 -1
  828. package/lib/typescript/module/ui/components/TextField/constants.d.ts +0 -32
  829. package/lib/typescript/module/ui/components/TextField/constants.d.ts.map +0 -1
  830. package/lib/typescript/module/ui/components/TextField/helpers.d.ts +0 -97
  831. package/lib/typescript/module/ui/components/TextField/helpers.d.ts.map +0 -1
  832. package/lib/typescript/module/ui/components/TextField/types.d.ts +0 -155
  833. package/lib/typescript/module/ui/components/TextField/types.d.ts.map +0 -1
  834. package/lib/typescript/module/ui/components/TextField.d.ts +0 -192
  835. package/lib/typescript/module/ui/components/TextField.d.ts.map +0 -1
  836. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts +0 -13
  837. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +0 -1
  838. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.d.ts +0 -62
  839. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.d.ts.map +0 -1
  840. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +0 -25
  841. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +0 -1
  842. package/lib/typescript/module/ui/components/TouchableRipple/utils.d.ts +0 -11
  843. package/lib/typescript/module/ui/components/TouchableRipple/utils.d.ts.map +0 -1
  844. package/lib/typescript/module/ui/components/Typography/AnimatedText.d.ts +0 -35
  845. package/lib/typescript/module/ui/components/Typography/AnimatedText.d.ts.map +0 -1
  846. package/lib/typescript/module/ui/components/Typography/types.d.ts +0 -19
  847. package/lib/typescript/module/ui/components/Typography/types.d.ts.map +0 -1
  848. package/lib/typescript/module/ui/components/feedback/ProgressIndicator.d.ts +0 -11
  849. package/lib/typescript/module/ui/components/feedback/ProgressIndicator.d.ts.map +0 -1
  850. package/lib/typescript/module/ui/components/icon/OxyIcon.d.ts +0 -10
  851. package/lib/typescript/module/ui/components/icon/OxyIcon.d.ts.map +0 -1
  852. package/lib/typescript/module/ui/components/theming.d.ts +0 -8
  853. package/lib/typescript/module/ui/components/theming.d.ts.map +0 -1
  854. package/lib/typescript/module/ui/components/types.d.ts +0 -81
  855. package/lib/typescript/module/ui/components/types.d.ts.map +0 -1
  856. package/lib/typescript/module/ui/components/utils/forwardRef.d.ts +0 -12
  857. package/lib/typescript/module/ui/components/utils/forwardRef.d.ts.map +0 -1
  858. package/lib/typescript/module/ui/constants/iconColors.d.ts +0 -130
  859. package/lib/typescript/module/ui/constants/iconColors.d.ts.map +0 -1
  860. package/lib/typescript/module/ui/constants/theme.d.ts +0 -98
  861. package/lib/typescript/module/ui/constants/theme.d.ts.map +0 -1
  862. package/lib/typescript/module/ui/context/ThemeContext.d.ts +0 -19
  863. package/lib/typescript/module/ui/context/ThemeContext.d.ts.map +0 -1
  864. package/lib/typescript/module/ui/hooks/useColorScheme.d.ts +0 -8
  865. package/lib/typescript/module/ui/hooks/useColorScheme.d.ts.map +0 -1
  866. package/lib/typescript/module/ui/styles/authStyles.d.ts +0 -328
  867. package/lib/typescript/module/ui/styles/authStyles.d.ts.map +0 -1
  868. package/lib/typescript/module/ui/styles/theme.d.ts +0 -75
  869. package/lib/typescript/module/ui/styles/theme.d.ts.map +0 -1
  870. package/src/ui/components/ActivityIndicator.tsx +0 -254
  871. package/src/ui/components/AutoHeightScrollView.tsx +0 -50
  872. package/src/ui/components/Avatar.tsx +0 -284
  873. package/src/ui/components/CrossFadeIcon.tsx +0 -140
  874. package/src/ui/components/EmptyState.tsx +0 -39
  875. package/src/ui/components/HelperText.tsx +0 -149
  876. package/src/ui/components/Icon.tsx +0 -189
  877. package/src/ui/components/IconButton/IconButton.tsx +0 -232
  878. package/src/ui/components/IconButton/utils.ts +0 -190
  879. package/src/ui/components/LoadingState.tsx +0 -46
  880. package/src/ui/components/OxyLogo.tsx +0 -82
  881. package/src/ui/components/ProfileCard.tsx +0 -137
  882. package/src/ui/components/QuickActions.tsx +0 -91
  883. package/src/ui/components/StepBasedScreen.tsx +0 -499
  884. package/src/ui/components/Surface.tsx +0 -384
  885. package/src/ui/components/TextField/Addons/Outline.tsx +0 -64
  886. package/src/ui/components/TextField/Addons/Underline.tsx +0 -78
  887. package/src/ui/components/TextField/Adornment/TextFieldAdornment.tsx +0 -205
  888. package/src/ui/components/TextField/Adornment/TextFieldAffix.tsx +0 -212
  889. package/src/ui/components/TextField/Adornment/TextFieldIcon.tsx +0 -195
  890. package/src/ui/components/TextField/Adornment/enums.tsx +0 -12
  891. package/src/ui/components/TextField/Adornment/types.tsx +0 -11
  892. package/src/ui/components/TextField/Adornment/utils.ts +0 -66
  893. package/src/ui/components/TextField/Label/InputLabel.tsx +0 -219
  894. package/src/ui/components/TextField/Label/LabelBackground.tsx +0 -100
  895. package/src/ui/components/TextField/TextFieldFlat.tsx +0 -488
  896. package/src/ui/components/TextField/TextFieldOutlined.tsx +0 -464
  897. package/src/ui/components/TextField/constants.tsx +0 -48
  898. package/src/ui/components/TextField/helpers.tsx +0 -611
  899. package/src/ui/components/TextField/types.tsx +0 -160
  900. package/src/ui/components/TextField.tsx +0 -574
  901. package/src/ui/components/TouchableRipple/Pressable.tsx +0 -42
  902. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +0 -146
  903. package/src/ui/components/TouchableRipple/TouchableRipple.tsx +0 -347
  904. package/src/ui/components/TouchableRipple/utils.ts +0 -66
  905. package/src/ui/components/Typography/AnimatedText.tsx +0 -106
  906. package/src/ui/components/Typography/types.tsx +0 -22
  907. package/src/ui/components/feedback/ProgressIndicator.tsx +0 -35
  908. package/src/ui/components/icon/OxyIcon.tsx +0 -31
  909. package/src/ui/components/theming.tsx +0 -126
  910. package/src/ui/components/types.tsx +0 -93
  911. package/src/ui/components/utils/forwardRef.tsx +0 -23
  912. package/src/ui/constants/iconColors.ts +0 -88
  913. package/src/ui/constants/theme.ts +0 -121
  914. package/src/ui/context/ThemeContext.tsx +0 -41
  915. package/src/ui/context/__tests__/OxyContext.coldBoot.test.tsx +0 -166
  916. package/src/ui/hooks/useColorScheme.ts +0 -24
  917. package/src/ui/styles/authStyles.ts +0 -348
  918. package/src/ui/styles/theme.ts +0 -169
@@ -11,48 +11,21 @@ import {
11
11
  Image,
12
12
  Animated,
13
13
  Easing,
14
- FlatList,
15
14
  AccessibilityInfo,
16
- Platform,
17
- useWindowDimensions,
18
15
  } from 'react-native';
19
16
  import { Image as ExpoImage } from 'expo-image';
20
- import Reanimated, {
21
- FadeIn,
22
- useAnimatedStyle,
23
- useSharedValue,
24
- withSequence,
25
- withSpring,
26
- withTiming,
27
- } from 'react-native-reanimated';
28
17
  import type { FileManagementScreenProps } from '../types/fileManagement';
29
-
30
- // Lazy load expo-document-picker (optional dependency)
31
- // This allows the screen to work even if expo-document-picker is not installed
32
- let DocumentPicker: typeof import('expo-document-picker') | null = null;
33
- const loadDocumentPicker = async () => {
34
- if (DocumentPicker) return DocumentPicker;
35
- try {
36
- DocumentPicker = await import('expo-document-picker');
37
- return DocumentPicker;
38
- } catch (error) {
39
- throw new Error('expo-document-picker is not installed. Please install it: npx expo install expo-document-picker');
40
- }
41
- };
42
18
  import { Dialog, toast, useDialogControl } from '@oxyhq/bloom';
43
19
  import { Ionicons, MaterialCommunityIcons } from '@expo/vector-icons';
44
- import type { AssetUploadInput, FileMetadata, RNFileDescriptor } from '@oxyhq/core';
45
- import { getErrorMessage as getOxyErrorMessage } from '@oxyhq/core';
20
+ import type { FileMetadata } from '@oxyhq/core';
46
21
  import { useFileStore, useFiles, useUploading as useUploadingStore, useUploadAggregateProgress, useDeleting as useDeletingStore } from '../stores/fileStore';
47
22
  import Header from '../components/Header';
48
23
  import JustifiedPhotoGrid from '../components/photogrid/JustifiedPhotoGrid';
49
- import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
50
24
  import { useTheme } from '@oxyhq/bloom/theme';
51
25
  import { useOxy } from '../context/OxyContext';
52
26
  import { useI18n } from '../hooks/useI18n';
53
27
  import { useUploadFile } from '../hooks/mutations/useAccountMutations';
54
28
  import {
55
- convertDocumentPickerAssetToFile,
56
29
  formatFileSize,
57
30
  getFileIcon,
58
31
  getSafeDownloadUrl,
@@ -60,123 +33,12 @@ import {
60
33
  import { FileViewer } from '../components/fileManagement/FileViewer';
61
34
  import { FileDetailsModal } from '../components/fileManagement/FileDetailsModal';
62
35
  import { UploadPreview } from '../components/fileManagement/UploadPreview';
63
- import { fileManagementStyles, photoPickerStyles } from '../components/fileManagement/styles';
64
- import type { OnConfirmFileSelection } from '../types/fileManagement';
65
-
66
- /**
67
- * Extract error message from unknown error type.
68
- * Delegates to the canonical `getErrorMessage` in `@oxyhq/core` and returns
69
- * `undefined` for empty results (so callers can fall back to a translated
70
- * message via `||`).
71
- */
72
- const getErrorMessage = (error: unknown): string | undefined => {
73
- if (error == null) return undefined;
74
- const message = getOxyErrorMessage(error, '');
75
- return message ? message : undefined;
76
- };
77
-
78
- /**
79
- * A picker-produced file ready to upload. On web this is a real `File`
80
- * (carrying an optional `uri` for preview). On native, it's an
81
- * {@link RNFileDescriptor} — passed straight to FormData by `assetUpload`.
82
- */
83
- type UploadCandidate = (File & { uri?: string }) | RNFileDescriptor;
84
-
85
- /** Returns the display name for either a web File or an RN descriptor. */
86
- const candidateName = (candidate: UploadCandidate, fallback: string): string =>
87
- (candidate.name && typeof candidate.name === 'string' ? candidate.name : fallback);
88
-
89
- /** Returns the byte size for either a web File or an RN descriptor (0 if unknown). */
90
- const candidateSize = (candidate: UploadCandidate): number => {
91
- const size = (candidate as { size?: number }).size;
92
- return typeof size === 'number' && Number.isFinite(size) ? size : 0;
93
- };
94
-
95
- /** Returns the mime type for either a web File or an RN descriptor. */
96
- const candidateType = (candidate: UploadCandidate): string => {
97
- const value = (candidate as { type?: string }).type;
98
- return typeof value === 'string' && value.length > 0 ? value : 'application/octet-stream';
99
- };
100
-
101
- /** Returns the preview URI for an upload candidate, if available. */
102
- const candidateUri = (candidate: UploadCandidate): string | undefined => {
103
- const uri = (candidate as { uri?: string }).uri;
104
- return typeof uri === 'string' && uri.length > 0 ? uri : undefined;
105
- };
106
-
107
- /**
108
- * Haptic feedback wrapper. `expo-haptics` is an optional dependency — when not
109
- * installed (or on web), all calls degrade silently. We resolve the module
110
- * once and cache the promise so subsequent calls don't repeat the dynamic
111
- * import. Matches the pattern used by AvatarCropScreen.
112
- */
113
- type HapticImpact = 'light' | 'medium' | 'heavy';
114
- type HapticNotification = 'success' | 'warning' | 'error';
115
- interface HapticsModule {
116
- impactAsync: (style: unknown) => Promise<void>;
117
- notificationAsync: (type: unknown) => Promise<void>;
118
- selectionAsync: () => Promise<void>;
119
- ImpactFeedbackStyle: { Light: unknown; Medium: unknown; Heavy: unknown };
120
- NotificationFeedbackType: { Success: unknown; Warning: unknown; Error: unknown };
121
- }
122
-
123
- let hapticsModulePromise: Promise<HapticsModule | null> | null = null;
124
- const getHaptics = (): Promise<HapticsModule | null> => {
125
- if (Platform.OS === 'web') return Promise.resolve(null);
126
- if (hapticsModulePromise) return hapticsModulePromise;
127
- hapticsModulePromise = (async () => {
128
- try {
129
- const mod = (await import('expo-haptics')) as unknown as HapticsModule;
130
- if (!mod || typeof mod.impactAsync !== 'function') return null;
131
- return mod;
132
- } catch {
133
- return null;
134
- }
135
- })();
136
- return hapticsModulePromise;
137
- };
138
-
139
- const hapticImpact = async (style: HapticImpact): Promise<void> => {
140
- const h = await getHaptics();
141
- if (!h) return;
142
- const styleEnum =
143
- style === 'heavy'
144
- ? h.ImpactFeedbackStyle.Heavy
145
- : style === 'medium'
146
- ? h.ImpactFeedbackStyle.Medium
147
- : h.ImpactFeedbackStyle.Light;
148
- try {
149
- await h.impactAsync(styleEnum);
150
- } catch {
151
- // Silent — haptics are non-critical UX polish.
152
- }
153
- };
154
-
155
- const hapticSelection = async (): Promise<void> => {
156
- const h = await getHaptics();
157
- if (!h) return;
158
- try {
159
- await h.selectionAsync();
160
- } catch {
161
- // Silent.
162
- }
163
- };
164
-
165
- const hapticNotification = async (type: HapticNotification): Promise<void> => {
166
- const h = await getHaptics();
167
- if (!h) return;
168
- const typeEnum =
169
- type === 'error'
170
- ? h.NotificationFeedbackType.Error
171
- : type === 'warning'
172
- ? h.NotificationFeedbackType.Warning
173
- : h.NotificationFeedbackType.Success;
174
- try {
175
- await h.notificationAsync(typeEnum);
176
- } catch {
177
- // Silent.
178
- }
179
- };
36
+ import { fileManagementStyles } from '../components/fileManagement/styles';
37
+ import { getErrorMessage } from './fileManagement/shared';
38
+ import { useFileUploadState } from './fileManagement/hooks/useFileUploadState';
39
+ import PhotoPickerView from './fileManagement/PhotoPickerSection';
40
+ import FileListSection, { type FileListItem } from './fileManagement/FileListSection';
41
+ import UploadBar from './fileManagement/UploadBar';
180
42
 
181
43
  // Animated button component for smooth transitions
182
44
  const AnimatedButton: React.FC<{
@@ -232,518 +94,6 @@ const AnimatedButton: React.FC<{
232
94
  );
233
95
  };
234
96
 
235
- /**
236
- * Props for the dedicated photo picker view. Used by FileManagementScreen
237
- * only when `selectMode + image-only` is active. All callbacks are wired by
238
- * the parent — this component is purely presentational.
239
- */
240
- interface PhotoPickerViewProps {
241
- photos: FileMetadata[];
242
- selectedIds: Set<string>;
243
- multiSelect: boolean;
244
- maxSelection?: number;
245
- allowUpload: boolean;
246
- refreshing: boolean;
247
- uploading: boolean;
248
- isPickingDocument: boolean;
249
- uploadProgress: { current: number; total: number } | null;
250
- hasMore: boolean;
251
- loadingMore: boolean;
252
- reduceMotion: boolean;
253
- getThumbUrl: (file: FileMetadata, variant?: string) => string;
254
- primaryColor: string;
255
- isOwner: boolean;
256
- onTogglePhoto: (photo: FileMetadata) => void;
257
- onPreviewPhoto: (photo: FileMetadata) => void;
258
- onUpload: () => void;
259
- onRefresh: () => void;
260
- onLoadMore: () => void;
261
- onCancel: () => void;
262
- onConfirm: () => void;
263
- t: (key: string, vars?: Record<string, string | number>) => string;
264
- }
265
-
266
- /**
267
- * A single photo cell. Memoized so re-renders during selection only touch
268
- * affected cells — selection of one photo must not redraw the whole grid.
269
- *
270
- * Apple Photos pattern: when any cell is selected, *non-selected* siblings
271
- * fade to 0.6 opacity to focus attention on the active selection.
272
- */
273
- const PhotoPickerCell = React.memo(function PhotoPickerCell(props: {
274
- photo: FileMetadata;
275
- size: number;
276
- marginRight: number;
277
- marginBottom: number;
278
- isSelected: boolean;
279
- selectionIndex: number; // 1-based for badge; 0 if not selected
280
- dim: boolean; // any selection exists and this cell is not selected
281
- primaryColor: string;
282
- thumbUrl: string;
283
- enterIndex: number;
284
- reduceMotion: boolean;
285
- onPress: () => void;
286
- onLongPress: () => void;
287
- a11yLabel: string;
288
- }) {
289
- const {
290
- photo, size, marginRight, marginBottom, isSelected, selectionIndex,
291
- dim, primaryColor, thumbUrl, enterIndex, reduceMotion, onPress,
292
- onLongPress, a11yLabel,
293
- } = props;
294
-
295
- // Cap the cumulative stagger at ~800ms total so the very long grid does
296
- // not keep fading in late tiles. Beyond ~53 tiles the delay maxes out.
297
- const STAGGER_PER_CELL_MS = 15;
298
- const MAX_TOTAL_STAGGER_MS = 800;
299
- const delay = Math.min(enterIndex * STAGGER_PER_CELL_MS, MAX_TOTAL_STAGGER_MS);
300
-
301
- // Selection ring pulse animation: 1.0 → 1.05 → 1.0 on transition to
302
- // selected. Plays at most once per selection change; reduce-motion skips.
303
- const ringScale = useSharedValue(1);
304
- const prevSelected = useRef(isSelected);
305
- useEffect(() => {
306
- if (prevSelected.current === isSelected) return;
307
- prevSelected.current = isSelected;
308
- if (!isSelected) {
309
- ringScale.value = 1;
310
- return;
311
- }
312
- if (reduceMotion) {
313
- ringScale.value = 1;
314
- return;
315
- }
316
- ringScale.value = withSequence(
317
- withTiming(1.05, { duration: 110 }),
318
- withSpring(1, { damping: 14, stiffness: 200 }),
319
- );
320
- }, [isSelected, reduceMotion, ringScale]);
321
-
322
- const ringAnimatedStyle = useAnimatedStyle(() => ({
323
- transform: [{ scale: ringScale.value }],
324
- }));
325
-
326
- const inner = (
327
- <>
328
- <View style={[photoPickerStyles.cellInner, dim && photoPickerStyles.cellDim]}>
329
- <ExpoImage
330
- source={{ uri: thumbUrl }}
331
- style={photoPickerStyles.cellImage}
332
- contentFit="cover"
333
- transition={120}
334
- cachePolicy="memory-disk"
335
- accessibilityLabel={photo.filename}
336
- />
337
- </View>
338
- {isSelected && (
339
- <Reanimated.View
340
- pointerEvents="none"
341
- style={[
342
- photoPickerStyles.cellRing,
343
- { borderColor: primaryColor },
344
- ringAnimatedStyle,
345
- ]}
346
- />
347
- )}
348
- {isSelected && (
349
- <View
350
- pointerEvents="none"
351
- style={[photoPickerStyles.cellBadge, { backgroundColor: primaryColor }]}
352
- >
353
- <Text style={photoPickerStyles.cellBadgeText}>
354
- {selectionIndex > 0 ? String(selectionIndex) : ''}
355
- </Text>
356
- </View>
357
- )}
358
- </>
359
- );
360
-
361
- const cellWrapperStyle = {
362
- width: size,
363
- height: size,
364
- marginRight,
365
- marginBottom,
366
- };
367
-
368
- if (reduceMotion) {
369
- return (
370
- <TouchableOpacity
371
- activeOpacity={0.85}
372
- onPress={onPress}
373
- onLongPress={onLongPress}
374
- style={[photoPickerStyles.cellWrapper, cellWrapperStyle]}
375
- accessibilityRole="button"
376
- accessibilityLabel={a11yLabel}
377
- accessibilityState={{ selected: isSelected }}
378
- >
379
- {inner}
380
- </TouchableOpacity>
381
- );
382
- }
383
-
384
- return (
385
- <Reanimated.View
386
- entering={FadeIn.delay(delay).duration(200)}
387
- style={[photoPickerStyles.cellWrapper, cellWrapperStyle]}
388
- >
389
- <TouchableOpacity
390
- activeOpacity={0.85}
391
- onPress={onPress}
392
- onLongPress={onLongPress}
393
- style={{ flex: 1 }}
394
- accessibilityRole="button"
395
- accessibilityLabel={a11yLabel}
396
- accessibilityState={{ selected: isSelected }}
397
- >
398
- {inner}
399
- </TouchableOpacity>
400
- </Reanimated.View>
401
- );
402
- });
403
-
404
- const PhotoPickerView: React.FC<PhotoPickerViewProps> = ({
405
- photos,
406
- selectedIds,
407
- multiSelect,
408
- maxSelection,
409
- allowUpload,
410
- refreshing,
411
- uploading,
412
- isPickingDocument,
413
- uploadProgress,
414
- hasMore,
415
- loadingMore,
416
- reduceMotion,
417
- getThumbUrl,
418
- primaryColor,
419
- isOwner,
420
- onTogglePhoto,
421
- onPreviewPhoto,
422
- onUpload,
423
- onRefresh,
424
- onLoadMore,
425
- onCancel,
426
- onConfirm,
427
- t,
428
- }) => {
429
- const { width: windowWidth, height: windowHeight } = useWindowDimensions();
430
-
431
- // Layout: 3 columns phone portrait, 2 columns phone landscape,
432
- // 4 columns tablet (>= 600 width). Apple Photos-ish.
433
- const columns = useMemo(() => {
434
- if (windowWidth >= 600) return 4;
435
- // Landscape phone: width > height
436
- if (windowWidth > windowHeight) return 2;
437
- return 3;
438
- }, [windowWidth, windowHeight]);
439
-
440
- const GUTTER = 2;
441
- const cellSize = useMemo(() => {
442
- // (windowWidth - (columns - 1) * GUTTER) / columns, but
443
- // FlatList in 3-col layout means each row has 2 inter-cell gutters.
444
- return Math.floor((windowWidth - GUTTER * (columns - 1)) / columns);
445
- }, [windowWidth, columns]);
446
-
447
- // Map selectedIds → 1-based selection order for the badge. We freeze a
448
- // stable order at the time of selection: the order is the insertion
449
- // order of the Set (which JS preserves natively).
450
- const selectionOrder = useMemo(() => {
451
- const map = new Map<string, number>();
452
- let i = 1;
453
- for (const id of selectedIds) {
454
- map.set(id, i++);
455
- }
456
- return map;
457
- }, [selectedIds]);
458
-
459
- const hasAnySelection = selectedIds.size > 0;
460
-
461
- // Compact icon-only upload pill on narrow screens; full pill otherwise.
462
- const showUploadLabel = windowWidth >= 360;
463
-
464
- // The bottom sheet renders below the status bar already (its `maxHeight`
465
- // is capped by `SCREEN_HEIGHT - insets.top`), so the picker MUST NOT add
466
- // an additional safe-area inset to the header. Header layout:
467
- // • 28dp drag-handle hit area floats at the very top of the sheet
468
- // • 56dp app bar sits immediately below the handle
469
- // Total header zone = 28 + 56 = 84dp from sheet top.
470
- const HANDLE_ZONE = 28;
471
- const APP_BAR_HEIGHT = 56;
472
- const headerHeight = HANDLE_ZONE + APP_BAR_HEIGHT;
473
- const contentPaddingTop = headerHeight + 4;
474
-
475
- const isEmpty = photos.length === 0;
476
- const a11yColumnsAnnouncement = useRef<number>(columns);
477
-
478
- useEffect(() => {
479
- if (a11yColumnsAnnouncement.current !== columns) {
480
- a11yColumnsAnnouncement.current = columns;
481
- }
482
- }, [columns]);
483
-
484
- const handleCellPress = useCallback(
485
- (photo: FileMetadata) => {
486
- if (Platform.OS !== 'web') {
487
- void hapticImpact('light');
488
- }
489
- onTogglePhoto(photo);
490
- },
491
- [onTogglePhoto],
492
- );
493
-
494
- const handleCellLongPress = useCallback(
495
- (photo: FileMetadata) => {
496
- if (Platform.OS !== 'web') {
497
- void hapticSelection();
498
- }
499
- onPreviewPhoto(photo);
500
- },
501
- [onPreviewPhoto],
502
- );
503
-
504
- const handleConfirm = useCallback(() => {
505
- if (multiSelect) {
506
- if (selectedIds.size === 0) return;
507
- if (Platform.OS !== 'web') {
508
- void hapticNotification('success');
509
- }
510
- }
511
- onConfirm();
512
- }, [multiSelect, selectedIds.size, onConfirm]);
513
-
514
- // FlatList renderItem: each cell knows its enterIndex (for stagger).
515
- const renderItem = useCallback(
516
- ({ item, index }: { item: FileMetadata; index: number }) => {
517
- const isSelected = selectedIds.has(item.id);
518
- const selIndex = isSelected ? (selectionOrder.get(item.id) || 0) : 0;
519
- // Last column gets no right margin; last row no bottom margin
520
- // (FlatList handles row breaks via numColumns).
521
- const isLastInRow = (index + 1) % columns === 0;
522
- const a11yLabel = t(
523
- isSelected
524
- ? 'fileManagement.a11y.photoCellSelected'
525
- : 'fileManagement.a11y.photoCellUnselected',
526
- { name: item.filename || 'photo' },
527
- );
528
- return (
529
- <PhotoPickerCell
530
- photo={item}
531
- size={cellSize}
532
- marginRight={isLastInRow ? 0 : GUTTER}
533
- marginBottom={GUTTER}
534
- isSelected={isSelected}
535
- selectionIndex={selIndex}
536
- dim={multiSelect && hasAnySelection && !isSelected}
537
- primaryColor={primaryColor}
538
- thumbUrl={getThumbUrl(item, 'thumb')}
539
- enterIndex={index}
540
- reduceMotion={reduceMotion}
541
- onPress={() => handleCellPress(item)}
542
- onLongPress={() => handleCellLongPress(item)}
543
- a11yLabel={a11yLabel}
544
- />
545
- );
546
- },
547
- [
548
- selectedIds, selectionOrder, columns, cellSize, multiSelect, hasAnySelection,
549
- primaryColor, getThumbUrl, reduceMotion, handleCellPress, handleCellLongPress, t,
550
- ],
551
- );
552
-
553
- const keyExtractor = useCallback((item: FileMetadata) => item.id, []);
554
-
555
- const listFooter = useMemo(() => {
556
- if (!loadingMore) return null;
557
- return (
558
- <View style={{ paddingVertical: 16, alignItems: 'center' }}>
559
- <ActivityIndicator size="small" color="#FFFFFF" />
560
- </View>
561
- );
562
- }, [loadingMore]);
563
-
564
- const handleEndReached = useCallback(() => {
565
- if (loadingMore || !hasMore) return;
566
- onLoadMore();
567
- }, [loadingMore, hasMore, onLoadMore]);
568
-
569
- const confirmDisabled = multiSelect && selectedIds.size === 0;
570
- const confirmLabel = multiSelect
571
- ? t('fileManagement.doneWithCount', { count: selectedIds.size })
572
- : t('fileManagement.done');
573
-
574
- // The progress fill width. Guard against zero division.
575
- const progressFraction = uploadProgress && uploadProgress.total > 0
576
- ? Math.min(1, Math.max(0, uploadProgress.current / uploadProgress.total))
577
- : 0;
578
-
579
- return (
580
- <View style={photoPickerStyles.root}>
581
- {/* Photo grid (renders behind translucent header) */}
582
- {isEmpty ? (
583
- <View style={[photoPickerStyles.empty, { paddingTop: contentPaddingTop }]}>
584
- <View style={photoPickerStyles.emptyIconWrap}>
585
- <MaterialCommunityIcons name="image-outline" size={64} color="#FFFFFF" />
586
- </View>
587
- <Text style={[photoPickerStyles.emptyTitle, { color: '#FFFFFF' }]}>
588
- {t('fileManagement.photoPicker.emptyTitle')}
589
- </Text>
590
- <Text style={[photoPickerStyles.emptySubtitle, { color: '#FFFFFF' }]}>
591
- {t('fileManagement.photoPicker.emptySubtitle')}
592
- </Text>
593
- {isOwner && allowUpload && (
594
- <TouchableOpacity
595
- style={[photoPickerStyles.emptyCta, { backgroundColor: primaryColor }]}
596
- onPress={onUpload}
597
- disabled={uploading || isPickingDocument}
598
- accessibilityRole="button"
599
- accessibilityLabel={t('fileManagement.uploadPhoto')}
600
- accessibilityState={{ busy: uploading || isPickingDocument }}
601
- >
602
- {(uploading || isPickingDocument) ? (
603
- <ActivityIndicator size="small" color="#FFFFFF" />
604
- ) : (
605
- <>
606
- <Ionicons name="cloud-upload" size={18} color="#FFFFFF" />
607
- <Text style={photoPickerStyles.emptyCtaText}>
608
- {t('fileManagement.uploadPhoto')}
609
- </Text>
610
- </>
611
- )}
612
- </TouchableOpacity>
613
- )}
614
- </View>
615
- ) : (
616
- <FlatList
617
- key={`cols-${columns}`}
618
- data={photos}
619
- renderItem={renderItem}
620
- keyExtractor={keyExtractor}
621
- numColumns={columns}
622
- contentContainerStyle={[
623
- photoPickerStyles.gridContent,
624
- { paddingTop: contentPaddingTop },
625
- ]}
626
- style={photoPickerStyles.grid}
627
- showsVerticalScrollIndicator={false}
628
- refreshControl={
629
- <RefreshControl
630
- refreshing={refreshing}
631
- onRefresh={onRefresh}
632
- tintColor="#FFFFFF"
633
- colors={[primaryColor]}
634
- progressViewOffset={contentPaddingTop}
635
- />
636
- }
637
- onEndReached={handleEndReached}
638
- onEndReachedThreshold={0.4}
639
- ListFooterComponent={listFooter}
640
- removeClippedSubviews
641
- initialNumToRender={Math.max(12, columns * 6)}
642
- windowSize={9}
643
- />
644
- )}
645
-
646
- {/* Translucent black header. The bottom sheet already sits below
647
- the status bar, so we do NOT add `insets.top` here — that would
648
- double-pad. `paddingTop: HANDLE_ZONE` clears the 28dp drag
649
- handle floating at the top of the sheet. */}
650
- <View
651
- style={[
652
- photoPickerStyles.header,
653
- { paddingTop: HANDLE_ZONE, minHeight: headerHeight },
654
- ]}
655
- >
656
- <View style={photoPickerStyles.headerRow}>
657
- <View style={[photoPickerStyles.headerSide, photoPickerStyles.headerSideLeft]}>
658
- <TouchableOpacity
659
- onPress={onCancel}
660
- style={photoPickerStyles.headerCancel}
661
- accessibilityRole="button"
662
- accessibilityLabel={t('fileManagement.a11y.cancelPicker')}
663
- hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}
664
- >
665
- <Text style={photoPickerStyles.headerCancelText}>
666
- {t('fileManagement.cancel')}
667
- </Text>
668
- </TouchableOpacity>
669
- </View>
670
- <View pointerEvents="none">
671
- <Text style={photoPickerStyles.headerTitle} numberOfLines={1}>
672
- {t('fileManagement.choosePhoto')}
673
- </Text>
674
- </View>
675
- <View style={[photoPickerStyles.headerSide, photoPickerStyles.headerSideRight]}>
676
- {multiSelect ? (
677
- <TouchableOpacity
678
- onPress={handleConfirm}
679
- disabled={confirmDisabled}
680
- style={[
681
- photoPickerStyles.headerPrimaryPill,
682
- {
683
- backgroundColor: confirmDisabled
684
- ? 'rgba(255,255,255,0.18)'
685
- : primaryColor,
686
- opacity: confirmDisabled ? 0.6 : 1,
687
- },
688
- ]}
689
- accessibilityRole="button"
690
- accessibilityLabel={t('fileManagement.a11y.confirmSelection')}
691
- accessibilityState={{ disabled: confirmDisabled }}
692
- >
693
- <Text style={photoPickerStyles.headerPrimaryText}>
694
- {confirmLabel}
695
- </Text>
696
- </TouchableOpacity>
697
- ) : (
698
- isOwner && allowUpload && (
699
- <TouchableOpacity
700
- onPress={onUpload}
701
- disabled={uploading || isPickingDocument}
702
- style={[
703
- photoPickerStyles.headerPrimaryPill,
704
- !showUploadLabel && photoPickerStyles.headerPrimaryPillIconOnly,
705
- { backgroundColor: primaryColor },
706
- ]}
707
- accessibilityRole="button"
708
- accessibilityLabel={t('fileManagement.a11y.uploadFromDevice')}
709
- accessibilityState={{ busy: uploading || isPickingDocument }}
710
- >
711
- {(uploading || isPickingDocument) ? (
712
- <ActivityIndicator size="small" color="#FFFFFF" />
713
- ) : (
714
- <>
715
- <Ionicons name="cloud-upload" size={16} color="#FFFFFF" />
716
- {showUploadLabel && (
717
- <Text style={photoPickerStyles.headerPrimaryText}>
718
- {t('fileManagement.upload')}
719
- </Text>
720
- )}
721
- </>
722
- )}
723
- </TouchableOpacity>
724
- )
725
- )}
726
- </View>
727
- </View>
728
- {/* Subtle top progress bar during upload (non-blocking). */}
729
- {uploading && (
730
- <View style={photoPickerStyles.headerProgressBarTrack}>
731
- <View
732
- style={[
733
- photoPickerStyles.headerProgressBarFill,
734
- {
735
- width: `${Math.round(progressFraction * 100)}%`,
736
- backgroundColor: primaryColor,
737
- },
738
- ]}
739
- />
740
- </View>
741
- )}
742
- </View>
743
- </View>
744
- );
745
- };
746
-
747
97
  const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
748
98
  onClose,
749
99
  theme,
@@ -791,7 +141,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
791
141
  const [fileContent, setFileContent] = useState<string | null>(null);
792
142
  const [loadingFileContent, setLoadingFileContent] = useState(false);
793
143
  const [showFileDetailsInViewer, setShowFileDetailsInViewer] = useState(false);
794
- const [isPickingDocument, setIsPickingDocument] = useState(false);
795
144
  const [reduceMotion, setReduceMotion] = useState(false);
796
145
 
797
146
  // Detect reduce-motion preference once on mount + subscribe to changes.
@@ -835,8 +184,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
835
184
  const [searchQuery, setSearchQuery] = useState('');
836
185
  const [sortBy, setSortBy] = useState<'date' | 'size' | 'name' | 'type'>('date');
837
186
  const [sortOrder, setSortOrder] = useState<'asc' | 'desc'>('desc');
838
- const [pendingFiles, setPendingFiles] = useState<Array<{ file: UploadCandidate; preview?: string; size: number; name: string; type: string }>>([]);
839
- const [showUploadPreview, setShowUploadPreview] = useState(false);
840
187
  // Derived filtered and sorted files (avoid setState loops)
841
188
  const filteredFiles = useMemo(() => {
842
189
  let filteredByMode = files;
@@ -890,8 +237,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
890
237
  }, [files, searchQuery, viewMode, sortBy, sortOrder]);
891
238
  const [photoDimensions, setPhotoDimensions] = useState<{ [key: string]: { width: number, height: number } }>({});
892
239
  const [loadingDimensions, setLoadingDimensions] = useState(false);
893
- const uploadStartRef = useRef<number | null>(null);
894
- const MIN_BANNER_MS = 600;
895
240
  // Selection state
896
241
  const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set(initialSelectedIds));
897
242
  const [lastSelectedFileId, setLastSelectedFileId] = useState<string | null>(null);
@@ -1012,16 +357,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1012
357
  onClose?.();
1013
358
  }, [selectMode, multiSelect, selectedIds, files, onConfirmSelection, onClose, defaultVisibility, oxyServices, linkContext]);
1014
359
 
1015
- const endUpload = useCallback(() => {
1016
- const started = uploadStartRef.current;
1017
- const elapsed = started ? Date.now() - started : MIN_BANNER_MS;
1018
- const remaining = elapsed < MIN_BANNER_MS ? MIN_BANNER_MS - elapsed : 0;
1019
- setTimeout(() => {
1020
- useFileStore.getState().setUploading(false);
1021
- uploadStartRef.current = null;
1022
- }, remaining);
1023
- }, []);
1024
-
1025
360
  // Helper to safely request a thumbnail variant only for image mime types.
1026
361
  const getSafeDownloadUrlCallback = useCallback(
1027
362
  (file: FileMetadata, variant = 'thumb') => {
@@ -1038,8 +373,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1038
373
 
1039
374
  const targetUserId = userId || user?.id;
1040
375
 
1041
- const storeSetUploading = useFileStore(s => s.setUploading);
1042
- const storeSetUploadProgress = useFileStore(s => s.setUploadProgress);
1043
376
  const storeSetDeleting = useFileStore(s => s.setDeleting);
1044
377
 
1045
378
  const loadFiles = useCallback(async (mode: 'initial' | 'refresh' | 'silent' | 'more' = 'initial') => {
@@ -1097,6 +430,31 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1097
430
  }
1098
431
  }, [targetUserId, oxyServices, paging]);
1099
432
 
433
+ // Self-contained document-picking + upload-preview state and handlers.
434
+ const {
435
+ isPickingDocument,
436
+ pendingFiles,
437
+ showUploadPreview,
438
+ handleFileUpload,
439
+ handleConfirmUpload,
440
+ handleCancelUpload,
441
+ removePendingFile,
442
+ } = useFileUploadState({
443
+ targetUserId,
444
+ uploadFileMutation,
445
+ defaultVisibility,
446
+ selectMode,
447
+ multiSelect,
448
+ afterSelect,
449
+ onSelect,
450
+ goBack,
451
+ onClose,
452
+ selectedIds,
453
+ setSelectedIds,
454
+ loadFiles,
455
+ t,
456
+ });
457
+
1100
458
  // Keep a ref to avoid stale closure when calculating next offset
1101
459
  const prevPagingRef = useRef(paging);
1102
460
  useEffect(() => { prevPagingRef.current = paging; }, [paging]);
@@ -1175,404 +533,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1175
533
  return rows;
1176
534
  }, []);
1177
535
 
1178
- const processFileUploads = async (selectedFiles: UploadCandidate[]): Promise<FileMetadata[]> => {
1179
- if (selectedFiles.length === 0) return [];
1180
- if (!targetUserId) return []; // Guard clause to ensure userId is defined
1181
- const uploadedFiles: FileMetadata[] = [];
1182
- try {
1183
- storeSetUploadProgress({ current: 0, total: selectedFiles.length });
1184
- const maxSize = 50 * 1024 * 1024; // 50MB
1185
- const oversizedFiles = selectedFiles.filter(file => candidateSize(file) > maxSize);
1186
- if (oversizedFiles.length > 0) {
1187
- const fileList = oversizedFiles.map(f => candidateName(f, 'file')).join(', ');
1188
- toast.error(t('fileManagement.toasts.filesTooLarge', { files: fileList }));
1189
- return [];
1190
- }
1191
- let successCount = 0;
1192
- let failureCount = 0;
1193
- const errors: string[] = [];
1194
- for (let i = 0; i < selectedFiles.length; i++) {
1195
- storeSetUploadProgress({ current: i + 1, total: selectedFiles.length });
1196
- const raw = selectedFiles[i];
1197
- const fileName = candidateName(raw, `file-${i + 1}`);
1198
- const fileSize = candidateSize(raw);
1199
- const fileType = candidateType(raw);
1200
- const optimisticId = `temp-${Date.now()}-${i}-${Math.random().toString(36).substr(2, 9)}`; // Unique ID per file
1201
-
1202
- try {
1203
- // Validate file before upload
1204
- if (!raw || !fileName || fileSize <= 0) {
1205
- const errorMsg = `Invalid file: ${fileName}`;
1206
- if (__DEV__) {
1207
- console.error('Upload validation failed:', { file: raw, error: errorMsg });
1208
- }
1209
- failureCount++;
1210
- errors.push(`${fileName}: Invalid file (missing name or size)`);
1211
- continue;
1212
- }
1213
-
1214
- const optimisticFile: FileMetadata = {
1215
- id: optimisticId,
1216
- filename: fileName,
1217
- contentType: fileType,
1218
- length: fileSize,
1219
- chunkSize: 0,
1220
- uploadDate: new Date().toISOString(),
1221
- metadata: { uploading: true },
1222
- variants: [],
1223
- };
1224
- useFileStore.getState().addFile(optimisticFile, { prepend: true });
1225
-
1226
- // Use the mutation hook with authentication handling
1227
- const result = await uploadFileMutation.mutateAsync({
1228
- file: raw as AssetUploadInput,
1229
- visibility: defaultVisibility,
1230
- });
1231
-
1232
- // Attempt to refresh file list incrementally – fetch single file metadata if API allows
1233
- const f = result?.file ?? result?.files?.[0];
1234
- if (f) {
1235
- const merged: FileMetadata = {
1236
- id: f.id,
1237
- filename: f.originalName || f.sha256 || fileName,
1238
- contentType: f.mime || fileType,
1239
- length: f.size || fileSize,
1240
- chunkSize: 0,
1241
- uploadDate: f.createdAt || new Date().toISOString(),
1242
- metadata: f.metadata || {},
1243
- variants: f.variants || [],
1244
- };
1245
- // Remove optimistic then add real
1246
- useFileStore.getState().removeFile(optimisticId);
1247
- useFileStore.getState().addFile(merged, { prepend: true });
1248
- uploadedFiles.push(merged);
1249
- successCount++;
1250
- } else {
1251
- // Fallback: will reconcile on later list refresh
1252
- useFileStore.getState().updateFile(optimisticId, { metadata: { uploading: false } as Partial<FileMetadata>['metadata'] });
1253
- if (__DEV__) {
1254
- console.warn('Upload completed but no file data returned:', { fileName, result });
1255
- }
1256
- // Still count as success if upload didn't throw
1257
- successCount++;
1258
- }
1259
- } catch (error: unknown) {
1260
- failureCount++;
1261
- const errorMessage = getErrorMessage(error) || 'Upload failed';
1262
- const fullError = `${fileName}: ${errorMessage}`;
1263
- errors.push(fullError);
1264
- if (__DEV__) {
1265
- console.error('File upload failed:', {
1266
- fileName,
1267
- fileSize,
1268
- fileType,
1269
- error: errorMessage,
1270
- stack: (error instanceof Error) ? error.stack : undefined
1271
- });
1272
- }
1273
-
1274
- // Remove optimistic file on error (use the same optimisticId from above)
1275
- useFileStore.getState().removeFile(optimisticId);
1276
- }
1277
- }
1278
-
1279
- // Show success/error messages
1280
- if (successCount > 0) {
1281
- toast.success(t('fileManagement.toasts.uploadSuccess', { count: successCount }));
1282
- }
1283
- if (failureCount > 0) {
1284
- // Show detailed error message with first few errors
1285
- const errorDetails = errors.length > 0
1286
- ? `\n${errors.slice(0, 3).join('\n')}${errors.length > 3 ? `\n...and ${errors.length - 3} more` : ''}`
1287
- : '';
1288
- toast.error(`${t('fileManagement.toasts.uploadFailed', { count: failureCount })}${errorDetails}`);
1289
- }
1290
- // Silent background refresh to ensure metadata/variants updated
1291
- setTimeout(() => { loadFiles('silent'); }, 1200);
1292
- } catch (error: unknown) {
1293
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
1294
- } finally {
1295
- storeSetUploadProgress(null);
1296
- }
1297
- return uploadedFiles;
1298
- };
1299
-
1300
- const handleFileSelection = useCallback(async (selectedFiles: UploadCandidate[]) => {
1301
- const MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
1302
- const processedFiles: Array<{ file: UploadCandidate; preview?: string; size: number; name: string; type: string }> = [];
1303
-
1304
- for (const file of selectedFiles) {
1305
- // Validate file has required properties
1306
- if (!file) {
1307
- if (__DEV__) {
1308
- console.error('Invalid file: file is null or undefined');
1309
- }
1310
- toast.error(t('fileManagement.toasts.invalidFileMissing'));
1311
- continue;
1312
- }
1313
-
1314
- const name = candidateName(file, '');
1315
- if (!name) {
1316
- if (__DEV__) {
1317
- console.error('Invalid file: missing or invalid name property', file);
1318
- }
1319
- toast.error(t('fileManagement.toasts.invalidFileName'));
1320
- continue;
1321
- }
1322
-
1323
- const size = (file as { size?: number }).size;
1324
- if (size === undefined || size === null || Number.isNaN(size)) {
1325
- if (__DEV__) {
1326
- console.error('Invalid file: missing or invalid size property', file);
1327
- }
1328
- toast.error(t('fileManagement.toasts.invalidFileSize', { name }));
1329
- continue;
1330
- }
1331
-
1332
- if (size <= 0) {
1333
- if (__DEV__) {
1334
- console.error('Invalid file: file size is zero or negative', file);
1335
- }
1336
- toast.error(t('fileManagement.toasts.fileEmpty', { name }));
1337
- continue;
1338
- }
1339
-
1340
- // Validate file size
1341
- if (size > MAX_FILE_SIZE) {
1342
- toast.error(t('fileManagement.toasts.fileTooLarge', { name, maxSize: formatFileSize(MAX_FILE_SIZE) }));
1343
- continue;
1344
- }
1345
-
1346
- const fileType = candidateType(file);
1347
-
1348
- // Generate preview for images - unified approach
1349
- let preview: string | undefined;
1350
- if (fileType.startsWith('image/')) {
1351
- // Try to use file URI from expo-document-picker if available (works on all platforms)
1352
- const fileUri = candidateUri(file);
1353
- if (fileUri &&
1354
- (fileUri.startsWith('file://') || fileUri.startsWith('content://') ||
1355
- fileUri.startsWith('http://') || fileUri.startsWith('https://') ||
1356
- fileUri.startsWith('blob:'))) {
1357
- preview = fileUri;
1358
- } else {
1359
- // Fallback: create blob URL if possible (works on web only)
1360
- try {
1361
- if ((typeof File !== 'undefined' && file instanceof File) ||
1362
- (typeof Blob !== 'undefined' && file instanceof Blob)) {
1363
- preview = URL.createObjectURL(file as Blob);
1364
- }
1365
- } catch (error: unknown) {
1366
- if (__DEV__) {
1367
- console.warn('Failed to create preview URL:', error);
1368
- }
1369
- // Preview is optional, continue without it
1370
- }
1371
- }
1372
- }
1373
-
1374
- processedFiles.push({
1375
- file,
1376
- preview,
1377
- size,
1378
- name,
1379
- type: fileType
1380
- });
1381
- }
1382
-
1383
- if (processedFiles.length === 0) {
1384
- toast.error(t('fileManagement.toasts.noValidFiles'));
1385
- return;
1386
- }
1387
-
1388
- // Show preview modal for user to review files before upload
1389
- setPendingFiles(processedFiles);
1390
- setShowUploadPreview(true);
1391
- }, [t]);
1392
-
1393
- const handleConfirmUpload = async () => {
1394
- if (pendingFiles.length === 0) return;
1395
-
1396
- setShowUploadPreview(false);
1397
- uploadStartRef.current = Date.now();
1398
- storeSetUploading(true);
1399
- storeSetUploadProgress(null);
1400
-
1401
- try {
1402
- const filesToUpload = pendingFiles.map(pf => pf.file);
1403
- storeSetUploadProgress({ current: 0, total: filesToUpload.length });
1404
- const uploadedFiles = await processFileUploads(filesToUpload);
1405
-
1406
- // Cleanup preview URLs
1407
- pendingFiles.forEach(pf => {
1408
- if (pf.preview) {
1409
- URL.revokeObjectURL(pf.preview);
1410
- }
1411
- });
1412
- setPendingFiles([]);
1413
-
1414
- // If in selectMode, automatically select the uploaded file(s)
1415
- if (selectMode && uploadedFiles.length > 0) {
1416
- // Wait a bit for the file store to update and ensure file is available
1417
- setTimeout(() => {
1418
- const fileToSelect = uploadedFiles[0];
1419
- if (!multiSelect && fileToSelect) {
1420
- // Single select mode - directly call onSelect callback
1421
- onSelect?.(fileToSelect);
1422
- if (afterSelect === 'back') {
1423
- goBack?.();
1424
- } else if (afterSelect === 'close') {
1425
- onClose?.();
1426
- }
1427
- } else if (multiSelect) {
1428
- // Multi-select mode - add all uploaded files to selection
1429
- uploadedFiles.forEach(file => {
1430
- if (!selectedIds.has(file.id)) {
1431
- setSelectedIds(prev => new Set(prev).add(file.id));
1432
- }
1433
- });
1434
- }
1435
- }, 500);
1436
- }
1437
-
1438
- endUpload();
1439
- } catch (error: unknown) {
1440
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.uploadError'));
1441
- endUpload();
1442
- }
1443
- };
1444
-
1445
- const handleCancelUpload = () => {
1446
- // Cleanup preview URLs
1447
- pendingFiles.forEach(pf => {
1448
- if (pf.preview) {
1449
- URL.revokeObjectURL(pf.preview);
1450
- }
1451
- });
1452
- setPendingFiles([]);
1453
- setShowUploadPreview(false);
1454
- };
1455
-
1456
- const removePendingFile = (index: number) => {
1457
- const file = pendingFiles[index];
1458
- if (file.preview) {
1459
- URL.revokeObjectURL(file.preview);
1460
- }
1461
- const updated = pendingFiles.filter((_, i) => i !== index);
1462
- setPendingFiles(updated);
1463
- if (updated.length === 0) {
1464
- setShowUploadPreview(false);
1465
- }
1466
- };
1467
-
1468
- /**
1469
- * Handle file upload - opens document picker and processes selected files
1470
- * Expo 54 compatible - works on web, iOS, and Android
1471
- */
1472
- const handleFileUpload = async () => {
1473
- // Prevent concurrent document picker calls
1474
- if (isPickingDocument) {
1475
- toast.error(t('fileManagement.toasts.waitForSelection'));
1476
- return;
1477
- }
1478
-
1479
- try {
1480
- setIsPickingDocument(true);
1481
-
1482
- // Lazy load expo-document-picker
1483
- const picker = await loadDocumentPicker();
1484
-
1485
- // Use expo-document-picker (works on all platforms including web)
1486
- // On web, it uses the native file input and provides File objects directly
1487
- const result = await picker.getDocumentAsync({
1488
- type: '*/*',
1489
- multiple: true,
1490
- copyToCacheDirectory: true,
1491
- });
1492
-
1493
- if (result.canceled) {
1494
- setIsPickingDocument(false);
1495
- return;
1496
- }
1497
-
1498
- if (!result.assets || result.assets.length === 0) {
1499
- setIsPickingDocument(false);
1500
- toast.error(t('fileManagement.toasts.noFilesSelected'));
1501
- return;
1502
- }
1503
-
1504
- // Convert expo document picker results to File-like objects
1505
- // According to Expo 54 docs, expo-document-picker returns assets with:
1506
- // - uri: file URI (file://, content://, or blob URL)
1507
- // - name: file name
1508
- // - size: file size in bytes
1509
- // - mimeType: MIME type of the file
1510
- // - file: (optional) native File object (usually only on web)
1511
- const files: UploadCandidate[] = [];
1512
- const errors: string[] = [];
1513
-
1514
- // Process files in parallel for better performance
1515
- // This allows multiple files to be converted simultaneously
1516
- const conversionPromises = result.assets.map((doc, index) =>
1517
- convertDocumentPickerAssetToFile(doc, index)
1518
- .then((file): UploadCandidate | null => {
1519
- if (file) {
1520
- // Validate file has required properties before adding
1521
- if (!file.name || (file as { size?: number }).size === undefined) {
1522
- errors.push(`File "${doc.name || 'file'}" is invalid: missing required properties`);
1523
- return null;
1524
- }
1525
- return file;
1526
- }
1527
- return null;
1528
- })
1529
- .catch((error: unknown) => {
1530
- errors.push(`File "${doc.name || 'file'}": ${getErrorMessage(error) || 'Failed to process'}`);
1531
- return null;
1532
- })
1533
- );
1534
-
1535
- const convertedFiles = await Promise.all(conversionPromises);
1536
-
1537
- // Filter out null values
1538
- for (const file of convertedFiles) {
1539
- if (file) {
1540
- files.push(file);
1541
- }
1542
- }
1543
-
1544
- // Show errors if any
1545
- if (errors.length > 0) {
1546
- const errorMessage = errors.slice(0, 3).join('\n') + (errors.length > 3 ? `\n...and ${errors.length - 3} more` : '');
1547
- toast.error(t('fileManagement.toasts.loadSomeFailed', { errors: errorMessage }));
1548
- }
1549
-
1550
- // Process successfully converted files
1551
- if (files.length > 0) {
1552
- await handleFileSelection(files);
1553
- } else {
1554
- // Files were selected but none could be converted
1555
- toast.error(t('fileManagement.toasts.noFilesProcessed'));
1556
- }
1557
- } catch (error: unknown) {
1558
- if (__DEV__) {
1559
- console.error('File upload error:', error);
1560
- }
1561
- if (getErrorMessage(error)?.includes('expo-document-picker') || getErrorMessage(error)?.includes('Different document picking in progress')) {
1562
- if (getErrorMessage(error)?.includes('Different document picking in progress')) {
1563
- toast.error(t('fileManagement.toasts.waitForSelection'));
1564
- } else {
1565
- toast.error(t('fileManagement.toasts.filePickerNotAvailable'));
1566
- }
1567
- } else {
1568
- toast.error(getErrorMessage(error) || t('fileManagement.toasts.selectFilesFailed'));
1569
- }
1570
- } finally {
1571
- // Always reset the picking state, even if there was an error
1572
- setIsPickingDocument(false);
1573
- }
1574
- };
1575
-
1576
536
  const confirmFileDelete = useCallback((fileId: string, filename: string) => {
1577
537
  setPendingDeleteFile({ id: fileId, name: filename });
1578
538
  fileDeleteDialog.open();
@@ -2039,8 +999,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2039
999
  };
2040
1000
 
2041
1001
  // SettingsListItem-based file items (for 'all' view)
2042
- // biome-ignore lint/suspicious/noExplicitAny: file items have dynamic props
2043
- const groupedFileItems: any[] = useMemo(() => {
1002
+ const groupedFileItems: FileListItem[] = useMemo(() => {
2044
1003
  // filteredFiles is already sorted, so just use it directly
2045
1004
  const sortedFiles = filteredFiles;
2046
1005
 
@@ -2699,7 +1658,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2699
1658
  <Header
2700
1659
  title={selectMode ? (multiSelect ? (maxSelection ? t('fileManagement.selectedWithMax', { count: selectedIds.size, max: maxSelection }) : t('fileManagement.selected', { count: selectedIds.size })) : t('fileManagement.selectFile')) : (viewMode === 'photos' ? t('fileManagement.photos') : t('fileManagement.title'))}
2701
1660
  subtitle={selectMode ? (multiSelect ? t('fileManagement.available', { count: filteredFiles.length }) : t('fileManagement.tapToSelect')) : (filteredFiles.length === 1 ? t('fileManagement.itemCount', { count: filteredFiles.length }) : t('fileManagement.itemCount_plural', { count: filteredFiles.length }))}
2702
- rightActions={selectMode && multiSelect ? [
1661
+ actions={selectMode && multiSelect ? [
2703
1662
  {
2704
1663
  key: 'clear',
2705
1664
  text: t('fileManagement.clear'),
@@ -2946,65 +1905,20 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2946
1905
  {viewMode === 'photos' ? (
2947
1906
  renderPhotoGrid()
2948
1907
  ) : (
2949
- <ScrollView
2950
- ref={scrollViewRef}
2951
- style={fileManagementStyles.scrollView}
2952
- contentContainerStyle={fileManagementStyles.scrollContainer}
2953
- refreshControl={
2954
- <RefreshControl
2955
- refreshing={refreshing}
2956
- onRefresh={() => loadFiles('refresh')}
2957
- tintColor={colors.primary}
2958
- />
2959
- }
2960
- onScroll={({ nativeEvent }) => {
2961
- const { layoutMeasurement, contentOffset, contentSize } = nativeEvent;
2962
- const distanceFromBottom = contentSize.height - (contentOffset.y + layoutMeasurement.height);
2963
- if (distanceFromBottom < 200 && !paging.loadingMore && paging.hasMore) {
2964
- loadFiles('more');
2965
- }
2966
- }}
2967
- scrollEventThrottle={250}
2968
- >
2969
- {filteredFiles.length === 0 && searchQuery.length > 0 ? (
2970
- <View style={fileManagementStyles.emptyState}>
2971
- <Ionicons name="search" size={64} color={colors.textTertiary} />
2972
- <Text style={[fileManagementStyles.emptyStateTitle, { color: colors.text }]}>{t('fileManagement.noResults.title')}</Text>
2973
- <Text style={[fileManagementStyles.emptyStateDescription, { color: colors.textSecondary }]}>
2974
- {t('fileManagement.noResults.description', { query: searchQuery })}
2975
- </Text>
2976
- <TouchableOpacity
2977
- style={[fileManagementStyles.emptyStateButton, { backgroundColor: colors.primary }]}
2978
- onPress={() => setSearchQuery('')}
2979
- >
2980
- <Ionicons name="refresh" size={20} color="#FFFFFF" />
2981
- <Text style={fileManagementStyles.emptyStateButtonText}>{t('fileManagement.clearSearch')}</Text>
2982
- </TouchableOpacity>
2983
- </View>
2984
- ) : filteredFiles.length === 0 ? renderEmptyState() : (
2985
- <>
2986
- <SettingsListGroup>
2987
- {groupedFileItems.map(item => (
2988
- <SettingsListItem
2989
- key={item.id}
2990
- icon={item.icon}
2991
- title={item.title}
2992
- description={item.description}
2993
- onPress={item.onPress}
2994
- showChevron={false}
2995
- rightElement={item.rightElement}
2996
- />
2997
- ))}
2998
- </SettingsListGroup>
2999
- {paging.loadingMore && (
3000
- <View style={fileManagementStyles.loadingMoreBar}>
3001
- <ActivityIndicator size="small" color={colors.primary} />
3002
- <Text style={[fileManagementStyles.loadingMoreText, { color: colors.text }]}>{t('fileManagement.loadingMore')}</Text>
3003
- </View>
3004
- )}
3005
- </>
3006
- )}
3007
- </ScrollView>
1908
+ <FileListSection
1909
+ scrollViewRef={scrollViewRef}
1910
+ filteredFiles={filteredFiles}
1911
+ searchQuery={searchQuery}
1912
+ items={groupedFileItems}
1913
+ paging={paging}
1914
+ refreshing={refreshing}
1915
+ colors={colors}
1916
+ t={t}
1917
+ onRefresh={() => loadFiles('refresh')}
1918
+ onLoadMore={() => loadFiles('more')}
1919
+ onClearSearch={() => setSearchQuery('')}
1920
+ renderEmptyState={renderEmptyState}
1921
+ />
3008
1922
  )}
3009
1923
 
3010
1924
  {!selectMode && (
@@ -3019,30 +1933,12 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
3019
1933
 
3020
1934
  {/* Uploading banner overlay with progress */}
3021
1935
  {!selectMode && uploading && (
3022
- <View style={[fileManagementStyles.uploadBannerContainer, { pointerEvents: 'none' }]}>
3023
- <View style={[fileManagementStyles.uploadBanner, { backgroundColor: bloomTheme.isDark ? '#222831EE' : '#FFFFFFEE', borderColor: colors.border }]}>
3024
- <Ionicons name="cloud-upload" size={18} color={colors.primary} />
3025
- <View style={fileManagementStyles.uploadBannerContent}>
3026
- <Text style={[fileManagementStyles.uploadBannerText, { color: colors.text }]}>
3027
- {t('fileManagement.uploading')}{uploadProgress ? ` ${uploadProgress.current}/${uploadProgress.total}` : '...'}
3028
- </Text>
3029
- {uploadProgress && uploadProgress.total > 0 && (
3030
- <View style={[fileManagementStyles.uploadProgressBarContainer, { backgroundColor: bloomTheme.isDark ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.1)' }]}>
3031
- <View
3032
- style={[
3033
- fileManagementStyles.uploadProgressBar,
3034
- {
3035
- width: `${(uploadProgress.current / uploadProgress.total) * 100}%`,
3036
- backgroundColor: colors.primary
3037
- }
3038
- ]}
3039
- />
3040
- </View>
3041
- )}
3042
- </View>
3043
- <ActivityIndicator size="small" color={colors.primary} />
3044
- </View>
3045
- </View>
1936
+ <UploadBar
1937
+ uploadProgress={uploadProgress}
1938
+ isDark={bloomTheme.isDark}
1939
+ colors={colors}
1940
+ t={t}
1941
+ />
3046
1942
  )}
3047
1943
 
3048
1944
  {/* Selection bar removed; actions are now in header */}