@oxyhq/services 5.4.1 → 5.4.3

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 (154) hide show
  1. package/lib/commonjs/assets/icons/OxyServices.js +1 -1
  2. package/lib/commonjs/core/index.js +84 -2
  3. package/lib/commonjs/core/index.js.map +1 -1
  4. package/lib/commonjs/index.js +22 -22
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/node/index.js +6 -6
  7. package/lib/commonjs/node/index.js.map +1 -1
  8. package/lib/commonjs/ui/components/Avatar.js +3 -3
  9. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  10. package/lib/commonjs/ui/components/FollowButton.js +3 -3
  11. package/lib/commonjs/ui/components/GroupedSection.js +1 -1
  12. package/lib/commonjs/ui/components/OxyLogo.js +1 -1
  13. package/lib/commonjs/ui/components/OxyProvider.js +13 -13
  14. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  15. package/lib/commonjs/ui/components/OxySignInButton.js +2 -2
  16. package/lib/commonjs/ui/components/ProfileCard.js +2 -2
  17. package/lib/commonjs/ui/components/Section.js +1 -1
  18. package/lib/commonjs/ui/components/SectionTitle.js +1 -1
  19. package/lib/commonjs/ui/components/icon/index.js +1 -1
  20. package/lib/commonjs/ui/components/index.js +12 -12
  21. package/lib/commonjs/ui/context/OxyContext.js +20 -4
  22. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  23. package/lib/commonjs/ui/index.js +11 -11
  24. package/lib/commonjs/ui/index.js.map +1 -1
  25. package/lib/commonjs/ui/navigation/OxyRouter.js +18 -18
  26. package/lib/commonjs/ui/screens/AccountCenterScreen.js +18 -18
  27. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  28. package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
  29. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
  30. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +45 -27
  31. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  32. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +29 -22
  33. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  34. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +3 -3
  35. package/lib/commonjs/ui/screens/AppInfoScreen.js +6 -6
  36. package/lib/commonjs/ui/screens/BillingManagementScreen.js +3 -3
  37. package/lib/commonjs/ui/screens/FileManagementScreen.js +324 -306
  38. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  39. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +3 -3
  40. package/lib/commonjs/ui/screens/ProfileScreen.js +2 -2
  41. package/lib/commonjs/ui/screens/SessionManagementScreen.js +2 -2
  42. package/lib/commonjs/ui/screens/SignInScreen.js +358 -310
  43. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  44. package/lib/commonjs/ui/screens/SignUpScreen.js +483 -308
  45. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -3
  47. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +51 -26
  48. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
  50. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +1 -1
  51. package/lib/commonjs/ui/styles/index.js +2 -2
  52. package/lib/commonjs/ui/styles/theme.js +1 -1
  53. package/lib/commonjs/utils/index.js +1 -1
  54. package/lib/module/assets/icons/OxyServices.js +1 -1
  55. package/lib/module/assets/icons/OxyServices.js.map +1 -1
  56. package/lib/module/core/index.js +84 -2
  57. package/lib/module/core/index.js.map +1 -1
  58. package/lib/module/index.js +10 -10
  59. package/lib/module/index.js.map +1 -1
  60. package/lib/module/node/index.js +4 -4
  61. package/lib/module/node/index.js.map +1 -1
  62. package/lib/module/ui/components/Avatar.js +2 -2
  63. package/lib/module/ui/components/Avatar.js.map +1 -1
  64. package/lib/module/ui/components/FollowButton.js +3 -3
  65. package/lib/module/ui/components/FollowButton.js.map +1 -1
  66. package/lib/module/ui/components/GroupedSection.js +1 -1
  67. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  68. package/lib/module/ui/components/OxyLogo.js +1 -1
  69. package/lib/module/ui/components/OxyLogo.js.map +1 -1
  70. package/lib/module/ui/components/OxyProvider.js +10 -10
  71. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  72. package/lib/module/ui/components/OxySignInButton.js +2 -2
  73. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  74. package/lib/module/ui/components/ProfileCard.js +2 -2
  75. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  76. package/lib/module/ui/components/Section.js +1 -1
  77. package/lib/module/ui/components/Section.js.map +1 -1
  78. package/lib/module/ui/components/SectionTitle.js +1 -1
  79. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  80. package/lib/module/ui/components/icon/index.js +1 -1
  81. package/lib/module/ui/components/icon/index.js.map +1 -1
  82. package/lib/module/ui/components/index.js +12 -12
  83. package/lib/module/ui/components/index.js.map +1 -1
  84. package/lib/module/ui/context/OxyContext.js +20 -4
  85. package/lib/module/ui/context/OxyContext.js.map +1 -1
  86. package/lib/module/ui/index.js +10 -10
  87. package/lib/module/ui/index.js.map +1 -1
  88. package/lib/module/ui/navigation/OxyRouter.js +18 -18
  89. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  90. package/lib/module/ui/screens/AccountCenterScreen.js +5 -5
  91. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  92. package/lib/module/ui/screens/AccountManagementDemo.js +2 -2
  93. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
  94. package/lib/module/ui/screens/AccountOverviewScreen.js +46 -28
  95. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  96. package/lib/module/ui/screens/AccountSettingsScreen.js +30 -23
  97. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  98. package/lib/module/ui/screens/AccountSwitcherScreen.js +3 -3
  99. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  100. package/lib/module/ui/screens/AppInfoScreen.js +6 -6
  101. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  102. package/lib/module/ui/screens/BillingManagementScreen.js +3 -3
  103. package/lib/module/ui/screens/BillingManagementScreen.js.map +1 -1
  104. package/lib/module/ui/screens/FileManagementScreen.js +325 -307
  105. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  106. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +3 -3
  107. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  108. package/lib/module/ui/screens/ProfileScreen.js +2 -2
  109. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  110. package/lib/module/ui/screens/SessionManagementScreen.js +2 -2
  111. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  112. package/lib/module/ui/screens/SignInScreen.js +358 -310
  113. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  114. package/lib/module/ui/screens/SignUpScreen.js +486 -309
  115. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  116. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -3
  117. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  118. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +52 -27
  119. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  120. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +2 -2
  121. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  122. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +1 -1
  123. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  124. package/lib/module/ui/styles/index.js +2 -2
  125. package/lib/module/ui/styles/index.js.map +1 -1
  126. package/lib/module/ui/styles/theme.js +1 -1
  127. package/lib/module/ui/styles/theme.js.map +1 -1
  128. package/lib/module/utils/index.js +1 -1
  129. package/lib/module/utils/index.js.map +1 -1
  130. package/lib/typescript/core/index.d.ts +24 -0
  131. package/lib/typescript/core/index.d.ts.map +1 -1
  132. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  133. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  134. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts +2 -2
  135. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  136. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +2 -2
  137. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  138. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  139. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  140. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
  141. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts +2 -2
  142. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  143. package/package.json +21 -5
  144. package/src/core/index.ts +68 -0
  145. package/src/ui/components/OxyProvider.tsx +5 -5
  146. package/src/ui/context/OxyContext.tsx +61 -41
  147. package/src/ui/screens/AccountOverviewScreen.tsx +44 -26
  148. package/src/ui/screens/AccountSettingsScreen.tsx +24 -18
  149. package/src/ui/screens/FileManagementScreen.tsx +246 -211
  150. package/src/ui/screens/SignInScreen.tsx +382 -326
  151. package/src/ui/screens/SignUpScreen.tsx +443 -273
  152. package/src/ui/screens/karma/KarmaFAQScreen.tsx +50 -29
  153. package/lib/commonjs/package.json +0 -1
  154. package/lib/module/package.json +0 -1
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
- var _OxyContext = require("../context/OxyContext");
10
- var _fonts = require("../styles/fonts");
11
- var _sonner = require("../../lib/sonner");
9
+ var _OxyContext = require("../context/OxyContext.js");
10
+ var _fonts = require("../styles/fonts.js");
11
+ var _sonner = require("../../lib/sonner.js");
12
12
  var _vectorIcons = require("@expo/vector-icons");
