@oxyhq/services 6.9.28 → 6.9.29

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 (47) hide show
  1. package/lib/commonjs/ui/components/SettingsIcon.js +45 -0
  2. package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -0
  3. package/lib/commonjs/ui/components/index.js +7 -0
  4. package/lib/commonjs/ui/components/index.js.map +1 -1
  5. package/lib/commonjs/ui/screens/AccountCenterScreen.js +127 -126
  6. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  7. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +203 -191
  8. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  9. package/lib/commonjs/ui/screens/AppInfoScreen.js +209 -205
  10. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  11. package/lib/commonjs/ui/screens/HelpSupportScreen.js +66 -63
  12. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  13. package/lib/module/ui/components/SettingsIcon.js +40 -0
  14. package/lib/module/ui/components/SettingsIcon.js.map +1 -0
  15. package/lib/module/ui/components/index.js +1 -0
  16. package/lib/module/ui/components/index.js.map +1 -1
  17. package/lib/module/ui/screens/AccountCenterScreen.js +127 -126
  18. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  19. package/lib/module/ui/screens/AccountOverviewScreen.js +204 -192
  20. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  21. package/lib/module/ui/screens/AppInfoScreen.js +210 -206
  22. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  23. package/lib/module/ui/screens/HelpSupportScreen.js +67 -64
  24. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  25. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts +14 -0
  26. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -0
  27. package/lib/typescript/commonjs/ui/components/index.d.ts +1 -0
  28. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  29. package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  33. package/lib/typescript/module/ui/components/SettingsIcon.d.ts +14 -0
  34. package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -0
  35. package/lib/typescript/module/ui/components/index.d.ts +1 -0
  36. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  37. package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  38. package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  39. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  40. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  41. package/package.json +2 -2
  42. package/src/ui/components/SettingsIcon.tsx +43 -0
  43. package/src/ui/components/index.ts +1 -0
  44. package/src/ui/screens/AccountCenterScreen.tsx +97 -145
  45. package/src/ui/screens/AccountOverviewScreen.tsx +154 -220
  46. package/src/ui/screens/AppInfoScreen.tsx +177 -248
  47. package/src/ui/screens/HelpSupportScreen.tsx +53 -76
@@ -21,6 +21,7 @@ import { toast } from '../../lib/sonner';
21
21
  import { confirmAction } from '../utils/confirmAction';
22
22
  import { Ionicons } from '@expo/vector-icons';
23
23
  import { Section, GroupedSection, GroupedItem } from '../components';
24
+ import { SettingsIcon } from '../components/SettingsIcon';
24
25
  import { useI18n } from '../hooks/useI18n';
25
26
  import { useThemeStyles } from '../hooks/useThemeStyles';
26
27
  import { getDisplayName, getShortDisplayName } from '../utils/userUtils';
@@ -35,6 +36,7 @@ import {
35
36
  createScreenContentStyle,
36
37
  } from '../constants/spacing';
37
38
  import { DeleteAccountModal } from '../components/modals';
39
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
38
40
 
39
41
  // Optional Lottie import - gracefully handle if not available
40
42
  let LottieView: any = null;
