@swype-org/react-sdk 0.1.143 → 0.1.151

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.js CHANGED
@@ -2247,9 +2247,7 @@ function PoweredByFooter() {
2247
2247
  fill: "currentColor"
2248
2248
  }
2249
2249
  ) }),
2250
- /* @__PURE__ */ jsx("span", { children: "Powered by Swype" }),
2251
- /* @__PURE__ */ jsx("span", { style: dotStyle, children: "\xB7" }),
2252
- /* @__PURE__ */ jsx("span", { children: "Non-custodial" })
2250
+ /* @__PURE__ */ jsx("span", { children: "Powered by Blink" })
2253
2251
  ] });
2254
2252
  }
2255
2253
  var containerStyle3 = (color) => ({
@@ -2261,7 +2259,6 @@ var containerStyle3 = (color) => ({
2261
2259
  color,
2262
2260
  padding: "12px 0 4px"
2263
2261
  });
2264
- var dotStyle = { opacity: 0.5 };
2265
2262
  function PrimaryButton({ children, onClick, disabled, loading, icon }) {
2266
2263
  const { tokens } = useSwypeConfig();
2267
2264
  const isDisabled = disabled || loading;
@@ -3044,7 +3041,7 @@ function LoginScreen({
3044
3041
  ScreenLayout,
3045
3042
  {
3046
3043
  footer: /* @__PURE__ */ jsxs(Fragment, { children: [
3047
- /* @__PURE__ */ jsx(PrimaryButton, { onClick: onSubmit, disabled, loading: sending, children: "Continue" }),
3044
+ /* @__PURE__ */ jsx(PrimaryButton, { onClick: onSubmit, disabled, loading: sending, children: "Next" }),
3048
3045
  onSocialLogin && /* @__PURE__ */ jsxs(Fragment, { children: [
3049
3046
  /* @__PURE__ */ jsxs("div", { style: dividerStyle(tokens), children: [
3050
3047
  /* @__PURE__ */ jsx("div", { style: dividerLineStyle(tokens.border) }),
@@ -3062,10 +3059,6 @@ function LoginScreen({
3062
3059
  provider
3063
3060
  )) })
3064
3061
  ] }),
3065
- /* @__PURE__ */ jsxs("div", { style: walletSectionStyle, children: [
3066
- /* @__PURE__ */ jsx("span", { style: walletLabelStyle(tokens.textMuted), children: "Works with" }),
3067
- /* @__PURE__ */ jsx("div", { style: walletLogosStyle, children: walletIcons.map(({ key, logo }) => /* @__PURE__ */ jsx("img", { src: logo, alt: key, style: walletLogoImgStyle }, key)) })
3068
- ] }),
3069
3062
  /* @__PURE__ */ jsx(PoweredByFooter, {})
3070
3063
  ] }),
3071
3064
  children: [
@@ -3077,9 +3070,8 @@ function LoginScreen({
3077
3070
  }
3078
3071
  ),
3079
3072
  /* @__PURE__ */ jsxs("div", { style: contentStyle2, children: [
3080
- /* @__PURE__ */ jsx("div", { style: iconBoxStyle(tokens.accent), children: /* @__PURE__ */ jsx("span", { style: iconLetterStyle, children: "S" }) }),
3081
- /* @__PURE__ */ jsx("h2", { style: headingStyle(tokens.text), children: "One-time setup.\nOne-tap deposits after." }),
3082
- /* @__PURE__ */ jsx("p", { style: subtitleStyle(tokens.textSecondary), children: "Protected by Face ID." }),
3073
+ /* @__PURE__ */ jsx("div", { style: iconBoxStyle(tokens.accent), children: /* @__PURE__ */ jsx("span", { style: iconLetterStyle, children: "B" }) }),
3074
+ /* @__PURE__ */ jsx("h2", { style: headingStyle(tokens.text), children: "Your Money.\nAny App.\nOne Tap." }),
3083
3075
  error && /* @__PURE__ */ jsx("div", { style: errorStyle(tokens), children: error }),
3084
3076
  /* @__PURE__ */ jsx(
3085
3077
  "input",
@@ -3102,11 +3094,6 @@ function LoginScreen({
3102
3094
  }
3103
3095
  );
3104
3096
  }
3105
- var walletIcons = [
3106
- { key: "metamask", logo: KNOWN_LOGOS["metamask"] },
3107
- { key: "base", logo: KNOWN_LOGOS["base"] },
3108
- { key: "trust wallet", logo: KNOWN_LOGOS["trust wallet"] }
3109
- ];
3110
3097
  function socialLabel(provider) {
3111
3098
  switch (provider) {
3112
3099
  case "google":
@@ -3123,7 +3110,7 @@ var contentStyle2 = {
3123
3110
  display: "flex",
3124
3111
  flexDirection: "column",
3125
3112
  alignItems: "center",
3126
- paddingTop: 24
3113
+ justifyContent: "center"
3127
3114
  };
3128
3115
  var iconBoxStyle = (accent) => ({
3129
3116
  width: 56,
@@ -3149,12 +3136,6 @@ var headingStyle = (color) => ({
3149
3136
  margin: "20px 0 8px",
3150
3137
  whiteSpace: "pre-line"
3151
3138
  });
3152
- var subtitleStyle = (color) => ({
3153
- fontSize: "0.84rem",
3154
- color,
3155
- margin: "0 0 24px",
3156
- lineHeight: 1.5
3157
- });
3158
3139
  var inputStyle2 = (tokens) => ({
3159
3140
  width: "100%",
3160
3141
  padding: "15px 16px",
@@ -3209,27 +3190,6 @@ var socialButtonStyle = (tokens) => ({
3209
3190
  fontFamily: "inherit",
3210
3191
  cursor: "pointer"
3211
3192
  });
3212
- var walletSectionStyle = {
3213
- textAlign: "center",
3214
- marginBottom: 8,
3215
- marginTop: 4
3216
- };
3217
- var walletLabelStyle = (color) => ({
3218
- fontSize: "0.78rem",
3219
- color,
3220
- display: "block",
3221
- marginBottom: 10
3222
- });
3223
- var walletLogosStyle = {
3224
- display: "flex",
3225
- justifyContent: "center",
3226
- gap: 16
3227
- };
3228
- var walletLogoImgStyle = {
3229
- width: 24,
3230
- height: 24,
3231
- objectFit: "contain"
3232
- };
3233
3193
  var avatarStyle = (tokens) => ({
3234
3194
  width: 28,
3235
3195
  height: 28,
@@ -3287,40 +3247,38 @@ function OtpVerifyScreen({
3287
3247
  });
3288
3248
  }, 1e3);
3289
3249
  }, [cooldown, onResend]);
3290
- return /* @__PURE__ */ jsxs(ScreenLayout, { footer: /* @__PURE__ */ jsx(PoweredByFooter, {}), children: [
3291
- /* @__PURE__ */ jsx(ScreenHeader, { onBack }),
3292
- /* @__PURE__ */ jsxs("div", { style: contentStyle3, children: [
3293
- /* @__PURE__ */ jsx(IconCircle, { variant: "accent", size: 56, children: /* @__PURE__ */ jsx("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx(
3294
- "path",
3295
- {
3296
- d: "M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4z",
3297
- fill: tokens.accent
3298
- }
3299
- ) }) }),
3300
- /* @__PURE__ */ jsx("h2", { style: headingStyle2(tokens.text), children: "Check your email" }),
3301
- /* @__PURE__ */ jsxs("p", { style: subtitleStyle2(tokens.textSecondary), children: [
3302
- "We sent a 6-digit code to",
3303
- "\n",
3304
- /* @__PURE__ */ jsx("strong", { children: maskedIdentifier })
3305
- ] }),
3306
- error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle(tokens), children: error }),
3307
- /* @__PURE__ */ jsx(OtpInput, { value: otpCode, onChange: onOtpChange, disabled: verifying }),
3308
- /* @__PURE__ */ jsx(
3309
- "button",
3310
- {
3311
- type: "button",
3312
- onClick: handleResend,
3313
- disabled: cooldown > 0,
3314
- style: resendStyle(tokens.textMuted, cooldown > 0),
3315
- children: cooldown > 0 ? `Resend code in ${cooldown}s` : "Resend code"
3316
- }
3317
- ),
3318
- /* @__PURE__ */ jsxs("div", { style: actionStyle, children: [
3250
+ return /* @__PURE__ */ jsxs(
3251
+ ScreenLayout,
3252
+ {
3253
+ footer: /* @__PURE__ */ jsxs(Fragment, { children: [
3319
3254
  /* @__PURE__ */ jsx(PrimaryButton, { onClick: onVerify, disabled, loading: verifying, children: "Verify" }),
3320
- /* @__PURE__ */ jsx("p", { style: hintStyle(tokens.textMuted), children: "Didn't get the code? Check your spam folder" })
3321
- ] })
3322
- ] })
3323
- ] });
3255
+ /* @__PURE__ */ jsx(PoweredByFooter, {})
3256
+ ] }),
3257
+ children: [
3258
+ /* @__PURE__ */ jsx(ScreenHeader, { onBack }),
3259
+ /* @__PURE__ */ jsxs("div", { style: contentStyle3, children: [
3260
+ /* @__PURE__ */ jsx("h2", { style: headingStyle2(tokens.text), children: "Confirm it is you" }),
3261
+ /* @__PURE__ */ jsxs("p", { style: subtitleStyle(tokens.textSecondary), children: [
3262
+ "We sent a 6-digit code to",
3263
+ "\n",
3264
+ /* @__PURE__ */ jsx("strong", { children: maskedIdentifier })
3265
+ ] }),
3266
+ error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle(tokens), children: error }),
3267
+ /* @__PURE__ */ jsx(OtpInput, { value: otpCode, onChange: onOtpChange, disabled: verifying }),
3268
+ /* @__PURE__ */ jsx(
3269
+ "button",
3270
+ {
3271
+ type: "button",
3272
+ onClick: handleResend,
3273
+ disabled: cooldown > 0,
3274
+ style: resendStyle(tokens.textMuted, cooldown > 0),
3275
+ children: cooldown > 0 ? `Resend code in ${cooldown}s` : "Resend code"
3276
+ }
3277
+ )
3278
+ ] })
3279
+ ]
3280
+ }
3281
+ );
3324
3282
  }
3325
3283
  var contentStyle3 = {
3326
3284
  textAlign: "center",
@@ -3336,7 +3294,7 @@ var headingStyle2 = (color) => ({
3336
3294
  color,
3337
3295
  margin: "20px 0 8px"
3338
3296
  });
3339
- var subtitleStyle2 = (color) => ({
3297
+ var subtitleStyle = (color) => ({
3340
3298
  fontSize: "0.88rem",
3341
3299
  color,
3342
3300
  margin: "0 0 28px",
@@ -3366,16 +3324,6 @@ var resendStyle = (color, disabled) => ({
3366
3324
  padding: 0,
3367
3325
  opacity: disabled ? 0.6 : 1
3368
3326
  });
3369
- var actionStyle = {
3370
- width: "100%",
3371
- marginTop: 32
3372
- };
3373
- var hintStyle = (color) => ({
3374
- textAlign: "center",
3375
- fontSize: "0.78rem",
3376
- color,
3377
- margin: "12px 0 0"
3378
- });
3379
3327
  function PasskeyScreen({
3380
3328
  onCreatePasskey,
3381
3329
  onBack,
@@ -3386,7 +3334,7 @@ function PasskeyScreen({
3386
3334
  }) {
3387
3335
  const { tokens } = useSwypeConfig();
3388
3336
  const handleCreate = popupFallback && onCreatePasskeyViaPopup ? onCreatePasskeyViaPopup : onCreatePasskey;
3389
- const buttonLabel = popupFallback ? "Open passkey window" : "Create or verify passkey";
3337
+ const buttonLabel = popupFallback ? "Open passkey window" : "Verify PassKey";
3390
3338
  return /* @__PURE__ */ jsxs(
3391
3339
  ScreenLayout,
3392
3340
  {
@@ -3397,16 +3345,8 @@ function PasskeyScreen({
3397
3345
  children: [
3398
3346
  /* @__PURE__ */ jsx(ScreenHeader, { onBack }),
3399
3347
  /* @__PURE__ */ jsxs("div", { style: contentStyle4, children: [
3400
- /* @__PURE__ */ jsx(IconCircle, { variant: "accent", size: 64, children: /* @__PURE__ */ jsxs("svg", { width: "36", height: "36", viewBox: "0 0 24 24", fill: "none", children: [
3401
- /* @__PURE__ */ jsx("rect", { x: "4", y: "4", width: "16", height: "16", rx: "3", stroke: tokens.accent, strokeWidth: "1.5", strokeDasharray: "3 2" }),
3402
- /* @__PURE__ */ jsx("circle", { cx: "9", cy: "10", r: "1", fill: tokens.accent }),
3403
- /* @__PURE__ */ jsx("circle", { cx: "15", cy: "10", r: "1", fill: tokens.accent }),
3404
- /* @__PURE__ */ jsx("path", { d: "M9 14c0 1.5 1.34 2.5 3 2.5s3-1 3-2.5", stroke: tokens.accent, strokeWidth: "1.2", strokeLinecap: "round" })
3405
- ] }) }),
3406
- /* @__PURE__ */ jsx("h2", { style: headingStyle3(tokens.text), children: "Create or verify your passkey" }),
3407
- /* @__PURE__ */ jsx("p", { style: subtitleStyle3(tokens.textSecondary), children: popupFallback ? "Your browser requires a separate window to continue. Tap the button below to continue." : "Use Face ID to sign in instantly \u2014 no passwords, no codes." }),
3408
- error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle2(tokens), children: error }),
3409
- /* @__PURE__ */ jsx(InfoBanner, { children: "Your passkey is stored securely on your device. Swype never sees your biometric data." })
3348
+ /* @__PURE__ */ jsx("h2", { style: headingStyle3(tokens.text), children: "Secure your account with a passkey" }),
3349
+ error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle2(tokens), children: error })
3410
3350
  ] })
3411
3351
  ]
3412
3352
  }
@@ -3418,7 +3358,7 @@ var contentStyle4 = {
3418
3358
  display: "flex",
3419
3359
  flexDirection: "column",
3420
3360
  alignItems: "center",
3421
- paddingTop: 32
3361
+ justifyContent: "center"
3422
3362
  };
3423
3363
  var headingStyle3 = (color) => ({
3424
3364
  fontSize: "1.45rem",
@@ -3427,13 +3367,6 @@ var headingStyle3 = (color) => ({
3427
3367
  color,
3428
3368
  margin: "24px 0 8px"
3429
3369
  });
3430
- var subtitleStyle3 = (color) => ({
3431
- fontSize: "0.9rem",
3432
- color,
3433
- margin: "0 0 28px",
3434
- lineHeight: 1.5,
3435
- maxWidth: 280
3436
- });
3437
3370
  var errorBannerStyle2 = (tokens) => ({
3438
3371
  background: tokens.errorBg,
3439
3372
  border: `1px solid ${tokens.error}66`,
@@ -3502,6 +3435,8 @@ function WalletPickerScreen({
3502
3435
  }) {
3503
3436
  const { tokens } = useSwypeConfig();
3504
3437
  const [hoveredId, setHoveredId] = useState(null);
3438
+ const [selectedProviderId, setSelectedProviderId] = useState(null);
3439
+ const [cryptoExpanded, setCryptoExpanded] = useState(false);
3505
3440
  const hasPending = pendingConnections != null && pendingConnections.length > 0;
3506
3441
  const displayProviders = providers.length > 0 ? providers : [
3507
3442
  { id: "metamask", name: "MetaMask" },
@@ -3509,6 +3444,7 @@ function WalletPickerScreen({
3509
3444
  { id: "ora", name: "Ora" },
3510
3445
  { id: "phantom", name: "Phantom" }
3511
3446
  ];
3447
+ const selectedProvider = displayProviders.find((p) => p.id === selectedProviderId);
3512
3448
  if (loading) {
3513
3449
  return /* @__PURE__ */ jsxs(ScreenLayout, { children: [
3514
3450
  /* @__PURE__ */ jsx(ScreenHeader, { title: "Set up Swype", onBack }),
@@ -3519,14 +3455,18 @@ function WalletPickerScreen({
3519
3455
  ScreenLayout,
3520
3456
  {
3521
3457
  footer: /* @__PURE__ */ jsxs(Fragment, { children: [
3522
- /* @__PURE__ */ jsx("p", { style: hintStyle2(tokens.textMuted), children: "You'll set your deposit limit in your wallet app." }),
3458
+ selectedProvider && /* @__PURE__ */ jsxs(PrimaryButton, { onClick: () => onSelectProvider(selectedProvider.id), children: [
3459
+ "Open ",
3460
+ selectedProvider.name,
3461
+ " to Link"
3462
+ ] }),
3523
3463
  /* @__PURE__ */ jsx(PoweredByFooter, {})
3524
3464
  ] }),
3525
3465
  children: [
3526
3466
  /* @__PURE__ */ jsx(ScreenHeader, { title: "Set up Swype", onBack }),
3527
3467
  hasPending && /* @__PURE__ */ jsxs(Fragment, { children: [
3528
3468
  /* @__PURE__ */ jsx("h2", { style: headingStyle4(tokens.text), children: "Continue where you left off" }),
3529
- /* @__PURE__ */ jsx("p", { style: subtitleStyle4(tokens.textSecondary), children: "You have a wallet that still needs setup" }),
3469
+ /* @__PURE__ */ jsx("p", { style: subtitleStyle2(tokens.textSecondary), children: "You have a wallet that still needs setup" }),
3530
3470
  /* @__PURE__ */ jsx("div", { style: pendingListStyle, children: pendingConnections.map((acct) => {
3531
3471
  const wallet = acct.wallets[0];
3532
3472
  const address = wallet ? truncateAddress(wallet.name) : void 0;
@@ -3565,21 +3505,41 @@ function WalletPickerScreen({
3565
3505
  }) }),
3566
3506
  /* @__PURE__ */ jsx("div", { style: dividerStyle2(tokens.border), children: /* @__PURE__ */ jsx("span", { style: dividerTextStyle(tokens.textMuted), children: "Or connect a new wallet" }) })
3567
3507
  ] }),
3568
- !hasPending && /* @__PURE__ */ jsxs(Fragment, { children: [
3569
- /* @__PURE__ */ jsx("h2", { style: headingStyle4(tokens.text), children: "Where are your stablecoins?" }),
3570
- /* @__PURE__ */ jsx("p", { style: subtitleStyle4(tokens.textSecondary), children: "Select the wallet you want to deposit from" })
3571
- ] }),
3572
- /* @__PURE__ */ jsx("div", { style: gridStyle, children: displayProviders.map((p) => {
3508
+ !hasPending && /* @__PURE__ */ jsx("h2", { style: headingStyle4(tokens.text), children: "Where is your money?" }),
3509
+ /* @__PURE__ */ jsxs(
3510
+ "button",
3511
+ {
3512
+ type: "button",
3513
+ onClick: () => setCryptoExpanded((v) => !v),
3514
+ style: categoryRowStyle(tokens, cryptoExpanded),
3515
+ children: [
3516
+ /* @__PURE__ */ jsx("span", { style: categoryLabelStyle, children: "Crypto Wallet" }),
3517
+ /* @__PURE__ */ jsx(
3518
+ "svg",
3519
+ {
3520
+ width: "18",
3521
+ height: "18",
3522
+ viewBox: "0 0 24 24",
3523
+ fill: "none",
3524
+ style: { transform: cryptoExpanded ? "rotate(180deg)" : "none", transition: "transform 0.2s ease" },
3525
+ children: /* @__PURE__ */ jsx("path", { d: "M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z", fill: "currentColor" })
3526
+ }
3527
+ )
3528
+ ]
3529
+ }
3530
+ ),
3531
+ cryptoExpanded && /* @__PURE__ */ jsx("div", { style: gridStyle, children: displayProviders.map((p) => {
3573
3532
  const logoSrc = "logoURI" in p && p.logoURI || KNOWN_LOGOS[p.name.toLowerCase()];
3574
3533
  const emoji = WALLET_EMOJIS[p.name.toLowerCase()] ?? p.name.charAt(0);
3534
+ const isSelected = selectedProviderId === p.id;
3575
3535
  const isHovered = hoveredId === p.id;
3576
3536
  return /* @__PURE__ */ jsxs(
3577
3537
  "button",
3578
3538
  {
3579
- onClick: () => onSelectProvider(p.id),
3539
+ onClick: () => setSelectedProviderId(p.id),
3580
3540
  onMouseEnter: () => setHoveredId(p.id),
3581
3541
  onMouseLeave: () => setHoveredId(null),
3582
- style: cardStyle(tokens, isHovered),
3542
+ style: cardStyle(tokens, isHovered, isSelected),
3583
3543
  children: [
3584
3544
  logoSrc ? /* @__PURE__ */ jsx(
3585
3545
  "img",
@@ -3594,7 +3554,11 @@ function WalletPickerScreen({
3594
3554
  },
3595
3555
  p.id
3596
3556
  );
3597
- }) })
3557
+ }) }),
3558
+ /* @__PURE__ */ jsxs("div", { style: categoryRowStyle(tokens, false, true), children: [
3559
+ /* @__PURE__ */ jsx("span", { style: categoryLabelStyle, children: "Bank Account" }),
3560
+ /* @__PURE__ */ jsx("span", { style: comingSoonBadgeStyle(tokens), children: "Coming Soon" })
3561
+ ] })
3598
3562
  ]
3599
3563
  }
3600
3564
  );
@@ -3606,7 +3570,7 @@ var headingStyle4 = (color) => ({
3606
3570
  color,
3607
3571
  margin: "8px 0 4px"
3608
3572
  });
3609
- var subtitleStyle4 = (color) => ({
3573
+ var subtitleStyle2 = (color) => ({
3610
3574
  fontSize: "0.88rem",
3611
3575
  color,
3612
3576
  margin: "0 0 24px"
@@ -3614,9 +3578,11 @@ var subtitleStyle4 = (color) => ({
3614
3578
  var gridStyle = {
3615
3579
  display: "grid",
3616
3580
  gridTemplateColumns: "1fr 1fr",
3617
- gap: 12
3581
+ gap: 12,
3582
+ marginBottom: 12
3618
3583
  };
3619
- var cardStyle = (tokens, hovered) => ({
3584
+ var SELECTED_GREEN = "#22c55e";
3585
+ var cardStyle = (tokens, hovered, selected) => ({
3620
3586
  display: "flex",
3621
3587
  flexDirection: "column",
3622
3588
  alignItems: "center",
@@ -3624,11 +3590,12 @@ var cardStyle = (tokens, hovered) => ({
3624
3590
  gap: 8,
3625
3591
  padding: "20px 12px",
3626
3592
  background: hovered ? tokens.bgHover : tokens.bgInput,
3627
- border: `1.5px solid ${tokens.border}`,
3593
+ border: selected ? `2px solid ${SELECTED_GREEN}` : `1.5px solid ${tokens.border}`,
3594
+ boxShadow: selected ? `0 0 0 2px ${SELECTED_GREEN}44` : "none",
3628
3595
  borderRadius: 16,
3629
3596
  cursor: "pointer",
3630
3597
  fontFamily: "inherit",
3631
- transition: "background 0.15s ease",
3598
+ transition: "background 0.15s ease, border 0.15s ease, box-shadow 0.15s ease",
3632
3599
  outline: "none"
3633
3600
  });
3634
3601
  var emojiStyle = {
@@ -3646,11 +3613,36 @@ var nameStyle2 = (color) => ({
3646
3613
  fontWeight: 600,
3647
3614
  color
3648
3615
  });
3649
- var hintStyle2 = (color) => ({
3650
- textAlign: "center",
3651
- fontSize: "0.82rem",
3652
- color,
3653
- margin: "0 0 4px"
3616
+ var categoryRowStyle = (tokens, expanded, disabled) => ({
3617
+ display: "flex",
3618
+ alignItems: "center",
3619
+ justifyContent: "space-between",
3620
+ width: "100%",
3621
+ padding: "16px 18px",
3622
+ background: tokens.bgInput,
3623
+ border: `1.5px solid ${tokens.border}`,
3624
+ borderRadius: 14,
3625
+ cursor: disabled ? "default" : "pointer",
3626
+ fontFamily: "inherit",
3627
+ fontSize: "0.95rem",
3628
+ fontWeight: 600,
3629
+ color: disabled ? tokens.textMuted : tokens.text,
3630
+ opacity: disabled ? 0.6 : 1,
3631
+ outline: "none",
3632
+ marginBottom: expanded ? 12 : 12,
3633
+ boxSizing: "border-box"
3634
+ });
3635
+ var categoryLabelStyle = {
3636
+ lineHeight: 1
3637
+ };
3638
+ var comingSoonBadgeStyle = (tokens) => ({
3639
+ fontSize: "0.72rem",
3640
+ fontWeight: 600,
3641
+ color: tokens.textMuted,
3642
+ background: `${tokens.border}88`,
3643
+ padding: "3px 10px",
3644
+ borderRadius: 6,
3645
+ whiteSpace: "nowrap"
3654
3646
  });
3655
3647
  var pendingListStyle = {
3656
3648
  display: "flex",
@@ -3775,15 +3767,14 @@ function SetupScreen({
3775
3767
  onClick: () => onSetupOneTap(limit),
3776
3768
  disabled: loading,
3777
3769
  loading,
3778
- children: "Set up One-Tap"
3770
+ children: "Approve"
3779
3771
  }
3780
3772
  ),
3781
3773
  /* @__PURE__ */ jsx(PoweredByFooter, {})
3782
3774
  ] }),
3783
3775
  children: [
3784
3776
  /* @__PURE__ */ jsx(ScreenHeader, { title: "Swype Setup", onBack, right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
3785
- /* @__PURE__ */ jsx("h2", { style: headingStyle5(tokens.text), children: "Set up One-Tap deposits" }),
3786
- /* @__PURE__ */ jsx("p", { style: subtitleStyle5(tokens.textSecondary), children: "Set your limit for instant deposits. Like a contactless card \u2014 you choose the max." }),
3777
+ /* @__PURE__ */ jsx("h2", { style: headingStyle5(tokens.text), children: "Set Spending Limit" }),
3787
3778
  error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle3(tokens), children: error }),
3788
3779
  /* @__PURE__ */ jsxs("div", { style: balanceRowStyle, children: [
3789
3780
  /* @__PURE__ */ jsxs("div", { style: balanceLeftStyle, children: [
@@ -3853,14 +3844,6 @@ function SetupScreen({
3853
3844
  ]
3854
3845
  }
3855
3846
  )
3856
- ] }),
3857
- /* @__PURE__ */ jsx("div", { style: bannerWrapStyle, children: /* @__PURE__ */ jsx(InfoBanner, { children: "Funds stay in your wallet until you deposit. Swype never holds your money." }) }),
3858
- /* @__PURE__ */ jsxs("button", { type: "button", style: linkStyle(tokens.accent), children: [
3859
- /* @__PURE__ */ jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", style: { marginRight: 6 }, children: [
3860
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }),
3861
- /* @__PURE__ */ jsx("path", { d: "M12 16v-4M12 8h.01", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })
3862
- ] }),
3863
- "How does this work?"
3864
3847
  ] })
3865
3848
  ]
3866
3849
  }
@@ -3871,13 +3854,8 @@ var headingStyle5 = (color) => ({
3871
3854
  fontWeight: 700,
3872
3855
  letterSpacing: "-0.02em",
3873
3856
  color,
3874
- margin: "8px 0 4px"
3875
- });
3876
- var subtitleStyle5 = (color) => ({
3877
- fontSize: "0.86rem",
3878
- color,
3879
- margin: "0 0 24px",
3880
- lineHeight: 1.5
3857
+ margin: "24px 0 20px",
3858
+ textAlign: "center"
3881
3859
  });
3882
3860
  var errorBannerStyle3 = (tokens) => ({
3883
3861
  background: tokens.errorBg,
@@ -3982,20 +3960,6 @@ var limitInputStyle = (color) => ({
3982
3960
  fontFamily: "inherit",
3983
3961
  padding: 0
3984
3962
  });
3985
- var bannerWrapStyle = { marginBottom: 16 };
3986
- var linkStyle = (color) => ({
3987
- background: "transparent",
3988
- border: "none",
3989
- color,
3990
- cursor: "pointer",
3991
- fontFamily: "inherit",
3992
- fontSize: "0.82rem",
3993
- fontWeight: 500,
3994
- display: "flex",
3995
- alignItems: "center",
3996
- padding: 0,
3997
- marginBottom: 16
3998
- });
3999
3963
  function SetupStatusScreen({
4000
3964
  complete,
4001
3965
  limit,
@@ -4460,14 +4424,14 @@ function SuccessScreen({
4460
4424
  amount.toFixed(2),
4461
4425
  " deposited"
4462
4426
  ] }),
4463
- merchantName && /* @__PURE__ */ jsxs("p", { style: subtitleStyle6(tokens.textSecondary), children: [
4427
+ merchantName && /* @__PURE__ */ jsxs("p", { style: subtitleStyle3(tokens.textSecondary), children: [
4464
4428
  "to ",
4465
4429
  merchantName
4466
4430
  ] })
4467
4431
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4468
4432
  /* @__PURE__ */ jsx(IconCircle, { variant: "error", size: 64, children: /* @__PURE__ */ jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z", fill: tokens.error }) }) }),
4469
4433
  /* @__PURE__ */ jsx("h2", { style: headingStyle7(tokens.text), children: "Transfer failed" }),
4470
- error && /* @__PURE__ */ jsx("p", { style: subtitleStyle6(tokens.error), children: error })
4434
+ error && /* @__PURE__ */ jsx("p", { style: subtitleStyle3(tokens.error), children: error })
4471
4435
  ] }),
4472
4436
  /* @__PURE__ */ jsxs("div", { style: summaryCardStyle(tokens), children: [
4473
4437
  sourceName && /* @__PURE__ */ jsxs("div", { style: summaryRowStyle, children: [
@@ -4513,7 +4477,7 @@ var headingStyle7 = (color) => ({
4513
4477
  color,
4514
4478
  margin: "20px 0 4px"
4515
4479
  });
4516
- var subtitleStyle6 = (color) => ({
4480
+ var subtitleStyle3 = (color) => ({
4517
4481
  fontSize: "0.9rem",
4518
4482
  color,
4519
4483
  margin: "0 0 20px"
@@ -4621,7 +4585,7 @@ function SelectSourceScreen({
4621
4585
  right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout })
4622
4586
  }
4623
4587
  ),
4624
- /* @__PURE__ */ jsx("p", { style: subtitleStyle7(tokens.textMuted), children: "Choose which chain and token to pay from." }),
4588
+ /* @__PURE__ */ jsx("p", { style: subtitleStyle4(tokens.textMuted), children: "Choose which chain and token to pay from." }),
4625
4589
  /* @__PURE__ */ jsx("label", { style: labelStyle2(tokens.textSecondary), children: "Chain" }),
4626
4590
  /* @__PURE__ */ jsx("div", { style: optionListStyle, children: choices.map((chain) => {
4627
4591
  const isSelected = chain.chainName === selectedChainName;
@@ -4678,7 +4642,7 @@ function SelectSourceScreen({
4678
4642
  }
4679
4643
  );
4680
4644
  }
4681
- var subtitleStyle7 = (color) => ({
4645
+ var subtitleStyle4 = (color) => ({
4682
4646
  fontSize: "0.85rem",
4683
4647
  color,
4684
4648
  margin: "0 0 20px",
@@ -4794,7 +4758,7 @@ function AdvancedSourceScreen({
4794
4758
  }
4795
4759
  ),
4796
4760
  /* @__PURE__ */ jsx("h2", { style: headingStyle8(tokens.text), children: "Set up One-Tap deposits" }),
4797
- /* @__PURE__ */ jsx("p", { style: subtitleStyle8(tokens.textSecondary), children: "Select a token source for your One-Tap deposits." }),
4761
+ /* @__PURE__ */ jsx("p", { style: subtitleStyle5(tokens.textSecondary), children: "Select a token source for your One-Tap deposits." }),
4798
4762
  /* @__PURE__ */ jsx("label", { style: labelStyle3(tokens.textSecondary), children: "Select tokens to approve" }),
4799
4763
  /* @__PURE__ */ jsx("div", { style: chainListStyle, children: choices.map((chain) => {
4800
4764
  const isExpanded = expandedChain === chain.chainName;
@@ -4864,7 +4828,7 @@ var headingStyle8 = (color) => ({
4864
4828
  color,
4865
4829
  margin: "8px 0 4px"
4866
4830
  });
4867
- var subtitleStyle8 = (color) => ({
4831
+ var subtitleStyle5 = (color) => ({
4868
4832
  fontSize: "0.86rem",
4869
4833
  color,
4870
4834
  margin: "0 0 20px",
@@ -5096,14 +5060,14 @@ function OpenWalletScreen({
5096
5060
  displayName
5097
5061
  ] }),
5098
5062
  error && onRetryStatus && /* @__PURE__ */ jsx(OutlineButton, { onClick: onRetryStatus, children: "Retry status check" }),
5099
- /* @__PURE__ */ jsx("p", { style: hintStyle3(tokens.textMuted), children: loading ? "Preparing authorization..." : error ? "Retry the status check after returning to the browser, or reopen your wallet if needed." : "If your wallet didn't open automatically, tap the button above" })
5063
+ /* @__PURE__ */ jsx("p", { style: hintStyle(tokens.textMuted), children: loading ? "Preparing authorization..." : error ? "Retry the status check after returning to the browser, or reopen your wallet if needed." : "If your wallet didn't open automatically, tap the button above" })
5100
5064
  ] }),
5101
5065
  children: [
5102
5066
  /* @__PURE__ */ jsx(ScreenHeader, { onBack, right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
5103
5067
  /* @__PURE__ */ jsxs("div", { style: contentStyle8, children: [
5104
5068
  logoSrc ? /* @__PURE__ */ jsx("img", { src: logoSrc, alt: displayName, style: logoStyle }) : /* @__PURE__ */ jsx(Spinner, { size: 48 }),
5105
5069
  /* @__PURE__ */ jsx("h2", { style: headingStyle10(tokens.text), children: loading ? "Connecting..." : `Open ${displayName}` }),
5106
- /* @__PURE__ */ jsx("p", { style: subtitleStyle9(tokens.textSecondary), children: loading ? "Creating transfer and preparing your wallet link..." : `Continue in ${displayName} to authorize this connection.` }),
5070
+ /* @__PURE__ */ jsx("p", { style: subtitleStyle6(tokens.textSecondary), children: loading ? "Creating transfer and preparing your wallet link..." : `Continue in ${displayName} to authorize this connection.` }),
5107
5071
  !loading && /* @__PURE__ */ jsxs("div", { style: waitingBadgeStyle(tokens), children: [
5108
5072
  /* @__PURE__ */ jsx(Spinner, { size: 14 }),
5109
5073
  /* @__PURE__ */ jsx("span", { children: "Waiting for authorization..." })
@@ -5140,7 +5104,7 @@ var headingStyle10 = (color) => ({
5140
5104
  color,
5141
5105
  margin: "20px 0 8px"
5142
5106
  });
5143
- var subtitleStyle9 = (color) => ({
5107
+ var subtitleStyle6 = (color) => ({
5144
5108
  fontSize: "0.9rem",
5145
5109
  color,
5146
5110
  margin: "0 0 24px",
@@ -5158,7 +5122,7 @@ var waitingBadgeStyle = (tokens) => ({
5158
5122
  color: tokens.textMuted,
5159
5123
  fontSize: "0.82rem"
5160
5124
  });
5161
- var hintStyle3 = (color) => ({
5125
+ var hintStyle = (color) => ({
5162
5126
  textAlign: "center",
5163
5127
  fontSize: "0.82rem",
5164
5128
  color,
@@ -5180,14 +5144,14 @@ function ConfirmSignScreen({
5180
5144
  footer: /* @__PURE__ */ jsxs(Fragment, { children: [
5181
5145
  /* @__PURE__ */ jsx(PrimaryButton, { onClick: onSign, disabled: signing, children: signing ? "Confirming..." : "Confirm payment" }),
5182
5146
  error && /* @__PURE__ */ jsx("p", { style: errorStyle2(tokens.textMuted), children: error }),
5183
- !error && /* @__PURE__ */ jsx("p", { style: hintStyle4(tokens.textMuted), children: "You may be prompted for biometric verification" })
5147
+ !error && /* @__PURE__ */ jsx("p", { style: hintStyle2(tokens.textMuted), children: "You may be prompted for biometric verification" })
5184
5148
  ] }),
5185
5149
  children: [
5186
5150
  /* @__PURE__ */ jsx(ScreenHeader, { right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
5187
5151
  /* @__PURE__ */ jsxs("div", { style: contentStyle9, children: [
5188
5152
  logoSrc ? /* @__PURE__ */ jsx("img", { src: logoSrc, alt: displayName, style: logoStyle2 }) : /* @__PURE__ */ jsx(Spinner, { size: 48 }),
5189
5153
  /* @__PURE__ */ jsx("h2", { style: headingStyle11(tokens.text), children: "Wallet authorized" }),
5190
- /* @__PURE__ */ jsxs("p", { style: subtitleStyle10(tokens.textSecondary), children: [
5154
+ /* @__PURE__ */ jsxs("p", { style: subtitleStyle7(tokens.textSecondary), children: [
5191
5155
  displayName,
5192
5156
  " approved the connection. Tap below to confirm your payment."
5193
5157
  ] }),
@@ -5222,7 +5186,7 @@ var headingStyle11 = (color) => ({
5222
5186
  color,
5223
5187
  margin: "20px 0 8px"
5224
5188
  });
5225
- var subtitleStyle10 = (color) => ({
5189
+ var subtitleStyle7 = (color) => ({
5226
5190
  fontSize: "0.9rem",
5227
5191
  color,
5228
5192
  margin: "0 0 24px",
@@ -5244,7 +5208,7 @@ var checkmarkStyle = {
5244
5208
  fontWeight: 700,
5245
5209
  fontSize: "0.9rem"
5246
5210
  };
5247
- var hintStyle4 = (color) => ({
5211
+ var hintStyle2 = (color) => ({
5248
5212
  textAlign: "center",
5249
5213
  fontSize: "0.82rem",
5250
5214
  color,
@@ -5319,7 +5283,7 @@ function TokenPickerScreen({
5319
5283
  ] }),
5320
5284
  children: [
5321
5285
  /* @__PURE__ */ jsx(ScreenHeader, { title: "Select Token", onBack }),
5322
- /* @__PURE__ */ jsx("p", { style: subtitleStyle11(themeTokens.textSecondary), children: "Choose a token to deposit with. Tokens that haven't been authorized yet will require a one-time wallet approval." }),
5286
+ /* @__PURE__ */ jsx("p", { style: subtitleStyle8(themeTokens.textSecondary), children: "Choose a token to deposit with. Tokens that haven't been authorized yet will require a one-time wallet approval." }),
5323
5287
  /* @__PURE__ */ jsx("div", { style: chainListStyle2, children: [...chainGroups.entries()].map(([chainName, chainEntries]) => {
5324
5288
  const isExpanded = expandedChain === chainName;
5325
5289
  const chainTotal = chainEntries.reduce((sum, e) => sum + e.balance, 0);
@@ -5375,7 +5339,7 @@ function TokenPickerScreen({
5375
5339
  }
5376
5340
  );
5377
5341
  }
5378
- var subtitleStyle11 = (color) => ({
5342
+ var subtitleStyle8 = (color) => ({
5379
5343
  fontSize: "0.86rem",
5380
5344
  color,
5381
5345
  margin: "0 0 20px",