13
13
  var _jsxRuntime = require("react/jsx-runtime");
14
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -55,14 +55,25 @@ const FileManagementScreen = ({
55
55
  const [photoDimensions, setPhotoDimensions] = (0, _react.useState)({});
56
56
  const [loadingDimensions, setLoadingDimensions] = (0, _react.useState)(false);
57
57
  const [hoveredPreview, setHoveredPreview] = (0, _react.useState)(null);
58
- const isDarkTheme = theme === 'dark';
59
- const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
60
- const backgroundColor = isDarkTheme ? '#121212' : '#f2f2f2';
61
- const secondaryBackgroundColor = isDarkTheme ? '#222222' : '#FFFFFF';
62
- const borderColor = isDarkTheme ? '#444444' : '#E0E0E0';
63
- const primaryColor = '#007AFF';
64
- const dangerColor = '#FF3B30';
65
- const successColor = '#34C759';
58
+
59
+ // Memoize theme-related calculations to prevent unnecessary recalculations
60
+ const themeStyles = (0, _react.useMemo)(() => {
61
+ const isDarkTheme = theme === 'dark';
62
+ return {
63
+ isDarkTheme,
64
+ textColor: isDarkTheme ? '#FFFFFF' : '#000000',
65
+ backgroundColor: isDarkTheme ? '#121212' : '#f2f2f2',
66
+ secondaryBackgroundColor: isDarkTheme ? '#222222' : '#FFFFFF',
67
+ borderColor: isDarkTheme ? '#444444' : '#E0E0E0',
68
+ primaryColor: '#007AFF',
69
+ dangerColor: '#FF3B30',
70
+ successColor: '#34C759'
71
+ };
72
+ }, [theme]);
73
+
74
+ // Extract commonly used theme variables
75
+ const backgroundColor = themeStyles.backgroundColor;
76
+ const borderColor = themeStyles.borderColor;
66
77
  const targetUserId = userId || user?.id;
67
78
  const loadFiles = (0, _react.useCallback)(async (isRefresh = false) => {
68
79
  if (!targetUserId) return;
@@ -184,7 +195,7 @@ const FileManagementScreen = ({
184
195
  }, [oxyServices, photoDimensions]);
185
196
 
186
197
  // Create justified rows from photos with responsive algorithm
187
- const createJustifiedRows = (0, _react.useCallback)(photos => {
198
+ const createJustifiedRows = (0, _react.useCallback)((photos, containerWidth) => {
188
199
  if (photos.length === 0) return [];
189
200
  const rows = [];
190
201
  const photosPerRow = 3; // Fixed 3 photos per row for consistency
@@ -614,9 +625,10 @@ const FileManagementScreen = ({
614
625
  const isVideo = file.contentType.startsWith('video/');
615
626
  const isAudio = file.contentType.startsWith('audio/');
616
627
  const hasPreview = isImage || isPDF || isVideo;
628
+ const borderColor = themeStyles.borderColor;
617
629
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
618
630
  style: [styles.fileItem, {
619
- backgroundColor: secondaryBackgroundColor,
631
+ backgroundColor: themeStyles.secondaryBackgroundColor,
620
632
  borderColor
621
633
  }],
622
634
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
@@ -663,10 +675,10 @@ const FileManagementScreen = ({
663
675
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
664
676
  name: "document",
665
677
  size: 32,
666
- color: primaryColor
678
+ color: themeStyles.primaryColor
667
679
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
668
680
  style: [styles.pdfLabel, {
669
- color: primaryColor
681
+ color: themeStyles.primaryColor
670
682
  }],
671
683
  children: "PDF"
672
684
  })]
@@ -675,10 +687,10 @@ const FileManagementScreen = ({
675
687
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
676
688
  name: "play-circle",
677
689
  size: 32,
678
- color: primaryColor
690
+ color: themeStyles.primaryColor
679
691
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
680
692
  style: [styles.videoLabel, {
681
- color: primaryColor
693
+ color: themeStyles.primaryColor
682
694
  }],
683
695
  children: "VIDEO"
684
696
  })]
@@ -692,7 +704,7 @@ const FileManagementScreen = ({
692
704
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
693
705
  name: getFileIcon(file.contentType),
694
706
  size: 32,
695
- color: primaryColor
707
+ color: themeStyles.primaryColor
696
708
  })
697
709
  }), _reactNative.Platform.OS === 'web' && hoveredPreview === file.id && isImage && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
698
710
  style: styles.previewOverlay,
@@ -707,25 +719,25 @@ const FileManagementScreen = ({
707
719
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
708
720
  name: getFileIcon(file.contentType),
709
721
  size: 32,
710
- color: primaryColor
722
+ color: themeStyles.primaryColor
711
723
  })
712
724
  })
713
725
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
714
726
  style: styles.fileInfo,
715
727
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
716
728
  style: [styles.fileName, {
717
- color: textColor
729
+ color: themeStyles.textColor
718
730
  }],
719
731
  numberOfLines: 1,
720
732
  children: file.filename
721
733
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
722
734
  style: [styles.fileDetails, {
723
- color: isDarkTheme ? '#BBBBBB' : '#666666'
735
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
724
736
  }],
725
737
  children: [formatFileSize(file.length), " \u2022 ", new Date(file.uploadDate).toLocaleDateString()]
726
738
  }), file.metadata?.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
727
739
  style: [styles.fileDescription, {
728
- color: isDarkTheme ? '#AAAAAA' : '#888888'
740
+ color: themeStyles.isDarkTheme ? '#AAAAAA' : '#888888'
729
741
  }],
730
742
  numberOfLines: 2,
731
743
  children: file.metadata.description
@@ -735,27 +747,27 @@ const FileManagementScreen = ({
735
747
  style: styles.fileActions,
736
748
  children: [hasPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
737
749
  style: [styles.actionButton, {
738
- backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
750
+ backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
739
751
  }],
740
752
  onPress: () => handleFileOpen(file),
741
753
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
742
754
  name: "eye",
743
755
  size: 20,
744
- color: primaryColor
756
+ color: themeStyles.primaryColor
745
757
  })
746
758
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
747
759
  style: [styles.actionButton, {
748
- backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
760
+ backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
749
761
  }],
750
762
  onPress: () => handleFileDownload(file.id, file.filename),
751
763
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
752
764
  name: "download",
753
765
  size: 20,
754
- color: primaryColor
766
+ color: themeStyles.primaryColor
755
767
  })
756
768
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
757
769
  style: [styles.actionButton, {
758
- backgroundColor: isDarkTheme ? '#400000' : '#FFEBEE'
770
+ backgroundColor: themeStyles.isDarkTheme ? '#400000' : '#FFEBEE'
759
771
  }],
760
772
  onPress: () => {
761
773
  handleFileDelete(file.id, file.filename);
@@ -763,16 +775,72 @@ const FileManagementScreen = ({
763
775
  disabled: deleting === file.id,
764
776
  children: deleting === file.id ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
765
777
  size: "small",
766
- color: dangerColor
778
+ color: themeStyles.dangerColor
767
779
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
768
780
  name: "trash",
769
781
  size: 20,
770
- color: dangerColor
782
+ color: themeStyles.dangerColor
771
783
  })
772
784
  })]
