@dubsdotapp/expo 0.5.11 → 0.5.12

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 CHANGED
@@ -1459,6 +1459,29 @@ interface SolSliderProps {
1459
1459
  }
1460
1460
  declare function SolSlider({ value, min, max, step, accentColor, onValueChange, onSlidingComplete, onTick, disabled, }: SolSliderProps): react_jsx_runtime.JSX.Element;
1461
1461
 
1462
+ interface CreateGameSheetProps {
1463
+ visible: boolean;
1464
+ onDismiss: () => void;
1465
+ event: UnifiedEvent;
1466
+ /** Override team colors */
1467
+ homeColor?: string;
1468
+ awayColor?: string;
1469
+ /** Callbacks */
1470
+ onSuccess?: (result: CreateGameMutationResult) => void;
1471
+ onError?: (error: Error) => void;
1472
+ /** Called when the user taps a team card */
1473
+ onTeamSelect?: (team: 'home' | 'away') => void;
1474
+ /** Called on success (for sound/animation) */
1475
+ onCreateSuccess?: (result: CreateGameMutationResult) => void;
1476
+ /** Called on each slider tick */
1477
+ onSliderTick?: (value: number) => void;
1478
+ /** Max wager in SOL */
1479
+ maxWager?: number;
1480
+ /** Custom short-name function for team labels */
1481
+ shortName?: (name: string | null) => string;
1482
+ }
1483
+ declare function CreateGameSheet({ visible, onDismiss, event, homeColor, awayColor, onSuccess, onError, onTeamSelect, onCreateSuccess, onSliderTick, maxWager, shortName, }: CreateGameSheetProps): react_jsx_runtime.JSX.Element;
1484
+
1462
1485
  /**
1463
1486
  * Deserialize a base64-encoded transaction, sign via wallet adapter, send to Solana.
1464
1487
  * Prefers signAndSendTransaction if available (MWA), otherwise falls back to
@@ -1474,4 +1497,4 @@ declare function signAndSendBase64Transaction(base64Tx: string, wallet: WalletAd
1474
1497
  */
1475
1498
  declare function ensurePngAvatar(url: string | null | undefined): string | undefined;
1476
1499
 