@@ -56,13 +58,13 @@ try {
56
58
 
57
59
  /**
58
60
  * AccountOverviewScreen - Optimized for performance
59
- *
61
+ *
60
62
  * Performance optimizations implemented:
61
63
  * - useMemo for theme calculations (only recalculates when theme changes)
62
64
  * - useMemo for additional accounts filtering (only recalculates when dependencies change)
63
65
  * - useCallback for event handlers to prevent unnecessary re-renders
64
66
  * - React.memo wrapper to prevent re-renders when props haven't changed
65
- * - GroupedSection components for better organization and cleaner code
67
+ * - SettingsListGroup/SettingsListItem from bloom for consistent grouped list rendering
66
68
  */
67
69
  const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
68
70
  onClose,
@@ -139,8 +141,8 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
139
141
 
140
142
  // Load user profiles for additional accounts using TanStack Query
141
143
  const sessionIds = additionalAccounts.map(s => s.sessionId);
142
- const { data: usersData, isLoading: isLoadingUsers } = useUsersBySessions(sessionIds, {
143
- enabled: additionalAccounts.length > 0
144
+ const { data: usersData, isLoading: isLoadingUsers } = useUsersBySessions(sessionIds, {
145
+ enabled: additionalAccounts.length > 0
144
146
  });
145
147
 
146
148
  React.useEffect(() => {
@@ -380,71 +382,52 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
380
382
  )}
381
383
 
382
384
  {/* User Profile Section */}
383
- <Section title={t('accountOverview.sections.profile')} isFirst={true}>
384
- <GroupedSection
385
- items={[
386
- {
387
- id: 'profile-info',
388
- icon: 'account',
389
- iconColor: baseThemeStyles.colors.iconSecurity,
390
- title: displayName,
391
- subtitle: user ? (user.email || user.username) : (t('common.status.loading') || 'Loading...'),
392
- onPress: () => navigate?.('AccountSettings', { activeTab: 'profile' }),
393
- },
394
- ]}
385
+ <SettingsListGroup title={t('accountOverview.sections.profile')}>
386
+ <SettingsListItem
387
+ icon={<SettingsIcon name="account" color={baseThemeStyles.colors.iconSecurity} />}
388
+ title={displayName}
389
+ description={user ? (user.email || user.username) : (t('common.status.loading') || 'Loading...')}
390
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'profile' })}
395
391
  />
396
- </Section>
392
+ </SettingsListGroup>
397
393
 
398
394
  {/* Account Settings */}
399
- <Section title={t('accountOverview.sections.accountSettings')} >
400
- <GroupedSection
401
- items={[
402
- {
403
- id: 'edit-profile',
404
- icon: 'account-circle',
405
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
406
- title: t('accountOverview.items.editProfile.title'),
407
- subtitle: t('accountOverview.items.editProfile.subtitle'),
408
- onPress: () => navigate?.('AccountSettings', { activeTab: 'profile' }),
409
- },
410
- {
411
- id: 'security-privacy',
412
- icon: 'shield-check',
413
- iconColor: baseThemeStyles.colors.iconSecurity,
414
- title: t('accountOverview.items.security.title'),
415
- subtitle: t('accountOverview.items.security.subtitle'),
416
- onPress: () => navigate?.('AccountSettings', { activeTab: 'password' }),
417
- },
418
- {
419
- id: 'notifications',
420
- icon: 'bell',
421
- iconColor: baseThemeStyles.colors.iconStorage,
422
- title: t('accountOverview.items.notifications.title'),
423
- subtitle: t('accountOverview.items.notifications.subtitle'),
424
- onPress: () => navigate?.('AccountSettings', { activeTab: 'notifications' }),
425
- },
426
- {
427
- id: 'premium-subscription',
428
- icon: 'star',
429
- iconColor: baseThemeStyles.colors.iconPayments,
430
- title: t('accountOverview.items.premium.title'),
431
- subtitle: user?.isPremium ? t('accountOverview.items.premium.manage') : t('accountOverview.items.premium.upgrade'),
432
- onPress: () => navigate?.('PremiumSubscription'),
433
- },
434
- ...(user?.isPremium ? [{
435
- id: 'billing-management',
436
- icon: 'card',
437
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
438
- title: t('accountOverview.items.billing.title'),
439
- subtitle: t('accountOverview.items.billing.subtitle'),
440
- onPress: () => toast.info(t('accountOverview.items.billing.coming')),
441
- }] : []),
442
- ]}
443
-
395
+ <SettingsListGroup title={t('accountOverview.sections.accountSettings')}>
396
+ <SettingsListItem
397
+ icon={<SettingsIcon name="account-circle" color={baseThemeStyles.colors.iconPersonalInfo} />}
398
+ title={t('accountOverview.items.editProfile.title')}
399
+ description={t('accountOverview.items.editProfile.subtitle')}
400
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'profile' })}
401
+ />
402
+ <SettingsListItem
403
+ icon={<SettingsIcon name="shield-check" color={baseThemeStyles.colors.iconSecurity} />}
404
+ title={t('accountOverview.items.security.title')}
405
+ description={t('accountOverview.items.security.subtitle')}
406
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'password' })}
407
+ />
408
+ <SettingsListItem
409
+ icon={<SettingsIcon name="bell" color={baseThemeStyles.colors.iconStorage} />}
410
+ title={t('accountOverview.items.notifications.title')}
411
+ description={t('accountOverview.items.notifications.subtitle')}
412
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'notifications' })}
444
413
  />