773
785
  })]
774
786
  }, file.id);
775
787
  };
788
+ const renderPhotoItem = (photo, index) => {
789
+ const downloadUrl = oxyServices.getFileDownloadUrl(photo.id);
790
+
791
+ // Calculate photo item width based on actual container size from bottom sheet
792
+ let itemsPerRow = 3; // Default for mobile
793
+ if (containerWidth > 768) itemsPerRow = 6; // Tablet/Desktop
794
+ else if (containerWidth > 480) itemsPerRow = 4; // Large mobile
795
+
796
+ // Account for the photoScrollContainer padding (16px on each side = 32px total)
797
+ const scrollContainerPadding = 32; // Total horizontal padding from photoScrollContainer
798
+ const gaps = (itemsPerRow - 1) * 4; // Gap between items
799
+ const availableWidth = containerWidth - scrollContainerPadding;
800
+ const itemWidth = (availableWidth - gaps) / itemsPerRow;
801
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
802
+ style: [styles.photoItem, {
803
+ width: itemWidth,
804
+ height: itemWidth
805
+ }],
806
+ onPress: () => handleFileOpen(photo),
807
+ activeOpacity: 0.8,
808
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
809
+ style: styles.photoContainer,
810
+ children: _reactNative.Platform.OS === 'web' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
811
+ src: downloadUrl,
812
+ alt: photo.filename,
813
+ style: {
814
+ width: '100%',
815
+ height: '100%',
816
+ objectFit: 'cover',
817
+ borderRadius: 8,
818
+ transition: 'transform 0.2s ease'
819
+ },
820
+ loading: "lazy",
821
+ onError: e => {
822
+ console.error('Photo failed to load:', e);
823
+ // Could replace with placeholder image
824
+ },
825
+ onMouseEnter: e => {
826
+ e.currentTarget.style.transform = 'scale(1.02)';
827
+ },
828
+ onMouseLeave: e => {
829
+ e.currentTarget.style.transform = 'scale(1)';
830
+ }
831
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
832
+ source: {
833
+ uri: downloadUrl
834
+ },
835
+ style: styles.photoImage,
836
+ resizeMode: "cover",
837
+ onError: e => {
838
+ console.error('Photo failed to load:', e);
839
+ }
840
+ })
841
+ })
842
+ }, photo.id);
843
+ };
776
844
  const renderPhotoGrid = (0, _react.useCallback)(() => {
777
845
  const photos = filteredFiles.filter(file => file.contentType.startsWith('image/'));
778
846
  if (photos.length === 0) {
@@ -781,20 +849,20 @@ const FileManagementScreen = ({
781
849
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
782
850
  name: "images-outline",
783
851
  size: 64,
784
- color: isDarkTheme ? '#666666' : '#CCCCCC'
852
+ color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
785
853
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
786
854
  style: [styles.emptyStateTitle, {
787
- color: textColor
855
+ color: themeStyles.textColor
788
856
  }],
789
857
  children: "No Photos Yet"
790
858
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
791
859
  style: [styles.emptyStateDescription, {
792
- color: isDarkTheme ? '#BBBBBB' : '#666666'
860
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
793
861
  }],
794
862
  children: user?.id === targetUserId ? `Upload photos to get started. You can select multiple photos at once${_reactNative.Platform.OS === 'web' ? ' or drag & drop them here.' : '.'}` : "This user hasn't uploaded any photos yet"
795
863
  }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
796
864
  style: [styles.emptyStateButton, {
797
- backgroundColor: primaryColor
865
+ backgroundColor: themeStyles.primaryColor
798
866
  }],
799
867
  onPress: handleFileUpload,
800
868
  disabled: uploading,
@@ -820,17 +888,17 @@ const FileManagementScreen = ({
820
888
  refreshControl: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.RefreshControl, {
821
889
  refreshing: refreshing,
822
890
  onRefresh: () => loadFiles(true),
823
- tintColor: primaryColor
891
+ tintColor: themeStyles.primaryColor
824
892
  }),
825
893
  showsVerticalScrollIndicator: false,
826
894
  children: [loadingDimensions && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
827
895
  style: styles.dimensionsLoadingIndicator,
828
896
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
829
897
  size: "small",
830
- color: primaryColor
898
+ color: themeStyles.primaryColor
831
899
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
832
900
  style: [styles.dimensionsLoadingText, {
833
- color: isDarkTheme ? '#BBBBBB' : '#666666'
901
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
834
902
  }],
835
903
  children: "Loading photo layout..."
836
904
  })]
@@ -841,11 +909,11 @@ const FileManagementScreen = ({
841
909
  createJustifiedRows: createJustifiedRows,
842
910
  renderJustifiedPhotoItem: renderJustifiedPhotoItem,
843
911
  renderSimplePhotoItem: renderPhotoItem,
844
- textColor: textColor,
912
+ textColor: themeStyles.textColor,
845
913
  containerWidth: containerWidth
846
914
  })]
847
915
  });
848
- }, [filteredFiles, isDarkTheme, textColor, user?.id, targetUserId, uploading, primaryColor, handleFileUpload, refreshing, loadFiles, loadingDimensions, photoDimensions, loadPhotoDimensions, createJustifiedRows, renderJustifiedPhotoItem]);
916
+ }, [filteredFiles, themeStyles, user?.id, targetUserId, uploading, handleFileUpload, refreshing, loadFiles, loadingDimensions, photoDimensions, loadPhotoDimensions, createJustifiedRows, renderJustifiedPhotoItem, renderPhotoItem, containerWidth]);
849
917
 
850
918
  // Separate component for the photo grid to optimize rendering