1477
- export { type ArcadeAttempt, type ArcadeCountdown, type ArcadeEntry, type ArcadeLeaderboardEntry, ArcadeLeaderboardSheet, type ArcadeLeaderboardSheetProps, type ArcadePool, type ArcadePoolResult, type ArcadePoolStats, AuthGate, type ConnectWalletScreenProps$1 as AuthGateConnectWalletProps, type AuthGateProps, type AuthStatus, type AuthenticateParams, type AuthenticateResult, type Bettor, type BuildArcadeEntryResult, type BuildClaimParams, type BuildClaimResult, type CheckUsernameResult, ClaimButton, type ClaimButtonProps, type ClaimMutationResult, ClaimPrizeSheet, type ClaimPrizeSheetProps, type ClaimStatus, type ConfirmClaimParams, type ConfirmClaimResult, type ConfirmGameParams, type ConfirmGameResult, ConnectWalletButton, type ConnectWalletButtonProps, ConnectWalletScreen, type ConnectWalletScreenProps, type CreateCustomGameMutationResult, type CreateCustomGameParams, type CreateCustomGameResult, CreateCustomGameSheet, type CreateCustomGameSheetProps, type CreateGameMutationResult, type CreateGameParams, type CreateGameResult, DEFAULT_BASE_URL, DEFAULT_RPC_URL, type DeviceInfo, DubsApiError, type DubsAppUser, DubsClient, type DubsClientConfig, type DubsContextValue, type DubsNetwork, DubsProvider, type DubsProviderProps, type DubsPublicUser, type DubsTheme, type DubsUser, type EnterArcadePoolMutationResult, type EnterArcadePoolResult, EnterArcadePoolSheet, type EnterArcadePoolSheetProps, type EsportsMatchDetail, type EsportsMatchOpponent, type EsportsMatchResult, type EventMedia, type EventMeta, type EventStream, type GameDetail, type GameListItem, type GameListOpponent, type GameMedia, GamePoster, type GamePosterProps, type GetGamesParams, type GetNetworkGamesParams, type GetUpcomingEventsParams, JoinGameButton, type JoinGameButtonProps, type JoinGameMutationResult, type JoinGameParams, type JoinGameResult, JoinGameSheet, type JoinGameSheetProps, LivePoolsCard, type LivePoolsCardProps, type LiveScore, type LiveScoreCompetitor, type MutationResult, type MutationStatus, type MwaAdapterConfig, type MwaTransactFn, MwaWalletAdapter, NETWORK_CONFIG, type NonceResult, type Opponent, type Pagination, type ParsedError, PhantomDeeplinkAdapter, type PhantomDeeplinkAdapterConfig, type PhantomSession, PickWinnerCard, type PickWinnerCardProps, PlayersCard, type PlayersCardProps, type PushNotificationStatus, type QueryResult, type RegisterParams, type RegisterResult, type RegistrationScreenProps, SOLANA_PROGRAM_ERRORS, STORAGE_KEYS, SettingsSheet, type SettingsSheetProps, SolSlider, type SolSliderProps, type SolanaErrorCode, type StartAttemptResult, type SubmitScoreResult, type TokenStorage, type UFCData, type UFCEvent, type UFCFight, type UFCFighter, type UFCFighterDetail, type UiConfig, type UnifiedEvent, type UseArcadeBridgeOptions, type UseArcadeBridgeResult, type UseArcadeGameResult, type UseArcadePoolResult, type UseArcadePoolsResult, type UseAuthResult, UserProfileCard, type UserProfileCardProps, UserProfileSheet, type UserProfileSheetProps, type ValidateEventResult, type WalletAdapter, createSecureStoreStorage, ensurePngAvatar, getDeviceInfo, isSolanaSeeker, mergeTheme, parseSolanaError, signAndSendBase64Transaction, useAppConfig, useArcadeBridge, useArcadeCountdown, useArcadeGame, useArcadePool, useArcadePools, useAuth, useClaim, useCreateCustomGame, useCreateGame, useDubs, useDubsTheme, useEnterArcadePool, useEvents, useGame, useGames, useHasClaimed, useJoinGame, useNetworkGames, usePushNotifications, useUFCFightCard, useUFCFighterDetail };
1500
+ export { type ArcadeAttempt, type ArcadeCountdown, type ArcadeEntry, type ArcadeLeaderboardEntry, ArcadeLeaderboardSheet, type ArcadeLeaderboardSheetProps, type ArcadePool, type ArcadePoolResult, type ArcadePoolStats, AuthGate, type ConnectWalletScreenProps$1 as AuthGateConnectWalletProps, type AuthGateProps, type AuthStatus, type AuthenticateParams, type AuthenticateResult, type Bettor, type BuildArcadeEntryResult, type BuildClaimParams, type BuildClaimResult, type CheckUsernameResult, ClaimButton, type ClaimButtonProps, type ClaimMutationResult, ClaimPrizeSheet, type ClaimPrizeSheetProps, type ClaimStatus, type ConfirmClaimParams, type ConfirmClaimResult, type ConfirmGameParams, type ConfirmGameResult, ConnectWalletButton, type ConnectWalletButtonProps, ConnectWalletScreen, type ConnectWalletScreenProps, type CreateCustomGameMutationResult, type CreateCustomGameParams, type CreateCustomGameResult, CreateCustomGameSheet, type CreateCustomGameSheetProps, type CreateGameMutationResult, type CreateGameParams, type CreateGameResult, CreateGameSheet, type CreateGameSheetProps, DEFAULT_BASE_URL, DEFAULT_RPC_URL, type DeviceInfo, DubsApiError, type DubsAppUser, DubsClient, type DubsClientConfig, type DubsContextValue, type DubsNetwork, DubsProvider, type DubsProviderProps, type DubsPublicUser, type DubsTheme, type DubsUser, type EnterArcadePoolMutationResult, type EnterArcadePoolResult, EnterArcadePoolSheet, type EnterArcadePoolSheetProps, type EsportsMatchDetail, type EsportsMatchOpponent, type EsportsMatchResult, type EventMedia, type EventMeta, type EventStream, type GameDetail, type GameListItem, type GameListOpponent, type GameMedia, GamePoster, type GamePosterProps, type GetGamesParams, type GetNetworkGamesParams, type GetUpcomingEventsParams, JoinGameButton, type JoinGameButtonProps, type JoinGameMutationResult, type JoinGameParams, type JoinGameResult, JoinGameSheet, type JoinGameSheetProps, LivePoolsCard, type LivePoolsCardProps, type LiveScore, type LiveScoreCompetitor, type MutationResult, type MutationStatus, type MwaAdapterConfig, type MwaTransactFn, MwaWalletAdapter, NETWORK_CONFIG, type NonceResult, type Opponent, type Pagination, type ParsedError, PhantomDeeplinkAdapter, type PhantomDeeplinkAdapterConfig, type PhantomSession, PickWinnerCard, type PickWinnerCardProps, PlayersCard, type PlayersCardProps, type PushNotificationStatus, type QueryResult, type RegisterParams, type RegisterResult, type RegistrationScreenProps, SOLANA_PROGRAM_ERRORS, STORAGE_KEYS, SettingsSheet, type SettingsSheetProps, SolSlider, type SolSliderProps, type SolanaErrorCode, type StartAttemptResult, type SubmitScoreResult, type TokenStorage, type UFCData, type UFCEvent, type UFCFight, type UFCFighter, type UFCFighterDetail, type UiConfig, type UnifiedEvent, type UseArcadeBridgeOptions, type UseArcadeBridgeResult, type UseArcadeGameResult, type UseArcadePoolResult, type UseArcadePoolsResult, type UseAuthResult, UserProfileCard, type UserProfileCardProps, UserProfileSheet, type UserProfileSheetProps, type ValidateEventResult, type WalletAdapter, createSecureStoreStorage, ensurePngAvatar, getDeviceInfo, isSolanaSeeker, mergeTheme, parseSolanaError, signAndSendBase64Transaction, useAppConfig, useArcadeBridge, useArcadeCountdown, useArcadeGame, useArcadePool, useArcadePools, useAuth, useClaim, useCreateCustomGame, useCreateGame, useDubs, useDubsTheme, useEnterArcadePool, useEvents, useGame, useGames, useHasClaimed, useJoinGame, useNetworkGames, usePushNotifications, useUFCFightCard, useUFCFighterDetail };
package/dist/index.d.ts CHANGED
@@ -1459,6 +1459,29 @@ interface SolSliderProps {
1459
1459
  }
