@swype-org/react-sdk 0.1.110 → 0.1.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -202,7 +202,7 @@ interface UserConfig {
202
202
  /** Theme mode */
203
203
  type ThemeMode = 'light' | 'dark';
204
204
  /** Steps in the payment flow */
205
- type PaymentStep = 'login' | 'otp-verify' | 'create-passkey' | 'verify-passkey' | 'wallet-picker' | 'open-wallet' | 'confirm-sign' | 'deposit' | 'low-balance' | 'processing' | 'select-source' | 'success';
205
+ type PaymentStep = 'login' | 'otp-verify' | 'create-passkey' | 'verify-passkey' | 'wallet-picker' | 'open-wallet' | 'setup-status' | 'setup' | 'confirm-sign' | 'deposit' | 'low-balance' | 'processing' | 'select-source' | 'success';
206
206
  /** User-selected advanced settings for chain/asset override */
207
207
  interface AdvancedSettings {
208
208
  /** Override asset (e.g. 'USDC', 'USDT'). Null = let backend decide. */
package/dist/index.d.ts CHANGED
@@ -202,7 +202,7 @@ interface UserConfig {
202
202
  /** Theme mode */
203
203
  type ThemeMode = 'light' | 'dark';
204
204
  /** Steps in the payment flow */
205
- type PaymentStep = 'login' | 'otp-verify' | 'create-passkey' | 'verify-passkey' | 'wallet-picker' | 'open-wallet' | 'confirm-sign' | 'deposit' | 'low-balance' | 'processing' | 'select-source' | 'success';
205
+ type PaymentStep = 'login' | 'otp-verify' | 'create-passkey' | 'verify-passkey' | 'wallet-picker' | 'open-wallet' | 'setup-status' | 'setup' | 'confirm-sign' | 'deposit' | 'low-balance' | 'processing' | 'select-source' | 'success';
206
206
  /** User-selected advanced settings for chain/asset override */
207
207
  interface AdvancedSettings {
208
208
  /** Override asset (e.g. 'USDC', 'USDT'). Null = let backend decide. */
package/dist/index.js CHANGED
@@ -3813,7 +3813,7 @@ var dividerTextStyle = (color) => ({
3813
3813
  whiteSpace: "nowrap"
3814
3814
  });
3815
3815
  var DEFAULT_MAX = 500;
3816
- var ABSOLUTE_MIN = 1;
3816
+ var ABSOLUTE_MIN = 0.01;
3817
3817
  function SetupScreen({
3818
3818
  availableBalance,
3819
3819
  tokenCount,
@@ -3827,7 +3827,7 @@ function SetupScreen({
3827
3827
  error
3828
3828
  }) {
3829
3829
  const { tokens } = useSwypeConfig();
3830
- const effectiveMax = Math.floor(Math.min(DEFAULT_MAX, availableBalance > 0 ? availableBalance : DEFAULT_MAX) * 100) / 100;
3830
+ const effectiveMax = DEFAULT_MAX;
3831
3831
  const effectiveMin = Math.min(ABSOLUTE_MIN, effectiveMax);
3832
3832
  const [limit, setLimit] = useState(() => effectiveMax);
3833
3833
  const [editing, setEditing] = useState(false);
@@ -3921,11 +3921,15 @@ function SetupScreen({
3921
3921
  ] }) : /* @__PURE__ */ jsxs(
3922
3922
  "div",
3923
3923
  {
3924
- style: { ...limitValueStyle(tokens.text), cursor: "pointer" },
3924
+ style: editableLimitStyle(tokens.text),
3925
3925
  onClick: startEditing,
3926
3926
  children: [
3927
3927
  "$",
3928
- limit.toFixed(2)
3928
+ limit.toFixed(2),
3929
+ /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", style: pencilIconStyle(tokens.textMuted), children: [
3930
+ /* @__PURE__ */ jsx("path", { d: "M16.474 5.408l2.118 2.117m-.756-3.982L12.109 9.27a2.118 2.118 0 00-.58 1.082L11 13l2.648-.53c.41-.082.786-.283 1.082-.579l5.727-5.727a1.853 1.853 0 10-2.621-2.621z", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }),
3931
+ /* @__PURE__ */ jsx("path", { d: "M19 15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V6a2 2 0 012-2h3", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" })
3932
+ ] })
3929
3933
  ]
3930
3934
  }
3931
3935
  )
@@ -4033,6 +4037,18 @@ var limitValueStyle = (color) => ({
4033
4037
  color,
4034
4038
  marginBottom: 12
4035
4039
  });
4040
+ var editableLimitStyle = (color) => ({
4041
+ ...limitValueStyle(color),
4042
+ cursor: "pointer",
4043
+ display: "inline-flex",
4044
+ alignItems: "center",
4045
+ gap: 6
4046
+ });
4047
+ var pencilIconStyle = (color) => ({
4048
+ color,
4049
+ opacity: 0.6,
4050
+ flexShrink: 0
4051
+ });
4036
4052
  var limitInputStyle = (color) => ({
4037
4053
  fontSize: "2.2rem",
4038
4054
  fontWeight: 700,
@@ -4060,6 +4076,108 @@ var linkStyle = (color) => ({
4060
4076
  padding: 0,
4061
4077
  marginBottom: 16
4062
4078
  });
4079
+ function SetupStatusScreen({
4080
+ complete,
4081
+ limit,
4082
+ tokensApproved,
4083
+ merchantName,
4084
+ onContinue,
4085
+ onLogout,
4086
+ error
4087
+ }) {
4088
+ const { tokens } = useSwypeConfig();
4089
+ const steps = complete ? [
4090
+ {
4091
+ label: "One-Tap ready",
4092
+ detail: `$${limit} limit \xB7 ${tokensApproved} token${tokensApproved !== 1 ? "s" : ""} approved`,
4093
+ status: "complete"
4094
+ },
4095
+ { label: "Done", status: "complete" }
4096
+ ] : [
4097
+ {
4098
+ label: "Setting up Wallet",
4099
+ status: "active"
4100
+ },
4101
+ { label: "Done", status: "pending" }
4102
+ ];
4103
+ return /* @__PURE__ */ jsxs(
4104
+ ScreenLayout,
4105
+ {
4106
+ footer: complete ? /* @__PURE__ */ jsxs(Fragment, { children: [
4107
+ /* @__PURE__ */ jsx(PrimaryButton, { onClick: onContinue, children: merchantName ? `Return to ${merchantName}` : "Continue" }),
4108
+ /* @__PURE__ */ jsx("p", { style: swipeHintStyle(tokens.textMuted), children: "Swipe to deposit \u2014 no approvals needed." })
4109
+ ] }) : void 0,
4110
+ children: [
4111
+ /* @__PURE__ */ jsx(ScreenHeader, { right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
4112
+ /* @__PURE__ */ jsxs("div", { style: contentStyle5, children: [
4113
+ complete ? /* @__PURE__ */ jsxs(Fragment, { children: [
4114
+ /* @__PURE__ */ jsx(IconCircle, { variant: "success", size: 64, children: /* @__PURE__ */ jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z", fill: tokens.success }) }) }),
4115
+ /* @__PURE__ */ jsx("h2", { style: headingStyle6(tokens.text), children: "You're all set!" })
4116
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4117
+ /* @__PURE__ */ jsx(Spinner, { size: 48 }),
4118
+ /* @__PURE__ */ jsx("h2", { style: headingStyle6(tokens.text), children: "Setting up One-Tap..." })
4119
+ ] }),
4120
+ error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle4(tokens), children: error }),
4121
+ /* @__PURE__ */ jsx("div", { style: stepsWrapStyle, children: /* @__PURE__ */ jsx(StepList, { steps }) }),
4122
+ !complete && /* @__PURE__ */ jsx("p", { style: waitHintStyle(tokens.textMuted), children: "Usually takes a few seconds" }),
4123
+ complete && /* @__PURE__ */ jsx("p", { style: readyHintStyle(tokens.textSecondary), children: "You can now deposit instantly from any partner app." })
4124
+ ] })
4125
+ ]
4126
+ }
4127
+ );
4128
+ }
4129
+ var contentStyle5 = {
4130
+ flex: 1,
4131
+ display: "flex",
4132
+ flexDirection: "column",
4133
+ alignItems: "center",
4134
+ justifyContent: "center",
4135
+ textAlign: "center",
4136
+ padding: "0 24px 32px"
4137
+ };
4138
+ var headingStyle6 = (color) => ({
4139
+ fontSize: "1.45rem",
4140
+ fontWeight: 700,
4141
+ letterSpacing: "-0.02em",
4142
+ color,
4143
+ margin: "20px 0 16px"
4144
+ });
4145
+ var errorBannerStyle4 = (tokens) => ({
4146
+ background: tokens.errorBg,
4147
+ border: `1px solid ${tokens.error}66`,
4148
+ borderRadius: 16,
4149
+ padding: "11px 14px",
4150
+ color: tokens.error,
4151
+ fontSize: "0.84rem",
4152
+ marginBottom: 14,
4153
+ lineHeight: 1.5,
4154
+ width: "100%",
4155
+ textAlign: "left"
4156
+ });
4157
+ var stepsWrapStyle = {
4158
+ width: "100%",
4159
+ maxWidth: 280,
4160
+ textAlign: "left",
4161
+ marginBottom: 16
4162
+ };
4163
+ var waitHintStyle = (color) => ({
4164
+ fontSize: "0.82rem",
4165
+ color,
4166
+ margin: 0
4167
+ });
4168
+ var readyHintStyle = (color) => ({
4169
+ fontSize: "0.88rem",
4170
+ color,
4171
+ margin: "8px 0 0",
4172
+ lineHeight: 1.5,
4173
+ maxWidth: 280
4174
+ });
4175
+ var swipeHintStyle = (color) => ({
4176
+ textAlign: "center",
4177
+ fontSize: "0.8rem",
4178
+ color,
4179
+ margin: "12px 0 0"
4180
+ });
4063
4181
  var MIN_DEPOSIT = 0.25;
4064
4182
  function DepositScreen({
4065
4183
  merchantName,
@@ -4237,7 +4355,7 @@ function DepositScreen({
4237
4355
  "%)"
4238
4356
  ] }) : /* @__PURE__ */ jsx("div", { style: detailRowStyle(tokens.textMuted), children: "Fees calculated at time of transfer" })
4239
4357
  ] }),
4240
- error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle4(tokens), children: error })
4358
+ error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle5(tokens), children: error })
4241
4359
  ]
4242
4360
  }
4243
4361
  );