851
919
  const JustifiedPhotoGrid = /*#__PURE__*/_react.default.memo(({
@@ -885,7 +953,7 @@ const FileManagementScreen = ({
885
953
  style: styles.photoDateSection,
886
954
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
887
955
  style: [styles.photoDateHeader, {
888
- color: textColor
956
+ color: themeStyles.textColor
889
957
  }],
890
958
  children: new Date(date).toLocaleDateString('en-US', {
891
959
  weekday: 'long',
@@ -937,207 +1005,157 @@ const FileManagementScreen = ({
937
1005
  })
938
1006
  });
939
1007
  });
940
- const renderPhotoItem = (photo, index) => {
941
- const downloadUrl = oxyServices.getFileDownloadUrl(photo.id);
942
-
943
- // Calculate photo item width based on actual container size from bottom sheet
944
- let itemsPerRow = 3; // Default for mobile
945
- if (containerWidth > 768) itemsPerRow = 6; // Tablet/Desktop
946
- else if (containerWidth > 480) itemsPerRow = 4; // Large mobile
947
-
948
- // Account for the photoScrollContainer padding (16px on each side = 32px total)
949
- const scrollContainerPadding = 32; // Total horizontal padding from photoScrollContainer
950
- const gaps = (itemsPerRow - 1) * 4; // Gap between items
951
- const availableWidth = containerWidth - scrollContainerPadding;
952
- const itemWidth = (availableWidth - gaps) / itemsPerRow;
953
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
954
- style: [styles.photoItem, {
955
- width: itemWidth,
956
- height: itemWidth
957
- }],
958
- onPress: () => handleFileOpen(photo),
959
- activeOpacity: 0.8,
960
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
961
- style: styles.photoContainer,
962
- children: _reactNative.Platform.OS === 'web' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
963
- src: downloadUrl,
964
- alt: photo.filename,
965
- style: {
966
- width: '100%',
967
- height: '100%',
968
- objectFit: 'cover',
969
- borderRadius: 8,
970
- transition: 'transform 0.2s ease'
971
- },
972
- loading: "lazy",
973
- onError: e => {
974
- console.error('Photo failed to load:', e);
975
- // Could replace with placeholder image
976
- },
977
- onMouseEnter: e => {
978
- e.currentTarget.style.transform = 'scale(1.02)';
979
- },
980
- onMouseLeave: e => {
981
- e.currentTarget.style.transform = 'scale(1)';
982
- }
983
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
984
- source: {
985
- uri: downloadUrl
986
- },
987
- style: styles.photoImage,
988
- resizeMode: "cover",
989
- onError: e => {
990
- console.error('Photo failed to load:', e);
991
- }
992
- })
993
- })
994
- }, photo.id);
995
- };
996
- const renderFileDetailsModal = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
997
- visible: showFileDetails,
998
- animationType: "slide",
999
- presentationStyle: "pageSheet",
1000
- onRequestClose: () => setShowFileDetails(false),
1001
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1002
- style: [styles.modalContainer, {
1003
- backgroundColor
1004
- }],
1005
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1006
- style: [styles.modalHeader, {
1007
- borderBottomColor: borderColor
1008
+ const renderFileDetailsModal = () => {
1009
+ const backgroundColor = themeStyles.backgroundColor;
1010
+ const borderColor = themeStyles.borderColor;
1011
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
1012
+ visible: showFileDetails,
1013
+ animationType: "slide",
1014
+ presentationStyle: "pageSheet",
1015
+ onRequestClose: () => setShowFileDetails(false),
1016
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1017
+ style: [styles.modalContainer, {
1018
+ backgroundColor
1008
1019
  }],
1009
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1010
- style: styles.modalCloseButton,
1011
- onPress: () => setShowFileDetails(false),
1012
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1013
- name: "close",
1014
- size: 24,
1015
- color: textColor
1016
- })
1017
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1018
- style: [styles.modalTitle, {
1019
- color: textColor
1020
- }],
1021
- children: "File Details"
1022
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1023
- style: styles.modalPlaceholder
1024
- })]
1025
- }), selectedFile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
1026
- style: styles.modalContent,
1027
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1028
- style: [styles.fileDetailCard, {
1029
- backgroundColor: secondaryBackgroundColor,
1030
- borderColor
1020
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1021
+ style: [styles.modalHeader, {
1022
+ borderBottomColor: borderColor
1031
1023
  }],
1032
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1033
- style: styles.fileDetailIcon,
1024
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1025
+ style: styles.modalCloseButton,
1026
+ onPress: () => setShowFileDetails(false),
1034
1027
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1035
- name: getFileIcon(selectedFile.contentType),
1036
- size: 64,
1037
- color: primaryColor
1028
+ name: "close",
1029
+ size: 24,
1030
+ color: themeStyles.textColor
1038
1031
  })
1039
1032
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1040
- style: [styles.fileDetailName, {
1041
- color: textColor
1033
+ style: [styles.modalTitle, {
1034
+ color: themeStyles.textColor
1042
1035
  }],
1043
- children: selectedFile.filename
1044
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1045
- style: styles.fileDetailInfo,
1046
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1047
- style: styles.detailRow,
1048
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1049
- style: [styles.detailLabel, {
1050
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1051
- }],
1052
- children: "Size:"
1053
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1054
- style: [styles.detailValue, {
1055
- color: textColor
1056
- }],
1057
- children: formatFileSize(selectedFile.length)
1058
- })]
1036
+ children: "File Details"
1037
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1038
+ style: styles.modalPlaceholder
1039
+ })]
1040
+ }), selectedFile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
1041
+ style: styles.modalContent,
1042
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1043
+ style: [styles.fileDetailCard, {
1044
+ backgroundColor: themeStyles.secondaryBackgroundColor,
1045
+ borderColor
1046
+ }],
1047
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1048
+ style: styles.fileDetailIcon,
1049
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1050
+ name: getFileIcon(selectedFile.contentType),
1051
+ size: 64,
1052
+ color: themeStyles.primaryColor
1053
+ })
1054
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1055
+ style: [styles.fileDetailName, {
1056
+ color: themeStyles.textColor
1057
+ }],
1058
+ children: selectedFile.filename
1059
1059
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1060
- style: styles.detailRow,
1061
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1062
- style: [styles.detailLabel, {
1063
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1064
- }],
1065
- children: "Type:"
1066
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1067
- style: [styles.detailValue, {
1068
- color: textColor
1069
- }],
1070
- children: selectedFile.contentType
1060
+ style: styles.fileDetailInfo,
1061
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1062
+ style: styles.detailRow,
1063
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1064
+ style: [styles.detailLabel, {
1065
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1066
+ }],
1067
+ children: "Size:"
1068
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1069
+ style: [styles.detailValue, {
1070
+ color: themeStyles.textColor
1071
+ }],
1072
+ children: formatFileSize(selectedFile.length)
1073
+ })]
1074
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1075
+ style: styles.detailRow,
1076
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1077
+ style: [styles.detailLabel, {
1078
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1079
+ }],
1080
+ children: "Type:"
1081
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1082
+ style: [styles.detailValue, {
1083
+ color: themeStyles.textColor
1084
+ }],
1085
+ children: selectedFile.contentType
1086
+ })]
1087
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1088
+ style: styles.detailRow,
1089
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1090
+ style: [styles.detailLabel, {
1091
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1092
+ }],
1093
+ children: "Uploaded:"
1094
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1095
+ style: [styles.detailValue, {
1096
+ color: themeStyles.textColor
1097
+ }],
1098
+ children: new Date(selectedFile.uploadDate).toLocaleString()
1099
+ })]
1100
+ }), selectedFile.metadata?.description && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1101
+ style: styles.detailRow,
1102
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1103
+ style: [styles.detailLabel, {
1104
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1105
+ }],
1106
+ children: "Description:"
1107
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1108
+ style: [styles.detailValue, {
1109
+ color: themeStyles.textColor
1110
+ }],
1111
+ children: selectedFile.metadata.description
1112
+ })]
1071
1113
  })]
