@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.
- package/lib/commonjs/ui/components/FollowTargetButton.js +14 -26
- package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthChooser.js +2 -2
- package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/commonjs/ui/components/OxyConsentScreen.js +7 -2
- package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +19 -22
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js +28 -12
- package/lib/commonjs/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountMembersScreen.js +2 -2
- package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1 -1
- package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +1 -1
- package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +1 -1
- package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +2 -2
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/HistoryViewScreen.js +2 -2
- package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/ManageAccountScreen.js +3 -3
- package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +2 -2
- package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +2 -2
- package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
- package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +1 -1
- package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/module/ui/components/FollowTargetButton.js +14 -26
- package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
- package/lib/module/ui/components/OxyAuthChooser.js +2 -2
- package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/module/ui/components/OxyConsentScreen.js +7 -2
- package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +19 -22
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js +29 -13
- package/lib/module/ui/components/authChooser/TroubleDisclosure.js.map +1 -1
- package/lib/module/ui/screens/AccountMembersScreen.js +2 -2
- package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js +1 -1
- package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js +1 -1
- package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
- package/lib/module/ui/screens/ChangeAvatarScreen.js +1 -1
- package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -1
- package/lib/module/ui/screens/ConnectedAppsScreen.js +1 -1
- package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +2 -2
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/HistoryViewScreen.js +2 -2
- package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
- package/lib/module/ui/screens/ManageAccountScreen.js +3 -3
- package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js +2 -2
- package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustCenterScreen.js +2 -2
- package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +1 -1
- package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js +1 -1
- package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
- package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts +2 -2
- package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts +7 -5
- package/lib/typescript/commonjs/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/FollowTargetButton.d.ts +2 -2
- package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyConsentScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts +7 -5
- package/lib/typescript/module/ui/components/authChooser/TroubleDisclosure.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/ui/components/FollowTargetButton.tsx +31 -27
- package/src/ui/components/OxyAuthChooser.tsx +2 -2
- package/src/ui/components/OxyConsentScreen.tsx +7 -2
- package/src/ui/components/OxyProvider.tsx +23 -26
- package/src/ui/components/authChooser/TroubleDisclosure.tsx +26 -11
- package/src/ui/screens/AccountMembersScreen.tsx +2 -2
- package/src/ui/screens/AccountSettingsScreen.tsx +1 -1
- package/src/ui/screens/AccountVerificationScreen.tsx +1 -1
- package/src/ui/screens/ChangeAvatarScreen.tsx +1 -1
- package/src/ui/screens/ConnectedAppsScreen.tsx +1 -1
- package/src/ui/screens/FileManagementScreen.tsx +2 -2
- package/src/ui/screens/HistoryViewScreen.tsx +2 -2
- package/src/ui/screens/ManageAccountScreen.tsx +3 -3
- package/src/ui/screens/PremiumSubscriptionScreen.tsx +2 -2
- package/src/ui/screens/trust/TrustCenterScreen.tsx +2 -2
- package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
- 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
|
-
|
|
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
|
-
|
|
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
|
-
'
|
|
100
|
-
'models:read': 'consent.scopes.
|
|
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
|
-
<
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
>
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
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
|
|
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
|
|
13
|
+
* - otherwise: a single-item Bloom `Accordion`, whose trigger is the small
|
|
14
14
|
* "Having trouble?" affordance.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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 {
|
|
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
|
-
<
|
|
63
|
-
|
|
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
|
-
{
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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="
|
|
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="
|
|
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="
|
|
107
|
+
<Chip size="small" variant="subtle" color={isPodium ? 'primary' : 'default'}>
|
|
108
108
|
{trustTierLabel(locale, item.trustTier)}
|
|
109
109
|
</Chip>
|
|
110
110
|
</View>
|