1460
1460
  declare function SolSlider({ value, min, max, step, accentColor, onValueChange, onSlidingComplete, onTick, disabled, }: SolSliderProps): react_jsx_runtime.JSX.Element;
1461
1461
 
1462
+ interface CreateGameSheetProps {
1463
+ visible: boolean;
1464
+ onDismiss: () => void;
1465
+ event: UnifiedEvent;
1466
+ /** Override team colors */
1467
+ homeColor?: string;
1468
+ awayColor?: string;
1469
+ /** Callbacks */
1470
+ onSuccess?: (result: CreateGameMutationResult) => void;
1471
+ onError?: (error: Error) => void;
1472
+ /** Called when the user taps a team card */
1473
+ onTeamSelect?: (team: 'home' | 'away') => void;
1474
+ /** Called on success (for sound/animation) */
1475
+ onCreateSuccess?: (result: CreateGameMutationResult) => void;
1476
+ /** Called on each slider tick */
1477
+ onSliderTick?: (value: number) => void;
1478
+ /** Max wager in SOL */
1479
+ maxWager?: number;
1480
+ /** Custom short-name function for team labels */
1481
+ shortName?: (name: string | null) => string;
1482
+ }
1483
+ declare function CreateGameSheet({ visible, onDismiss, event, homeColor, awayColor, onSuccess, onError, onTeamSelect, onCreateSuccess, onSliderTick, maxWager, shortName, }: CreateGameSheetProps): react_jsx_runtime.JSX.Element;
1484
+
1462
1485
  /**
1463
1486
  * Deserialize a base64-encoded transaction, sign via wallet adapter, send to Solana.
1464
1487
  * Prefers signAndSendTransaction if available (MWA), otherwise falls back to
@@ -1474,4 +1497,4 @@ declare function signAndSendBase64Transaction(base64Tx: string, wallet: WalletAd
1474
1497
  */
1475
1498
  declare function ensurePngAvatar(url: string | null | undefined): string | undefined;
1476
1499
 