1072
1114
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1073
- style: styles.detailRow,
1074
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1075
- style: [styles.detailLabel, {
1076
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1115
+ style: styles.modalActions,
1116
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1117
+ style: [styles.modalActionButton, {
1118
+ backgroundColor: themeStyles.primaryColor
1077
1119
  }],
1078
- children: "Uploaded:"
1079
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1080
- style: [styles.detailValue, {
1081
- color: textColor
1120
+ onPress: () => {
1121
+ handleFileDownload(selectedFile.id, selectedFile.filename);
1122
+ setShowFileDetails(false);
1123
+ },
1124
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1125
+ name: "download",
1126
+ size: 20,
1127
+ color: "#FFFFFF"
1128
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1129
+ style: styles.modalActionText,
1130
+ children: "Download"
1131
+ })]
1132
+ }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1133
+ style: [styles.modalActionButton, {
1134
+ backgroundColor: themeStyles.dangerColor
1082
1135
  }],
1083
- children: new Date(selectedFile.uploadDate).toLocaleString()
1084
- })]
1085
- }), selectedFile.metadata?.description && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1086
- style: styles.detailRow,
1087
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1088
- style: [styles.detailLabel, {
1089
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1090
- }],
1091
- children: "Description:"
1092
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1093
- style: [styles.detailValue, {
1094
- color: textColor
1095
- }],
1096
- children: selectedFile.metadata.description
1136
+ onPress: () => {
1137
+ setShowFileDetails(false);
1138
+ handleFileDelete(selectedFile.id, selectedFile.filename);
1139
+ },
1140
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1141
+ name: "trash",
1142
+ size: 20,
1143
+ color: "#FFFFFF"
1144
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1145
+ style: styles.modalActionText,
1146
+ children: "Delete"
1147
+ })]
1097
1148
  })]
1098
1149
  })]
1099
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1100
- style: styles.modalActions,
1101
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1102
- style: [styles.modalActionButton, {
1103
- backgroundColor: primaryColor
1104
- }],
1105
- onPress: () => {
1106
- handleFileDownload(selectedFile.id, selectedFile.filename);
1107
- setShowFileDetails(false);
1108
- },
1109
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1110
- name: "download",
1111
- size: 20,
1112
- color: "#FFFFFF"
1113
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1114
- style: styles.modalActionText,
1115
- children: "Download"
1116
- })]
1117
- }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1118
- style: [styles.modalActionButton, {
1119
- backgroundColor: dangerColor
1120
- }],
1121
- onPress: () => {
1122
- setShowFileDetails(false);
1123
- handleFileDelete(selectedFile.id, selectedFile.filename);
1124
- },
1125
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1126
- name: "trash",
1127
- size: 20,
1128
- color: "#FFFFFF"
1129
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1130
- style: styles.modalActionText,
1131
- children: "Delete"
1132
- })]
1133
- })]
1134
- })]
1135
- })
1136
- })]
1137
- })
1138
- });
1150
+ })
1151
+ })]
1152
+ })
1153
+ });
1154
+ };
1139
1155
  const renderFileViewer = () => {
1140
1156
  if (!openedFile) return null;
1157
+ const backgroundColor = themeStyles.backgroundColor;
1158
+ const borderColor = themeStyles.borderColor;
1141
1159
  const isImage = openedFile.contentType.startsWith('image/');
1142
1160
  const isText = openedFile.contentType.startsWith('text/') || openedFile.contentType.includes('json') || openedFile.contentType.includes('xml') || openedFile.contentType.includes('javascript') || openedFile.contentType.includes('typescript');
1143
1161
  const isPDF = openedFile.contentType.includes('pdf');
@@ -1157,19 +1175,19 @@ const FileManagementScreen = ({
1157
1175
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1158
1176
  name: "arrow-back",
1159
1177
  size: 24,
1160
- color: textColor
1178
+ color: themeStyles.textColor
1161
1179
  })
1162
1180
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1163
1181
  style: styles.fileViewerTitleContainer,
1164
1182
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1165
1183
  style: [styles.fileViewerTitle, {
1166
- color: textColor
1184
+ color: themeStyles.textColor
1167
1185
  }],
1168
1186
  numberOfLines: 1,
1169
1187
  children: openedFile.filename
1170
1188
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
1171
1189
  style: [styles.fileViewerSubtitle, {
1172
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1190
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1173
1191
  }],
1174
1192
  children: [formatFileSize(openedFile.length), " \u2022 ", openedFile.contentType]
1175
1193
  })]
@@ -1177,36 +1195,36 @@ const FileManagementScreen = ({
1177
1195
  style: styles.fileViewerActions,
1178
1196
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1179
1197
  style: [styles.actionButton, {
1180
- backgroundColor: isDarkTheme ? '#333333' : '#F0F0F0'
1198
+ backgroundColor: themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
1181
1199
  }],
1182
1200
  onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
1183
1201
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1184
1202
  name: "download",
1185
1203
  size: 20,
1186
- color: primaryColor
1204
+ color: themeStyles.primaryColor
1187
1205
  })
1188
1206
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1189
1207
  style: [styles.actionButton, {
1190
- backgroundColor: showFileDetailsInViewer ? primaryColor : isDarkTheme ? '#333333' : '#F0F0F0'
1208
+ backgroundColor: showFileDetailsInViewer ? themeStyles.primaryColor : themeStyles.isDarkTheme ? '#333333' : '#F0F0F0'
1191
1209
  }],
1192
1210
  onPress: () => setShowFileDetailsInViewer(!showFileDetailsInViewer),
1193
1211
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1194
1212
  name: showFileDetailsInViewer ? "chevron-up" : "information-circle",
1195
1213
  size: 20,
1196
- color: showFileDetailsInViewer ? "#FFFFFF" : primaryColor
1214
+ color: showFileDetailsInViewer ? "#FFFFFF" : themeStyles.primaryColor
1197
1215
  })
1198
1216
  })]
1199
1217
  })]
1200
1218
  }), showFileDetailsInViewer && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1201
1219
  style: [styles.fileDetailsSection, {
1202
- backgroundColor: secondaryBackgroundColor,
1220
+ backgroundColor: themeStyles.secondaryBackgroundColor,
1203
1221
  borderColor
1204
1222
  }],
