@dubsdotapp/expo 0.2.20 → 0.2.21
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/dist/index.d.mts +21 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.js +270 -226
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +50 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -2
- package/src/hooks/useAuth.ts +10 -3
- package/src/index.ts +2 -0
- package/src/types.ts +4 -0
- package/src/utils/device.ts +55 -0
package/dist/index.js
CHANGED
|
@@ -51,6 +51,7 @@ __export(index_exports, {
|
|
|
51
51
|
SettingsSheet: () => SettingsSheet,
|
|
52
52
|
UserProfileCard: () => UserProfileCard,
|
|
53
53
|
createSecureStoreStorage: () => createSecureStoreStorage,
|
|
54
|
+
getDeviceInfo: () => getDeviceInfo,
|
|
54
55
|
mergeTheme: () => mergeTheme,
|
|
55
56
|
parseSolanaError: () => parseSolanaError,
|
|
56
57
|
signAndSendBase64Transaction: () => signAndSendBase64Transaction,
|
|
@@ -1417,7 +1418,7 @@ function ManagedWalletProvider({
|
|
|
1417
1418
|
|
|
1418
1419
|
// src/ui/AuthGate.tsx
|
|
1419
1420
|
var import_react12 = __toESM(require("react"));
|
|
1420
|
-
var
|
|
1421
|
+
var import_react_native6 = require("react-native");
|
|
1421
1422
|
|
|
1422
1423
|
// src/hooks/useEvents.ts
|
|
1423
1424
|
var import_react2 = require("react");
|
|
@@ -1788,6 +1789,45 @@ var import_bs583 = __toESM(require("bs58"));
|
|
|
1788
1789
|
var import_react10 = require("react");
|
|
1789
1790
|
var AuthContext = (0, import_react10.createContext)(null);
|
|
1790
1791
|
|
|
1792
|
+
// src/utils/device.ts
|
|
1793
|
+
var import_react_native5 = require("react-native");
|
|
1794
|
+
async function getDeviceInfo() {
|
|
1795
|
+
try {
|
|
1796
|
+
const Device = require("expo-device");
|
|
1797
|
+
return {
|
|
1798
|
+
platform: import_react_native5.Platform.OS,
|
|
1799
|
+
modelName: Device.modelName,
|
|
1800
|
+
brand: Device.brand,
|
|
1801
|
+
manufacturer: Device.manufacturer,
|
|
1802
|
+
osName: Device.osName,
|
|
1803
|
+
osVersion: Device.osVersion,
|
|
1804
|
+
deviceType: Device.deviceType,
|
|
1805
|
+
deviceName: Device.deviceName,
|
|
1806
|
+
totalMemory: Device.totalMemory,
|
|
1807
|
+
modelId: Device.modelId,
|
|
1808
|
+
designName: Device.designName,
|
|
1809
|
+
productName: Device.productName,
|
|
1810
|
+
isDevice: Device.isDevice
|
|
1811
|
+
};
|
|
1812
|
+
} catch {
|
|
1813
|
+
return {
|
|
1814
|
+
platform: import_react_native5.Platform.OS,
|
|
1815
|
+
modelName: null,
|
|
1816
|
+
brand: null,
|
|
1817
|
+
manufacturer: null,
|
|
1818
|
+
osName: null,
|
|
1819
|
+
osVersion: null,
|
|
1820
|
+
deviceType: null,
|
|
1821
|
+
deviceName: null,
|
|
1822
|
+
totalMemory: null,
|
|
1823
|
+
modelId: null,
|
|
1824
|
+
designName: null,
|
|
1825
|
+
productName: null,
|
|
1826
|
+
isDevice: null
|
|
1827
|
+
};
|
|
1828
|
+
}
|
|
1829
|
+
}
|
|
1830
|
+
|
|
1791
1831
|
// src/hooks/useAuth.ts
|
|
1792
1832
|
function useAuth() {
|
|
1793
1833
|
const sharedAuth = (0, import_react11.useContext)(AuthContext);
|
|
@@ -1816,15 +1856,17 @@ function useAuth() {
|
|
|
1816
1856
|
setStatus("authenticating");
|
|
1817
1857
|
setError(null);
|
|
1818
1858
|
const walletAddress = wallet.publicKey.toBase58();
|
|
1859
|
+
const deviceInfo = await getDeviceInfo();
|
|
1860
|
+
console.log("[useAuth] Device info:", JSON.stringify(deviceInfo, null, 2));
|
|
1819
1861
|
const { nonce, message } = await client.getNonce(walletAddress);
|
|
1820
1862
|
setStatus("signing");
|
|
1821
1863
|
const messageBytes = new TextEncoder().encode(message);
|
|
1822
1864
|
const signatureBytes = await wallet.signMessage(messageBytes);
|
|
1823
1865
|
const signature = import_bs583.default.encode(signatureBytes);
|
|
1824
1866
|
setStatus("verifying");
|
|
1825
|
-
const result = await client.authenticate({ walletAddress, signature, nonce });
|
|
1867
|
+
const result = await client.authenticate({ walletAddress, signature, nonce, deviceInfo });
|
|
1826
1868
|
if (result.needsRegistration) {
|
|
1827
|
-
pendingAuth.current = { walletAddress, nonce, signature };
|
|
1869
|
+
pendingAuth.current = { walletAddress, nonce, signature, deviceInfo };
|
|
1828
1870
|
setStatus("needsRegistration");
|
|
1829
1871
|
return;
|
|
1830
1872
|
}
|
|
@@ -1850,7 +1892,8 @@ function useAuth() {
|
|
|
1850
1892
|
nonce: pending.nonce,
|
|
1851
1893
|
username,
|
|
1852
1894
|
referralCode,
|
|
1853
|
-
avatarUrl
|
|
1895
|
+
avatarUrl,
|
|
1896
|
+
deviceInfo: pending.deviceInfo
|
|
1854
1897
|
});
|
|
1855
1898
|
pendingAuth.current = null;
|
|
1856
1899
|
const user2 = avatarUrl && !result.user.avatar ? { ...result.user, avatar: avatarUrl } : result.user;
|
|
@@ -2022,44 +2065,44 @@ function DefaultLoadingScreen({ status, appName, accentColor }) {
|
|
|
2022
2065
|
authenticated: "Ready!",
|
|
2023
2066
|
error: "Something went wrong"
|
|
2024
2067
|
};
|
|
2025
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2026
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2027
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2028
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2068
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.centerContent, children: [
|
|
2069
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.brandingSection, children: [
|
|
2070
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.logoText, children: "D" }) }),
|
|
2071
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.appNameText, { color: t.text }], children: appName })
|
|
2029
2072
|
] }),
|
|
2030
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2031
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2032
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2073
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.loadingSection, children: [
|
|
2074
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.ActivityIndicator, { size: "large", color: accent }),
|
|
2075
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.statusText, { color: t.textMuted }], children: statusText[status] || "Loading..." })
|
|
2033
2076
|
] })
|
|
2034
2077
|
] }) });
|
|
2035
2078
|
}
|
|
2036
2079
|
function DefaultErrorScreen({ error, onRetry, appName, accentColor }) {
|
|
2037
2080
|
const t = useDubsTheme();
|
|
2038
2081
|
const accent = accentColor || t.accent;
|
|
2039
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2040
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2041
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2042
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.spreadContent, children: [
|
|
2083
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.brandingSection, children: [
|
|
2084
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.logoText, children: "D" }) }),
|
|
2085
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.appNameText, { color: t.text }], children: appName })
|
|
2043
2086
|
] }),
|
|
2044
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2045
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2046
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2087
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: { gap: 16 }, children: [
|
|
2088
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.errorText, { color: t.errorText }], children: error.message }) }),
|
|
2089
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.TouchableOpacity, { style: [s.primaryBtn, { backgroundColor: accent }], onPress: onRetry, activeOpacity: 0.8, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.primaryBtnText, children: "Try Again" }) })
|
|
2047
2090
|
] })
|
|
2048
2091
|
] }) });
|
|
2049
2092
|
}
|
|
2050
2093
|
function StepIndicator({ currentStep }) {
|
|
2051
2094
|
const t = useDubsTheme();
|
|
2052
2095
|
const steps = [0, 1, 2, 3];
|
|
2053
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2054
|
-
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2096
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: s.stepRow, children: steps.map((i) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react12.default.Fragment, { children: [
|
|
2097
|
+
i > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.stepLine, { backgroundColor: i <= currentStep ? t.success : t.border }] }),
|
|
2055
2098
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2056
|
-
|
|
2099
|
+
import_react_native6.View,
|
|
2057
2100
|
{
|
|
2058
2101
|
style: [
|
|
2059
2102
|
s.stepCircle,
|
|
2060
2103
|
i < currentStep ? { backgroundColor: t.success } : i === currentStep ? { backgroundColor: t.accent } : { backgroundColor: "transparent", borderWidth: 2, borderColor: t.border }
|
|
2061
2104
|
],
|
|
2062
|
-
children: i < currentStep ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2105
|
+
children: i < currentStep ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.stepCheck, children: "\u2713" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.stepNum, { color: i === currentStep ? "#FFF" : t.textMuted }], children: i + 1 })
|
|
2063
2106
|
}
|
|
2064
2107
|
)
|
|
2065
2108
|
] }, i)) });
|
|
@@ -2083,8 +2126,8 @@ function DefaultRegistrationScreen({
|
|
|
2083
2126
|
const [checking, setChecking] = (0, import_react12.useState)(false);
|
|
2084
2127
|
const [availability, setAvailability] = (0, import_react12.useState)(null);
|
|
2085
2128
|
const debounceRef = (0, import_react12.useRef)(null);
|
|
2086
|
-
const fadeAnim = (0, import_react12.useRef)(new
|
|
2087
|
-
const slideAnim = (0, import_react12.useRef)(new
|
|
2129
|
+
const fadeAnim = (0, import_react12.useRef)(new import_react_native6.Animated.Value(1)).current;
|
|
2130
|
+
const slideAnim = (0, import_react12.useRef)(new import_react_native6.Animated.Value(0)).current;
|
|
2088
2131
|
const avatarUrl = getAvatarUrl(avatarStyle, avatarSeed);
|
|
2089
2132
|
(0, import_react12.useEffect)(() => {
|
|
2090
2133
|
if (debounceRef.current) clearTimeout(debounceRef.current);
|
|
@@ -2111,92 +2154,92 @@ function DefaultRegistrationScreen({
|
|
|
2111
2154
|
}, [username, client]);
|
|
2112
2155
|
const animateToStep = (0, import_react12.useCallback)((newStep) => {
|
|
2113
2156
|
const dir = newStep > step ? 1 : -1;
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2157
|
+
import_react_native6.Keyboard.dismiss();
|
|
2158
|
+
import_react_native6.Animated.parallel([
|
|
2159
|
+
import_react_native6.Animated.timing(fadeAnim, { toValue: 0, duration: 120, useNativeDriver: true }),
|
|
2160
|
+
import_react_native6.Animated.timing(slideAnim, { toValue: -dir * 40, duration: 120, useNativeDriver: true })
|
|
2118
2161
|
]).start(() => {
|
|
2119
2162
|
setStep(newStep);
|
|
2120
2163
|
slideAnim.setValue(dir * 40);
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2164
|
+
import_react_native6.Animated.parallel([
|
|
2165
|
+
import_react_native6.Animated.timing(fadeAnim, { toValue: 1, duration: 200, useNativeDriver: true }),
|
|
2166
|
+
import_react_native6.Animated.timing(slideAnim, { toValue: 0, duration: 200, useNativeDriver: true })
|
|
2124
2167
|
]).start();
|
|
2125
2168
|
});
|
|
2126
2169
|
}, [step, fadeAnim, slideAnim]);
|
|
2127
2170
|
const canContinueUsername = username.trim().length >= 3 && availability?.available === true && !checking;
|
|
2128
2171
|
const handleSubmit = () => {
|
|
2129
|
-
|
|
2172
|
+
import_react_native6.Keyboard.dismiss();
|
|
2130
2173
|
onRegister(username.trim(), referralCode.trim() || void 0, avatarUrl);
|
|
2131
2174
|
};
|
|
2132
|
-
const renderAvatarStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2133
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2134
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2135
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2175
|
+
const renderAvatarStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepContainer, children: [
|
|
2176
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepTop, children: [
|
|
2177
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.title, { color: t.text }], children: "Choose Your Avatar" }),
|
|
2178
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.subtitle, { color: t.textMuted }], children: "Pick a look that represents you" }),
|
|
2136
2179
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(StepIndicator, { currentStep: 0 }),
|
|
2137
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2138
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2139
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2180
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: s.avatarCenter, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: [s.avatarFrame, { borderColor: accent }], children: [
|
|
2181
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Image, { source: { uri: avatarUrl }, style: s.avatarLarge }),
|
|
2182
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.checkBadge, { backgroundColor: t.success }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.checkBadgeText, children: "\u2713" }) })
|
|
2140
2183
|
] }) }),
|
|
2141
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2184
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.avatarActions, children: [
|
|
2142
2185
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2143
|
-
|
|
2186
|
+
import_react_native6.TouchableOpacity,
|
|
2144
2187
|
{
|
|
2145
2188
|
style: [s.outlineBtn, { borderColor: t.border }],
|
|
2146
2189
|
onPress: () => setAvatarSeed(generateSeed()),
|
|
2147
2190
|
activeOpacity: 0.7,
|
|
2148
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2191
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.outlineBtnText, { color: t.text }], children: "\u21BB Shuffle" })
|
|
2149
2192
|
}
|
|
2150
2193
|
),
|
|
2151
2194
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2152
|
-
|
|
2195
|
+
import_react_native6.TouchableOpacity,
|
|
2153
2196
|
{
|
|
2154
2197
|
style: [s.outlineBtn, { borderColor: accent, backgroundColor: accent + "15" }],
|
|
2155
2198
|
onPress: () => setShowStyles(!showStyles),
|
|
2156
2199
|
activeOpacity: 0.7,
|
|
2157
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2200
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.outlineBtnText, { color: accent }], children: "\u263A Customize" })
|
|
2158
2201
|
}
|
|
2159
2202
|
)
|
|
2160
2203
|
] }),
|
|
2161
|
-
showStyles && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2162
|
-
|
|
2204
|
+
showStyles && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: s.styleScroll, children: DICEBEAR_STYLES.map((st) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2205
|
+
import_react_native6.TouchableOpacity,
|
|
2163
2206
|
{
|
|
2164
2207
|
onPress: () => setAvatarStyle(st),
|
|
2165
2208
|
style: [s.styleThumbWrap, { borderColor: st === avatarStyle ? accent : t.border }],
|
|
2166
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2209
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Image, { source: { uri: getAvatarUrl(st, avatarSeed, 80) }, style: s.styleThumb })
|
|
2167
2210
|
},
|
|
2168
2211
|
st
|
|
2169
2212
|
)) })
|
|
2170
2213
|
] }),
|
|
2171
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2172
|
-
|
|
2214
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: s.bottomRow, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2215
|
+
import_react_native6.TouchableOpacity,
|
|
2173
2216
|
{
|
|
2174
2217
|
style: [s.primaryBtn, { backgroundColor: accent, flex: 1 }],
|
|
2175
2218
|
onPress: () => animateToStep(1),
|
|
2176
2219
|
activeOpacity: 0.8,
|
|
2177
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2220
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.primaryBtnText, children: "Continue \u203A" })
|
|
2178
2221
|
}
|
|
2179
2222
|
) })
|
|
2180
2223
|
] });
|
|
2181
|
-
const renderUsernameStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2182
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2183
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2184
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2185
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2224
|
+
const renderUsernameStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepContainer, children: [
|
|
2225
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepTop, children: [
|
|
2226
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.headerRow, children: [
|
|
2227
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.TouchableOpacity, { onPress: () => animateToStep(0), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
|
|
2228
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.titleInline, { color: t.text }], children: "Pick a Username" })
|
|
2186
2229
|
] }),
|
|
2187
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2230
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.subtitle, { color: t.textMuted }], children: "This is how others will see you" }),
|
|
2188
2231
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(StepIndicator, { currentStep: 1 }),
|
|
2189
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2190
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2191
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2232
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: s.avatarCenter, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: [s.avatarFrameSmall, { borderColor: accent }], children: [
|
|
2233
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Image, { source: { uri: avatarUrl }, style: s.avatarSmall }),
|
|
2234
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.checkBadgeSm, { backgroundColor: t.success }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.checkBadgeTextSm, children: "\u2713" }) })
|
|
2192
2235
|
] }) }),
|
|
2193
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2194
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2236
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.inputGroup, children: [
|
|
2237
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.Text, { style: [s.inputLabel, { color: t.text }], children: [
|
|
2195
2238
|
"Username ",
|
|
2196
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2239
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: { color: t.errorText }, children: "*" })
|
|
2197
2240
|
] }),
|
|
2198
2241
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2199
|
-
|
|
2242
|
+
import_react_native6.TextInput,
|
|
2200
2243
|
{
|
|
2201
2244
|
style: [s.input, { backgroundColor: t.surface, color: t.text, borderColor: accent }],
|
|
2202
2245
|
placeholder: "Enter username",
|
|
@@ -2208,63 +2251,63 @@ function DefaultRegistrationScreen({
|
|
|
2208
2251
|
autoFocus: true
|
|
2209
2252
|
}
|
|
2210
2253
|
),
|
|
2211
|
-
checking ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2254
|
+
checking ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.hint, { color: t.textDim }], children: "Checking..." }) : availability ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.hint, { color: availability.available ? t.success : t.errorText }], children: availability.available ? "\u2713 Available!" : availability.reason || "Username taken" }) : username.trim().length > 0 && username.trim().length < 3 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.hint, { color: t.textDim }], children: "At least 3 characters" }) : null
|
|
2212
2255
|
] })
|
|
2213
2256
|
] }),
|
|
2214
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2257
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.bottomRow, children: [
|
|
2215
2258
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2216
|
-
|
|
2259
|
+
import_react_native6.TouchableOpacity,
|
|
2217
2260
|
{
|
|
2218
2261
|
style: [s.secondaryBtn, { borderColor: t.border }],
|
|
2219
2262
|
onPress: () => animateToStep(0),
|
|
2220
2263
|
activeOpacity: 0.7,
|
|
2221
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2264
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
|
|
2222
2265
|
}
|
|
2223
2266
|
),
|
|
2224
2267
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2225
|
-
|
|
2268
|
+
import_react_native6.TouchableOpacity,
|
|
2226
2269
|
{
|
|
2227
2270
|
style: [s.primaryBtn, { backgroundColor: accent, flex: 1, opacity: canContinueUsername ? 1 : 0.4 }],
|
|
2228
2271
|
onPress: () => animateToStep(2),
|
|
2229
2272
|
disabled: !canContinueUsername,
|
|
2230
2273
|
activeOpacity: 0.8,
|
|
2231
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2274
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.primaryBtnText, children: "Continue \u203A" })
|
|
2232
2275
|
}
|
|
2233
2276
|
)
|
|
2234
2277
|
] })
|
|
2235
2278
|
] });
|
|
2236
|
-
const renderReferralStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2237
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2238
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2239
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2240
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2279
|
+
const renderReferralStep = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepContainer, children: [
|
|
2280
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.stepTop, children: [
|
|
2281
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.headerRow, children: [
|
|
2282
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.TouchableOpacity, { onPress: () => animateToStep(1), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
|
|
2283
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.titleInline, { color: t.text }], children: "Almost There!" })
|
|
2241
2284
|
] }),
|
|
2242
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2285
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.subtitle, { color: t.textMuted }], children: "Got a referral code? (optional)" }),
|
|
2243
2286
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(StepIndicator, { currentStep: 2 }),
|
|
2244
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2245
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2246
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2247
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2248
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2249
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2287
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: [s.profileCard, { borderColor: t.border }], children: [
|
|
2288
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.profileLabel, { color: t.textMuted }], children: "Your Profile" }),
|
|
2289
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.profileRow, children: [
|
|
2290
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Image, { source: { uri: avatarUrl }, style: s.profileAvatar }),
|
|
2291
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: { gap: 4 }, children: [
|
|
2292
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.Text, { style: [s.profileUsername, { color: t.text }], children: [
|
|
2250
2293
|
"@",
|
|
2251
2294
|
username
|
|
2252
2295
|
] }),
|
|
2253
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2296
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.Text, { style: [s.profileReady, { color: t.success }], children: [
|
|
2254
2297
|
"\u2713",
|
|
2255
2298
|
" Ready to go!"
|
|
2256
2299
|
] })
|
|
2257
2300
|
] })
|
|
2258
2301
|
] })
|
|
2259
2302
|
] }),
|
|
2260
|
-
error ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2261
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2262
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2303
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.View, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.errorText, { color: t.errorText }], children: error.message }) }) : null,
|
|
2304
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.inputGroup, children: [
|
|
2305
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.Text, { style: [s.inputLabel, { color: t.text }], children: [
|
|
2263
2306
|
"Referral Code ",
|
|
2264
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2307
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: { color: t.textMuted }, children: "(optional)" })
|
|
2265
2308
|
] }),
|
|
2266
2309
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2267
|
-
|
|
2310
|
+
import_react_native6.TextInput,
|
|
2268
2311
|
{
|
|
2269
2312
|
style: [s.input, { backgroundColor: t.surface, color: t.text, borderColor: t.border }],
|
|
2270
2313
|
placeholder: "Enter referral code",
|
|
@@ -2276,31 +2319,31 @@ function DefaultRegistrationScreen({
|
|
|
2276
2319
|
editable: !registering
|
|
2277
2320
|
}
|
|
2278
2321
|
),
|
|
2279
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2322
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.Text, { style: [s.hint, { color: t.textMuted }], children: [
|
|
2280
2323
|
"\u{1F381}",
|
|
2281
2324
|
" If a friend invited you, enter their code to give them credit!"
|
|
2282
2325
|
] })
|
|
2283
2326
|
] })
|
|
2284
2327
|
] }),
|
|
2285
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
2328
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native6.View, { style: s.bottomRow, children: [
|
|
2286
2329
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2287
|
-
|
|
2330
|
+
import_react_native6.TouchableOpacity,
|
|
2288
2331
|
{
|
|
2289
2332
|
style: [s.secondaryBtn, { borderColor: t.border }],
|
|
2290
2333
|
onPress: () => animateToStep(1),
|
|
2291
2334
|
disabled: registering,
|
|
2292
2335
|
activeOpacity: 0.7,
|
|
2293
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2336
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
|
|
2294
2337
|
}
|
|
2295
2338
|
),
|
|
2296
2339
|
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2297
|
-
|
|
2340
|
+
import_react_native6.TouchableOpacity,
|
|
2298
2341
|
{
|
|
2299
2342
|
style: [s.primaryBtn, { backgroundColor: accent, flex: 1, opacity: registering ? 0.7 : 1 }],
|
|
2300
2343
|
onPress: handleSubmit,
|
|
2301
2344
|
disabled: registering,
|
|
2302
2345
|
activeOpacity: 0.8,
|
|
2303
|
-
children: registering ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2346
|
+
children: registering ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.ActivityIndicator, { color: "#FFFFFF", size: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native6.Text, { style: s.primaryBtnText, children: "Create Account" })
|
|
2304
2347
|
}
|
|
2305
2348
|
)
|
|
2306
2349
|
] })
|
|
@@ -2318,18 +2361,18 @@ function DefaultRegistrationScreen({
|
|
|
2318
2361
|
}
|
|
2319
2362
|
};
|
|
2320
2363
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2321
|
-
|
|
2364
|
+
import_react_native6.KeyboardAvoidingView,
|
|
2322
2365
|
{
|
|
2323
2366
|
style: [s.container, { backgroundColor: t.background }],
|
|
2324
|
-
behavior:
|
|
2367
|
+
behavior: import_react_native6.Platform.OS === "ios" ? "padding" : void 0,
|
|
2325
2368
|
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2326
|
-
|
|
2369
|
+
import_react_native6.ScrollView,
|
|
2327
2370
|
{
|
|
2328
2371
|
contentContainerStyle: { flexGrow: 1 },
|
|
2329
2372
|
keyboardShouldPersistTaps: "handled",
|
|
2330
2373
|
bounces: false,
|
|
2331
2374
|
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
2332
|
-
|
|
2375
|
+
import_react_native6.Animated.View,
|
|
2333
2376
|
{
|
|
2334
2377
|
style: [
|
|
2335
2378
|
{ flex: 1 },
|
|
@@ -2343,7 +2386,7 @@ function DefaultRegistrationScreen({
|
|
|
2343
2386
|
}
|
|
2344
2387
|
);
|
|
2345
2388
|
}
|
|
2346
|
-
var s =
|
|
2389
|
+
var s = import_react_native6.StyleSheet.create({
|
|
2347
2390
|
container: { flex: 1 },
|
|
2348
2391
|
// Loading / Error
|
|
2349
2392
|
centerContent: { flex: 1, justifyContent: "center", alignItems: "center", paddingHorizontal: 32, gap: 48 },
|
|
@@ -2595,7 +2638,7 @@ function useAppConfig() {
|
|
|
2595
2638
|
|
|
2596
2639
|
// src/ui/UserProfileCard.tsx
|
|
2597
2640
|
var import_react14 = require("react");
|
|
2598
|
-
var
|
|
2641
|
+
var import_react_native7 = require("react-native");
|
|
2599
2642
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
2600
2643
|
function truncateAddress(address, chars = 4) {
|
|
2601
2644
|
if (address.length <= chars * 2 + 3) return address;
|
|
@@ -2618,16 +2661,16 @@ function UserProfileCard({
|
|
|
2618
2661
|
() => avatarUrl || `https://api.dicebear.com/9.x/avataaars/png?seed=${walletAddress}&size=128`,
|
|
2619
2662
|
[avatarUrl, walletAddress]
|
|
2620
2663
|
);
|
|
2621
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
2622
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2623
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
2624
|
-
username ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2625
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2626
|
-
memberSince ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
2664
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_native7.View, { style: [styles2.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
2665
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native7.Image, { source: { uri: imageUri }, style: styles2.avatar }),
|
|
2666
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_native7.View, { style: styles2.info, children: [
|
|
2667
|
+
username ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native7.Text, { style: [styles2.username, { color: t.text }], children: username }) : null,
|
|
2668
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native7.Text, { style: [styles2.address, { color: t.textMuted }], children: truncateAddress(walletAddress) }),
|
|
2669
|
+
memberSince ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native7.Text, { style: [styles2.memberSince, { color: t.textDim }], children: formatMemberSince(memberSince) }) : null
|
|
2627
2670
|
] })
|
|
2628
2671
|
] });
|
|
2629
2672
|
}
|
|
2630
|
-
var styles2 =
|
|
2673
|
+
var styles2 = import_react_native7.StyleSheet.create({
|
|
2631
2674
|
card: {
|
|
2632
2675
|
flexDirection: "row",
|
|
2633
2676
|
alignItems: "center",
|
|
@@ -2661,7 +2704,7 @@ var styles2 = import_react_native6.StyleSheet.create({
|
|
|
2661
2704
|
});
|
|
2662
2705
|
|
|
2663
2706
|
// src/ui/SettingsSheet.tsx
|
|
2664
|
-
var
|
|
2707
|
+
var import_react_native8 = require("react-native");
|
|
2665
2708
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
2666
2709
|
function truncateAddress2(address, chars = 4) {
|
|
2667
2710
|
if (address.length <= chars * 2 + 3) return address;
|
|
@@ -2680,7 +2723,7 @@ function SettingsSheet({
|
|
|
2680
2723
|
}) {
|
|
2681
2724
|
const t = useDubsTheme();
|
|
2682
2725
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2683
|
-
|
|
2726
|
+
import_react_native8.ScrollView,
|
|
2684
2727
|
{
|
|
2685
2728
|
style: [styles3.container, { backgroundColor: t.background }],
|
|
2686
2729
|
contentContainerStyle: styles3.content,
|
|
@@ -2694,49 +2737,49 @@ function SettingsSheet({
|
|
|
2694
2737
|
memberSince
|
|
2695
2738
|
}
|
|
2696
2739
|
),
|
|
2697
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2740
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_react_native8.View, { style: [styles3.actionsCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
2698
2741
|
onCopyAddress ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2699
|
-
|
|
2742
|
+
import_react_native8.TouchableOpacity,
|
|
2700
2743
|
{
|
|
2701
2744
|
style: styles3.actionRow,
|
|
2702
2745
|
onPress: onCopyAddress,
|
|
2703
2746
|
activeOpacity: 0.7,
|
|
2704
2747
|
children: [
|
|
2705
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2706
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2707
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2748
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_react_native8.View, { style: styles3.actionRowLeft, children: [
|
|
2749
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.actionLabel, { color: t.text }], children: "Wallet Address" }),
|
|
2750
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.actionValue, { color: t.textMuted }], children: truncateAddress2(walletAddress) })
|
|
2708
2751
|
] }),
|
|
2709
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2752
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.copyLabel, { color: t.accent }], children: "Copy" })
|
|
2710
2753
|
]
|
|
2711
2754
|
}
|
|
2712
2755
|
) : null,
|
|
2713
2756
|
onSupport ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
2714
|
-
onCopyAddress ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2757
|
+
onCopyAddress ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.View, { style: [styles3.separator, { backgroundColor: t.border }] }) : null,
|
|
2715
2758
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2716
|
-
|
|
2759
|
+
import_react_native8.TouchableOpacity,
|
|
2717
2760
|
{
|
|
2718
2761
|
style: styles3.actionRow,
|
|
2719
2762
|
onPress: onSupport,
|
|
2720
2763
|
activeOpacity: 0.7,
|
|
2721
2764
|
children: [
|
|
2722
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2723
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2765
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.actionLabel, { color: t.text }], children: "Help & Support" }),
|
|
2766
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.chevron, { color: t.textMuted }], children: "\u203A" })
|
|
2724
2767
|
]
|
|
2725
2768
|
}
|
|
2726
2769
|
)
|
|
2727
2770
|
] }) : null
|
|
2728
2771
|
] }),
|
|
2729
2772
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2730
|
-
|
|
2773
|
+
import_react_native8.TouchableOpacity,
|
|
2731
2774
|
{
|
|
2732
2775
|
style: [styles3.logoutButton, { borderColor: t.live }],
|
|
2733
2776
|
onPress: onLogout,
|
|
2734
2777
|
disabled: loggingOut,
|
|
2735
2778
|
activeOpacity: 0.7,
|
|
2736
|
-
children: loggingOut ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
2779
|
+
children: loggingOut ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.ActivityIndicator, { color: t.live, size: "small" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_native8.Text, { style: [styles3.logoutText, { color: t.live }], children: "Log Out" })
|
|
2737
2780
|
}
|
|
2738
2781
|
),
|
|
2739
|
-
appVersion ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
2782
|
+
appVersion ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_react_native8.Text, { style: [styles3.version, { color: t.textDim }], children: [
|
|
2740
2783
|
"v",
|
|
2741
2784
|
appVersion
|
|
2742
2785
|
] }) : null
|
|
@@ -2744,7 +2787,7 @@ function SettingsSheet({
|
|
|
2744
2787
|
}
|
|
2745
2788
|
);
|
|
2746
2789
|
}
|
|
2747
|
-
var styles3 =
|
|
2790
|
+
var styles3 = import_react_native8.StyleSheet.create({
|
|
2748
2791
|
container: {
|
|
2749
2792
|
flex: 1
|
|
2750
2793
|
},
|
|
@@ -2808,7 +2851,7 @@ var styles3 = import_react_native7.StyleSheet.create({
|
|
|
2808
2851
|
|
|
2809
2852
|
// src/ui/game/GamePoster.tsx
|
|
2810
2853
|
var import_react15 = require("react");
|
|
2811
|
-
var
|
|
2854
|
+
var import_react_native9 = require("react-native");
|
|
2812
2855
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
2813
2856
|
function computeCountdown(lockTimestamp) {
|
|
2814
2857
|
if (!lockTimestamp) return "";
|
|
@@ -2830,7 +2873,7 @@ function GamePoster({ game, ImageComponent }) {
|
|
|
2830
2873
|
const away = opponents[1];
|
|
2831
2874
|
const countdown = computeCountdown(game.lockTimestamp);
|
|
2832
2875
|
const isLive = countdown === "LIVE";
|
|
2833
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
2876
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native9.View, { style: styles4.container, children: [
|
|
2834
2877
|
game.media?.poster ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2835
2878
|
Img,
|
|
2836
2879
|
{
|
|
@@ -2838,19 +2881,19 @@ function GamePoster({ game, ImageComponent }) {
|
|
|
2838
2881
|
style: styles4.image,
|
|
2839
2882
|
resizeMode: "cover"
|
|
2840
2883
|
}
|
|
2841
|
-
) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2884
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.View, { style: [styles4.image, { backgroundColor: t.surface }], children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native9.View, { style: styles4.fallback, children: [
|
|
2842
2885
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TeamLogoInternal, { url: home?.imageUrl, size: 56, Img }),
|
|
2843
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2886
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.Text, { style: styles4.vs, children: "VS" }),
|
|
2844
2887
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TeamLogoInternal, { url: away?.imageUrl, size: 56, Img })
|
|
2845
2888
|
] }) }),
|
|
2846
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2847
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
2848
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2849
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2850
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2889
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.View, { style: styles4.overlay }),
|
|
2890
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native9.View, { style: styles4.teamNames, children: [
|
|
2891
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.Text, { style: styles4.teamNameText, numberOfLines: 1, children: home?.name || "Home" }),
|
|
2892
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.Text, { style: styles4.teamNameVs, children: "vs" }),
|
|
2893
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.Text, { style: styles4.teamNameText, numberOfLines: 1, children: away?.name || "Away" })
|
|
2851
2894
|
] }),
|
|
2852
|
-
countdown ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2853
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2895
|
+
countdown ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.View, { style: styles4.countdownPill, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.Text, { style: [styles4.countdownText, isLive && styles4.countdownLive], children: countdown }) }) : null,
|
|
2896
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.View, { style: styles4.poolPill, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_native9.Text, { style: styles4.poolText, children: [
|
|
2854
2897
|
game.totalPool || 0,
|
|
2855
2898
|
" SOL"
|
|
2856
2899
|
] }) })
|
|
@@ -2859,7 +2902,7 @@ function GamePoster({ game, ImageComponent }) {
|
|
|
2859
2902
|
function TeamLogoInternal({ url, size, Img }) {
|
|
2860
2903
|
const [failed, setFailed] = (0, import_react15.useState)(false);
|
|
2861
2904
|
if (!url || failed) {
|
|
2862
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2905
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_native9.View, { style: [styles4.logoPlaceholder, { width: size, height: size, borderRadius: size / 2 }] });
|
|
2863
2906
|
}
|
|
2864
2907
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
2865
2908
|
Img,
|
|
@@ -2871,7 +2914,7 @@ function TeamLogoInternal({ url, size, Img }) {
|
|
|
2871
2914
|
}
|
|
2872
2915
|
);
|
|
2873
2916
|
}
|
|
2874
|
-
var styles4 =
|
|
2917
|
+
var styles4 = import_react_native9.StyleSheet.create({
|
|
2875
2918
|
container: {
|
|
2876
2919
|
height: 200,
|
|
2877
2920
|
borderRadius: 16,
|
|
@@ -2879,12 +2922,12 @@ var styles4 = import_react_native8.StyleSheet.create({
|
|
|
2879
2922
|
position: "relative"
|
|
2880
2923
|
},
|
|
2881
2924
|
image: {
|
|
2882
|
-
...
|
|
2925
|
+
...import_react_native9.StyleSheet.absoluteFillObject,
|
|
2883
2926
|
justifyContent: "center",
|
|
2884
2927
|
alignItems: "center"
|
|
2885
2928
|
},
|
|
2886
2929
|
overlay: {
|
|
2887
|
-
...
|
|
2930
|
+
...import_react_native9.StyleSheet.absoluteFillObject,
|
|
2888
2931
|
backgroundColor: "rgba(0,0,0,0.35)"
|
|
2889
2932
|
},
|
|
2890
2933
|
fallback: {
|
|
@@ -2959,7 +3002,7 @@ var styles4 = import_react_native8.StyleSheet.create({
|
|
|
2959
3002
|
|
|
2960
3003
|
// src/ui/game/LivePoolsCard.tsx
|
|
2961
3004
|
var import_react16 = require("react");
|
|
2962
|
-
var
|
|
3005
|
+
var import_react_native10 = require("react-native");
|
|
2963
3006
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
2964
3007
|
function LivePoolsCard({
|
|
2965
3008
|
game,
|
|
@@ -2982,29 +3025,29 @@ function LivePoolsCard({
|
|
|
2982
3025
|
awayOdds: awayPool > 0 ? (totalPool / awayPool).toFixed(2) : "\u2014"
|
|
2983
3026
|
};
|
|
2984
3027
|
}, [homePool, awayPool, totalPool]);
|
|
2985
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
2986
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
2987
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3028
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.View, { style: [styles5.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
3029
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_native10.Text, { style: [styles5.title, { color: t.text }], children: "Live Pools" }),
|
|
3030
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: [styles5.total, { color: t.accent }], children: [
|
|
2988
3031
|
totalPool,
|
|
2989
3032
|
" SOL total"
|
|
2990
3033
|
] }),
|
|
2991
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3034
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.View, { style: styles5.bars, children: [
|
|
2992
3035
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PoolBar, { name: homeName, amount: homePool, percent: homePercent, color: homeColor, t }),
|
|
2993
3036
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PoolBar, { name: awayName, amount: awayPool, percent: awayPercent, color: awayColor, t })
|
|
2994
3037
|
] }),
|
|
2995
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
2996
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3038
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.View, { style: styles5.oddsRow, children: [
|
|
3039
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: [styles5.oddsText, { color: t.textMuted }], children: [
|
|
2997
3040
|
homeName,
|
|
2998
3041
|
": ",
|
|
2999
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3042
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: { color: t.text, fontWeight: "700" }, children: [
|
|
3000
3043
|
homeOdds,
|
|
3001
3044
|
"x"
|
|
3002
3045
|
] })
|
|
3003
3046
|
] }),
|
|
3004
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3047
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: [styles5.oddsText, { color: t.textMuted }], children: [
|
|
3005
3048
|
awayName,
|
|
3006
3049
|
": ",
|
|
3007
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3050
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: { color: t.text, fontWeight: "700" }, children: [
|
|
3008
3051
|
awayOdds,
|
|
3009
3052
|
"x"
|
|
3010
3053
|
] })
|
|
@@ -3013,16 +3056,16 @@ function LivePoolsCard({
|
|
|
3013
3056
|
] });
|
|
3014
3057
|
}
|
|
3015
3058
|
function PoolBar({ name, amount, percent, color, t }) {
|
|
3016
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3017
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
3018
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
3019
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
3059
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.View, { style: styles5.barRow, children: [
|
|
3060
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_native10.Text, { style: [styles5.barLabel, { color: t.textSecondary }], numberOfLines: 1, children: name }),
|
|
3061
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_native10.View, { style: [styles5.barTrack, { backgroundColor: t.border }], children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_native10.View, { style: [styles5.barFill, { width: `${Math.max(percent, 2)}%`, backgroundColor: color }] }) }),
|
|
3062
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_react_native10.Text, { style: [styles5.barAmount, { color: t.text }], children: [
|
|
3020
3063
|
amount,
|
|
3021
3064
|
" SOL"
|
|
3022
3065
|
] })
|
|
3023
3066
|
] });
|
|
3024
3067
|
}
|
|
3025
|
-
var styles5 =
|
|
3068
|
+
var styles5 = import_react_native10.StyleSheet.create({
|
|
3026
3069
|
card: { borderRadius: 16, borderWidth: 1, padding: 16 },
|
|
3027
3070
|
title: { fontSize: 17, fontWeight: "700", marginBottom: 4 },
|
|
3028
3071
|
total: { fontSize: 14, fontWeight: "600", marginBottom: 14 },
|
|
@@ -3038,7 +3081,7 @@ var styles5 = import_react_native9.StyleSheet.create({
|
|
|
3038
3081
|
|
|
3039
3082
|
// src/ui/game/PickWinnerCard.tsx
|
|
3040
3083
|
var import_react17 = require("react");
|
|
3041
|
-
var
|
|
3084
|
+
var import_react_native11 = require("react-native");
|
|
3042
3085
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
3043
3086
|
function PickWinnerCard({
|
|
3044
3087
|
game,
|
|
@@ -3063,9 +3106,9 @@ function PickWinnerCard({
|
|
|
3063
3106
|
}), [totalPool, homePool, awayPool, bettors]);
|
|
3064
3107
|
const homeName = shortName ? shortName(opponents[0]?.name) : opponents[0]?.name || "Home";
|
|
3065
3108
|
const awayName = shortName ? shortName(opponents[1]?.name) : opponents[1]?.name || "Away";
|
|
3066
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
3067
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3068
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
3109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_native11.View, { style: [styles6.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
3110
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_native11.Text, { style: [styles6.title, { color: t.text }], children: "Pick Your Winner" }),
|
|
3111
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_native11.View, { style: styles6.row, children: [
|
|
3069
3112
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3070
3113
|
TeamOption,
|
|
3071
3114
|
{
|
|
@@ -3112,29 +3155,29 @@ function TeamOption({
|
|
|
3112
3155
|
const Img = ImageComponent || require("react-native").Image;
|
|
3113
3156
|
const showImage = imageUrl && !imgFailed;
|
|
3114
3157
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
3115
|
-
|
|
3158
|
+
import_react_native11.TouchableOpacity,
|
|
3116
3159
|
{
|
|
3117
3160
|
style: [styles6.option, { borderColor: selected ? color : t.border, backgroundColor: selected ? color + "15" : t.background }],
|
|
3118
3161
|
onPress,
|
|
3119
3162
|
activeOpacity: 0.7,
|
|
3120
3163
|
children: [
|
|
3121
|
-
showImage ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Img, { source: { uri: imageUrl }, style: styles6.logo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3122
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3123
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
3164
|
+
showImage ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Img, { source: { uri: imageUrl }, style: styles6.logo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_native11.View, { style: [styles6.logo, styles6.logoPlaceholder] }),
|
|
3165
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_native11.Text, { style: [styles6.name, { color: t.text }], numberOfLines: 1, children: name }),
|
|
3166
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_native11.Text, { style: [styles6.odds, { color }], children: [
|
|
3124
3167
|
odds,
|
|
3125
3168
|
"x"
|
|
3126
3169
|
] }),
|
|
3127
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
3170
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_native11.Text, { style: [styles6.bets, { color: t.textMuted }], children: [
|
|
3128
3171
|
bets,
|
|
3129
3172
|
" ",
|
|
3130
3173
|
bets === 1 ? "bet" : "bets"
|
|
3131
3174
|
] }),
|
|
3132
|
-
selected && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
3175
|
+
selected && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_native11.View, { style: [styles6.badge, { backgroundColor: color }], children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_native11.Text, { style: styles6.badgeText, children: "Selected" }) })
|
|
3133
3176
|
]
|
|
3134
3177
|
}
|
|
3135
3178
|
);
|
|
3136
3179
|
}
|
|
3137
|
-
var styles6 =
|
|
3180
|
+
var styles6 = import_react_native11.StyleSheet.create({
|
|
3138
3181
|
card: { borderRadius: 16, borderWidth: 1, padding: 16 },
|
|
3139
3182
|
title: { fontSize: 17, fontWeight: "700", marginBottom: 12 },
|
|
3140
3183
|
row: { flexDirection: "row", gap: 12 },
|
|
@@ -3150,7 +3193,7 @@ var styles6 = import_react_native10.StyleSheet.create({
|
|
|
3150
3193
|
|
|
3151
3194
|
// src/ui/game/PlayersCard.tsx
|
|
3152
3195
|
var import_react18 = require("react");
|
|
3153
|
-
var
|
|
3196
|
+
var import_react_native12 = require("react-native");
|
|
3154
3197
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
3155
3198
|
function truncateWallet(addr, chars) {
|
|
3156
3199
|
if (addr.length <= chars * 2 + 3) return addr;
|
|
@@ -3171,12 +3214,12 @@ function PlayersCard({
|
|
|
3171
3214
|
if (team === "away") return awayColor;
|
|
3172
3215
|
return drawColor;
|
|
3173
3216
|
};
|
|
3174
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
3175
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
3217
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react_native12.View, { style: [styles7.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
3218
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react_native12.Text, { style: [styles7.title, { color: t.text }], children: [
|
|
3176
3219
|
"Players",
|
|
3177
3220
|
bettors.length > 0 ? ` (${bettors.length})` : ""
|
|
3178
3221
|
] }),
|
|
3179
|
-
bettors.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3222
|
+
bettors.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_native12.Text, { style: [styles7.empty, { color: t.textMuted }], children: "No players yet \u2014 be the first!" }) : bettors.map((b, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3180
3223
|
BettorRow,
|
|
3181
3224
|
{
|
|
3182
3225
|
bettor: b,
|
|
@@ -3201,17 +3244,17 @@ function BettorRow({
|
|
|
3201
3244
|
const [imgFailed, setImgFailed] = (0, import_react18.useState)(false);
|
|
3202
3245
|
const Img = ImageComponent || require("react-native").Image;
|
|
3203
3246
|
const showAvatar = bettor.avatar && !imgFailed;
|
|
3204
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
3205
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3206
|
-
showAvatar ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Img, { source: { uri: bettor.avatar }, style: styles7.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3207
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
3208
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
3247
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react_native12.View, { style: [styles7.row, !isFirst && { borderTopColor: t.border, borderTopWidth: 1 }], children: [
|
|
3248
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_native12.View, { style: [styles7.dot, { backgroundColor: dotColor }] }),
|
|
3249
|
+
showAvatar ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Img, { source: { uri: bettor.avatar }, style: styles7.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_native12.View, { style: [styles7.avatar, styles7.avatarPlaceholder] }),
|
|
3250
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_native12.View, { style: styles7.nameCol, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_native12.Text, { style: [styles7.username, { color: t.text }], numberOfLines: 1, children: bettor.username || truncateWallet(bettor.wallet, truncateChars) }) }),
|
|
3251
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react_native12.Text, { style: [styles7.amount, { color: t.textSecondary }], children: [
|
|
3209
3252
|
bettor.amount,
|
|
3210
3253
|
" SOL"
|
|
3211
3254
|
] })
|
|
3212
3255
|
] });
|
|
3213
3256
|
}
|
|
3214
|
-
var styles7 =
|
|
3257
|
+
var styles7 = import_react_native12.StyleSheet.create({
|
|
3215
3258
|
card: { borderRadius: 16, borderWidth: 1, padding: 16 },
|
|
3216
3259
|
title: { fontSize: 17, fontWeight: "700", marginBottom: 12 },
|
|
3217
3260
|
empty: { fontSize: 14, textAlign: "center", paddingVertical: 16 },
|
|
@@ -3226,7 +3269,7 @@ var styles7 = import_react_native11.StyleSheet.create({
|
|
|
3226
3269
|
|
|
3227
3270
|
// src/ui/game/JoinGameButton.tsx
|
|
3228
3271
|
var import_react19 = require("react");
|
|
3229
|
-
var
|
|
3272
|
+
var import_react_native13 = require("react-native");
|
|
3230
3273
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
3231
3274
|
var STATUS_LABELS = {
|
|
3232
3275
|
building: "Building transaction...",
|
|
@@ -3243,30 +3286,30 @@ function JoinGameButton({ game, walletAddress, selectedTeam, status, onJoin }) {
|
|
|
3243
3286
|
if (alreadyJoined || game.isLocked || game.isResolved) return null;
|
|
3244
3287
|
const isJoining = status !== "idle" && status !== "success" && status !== "error";
|
|
3245
3288
|
const statusLabel = STATUS_LABELS[status] || "";
|
|
3246
|
-
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
3247
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
3248
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3249
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
3289
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react_native13.View, { style: [styles8.bar, { backgroundColor: t.background, borderTopColor: t.border }], children: [
|
|
3290
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react_native13.View, { style: styles8.buyInRow, children: [
|
|
3291
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_native13.Text, { style: [styles8.buyInLabel, { color: t.textMuted }], children: "Buy-in" }),
|
|
3292
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react_native13.Text, { style: [styles8.buyInValue, { color: t.text }], children: [
|
|
3250
3293
|
game.buyIn,
|
|
3251
3294
|
" SOL"
|
|
3252
3295
|
] })
|
|
3253
3296
|
] }),
|
|
3254
3297
|
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3255
|
-
|
|
3298
|
+
import_react_native13.TouchableOpacity,
|
|
3256
3299
|
{
|
|
3257
3300
|
style: [styles8.button, { backgroundColor: selectedTeam ? "#22D3EE" : t.border }],
|
|
3258
3301
|
disabled: !selectedTeam || isJoining,
|
|
3259
3302
|
onPress: onJoin,
|
|
3260
3303
|
activeOpacity: 0.8,
|
|
3261
|
-
children: isJoining ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
3262
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3263
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3264
|
-
] }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
3304
|
+
children: isJoining ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react_native13.View, { style: styles8.joiningRow, children: [
|
|
3305
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_native13.ActivityIndicator, { size: "small", color: "#000" }),
|
|
3306
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_native13.Text, { style: styles8.buttonText, children: statusLabel })
|
|
3307
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_native13.Text, { style: [styles8.buttonText, !selectedTeam && { color: t.textMuted }], children: selectedTeam ? `Join Bet \u2014 ${game.buyIn} SOL` : "Pick a team to bet" })
|
|
3265
3308
|
}
|
|
3266
3309
|
)
|
|
3267
3310
|
] });
|
|
3268
3311
|
}
|
|
3269
|
-
var styles8 =
|
|
3312
|
+
var styles8 = import_react_native13.StyleSheet.create({
|
|
3270
3313
|
bar: { position: "absolute", bottom: 0, left: 0, right: 0, paddingHorizontal: 16, paddingTop: 12, paddingBottom: 36, borderTopWidth: 1 },
|
|
3271
3314
|
buyInRow: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", marginBottom: 10 },
|
|
3272
3315
|
buyInLabel: { fontSize: 13 },
|
|
@@ -3278,7 +3321,7 @@ var styles8 = import_react_native12.StyleSheet.create({
|
|
|
3278
3321
|
|
|
3279
3322
|
// src/ui/game/CreateCustomGameSheet.tsx
|
|
3280
3323
|
var import_react20 = require("react");
|
|
3281
|
-
var
|
|
3324
|
+
var import_react_native14 = require("react-native");
|
|
3282
3325
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
3283
3326
|
var STATUS_LABELS2 = {
|
|
3284
3327
|
building: "Building transaction...",
|
|
@@ -3305,9 +3348,9 @@ function CreateCustomGameSheet({
|
|
|
3305
3348
|
const [selectedAmount, setSelectedAmount] = (0, import_react20.useState)(null);
|
|
3306
3349
|
const [customAmount, setCustomAmount] = (0, import_react20.useState)("");
|
|
3307
3350
|
const [isCustom, setIsCustom] = (0, import_react20.useState)(false);
|
|
3308
|
-
const overlayOpacity = (0, import_react20.useRef)(new
|
|
3351
|
+
const overlayOpacity = (0, import_react20.useRef)(new import_react_native14.Animated.Value(0)).current;
|
|
3309
3352
|
(0, import_react20.useEffect)(() => {
|
|
3310
|
-
|
|
3353
|
+
import_react_native14.Animated.timing(overlayOpacity, {
|
|
3311
3354
|
toValue: visible ? 1 : 0,
|
|
3312
3355
|
duration: 250,
|
|
3313
3356
|
useNativeDriver: true
|
|
@@ -3377,32 +3420,32 @@ function CreateCustomGameSheet({
|
|
|
3377
3420
|
const statusLabel = STATUS_LABELS2[mutation.status] || "";
|
|
3378
3421
|
const playersLabel = playerCount === 2 ? "2 (1v1)" : `${playerCount} players`;
|
|
3379
3422
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3380
|
-
|
|
3423
|
+
import_react_native14.Modal,
|
|
3381
3424
|
{
|
|
3382
3425
|
visible,
|
|
3383
3426
|
animationType: "slide",
|
|
3384
3427
|
transparent: true,
|
|
3385
3428
|
onRequestClose: onDismiss,
|
|
3386
3429
|
children: [
|
|
3387
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3430
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Animated.View, { style: [styles9.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.TouchableOpacity, { style: styles9.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
|
|
3388
3431
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3389
|
-
|
|
3432
|
+
import_react_native14.KeyboardAvoidingView,
|
|
3390
3433
|
{
|
|
3391
3434
|
style: styles9.keyboardView,
|
|
3392
|
-
behavior:
|
|
3393
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3394
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3395
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3396
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3397
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3435
|
+
behavior: import_react_native14.Platform.OS === "ios" ? "padding" : void 0,
|
|
3436
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: styles9.sheetPositioner, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: [styles9.sheet, { backgroundColor: t.background }], children: [
|
|
3437
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: styles9.handleRow, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: [styles9.handle, { backgroundColor: t.textMuted }] }) }),
|
|
3438
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.header, children: [
|
|
3439
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.headerTitle, { color: t.text }], children: "New Game" }),
|
|
3440
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.TouchableOpacity, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.closeButton, { color: t.textMuted }], children: "\u2715" }) })
|
|
3398
3441
|
] }),
|
|
3399
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3400
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3401
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3442
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.section, children: [
|
|
3443
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.sectionLabel, { color: t.textSecondary }], children: "Buy-In Amount" }),
|
|
3444
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.chipsRow, children: [
|
|
3402
3445
|
presetAmounts.map((amount) => {
|
|
3403
3446
|
const active = !isCustom && selectedAmount === amount;
|
|
3404
3447
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3405
|
-
|
|
3448
|
+
import_react_native14.TouchableOpacity,
|
|
3406
3449
|
{
|
|
3407
3450
|
style: [
|
|
3408
3451
|
styles9.chip,
|
|
@@ -3411,7 +3454,7 @@ function CreateCustomGameSheet({
|
|
|
3411
3454
|
],
|
|
3412
3455
|
onPress: () => handlePresetSelect(amount),
|
|
3413
3456
|
activeOpacity: 0.8,
|
|
3414
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3457
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.Text, { style: [styles9.chipText, { color: active ? "#FFFFFF" : t.text }], children: [
|
|
3415
3458
|
amount,
|
|
3416
3459
|
" SOL"
|
|
3417
3460
|
] })
|
|
@@ -3420,7 +3463,7 @@ function CreateCustomGameSheet({
|
|
|
3420
3463
|
);
|
|
3421
3464
|
}),
|
|
3422
3465
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3423
|
-
|
|
3466
|
+
import_react_native14.TouchableOpacity,
|
|
3424
3467
|
{
|
|
3425
3468
|
style: [
|
|
3426
3469
|
styles9.chip,
|
|
@@ -3429,12 +3472,12 @@ function CreateCustomGameSheet({
|
|
|
3429
3472
|
],
|
|
3430
3473
|
onPress: handleCustomSelect,
|
|
3431
3474
|
activeOpacity: 0.8,
|
|
3432
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3475
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.chipText, { color: isCustom ? "#FFFFFF" : t.text }], children: "Custom" })
|
|
3433
3476
|
}
|
|
3434
3477
|
)
|
|
3435
3478
|
] }),
|
|
3436
3479
|
isCustom && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3437
|
-
|
|
3480
|
+
import_react_native14.TextInput,
|
|
3438
3481
|
{
|
|
3439
3482
|
style: [styles9.input, { backgroundColor: t.surface, color: t.text, borderColor: t.accent }],
|
|
3440
3483
|
placeholder: "Enter amount in SOL",
|
|
@@ -3446,31 +3489,31 @@ function CreateCustomGameSheet({
|
|
|
3446
3489
|
}
|
|
3447
3490
|
)
|
|
3448
3491
|
] }),
|
|
3449
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3450
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3451
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3452
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3492
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: [styles9.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
|
|
3493
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.summaryRow, children: [
|
|
3494
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryLabel, { color: t.textMuted }], children: "Your buy-in" }),
|
|
3495
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryValue, { color: t.text }], children: effectiveAmount ? `${effectiveAmount} SOL` : "\u2014" })
|
|
3453
3496
|
] }),
|
|
3454
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3455
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3456
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3457
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3497
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: [styles9.summarySep, { backgroundColor: t.border }] }),
|
|
3498
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.summaryRow, children: [
|
|
3499
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryLabel, { color: t.textMuted }], children: "Players" }),
|
|
3500
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryValue, { color: t.text }], children: playersLabel })
|
|
3458
3501
|
] }),
|
|
3459
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3460
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3461
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3462
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3463
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3464
|
-
effectiveAmount ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3502
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: [styles9.summarySep, { backgroundColor: t.border }] }),
|
|
3503
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.summaryRow, children: [
|
|
3504
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryLabel, { color: t.textMuted }], children: "Winner Takes" }),
|
|
3505
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.winnerCol, children: [
|
|
3506
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.summaryValue, { color: t.success }], children: effectiveAmount ? `${winnerTakes.toFixed(4)} SOL` : "\u2014" }),
|
|
3507
|
+
effectiveAmount ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.Text, { style: [styles9.feeNote, { color: t.textDim }], children: [
|
|
3465
3508
|
fee,
|
|
3466
3509
|
"% platform fee"
|
|
3467
3510
|
] }) : null
|
|
3468
3511
|
] })
|
|
3469
3512
|
] })
|
|
3470
3513
|
] }),
|
|
3471
|
-
mutation.error && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3514
|
+
mutation.error && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.View, { style: [styles9.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.errorText, { color: t.errorText }], children: mutation.error.message }) }),
|
|
3472
3515
|
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3473
|
-
|
|
3516
|
+
import_react_native14.TouchableOpacity,
|
|
3474
3517
|
{
|
|
3475
3518
|
style: [
|
|
3476
3519
|
styles9.ctaButton,
|
|
@@ -3479,10 +3522,10 @@ function CreateCustomGameSheet({
|
|
|
3479
3522
|
disabled: !canCreate,
|
|
3480
3523
|
onPress: handleCreate,
|
|
3481
3524
|
activeOpacity: 0.8,
|
|
3482
|
-
children: isMutating ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
3483
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3484
|
-
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3485
|
-
] }) : mutation.status === "success" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
3525
|
+
children: isMutating ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_native14.View, { style: styles9.ctaLoading, children: [
|
|
3526
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.ActivityIndicator, { size: "small", color: "#FFFFFF" }),
|
|
3527
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: styles9.ctaText, children: statusLabel })
|
|
3528
|
+
] }) : mutation.status === "success" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: styles9.ctaText, children: STATUS_LABELS2.success }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_native14.Text, { style: [styles9.ctaText, !canCreate && { opacity: 0.5 }], children: effectiveAmount ? `Create Game \u2014 ${effectiveAmount} SOL` : "Select buy-in amount" })
|
|
3486
3529
|
}
|
|
3487
3530
|
)
|
|
3488
3531
|
] }) })
|
|
@@ -3492,9 +3535,9 @@ function CreateCustomGameSheet({
|
|
|
3492
3535
|
}
|
|
3493
3536
|
);
|
|
3494
3537
|
}
|
|
3495
|
-
var styles9 =
|
|
3538
|
+
var styles9 = import_react_native14.StyleSheet.create({
|
|
3496
3539
|
overlay: {
|
|
3497
|
-
...
|
|
3540
|
+
...import_react_native14.StyleSheet.absoluteFillObject,
|
|
3498
3541
|
backgroundColor: "rgba(0,0,0,0.5)"
|
|
3499
3542
|
},
|
|
3500
3543
|
overlayTap: {
|
|
@@ -3650,6 +3693,7 @@ var styles9 = import_react_native13.StyleSheet.create({
|
|
|
3650
3693
|
SettingsSheet,
|
|
3651
3694
|
UserProfileCard,
|
|
3652
3695
|
createSecureStoreStorage,
|
|
3696
|
+
getDeviceInfo,
|
|
3653
3697
|
mergeTheme,
|
|
3654
3698
|
parseSolanaError,
|
|
3655
3699
|
signAndSendBase64Transaction,
|