@oxyhq/services 29.0.0 → 30.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/lib/commonjs/ui/components/FollowTargetButton.js +14 -26
  2. package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
  3. package/lib/commonjs/ui/components/OxyAuthChooser.js +2 -2
  4. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  5. package/lib/commonjs/ui/components/OxyConsentScreen.js +7 -2
  6. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  7. package/lib/commonjs/ui/components/OxyProvider.js +19 -22
  8. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  9. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +28 -12
  10. package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
  11. package/lib/commonjs/ui/screens/AccountMembersScreen.js +2 -2
  12. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  13. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1 -1
  14. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  15. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
  16. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  17. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +1 -1
  18. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
  19. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +1 -1
  20. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  21. package/lib/commonjs/ui/screens/FileManagementScreen.js +2 -2
  22. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  23. package/lib/commonjs/ui/screens/HistoryViewScreen.js +2 -2
  24. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  25. package/lib/commonjs/ui/screens/ManageAccountScreen.js +3 -3
  26. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  27. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +2 -2
  28. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  29. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +2 -2
  30. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  31. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  32. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  33. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +1 -1
  34. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  35. package/lib/module/ui/components/FollowTargetButton.js +14 -26
  36. package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
  37. package/lib/module/ui/components/OxyAuthChooser.js +2 -2
  38. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  39. package/lib/module/ui/components/OxyConsentScreen.js +7 -2
  40. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  41. package/lib/module/ui/components/OxyProvider.js +19 -22
  42. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  43. package/lib/module/ui/components/authChooser/TroubleDisclosure.js +29 -13
  44. package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
  45. package/lib/module/ui/screens/AccountMembersScreen.js +2 -2
  46. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  47. package/lib/module/ui/screens/AccountSettingsScreen.js +1 -1
  48. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  49. package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
  50. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  51. package/lib/module/ui/screens/ChangeAvatarScreen.js +1 -1
  52. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
  53. package/lib/module/ui/screens/ConnectedAppsScreen.js +1 -1
  54. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  55. package/lib/module/ui/screens/FileManagementScreen.js +2 -2
  56. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  57. package/lib/module/ui/screens/HistoryViewScreen.js +2 -2
  58. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  59. package/lib/module/ui/screens/ManageAccountScreen.js +3 -3
  60. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  61. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +2 -2
  62. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  63. package/lib/module/ui/screens/trust/TrustCenterScreen.js +2 -2
  64. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  65. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
  66. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  67. package/lib/module/ui/screens/trust/TrustRulesScreen.js +1 -1
  68. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  69. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts +2 -2
  70. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
  71. package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
  72. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  73. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +7 -5
  74. package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
  75. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts +2 -2
  76. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -1
  77. package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
  78. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  79. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +7 -5
  80. package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
  81. package/package.json +4 -3
  82. package/src/ui/components/FollowTargetButton.tsx +31 -27
  83. package/src/ui/components/OxyAuthChooser.tsx +2 -2
  84. package/src/ui/components/OxyConsentScreen.tsx +7 -2
  85. package/src/ui/components/OxyProvider.tsx +23 -26
  86. package/src/ui/components/authChooser/TroubleDisclosure.tsx +26 -11
  87. package/src/ui/screens/AccountMembersScreen.tsx +2 -2
  88. package/src/ui/screens/AccountSettingsScreen.tsx +1 -1
  89. package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
  90. package/src/ui/screens/ChangeAvatarScreen.tsx +1 -1
  91. package/src/ui/screens/ConnectedAppsScreen.tsx +1 -1
  92. package/src/ui/screens/FileManagementScreen.tsx +2 -2
  93. package/src/ui/screens/HistoryViewScreen.tsx +2 -2
  94. package/src/ui/screens/ManageAccountScreen.tsx +3 -3
  95. package/src/ui/screens/PremiumSubscriptionScreen.tsx +2 -2
  96. package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
  97. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
  98. package/src/ui/screens/trust/TrustRulesScreen.tsx +1 -1