1205
1223
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1206
1224
  style: styles.fileDetailsSectionHeader,
1207
1225
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1208
1226
  style: [styles.fileDetailsSectionTitle, {
1209
- color: textColor
1227
+ color: themeStyles.textColor
1210
1228
  }],
1211
1229
  children: "File Details"
1212
1230
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
@@ -1215,7 +1233,7 @@ const FileManagementScreen = ({
1215
1233
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1216
1234
  name: "chevron-up",
1217
1235
  size: 20,
1218
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1236
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1219
1237
  })
1220
1238
  })]
1221
1239
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
@@ -1224,12 +1242,12 @@ const FileManagementScreen = ({
1224
1242
  style: styles.detailRow,
1225
1243
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1226
1244
  style: [styles.detailLabel, {
1227
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1245
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1228
1246
  }],
1229
1247
  children: "File Name:"
1230
1248
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1231
1249
  style: [styles.detailValue, {
1232
- color: textColor
1250
+ color: themeStyles.textColor
1233
1251
  }],
1234
1252
  children: openedFile.filename
1235
1253
  })]
@@ -1237,12 +1255,12 @@ const FileManagementScreen = ({
1237
1255
  style: styles.detailRow,
1238
1256
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1239
1257
  style: [styles.detailLabel, {
1240
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1258
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1241
1259
  }],
1242
1260
  children: "Size:"
1243
1261
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1244
1262
  style: [styles.detailValue, {
1245
- color: textColor
1263
+ color: themeStyles.textColor
1246
1264
  }],
1247
1265
  children: formatFileSize(openedFile.length)
1248
1266
  })]
@@ -1250,12 +1268,12 @@ const FileManagementScreen = ({
1250
1268
  style: styles.detailRow,
1251
1269
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1252
1270
  style: [styles.detailLabel, {
1253
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1271
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1254
1272
  }],
1255
1273
  children: "Type:"
1256
1274
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1257
1275
  style: [styles.detailValue, {
1258
- color: textColor
1276
+ color: themeStyles.textColor
1259
1277
  }],
1260
1278
  children: openedFile.contentType
1261
1279
  })]
@@ -1263,12 +1281,12 @@ const FileManagementScreen = ({
1263
1281
  style: styles.detailRow,
1264
1282
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1265
1283
  style: [styles.detailLabel, {
1266
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1284
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1267
1285
  }],
1268
1286
  children: "Uploaded:"
1269
1287
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1270
1288
  style: [styles.detailValue, {
1271
- color: textColor
1289
+ color: themeStyles.textColor
1272
1290
  }],
1273
1291
  children: new Date(openedFile.uploadDate).toLocaleString()
1274
1292
  })]
@@ -1276,12 +1294,12 @@ const FileManagementScreen = ({
1276
1294
  style: styles.detailRow,
1277
1295
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1278
1296
  style: [styles.detailLabel, {
1279
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1297
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1280
1298
  }],
1281
1299
  children: "Description:"
1282
1300
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1283
1301
  style: [styles.detailValue, {
1284
- color: textColor
1302
+ color: themeStyles.textColor
1285
1303
  }],
1286
1304
  children: openedFile.metadata.description
1287
1305
  })]
@@ -1289,12 +1307,12 @@ const FileManagementScreen = ({
1289
1307
  style: styles.detailRow,
1290
1308
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1291
1309
  style: [styles.detailLabel, {
1292
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1310
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1293
1311
  }],
1294
1312
  children: "File ID:"
1295
1313
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1296
1314
  style: [styles.detailValue, {
1297
- color: textColor,
1315
+ color: themeStyles.textColor,
1298
1316
  fontSize: 12,
1299
1317
  fontFamily: _reactNative.Platform.OS === 'web' ? 'monospace' : 'Courier'
1300
1318
  }],
@@ -1305,7 +1323,7 @@ const FileManagementScreen = ({
1305
1323
  style: styles.fileDetailsActions,
1306
1324
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1307
1325
  style: [styles.fileDetailsActionButton, {
1308
- backgroundColor: primaryColor
1326
+ backgroundColor: themeStyles.primaryColor
1309
1327
  }],
1310
1328
  onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
1311
1329
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
@@ -1318,7 +1336,7 @@ const FileManagementScreen = ({
1318
1336
  })]
1319
1337
  }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1320
1338
  style: [styles.fileDetailsActionButton, {
1321
- backgroundColor: dangerColor
1339
+ backgroundColor: themeStyles.dangerColor
1322
1340
  }],
1323
1341
  onPress: () => {
1324
1342
  handleCloseFile();
@@ -1341,10 +1359,10 @@ const FileManagementScreen = ({
1341
1359
  style: styles.fileViewerLoading,
1342
1360
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
1343
1361
  size: "large",
1344
- color: primaryColor
1362
+ color: themeStyles.primaryColor
1345
1363
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1346
1364
  style: [styles.fileViewerLoadingText, {
1347
- color: textColor
1365
+ color: themeStyles.textColor
1348
1366
  }],
1349
1367
  children: "Loading file content..."
1350
1368
  })]
@@ -1378,7 +1396,7 @@ const FileManagementScreen = ({
1378
1396
  })
1379
1397
  }) : isText && fileContent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1380
1398
  style: [styles.textContainer, {
1381
- backgroundColor: secondaryBackgroundColor,
1399
+ backgroundColor: themeStyles.secondaryBackgroundColor,
1382
1400
  borderColor
1383
1401
  }],
1384
1402
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
@@ -1388,7 +1406,7 @@ const FileManagementScreen = ({
1388
1406
  nestedScrollEnabled: true,
1389
1407
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1390
1408
  style: [styles.textContent, {
1391
- color: textColor
1409
+ color: themeStyles.textColor
1392
1410
  }],
1393
1411
  children: fileContent
1394
1412
  })
@@ -1420,7 +1438,7 @@ const FileManagementScreen = ({
1420
1438
  }), "Your browser does not support the video tag."]
1421
1439
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1422
1440
  style: [styles.unsupportedText, {
1423
- color: textColor
1441
+ color: themeStyles.textColor
1424
1442
  }],
1425
1443
  children: "Video playback not supported on mobile"
1426
1444
  })
@@ -1438,7 +1456,7 @@ const FileManagementScreen = ({
1438
1456
  }), "Your browser does not support the audio tag."]
1439
1457
  }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1440
1458
  style: [styles.unsupportedText, {
1441
- color: textColor
1459
+ color: themeStyles.textColor
1442
1460
  }],
1443
1461
  children: "Audio playback not supported on mobile"
1444
1462
  })
