@one_deploy/sdk 1.0.7 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +339 -0
- package/dist/ForexPoolDataGenerator--__twRwl.d.mts +76 -0
- package/dist/ForexPoolDataGenerator-eUgwsU_B.d.ts +76 -0
- package/dist/OneForexTradeHistory-TlKxjbFF.d.ts +250 -0
- package/dist/OneForexTradeHistory-iDySMcw0.d.mts +250 -0
- package/dist/components/index.d.mts +539 -0
- package/dist/components/index.d.ts +539 -0
- package/dist/components/index.js +7295 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +7243 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/config/index.d.mts +1 -0
- package/dist/config/index.d.ts +1 -0
- package/dist/console-BfTMA7ah.d.mts +504 -0
- package/dist/console-BfTMA7ah.d.ts +504 -0
- package/dist/hooks/index.d.mts +323 -1
- package/dist/hooks/index.d.ts +323 -1
- package/dist/hooks/index.js +3223 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +3204 -1
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +18 -352
- package/dist/index.d.ts +18 -352
- package/dist/index.js +8646 -574
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8449 -432
- package/dist/index.mjs.map +1 -1
- package/dist/providers/index.d.mts +31 -31
- package/dist/providers/index.d.ts +31 -31
- package/dist/providers/index.js +140 -153
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +100 -109
- package/dist/providers/index.mjs.map +1 -1
- package/dist/react-native.d.mts +8 -144
- package/dist/react-native.d.ts +8 -144
- package/dist/react-native.js +2640 -689
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +2610 -691
- package/dist/react-native.mjs.map +1 -1
- package/dist/services/index.d.mts +85 -4
- package/dist/services/index.d.ts +85 -4
- package/dist/services/index.js +1621 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +1619 -1
- package/dist/services/index.mjs.map +1 -1
- package/dist/types/index.d.mts +203 -1
- package/dist/types/index.d.ts +203 -1
- package/dist/types/index.js +275 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs +251 -0
- package/dist/types/index.mjs.map +1 -1
- package/dist/useForexTrading-BleeSor8.d.mts +80 -0
- package/dist/useForexTrading-ZgW_G40Q.d.ts +80 -0
- package/package.json +9 -2
- package/src/components/OneConnectButton.tsx +24 -1
- package/src/components/OneNFTGallery.tsx +13 -7
- package/src/components/OneOfframpWidget.tsx +4 -3
- package/src/components/OnePayWidget.tsx +10 -1
- package/src/components/OneSendWidget.tsx +3 -3
- package/src/components/OneSwapWidget.tsx +4 -4
- package/src/components/OneTransactionButton.tsx +28 -3
- package/src/components/OneWalletBalance.tsx +1 -1
- package/src/components/ai/OneChainSelector.tsx +63 -336
- package/src/components/ai/OneForexCapitalSplit.tsx +112 -0
- package/src/components/ai/OneForexConsoleView.tsx +90 -0
- package/src/components/ai/OneForexPairSelector.tsx +101 -0
- package/src/components/ai/OneForexPoolCard.tsx +105 -0
- package/src/components/ai/OneForexTradeHistory.tsx +107 -0
- package/src/components/ai/OnePairSelector.tsx +77 -434
- package/src/components/ai/console/OneAIQuantConsole.tsx +423 -0
- package/src/components/ai/console/OneAgentCard.tsx +383 -0
- package/src/components/ai/console/OneAgentConsole.tsx +469 -0
- package/src/components/ai/console/OneDecisionTimeline.tsx +433 -0
- package/src/components/ai/console/OneMetricsDashboard.tsx +493 -0
- package/src/components/ai/console/OnePositionCard.tsx +406 -0
- package/src/components/ai/console/OnePositionDetail.tsx +600 -0
- package/src/components/ai/console/OneRiskIndicator.tsx +464 -0
- package/src/components/ai/console/OneTradingConsole.tsx +660 -0
- package/src/components/ai/console/index.ts +17 -0
- package/src/components/ai/index.ts +10 -0
- package/src/hooks/index.ts +46 -0
- package/src/hooks/useAIDecisions.ts +280 -0
- package/src/hooks/useAIPositions.ts +349 -0
- package/src/hooks/useAIQuantConsole.ts +283 -0
- package/src/hooks/useAIRiskStatus.ts +276 -0
- package/src/hooks/useAITrading.ts +190 -0
- package/src/hooks/useBotSimulation.ts +201 -0
- package/src/hooks/useForexTrading.ts +430 -0
- package/src/hooks/useTradingConsole.ts +243 -0
- package/src/index.ts +123 -5
- package/src/providers/OneProvider.tsx +181 -5
- package/src/providers/index.ts +22 -8
- package/src/react-native.ts +41 -0
- package/src/services/forex/BotSimulationEngine.ts +968 -0
- package/src/services/forex/ForexPoolDataGenerator.ts +542 -0
- package/src/services/forex/ForexSimulationEngine.ts +482 -0
- package/src/services/forex/index.ts +21 -0
- package/src/services/index.ts +16 -0
- package/src/types/aiTrading.ts +151 -0
- package/src/types/console.ts +380 -0
- package/src/types/forex.ts +282 -0
- package/src/types/index.ts +106 -0
- package/dist/price-CgqXPnT3.d.ts +0 -13
- package/dist/price-ClbLHHjv.d.mts +0 -13
- package/dist/supabase-BT0c7q9e.d.mts +0 -82
- package/dist/supabase-BT0c7q9e.d.ts +0 -82
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OneForexPairSelector - Stablecoin FX pair selection for forex trading
|
|
3
|
+
* Part of ONE Ecosystem SDK
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { View, Text, StyleSheet, TouchableOpacity, ViewStyle } from 'react-native';
|
|
8
|
+
import { FOREX_CURRENCY_PAIRS } from '../../types/forex';
|
|
9
|
+
import type { ForexCurrencyPair } from '../../types/forex';
|
|
10
|
+
|
|
11
|
+
export interface OneForexPairSelectorProps {
|
|
12
|
+
/** Currently selected pair IDs */
|
|
13
|
+
selectedPairs: string[];
|
|
14
|
+
/** Callback when a pair is toggled */
|
|
15
|
+
onTogglePair: (pairId: string) => void;
|
|
16
|
+
/** Accent color for selected state */
|
|
17
|
+
accentColor?: string;
|
|
18
|
+
/** Section title */
|
|
19
|
+
title?: string;
|
|
20
|
+
/** Section subtitle */
|
|
21
|
+
subtitle?: string;
|
|
22
|
+
/** Custom pairs list (defaults to FOREX_CURRENCY_PAIRS) */
|
|
23
|
+
pairs?: ForexCurrencyPair[];
|
|
24
|
+
/** Custom container style */
|
|
25
|
+
style?: ViewStyle;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const OneForexPairSelector: React.FC<OneForexPairSelectorProps> = ({
|
|
29
|
+
selectedPairs,
|
|
30
|
+
onTogglePair,
|
|
31
|
+
accentColor = '#0EA5E9',
|
|
32
|
+
title,
|
|
33
|
+
subtitle,
|
|
34
|
+
pairs = FOREX_CURRENCY_PAIRS,
|
|
35
|
+
style,
|
|
36
|
+
}) => {
|
|
37
|
+
const handleToggle = (pairId: string) => {
|
|
38
|
+
if (selectedPairs.includes(pairId) && selectedPairs.length <= 1) return;
|
|
39
|
+
onTogglePair(pairId);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<View style={[styles.container, style]}>
|
|
44
|
+
{title && <Text style={styles.title}>{title}</Text>}
|
|
45
|
+
{subtitle && <Text style={styles.subtitle}>{subtitle}</Text>}
|
|
46
|
+
|
|
47
|
+
<View style={styles.pairGrid}>
|
|
48
|
+
{pairs.map((pair) => {
|
|
49
|
+
const isSelected = selectedPairs.includes(pair.id);
|
|
50
|
+
return (
|
|
51
|
+
<TouchableOpacity
|
|
52
|
+
key={pair.id}
|
|
53
|
+
style={[
|
|
54
|
+
styles.pairBtn,
|
|
55
|
+
isSelected && styles.pairBtnActive,
|
|
56
|
+
isSelected && { borderColor: accentColor, backgroundColor: accentColor + '08' },
|
|
57
|
+
]}
|
|
58
|
+
onPress={() => handleToggle(pair.id)}
|
|
59
|
+
activeOpacity={0.7}
|
|
60
|
+
>
|
|
61
|
+
<Text style={styles.pairFlag}>{pair.flag}</Text>
|
|
62
|
+
<View style={styles.pairInfo}>
|
|
63
|
+
<Text style={[styles.pairSymbol, isSelected && { color: accentColor, fontWeight: '600' }]}>
|
|
64
|
+
{pair.symbol}
|
|
65
|
+
</Text>
|
|
66
|
+
<Text style={styles.pairName}>{pair.name}</Text>
|
|
67
|
+
</View>
|
|
68
|
+
{isSelected && (
|
|
69
|
+
<Text style={[styles.check, { color: accentColor }]}>{'\u2713'}</Text>
|
|
70
|
+
)}
|
|
71
|
+
</TouchableOpacity>
|
|
72
|
+
);
|
|
73
|
+
})}
|
|
74
|
+
</View>
|
|
75
|
+
|
|
76
|
+
<Text style={styles.selectedInfo}>
|
|
77
|
+
{selectedPairs.length} pair{selectedPairs.length !== 1 ? 's' : ''} selected (min: 1)
|
|
78
|
+
</Text>
|
|
79
|
+
</View>
|
|
80
|
+
);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const styles = StyleSheet.create({
|
|
84
|
+
container: { marginBottom: 16 },
|
|
85
|
+
title: { fontSize: 16, fontWeight: '600', color: '#1a1a1a', marginBottom: 4 },
|
|
86
|
+
subtitle: { fontSize: 12, color: '#666', marginBottom: 12 },
|
|
87
|
+
pairGrid: { gap: 8 },
|
|
88
|
+
pairBtn: {
|
|
89
|
+
flexDirection: 'row', alignItems: 'center',
|
|
90
|
+
paddingHorizontal: 12, paddingVertical: 12,
|
|
91
|
+
borderRadius: 8, borderWidth: 1.5, borderColor: '#e5e5e5',
|
|
92
|
+
backgroundColor: '#fff', gap: 10,
|
|
93
|
+
},
|
|
94
|
+
pairBtnActive: { borderWidth: 2 },
|
|
95
|
+
pairFlag: { fontSize: 20 },
|
|
96
|
+
pairInfo: { flex: 1 },
|
|
97
|
+
pairSymbol: { fontSize: 14, color: '#666' },
|
|
98
|
+
pairName: { fontSize: 11, color: '#999' },
|
|
99
|
+
check: { fontSize: 16, fontWeight: '700' },
|
|
100
|
+
selectedInfo: { fontSize: 12, color: '#888', marginTop: 8 },
|
|
101
|
+
});
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OneForexPoolCard - Displays a forex liquidity pool with metrics
|
|
3
|
+
* Part of ONE Ecosystem SDK
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { View, Text, StyleSheet, ViewStyle } from 'react-native';
|
|
8
|
+
import type { ForexPool } from '../../types/forex';
|
|
9
|
+
|
|
10
|
+
export interface OneForexPoolCardProps {
|
|
11
|
+
/** Pool data object */
|
|
12
|
+
pool: ForexPool;
|
|
13
|
+
/** Pool display name (provide translated string) */
|
|
14
|
+
poolName?: string;
|
|
15
|
+
/** Whether to show enhanced metrics (APY, flow, tx count) */
|
|
16
|
+
showMetrics?: boolean;
|
|
17
|
+
/** Custom accent color override */
|
|
18
|
+
accentColor?: string;
|
|
19
|
+
/** Custom container style */
|
|
20
|
+
style?: ViewStyle;
|
|
21
|
+
/** Dark mode */
|
|
22
|
+
dark?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const OneForexPoolCard: React.FC<OneForexPoolCardProps> = ({
|
|
26
|
+
pool,
|
|
27
|
+
poolName,
|
|
28
|
+
showMetrics = true,
|
|
29
|
+
accentColor,
|
|
30
|
+
style,
|
|
31
|
+
dark = true,
|
|
32
|
+
}) => {
|
|
33
|
+
const color = accentColor || pool.color;
|
|
34
|
+
const bg = dark ? '#111111' : '#ffffff';
|
|
35
|
+
const border = dark ? '#1a1a1a' : '#e5e5e5';
|
|
36
|
+
const textPrimary = dark ? '#ffffff' : '#1a1a1a';
|
|
37
|
+
const textSecondary = dark ? '#9ca3af' : '#666666';
|
|
38
|
+
const textMuted = dark ? '#666666' : '#999999';
|
|
39
|
+
const barBg = dark ? '#1a1a1a' : '#e5e5e5';
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<View style={[styles.container, { backgroundColor: bg, borderColor: border }, style]}>
|
|
43
|
+
<View style={styles.header}>
|
|
44
|
+
<View style={[styles.dot, { backgroundColor: color }]} />
|
|
45
|
+
<Text style={[styles.name, { color: textPrimary }]}>
|
|
46
|
+
{poolName || pool.nameKey}
|
|
47
|
+
</Text>
|
|
48
|
+
<Text style={[styles.alloc, { color: textSecondary }]}>
|
|
49
|
+
{(pool.allocation * 100).toFixed(0)}%
|
|
50
|
+
</Text>
|
|
51
|
+
</View>
|
|
52
|
+
|
|
53
|
+
<View style={[styles.barOuter, { backgroundColor: barBg }]}>
|
|
54
|
+
<View style={[styles.barFill, { width: `${pool.utilization * 100}%`, backgroundColor: color }]} />
|
|
55
|
+
</View>
|
|
56
|
+
|
|
57
|
+
<View style={styles.statsRow}>
|
|
58
|
+
<Text style={[styles.statValue, { color: textSecondary }]}>
|
|
59
|
+
${(pool.totalSize / 1_000_000).toFixed(1)}M
|
|
60
|
+
</Text>
|
|
61
|
+
<Text style={[styles.statLabel, { color: textMuted }]}>
|
|
62
|
+
{(pool.utilization * 100).toFixed(1)}% util
|
|
63
|
+
</Text>
|
|
64
|
+
</View>
|
|
65
|
+
|
|
66
|
+
{showMetrics && (
|
|
67
|
+
<View style={[styles.metricsRow, { borderTopColor: border }]}>
|
|
68
|
+
<View style={styles.metricItem}>
|
|
69
|
+
<Text style={[styles.metricLabel, { color: textMuted }]}>APY 7d</Text>
|
|
70
|
+
<Text style={[styles.metricValue, { color: '#10B981' }]}>
|
|
71
|
+
{pool.apy7d.toFixed(1)}%
|
|
72
|
+
</Text>
|
|
73
|
+
</View>
|
|
74
|
+
<View style={styles.metricItem}>
|
|
75
|
+
<Text style={[styles.metricLabel, { color: textMuted }]}>24h Flow</Text>
|
|
76
|
+
<Text style={[styles.metricValue, { color: pool.netFlow24h >= 0 ? '#10B981' : '#EF4444' }]}>
|
|
77
|
+
{pool.netFlow24h >= 0 ? '+' : ''}${(pool.netFlow24h / 1000).toFixed(0)}K
|
|
78
|
+
</Text>
|
|
79
|
+
</View>
|
|
80
|
+
<View style={styles.metricItem}>
|
|
81
|
+
<Text style={[styles.metricLabel, { color: textMuted }]}>Txs</Text>
|
|
82
|
+
<Text style={[styles.metricValue, { color: textPrimary }]}>{pool.txCount24h}</Text>
|
|
83
|
+
</View>
|
|
84
|
+
</View>
|
|
85
|
+
)}
|
|
86
|
+
</View>
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const styles = StyleSheet.create({
|
|
91
|
+
container: { borderRadius: 8, borderWidth: 1, padding: 14 },
|
|
92
|
+
header: { flexDirection: 'row', alignItems: 'center', marginBottom: 8, gap: 8 },
|
|
93
|
+
dot: { width: 8, height: 8, borderRadius: 4 },
|
|
94
|
+
name: { fontSize: 13, fontWeight: '600', flex: 1 },
|
|
95
|
+
alloc: { fontSize: 12 },
|
|
96
|
+
barOuter: { height: 6, borderRadius: 3, overflow: 'hidden', marginBottom: 6 },
|
|
97
|
+
barFill: { height: '100%', borderRadius: 3 },
|
|
98
|
+
statsRow: { flexDirection: 'row', justifyContent: 'space-between' },
|
|
99
|
+
statValue: { fontSize: 12, fontWeight: '600' },
|
|
100
|
+
statLabel: { fontSize: 11 },
|
|
101
|
+
metricsRow: { flexDirection: 'row', justifyContent: 'space-between', paddingTop: 8, marginTop: 8, borderTopWidth: 1 },
|
|
102
|
+
metricItem: { alignItems: 'center', flex: 1 },
|
|
103
|
+
metricLabel: { fontSize: 9, textTransform: 'uppercase', letterSpacing: 0.5, marginBottom: 2 },
|
|
104
|
+
metricValue: { fontSize: 12, fontWeight: '600' },
|
|
105
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OneForexTradeHistory - Displays trade history with settlement details
|
|
3
|
+
* Part of ONE Ecosystem SDK
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { View, Text, StyleSheet, ScrollView, ViewStyle, Platform } from 'react-native';
|
|
8
|
+
import type { ForexTradeRecord } from '../../types/forex';
|
|
9
|
+
|
|
10
|
+
const MONO = Platform.OS === 'ios' ? 'Courier New' : 'monospace';
|
|
11
|
+
|
|
12
|
+
export interface OneForexTradeHistoryProps {
|
|
13
|
+
/** Trade records to display */
|
|
14
|
+
trades: ForexTradeRecord[];
|
|
15
|
+
/** Maximum trades to show */
|
|
16
|
+
maxItems?: number;
|
|
17
|
+
/** Show settlement details (clearing/hedging/insurance fees) */
|
|
18
|
+
showSettlementDetails?: boolean;
|
|
19
|
+
/** Show transaction hash */
|
|
20
|
+
showTxHash?: boolean;
|
|
21
|
+
/** Empty state text */
|
|
22
|
+
emptyText?: string;
|
|
23
|
+
/** Custom container style */
|
|
24
|
+
style?: ViewStyle;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const OneForexTradeHistory: React.FC<OneForexTradeHistoryProps> = ({
|
|
28
|
+
trades,
|
|
29
|
+
maxItems = 50,
|
|
30
|
+
showSettlementDetails = true,
|
|
31
|
+
showTxHash = true,
|
|
32
|
+
emptyText = 'No trade history yet',
|
|
33
|
+
style,
|
|
34
|
+
}) => {
|
|
35
|
+
const visibleTrades = trades.slice(-maxItems).reverse();
|
|
36
|
+
|
|
37
|
+
if (visibleTrades.length === 0) {
|
|
38
|
+
return (
|
|
39
|
+
<View style={[styles.empty, style]}>
|
|
40
|
+
<Text style={styles.emptyText}>{emptyText}</Text>
|
|
41
|
+
</View>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<ScrollView style={[styles.container, style]} contentContainerStyle={styles.scrollContent}>
|
|
47
|
+
{visibleTrades.map((trade) => (
|
|
48
|
+
<View key={trade.id} style={styles.card}>
|
|
49
|
+
<View style={styles.header}>
|
|
50
|
+
<Text style={styles.pair}>{trade.pairSymbol}</Text>
|
|
51
|
+
<View style={[
|
|
52
|
+
styles.sideBadge,
|
|
53
|
+
{ backgroundColor: trade.side === 'BUY' ? '#10B98118' : '#EF444418', borderColor: trade.side === 'BUY' ? '#10B98140' : '#EF444440' },
|
|
54
|
+
]}>
|
|
55
|
+
<Text style={[styles.sideText, { color: trade.side === 'BUY' ? '#10B981' : '#EF4444' }]}>
|
|
56
|
+
{trade.side}
|
|
57
|
+
</Text>
|
|
58
|
+
</View>
|
|
59
|
+
<Text style={[styles.pnl, { color: trade.pnl >= 0 ? '#10B981' : '#EF4444' }]}>
|
|
60
|
+
{trade.pnl >= 0 ? '+' : ''}${trade.pnl.toFixed(2)}
|
|
61
|
+
</Text>
|
|
62
|
+
</View>
|
|
63
|
+
|
|
64
|
+
<View style={styles.details}>
|
|
65
|
+
<Text style={styles.detail}>
|
|
66
|
+
{trade.lots.toFixed(2)} lots | {trade.pips >= 0 ? '+' : ''}{trade.pips.toFixed(1)} pips
|
|
67
|
+
</Text>
|
|
68
|
+
<Text style={styles.time}>{new Date(trade.timestamp).toLocaleString()}</Text>
|
|
69
|
+
</View>
|
|
70
|
+
|
|
71
|
+
{showSettlementDetails && trade.clearingFee !== undefined && (
|
|
72
|
+
<View style={styles.settlement}>
|
|
73
|
+
<Text style={styles.settlementText}>
|
|
74
|
+
CLR: ${trade.clearingFee.toFixed(2)} | HDG: ${(trade.hedgingCost || 0).toFixed(2)} | INS: ${(trade.insuranceReserve || 0).toFixed(2)}
|
|
75
|
+
</Text>
|
|
76
|
+
</View>
|
|
77
|
+
)}
|
|
78
|
+
|
|
79
|
+
{showTxHash && trade.txHash && (
|
|
80
|
+
<Text style={styles.txHash}>
|
|
81
|
+
{trade.txHash.slice(0, 10)}...{trade.txHash.slice(-6)}
|
|
82
|
+
</Text>
|
|
83
|
+
)}
|
|
84
|
+
</View>
|
|
85
|
+
))}
|
|
86
|
+
</ScrollView>
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const styles = StyleSheet.create({
|
|
91
|
+
container: { flex: 1 },
|
|
92
|
+
scrollContent: { paddingBottom: 16 },
|
|
93
|
+
empty: { alignItems: 'center', justifyContent: 'center', padding: 40 },
|
|
94
|
+
emptyText: { fontSize: 14, color: '#666' },
|
|
95
|
+
card: { backgroundColor: '#111111', borderRadius: 6, borderWidth: 1, borderColor: '#1a1a1a', padding: 12, marginBottom: 8 },
|
|
96
|
+
header: { flexDirection: 'row', alignItems: 'center', gap: 8 },
|
|
97
|
+
pair: { fontSize: 13, fontWeight: '600', color: '#ffffff' },
|
|
98
|
+
sideBadge: { paddingHorizontal: 6, paddingVertical: 2, borderRadius: 3, borderWidth: 1 },
|
|
99
|
+
sideText: { fontSize: 9, fontWeight: '700', letterSpacing: 0.5 },
|
|
100
|
+
pnl: { fontFamily: MONO, marginLeft: 'auto', fontSize: 13, fontWeight: '700' },
|
|
101
|
+
details: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 6 },
|
|
102
|
+
detail: { fontFamily: MONO, fontSize: 11, color: '#9ca3af' },
|
|
103
|
+
time: { fontSize: 11, color: '#666' },
|
|
104
|
+
settlement: { marginTop: 6, paddingTop: 6, borderTopWidth: 1, borderTopColor: '#1a1a1a' },
|
|
105
|
+
settlementText: { fontFamily: MONO, fontSize: 10, color: '#666' },
|
|
106
|
+
txHash: { fontFamily: MONO, fontSize: 9, color: '#444', marginTop: 2 },
|
|
107
|
+
});
|