@@ -286,7 +286,7 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({
286
286
  if (!group || !context) return;
287
287
  const confirmed = await surfaces.confirm({
288
288
  title: t('accountSwitcher.confirms.removeContextTitle'),
289
- message: t('accountSwitcher.confirms.removeContext', {
289
+ description: t('accountSwitcher.confirms.removeContext', {
290
290
  person: group.displayName,
291
291
  account: context.displayName,
292
292
  }),
@@ -313,7 +313,7 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({
313
313
  if (!group) return;
314
314
  const confirmed = await surfaces.confirm({
315
315
  title: t('accountSwitcher.confirms.removePrincipalTitle'),
316
- message: t('accountSwitcher.confirms.removePrincipal', { name: group.displayName }),
316
+ description: t('accountSwitcher.confirms.removePrincipal', { name: group.displayName }),
317
317
  confirmLabel: t('common.actions.signOut'),
318
318
  cancelLabel: t('common.cancel'),
319
319
  destructive: true,
@@ -96,8 +96,13 @@ const SCOPE_LABEL_KEYS: Readonly<Record<string, string>> = {
96
96
  'files:write': 'consent.scopes.filesWrite',
97
97
  'files:delete': 'consent.scopes.filesDelete',
98
98
  'webhooks:receive': 'consent.scopes.webhooksReceive',
99
- 'chat:completions': 'consent.scopes.chatCompletions',
100
- 'models:read': 'consent.scopes.modelsRead',
99
+ 'inference:invoke': 'consent.scopes.inferenceInvoke',
100
+ 'inference:models:read': 'consent.scopes.inferenceModelsRead',
101
+ 'inference:usage:read': 'consent.scopes.inferenceUsageRead',
102
+ 'inference:routing:read': 'consent.scopes.inferenceRoutingRead',
103
+ 'inference:routing:write': 'consent.scopes.inferenceRoutingWrite',
104
+ 'inference:providers:read': 'consent.scopes.inferenceProvidersRead',
105
+ 'inference:providers:write': 'consent.scopes.inferenceProvidersWrite',
101
106
  'federation:write': 'consent.scopes.federationWrite',
102
107
  };
103
108
 
@@ -5,7 +5,6 @@ import { SafeAreaProvider } from 'react-native-safe-area-context';
5
5
  import type { OxyProviderProps } from '../types/navigation';
6
6
  import { OxyRuntimeProvider, type OxyRuntimeProviderProps } from '../context/OxyContext';
7
7
  import { QueryClientProvider, focusManager, onlineManager } from '@tanstack/react-query';
8
- import { BloomDialogProvider } from '@oxyhq/bloom/dialog';
9
8
  import { SurfaceProvider } from '@oxyhq/bloom/surfaces';
10
9
  import { ToastOutlet } from '@oxyhq/bloom/toast';
11
10
  import { logger as loggerUtil } from '@oxyhq/core';
@@ -284,31 +283,29 @@ const OxyProvider: FC<OxyProviderProps> = ({
284
283
  // duplicate scope that silently shadows the consumer's configuration.
285
284
  const coreContent = (
286
285
  <QueryClientProvider client={queryClient}>
287
- <BloomDialogProvider>
288
- <OxyRuntimeProvider
289
- oxyServices={oxyServices as OxyRuntimeProviderProps['oxyServices']}
290
- baseURL={baseURL}
291
- authWebUrl={authWebUrl}
292
- authRedirectUri={authRedirectUri}
293
- authorizeBaseUrl={authorizeBaseUrl}
294
- storageKeyPrefix={storageKeyPrefix}
295
- clientId={clientId}
296
- sessionMode={sessionMode}
297
- webAuthMode={webAuthMode}
298
- backgroundSession={backgroundSession}
299
- deviceCredentialStorage={deviceCredentialStorage}
300
- onAuthStateChange={onAuthStateChange as OxyRuntimeProviderProps['onAuthStateChange']}
301
- >
302
- <SurfaceProvider>
303
- {requireAuth === 'off' ? (
304
- children
305
- ) : (
306
- <RequireOxyAuth prompt={requireAuth}>{children}</RequireOxyAuth>
307
- )}
308
- </SurfaceProvider>
309
- <ToastOutlet />
310
- </OxyRuntimeProvider>
311
- </BloomDialogProvider>
286
+ <OxyRuntimeProvider
287
+ oxyServices={oxyServices as OxyRuntimeProviderProps['oxyServices']}
288
+ baseURL={baseURL}
289
+ authWebUrl={authWebUrl}
290
+ authRedirectUri={authRedirectUri}
291
+ authorizeBaseUrl={authorizeBaseUrl}
292
+ storageKeyPrefix={storageKeyPrefix}
293
+ clientId={clientId}
294
+ sessionMode={sessionMode}
295
+ webAuthMode={webAuthMode}
296
+ backgroundSession={backgroundSession}
297
+ deviceCredentialStorage={deviceCredentialStorage}
298
+ onAuthStateChange={onAuthStateChange as OxyRuntimeProviderProps['onAuthStateChange']}
299
+ >
300
+ <SurfaceProvider>
301
+ {requireAuth === 'off' ? (
302
+ children
303
+ ) : (
304
+ <RequireOxyAuth prompt={requireAuth}>{children}</RequireOxyAuth>
305
+ )}
306
+ </SurfaceProvider>
307
+ <ToastOutlet />
308
+ </OxyRuntimeProvider>
312
309
  </QueryClientProvider>
313
310
  );
314
311
 
@@ -6,21 +6,24 @@
6
6
  * creating an account — lives here, hidden until the user asks for it or the
7
7
  * chosen primary route fails.
8
8
  *
9
- * Two renderings, deliberately not one controlled component:
9
+ * Two renderings:
10
10
  * - `revealed` (the primary route failed, or there IS no primary route): the
11
11
  * alternatives ARE the surface's content now, so they render plainly. There
12
12
  * is nothing left to hide them behind.
13
- * - otherwise: Bloom's own `Collapsible`, whose trigger is the small
13
+ * - otherwise: a single-item Bloom `Accordion`, whose trigger is the small
14
14
  * "Having trouble?" affordance.
15
15
  *
16
- * Splitting on `revealed` is what keeps the open state where it belongs inside
17
- * Bloom's uncontrolled disclosureinstead of forcing a hand-rolled controlled
18
- * copy of it here.
16
+ * The disclosure is CONTROLLED because Bloom 1.0.0's `Accordion`which
17
+ * replaced the deleted `Collapsible` takes `value`/`onValueChange` and has no
18
+ * uncontrolled mode. Splitting on `revealed` still matters: it decides whether
19
+ * a disclosure exists at all, so the open state below only ever describes the
20
+ * collapsed rendering.
19
21
  */
20
22
 
21
23
  import type React from 'react';
24
+ import { useState } from 'react';
22
25
  import { View } from 'react-native';
23
- import { Collapsible } from '@oxyhq/bloom/collapsible';
26
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@oxyhq/bloom/accordion';
24
27
  import { SubtleLink } from './primitives';
25
28
  import { authChooserStyles as styles } from './styles';
26
29
  import type { OxySignInSurfaceAction, Theme, Translate } from './types';
@@ -38,7 +41,13 @@ interface TroubleDisclosureProps {
38
41
  t: Translate;
39
42
  }
40
43
 
44
+ /** The accordion's single item. Its identity is never shown to the user. */
45
+ const TROUBLE_ITEM = 'trouble';
46
+
41
47
  const TroubleDisclosure: React.FC<TroubleDisclosureProps> = ({ actions, revealed, theme, t }) => {
48
+ // Declared above the early return: hooks may not sit behind a conditional.
49
+ const [openItem, setOpenItem] = useState<string | string[] | undefined>(undefined);
50
+
42
51
  if (actions.length === 0) return null;
43
52
 
44
53
  const links = (
@@ -59,14 +68,20 @@ const TroubleDisclosure: React.FC<TroubleDisclosureProps> = ({ actions, revealed
59
68
  if (revealed) return links;
60
69
 
61
70
  return (
62
- <Collapsible
63
- title={t('accountSwitcher.havingTrouble')}
71
+ <Accordion
72
+ type="single"
73
+ value={openItem}
74
+ onValueChange={setOpenItem}
64
75
  style={styles.troubleTrigger}
65
- titleStyle={[styles.linkText, { color: theme.colors.textSecondary }]}
66
76
  testID="trouble-disclosure"
67
77
  >
68
- {links}
69
- </Collapsible>
78
+ <AccordionItem value={TROUBLE_ITEM}>
79
+ <AccordionTrigger textStyle={[styles.linkText, { color: theme.colors.textSecondary }]}>
80
+ {t('accountSwitcher.havingTrouble')}
81
+ </AccordionTrigger>
82
+ <AccordionContent>{links}</AccordionContent>
83
+ </AccordionItem>
84
+ </Accordion>
70
85
  );
71
86
  };
72
87
 
@@ -218,7 +218,7 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
218
218
  const confirmRemove = useCallback(async (member: AccountMember) => {
219
219
  const confirmed = await surfaces.confirm({
220
220
  title: t('accounts.members.removeConfirm.title') || 'Remove member',
221
- message:
221
+ description:
222
222
  t('accounts.members.removeConfirm.description')
223
223
  || 'Remove this member from the account? They will lose all access.',
224
224
  confirmLabel: t('accounts.members.actions.remove') || 'Remove',
@@ -231,7 +231,7 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
231
231
  const confirmTransfer = useCallback(async (member: AccountMember) => {
232
232
  const confirmed = await surfaces.confirm({
233
233
  title: t('accounts.members.transferConfirm.title') || 'Transfer ownership',
234
- message:
234
+ description:
235
235
  t('accounts.members.transferConfirm.description')
236
236
  || 'Transfer ownership of this account to this member? You will be demoted to admin. This cannot be undone.',
237
237
  confirmLabel: t('accounts.members.actions.transfer') || 'Transfer ownership',
@@ -120,7 +120,7 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
120
120
  const handleArchive = useCallback(async () => {
121
121
  const confirmed = await surfaces.confirm({
122
122
  title: t('accounts.settings.archive.confirmTitle') || 'Archive account',
123
- message:
123
+ description:
124
124
  t('accounts.settings.archive.confirmDescription')
125
125
  || 'Archive this account? It will be deactivated and its members will lose access.',
126
126
  confirmLabel: t('accounts.settings.archive.title') || 'Archive account',
@@ -54,7 +54,7 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
54
54
  // returns; there is no negative action.
55
55
  await surfaces.confirm({
56
56
  title: t('accountVerification.successTitle') || 'Request Submitted',
57
- message:
57
+ description:
58
58
  t('accountVerification.successMessage') || `Your verification request has been submitted. Request ID: ${result.requestId}`,
59
59
  confirmLabel: t('accountVerification.ok') || 'OK',
60
60
  hideCancel: true,
@@ -282,7 +282,7 @@ const ChangeAvatarScreen: React.FC<BaseScreenProps> = ({ navigate, dismiss }) =>
282
282
  const removeCurrentPhoto = useCallback(async () => {
283
283
  const confirmed = await bloomSurfaces.confirm({
284
284
  title: t('changeAvatar.remove.confirmTitle'),
285
- message: t('changeAvatar.remove.confirmMessage'),
285
+ description: t('changeAvatar.remove.confirmMessage'),
286
286
  confirmLabel: t('changeAvatar.remove.confirmLabel'),
287
287
  cancelLabel: t('common.cancel'),
288
288
  destructive: true,
@@ -65,7 +65,7 @@ const ConnectedAppsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack }) =>
65
65
  async (app: ConnectedApp) => {
66
66
  const confirmed = await surfaces.confirm({
67
67
  title: t('connectedApps.confirm.title') || 'Revoke access',
68
- message:
68
+ description:
69
69
  t('connectedApps.confirm.message', { name: app.name })
70
70
  || `Revoke ${app.name}'s access to your Oxy account?`,
71
71
  confirmLabel: t('common.revoke') || 'Revoke',
@@ -447,7 +447,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
447
447
  const confirmFileDelete = useCallback(async (fileId: string, filename: string) => {
448
448
  const confirmed = await surfaces.confirm({
449
449
  title: t('fileManagement.deleteFile') || 'Delete File',
450
- message: t('fileManagement.confirms.deleteFile', { filename }),
450
+ description: t('fileManagement.confirms.deleteFile', { filename }),
451
451
  confirmLabel: t('fileManagement.confirm') || 'Delete',
452
452
  cancelLabel: t('common.cancel') || 'Cancel',
453
453
  destructive: true,
@@ -484,7 +484,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
484
484
 
485
485
  const confirmed = await surfaces.confirm({
486
486
  title: t('fileManagement.deleteFiles') || 'Delete Files',
487
- message: t('fileManagement.confirms.deleteFiles', { count: selectedIds.size }),
487
+ description: t('fileManagement.confirms.deleteFiles', { count: selectedIds.size }),
488
488
  confirmLabel: t('fileManagement.confirm') || 'Delete',
489
489
  cancelLabel: t('common.cancel') || 'Cancel',
490
490
  destructive: true,
@@ -43,7 +43,7 @@ const HistoryViewScreen: React.FC<BaseScreenProps> = ({ onClose, goBack }) => {
43
43
  const handleDeleteLast15Minutes = useCallback(async () => {
44
44
  const confirmed = await surfaces.confirm({
45
45
  title: t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes',
46
- message: t('history.deleteLast15Minutes.confirm') || 'Delete last 15 minutes of history?',
46
+ description: t('history.deleteLast15Minutes.confirm') || 'Delete last 15 minutes of history?',
47
47
  confirmLabel: t('common.actions.delete') || 'Delete',
48
48
  cancelLabel: t('common.cancel') || 'Cancel',
49
49
  destructive: true,
@@ -64,7 +64,7 @@ const HistoryViewScreen: React.FC<BaseScreenProps> = ({ onClose, goBack }) => {
64
64
  const handleClearAll = useCallback(async () => {
65
65
  const confirmed = await surfaces.confirm({
66
66
  title: t('history.clearAll.title') || 'Clear All History',
67
- message: t('history.clearAll.confirm') || 'Clear all history? This cannot be undone.',
67
+ description: t('history.clearAll.confirm') || 'Clear all history? This cannot be undone.',
68
68
  confirmLabel: t('history.clearAll.title') || 'Clear All',
69
69
  cancelLabel: t('common.cancel') || 'Cancel',
70
70
  destructive: true,
@@ -141,7 +141,7 @@ const ManageAccountScreen: React.FC<BaseScreenProps> = ({
141
141
  }
142
142
  const confirmed = await surfaces.confirm({
143
143
  title: t('common.actions.signOut') || 'Sign out',
144
- message: t('common.confirms.signOut') || 'Are you sure you want to sign out?',
144
+ description: t('common.confirms.signOut') || 'Are you sure you want to sign out?',
145
145
  confirmLabel: t('common.actions.signOut') || 'Sign out',
146
146
  cancelLabel: t('common.cancel') || 'Cancel',
147
147
  destructive: true,
@@ -168,7 +168,7 @@ const ManageAccountScreen: React.FC<BaseScreenProps> = ({
168
168
  }
169
169
  const confirmed = await surfaces.confirm({
170
170
  title: t('manageAccount.confirms.removeDeviceTitle') || 'Remove device',
171
- message:
171
+ description:
172
172
  t('manageAccount.confirms.removeDevice', { name: device.deviceName })
173
173
  || `Sign out from "${device.deviceName}"?`,
174
174
  confirmLabel: t('common.remove') || 'Remove',
@@ -203,7 +203,7 @@ const ManageAccountScreen: React.FC<BaseScreenProps> = ({
203
203
  ).length;
204
204
  const confirmed = await surfaces.confirm({
205
205
  title: t('manageAccount.confirms.signOutAllDevicesTitle') || 'Sign out of all other devices',
206
- message:
206
+ description:
207
207
  t('manageAccount.confirms.signOutAllDevices', { count: otherDeviceCount })
208
208
  || `End ${otherDeviceCount} other device session(s)? This won't sign you out here.`,
209
209
  confirmLabel: t('common.actions.signOut') || 'Sign out',
@@ -441,7 +441,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
441
441
  const handleCancelSubscription = useCallback(async () => {
442
442
  const confirmed = await surfaces.confirm({
443
443
  title: t('premium.confirms.cancelSubTitle') || 'Cancel Subscription',
444
- message: t('premium.confirms.cancelSub') || 'Are you sure you want to cancel your subscription? You will lose access to premium features at the end of your current billing period.',
444
+ description: t('premium.confirms.cancelSub') || 'Are you sure you want to cancel your subscription? You will lose access to premium features at the end of your current billing period.',
445
445
  confirmLabel: t('premium.actions.cancelSubBtn') || 'Cancel Subscription',
446
446
  cancelLabel: t('common.cancel') || 'Cancel',
447
447
  destructive: true,
@@ -532,7 +532,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
532
532
  const feature = individualFeatures.find(f => f.id === featureId);
533
533
  const confirmed = await surfaces.confirm({
534
534
  title: t('premium.confirms.unsubscribeFeatureTitle') || 'Unsubscribe from Feature',
535
- message: feature
535
+ description: feature
536
536
  ? (t('premium.confirms.unsubscribeFeature', { name: feature.name }) ?? `Are you sure you want to unsubscribe from ${feature.name}?`)
537
537
  : '',
538
538
  confirmLabel: t('premium.actions.unsubscribe') || 'Unsubscribe',
@@ -89,7 +89,7 @@ const TrustCenterScreen: React.FC<BaseScreenProps> = ({
89
89
  </Text>
90
90
  {resolvedTrustTierLabel ? (
91
91
  <Chip
92
- variant="soft"
92
+ variant="subtle"
93
93
  color="primary"
94
94
  startIcon={
95
95
  <Ionicons
@@ -217,7 +217,7 @@ const TrustCenterScreen: React.FC<BaseScreenProps> = ({
217
217
  }
218
218
  rightElement={
219
219
  <Chip
220
- variant="soft"
220
+ variant="subtle"
221
221
  size="small"
222
222
  color={entry.points > 0 ? 'success' : 'error'}
223
223
  >
@@ -104,7 +104,7 @@ const TrustLeaderboardScreen: React.FC<BaseScreenProps> = ({ navigate }) => {
104
104
  {displayName}
105
105
  </Text>
106
106
  <View style={styles.tierRow} className="mt-space-4">
107
- <Chip size="small" variant="soft" color={isPodium ? 'primary' : 'default'}>
107
+ <Chip size="small" variant="subtle" color={isPodium ? 'primary' : 'default'}>
108
108
  {trustTierLabel(locale, item.trustTier)}
109
109
  </Chip>
110
110
  </View>
@@ -92,7 +92,7 @@ const TrustRulesScreen: React.FC<BaseScreenProps> = () => {
92
92
  showChevron={false}
93
93
  rightElement={
94
94
  <Chip
95
- variant="soft"
95
+ variant="subtle"
96
96
  size="small"
97
97
  color={rule.points > 0 ? 'success' : rule.points < 0 ? 'error' : 'default'}
98
98
  >