445
- </Section>
414
+ <SettingsListItem
415
+ icon={<SettingsIcon name="star" color={baseThemeStyles.colors.iconPayments} />}
416
+ title={t('accountOverview.items.premium.title')}
417
+ description={user?.isPremium ? t('accountOverview.items.premium.manage') : t('accountOverview.items.premium.upgrade')}
418
+ onPress={() => navigate?.('PremiumSubscription')}
419
+ />
420
+ {user?.isPremium ? (
421
+ <SettingsListItem
422
+ icon={<SettingsIcon name="credit-card" color={baseThemeStyles.colors.iconPersonalInfo} />}
423
+ title={t('accountOverview.items.billing.title')}
424
+ description={t('accountOverview.items.billing.subtitle')}
425
+ onPress={() => toast.info(t('accountOverview.items.billing.coming'))}
426
+ />
427
+ ) : null}
428
+ </SettingsListGroup>
446
429
 
447
- {/* Additional Accounts */}
430
+ {/* Additional Accounts - kept with GroupedSection due to custom avatar content */}
448
431
  {showMoreAccounts && (
449
432
  <Section title={`${t('accountOverview.sections.additionalAccounts') || 'Additional Accounts'}${additionalAccountsData.length > 0 ? ` (${additionalAccountsData.length})` : ''}`} >
450
433
  {loadingAdditionalAccounts ? (
@@ -520,175 +503,127 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
520
503
 
521
504
  {/* Account Management */}
522
505
  {showMoreAccounts && (
523
- <Section title={t('accountOverview.sections.accountManagement') || 'Account Management'} >
524
- <GroupedSection
525
- items={[
526
- {
527
- id: 'add-account',
528
- icon: 'add',
529
- iconColor: baseThemeStyles.colors.iconSecurity,
530
- title: t('accountOverview.items.addAccount.title') || 'Add Another Account',
531
- subtitle: t('accountOverview.items.addAccount.subtitle') || 'Sign in with a different account',
532
- onPress: handleAddAccount,
533
- },
534
- {
535
- id: 'sign-out-all',
536
- icon: 'logout',
537
- iconColor: baseThemeStyles.colors.iconSharing,
538
- title: t('accountOverview.items.signOutAll.title') || 'Sign out of all accounts',
539
- subtitle: t('accountOverview.items.signOutAll.subtitle') || 'Remove all accounts from this device',
540
- onPress: handleSignOutAll,
541
- },
542
- ]}
543
-
506
+ <SettingsListGroup title={t('accountOverview.sections.accountManagement') || 'Account Management'}>
507
+ <SettingsListItem
508
+ icon={<SettingsIcon name="plus" color={baseThemeStyles.colors.iconSecurity} />}
509
+ title={t('accountOverview.items.addAccount.title') || 'Add Another Account'}
510
+ description={t('accountOverview.items.addAccount.subtitle') || 'Sign in with a different account'}
511
+ onPress={handleAddAccount}
544
512
  />
545
- </Section>
513
+ <SettingsListItem
514
+ icon={<SettingsIcon name="logout" color={baseThemeStyles.colors.iconSharing} />}
515
+ title={t('accountOverview.items.signOutAll.title') || 'Sign out of all accounts'}
516
+ description={t('accountOverview.items.signOutAll.subtitle') || 'Remove all accounts from this device'}
517
+ onPress={handleSignOutAll}
518
+ />
519
+ </SettingsListGroup>
546
520
  )}
547
521
 
548
522
  {/* Quick Actions */}
549
- <Section title={t('accountOverview.sections.quickActions')} >
550
- <GroupedSection
551
- items={[
552
- {
553
- id: 'account-switcher',
554
- icon: 'account-group',
555
- iconColor: baseThemeStyles.colors.iconData,
556
- title: showMoreAccounts
557
- ? t('accountOverview.items.accountSwitcher.titleHide')
558
- : t('accountOverview.items.accountSwitcher.titleShow'),
559
- subtitle: showMoreAccounts
560
- ? t('accountOverview.items.accountSwitcher.subtitleHide')
561
- : additionalAccountsData.length > 0
562
- ? t('accountOverview.items.accountSwitcher.subtitleSwitchBetween', { count: String(additionalAccountsData.length + 1) })
563
- : loadingAdditionalAccounts
564
- ? t('accountOverview.items.accountSwitcher.subtitleLoading')
565
- : t('accountOverview.items.accountSwitcher.subtitleManageMultiple'),
566
- onPress: () => setShowMoreAccounts(!showMoreAccounts),
567
- },
568
- {
569
- id: 'history-view',
570
- icon: 'clock',
571
- iconColor: baseThemeStyles.colors.iconSecurity,
572
- title: t('accountOverview.items.history.title') || 'History',
573
- subtitle: t('accountOverview.items.history.subtitle') || 'View and manage your search history',
574
- onPress: () => navigate?.('HistoryView'),
575
- },
576
- {
577
- id: 'saves-collections',
578
- icon: 'bookmark',
579
- iconColor: baseThemeStyles.colors.iconStorage,
580
- title: t('accountOverview.items.saves.title') || 'Saves & Collections',
581
- subtitle: t('accountOverview.items.saves.subtitle') || 'View your saved items and collections',
582
- onPress: () => navigate?.('SavesCollections'),
583
- },
584
- {
585
- id: 'download-data',
586
- icon: 'download',
587
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
588
- title: t('accountOverview.items.downloadData.title'),
589
- subtitle: t('accountOverview.items.downloadData.subtitle'),
590
- onPress: handleDownloadData,
591
- },
592
- {
593
- id: 'delete-account',
594
- icon: 'delete',
595
- iconColor: baseThemeStyles.colors.iconSharing,
596
- title: t('accountOverview.items.deleteAccount.title'),
597
- subtitle: t('accountOverview.items.deleteAccount.subtitle'),
598
- onPress: handleDeleteAccount,
599
- },
600
- ]}
601
-
523
+ <SettingsListGroup title={t('accountOverview.sections.quickActions')}>
524
+ <SettingsListItem
525
+ icon={<SettingsIcon name="account-group" color={baseThemeStyles.colors.iconData} />}
526
+ title={showMoreAccounts
527
+ ? t('accountOverview.items.accountSwitcher.titleHide')
528
+ : t('accountOverview.items.accountSwitcher.titleShow')}
529
+ description={showMoreAccounts
530
+ ? t('accountOverview.items.accountSwitcher.subtitleHide')
531
+ : additionalAccountsData.length > 0
532
+ ? t('accountOverview.items.accountSwitcher.subtitleSwitchBetween', { count: String(additionalAccountsData.length + 1) })
533
+ : loadingAdditionalAccounts
534
+ ? t('accountOverview.items.accountSwitcher.subtitleLoading')
535
+ : t('accountOverview.items.accountSwitcher.subtitleManageMultiple')}
536
+ onPress={() => setShowMoreAccounts(!showMoreAccounts)}
537
+ />
538
+ <SettingsListItem
539
+ icon={<SettingsIcon name="clock" color={baseThemeStyles.colors.iconSecurity} />}
540
+ title={t('accountOverview.items.history.title') || 'History'}
541
+ description={t('accountOverview.items.history.subtitle') || 'View and manage your search history'}
542
+ onPress={() => navigate?.('HistoryView')}
543
+ />
544
+ <SettingsListItem
545
+ icon={<SettingsIcon name="bookmark" color={baseThemeStyles.colors.iconStorage} />}
546
+ title={t('accountOverview.items.saves.title') || 'Saves & Collections'}
547
+ description={t('accountOverview.items.saves.subtitle') || 'View your saved items and collections'}
548
+ onPress={() => navigate?.('SavesCollections')}
602
549
  />
603
- </Section>
550
+ <SettingsListItem
551
+ icon={<SettingsIcon name="download" color={baseThemeStyles.colors.iconPersonalInfo} />}
552
+ title={t('accountOverview.items.downloadData.title')}
553
+ description={t('accountOverview.items.downloadData.subtitle')}
554
+ onPress={handleDownloadData}
555
+ />
556
+ <SettingsListItem
557
+ icon={<SettingsIcon name="delete" color={baseThemeStyles.colors.iconSharing} />}
558
+ title={t('accountOverview.items.deleteAccount.title')}
559
+ description={t('accountOverview.items.deleteAccount.subtitle')}
560
+ onPress={handleDeleteAccount}
561
+ />
562
+ </SettingsListGroup>
604
563
 
605
564
  {/* Support & Settings */}
606
- <Section title={t('accountOverview.sections.support')} >
607
- <GroupedSection
608
- items={[
609
- {
610
- id: 'search-settings',
611
- icon: 'magnify',
612
- iconColor: baseThemeStyles.colors.iconSecurity,
613
- title: t('accountOverview.items.searchSettings.title') || 'Search Settings',
614
- subtitle: t('accountOverview.items.searchSettings.subtitle') || 'SafeSearch and personalization',
615
- onPress: () => navigate?.('SearchSettings'),
616
- },
617
- {
618
- id: 'language-settings',
619
- icon: 'translate',
620
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
621
- title: t('accountOverview.items.language.title') || 'Language',
622
- subtitle: t('accountOverview.items.language.subtitle') || 'Choose your preferred language',
623
- onPress: () => navigate?.('LanguageSelector'),
624
- },
625
- {
626
- id: 'account-preferences',
627
- icon: 'cog',
628
- iconColor: '#8E8E93',
629
- title: t('accountOverview.items.preferences.title'),
630
- subtitle: t('accountOverview.items.preferences.subtitle'),
631
- onPress: () => toast.info(t('accountOverview.items.preferences.coming')),
632
- },
633
- {
634
- id: 'help-support',
635
- icon: 'help-circle',
636
- iconColor: baseThemeStyles.colors.iconSecurity,
637
- title: t('accountOverview.items.help.title'),
638
- subtitle: t('accountOverview.items.help.subtitle'),
639
- onPress: () => navigate?.('HelpSupport'),
640
- },
641
- {
642
- id: 'privacy-policy',
643
- icon: 'shield-check',
644
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
645
- title: t('accountOverview.items.privacyPolicy.title') || 'Privacy Policy',
646
- subtitle: t('accountOverview.items.privacyPolicy.subtitle') || 'How we handle your data',
647
- onPress: () => navigate?.('LegalDocuments', { initialStep: 1 }),
648
- },
649
- {
650
- id: 'terms-of-service',
651
- icon: 'file-document',
652
- iconColor: baseThemeStyles.colors.iconSecurity,
653
- title: t('accountOverview.items.termsOfService.title') || 'Terms of Service',
654
- subtitle: t('accountOverview.items.termsOfService.subtitle') || 'Terms and conditions of use',
655
- onPress: () => navigate?.('LegalDocuments', { initialStep: 2 }),
656
- },
657
- {
658
- id: 'connected-apps',
659
- icon: 'link',
660
- iconColor: baseThemeStyles.colors.iconPersonalInfo,
661
- title: t('accountOverview.items.connectedApps.title'),
662
- subtitle: t('accountOverview.items.connectedApps.subtitle'),
663
- onPress: () => toast.info(t('accountOverview.items.connectedApps.coming')),
664
- },
665
- {
666
- id: 'about',
667
- icon: 'information',
668
- iconColor: '#8E8E93',
669
- title: t('accountOverview.items.about.title'),
670
- subtitle: t('accountOverview.items.about.subtitle'),
671
- onPress: () => navigate?.('AppInfo'),
672
- },
673
- ]}
674
-
565
+ <SettingsListGroup title={t('accountOverview.sections.support')}>
566
+ <SettingsListItem
567
+ icon={<SettingsIcon name="magnify" color={baseThemeStyles.colors.iconSecurity} />}
568
+ title={t('accountOverview.items.searchSettings.title') || 'Search Settings'}
569
+ description={t('accountOverview.items.searchSettings.subtitle') || 'SafeSearch and personalization'}
570
+ onPress={() => navigate?.('SearchSettings')}
571
+ />
572
+ <SettingsListItem
573
+ icon={<SettingsIcon name="translate" color={baseThemeStyles.colors.iconPersonalInfo} />}
574
+ title={t('accountOverview.items.language.title') || 'Language'}
575
+ description={t('accountOverview.items.language.subtitle') || 'Choose your preferred language'}
576
+ onPress={() => navigate?.('LanguageSelector')}
577
+ />
578
+ <SettingsListItem
579
+ icon={<SettingsIcon name="cog" color="#8E8E93" />}
580
+ title={t('accountOverview.items.preferences.title')}
581
+ description={t('accountOverview.items.preferences.subtitle')}
582
+ onPress={() => toast.info(t('accountOverview.items.preferences.coming'))}
583
+ />
584
+ <SettingsListItem
585
+ icon={<SettingsIcon name="help-circle" color={baseThemeStyles.colors.iconSecurity} />}
586
+ title={t('accountOverview.items.help.title')}
587
+ description={t('accountOverview.items.help.subtitle')}
588
+ onPress={() => navigate?.('HelpSupport')}
675
589
  />
676
- </Section>
590
+ <SettingsListItem
591
+ icon={<SettingsIcon name="shield-check" color={baseThemeStyles.colors.iconPersonalInfo} />}
592
+ title={t('accountOverview.items.privacyPolicy.title') || 'Privacy Policy'}
593
+ description={t('accountOverview.items.privacyPolicy.subtitle') || 'How we handle your data'}
594
+ onPress={() => navigate?.('LegalDocuments', { initialStep: 1 })}
595
+ />
596
+ <SettingsListItem
597
+ icon={<SettingsIcon name="file-document" color={baseThemeStyles.colors.iconSecurity} />}
598
+ title={t('accountOverview.items.termsOfService.title') || 'Terms of Service'}
599
+ description={t('accountOverview.items.termsOfService.subtitle') || 'Terms and conditions of use'}
600
+ onPress={() => navigate?.('LegalDocuments', { initialStep: 2 })}
601
+ />
602
+ <SettingsListItem
603
+ icon={<SettingsIcon name="link" color={baseThemeStyles.colors.iconPersonalInfo} />}
604
+ title={t('accountOverview.items.connectedApps.title')}
605
+ description={t('accountOverview.items.connectedApps.subtitle')}
606
+ onPress={() => toast.info(t('accountOverview.items.connectedApps.coming'))}
607
+ />
608
+ <SettingsListItem
609
+ icon={<SettingsIcon name="information" color="#8E8E93" />}
610
+ title={t('accountOverview.items.about.title')}
611
+ description={t('accountOverview.items.about.subtitle')}
612
+ onPress={() => navigate?.('AppInfo')}
613
+ />
614
+ </SettingsListGroup>
677
615
 
678
616
  {/* Sign Out */}
679
- <Section title={t('accountOverview.sections.actions')} >
680
- <GroupedItem
681
- icon="logout"
682
- iconColor="#FF3B30"
617
+ <SettingsListGroup title={t('accountOverview.sections.actions')}>
618
+ <SettingsListItem
619
+ icon={<SettingsIcon name="logout" color="#FF3B30" />}
683
620
  title={t('accountOverview.items.signOut.title')}
684
- subtitle={t('accountOverview.items.signOut.subtitle')}
685
-
621
+ description={t('accountOverview.items.signOut.subtitle')}
686
622
  onPress={confirmLogout}
687
- isFirst={true}
688
- isLast={true}
623
+ destructive={true}
689
624
  showChevron={false}
690
625
  />
691
- </Section>
626
+ </SettingsListGroup>
692
627
  </ScrollView>
693
628
 
694
629
  {/* Delete Account Modal */}
@@ -781,7 +716,6 @@ const styles = StyleSheet.create({
781
716
  paddingHorizontal: 16,
782
717
  paddingVertical: 8,
783
718
  borderRadius: 16,
784
- // backgroundColor should be applied inline using colors.iconSecurity
785
719
  },
786
720
  manageButtonText: {
787
721
  color: '#fff',