@oxyhq/services 19.0.0 → 19.1.0

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 (915) 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/paymentStyles.js +13 -13
  43. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
  44. package/lib/commonjs/ui/context/OxyContext.js +129 -260
  45. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  46. package/lib/commonjs/ui/context/oxyContextHelpers.js +64 -0
  47. package/lib/commonjs/ui/context/oxyContextHelpers.js.map +1 -0
  48. package/lib/commonjs/ui/{components/TextField/Adornment/types.js → context/oxyContextTypes.js} +1 -1
  49. package/lib/commonjs/ui/context/oxyContextTypes.js.map +1 -0
  50. package/lib/commonjs/ui/context/useOxyAccountGraph.js +91 -0
  51. package/lib/commonjs/ui/context/useOxyAccountGraph.js.map +1 -0
  52. package/lib/commonjs/ui/hooks/queryClient.js +9 -18
  53. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  54. package/lib/commonjs/ui/hooks/useAuth.js +7 -5
  55. package/lib/commonjs/ui/hooks/useAuth.js.map +1 -1
  56. package/lib/commonjs/ui/hooks/useSessionManagement.js +2 -0
  57. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  58. package/lib/commonjs/ui/index.js +10 -17
  59. package/lib/commonjs/ui/index.js.map +1 -1
  60. package/lib/commonjs/ui/navigation/accountDialogManager.js +5 -44
  61. package/lib/commonjs/ui/navigation/accountDialogManager.js.map +1 -1
  62. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +9 -8
  63. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +2 -3
  65. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/EditProfileScreen.js +8 -19
  67. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/FAQScreen.js +8 -8
  69. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/FeedbackScreen.js +0 -1
  71. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/FileManagementScreen.js +59 -1105
  73. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/HistoryViewScreen.js +9 -8
  75. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +0 -1
  77. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +5 -4
  79. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/ManageAccountScreen.js +9 -49
  81. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +6 -9
  83. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +247 -224
  85. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +21 -20
  87. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/ProfileScreen.js +4 -4
  89. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +12 -11
  91. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +3 -2
  93. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  94. package/lib/commonjs/ui/screens/UserListScreen.js +3 -3
  95. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +7 -8
  97. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +114 -0
  99. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -0
  100. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +512 -0
  101. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -0
  102. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +59 -0
  103. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -0
  104. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +475 -0
  105. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -0
  106. package/lib/commonjs/ui/screens/fileManagement/shared.js +67 -0
  107. package/lib/commonjs/ui/screens/fileManagement/shared.js.map +1 -0
  108. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +3 -2
  109. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  110. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +4 -7
  111. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  112. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +3 -3
  113. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  114. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +3 -2
  115. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  116. package/lib/commonjs/ui/server.js +4 -5
  117. package/lib/commonjs/ui/server.js.map +1 -1
  118. package/lib/commonjs/ui/session/createSessionClient.js +2 -2
  119. package/lib/commonjs/ui/utils/crossOriginRestore.js +109 -0
  120. package/lib/commonjs/ui/utils/crossOriginRestore.js.map +1 -0
  121. package/lib/commonjs/ui/utils/deviceCredential.js +23 -0
  122. package/lib/commonjs/ui/utils/deviceCredential.js.map +1 -0
  123. package/lib/commonjs/ui/utils/oauthReturn.js +82 -0
  124. package/lib/commonjs/ui/utils/oauthReturn.js.map +1 -0
  125. package/lib/commonjs/ui/utils/storageHelpers.js +1 -2
  126. package/lib/commonjs/ui/utils/storageHelpers.js.map +1 -1
  127. package/lib/module/assets/assets/icons/OxyServices.tsx +5 -12
  128. package/lib/module/assets/icons/OxyServices.js +7 -7
  129. package/lib/module/assets/icons/OxyServices.js.map +1 -1
  130. package/lib/module/index.js +10 -9
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/ui/boot/runProviderColdBoot.js +116 -0
  133. package/lib/module/ui/boot/runProviderColdBoot.js.map +1 -0
  134. package/lib/module/ui/client.js +3 -4
  135. package/lib/module/ui/client.js.map +1 -1
  136. package/lib/module/ui/components/FollowButton.js +28 -92
  137. package/lib/module/ui/components/FollowButton.js.map +1 -1
  138. package/lib/module/ui/components/Header.js +127 -241
  139. package/lib/module/ui/components/Header.js.map +1 -1
  140. package/lib/module/ui/components/OxyAccountDialog.js +22 -18
  141. package/lib/module/ui/components/OxyAccountDialog.js.map +1 -1
  142. package/lib/module/ui/components/OxyConsentScreen.js +4 -5
  143. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  144. package/lib/module/ui/components/OxyOAuthCallback.js +41 -0
  145. package/lib/module/ui/components/OxyOAuthCallback.js.map +1 -0
  146. package/lib/module/ui/components/OxyPayButton.js +21 -71
  147. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  148. package/lib/module/ui/components/OxyProvider.js +3 -3
  149. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  150. package/lib/module/ui/components/OxySignInButton.js +34 -139
  151. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  152. package/lib/module/ui/components/ProfileButton.js +5 -3
  153. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  154. package/lib/module/ui/components/ProfileSummaryCard.js +95 -0
  155. package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -0
  156. package/lib/module/ui/components/RequireOxyAuth.js +7 -9
  157. package/lib/module/ui/components/RequireOxyAuth.js.map +1 -1
  158. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +9 -9
  159. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  160. package/lib/module/ui/components/fileManagement/FileViewer.js +20 -23
  161. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  162. package/lib/module/ui/components/fileManagement/UploadPreview.js +6 -6
  163. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  164. package/lib/module/ui/components/modals/DeleteAccountModal.js +14 -8
  165. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  166. package/lib/module/ui/components/payment/PaymentDetailsStep.js +54 -54
  167. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  168. package/lib/module/ui/components/payment/paymentStyles.js +13 -13
  169. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
  170. package/lib/module/ui/context/OxyContext.js +128 -259
  171. package/lib/module/ui/context/OxyContext.js.map +1 -1
  172. package/lib/module/ui/context/oxyContextHelpers.js +57 -0
  173. package/lib/module/ui/context/oxyContextHelpers.js.map +1 -0
  174. package/lib/module/ui/context/oxyContextTypes.js +4 -0
  175. package/lib/module/ui/context/oxyContextTypes.js.map +1 -0
  176. package/lib/module/ui/context/useOxyAccountGraph.js +87 -0
  177. package/lib/module/ui/context/useOxyAccountGraph.js.map +1 -0
  178. package/lib/module/ui/hooks/queryClient.js +8 -17
  179. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  180. package/lib/module/ui/hooks/useAuth.js +7 -5
  181. package/lib/module/ui/hooks/useAuth.js.map +1 -1
  182. package/lib/module/ui/hooks/useSessionManagement.js +2 -0
  183. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  184. package/lib/module/ui/index.js +2 -3
  185. package/lib/module/ui/index.js.map +1 -1
  186. package/lib/module/ui/navigation/accountDialogManager.js +4 -41
  187. package/lib/module/ui/navigation/accountDialogManager.js.map +1 -1
  188. package/lib/module/ui/screens/ConnectedAppsScreen.js +8 -7
  189. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  190. package/lib/module/ui/screens/EditProfileFieldScreen.js +2 -3
  191. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  192. package/lib/module/ui/screens/EditProfileScreen.js +7 -18
  193. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  194. package/lib/module/ui/screens/FAQScreen.js +8 -8
  195. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  196. package/lib/module/ui/screens/FeedbackScreen.js +0 -1
  197. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  198. package/lib/module/ui/screens/FileManagementScreen.js +53 -1098
  199. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  200. package/lib/module/ui/screens/HistoryViewScreen.js +9 -8
  201. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  202. package/lib/module/ui/screens/LanguageSelectorScreen.js +0 -1
  203. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  204. package/lib/module/ui/screens/LegalDocumentsScreen.js +5 -4
  205. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  206. package/lib/module/ui/screens/ManageAccountScreen.js +11 -51
  207. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  208. package/lib/module/ui/screens/PaymentGatewayScreen.js +4 -7
  209. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  210. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +247 -224
  211. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  212. package/lib/module/ui/screens/PrivacySettingsScreen.js +19 -18
  213. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  214. package/lib/module/ui/screens/ProfileScreen.js +3 -3
  215. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  216. package/lib/module/ui/screens/SavesCollectionsScreen.js +12 -11
  217. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  218. package/lib/module/ui/screens/SearchSettingsScreen.js +3 -2
  219. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  220. package/lib/module/ui/screens/UserListScreen.js +2 -2
  221. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  222. package/lib/module/ui/screens/WelcomeNewUserScreen.js +6 -6
  223. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  224. package/lib/module/ui/screens/fileManagement/FileListSection.js +110 -0
  225. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -0
  226. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +509 -0
  227. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -0
  228. package/lib/module/ui/screens/fileManagement/UploadBar.js +55 -0
  229. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -0
  230. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +471 -0
  231. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -0
  232. package/lib/module/ui/screens/fileManagement/shared.js +58 -0
  233. package/lib/module/ui/screens/fileManagement/shared.js.map +1 -0
  234. package/lib/module/ui/screens/trust/TrustCenterScreen.js +3 -2
  235. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  236. package/lib/module/ui/screens/trust/TrustFAQScreen.js +4 -7
  237. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  238. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +2 -2
  239. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  240. package/lib/module/ui/screens/trust/TrustRulesScreen.js +3 -2
  241. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  242. package/lib/module/ui/server.js +2 -3
  243. package/lib/module/ui/server.js.map +1 -1
  244. package/lib/module/ui/session/createSessionClient.js +2 -2
  245. package/lib/module/ui/utils/crossOriginRestore.js +101 -0
  246. package/lib/module/ui/utils/crossOriginRestore.js.map +1 -0
  247. package/lib/module/ui/utils/deviceCredential.js +18 -0
  248. package/lib/module/ui/utils/deviceCredential.js.map +1 -0
  249. package/lib/module/ui/utils/oauthReturn.js +78 -0
  250. package/lib/module/ui/utils/oauthReturn.js.map +1 -0
  251. package/lib/module/ui/utils/storageHelpers.js +1 -2
  252. package/lib/module/ui/utils/storageHelpers.js.map +1 -1
  253. package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts +0 -5
  254. package/lib/typescript/commonjs/assets/icons/OxyServices.d.ts.map +1 -1
  255. package/lib/typescript/commonjs/index.d.ts +11 -6
  256. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts +29 -0
  258. package/lib/typescript/commonjs/ui/boot/runProviderColdBoot.d.ts.map +1 -0
  259. package/lib/typescript/commonjs/ui/client.d.ts +3 -4
  260. package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  262. package/lib/typescript/commonjs/ui/components/Header.d.ts +16 -21
  263. package/lib/typescript/commonjs/ui/components/Header.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts +3 -7
  265. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/components/OxyOAuthCallback.d.ts +11 -0
  267. package/lib/typescript/commonjs/ui/components/OxyOAuthCallback.d.ts.map +1 -0
  268. package/lib/typescript/commonjs/ui/components/OxyPayButton.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +0 -13
  270. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  272. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts +33 -0
  273. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -0
  274. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +6 -10
  278. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +2 -185
  280. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/context/oxyContextHelpers.d.ts +7 -0
  282. package/lib/typescript/commonjs/ui/context/oxyContextHelpers.d.ts.map +1 -0
  283. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts +123 -0
  284. package/lib/typescript/commonjs/ui/context/oxyContextTypes.d.ts.map +1 -0
  285. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts +26 -0
  286. package/lib/typescript/commonjs/ui/context/useOxyAccountGraph.d.ts.map +1 -0
  287. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts +2 -3
  289. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts +7 -5
  291. package/lib/typescript/commonjs/ui/hooks/useAuth.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  293. package/lib/typescript/commonjs/ui/index.d.ts +2 -3
  294. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  295. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +4 -34
  296. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
  297. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  298. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  299. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  300. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  301. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  302. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  303. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  304. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  305. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  306. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  307. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  308. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  309. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  310. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  311. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts +40 -0
  312. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts.map +1 -0
  313. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts +38 -0
  314. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -0
  315. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts +25 -0
  316. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts.map +1 -0
  317. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +39 -0
  318. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -0
  319. package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts +34 -0
  320. package/lib/typescript/commonjs/ui/screens/fileManagement/shared.d.ts.map +1 -0
  321. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  322. package/lib/typescript/commonjs/ui/server.d.ts +2 -3
  323. package/lib/typescript/commonjs/ui/server.d.ts.map +1 -1
  324. package/lib/typescript/commonjs/ui/session/createSessionClient.d.ts +2 -2
  325. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -18
  326. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  327. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts +24 -0
  328. package/lib/typescript/commonjs/ui/utils/crossOriginRestore.d.ts.map +1 -0
  329. package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts +8 -0
  330. package/lib/typescript/commonjs/ui/utils/deviceCredential.d.ts.map +1 -0
  331. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts +25 -0
  332. package/lib/typescript/commonjs/ui/utils/oauthReturn.d.ts.map +1 -0
  333. package/lib/typescript/commonjs/ui/utils/storageHelpers.d.ts +0 -11
  334. package/lib/typescript/commonjs/ui/utils/storageHelpers.d.ts.map +1 -1
  335. package/lib/typescript/module/assets/icons/OxyServices.d.ts +0 -5
  336. package/lib/typescript/module/assets/icons/OxyServices.d.ts.map +1 -1
  337. package/lib/typescript/module/index.d.ts +11 -6
  338. package/lib/typescript/module/index.d.ts.map +1 -1
  339. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts +29 -0
  340. package/lib/typescript/module/ui/boot/runProviderColdBoot.d.ts.map +1 -0
  341. package/lib/typescript/module/ui/client.d.ts +3 -4
  342. package/lib/typescript/module/ui/client.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  344. package/lib/typescript/module/ui/components/Header.d.ts +16 -21
  345. package/lib/typescript/module/ui/components/Header.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts +3 -7
  347. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/components/OxyOAuthCallback.d.ts +11 -0
  349. package/lib/typescript/module/ui/components/OxyOAuthCallback.d.ts.map +1 -0
  350. package/lib/typescript/module/ui/components/OxyPayButton.d.ts.map +1 -1
  351. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +0 -13
  352. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  353. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  354. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts +33 -0
  355. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -0
  356. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  357. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  358. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  359. package/lib/typescript/module/ui/components/payment/types.d.ts +6 -10
  360. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  361. package/lib/typescript/module/ui/context/OxyContext.d.ts +2 -185
  362. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  363. package/lib/typescript/module/ui/context/oxyContextHelpers.d.ts +7 -0
  364. package/lib/typescript/module/ui/context/oxyContextHelpers.d.ts.map +1 -0
  365. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts +123 -0
  366. package/lib/typescript/module/ui/context/oxyContextTypes.d.ts.map +1 -0
  367. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts +26 -0
  368. package/lib/typescript/module/ui/context/useOxyAccountGraph.d.ts.map +1 -0
  369. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  370. package/lib/typescript/module/ui/hooks/queryClient.d.ts +2 -3
  371. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  372. package/lib/typescript/module/ui/hooks/useAuth.d.ts +7 -5
  373. package/lib/typescript/module/ui/hooks/useAuth.d.ts.map +1 -1
  374. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  375. package/lib/typescript/module/ui/index.d.ts +2 -3
  376. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  377. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +4 -34
  378. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
  379. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  380. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  381. package/lib/typescript/module/ui/screens/EditProfileScreen.d.ts.map +1 -1
  382. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  383. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  384. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  385. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  386. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  387. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  388. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  389. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  390. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  391. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  392. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  393. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts +40 -0
  394. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts.map +1 -0
  395. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts +38 -0
  396. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -0
  397. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts +25 -0
  398. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts.map +1 -0
  399. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +39 -0
  400. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -0
  401. package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts +34 -0
  402. package/lib/typescript/module/ui/screens/fileManagement/shared.d.ts.map +1 -0
  403. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  404. package/lib/typescript/module/ui/server.d.ts +2 -3
  405. package/lib/typescript/module/ui/server.d.ts.map +1 -1
  406. package/lib/typescript/module/ui/session/createSessionClient.d.ts +2 -2
  407. package/lib/typescript/module/ui/types/navigation.d.ts +2 -18
  408. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  409. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts +24 -0
  410. package/lib/typescript/module/ui/utils/crossOriginRestore.d.ts.map +1 -0
  411. package/lib/typescript/module/ui/utils/deviceCredential.d.ts +8 -0
  412. package/lib/typescript/module/ui/utils/deviceCredential.d.ts.map +1 -0
  413. package/lib/typescript/module/ui/utils/oauthReturn.d.ts +25 -0
  414. package/lib/typescript/module/ui/utils/oauthReturn.d.ts.map +1 -0
  415. package/lib/typescript/module/ui/utils/storageHelpers.d.ts +0 -11
  416. package/lib/typescript/module/ui/utils/storageHelpers.d.ts.map +1 -1
  417. package/package.json +30 -17
  418. package/src/assets/icons/OxyServices.tsx +5 -12
  419. package/src/index.ts +16 -10
  420. package/src/ui/boot/runProviderColdBoot.ts +150 -0
  421. package/src/ui/client.ts +3 -4
  422. package/src/ui/components/FollowButton.tsx +30 -95
  423. package/src/ui/components/Header.tsx +135 -405
  424. package/src/ui/components/OxyAccountDialog.tsx +18 -16
  425. package/src/ui/components/OxyConsentScreen.tsx +2 -2
  426. package/src/ui/components/OxyOAuthCallback.tsx +38 -0
  427. package/src/ui/components/OxyPayButton.tsx +11 -60
  428. package/src/ui/components/OxyProvider.tsx +3 -3
  429. package/src/ui/components/OxySignInButton.tsx +35 -134
  430. package/src/ui/components/ProfileButton.tsx +8 -3
  431. package/src/ui/components/ProfileSummaryCard.tsx +123 -0
  432. package/src/ui/components/RequireOxyAuth.tsx +3 -3
  433. package/src/ui/components/__tests__/OxyConsentScreen.test.tsx +1 -3
  434. package/src/ui/components/fileManagement/FileDetailsModal.tsx +9 -9
  435. package/src/ui/components/fileManagement/FileViewer.tsx +20 -22
  436. package/src/ui/components/fileManagement/UploadPreview.tsx +6 -6
  437. package/src/ui/components/modals/DeleteAccountModal.tsx +7 -7
  438. package/src/ui/components/payment/PaymentDetailsStep.tsx +49 -39
  439. package/src/ui/components/payment/paymentStyles.ts +14 -14
  440. package/src/ui/components/payment/types.ts +6 -10
  441. package/src/ui/context/OxyContext.tsx +136 -470
  442. package/src/ui/context/oxyContextHelpers.ts +58 -0
  443. package/src/ui/context/oxyContextTypes.ts +124 -0
  444. package/src/ui/context/useOxyAccountGraph.ts +114 -0
  445. package/src/ui/hooks/queryClient.ts +9 -20
  446. package/src/ui/hooks/useAuth.ts +7 -5
  447. package/src/ui/hooks/useSessionManagement.ts +2 -0
  448. package/src/ui/index.ts +2 -3
  449. package/src/ui/navigation/accountDialogManager.ts +4 -40
  450. package/src/ui/screens/ConnectedAppsScreen.tsx +8 -11
  451. package/src/ui/screens/EditProfileFieldScreen.tsx +2 -3
  452. package/src/ui/screens/EditProfileScreen.tsx +8 -14
  453. package/src/ui/screens/FAQScreen.tsx +7 -8
  454. package/src/ui/screens/FeedbackScreen.tsx +0 -1
  455. package/src/ui/screens/FileManagementScreen.tsx +54 -1158
  456. package/src/ui/screens/HistoryViewScreen.tsx +4 -4
  457. package/src/ui/screens/LanguageSelectorScreen.tsx +0 -1
  458. package/src/ui/screens/LegalDocumentsScreen.tsx +4 -3
  459. package/src/ui/screens/ManageAccountScreen.tsx +14 -47
  460. package/src/ui/screens/PaymentGatewayScreen.tsx +3 -7
  461. package/src/ui/screens/PremiumSubscriptionScreen.tsx +33 -31
  462. package/src/ui/screens/PrivacySettingsScreen.tsx +14 -16
  463. package/src/ui/screens/ProfileScreen.tsx +3 -3
  464. package/src/ui/screens/SavesCollectionsScreen.tsx +11 -12
  465. package/src/ui/screens/SearchSettingsScreen.tsx +2 -2
  466. package/src/ui/screens/UserListScreen.tsx +2 -2
  467. package/src/ui/screens/WelcomeNewUserScreen.tsx +6 -7
  468. package/src/ui/screens/fileManagement/FileListSection.tsx +126 -0
  469. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +611 -0
  470. package/src/ui/screens/fileManagement/UploadBar.tsx +48 -0
  471. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +497 -0
  472. package/src/ui/screens/fileManagement/shared.ts +65 -0
  473. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  474. package/src/ui/screens/trust/TrustFAQScreen.tsx +4 -10
  475. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +2 -2
  476. package/src/ui/screens/trust/TrustRulesScreen.tsx +2 -2
  477. package/src/ui/server.ts +2 -3
  478. package/src/ui/session/createSessionClient.ts +2 -2
  479. package/src/ui/types/navigation.ts +2 -18
  480. package/src/ui/utils/crossOriginRestore.ts +129 -0
  481. package/src/ui/utils/deviceCredential.ts +17 -0
  482. package/src/ui/utils/oauthReturn.ts +101 -0
  483. package/src/ui/utils/storageHelpers.ts +0 -12
  484. package/lib/commonjs/ui/components/ActivityIndicator.js +0 -203
  485. package/lib/commonjs/ui/components/ActivityIndicator.js.map +0 -1
  486. package/lib/commonjs/ui/components/AutoHeightScrollView.js +0 -46
  487. package/lib/commonjs/ui/components/AutoHeightScrollView.js.map +0 -1
  488. package/lib/commonjs/ui/components/Avatar.js +0 -181
  489. package/lib/commonjs/ui/components/Avatar.js.map +0 -1
  490. package/lib/commonjs/ui/components/CrossFadeIcon.js +0 -106
  491. package/lib/commonjs/ui/components/CrossFadeIcon.js.map +0 -1
  492. package/lib/commonjs/ui/components/EmptyState.js +0 -41
  493. package/lib/commonjs/ui/components/EmptyState.js.map +0 -1
  494. package/lib/commonjs/ui/components/HelperText.js +0 -95
  495. package/lib/commonjs/ui/components/HelperText.js.map +0 -1
  496. package/lib/commonjs/ui/components/Icon.js +0 -112
  497. package/lib/commonjs/ui/components/Icon.js.map +0 -1
  498. package/lib/commonjs/ui/components/IconButton/IconButton.js +0 -153
  499. package/lib/commonjs/ui/components/IconButton/IconButton.js.map +0 -1
  500. package/lib/commonjs/ui/components/IconButton/utils.js +0 -155
  501. package/lib/commonjs/ui/components/IconButton/utils.js.map +0 -1
  502. package/lib/commonjs/ui/components/LoadingState.js +0 -47
  503. package/lib/commonjs/ui/components/LoadingState.js.map +0 -1
  504. package/lib/commonjs/ui/components/OxyLogo.js +0 -110
  505. package/lib/commonjs/ui/components/OxyLogo.js.map +0 -1
  506. package/lib/commonjs/ui/components/ProfileCard.js +0 -134
  507. package/lib/commonjs/ui/components/ProfileCard.js.map +0 -1
  508. package/lib/commonjs/ui/components/QuickActions.js +0 -84
  509. package/lib/commonjs/ui/components/QuickActions.js.map +0 -1
  510. package/lib/commonjs/ui/components/StepBasedScreen.js +0 -423
  511. package/lib/commonjs/ui/components/StepBasedScreen.js.map +0 -1
  512. package/lib/commonjs/ui/components/Surface.js +0 -258
  513. package/lib/commonjs/ui/components/Surface.js.map +0 -1
  514. package/lib/commonjs/ui/components/TextField/Addons/Outline.js +0 -46
  515. package/lib/commonjs/ui/components/TextField/Addons/Outline.js.map +0 -1
  516. package/lib/commonjs/ui/components/TextField/Addons/Underline.js +0 -53
  517. package/lib/commonjs/ui/components/TextField/Addons/Underline.js.map +0 -1
  518. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js +0 -153
  519. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.js.map +0 -1
  520. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js +0 -144
  521. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldAffix.js.map +0 -1
  522. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js +0 -137
  523. package/lib/commonjs/ui/components/TextField/Adornment/TextFieldIcon.js.map +0 -1
  524. package/lib/commonjs/ui/components/TextField/Adornment/enums.js +0 -22
  525. package/lib/commonjs/ui/components/TextField/Adornment/enums.js.map +0 -1
  526. package/lib/commonjs/ui/components/TextField/Adornment/types.js.map +0 -1
  527. package/lib/commonjs/ui/components/TextField/Adornment/utils.js +0 -62
  528. package/lib/commonjs/ui/components/TextField/Adornment/utils.js.map +0 -1
  529. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js +0 -176
  530. package/lib/commonjs/ui/components/TextField/Label/InputLabel.js.map +0 -1
  531. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js +0 -84
  532. package/lib/commonjs/ui/components/TextField/Label/LabelBackground.js.map +0 -1
  533. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js +0 -381
  534. package/lib/commonjs/ui/components/TextField/TextFieldFlat.js.map +0 -1
  535. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js +0 -365
  536. package/lib/commonjs/ui/components/TextField/TextFieldOutlined.js.map +0 -1
  537. package/lib/commonjs/ui/components/TextField/constants.js +0 -50
  538. package/lib/commonjs/ui/components/TextField/constants.js.map +0 -1
  539. package/lib/commonjs/ui/components/TextField/helpers.js +0 -489
  540. package/lib/commonjs/ui/components/TextField/helpers.js.map +0 -1
  541. package/lib/commonjs/ui/components/TextField/types.js +0 -6
  542. package/lib/commonjs/ui/components/TextField/types.js.map +0 -1
  543. package/lib/commonjs/ui/components/TextField.js +0 -335
  544. package/lib/commonjs/ui/components/TextField.js.map +0 -1
  545. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js +0 -12
  546. package/lib/commonjs/ui/components/TouchableRipple/Pressable.js.map +0 -1
  547. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js +0 -258
  548. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.js.map +0 -1
  549. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js +0 -107
  550. package/lib/commonjs/ui/components/TouchableRipple/TouchableRipple.native.js.map +0 -1
  551. package/lib/commonjs/ui/components/TouchableRipple/utils.js +0 -56
  552. package/lib/commonjs/ui/components/TouchableRipple/utils.js.map +0 -1
  553. package/lib/commonjs/ui/components/Typography/AnimatedText.js +0 -59
  554. package/lib/commonjs/ui/components/Typography/AnimatedText.js.map +0 -1
  555. package/lib/commonjs/ui/components/Typography/types.js +0 -26
  556. package/lib/commonjs/ui/components/Typography/types.js.map +0 -1
  557. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js +0 -33
  558. package/lib/commonjs/ui/components/feedback/ProgressIndicator.js.map +0 -1
  559. package/lib/commonjs/ui/components/icon/OxyIcon.js +0 -26
  560. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +0 -1
  561. package/lib/commonjs/ui/components/theming.js +0 -128
  562. package/lib/commonjs/ui/components/theming.js.map +0 -1
  563. package/lib/commonjs/ui/components/types.js +0 -6
  564. package/lib/commonjs/ui/components/types.js.map +0 -1
  565. package/lib/commonjs/ui/components/utils/forwardRef.js +0 -18
  566. package/lib/commonjs/ui/components/utils/forwardRef.js.map +0 -1
  567. package/lib/commonjs/ui/constants/iconColors.js +0 -84
  568. package/lib/commonjs/ui/constants/iconColors.js.map +0 -1
  569. package/lib/commonjs/ui/constants/theme.js +0 -124
  570. package/lib/commonjs/ui/constants/theme.js.map +0 -1
  571. package/lib/commonjs/ui/context/ThemeContext.js +0 -36
  572. package/lib/commonjs/ui/context/ThemeContext.js.map +0 -1
  573. package/lib/commonjs/ui/hooks/useColorScheme.js +0 -29
  574. package/lib/commonjs/ui/hooks/useColorScheme.js.map +0 -1
  575. package/lib/commonjs/ui/styles/authStyles.js +0 -334
  576. package/lib/commonjs/ui/styles/authStyles.js.map +0 -1
  577. package/lib/commonjs/ui/styles/theme.js +0 -153
  578. package/lib/commonjs/ui/styles/theme.js.map +0 -1
  579. package/lib/module/ui/components/ActivityIndicator.js +0 -198
  580. package/lib/module/ui/components/ActivityIndicator.js.map +0 -1
  581. package/lib/module/ui/components/AutoHeightScrollView.js +0 -41
  582. package/lib/module/ui/components/AutoHeightScrollView.js.map +0 -1
  583. package/lib/module/ui/components/Avatar.js +0 -177
  584. package/lib/module/ui/components/Avatar.js.map +0 -1
  585. package/lib/module/ui/components/CrossFadeIcon.js +0 -101
  586. package/lib/module/ui/components/CrossFadeIcon.js.map +0 -1
  587. package/lib/module/ui/components/EmptyState.js +0 -36
  588. package/lib/module/ui/components/EmptyState.js.map +0 -1
  589. package/lib/module/ui/components/HelperText.js +0 -90
  590. package/lib/module/ui/components/HelperText.js.map +0 -1
  591. package/lib/module/ui/components/Icon.js +0 -106
  592. package/lib/module/ui/components/Icon.js.map +0 -1
  593. package/lib/module/ui/components/IconButton/IconButton.js +0 -148
  594. package/lib/module/ui/components/IconButton/IconButton.js.map +0 -1
  595. package/lib/module/ui/components/IconButton/utils.js +0 -149
  596. package/lib/module/ui/components/IconButton/utils.js.map +0 -1
  597. package/lib/module/ui/components/LoadingState.js +0 -42
  598. package/lib/module/ui/components/LoadingState.js.map +0 -1
  599. package/lib/module/ui/components/OxyLogo.js +0 -104
  600. package/lib/module/ui/components/OxyLogo.js.map +0 -1
  601. package/lib/module/ui/components/ProfileCard.js +0 -129
  602. package/lib/module/ui/components/ProfileCard.js.map +0 -1
  603. package/lib/module/ui/components/QuickActions.js +0 -80
  604. package/lib/module/ui/components/QuickActions.js.map +0 -1
  605. package/lib/module/ui/components/StepBasedScreen.js +0 -418
  606. package/lib/module/ui/components/StepBasedScreen.js.map +0 -1
  607. package/lib/module/ui/components/Surface.js +0 -252
  608. package/lib/module/ui/components/Surface.js.map +0 -1
  609. package/lib/module/ui/components/TextField/Addons/Outline.js +0 -40
  610. package/lib/module/ui/components/TextField/Addons/Outline.js.map +0 -1
  611. package/lib/module/ui/components/TextField/Addons/Underline.js +0 -47
  612. package/lib/module/ui/components/TextField/Addons/Underline.js.map +0 -1
  613. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js +0 -146
  614. package/lib/module/ui/components/TextField/Adornment/TextFieldAdornment.js.map +0 -1
  615. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js +0 -141
  616. package/lib/module/ui/components/TextField/Adornment/TextFieldAffix.js.map +0 -1
  617. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js +0 -135
  618. package/lib/module/ui/components/TextField/Adornment/TextFieldIcon.js.map +0 -1
  619. package/lib/module/ui/components/TextField/Adornment/enums.js +0 -18
  620. package/lib/module/ui/components/TextField/Adornment/enums.js.map +0 -1
  621. package/lib/module/ui/components/TextField/Adornment/types.js +0 -4
  622. package/lib/module/ui/components/TextField/Adornment/types.js.map +0 -1
  623. package/lib/module/ui/components/TextField/Adornment/utils.js +0 -57
  624. package/lib/module/ui/components/TextField/Adornment/utils.js.map +0 -1
  625. package/lib/module/ui/components/TextField/Label/InputLabel.js +0 -171
  626. package/lib/module/ui/components/TextField/Label/InputLabel.js.map +0 -1
  627. package/lib/module/ui/components/TextField/Label/LabelBackground.js +0 -78
  628. package/lib/module/ui/components/TextField/Label/LabelBackground.js.map +0 -1
  629. package/lib/module/ui/components/TextField/TextFieldFlat.js +0 -376
  630. package/lib/module/ui/components/TextField/TextFieldFlat.js.map +0 -1
  631. package/lib/module/ui/components/TextField/TextFieldOutlined.js +0 -359
  632. package/lib/module/ui/components/TextField/TextFieldOutlined.js.map +0 -1
  633. package/lib/module/ui/components/TextField/constants.js +0 -46
  634. package/lib/module/ui/components/TextField/constants.js.map +0 -1
  635. package/lib/module/ui/components/TextField/helpers.js +0 -471
  636. package/lib/module/ui/components/TextField/helpers.js.map +0 -1
  637. package/lib/module/ui/components/TextField/types.js +0 -4
  638. package/lib/module/ui/components/TextField/types.js.map +0 -1
  639. package/lib/module/ui/components/TextField.js +0 -329
  640. package/lib/module/ui/components/TextField.js.map +0 -1
  641. package/lib/module/ui/components/TouchableRipple/Pressable.js +0 -9
  642. package/lib/module/ui/components/TouchableRipple/Pressable.js.map +0 -1
  643. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js +0 -253
  644. package/lib/module/ui/components/TouchableRipple/TouchableRipple.js.map +0 -1
  645. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js +0 -101
  646. package/lib/module/ui/components/TouchableRipple/TouchableRipple.native.js.map +0 -1
  647. package/lib/module/ui/components/TouchableRipple/utils.js +0 -50
  648. package/lib/module/ui/components/TouchableRipple/utils.js.map +0 -1
  649. package/lib/module/ui/components/Typography/AnimatedText.js +0 -54
  650. package/lib/module/ui/components/Typography/AnimatedText.js.map +0 -1
  651. package/lib/module/ui/components/Typography/types.js +0 -22
  652. package/lib/module/ui/components/Typography/types.js.map +0 -1
  653. package/lib/module/ui/components/feedback/ProgressIndicator.js +0 -28
  654. package/lib/module/ui/components/feedback/ProgressIndicator.js.map +0 -1
  655. package/lib/module/ui/components/icon/OxyIcon.js +0 -22
  656. package/lib/module/ui/components/icon/OxyIcon.js.map +0 -1
  657. package/lib/module/ui/components/theming.js +0 -123
  658. package/lib/module/ui/components/theming.js.map +0 -1
  659. package/lib/module/ui/components/types.js +0 -4
  660. package/lib/module/ui/components/types.js.map +0 -1
  661. package/lib/module/ui/components/utils/forwardRef.js +0 -13
  662. package/lib/module/ui/components/utils/forwardRef.js.map +0 -1
  663. package/lib/module/ui/constants/iconColors.js +0 -78
  664. package/lib/module/ui/constants/iconColors.js.map +0 -1
  665. package/lib/module/ui/constants/theme.js +0 -120
  666. package/lib/module/ui/constants/theme.js.map +0 -1
  667. package/lib/module/ui/context/ThemeContext.js +0 -29
  668. package/lib/module/ui/context/ThemeContext.js.map +0 -1
  669. package/lib/module/ui/hooks/useColorScheme.js +0 -26
  670. package/lib/module/ui/hooks/useColorScheme.js.map +0 -1
  671. package/lib/module/ui/styles/authStyles.js +0 -329
  672. package/lib/module/ui/styles/authStyles.js.map +0 -1
  673. package/lib/module/ui/styles/theme.js +0 -147
  674. package/lib/module/ui/styles/theme.js.map +0 -1
  675. package/lib/typescript/commonjs/ui/components/ActivityIndicator.d.ts +0 -45
  676. package/lib/typescript/commonjs/ui/components/ActivityIndicator.d.ts.map +0 -1
  677. package/lib/typescript/commonjs/ui/components/AutoHeightScrollView.d.ts +0 -23
  678. package/lib/typescript/commonjs/ui/components/AutoHeightScrollView.d.ts.map +0 -1
  679. package/lib/typescript/commonjs/ui/components/Avatar.d.ts +0 -61
  680. package/lib/typescript/commonjs/ui/components/Avatar.d.ts.map +0 -1
  681. package/lib/typescript/commonjs/ui/components/CrossFadeIcon.d.ts +0 -28
  682. package/lib/typescript/commonjs/ui/components/CrossFadeIcon.d.ts.map +0 -1
  683. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts +0 -8
  684. package/lib/typescript/commonjs/ui/components/EmptyState.d.ts.map +0 -1
  685. package/lib/typescript/commonjs/ui/components/HelperText.d.ts +0 -47
  686. package/lib/typescript/commonjs/ui/components/HelperText.d.ts.map +0 -1
  687. package/lib/typescript/commonjs/ui/components/Icon.d.ts +0 -61
  688. package/lib/typescript/commonjs/ui/components/Icon.d.ts.map +0 -1
  689. package/lib/typescript/commonjs/ui/components/IconButton/IconButton.d.ts +0 -99
  690. package/lib/typescript/commonjs/ui/components/IconButton/IconButton.d.ts.map +0 -1
  691. package/lib/typescript/commonjs/ui/components/IconButton/utils.d.ts +0 -19
  692. package/lib/typescript/commonjs/ui/components/IconButton/utils.d.ts.map +0 -1
  693. package/lib/typescript/commonjs/ui/components/LoadingState.d.ts +0 -9
  694. package/lib/typescript/commonjs/ui/components/LoadingState.d.ts.map +0 -1
  695. package/lib/typescript/commonjs/ui/components/OxyLogo.d.ts +0 -16
  696. package/lib/typescript/commonjs/ui/components/OxyLogo.d.ts.map +0 -1
  697. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts +0 -21
  698. package/lib/typescript/commonjs/ui/components/ProfileCard.d.ts.map +0 -1
  699. package/lib/typescript/commonjs/ui/components/QuickActions.d.ts +0 -15
  700. package/lib/typescript/commonjs/ui/components/QuickActions.d.ts.map +0 -1
  701. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts +0 -28
  702. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts.map +0 -1
  703. package/lib/typescript/commonjs/ui/components/Surface.d.ts +0 -76
  704. package/lib/typescript/commonjs/ui/components/Surface.d.ts.map +0 -1
  705. package/lib/typescript/commonjs/ui/components/TextField/Addons/Outline.d.ts +0 -17
  706. package/lib/typescript/commonjs/ui/components/TextField/Addons/Outline.d.ts.map +0 -1
  707. package/lib/typescript/commonjs/ui/components/TextField/Addons/Underline.d.ts +0 -20
  708. package/lib/typescript/commonjs/ui/components/TextField/Addons/Underline.d.ts.map +0 -1
  709. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +0 -45
  710. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAdornment.d.ts.map +0 -1
  711. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAffix.d.ts +0 -73
  712. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldAffix.d.ts.map +0 -1
  713. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldIcon.d.ts +0 -78
  714. package/lib/typescript/commonjs/ui/components/TextField/Adornment/TextFieldIcon.d.ts.map +0 -1
  715. package/lib/typescript/commonjs/ui/components/TextField/Adornment/enums.d.ts +0 -13
  716. package/lib/typescript/commonjs/ui/components/TextField/Adornment/enums.d.ts.map +0 -1
  717. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts +0 -12
  718. package/lib/typescript/commonjs/ui/components/TextField/Adornment/types.d.ts.map +0 -1
  719. package/lib/typescript/commonjs/ui/components/TextField/Adornment/utils.d.ts +0 -12
  720. package/lib/typescript/commonjs/ui/components/TextField/Adornment/utils.d.ts.map +0 -1
  721. package/lib/typescript/commonjs/ui/components/TextField/Label/InputLabel.d.ts +0 -5
  722. package/lib/typescript/commonjs/ui/components/TextField/Label/InputLabel.d.ts.map +0 -1
  723. package/lib/typescript/commonjs/ui/components/TextField/Label/LabelBackground.d.ts +0 -5
  724. package/lib/typescript/commonjs/ui/components/TextField/Label/LabelBackground.d.ts.map +0 -1
  725. package/lib/typescript/commonjs/ui/components/TextField/TextFieldFlat.d.ts +0 -5
  726. package/lib/typescript/commonjs/ui/components/TextField/TextFieldFlat.d.ts.map +0 -1
  727. package/lib/typescript/commonjs/ui/components/TextField/TextFieldOutlined.d.ts +0 -5
  728. package/lib/typescript/commonjs/ui/components/TextField/TextFieldOutlined.d.ts.map +0 -1
  729. package/lib/typescript/commonjs/ui/components/TextField/constants.d.ts +0 -32
  730. package/lib/typescript/commonjs/ui/components/TextField/constants.d.ts.map +0 -1
  731. package/lib/typescript/commonjs/ui/components/TextField/helpers.d.ts +0 -97
  732. package/lib/typescript/commonjs/ui/components/TextField/helpers.d.ts.map +0 -1
  733. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts +0 -155
  734. package/lib/typescript/commonjs/ui/components/TextField/types.d.ts.map +0 -1
  735. package/lib/typescript/commonjs/ui/components/TextField.d.ts +0 -192
  736. package/lib/typescript/commonjs/ui/components/TextField.d.ts.map +0 -1
  737. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts +0 -13
  738. package/lib/typescript/commonjs/ui/components/TouchableRipple/Pressable.d.ts.map +0 -1
  739. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.d.ts +0 -62
  740. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.d.ts.map +0 -1
  741. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +0 -25
  742. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +0 -1
  743. package/lib/typescript/commonjs/ui/components/TouchableRipple/utils.d.ts +0 -11
  744. package/lib/typescript/commonjs/ui/components/TouchableRipple/utils.d.ts.map +0 -1
  745. package/lib/typescript/commonjs/ui/components/Typography/AnimatedText.d.ts +0 -35
  746. package/lib/typescript/commonjs/ui/components/Typography/AnimatedText.d.ts.map +0 -1
  747. package/lib/typescript/commonjs/ui/components/Typography/types.d.ts +0 -19
  748. package/lib/typescript/commonjs/ui/components/Typography/types.d.ts.map +0 -1
  749. package/lib/typescript/commonjs/ui/components/feedback/ProgressIndicator.d.ts +0 -11
  750. package/lib/typescript/commonjs/ui/components/feedback/ProgressIndicator.d.ts.map +0 -1
  751. package/lib/typescript/commonjs/ui/components/icon/OxyIcon.d.ts +0 -10
  752. package/lib/typescript/commonjs/ui/components/icon/OxyIcon.d.ts.map +0 -1
  753. package/lib/typescript/commonjs/ui/components/theming.d.ts +0 -8
  754. package/lib/typescript/commonjs/ui/components/theming.d.ts.map +0 -1
  755. package/lib/typescript/commonjs/ui/components/types.d.ts +0 -81
  756. package/lib/typescript/commonjs/ui/components/types.d.ts.map +0 -1
  757. package/lib/typescript/commonjs/ui/components/utils/forwardRef.d.ts +0 -12
  758. package/lib/typescript/commonjs/ui/components/utils/forwardRef.d.ts.map +0 -1
  759. package/lib/typescript/commonjs/ui/constants/iconColors.d.ts +0 -130
  760. package/lib/typescript/commonjs/ui/constants/iconColors.d.ts.map +0 -1
  761. package/lib/typescript/commonjs/ui/constants/theme.d.ts +0 -98
  762. package/lib/typescript/commonjs/ui/constants/theme.d.ts.map +0 -1
  763. package/lib/typescript/commonjs/ui/context/ThemeContext.d.ts +0 -19
  764. package/lib/typescript/commonjs/ui/context/ThemeContext.d.ts.map +0 -1
  765. package/lib/typescript/commonjs/ui/hooks/useColorScheme.d.ts +0 -8
  766. package/lib/typescript/commonjs/ui/hooks/useColorScheme.d.ts.map +0 -1
  767. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts +0 -328
  768. package/lib/typescript/commonjs/ui/styles/authStyles.d.ts.map +0 -1
  769. package/lib/typescript/commonjs/ui/styles/theme.d.ts +0 -75
  770. package/lib/typescript/commonjs/ui/styles/theme.d.ts.map +0 -1
  771. package/lib/typescript/module/ui/components/ActivityIndicator.d.ts +0 -45
  772. package/lib/typescript/module/ui/components/ActivityIndicator.d.ts.map +0 -1
  773. package/lib/typescript/module/ui/components/AutoHeightScrollView.d.ts +0 -23
  774. package/lib/typescript/module/ui/components/AutoHeightScrollView.d.ts.map +0 -1
  775. package/lib/typescript/module/ui/components/Avatar.d.ts +0 -61
  776. package/lib/typescript/module/ui/components/Avatar.d.ts.map +0 -1
  777. package/lib/typescript/module/ui/components/CrossFadeIcon.d.ts +0 -28
  778. package/lib/typescript/module/ui/components/CrossFadeIcon.d.ts.map +0 -1
  779. package/lib/typescript/module/ui/components/EmptyState.d.ts +0 -8
  780. package/lib/typescript/module/ui/components/EmptyState.d.ts.map +0 -1
  781. package/lib/typescript/module/ui/components/HelperText.d.ts +0 -47
  782. package/lib/typescript/module/ui/components/HelperText.d.ts.map +0 -1
  783. package/lib/typescript/module/ui/components/Icon.d.ts +0 -61
  784. package/lib/typescript/module/ui/components/Icon.d.ts.map +0 -1
  785. package/lib/typescript/module/ui/components/IconButton/IconButton.d.ts +0 -99
  786. package/lib/typescript/module/ui/components/IconButton/IconButton.d.ts.map +0 -1
  787. package/lib/typescript/module/ui/components/IconButton/utils.d.ts +0 -19
  788. package/lib/typescript/module/ui/components/IconButton/utils.d.ts.map +0 -1
  789. package/lib/typescript/module/ui/components/LoadingState.d.ts +0 -9
  790. package/lib/typescript/module/ui/components/LoadingState.d.ts.map +0 -1
  791. package/lib/typescript/module/ui/components/OxyLogo.d.ts +0 -16
  792. package/lib/typescript/module/ui/components/OxyLogo.d.ts.map +0 -1
  793. package/lib/typescript/module/ui/components/ProfileCard.d.ts +0 -21
  794. package/lib/typescript/module/ui/components/ProfileCard.d.ts.map +0 -1
  795. package/lib/typescript/module/ui/components/QuickActions.d.ts +0 -15
  796. package/lib/typescript/module/ui/components/QuickActions.d.ts.map +0 -1
  797. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts +0 -28
  798. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts.map +0 -1
  799. package/lib/typescript/module/ui/components/Surface.d.ts +0 -76
  800. package/lib/typescript/module/ui/components/Surface.d.ts.map +0 -1
  801. package/lib/typescript/module/ui/components/TextField/Addons/Outline.d.ts +0 -17
  802. package/lib/typescript/module/ui/components/TextField/Addons/Outline.d.ts.map +0 -1
  803. package/lib/typescript/module/ui/components/TextField/Addons/Underline.d.ts +0 -20
  804. package/lib/typescript/module/ui/components/TextField/Addons/Underline.d.ts.map +0 -1
  805. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAdornment.d.ts +0 -45
  806. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAdornment.d.ts.map +0 -1
  807. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAffix.d.ts +0 -73
  808. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldAffix.d.ts.map +0 -1
  809. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldIcon.d.ts +0 -78
  810. package/lib/typescript/module/ui/components/TextField/Adornment/TextFieldIcon.d.ts.map +0 -1
  811. package/lib/typescript/module/ui/components/TextField/Adornment/enums.d.ts +0 -13
  812. package/lib/typescript/module/ui/components/TextField/Adornment/enums.d.ts.map +0 -1
  813. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts +0 -12
  814. package/lib/typescript/module/ui/components/TextField/Adornment/types.d.ts.map +0 -1
  815. package/lib/typescript/module/ui/components/TextField/Adornment/utils.d.ts +0 -12
  816. package/lib/typescript/module/ui/components/TextField/Adornment/utils.d.ts.map +0 -1
  817. package/lib/typescript/module/ui/components/TextField/Label/InputLabel.d.ts +0 -5
  818. package/lib/typescript/module/ui/components/TextField/Label/InputLabel.d.ts.map +0 -1
  819. package/lib/typescript/module/ui/components/TextField/Label/LabelBackground.d.ts +0 -5
  820. package/lib/typescript/module/ui/components/TextField/Label/LabelBackground.d.ts.map +0 -1
  821. package/lib/typescript/module/ui/components/TextField/TextFieldFlat.d.ts +0 -5
  822. package/lib/typescript/module/ui/components/TextField/TextFieldFlat.d.ts.map +0 -1
  823. package/lib/typescript/module/ui/components/TextField/TextFieldOutlined.d.ts +0 -5
  824. package/lib/typescript/module/ui/components/TextField/TextFieldOutlined.d.ts.map +0 -1
  825. package/lib/typescript/module/ui/components/TextField/constants.d.ts +0 -32
  826. package/lib/typescript/module/ui/components/TextField/constants.d.ts.map +0 -1
  827. package/lib/typescript/module/ui/components/TextField/helpers.d.ts +0 -97
  828. package/lib/typescript/module/ui/components/TextField/helpers.d.ts.map +0 -1
  829. package/lib/typescript/module/ui/components/TextField/types.d.ts +0 -155
  830. package/lib/typescript/module/ui/components/TextField/types.d.ts.map +0 -1
  831. package/lib/typescript/module/ui/components/TextField.d.ts +0 -192
  832. package/lib/typescript/module/ui/components/TextField.d.ts.map +0 -1
  833. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts +0 -13
  834. package/lib/typescript/module/ui/components/TouchableRipple/Pressable.d.ts.map +0 -1
  835. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.d.ts +0 -62
  836. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.d.ts.map +0 -1
  837. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +0 -25
  838. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +0 -1
  839. package/lib/typescript/module/ui/components/TouchableRipple/utils.d.ts +0 -11
  840. package/lib/typescript/module/ui/components/TouchableRipple/utils.d.ts.map +0 -1
  841. package/lib/typescript/module/ui/components/Typography/AnimatedText.d.ts +0 -35
  842. package/lib/typescript/module/ui/components/Typography/AnimatedText.d.ts.map +0 -1
  843. package/lib/typescript/module/ui/components/Typography/types.d.ts +0 -19
  844. package/lib/typescript/module/ui/components/Typography/types.d.ts.map +0 -1
  845. package/lib/typescript/module/ui/components/feedback/ProgressIndicator.d.ts +0 -11
  846. package/lib/typescript/module/ui/components/feedback/ProgressIndicator.d.ts.map +0 -1
  847. package/lib/typescript/module/ui/components/icon/OxyIcon.d.ts +0 -10
  848. package/lib/typescript/module/ui/components/icon/OxyIcon.d.ts.map +0 -1
  849. package/lib/typescript/module/ui/components/theming.d.ts +0 -8
  850. package/lib/typescript/module/ui/components/theming.d.ts.map +0 -1
  851. package/lib/typescript/module/ui/components/types.d.ts +0 -81
  852. package/lib/typescript/module/ui/components/types.d.ts.map +0 -1
  853. package/lib/typescript/module/ui/components/utils/forwardRef.d.ts +0 -12
  854. package/lib/typescript/module/ui/components/utils/forwardRef.d.ts.map +0 -1
  855. package/lib/typescript/module/ui/constants/iconColors.d.ts +0 -130
  856. package/lib/typescript/module/ui/constants/iconColors.d.ts.map +0 -1
  857. package/lib/typescript/module/ui/constants/theme.d.ts +0 -98
  858. package/lib/typescript/module/ui/constants/theme.d.ts.map +0 -1
  859. package/lib/typescript/module/ui/context/ThemeContext.d.ts +0 -19
  860. package/lib/typescript/module/ui/context/ThemeContext.d.ts.map +0 -1
  861. package/lib/typescript/module/ui/hooks/useColorScheme.d.ts +0 -8
  862. package/lib/typescript/module/ui/hooks/useColorScheme.d.ts.map +0 -1
  863. package/lib/typescript/module/ui/styles/authStyles.d.ts +0 -328
  864. package/lib/typescript/module/ui/styles/authStyles.d.ts.map +0 -1
  865. package/lib/typescript/module/ui/styles/theme.d.ts +0 -75
  866. package/lib/typescript/module/ui/styles/theme.d.ts.map +0 -1
  867. package/src/ui/components/ActivityIndicator.tsx +0 -254
  868. package/src/ui/components/AutoHeightScrollView.tsx +0 -50
  869. package/src/ui/components/Avatar.tsx +0 -284
  870. package/src/ui/components/CrossFadeIcon.tsx +0 -140
  871. package/src/ui/components/EmptyState.tsx +0 -39
  872. package/src/ui/components/HelperText.tsx +0 -149
  873. package/src/ui/components/Icon.tsx +0 -189
  874. package/src/ui/components/IconButton/IconButton.tsx +0 -232
  875. package/src/ui/components/IconButton/utils.ts +0 -190
  876. package/src/ui/components/LoadingState.tsx +0 -46
  877. package/src/ui/components/OxyLogo.tsx +0 -82
  878. package/src/ui/components/ProfileCard.tsx +0 -137
  879. package/src/ui/components/QuickActions.tsx +0 -91
  880. package/src/ui/components/StepBasedScreen.tsx +0 -499
  881. package/src/ui/components/Surface.tsx +0 -384
  882. package/src/ui/components/TextField/Addons/Outline.tsx +0 -64
  883. package/src/ui/components/TextField/Addons/Underline.tsx +0 -78
  884. package/src/ui/components/TextField/Adornment/TextFieldAdornment.tsx +0 -205
  885. package/src/ui/components/TextField/Adornment/TextFieldAffix.tsx +0 -212
  886. package/src/ui/components/TextField/Adornment/TextFieldIcon.tsx +0 -195
  887. package/src/ui/components/TextField/Adornment/enums.tsx +0 -12
  888. package/src/ui/components/TextField/Adornment/types.tsx +0 -11
  889. package/src/ui/components/TextField/Adornment/utils.ts +0 -66
  890. package/src/ui/components/TextField/Label/InputLabel.tsx +0 -219
  891. package/src/ui/components/TextField/Label/LabelBackground.tsx +0 -100
  892. package/src/ui/components/TextField/TextFieldFlat.tsx +0 -488
  893. package/src/ui/components/TextField/TextFieldOutlined.tsx +0 -464
  894. package/src/ui/components/TextField/constants.tsx +0 -48
  895. package/src/ui/components/TextField/helpers.tsx +0 -611
  896. package/src/ui/components/TextField/types.tsx +0 -160
  897. package/src/ui/components/TextField.tsx +0 -574
  898. package/src/ui/components/TouchableRipple/Pressable.tsx +0 -42
  899. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +0 -146
  900. package/src/ui/components/TouchableRipple/TouchableRipple.tsx +0 -347
  901. package/src/ui/components/TouchableRipple/utils.ts +0 -66
  902. package/src/ui/components/Typography/AnimatedText.tsx +0 -106
  903. package/src/ui/components/Typography/types.tsx +0 -22
  904. package/src/ui/components/feedback/ProgressIndicator.tsx +0 -35
  905. package/src/ui/components/icon/OxyIcon.tsx +0 -31
  906. package/src/ui/components/theming.tsx +0 -126
  907. package/src/ui/components/types.tsx +0 -93
  908. package/src/ui/components/utils/forwardRef.tsx +0 -23
  909. package/src/ui/constants/iconColors.ts +0 -88
  910. package/src/ui/constants/theme.ts +0 -121
  911. package/src/ui/context/ThemeContext.tsx +0 -41
  912. package/src/ui/context/__tests__/OxyContext.coldBoot.test.tsx +0 -166
  913. package/src/ui/hooks/useColorScheme.ts +0 -24
  914. package/src/ui/styles/authStyles.ts +0 -348
  915. 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 */}