@@ -1447,20 +1465,20 @@ const FileManagementScreen = ({
1447
1465
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1448
1466
  name: getFileIcon(openedFile.contentType),
1449
1467
  size: 64,
1450
- color: isDarkTheme ? '#666666' : '#CCCCCC'
1468
+ color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
1451
1469
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1452
1470
  style: [styles.unsupportedFileTitle, {
1453
- color: textColor
1471
+ color: themeStyles.textColor
1454
1472
  }],
1455
1473
  children: "Preview Not Available"
1456
1474
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
1457
1475
  style: [styles.unsupportedFileDescription, {
1458
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1476
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1459
1477
  }],
1460
1478
  children: ["This file type cannot be previewed in the browser.", '\n', "Download the file to view its contents."]
1461
1479
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1462
1480
  style: [styles.downloadButtonLarge, {
1463
- backgroundColor: primaryColor
1481
+ backgroundColor: themeStyles.primaryColor
1464
1482
  }],
1465
1483
  onPress: () => handleFileDownload(openedFile.id, openedFile.filename),
1466
1484
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
@@ -1481,20 +1499,20 @@ const FileManagementScreen = ({
1481
1499
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1482
1500
  name: "folder-open-outline",
1483
1501
  size: 64,
1484
- color: isDarkTheme ? '#666666' : '#CCCCCC'
1502
+ color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
1485
1503
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1486
1504
  style: [styles.emptyStateTitle, {
1487
- color: textColor
1505
+ color: themeStyles.textColor
1488
1506
  }],
1489
1507
  children: "No Files Yet"
1490
1508
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1491
1509
  style: [styles.emptyStateDescription, {
1492
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1510
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1493
1511
  }],
1494
1512
  children: user?.id === targetUserId ? `Upload files to get started. You can select multiple files at once${_reactNative.Platform.OS === 'web' ? ' or drag & drop them here.' : '.'}` : "This user hasn't uploaded any files yet"
1495
1513
  }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1496
1514
  style: [styles.emptyStateButton, {
1497
- backgroundColor: primaryColor
1515
+ backgroundColor: themeStyles.primaryColor
1498
1516
  }],
1499
1517
  onPress: handleFileUpload,
1500
1518
  disabled: uploading,
@@ -1520,10 +1538,10 @@ const FileManagementScreen = ({
1520
1538
  }],
1521
1539
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
1522
1540
  size: "large",
1523
- color: primaryColor
1541
+ color: themeStyles.primaryColor
1524
1542
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1525
1543
  style: [styles.loadingText, {
1526
- color: textColor
1544
+ color: themeStyles.textColor
1527
1545
  }],
1528
1546
  children: "Loading files..."
1529
1547
  })]
@@ -1548,37 +1566,37 @@ const FileManagementScreen = ({
1548
1566
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1549
1567
  style: [styles.header, {
1550
1568
  borderBottomColor: borderColor,
1551
- backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1569
+ backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1552
1570
  shadowColor: '#000000',
1553
1571
  shadowOffset: {
1554
1572
  width: 0,
1555
1573
  height: 2
1556
1574
  },
1557
- shadowOpacity: isDarkTheme ? 0.3 : 0.1,
1575
+ shadowOpacity: themeStyles.isDarkTheme ? 0.3 : 0.1,
1558
1576
  shadowRadius: 8,
1559
1577
  elevation: 4
1560
1578
  }],
1561
1579
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1562
1580
  style: [styles.backButton, {
1563
- backgroundColor: isDarkTheme ? '#2A2A2A' : '#F8F9FA',
1581
+ backgroundColor: themeStyles.isDarkTheme ? '#2A2A2A' : '#F8F9FA',
1564
1582
  borderRadius: 12
1565
1583
  }],
1566
1584
  onPress: onClose || goBack,
1567
1585
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1568
1586
  name: "arrow-back",
1569
1587
  size: 22,
1570
- color: textColor
1588
+ color: themeStyles.textColor
1571
1589
  })
1572
1590
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1573
1591
  style: styles.headerTitleContainer,
1574
1592
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1575
1593
  style: [styles.headerTitle, {
1576
- color: textColor
1594
+ color: themeStyles.textColor
1577
1595
  }],
1578
1596
  children: viewMode === 'photos' ? 'Photos' : 'File Management'
1579
1597
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
1580
1598
  style: [styles.headerSubtitle, {
1581
- color: isDarkTheme ? '#AAAAAA' : '#666666'
1599
+ color: themeStyles.isDarkTheme ? '#AAAAAA' : '#666666'
1582
1600
  }],
1583
1601
  children: [filteredFiles.length, " ", filteredFiles.length === 1 ? 'item' : 'items']
1584
1602
  })]
@@ -1586,22 +1604,22 @@ const FileManagementScreen = ({
1586
1604
  style: styles.headerActions,
1587
1605
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1588
1606
  style: [styles.viewModeToggle, {
1589
- backgroundColor: isDarkTheme ? '#2A2A2A' : '#F8F9FA',
1607
+ backgroundColor: themeStyles.isDarkTheme ? '#2A2A2A' : '#F8F9FA',
1590
1608
  borderWidth: 1,
1591
- borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1609
+ borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1592
1610
  shadowColor: '#000000',
1593
1611
  shadowOffset: {
1594
1612
  width: 0,
1595
1613
  height: 1
1596
1614
  },
1597
- shadowOpacity: isDarkTheme ? 0.3 : 0.05,
1615
+ shadowOpacity: themeStyles.isDarkTheme ? 0.3 : 0.05,
1598
1616
  shadowRadius: 4,
1599
1617
  elevation: 2
1600
1618
  }],
1601
1619
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1602
1620
  style: [styles.viewModeButton, viewMode === 'all' && {
1603
- backgroundColor: primaryColor,
1604
- shadowColor: primaryColor,
1621
+ backgroundColor: themeStyles.primaryColor,
1622
+ shadowColor: themeStyles.primaryColor,
1605
1623
  shadowOffset: {
1606
1624
  width: 0,
1607
1625
  height: 2
@@ -1614,12 +1632,12 @@ const FileManagementScreen = ({
1614
1632
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1615
1633
  name: "folder",
1616
1634
  size: 18,
1617
- color: viewMode === 'all' ? '#FFFFFF' : textColor
1635
+ color: viewMode === 'all' ? '#FFFFFF' : themeStyles.textColor
1618
1636
  })
1619
1637
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1620
1638
  style: [styles.viewModeButton, viewMode === 'photos' && {
1621
- backgroundColor: primaryColor,
1622
- shadowColor: primaryColor,
1639
+ backgroundColor: themeStyles.primaryColor,
1640
+ shadowColor: themeStyles.primaryColor,
1623
1641
  shadowOffset: {
1624
1642
  width: 0,
1625
1643
  height: 2
@@ -1632,13 +1650,13 @@ const FileManagementScreen = ({
1632
1650
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1633
1651
  name: "images",
1634
1652
  size: 18,
1635
- color: viewMode === 'photos' ? '#FFFFFF' : textColor
1653
+ color: viewMode === 'photos' ? '#FFFFFF' : themeStyles.textColor
1636
1654
  })
1637
1655
  })]
1638
1656
  }), user?.id === targetUserId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1639
1657
  style: [styles.uploadButton, {
1640
- backgroundColor: primaryColor,
1641
- shadowColor: primaryColor,
1658
+ backgroundColor: themeStyles.primaryColor,
1659
+ shadowColor: themeStyles.primaryColor,
1642
1660
  shadowOffset: {
1643
1661
  width: 0,
1644
1662
  height: 3
@@ -1672,27 +1690,27 @@ const FileManagementScreen = ({
1672
1690
  })]
1673
1691
  }), files.length > 0 && (viewMode === 'all' || files.some(f => f.contentType.startsWith('image/'))) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1674
1692
  style: [styles.searchContainer, {
1675
- backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1676
- borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1693
+ backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1694
+ borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1677
1695
  shadowColor: '#000000',
1678
1696
  shadowOffset: {
1679
1697
  width: 0,
1680
1698
  height: 1
1681
1699
  },
1682
- shadowOpacity: isDarkTheme ? 0.2 : 0.05,
1700
+ shadowOpacity: themeStyles.isDarkTheme ? 0.2 : 0.05,
1683
1701
  shadowRadius: 4,
1684
1702
  elevation: 2
1685
1703
  }],
1686
1704
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1687
1705
  name: "search",
1688
1706
  size: 22,
1689
- color: isDarkTheme ? '#888888' : '#666666'
1707
+ color: themeStyles.isDarkTheme ? '#888888' : '#666666'
1690
1708
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
1691
1709
  style: [styles.searchInput, {
1692
- color: textColor
1710
+ color: themeStyles.textColor
1693
1711
  }],
1694
1712
  placeholder: viewMode === 'photos' ? 'Search photos...' : 'Search files...',
1695
- placeholderTextColor: isDarkTheme ? '#888888' : '#999999',
1713
+ placeholderTextColor: themeStyles.isDarkTheme ? '#888888' : '#999999',
1696
1714
  value: searchQuery,
1697
1715
  onChangeText: setSearchQuery
1698
1716
  }), searchQuery.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
@@ -1701,19 +1719,19 @@ const FileManagementScreen = ({
1701
1719
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1702
1720
  name: "close-circle",
1703
1721
  size: 22,
1704
- color: isDarkTheme ? '#888888' : '#666666'
1722
+ color: themeStyles.isDarkTheme ? '#888888' : '#666666'
1705
1723
  })
1706
1724
  })]
