@dubsdotapp/expo 0.2.77 → 0.2.79

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.mjs CHANGED
@@ -1628,18 +1628,18 @@ function ManagedWalletProvider({
1628
1628
  // src/ui/AuthGate.tsx
1629
1629
  import React2, { useState as useState15, useEffect as useEffect10, useRef as useRef4, useCallback as useCallback14 } from "react";
1630
1630
  import {
1631
- View as View2,
1632
- Text as Text2,
1631
+ View as View3,
1632
+ Text as Text3,
1633
1633
  TextInput,
1634
- TouchableOpacity as TouchableOpacity2,
1634
+ TouchableOpacity as TouchableOpacity3,
1635
1635
  ActivityIndicator as ActivityIndicator2,
1636
- StyleSheet as StyleSheet2,
1636
+ StyleSheet as StyleSheet3,
1637
1637
  Keyboard,
1638
1638
  KeyboardAvoidingView,
1639
1639
  Platform as Platform4,
1640
- Image as Image2,
1640
+ Image as Image3,
1641
1641
  Animated,
1642
- ScrollView
1642
+ ScrollView as ScrollView2
1643
1643
  } from "react-native";
1644
1644
 
1645
1645
  // src/hooks/useEvents.ts
@@ -2471,8 +2471,16 @@ function usePushNotifications() {
2471
2471
  };
2472
2472
  }
2473
2473
 
2474
- // src/ui/AuthGate.tsx
2475
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
2474
+ // src/ui/AvatarEditor.tsx
2475
+ import {
2476
+ View as View2,
2477
+ Text as Text2,
2478
+ TouchableOpacity as TouchableOpacity2,
2479
+ Image as Image2,
2480
+ ScrollView,
2481
+ StyleSheet as StyleSheet2
2482
+ } from "react-native";
2483
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
2476
2484
  var DICEBEAR_STYLES = [
2477
2485
  "adventurer",
2478
2486
  "avataaars",
@@ -2499,6 +2507,125 @@ function generateSeed() {
2499
2507
  function getAvatarUrl(style, seed, bg = "1a1a2e", size = 256) {
2500
2508
  return `https://api.dicebear.com/9.x/${style}/png?seed=${seed}&backgroundColor=${bg}&size=${size}`;
2501
2509
  }
2510
+ function parseAvatarUrl(url) {
2511
+ if (!url) return { style: "adventurer", seed: generateSeed(), bg: "1a1a2e" };
2512
+ try {
2513
+ const match = url.match(/\/\d+\.x\/([^/]+)\/(?:png|svg)\?seed=([^&]+)/);
2514
+ if (match) {
2515
+ const bgMatch = url.match(/backgroundColor=([^&]+)/);
2516
+ return { style: match[1], seed: match[2], bg: bgMatch?.[1] || "1a1a2e" };
2517
+ }
2518
+ } catch {
2519
+ }
2520
+ return { style: "adventurer", seed: generateSeed(), bg: "1a1a2e" };
2521
+ }
2522
+ function AvatarEditor({
2523
+ style: avatarStyle,
2524
+ seed: avatarSeed,
2525
+ bg: bgColor,
2526
+ onStyleChange,
2527
+ onSeedChange,
2528
+ onBgChange,
2529
+ disabled = false,
2530
+ accentColor
2531
+ }) {
2532
+ const t = useDubsTheme();
2533
+ const accent = accentColor || t.accent;
2534
+ return /* @__PURE__ */ jsxs2(View2, { style: styles2.container, children: [
2535
+ /* @__PURE__ */ jsx3(
2536
+ ScrollView,
2537
+ {
2538
+ horizontal: true,
2539
+ showsHorizontalScrollIndicator: false,
2540
+ contentContainerStyle: styles2.row,
2541
+ children: DICEBEAR_STYLES.map((st) => {
2542
+ const isSelected = st === avatarStyle;
2543
+ return /* @__PURE__ */ jsx3(
2544
+ TouchableOpacity2,
2545
+ {
2546
+ onPress: () => onStyleChange(st),
2547
+ activeOpacity: 0.7,
2548
+ disabled,
2549
+ style: [
2550
+ styles2.styleTile,
2551
+ {
2552
+ borderColor: isSelected ? accent : t.border,
2553
+ borderWidth: isSelected ? 2 : 1
2554
+ }
2555
+ ],
2556
+ children: /* @__PURE__ */ jsx3(
2557
+ Image2,
2558
+ {
2559
+ source: { uri: getAvatarUrl(st, avatarSeed, bgColor, 80) },
2560
+ style: styles2.styleTileImage
2561
+ }
2562
+ )
2563
+ },
2564
+ st
2565
+ );
2566
+ })
2567
+ }
2568
+ ),
2569
+ /* @__PURE__ */ jsx3(Text2, { style: [styles2.label, { color: t.textSecondary }], children: "Background Color" }),
2570
+ /* @__PURE__ */ jsx3(
2571
+ ScrollView,
2572
+ {
2573
+ horizontal: true,
2574
+ showsHorizontalScrollIndicator: false,
2575
+ contentContainerStyle: styles2.row,
2576
+ children: BG_COLORS.map((color) => {
2577
+ const isSelected = color === bgColor;
2578
+ return /* @__PURE__ */ jsx3(
2579
+ TouchableOpacity2,
2580
+ {
2581
+ onPress: () => onBgChange(color),
2582
+ activeOpacity: 0.7,
2583
+ disabled,
2584
+ style: [
2585
+ styles2.colorSwatch,
2586
+ { backgroundColor: `#${color}` },
2587
+ isSelected && { borderColor: accent, borderWidth: 2.5 }
2588
+ ]
2589
+ },
2590
+ color
2591
+ );
2592
+ })
2593
+ }
2594
+ )
2595
+ ] });
2596
+ }
2597
+ var styles2 = StyleSheet2.create({
2598
+ container: {
2599
+ gap: 10
2600
+ },
2601
+ row: {
2602
+ gap: 10
2603
+ },
2604
+ label: {
2605
+ fontSize: 14,
2606
+ fontWeight: "600"
2607
+ },
2608
+ styleTile: {
2609
+ width: 72,
2610
+ height: 72,
2611
+ borderRadius: 16,
2612
+ overflow: "hidden"
2613
+ },
2614
+ styleTileImage: {
2615
+ width: "100%",
2616
+ height: "100%"
2617
+ },
2618
+ colorSwatch: {
2619
+ width: 32,
2620
+ height: 32,
2621
+ borderRadius: 16,
2622
+ borderWidth: 1.5,
2623
+ borderColor: "rgba(255,255,255,0.15)"
2624
+ }
2625
+ });
2626
+
2627
+ // src/ui/AuthGate.tsx
2628
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
2502
2629
  function AuthGate({
2503
2630
  children,
2504
2631
  onSaveToken,
@@ -2565,12 +2692,12 @@ function AuthGate({
2565
2692
  [auth]
2566
2693
  );
2567
2694
  if (phase === "init") {
2568
- if (renderLoading) return /* @__PURE__ */ jsx3(Fragment2, { children: renderLoading("authenticating") });
2569
- return /* @__PURE__ */ jsx3(DefaultLoadingScreen, { status: "authenticating", appName, accentColor });
2695
+ if (renderLoading) return /* @__PURE__ */ jsx4(Fragment2, { children: renderLoading("authenticating") });
2696
+ return /* @__PURE__ */ jsx4(DefaultLoadingScreen, { status: "authenticating", appName, accentColor });
2570
2697
  }
2571
2698
  if (auth.status === "authenticated") {
2572
2699
  if (showPushSetup) {
2573
- return /* @__PURE__ */ jsx3(
2700
+ return /* @__PURE__ */ jsx4(
2574
2701
  PushSetupScreen,
2575
2702
  {
2576
2703
  accentColor,
@@ -2579,8 +2706,8 @@ function AuthGate({
2579
2706
  }
2580
2707
  );
2581
2708
  }
2582
- return /* @__PURE__ */ jsxs2(AuthContext.Provider, { value: auth, children: [
2583
- pushEnabled && /* @__PURE__ */ jsx3(PushTokenRestorer, {}),
2709
+ return /* @__PURE__ */ jsxs3(AuthContext.Provider, { value: auth, children: [
2710
+ pushEnabled && /* @__PURE__ */ jsx4(PushTokenRestorer, {}),
2584
2711
  children
2585
2712
  ] });
2586
2713
  }
@@ -2588,9 +2715,9 @@ function AuthGate({
2588
2715
  const isRegistering = auth.status === "registering";
2589
2716
  const regError = auth.status === "error" ? auth.error : null;
2590
2717
  if (renderRegistration) {
2591
- return /* @__PURE__ */ jsx3(Fragment2, { children: renderRegistration({ onRegister: handleRegister, registering: isRegistering, error: regError, client }) });
2718
+ return /* @__PURE__ */ jsx4(Fragment2, { children: renderRegistration({ onRegister: handleRegister, registering: isRegistering, error: regError, client }) });
2592
2719
  }
2593
- return /* @__PURE__ */ jsx3(
2720
+ return /* @__PURE__ */ jsx4(
2594
2721
  DefaultRegistrationScreen,
2595
2722
  {
2596
2723
  onRegister: handleRegister,
@@ -2603,11 +2730,11 @@ function AuthGate({
2603
2730
  );
2604
2731
  }
2605
2732
  if (auth.status === "error" && auth.error) {
2606
- if (renderError) return /* @__PURE__ */ jsx3(Fragment2, { children: renderError(auth.error, retry) });
2607
- return /* @__PURE__ */ jsx3(DefaultErrorScreen, { error: auth.error, onRetry: retry, appName, accentColor });
2733
+ if (renderError) return /* @__PURE__ */ jsx4(Fragment2, { children: renderError(auth.error, retry) });
2734
+ return /* @__PURE__ */ jsx4(DefaultErrorScreen, { error: auth.error, onRetry: retry, appName, accentColor });
2608
2735
  }
2609
- if (renderLoading) return /* @__PURE__ */ jsx3(Fragment2, { children: renderLoading(auth.status) });
2610
- return /* @__PURE__ */ jsx3(DefaultLoadingScreen, { status: auth.status, appName, accentColor });
2736
+ if (renderLoading) return /* @__PURE__ */ jsx4(Fragment2, { children: renderLoading(auth.status) });
2737
+ return /* @__PURE__ */ jsx4(DefaultLoadingScreen, { status: auth.status, appName, accentColor });
2611
2738
  }
2612
2739
  function DefaultLoadingScreen({ status, appName, accentColor }) {
2613
2740
  const t = useDubsTheme();
@@ -2622,44 +2749,44 @@ function DefaultLoadingScreen({ status, appName, accentColor }) {
2622
2749
  authenticated: "Ready!",
2623
2750
  error: "Something went wrong"
2624
2751
  };
2625
- return /* @__PURE__ */ jsx3(View2, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs2(View2, { style: s.centerContent, children: [
2626
- /* @__PURE__ */ jsxs2(View2, { style: s.brandingSection, children: [
2627
- /* @__PURE__ */ jsx3(View2, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ jsx3(Text2, { style: s.logoText, children: "D" }) }),
2628
- /* @__PURE__ */ jsx3(Text2, { style: [s.appNameText, { color: t.text }], children: appName })
2752
+ return /* @__PURE__ */ jsx4(View3, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs3(View3, { style: s.centerContent, children: [
2753
+ /* @__PURE__ */ jsxs3(View3, { style: s.brandingSection, children: [
2754
+ /* @__PURE__ */ jsx4(View3, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ jsx4(Text3, { style: s.logoText, children: "D" }) }),
2755
+ /* @__PURE__ */ jsx4(Text3, { style: [s.appNameText, { color: t.text }], children: appName })
2629
2756
  ] }),
2630
- /* @__PURE__ */ jsxs2(View2, { style: s.loadingSection, children: [
2631
- /* @__PURE__ */ jsx3(ActivityIndicator2, { size: "large", color: accent }),
2632
- /* @__PURE__ */ jsx3(Text2, { style: [s.statusText, { color: t.textMuted }], children: statusText[status] || "Loading..." })
2757
+ /* @__PURE__ */ jsxs3(View3, { style: s.loadingSection, children: [
2758
+ /* @__PURE__ */ jsx4(ActivityIndicator2, { size: "large", color: accent }),
2759
+ /* @__PURE__ */ jsx4(Text3, { style: [s.statusText, { color: t.textMuted }], children: statusText[status] || "Loading..." })
2633
2760
  ] })
2634
2761
  ] }) });
2635
2762
  }
2636
2763
  function DefaultErrorScreen({ error, onRetry, appName, accentColor }) {
2637
2764
  const t = useDubsTheme();
2638
2765
  const accent = accentColor || t.accent;
2639
- return /* @__PURE__ */ jsx3(View2, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs2(View2, { style: s.spreadContent, children: [
2640
- /* @__PURE__ */ jsxs2(View2, { style: s.brandingSection, children: [
2641
- /* @__PURE__ */ jsx3(View2, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ jsx3(Text2, { style: s.logoText, children: "D" }) }),
2642
- /* @__PURE__ */ jsx3(Text2, { style: [s.appNameText, { color: t.text }], children: appName })
2766
+ return /* @__PURE__ */ jsx4(View3, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs3(View3, { style: s.spreadContent, children: [
2767
+ /* @__PURE__ */ jsxs3(View3, { style: s.brandingSection, children: [
2768
+ /* @__PURE__ */ jsx4(View3, { style: [s.logoCircle, { backgroundColor: accent }], children: /* @__PURE__ */ jsx4(Text3, { style: s.logoText, children: "D" }) }),
2769
+ /* @__PURE__ */ jsx4(Text3, { style: [s.appNameText, { color: t.text }], children: appName })
2643
2770
  ] }),
2644
- /* @__PURE__ */ jsxs2(View2, { style: { gap: 16 }, children: [
2645
- /* @__PURE__ */ jsx3(View2, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx3(Text2, { style: [s.errorText, { color: t.errorText }], children: error.message }) }),
2646
- /* @__PURE__ */ jsx3(TouchableOpacity2, { style: [s.primaryBtn, { backgroundColor: accent }], onPress: onRetry, activeOpacity: 0.8, children: /* @__PURE__ */ jsx3(Text2, { style: s.primaryBtnText, children: "Try Again" }) })
2771
+ /* @__PURE__ */ jsxs3(View3, { style: { gap: 16 }, children: [
2772
+ /* @__PURE__ */ jsx4(View3, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx4(Text3, { style: [s.errorText, { color: t.errorText }], children: error.message }) }),
2773
+ /* @__PURE__ */ jsx4(TouchableOpacity3, { style: [s.primaryBtn, { backgroundColor: accent }], onPress: onRetry, activeOpacity: 0.8, children: /* @__PURE__ */ jsx4(Text3, { style: s.primaryBtnText, children: "Try Again" }) })
2647
2774
  ] })
2648
2775
  ] }) });
2649
2776
  }
2650
2777
  function StepIndicator({ currentStep }) {
2651
2778
  const t = useDubsTheme();
2652
2779
  const steps = [0, 1, 2, 3];
2653
- return /* @__PURE__ */ jsx3(View2, { style: s.stepRow, children: steps.map((i) => /* @__PURE__ */ jsxs2(React2.Fragment, { children: [
2654
- i > 0 && /* @__PURE__ */ jsx3(View2, { style: [s.stepLine, { backgroundColor: i <= currentStep ? t.success : t.border }] }),
2655
- /* @__PURE__ */ jsx3(
2656
- View2,
2780
+ return /* @__PURE__ */ jsx4(View3, { style: s.stepRow, children: steps.map((i) => /* @__PURE__ */ jsxs3(React2.Fragment, { children: [
2781
+ i > 0 && /* @__PURE__ */ jsx4(View3, { style: [s.stepLine, { backgroundColor: i <= currentStep ? t.success : t.border }] }),
2782
+ /* @__PURE__ */ jsx4(
2783
+ View3,
2657
2784
  {
2658
2785
  style: [
2659
2786
  s.stepCircle,
2660
2787
  i < currentStep ? { backgroundColor: t.success } : i === currentStep ? { backgroundColor: t.accent } : { backgroundColor: "transparent", borderWidth: 2, borderColor: t.border }
2661
2788
  ],
2662
- children: i < currentStep ? /* @__PURE__ */ jsx3(Text2, { style: s.stepCheck, children: "\u2713" }) : /* @__PURE__ */ jsx3(Text2, { style: [s.stepNum, { color: i === currentStep ? "#FFF" : t.textMuted }], children: i + 1 })
2789
+ children: i < currentStep ? /* @__PURE__ */ jsx4(Text3, { style: s.stepCheck, children: "\u2713" }) : /* @__PURE__ */ jsx4(Text3, { style: [s.stepNum, { color: i === currentStep ? "#FFF" : t.textMuted }], children: i + 1 })
2663
2790
  }
2664
2791
  )
2665
2792
  ] }, i)) });
@@ -2730,88 +2857,76 @@ function DefaultRegistrationScreen({
2730
2857
  Keyboard.dismiss();
2731
2858
  onRegister(username.trim(), referralCode.trim() || void 0, avatarUrl);
2732
2859
  };
2733
- const renderAvatarStep = () => /* @__PURE__ */ jsxs2(View2, { style: s.stepContainer, children: [
2734
- /* @__PURE__ */ jsxs2(View2, { style: s.stepTop, children: [
2735
- /* @__PURE__ */ jsx3(Text2, { style: [s.title, { color: t.text }], children: "Choose Your Avatar" }),
2736
- /* @__PURE__ */ jsx3(Text2, { style: [s.subtitle, { color: t.textMuted }], children: "Pick a look that represents you" }),
2737
- /* @__PURE__ */ jsx3(StepIndicator, { currentStep: 0 }),
2738
- /* @__PURE__ */ jsx3(View2, { style: s.avatarCenter, children: /* @__PURE__ */ jsxs2(View2, { style: [s.avatarFrame, { borderColor: accent }], children: [
2739
- /* @__PURE__ */ jsx3(Image2, { source: { uri: avatarUrl }, style: s.avatarLarge }),
2740
- /* @__PURE__ */ jsx3(View2, { style: [s.checkBadge, { backgroundColor: t.success }], children: /* @__PURE__ */ jsx3(Text2, { style: s.checkBadgeText, children: "\u2713" }) })
2860
+ const renderAvatarStep = () => /* @__PURE__ */ jsxs3(View3, { style: s.stepContainer, children: [
2861
+ /* @__PURE__ */ jsxs3(View3, { style: s.stepTop, children: [
2862
+ /* @__PURE__ */ jsx4(Text3, { style: [s.title, { color: t.text }], children: "Choose Your Avatar" }),
2863
+ /* @__PURE__ */ jsx4(Text3, { style: [s.subtitle, { color: t.textMuted }], children: "Pick a look that represents you" }),
2864
+ /* @__PURE__ */ jsx4(StepIndicator, { currentStep: 0 }),
2865
+ /* @__PURE__ */ jsx4(View3, { style: s.avatarCenter, children: /* @__PURE__ */ jsxs3(View3, { style: [s.avatarFrame, { borderColor: accent }], children: [
2866
+ /* @__PURE__ */ jsx4(Image3, { source: { uri: avatarUrl }, style: s.avatarLarge }),
2867
+ /* @__PURE__ */ jsx4(View3, { style: [s.checkBadge, { backgroundColor: t.success }], children: /* @__PURE__ */ jsx4(Text3, { style: s.checkBadgeText, children: "\u2713" }) })
2741
2868
  ] }) }),
2742
- /* @__PURE__ */ jsxs2(View2, { style: s.avatarActions, children: [
2743
- /* @__PURE__ */ jsx3(
2744
- TouchableOpacity2,
2869
+ /* @__PURE__ */ jsxs3(View3, { style: s.avatarActions, children: [
2870
+ /* @__PURE__ */ jsx4(
2871
+ TouchableOpacity3,
2745
2872
  {
2746
2873
  style: [s.outlineBtn, { borderColor: t.border }],
2747
2874
  onPress: () => setAvatarSeed(generateSeed()),
2748
2875
  activeOpacity: 0.7,
2749
- children: /* @__PURE__ */ jsx3(Text2, { style: [s.outlineBtnText, { color: t.text }], children: "\u21BB Shuffle" })
2876
+ children: /* @__PURE__ */ jsx4(Text3, { style: [s.outlineBtnText, { color: t.text }], children: "\u21BB Shuffle" })
2750
2877
  }
2751
2878
  ),
2752
- /* @__PURE__ */ jsx3(
2753
- TouchableOpacity2,
2879
+ /* @__PURE__ */ jsx4(
2880
+ TouchableOpacity3,
2754
2881
  {
2755
2882
  style: [s.outlineBtn, { borderColor: accent, backgroundColor: accent + "15" }],
2756
2883
  onPress: () => setShowStyles(!showStyles),
2757
2884
  activeOpacity: 0.7,
2758
- children: /* @__PURE__ */ jsx3(Text2, { style: [s.outlineBtnText, { color: accent }], children: "\u263A Customize" })
2885
+ children: /* @__PURE__ */ jsx4(Text3, { style: [s.outlineBtnText, { color: accent }], children: "\u263A Customize" })
2759
2886
  }
2760
2887
  )
2761
2888
  ] }),
2762
- showStyles && /* @__PURE__ */ jsxs2(Fragment2, { children: [
2763
- /* @__PURE__ */ jsx3(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: s.styleScroll, children: DICEBEAR_STYLES.map((st) => /* @__PURE__ */ jsx3(
2764
- TouchableOpacity2,
2765
- {
2766
- onPress: () => setAvatarStyle(st),
2767
- style: [s.styleThumbWrap, { borderColor: st === avatarStyle ? accent : t.border }],
2768
- children: /* @__PURE__ */ jsx3(Image2, { source: { uri: getAvatarUrl(st, avatarSeed, avatarBg, 80) }, style: s.styleThumb })
2769
- },
2770
- st
2771
- )) }),
2772
- /* @__PURE__ */ jsx3(Text2, { style: [s.subtitle, { color: t.textMuted, marginTop: 8 }], children: "Background Color" }),
2773
- /* @__PURE__ */ jsx3(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: s.styleScroll, children: BG_COLORS.map((color) => /* @__PURE__ */ jsx3(
2774
- TouchableOpacity2,
2775
- {
2776
- onPress: () => setAvatarBg(color),
2777
- style: [
2778
- s.colorSwatch,
2779
- { backgroundColor: `#${color}` },
2780
- color === avatarBg && { borderColor: accent, borderWidth: 2.5 }
2781
- ]
2782
- },
2783
- color
2784
- )) })
2785
- ] })
2889
+ showStyles && /* @__PURE__ */ jsx4(View3, { style: s.styleScroll, children: /* @__PURE__ */ jsx4(
2890
+ AvatarEditor,
2891
+ {
2892
+ style: avatarStyle,
2893
+ seed: avatarSeed,
2894
+ bg: avatarBg,
2895
+ onStyleChange: setAvatarStyle,
2896
+ onSeedChange: setAvatarSeed,
2897
+ onBgChange: setAvatarBg,
2898
+ accentColor: accent
2899
+ }
2900
+ ) })
2786
2901
  ] }),
2787
- /* @__PURE__ */ jsx3(View2, { style: s.bottomRow, children: /* @__PURE__ */ jsx3(
2788
- TouchableOpacity2,
2902
+ /* @__PURE__ */ jsx4(View3, { style: s.bottomRow, children: /* @__PURE__ */ jsx4(
2903
+ TouchableOpacity3,
2789
2904
  {
2790
2905
  style: [s.primaryBtn, { backgroundColor: accent, flex: 1 }],
2791
2906
  onPress: () => animateToStep(1),
2792
2907
  activeOpacity: 0.8,
2793
- children: /* @__PURE__ */ jsx3(Text2, { style: s.primaryBtnText, children: "Continue \u203A" })
2908
+ children: /* @__PURE__ */ jsx4(Text3, { style: s.primaryBtnText, children: "Continue \u203A" })
2794
2909
  }
2795
2910
  ) })
2796
2911
  ] });
2797
- const renderUsernameStep = () => /* @__PURE__ */ jsxs2(View2, { style: s.stepContainer, children: [
2798
- /* @__PURE__ */ jsxs2(View2, { style: s.stepTop, children: [
2799
- /* @__PURE__ */ jsxs2(View2, { style: s.headerRow, children: [
2800
- /* @__PURE__ */ jsx3(TouchableOpacity2, { onPress: () => animateToStep(0), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ jsx3(Text2, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
2801
- /* @__PURE__ */ jsx3(Text2, { style: [s.titleInline, { color: t.text }], children: "Pick a Username" })
2912
+ const renderUsernameStep = () => /* @__PURE__ */ jsxs3(View3, { style: s.stepContainer, children: [
2913
+ /* @__PURE__ */ jsxs3(View3, { style: s.stepTop, children: [
2914
+ /* @__PURE__ */ jsxs3(View3, { style: s.headerRow, children: [
2915
+ /* @__PURE__ */ jsx4(TouchableOpacity3, { onPress: () => animateToStep(0), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ jsx4(Text3, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
2916
+ /* @__PURE__ */ jsx4(Text3, { style: [s.titleInline, { color: t.text }], children: "Pick a Username" })
2802
2917
  ] }),
2803
- /* @__PURE__ */ jsx3(Text2, { style: [s.subtitle, { color: t.textMuted }], children: "This is how others will see you" }),
2804
- /* @__PURE__ */ jsx3(StepIndicator, { currentStep: 1 }),
2805
- /* @__PURE__ */ jsx3(View2, { style: s.avatarCenter, children: /* @__PURE__ */ jsxs2(View2, { style: [s.avatarFrameSmall, { borderColor: accent }], children: [
2806
- /* @__PURE__ */ jsx3(Image2, { source: { uri: avatarUrl }, style: s.avatarSmall }),
2807
- /* @__PURE__ */ jsx3(View2, { style: [s.checkBadgeSm, { backgroundColor: t.success }], children: /* @__PURE__ */ jsx3(Text2, { style: s.checkBadgeTextSm, children: "\u2713" }) })
2918
+ /* @__PURE__ */ jsx4(Text3, { style: [s.subtitle, { color: t.textMuted }], children: "This is how others will see you" }),
2919
+ /* @__PURE__ */ jsx4(StepIndicator, { currentStep: 1 }),
2920
+ /* @__PURE__ */ jsx4(View3, { style: s.avatarCenter, children: /* @__PURE__ */ jsxs3(View3, { style: [s.avatarFrameSmall, { borderColor: accent }], children: [
2921
+ /* @__PURE__ */ jsx4(Image3, { source: { uri: avatarUrl }, style: s.avatarSmall }),
2922
+ /* @__PURE__ */ jsx4(View3, { style: [s.checkBadgeSm, { backgroundColor: t.success }], children: /* @__PURE__ */ jsx4(Text3, { style: s.checkBadgeTextSm, children: "\u2713" }) })
2808
2923
  ] }) }),
2809
- /* @__PURE__ */ jsxs2(View2, { style: s.inputGroup, children: [
2810
- /* @__PURE__ */ jsxs2(Text2, { style: [s.inputLabel, { color: t.text }], children: [
2924
+ /* @__PURE__ */ jsxs3(View3, { style: s.inputGroup, children: [
2925
+ /* @__PURE__ */ jsxs3(Text3, { style: [s.inputLabel, { color: t.text }], children: [
2811
2926
  "Username ",
2812
- /* @__PURE__ */ jsx3(Text2, { style: { color: t.errorText }, children: "*" })
2927
+ /* @__PURE__ */ jsx4(Text3, { style: { color: t.errorText }, children: "*" })
2813
2928
  ] }),
2814
- /* @__PURE__ */ jsx3(
2929
+ /* @__PURE__ */ jsx4(
2815
2930
  TextInput,
2816
2931
  {
2817
2932
  style: [s.input, { backgroundColor: t.surface, color: t.text, borderColor: accent }],
@@ -2824,62 +2939,62 @@ function DefaultRegistrationScreen({
2824
2939
  autoFocus: true
2825
2940
  }
2826
2941
  ),
2827
- checking ? /* @__PURE__ */ jsx3(Text2, { style: [s.hint, { color: t.textDim }], children: "Checking..." }) : availability ? /* @__PURE__ */ jsx3(Text2, { 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__ */ jsx3(Text2, { style: [s.hint, { color: t.textDim }], children: "At least 3 characters" }) : null
2942
+ checking ? /* @__PURE__ */ jsx4(Text3, { style: [s.hint, { color: t.textDim }], children: "Checking..." }) : availability ? /* @__PURE__ */ jsx4(Text3, { 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__ */ jsx4(Text3, { style: [s.hint, { color: t.textDim }], children: "At least 3 characters" }) : null
2828
2943
  ] })
2829
2944
  ] }),
2830
- /* @__PURE__ */ jsxs2(View2, { style: s.bottomRow, children: [
2831
- /* @__PURE__ */ jsx3(
2832
- TouchableOpacity2,
2945
+ /* @__PURE__ */ jsxs3(View3, { style: s.bottomRow, children: [
2946
+ /* @__PURE__ */ jsx4(
2947
+ TouchableOpacity3,
2833
2948
  {
2834
2949
  style: [s.secondaryBtn, { borderColor: t.border }],
2835
2950
  onPress: () => animateToStep(0),
2836
2951
  activeOpacity: 0.7,
2837
- children: /* @__PURE__ */ jsx3(Text2, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
2952
+ children: /* @__PURE__ */ jsx4(Text3, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
2838
2953
  }
2839
2954
  ),
2840
- /* @__PURE__ */ jsx3(
2841
- TouchableOpacity2,
2955
+ /* @__PURE__ */ jsx4(
2956
+ TouchableOpacity3,
2842
2957
  {
2843
2958
  style: [s.primaryBtn, { backgroundColor: accent, flex: 1, opacity: canContinueUsername ? 1 : 0.4 }],
2844
2959
  onPress: () => animateToStep(2),
2845
2960
  disabled: !canContinueUsername,
2846
2961
  activeOpacity: 0.8,
2847
- children: /* @__PURE__ */ jsx3(Text2, { style: s.primaryBtnText, children: "Continue \u203A" })
2962
+ children: /* @__PURE__ */ jsx4(Text3, { style: s.primaryBtnText, children: "Continue \u203A" })
2848
2963
  }
2849
2964
  )
2850
2965
  ] })
2851
2966
  ] });
2852
- const renderReferralStep = () => /* @__PURE__ */ jsxs2(View2, { style: s.stepContainer, children: [
2853
- /* @__PURE__ */ jsxs2(View2, { style: s.stepTop, children: [
2854
- /* @__PURE__ */ jsxs2(View2, { style: s.headerRow, children: [
2855
- /* @__PURE__ */ jsx3(TouchableOpacity2, { onPress: () => animateToStep(1), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ jsx3(Text2, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
2856
- /* @__PURE__ */ jsx3(Text2, { style: [s.titleInline, { color: t.text }], children: "Almost There!" })
2967
+ const renderReferralStep = () => /* @__PURE__ */ jsxs3(View3, { style: s.stepContainer, children: [
2968
+ /* @__PURE__ */ jsxs3(View3, { style: s.stepTop, children: [
2969
+ /* @__PURE__ */ jsxs3(View3, { style: s.headerRow, children: [
2970
+ /* @__PURE__ */ jsx4(TouchableOpacity3, { onPress: () => animateToStep(1), hitSlop: { top: 12, bottom: 12, left: 12, right: 12 }, children: /* @__PURE__ */ jsx4(Text3, { style: [s.backChevron, { color: t.text }], children: "\u2039" }) }),
2971
+ /* @__PURE__ */ jsx4(Text3, { style: [s.titleInline, { color: t.text }], children: "Almost There!" })
2857
2972
  ] }),
2858
- /* @__PURE__ */ jsx3(Text2, { style: [s.subtitle, { color: t.textMuted }], children: "Got a referral code? (optional)" }),
2859
- /* @__PURE__ */ jsx3(StepIndicator, { currentStep: 2 }),
2860
- /* @__PURE__ */ jsxs2(View2, { style: [s.profileCard, { borderColor: t.border }], children: [
2861
- /* @__PURE__ */ jsx3(Text2, { style: [s.profileLabel, { color: t.textMuted }], children: "Your Profile" }),
2862
- /* @__PURE__ */ jsxs2(View2, { style: s.profileRow, children: [
2863
- /* @__PURE__ */ jsx3(Image2, { source: { uri: avatarUrl }, style: s.profileAvatar }),
2864
- /* @__PURE__ */ jsxs2(View2, { style: { gap: 4 }, children: [
2865
- /* @__PURE__ */ jsxs2(Text2, { style: [s.profileUsername, { color: t.text }], children: [
2973
+ /* @__PURE__ */ jsx4(Text3, { style: [s.subtitle, { color: t.textMuted }], children: "Got a referral code? (optional)" }),
2974
+ /* @__PURE__ */ jsx4(StepIndicator, { currentStep: 2 }),
2975
+ /* @__PURE__ */ jsxs3(View3, { style: [s.profileCard, { borderColor: t.border }], children: [
2976
+ /* @__PURE__ */ jsx4(Text3, { style: [s.profileLabel, { color: t.textMuted }], children: "Your Profile" }),
2977
+ /* @__PURE__ */ jsxs3(View3, { style: s.profileRow, children: [
2978
+ /* @__PURE__ */ jsx4(Image3, { source: { uri: avatarUrl }, style: s.profileAvatar }),
2979
+ /* @__PURE__ */ jsxs3(View3, { style: { gap: 4 }, children: [
2980
+ /* @__PURE__ */ jsxs3(Text3, { style: [s.profileUsername, { color: t.text }], children: [
2866
2981
  "@",
2867
2982
  username
2868
2983
  ] }),
2869
- /* @__PURE__ */ jsxs2(Text2, { style: [s.profileReady, { color: t.success }], children: [
2984
+ /* @__PURE__ */ jsxs3(Text3, { style: [s.profileReady, { color: t.success }], children: [
2870
2985
  "\u2713",
2871
2986
  " Ready to go!"
2872
2987
  ] })
2873
2988
  ] })
2874
2989
  ] })
2875
2990
  ] }),
2876
- error ? /* @__PURE__ */ jsx3(View2, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx3(Text2, { style: [s.errorText, { color: t.errorText }], children: error.message }) }) : null,
2877
- /* @__PURE__ */ jsxs2(View2, { style: s.inputGroup, children: [
2878
- /* @__PURE__ */ jsxs2(Text2, { style: [s.inputLabel, { color: t.text }], children: [
2991
+ error ? /* @__PURE__ */ jsx4(View3, { style: [s.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx4(Text3, { style: [s.errorText, { color: t.errorText }], children: error.message }) }) : null,
2992
+ /* @__PURE__ */ jsxs3(View3, { style: s.inputGroup, children: [
2993
+ /* @__PURE__ */ jsxs3(Text3, { style: [s.inputLabel, { color: t.text }], children: [
2879
2994
  "Referral Code ",
2880
- /* @__PURE__ */ jsx3(Text2, { style: { color: t.textMuted }, children: "(optional)" })
2995
+ /* @__PURE__ */ jsx4(Text3, { style: { color: t.textMuted }, children: "(optional)" })
2881
2996
  ] }),
2882
- /* @__PURE__ */ jsx3(
2997
+ /* @__PURE__ */ jsx4(
2883
2998
  TextInput,
2884
2999
  {
2885
3000
  style: [s.input, { backgroundColor: t.surface, color: t.text, borderColor: t.border }],
@@ -2892,31 +3007,31 @@ function DefaultRegistrationScreen({
2892
3007
  editable: !registering
2893
3008
  }
2894
3009
  ),
2895
- /* @__PURE__ */ jsxs2(Text2, { style: [s.hint, { color: t.textMuted }], children: [
3010
+ /* @__PURE__ */ jsxs3(Text3, { style: [s.hint, { color: t.textMuted }], children: [
2896
3011
  "\u{1F381}",
2897
3012
  " If a friend invited you, enter their code to give them credit!"
2898
3013
  ] })
2899
3014
  ] })
2900
3015
  ] }),
2901
- /* @__PURE__ */ jsxs2(View2, { style: s.bottomRow, children: [
2902
- /* @__PURE__ */ jsx3(
2903
- TouchableOpacity2,
3016
+ /* @__PURE__ */ jsxs3(View3, { style: s.bottomRow, children: [
3017
+ /* @__PURE__ */ jsx4(
3018
+ TouchableOpacity3,
2904
3019
  {
2905
3020
  style: [s.secondaryBtn, { borderColor: t.border }],
2906
3021
  onPress: () => animateToStep(1),
2907
3022
  disabled: registering,
2908
3023
  activeOpacity: 0.7,
2909
- children: /* @__PURE__ */ jsx3(Text2, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
3024
+ children: /* @__PURE__ */ jsx4(Text3, { style: [s.secondaryBtnText, { color: t.text }], children: "\u2039 Back" })
2910
3025
  }
2911
3026
  ),
2912
- /* @__PURE__ */ jsx3(
2913
- TouchableOpacity2,
3027
+ /* @__PURE__ */ jsx4(
3028
+ TouchableOpacity3,
2914
3029
  {
2915
3030
  style: [s.primaryBtn, { backgroundColor: accent, flex: 1, opacity: registering ? 0.7 : 1 }],
2916
3031
  onPress: handleSubmit,
2917
3032
  disabled: registering,
2918
3033
  activeOpacity: 0.8,
2919
- children: registering ? /* @__PURE__ */ jsx3(ActivityIndicator2, { color: "#FFFFFF", size: "small" }) : /* @__PURE__ */ jsx3(Text2, { style: s.primaryBtnText, children: "Create Account" })
3034
+ children: registering ? /* @__PURE__ */ jsx4(ActivityIndicator2, { color: "#FFFFFF", size: "small" }) : /* @__PURE__ */ jsx4(Text3, { style: s.primaryBtnText, children: "Create Account" })
2920
3035
  }
2921
3036
  )
2922
3037
  ] })
@@ -2933,18 +3048,18 @@ function DefaultRegistrationScreen({
2933
3048
  return null;
2934
3049
  }
2935
3050
  };
2936
- return /* @__PURE__ */ jsx3(
3051
+ return /* @__PURE__ */ jsx4(
2937
3052
  KeyboardAvoidingView,
2938
3053
  {
2939
3054
  style: [s.container, { backgroundColor: t.background }],
2940
3055
  behavior: Platform4.OS === "ios" ? "padding" : void 0,
2941
- children: /* @__PURE__ */ jsx3(
2942
- ScrollView,
3056
+ children: /* @__PURE__ */ jsx4(
3057
+ ScrollView2,
2943
3058
  {
2944
3059
  contentContainerStyle: { flexGrow: 1 },
2945
3060
  keyboardShouldPersistTaps: "handled",
2946
3061
  bounces: false,
2947
- children: /* @__PURE__ */ jsx3(
3062
+ children: /* @__PURE__ */ jsx4(
2948
3063
  Animated.View,
2949
3064
  {
2950
3065
  style: [
@@ -2994,7 +3109,7 @@ function PushSetupScreen({
2994
3109
  "Your pick wins or loses",
2995
3110
  "Final results and rankings"
2996
3111
  ];
2997
- return /* @__PURE__ */ jsx3(View2, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs2(
3112
+ return /* @__PURE__ */ jsx4(View3, { style: [s.container, { backgroundColor: t.background }], children: /* @__PURE__ */ jsxs3(
2998
3113
  Animated.View,
2999
3114
  {
3000
3115
  style: [
@@ -3002,37 +3117,37 @@ function PushSetupScreen({
3002
3117
  { opacity: fadeAnim, transform: [{ translateY: slideAnim }] }
3003
3118
  ],
3004
3119
  children: [
3005
- /* @__PURE__ */ jsxs2(View2, { style: s.stepTop, children: [
3006
- /* @__PURE__ */ jsx3(Text2, { style: [s.title, { color: t.text }], children: "Enable Notifications" }),
3007
- /* @__PURE__ */ jsx3(Text2, { style: [s.subtitle, { color: t.textMuted }], children: "Stay in the loop with real-time updates" }),
3008
- /* @__PURE__ */ jsx3(StepIndicator, { currentStep: 3 }),
3009
- /* @__PURE__ */ jsx3(View2, { style: pushStyles.iconContainer, children: /* @__PURE__ */ jsx3(View2, { style: [pushStyles.bellCircle, { backgroundColor: accent + "20" }], children: /* @__PURE__ */ jsx3(Text2, { style: [pushStyles.bellIcon, { color: accent }], children: "\u{1F514}" }) }) }),
3010
- /* @__PURE__ */ jsxs2(View2, { style: pushStyles.benefitsList, children: [
3011
- /* @__PURE__ */ jsx3(Text2, { style: [pushStyles.benefitsHeader, { color: t.text }], children: "Get real-time updates when:" }),
3012
- benefits.map((item, i) => /* @__PURE__ */ jsxs2(View2, { style: pushStyles.benefitRow, children: [
3013
- /* @__PURE__ */ jsx3(View2, { style: [pushStyles.bulletDot, { backgroundColor: accent }] }),
3014
- /* @__PURE__ */ jsx3(Text2, { style: [pushStyles.benefitText, { color: t.textMuted }], children: item })
3120
+ /* @__PURE__ */ jsxs3(View3, { style: s.stepTop, children: [
3121
+ /* @__PURE__ */ jsx4(Text3, { style: [s.title, { color: t.text }], children: "Enable Notifications" }),
3122
+ /* @__PURE__ */ jsx4(Text3, { style: [s.subtitle, { color: t.textMuted }], children: "Stay in the loop with real-time updates" }),
3123
+ /* @__PURE__ */ jsx4(StepIndicator, { currentStep: 3 }),
3124
+ /* @__PURE__ */ jsx4(View3, { style: pushStyles.iconContainer, children: /* @__PURE__ */ jsx4(View3, { style: [pushStyles.bellCircle, { backgroundColor: accent + "20" }], children: /* @__PURE__ */ jsx4(Text3, { style: [pushStyles.bellIcon, { color: accent }], children: "\u{1F514}" }) }) }),
3125
+ /* @__PURE__ */ jsxs3(View3, { style: pushStyles.benefitsList, children: [
3126
+ /* @__PURE__ */ jsx4(Text3, { style: [pushStyles.benefitsHeader, { color: t.text }], children: "Get real-time updates when:" }),
3127
+ benefits.map((item, i) => /* @__PURE__ */ jsxs3(View3, { style: pushStyles.benefitRow, children: [
3128
+ /* @__PURE__ */ jsx4(View3, { style: [pushStyles.bulletDot, { backgroundColor: accent }] }),
3129
+ /* @__PURE__ */ jsx4(Text3, { style: [pushStyles.benefitText, { color: t.textMuted }], children: item })
3015
3130
  ] }, i))
3016
3131
  ] })
3017
3132
  ] }),
3018
- /* @__PURE__ */ jsxs2(View2, { style: s.bottomRow, children: [
3019
- /* @__PURE__ */ jsx3(
3020
- TouchableOpacity2,
3133
+ /* @__PURE__ */ jsxs3(View3, { style: s.bottomRow, children: [
3134
+ /* @__PURE__ */ jsx4(
3135
+ TouchableOpacity3,
3021
3136
  {
3022
3137
  style: [s.secondaryBtn, { borderColor: t.border }],
3023
3138
  onPress: onComplete,
3024
3139
  activeOpacity: 0.7,
3025
- children: /* @__PURE__ */ jsx3(Text2, { style: [s.secondaryBtnText, { color: t.textMuted }], children: "Maybe Later" })
3140
+ children: /* @__PURE__ */ jsx4(Text3, { style: [s.secondaryBtnText, { color: t.textMuted }], children: "Maybe Later" })
3026
3141
  }
3027
3142
  ),
3028
- /* @__PURE__ */ jsx3(
3029
- TouchableOpacity2,
3143
+ /* @__PURE__ */ jsx4(
3144
+ TouchableOpacity3,
3030
3145
  {
3031
3146
  style: [s.primaryBtn, { backgroundColor: accent, flex: 1, opacity: push.loading ? 0.7 : 1 }],
3032
3147
  onPress: handleEnable,
3033
3148
  disabled: push.loading,
3034
3149
  activeOpacity: 0.8,
3035
- children: push.loading ? /* @__PURE__ */ jsx3(ActivityIndicator2, { color: "#FFFFFF", size: "small" }) : /* @__PURE__ */ jsx3(Text2, { style: s.primaryBtnText, children: "Enable Notifications" })
3150
+ children: push.loading ? /* @__PURE__ */ jsx4(ActivityIndicator2, { color: "#FFFFFF", size: "small" }) : /* @__PURE__ */ jsx4(Text3, { style: s.primaryBtnText, children: "Enable Notifications" })
3036
3151
  }
3037
3152
  )
3038
3153
  ] })
@@ -3040,7 +3155,7 @@ function PushSetupScreen({
3040
3155
  }
3041
3156
  ) });
3042
3157
  }
3043
- var pushStyles = StyleSheet2.create({
3158
+ var pushStyles = StyleSheet3.create({
3044
3159
  iconContainer: { alignItems: "center", marginVertical: 24 },
3045
3160
  bellCircle: { width: 100, height: 100, borderRadius: 50, justifyContent: "center", alignItems: "center" },
3046
3161
  bellIcon: { fontSize: 48 },
@@ -3050,7 +3165,7 @@ var pushStyles = StyleSheet2.create({
3050
3165
  bulletDot: { width: 8, height: 8, borderRadius: 4 },
3051
3166
  benefitText: { fontSize: 16, flex: 1 }
3052
3167
  });
3053
- var s = StyleSheet2.create({
3168
+ var s = StyleSheet3.create({
3054
3169
  container: { flex: 1 },
3055
3170
  // Loading / Error
3056
3171
  centerContent: { flex: 1, justifyContent: "center", alignItems: "center", paddingHorizontal: 32, gap: 48 },
@@ -3093,7 +3208,6 @@ var s = StyleSheet2.create({
3093
3208
  styleScroll: { paddingHorizontal: 24, marginTop: 4 },
3094
3209
  styleThumbWrap: { borderWidth: 2, borderRadius: 12, padding: 3, marginRight: 10 },
3095
3210
  styleThumb: { width: 52, height: 52, borderRadius: 10, backgroundColor: "#E5E5EA" },
3096
- colorSwatch: { width: 32, height: 32, borderRadius: 16, borderWidth: 1.5, borderColor: "rgba(255,255,255,0.15)", marginRight: 10 },
3097
3211
  // Input
3098
3212
  inputGroup: { paddingHorizontal: 24, gap: 6 },
3099
3213
  inputLabel: { fontSize: 15, fontWeight: "600" },
@@ -3115,7 +3229,7 @@ var s = StyleSheet2.create({
3115
3229
  });
3116
3230
 
3117
3231
  // src/provider.tsx
3118
- import { jsx as jsx4 } from "react/jsx-runtime";
3232
+ import { jsx as jsx5 } from "react/jsx-runtime";
3119
3233
  var DubsContext = createContext4(null);
3120
3234
  function DubsProvider({
3121
3235
  apiKey,
@@ -3165,7 +3279,7 @@ function DubsProvider({
3165
3279
  themeOverrides.accent = uiConfig.accentColor;
3166
3280
  }
3167
3281
  if (externalWallet) {
3168
- return /* @__PURE__ */ jsx4(ThemeOverrideProvider, { value: themeOverrides, children: /* @__PURE__ */ jsx4(
3282
+ return /* @__PURE__ */ jsx5(ThemeOverrideProvider, { value: themeOverrides, children: /* @__PURE__ */ jsx5(
3169
3283
  ExternalWalletProvider,
3170
3284
  {
3171
3285
  client,
@@ -3185,7 +3299,7 @@ function DubsProvider({
3185
3299
  }
3186
3300
  ) });
3187
3301
  }
3188
- return /* @__PURE__ */ jsx4(ThemeOverrideProvider, { value: themeOverrides, children: /* @__PURE__ */ jsx4(
3302
+ return /* @__PURE__ */ jsx5(ThemeOverrideProvider, { value: themeOverrides, children: /* @__PURE__ */ jsx5(
3189
3303
  ManagedWalletProvider,
3190
3304
  {
3191
3305
  appName: uiConfig.appName || appName,
@@ -3197,7 +3311,7 @@ function DubsProvider({
3197
3311
  tagline: uiConfig.tagline,
3198
3312
  redirectUri,
3199
3313
  appUrl: appUrl || uiConfig.appUrl,
3200
- children: (adapter) => /* @__PURE__ */ jsx4(
3314
+ children: (adapter) => /* @__PURE__ */ jsx5(
3201
3315
  ManagedInner,
3202
3316
  {
3203
3317
  client,
@@ -3242,7 +3356,7 @@ function ManagedInner({
3242
3356
  () => ({ client, wallet, connection, appName, network, disconnect, uiConfig, pushEnabled }),
3243
3357
  [client, wallet, connection, appName, network, disconnect, uiConfig, pushEnabled]
3244
3358
  );
3245
- return /* @__PURE__ */ jsx4(DubsContext.Provider, { value, children: /* @__PURE__ */ jsx4(
3359
+ return /* @__PURE__ */ jsx5(DubsContext.Provider, { value, children: /* @__PURE__ */ jsx5(
3246
3360
  AuthGate,
3247
3361
  {
3248
3362
  onSaveToken: (token) => {
@@ -3286,9 +3400,9 @@ function ExternalWalletProvider({
3286
3400
  [client, wallet, connection, appName, network, disconnect, uiConfig, pushEnabled]
3287
3401
  );
3288
3402
  if (!managed) {
3289
- return /* @__PURE__ */ jsx4(DubsContext.Provider, { value, children });
3403
+ return /* @__PURE__ */ jsx5(DubsContext.Provider, { value, children });
3290
3404
  }
3291
- return /* @__PURE__ */ jsx4(DubsContext.Provider, { value, children: /* @__PURE__ */ jsx4(
3405
+ return /* @__PURE__ */ jsx5(DubsContext.Provider, { value, children: /* @__PURE__ */ jsx5(
3292
3406
  AuthGate,
3293
3407
  {
3294
3408
  onSaveToken: (token) => {
@@ -3319,8 +3433,8 @@ function useAppConfig() {
3319
3433
 
3320
3434
  // src/ui/UserProfileCard.tsx
3321
3435
  import { useMemo as useMemo3 } from "react";
3322
- import { View as View3, Text as Text3, Image as Image3, StyleSheet as StyleSheet3 } from "react-native";
3323
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
3436
+ import { View as View4, Text as Text4, Image as Image4, StyleSheet as StyleSheet4 } from "react-native";
3437
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
3324
3438
  function truncateAddress(address, chars = 4) {
3325
3439
  if (address.length <= chars * 2 + 3) return address;
3326
3440
  return `${address.slice(0, chars)}...${address.slice(-chars)}`;
@@ -3342,16 +3456,16 @@ function UserProfileCard({
3342
3456
  () => ensurePngAvatar(avatarUrl) || `https://api.dicebear.com/9.x/avataaars/png?seed=${walletAddress}&size=128`,
3343
3457
  [avatarUrl, walletAddress]
3344
3458
  );
3345
- return /* @__PURE__ */ jsxs3(View3, { style: [styles2.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
3346
- /* @__PURE__ */ jsx5(Image3, { source: { uri: imageUri }, style: styles2.avatar }),
3347
- /* @__PURE__ */ jsxs3(View3, { style: styles2.info, children: [
3348
- username ? /* @__PURE__ */ jsx5(Text3, { style: [styles2.username, { color: t.text }], children: username }) : null,
3349
- /* @__PURE__ */ jsx5(Text3, { style: [styles2.address, { color: t.textMuted }], children: truncateAddress(walletAddress) }),
3350
- memberSince ? /* @__PURE__ */ jsx5(Text3, { style: [styles2.memberSince, { color: t.textDim }], children: formatMemberSince(memberSince) }) : null
3459
+ return /* @__PURE__ */ jsxs4(View4, { style: [styles3.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
3460
+ /* @__PURE__ */ jsx6(Image4, { source: { uri: imageUri }, style: styles3.avatar }),
3461
+ /* @__PURE__ */ jsxs4(View4, { style: styles3.info, children: [
3462
+ username ? /* @__PURE__ */ jsx6(Text4, { style: [styles3.username, { color: t.text }], children: username }) : null,
3463
+ /* @__PURE__ */ jsx6(Text4, { style: [styles3.address, { color: t.textMuted }], children: truncateAddress(walletAddress) }),
3464
+ memberSince ? /* @__PURE__ */ jsx6(Text4, { style: [styles3.memberSince, { color: t.textDim }], children: formatMemberSince(memberSince) }) : null
3351
3465
  ] })
3352
3466
  ] });
3353
3467
  }
3354
- var styles2 = StyleSheet3.create({
3468
+ var styles3 = StyleSheet4.create({
3355
3469
  card: {
3356
3470
  flexDirection: "row",
3357
3471
  alignItems: "center",
@@ -3386,14 +3500,14 @@ var styles2 = StyleSheet3.create({
3386
3500
 
3387
3501
  // src/ui/SettingsSheet.tsx
3388
3502
  import {
3389
- View as View4,
3390
- Text as Text4,
3391
- ScrollView as ScrollView2,
3392
- TouchableOpacity as TouchableOpacity3,
3503
+ View as View5,
3504
+ Text as Text5,
3505
+ ScrollView as ScrollView3,
3506
+ TouchableOpacity as TouchableOpacity4,
3393
3507
  ActivityIndicator as ActivityIndicator3,
3394
- StyleSheet as StyleSheet4
3508
+ StyleSheet as StyleSheet5
3395
3509
  } from "react-native";
3396
- import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
3510
+ import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
3397
3511
  function truncateAddress2(address, chars = 4) {
3398
3512
  if (address.length <= chars * 2 + 3) return address;
3399
3513
  return `${address.slice(0, chars)}...${address.slice(-chars)}`;
@@ -3410,13 +3524,13 @@ function SettingsSheet({
3410
3524
  loggingOut = false
3411
3525
  }) {
3412
3526
  const t = useDubsTheme();
3413
- return /* @__PURE__ */ jsxs4(
3414
- ScrollView2,
3527
+ return /* @__PURE__ */ jsxs5(
3528
+ ScrollView3,
3415
3529
  {
3416
- style: [styles3.container, { backgroundColor: t.background }],
3417
- contentContainerStyle: styles3.content,
3530
+ style: [styles4.container, { backgroundColor: t.background }],
3531
+ contentContainerStyle: styles4.content,
3418
3532
  children: [
3419
- /* @__PURE__ */ jsx6(
3533
+ /* @__PURE__ */ jsx7(
3420
3534
  UserProfileCard,
3421
3535
  {
3422
3536
  walletAddress,
@@ -3425,49 +3539,49 @@ function SettingsSheet({
3425
3539
  memberSince
3426
3540
  }
3427
3541
  ),
3428
- /* @__PURE__ */ jsxs4(View4, { style: [styles3.actionsCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
3429
- onCopyAddress ? /* @__PURE__ */ jsxs4(
3430
- TouchableOpacity3,
3542
+ /* @__PURE__ */ jsxs5(View5, { style: [styles4.actionsCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
3543
+ onCopyAddress ? /* @__PURE__ */ jsxs5(
3544
+ TouchableOpacity4,
3431
3545
  {
3432
- style: styles3.actionRow,
3546
+ style: styles4.actionRow,
3433
3547
  onPress: onCopyAddress,
3434
3548
  activeOpacity: 0.7,
3435
3549
  children: [
3436
- /* @__PURE__ */ jsxs4(View4, { style: styles3.actionRowLeft, children: [
3437
- /* @__PURE__ */ jsx6(Text4, { style: [styles3.actionLabel, { color: t.text }], children: "Wallet Address" }),
3438
- /* @__PURE__ */ jsx6(Text4, { style: [styles3.actionValue, { color: t.textMuted }], children: truncateAddress2(walletAddress) })
3550
+ /* @__PURE__ */ jsxs5(View5, { style: styles4.actionRowLeft, children: [
3551
+ /* @__PURE__ */ jsx7(Text5, { style: [styles4.actionLabel, { color: t.text }], children: "Wallet Address" }),
3552
+ /* @__PURE__ */ jsx7(Text5, { style: [styles4.actionValue, { color: t.textMuted }], children: truncateAddress2(walletAddress) })
3439
3553
  ] }),
3440
- /* @__PURE__ */ jsx6(Text4, { style: [styles3.copyLabel, { color: t.accent }], children: "Copy" })
3554
+ /* @__PURE__ */ jsx7(Text5, { style: [styles4.copyLabel, { color: t.accent }], children: "Copy" })
3441
3555
  ]
3442
3556
  }
3443
3557
  ) : null,
3444
- onSupport ? /* @__PURE__ */ jsxs4(Fragment3, { children: [
3445
- onCopyAddress ? /* @__PURE__ */ jsx6(View4, { style: [styles3.separator, { backgroundColor: t.border }] }) : null,
3446
- /* @__PURE__ */ jsxs4(
3447
- TouchableOpacity3,
3558
+ onSupport ? /* @__PURE__ */ jsxs5(Fragment3, { children: [
3559
+ onCopyAddress ? /* @__PURE__ */ jsx7(View5, { style: [styles4.separator, { backgroundColor: t.border }] }) : null,
3560
+ /* @__PURE__ */ jsxs5(
3561
+ TouchableOpacity4,
3448
3562
  {
3449
- style: styles3.actionRow,
3563
+ style: styles4.actionRow,
3450
3564
  onPress: onSupport,
3451
3565
  activeOpacity: 0.7,
3452
3566
  children: [
3453
- /* @__PURE__ */ jsx6(Text4, { style: [styles3.actionLabel, { color: t.text }], children: "Help & Support" }),
3454
- /* @__PURE__ */ jsx6(Text4, { style: [styles3.chevron, { color: t.textMuted }], children: "\u203A" })
3567
+ /* @__PURE__ */ jsx7(Text5, { style: [styles4.actionLabel, { color: t.text }], children: "Help & Support" }),
3568
+ /* @__PURE__ */ jsx7(Text5, { style: [styles4.chevron, { color: t.textMuted }], children: "\u203A" })
3455
3569
  ]
3456
3570
  }
3457
3571
  )
3458
3572
  ] }) : null
3459
3573
  ] }),
3460
- /* @__PURE__ */ jsx6(
3461
- TouchableOpacity3,
3574
+ /* @__PURE__ */ jsx7(
3575
+ TouchableOpacity4,
3462
3576
  {
3463
- style: [styles3.logoutButton, { borderColor: t.live }],
3577
+ style: [styles4.logoutButton, { borderColor: t.live }],
3464
3578
  onPress: onLogout,
3465
3579
  disabled: loggingOut,
3466
3580
  activeOpacity: 0.7,
3467
- children: loggingOut ? /* @__PURE__ */ jsx6(ActivityIndicator3, { color: t.live, size: "small" }) : /* @__PURE__ */ jsx6(Text4, { style: [styles3.logoutText, { color: t.live }], children: "Log Out" })
3581
+ children: loggingOut ? /* @__PURE__ */ jsx7(ActivityIndicator3, { color: t.live, size: "small" }) : /* @__PURE__ */ jsx7(Text5, { style: [styles4.logoutText, { color: t.live }], children: "Log Out" })
3468
3582
  }
3469
3583
  ),
3470
- appVersion ? /* @__PURE__ */ jsxs4(Text4, { style: [styles3.version, { color: t.textDim }], children: [
3584
+ appVersion ? /* @__PURE__ */ jsxs5(Text5, { style: [styles4.version, { color: t.textDim }], children: [
3471
3585
  "v",
3472
3586
  appVersion
3473
3587
  ] }) : null
@@ -3475,7 +3589,7 @@ function SettingsSheet({
3475
3589
  }
3476
3590
  );
3477
3591
  }
3478
- var styles3 = StyleSheet4.create({
3592
+ var styles4 = StyleSheet5.create({
3479
3593
  container: {
3480
3594
  flex: 1
3481
3595
  },
@@ -3540,58 +3654,20 @@ var styles3 = StyleSheet4.create({
3540
3654
  // src/ui/UserProfileSheet.tsx
3541
3655
  import { useState as useState17, useEffect as useEffect12, useRef as useRef5, useCallback as useCallback16, useMemo as useMemo4 } from "react";
3542
3656
  import {
3543
- View as View5,
3544
- Text as Text5,
3545
- TouchableOpacity as TouchableOpacity4,
3657
+ View as View6,
3658
+ Text as Text6,
3659
+ TouchableOpacity as TouchableOpacity5,
3546
3660
  ActivityIndicator as ActivityIndicator4,
3547
3661
  Modal,
3548
3662
  Animated as Animated2,
3549
- StyleSheet as StyleSheet5,
3663
+ StyleSheet as StyleSheet6,
3550
3664
  KeyboardAvoidingView as KeyboardAvoidingView2,
3551
3665
  Platform as Platform5,
3552
- Image as Image4,
3553
- ScrollView as ScrollView3,
3666
+ Image as Image5,
3667
+ ScrollView as ScrollView4,
3554
3668
  Dimensions
3555
3669
  } from "react-native";
3556
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
3557
- var DICEBEAR_STYLES2 = [
3558
- "adventurer",
3559
- "avataaars",
3560
- "fun-emoji",
3561
- "bottts",
3562
- "big-smile",
3563
- "thumbs"
3564
- ];
3565
- var BG_COLORS2 = [
3566
- "1a1a2e",
3567
- "f43f5e",
3568
- "f97316",
3569
- "eab308",
3570
- "22c55e",
3571
- "3b82f6",
3572
- "8b5cf6",
3573
- "ec4899",
3574
- "06b6d4",
3575
- "64748b"
3576
- ];
3577
- function generateSeed2() {
3578
- return Math.random().toString(36).slice(2, 10);
3579
- }
3580
- function getAvatarUrl2(style, seed, bg = "1a1a2e", size = 256) {
3581
- return `https://api.dicebear.com/9.x/${style}/png?seed=${seed}&backgroundColor=${bg}&size=${size}`;
3582
- }
3583
- function parseAvatarUrl(url) {
3584
- if (!url) return { style: "adventurer", seed: generateSeed2(), bg: "1a1a2e" };
3585
- try {
3586
- const match = url.match(/\/\d+\.x\/([^/]+)\/(?:png|svg)\?seed=([^&]+)/);
3587
- if (match) {
3588
- const bgMatch = url.match(/backgroundColor=([^&]+)/);
3589
- return { style: match[1], seed: match[2], bg: bgMatch?.[1] || "1a1a2e" };
3590
- }
3591
- } catch {
3592
- }
3593
- return { style: "adventurer", seed: generateSeed2(), bg: "1a1a2e" };
3594
- }
3670
+ import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
3595
3671
  function truncateAddress3(address, chars = 4) {
3596
3672
  if (address.length <= chars * 2 + 3) return address;
3597
3673
  return `${address.slice(0, chars)}...${address.slice(-chars)}`;
@@ -3605,6 +3681,7 @@ function UserProfileSheet({
3605
3681
  }) {
3606
3682
  const t = useDubsTheme();
3607
3683
  const { client } = useDubs();
3684
+ const { refreshUser } = useAuth();
3608
3685
  const push = usePushNotifications();
3609
3686
  const overlayOpacity = useRef5(new Animated2.Value(0)).current;
3610
3687
  const parsed = useMemo4(() => parseAvatarUrl(user.avatar), [user.avatar]);
@@ -3629,39 +3706,34 @@ function UserProfileSheet({
3629
3706
  useEffect12(() => {
3630
3707
  if (visible) setError(null);
3631
3708
  }, [visible]);
3632
- const currentAvatarUrl = getAvatarUrl2(avatarStyle, avatarSeed, bgColor);
3709
+ const currentAvatarUrl = getAvatarUrl(avatarStyle, avatarSeed, bgColor);
3633
3710
  const saveAvatar = useCallback16(async (newUrl) => {
3634
3711
  setSaving(true);
3635
3712
  setError(null);
3636
3713
  try {
3637
3714
  await client.updateProfile({ avatar: newUrl });
3715
+ await refreshUser();
3638
3716
  onAvatarUpdated?.(newUrl);
3639
3717
  } catch (err) {
3640
3718
  setError(err instanceof Error ? err.message : "Failed to update avatar");
3641
3719
  } finally {
3642
3720
  setSaving(false);
3643
3721
  }
3644
- }, [client, onAvatarUpdated]);
3645
- const handleSelectStyle = useCallback16(
3646
- (style) => {
3647
- setAvatarStyle(style);
3648
- saveAvatar(getAvatarUrl2(style, avatarSeed, bgColor));
3649
- },
3650
- [avatarSeed, bgColor, saveAvatar]
3651
- );
3722
+ }, [client, refreshUser, onAvatarUpdated]);
3723
+ const handleStyleChange = useCallback16((style) => {
3724
+ setAvatarStyle(style);
3725
+ saveAvatar(getAvatarUrl(style, avatarSeed, bgColor));
3726
+ }, [avatarSeed, bgColor, saveAvatar]);
3652
3727
  const handleShuffle = useCallback16(() => {
3653
- const newSeed = generateSeed2();
3728
+ const newSeed = generateSeed();
3654
3729
  setAvatarSeed(newSeed);
3655
- saveAvatar(getAvatarUrl2(avatarStyle, newSeed, bgColor));
3730
+ saveAvatar(getAvatarUrl(avatarStyle, newSeed, bgColor));
3656
3731
  }, [avatarStyle, bgColor, saveAvatar]);
3657
- const handleSelectBgColor = useCallback16(
3658
- (color) => {
3659
- setBgColor(color);
3660
- saveAvatar(getAvatarUrl2(avatarStyle, avatarSeed, color));
3661
- },
3662
- [avatarStyle, avatarSeed, saveAvatar]
3663
- );
3664
- return /* @__PURE__ */ jsxs5(
3732
+ const handleBgChange = useCallback16((color) => {
3733
+ setBgColor(color);
3734
+ saveAvatar(getAvatarUrl(avatarStyle, avatarSeed, color));
3735
+ }, [avatarStyle, avatarSeed, saveAvatar]);
3736
+ return /* @__PURE__ */ jsxs6(
3665
3737
  Modal,
3666
3738
  {
3667
3739
  visible,
@@ -3669,149 +3741,101 @@ function UserProfileSheet({
3669
3741
  transparent: true,
3670
3742
  onRequestClose: onDismiss,
3671
3743
  children: [
3672
- /* @__PURE__ */ jsx7(Animated2.View, { style: [styles4.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx7(TouchableOpacity4, { style: styles4.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
3673
- /* @__PURE__ */ jsx7(
3744
+ /* @__PURE__ */ jsx8(Animated2.View, { style: [styles5.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx8(TouchableOpacity5, { style: styles5.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
3745
+ /* @__PURE__ */ jsx8(
3674
3746
  KeyboardAvoidingView2,
3675
3747
  {
3676
- style: styles4.keyboardView,
3748
+ style: styles5.keyboardView,
3677
3749
  behavior: Platform5.OS === "ios" ? "padding" : void 0,
3678
- children: /* @__PURE__ */ jsx7(View5, { style: styles4.sheetPositioner, children: /* @__PURE__ */ jsxs5(View5, { style: [styles4.sheet, { backgroundColor: t.background }], children: [
3679
- /* @__PURE__ */ jsx7(View5, { style: styles4.handleRow, children: /* @__PURE__ */ jsx7(View5, { style: [styles4.handle, { backgroundColor: t.textMuted }] }) }),
3680
- /* @__PURE__ */ jsxs5(View5, { style: styles4.header, children: [
3681
- /* @__PURE__ */ jsx7(Text5, { style: [styles4.headerTitle, { color: t.text }], children: "Profile" }),
3682
- /* @__PURE__ */ jsx7(TouchableOpacity4, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx7(Text5, { style: [styles4.closeButton, { color: t.textMuted }], children: "\u2715" }) })
3750
+ children: /* @__PURE__ */ jsx8(View6, { style: styles5.sheetPositioner, children: /* @__PURE__ */ jsxs6(View6, { style: [styles5.sheet, { backgroundColor: t.background }], children: [
3751
+ /* @__PURE__ */ jsx8(View6, { style: styles5.handleRow, children: /* @__PURE__ */ jsx8(View6, { style: [styles5.handle, { backgroundColor: t.textMuted }] }) }),
3752
+ /* @__PURE__ */ jsxs6(View6, { style: styles5.header, children: [
3753
+ /* @__PURE__ */ jsx8(Text6, { style: [styles5.headerTitle, { color: t.text }], children: "Profile" }),
3754
+ /* @__PURE__ */ jsx8(TouchableOpacity5, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.closeButton, { color: t.textMuted }], children: "\u2715" }) })
3683
3755
  ] }),
3684
- /* @__PURE__ */ jsxs5(
3685
- ScrollView3,
3756
+ /* @__PURE__ */ jsxs6(
3757
+ ScrollView4,
3686
3758
  {
3687
- style: styles4.scrollContent,
3688
- contentContainerStyle: styles4.scrollContentInner,
3759
+ style: styles5.scrollContent,
3760
+ contentContainerStyle: styles5.scrollContentInner,
3689
3761
  showsVerticalScrollIndicator: false,
3690
3762
  bounces: false,
3691
3763
  children: [
3692
- /* @__PURE__ */ jsxs5(View5, { style: styles4.avatarSection, children: [
3693
- /* @__PURE__ */ jsxs5(View5, { style: [styles4.avatarContainer, { borderColor: t.border }], children: [
3694
- /* @__PURE__ */ jsx7(
3695
- Image4,
3764
+ /* @__PURE__ */ jsxs6(View6, { style: styles5.avatarSection, children: [
3765
+ /* @__PURE__ */ jsxs6(View6, { style: [styles5.avatarContainer, { borderColor: t.border }], children: [
3766
+ /* @__PURE__ */ jsx8(
3767
+ Image5,
3696
3768
  {
3697
3769
  source: { uri: currentAvatarUrl },
3698
- style: styles4.avatar
3770
+ style: styles5.avatar
3699
3771
  }
3700
3772
  ),
3701
- saving && /* @__PURE__ */ jsx7(View5, { style: styles4.avatarLoading, children: /* @__PURE__ */ jsx7(ActivityIndicator4, { size: "small", color: "#FFFFFF" }) })
3773
+ saving && /* @__PURE__ */ jsx8(View6, { style: styles5.avatarLoading, children: /* @__PURE__ */ jsx8(ActivityIndicator4, { size: "small", color: "#FFFFFF" }) })
3702
3774
  ] }),
3703
- user.username ? /* @__PURE__ */ jsx7(Text5, { style: [styles4.username, { color: t.text }], children: user.username }) : null,
3704
- /* @__PURE__ */ jsx7(Text5, { style: [styles4.walletAddress, { color: t.textMuted }], children: truncateAddress3(user.walletAddress, 6) })
3775
+ user.username ? /* @__PURE__ */ jsx8(Text6, { style: [styles5.username, { color: t.text }], children: user.username }) : null,
3776
+ /* @__PURE__ */ jsx8(Text6, { style: [styles5.walletAddress, { color: t.textMuted }], children: truncateAddress3(user.walletAddress, 6) })
3705
3777
  ] }),
3706
- /* @__PURE__ */ jsxs5(View5, { style: styles4.section, children: [
3707
- /* @__PURE__ */ jsxs5(View5, { style: styles4.sectionHeaderRow, children: [
3708
- /* @__PURE__ */ jsx7(Text5, { style: [styles4.sectionLabel, { color: t.textSecondary }], children: "Change Avatar" }),
3709
- /* @__PURE__ */ jsx7(
3710
- TouchableOpacity4,
3778
+ /* @__PURE__ */ jsxs6(View6, { style: styles5.section, children: [
3779
+ /* @__PURE__ */ jsxs6(View6, { style: styles5.sectionHeaderRow, children: [
3780
+ /* @__PURE__ */ jsx8(Text6, { style: [styles5.sectionLabel, { color: t.textSecondary }], children: "Change Avatar" }),
3781
+ /* @__PURE__ */ jsx8(
3782
+ TouchableOpacity5,
3711
3783
  {
3712
- style: [styles4.shuffleButton, { borderColor: t.border }],
3784
+ style: [styles5.shuffleButton, { borderColor: t.border }],
3713
3785
  onPress: handleShuffle,
3714
3786
  activeOpacity: 0.7,
3715
3787
  disabled: saving,
3716
- children: /* @__PURE__ */ jsx7(Text5, { style: [styles4.shuffleText, { color: t.accent }], children: "Shuffle" })
3788
+ children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.shuffleText, { color: t.accent }], children: "Shuffle" })
3717
3789
  }
3718
3790
  )
3719
3791
  ] }),
3720
- /* @__PURE__ */ jsx7(
3721
- ScrollView3,
3792
+ /* @__PURE__ */ jsx8(
3793
+ AvatarEditor,
3722
3794
  {
3723
- horizontal: true,
3724
- showsHorizontalScrollIndicator: false,
3725
- contentContainerStyle: styles4.stylePickerContent,
3726
- children: DICEBEAR_STYLES2.map((style) => {
3727
- const isSelected = style === avatarStyle;
3728
- return /* @__PURE__ */ jsx7(
3729
- TouchableOpacity4,
3730
- {
3731
- onPress: () => handleSelectStyle(style),
3732
- activeOpacity: 0.7,
3733
- disabled: saving,
3734
- style: [
3735
- styles4.styleTile,
3736
- {
3737
- borderColor: isSelected ? t.accent : t.border,
3738
- borderWidth: isSelected ? 2 : 1
3739
- }
3740
- ],
3741
- children: /* @__PURE__ */ jsx7(
3742
- Image4,
3743
- {
3744
- source: { uri: getAvatarUrl2(style, avatarSeed, bgColor, 80) },
3745
- style: styles4.styleTileImage
3746
- }
3747
- )
3748
- },
3749
- style
3750
- );
3751
- })
3752
- }
3753
- ),
3754
- /* @__PURE__ */ jsx7(Text5, { style: [styles4.sectionLabel, { color: t.textSecondary, marginTop: 4 }], children: "Background Color" }),
3755
- /* @__PURE__ */ jsx7(
3756
- ScrollView3,
3757
- {
3758
- horizontal: true,
3759
- showsHorizontalScrollIndicator: false,
3760
- contentContainerStyle: styles4.colorPickerContent,
3761
- children: BG_COLORS2.map((color) => {
3762
- const isSelected = color === bgColor;
3763
- return /* @__PURE__ */ jsx7(
3764
- TouchableOpacity4,
3765
- {
3766
- onPress: () => handleSelectBgColor(color),
3767
- activeOpacity: 0.7,
3768
- disabled: saving,
3769
- style: [
3770
- styles4.colorSwatch,
3771
- { backgroundColor: `#${color}` },
3772
- isSelected && { borderColor: t.accent, borderWidth: 2.5 }
3773
- ]
3774
- },
3775
- color
3776
- );
3777
- })
3795
+ style: avatarStyle,
3796
+ seed: avatarSeed,
3797
+ bg: bgColor,
3798
+ onStyleChange: handleStyleChange,
3799
+ onSeedChange: setAvatarSeed,
3800
+ onBgChange: handleBgChange,
3801
+ disabled: saving
3778
3802
  }
3779
3803
  )
3780
3804
  ] }),
3781
- error ? /* @__PURE__ */ jsx7(View5, { style: [styles4.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx7(Text5, { style: [styles4.errorText, { color: t.errorText }], children: error }) }) : null,
3782
- push.enabled && /* @__PURE__ */ jsxs5(View5, { style: [styles4.notifRow, { backgroundColor: t.surface, borderColor: t.border }], children: [
3783
- /* @__PURE__ */ jsxs5(View5, { style: styles4.notifLeft, children: [
3784
- /* @__PURE__ */ jsx7(Text5, { style: [styles4.notifLabel, { color: t.text }], children: "Push Notifications" }),
3785
- /* @__PURE__ */ jsx7(
3786
- Text5,
3805
+ error ? /* @__PURE__ */ jsx8(View6, { style: [styles5.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.errorText, { color: t.errorText }], children: error }) }) : null,
3806
+ push.enabled && /* @__PURE__ */ jsxs6(View6, { style: [styles5.notifRow, { backgroundColor: t.surface, borderColor: t.border }], children: [
3807
+ /* @__PURE__ */ jsxs6(View6, { style: styles5.notifLeft, children: [
3808
+ /* @__PURE__ */ jsx8(Text6, { style: [styles5.notifLabel, { color: t.text }], children: "Push Notifications" }),
3809
+ /* @__PURE__ */ jsx8(
3810
+ Text6,
3787
3811
  {
3788
3812
  style: [
3789
- styles4.notifStatus,
3813
+ styles5.notifStatus,
3790
3814
  { color: push.hasPermission ? t.success : t.textMuted }
3791
3815
  ],
3792
3816
  children: push.hasPermission ? "Enabled" : "Disabled"
3793
3817
  }
3794
3818
  )
3795
3819
  ] }),
3796
- !push.hasPermission && /* @__PURE__ */ jsx7(
3797
- TouchableOpacity4,
3820
+ !push.hasPermission && /* @__PURE__ */ jsx8(
3821
+ TouchableOpacity5,
3798
3822
  {
3799
- style: [styles4.enableButton, { backgroundColor: t.accent }],
3823
+ style: [styles5.enableButton, { backgroundColor: t.accent }],
3800
3824
  onPress: push.register,
3801
3825
  disabled: push.loading,
3802
3826
  activeOpacity: 0.8,
3803
- children: push.loading ? /* @__PURE__ */ jsx7(ActivityIndicator4, { size: "small", color: "#FFFFFF" }) : /* @__PURE__ */ jsx7(Text5, { style: styles4.enableText, children: "Enable" })
3827
+ children: push.loading ? /* @__PURE__ */ jsx8(ActivityIndicator4, { size: "small", color: "#FFFFFF" }) : /* @__PURE__ */ jsx8(Text6, { style: styles5.enableText, children: "Enable" })
3804
3828
  }
3805
3829
  )
3806
3830
  ] }),
3807
- push.enabled && push.error ? /* @__PURE__ */ jsx7(View5, { style: [styles4.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx7(Text5, { style: [styles4.errorText, { color: t.errorText }], children: push.error.message }) }) : null,
3808
- onDisconnect ? /* @__PURE__ */ jsx7(
3809
- TouchableOpacity4,
3831
+ push.enabled && push.error ? /* @__PURE__ */ jsx8(View6, { style: [styles5.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.errorText, { color: t.errorText }], children: push.error.message }) }) : null,
3832
+ onDisconnect ? /* @__PURE__ */ jsx8(
3833
+ TouchableOpacity5,
3810
3834
  {
3811
- style: [styles4.disconnectButton, { borderColor: t.live }],
3835
+ style: [styles5.disconnectButton, { borderColor: t.live }],
3812
3836
  onPress: onDisconnect,
3813
3837
  activeOpacity: 0.7,
3814
- children: /* @__PURE__ */ jsx7(Text5, { style: [styles4.disconnectText, { color: t.live }], children: "Disconnect Wallet" })
3838
+ children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.disconnectText, { color: t.live }], children: "Disconnect Wallet" })
3815
3839
  }
3816
3840
  ) : null
3817
3841
  ]
@@ -3824,9 +3848,9 @@ function UserProfileSheet({
3824
3848
  }
3825
3849
  );
3826
3850
  }
3827
- var styles4 = StyleSheet5.create({
3851
+ var styles5 = StyleSheet6.create({
3828
3852
  overlay: {
3829
- ...StyleSheet5.absoluteFillObject,
3853
+ ...StyleSheet6.absoluteFillObject,
3830
3854
  backgroundColor: "rgba(0,0,0,0.5)"
3831
3855
  },
3832
3856
  overlayTap: {
@@ -3877,7 +3901,6 @@ var styles4 = StyleSheet5.create({
3877
3901
  scrollContentInner: {
3878
3902
  paddingBottom: 8
3879
3903
  },
3880
- // Avatar
3881
3904
  avatarSection: {
3882
3905
  alignItems: "center",
3883
3906
  paddingTop: 8,
@@ -3893,11 +3916,10 @@ var styles4 = StyleSheet5.create({
3893
3916
  },
3894
3917
  avatar: {
3895
3918
  width: "100%",
3896
- height: "100%",
3897
- backgroundColor: "#1a1a2e"
3919
+ height: "100%"
3898
3920
  },
3899
3921
  avatarLoading: {
3900
- ...StyleSheet5.absoluteFillObject,
3922
+ ...StyleSheet6.absoluteFillObject,
3901
3923
  backgroundColor: "rgba(0,0,0,0.35)",
3902
3924
  justifyContent: "center",
3903
3925
  alignItems: "center"
@@ -3910,7 +3932,6 @@ var styles4 = StyleSheet5.create({
3910
3932
  fontSize: 13,
3911
3933
  fontFamily: "monospace"
3912
3934
  },
3913
- // Change Avatar
3914
3935
  section: {
3915
3936
  marginBottom: 20,
3916
3937
  gap: 12
@@ -3934,31 +3955,6 @@ var styles4 = StyleSheet5.create({
3934
3955
  fontSize: 13,
3935
3956
  fontWeight: "600"
3936
3957
  },
3937
- stylePickerContent: {
3938
- gap: 10
3939
- },
3940
- colorPickerContent: {
3941
- gap: 8
3942
- },
3943
- colorSwatch: {
3944
- width: 32,
3945
- height: 32,
3946
- borderRadius: 16,
3947
- borderWidth: 1.5,
3948
- borderColor: "rgba(255,255,255,0.15)"
3949
- },
3950
- styleTile: {
3951
- width: 72,
3952
- height: 72,
3953
- borderRadius: 16,
3954
- overflow: "hidden"
3955
- },
3956
- styleTileImage: {
3957
- width: "100%",
3958
- height: "100%",
3959
- backgroundColor: "#1a1a2e"
3960
- },
3961
- // Error
3962
3958
  errorBox: {
3963
3959
  marginBottom: 16,
3964
3960
  borderRadius: 12,
@@ -3969,7 +3965,6 @@ var styles4 = StyleSheet5.create({
3969
3965
  fontSize: 13,
3970
3966
  fontWeight: "500"
3971
3967
  },
3972
- // Push Notifications
3973
3968
  notifRow: {
3974
3969
  flexDirection: "row",
3975
3970
  alignItems: "center",
@@ -4000,7 +3995,6 @@ var styles4 = StyleSheet5.create({
4000
3995
  fontSize: 14,
4001
3996
  fontWeight: "700"
4002
3997
  },
4003
- // Disconnect
4004
3998
  disconnectButton: {
4005
3999
  height: 52,
4006
4000
  borderRadius: 16,
@@ -4016,8 +4010,8 @@ var styles4 = StyleSheet5.create({
4016
4010
 
4017
4011
  // src/ui/game/GamePoster.tsx
4018
4012
  import { useState as useState18 } from "react";
4019
- import { StyleSheet as StyleSheet6, View as View6, Text as Text6 } from "react-native";
4020
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
4013
+ import { StyleSheet as StyleSheet7, View as View7, Text as Text7 } from "react-native";
4014
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
4021
4015
  function computeCountdown(lockTimestamp) {
4022
4016
  if (!lockTimestamp) return "";
4023
4017
  const ts = typeof lockTimestamp === "string" ? parseInt(lockTimestamp) : lockTimestamp;
@@ -4038,27 +4032,27 @@ function GamePoster({ game, ImageComponent }) {
4038
4032
  const away = opponents[1];
4039
4033
  const countdown = computeCountdown(game.lockTimestamp);
4040
4034
  const isLive = countdown === "LIVE";
4041
- return /* @__PURE__ */ jsxs6(View6, { style: styles5.container, children: [
4042
- game.media?.poster ? /* @__PURE__ */ jsx8(
4035
+ return /* @__PURE__ */ jsxs7(View7, { style: styles6.container, children: [
4036
+ game.media?.poster ? /* @__PURE__ */ jsx9(
4043
4037
  Img,
4044
4038
  {
4045
4039
  source: { uri: game.media.poster },
4046
- style: styles5.image,
4040
+ style: styles6.image,
4047
4041
  resizeMode: "cover"
4048
4042
  }
4049
- ) : /* @__PURE__ */ jsx8(View6, { style: [styles5.image, { backgroundColor: t.surface }], children: /* @__PURE__ */ jsxs6(View6, { style: styles5.fallback, children: [
4050
- /* @__PURE__ */ jsx8(TeamLogoInternal, { url: home?.imageUrl, size: 56, Img }),
4051
- /* @__PURE__ */ jsx8(Text6, { style: styles5.vs, children: "VS" }),
4052
- /* @__PURE__ */ jsx8(TeamLogoInternal, { url: away?.imageUrl, size: 56, Img })
4043
+ ) : /* @__PURE__ */ jsx9(View7, { style: [styles6.image, { backgroundColor: t.surface }], children: /* @__PURE__ */ jsxs7(View7, { style: styles6.fallback, children: [
4044
+ /* @__PURE__ */ jsx9(TeamLogoInternal, { url: home?.imageUrl, size: 56, Img }),
4045
+ /* @__PURE__ */ jsx9(Text7, { style: styles6.vs, children: "VS" }),
4046
+ /* @__PURE__ */ jsx9(TeamLogoInternal, { url: away?.imageUrl, size: 56, Img })
4053
4047
  ] }) }),
4054
- /* @__PURE__ */ jsx8(View6, { style: styles5.overlay }),
4055
- /* @__PURE__ */ jsxs6(View6, { style: styles5.teamNames, children: [
4056
- /* @__PURE__ */ jsx8(Text6, { style: styles5.teamNameText, numberOfLines: 1, children: home?.name || "Home" }),
4057
- /* @__PURE__ */ jsx8(Text6, { style: styles5.teamNameVs, children: "vs" }),
4058
- /* @__PURE__ */ jsx8(Text6, { style: styles5.teamNameText, numberOfLines: 1, children: away?.name || "Away" })
4048
+ /* @__PURE__ */ jsx9(View7, { style: styles6.overlay }),
4049
+ /* @__PURE__ */ jsxs7(View7, { style: styles6.teamNames, children: [
4050
+ /* @__PURE__ */ jsx9(Text7, { style: styles6.teamNameText, numberOfLines: 1, children: home?.name || "Home" }),
4051
+ /* @__PURE__ */ jsx9(Text7, { style: styles6.teamNameVs, children: "vs" }),
4052
+ /* @__PURE__ */ jsx9(Text7, { style: styles6.teamNameText, numberOfLines: 1, children: away?.name || "Away" })
4059
4053
  ] }),
4060
- countdown ? /* @__PURE__ */ jsx8(View6, { style: styles5.countdownPill, children: /* @__PURE__ */ jsx8(Text6, { style: [styles5.countdownText, isLive && styles5.countdownLive], children: countdown }) }) : null,
4061
- /* @__PURE__ */ jsx8(View6, { style: styles5.poolPill, children: /* @__PURE__ */ jsxs6(Text6, { style: styles5.poolText, children: [
4054
+ countdown ? /* @__PURE__ */ jsx9(View7, { style: styles6.countdownPill, children: /* @__PURE__ */ jsx9(Text7, { style: [styles6.countdownText, isLive && styles6.countdownLive], children: countdown }) }) : null,
4055
+ /* @__PURE__ */ jsx9(View7, { style: styles6.poolPill, children: /* @__PURE__ */ jsxs7(Text7, { style: styles6.poolText, children: [
4062
4056
  game.totalPool || 0,
4063
4057
  " SOL"
4064
4058
  ] }) })
@@ -4067,9 +4061,9 @@ function GamePoster({ game, ImageComponent }) {
4067
4061
  function TeamLogoInternal({ url, size, Img }) {
4068
4062
  const [failed, setFailed] = useState18(false);
4069
4063
  if (!url || failed) {
4070
- return /* @__PURE__ */ jsx8(View6, { style: [styles5.logoPlaceholder, { width: size, height: size, borderRadius: size / 2 }] });
4064
+ return /* @__PURE__ */ jsx9(View7, { style: [styles6.logoPlaceholder, { width: size, height: size, borderRadius: size / 2 }] });
4071
4065
  }
4072
- return /* @__PURE__ */ jsx8(
4066
+ return /* @__PURE__ */ jsx9(
4073
4067
  Img,
4074
4068
  {
4075
4069
  source: { uri: url },
@@ -4079,7 +4073,7 @@ function TeamLogoInternal({ url, size, Img }) {
4079
4073
  }
4080
4074
  );
4081
4075
  }
4082
- var styles5 = StyleSheet6.create({
4076
+ var styles6 = StyleSheet7.create({
4083
4077
  container: {
4084
4078
  height: 200,
4085
4079
  borderRadius: 16,
@@ -4087,12 +4081,12 @@ var styles5 = StyleSheet6.create({
4087
4081
  position: "relative"
4088
4082
  },
4089
4083
  image: {
4090
- ...StyleSheet6.absoluteFillObject,
4084
+ ...StyleSheet7.absoluteFillObject,
4091
4085
  justifyContent: "center",
4092
4086
  alignItems: "center"
4093
4087
  },
4094
4088
  overlay: {
4095
- ...StyleSheet6.absoluteFillObject,
4089
+ ...StyleSheet7.absoluteFillObject,
4096
4090
  backgroundColor: "rgba(0,0,0,0.35)"
4097
4091
  },
4098
4092
  fallback: {
@@ -4167,8 +4161,8 @@ var styles5 = StyleSheet6.create({
4167
4161
 
4168
4162
  // src/ui/game/LivePoolsCard.tsx
4169
4163
  import { useMemo as useMemo5 } from "react";
4170
- import { StyleSheet as StyleSheet7, View as View7, Text as Text7 } from "react-native";
4171
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
4164
+ import { StyleSheet as StyleSheet8, View as View8, Text as Text8 } from "react-native";
4165
+ import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
4172
4166
  function LivePoolsCard({
4173
4167
  game,
4174
4168
  shortName,
@@ -4190,29 +4184,29 @@ function LivePoolsCard({
4190
4184
  awayOdds: awayPool > 0 ? (totalPool / awayPool).toFixed(2) : "\u2014"
4191
4185
  };
4192
4186
  }, [homePool, awayPool, totalPool]);
4193
- return /* @__PURE__ */ jsxs7(View7, { style: [styles6.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4194
- /* @__PURE__ */ jsx9(Text7, { style: [styles6.title, { color: t.text }], children: "Live Pools" }),
4195
- /* @__PURE__ */ jsxs7(Text7, { style: [styles6.total, { color: t.accent }], children: [
4187
+ return /* @__PURE__ */ jsxs8(View8, { style: [styles7.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4188
+ /* @__PURE__ */ jsx10(Text8, { style: [styles7.title, { color: t.text }], children: "Live Pools" }),
4189
+ /* @__PURE__ */ jsxs8(Text8, { style: [styles7.total, { color: t.accent }], children: [
4196
4190
  totalPool,
4197
4191
  " SOL total"
4198
4192
  ] }),
4199
- /* @__PURE__ */ jsxs7(View7, { style: styles6.bars, children: [
4200
- /* @__PURE__ */ jsx9(PoolBar, { name: homeName, amount: homePool, percent: homePercent, color: homeColor, t }),
4201
- /* @__PURE__ */ jsx9(PoolBar, { name: awayName, amount: awayPool, percent: awayPercent, color: awayColor, t })
4193
+ /* @__PURE__ */ jsxs8(View8, { style: styles7.bars, children: [
4194
+ /* @__PURE__ */ jsx10(PoolBar, { name: homeName, amount: homePool, percent: homePercent, color: homeColor, t }),
4195
+ /* @__PURE__ */ jsx10(PoolBar, { name: awayName, amount: awayPool, percent: awayPercent, color: awayColor, t })
4202
4196
  ] }),
4203
- /* @__PURE__ */ jsxs7(View7, { style: styles6.oddsRow, children: [
4204
- /* @__PURE__ */ jsxs7(Text7, { style: [styles6.oddsText, { color: t.textMuted }], children: [
4197
+ /* @__PURE__ */ jsxs8(View8, { style: styles7.oddsRow, children: [
4198
+ /* @__PURE__ */ jsxs8(Text8, { style: [styles7.oddsText, { color: t.textMuted }], children: [
4205
4199
  homeName,
4206
4200
  ": ",
4207
- /* @__PURE__ */ jsxs7(Text7, { style: { color: t.text, fontWeight: "700" }, children: [
4201
+ /* @__PURE__ */ jsxs8(Text8, { style: { color: t.text, fontWeight: "700" }, children: [
4208
4202
  homeOdds,
4209
4203
  "x"
4210
4204
  ] })
4211
4205
  ] }),
4212
- /* @__PURE__ */ jsxs7(Text7, { style: [styles6.oddsText, { color: t.textMuted }], children: [
4206
+ /* @__PURE__ */ jsxs8(Text8, { style: [styles7.oddsText, { color: t.textMuted }], children: [
4213
4207
  awayName,
4214
4208
  ": ",
4215
- /* @__PURE__ */ jsxs7(Text7, { style: { color: t.text, fontWeight: "700" }, children: [
4209
+ /* @__PURE__ */ jsxs8(Text8, { style: { color: t.text, fontWeight: "700" }, children: [
4216
4210
  awayOdds,
4217
4211
  "x"
4218
4212
  ] })
@@ -4221,16 +4215,16 @@ function LivePoolsCard({
4221
4215
  ] });
4222
4216
  }
4223
4217
  function PoolBar({ name, amount, percent, color, t }) {
4224
- return /* @__PURE__ */ jsxs7(View7, { style: styles6.barRow, children: [
4225
- /* @__PURE__ */ jsx9(Text7, { style: [styles6.barLabel, { color: t.textSecondary }], numberOfLines: 1, children: name }),
4226
- /* @__PURE__ */ jsx9(View7, { style: [styles6.barTrack, { backgroundColor: t.border }], children: /* @__PURE__ */ jsx9(View7, { style: [styles6.barFill, { width: `${Math.max(percent, 2)}%`, backgroundColor: color }] }) }),
4227
- /* @__PURE__ */ jsxs7(Text7, { style: [styles6.barAmount, { color: t.text }], children: [
4218
+ return /* @__PURE__ */ jsxs8(View8, { style: styles7.barRow, children: [
4219
+ /* @__PURE__ */ jsx10(Text8, { style: [styles7.barLabel, { color: t.textSecondary }], numberOfLines: 1, children: name }),
4220
+ /* @__PURE__ */ jsx10(View8, { style: [styles7.barTrack, { backgroundColor: t.border }], children: /* @__PURE__ */ jsx10(View8, { style: [styles7.barFill, { width: `${Math.max(percent, 2)}%`, backgroundColor: color }] }) }),
4221
+ /* @__PURE__ */ jsxs8(Text8, { style: [styles7.barAmount, { color: t.text }], children: [
4228
4222
  amount,
4229
4223
  " SOL"
4230
4224
  ] })
4231
4225
  ] });
4232
4226
  }
4233
- var styles6 = StyleSheet7.create({
4227
+ var styles7 = StyleSheet8.create({
4234
4228
  card: { borderRadius: 16, borderWidth: 1, padding: 16 },
4235
4229
  title: { fontSize: 17, fontWeight: "700", marginBottom: 4 },
4236
4230
  total: { fontSize: 14, fontWeight: "600", marginBottom: 14 },
@@ -4246,8 +4240,8 @@ var styles6 = StyleSheet7.create({
4246
4240
 
4247
4241
  // src/ui/game/PickWinnerCard.tsx
4248
4242
  import { useState as useState19, useMemo as useMemo6 } from "react";
4249
- import { StyleSheet as StyleSheet8, View as View8, Text as Text8, TouchableOpacity as TouchableOpacity5 } from "react-native";
4250
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
4243
+ import { StyleSheet as StyleSheet9, View as View9, Text as Text9, TouchableOpacity as TouchableOpacity6 } from "react-native";
4244
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
4251
4245
  function PickWinnerCard({
4252
4246
  game,
4253
4247
  selectedTeam,
@@ -4271,10 +4265,10 @@ function PickWinnerCard({
4271
4265
  }), [totalPool, homePool, awayPool, bettors]);
4272
4266
  const homeName = shortName ? shortName(opponents[0]?.name) : opponents[0]?.name || "Home";
4273
4267
  const awayName = shortName ? shortName(opponents[1]?.name) : opponents[1]?.name || "Away";
4274
- return /* @__PURE__ */ jsxs8(View8, { style: [styles7.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4275
- /* @__PURE__ */ jsx10(Text8, { style: [styles7.title, { color: t.text }], children: "Pick Your Winner" }),
4276
- /* @__PURE__ */ jsxs8(View8, { style: styles7.row, children: [
4277
- /* @__PURE__ */ jsx10(
4268
+ return /* @__PURE__ */ jsxs9(View9, { style: [styles8.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4269
+ /* @__PURE__ */ jsx11(Text9, { style: [styles8.title, { color: t.text }], children: "Pick Your Winner" }),
4270
+ /* @__PURE__ */ jsxs9(View9, { style: styles8.row, children: [
4271
+ /* @__PURE__ */ jsx11(
4278
4272
  TeamOption,
4279
4273
  {
4280
4274
  name: homeName,
@@ -4288,7 +4282,7 @@ function PickWinnerCard({
4288
4282
  t
4289
4283
  }
4290
4284
  ),
4291
- /* @__PURE__ */ jsx10(
4285
+ /* @__PURE__ */ jsx11(
4292
4286
  TeamOption,
4293
4287
  {
4294
4288
  name: awayName,
@@ -4319,30 +4313,30 @@ function TeamOption({
4319
4313
  const [imgFailed, setImgFailed] = useState19(false);
4320
4314
  const Img = ImageComponent || __require("react-native").Image;
4321
4315
  const showImage = imageUrl && !imgFailed;
4322
- return /* @__PURE__ */ jsxs8(
4323
- TouchableOpacity5,
4316
+ return /* @__PURE__ */ jsxs9(
4317
+ TouchableOpacity6,
4324
4318
  {
4325
- style: [styles7.option, { borderColor: selected ? color : t.border, backgroundColor: selected ? color + "15" : t.background }],
4319
+ style: [styles8.option, { borderColor: selected ? color : t.border, backgroundColor: selected ? color + "15" : t.background }],
4326
4320
  onPress,
4327
4321
  activeOpacity: 0.7,
4328
4322
  children: [
4329
- showImage ? /* @__PURE__ */ jsx10(Img, { source: { uri: imageUrl }, style: styles7.logo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx10(View8, { style: [styles7.logo, styles7.logoPlaceholder] }),
4330
- /* @__PURE__ */ jsx10(Text8, { style: [styles7.name, { color: t.text }], numberOfLines: 1, children: name }),
4331
- /* @__PURE__ */ jsxs8(Text8, { style: [styles7.odds, { color }], children: [
4323
+ showImage ? /* @__PURE__ */ jsx11(Img, { source: { uri: imageUrl }, style: styles8.logo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx11(View9, { style: [styles8.logo, styles8.logoPlaceholder] }),
4324
+ /* @__PURE__ */ jsx11(Text9, { style: [styles8.name, { color: t.text }], numberOfLines: 1, children: name }),
4325
+ /* @__PURE__ */ jsxs9(Text9, { style: [styles8.odds, { color }], children: [
4332
4326
  odds,
4333
4327
  "x"
4334
4328
  ] }),
4335
- /* @__PURE__ */ jsxs8(Text8, { style: [styles7.bets, { color: t.textMuted }], children: [
4329
+ /* @__PURE__ */ jsxs9(Text9, { style: [styles8.bets, { color: t.textMuted }], children: [
4336
4330
  bets,
4337
4331
  " ",
4338
4332
  bets === 1 ? "bet" : "bets"
4339
4333
  ] }),
4340
- selected && /* @__PURE__ */ jsx10(View8, { style: [styles7.badge, { backgroundColor: color }], children: /* @__PURE__ */ jsx10(Text8, { style: styles7.badgeText, children: "Selected" }) })
4334
+ selected && /* @__PURE__ */ jsx11(View9, { style: [styles8.badge, { backgroundColor: color }], children: /* @__PURE__ */ jsx11(Text9, { style: styles8.badgeText, children: "Selected" }) })
4341
4335
  ]
4342
4336
  }
4343
4337
  );
4344
4338
  }
4345
- var styles7 = StyleSheet8.create({
4339
+ var styles8 = StyleSheet9.create({
4346
4340
  card: { borderRadius: 16, borderWidth: 1, padding: 16 },
4347
4341
  title: { fontSize: 17, fontWeight: "700", marginBottom: 12 },
4348
4342
  row: { flexDirection: "row", gap: 12 },
@@ -4358,8 +4352,8 @@ var styles7 = StyleSheet8.create({
4358
4352
 
4359
4353
  // src/ui/game/PlayersCard.tsx
4360
4354
  import { useState as useState20 } from "react";
4361
- import { StyleSheet as StyleSheet9, View as View9, Text as Text9 } from "react-native";
4362
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
4355
+ import { StyleSheet as StyleSheet10, View as View10, Text as Text10 } from "react-native";
4356
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
4363
4357
  function truncateWallet(addr, chars) {
4364
4358
  if (addr.length <= chars * 2 + 3) return addr;
4365
4359
  return `${addr.slice(0, chars)}...${addr.slice(-chars)}`;
@@ -4379,12 +4373,12 @@ function PlayersCard({
4379
4373
  if (team === "away") return awayColor;
4380
4374
  return drawColor;
4381
4375
  };
4382
- return /* @__PURE__ */ jsxs9(View9, { style: [styles8.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4383
- /* @__PURE__ */ jsxs9(Text9, { style: [styles8.title, { color: t.text }], children: [
4376
+ return /* @__PURE__ */ jsxs10(View10, { style: [styles9.card, { backgroundColor: t.surface, borderColor: t.border }], children: [
4377
+ /* @__PURE__ */ jsxs10(Text10, { style: [styles9.title, { color: t.text }], children: [
4384
4378
  "Players",
4385
4379
  bettors.length > 0 ? ` (${bettors.length})` : ""
4386
4380
  ] }),
4387
- bettors.length === 0 ? /* @__PURE__ */ jsx11(Text9, { style: [styles8.empty, { color: t.textMuted }], children: "No players yet \u2014 be the first!" }) : bettors.map((b, i) => /* @__PURE__ */ jsx11(
4381
+ bettors.length === 0 ? /* @__PURE__ */ jsx12(Text10, { style: [styles9.empty, { color: t.textMuted }], children: "No players yet \u2014 be the first!" }) : bettors.map((b, i) => /* @__PURE__ */ jsx12(
4388
4382
  BettorRow,
4389
4383
  {
4390
4384
  bettor: b,
@@ -4409,17 +4403,17 @@ function BettorRow({
4409
4403
  const [imgFailed, setImgFailed] = useState20(false);
4410
4404
  const Img = ImageComponent || __require("react-native").Image;
4411
4405
  const showAvatar = bettor.avatar && !imgFailed;
4412
- return /* @__PURE__ */ jsxs9(View9, { style: [styles8.row, !isFirst && { borderTopColor: t.border, borderTopWidth: 1 }], children: [
4413
- /* @__PURE__ */ jsx11(View9, { style: [styles8.dot, { backgroundColor: dotColor }] }),
4414
- showAvatar ? /* @__PURE__ */ jsx11(Img, { source: { uri: ensurePngAvatar(bettor.avatar) }, style: styles8.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx11(View9, { style: [styles8.avatar, styles8.avatarPlaceholder] }),
4415
- /* @__PURE__ */ jsx11(View9, { style: styles8.nameCol, children: /* @__PURE__ */ jsx11(Text9, { style: [styles8.username, { color: t.text }], numberOfLines: 1, children: bettor.username || truncateWallet(bettor.wallet, truncateChars) }) }),
4416
- /* @__PURE__ */ jsxs9(Text9, { style: [styles8.amount, { color: t.textSecondary }], children: [
4406
+ return /* @__PURE__ */ jsxs10(View10, { style: [styles9.row, !isFirst && { borderTopColor: t.border, borderTopWidth: 1 }], children: [
4407
+ /* @__PURE__ */ jsx12(View10, { style: [styles9.dot, { backgroundColor: dotColor }] }),
4408
+ showAvatar ? /* @__PURE__ */ jsx12(Img, { source: { uri: ensurePngAvatar(bettor.avatar) }, style: styles9.avatar, resizeMode: "cover", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx12(View10, { style: [styles9.avatar, styles9.avatarPlaceholder] }),
4409
+ /* @__PURE__ */ jsx12(View10, { style: styles9.nameCol, children: /* @__PURE__ */ jsx12(Text10, { style: [styles9.username, { color: t.text }], numberOfLines: 1, children: bettor.username || truncateWallet(bettor.wallet, truncateChars) }) }),
4410
+ /* @__PURE__ */ jsxs10(Text10, { style: [styles9.amount, { color: t.textSecondary }], children: [
4417
4411
  bettor.amount,
4418
4412
  " SOL"
4419
4413
  ] })
4420
4414
  ] });
4421
4415
  }
4422
- var styles8 = StyleSheet9.create({
4416
+ var styles9 = StyleSheet10.create({
4423
4417
  card: { borderRadius: 16, borderWidth: 1, padding: 16 },
4424
4418
  title: { fontSize: 17, fontWeight: "700", marginBottom: 12 },
4425
4419
  empty: { fontSize: 14, textAlign: "center", paddingVertical: 16 },
@@ -4434,8 +4428,8 @@ var styles8 = StyleSheet9.create({
4434
4428
 
4435
4429
  // src/ui/game/JoinGameButton.tsx
4436
4430
  import { useMemo as useMemo7 } from "react";
4437
- import { StyleSheet as StyleSheet10, View as View10, Text as Text10, TouchableOpacity as TouchableOpacity6, ActivityIndicator as ActivityIndicator5 } from "react-native";
4438
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
4431
+ import { StyleSheet as StyleSheet11, View as View11, Text as Text11, TouchableOpacity as TouchableOpacity7, ActivityIndicator as ActivityIndicator5 } from "react-native";
4432
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
4439
4433
  var STATUS_LABELS = {
4440
4434
  building: "Building transaction...",
4441
4435
  signing: "Approve in wallet...",
@@ -4451,30 +4445,30 @@ function JoinGameButton({ game, walletAddress, selectedTeam, status, onJoin }) {
4451
4445
  if (alreadyJoined || game.isLocked || game.isResolved) return null;
4452
4446
  const isJoining = status !== "idle" && status !== "success" && status !== "error";
4453
4447
  const statusLabel = STATUS_LABELS[status] || "";
4454
- return /* @__PURE__ */ jsxs10(View10, { style: [styles9.bar, { backgroundColor: t.background, borderTopColor: t.border }], children: [
4455
- /* @__PURE__ */ jsxs10(View10, { style: styles9.buyInRow, children: [
4456
- /* @__PURE__ */ jsx12(Text10, { style: [styles9.buyInLabel, { color: t.textMuted }], children: "Buy-in" }),
4457
- /* @__PURE__ */ jsxs10(Text10, { style: [styles9.buyInValue, { color: t.text }], children: [
4448
+ return /* @__PURE__ */ jsxs11(View11, { style: [styles10.bar, { backgroundColor: t.background, borderTopColor: t.border }], children: [
4449
+ /* @__PURE__ */ jsxs11(View11, { style: styles10.buyInRow, children: [
4450
+ /* @__PURE__ */ jsx13(Text11, { style: [styles10.buyInLabel, { color: t.textMuted }], children: "Buy-in" }),
4451
+ /* @__PURE__ */ jsxs11(Text11, { style: [styles10.buyInValue, { color: t.text }], children: [
4458
4452
  game.buyIn,
4459
4453
  " SOL"
4460
4454
  ] })
4461
4455
  ] }),
4462
- /* @__PURE__ */ jsx12(
4463
- TouchableOpacity6,
4456
+ /* @__PURE__ */ jsx13(
4457
+ TouchableOpacity7,
4464
4458
  {
4465
- style: [styles9.button, { backgroundColor: selectedTeam ? t.accent : t.border }],
4459
+ style: [styles10.button, { backgroundColor: selectedTeam ? t.accent : t.border }],
4466
4460
  disabled: !selectedTeam || isJoining,
4467
4461
  onPress: onJoin,
4468
4462
  activeOpacity: 0.8,
4469
- children: isJoining ? /* @__PURE__ */ jsxs10(View10, { style: styles9.joiningRow, children: [
4470
- /* @__PURE__ */ jsx12(ActivityIndicator5, { size: "small", color: "#000" }),
4471
- /* @__PURE__ */ jsx12(Text10, { style: styles9.buttonText, children: statusLabel })
4472
- ] }) : /* @__PURE__ */ jsx12(Text10, { style: [styles9.buttonText, !selectedTeam && { color: t.textMuted }], children: selectedTeam ? `Join Bet \u2014 ${game.buyIn} SOL` : "Pick a team to bet" })
4463
+ children: isJoining ? /* @__PURE__ */ jsxs11(View11, { style: styles10.joiningRow, children: [
4464
+ /* @__PURE__ */ jsx13(ActivityIndicator5, { size: "small", color: "#000" }),
4465
+ /* @__PURE__ */ jsx13(Text11, { style: styles10.buttonText, children: statusLabel })
4466
+ ] }) : /* @__PURE__ */ jsx13(Text11, { style: [styles10.buttonText, !selectedTeam && { color: t.textMuted }], children: selectedTeam ? `Join Bet \u2014 ${game.buyIn} SOL` : "Pick a team to bet" })
4473
4467
  }
4474
4468
  )
4475
4469
  ] });
4476
4470
  }
4477
- var styles9 = StyleSheet10.create({
4471
+ var styles10 = StyleSheet11.create({
4478
4472
  bar: { position: "absolute", bottom: 0, left: 0, right: 0, paddingHorizontal: 16, paddingTop: 12, paddingBottom: 36, borderTopWidth: 1 },
4479
4473
  buyInRow: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", marginBottom: 10 },
4480
4474
  buyInLabel: { fontSize: 13 },
@@ -4487,18 +4481,18 @@ var styles9 = StyleSheet10.create({
4487
4481
  // src/ui/game/CreateCustomGameSheet.tsx
4488
4482
  import { useState as useState21, useEffect as useEffect13, useRef as useRef6, useCallback as useCallback17 } from "react";
4489
4483
  import {
4490
- View as View11,
4491
- Text as Text11,
4484
+ View as View12,
4485
+ Text as Text12,
4492
4486
  TextInput as TextInput2,
4493
- TouchableOpacity as TouchableOpacity7,
4487
+ TouchableOpacity as TouchableOpacity8,
4494
4488
  ActivityIndicator as ActivityIndicator6,
4495
4489
  Modal as Modal2,
4496
4490
  Animated as Animated3,
4497
- StyleSheet as StyleSheet11,
4491
+ StyleSheet as StyleSheet12,
4498
4492
  KeyboardAvoidingView as KeyboardAvoidingView3,
4499
4493
  Platform as Platform6
4500
4494
  } from "react-native";
4501
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
4495
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
4502
4496
  var STATUS_LABELS2 = {
4503
4497
  building: "Building transaction...",
4504
4498
  signing: "Approve in wallet...",
@@ -4597,7 +4591,7 @@ function CreateCustomGameSheet({
4597
4591
  }, [finalAmount, wallet.publicKey, mutation.execute, title, maxPlayers, metadata]);
4598
4592
  const statusLabel = STATUS_LABELS2[mutation.status] || "";
4599
4593
  const playersLabel = playerCount === 2 ? "2 (1v1)" : `${playerCount} players`;
4600
- return /* @__PURE__ */ jsxs11(
4594
+ return /* @__PURE__ */ jsxs12(
4601
4595
  Modal2,
4602
4596
  {
4603
4597
  visible,
@@ -4605,34 +4599,34 @@ function CreateCustomGameSheet({
4605
4599
  transparent: true,
4606
4600
  onRequestClose: onDismiss,
4607
4601
  children: [
4608
- /* @__PURE__ */ jsx13(Animated3.View, { style: [styles10.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx13(TouchableOpacity7, { style: styles10.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
4609
- /* @__PURE__ */ jsx13(
4602
+ /* @__PURE__ */ jsx14(Animated3.View, { style: [styles11.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx14(TouchableOpacity8, { style: styles11.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
4603
+ /* @__PURE__ */ jsx14(
4610
4604
  KeyboardAvoidingView3,
4611
4605
  {
4612
- style: styles10.keyboardView,
4606
+ style: styles11.keyboardView,
4613
4607
  behavior: Platform6.OS === "ios" ? "padding" : void 0,
4614
- children: /* @__PURE__ */ jsx13(View11, { style: styles10.sheetPositioner, children: /* @__PURE__ */ jsxs11(View11, { style: [styles10.sheet, { backgroundColor: t.background }], children: [
4615
- /* @__PURE__ */ jsx13(View11, { style: styles10.handleRow, children: /* @__PURE__ */ jsx13(View11, { style: [styles10.handle, { backgroundColor: t.textMuted }] }) }),
4616
- /* @__PURE__ */ jsxs11(View11, { style: styles10.header, children: [
4617
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.headerTitle, { color: t.text }], children: isPoolModeEnabled ? "Create Pool" : "New Game" }),
4618
- /* @__PURE__ */ jsx13(TouchableOpacity7, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx13(Text11, { style: [styles10.closeButton, { color: t.textMuted }], children: "\u2715" }) })
4608
+ children: /* @__PURE__ */ jsx14(View12, { style: styles11.sheetPositioner, children: /* @__PURE__ */ jsxs12(View12, { style: [styles11.sheet, { backgroundColor: t.background }], children: [
4609
+ /* @__PURE__ */ jsx14(View12, { style: styles11.handleRow, children: /* @__PURE__ */ jsx14(View12, { style: [styles11.handle, { backgroundColor: t.textMuted }] }) }),
4610
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.header, children: [
4611
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.headerTitle, { color: t.text }], children: isPoolModeEnabled ? "Create Pool" : "New Game" }),
4612
+ /* @__PURE__ */ jsx14(TouchableOpacity8, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.closeButton, { color: t.textMuted }], children: "\u2715" }) })
4619
4613
  ] }),
4620
- !isPoolModeEnabled && /* @__PURE__ */ jsxs11(View11, { style: styles10.section, children: [
4621
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.sectionLabel, { color: t.textSecondary }], children: "Buy-In Amount" }),
4622
- /* @__PURE__ */ jsxs11(View11, { style: styles10.chipsRow, children: [
4614
+ !isPoolModeEnabled && /* @__PURE__ */ jsxs12(View12, { style: styles11.section, children: [
4615
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.sectionLabel, { color: t.textSecondary }], children: "Buy-In Amount" }),
4616
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.chipsRow, children: [
4623
4617
  presetAmounts.map((amount) => {
4624
4618
  const active = !isCustom && selectedAmount === amount;
4625
- return /* @__PURE__ */ jsx13(
4626
- TouchableOpacity7,
4619
+ return /* @__PURE__ */ jsx14(
4620
+ TouchableOpacity8,
4627
4621
  {
4628
4622
  style: [
4629
- styles10.chip,
4623
+ styles11.chip,
4630
4624
  { borderColor: active ? t.accent : t.border },
4631
4625
  active && { backgroundColor: t.accent }
4632
4626
  ],
4633
4627
  onPress: () => handlePresetSelect(amount),
4634
4628
  activeOpacity: 0.8,
4635
- children: /* @__PURE__ */ jsxs11(Text11, { style: [styles10.chipText, { color: active ? "#FFFFFF" : t.text }], children: [
4629
+ children: /* @__PURE__ */ jsxs12(Text12, { style: [styles11.chipText, { color: active ? "#FFFFFF" : t.text }], children: [
4636
4630
  amount,
4637
4631
  " SOL"
4638
4632
  ] })
@@ -4640,24 +4634,24 @@ function CreateCustomGameSheet({
4640
4634
  amount
4641
4635
  );
4642
4636
  }),
4643
- /* @__PURE__ */ jsx13(
4644
- TouchableOpacity7,
4637
+ /* @__PURE__ */ jsx14(
4638
+ TouchableOpacity8,
4645
4639
  {
4646
4640
  style: [
4647
- styles10.chip,
4641
+ styles11.chip,
4648
4642
  { borderColor: isCustom ? t.accent : t.border },
4649
4643
  isCustom && { backgroundColor: t.accent }
4650
4644
  ],
4651
4645
  onPress: handleCustomSelect,
4652
4646
  activeOpacity: 0.8,
4653
- children: /* @__PURE__ */ jsx13(Text11, { style: [styles10.chipText, { color: isCustom ? "#FFFFFF" : t.text }], children: "Custom" })
4647
+ children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.chipText, { color: isCustom ? "#FFFFFF" : t.text }], children: "Custom" })
4654
4648
  }
4655
4649
  )
4656
4650
  ] }),
4657
- isCustom && /* @__PURE__ */ jsx13(
4651
+ isCustom && /* @__PURE__ */ jsx14(
4658
4652
  TextInput2,
4659
4653
  {
4660
- style: [styles10.input, { backgroundColor: t.surface, color: t.text, borderColor: t.accent }],
4654
+ style: [styles11.input, { backgroundColor: t.surface, color: t.text, borderColor: t.accent }],
4661
4655
  placeholder: "Enter amount in SOL",
4662
4656
  placeholderTextColor: t.textDim,
4663
4657
  keyboardType: "decimal-pad",
@@ -4667,43 +4661,43 @@ function CreateCustomGameSheet({
4667
4661
  }
4668
4662
  )
4669
4663
  ] }),
4670
- /* @__PURE__ */ jsxs11(View11, { style: [styles10.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
4671
- /* @__PURE__ */ jsxs11(View11, { style: styles10.summaryRow, children: [
4672
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryLabel, { color: t.textMuted }], children: "Buy-in" }),
4673
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryValue, { color: t.text }], children: finalAmount ? `${finalAmount} SOL` : "\u2014" })
4664
+ /* @__PURE__ */ jsxs12(View12, { style: [styles11.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
4665
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
4666
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Buy-in" }),
4667
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.text }], children: finalAmount ? `${finalAmount} SOL` : "\u2014" })
4674
4668
  ] }),
4675
- /* @__PURE__ */ jsx13(View11, { style: [styles10.summarySep, { backgroundColor: t.border }] }),
4676
- /* @__PURE__ */ jsxs11(View11, { style: styles10.summaryRow, children: [
4677
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryLabel, { color: t.textMuted }], children: isPoolModeEnabled ? "Max players" : "Players" }),
4678
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryValue, { color: t.text }], children: isPoolModeEnabled ? playerCount : playersLabel })
4669
+ /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
4670
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
4671
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: isPoolModeEnabled ? "Max players" : "Players" }),
4672
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.text }], children: isPoolModeEnabled ? playerCount : playersLabel })
4679
4673
  ] }),
4680
- /* @__PURE__ */ jsx13(View11, { style: [styles10.summarySep, { backgroundColor: t.border }] }),
4681
- /* @__PURE__ */ jsxs11(View11, { style: styles10.summaryRow, children: [
4682
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryLabel, { color: t.textMuted }], children: isPoolModeEnabled ? "Max pot" : "Winner Takes" }),
4683
- /* @__PURE__ */ jsxs11(View11, { style: styles10.winnerCol, children: [
4684
- /* @__PURE__ */ jsx13(Text11, { style: [styles10.summaryValue, { color: t.success }], children: finalAmount ? `${(finalAmount * playerCount * (1 - fee / 100)).toFixed(4)} SOL` : "\u2014" }),
4685
- finalAmount ? /* @__PURE__ */ jsxs11(Text11, { style: [styles10.feeNote, { color: t.textDim }], children: [
4674
+ /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
4675
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
4676
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: isPoolModeEnabled ? "Max pot" : "Winner Takes" }),
4677
+ /* @__PURE__ */ jsxs12(View12, { style: styles11.winnerCol, children: [
4678
+ /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.success }], children: finalAmount ? `${(finalAmount * playerCount * (1 - fee / 100)).toFixed(4)} SOL` : "\u2014" }),
4679
+ finalAmount ? /* @__PURE__ */ jsxs12(Text12, { style: [styles11.feeNote, { color: t.textDim }], children: [
4686
4680
  fee,
4687
4681
  "% platform fee"
4688
4682
  ] }) : null
4689
4683
  ] })
4690
4684
  ] })
4691
4685
  ] }),
4692
- mutation.error && /* @__PURE__ */ jsx13(View11, { style: [styles10.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx13(Text11, { style: [styles10.errorText, { color: t.errorText }], children: mutation.error.message }) }),
4693
- /* @__PURE__ */ jsx13(
4694
- TouchableOpacity7,
4686
+ mutation.error && /* @__PURE__ */ jsx14(View12, { style: [styles11.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.errorText, { color: t.errorText }], children: mutation.error.message }) }),
4687
+ /* @__PURE__ */ jsx14(
4688
+ TouchableOpacity8,
4695
4689
  {
4696
4690
  style: [
4697
- styles10.ctaButton,
4691
+ styles11.ctaButton,
4698
4692
  { backgroundColor: canCreate ? t.accent : t.border }
4699
4693
  ],
4700
4694
  disabled: !canCreate,
4701
4695
  onPress: handleCreate,
4702
4696
  activeOpacity: 0.8,
4703
- children: isMutating ? /* @__PURE__ */ jsxs11(View11, { style: styles10.ctaLoading, children: [
4704
- /* @__PURE__ */ jsx13(ActivityIndicator6, { size: "small", color: "#FFFFFF" }),
4705
- /* @__PURE__ */ jsx13(Text11, { style: styles10.ctaText, children: statusLabel })
4706
- ] }) : mutation.status === "success" ? /* @__PURE__ */ jsx13(Text11, { style: styles10.ctaText, children: isPoolModeEnabled ? "Pool Created!" : STATUS_LABELS2.success }) : /* @__PURE__ */ jsx13(Text11, { style: [styles10.ctaText, !canCreate && { opacity: 0.5 }], children: isPoolModeEnabled ? `Create Pool \u2014 ${finalAmount} SOL` : effectiveAmount ? `Create Game \u2014 ${effectiveAmount} SOL` : "Select buy-in amount" })
4697
+ children: isMutating ? /* @__PURE__ */ jsxs12(View12, { style: styles11.ctaLoading, children: [
4698
+ /* @__PURE__ */ jsx14(ActivityIndicator6, { size: "small", color: "#FFFFFF" }),
4699
+ /* @__PURE__ */ jsx14(Text12, { style: styles11.ctaText, children: statusLabel })
4700
+ ] }) : mutation.status === "success" ? /* @__PURE__ */ jsx14(Text12, { style: styles11.ctaText, children: isPoolModeEnabled ? "Pool Created!" : STATUS_LABELS2.success }) : /* @__PURE__ */ jsx14(Text12, { style: [styles11.ctaText, !canCreate && { opacity: 0.5 }], children: isPoolModeEnabled ? `Create Pool \u2014 ${finalAmount} SOL` : effectiveAmount ? `Create Game \u2014 ${effectiveAmount} SOL` : "Select buy-in amount" })
4707
4701
  }
4708
4702
  )
4709
4703
  ] }) })
@@ -4713,9 +4707,9 @@ function CreateCustomGameSheet({
4713
4707
  }
4714
4708
  );
4715
4709
  }
4716
- var styles10 = StyleSheet11.create({
4710
+ var styles11 = StyleSheet12.create({
4717
4711
  overlay: {
4718
- ...StyleSheet11.absoluteFillObject,
4712
+ ...StyleSheet12.absoluteFillObject,
4719
4713
  backgroundColor: "rgba(0,0,0,0.5)"
4720
4714
  },
4721
4715
  overlayTap: {
@@ -4852,17 +4846,17 @@ var styles10 = StyleSheet11.create({
4852
4846
  // src/ui/game/JoinGameSheet.tsx
4853
4847
  import { useState as useState22, useEffect as useEffect14, useRef as useRef7, useCallback as useCallback18, useMemo as useMemo8 } from "react";
4854
4848
  import {
4855
- View as View12,
4856
- Text as Text12,
4857
- TouchableOpacity as TouchableOpacity8,
4849
+ View as View13,
4850
+ Text as Text13,
4851
+ TouchableOpacity as TouchableOpacity9,
4858
4852
  ActivityIndicator as ActivityIndicator7,
4859
4853
  Modal as Modal3,
4860
4854
  Animated as Animated4,
4861
- StyleSheet as StyleSheet12,
4855
+ StyleSheet as StyleSheet13,
4862
4856
  KeyboardAvoidingView as KeyboardAvoidingView4,
4863
4857
  Platform as Platform7
4864
4858
  } from "react-native";
4865
- import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
4859
+ import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
4866
4860
  var STATUS_LABELS3 = {
4867
4861
  building: "Building transaction...",
4868
4862
  signing: "Approve in wallet...",
@@ -4953,7 +4947,7 @@ function JoinGameSheet({
4953
4947
  }
4954
4948
  }, [selectedTeam, wallet.publicKey, mutation.execute, game.gameId, buyIn]);
4955
4949
  const statusLabel = STATUS_LABELS3[mutation.status] || "";
4956
- return /* @__PURE__ */ jsxs12(
4950
+ return /* @__PURE__ */ jsxs13(
4957
4951
  Modal3,
4958
4952
  {
4959
4953
  visible,
@@ -4961,22 +4955,22 @@ function JoinGameSheet({
4961
4955
  transparent: true,
4962
4956
  onRequestClose: onDismiss,
4963
4957
  children: [
4964
- /* @__PURE__ */ jsx14(Animated4.View, { style: [styles11.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx14(TouchableOpacity8, { style: styles11.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
4965
- /* @__PURE__ */ jsx14(
4958
+ /* @__PURE__ */ jsx15(Animated4.View, { style: [styles12.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx15(TouchableOpacity9, { style: styles12.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
4959
+ /* @__PURE__ */ jsx15(
4966
4960
  KeyboardAvoidingView4,
4967
4961
  {
4968
- style: styles11.keyboardView,
4962
+ style: styles12.keyboardView,
4969
4963
  behavior: Platform7.OS === "ios" ? "padding" : void 0,
4970
- children: /* @__PURE__ */ jsx14(View12, { style: styles11.sheetPositioner, children: /* @__PURE__ */ jsxs12(View12, { style: [styles11.sheet, { backgroundColor: t.background }], children: [
4971
- /* @__PURE__ */ jsx14(View12, { style: styles11.handleRow, children: /* @__PURE__ */ jsx14(View12, { style: [styles11.handle, { backgroundColor: t.textMuted }] }) }),
4972
- /* @__PURE__ */ jsxs12(View12, { style: styles11.header, children: [
4973
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.headerTitle, { color: t.text }], children: isPoolModeEnabled ? "Join Pool" : "Join Game" }),
4974
- /* @__PURE__ */ jsx14(TouchableOpacity8, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.closeButton, { color: t.textMuted }], children: "\u2715" }) })
4964
+ children: /* @__PURE__ */ jsx15(View13, { style: styles12.sheetPositioner, children: /* @__PURE__ */ jsxs13(View13, { style: [styles12.sheet, { backgroundColor: t.background }], children: [
4965
+ /* @__PURE__ */ jsx15(View13, { style: styles12.handleRow, children: /* @__PURE__ */ jsx15(View13, { style: [styles12.handle, { backgroundColor: t.textMuted }] }) }),
4966
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.header, children: [
4967
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.headerTitle, { color: t.text }], children: isPoolModeEnabled ? "Join Pool" : "Join Game" }),
4968
+ /* @__PURE__ */ jsx15(TouchableOpacity9, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx15(Text13, { style: [styles12.closeButton, { color: t.textMuted }], children: "\u2715" }) })
4975
4969
  ] }),
4976
- !isCustomGame && !isPoolModeEnabled && /* @__PURE__ */ jsxs12(View12, { style: styles11.section, children: [
4977
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.sectionLabel, { color: t.textSecondary }], children: "Pick Your Side" }),
4978
- /* @__PURE__ */ jsxs12(View12, { style: styles11.teamsRow, children: [
4979
- /* @__PURE__ */ jsx14(
4970
+ !isCustomGame && !isPoolModeEnabled && /* @__PURE__ */ jsxs13(View13, { style: styles12.section, children: [
4971
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.sectionLabel, { color: t.textSecondary }], children: "Pick Your Side" }),
4972
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.teamsRow, children: [
4973
+ /* @__PURE__ */ jsx15(
4980
4974
  TeamButton,
4981
4975
  {
4982
4976
  name: homeName,
@@ -4990,7 +4984,7 @@ function JoinGameSheet({
4990
4984
  t
4991
4985
  }
4992
4986
  ),
4993
- /* @__PURE__ */ jsx14(
4987
+ /* @__PURE__ */ jsx15(
4994
4988
  TeamButton,
4995
4989
  {
4996
4990
  name: awayName,
@@ -5006,64 +5000,64 @@ function JoinGameSheet({
5006
5000
  )
5007
5001
  ] })
5008
5002
  ] }),
5009
- /* @__PURE__ */ jsxs12(View12, { style: [styles11.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
5010
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5011
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Buy-in" }),
5012
- /* @__PURE__ */ jsxs12(Text12, { style: [styles11.summaryValue, { color: t.text }], children: [
5003
+ /* @__PURE__ */ jsxs13(View13, { style: [styles12.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
5004
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5005
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Buy-in" }),
5006
+ /* @__PURE__ */ jsxs13(Text13, { style: [styles12.summaryValue, { color: t.text }], children: [
5013
5007
  buyIn,
5014
5008
  " SOL"
5015
5009
  ] })
5016
5010
  ] }),
5017
- /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
5018
- isPoolModeEnabled ? /* @__PURE__ */ jsxs12(Fragment4, { children: [
5019
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5020
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Players in" }),
5021
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.text }], children: bettors.length })
5011
+ /* @__PURE__ */ jsx15(View13, { style: [styles12.summarySep, { backgroundColor: t.border }] }),
5012
+ isPoolModeEnabled ? /* @__PURE__ */ jsxs13(Fragment4, { children: [
5013
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5014
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Players in" }),
5015
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryValue, { color: t.text }], children: bettors.length })
5022
5016
  ] }),
5023
- /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
5024
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5025
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Current pot" }),
5026
- /* @__PURE__ */ jsxs12(Text12, { style: [styles11.summaryValue, { color: t.success }], children: [
5017
+ /* @__PURE__ */ jsx15(View13, { style: [styles12.summarySep, { backgroundColor: t.border }] }),
5018
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5019
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Current pot" }),
5020
+ /* @__PURE__ */ jsxs13(Text13, { style: [styles12.summaryValue, { color: t.success }], children: [
5027
5021
  totalPool,
5028
5022
  " SOL"
5029
5023
  ] })
5030
5024
  ] })
5031
- ] }) : /* @__PURE__ */ jsxs12(Fragment4, { children: [
5032
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5033
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Your side" }),
5034
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.text }], children: selectedName })
5025
+ ] }) : /* @__PURE__ */ jsxs13(Fragment4, { children: [
5026
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5027
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Your side" }),
5028
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryValue, { color: t.text }], children: selectedName })
5035
5029
  ] }),
5036
- /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
5037
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5038
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Total pool" }),
5039
- /* @__PURE__ */ jsxs12(Text12, { style: [styles11.summaryValue, { color: t.text }], children: [
5030
+ /* @__PURE__ */ jsx15(View13, { style: [styles12.summarySep, { backgroundColor: t.border }] }),
5031
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5032
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Total pool" }),
5033
+ /* @__PURE__ */ jsxs13(Text13, { style: [styles12.summaryValue, { color: t.text }], children: [
5040
5034
  poolAfterJoin,
5041
5035
  " SOL"
5042
5036
  ] })
5043
5037
  ] }),
5044
- /* @__PURE__ */ jsx14(View12, { style: [styles11.summarySep, { backgroundColor: t.border }] }),
5045
- /* @__PURE__ */ jsxs12(View12, { style: styles11.summaryRow, children: [
5046
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryLabel, { color: t.textMuted }], children: "Potential winnings" }),
5047
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.summaryValue, { color: t.success }], children: potentialWinnings !== "\u2014" ? `${potentialWinnings} SOL` : "\u2014" })
5038
+ /* @__PURE__ */ jsx15(View13, { style: [styles12.summarySep, { backgroundColor: t.border }] }),
5039
+ /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5040
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Potential winnings" }),
5041
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryValue, { color: t.success }], children: potentialWinnings !== "\u2014" ? `${potentialWinnings} SOL` : "\u2014" })
5048
5042
  ] })
5049
5043
  ] })
5050
5044
  ] }),
5051
- alreadyJoined && /* @__PURE__ */ jsx14(View12, { style: [styles11.errorBox, { backgroundColor: t.surface, borderColor: t.border }], children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.errorText, { color: t.textMuted }], children: isPoolModeEnabled ? "You've already joined this pool." : "You've already joined this game." }) }),
5052
- mutation.error && /* @__PURE__ */ jsx14(View12, { style: [styles11.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx14(Text12, { style: [styles11.errorText, { color: t.errorText }], children: mutation.error.message }) }),
5053
- /* @__PURE__ */ jsx14(
5054
- TouchableOpacity8,
5045
+ alreadyJoined && /* @__PURE__ */ jsx15(View13, { style: [styles12.errorBox, { backgroundColor: t.surface, borderColor: t.border }], children: /* @__PURE__ */ jsx15(Text13, { style: [styles12.errorText, { color: t.textMuted }], children: isPoolModeEnabled ? "You've already joined this pool." : "You've already joined this game." }) }),
5046
+ mutation.error && /* @__PURE__ */ jsx15(View13, { style: [styles12.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx15(Text13, { style: [styles12.errorText, { color: t.errorText }], children: mutation.error.message }) }),
5047
+ /* @__PURE__ */ jsx15(
5048
+ TouchableOpacity9,
5055
5049
  {
5056
5050
  style: [
5057
- styles11.ctaButton,
5051
+ styles12.ctaButton,
5058
5052
  { backgroundColor: canJoin ? t.accent : t.border }
5059
5053
  ],
5060
5054
  disabled: !canJoin,
5061
5055
  onPress: handleJoin,
5062
5056
  activeOpacity: 0.8,
5063
- children: isMutating ? /* @__PURE__ */ jsxs12(View12, { style: styles11.ctaLoading, children: [
5064
- /* @__PURE__ */ jsx14(ActivityIndicator7, { size: "small", color: "#FFFFFF" }),
5065
- /* @__PURE__ */ jsx14(Text12, { style: styles11.ctaText, children: statusLabel })
5066
- ] }) : mutation.status === "success" ? /* @__PURE__ */ jsx14(Text12, { style: styles11.ctaText, children: isPoolModeEnabled ? "Joined!" : STATUS_LABELS3.success }) : /* @__PURE__ */ jsx14(Text12, { style: [styles11.ctaText, !canJoin && { opacity: 0.5 }], children: alreadyJoined ? "Already Joined" : isPoolModeEnabled ? `Join Pool \u2014 ${buyIn} SOL` : selectedTeam ? `Join Game \u2014 ${buyIn} SOL` : "Pick a side to join" })
5057
+ children: isMutating ? /* @__PURE__ */ jsxs13(View13, { style: styles12.ctaLoading, children: [
5058
+ /* @__PURE__ */ jsx15(ActivityIndicator7, { size: "small", color: "#FFFFFF" }),
5059
+ /* @__PURE__ */ jsx15(Text13, { style: styles12.ctaText, children: statusLabel })
5060
+ ] }) : mutation.status === "success" ? /* @__PURE__ */ jsx15(Text13, { style: styles12.ctaText, children: isPoolModeEnabled ? "Joined!" : STATUS_LABELS3.success }) : /* @__PURE__ */ jsx15(Text13, { style: [styles12.ctaText, !canJoin && { opacity: 0.5 }], children: alreadyJoined ? "Already Joined" : isPoolModeEnabled ? `Join Pool \u2014 ${buyIn} SOL` : selectedTeam ? `Join Game \u2014 ${buyIn} SOL` : "Pick a side to join" })
5067
5061
  }
5068
5062
  )
5069
5063
  ] }) })
@@ -5087,32 +5081,32 @@ function TeamButton({
5087
5081
  const [imgFailed, setImgFailed] = useState22(false);
5088
5082
  const Img = ImageComponent || __require("react-native").Image;
5089
5083
  const showImage = imageUrl && !imgFailed;
5090
- return /* @__PURE__ */ jsxs12(
5091
- TouchableOpacity8,
5084
+ return /* @__PURE__ */ jsxs13(
5085
+ TouchableOpacity9,
5092
5086
  {
5093
- style: [styles11.teamOption, { borderColor: selected ? color : t.border, backgroundColor: selected ? color + "15" : t.background }],
5087
+ style: [styles12.teamOption, { borderColor: selected ? color : t.border, backgroundColor: selected ? color + "15" : t.background }],
5094
5088
  onPress,
5095
5089
  activeOpacity: 0.7,
5096
5090
  children: [
5097
- showImage ? /* @__PURE__ */ jsx14(Img, { source: { uri: imageUrl }, style: styles11.teamLogo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx14(View12, { style: [styles11.teamLogo, styles11.teamLogoPlaceholder] }),
5098
- /* @__PURE__ */ jsx14(Text12, { style: [styles11.teamName, { color: t.text }], numberOfLines: 1, children: name }),
5099
- /* @__PURE__ */ jsxs12(Text12, { style: [styles11.teamOdds, { color }], children: [
5091
+ showImage ? /* @__PURE__ */ jsx15(Img, { source: { uri: imageUrl }, style: styles12.teamLogo, resizeMode: "contain", onError: () => setImgFailed(true) }) : /* @__PURE__ */ jsx15(View13, { style: [styles12.teamLogo, styles12.teamLogoPlaceholder] }),
5092
+ /* @__PURE__ */ jsx15(Text13, { style: [styles12.teamName, { color: t.text }], numberOfLines: 1, children: name }),
5093
+ /* @__PURE__ */ jsxs13(Text13, { style: [styles12.teamOdds, { color }], children: [
5100
5094
  odds,
5101
5095
  "x"
5102
5096
  ] }),
5103
- /* @__PURE__ */ jsxs12(Text12, { style: [styles11.teamBets, { color: t.textMuted }], children: [
5097
+ /* @__PURE__ */ jsxs13(Text13, { style: [styles12.teamBets, { color: t.textMuted }], children: [
5104
5098
  bets,
5105
5099
  " ",
5106
5100
  bets === 1 ? "bet" : "bets"
5107
5101
  ] }),
5108
- selected && /* @__PURE__ */ jsx14(View12, { style: [styles11.teamBadge, { backgroundColor: color }], children: /* @__PURE__ */ jsx14(Text12, { style: styles11.teamBadgeText, children: "Selected" }) })
5102
+ selected && /* @__PURE__ */ jsx15(View13, { style: [styles12.teamBadge, { backgroundColor: color }], children: /* @__PURE__ */ jsx15(Text13, { style: styles12.teamBadgeText, children: "Selected" }) })
5109
5103
  ]
5110
5104
  }
5111
5105
  );
5112
5106
  }
5113
- var styles11 = StyleSheet12.create({
5107
+ var styles12 = StyleSheet13.create({
5114
5108
  overlay: {
5115
- ...StyleSheet12.absoluteFillObject,
5109
+ ...StyleSheet13.absoluteFillObject,
5116
5110
  backgroundColor: "rgba(0,0,0,0.5)"
5117
5111
  },
5118
5112
  overlayTap: {
@@ -5263,17 +5257,17 @@ var styles11 = StyleSheet12.create({
5263
5257
  // src/ui/game/ClaimPrizeSheet.tsx
5264
5258
  import { useState as useState23, useEffect as useEffect15, useRef as useRef8, useCallback as useCallback19 } from "react";
5265
5259
  import {
5266
- View as View13,
5267
- Text as Text13,
5268
- TouchableOpacity as TouchableOpacity9,
5260
+ View as View14,
5261
+ Text as Text14,
5262
+ TouchableOpacity as TouchableOpacity10,
5269
5263
  ActivityIndicator as ActivityIndicator8,
5270
5264
  Modal as Modal4,
5271
5265
  Animated as Animated5,
5272
- StyleSheet as StyleSheet13,
5266
+ StyleSheet as StyleSheet14,
5273
5267
  KeyboardAvoidingView as KeyboardAvoidingView5,
5274
5268
  Platform as Platform8
5275
5269
  } from "react-native";
5276
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
5270
+ import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
5277
5271
  var STATUS_LABELS4 = {
5278
5272
  building: "Building transaction...",
5279
5273
  signing: "Approve in wallet...",
@@ -5353,7 +5347,7 @@ function ClaimPrizeSheet({
5353
5347
  }
5354
5348
  }, [wallet.publicKey, mutation.execute, gameId, prizeAmount]);
5355
5349
  const statusLabel = STATUS_LABELS4[mutation.status] || "";
5356
- return /* @__PURE__ */ jsxs13(
5350
+ return /* @__PURE__ */ jsxs14(
5357
5351
  Modal4,
5358
5352
  {
5359
5353
  visible,
@@ -5361,54 +5355,54 @@ function ClaimPrizeSheet({
5361
5355
  transparent: true,
5362
5356
  onRequestClose: onDismiss,
5363
5357
  children: [
5364
- /* @__PURE__ */ jsx15(Animated5.View, { style: [styles12.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx15(TouchableOpacity9, { style: styles12.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
5365
- /* @__PURE__ */ jsx15(
5358
+ /* @__PURE__ */ jsx16(Animated5.View, { style: [styles13.overlay, { opacity: overlayOpacity }], children: /* @__PURE__ */ jsx16(TouchableOpacity10, { style: styles13.overlayTap, activeOpacity: 1, onPress: onDismiss }) }),
5359
+ /* @__PURE__ */ jsx16(
5366
5360
  KeyboardAvoidingView5,
5367
5361
  {
5368
- style: styles12.keyboardView,
5362
+ style: styles13.keyboardView,
5369
5363
  behavior: Platform8.OS === "ios" ? "padding" : void 0,
5370
- children: /* @__PURE__ */ jsx15(View13, { style: styles12.sheetPositioner, children: /* @__PURE__ */ jsxs13(View13, { style: [styles12.sheet, { backgroundColor: t.background }], children: [
5371
- /* @__PURE__ */ jsx15(View13, { style: styles12.handleRow, children: /* @__PURE__ */ jsx15(View13, { style: [styles12.handle, { backgroundColor: t.textMuted }] }) }),
5372
- /* @__PURE__ */ jsxs13(View13, { style: styles12.header, children: [
5373
- /* @__PURE__ */ jsx15(Text13, { style: [styles12.headerTitle, { color: t.text }], children: showCelebration ? isRefund ? "Refund Claimed!" : "Prize Claimed!" : isRefund ? "Claim Refund" : "Claim Prize" }),
5374
- /* @__PURE__ */ jsx15(TouchableOpacity9, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx15(Text13, { style: [styles12.closeButton, { color: t.textMuted }], children: "\u2715" }) })
5364
+ children: /* @__PURE__ */ jsx16(View14, { style: styles13.sheetPositioner, children: /* @__PURE__ */ jsxs14(View14, { style: [styles13.sheet, { backgroundColor: t.background }], children: [
5365
+ /* @__PURE__ */ jsx16(View14, { style: styles13.handleRow, children: /* @__PURE__ */ jsx16(View14, { style: [styles13.handle, { backgroundColor: t.textMuted }] }) }),
5366
+ /* @__PURE__ */ jsxs14(View14, { style: styles13.header, children: [
5367
+ /* @__PURE__ */ jsx16(Text14, { style: [styles13.headerTitle, { color: t.text }], children: showCelebration ? isRefund ? "Refund Claimed!" : "Prize Claimed!" : isRefund ? "Claim Refund" : "Claim Prize" }),
5368
+ /* @__PURE__ */ jsx16(TouchableOpacity10, { onPress: onDismiss, activeOpacity: 0.8, children: /* @__PURE__ */ jsx16(Text14, { style: [styles13.closeButton, { color: t.textMuted }], children: "\u2715" }) })
5375
5369
  ] }),
5376
- showCelebration && /* @__PURE__ */ jsxs13(
5370
+ showCelebration && /* @__PURE__ */ jsxs14(
5377
5371
  Animated5.View,
5378
5372
  {
5379
5373
  style: [
5380
- styles12.celebrationContainer,
5374
+ styles13.celebrationContainer,
5381
5375
  {
5382
5376
  opacity: celebrationOpacity,
5383
5377
  transform: [{ scale: celebrationScale }]
5384
5378
  }
5385
5379
  ],
5386
5380
  children: [
5387
- /* @__PURE__ */ jsx15(Text13, { style: styles12.celebrationEmoji, children: "\u{1F3C6}" }),
5388
- /* @__PURE__ */ jsxs13(Text13, { style: [styles12.celebrationText, { color: t.success }], children: [
5381
+ /* @__PURE__ */ jsx16(Text14, { style: styles13.celebrationEmoji, children: "\u{1F3C6}" }),
5382
+ /* @__PURE__ */ jsxs14(Text14, { style: [styles13.celebrationText, { color: t.success }], children: [
5389
5383
  "+",
5390
5384
  prizeAmount,
5391
5385
  " SOL"
5392
5386
  ] }),
5393
- /* @__PURE__ */ jsx15(Text13, { style: [styles12.celebrationSubtext, { color: t.textMuted }], children: isRefund ? "Refund sent to your wallet" : "Winnings sent to your wallet" })
5387
+ /* @__PURE__ */ jsx16(Text14, { style: [styles13.celebrationSubtext, { color: t.textMuted }], children: isRefund ? "Refund sent to your wallet" : "Winnings sent to your wallet" })
5394
5388
  ]
5395
5389
  }
5396
5390
  ),
5397
- !showCelebration && /* @__PURE__ */ jsxs13(View13, { style: [styles12.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
5398
- /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5399
- /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: isRefund ? "Refund" : "Prize" }),
5400
- /* @__PURE__ */ jsxs13(Text13, { style: [styles12.summaryValue, { color: t.success }], children: [
5391
+ !showCelebration && /* @__PURE__ */ jsxs14(View14, { style: [styles13.summaryCard, { backgroundColor: t.surface, borderColor: t.border }], children: [
5392
+ /* @__PURE__ */ jsxs14(View14, { style: styles13.summaryRow, children: [
5393
+ /* @__PURE__ */ jsx16(Text14, { style: [styles13.summaryLabel, { color: t.textMuted }], children: isRefund ? "Refund" : "Prize" }),
5394
+ /* @__PURE__ */ jsxs14(Text14, { style: [styles13.summaryValue, { color: t.success }], children: [
5401
5395
  prizeAmount,
5402
5396
  " SOL"
5403
5397
  ] })
5404
5398
  ] }),
5405
- /* @__PURE__ */ jsx15(View13, { style: [styles12.summarySep, { backgroundColor: t.border }] }),
5406
- /* @__PURE__ */ jsxs13(View13, { style: styles12.summaryRow, children: [
5407
- /* @__PURE__ */ jsx15(Text13, { style: [styles12.summaryLabel, { color: t.textMuted }], children: "Game" }),
5408
- /* @__PURE__ */ jsxs13(
5409
- Text13,
5399
+ /* @__PURE__ */ jsx16(View14, { style: [styles13.summarySep, { backgroundColor: t.border }] }),
5400
+ /* @__PURE__ */ jsxs14(View14, { style: styles13.summaryRow, children: [
5401
+ /* @__PURE__ */ jsx16(Text14, { style: [styles13.summaryLabel, { color: t.textMuted }], children: "Game" }),
5402
+ /* @__PURE__ */ jsxs14(
5403
+ Text14,
5410
5404
  {
5411
- style: [styles12.summaryValue, { color: t.text }],
5405
+ style: [styles13.summaryValue, { color: t.text }],
5412
5406
  numberOfLines: 1,
5413
5407
  children: [
5414
5408
  gameId.slice(0, 8),
@@ -5419,21 +5413,21 @@ function ClaimPrizeSheet({
5419
5413
  )
5420
5414
  ] })
5421
5415
  ] }),
5422
- mutation.error && /* @__PURE__ */ jsx15(View13, { style: [styles12.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx15(Text13, { style: [styles12.errorText, { color: t.errorText }], children: mutation.error.message }) }),
5423
- !showCelebration && /* @__PURE__ */ jsx15(
5424
- TouchableOpacity9,
5416
+ mutation.error && /* @__PURE__ */ jsx16(View14, { style: [styles13.errorBox, { backgroundColor: t.errorBg, borderColor: t.errorBorder }], children: /* @__PURE__ */ jsx16(Text14, { style: [styles13.errorText, { color: t.errorText }], children: mutation.error.message }) }),
5417
+ !showCelebration && /* @__PURE__ */ jsx16(
5418
+ TouchableOpacity10,
5425
5419
  {
5426
5420
  style: [
5427
- styles12.ctaButton,
5421
+ styles13.ctaButton,
5428
5422
  { backgroundColor: canClaim ? t.accent : t.border }
5429
5423
  ],
5430
5424
  disabled: !canClaim,
5431
5425
  onPress: handleClaim,
5432
5426
  activeOpacity: 0.8,
5433
- children: isMutating ? /* @__PURE__ */ jsxs13(View13, { style: styles12.ctaLoading, children: [
5434
- /* @__PURE__ */ jsx15(ActivityIndicator8, { size: "small", color: "#FFFFFF" }),
5435
- /* @__PURE__ */ jsx15(Text13, { style: styles12.ctaText, children: statusLabel })
5436
- ] }) : /* @__PURE__ */ jsxs13(Text13, { style: [styles12.ctaText, !canClaim && { opacity: 0.5 }], children: [
5427
+ children: isMutating ? /* @__PURE__ */ jsxs14(View14, { style: styles13.ctaLoading, children: [
5428
+ /* @__PURE__ */ jsx16(ActivityIndicator8, { size: "small", color: "#FFFFFF" }),
5429
+ /* @__PURE__ */ jsx16(Text14, { style: styles13.ctaText, children: statusLabel })
5430
+ ] }) : /* @__PURE__ */ jsxs14(Text14, { style: [styles13.ctaText, !canClaim && { opacity: 0.5 }], children: [
5437
5431
  isRefund ? "Claim Refund" : "Claim Prize",
5438
5432
  " \u2014 ",
5439
5433
  prizeAmount,
@@ -5441,7 +5435,7 @@ function ClaimPrizeSheet({
5441
5435
  ] })
5442
5436
  }
5443
5437
  ),
5444
- mutation.data?.explorerUrl && /* @__PURE__ */ jsx15(Text13, { style: [styles12.explorerHint, { color: t.textMuted }], children: "View on Solscan" })
5438
+ mutation.data?.explorerUrl && /* @__PURE__ */ jsx16(Text14, { style: [styles13.explorerHint, { color: t.textMuted }], children: "View on Solscan" })
5445
5439
  ] }) })
5446
5440
  }
5447
5441
  )
@@ -5449,9 +5443,9 @@ function ClaimPrizeSheet({
5449
5443
  }
5450
5444
  );
5451
5445
  }
5452
- var styles12 = StyleSheet13.create({
5446
+ var styles13 = StyleSheet14.create({
5453
5447
  overlay: {
5454
- ...StyleSheet13.absoluteFillObject,
5448
+ ...StyleSheet14.absoluteFillObject,
5455
5449
  backgroundColor: "rgba(0,0,0,0.5)"
5456
5450
  },
5457
5451
  overlayTap: {
@@ -5575,8 +5569,8 @@ var styles12 = StyleSheet13.create({
5575
5569
 
5576
5570
  // src/ui/game/ClaimButton.tsx
5577
5571
  import { useState as useState24, useMemo as useMemo9, useCallback as useCallback20 } from "react";
5578
- import { StyleSheet as StyleSheet14, Text as Text14, TouchableOpacity as TouchableOpacity10 } from "react-native";
5579
- import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
5572
+ import { StyleSheet as StyleSheet15, Text as Text15, TouchableOpacity as TouchableOpacity11 } from "react-native";
5573
+ import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
5580
5574
  function ClaimButton({ gameId, style, onSuccess, onError }) {
5581
5575
  const t = useDubsTheme();
5582
5576
  const { wallet } = useDubs();
@@ -5606,13 +5600,13 @@ function ClaimButton({ gameId, style, onSuccess, onError }) {
5606
5600
  }
5607
5601
  const label = isRefund ? "Refund" : "Prize";
5608
5602
  if (claimStatus.hasClaimed) {
5609
- return /* @__PURE__ */ jsx16(
5610
- TouchableOpacity10,
5603
+ return /* @__PURE__ */ jsx17(
5604
+ TouchableOpacity11,
5611
5605
  {
5612
- style: [styles13.badge, { borderColor: t.accent }, style],
5606
+ style: [styles14.badge, { borderColor: t.accent }, style],
5613
5607
  activeOpacity: 1,
5614
5608
  disabled: true,
5615
- children: /* @__PURE__ */ jsxs14(Text14, { style: [styles13.badgeText, { color: t.accent }], children: [
5609
+ children: /* @__PURE__ */ jsxs15(Text15, { style: [styles14.badgeText, { color: t.accent }], children: [
5616
5610
  label,
5617
5611
  " Claimed!"
5618
5612
  ] })
@@ -5622,14 +5616,14 @@ function ClaimButton({ gameId, style, onSuccess, onError }) {
5622
5616
  if (!isEligible) {
5623
5617
  return null;
5624
5618
  }
5625
- return /* @__PURE__ */ jsxs14(Fragment5, { children: [
5626
- /* @__PURE__ */ jsx16(
5627
- TouchableOpacity10,
5619
+ return /* @__PURE__ */ jsxs15(Fragment5, { children: [
5620
+ /* @__PURE__ */ jsx17(
5621
+ TouchableOpacity11,
5628
5622
  {
5629
- style: [styles13.button, { backgroundColor: t.accent }, style],
5623
+ style: [styles14.button, { backgroundColor: t.accent }, style],
5630
5624
  activeOpacity: 0.8,
5631
5625
  onPress: () => setSheetVisible(true),
5632
- children: /* @__PURE__ */ jsxs14(Text14, { style: styles13.buttonText, children: [
5626
+ children: /* @__PURE__ */ jsxs15(Text15, { style: styles14.buttonText, children: [
5633
5627
  "Claim ",
5634
5628
  label,
5635
5629
  " \u2014 ",
@@ -5638,7 +5632,7 @@ function ClaimButton({ gameId, style, onSuccess, onError }) {
5638
5632
  ] })
5639
5633
  }
5640
5634
  ),
5641
- /* @__PURE__ */ jsx16(
5635
+ /* @__PURE__ */ jsx17(
5642
5636
  ClaimPrizeSheet,
5643
5637
  {
5644
5638
  visible: sheetVisible,
@@ -5652,7 +5646,7 @@ function ClaimButton({ gameId, style, onSuccess, onError }) {
5652
5646
  )
5653
5647
  ] });
5654
5648
  }
5655
- var styles13 = StyleSheet14.create({
5649
+ var styles14 = StyleSheet15.create({
5656
5650
  button: {
5657
5651
  height: 52,
5658
5652
  borderRadius: 14,