@@ -4305,7 +4423,7 @@ var detailRowStyle = (color) => ({
4305
4423
  color,
4306
4424
  marginBottom: 4
4307
4425
  });
4308
- var errorBannerStyle4 = (tokens) => ({
4426
+ var errorBannerStyle5 = (tokens) => ({
4309
4427
  background: tokens.errorBg,
4310
4428
  border: `1px solid ${tokens.error}66`,
4311
4429
  borderRadius: 16,
@@ -4404,10 +4522,10 @@ function SuccessScreen({
4404
4522
  right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout })
4405
4523
  }
4406
4524
  ),
4407
- /* @__PURE__ */ jsxs("div", { style: contentStyle5, children: [
4525
+ /* @__PURE__ */ jsxs("div", { style: contentStyle6, children: [
4408
4526
  succeeded ? /* @__PURE__ */ jsxs(Fragment, { children: [
4409
4527
  /* @__PURE__ */ jsx(IconCircle, { variant: "success", size: 64, children: /* @__PURE__ */ jsx("svg", { width: "32", height: "32", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx("path", { d: "M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z", fill: tokens.success }) }) }),
4410
- /* @__PURE__ */ jsxs("h2", { style: headingStyle6(tokens.text), children: [
4528
+ /* @__PURE__ */ jsxs("h2", { style: headingStyle7(tokens.text), children: [
4411
4529
  "$",
4412
4530
  amount.toFixed(2),
4413
4531
  " deposited"
@@ -4418,7 +4536,7 @@ function SuccessScreen({
4418
4536
  ] })
4419
4537
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4420
4538
  /* @__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 }) }) }),
4421
- /* @__PURE__ */ jsx("h2", { style: headingStyle6(tokens.text), children: "Transfer failed" }),
4539
+ /* @__PURE__ */ jsx("h2", { style: headingStyle7(tokens.text), children: "Transfer failed" }),
4422
4540
  error && /* @__PURE__ */ jsx("p", { style: subtitleStyle6(tokens.error), children: error })
4423
4541
  ] }),
4424
4542
  /* @__PURE__ */ jsxs("div", { style: summaryCardStyle(tokens), children: [
@@ -4451,14 +4569,14 @@ function SuccessScreen({
4451
4569
  }
4452
4570
  );
4453
4571
  }
4454
- var contentStyle5 = {
4572
+ var contentStyle6 = {
4455
4573
  flex: 1,
4456
4574
  display: "flex",
4457
4575
  flexDirection: "column",
4458
4576
  alignItems: "center",
4459
4577
  paddingTop: 16
4460
4578
  };
4461
- var headingStyle6 = (color) => ({
4579
+ var headingStyle7 = (color) => ({
4462
4580
  fontSize: "1.5rem",
4463
4581
  fontWeight: 700,
4464
4582
  letterSpacing: "-0.02em",
@@ -4743,7 +4861,7 @@ function AdvancedSourceScreen({
4743
4861
  right: /* @__PURE__ */ jsx("span", { style: advancedBadgeStyle(tokens.accent), children: "Advanced" })
4744
4862
  }
4745
4863
  ),
4746
- /* @__PURE__ */ jsx("h2", { style: headingStyle7(tokens.text), children: "Set up One-Tap deposits" }),
4864
+ /* @__PURE__ */ jsx("h2", { style: headingStyle8(tokens.text), children: "Set up One-Tap deposits" }),
4747
4865
  /* @__PURE__ */ jsx("p", { style: subtitleStyle8(tokens.textSecondary), children: "Select a token source for your One-Tap deposits." }),
4748
4866
  /* @__PURE__ */ jsx("label", { style: labelStyle3(tokens.textSecondary), children: "Select tokens to approve" }),
4749
4867
  /* @__PURE__ */ jsx("div", { style: chainListStyle, children: choices.map((chain) => {
@@ -4807,7 +4925,7 @@ var advancedBadgeStyle = (color) => ({
4807
4925
  padding: "3px 10px",
4808
4926
  letterSpacing: "0.02em"
4809
4927
  });
4810
- var headingStyle7 = (color) => ({
4928
+ var headingStyle8 = (color) => ({
4811
4929
  fontSize: "1.3rem",
4812
4930
  fontWeight: 700,
4813
4931
  letterSpacing: "-0.02em",
@@ -4942,16 +5060,16 @@ function TransferStatusScreen({
4942
5060
  const steps = buildSteps(phase);
4943
5061
  return /* @__PURE__ */ jsxs(ScreenLayout, { children: [
4944
5062
  /* @__PURE__ */ jsx(ScreenHeader, { right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
4945
- /* @__PURE__ */ jsxs("div", { style: contentStyle6, children: [
5063
+ /* @__PURE__ */ jsxs("div", { style: contentStyle7, children: [
4946
5064
  /* @__PURE__ */ jsx(Spinner, { size: 48 }),
4947
- /* @__PURE__ */ jsx("h2", { style: headingStyle8(tokens.text), children: "Processing Transfer..." }),
4948
- error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle5(tokens), children: error }),
4949
- /* @__PURE__ */ jsx("div", { style: stepsWrapStyle, children: /* @__PURE__ */ jsx(StepList, { steps }) }),
4950
- /* @__PURE__ */ jsx("p", { style: waitHintStyle(tokens.textMuted), children: "Usually takes a few seconds" })
5065
+ /* @__PURE__ */ jsx("h2", { style: headingStyle9(tokens.text), children: "Processing Transfer..." }),
5066
+ error && /* @__PURE__ */ jsx("div", { style: errorBannerStyle6(tokens), children: error }),
5067
+ /* @__PURE__ */ jsx("div", { style: stepsWrapStyle2, children: /* @__PURE__ */ jsx(StepList, { steps }) }),
5068
+ /* @__PURE__ */ jsx("p", { style: waitHintStyle2(tokens.textMuted), children: "Usually takes a few seconds" })
4951
5069
  ] })
4952
5070
  ] });
4953
5071
  }
4954
- var contentStyle6 = {
5072
+ var contentStyle7 = {
4955
5073
  flex: 1,
4956
5074
  display: "flex",
4957
5075
  flexDirection: "column",
@@ -4960,14 +5078,14 @@ var contentStyle6 = {
4960
5078
  textAlign: "center",
4961
5079
  padding: "0 24px"
4962
5080
  };
4963
- var headingStyle8 = (color) => ({
5081
+ var headingStyle9 = (color) => ({
4964
5082
  fontSize: "1.45rem",
4965
5083
  fontWeight: 700,
4966
5084
  letterSpacing: "-0.02em",
4967
5085
  color,
4968
5086
  margin: "20px 0 16px"
4969
5087
  });
4970
- var errorBannerStyle5 = (tokens) => ({
5088
+ var errorBannerStyle6 = (tokens) => ({
4971
5089
  background: tokens.errorBg,
4972
5090
  border: `1px solid ${tokens.error}66`,
4973
5091
  borderRadius: 16,
@@ -4979,13 +5097,13 @@ var errorBannerStyle5 = (tokens) => ({
4979
5097
  width: "100%",
4980
5098
  textAlign: "left"
4981
5099
  });
4982
- var stepsWrapStyle = {
5100
+ var stepsWrapStyle2 = {
4983
5101
  width: "100%",
4984
5102
  maxWidth: 280,
4985
5103
  textAlign: "left",
4986
5104
  marginBottom: 16
4987
5105
  };
4988
- var waitHintStyle = (color) => ({
5106
+ var waitHintStyle2 = (color) => ({
4989
5107
  fontSize: "0.82rem",
4990
5108
  color,
4991
5109
  margin: 0
@@ -5027,9 +5145,9 @@ function OpenWalletScreen({
5027
5145
  ] }),
5028
5146
  children: [
5029
5147
  /* @__PURE__ */ jsx(ScreenHeader, { right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
5030
- /* @__PURE__ */ jsxs("div", { style: contentStyle7, children: [
5148
+ /* @__PURE__ */ jsxs("div", { style: contentStyle8, children: [
5031
5149
  logoSrc ? /* @__PURE__ */ jsx("img", { src: logoSrc, alt: displayName, style: logoStyle }) : /* @__PURE__ */ jsx(Spinner, { size: 48 }),
5032
- /* @__PURE__ */ jsx("h2", { style: headingStyle9(tokens.text), children: loading ? "Connecting..." : `Open ${displayName}` }),
5150
+ /* @__PURE__ */ jsx("h2", { style: headingStyle10(tokens.text), children: loading ? "Connecting..." : `Open ${displayName}` }),
5033
5151
  /* @__PURE__ */ jsx("p", { style: subtitleStyle9(tokens.textSecondary), children: loading ? "Creating transfer and preparing your wallet link..." : `Continue in ${displayName} to authorize this connection.` }),
5034
5152
  !loading && /* @__PURE__ */ jsxs("div", { style: waitingBadgeStyle(tokens), children: [
5035
5153
  /* @__PURE__ */ jsx(Spinner, { size: 14 }),
@@ -5040,7 +5158,7 @@ function OpenWalletScreen({
5040
5158
  }
5041
5159
  );
5042
5160
  }
5043
- var contentStyle7 = {
5161
+ var contentStyle8 = {
5044
5162
  flex: 1,
5045
5163
  display: "flex",
5046
5164
  flexDirection: "column",
@@ -5060,7 +5178,7 @@ var logoStyle = {
5060
5178
  borderRadius: 14,
5061
5179
  objectFit: "contain"
5062
5180
  };
5063
- var headingStyle9 = (color) => ({
5181
+ var headingStyle10 = (color) => ({
5064
5182
  fontSize: "1.45rem",
5065
5183
  fontWeight: 700,
5066
5184
  letterSpacing: "-0.02em",
@@ -5111,9 +5229,9 @@ function ConfirmSignScreen({
5111
5229
  ] }),
5112
5230
  children: [
5113
5231
  /* @__PURE__ */ jsx(ScreenHeader, { right: /* @__PURE__ */ jsx(SettingsMenu, { onLogout }) }),
5114
- /* @__PURE__ */ jsxs("div", { style: contentStyle8, children: [
5232
+ /* @__PURE__ */ jsxs("div", { style: contentStyle9, children: [
5115
5233
  logoSrc ? /* @__PURE__ */ jsx("img", { src: logoSrc, alt: displayName, style: logoStyle2 }) : /* @__PURE__ */ jsx(Spinner, { size: 48 }),
5116
- /* @__PURE__ */ jsx("h2", { style: headingStyle10(tokens.text), children: "Wallet authorized" }),
5234
+ /* @__PURE__ */ jsx("h2", { style: headingStyle11(tokens.text), children: "Wallet authorized" }),
5117
5235
  /* @__PURE__ */ jsxs("p", { style: subtitleStyle10(tokens.textSecondary), children: [
5118
5236
  displayName,
5119
5237
  " approved the connection. Tap below to confirm your payment."
@@ -5127,7 +5245,7 @@ function ConfirmSignScreen({
5127
5245
  }
5128
5246
  );
5129
5247
  }
5130
- var contentStyle8 = {
5248
+ var contentStyle9 = {
5131
5249
  flex: 1,
5132
5250
  display: "flex",
5133
5251
  flexDirection: "column",
@@ -5142,7 +5260,7 @@ var logoStyle2 = {
5142
5260
  borderRadius: 14,
5143
5261
  objectFit: "contain"
5144
5262
  };
5145
- var headingStyle10 = (color) => ({
5263
+ var headingStyle11 = (color) => ({
5146
5264
  fontSize: "1.45rem",
5147
5265
  fontWeight: 700,
5148
5266
  letterSpacing: "-0.02em",
@@ -5292,6 +5410,35 @@ function StepRenderer({
5292
5410
  }
5293
5411
  );
5294
5412
  }
5413
+ if (step === "setup-status") {
5414
+ return /* @__PURE__ */ jsx(
5415
+ SetupStatusScreen,
5416
+ {
5417
+ complete: false,
5418
+ limit: state.oneTapLimit,
5419
+ tokensApproved: 0,
5420
+ merchantName,
5421
+ onContinue: () => handlers.onNavigate("setup"),
5422
+ onLogout: handlers.onLogout,
5423
+ error: state.error || authExecutorError
5424
+ }
5425
+ );
5426
+ }
5427
+ if (step === "setup") {
5428
+ return /* @__PURE__ */ jsx(
5429
+ SetupScreen,
5430
+ {
5431
+ availableBalance: selectedAccount ? selectedAccount.wallets.reduce((sum, w) => sum + w.balance.available.amount, 0) : maxSourceBalance,
5432
+ tokenCount,
5433
+ sourceName,
5434
+ onSetupOneTap: handlers.onSetupOneTap,
5435
+ onBack: () => handlers.onNavigate("deposit"),
5436
+ onLogout: handlers.onLogout,
5437
+ loading: state.creatingTransfer,
5438
+ error: state.error
5439
+ }
5440
+ );
5441
+ }
5295
5442
  if (step === "confirm-sign") {
5296
5443
  const providerName = state.providers.find((p) => p.id === state.selectedProviderId)?.name ?? null;
5297
5444
  return /* @__PURE__ */ jsx(
@@ -5440,7 +5587,7 @@ var PaymentErrorBoundary = class extends Component {
5440
5587
  /* @__PURE__ */ jsx("path", { d: "M12 8v5", stroke: "#ef4444", strokeWidth: "1.5", strokeLinecap: "round" }),
5441
5588
  /* @__PURE__ */ jsx("circle", { cx: "12", cy: "16", r: "0.75", fill: "#ef4444" })
5442
5589
  ] }) }),
5443
- /* @__PURE__ */ jsx("h2", { style: headingStyle11, children: "Something went wrong" }),
5590
+ /* @__PURE__ */ jsx("h2", { style: headingStyle12, children: "Something went wrong" }),
5444
5591
  /* @__PURE__ */ jsx("p", { style: messageStyle, children: "An unexpected error occurred. Please try again." }),
5445
5592
  /* @__PURE__ */ jsx("button", { type: "button", onClick: this.handleReset, style: buttonStyle3, children: "Try again" })
5446
5593
  ] });
@@ -5460,7 +5607,7 @@ var containerStyle8 = {
5460
5607
  var iconStyle4 = {
5461
5608
  marginBottom: 20
5462
5609
  };
5463
- var headingStyle11 = {
5610
+ var headingStyle12 = {
5464
5611
  fontSize: "1.25rem",
5465
5612
  fontWeight: 700,
5466
5613
  color: "#1a1a1a",
@@ -5996,7 +6143,16 @@ function SwypePaymentInner({
5996
6143
  }
5997
6144
  const provider = state.providers.find((p) => p.id === providerId);
5998
6145
  const providerName = provider?.name ?? "Wallet";
5999
- dispatch({ type: "PAY_STARTED", isSetupRedirect: true });
6146
+ const isMobile = !shouldUseWalletConnector({
6147
+ useWalletConnector: useWalletConnectorProp,
6148
+ userAgent: typeof navigator === "undefined" ? void 0 : navigator.userAgent
6149
+ });
6150
+ if (isMobile) {
6151
+ dispatch({ type: "PAY_STARTED", isSetupRedirect: true });
6152
+ } else {
6153
+ dispatch({ type: "PAY_STARTED", isSetupRedirect: false });
6154
+ dispatch({ type: "NAVIGATE", step: "setup-status" });
6155
+ }
6000
6156
  try {
6001
6157
  const token = await getAccessToken();
6002
6158
  if (!token) throw new Error("Not authenticated");
@@ -6009,10 +6165,6 @@ function SwypePaymentInner({
6009
6165
  });
6010
6166
  const session = account.authorizationSessions?.[0];
6011
6167
  if (!session) throw new Error("No authorization session returned.");
6012
- const isMobile = !shouldUseWalletConnector({
6013
- useWalletConnector: useWalletConnectorProp,
6014
- userAgent: typeof navigator === "undefined" ? void 0 : navigator.userAgent
6015
- });
6016
6168
  if (isMobile) {
6017
6169
  handlingMobileReturnRef.current = false;
6018
6170
  mobileSetupFlowRef.current = true;
@@ -6029,7 +6181,7 @@ function SwypePaymentInner({
6029
6181
  } else {
6030
6182
  await authExecutor.executeSessionById(session.id);
6031
6183
  await reloadAccounts();
6032
- dispatch({ type: "NAVIGATE", step: "deposit" });
6184
+ dispatch({ type: "NAVIGATE", step: "setup" });
6033
6185
  }
6034
6186
  } catch (err) {
6035
6187
  captureException(err);
@@ -6073,6 +6225,20 @@ function SwypePaymentInner({
6073
6225
  },
6074
6226
  [state.accounts, depositAmount]
6075
6227
  );
6228
+ const handleSetupOneTap = useCallback(async (limit) => {
6229
+ try {
6230
+ const token = await getAccessToken();
6231
+ if (!token) throw new Error("Not authenticated");
6232
+ await updateUserConfig(apiBaseUrl, token, { defaultAllowance: limit });
6233
+ dispatch({ type: "NAVIGATE", step: "deposit" });
6234
+ } catch (err) {
6235
+ captureException(err);
6236
+ dispatch({
6237
+ type: "SET_ERROR",
6238
+ error: err instanceof Error ? err.message : "Failed to save One-Tap limit"
6239
+ });
6240
+ }
6241
+ }, [getAccessToken, apiBaseUrl]);
6076
6242
  const handleNewPayment = useCallback(() => {
6077
6243
  clearMobileFlowState();
6078
6244
  processingStartedAtRef.current = null;
@@ -6309,6 +6475,7 @@ function SwypePaymentInner({
6309
6475
  checkPasskey();
6310
6476
  return () => {
6311
6477
  cancelled = true;
6478
+ checkingPasskeyRef.current = false;
6312
6479
  };
6313
6480
  }, [ready, authenticated, state.step, apiBaseUrl, state.activeCredentialId]);
6314
6481
  useEffect(() => {
@@ -6520,7 +6687,7 @@ function SwypePaymentInner({
6520
6687
  initializedSelectSourceActionRef.current = pendingSelectSourceAction.id;
6521
6688
  }, [pendingSelectSourceAction, selectSourceChoices, selectSourceRecommended]);
6522
6689
  useEffect(() => {
6523
- if (pendingSelectSourceAction && (state.step === "processing" || state.step === "open-wallet")) {
6690
+ if (pendingSelectSourceAction && (state.step === "processing" || state.step === "open-wallet" || state.step === "setup-status")) {
6524
6691
  preSelectSourceStepRef.current = state.step;
6525
6692
  dispatch({ type: "NAVIGATE", step: "select-source" });
6526
6693
  } else if (!pendingSelectSourceAction && state.step === "select-source") {
@@ -6556,7 +6723,8 @@ function SwypePaymentInner({
6556
6723
  },
6557
6724
  onSelectSourceChainChange: handleSelectSourceChainChange,
6558
6725
  onSetSelectSourceTokenSymbol: setSelectSourceTokenSymbol,
6559
- onConfirmSelectSource: handleConfirmSelectSource
6726
+ onConfirmSelectSource: handleConfirmSelectSource,
6727
+ onSetupOneTap: handleSetupOneTap
6560
6728
  }), [
6561
6729
  handleSendLoginCode,
6562
6730
  handleVerifyLoginCode,
@@ -6574,7 +6742,8 @@ function SwypePaymentInner({
6574
6742
  handleLogout,
6575
6743
  handleNewPayment,
6576
6744
  handleSelectSourceChainChange,
6577
- handleConfirmSelectSource
6745
+ handleConfirmSelectSource,
6746
+ handleSetupOneTap
6578
6747
  ]);
6579
6748
  return /* @__PURE__ */ jsx(
6580
6749
  StepRenderer,