1477
- export { type ArcadeAttempt, type ArcadeCountdown, type ArcadeEntry, type ArcadeLeaderboardEntry, ArcadeLeaderboardSheet, type ArcadeLeaderboardSheetProps, type ArcadePool, type ArcadePoolResult, type ArcadePoolStats, AuthGate, type ConnectWalletScreenProps$1 as AuthGateConnectWalletProps, type AuthGateProps, type AuthStatus, type AuthenticateParams, type AuthenticateResult, type Bettor, type BuildArcadeEntryResult, type BuildClaimParams, type BuildClaimResult, type CheckUsernameResult, ClaimButton, type ClaimButtonProps, type ClaimMutationResult, ClaimPrizeSheet, type ClaimPrizeSheetProps, type ClaimStatus, type ConfirmClaimParams, type ConfirmClaimResult, type ConfirmGameParams, type ConfirmGameResult, ConnectWalletButton, type ConnectWalletButtonProps, ConnectWalletScreen, type ConnectWalletScreenProps, type CreateCustomGameMutationResult, type CreateCustomGameParams, type CreateCustomGameResult, CreateCustomGameSheet, type CreateCustomGameSheetProps, type CreateGameMutationResult, type CreateGameParams, type CreateGameResult, DEFAULT_BASE_URL, DEFAULT_RPC_URL, type DeviceInfo, DubsApiError, type DubsAppUser, DubsClient, type DubsClientConfig, type DubsContextValue, type DubsNetwork, DubsProvider, type DubsProviderProps, type DubsPublicUser, type DubsTheme, type DubsUser, type EnterArcadePoolMutationResult, type EnterArcadePoolResult, EnterArcadePoolSheet, type EnterArcadePoolSheetProps, type EsportsMatchDetail, type EsportsMatchOpponent, type EsportsMatchResult, type EventMedia, type EventMeta, type EventStream, type GameDetail, type GameListItem, type GameListOpponent, type GameMedia, GamePoster, type GamePosterProps, type GetGamesParams, type GetNetworkGamesParams, type GetUpcomingEventsParams, JoinGameButton, type JoinGameButtonProps, type JoinGameMutationResult, type JoinGameParams, type JoinGameResult, JoinGameSheet, type JoinGameSheetProps, LivePoolsCard, type LivePoolsCardProps, type LiveScore, type LiveScoreCompetitor, type MutationResult, type MutationStatus, type MwaAdapterConfig, type MwaTransactFn, MwaWalletAdapter, NETWORK_CONFIG, type NonceResult, type Opponent, type Pagination, type ParsedError, PhantomDeeplinkAdapter, type PhantomDeeplinkAdapterConfig, type PhantomSession, PickWinnerCard, type PickWinnerCardProps, PlayersCard, type PlayersCardProps, type PushNotificationStatus, type QueryResult, type RegisterParams, type RegisterResult, type RegistrationScreenProps, SOLANA_PROGRAM_ERRORS, STORAGE_KEYS, SettingsSheet, type SettingsSheetProps, SolSlider, type SolSliderProps, type SolanaErrorCode, type StartAttemptResult, type SubmitScoreResult, type TokenStorage, type UFCData, type UFCEvent, type UFCFight, type UFCFighter, type UFCFighterDetail, type UiConfig, type UnifiedEvent, type UseArcadeBridgeOptions, type UseArcadeBridgeResult, type UseArcadeGameResult, type UseArcadePoolResult, type UseArcadePoolsResult, type UseAuthResult, UserProfileCard, type UserProfileCardProps, UserProfileSheet, type UserProfileSheetProps, type ValidateEventResult, type WalletAdapter, createSecureStoreStorage, ensurePngAvatar, getDeviceInfo, isSolanaSeeker, mergeTheme, parseSolanaError, signAndSendBase64Transaction, useAppConfig, useArcadeBridge, useArcadeCountdown, useArcadeGame, useArcadePool, useArcadePools, useAuth, useClaim, useCreateCustomGame, useCreateGame, useDubs, useDubsTheme, useEnterArcadePool, useEvents, useGame, useGames, useHasClaimed, useJoinGame, useNetworkGames, usePushNotifications, useUFCFightCard, useUFCFighterDetail };
1500
+ export { type ArcadeAttempt, type ArcadeCountdown, type ArcadeEntry, type ArcadeLeaderboardEntry, ArcadeLeaderboardSheet, type ArcadeLeaderboardSheetProps, type ArcadePool, type ArcadePoolResult, type ArcadePoolStats, AuthGate, type ConnectWalletScreenProps$1 as AuthGateConnectWalletProps, type AuthGateProps, type AuthStatus, type AuthenticateParams, type AuthenticateResult, type Bettor, type BuildArcadeEntryResult, type BuildClaimParams, type BuildClaimResult, type CheckUsernameResult, ClaimButton, type ClaimButtonProps, type ClaimMutationResult, ClaimPrizeSheet, type ClaimPrizeSheetProps, type ClaimStatus, type ConfirmClaimParams, type ConfirmClaimResult, type ConfirmGameParams, type ConfirmGameResult, ConnectWalletButton, type ConnectWalletButtonProps, ConnectWalletScreen, type ConnectWalletScreenProps, type CreateCustomGameMutationResult, type CreateCustomGameParams, type CreateCustomGameResult, CreateCustomGameSheet, type CreateCustomGameSheetProps, type CreateGameMutationResult, type CreateGameParams, type CreateGameResult, CreateGameSheet, type CreateGameSheetProps, DEFAULT_BASE_URL, DEFAULT_RPC_URL, type DeviceInfo, DubsApiError, type DubsAppUser, DubsClient, type DubsClientConfig, type DubsContextValue, type DubsNetwork, DubsProvider, type DubsProviderProps, type DubsPublicUser, type DubsTheme, type DubsUser, type EnterArcadePoolMutationResult, type EnterArcadePoolResult, EnterArcadePoolSheet, type EnterArcadePoolSheetProps, type EsportsMatchDetail, type EsportsMatchOpponent, type EsportsMatchResult, type EventMedia, type EventMeta, type EventStream, type GameDetail, type GameListItem, type GameListOpponent, type GameMedia, GamePoster, type GamePosterProps, type GetGamesParams, type GetNetworkGamesParams, type GetUpcomingEventsParams, JoinGameButton, type JoinGameButtonProps, type JoinGameMutationResult, type JoinGameParams, type JoinGameResult, JoinGameSheet, type JoinGameSheetProps, LivePoolsCard, type LivePoolsCardProps, type LiveScore, type LiveScoreCompetitor, type MutationResult, type MutationStatus, type MwaAdapterConfig, type MwaTransactFn, MwaWalletAdapter, NETWORK_CONFIG, type NonceResult, type Opponent, type Pagination, type ParsedError, PhantomDeeplinkAdapter, type PhantomDeeplinkAdapterConfig, type PhantomSession, PickWinnerCard, type PickWinnerCardProps, PlayersCard, type PlayersCardProps, type PushNotificationStatus, type QueryResult, type RegisterParams, type RegisterResult, type RegistrationScreenProps, SOLANA_PROGRAM_ERRORS, STORAGE_KEYS, SettingsSheet, type SettingsSheetProps, SolSlider, type SolSliderProps, type SolanaErrorCode, type StartAttemptResult, type SubmitScoreResult, type TokenStorage, type UFCData, type UFCEvent, type UFCFight, type UFCFighter, type UFCFighterDetail, type UiConfig, type UnifiedEvent, type UseArcadeBridgeOptions, type UseArcadeBridgeResult, type UseArcadeGameResult, type UseArcadePoolResult, type UseArcadePoolsResult, type UseAuthResult, UserProfileCard, type UserProfileCardProps, UserProfileSheet, type UserProfileSheetProps, type ValidateEventResult, type WalletAdapter, createSecureStoreStorage, ensurePngAvatar, getDeviceInfo, isSolanaSeeker, mergeTheme, parseSolanaError, signAndSendBase64Transaction, useAppConfig, useArcadeBridge, useArcadeCountdown, useArcadeGame, useArcadePool, useArcadePools, useAuth, useClaim, useCreateCustomGame, useCreateGame, useDubs, useDubsTheme, useEnterArcadePool, useEvents, useGame, useGames, useHasClaimed, useJoinGame, useNetworkGames, usePushNotifications, useUFCFightCard, useUFCFighterDetail };
package/dist/index.js CHANGED
@@ -37,6 +37,7 @@ __export(index_exports, {
37
37
  ConnectWalletButton: () => ConnectWalletButton,
38
38
  ConnectWalletScreen: () => ConnectWalletScreen,
39
39
  CreateCustomGameSheet: () => CreateCustomGameSheet,
40
+ CreateGameSheet: () => CreateGameSheet,
40
41
  DEFAULT_BASE_URL: () => DEFAULT_BASE_URL,
41
42
  DEFAULT_RPC_URL: () => DEFAULT_RPC_URL,
42
43
  DubsApiError: () => DubsApiError,
@@ -6879,6 +6880,253 @@ var styles18 = import_react_native24.StyleSheet.create({
6879
6880
  emptyState: { paddingVertical: 40, alignItems: "center" },
6880
6881
  emptyText: { fontSize: 14, fontWeight: "600" }
6881
6882
  });
6883
+
6884
+ // src/ui/game/CreateGameSheet.tsx
6885
+ var import_react39 = require("react");
6886
+ var import_react_native25 = require("react-native");
6887
+ var import_jsx_runtime22 = require("react/jsx-runtime");
6888
+ var STATUS_LABELS6 = {
6889
+ building: "Building transaction...",
6890
+ signing: "Approve in wallet...",
6891
+ confirming: "Confirming...",
6892
+ success: "Game Created!"
6893
+ };
6894
+ function formatSol2(n) {
6895
+ return parseFloat(n.toFixed(9)).toString();
6896
+ }
6897
+ function CreateGameSheet({
6898
+ visible,
6899
+ onDismiss,
6900
+ event,
6901
+ homeColor = "#3B82F6",
6902
+ awayColor = "#EF4444",
6903
+ onSuccess,
6904
+ onError,
6905
+ onTeamSelect,
6906
+ onCreateSuccess,
6907
+ onSliderTick,
6908
+ maxWager = 1,
6909
+ shortName
6910
+ }) {
6911
+ const t = useDubsTheme();
6912
+ const { wallet } = useDubs();
6913
+ const mutation = useCreateGame();
6914
+ const [selectedTeam, setSelectedTeam] = (0, import_react39.useState)(null);
6915
+ const [wager, setWager] = (0, import_react39.useState)(0.01);
6916
+ const [showSuccess, setShowSuccess] = (0, import_react39.useState)(false);
6917
+ const overlayOpacity = (0, import_react39.useRef)(new import_react_native25.Animated.Value(0)).current;
6918
+ const successScale = (0, import_react39.useRef)(new import_react_native25.Animated.Value(0)).current;
6919
+ const successOpacity = (0, import_react39.useRef)(new import_react_native25.Animated.Value(0)).current;
6920
+ (0, import_react39.useEffect)(() => {
6921
+ import_react_native25.Animated.timing(overlayOpacity, {
6922
+ toValue: visible ? 1 : 0,
6923
+ duration: 250,
6924
+ useNativeDriver: true
6925
+ }).start();
6926
+ }, [visible]);
6927
+ (0, import_react39.useEffect)(() => {
6928
+ if (visible) {
6929
+ setSelectedTeam(null);
6930
+ setWager(0.01);
6931
+ setShowSuccess(false);
6932
+ successScale.setValue(0);
6933
+ successOpacity.setValue(0);
6934
+ mutation.reset();
6935
+ }
6936
+ }, [visible]);
6937
+ (0, import_react39.useEffect)(() => {
6938
+ if (mutation.status === "success" && mutation.data) {
6939
+ setShowSuccess(true);
6940
+ onSuccess?.(mutation.data);
6941
+ onCreateSuccess?.(mutation.data);
6942
+ import_react_native25.Animated.parallel([
6943
+ import_react_native25.Animated.spring(successScale, { toValue: 1, friction: 4, tension: 80, useNativeDriver: true }),
6944
+ import_react_native25.Animated.timing(successOpacity, { toValue: 1, duration: 300, useNativeDriver: true })
6945
+ ]).start();
6946
+ const timer = setTimeout(() => {
6947
+ import_react_native25.Animated.timing(successOpacity, { toValue: 0, duration: 300, useNativeDriver: true }).start(() => {
6948
+ onDismiss();
6949
+ });
6950
+ }, 2500);
6951
+ return () => clearTimeout(timer);
6952
+ }
6953
+ }, [mutation.status, mutation.data]);
6954
+ (0, import_react39.useEffect)(() => {
6955
+ if (mutation.status === "error" && mutation.error) {
6956
+ onError?.(mutation.error);
6957
+ }
6958
+ }, [mutation.status, mutation.error]);
6959
+ const opponents = event.opponents || [];
6960
+ const homeName = shortName ? shortName(opponents[0]?.name) : opponents[0]?.name || "Home";
6961
+ const awayName = shortName ? shortName(opponents[1]?.name) : opponents[1]?.name || "Away";
6962
+ const isMutating = mutation.status !== "idle" && mutation.status !== "success" && mutation.status !== "error";
6963
+ const canCreate = selectedTeam !== null && !isMutating && mutation.status !== "success";
6964
+ const handleCreate = (0, import_react39.useCallback)(async () => {
6965
+ if (!selectedTeam || !wallet.publicKey) return;
6966
+ try {
6967
+ await mutation.execute({
6968
+ id: event.id,
6969
+ playerWallet: wallet.publicKey.toBase58(),
6970
+ teamChoice: selectedTeam,
6971
+ wagerAmount: wager
6972
+ });
6973
+ } catch {
6974
+ }
6975
+ }, [selectedTeam, wallet.publicKey, mutation.execute, event.id, wager]);
6976
+ const statusLabel = STATUS_LABELS6[mutation.status] || "";
6977
+ const startTime = event.startTime ? new Date(event.startTime) : null;
6978
+ const timeLabel = startTime ? startTime.toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric" }) + " at " + startTime.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit" }) : "TBD";
6979
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.Modal, { visible, animationType: "slide", transparent: true, onRequestClose: onDismiss, children: [
6980
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Animated.View, { style: [styles19.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.TouchableOpacity, { style: styles19.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
6981
+ showSuccess && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: styles19.successOverlay, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.Animated.View, { style: [styles19.successContent, { opacity: successOpacity, transform: [{ scale: successScale }] }], children: [
6982
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.successEmoji, children: "\u{1F3AF}" }),
6983
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.successTitle, children: "Game Created!" }),
6984
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.Text, { style: styles19.successSub, children: [
6985
+ formatSol2(wager),
6986
+ " SOL on ",
6987
+ selectedTeam === "home" ? homeName : awayName
6988
+ ] })
6989
+ ] }) }),
6990
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.KeyboardAvoidingView, { style: styles19.keyboardView, behavior: import_react_native25.Platform.OS === "ios" ? "padding" : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: styles19.sheetPositioner, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: [styles19.sheet, { backgroundColor: t.background }], children: [
6991
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: styles19.handleRow, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.handle, { backgroundColor: t.textMuted }] }) }),
6992
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.header, children: [
6993
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { children: [
6994
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.headerTitle, { color: t.text }], children: "Create Game" }),
6995
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.headerSub, { color: t.textMuted }], children: timeLabel })
6996
+ ] }),
6997
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.TouchableOpacity, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.closeButton, { color: t.textMuted }], children: "\u2715" }) })
6998
+ ] }),
6999
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: [styles19.matchupBanner, { borderColor: t.border }], children: [
7000
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.matchupTeam, children: [
7001
+ opponents[0]?.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Image, { source: { uri: opponents[0].imageUrl }, style: styles19.matchupLogo, resizeMode: "contain" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.matchupPlaceholder, { backgroundColor: homeColor + "20" }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.matchupInitial, { color: homeColor }], children: homeName.charAt(0) }) }),
7002
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.matchupName, { color: t.text }], numberOfLines: 1, children: homeName })
7003
+ ] }),
7004
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.matchupVs, { color: t.textMuted }], children: "vs" }),
7005
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.matchupTeam, children: [
7006
+ opponents[1]?.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Image, { source: { uri: opponents[1].imageUrl }, style: styles19.matchupLogo, resizeMode: "contain" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.matchupPlaceholder, { backgroundColor: awayColor + "20" }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.matchupInitial, { color: awayColor }], children: awayName.charAt(0) }) }),
7007
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.matchupName, { color: t.text }], numberOfLines: 1, children: awayName })
7008
+ ] })
7009
+ ] }),
7010
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.section, children: [
7011
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.sectionLabel, { color: t.textSecondary }], children: "Pick Your Side" }),
7012
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.teamsRow, children: [
7013
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
7014
+ import_react_native25.TouchableOpacity,
7015
+ {
7016
+ style: [styles19.teamOption, { borderColor: selectedTeam === "home" ? homeColor : t.border, backgroundColor: selectedTeam === "home" ? homeColor + "15" : t.background }],
7017
+ onPress: () => {
7018
+ setSelectedTeam("home");
7019
+ onTeamSelect?.("home");
7020
+ },
7021
+ activeOpacity: 0.7,
7022
+ children: [
7023
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.teamLabel, { color: t.text }], children: homeName }),
7024
+ selectedTeam === "home" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.teamBadge, { backgroundColor: homeColor }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.teamBadgeText, children: "Selected" }) })
7025
+ ]
7026
+ }
7027
+ ),
7028
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
7029
+ import_react_native25.TouchableOpacity,
7030
+ {
7031
+ style: [styles19.teamOption, { borderColor: selectedTeam === "away" ? awayColor : t.border, backgroundColor: selectedTeam === "away" ? awayColor + "15" : t.background }],
7032
+ onPress: () => {
7033
+ setSelectedTeam("away");
7034
+ onTeamSelect?.("away");
7035
+ },
7036
+ activeOpacity: 0.7,
7037
+ children: [
7038
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.teamLabel, { color: t.text }], children: awayName }),
7039
+ selectedTeam === "away" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.teamBadge, { backgroundColor: awayColor }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.teamBadgeText, children: "Selected" }) })
7040
+ ]
7041
+ }
7042
+ )
7043
+ ] })
7044
+ ] }),
7045
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: [styles19.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
7046
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.summaryRow, children: [
7047
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.summaryLabel, { color: t.textMuted }], children: "Your wager" }),
7048
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.Text, { style: [styles19.summaryValue, { color: t.text }], children: [
7049
+ formatSol2(wager),
7050
+ " SOL"
7051
+ ] })
7052
+ ] }),
7053
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.summarySep, { backgroundColor: t.border }] }),
7054
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.summaryRow, children: [
7055
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.summaryLabel, { color: t.textMuted }], children: "You're the first" }),
7056
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.summaryValue, { color: t.success }], children: "Set the odds" })
7057
+ ] })
7058
+ ] }),
7059
+ selectedTeam && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
7060
+ SolSlider,
7061
+ {
7062
+ value: wager,
7063
+ min: 0.01,
7064
+ max: maxWager,
7065
+ step: 0.01,
7066
+ accentColor: selectedTeam === "home" ? homeColor : awayColor,
7067
+ onValueChange: setWager,
7068
+ onTick: onSliderTick
7069
+ }
7070
+ ),
7071
+ mutation.error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.View, { style: [styles19.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.errorText, { color: t.errorText }], children: mutation.error.message }) }),
7072
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
7073
+ import_react_native25.TouchableOpacity,
7074
+ {
7075
+ style: [styles19.ctaButton, { backgroundColor: canCreate ? t.accent : t.border }],
7076
+ disabled: !canCreate,
7077
+ onPress: handleCreate,
7078
+ activeOpacity: 0.8,
7079
+ children: isMutating ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native25.View, { style: styles19.ctaLoading, children: [
7080
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.ActivityIndicator, { size: "small", color: "#FFFFFF" }),
7081
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.ctaText, children: statusLabel })
7082
+ ] }) : mutation.status === "success" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: styles19.ctaText, children: "Game Created!" }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native25.Text, { style: [styles19.ctaText, !canCreate && { opacity: 0.5 }], children: selectedTeam ? `Create Game \u2014 ${formatSol2(wager)} SOL` : "Pick a side to start" })
7083
+ }
7084
+ )
7085
+ ] }) }) })
7086
+ ] });
7087
+ }
7088
+ var styles19 = import_react_native25.StyleSheet.create({
7089
+ overlay: { ...import_react_native25.StyleSheet.absoluteFillObject, backgroundColor: "rgba(0,0,0,0.5)" },
7090
+ overlayTap: { flex: 1 },
7091
+ keyboardView: { flex: 1, justifyContent: "flex-end" },
7092
+ sheetPositioner: { justifyContent: "flex-end" },
7093
+ sheet: { borderTopLeftRadius: 24, borderTopRightRadius: 24, paddingHorizontal: 20, paddingBottom: 40 },
7094
+ handleRow: { alignItems: "center", paddingTop: 10, paddingBottom: 8 },
7095
+ handle: { width: 36, height: 4, borderRadius: 2, opacity: 0.4 },
7096
+ header: { flexDirection: "row", alignItems: "flex-start", justifyContent: "space-between", paddingVertical: 8 },
7097
+ headerTitle: { fontSize: 20, fontWeight: "700" },
7098
+ headerSub: { fontSize: 13, marginTop: 2 },
7099
+ closeButton: { fontSize: 20, padding: 4 },
7100
+ matchupBanner: { flexDirection: "row", alignItems: "center", justifyContent: "center", paddingVertical: 16, borderBottomWidth: 1, gap: 16 },
7101
+ matchupTeam: { flex: 1, alignItems: "center", gap: 6 },
7102
+ matchupLogo: { width: 40, height: 40 },
7103
+ matchupPlaceholder: { width: 40, height: 40, borderRadius: 20, alignItems: "center", justifyContent: "center" },
7104
+ matchupInitial: { fontSize: 18, fontWeight: "800" },
7105
+ matchupName: { fontSize: 13, fontWeight: "600", textAlign: "center" },
7106
+ matchupVs: { fontSize: 13, fontWeight: "600" },
7107
+ section: { gap: 10, paddingTop: 12 },
7108
+ sectionLabel: { fontSize: 14, fontWeight: "600" },
7109
+ teamsRow: { flexDirection: "row", gap: 10 },
7110
+ teamOption: { flex: 1, borderWidth: 2, borderRadius: 14, paddingVertical: 14, alignItems: "center", gap: 6 },
7111
+ teamLabel: { fontSize: 15, fontWeight: "700" },
7112
+ teamBadge: { borderRadius: 8, paddingHorizontal: 10, paddingVertical: 3 },
7113
+ teamBadgeText: { color: "#FFF", fontSize: 11, fontWeight: "700" },
7114
+ summaryCard: { marginTop: 12, borderRadius: 14, borderWidth: 1, overflow: "hidden" },
7115
+ summaryRow: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingHorizontal: 16, paddingVertical: 12 },
7116
+ summaryLabel: { fontSize: 14 },
7117
+ summaryValue: { fontSize: 15, fontWeight: "700" },
7118
+ summarySep: { height: 1, marginHorizontal: 16 },
7119
+ errorBox: { marginTop: 12, borderRadius: 12, borderWidth: 1, padding: 12 },
7120
+ errorText: { fontSize: 13, fontWeight: "500" },
7121
+ ctaButton: { marginTop: 16, height: 54, borderRadius: 14, justifyContent: "center", alignItems: "center" },
7122
+ ctaText: { color: "#FFFFFF", fontSize: 16, fontWeight: "700" },
7123
+ ctaLoading: { flexDirection: "row", alignItems: "center", gap: 10 },
7124
+ successOverlay: { ...import_react_native25.StyleSheet.absoluteFillObject, zIndex: 100, alignItems: "center", justifyContent: "center", backgroundColor: "rgba(0,0,0,0.85)" },
7125
+ successContent: { alignItems: "center", gap: 12 },
7126
+ successEmoji: { fontSize: 64 },
7127
+ successTitle: { color: "#FFFFFF", fontSize: 28, fontWeight: "900" },
7128
+ successSub: { color: "#8E8E93", fontSize: 16 }
7129
+ });
6882
7130
  // Annotate the CommonJS export names for ESM import in node:
6883
7131
  0 && (module.exports = {
6884
7132
  ArcadeLeaderboardSheet,
@@ -6888,6 +7136,7 @@ var styles18 = import_react_native24.StyleSheet.create({
6888
7136
  ConnectWalletButton,
6889
7137
  ConnectWalletScreen,
6890
7138
  CreateCustomGameSheet,
7139
+ CreateGameSheet,
6891
7140
  DEFAULT_BASE_URL,
6892
7141
  DEFAULT_RPC_URL,
6893
7142
  DubsApiError,