1707
1725
  }), files.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1708
1726
  style: [styles.statsContainer, {
1709
- backgroundColor: isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1710
- borderColor: isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1727
+ backgroundColor: themeStyles.isDarkTheme ? '#1A1A1A' : '#FFFFFF',
1728
+ borderColor: themeStyles.isDarkTheme ? '#3A3A3A' : '#E8E9EA',
1711
1729
  shadowColor: '#000000',
1712
1730
  shadowOffset: {
1713
1731
  width: 0,
1714
1732
  height: 1
1715
1733
  },
1716
- shadowOpacity: isDarkTheme ? 0.2 : 0.05,
1734
+ shadowOpacity: themeStyles.isDarkTheme ? 0.2 : 0.05,
1717
1735
  shadowRadius: 4,
1718
1736
  elevation: 2
1719
1737
  }],
@@ -1721,12 +1739,12 @@ const FileManagementScreen = ({
1721
1739
  style: styles.statItem,
1722
1740
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1723
1741
  style: [styles.statValue, {
1724
- color: textColor
1742
+ color: themeStyles.textColor
1725
1743
  }],
1726
1744
  children: filteredFiles.length
1727
1745
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1728
1746
  style: [styles.statLabel, {
1729
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1747
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1730
1748
  }],
1731
1749
  children: searchQuery.length > 0 ? 'Found' : filteredFiles.length === 1 ? viewMode === 'photos' ? 'Photo' : 'File' : viewMode === 'photos' ? 'Photos' : 'Files'
1732
1750
  })]
@@ -1734,12 +1752,12 @@ const FileManagementScreen = ({
1734
1752
  style: styles.statItem,
1735
1753
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1736
1754
  style: [styles.statValue, {
1737
- color: textColor
1755
+ color: themeStyles.textColor
1738
1756
  }],
1739
1757
  children: formatFileSize(filteredFiles.reduce((total, file) => total + file.length, 0))
1740
1758
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1741
1759
  style: [styles.statLabel, {
1742
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1760
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1743
1761
  }],
1744
1762
  children: searchQuery.length > 0 ? 'Size' : 'Total Size'
1745
1763
  })]
@@ -1747,12 +1765,12 @@ const FileManagementScreen = ({
1747
1765
  style: styles.statItem,
1748
1766
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1749
1767
  style: [styles.statValue, {
1750
- color: textColor
1768
+ color: themeStyles.textColor
1751
1769
  }],
1752
1770
  children: files.length
1753
1771
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1754
1772
  style: [styles.statLabel, {
1755
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1773
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1756
1774
  }],
1757
1775
  children: "Total"
1758
1776
  })]
@@ -1763,27 +1781,27 @@ const FileManagementScreen = ({
1763
1781
  refreshControl: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.RefreshControl, {
1764
1782
  refreshing: refreshing,
1765
1783
  onRefresh: () => loadFiles(true),
1766
- tintColor: primaryColor
1784
+ tintColor: themeStyles.primaryColor
1767
1785
  }),
1768
1786
  children: filteredFiles.length === 0 && searchQuery.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1769
1787
  style: styles.emptyState,
1770
1788
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1771
1789
  name: "search",
1772
1790
  size: 64,
1773
- color: isDarkTheme ? '#666666' : '#CCCCCC'
1791
+ color: themeStyles.isDarkTheme ? '#666666' : '#CCCCCC'
1774
1792
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1775
1793
  style: [styles.emptyStateTitle, {
1776
- color: textColor
1794
+ color: themeStyles.textColor
1777
1795
  }],
1778
1796
  children: "No Results Found"
1779
1797
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
1780
1798
  style: [styles.emptyStateDescription, {
1781
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1799
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1782
1800
  }],
1783
1801
  children: ["No files match your search for \"", searchQuery, "\""]
1784
1802
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
1785
1803
  style: [styles.emptyStateButton, {
1786
- backgroundColor: primaryColor
1804
+ backgroundColor: themeStyles.primaryColor
1787
1805
  }],
1788
1806
  onPress: () => setSearchQuery(''),
1789
1807
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
@@ -1805,15 +1823,15 @@ const FileManagementScreen = ({
1805
1823
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1806
1824
  name: "cloud-upload",
1807
1825
  size: 64,
1808
- color: primaryColor
1826
+ color: themeStyles.primaryColor
1809
1827
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1810
1828
  style: [styles.dragDropTitle, {
1811
- color: primaryColor
1829
+ color: themeStyles.primaryColor
1812
1830
  }],
1813
1831
  children: "Drop files to upload"
1814
1832
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
1815
1833
  style: [styles.dragDropSubtitle, {
1816
- color: isDarkTheme ? '#BBBBBB' : '#666666'
1834
+ color: themeStyles.isDarkTheme ? '#BBBBBB' : '#666666'
1817
1835
  }],
1818
1836
  children: ["Release to upload", uploadProgress ? ` (${uploadProgress.current}/${uploadProgress.total})` : ' multiple files']
1819
1837
  })]